mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 23:44:11 +01:00
Compare commits
14 Commits
2.6.1
...
itop-carbo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b0414748cb | ||
|
|
b6418d95e7 | ||
|
|
2d6251e5df | ||
|
|
91f410a85c | ||
|
|
0a48696cd8 | ||
|
|
2f71570390 | ||
|
|
78b6c03af7 | ||
|
|
22342cdc05 | ||
|
|
dcf4963e0c | ||
|
|
9ec36a76f6 | ||
|
|
09b470e6c7 | ||
|
|
40151c7a43 | ||
|
|
34c030b501 | ||
|
|
c59d3cc624 |
@@ -395,6 +395,7 @@ EOF
|
||||
{
|
||||
foreach($aFields as $oField)
|
||||
{
|
||||
/** @var \DesignerFormField $oField */
|
||||
$oField->ReadParam($aValues);
|
||||
}
|
||||
}
|
||||
@@ -679,18 +680,34 @@ class DesignerTabularForm extends DesignerForm
|
||||
|
||||
class DesignerFormField
|
||||
{
|
||||
/** @var string $sLabel */
|
||||
protected $sLabel;
|
||||
/** @var string $sCode */
|
||||
protected $sCode;
|
||||
/** @var mixed $defaultValue */
|
||||
protected $defaultValue;
|
||||
/** @var \DesignerForm $oForm */
|
||||
protected $oForm;
|
||||
/** @var bool $bMandatory */
|
||||
protected $bMandatory;
|
||||
/** @var bool $bReadOnly */
|
||||
protected $bReadOnly;
|
||||
/** @var bool $bAutoApply */
|
||||
protected $bAutoApply;
|
||||
/** @var array $aCSSClasses */
|
||||
protected $aCSSClasses;
|
||||
/** @var bool $bDisplayed */
|
||||
protected $bDisplayed;
|
||||
/** @var array $aWidgetExtraParams */
|
||||
protected $aWidgetExtraParams;
|
||||
|
||||
|
||||
/**
|
||||
* DesignerFormField constructor.
|
||||
*
|
||||
* @param string $sCode
|
||||
* @param string $sLabel
|
||||
* @param mixed $defaultValue
|
||||
*/
|
||||
public function __construct($sCode, $sLabel, $defaultValue)
|
||||
{
|
||||
$this->sLabel = $sLabel;
|
||||
@@ -703,7 +720,10 @@ class DesignerFormField
|
||||
$this->bDisplayed = true;
|
||||
$this->aWidgetExtraParams = array();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function GetCode()
|
||||
{
|
||||
return $this->sCode;
|
||||
@@ -712,69 +732,108 @@ class DesignerFormField
|
||||
/**
|
||||
* @param \DesignerForm $oForm
|
||||
*/
|
||||
public function SetForm(\DesignerForm $oForm)
|
||||
public function SetForm(DesignerForm $oForm)
|
||||
{
|
||||
$this->oForm = $oForm;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param bool $bMandatory
|
||||
*/
|
||||
public function SetMandatory($bMandatory = true)
|
||||
{
|
||||
$this->bMandatory = $bMandatory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $bReadOnly
|
||||
*/
|
||||
public function SetReadOnly($bReadOnly = true)
|
||||
{
|
||||
$this->bReadOnly = $bReadOnly;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function IsReadOnly()
|
||||
{
|
||||
return ($this->oForm->IsReadOnly() || $this->bReadOnly);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $bAutoApply
|
||||
*/
|
||||
public function SetAutoApply($bAutoApply)
|
||||
{
|
||||
$this->bAutoApply = $bAutoApply;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function IsAutoApply()
|
||||
{
|
||||
return $this->bAutoApply;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $bDisplayed
|
||||
*/
|
||||
public function SetDisplayed($bDisplayed)
|
||||
{
|
||||
$this->bDisplayed = $bDisplayed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function IsDisplayed()
|
||||
{
|
||||
return $this->bDisplayed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function GetFieldId()
|
||||
{
|
||||
return $this->oForm->GetFieldId($this->sCode);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function GetWidgetClass()
|
||||
{
|
||||
return 'property_field';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function GetWidgetExtraParams()
|
||||
{
|
||||
return $this->aWidgetExtraParams;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param \WebPage $oP
|
||||
* @param string $sFormId
|
||||
* @param string $sRenderMode
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function Render(WebPage $oP, $sFormId, $sRenderMode='dialog')
|
||||
{
|
||||
$sId = $this->oForm->GetFieldId($this->sCode);
|
||||
$sName = $this->oForm->GetFieldName($this->sCode);
|
||||
return array('label' => $this->sLabel, 'value' => "<input type=\"text\" id=\"$sId\" name=\"$sName\" value=\"".htmlentities($this->defaultValue, ENT_QUOTES, 'UTF-8')."\">");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $aValues
|
||||
*/
|
||||
public function ReadParam(&$aValues)
|
||||
{
|
||||
if ($this->IsReadOnly())
|
||||
@@ -801,12 +860,18 @@ class DesignerFormField
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function IsVisible()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $sCSSClass
|
||||
*/
|
||||
public function AddCSSClass($sCSSClass)
|
||||
{
|
||||
$this->aCSSClasses[] = $sCSSClass;
|
||||
@@ -814,6 +879,8 @@ class DesignerFormField
|
||||
|
||||
/**
|
||||
* A way to set/change the default value after constructing the field
|
||||
*
|
||||
* @param array $aAllDefaultValue
|
||||
*/
|
||||
public function SetDefaultValueFrom($aAllDefaultValue)
|
||||
{
|
||||
@@ -822,7 +889,12 @@ class DesignerFormField
|
||||
$this->defaultValue = $aAllDefaultValue[$this->GetCode()];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $sFieldCode
|
||||
*
|
||||
* @return \DesignerFormField|false
|
||||
*/
|
||||
public function FindField($sFieldCode)
|
||||
{
|
||||
if ($this->sCode == $sFieldCode)
|
||||
@@ -832,11 +904,17 @@ class DesignerFormField
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function GetHandlerEquals()
|
||||
{
|
||||
return 'null';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function GetHandlerGetValue()
|
||||
{
|
||||
return 'null';
|
||||
@@ -845,25 +923,43 @@ class DesignerFormField
|
||||
|
||||
class DesignerLabelField extends DesignerFormField
|
||||
{
|
||||
/** @var int $iCount A counter to automatically make the field code */
|
||||
protected static $iCount = 0;
|
||||
/** @var string $sDescription */
|
||||
protected $sDescription;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function __construct($sLabel, $sDescription)
|
||||
{
|
||||
parent::__construct('', $sLabel, '');
|
||||
// Increase counter
|
||||
static::$iCount++;
|
||||
|
||||
parent::__construct('label_number_' . static::$iCount, $sLabel, '');
|
||||
$this->sDescription = $sDescription;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function Render(WebPage $oP, $sFormId, $sRenderMode='dialog')
|
||||
{
|
||||
$sId = $this->oForm->GetFieldId($this->sCode);
|
||||
$sName = $this->oForm->GetFieldName($this->sCode);
|
||||
return array('label' => $this->sLabel, 'value' => $this->sDescription);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function ReadParam(&$aValues)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function IsVisible()
|
||||
{
|
||||
return true;
|
||||
@@ -1334,7 +1430,8 @@ class DesignerIconSelectionField extends DesignerFormField
|
||||
$sPostUploadTo = ($this->sUploadUrl == null) ? 'null' : "'{$this->sUploadUrl}'";
|
||||
if (!$this->IsReadOnly())
|
||||
{
|
||||
$sValue = "<input type=\"hidden\" id=\"$sId\" name=\"$sName\" value=\"{$this->defaultValue}\"/>";
|
||||
$sDefaultValue = ($this->defaultValue !== '') ? : $this->aAllowedValues[$idx]['value'];
|
||||
$sValue = "<input type=\"hidden\" id=\"$sId\" name=\"$sName\" value=\"{$sDefaultValue}\"/>";
|
||||
$oP->add_ready_script(
|
||||
<<<EOF
|
||||
$('#$sId').icon_select({current_idx: $idx, items: $sJSItems, post_upload_to: $sPostUploadTo});
|
||||
|
||||
@@ -602,17 +602,19 @@ class utils
|
||||
/**
|
||||
* Format a value into a more friendly format (KB, MB, GB, TB) instead a juste a Bytes amount.
|
||||
*
|
||||
* @param type $value
|
||||
* @param int $value
|
||||
* @return string
|
||||
*/
|
||||
public static function BytesToFriendlyFormat($value)
|
||||
{
|
||||
$sReturn = '';
|
||||
$iPrecision = 0;
|
||||
// Kilobytes
|
||||
if ($value >= 1024)
|
||||
{
|
||||
$sReturn = 'K';
|
||||
$value = $value / 1024;
|
||||
$iPrecision = 1;
|
||||
}
|
||||
// Megabytes
|
||||
if ($value >= 1024)
|
||||
@@ -633,7 +635,7 @@ class utils
|
||||
$value = $value / 1024;
|
||||
}
|
||||
|
||||
$value = round($value, 1);
|
||||
$value = round($value, $iPrecision);
|
||||
|
||||
return $value . '' . $sReturn . 'B';
|
||||
}
|
||||
|
||||
@@ -2398,6 +2398,12 @@ a.summary, a.summary:hover {
|
||||
background: url(../images/ok.png?v=v2.6.1) 1em 1em no-repeat #cfc;
|
||||
padding-left: 3em;
|
||||
}
|
||||
.message_warning {
|
||||
border: 1px solid #ec9800;
|
||||
background: url(../images/error.png?v=v2.6.1) 1em 1em no-repeat #ffd78d;
|
||||
color: #000;
|
||||
padding-left: 3em;
|
||||
}
|
||||
.message_error {
|
||||
border: 1px solid #933;
|
||||
background: url(../images/error.png?v=v2.6.1) 1em 1em no-repeat #fcc;
|
||||
@@ -2927,6 +2933,17 @@ table.listResults .originColor {
|
||||
.menu-icon-select > .ui-menu-item {
|
||||
padding: 0.3em 3%;
|
||||
}
|
||||
.menu-icon-select > .ui-menu-item > * {
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
overflow-x: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.menu-icon-select > .ui-menu-item > * > img {
|
||||
max-width: 80px;
|
||||
max-height: 45px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.attribute.attribute-set .attribute-set-item::after {
|
||||
content: ",";
|
||||
margin-right: 0.5em;
|
||||
|
||||
@@ -2762,6 +2762,12 @@ a.summary, a.summary:hover {
|
||||
background: url(../images/ok.png?v=#{$version}) 1em 1em no-repeat #cfc;
|
||||
padding-left: 3em;
|
||||
}
|
||||
.message_warning {
|
||||
border: 1px solid #ec9800;
|
||||
background: url(../images/error.png?v=#{$version}) 1em 1em no-repeat #ffd78d;
|
||||
color: #000;
|
||||
padding-left: 3em;
|
||||
}
|
||||
.message_error {
|
||||
border: 1px solid #933;
|
||||
background: url(../images/error.png?v=#{$version}) 1em 1em no-repeat #fcc;
|
||||
@@ -3353,6 +3359,19 @@ table.listResults .originColor{
|
||||
}
|
||||
.menu-icon-select > .ui-menu-item{
|
||||
padding: .3em 3%;
|
||||
|
||||
> *{
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
overflow-x: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
> img{
|
||||
max-width: 80px;
|
||||
max-height: 45px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////
|
||||
|
||||
@@ -256,14 +256,14 @@ $(function()
|
||||
if (oWidget && oWidget._is_visible())
|
||||
{
|
||||
var oVal = oWidget._get_committed_value();
|
||||
oData[oVal.name] = oVal.value;
|
||||
oData[oVal.name] = me._get_value_for_post(oVal.value);
|
||||
}
|
||||
});
|
||||
oPostedData = this.options.submit_parameters;
|
||||
var oPostedData = this.options.submit_parameters;
|
||||
oPostedData.params = oData;
|
||||
oPostedData.params.updated = [ $('#'+this.options.field_id, this.element).attr('name') ]; // only one field updated in this case
|
||||
oPostedData.params.previous_values = {};
|
||||
oPostedData.params.previous_values[oPostedData.params.updated] = this.previous_value; // pass also the previous value(s)
|
||||
oPostedData.params.previous_values[$('#'+this.options.field_id, this.element).attr('name')] = me._get_value_for_post(this.previous_value); // pass also the previous value(s)
|
||||
$.post(this.options.submit_to, oPostedData, function(data)
|
||||
{
|
||||
$('#prop_submit_result').html(data);
|
||||
@@ -293,6 +293,14 @@ $(function()
|
||||
oWidget = element.data('itopSelector_property_field');
|
||||
}
|
||||
return oWidget;
|
||||
},
|
||||
_get_value_for_post: function(value)
|
||||
{
|
||||
if ((typeof value == "object") && (Object.keys(value).length === 0))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return value;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -150,8 +150,8 @@ try
|
||||
$sAuthent = utils::ReadParam('authent', '', false, 'raw_data');
|
||||
if (!file_exists(APPROOT.'data/setup/authent') || $sAuthent !== file_get_contents(APPROOT.'data/setup/authent'))
|
||||
{
|
||||
throw new SecurityException('Setup operations are not allowed outside of the setup');
|
||||
SetupPage::log_error("Setup operations are not allowed outside of the setup");
|
||||
throw new SecurityException('Setup operations are not allowed outside of the setup');
|
||||
}
|
||||
|
||||
switch($sOperation)
|
||||
|
||||
@@ -615,8 +615,8 @@ class ModelFactory
|
||||
|
||||
if (!$oTargetParentNode)
|
||||
{
|
||||
echo "Dumping target doc - looking for '$sParentId'<br/>\n";
|
||||
$this->oDOMDocument->firstChild->Dump();
|
||||
// echo "Dumping target doc - looking for '$sParentId'<br/>\n";
|
||||
// $this->oDOMDocument->firstChild->Dump();
|
||||
$sPath = MFDocument::GetItopNodePath($oSourceNode);
|
||||
$iLine = $oSourceNode->getLineNo();
|
||||
throw new MFException($sPath.' at line '.$iLine.": parent class '$sParentId' could not be found", MFException::PARENT_NOT_FOUND, $iLine, $sPath, $sParentId);
|
||||
@@ -633,8 +633,8 @@ class ModelFactory
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "Dumping target doc - looking for '".$oSourceNode->getAttribute('id')."'<br/>\n";
|
||||
$this->oDOMDocument->firstChild->Dump();
|
||||
// echo "Dumping target doc - looking for '".$oSourceNode->getAttribute('id')."'<br/>\n";
|
||||
// $this->oDOMDocument->firstChild->Dump();
|
||||
$sPath = MFDocument::GetItopNodePath($oSourceNode);
|
||||
$iLine = $oSourceNode->getLineNo();
|
||||
throw new MFException($sPath.' at line '.$iLine.": could not be found", MFException::NOT_FOUND, $iLine, $sPath);
|
||||
@@ -1078,13 +1078,17 @@ class ModelFactory
|
||||
|
||||
/**
|
||||
* Check if the class specified by the given name already exists in the loaded DOM
|
||||
*
|
||||
* @param string $sClassName The node corresponding to the class to load
|
||||
* @throws Exception
|
||||
* @param bool $bIncludeMetas Look for $sClassName also in meta declaration (PHP classes) if not found in XML classes
|
||||
*
|
||||
* @throws \Exception
|
||||
*
|
||||
* @return bool True if the class exists, false otherwise
|
||||
*/
|
||||
protected function ClassNameExists($sClassName)
|
||||
protected function ClassNameExists($sClassName, $bIncludeMetas = false)
|
||||
{
|
||||
return !is_null($this->GetClass($sClassName));
|
||||
return !is_null($this->GetClass($sClassName, $bIncludeMetas));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1190,14 +1194,22 @@ EOF
|
||||
{
|
||||
return $this->GetNodes("/itop_design/classes//class[@id][@_created_in='$sModuleName']");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* List all classes from the DOM
|
||||
* @throws Exception
|
||||
*
|
||||
* @param bool $bIncludeMetas Also look for meta declaration (PHP classes) in addition to XML classes
|
||||
*
|
||||
* @return \DOMNodeList
|
||||
*/
|
||||
public function ListAllClasses()
|
||||
public function ListAllClasses($bIncludeMetas = false)
|
||||
{
|
||||
return $this->GetNodes("/itop_design/classes//class[@id]");
|
||||
$sXPath = "/itop_design/classes//class[@id]";
|
||||
if($bIncludeMetas === true)
|
||||
{
|
||||
$sXPath .= "|/itop_design/meta/classes/class[@id]";
|
||||
}
|
||||
return $this->GetNodes($sXPath);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1210,13 +1222,22 @@ EOF
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $sClassName
|
||||
* @param string $sClassName
|
||||
* @param bool $bIncludeMetas Look for $sClassName also in meta declaration (PHP classes) if not found in XML classes
|
||||
*
|
||||
* @return \DOMElement
|
||||
* @return null|\DOMElement
|
||||
*/
|
||||
public function GetClass($sClassName)
|
||||
public function GetClass($sClassName, $bIncludeMetas = false)
|
||||
{
|
||||
// Check if class among XML classes
|
||||
$oClassNode = $this->GetNodes("/itop_design/classes//class[@id='$sClassName']")->item(0);
|
||||
|
||||
// If not, check if class among exposed meta classes (PHP classes)
|
||||
if(is_null($oClassNode) && ($bIncludeMetas === true))
|
||||
{
|
||||
$oClassNode = $this->GetNodes("/itop_design/meta/classes/class[@id='$sClassName']")->item(0);
|
||||
}
|
||||
|
||||
return $oClassNode;
|
||||
}
|
||||
|
||||
@@ -1764,6 +1785,7 @@ EOF;
|
||||
/**
|
||||
* MFElement: helper to read/change the DOM
|
||||
* @package ModelFactory
|
||||
* @property \MFDocument $ownerDocument This is only here for type hinting as iTop replaces \DOMDocument with \MFDocument
|
||||
*/
|
||||
class MFElement extends Combodo\iTop\DesignElement
|
||||
{
|
||||
@@ -2286,8 +2308,8 @@ class MFElement extends Combodo\iTop\DesignElement
|
||||
{
|
||||
if ($bMustExist)
|
||||
{
|
||||
echo "Dumping parent node<br/>\n";
|
||||
$oContainer->Dump();
|
||||
//echo "Dumping parent node<br/>\n";
|
||||
//$oContainer->Dump();
|
||||
throw new Exception(MFDocument::GetItopNodePath($this).' at line '.$this->getLineNo().": could not be found");
|
||||
}
|
||||
if (!$bIfExists)
|
||||
@@ -2358,6 +2380,7 @@ class MFElement extends Combodo\iTop\DesignElement
|
||||
case 'added':
|
||||
case 'replaced':
|
||||
case 'needed':
|
||||
case 'forced':
|
||||
// marked as added or modified, just reset the flag
|
||||
$oNode->removeAttribute('_alteration');
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user