diff --git a/css/backoffice/pages/_data-synchro.scss b/css/backoffice/pages/_data-synchro.scss index 6f29a160e..636668c95 100644 --- a/css/backoffice/pages/_data-synchro.scss +++ b/css/backoffice/pages/_data-synchro.scss @@ -45,6 +45,9 @@ $ibo-data-synchro-source--replicas-status--color: ( background-color: $bg-color; } } +.ibo-data-synchro-source--replicas-status-separator { + border-top: 2px solid $ibo-color-white-100; +} .ibo-data-synchro-source--replicas-status.ibo-is-light{ opacity: $ibo-data-synchro-source--replicas-status--is-light--opacity; @@ -57,8 +60,9 @@ $ibo-data-synchro-source--replicas-status--color: ( min-width: $ibo-data-synchro-source--replicas-table--cell--min-width; vertical-align: middle; text-align: center; - &.arrow{ + &.arrow { min-width: $ibo-data-synchro-source--replicas-table--cell--arrow--min-width; + border-top: 2px solid $ibo-color-grey-50; } } .ibo-data-synchro-source--replicas-status--warning{ diff --git a/synchro/synchrodatasource.class.inc.php b/synchro/synchrodatasource.class.inc.php index 4d4b2b143..9731a0559 100644 --- a/synchro/synchrodatasource.class.inc.php +++ b/synchro/synchrodatasource.class.inc.php @@ -8,27 +8,28 @@ class SynchroDataSource extends cmdbAbstractObject { public static function Init() { - $aParams = array - ( - 'category' => 'core/cmdb,view_in_gui,grant_by_profile', - 'key_type' => 'autoincrement', - 'name_attcode' => array('name'), - 'state_attcode' => '', - 'reconc_keys' => array(), - 'db_table' => 'priv_sync_datasource', - 'db_key_field' => 'id', + $oStyle = new ormStyle("", ""); + $oStyle->SetIcon('../images/synchro.png'); + $aParams = [ + 'category' => 'core/cmdb,view_in_gui,grant_by_profile', + 'key_type' => 'autoincrement', + 'name_attcode' => array('name'), + 'state_attcode' => '', + 'reconc_keys' => array(), + 'db_table' => 'priv_sync_datasource', + 'db_key_field' => 'id', 'db_finalclass_field' => 'realclass', - 'display_template' => '', - 'icon' => '../images/synchro.png', - ); + 'display_template' => '', + 'style' => $oStyle, + ]; MetaModel::Init_Params($aParams); //MetaModel::Init_InheritAttributes(); MetaModel::Init_AddAttribute(new AttributeString('name', array( - 'allowed_values' => null, - 'sql' => 'name', - 'default_value' => null, + 'allowed_values' => null, + 'sql' => 'name', + 'default_value' => null, 'is_null_allowed' => false, - 'depends_on' => array(), + 'depends_on' => array(), ))); MetaModel::Init_AddAttribute(new AttributeText('description', array( 'allowed_values' => null, @@ -458,6 +459,13 @@ class SynchroDataSource extends cmdbAbstractObject var aValues = aSynchroLog[id]; if (aValues == undefined) return; + for (var sKey in aValues) + { + $('#c_'+sKey).html(aValues[sKey]); + var fOpacity = (aValues[sKey] == 0) ? 0.3 : 1; + $('#'+sKey).fadeTo("slow", fOpacity); + } + //alert('id = '+id+', lastLog='+sLastLog+', id==sLastLog: '+(id==sLastLog)+' obj_updated_errors: '+aValues['obj_updated_errors']); if ( (id == sLastLog) && (aValues['obj_new_errors'] > 0) ) { @@ -502,9 +510,9 @@ JS; // Now build the big "synoptics" view $aData = $this->ProcessLog($oLastLog); - $sNbReplica = $this->GetIcon().' '.Dict::Format('Core:Synchro:Nb_Replica', + $sNbReplica = ' '.Dict::Format('Core:Synchro:Nb_Replica', "{$aData['nb_replica_total']}"); - $sNbObjects = MetaModel::GetClassIcon($this->GetTargetClass()).' '.Dict::Format('Core:Synchro:Nb_Class:Objects', + $sNbObjects = ' '.Dict::Format('Core:Synchro:Nb_Class:Objects', $this->GetTargetClass(), "{$aData['nb_obj_total']}"); $oPage->add( <<GetKey()." AND status_last_error!=''"; - $oPage->add($this->HtmlBox('repl_ignored', $aData, 'grey').' '); + $oPage->add($this->HtmlBox('repl_ignored', $aData, 'grey', '', '', 'ibo-data-synchro-source--replicas-status-separator').' '); $oPage->add("\n"); $oPage->add($this->HtmlBox('repl_disappeared', $aData, 'orange', - 'rowspan="4"').''.$this->HtmlBox('obj_disappeared_no_action', $aData, 'grey')); + 'rowspan="4"', '', 'ibo-data-synchro-source--replicas-status-separator').''.$this->HtmlBox('obj_disappeared_no_action', $aData, 'grey', '', '', 'ibo-data-synchro-source--replicas-status-separator')); $oPage->add("\n"); $oPage->add($this->HtmlBox('obj_deleted', $aData, 'bluegrey')); $oPage->add("\n"); @@ -530,7 +538,7 @@ EOF " Show")); $oPage->add("\n"); $oPage->add($this->HtmlBox('repl_existing', $aData, 'green', - 'rowspan="3"').''.$this->HtmlBox('obj_unchanged', $aData, 'blue')); + 'rowspan="3"', '', 'ibo-data-synchro-source--replicas-status-separator').''.$this->HtmlBox('obj_unchanged', $aData, 'blue', '', '', 'ibo-data-synchro-source--replicas-status-separator')); $oPage->add("\n"); $oPage->add($this->HtmlBox('obj_updated', $aData, 'green')); $oPage->add("\n"); @@ -539,7 +547,7 @@ EOF " Show")); $oPage->add("\n"); $oPage->add($this->HtmlBox('repl_new', $aData, 'cyan', - 'rowspan="4"').''.$this->HtmlBox('obj_new_unchanged', $aData, 'blue')); + 'rowspan="4"', '', 'ibo-data-synchro-source--replicas-status-separator').''.$this->HtmlBox('obj_new_unchanged', $aData, 'blue', '', '', 'ibo-data-synchro-source--replicas-status-separator')); $oPage->add("\n"); $oPage->add($this->HtmlBox('obj_new_updated', $aData, 'green')); $oPage->add("\n"); @@ -552,25 +560,22 @@ EOF $oPage->add(''); $oPage->add('
'); $oPage->add_ready_script("UpdateSynoptics('$iLastLog')"); - } - else - { + } else { $oPage->p('

'.Dict::S('Core:Synchro:NeverRun').'

'); } } - protected function HtmlBox($sId, $aData, $sColor, $sHTMLAttribs = '', $sErrorLink = '') + protected function HtmlBox($sId, $aData, $sColor, $sHTMLAttribs = '', $sErrorLink = '', $sAdditionalCss = "") { $iCount = $aData[$sId]; $sCount = "$iCount"; $sLabel = Dict::Format('Core:Synchro:label_'.$sId, $sCount); $sOpacity = ($iCount == 0) ? 'ibo-is-light' : ''; - if (isset($aData[$sId.'_warnings'])) - { + if (isset($aData[$sId.'_warnings'])) { $sLabel .= " (".$aData[$sId.'_warnings'].')'; } - return ''.$sLabel.$sErrorLink.''; + return ''.$sLabel.$sErrorLink.''; } protected function ProcessLog($oLastLog) @@ -605,13 +610,10 @@ EOF $aData['repl_ignored'] = $iIgnored; $aData['nb_obj_total'] = $iNew + $iExisting + $iDisappeared; $aData['nb_replica_total'] = $aData['nb_obj_total'] + $iIgnored; - if (strlen($oLastLog->Get('traces')) > 0) - { - $aData['traces'] = '
Debug traces
'.htmlentities($oLastLog->Get('traces'), ENT_QUOTES,
+		if (strlen($oLastLog->Get('traces')) > 0) {
+			$aData['traces'] = '
Debug traces
'.htmlentities($oLastLog->Get('traces'), ENT_QUOTES,
 					'UTF-8').'
'; - } - else - { + } else { $aData['traces'] = ''; } @@ -1544,7 +1546,7 @@ class SynchroAttExtKey extends SynchroAttribute public function GetReconciliationFormElement($sTargetClass, $sFieldName) { - $sHtml = "\n"; // Id $sSelected = ('' == $this->Get('reconciliation_attcode')) ? ' selected' : ''; $sHtml .= "\n"; @@ -1558,22 +1560,19 @@ class SynchroAttExtKey extends SynchroAttribute // Then add all remaining scalar attributes, sorted alphabetically $aMoreOptions = array(); - foreach (MetaModel::ListAttributeDefs($sTargetClass) as $sAttCode => $oAttDef) - { - if ($oAttDef->IsScalar() && ($sAttCode != 'friendlyname')) - { + foreach (MetaModel::ListAttributeDefs($sTargetClass) as $sAttCode => $oAttDef) { + if ($oAttDef->IsScalar() && ($sAttCode != 'friendlyname')) { $sSelected = ($sAttCode == $this->Get('reconciliation_attcode')) ? ' selected' : ''; $aMoreOptions[MetaModel::GetLabel($sTargetClass, $sAttCode)] = "\n"; } } ksort($aMoreOptions); - foreach ($aMoreOptions as $sOption) - { + foreach ($aMoreOptions as $sOption) { $sHtml .= $sOption; } - $sHtml .= "\n"; + $sHtml .= "\n"; return $sHtml; } @@ -2804,19 +2803,17 @@ class SynchroReplica extends DBObject implements iDisplay function DisplayBareProperties(WebPage $oPage, $bEditMode = false, $sPrefix = '', $aExtraParams = array()) { - if ($bEditMode) - { + if ($bEditMode) { return; } // Not editable $oPage->add('
'); $aDetails = array(); $sClass = get_class($this); - $oPage->add('
'); + $oPage->add('
'); $oPage->add(''.Dict::S('Core:SynchroReplica:PrivateDetails').''); $aZList = MetaModel::FlattenZlist(MetaModel::GetZListItems($sClass, 'details')); - foreach ($aZList as $sAttCode) - { + foreach ($aZList as $sAttCode) { $sDisplayValue = $this->GetAsHTML($sAttCode); $aDetails[] = array( 'label' => ''.MetaModel::GetLabel($sClass, @@ -2836,19 +2833,19 @@ class SynchroReplica extends DBObject implements iDisplay $bCanDisplayDestObjSections = UserRights::IsActionAllowed($sDestClass, UR_ACTION_READ, DBObjectSet::FromObject($oDestObj)); if ($bCanDisplayDestObjSections) { - $oPage->add('
'); + $oPage->add('
'); $oPage->add(''.Dict::Format('Core:SynchroReplica:TargetObject', $oDestObj->GetHyperlink()).''); $oDestObj->DisplayBareProperties($oPage, false, $sPrefix, $aExtraParams); $oPage->add('
'); } } else { - $bCanDisplayDestObjSections = false; + $bCanDisplayDestObjSections = UserRights::IsActionAllowed($sDestClass, UR_ACTION_READ, null); } } if ($bCanDisplayDestObjSections) { $oPage->add('
'); - $oPage->add('
'); + $oPage->add('
'); $oPage->add(''.Dict::S('Core:SynchroReplica:PublicData').''); $oSource = MetaModel::GetObject('SynchroDataSource', $this->Get('sync_source_id')); @@ -2857,7 +2854,7 @@ class SynchroReplica extends DBObject implements iDisplay $aHeaders = array( 'attcode' => array('label' => 'Attribute Code', 'description' => ''), - 'data' => array('label' => 'Value', 'description' => ''), + 'data' => array('label' => 'Value', 'description' => ''), ); $aRows = array(); foreach ($aData as $sKey => $value) {