mirror of
https://github.com/Combodo/iTop.git
synced 2026-06-01 05:32:17 +02:00
Compare commits
10 Commits
develop
...
faf/operat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35c2575525 | ||
|
|
e47c181e4d | ||
|
|
fc0b7fcc8c | ||
|
|
4bcac389cc | ||
|
|
ff24f5467a | ||
|
|
663c956c21 | ||
|
|
c217204d7d | ||
|
|
30da26704b | ||
|
|
289a3ba527 | ||
|
|
1176b3af07 |
@@ -524,6 +524,12 @@ JS
|
|||||||
$sLabel = Dict::S('Tag:Synchronized');
|
$sLabel = Dict::S('Tag:Synchronized');
|
||||||
$sSynchroTagId = 'synchro_icon-'.$this->GetKey();
|
$sSynchroTagId = 'synchro_icon-'.$this->GetKey();
|
||||||
$aTags[$sSynchroTagId] = ['title' => $sTip, 'css_classes' => 'ibo-object-details--tag--synchronized', 'decoration_classes' => 'fas fa-lock', 'label' => $sLabel];
|
$aTags[$sSynchroTagId] = ['title' => $sTip, 'css_classes' => 'ibo-object-details--tag--synchronized', 'decoration_classes' => 'fas fa-lock', 'label' => $sLabel];
|
||||||
|
if (UserRights::IsActionAllowed('SynchroReplica', UR_ACTION_READ)) {
|
||||||
|
$oDBSearch = DBObjectSearch::FromOQL('SELECT SynchroReplica WHERE dest_class=:sClass AND dest_id=:id');;
|
||||||
|
$sFilter = rawurlencode($oDBSearch->serialize(false,['sClass'=>get_class($this),'id'=>$this->GetKey()]));
|
||||||
|
$sUrlSearchReplica = 'UI.php?operation=search&filter='.$sFilter;
|
||||||
|
$oPage->add_ready_script("$('#$sSynchroTagId').on('click',function() {window.location = '$sUrlSearchReplica' });");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1947,7 +1947,7 @@ class MenuBlock extends DisplayBlock
|
|||||||
$sSelectedClassName = MetaModel::GetName($sSelectedClass);
|
$sSelectedClassName = MetaModel::GetName($sSelectedClass);
|
||||||
|
|
||||||
// Check rights on class
|
// Check rights on class
|
||||||
$bIsBulkModifyAllowed = (!MetaModel::IsAbstract($sSelectedClass)) && UserRights::IsActionAllowed($sSelectedClass, UR_ACTION_BULK_MODIFY) && ($oReflectionClass->IsSubclassOf('cmdbAbstractObject'));
|
$bIsBulkModifyAllowed = (!MetaModel::IsAbstract($sSelectedClass)) && UserRights::IsActionAllowed($sSelectedClass, UR_ACTION_BULK_MODIFY) && (($oReflectionClass->IsSubclassOf('cmdbAbstractObject') || $sSelectedClass === 'SynchroReplica'));
|
||||||
$bIsBulkDeleteAllowed = (bool) UserRights::IsActionAllowed($sSelectedClass, UR_ACTION_BULK_DELETE);
|
$bIsBulkDeleteAllowed = (bool) UserRights::IsActionAllowed($sSelectedClass, UR_ACTION_BULK_DELETE);
|
||||||
|
|
||||||
// Refine filter on selected class so bullk actions occur on the right class
|
// Refine filter on selected class so bullk actions occur on the right class
|
||||||
@@ -1958,7 +1958,15 @@ class MenuBlock extends DisplayBlock
|
|||||||
// Action label dict code has a specific suffix for "Link" / "Remote" aliases to allow dedicated labels in linksets.
|
// Action label dict code has a specific suffix for "Link" / "Remote" aliases to allow dedicated labels in linksets.
|
||||||
$sActionLabelCodeSuffix = in_array($sSelectedAlias, ['Link', 'Remote']) ? $sSelectedAlias : 'Class';
|
$sActionLabelCodeSuffix = in_array($sSelectedAlias, ['Link', 'Remote']) ? $sSelectedAlias : 'Class';
|
||||||
if ($bIsBulkModifyAllowed) {
|
if ($bIsBulkModifyAllowed) {
|
||||||
$this->AddBulkModifyObjectsMenuAction($aRegularActions, $sSelectedClass, $oSelectedClassFilter->serialize(), 'UI:Menu:ModifyAll:'.$sSelectedAlias, Dict::Format('UI:Menu:ModifyAll_'.$sActionLabelCodeSuffix, $sSelectedClassName));
|
if($sSelectedClass === 'SynchroReplica'){
|
||||||
|
$this->AddBulkModifyObjectsMenuAction($aRegularActions, $sSelectedClass, $oSelectedClassFilter->serialize(), 'UI:Menu:UnlinkAll:', Dict::S('Class:SynchroReplica/Action:unlink_all'),'unlink');
|
||||||
|
$this->AddBulkModifyObjectsMenuAction($aRegularActions, $sSelectedClass, $oSelectedClassFilter->serialize(), 'UI:Menu:UnLinkSynchroAll:', Dict::S('Class:SynchroReplica/Action:unlinksynchro_all'),'unlinksynchro');
|
||||||
|
$this->AddBulkModifyObjectsMenuAction($aRegularActions, $sSelectedClass, $oSelectedClassFilter->serialize(), 'UI:Menu:SynchroAll:', Dict::S('Class:SynchroReplica/Action:synchro_all'),'synchro');
|
||||||
|
$this->AddBulkModifyObjectsMenuAction($aRegularActions, $sSelectedClass, $oSelectedClassFilter->serialize(), 'UI:Menu:AllowDeleteAll:', Dict::S('Class:SynchroReplica/Action:allowdelete_all'),'allowdelete');
|
||||||
|
$this->AddBulkModifyObjectsMenuAction($aRegularActions, $sSelectedClass, $oSelectedClassFilter->serialize(), 'UI:Menu:DenyDeleteAll:', Dict::S('Class:SynchroReplica/Action:denydelete_all'),'denydelete');
|
||||||
|
} else {
|
||||||
|
$this->AddBulkModifyObjectsMenuAction($aRegularActions, $sSelectedClass, $oSelectedClassFilter->serialize(), 'UI:Menu:ModifyAll:'.$sSelectedAlias, Dict::Format('UI:Menu:ModifyAll_'.$sActionLabelCodeSuffix, $sSelectedClassName));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($bIsBulkDeleteAllowed) {
|
if ($bIsBulkDeleteAllowed) {
|
||||||
$this->AddBulkDeleteObjectsMenuAction($aRegularActions, $sSelectedClass, $oSelectedClassFilter->serialize(), 'UI:Menu:BulkDelete:'.$sSelectedAlias, Dict::Format('UI:Menu:BulkDelete_'.$sActionLabelCodeSuffix, $sSelectedClassName));
|
$this->AddBulkDeleteObjectsMenuAction($aRegularActions, $sSelectedClass, $oSelectedClassFilter->serialize(), 'UI:Menu:BulkDelete:'.$sSelectedAlias, Dict::Format('UI:Menu:BulkDelete_'.$sActionLabelCodeSuffix, $sSelectedClassName));
|
||||||
@@ -2478,11 +2486,11 @@ class MenuBlock extends DisplayBlock
|
|||||||
* @since 3.1.0
|
* @since 3.1.0
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
protected function AddBulkModifyObjectsMenuAction(array &$aActions, string $sClass, string $sFilter, string $sActionIdentifier = 'UI:Menu:ModifyAll', $sActionLabel = 'UI:Menu:ModifyAll'): void
|
protected function AddBulkModifyObjectsMenuAction(array &$aActions, string $sClass, string $sFilter, string $sActionIdentifier = 'UI:Menu:ModifyAll', $sActionLabel = 'UI:Menu:ModifyAll', $sOperationName = 'modify'): void
|
||||||
{
|
{
|
||||||
$aActions[$sActionIdentifier] = [
|
$aActions[$sActionIdentifier] = [
|
||||||
'label' => Dict::S($sActionLabel),
|
'label' => Dict::S($sActionLabel),
|
||||||
'url' => $this->PrepareUrlForStandardMenuAction($sClass, "operation=select_for_modify_all&class=$sClass&filter=".urlencode($sFilter)),
|
'url' => $this->PrepareUrlForStandardMenuAction($sClass, 'operation=select_for_'.$sOperationName.'_all&class='.$sClass.'&filter='.urlencode($sFilter)),
|
||||||
] + $this->GetDefaultParamsForMenuAction();
|
] + $this->GetDefaultParamsForMenuAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,4 +80,14 @@ $ibo-data-synchro-source--synoptics--cell--arrow--border: 2px solid $ibo-data-sy
|
|||||||
}
|
}
|
||||||
.ibo-data-synchro-source--replicas-status--warning{
|
.ibo-data-synchro-source--replicas-status--warning{
|
||||||
margin: $ibo-data-synchro-source--replicas-status--warning--margin;
|
margin: $ibo-data-synchro-source--replicas-status--warning--margin;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ibo-page-header--replica-title{
|
||||||
|
display: table;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
>.ibo-toolbar--button{
|
||||||
|
display: table-cell;
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -976,6 +976,39 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Poslední varování',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Poslední varování',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Datum vytvoření',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Datum vytvoření',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Datum poslední úpravy',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Datum poslední úpravy',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Uživatelské předvolby',
|
'Class:appUserPreferences' => 'Uživatelské předvolby',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Uživatel',
|
'Class:appUserPreferences/Attribute:userid' => 'Uživatel',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Předvolby',
|
'Class:appUserPreferences/Attribute:preferences' => 'Předvolby',
|
||||||
|
|||||||
@@ -975,6 +975,39 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Advarsler',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Advarsler',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Oprettelses Dato',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Oprettelses Dato',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Sidste Ændrings Dato',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Sidste Ændrings Dato',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Bruger Indstillinger',
|
'Class:appUserPreferences' => 'Bruger Indstillinger',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Bruger',
|
'Class:appUserPreferences/Attribute:userid' => 'Bruger',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Inst.',
|
'Class:appUserPreferences/Attribute:preferences' => 'Inst.',
|
||||||
|
|||||||
@@ -972,6 +972,39 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Letzte Warnung',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Letzte Warnung',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Erzeugungs-Datum',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Erzeugungs-Datum',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Datum der letzten Modifikation',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Datum der letzten Modifikation',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Benutzer-Voreinstellungen',
|
'Class:appUserPreferences' => 'Benutzer-Voreinstellungen',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Benutzer',
|
'Class:appUserPreferences/Attribute:userid' => 'Benutzer',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Voreinstellungen',
|
'Class:appUserPreferences/Attribute:preferences' => 'Voreinstellungen',
|
||||||
|
|||||||
@@ -982,7 +982,7 @@ The hyperlink is displayed in the tooltip appearing on the “Lock” symbol of
|
|||||||
'Core:SynchroReplica:PublicData' => 'Public Data',
|
'Core:SynchroReplica:PublicData' => 'Public Data',
|
||||||
'Core:SynchroReplica:PrivateDetails' => 'Private Details',
|
'Core:SynchroReplica:PrivateDetails' => 'Private Details',
|
||||||
'Core:SynchroReplica:BackToDataSource' => 'Go Back to the Synchro Data Source: %1$s',
|
'Core:SynchroReplica:BackToDataSource' => 'Go Back to the Synchro Data Source: %1$s',
|
||||||
'Core:SynchroReplica:ListOfReplicas' => 'List of Replica',
|
'Core:SynchroReplica:ListOfReplicas' => 'Replicas of the data source: %1$s',
|
||||||
'Core:SynchroAttExtKey:ReconciliationById' => 'id (Primary Key)',
|
'Core:SynchroAttExtKey:ReconciliationById' => 'id (Primary Key)',
|
||||||
'Core:SynchroAtt:attcode' => 'Attribute',
|
'Core:SynchroAtt:attcode' => 'Attribute',
|
||||||
'Core:SynchroAtt:attcode+' => 'Field of the object',
|
'Core:SynchroAtt:attcode+' => 'Field of the object',
|
||||||
@@ -1036,65 +1036,99 @@ The hyperlink is displayed in the tooltip appearing on the “Lock” symbol of
|
|||||||
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Rows separator',
|
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Rows separator',
|
||||||
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attributes separator',
|
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attributes separator',
|
||||||
'Class:SynchroLog' => 'Synchro Log',
|
'Class:SynchroLog' => 'Synchro Log',
|
||||||
'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Data Source',
|
'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Data Source',
|
||||||
'Class:SynchroLog/Attribute:start_date' => 'Start Date',
|
'Class:SynchroLog/Attribute:start_date' => 'Start Date',
|
||||||
'Class:SynchroLog/Attribute:end_date' => 'End Date',
|
'Class:SynchroLog/Attribute:end_date' => 'End Date',
|
||||||
'Class:SynchroLog/Attribute:status' => 'Status',
|
'Class:SynchroLog/Attribute:status' => 'Status',
|
||||||
'Class:SynchroLog/Attribute:status/Value:completed' => 'Completed',
|
'Class:SynchroLog/Attribute:status/Value:completed' => 'Completed',
|
||||||
'Class:SynchroLog/Attribute:status/Value:error' => 'Error',
|
'Class:SynchroLog/Attribute:status/Value:error' => 'Error',
|
||||||
'Class:SynchroLog/Attribute:status/Value:running' => 'Still Running',
|
'Class:SynchroLog/Attribute:status/Value:running' => 'Still Running',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_replica_seen' => 'Nb replica seen',
|
'Class:SynchroLog/Attribute:stats_nb_replica_seen' => 'Nb replica seen',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_replica_total' => 'Nb replica total',
|
'Class:SynchroLog/Attribute:stats_nb_replica_total' => 'Nb replica total',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted' => 'Nb objects deleted',
|
'Class:SynchroLog/Attribute:stats_nb_obj_deleted' => 'Nb objects deleted',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors' => 'Nb of errors while deleting',
|
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors' => 'Nb of errors while deleting',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted' => 'Nb objects obsoleted',
|
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted' => 'Nb objects obsoleted',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors' => 'Nb of errors while obsoleting',
|
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors' => 'Nb of errors while obsoleting',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_created' => 'Nb objects created',
|
'Class:SynchroLog/Attribute:stats_nb_obj_created' => 'Nb objects created',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors' => 'Nb or errors while creating',
|
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors' => 'Nb or errors while creating',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated' => 'Nb objects updated',
|
'Class:SynchroLog/Attribute:stats_nb_obj_updated' => 'Nb objects updated',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors' => 'Nb errors while updating',
|
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors' => 'Nb errors while updating',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors' => 'Nb of errors during reconciliation',
|
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors' => 'Nb of errors during reconciliation',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action' => 'Nb replica disappeared',
|
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action' => 'Nb replica disappeared',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated' => 'Nb objects updated',
|
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated' => 'Nb objects updated',
|
||||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged' => 'Nb objects unchanged',
|
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged' => 'Nb objects unchanged',
|
||||||
'Class:SynchroLog/Attribute:last_error' => 'Last error',
|
'Class:SynchroLog/Attribute:last_error' => 'Last error',
|
||||||
'Class:SynchroLog/Attribute:traces' => 'Traces',
|
'Class:SynchroLog/Attribute:traces' => 'Traces',
|
||||||
'Class:SynchroReplica' => 'Synchro Replica',
|
'Class:SynchroReplica' => 'Synchro Replica',
|
||||||
'Class:SynchroReplica/Attribute:sync_source_id' => 'Synchro Data Source',
|
'Class:SynchroReplica/Attribute:sync_source_id' => 'Synchro Data Source',
|
||||||
'Class:SynchroReplica/Attribute:dest_id' => 'Destination object (ID)',
|
'Class:SynchroReplica/Attribute:dest_id' => 'Destination object (ID)',
|
||||||
'Class:SynchroReplica/Attribute:dest_class' => 'Destination type',
|
'Class:SynchroReplica/Attribute:dest_class' => 'Destination type',
|
||||||
'Class:SynchroReplica/Attribute:status_last_seen' => 'Last seen',
|
'Class:SynchroReplica/Attribute:status_last_seen' => 'Last seen',
|
||||||
'Class:SynchroReplica/Attribute:status' => 'Status',
|
'Class:SynchroReplica/Attribute:status' => 'Status',
|
||||||
'Class:SynchroReplica/Attribute:status/Value:modified' => 'Modified',
|
'Class:SynchroReplica/Attribute:status/Value:modified' => 'Modified',
|
||||||
'Class:SynchroReplica/Attribute:status/Value:new' => 'New',
|
'Class:SynchroReplica/Attribute:status/Value:new' => 'New',
|
||||||
'Class:SynchroReplica/Attribute:status/Value:obsolete' => 'Obsolete',
|
'Class:SynchroReplica/Attribute:status/Value:obsolete' => 'Obsolete',
|
||||||
'Class:SynchroReplica/Attribute:status/Value:orphan' => 'Orphan',
|
'Class:SynchroReplica/Attribute:status/Value:orphan' => 'Orphan',
|
||||||
'Class:SynchroReplica/Attribute:status/Value:synchronized' => 'Synchronized',
|
'Class:SynchroReplica/Attribute:status/Value:synchronized' => 'Synchronized',
|
||||||
'Class:SynchroReplica/Attribute:status_dest_creator' => 'Object Created ?',
|
'Class:SynchroReplica/Attribute:status_dest_creator' => 'Object Created ?',
|
||||||
'Class:SynchroReplica/Attribute:status_last_error' => 'Last Error',
|
'Class:SynchroReplica/Attribute:status_last_error' => 'Last Error',
|
||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Warnings',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Warnings',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Creation Date',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Creation Date',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Last Modified Date',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Last Modified Date',
|
||||||
'Class:appUserPreferences' => 'User Preferences',
|
'Class:SynchroReplica/Action:delete+' => 'delete replica',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'User',
|
'Class:SynchroReplica/Action:unlink' => 'Unlink',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica',
|
||||||
|
|
||||||
|
'Class:appUserPreferences' => 'User Preferences',
|
||||||
|
'Class:appUserPreferences/Attribute:userid' => 'User',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Prefs',
|
'Class:appUserPreferences/Attribute:preferences' => 'Prefs',
|
||||||
'Core:ExecProcess:Code1' => 'Wrong command or command finished with errors (e.g. wrong script name)',
|
'Core:ExecProcess:Code1' => 'Wrong command or command finished with errors (e.g. wrong script name)',
|
||||||
'Core:ExecProcess:Code255' => 'PHP Error (parsing, or runtime)',
|
'Core:ExecProcess:Code255' => 'PHP Error (parsing, or runtime)',
|
||||||
|
|
||||||
// Attribute Duration
|
// Attribute Duration
|
||||||
'Core:Duration_Seconds' => '%1$ds',
|
'Core:Duration_Seconds' => '%1$ds',
|
||||||
'Core:Duration_Minutes_Seconds' => '%1$dmin %2$ds',
|
'Core:Duration_Minutes_Seconds' => '%1$dmin %2$ds',
|
||||||
'Core:Duration_Hours_Minutes_Seconds' => '%1$dh %2$dmin %3$ds',
|
'Core:Duration_Hours_Minutes_Seconds' => '%1$dh %2$dmin %3$ds',
|
||||||
'Core:Duration_Days_Hours_Minutes_Seconds' => '%1$sd %2$dh %3$dmin %4$ds',
|
'Core:Duration_Days_Hours_Minutes_Seconds' => '%1$sd %2$dh %3$dmin %4$ds',
|
||||||
|
|
||||||
// Explain working time computing
|
// Explain working time computing
|
||||||
'Core:ExplainWTC:ElapsedTime' => 'Time elapsed (stored as "%1$s")',
|
'Core:ExplainWTC:ElapsedTime' => 'Time elapsed (stored as "%1$s")',
|
||||||
'Core:ExplainWTC:StopWatch-TimeSpent' => 'Time spent for "%1$s"',
|
'Core:ExplainWTC:StopWatch-TimeSpent' => 'Time spent for "%1$s"',
|
||||||
'Core:ExplainWTC:StopWatch-Deadline' => 'Deadline for "%1$s" at %2$d%%',
|
'Core:ExplainWTC:StopWatch-Deadline' => 'Deadline for "%1$s" at %2$d%%',
|
||||||
|
|
||||||
// Bulk export
|
// Bulk export
|
||||||
'Core:BulkExport:MissingParameter_Param' => 'Missing parameter "%1$s"',
|
'Core:BulkExport:MissingParameter_Param' => 'Missing parameter "%1$s"',
|
||||||
'Core:BulkExport:InvalidParameter_Query' => 'Invalid value for the parameter "query". There is no Query Phrasebook corresponding to the id: "%1$s".',
|
'Core:BulkExport:InvalidParameter_Query' => 'Invalid value for the parameter "query". There is no Query Phrasebook corresponding to the id: "%1$s".',
|
||||||
'Core:BulkExport:ExportFormatPrompt' => 'Export format:',
|
'Core:BulkExport:ExportFormatPrompt' => 'Export format:',
|
||||||
'Core:BulkExportOf_Class' => '%1$s Export',
|
'Core:BulkExportOf_Class' => '%1$s Export',
|
||||||
'Core:BulkExport:ClickHereToDownload_FileName' => 'Click here to download %1$s',
|
'Core:BulkExport:ClickHereToDownload_FileName' => 'Click here to download %1$s',
|
||||||
|
|||||||
@@ -1058,6 +1058,39 @@ The hyperlink is displayed in the tooltip appearing on the “Lock” symbol of
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Warnings',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Warnings',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Creation Date',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Creation Date',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Last Modified Date',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Last Modified Date',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'User Preferences',
|
'Class:appUserPreferences' => 'User Preferences',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'User',
|
'Class:appUserPreferences/Attribute:userid' => 'User',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Prefs',
|
'Class:appUserPreferences/Attribute:preferences' => 'Prefs',
|
||||||
|
|||||||
@@ -963,6 +963,39 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Advertencias',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Advertencias',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Fecha de Creación',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Fecha de Creación',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Fecha Última Modificación',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Fecha Última Modificación',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Preferencias de Usuario',
|
'Class:appUserPreferences' => 'Preferencias de Usuario',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Usuario',
|
'Class:appUserPreferences/Attribute:userid' => 'Usuario',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Preferencias',
|
'Class:appUserPreferences/Attribute:preferences' => 'Preferencias',
|
||||||
|
|||||||
@@ -1021,6 +1021,40 @@ Plusieurs champs peuvent ainsi être modifiés lors d\'une "mise à jour" en app
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Avertissements',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Avertissements',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Date de création',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Date de création',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Date de dernière modification',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Date de dernière modification',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'Supprimer le réplica',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Délier',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Séparer le réplica de son objet lié',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Délier & Synchroniser',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Délier le réplica avec son objet cible et executer la synchronisation sur ce réplica',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchroniser',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Exécuter la synchronisation sur ce réplica',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Permettre la suppression de l\'objet lié à ce réplica',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'L\'objet lié à un réplica supprimé est supprimé',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Interdire la suppression de l\objet lié à ce réplica',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'L\'objet lié à un réplica supprimé n\'est pas supprimé',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Délier les réplicas et les objets',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Séparer les réplicas de leurs objets liés',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Délier & Synchroniser les réplicas et les objets',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Séparer les réplicas le leurs objets cilbles et exécuter la synchronisation sur les réplicas',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchroniser les objets Réplica',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Exécuter la synchronisation avec ces réplicas',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Autoriser la suppression des objets liés aux Réplicas',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'L\'objet lié à un réplica supprimé est supprimé',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Interdire la suppression des objets liés aux Réplicas',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'L\'objet lié à un réplica supprimé n\'est pas supprimé',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Délier les réplicas des objets',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Séparer les réplicas de leurs objets liés',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Délier & synchroniser les réplicas',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => 'Délier & synchroniser les réplicas ',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchroniser les réplica',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchroniser les réplica',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Autoriser la suppression des objets liés aux réplicas',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Autoriser la suppression des objets liés aux réplicas',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Interdire la suppression des objets liés aux réplicas',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Interdire la suppression des objets liés aux réplicas',
|
||||||
|
|
||||||
'Class:appUserPreferences' => 'Préférences utilisateur',
|
'Class:appUserPreferences' => 'Préférences utilisateur',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Utilisateur',
|
'Class:appUserPreferences/Attribute:userid' => 'Utilisateur',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Préférences',
|
'Class:appUserPreferences/Attribute:preferences' => 'Préférences',
|
||||||
|
|||||||
@@ -970,6 +970,39 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Figyelmeztetések',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Figyelmeztetések',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Létrehozás dátuma',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Létrehozás dátuma',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Utolsó módosítás dátuma',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Utolsó módosítás dátuma',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Felhasználói beállítások',
|
'Class:appUserPreferences' => 'Felhasználói beállítások',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Felhasználónév',
|
'Class:appUserPreferences/Attribute:userid' => 'Felhasználónév',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Beállítások',
|
'Class:appUserPreferences/Attribute:preferences' => 'Beállítások',
|
||||||
|
|||||||
@@ -970,6 +970,39 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Avvisi',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Avvisi',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Data di creazione',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Data di creazione',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Data di ultima modifica',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Data di ultima modifica',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Preferenze utente',
|
'Class:appUserPreferences' => 'Preferenze utente',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Utente',
|
'Class:appUserPreferences/Attribute:userid' => 'Utente',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Prefs',
|
'Class:appUserPreferences/Attribute:preferences' => 'Prefs',
|
||||||
|
|||||||
@@ -974,6 +974,39 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => '警告',
|
'Class:SynchroReplica/Attribute:status_last_warning' => '警告',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => '作成日',
|
'Class:SynchroReplica/Attribute:info_creation_date' => '作成日',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => '最終修正日',
|
'Class:SynchroReplica/Attribute:info_last_modified' => '最終修正日',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'ユーザプリファレンス',
|
'Class:appUserPreferences' => 'ユーザプリファレンス',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'ユーザ',
|
'Class:appUserPreferences/Attribute:userid' => 'ユーザ',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'プリファレンス',
|
'Class:appUserPreferences/Attribute:preferences' => 'プリファレンス',
|
||||||
|
|||||||
@@ -972,6 +972,39 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Waarschuwingen',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Waarschuwingen',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Datum van aanmaken',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Datum van aanmaken',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Datum van de laatste aanpassing',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Datum van de laatste aanpassing',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Gebruikersvoorkeuren',
|
'Class:appUserPreferences' => 'Gebruikersvoorkeuren',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Gebruiker',
|
'Class:appUserPreferences/Attribute:userid' => 'Gebruiker',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Voorkeuren',
|
'Class:appUserPreferences/Attribute:preferences' => 'Voorkeuren',
|
||||||
|
|||||||
@@ -969,6 +969,39 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Ostrzeżenia',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Ostrzeżenia',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Data utworzenia',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Data utworzenia',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Data ostatniej zmiany',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Data ostatniej zmiany',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Preferencje użytkownika',
|
'Class:appUserPreferences' => 'Preferencje użytkownika',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Użytkownik',
|
'Class:appUserPreferences/Attribute:userid' => 'Użytkownik',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Preferencje',
|
'Class:appUserPreferences/Attribute:preferences' => 'Preferencje',
|
||||||
|
|||||||
@@ -970,6 +970,39 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Alertas',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Alertas',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Data de criação',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Data de criação',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Última data modificação',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Última data modificação',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Preferências de usuário',
|
'Class:appUserPreferences' => 'Preferências de usuário',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Usuário',
|
'Class:appUserPreferences/Attribute:userid' => 'Usuário',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Preferências',
|
'Class:appUserPreferences/Attribute:preferences' => 'Preferências',
|
||||||
|
|||||||
@@ -975,6 +975,40 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Предупреждения',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Предупреждения',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Дата создания',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Дата создания',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Дата последнего изменения',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Дата последнего изменения',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
|
||||||
'Class:appUserPreferences' => 'Предпочтения пользователя',
|
'Class:appUserPreferences' => 'Предпочтения пользователя',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Пользователь',
|
'Class:appUserPreferences/Attribute:userid' => 'Пользователь',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Предпочтения',
|
'Class:appUserPreferences/Attribute:preferences' => 'Предпочтения',
|
||||||
|
|||||||
@@ -993,6 +993,39 @@ The hyperlink is displayed in the tooltip appearing on the “Lock” symbol of
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Upozornenia',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Upozornenia',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Dátum vytvorenia',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Dátum vytvorenia',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Dátum poslednej úpravy',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Dátum poslednej úpravy',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Užívateľské preferencie',
|
'Class:appUserPreferences' => 'Užívateľské preferencie',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Užívateľ',
|
'Class:appUserPreferences/Attribute:userid' => 'Užívateľ',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Preferencie',
|
'Class:appUserPreferences/Attribute:preferences' => 'Preferencie',
|
||||||
|
|||||||
@@ -975,6 +975,39 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => 'Uyarılar',
|
'Class:SynchroReplica/Attribute:status_last_warning' => 'Uyarılar',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Yaratılış Tarihi',
|
'Class:SynchroReplica/Attribute:info_creation_date' => 'Yaratılış Tarihi',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Son değiştirilme tarih',
|
'Class:SynchroReplica/Attribute:info_last_modified' => 'Son değiştirilme tarih',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
'Class:appUserPreferences' => 'Kullanıcı Tercihleri',
|
'Class:appUserPreferences' => 'Kullanıcı Tercihleri',
|
||||||
'Class:appUserPreferences/Attribute:userid' => 'Kullanıcı',
|
'Class:appUserPreferences/Attribute:userid' => 'Kullanıcı',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => 'Tercihler',
|
'Class:appUserPreferences/Attribute:preferences' => 'Tercihler',
|
||||||
|
|||||||
@@ -1012,6 +1012,40 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
|||||||
'Class:SynchroReplica/Attribute:status_last_warning' => '告警',
|
'Class:SynchroReplica/Attribute:status_last_warning' => '告警',
|
||||||
'Class:SynchroReplica/Attribute:info_creation_date' => '创建日期',
|
'Class:SynchroReplica/Attribute:info_creation_date' => '创建日期',
|
||||||
'Class:SynchroReplica/Attribute:info_last_modified' => '最后修改日期',
|
'Class:SynchroReplica/Attribute:info_last_modified' => '最后修改日期',
|
||||||
|
'Class:SynchroReplica/Action:delete+' => 'delete replica~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink' => 'Unlink~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro' => 'Unlink & Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro' => 'Synchro~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete' => 'Allow delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete' => 'Deny delete of object linked to this synchro replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'Class:SynchroReplica/Action:unlink_all' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlink_all+' => 'Unlink replica with destination object~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:unlinksynchro_all+' => 'Unlink replica with destination object and execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'Class:SynchroReplica/Action:synchro_all+' => 'Execute synchronization with this replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:allowdelete_all+' => 'Object linked to a deleted replica is deleted~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'Class:SynchroReplica/Action:denydelete_all+' => 'Object linked to a deleted replica is not deleted~~',
|
||||||
|
|
||||||
|
'UI:UnlinkAllTabTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkAllPageTitle' => 'Unlink Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllTabTitle' => 'Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:UnlinkSynchroAllPageTitle' => ' Unlink & Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllTabTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:SynchroAllPageTitle' => 'Synchronize Synchro Replica objects~~',
|
||||||
|
'UI:AllowDeleteAllTabTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:AllowDeleteAllPageTitle' => 'Allow delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllTabTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
'UI:DenyDeleteAllPageTitle' => 'Deny delete of objects linked to Synchro Replica~~',
|
||||||
|
|
||||||
'Class:appUserPreferences' => '用户偏好',
|
'Class:appUserPreferences' => '用户偏好',
|
||||||
'Class:appUserPreferences/Attribute:userid' => '用户',
|
'Class:appUserPreferences/Attribute:userid' => '用户',
|
||||||
'Class:appUserPreferences/Attribute:preferences' => '首选项',
|
'Class:appUserPreferences/Attribute:preferences' => '首选项',
|
||||||
|
|||||||
@@ -14,7 +14,10 @@ if (PHP_VERSION_ID < 50600) {
|
|||||||
echo $err;
|
echo $err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new RuntimeException($err);
|
trigger_error(
|
||||||
|
$err,
|
||||||
|
E_USER_ERROR
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once __DIR__ . '/composer/autoload_real.php';
|
require_once __DIR__ . '/composer/autoload_real.php';
|
||||||
|
|||||||
@@ -349,6 +349,7 @@ return array(
|
|||||||
'Combodo\\iTop\\Controller\\Base\\Layout\\ObjectController' => $baseDir . '/sources/Controller/Base/Layout/ObjectController.php',
|
'Combodo\\iTop\\Controller\\Base\\Layout\\ObjectController' => $baseDir . '/sources/Controller/Base/Layout/ObjectController.php',
|
||||||
'Combodo\\iTop\\Controller\\Base\\Layout\\OqlController' => $baseDir . '/sources/Controller/Base/Layout/OqlController.php',
|
'Combodo\\iTop\\Controller\\Base\\Layout\\OqlController' => $baseDir . '/sources/Controller/Base/Layout/OqlController.php',
|
||||||
'Combodo\\iTop\\Controller\\Links\\LinkSetController' => $baseDir . '/sources/Controller/Links/LinkSetController.php',
|
'Combodo\\iTop\\Controller\\Links\\LinkSetController' => $baseDir . '/sources/Controller/Links/LinkSetController.php',
|
||||||
|
'Combodo\\iTop\\Controller\\Links\\SynchroReplicaController' => $baseDir . '/sources/Controller/Links/SynchroReplicaController.php',
|
||||||
'Combodo\\iTop\\Controller\\Newsroom\\iTopNewsroomController' => $baseDir . '/sources/Controller/Newsroom/iTopNewsroomController.php',
|
'Combodo\\iTop\\Controller\\Newsroom\\iTopNewsroomController' => $baseDir . '/sources/Controller/Newsroom/iTopNewsroomController.php',
|
||||||
'Combodo\\iTop\\Controller\\Notifications\\ActionController' => $baseDir . '/sources/Controller/Notifications/ActionController.php',
|
'Combodo\\iTop\\Controller\\Notifications\\ActionController' => $baseDir . '/sources/Controller/Notifications/ActionController.php',
|
||||||
'Combodo\\iTop\\Controller\\Notifications\\NotificationsCenterController' => $baseDir . '/sources/Controller/Notifications/NotificationsCenterController.php',
|
'Combodo\\iTop\\Controller\\Notifications\\NotificationsCenterController' => $baseDir . '/sources/Controller/Notifications/NotificationsCenterController.php',
|
||||||
@@ -3900,6 +3901,7 @@ return array(
|
|||||||
'Twig\\Util\\DeprecationCollector' => $vendorDir . '/twig/twig/src/Util/DeprecationCollector.php',
|
'Twig\\Util\\DeprecationCollector' => $vendorDir . '/twig/twig/src/Util/DeprecationCollector.php',
|
||||||
'Twig\\Util\\ReflectionCallable' => $vendorDir . '/twig/twig/src/Util/ReflectionCallable.php',
|
'Twig\\Util\\ReflectionCallable' => $vendorDir . '/twig/twig/src/Util/ReflectionCallable.php',
|
||||||
'Twig\\Util\\TemplateDirIterator' => $vendorDir . '/twig/twig/src/Util/TemplateDirIterator.php',
|
'Twig\\Util\\TemplateDirIterator' => $vendorDir . '/twig/twig/src/Util/TemplateDirIterator.php',
|
||||||
|
'UI' => $baseDir . '/sources/Controller/UI.php',
|
||||||
'UIExtKeyWidget' => $baseDir . '/application/ui.extkeywidget.class.inc.php',
|
'UIExtKeyWidget' => $baseDir . '/application/ui.extkeywidget.class.inc.php',
|
||||||
'UIHTMLEditorWidget' => $baseDir . '/application/ui.htmleditorwidget.class.inc.php',
|
'UIHTMLEditorWidget' => $baseDir . '/application/ui.htmleditorwidget.class.inc.php',
|
||||||
'UILinksWidget' => $baseDir . '/application/ui.linkswidget.class.inc.php',
|
'UILinksWidget' => $baseDir . '/application/ui.linkswidget.class.inc.php',
|
||||||
|
|||||||
@@ -750,6 +750,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
|||||||
'Combodo\\iTop\\Controller\\Base\\Layout\\ObjectController' => __DIR__ . '/../..' . '/sources/Controller/Base/Layout/ObjectController.php',
|
'Combodo\\iTop\\Controller\\Base\\Layout\\ObjectController' => __DIR__ . '/../..' . '/sources/Controller/Base/Layout/ObjectController.php',
|
||||||
'Combodo\\iTop\\Controller\\Base\\Layout\\OqlController' => __DIR__ . '/../..' . '/sources/Controller/Base/Layout/OqlController.php',
|
'Combodo\\iTop\\Controller\\Base\\Layout\\OqlController' => __DIR__ . '/../..' . '/sources/Controller/Base/Layout/OqlController.php',
|
||||||
'Combodo\\iTop\\Controller\\Links\\LinkSetController' => __DIR__ . '/../..' . '/sources/Controller/Links/LinkSetController.php',
|
'Combodo\\iTop\\Controller\\Links\\LinkSetController' => __DIR__ . '/../..' . '/sources/Controller/Links/LinkSetController.php',
|
||||||
|
'Combodo\\iTop\\Controller\\Links\\SynchroReplicaController' => __DIR__ . '/../..' . '/sources/Controller/Links/SynchroReplicaController.php',
|
||||||
'Combodo\\iTop\\Controller\\Newsroom\\iTopNewsroomController' => __DIR__ . '/../..' . '/sources/Controller/Newsroom/iTopNewsroomController.php',
|
'Combodo\\iTop\\Controller\\Newsroom\\iTopNewsroomController' => __DIR__ . '/../..' . '/sources/Controller/Newsroom/iTopNewsroomController.php',
|
||||||
'Combodo\\iTop\\Controller\\Notifications\\ActionController' => __DIR__ . '/../..' . '/sources/Controller/Notifications/ActionController.php',
|
'Combodo\\iTop\\Controller\\Notifications\\ActionController' => __DIR__ . '/../..' . '/sources/Controller/Notifications/ActionController.php',
|
||||||
'Combodo\\iTop\\Controller\\Notifications\\NotificationsCenterController' => __DIR__ . '/../..' . '/sources/Controller/Notifications/NotificationsCenterController.php',
|
'Combodo\\iTop\\Controller\\Notifications\\NotificationsCenterController' => __DIR__ . '/../..' . '/sources/Controller/Notifications/NotificationsCenterController.php',
|
||||||
@@ -4301,6 +4302,7 @@ class ComposerStaticInitfc0e9e9dea11dcbb6272414776c30685
|
|||||||
'Twig\\Util\\DeprecationCollector' => __DIR__ . '/..' . '/twig/twig/src/Util/DeprecationCollector.php',
|
'Twig\\Util\\DeprecationCollector' => __DIR__ . '/..' . '/twig/twig/src/Util/DeprecationCollector.php',
|
||||||
'Twig\\Util\\ReflectionCallable' => __DIR__ . '/..' . '/twig/twig/src/Util/ReflectionCallable.php',
|
'Twig\\Util\\ReflectionCallable' => __DIR__ . '/..' . '/twig/twig/src/Util/ReflectionCallable.php',
|
||||||
'Twig\\Util\\TemplateDirIterator' => __DIR__ . '/..' . '/twig/twig/src/Util/TemplateDirIterator.php',
|
'Twig\\Util\\TemplateDirIterator' => __DIR__ . '/..' . '/twig/twig/src/Util/TemplateDirIterator.php',
|
||||||
|
'UI' => __DIR__ . '/../..' . '/sources/Controller/UI.php',
|
||||||
'UIExtKeyWidget' => __DIR__ . '/../..' . '/application/ui.extkeywidget.class.inc.php',
|
'UIExtKeyWidget' => __DIR__ . '/../..' . '/application/ui.extkeywidget.class.inc.php',
|
||||||
'UIHTMLEditorWidget' => __DIR__ . '/../..' . '/application/ui.htmleditorwidget.class.inc.php',
|
'UIHTMLEditorWidget' => __DIR__ . '/../..' . '/application/ui.htmleditorwidget.class.inc.php',
|
||||||
'UILinksWidget' => __DIR__ . '/../..' . '/application/ui.linkswidget.class.inc.php',
|
'UILinksWidget' => __DIR__ . '/../..' . '/application/ui.linkswidget.class.inc.php',
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ if ($issues) {
|
|||||||
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new \RuntimeException(
|
trigger_error(
|
||||||
'Composer detected issues in your platform: ' . implode(' ', $issues)
|
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
||||||
|
E_USER_ERROR
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
117
pages/UI.php
117
pages/UI.php
@@ -10,7 +10,6 @@ use Combodo\iTop\Application\Helper\Session;
|
|||||||
use Combodo\iTop\Application\TwigBase\Twig\TwigHelper;
|
use Combodo\iTop\Application\TwigBase\Twig\TwigHelper;
|
||||||
use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory;
|
use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory;
|
||||||
use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableUIBlockFactory;
|
use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableUIBlockFactory;
|
||||||
use Combodo\iTop\Application\UI\Base\Component\Form\Form;
|
|
||||||
use Combodo\iTop\Application\UI\Base\Component\GlobalSearch\GlobalSearchHelper;
|
use Combodo\iTop\Application\UI\Base\Component\GlobalSearch\GlobalSearchHelper;
|
||||||
use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory;
|
use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory;
|
||||||
use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
|
use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
|
||||||
@@ -24,6 +23,7 @@ use Combodo\iTop\Application\WebPage\iTopWebPage;
|
|||||||
use Combodo\iTop\Application\WebPage\WebPage;
|
use Combodo\iTop\Application\WebPage\WebPage;
|
||||||
use Combodo\iTop\Application\WelcomePopup\WelcomePopupService;
|
use Combodo\iTop\Application\WelcomePopup\WelcomePopupService;
|
||||||
use Combodo\iTop\Controller\Base\Layout\ObjectController;
|
use Combodo\iTop\Controller\Base\Layout\ObjectController;
|
||||||
|
use Combodo\iTop\Controller\Links\SynchroReplicaController;
|
||||||
use Combodo\iTop\Controller\WelcomePopupController;
|
use Combodo\iTop\Controller\WelcomePopupController;
|
||||||
use Combodo\iTop\Service\Router\Router;
|
use Combodo\iTop\Service\Router\Router;
|
||||||
|
|
||||||
@@ -585,6 +585,23 @@ try {
|
|||||||
UI::OperationFormForModifyAll($oP, $oAppContext);
|
UI::OperationFormForModifyAll($oP, $oAppContext);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'form_for_unlink_all': // Form to modify multiple objects (bulk modify)
|
||||||
|
SynchroReplicaController::OperationUnlinkAll($oP, $oAppContext,'unlink');
|
||||||
|
break;
|
||||||
|
case 'form_for_unlinksynchro_all': // Form to modify multiple objects (bulk modify)
|
||||||
|
SynchroReplicaController::OperationUnlinkAll($oP, $oAppContext,'unlinksynchro');
|
||||||
|
break;
|
||||||
|
case 'form_for_synchro_all': // Form to modify multiple objects (bulk modify)
|
||||||
|
SynchroReplicaController::OperationUnlinkAll($oP, $oAppContext,'synchro');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'form_for_allowdelete_all': // Form to modify multiple objects (bulk modify)
|
||||||
|
SynchroReplicaController::OperationUnlinkAll($oP, $oAppContext,'allowdelete');
|
||||||
|
break;
|
||||||
|
case 'form_for_denydelete_all': // Form to modify multiple objects (bulk modify)
|
||||||
|
SynchroReplicaController::OperationUnlinkAll($oP, $oAppContext,'denydelete');
|
||||||
|
break;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
case 'preview_or_modify_all': // Preview or apply bulk modify
|
case 'preview_or_modify_all': // Preview or apply bulk modify
|
||||||
@@ -627,7 +644,7 @@ try {
|
|||||||
'title' => Dict::S('UI:BulkDeleteTitle'),
|
'title' => Dict::S('UI:BulkDeleteTitle'),
|
||||||
];
|
];
|
||||||
$oChecker = new ActionChecker($oFilter, UR_ACTION_BULK_DELETE);
|
$oChecker = new ActionChecker($oFilter, UR_ACTION_BULK_DELETE);
|
||||||
DisplayMultipleSelectionForm($oP, $oFilter, 'bulk_delete', $oChecker, [], $aDisplayParams);
|
UI::DisplayMultipleSelectionForm($oP, $oFilter, 'bulk_delete', $oChecker, [], $aDisplayParams);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -1338,99 +1355,3 @@ try {
|
|||||||
IssueLog::Debug('UI.php operation='.$sOperationToLog.', error='.$e->getMessage()."\n".$sErrorStackTrace, LogChannels::CONSOLE);
|
IssueLog::Debug('UI.php operation='.$sOperationToLog.', error='.$e->getMessage()."\n".$sErrorStackTrace, LogChannels::CONSOLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
class UI
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Operation select_for_modify_all
|
|
||||||
*
|
|
||||||
* @param iTopWebPage $oP
|
|
||||||
*
|
|
||||||
* @throws \ApplicationException
|
|
||||||
* @throws \ArchivedObjectException
|
|
||||||
* @throws \CoreException
|
|
||||||
* @throws \OQLException
|
|
||||||
*/
|
|
||||||
public static function OperationSelectForModifyAll(iTopWebPage $oP): void
|
|
||||||
{
|
|
||||||
$oP->DisableBreadCrumb();
|
|
||||||
$oP->set_title(Dict::S('UI:ModifyAllPageTitle'));
|
|
||||||
$sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
|
|
||||||
if (empty($sFilter)) {
|
|
||||||
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'filter'));
|
|
||||||
}
|
|
||||||
$oFilter = DBObjectSearch::unserialize($sFilter); //TODO : check that the filter is valid
|
|
||||||
// Add user filter
|
|
||||||
$oFilter->UpdateContextFromUser();
|
|
||||||
$oChecker = new ActionChecker($oFilter, UR_ACTION_BULK_MODIFY);
|
|
||||||
$sClass = $oFilter->GetClass();
|
|
||||||
$sClassName = MetaModel::GetName($sClass);
|
|
||||||
|
|
||||||
$aDisplayParams = [
|
|
||||||
'icon' => MetaModel::GetClassIcon($sClass, false),
|
|
||||||
'title' => Dict::Format('UI:Modify_ObjectsOf_Class', $sClassName),
|
|
||||||
];
|
|
||||||
DisplayMultipleSelectionForm($oP, $oFilter, 'form_for_modify_all', $oChecker, [], $aDisplayParams);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Operation form_for_modify_all
|
|
||||||
*
|
|
||||||
* @param iTopWebPage $oP
|
|
||||||
* @param \ApplicationContext $oAppContext
|
|
||||||
*
|
|
||||||
* @throws \ArchivedObjectException
|
|
||||||
* @throws \CoreException
|
|
||||||
* @throws \CoreUnexpectedValue
|
|
||||||
* @throws \MySQLException
|
|
||||||
* @throws \OQLException
|
|
||||||
*/
|
|
||||||
public static function OperationFormForModifyAll(iTopWebPage $oP, ApplicationContext $oAppContext): void
|
|
||||||
{
|
|
||||||
$oP->DisableBreadCrumb();
|
|
||||||
$sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
|
|
||||||
$sClass = utils::ReadParam('class', '', false, utils::ENUM_SANITIZATION_FILTER_CLASS);
|
|
||||||
$oFullSetFilter = DBObjectSearch::unserialize($sFilter);
|
|
||||||
// Add user filter
|
|
||||||
$oFullSetFilter->UpdateContextFromUser();
|
|
||||||
$aSelectedObj = utils::ReadMultipleSelection($oFullSetFilter);
|
|
||||||
$sCancelUrl = "./UI.php?operation=search&filter=".urlencode($sFilter).$oAppContext->GetForLink(true);
|
|
||||||
$aContext = ['filter' => utils::EscapeHtml($sFilter)];
|
|
||||||
cmdbAbstractObject::DisplayBulkModifyForm($oP, $sClass, $aSelectedObj, 'preview_or_modify_all', $sCancelUrl, [], $aContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Operation preview_or_modify_all
|
|
||||||
*
|
|
||||||
* @param iTopWebPage $oP
|
|
||||||
* @param \ApplicationContext $oAppContext
|
|
||||||
*
|
|
||||||
* @throws \ApplicationException
|
|
||||||
* @throws \ArchivedObjectException
|
|
||||||
* @throws \CoreCannotSaveObjectException
|
|
||||||
* @throws \CoreException
|
|
||||||
* @throws \DictExceptionMissingString
|
|
||||||
* @throws \OQLException
|
|
||||||
*/
|
|
||||||
public static function OperationPreviewOrModifyAll(iTopWebPage $oP, ApplicationContext $oAppContext): void
|
|
||||||
{
|
|
||||||
$oP->DisableBreadCrumb();
|
|
||||||
$sFilter = utils::ReadParam('filter', '', false, 'raw_data');
|
|
||||||
$oFilter = DBObjectSearch::unserialize($sFilter); // TO DO : check that the filter is valid
|
|
||||||
// Add user filter
|
|
||||||
$oFilter->UpdateContextFromUser();
|
|
||||||
|
|
||||||
$sClass = utils::ReadParam('class', '', false, 'class');
|
|
||||||
$bPreview = utils::ReadParam('preview_mode', '');
|
|
||||||
$sSelectedObj = utils::ReadParam('selectObj', '', false, 'raw_data');
|
|
||||||
if (empty($sClass) || empty($sSelectedObj)) { // TO DO: check that the class name is valid !
|
|
||||||
throw new ApplicationException(Dict::Format('UI:Error:2ParametersMissing', 'class', 'selectObj'));
|
|
||||||
}
|
|
||||||
$aSelectedObj = explode(',', $sSelectedObj);
|
|
||||||
$sCancelUrl = "./UI.php?operation=search&filter=".urlencode($sFilter).$oAppContext->GetForLink(true);
|
|
||||||
$aContext = [
|
|
||||||
'filter' => utils::EscapeHtml($sFilter),
|
|
||||||
'selectObj' => $sSelectedObj,
|
|
||||||
];
|
|
||||||
cmdbAbstractObject::DoBulkModify($oP, $sClass, $aSelectedObj, 'preview_or_modify_all', $bPreview, $sCancelUrl, $aContext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
138
sources/Controller/Links/SynchroReplicaController.php
Normal file
138
sources/Controller/Links/SynchroReplicaController.php
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Combodo\iTop\Controller\Links;
|
||||||
|
|
||||||
|
use ApplicationContext;
|
||||||
|
use ApplicationException;
|
||||||
|
use Combodo\iTop\Application\TwigBase\Controller\Controller;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableUIBlockFactory;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
|
||||||
|
use DBObjectSearch;
|
||||||
|
use Dict;
|
||||||
|
use Exception;
|
||||||
|
use iTopWebPage;
|
||||||
|
use MetaModel;
|
||||||
|
use utils;
|
||||||
|
|
||||||
|
class SynchroReplicaController extends Controller
|
||||||
|
{
|
||||||
|
public const ROUTE_NAMESPACE = 'synchroreplica';
|
||||||
|
|
||||||
|
public function __construct($sViewPath = '', $sModuleName = 'core', $aAdditionalPaths = [])
|
||||||
|
{
|
||||||
|
$sViewPath = APPROOT.'synchro';
|
||||||
|
parent::__construct($sViewPath, $sModuleName, $aAdditionalPaths);
|
||||||
|
|
||||||
|
// Previously in index.php
|
||||||
|
$this->DisableInDemoMode();
|
||||||
|
$this->AllowOnlyAdmin();
|
||||||
|
$this->CheckAccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function OperationUnlinkAll(iTopWebPage $oP, ApplicationContext $oAppContext, $sOperation = 'unlink'): void
|
||||||
|
{
|
||||||
|
$oP->DisableBreadCrumb();
|
||||||
|
$sClass = utils::ReadParam('class', '', false, 'class');
|
||||||
|
$sFilter = utils::ReadPostedParam('filter', '', 'raw_data');
|
||||||
|
$oFullSetFilter = DBObjectSearch::unserialize($sFilter);
|
||||||
|
// Add user filter
|
||||||
|
$oFullSetFilter->UpdateContextFromUser();
|
||||||
|
$aSelectObject = utils::ReadMultipleSelection($oFullSetFilter);
|
||||||
|
if ( empty($sClass) || empty($aSelectObject)) // TO DO: check that the class name is valid !
|
||||||
|
{
|
||||||
|
throw new ApplicationException(Dict::Format('UI:Error:2ParametersMissing', 'class', 'selectObject[]'));
|
||||||
|
}
|
||||||
|
$sCancelUrl = "./UI.php?operation=search&filter=".urlencode($sFilter)."&".$oAppContext->GetForLink();
|
||||||
|
$aContext = array(
|
||||||
|
'filter' => utils::EscapeHtml($sFilter),
|
||||||
|
'selectObj' => $aSelectObject,
|
||||||
|
);
|
||||||
|
|
||||||
|
$aHeaders = array(
|
||||||
|
'object' => array('label' => MetaModel::GetName($sClass), 'description' => Dict::S('UI:ModifiedObject')),
|
||||||
|
'status' => array(
|
||||||
|
'label' => Dict::S('UI:BulkModifyStatus'),
|
||||||
|
'description' => Dict::S('UI:BulkModifyStatus+'),
|
||||||
|
),
|
||||||
|
'errors' => array(
|
||||||
|
'label' => Dict::S('UI:BulkModifyErrors'),
|
||||||
|
'description' => Dict::S('UI:BulkModifyErrors+'),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
$aRows = array();
|
||||||
|
|
||||||
|
|
||||||
|
$sHeaderTitle = Dict::Format('UI:Modify_N_ObjectsOf_Class', count($aSelectObject), MetaModel::GetName($sClass));
|
||||||
|
$sClassIcon = MetaModel::GetClassIcon($sClass, false);
|
||||||
|
|
||||||
|
// Not in preview mode, do the update for real
|
||||||
|
$sTransactionId = utils::ReadPostedParam('transaction_id', '', 'transaction_id');
|
||||||
|
if (!utils::IsTransactionValid($sTransactionId, false)) {
|
||||||
|
throw new Exception(Dict::S('UI:Error:ObjectAlreadyUpdated'));
|
||||||
|
}
|
||||||
|
utils::RemoveTransaction($sTransactionId);
|
||||||
|
|
||||||
|
// Avoid too many events
|
||||||
|
$iPreviousTimeLimit = ini_get('max_execution_time');
|
||||||
|
$iLoopTimeLimit = MetaModel::GetConfig()->Get('max_execution_time_per_loop');
|
||||||
|
$aErrors = [];
|
||||||
|
foreach ($aSelectObject as $iId) {
|
||||||
|
set_time_limit(intval($iLoopTimeLimit));
|
||||||
|
/** @var \cmdbAbstractObject $oObj */
|
||||||
|
$oReplica = MetaModel::GetObject('SynchroReplica', $iId);
|
||||||
|
$bResult = true;
|
||||||
|
try {
|
||||||
|
if (in_array($sOperation, ['unlink', 'unlinksynchro'])) {
|
||||||
|
$oReplica->UnLink();
|
||||||
|
}
|
||||||
|
if (in_array($sOperation, ['synchro', 'unlinksynchro'])) {
|
||||||
|
$oStatLog = $oReplica->ReSynchro();
|
||||||
|
$aErrors = $oStatLog->GetTraces();
|
||||||
|
}
|
||||||
|
if ($sOperation == 'allowdelete') {
|
||||||
|
$oReplica->Set('status_dest_creator', 1);
|
||||||
|
$oReplica->DBUpdate();
|
||||||
|
}
|
||||||
|
if ($sOperation == 'denydelete') {
|
||||||
|
$oReplica->Set('status_dest_creator', 0);
|
||||||
|
$oReplica->DBUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception $e) {
|
||||||
|
$bResult = false;
|
||||||
|
$aErrors[] = $e->getMessage();
|
||||||
|
}
|
||||||
|
catch (Error $e) {
|
||||||
|
$bResult = false;
|
||||||
|
$aErrors[] = $e->getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
$sStatus = $bResult ? Dict::S('UI:BulkModifyStatusModified') : Dict::S('UI:BulkModifyStatusSkipped');
|
||||||
|
|
||||||
|
$aErrorsToDisplay = array_map(function ($sError) {
|
||||||
|
return utils::HtmlEntities($sError);
|
||||||
|
}, $aErrors);
|
||||||
|
$aRows[] = array(
|
||||||
|
'object' => $oReplica->GetHyperlink(),
|
||||||
|
'status' => $sStatus,
|
||||||
|
'errors' => '<p>'.($bResult ? '' : implode('</p><p>', $aErrorsToDisplay)).'</p>',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
set_time_limit(intval($iPreviousTimeLimit));
|
||||||
|
$oTable = DataTableUIBlockFactory::MakeForForm('BulkModify', $aHeaders, $aRows);
|
||||||
|
$oTable->AddOption("bFullscreen", true);
|
||||||
|
|
||||||
|
$oPanel = PanelUIBlockFactory::MakeForClass($sClass, '');
|
||||||
|
$oPanel->SetIcon($sClassIcon);
|
||||||
|
$oPanel->SetTitle($sHeaderTitle);
|
||||||
|
$oPanel->AddCSSClass('ibo-datatable-panel');
|
||||||
|
$oPanel->AddSubBlock($oTable);
|
||||||
|
|
||||||
|
$oP->AddUiBlock($oPanel);
|
||||||
|
$oP->AddSubBlock(ButtonUIBlockFactory::MakeForSecondaryAction(Dict::S('UI:Button:Done')))->SetOnClickJsCode("window.location.href='$sCancelUrl'")->AddCSSClass('mt-5');
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
166
sources/Controller/UI.php
Normal file
166
sources/Controller/UI.php
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Form\Form;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Toolbar\ToolbarUIBlockFactory;
|
||||||
|
use Combodo\iTop\Application\WebPage\iTopWebPage;
|
||||||
|
use Combodo\iTop\Application\WebPage\WebPage;
|
||||||
|
|
||||||
|
class UI
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Operation select_for_modify_all
|
||||||
|
*
|
||||||
|
* @param iTopWebPage $oP
|
||||||
|
*
|
||||||
|
* @throws \ApplicationException
|
||||||
|
* @throws \ArchivedObjectException
|
||||||
|
* @throws \CoreException
|
||||||
|
* @throws \OQLException
|
||||||
|
*/
|
||||||
|
public static function OperationSelectForModifyAll(iTopWebPage $oP, $sTitleTab = 'UI:ModifyAllPageTitle', $sTitleCode = 'UI:Modify_ObjectsOf_Class', $sNextOperation = 'form_for_modify_all'): void
|
||||||
|
{
|
||||||
|
$oP->DisableBreadCrumb();
|
||||||
|
$oP->set_title(Dict::S($sTitleTab));
|
||||||
|
$sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
|
||||||
|
if (empty($sFilter)) {
|
||||||
|
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'filter'));
|
||||||
|
}
|
||||||
|
$oFilter = DBObjectSearch::unserialize($sFilter); //TODO : check that the filter is valid
|
||||||
|
// Add user filter
|
||||||
|
$oFilter->UpdateContextFromUser();
|
||||||
|
$oChecker = new ActionChecker($oFilter, UR_ACTION_BULK_MODIFY);
|
||||||
|
$sClass = $oFilter->GetClass();
|
||||||
|
$sClassName = MetaModel::GetName($sClass);
|
||||||
|
|
||||||
|
$aDisplayParams = [
|
||||||
|
'icon' => MetaModel::GetClassIcon($sClass, false),
|
||||||
|
'title' => Dict::Format($sTitleCode, $sClassName),
|
||||||
|
];
|
||||||
|
self::DisplayMultipleSelectionForm($oP, $oFilter, $sNextOperation, $oChecker, [], $aDisplayParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation form_for_modify_all
|
||||||
|
*
|
||||||
|
* @param iTopWebPage $oP
|
||||||
|
* @param \ApplicationContext $oAppContext
|
||||||
|
*
|
||||||
|
* @throws \ArchivedObjectException
|
||||||
|
* @throws \CoreException
|
||||||
|
* @throws \CoreUnexpectedValue
|
||||||
|
* @throws \MySQLException
|
||||||
|
* @throws \OQLException
|
||||||
|
*/
|
||||||
|
public static function OperationFormForModifyAll(iTopWebPage $oP, ApplicationContext $oAppContext): void
|
||||||
|
{
|
||||||
|
$oP->DisableBreadCrumb();
|
||||||
|
$sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
|
||||||
|
$sClass = utils::ReadParam('class', '', false, utils::ENUM_SANITIZATION_FILTER_CLASS);
|
||||||
|
$oFullSetFilter = DBObjectSearch::unserialize($sFilter);
|
||||||
|
// Add user filter
|
||||||
|
$oFullSetFilter->UpdateContextFromUser();
|
||||||
|
$aSelectedObj = utils::ReadMultipleSelection($oFullSetFilter);
|
||||||
|
$sCancelUrl = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&filter=' . urlencode($sFilter) . '&' . $oAppContext->GetForLink();
|
||||||
|
$aContext = array('filter' => utils::EscapeHtml($sFilter));
|
||||||
|
cmdbAbstractObject::DisplayBulkModifyForm($oP, $sClass, $aSelectedObj, 'preview_or_modify_all', $sCancelUrl, array(), $aContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation preview_or_modify_all
|
||||||
|
*
|
||||||
|
* @param iTopWebPage $oP
|
||||||
|
* @param \ApplicationContext $oAppContext
|
||||||
|
*
|
||||||
|
* @throws \ApplicationException
|
||||||
|
* @throws \ArchivedObjectException
|
||||||
|
* @throws \CoreCannotSaveObjectException
|
||||||
|
* @throws \CoreException
|
||||||
|
* @throws \DictExceptionMissingString
|
||||||
|
* @throws \OQLException
|
||||||
|
*/
|
||||||
|
public static function OperationPreviewOrModifyAll(iTopWebPage $oP, ApplicationContext $oAppContext): void
|
||||||
|
{
|
||||||
|
$oP->DisableBreadCrumb();
|
||||||
|
$sFilter = utils::ReadParam('filter', '', false, 'raw_data');
|
||||||
|
$oFilter = DBObjectSearch::unserialize($sFilter); // TO DO : check that the filter is valid
|
||||||
|
// Add user filter
|
||||||
|
$oFilter->UpdateContextFromUser();
|
||||||
|
|
||||||
|
$sClass = utils::ReadParam('class', '', false, 'class');
|
||||||
|
$bPreview = utils::ReadParam('preview_mode', '');
|
||||||
|
$sSelectedObj = utils::ReadParam('selectObj', '', false, 'raw_data');
|
||||||
|
if (empty($sClass) || empty($sSelectedObj)) // TO DO: check that the class name is valid !
|
||||||
|
{
|
||||||
|
throw new ApplicationException(Dict::Format('UI:Error:2ParametersMissing', 'class', 'selectObj'));
|
||||||
|
}
|
||||||
|
$aSelectedObj = explode(',', $sSelectedObj);
|
||||||
|
$sCancelUrl = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&filter=' . urlencode($sFilter) . '&' . $oAppContext->GetForLink();
|
||||||
|
$aContext = array(
|
||||||
|
'filter' => utils::EscapeHtml($sFilter),
|
||||||
|
'selectObj' => $sSelectedObj,
|
||||||
|
);
|
||||||
|
cmdbAbstractObject::DoBulkModify($oP, $sClass, $aSelectedObj, 'preview_or_modify_all', $bPreview, $sCancelUrl, $aContext);
|
||||||
|
}/**
|
||||||
|
* Displays a form (checkboxes) to select the objects for which to apply a given action
|
||||||
|
* Only the objects for which the action is valid can be checked. By default all valid objects are checked
|
||||||
|
*
|
||||||
|
* @param WebPage $oP WebPage The page for output
|
||||||
|
* @param \DBSearch $oFilter DBSearch The filter that defines the list of objects
|
||||||
|
* @param string $sNextOperation string The next operation (code) to be executed when the form is submitted
|
||||||
|
* @param ActionChecker $oChecker ActionChecker The helper class/instance used to check for which object the action is valid
|
||||||
|
* @param array $aExtraFormParams
|
||||||
|
* @param array $aDisplayParams
|
||||||
|
*
|
||||||
|
* @throws \ApplicationException
|
||||||
|
* @throws \ArchivedObjectException
|
||||||
|
* @throws \CoreException
|
||||||
|
*@since 3.0.0 $aDisplayParams parameter
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function DisplayMultipleSelectionForm(WebPage $oP, DBSearch $oFilter, string $sNextOperation, ActionChecker $oChecker, array $aExtraFormParams = [], array $aDisplayParams = [])
|
||||||
|
{
|
||||||
|
$oAppContext = new ApplicationContext();
|
||||||
|
$iBulkActionAllowed = $oChecker->IsAllowed();
|
||||||
|
$aExtraParams = ['selection_type' => 'multiple', 'selection_mode' => true, 'display_limit' => false, 'menu' => false];
|
||||||
|
if ($iBulkActionAllowed == UR_ALLOWED_DEPENDS) {
|
||||||
|
$aExtraParams['selection_enabled'] = $oChecker->GetAllowedIDs();
|
||||||
|
} else {
|
||||||
|
if (UR_ALLOWED_NO) {
|
||||||
|
throw new ApplicationException(Dict::Format('UI:ActionNotAllowed'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$oForm = new Form();
|
||||||
|
$oForm->SetAction( utils::GetAbsoluteUrlAppRoot().'pages/UI.php');
|
||||||
|
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('operation', $sNextOperation));
|
||||||
|
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('class', $oFilter->GetClass()));
|
||||||
|
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('filter', utils::HtmlEntities($oFilter->Serialize())));
|
||||||
|
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('transaction_id', utils::GetNewTransactionId()));
|
||||||
|
foreach ($aExtraFormParams as $sName => $sValue) {
|
||||||
|
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden($sName, $sValue));
|
||||||
|
}
|
||||||
|
$oForm->AddSubBlock($oAppContext->GetForFormBlock());
|
||||||
|
$oDisplayBlock = new DisplayBlock($oFilter, 'list', false);
|
||||||
|
//by default all the elements are selected
|
||||||
|
$aExtraParams['selectionMode'] = 'negative';
|
||||||
|
if (array_key_exists('icon', $aDisplayParams) || array_key_exists('title', $aDisplayParams)) {
|
||||||
|
$aExtraParams['surround_with_panel'] = true;
|
||||||
|
if (array_key_exists('icon', $aDisplayParams)) {
|
||||||
|
$aExtraParams['panel_icon'] = $aDisplayParams['icon'];
|
||||||
|
}
|
||||||
|
if (array_key_exists('title', $aDisplayParams)) {
|
||||||
|
$aExtraParams['panel_title'] = $aDisplayParams['title'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$oForm->AddSubBlock($oDisplayBlock->GetDisplay($oP, 1, $aExtraParams));
|
||||||
|
$oToolbarButtons = ToolbarUIBlockFactory::MakeStandard(null);
|
||||||
|
$oToolbarButtons->AddCSSClass('ibo-toolbar--button');
|
||||||
|
$oForm->AddSubBlock($oToolbarButtons);
|
||||||
|
$oToolbarButtons->AddSubBlock(ButtonUIBlockFactory::MakeForCancel(Dict::S('UI:Button:Cancel'), 'cancel')->SetOnClickJsCode('window.history.back()'));
|
||||||
|
$oToolbarButtons->AddSubBlock(ButtonUIBlockFactory::MakeForPrimaryAction(Dict::S('UI:Button:Next'), 'next', Dict::S('UI:Button:Next'), true));
|
||||||
|
|
||||||
|
$oP->AddUiBlock($oForm);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -114,4 +114,8 @@ class AttributeObjectKey extends AttributeDBFieldVoid
|
|||||||
|
|
||||||
return (int)$proposedValue;
|
return (int)$proposedValue;
|
||||||
}
|
}
|
||||||
|
public function GetTargetClass($iType = EXTKEY_RELATIVE)
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,10 @@
|
|||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory;
|
||||||
use Combodo\iTop\Application\WebPage\iTopWebPage;
|
use Combodo\iTop\Application\WebPage\iTopWebPage;
|
||||||
|
use UI;
|
||||||
|
|
||||||
require_once('../approot.inc.php');
|
require_once('../approot.inc.php');
|
||||||
require_once(APPROOT.'/application/application.inc.php');
|
require_once(APPROOT.'/application/application.inc.php');
|
||||||
@@ -34,6 +37,7 @@ $oP = new iTopWebPage("iTop - Synchro Replicas");
|
|||||||
|
|
||||||
// Main program
|
// Main program
|
||||||
$sOperation = utils::ReadParam('operation', 'details');
|
$sOperation = utils::ReadParam('operation', 'details');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
switch ($sOperation) {
|
switch ($sOperation) {
|
||||||
case 'details':
|
case 'details':
|
||||||
@@ -46,21 +50,21 @@ try {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'oql':
|
case 'oql':
|
||||||
|
$iSourceId = utils::ReadParam('datasource', null);
|
||||||
|
if ($iSourceId != null) {
|
||||||
|
$oSource = MetaModel::GetObject('SynchroDataSource', $iSourceId);
|
||||||
|
$oBackButton = ButtonUIBlockFactory::MakeLinkNeutral( ApplicationContext::MakeObjectUrl('SynchroDataSource', $iSourceId), Dict::Format('Core:SynchroReplica:BackToDataSource', $oSource->GetName()), 'fas fa-chevron-left');
|
||||||
|
$oP->AddUiBlock($oBackButton);
|
||||||
|
$oP->AddUiBlock(TitleUIBlockFactory::MakeForPage(Dict::Format('Core:SynchroReplica:ListOfReplicas', $oSource->GetName())));
|
||||||
|
}
|
||||||
|
|
||||||
$sOQL = utils::ReadParam('oql', null, false, 'raw_data');
|
$sOQL = utils::ReadParam('oql', null, false, 'raw_data');
|
||||||
if ($sOQL == null) {
|
if ($sOQL == null) {
|
||||||
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'oql'));
|
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'oql'));
|
||||||
}
|
}
|
||||||
$oFilter = DBObjectSearch::FromOQL($sOQL);
|
$oFilter = DBObjectSearch::FromOQL($sOQL);
|
||||||
$oBlock1 = new DisplayBlock($oFilter, 'search', false, ['menu' => false, 'table_id' => '1']);
|
$oBlock1 = new DisplayBlock($oFilter, 'search', false, ['menu' => true, 'table_id' => '1']);
|
||||||
$oBlock1->Display($oP, 0);
|
$oBlock1->Display($oP, 0);
|
||||||
$oP->add('<p class="page-header">'.MetaModel::GetClassIcon('SynchroReplica').Dict::S('Core:SynchroReplica:ListOfReplicas').'</p>');
|
|
||||||
$iSourceId = utils::ReadParam('datasource', null);
|
|
||||||
if ($iSourceId != null) {
|
|
||||||
$oSource = MetaModel::GetObject('SynchroDataSource', $iSourceId);
|
|
||||||
$oP->p(Dict::Format('Core:SynchroReplica:BackToDataSource', $oSource->GetHyperlink()).'</a>');
|
|
||||||
}
|
|
||||||
$oBlock = new DisplayBlock($oFilter, 'list', false, ['menu' => false]);
|
|
||||||
$oBlock->Display($oP, 1);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'delete':
|
case 'delete':
|
||||||
@@ -69,6 +73,81 @@ try {
|
|||||||
$sDelete = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?'.$_SERVER['QUERY_STRING'];
|
$sDelete = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?'.$_SERVER['QUERY_STRING'];
|
||||||
header("Location: $sDelete");
|
header("Location: $sDelete");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'unlinksynchro':
|
||||||
|
$iId = utils::ReadParam('id', null);
|
||||||
|
if ($iId == null) {
|
||||||
|
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'id'));
|
||||||
|
}
|
||||||
|
$oReplica = MetaModel::GetObject('SynchroReplica', $iId);
|
||||||
|
$oReplica->UnLink();
|
||||||
|
|
||||||
|
$oStatLog = $oReplica->ReSynchro();
|
||||||
|
$oP->add(implode('<br>', $oStatLog->GetTraces()));
|
||||||
|
|
||||||
|
$oReplica->DisplayDetails($oP);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'unlink':
|
||||||
|
$iId = utils::ReadParam('id', null);
|
||||||
|
if ($iId == null) {
|
||||||
|
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'id'));
|
||||||
|
}
|
||||||
|
$oReplica = MetaModel::GetObject('SynchroReplica', $iId);
|
||||||
|
$oReplica->UnLink();
|
||||||
|
|
||||||
|
$oReplica->DisplayDetails($oP);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'synchro':
|
||||||
|
$iId = utils::ReadParam('id', null);
|
||||||
|
if ($iId == null) {
|
||||||
|
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'id'));
|
||||||
|
}
|
||||||
|
$oReplica = MetaModel::GetObject('SynchroReplica', $iId);
|
||||||
|
$oStatLog = $oReplica->ReSynchro();
|
||||||
|
$oReplica->DisplayDetails($oP);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'allowdelete':
|
||||||
|
$iId = utils::ReadParam('id', null);
|
||||||
|
if ($iId == null) {
|
||||||
|
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'id'));
|
||||||
|
}
|
||||||
|
$oReplica = MetaModel::GetObject('SynchroReplica', $iId);
|
||||||
|
$oStatLog = $oReplica->Set('status_dest_creator',1);
|
||||||
|
$oReplica->DisplayDetails($oP);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'denydelete': // Select the list of objects to be modified (bulk modify)
|
||||||
|
$iId = utils::ReadParam('id', null);
|
||||||
|
if ($iId == null) {
|
||||||
|
throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'id'));
|
||||||
|
}
|
||||||
|
$oReplica = MetaModel::GetObject('SynchroReplica', $iId);
|
||||||
|
$oStatLog = $oReplica->Set('status_dest_creator', 0);
|
||||||
|
$oReplica->DisplayDetails($oP);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'select_for_unlink_all': // Select the list of objects to be modified (bulk modify)
|
||||||
|
UI::OperationSelectForModifyAll($oP,'UI:UnlinkAllTabTitle', 'UI:UnlinkAllPageTitle', 'form_for_unlink_all');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'select_for_unlinksynchro_all': // Select the list of objects to be modified (bulk modify)
|
||||||
|
UI::OperationSelectForModifyAll($oP,'UI:UnlinkSynchroAllTabTitle', 'UI:UnlinkSynchroAllPageTitle', 'form_for_unlinksynchro_all');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'select_for_synchro_all': // Select the list of objects to be modified (bulk modify)
|
||||||
|
UI::OperationSelectForModifyAll($oP,'UI:SynchroAllTabTitle', 'UI:SynchroAllPageTitle','form_for_synchro_all');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'select_for_allowdelete_all': // Select the list of objects to be modified (bulk modify)
|
||||||
|
UI::OperationSelectForModifyAll($oP,'UI:AllowDeleteAllTabTitle', 'UI:AllowDeleteAllPageTitle','form_for_allowdelete_all');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'select_for_denydelete_all': // Select the list of objects to be modified (bulk modify)
|
||||||
|
UI::OperationSelectForModifyAll($oP,'UI:DenyDeleteAllTabTitle', 'UI:DenyDeleteAllPageTitle','form_for_denydelete_all');
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} catch (CoreException $e) {
|
} catch (CoreException $e) {
|
||||||
$oP->p('<b>An error occured while running the query:</b>');
|
$oP->p('<b>An error occured while running the query:</b>');
|
||||||
|
|||||||
@@ -6,6 +6,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
use Combodo\iTop\Application\WebPage\WebPage;
|
use Combodo\iTop\Application\WebPage\WebPage;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\PopoverMenu\PopoverMenu;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Component\Toolbar\ToolbarUIBlockFactory;
|
||||||
|
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory;
|
||||||
|
use Combodo\iTop\Core\CMDBChange\CMDBChangeOrigin;
|
||||||
|
|
||||||
class SynchroDataSource extends cmdbAbstractObject
|
class SynchroDataSource extends cmdbAbstractObject
|
||||||
{
|
{
|
||||||
@@ -2108,6 +2114,12 @@ class SynchroReplica extends DBObject implements iDisplay
|
|||||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function InitExtendedData($oSource)
|
||||||
|
{
|
||||||
|
$sSQLTable = $oSource->GetDataTable();
|
||||||
|
$this->m_aExtendedData = $this->LoadExtendedDataFromTable($sSQLTable);
|
||||||
|
}
|
||||||
|
|
||||||
public function __construct($aRow = null, $sClassAlias = '', $aAttToLoad = null, $aExtendedDataSpec = null)
|
public function __construct($aRow = null, $sClassAlias = '', $aAttToLoad = null, $aExtendedDataSpec = null)
|
||||||
{
|
{
|
||||||
parent::__construct($aRow, $sClassAlias, $aAttToLoad, $aExtendedDataSpec);
|
parent::__construct($aRow, $sClassAlias, $aAttToLoad, $aExtendedDataSpec);
|
||||||
@@ -2189,6 +2201,16 @@ class SynchroReplica extends DBObject implements iDisplay
|
|||||||
$this->Set('status_last_error', $sText);
|
$this->Set('status_last_error', $sText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Disassociate the replica from the destination object and set the status to "new" to be synchronized with the next operation
|
||||||
|
*/
|
||||||
|
public function UnLink(){
|
||||||
|
$this->Set('dest_id', '');
|
||||||
|
$this->Set('dest_class', '');
|
||||||
|
$this->Set('status', 'new');
|
||||||
|
$this->DBWrite();
|
||||||
|
}
|
||||||
|
|
||||||
public function Synchro($oDataSource, $aReconciliationKeys, $aAttributes, $oChange, &$oStatLog)
|
public function Synchro($oDataSource, $aReconciliationKeys, $aAttributes, $oChange, &$oStatLog)
|
||||||
{
|
{
|
||||||
$oStatLog->AddTrace(">>> Beginning of SynchroReplica::Synchro, replica status is '".$this->Get('status')."'.", $this);
|
$oStatLog->AddTrace(">>> Beginning of SynchroReplica::Synchro, replica status is '".$this->Get('status')."'.", $this);
|
||||||
@@ -2365,6 +2387,89 @@ class SynchroReplica extends DBObject implements iDisplay
|
|||||||
$oStatLog->AddTrace('<<< End of SynchroReplica::Synchro.', $this);
|
$oStatLog->AddTrace('<<< End of SynchroReplica::Synchro.', $this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return \SynchroLog
|
||||||
|
* @throws \ArchivedObjectException
|
||||||
|
* @throws \CoreCannotSaveObjectException
|
||||||
|
* @throws \CoreException
|
||||||
|
* @throws \CoreUnexpectedValue
|
||||||
|
* @throws \CoreWarning
|
||||||
|
* @throws \MySQLException
|
||||||
|
* @throws \OQLException
|
||||||
|
* @throws \SynchroExceptionNotStarted
|
||||||
|
*/
|
||||||
|
public function ReSynchro(): SynchroLog
|
||||||
|
{
|
||||||
|
$oDataSource = MetaModel::GetObject('SynchroDataSource', $this->Get('sync_source_id'));
|
||||||
|
|
||||||
|
$oStatLog = new SynchroLog();
|
||||||
|
$oStatLog->Set('sync_source_id', $oDataSource->GetKey());
|
||||||
|
$oStatLog->Set('start_date', time());
|
||||||
|
$oStatLog->Set('status', 'running');
|
||||||
|
$oStatLog->AddTrace('Manual synchro');
|
||||||
|
|
||||||
|
// Get the list of SQL columns
|
||||||
|
$aAttCodesExpected = array();
|
||||||
|
$aAttCodesToReconcile = array();
|
||||||
|
$aAttCodesToUpdate = array();
|
||||||
|
$sSelectAtt = 'SELECT SynchroAttribute WHERE sync_source_id = :source_id AND (update = 1 OR reconcile = 1)';
|
||||||
|
$oSetAtt = new DBObjectSet(DBObjectSearch::FromOQL($sSelectAtt), array() /* order by*/, array('source_id' => $oDataSource->GetKey()) /* aArgs */);
|
||||||
|
while ($oSyncAtt = $oSetAtt->Fetch()) {
|
||||||
|
if ($oSyncAtt->Get('update')) {
|
||||||
|
$aAttCodesToUpdate[$oSyncAtt->Get('attcode')] = $oSyncAtt;
|
||||||
|
}
|
||||||
|
if ($oSyncAtt->Get('reconcile')) {
|
||||||
|
$aAttCodesToReconcile[$oSyncAtt->Get('attcode')] = $oSyncAtt;
|
||||||
|
}
|
||||||
|
$aAttCodesExpected[$oSyncAtt->Get('attcode')] = $oSyncAtt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the list of attributes, determine reconciliation keys and update targets
|
||||||
|
//
|
||||||
|
if ($oDataSource->Get('reconciliation_policy') == 'use_attributes') {
|
||||||
|
$aReconciliationKeys = $aAttCodesToReconcile;
|
||||||
|
} elseif ($oDataSource->Get('reconciliation_policy') == 'use_primary_key') {
|
||||||
|
// Override the settings made at the attribute level !
|
||||||
|
$aReconciliationKeys = array('primary_key' => null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($aAttCodesToUpdate) == 0) {
|
||||||
|
$oStatLog->AddTrace('No attribute to update');
|
||||||
|
throw new SynchroExceptionNotStarted('There is no attribute to update');
|
||||||
|
}
|
||||||
|
if (count($aReconciliationKeys) == 0) {
|
||||||
|
$oStatLog->AddTrace('No attribute for reconciliation');
|
||||||
|
throw new SynchroExceptionNotStarted('No attribute for reconciliation');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$aAttributesToUpdate = array();
|
||||||
|
foreach ($aAttCodesToUpdate as $sAttCode => $oSyncAtt) {
|
||||||
|
$oAttDef = MetaModel::GetAttributeDef($oDataSource->GetTargetClass(), $sAttCode);
|
||||||
|
if ($oAttDef->IsWritable()) {
|
||||||
|
$aAttributesToUpdate[$sAttCode] = $oSyncAtt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Create a change used for logging all the modifications/creations happening during the synchro
|
||||||
|
$oChange = MetaModel::NewObject('CMDBChange');
|
||||||
|
$oChange->Set('date', time());
|
||||||
|
$sUserString = CMDBChange::GetCurrentUserName();
|
||||||
|
$oChange->Set('userinfo', $sUserString.' '.Dict::S('Core:SyncDataExchangeComment'));
|
||||||
|
$oChange->Set('origin', CMDBChangeOrigin::SYNCHRO_DATA_SOURCE);
|
||||||
|
$oChange->DBInsert();
|
||||||
|
CMDBObject::SetCurrentChange($oChange);
|
||||||
|
|
||||||
|
$this->InitExtendedData($oDataSource);
|
||||||
|
|
||||||
|
$this->Synchro($oDataSource, $aReconciliationKeys, $aAttributesToUpdate, $oChange, $oStatLog);
|
||||||
|
$this->DBUpdate();
|
||||||
|
|
||||||
|
return $oStatLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the destination object with the Extended data found in the synchro_data_XXXX table
|
* Updates the destination object with the Extended data found in the synchro_data_XXXX table
|
||||||
*
|
*
|
||||||
@@ -2681,12 +2786,115 @@ class SynchroReplica extends DBObject implements iDisplay
|
|||||||
public function DisplayDetails(WebPage $oPage, $bEditMode = false)
|
public function DisplayDetails(WebPage $oPage, $bEditMode = false)
|
||||||
{
|
{
|
||||||
// Object's details
|
// Object's details
|
||||||
//$this->DisplayBareHeader($oPage, $bEditMode);
|
$this->DisplayBareHeader($oPage, $bEditMode);
|
||||||
|
|
||||||
$oPage->AddTabContainer(OBJECT_PROPERTIES_TAB);
|
$oPage->AddTabContainer(OBJECT_PROPERTIES_TAB);
|
||||||
$oPage->SetCurrentTabContainer(OBJECT_PROPERTIES_TAB);
|
$oPage->SetCurrentTabContainer(OBJECT_PROPERTIES_TAB);
|
||||||
$oPage->SetCurrentTab('UI:PropertiesTab');
|
$oPage->SetCurrentTab('UI:PropertiesTab');
|
||||||
$this->DisplayBareProperties($oPage, $bEditMode);
|
$this->DisplayBareProperties($oPage, $bEditMode);
|
||||||
}
|
}
|
||||||
|
public function DisplayBareHeader(WebPage $oPage, $bEditMode = false)
|
||||||
|
{
|
||||||
|
$oBlock = UIContentBlockUIBlockFactory::MakeStandard('title-for-replica', ['ibo-page-header--replica-title']);
|
||||||
|
$oPage->AddSubBlock($oBlock);
|
||||||
|
|
||||||
|
$sId = $this->GetKey();
|
||||||
|
$oTitle = TitleUIBlockFactory::MakeNeutral(Dict::S('Class:SynchroReplica'));
|
||||||
|
$oBlock->AddSubBlock($oTitle);
|
||||||
|
$oActionsToolbar = ToolbarUIBlockFactory::MakeForButton(MenuBlock::ACTIONS_TOOLBAR_ID_PREFIX.$sId);
|
||||||
|
$oActionsToolbar->AddCSSClass('ibo-panel--toolbar');
|
||||||
|
$oBlock->AddSubBlock($oActionsToolbar);
|
||||||
|
|
||||||
|
$sClass = get_class($this);
|
||||||
|
$sRootUrl = utils::GetAbsoluteUrlAppRoot();
|
||||||
|
$sUIPage = cmdbAbstractObject::ComputeStandardUIPage($sClass);
|
||||||
|
$oAppContext = new ApplicationContext();
|
||||||
|
$sContext = $oAppContext->GetForLink();
|
||||||
|
if (utils::IsNotNullOrEmptyString($sContext)) {
|
||||||
|
$sContext = '&'.$sContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
$aActions = [];
|
||||||
|
//Delete
|
||||||
|
if (UserRights::IsActionAllowed($sClass, UR_ACTION_DELETE)) {
|
||||||
|
$aActions['UI:Menu:Delete'] = array(
|
||||||
|
'label' => Dict::S('UI:Menu:Delete'),
|
||||||
|
'url' => "{$sRootUrl}pages/$sUIPage?operation=delete&class=$sClass&id=$sId{$sContext}",
|
||||||
|
'tooltip' => Dict::S('Class:SynchroReplica/Action:delete+'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (UserRights::IsActionAllowed($sClass, UR_ACTION_MODIFY)) {
|
||||||
|
if (count($aActions) > 0) {
|
||||||
|
$sSeparator = '<hr class="menu-separator"/>';
|
||||||
|
$aActions['sep_0'] = array('label' => $sSeparator, 'url' => '');
|
||||||
|
}
|
||||||
|
$sUrl = "{$sRootUrl}synchro/replica.php?operation=unlink&class=$sClass&id=$sId{$sContext}";
|
||||||
|
$aActions['Class:SynchroReplica/Action:unlink'] = [
|
||||||
|
'label' => Dict::S('Class:SynchroReplica/Action:unlink'),
|
||||||
|
'url' => $sUrl,
|
||||||
|
'tooltip' => Dict::S('Class:SynchroReplica/Action:unlink+'),
|
||||||
|
];
|
||||||
|
|
||||||
|
$sUrl = "{$sRootUrl}synchro/replica.php?operation=unlinksynchro&class=$sClass&id=$sId{$sContext}";
|
||||||
|
$aActions['Class:SynchroReplica/Action:unlinksynchro'] = [
|
||||||
|
'label' => Dict::S('Class:SynchroReplica/Action:unlinksynchro'),
|
||||||
|
'url' => $sUrl,
|
||||||
|
'tooltip' => Dict::S('Class:SynchroReplica/Action:unlinksynchro+'),
|
||||||
|
];
|
||||||
|
|
||||||
|
$sUrl = "{$sRootUrl}synchro/replica.php?operation=synchro&class=$sClass&id=$sId{$sContext}";
|
||||||
|
$aActions['Class:SynchroReplica/Action:synchro'] = [
|
||||||
|
'label' => Dict::S('Class:SynchroReplica/Action:synchro'),
|
||||||
|
'url' => $sUrl,
|
||||||
|
'tooltip' => Dict::S('Class:SynchroReplica/Action:synchro+'),
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($this->Get('status_dest_creator') == 1) {
|
||||||
|
$sUrl = "{$sRootUrl}synchro/replica.php?operation=denydelete&class=$sClass&id=$sId{$sContext}";
|
||||||
|
$aActions['Class:SynchroReplica/Action:denydelete'] = [
|
||||||
|
'label' => Dict::S('Class:SynchroReplica/Action:denydelete'),
|
||||||
|
'url' => $sUrl,
|
||||||
|
'tooltip' => Dict::S('Class:SynchroReplica/Action:denydelete+'),
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$sUrl = "{$sRootUrl}synchro/replica.php?operation=allowdelete&class=$sClass&id=$sId{$sContext}";
|
||||||
|
$aActions['Class:SynchroReplica/Action:allowdelete'] = [
|
||||||
|
'label' => Dict::S('Class:SynchroReplica/Action:allowdelete'),
|
||||||
|
'url' => $sUrl,
|
||||||
|
'tooltip' => Dict::S('Class:SynchroReplica/Action:allowdelete+'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count($aActions) > 0) {
|
||||||
|
$sRegularActionsMenuTogglerId = "ibo-regular-actions-menu-toggler-{$sId}";
|
||||||
|
$sRegularActionsPopoverMenuId = "ibo-regular-actions-popover-{$sId}";
|
||||||
|
|
||||||
|
$oActionButton = ButtonUIBlockFactory::MakeIconAction('fas fa-ellipsis-v', Dict::S('UI:Menu:Actions'), 'UI:Menu:Actions', '', false, $sRegularActionsMenuTogglerId)
|
||||||
|
->AddCSSClasses(['ibo-action-button', 'ibo-regular-action-button']);
|
||||||
|
|
||||||
|
$oRegularActionsMenu = $oPage->GetPopoverMenu($sRegularActionsPopoverMenuId, $aActions)
|
||||||
|
->SetTogglerJSSelector("#$sRegularActionsMenuTogglerId")
|
||||||
|
->SetContainer(PopoverMenu::ENUM_CONTAINER_BODY);
|
||||||
|
|
||||||
|
$oActionsToolbar->AddSubBlock($oActionButton)
|
||||||
|
->AddSubBlock($oRegularActionsMenu);
|
||||||
|
|
||||||
|
$oActionButton = ButtonUIBlockFactory::MakeIconLink('fas fa-search', Dict::Format('UI:SearchFor_Class', MetaModel::GetName($sClass)), "{$sRootUrl}pages/UI.php?operation=search_form&do_search=0&class=$sClass{$sContext}", '', 'UI:SearchFor_Class');
|
||||||
|
$oActionButton->AddCSSClasses(['ibo-action-button', 'ibo-regular-action-button']);
|
||||||
|
$oActionsToolbar->AddSubBlock($oActionButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
$sUrl = "{$sRootUrl}pages/$sUIPage?operation=display&class=$sClass&id=$sId{$sContext}";
|
||||||
|
$oActionButton = ButtonUIBlockFactory::MakeAlternativeNeutral('', 'UI:Button:Refresh');
|
||||||
|
$oActionButton->SetIconClass('fas fa-sync-alt')
|
||||||
|
->SetOnClickJsCode('window.location.href=\''.$sUrl.'\'')
|
||||||
|
->SetTooltip(Dict::S('UI:Button:Refresh'))
|
||||||
|
->AddCSSClasses(['ibo-action-button', 'ibo-regular-action-button']);
|
||||||
|
$oActionsToolbar->AddSubBlock($oActionButton);
|
||||||
|
|
||||||
|
return $oBlock;
|
||||||
|
}
|
||||||
|
|
||||||
public function DisplayBareProperties(WebPage $oPage, $bEditMode = false, $sPrefix = '', $aExtraParams = [])
|
public function DisplayBareProperties(WebPage $oPage, $bEditMode = false, $sPrefix = '', $aExtraParams = [])
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user