N°8796 - Add PHP code style validation in iTop and extensions - format whole code base

This commit is contained in:
odain
2025-11-07 20:39:38 +01:00
parent 7681c157ec
commit b0a792afab
369 changed files with 22041 additions and 26866 deletions

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Page:DefaultTitle' => 'Uživatelský portál %1$s',
'Page:PleaseWait' => 'Počkejte prosím',
'Page:Home' => 'Domů',
@@ -53,19 +54,19 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Otevřít</a> / <a href="%4$s" class="file_download_link">Stáhnout</a>',
'Portal:Calendar-FirstDayOfWeek' => 'cs', //work with moment.js locales
));
]);
// Object form
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Zavřít tento vstup',
'Portal:Form:Close:Warning' => 'Opravdu chcete opustit tento formulář? Data vložená do formuláře budou ztracena ',
'Portal:Error:ObjectCannotBeCreated' => 'Chyba: objekt nelze vytvořit. Před opětovným odesláním tohoto formuláře zkontrolujte související objekty a přílohy.',
'Portal:Error:ObjectCannotBeUpdated' => 'Chyba: objekt nelze vytvořit. Před opětovným odesláním tohoto formuláře zkontrolujte související objekty a přílohy.',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Brick:Portal:UserProfile:Name' => 'Uživatelský profil',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'Můj profil',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Odhlásit',
@@ -76,15 +77,15 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Nepodařilo se změnit heslo, kontaktujte prosím administrátora',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Osobní informace',
'Brick:Portal:UserProfile:Photo:Title' => 'Foto',
));
]);
// AggregatePageBrick
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Nástěnka',
));
]);
// BrowseBrick brick
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Brick:Portal:Browse:Name' => 'Procházet položky',
'Brick:Portal:Browse:Mode:List' => 'Seznam',
'Brick:Portal:Browse:Mode:Tree' => 'Strom',
@@ -98,10 +99,10 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Sbalit vše',
'Brick:Portal:Browse:Filter:NoData' => 'Žádná položka',
'Brick:Portal:Browse:Mosaic:Back' => 'Zpět',
));
]);
// ManageBrick brick
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Brick:Portal:Manage:Name' => 'Spravovat položky',
'Brick:Portal:Manage:Table:NoData' => 'Žádná položka',
'Brick:Portal:Manage:Table:ItemActions' => 'Akce',
@@ -116,10 +117,10 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Brick:Portal:Manage:fct:avg' => 'Průměr',
'Brick:Portal:Manage:fct:min' => 'Min',
'Brick:Portal:Manage:fct:max' => 'Max',
));
]);
// ObjectBrick brick
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Brick:Portal:Object:Name' => 'Objekt',
'Brick:Portal:Object:Form:Create:Title' => 'Nový %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Aktualizace %1$s',
@@ -131,18 +132,18 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Vybrat %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Zkopíruj odkaz na objekt',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Zkopírováno'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Zkopírováno',
]);
// CreateBrick brick
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Brick:Portal:Create:Name' => 'Rychlé vytvoření',
'Brick:Portal:Create:ChooseType' => 'Vyberte typ',
));
]);
// Filter brick
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Brick:Portal:Filter:Name' => 'Předfiltrování dlaždice',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'např. připojení k wifi',
'Brick:Portal:Filter:SearchInput:Submit' => 'Vyhledat',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Page:DefaultTitle' => '%1$s User portal~~',
'Page:PleaseWait' => 'Please wait...~~',
'Page:Home' => 'Home~~',
@@ -53,19 +54,19 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>~~',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:Calendar-FirstDayOfWeek' => 'da', //work with moment.js locales
));
]);
// Object form
Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Brick:Portal:UserProfile:Name' => 'User profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'My profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Logoff~~',
@@ -76,15 +77,15 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Can\'t change password, please contact your %1$s administrator~~',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Personal information~~',
'Brick:Portal:UserProfile:Photo:Title' => 'Photo~~',
));
]);
// AggregatePageBrick
Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Dashboard~~',
));
]);
// BrowseBrick brick
Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Brick:Portal:Browse:Name' => 'Browse throught items~~',
'Brick:Portal:Browse:Mode:List' => 'List~~',
'Brick:Portal:Browse:Mode:Tree' => 'Tree~~',
@@ -98,10 +99,10 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
));
]);
// ManageBrick brick
Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Brick:Portal:Manage:Name' => 'Manage items~~',
'Brick:Portal:Manage:Table:NoData' => 'No item.~~',
'Brick:Portal:Manage:Table:ItemActions' => 'Actions~~',
@@ -116,10 +117,10 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Brick:Portal:Manage:fct:avg' => 'Average~~',
'Brick:Portal:Manage:fct:min' => 'Min~~',
'Brick:Portal:Manage:fct:max' => 'Max~~',
));
]);
// ObjectBrick brick
Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Brick:Portal:Object:Name' => 'Object~~',
'Brick:Portal:Object:Form:Create:Title' => 'New %1$s~~',
'Brick:Portal:Object:Form:Edit:Title' => 'Updating %1$s~~',
@@ -131,18 +132,18 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~',
]);
// CreateBrick brick
Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Brick:Portal:Create:Name' => 'Quick creation~~',
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
));
]);
// Filter brick
Dict::Add('DA DA', 'Danish', 'Dansk', array(
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Brick:Portal:Filter:Name' => 'Prefilter a brick~~',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg. connect wifi~~',
'Brick:Portal:Filter:SearchInput:Submit' => 'Search~~',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', [
'Page:DefaultTitle' => '%1$s - Benutzer Portal',
'Page:PleaseWait' => 'Bitte warten...',
'Page:Home' => 'Start',
@@ -53,19 +54,19 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Öffnen</a> / <a href="%4$s" class="file_download_link">Download</a>',
'Portal:Calendar-FirstDayOfWeek' => 'de', //work with moment.js locales
));
]);
// Object form
Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Dieses Objekt schließen',
'Portal:Form:Close:Warning' => 'Soll diese Eingabemaske verlassen werden? Eingegebene Daten werden nicht gespeichert.',
'Portal:Error:ObjectCannotBeCreated' => 'Error: Objekt kann nicht erzeugt werden. Prüfen Sie verknüpfte Objekte und Anhänge bevor Sie dieses Formular erneut abschicken.',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: Objekt kann nicht geupdated werden. Prüfen Sie verknüpfte Objekte und Anhänge bevor Sie dieses Formular erneut abschicken.',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', [
'Brick:Portal:UserProfile:Name' => 'Benutzer Profil',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'Mein Profil',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Abmelden',
@@ -76,15 +77,15 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Passwort kann nicht geändert werden - bitte kontaktieren Sie Ihren %1$s Administrator',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Persönliche Informationen',
'Brick:Portal:UserProfile:Photo:Title' => 'Foto',
));
]);
// AggregatePageBrick
Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Dashboard',
));
]);
// BrowseBrick brick
Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', [
'Brick:Portal:Browse:Name' => 'Liste durchgehen',
'Brick:Portal:Browse:Mode:List' => 'Liste',
'Brick:Portal:Browse:Mode:Tree' => 'Baum',
@@ -98,10 +99,10 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Alle kollabieren',
'Brick:Portal:Browse:Filter:NoData' => 'Kein Eintrag',
'Brick:Portal:Browse:Mosaic:Back' => 'Zurück',
));
]);
// ManageBrick brick
Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', [
'Brick:Portal:Manage:Name' => 'Einträge managen',
'Brick:Portal:Manage:Table:NoData' => 'Kein Eintrag.',
'Brick:Portal:Manage:Table:ItemActions' => 'Aktionen',
@@ -116,10 +117,10 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Brick:Portal:Manage:fct:avg' => 'Durchschnitt',
'Brick:Portal:Manage:fct:min' => 'Minimum',
'Brick:Portal:Manage:fct:max' => 'Maximum',
));
]);
// ObjectBrick brick
Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', [
'Brick:Portal:Object:Name' => 'Object',
'Brick:Portal:Object:Form:Create:Title' => 'Neue %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Wird aktualisiert %1$s',
@@ -131,18 +132,18 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Objektverknüpfung kopieren',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Kopiert'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Kopiert',
]);
// CreateBrick brick
Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', [
'Brick:Portal:Create:Name' => 'Schnelles Erstellen',
'Brick:Portal:Create:ChooseType' => 'Bitte wählen Sie einen Typ',
));
]);
// Filter brick
Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', [
'Brick:Portal:Filter:Name' => 'Brick vorfiltern',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'z.B. connect wifi',
'Brick:Portal:Filter:SearchInput:Submit' => 'Suchen',
));
]);

View File

@@ -1,4 +1,5 @@
<?php
/**
* Copyright (C) 2013-2024 Combodo SAS
*
@@ -18,7 +19,7 @@
*/
// Portal
Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', [
'Page:DefaultTitle' => '%1$s User portal',
'Page:PleaseWait' => 'Please wait...',
'Page:Home' => 'Home',
@@ -62,19 +63,19 @@ Dict::Add('EN US', 'English', 'English', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>',
'Portal:Calendar-FirstDayOfWeek' => 'en-us', //work with moment.js locales
));
]);
// Object form
Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s',
]);
// UserProfile brick
Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', [
'Brick:Portal:UserProfile:Name' => 'User profile',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'My profile',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Logoff',
@@ -85,15 +86,15 @@ Dict::Add('EN US', 'English', 'English', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Can\'t change password, please contact your %1$s administrator',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Personal information',
'Brick:Portal:UserProfile:Photo:Title' => 'Photo',
));
]);
// AggregatePageBrick
Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Dashboard',
));
]);
// BrowseBrick brick
Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', [
'Brick:Portal:Browse:Name' => 'Browse throught items',
'Brick:Portal:Browse:Mode:List' => 'List',
'Brick:Portal:Browse:Mode:Tree' => 'Tree',
@@ -107,10 +108,10 @@ Dict::Add('EN US', 'English', 'English', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all',
'Brick:Portal:Browse:Filter:NoData' => 'No item',
'Brick:Portal:Browse:Mosaic:Back' => 'Back',
));
]);
// ManageBrick brick
Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', [
'Brick:Portal:Manage:Name' => 'Manage items',
'Brick:Portal:Manage:Table:NoData' => 'No item.',
'Brick:Portal:Manage:Table:ItemActions' => 'Actions',
@@ -125,10 +126,10 @@ Dict::Add('EN US', 'English', 'English', array(
'Brick:Portal:Manage:fct:avg' => 'Average',
'Brick:Portal:Manage:fct:min' => 'Min',
'Brick:Portal:Manage:fct:max' => 'Max',
));
]);
// ObjectBrick brick
Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', [
'Brick:Portal:Object:Name' => 'Object',
'Brick:Portal:Object:Form:Create:Title' => 'New %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Updating %1$s',
@@ -140,18 +141,18 @@ Dict::Add('EN US', 'English', 'English', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied',
]);
// CreateBrick brick
Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', [
'Brick:Portal:Create:Name' => 'Quick creation',
'Brick:Portal:Create:ChooseType' => 'Please, choose a type',
));
]);
// Filter brick
Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', [
'Brick:Portal:Filter:Name' => 'Prefilter a brick',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg. connect wifi',
'Brick:Portal:Filter:SearchInput:Submit' => 'Search',
));
]);

View File

@@ -1,11 +1,12 @@
<?php
/**
* @copyright Copyright (C) 2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*/
// Portal
Dict::Add('EN GB', 'British English', 'British English', array(
Dict::Add('EN GB', 'British English', 'British English', [
'Page:DefaultTitle' => '%1$s User portal',
'Page:PleaseWait' => 'Please wait...',
'Page:Home' => 'Home',
@@ -49,19 +50,19 @@ Dict::Add('EN GB', 'British English', 'British English', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>',
'Portal:Calendar-FirstDayOfWeek' => 'en-gb',
));
]);
// Object form
Dict::Add('EN GB', 'British English', 'British English', array(
Dict::Add('EN GB', 'British English', 'British English', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s',
]);
// UserProfile brick
Dict::Add('EN GB', 'British English', 'British English', array(
Dict::Add('EN GB', 'British English', 'British English', [
'Brick:Portal:UserProfile:Name' => 'User profile',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'My profile',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Log off',
@@ -72,15 +73,15 @@ Dict::Add('EN GB', 'British English', 'British English', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Can\'t change password, please contact your %1$s administrator',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Personal information',
'Brick:Portal:UserProfile:Photo:Title' => 'Photo',
));
]);
// AggregatePageBrick
Dict::Add('EN GB', 'British English', 'British English', array(
Dict::Add('EN GB', 'British English', 'British English', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Dashboard',
));
]);
// BrowseBrick brick
Dict::Add('EN GB', 'British English', 'British English', array(
Dict::Add('EN GB', 'British English', 'British English', [
'Brick:Portal:Browse:Name' => 'Browse through items',
'Brick:Portal:Browse:Mode:List' => 'List',
'Brick:Portal:Browse:Mode:Tree' => 'Tree',
@@ -94,10 +95,10 @@ Dict::Add('EN GB', 'British English', 'British English', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all',
'Brick:Portal:Browse:Filter:NoData' => 'No item',
'Brick:Portal:Browse:Mosaic:Back' => 'Back',
));
]);
// ManageBrick brick
Dict::Add('EN GB', 'British English', 'British English', array(
Dict::Add('EN GB', 'British English', 'British English', [
'Brick:Portal:Manage:Name' => 'Manage items',
'Brick:Portal:Manage:Table:NoData' => 'No item.',
'Brick:Portal:Manage:Table:ItemActions' => 'Actions',
@@ -112,10 +113,10 @@ Dict::Add('EN GB', 'British English', 'British English', array(
'Brick:Portal:Manage:fct:avg' => 'Average',
'Brick:Portal:Manage:fct:min' => 'Min',
'Brick:Portal:Manage:fct:max' => 'Max',
));
]);
// ObjectBrick brick
Dict::Add('EN GB', 'British English', 'British English', array(
Dict::Add('EN GB', 'British English', 'British English', [
'Brick:Portal:Object:Name' => 'Object',
'Brick:Portal:Object:Form:Create:Title' => 'New %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Updating %1$s',
@@ -127,18 +128,18 @@ Dict::Add('EN GB', 'British English', 'British English', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied',
]);
// CreateBrick brick
Dict::Add('EN GB', 'British English', 'British English', array(
Dict::Add('EN GB', 'British English', 'British English', [
'Brick:Portal:Create:Name' => 'Quick creation',
'Brick:Portal:Create:ChooseType' => 'Please, choose a type',
));
]);
// Filter brick
Dict::Add('EN GB', 'British English', 'British English', array(
Dict::Add('EN GB', 'British English', 'British English', [
'Brick:Portal:Filter:Name' => 'Prefilter a brick',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg. connect wifi',
'Brick:Portal:Filter:SearchInput:Submit' => 'Search',
));
]);

View File

@@ -1,13 +1,14 @@
<?php
/**
* Spanish Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
* @author Miguel Turrubiates <miguel_tf@yahoo.com>
* @notas Utilizar codificación UTF-8 para mostrar acentos y otros caracteres especiales
* @notas Utilizar codificación UTF-8 para mostrar acentos y otros caracteres especiales
*/
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Page:DefaultTitle' => '%1$s - Portal de Usuario',
'Page:PleaseWait' => 'Por favor espere...',
'Page:Home' => 'Inicio',
@@ -51,19 +52,19 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Abierto</a> / <a href="%4$s" class="file_download_link">Descarga</a>',
'Portal:Calendar-FirstDayOfWeek' => 'es', //work with moment.js locales
));
]);
// Object form
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Cerrar este registro',
'Portal:Form:Close:Warning' => '¿Desea abandorar este formulario? Datos modificados se perderan',
'Portal:Error:ObjectCannotBeCreated' => 'Error: no se puede crear el objeto. Verifique los objetos asociados y archivos adjuntos antes de enviar nuevamente este formulario.',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: no se puede actualizar el objeto. Verifique los objetos asociados y archivos adjuntos antes de enviar nuevamente este formulario.',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Brick:Portal:UserProfile:Name' => 'Perfil del usuario',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'Mi perfil',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Cerrar Sesión',
@@ -74,15 +75,15 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'No se puede cambiar la contraseña, póngase en contacto con el administrador de %1$s',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Información Personal',
'Brick:Portal:UserProfile:Photo:Title' => 'Foto',
));
]);
// AggregatePageBrick
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Tablero de Control',
));
]);
// BrowseBrick brick
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Brick:Portal:Browse:Name' => 'Buscar en todos los elementos',
'Brick:Portal:Browse:Mode:List' => 'Lista',
'Brick:Portal:Browse:Mode:Tree' => 'Árbol',
@@ -96,10 +97,10 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Desplegar todo',
'Brick:Portal:Browse:Filter:NoData' => 'Sin elementos',
'Brick:Portal:Browse:Mosaic:Back' => 'Volver',
));
]);
// ManageBrick brick
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Brick:Portal:Manage:Name' => 'Administrar elementos',
'Brick:Portal:Manage:Table:NoData' => 'Sin elementos',
'Brick:Portal:Manage:Table:ItemActions' => 'Acciones',
@@ -114,10 +115,10 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Brick:Portal:Manage:fct:avg' => 'Promedio',
'Brick:Portal:Manage:fct:min' => 'Mínimo',
'Brick:Portal:Manage:fct:max' => 'Máximo',
));
]);
// ObjectBrick brick
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Brick:Portal:Object:Name' => 'Objecto',
'Brick:Portal:Object:Form:Create:Title' => 'Nuevo %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Actualizando %1$s',
@@ -129,18 +130,18 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Selección %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copiar liga al objeto',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copiado'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copiado',
]);
// CreateBrick brick
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Brick:Portal:Create:Name' => 'Creación rápida',
'Brick:Portal:Create:ChooseType' => 'Por favor, seleccione un tipo',
));
]);
// Filter brick
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Brick:Portal:Filter:Name' => 'Prefiltrar bloque',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'Ej.:. Conectar a WiFi',
'Brick:Portal:Filter:SearchInput:Submit' => 'Buscar',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', [
'Page:DefaultTitle' => 'Portail utilisateur %1$s',
'Page:PleaseWait' => 'Veuillez patienter...',
'Page:Home' => 'Accueil',
@@ -53,19 +54,19 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Ouvrir</a> / <a href="%4$s" class="file_download_link">Télécharger</a>',
'Portal:Calendar-FirstDayOfWeek' => 'fr', //work with moment.js locales
));
]);
// Object form
Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Fermer cette entrée',
'Portal:Form:Close:Warning' => 'Voulez-vous quitter ce formulaire ? Les données saisies seront perdues',
'Portal:Error:ObjectCannotBeCreated' => 'Erreur: L\'objet n\'a pas été créé. Vérifiez les objets liés et les attachements avant de soumettre à nouveau le formulaire.',
'Portal:Error:ObjectCannotBeUpdated' => 'Erreur: L\'objet n\'a pas été modifié. Vérifiez les objets liés et les attachements avant de soumettre à nouveau le formulaire.',
'Portal:Error:CheckToWriteFailed' => 'Erreur durant la validation du champ \'%1$s\' : %2$s',
));
'Portal:Error:CheckToWriteFailed' => 'Erreur durant la validation du champ \'%1$s\' : %2$s',
]);
// UserProfile brick
Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', [
'Brick:Portal:UserProfile:Name' => 'Profil utilisateur',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'Mon profil',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Déconnexion',
@@ -76,15 +77,15 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Impossible de modifier votre mot de passe, veuillez contacter votre administrateur %1$s',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Informations personnelles',
'Brick:Portal:UserProfile:Photo:Title' => 'Photo',
));
]);
// AggregatePageBrick
Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Tableau de bord',
));
]);
// BrowseBrick brick
Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', [
'Brick:Portal:Browse:Name' => 'Navigation dans les éléments',
'Brick:Portal:Browse:Mode:List' => 'Liste',
'Brick:Portal:Browse:Mode:Tree' => 'Hiérarchie',
@@ -98,10 +99,10 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Tout replier',
'Brick:Portal:Browse:Filter:NoData' => 'Aucun élément',
'Brick:Portal:Browse:Mosaic:Back' => 'Retour',
));
]);
// ManageBrick brick
Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', [
'Brick:Portal:Manage:Name' => 'Gestion d\'éléments',
'Brick:Portal:Manage:Table:NoData' => 'Aucun élément',
'Brick:Portal:Manage:Table:ItemActions' => 'Actions',
@@ -116,10 +117,10 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Brick:Portal:Manage:fct:avg' => 'Moyenne',
'Brick:Portal:Manage:fct:min' => 'Min',
'Brick:Portal:Manage:fct:max' => 'Max',
));
]);
// ObjectBrick brick
Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', [
'Brick:Portal:Object:Name' => 'Objet',
'Brick:Portal:Object:Form:Create:Title' => 'Création de %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Modification de %1$s',
@@ -131,18 +132,18 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Sélection de %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copier l\'url de l\'objet',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copié'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copié',
]);
// CreateBrick brick
Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', [
'Brick:Portal:Create:Name' => 'Création rapide',
'Brick:Portal:Create:ChooseType' => 'Veuillez choisir le type',
));
]);
// Filter brick
Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', [
'Brick:Portal:Filter:Name' => 'Préfiltre une brique',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'ex : connecter wifi',
'Brick:Portal:Filter:SearchInput:Submit' => 'Rechercher',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Page:DefaultTitle' => '%1$s Felhasználói portál',
'Page:PleaseWait' => 'Kérem várjon...',
'Page:Home' => 'Kezdőlap',
@@ -53,19 +54,19 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Megnyitás</a> / <a href="%4$s" class="file_download_link">Letöltés</a>',
'Portal:Calendar-FirstDayOfWeek' => 'hu', //work with moment.js locales
));
]);
// Object form
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Bejegyzés bezárása',
'Portal:Form:Close:Warning' => 'Szeretné elhagyni ezt az űrlapot? A megadott adatok elveszhetnek',
'Portal:Error:ObjectCannotBeCreated' => 'Hiba: az objektum nem hozható létre. Ellenőrizze a kapcsolódó objektumokat és mellékleteket, mielőtt újra elküldi ezt az űrlapot.',
'Portal:Error:ObjectCannotBeUpdated' => 'Hiba: az objektum nem frissíthető. Ellenőrizze a kapcsolódó objektumokat és mellékleteket, mielőtt újra elküldi ezt az űrlapot.',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Brick:Portal:UserProfile:Name' => 'Felhasználói profil',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'Saját profil',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Kijelentkezés',
@@ -76,15 +77,15 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Nem tudja megváltoztatni a jelszót, lépjen kapcsolatba a %1$s rendszergazdával',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Személyi adatok',
'Brick:Portal:UserProfile:Photo:Title' => 'Fénykép',
));
]);
// AggregatePageBrick
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Műszerfal',
));
]);
// BrowseBrick brick
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Brick:Portal:Browse:Name' => 'Böngésszen az elemek között',
'Brick:Portal:Browse:Mode:List' => 'Lista',
'Brick:Portal:Browse:Mode:Tree' => 'Fa',
@@ -98,10 +99,10 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Összecsukás',
'Brick:Portal:Browse:Filter:NoData' => 'Nincs elem',
'Brick:Portal:Browse:Mosaic:Back' => 'Vissza',
));
]);
// ManageBrick brick
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Brick:Portal:Manage:Name' => 'Elemek kezelése',
'Brick:Portal:Manage:Table:NoData' => 'Nincs elem',
'Brick:Portal:Manage:Table:ItemActions' => 'Műveletek',
@@ -116,10 +117,10 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Brick:Portal:Manage:fct:avg' => 'Átlag',
'Brick:Portal:Manage:fct:min' => 'Minimum',
'Brick:Portal:Manage:fct:max' => 'Maximum',
));
]);
// ObjectBrick brick
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Brick:Portal:Object:Name' => 'Objektum',
'Brick:Portal:Object:Form:Create:Title' => 'Új %1$s',
'Brick:Portal:Object:Form:Edit:Title' => '%1$s frissítése',
@@ -131,18 +132,18 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => '%1$s kiválasztása',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Objektum hivatkozás másolása',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Másolva'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Másolva',
]);
// CreateBrick brick
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Brick:Portal:Create:Name' => 'Gyors létrehozás',
'Brick:Portal:Create:ChooseType' => 'Válasszon típust',
));
]);
// Filter brick
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Brick:Portal:Filter:Name' => 'Tégla előszűrése',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'pl. wifi kapcsolat',
'Brick:Portal:Filter:SearchInput:Submit' => 'Keresés',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('IT IT', 'Italian', 'Italiano', array(
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Page:DefaultTitle' => '%1$s Portale Utente',
'Page:PleaseWait' => 'Attendere…',
'Page:Home' => 'Home',
@@ -53,19 +54,19 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:Calendar-FirstDayOfWeek' => 'it', //work with moment.js locales
));
]);
// Object form
Dict::Add('IT IT', 'Italian', 'Italiano', array(
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('IT IT', 'Italian', 'Italiano', array(
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Brick:Portal:UserProfile:Name' => 'User profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'My profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Logoff~~',
@@ -76,15 +77,15 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Can\'t change password, please contact your %1$s administrator~~',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Personal information~~',
'Brick:Portal:UserProfile:Photo:Title' => 'Photo~~',
));
]);
// AggregatePageBrick
Dict::Add('IT IT', 'Italian', 'Italiano', array(
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Dashboard~~',
));
]);
// BrowseBrick brick
Dict::Add('IT IT', 'Italian', 'Italiano', array(
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Brick:Portal:Browse:Name' => 'Browse throught items~~',
'Brick:Portal:Browse:Mode:List' => 'List~~',
'Brick:Portal:Browse:Mode:Tree' => 'Tree~~',
@@ -98,10 +99,10 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
));
]);
// ManageBrick brick
Dict::Add('IT IT', 'Italian', 'Italiano', array(
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Brick:Portal:Manage:Name' => 'Manage items~~',
'Brick:Portal:Manage:Table:NoData' => 'No item.~~',
'Brick:Portal:Manage:Table:ItemActions' => 'Actions~~',
@@ -116,10 +117,10 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Brick:Portal:Manage:fct:avg' => 'Average~~',
'Brick:Portal:Manage:fct:min' => 'Min~~',
'Brick:Portal:Manage:fct:max' => 'Max~~',
));
]);
// ObjectBrick brick
Dict::Add('IT IT', 'Italian', 'Italiano', array(
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Brick:Portal:Object:Name' => 'Object~~',
'Brick:Portal:Object:Form:Create:Title' => 'New %1$s~~',
'Brick:Portal:Object:Form:Edit:Title' => 'Updating %1$s~~',
@@ -131,18 +132,18 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~',
]);
// CreateBrick brick
Dict::Add('IT IT', 'Italian', 'Italiano', array(
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Brick:Portal:Create:Name' => 'Quick creation~~',
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
));
]);
// Filter brick
Dict::Add('IT IT', 'Italian', 'Italiano', array(
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Brick:Portal:Filter:Name' => 'Prefilter a brick~~',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg. connect wifi~~',
'Brick:Portal:Filter:SearchInput:Submit' => 'Search~~',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', [
'Page:DefaultTitle' => '%1$s User portal~~',
'Page:PleaseWait' => 'Please wait...~~',
'Page:Home' => 'Home~~',
@@ -53,19 +54,19 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>~~',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:Calendar-FirstDayOfWeek' => 'ja', //work with moment.js locales
));
]);
// Object form
Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', [
'Brick:Portal:UserProfile:Name' => 'User profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'My profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Logoff~~',
@@ -76,15 +77,15 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Can\'t change password, please contact your %1$s administrator~~',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Personal information~~',
'Brick:Portal:UserProfile:Photo:Title' => 'Photo~~',
));
]);
// AggregatePageBrick
Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Dashboard~~',
));
]);
// BrowseBrick brick
Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', [
'Brick:Portal:Browse:Name' => 'Browse throught items~~',
'Brick:Portal:Browse:Mode:List' => 'List~~',
'Brick:Portal:Browse:Mode:Tree' => 'Tree~~',
@@ -98,10 +99,10 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
));
]);
// ManageBrick brick
Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', [
'Brick:Portal:Manage:Name' => 'Manage items~~',
'Brick:Portal:Manage:Table:NoData' => 'No item.~~',
'Brick:Portal:Manage:Table:ItemActions' => 'Actions~~',
@@ -116,10 +117,10 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Brick:Portal:Manage:fct:avg' => 'Average~~',
'Brick:Portal:Manage:fct:min' => 'Min~~',
'Brick:Portal:Manage:fct:max' => 'Max~~',
));
]);
// ObjectBrick brick
Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', [
'Brick:Portal:Object:Name' => 'Object~~',
'Brick:Portal:Object:Form:Create:Title' => 'New %1$s~~',
'Brick:Portal:Object:Form:Edit:Title' => 'Updating %1$s~~',
@@ -131,18 +132,18 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~',
]);
// CreateBrick brick
Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', [
'Brick:Portal:Create:Name' => 'Quick creation~~',
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
));
]);
// Filter brick
Dict::Add('JA JP', 'Japanese', '日本語', array(
Dict::Add('JA JP', 'Japanese', '日本語', [
'Brick:Portal:Filter:Name' => 'Prefilter a brick~~',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg. connect wifi~~',
'Brick:Portal:Filter:SearchInput:Submit' => 'Search~~',
));
]);

View File

@@ -1,16 +1,17 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
* @author Jeffrey Bostoen <info@jeffreybostoen.be> (2018 - 2022)
*
*/
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Page:DefaultTitle' => '%1$s Gebruikersportaal',
'Page:PleaseWait' => 'Even geduld...',
'Page:Home' => 'Welkom',
@@ -54,19 +55,19 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>',
'Portal:Calendar-FirstDayOfWeek' => 'nl', //work with moment.js locales
));
]);
// Object form
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Sluit dit item.',
'Portal:Form:Close:Warning' => 'Ben je zeker dat je dit venster wil sluiten? Ingevoerde gegevens kunnen verloren gaan.',
'Portal:Error:ObjectCannotBeCreated' => 'Fout: object kan niet worden aangemaakt. Kijk verwante objecten en bijlagen na vooraleer dit formulier opnieuw te versturen.',
'Portal:Error:ObjectCannotBeUpdated' => 'Fout: object kan niet worden aangepast. Kijk verwante objecten en bijlagen na vooraleer dit formulier opnieuw te versturen.',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Brick:Portal:UserProfile:Name' => 'Gebruikersprofiel',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'Mijn profiel',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Uitloggen',
@@ -77,15 +78,15 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Jouw wachtwoord kan niet gewijzigd worden. Neem contact op met de beheerder',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Persoonlijke informatie',
'Brick:Portal:UserProfile:Photo:Title' => 'Foto',
));
]);
// AggregatePageBrick
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Dashboard',
));
]);
// BrowseBrick brick
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Brick:Portal:Browse:Name' => 'Bladeren',
'Brick:Portal:Browse:Mode:List' => 'Lijst',
'Brick:Portal:Browse:Mode:Tree' => 'Boomstructuur',
@@ -99,10 +100,10 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Verberg alles',
'Brick:Portal:Browse:Filter:NoData' => 'Geen gegevens',
'Brick:Portal:Browse:Mosaic:Back' => 'Terug',
));
]);
// ManageBrick brick
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Brick:Portal:Manage:Name' => 'Beheer items',
'Brick:Portal:Manage:Table:NoData' => 'Geen gegevens',
'Brick:Portal:Manage:Table:ItemActions' => 'Acties',
@@ -117,10 +118,10 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Brick:Portal:Manage:fct:avg' => 'Gemiddelde',
'Brick:Portal:Manage:fct:min' => 'Min',
'Brick:Portal:Manage:fct:max' => 'Max',
));
]);
// ObjectBrick brick
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Brick:Portal:Object:Name' => 'Object',
'Brick:Portal:Object:Form:Create:Title' => 'Nieuw %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Verwerken %1$s',
@@ -132,18 +133,18 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Selecteer %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Kopieer link naar object',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Gekopieerd'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Gekopieerd',
]);
// CreateBrick brick
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Brick:Portal:Create:Name' => 'Snel aanmaken',
'Brick:Portal:Create:ChooseType' => 'Geef een type op.',
));
]);
// Filter brick
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Brick:Portal:Filter:Name' => 'Voorfilteren van een bouwsteen',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'bv. wifi-verbinding',
'Brick:Portal:Filter:SearchInput:Submit' => 'Zoek',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('PL PL', 'Polish', 'Polski', array(
Dict::Add('PL PL', 'Polish', 'Polski', [
'Page:DefaultTitle' => '%1$s portal użytkownika',
'Page:PleaseWait' => 'Proszę czekać...',
'Page:Home' => 'Start',
@@ -53,19 +54,19 @@ Dict::Add('PL PL', 'Polish', 'Polski', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Pobierz</a>',
'Portal:Calendar-FirstDayOfWeek' => 'en-us', //work with moment.js locales
));
]);
// Object form
Dict::Add('PL PL', 'Polish', 'Polski', array(
Dict::Add('PL PL', 'Polish', 'Polski', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Zamknij ten wpis',
'Portal:Form:Close:Warning' => 'Chcesz opuścić ten formularz? Wprowadzone dane mogą zostać utracone',
'Portal:Error:ObjectCannotBeCreated' => 'Błąd: nie można utworzyć obiektu. Sprawdź powiązane obiekty i załączniki przed ponownym przesłaniem tego formularza.',
'Portal:Error:ObjectCannotBeUpdated' => 'Błąd: nie można zaktualizować obiektu. Sprawdź powiązane obiekty i załączniki przed ponownym przesłaniem tego formularza.',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('PL PL', 'Polish', 'Polski', array(
Dict::Add('PL PL', 'Polish', 'Polski', [
'Brick:Portal:UserProfile:Name' => 'Profil użytkownika',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'Mój profil',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Wyloguj',
@@ -76,15 +77,15 @@ Dict::Add('PL PL', 'Polish', 'Polski', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Nie można zmienić hasła. Skontaktuj się z administratorem %1$s',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Informacje osobiste',
'Brick:Portal:UserProfile:Photo:Title' => 'Zdjęcie',
));
]);
// AggregatePageBrick
Dict::Add('PL PL', 'Polish', 'Polski', array(
Dict::Add('PL PL', 'Polish', 'Polski', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Pulpit',
));
]);
// BrowseBrick brick
Dict::Add('PL PL', 'Polish', 'Polski', array(
Dict::Add('PL PL', 'Polish', 'Polski', [
'Brick:Portal:Browse:Name' => 'Przeglądaj elementy',
'Brick:Portal:Browse:Mode:List' => 'Lista',
'Brick:Portal:Browse:Mode:Tree' => 'Drzewo',
@@ -98,10 +99,10 @@ Dict::Add('PL PL', 'Polish', 'Polski', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Zwiń wszystkie',
'Brick:Portal:Browse:Filter:NoData' => 'Brak elementu',
'Brick:Portal:Browse:Mosaic:Back' => 'Wstecz',
));
]);
// ManageBrick brick
Dict::Add('PL PL', 'Polish', 'Polski', array(
Dict::Add('PL PL', 'Polish', 'Polski', [
'Brick:Portal:Manage:Name' => 'Zarządzaj elementami',
'Brick:Portal:Manage:Table:NoData' => 'Brak elementu.',
'Brick:Portal:Manage:Table:ItemActions' => 'Akcje',
@@ -116,10 +117,10 @@ Dict::Add('PL PL', 'Polish', 'Polski', array(
'Brick:Portal:Manage:fct:avg' => 'Średnia',
'Brick:Portal:Manage:fct:min' => 'Minimum',
'Brick:Portal:Manage:fct:max' => 'Maksimum',
));
]);
// ObjectBrick brick
Dict::Add('PL PL', 'Polish', 'Polski', array(
Dict::Add('PL PL', 'Polish', 'Polski', [
'Brick:Portal:Object:Name' => 'Obiekty',
'Brick:Portal:Object:Form:Create:Title' => 'Nowy %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Aktualizacja %1$s',
@@ -131,18 +132,18 @@ Dict::Add('PL PL', 'Polish', 'Polski', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Wybierz %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Skopiuj obiekt',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Skopiowano'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Skopiowano',
]);
// CreateBrick brick
Dict::Add('PL PL', 'Polish', 'Polski', array(
Dict::Add('PL PL', 'Polish', 'Polski', [
'Brick:Portal:Create:Name' => 'Szybkie tworzenie',
'Brick:Portal:Create:ChooseType' => 'Proszę wybrać typ',
));
]);
// Filter brick
Dict::Add('PL PL', 'Polish', 'Polski', array(
Dict::Add('PL PL', 'Polish', 'Polski', [
'Brick:Portal:Filter:Name' => 'Wstępny filtr',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'na przykład. podłącz wifi',
'Brick:Portal:Filter:SearchInput:Submit' => 'Szukaj',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Page:DefaultTitle' => 'Portal do Usuário do '.ITOP_APPLICATION_SHORT,
'Page:PleaseWait' => 'Aguarde...',
'Page:Home' => 'Página inicial',
@@ -53,19 +54,19 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Abrir</a> / <a href="%4$s" class="file_download_link">Download</a>',
'Portal:Calendar-FirstDayOfWeek' => 'pt-br', //work with moment.js locales
));
]);
// Object form
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Fechar esta solicitação',
'Portal:Form:Close:Warning' => 'Você deseja abandonar esta página? Os dados digitados podem ser perdidos',
'Portal:Error:ObjectCannotBeCreated' => 'Erro: objeto não pode ser criado. Verifique os objetos e anexos associados antes de enviar novamente este formulário',
'Portal:Error:ObjectCannotBeUpdated' => 'Erro: objeto não pode ser atualizado. Verifique os objetos e anexos associados antes de enviar novamente este formulário',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Brick:Portal:UserProfile:Name' => 'Perfil de Usuário',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'Meu Perfil',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Sair',
@@ -76,15 +77,15 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Não foi possível alterar sua senha, entre em contato com a T.I.',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Informações pessoais',
'Brick:Portal:UserProfile:Photo:Title' => 'Imagem',
));
]);
// AggregatePageBrick
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Painel do '.ITOP_APPLICATION_SHORT,
));
]);
// BrowseBrick brick
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Brick:Portal:Browse:Name' => 'Navegar por itens',
'Brick:Portal:Browse:Mode:List' => 'Lista',
'Brick:Portal:Browse:Mode:Tree' => 'Cascata',
@@ -98,10 +99,10 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Recolher todos',
'Brick:Portal:Browse:Filter:NoData' => 'Sem dados',
'Brick:Portal:Browse:Mosaic:Back' => 'Voltar',
));
]);
// ManageBrick brick
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Brick:Portal:Manage:Name' => 'Gerenciar itens',
'Brick:Portal:Manage:Table:NoData' => 'Sem dados',
'Brick:Portal:Manage:Table:ItemActions' => 'Ações',
@@ -116,10 +117,10 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Brick:Portal:Manage:fct:avg' => 'Média',
'Brick:Portal:Manage:fct:min' => 'Min.',
'Brick:Portal:Manage:fct:max' => 'Máx.',
));
]);
// ObjectBrick brick
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Brick:Portal:Object:Name' => 'Objeto',
'Brick:Portal:Object:Form:Create:Title' => 'Novo %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Alterar %1$s',
@@ -131,18 +132,18 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Selecionar %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copiar',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copiado'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copiado',
]);
// CreateBrick brick
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Brick:Portal:Create:Name' => 'Criação rápida',
'Brick:Portal:Create:ChooseType' => 'Por favor, escolha um tipo:',
));
]);
// Filter brick
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Brick:Portal:Filter:Name' => 'Filtro ativado',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'ex. conectar ao WiFi',
'Brick:Portal:Filter:SearchInput:Submit' => 'Pesquisa',
));
]);

View File

@@ -1,16 +1,17 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
* @author Vladimir Kunin <v.b.kunin@gmail.com>
*
*/
Dict::Add('RU RU', 'Russian', 'Русский', array(
Dict::Add('RU RU', 'Russian', 'Русский', [
'Page:DefaultTitle' => 'Пользовательский портал %1$s',
'Page:PleaseWait' => 'Пожалуйста, подождите...',
'Page:Home' => 'Домашняя страница',
@@ -54,19 +55,19 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Открыть</a> / <a href="%4$s" class="file_download_link">Скачать</a>',
'Portal:Calendar-FirstDayOfWeek' => 'ru', //work with moment.js locales
));
]);
// Object form
Dict::Add('RU RU', 'Russian', 'Русский', array(
Dict::Add('RU RU', 'Russian', 'Русский', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Вы действительно хотите закрыть эту форму? Введённые данные могут быть утеряны.',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('RU RU', 'Russian', 'Русский', array(
Dict::Add('RU RU', 'Russian', 'Русский', [
'Brick:Portal:UserProfile:Name' => 'Профиль пользователя',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'Мой профиль',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Выйти',
@@ -77,15 +78,15 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Не удалось изменить пароль, пожалуйста, свяжитесь с вашим администратором %1$s.',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Персональная информация',
'Brick:Portal:UserProfile:Photo:Title' => 'Фотография',
));
]);
// AggregatePageBrick
Dict::Add('RU RU', 'Russian', 'Русский', array(
Dict::Add('RU RU', 'Russian', 'Русский', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Дашборд',
));
]);
// BrowseBrick brick
Dict::Add('RU RU', 'Russian', 'Русский', array(
Dict::Add('RU RU', 'Russian', 'Русский', [
'Brick:Portal:Browse:Name' => 'Просмотр элементов',
'Brick:Portal:Browse:Mode:List' => 'Список',
'Brick:Portal:Browse:Mode:Tree' => 'Дерево',
@@ -99,10 +100,10 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Свернуть все',
'Brick:Portal:Browse:Filter:NoData' => 'Нет элементов',
'Brick:Portal:Browse:Mosaic:Back' => 'Назад',
));
]);
// ManageBrick brick
Dict::Add('RU RU', 'Russian', 'Русский', array(
Dict::Add('RU RU', 'Russian', 'Русский', [
'Brick:Portal:Manage:Name' => 'Управление элементами',
'Brick:Portal:Manage:Table:NoData' => 'Нет элементов',
'Brick:Portal:Manage:Table:ItemActions' => 'Действия',
@@ -117,10 +118,10 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Brick:Portal:Manage:fct:avg' => 'Среднее',
'Brick:Portal:Manage:fct:min' => 'Минимум',
'Brick:Portal:Manage:fct:max' => 'Максимум',
));
]);
// ObjectBrick brick
Dict::Add('RU RU', 'Russian', 'Русский', array(
Dict::Add('RU RU', 'Russian', 'Русский', [
'Brick:Portal:Object:Name' => 'Object',
'Brick:Portal:Object:Form:Create:Title' => 'Создать %1$s',
'Brick:Portal:Object:Form:Edit:Title' => 'Обновление %1$s',
@@ -132,18 +133,18 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Выбрать %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Скопировать ссылку на объект',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Ссылка скопирована'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Ссылка скопирована',
]);
// CreateBrick brick
Dict::Add('RU RU', 'Russian', 'Русский', array(
Dict::Add('RU RU', 'Russian', 'Русский', [
'Brick:Portal:Create:Name' => 'Быстрое создание',
'Brick:Portal:Create:ChooseType' => 'Пожалуйста, выберите тип',
));
]);
// Filter brick
Dict::Add('RU RU', 'Russian', 'Русский', array(
Dict::Add('RU RU', 'Russian', 'Русский', [
'Brick:Portal:Filter:Name' => 'Фильтр',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'например, подключить wi-fi',
'Brick:Portal:Filter:SearchInput:Submit' => 'Искать',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Page:DefaultTitle' => '%1$s User portal~~',
'Page:PleaseWait' => 'Please wait...~~',
'Page:Home' => 'Home~~',
@@ -53,19 +54,19 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>~~',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:Calendar-FirstDayOfWeek' => 'en-us~~', //work with moment.js locales
));
]);
// Object form
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Brick:Portal:UserProfile:Name' => 'User profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'My profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Logoff~~',
@@ -76,15 +77,15 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Can\'t change password, please contact your %1$s administrator~~',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Personal information~~',
'Brick:Portal:UserProfile:Photo:Title' => 'Photo~~',
));
]);
// AggregatePageBrick
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Dashboard~~',
));
]);
// BrowseBrick brick
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Brick:Portal:Browse:Name' => 'Browse throught items~~',
'Brick:Portal:Browse:Mode:List' => 'List~~',
'Brick:Portal:Browse:Mode:Tree' => 'Tree~~',
@@ -98,10 +99,10 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
));
]);
// ManageBrick brick
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Brick:Portal:Manage:Name' => 'Manage items~~',
'Brick:Portal:Manage:Table:NoData' => 'No item.~~',
'Brick:Portal:Manage:Table:ItemActions' => 'Actions~~',
@@ -116,10 +117,10 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Brick:Portal:Manage:fct:avg' => 'Average~~',
'Brick:Portal:Manage:fct:min' => 'Min~~',
'Brick:Portal:Manage:fct:max' => 'Max~~',
));
]);
// ObjectBrick brick
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Brick:Portal:Object:Name' => 'Object~~',
'Brick:Portal:Object:Form:Create:Title' => 'New %1$s~~',
'Brick:Portal:Object:Form:Edit:Title' => 'Updating %1$s~~',
@@ -131,18 +132,18 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~',
]);
// CreateBrick brick
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Brick:Portal:Create:Name' => 'Quick creation~~',
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
));
]);
// Filter brick
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Brick:Portal:Filter:Name' => 'Prefilter a brick~~',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg. connect wifi~~',
'Brick:Portal:Filter:SearchInput:Submit' => 'Search~~',
));
]);

View File

@@ -1,15 +1,16 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*
*
*/
/**
*
*/
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Page:DefaultTitle' => '%1$s User portal~~',
'Page:PleaseWait' => 'Please wait...~~',
'Page:Home' => 'Home~~',
@@ -53,19 +54,19 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>~~',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:Calendar-FirstDayOfWeek' => 'tr', //work with moment.js locales
));
]);
// Object form
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Brick:Portal:UserProfile:Name' => 'User profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => 'My profile~~',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => 'Logoff~~',
@@ -76,15 +77,15 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => 'Can\'t change password, please contact your %1$s administrator~~',
'Brick:Portal:UserProfile:PersonalInformations:Title' => 'Personal information~~',
'Brick:Portal:UserProfile:Photo:Title' => 'Photo~~',
));
]);
// AggregatePageBrick
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Brick:Portal:AggregatePage:DefaultTitle' => 'Dashboard~~',
));
]);
// BrowseBrick brick
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Brick:Portal:Browse:Name' => 'Browse throught items~~',
'Brick:Portal:Browse:Mode:List' => 'List~~',
'Brick:Portal:Browse:Mode:Tree' => 'Tree~~',
@@ -98,10 +99,10 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
));
]);
// ManageBrick brick
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Brick:Portal:Manage:Name' => 'Manage items~~',
'Brick:Portal:Manage:Table:NoData' => 'No item.~~',
'Brick:Portal:Manage:Table:ItemActions' => 'Actions~~',
@@ -116,10 +117,10 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Brick:Portal:Manage:fct:avg' => 'Average~~',
'Brick:Portal:Manage:fct:min' => 'Min~~',
'Brick:Portal:Manage:fct:max' => 'Max~~',
));
]);
// ObjectBrick brick
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Brick:Portal:Object:Name' => 'Object~~',
'Brick:Portal:Object:Form:Create:Title' => 'New %1$s~~',
'Brick:Portal:Object:Form:Edit:Title' => 'Updating %1$s~~',
@@ -131,18 +132,18 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s~~',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~',
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~',
]);
// CreateBrick brick
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Brick:Portal:Create:Name' => 'Quick creation~~',
'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~',
));
]);
// Filter brick
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Brick:Portal:Filter:Name' => 'Prefilter a brick~~',
'Brick:Portal:Filter:SearchInput:Placeholder' => 'eg. connect wifi~~',
'Brick:Portal:Filter:SearchInput:Submit' => 'Search~~',
));
]);

View File

@@ -1,4 +1,5 @@
<?php
/**
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
@@ -18,7 +19,7 @@
* You should have received a copy of the GNU Affero General Public License
*/
// Portal
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Page:DefaultTitle' => '%1$s 用户门户',
'Page:PleaseWait' => '请稍候...',
'Page:Home' => '主页',
@@ -62,19 +63,19 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">打开</a> / <a href="%4$s" class="file_download_link">下载</a>',
'Portal:Calendar-FirstDayOfWeek' => 'zh-cn', //work with moment.js locales
));
]);
// Object form
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Portal:Form:Caselog:Entry:Close:Tooltip' => '关闭此条目',
'Portal:Form:Close:Warning' => '确定要离开表单吗? 已输入数据会丢失',
'Portal:Error:ObjectCannotBeCreated' => '错误: 无法创建对象. 请在再次提交表单前检查相关对象和附件.',
'Portal:Error:ObjectCannotBeUpdated' => '错误: 无法更新对象. 请在再次提交表单前检查相关对象和附件.',
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
));
'Portal:Error:CheckToWriteFailed' => 'Error during validation of field \'%1$s\': %2$s~~',
]);
// UserProfile brick
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Brick:Portal:UserProfile:Name' => '用户资料',
'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil' => '我的资料',
'Brick:Portal:UserProfile:Navigation:Dropdown:Logout' => '注销',
@@ -85,15 +86,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Brick:Portal:UserProfile:Password:CantChangeForUnknownReason' => '无法修改密码, 请联系管理员',
'Brick:Portal:UserProfile:PersonalInformations:Title' => '人员信息',
'Brick:Portal:UserProfile:Photo:Title' => '头像',
));
]);
// AggregatePageBrick
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Brick:Portal:AggregatePage:DefaultTitle' => '仪表盘',
));
]);
// BrowseBrick brick
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Brick:Portal:Browse:Name' => '浏览项目',
'Brick:Portal:Browse:Mode:List' => '列表',
'Brick:Portal:Browse:Mode:Tree' => '树形',
@@ -107,10 +108,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Brick:Portal:Browse:Tree:CollapseAll' => '全部收起',
'Brick:Portal:Browse:Filter:NoData' => '没有项目',
'Brick:Portal:Browse:Mosaic:Back' => '返回',
));
]);
// ManageBrick brick
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Brick:Portal:Manage:Name' => '管理项目',
'Brick:Portal:Manage:Table:NoData' => '没有项目.',
'Brick:Portal:Manage:Table:ItemActions' => '操作',
@@ -125,10 +126,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Brick:Portal:Manage:fct:avg' => '平均',
'Brick:Portal:Manage:fct:min' => '最小',
'Brick:Portal:Manage:fct:max' => '最大',
));
]);
// ObjectBrick brick
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Brick:Portal:Object:Name' => '对象',
'Brick:Portal:Object:Form:Create:Title' => '新建 %1$s',
'Brick:Portal:Object:Form:Edit:Title' => '正在更新 %1$s',
@@ -140,18 +141,18 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Brick:Portal:Object:Search:Hierarchy:Title' => '选择 %1$s',
'Brick:Portal:Object:Copy:TextToCopy' => '%2$s',
'Brick:Portal:Object:Copy:Tooltip' => '复制对象链接',
'Brick:Portal:Object:Copy:CopiedTooltip' => '已复制'
));
'Brick:Portal:Object:Copy:CopiedTooltip' => '已复制',
]);
// CreateBrick brick
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Brick:Portal:Create:Name' => '快速创建',
'Brick:Portal:Create:ChooseType' => '请选择类型',
));
]);
// Filter brick
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Brick:Portal:Filter:Name' => '预筛选组件',
'Brick:Portal:Filter:SearchInput:Placeholder' => '例如. 连接wifi',
'Brick:Portal:Filter:SearchInput:Submit' => '搜索',
));
]);

View File

@@ -1,4 +1,5 @@
<?php
/**
* Copyright (C) 2013-2024 Combodo SAS
*
@@ -20,42 +21,42 @@
/** @noinspection PhpUnhandledExceptionInspection */
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-portal-base/3.3.0', array(
'itop-portal-base/3.3.0',
[
// Identification
'label' => 'Portal Development Library',
'category' => 'Portal',
// Setup
'dependencies' => array(
),
'dependencies' => [
],
'mandatory' => true,
'visible' => false,
// Components
'datamodel' => array(
'datamodel' => [
// Note: The autoloader is there instead of portal/config/bootstrap.php in order to be available for other modules with a dependency on this one.
// eg. If a module has a class extending \Combodo\iTop\Portal\Controller\AbstractController, it needs to find it even if the portal kernel is not loaded.
'portal/vendor/autoload.php',
),
'webservice' => array(
],
'webservice' => [
//'webservices.itop-portal-base.php',
),
'dictionary' => array(
),
'data.struct' => array(
],
'dictionary' => [
],
'data.struct' => [
//'data.struct.itop-portal-base.xml',
),
'data.sample' => array(
],
'data.sample' => [
//'data.sample.itop-portal-base.xml',
),
],
// Documentation
'doc.manual_setup' => '',
'doc.more_information' => '',
// Default settings
'settings' => array(
),
)
'settings' => [
],
]
);
// ____ _ _ _ __ _ _ _ _ _______
// | _ \| | ___ __ _ ___ ___ | |_ __ _| | _____ ___ __ _ _ __ ___ ___ / _| | |_| |__ ___ _ __ ___ _ __| |_ __ _| | / /___ /
// | |_) | |/ _ \/ _` / __|/ _ \ | __/ _` | |/ / _ \ / __/ _` | '__/ _ \ / _ \| |_ | __| '_ \ / _ \ | '_ \ / _ \| '__| __/ _` | | / / |_ \

View File

@@ -28,14 +28,10 @@ use Symfony\Component\Dotenv\Dotenv;
require_once APPROOT.'/lib/autoload.php';
// Load current environment if necessary (typically from CLI as the app is not started yet)
if (!defined('MODULESROOT'))
{
if (file_exists(__DIR__.'/../../../../approot.inc.php'))
{
if (!defined('MODULESROOT')) {
if (file_exists(__DIR__.'/../../../../approot.inc.php')) {
require_once __DIR__.'/../../../../approot.inc.php'; // When in env-xxxx folder
}
else
{
} else {
require_once __DIR__.'/../../../../../approot.inc.php'; // When in datamodels/x.x folder
}
require_once APPROOT.'/application/startup.inc.php';
@@ -62,7 +58,7 @@ if (!class_exists(Dotenv::class)) {
}
if (null === $sEnv = (isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : null))) {
$oDotenv->populate(array('APP_ENV' => $sEnv = 'prod'));
$oDotenv->populate(['APP_ENV' => $sEnv = 'prod']);
}
if ('test' !== $sEnv && file_exists($sPathDist = "$sPath.local")) {
@@ -83,31 +79,27 @@ if (!class_exists(Dotenv::class)) {
$_SERVER += $_ENV;
$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = (isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : null)) ?: 'prod';
$_SERVER['APP_DEBUG'] = isset($_SERVER['APP_DEBUG']) ? $_SERVER['APP_DEBUG'] : (isset($_ENV['APP_DEBUG']) ? $_ENV['APP_DEBUG'] : ('prod' !== $_SERVER['APP_ENV']));
$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int)$_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'],
FILTER_VALIDATE_BOOLEAN) ? '1' : '0';
$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int)$_SERVER['APP_DEBUG'] || filter_var(
$_SERVER['APP_DEBUG'],
FILTER_VALIDATE_BOOLEAN
) ? '1' : '0';
if ($_SERVER['APP_DEBUG'])
{
if ($_SERVER['APP_DEBUG']) {
umask(0000);
if (class_exists(Debug::class))
{
if (class_exists(Debug::class)) {
Debug::enable();
}
}
if (isset($_ENV['PORTAL_ID']))
{
if (isset($_ENV['PORTAL_ID'])) {
// Nothing to do
}
// Note: Default value is set to "false" to differentiate an empty value from a non given parameter
elseif ($sPortalId = utils::ReadParam('portal_id', false, true))
{
elseif ($sPortalId = utils::ReadParam('portal_id', false, true)) {
$_ENV['PORTAL_ID'] = $sPortalId;
}
elseif (defined('PORTAL_ID'))
{
} elseif (defined('PORTAL_ID')) {
$_ENV['PORTAL_ID'] = PORTAL_ID;
@trigger_error(
sprintf(
@@ -118,16 +110,14 @@ elseif (defined('PORTAL_ID'))
);
}
if (empty($_ENV['PORTAL_ID']))
{
if (empty($_ENV['PORTAL_ID'])) {
echo "Missing argument 'portal_id'";
exit;
}
// Make sure that the PORTAL_ID constant is also defined
// Note: This is widely used in extensions, snippets and all
if (!defined('PORTAL_ID'))
{
if (!defined('PORTAL_ID')) {
define('PORTAL_ID', $_ENV['PORTAL_ID']);
}
@@ -141,4 +131,4 @@ $_ENV['COMBODO_PORTAL_BASE_ABSOLUTE_URL'] = utils::GetAbsoluteUrlModulesRoot().'
$_ENV['COMBODO_PORTAL_BASE_ABSOLUTE_PATH'] = MODULESROOT.'/itop-portal-base/portal/public/';
$_ENV['COMBODO_PORTAL_INSTANCE_ABSOLUTE_URL'] = utils::GetAbsoluteUrlModulesRoot().$_ENV['PORTAL_ID'].'/';
$_ENV['COMBODO_PORTAL_LANGUAGE'] = UserRights::GetUserLanguage();
$_ENV['COMBODO_PORTAL_METADATA_LANGUAGE'] = strtolower(substr($_ENV['COMBODO_PORTAL_LANGUAGE'], 0, 2));;
$_ENV['COMBODO_PORTAL_METADATA_LANGUAGE'] = strtolower(substr($_ENV['COMBODO_PORTAL_LANGUAGE'], 0, 2));;

View File

@@ -32,87 +32,87 @@ use ModuleDesign;
class ManageBrick extends PortalBrick
{
/** @var string ENUM_ACTION_VIEW */
const ENUM_ACTION_VIEW = 'view';
public const ENUM_ACTION_VIEW = 'view';
/** @var string ENUM_ACTION_EDIT */
const ENUM_ACTION_EDIT = 'edit';
public const ENUM_ACTION_EDIT = 'edit';
/** @var string ENUM_TILE_MODE_TEXT */
const ENUM_TILE_MODE_TEXT = 'text';
public const ENUM_TILE_MODE_TEXT = 'text';
/** @var string ENUM_TILE_MODE_BADGE */
const ENUM_TILE_MODE_BADGE = 'badge';
public const ENUM_TILE_MODE_BADGE = 'badge';
/** @var string ENUM_TILE_MODE_PIE */
const ENUM_TILE_MODE_PIE = 'pie-chart';
public const ENUM_TILE_MODE_PIE = 'pie-chart';
/** @var string ENUM_TILE_MODE_BAR */
const ENUM_TILE_MODE_BAR = 'bar-chart';
public const ENUM_TILE_MODE_BAR = 'bar-chart';
/** @var string ENUM_TILE_MODE_TOP */
const ENUM_TILE_MODE_TOP = 'top-list';
public const ENUM_TILE_MODE_TOP = 'top-list';
/** @var string ENUM_DISPLAY_MODE_LIST */
const ENUM_DISPLAY_MODE_LIST = 'list';
public const ENUM_DISPLAY_MODE_LIST = 'list';
/** @var string ENUM_DISPLAY_MODE_PIE */
const ENUM_DISPLAY_MODE_PIE = 'pie-chart';
public const ENUM_DISPLAY_MODE_PIE = 'pie-chart';
/** @var string ENUM_DISPLAY_MODE_BAR */
const ENUM_DISPLAY_MODE_BAR = 'bar-chart';
public const ENUM_DISPLAY_MODE_BAR = 'bar-chart';
/** @var string ENUM_PAGE_TEMPLATE_PATH_TABLE
* @deprecated since 3.2.1
* */
const ENUM_PAGE_TEMPLATE_PATH_TABLE = 'itop-portal-base/portal/templates/bricks/manage/layout-table.html.twig';
public const ENUM_PAGE_TEMPLATE_PATH_TABLE = 'itop-portal-base/portal/templates/bricks/manage/layout-table.html.twig';
/** @var string ENUM_PAGE_TEMPLATE_PATH_CHART
* @deprecated since 3.2.1
* */
const ENUM_PAGE_TEMPLATE_PATH_CHART = 'itop-portal-base/portal/templates/bricks/manage/layout-chart.html.twig';
public const ENUM_PAGE_TEMPLATE_PATH_CHART = 'itop-portal-base/portal/templates/bricks/manage/layout-chart.html.twig';
/** Overloaded constants */
const DEFAULT_DECORATION_CLASS_HOME = 'fas fa-tag';
const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = 'fas fa-tag fa-2x';
public const DEFAULT_DECORATION_CLASS_HOME = 'fas fa-tag';
public const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = 'fas fa-tag fa-2x';
/**
* @deprecated 3.2.1
*/
const DEFAULT_PAGE_TEMPLATE_PATH = self::ENUM_PAGE_TEMPLATE_PATH_TABLE;
const DEFAULT_DATA_LOADING = self::ENUM_DATA_LOADING_LAZY;
public const DEFAULT_PAGE_TEMPLATE_PATH = self::ENUM_PAGE_TEMPLATE_PATH_TABLE;
public const DEFAULT_DATA_LOADING = self::ENUM_DATA_LOADING_LAZY;
/**
* @deprecated 3.2.1
*/
const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/manage/tile-default.html.twig';
const DEFAULT_TILE_CONTROLLER_ACTION = 'Combodo\\iTop\\Portal\\Controller\\ManageBrickController::TileAction';
public const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/manage/tile-default.html.twig';
public const DEFAULT_TILE_CONTROLLER_ACTION = 'Combodo\\iTop\\Portal\\Controller\\ManageBrickController::TileAction';
/** @var string DEFAULT_OQL */
const DEFAULT_OQL = '';
public const DEFAULT_OQL = '';
/** @var string DEFAULT_OPENING_MODE */
const DEFAULT_OPENING_MODE = self::ENUM_ACTION_EDIT;
public const DEFAULT_OPENING_MODE = self::ENUM_ACTION_EDIT;
/** @var int DEFAULT_LIST_LENGTH */
const DEFAULT_LIST_LENGTH = 20;
public const DEFAULT_LIST_LENGTH = 20;
/** @var string DEFAULT_ZLIST_FIELDS */
const DEFAULT_ZLIST_FIELDS = 'list';
public const DEFAULT_ZLIST_FIELDS = 'list';
/** @var bool DEFAULT_SHOW_TAB_COUNTS */
const DEFAULT_SHOW_TAB_COUNTS = false;
public const DEFAULT_SHOW_TAB_COUNTS = false;
/** @var string DEFAULT_DISPLAY_MODE */
const DEFAULT_DISPLAY_MODE = self::ENUM_DISPLAY_MODE_LIST;
public const DEFAULT_DISPLAY_MODE = self::ENUM_DISPLAY_MODE_LIST;
/** @var string DEFAULT_TILE_MODE */
const DEFAULT_TILE_MODE = self::ENUM_TILE_MODE_TEXT;
public const DEFAULT_TILE_MODE = self::ENUM_TILE_MODE_TEXT;
/** @var int DEFAULT_GROUP_LIMIT */
const DEFAULT_GROUP_LIMIT = 0;
public const DEFAULT_GROUP_LIMIT = 0;
/** @var bool DEFAULT_GROUP_SHOW_OTHERS */
const DEFAULT_GROUP_SHOW_OTHERS = true;
public const DEFAULT_GROUP_SHOW_OTHERS = true;
/** @var int DEFAULT_WIDTH */
const DEFAULT_WIDTH = 500;
public const DEFAULT_WIDTH = 500;
/** @var array $aDisplayModes */
public static array $aDisplayModes = array(
public static array $aDisplayModes = [
self::ENUM_DISPLAY_MODE_LIST,
self::ENUM_DISPLAY_MODE_PIE,
self::ENUM_DISPLAY_MODE_BAR,
);
];
/** @var array $aTileModes */
public static array $aTileModes = array(
public static array $aTileModes = [
self::ENUM_TILE_MODE_TEXT,
self::ENUM_TILE_MODE_BADGE,
self::ENUM_TILE_MODE_PIE,
self::ENUM_TILE_MODE_BAR,
self::ENUM_TILE_MODE_TOP,
);
];
/** @var array $aDefaultTileData */
private static array $aDefaultTileData = [
@@ -167,7 +167,7 @@ class ManageBrick extends PortalBrick
/** @var bool $bShowTabCounts */
protected $bShowTabCounts;
/** @var array $aAvailableDisplayModes */
protected $aAvailableDisplayModes = array();
protected $aAvailableDisplayModes = [];
/** @var string $sDefaultDisplayMode */
protected $sDefaultDisplayMode;
/** @var string $sTileMode */
@@ -183,16 +183,17 @@ class ManageBrick extends PortalBrick
public static function RegisterTemplates(TemplatesRegister $oTemplatesRegister): void
{
parent::RegisterTemplates($oTemplatesRegister);
$oTemplatesRegister->RegisterTemplates(self::class,
TemplateDefinitionDto::Create('tile', static::TEMPLATES_BASE_PATH . 'manage/tile-default.html.twig'),
TemplateDefinitionDto::Create('tile_badge', static::TEMPLATES_BASE_PATH. 'manage/tile-badge.html.twig'),
TemplateDefinitionDto::Create('tile_chart', static::TEMPLATES_BASE_PATH . 'manage/tile-chart.html.twig'),
TemplateDefinitionDto::Create('tile_top_list', static::TEMPLATES_BASE_PATH . 'manage/tile-top-list.html.twig'),
TemplateDefinitionDto::Create('page', static::TEMPLATES_BASE_PATH . 'manage/layout.html.twig'),
TemplateDefinitionDto::Create('page_table', static::TEMPLATES_BASE_PATH . 'manage/layout-table.html.twig'),
TemplateDefinitionDto::Create('page_chart', static::TEMPLATES_BASE_PATH . 'manage/layout-chart.html.twig'),
TemplateDefinitionDto::Create('mode_chart_bar', static::TEMPLATES_BASE_PATH . 'manage/mode-bar-chart.html.twig', true, self::ENUM_DISPLAY_MODE_BAR),
TemplateDefinitionDto::Create('mode_chart_pie', static::TEMPLATES_BASE_PATH . 'manage/mode-pie-chart.html.twig', true,self::ENUM_DISPLAY_MODE_PIE),
$oTemplatesRegister->RegisterTemplates(
self::class,
TemplateDefinitionDto::Create('tile', static::TEMPLATES_BASE_PATH.'manage/tile-default.html.twig'),
TemplateDefinitionDto::Create('tile_badge', static::TEMPLATES_BASE_PATH.'manage/tile-badge.html.twig'),
TemplateDefinitionDto::Create('tile_chart', static::TEMPLATES_BASE_PATH.'manage/tile-chart.html.twig'),
TemplateDefinitionDto::Create('tile_top_list', static::TEMPLATES_BASE_PATH.'manage/tile-top-list.html.twig'),
TemplateDefinitionDto::Create('page', static::TEMPLATES_BASE_PATH.'manage/layout.html.twig'),
TemplateDefinitionDto::Create('page_table', static::TEMPLATES_BASE_PATH.'manage/layout-table.html.twig'),
TemplateDefinitionDto::Create('page_chart', static::TEMPLATES_BASE_PATH.'manage/layout-chart.html.twig'),
TemplateDefinitionDto::Create('mode_chart_bar', static::TEMPLATES_BASE_PATH.'manage/mode-bar-chart.html.twig', true, self::ENUM_DISPLAY_MODE_BAR),
TemplateDefinitionDto::Create('mode_chart_pie', static::TEMPLATES_BASE_PATH.'manage/mode-pie-chart.html.twig', true, self::ENUM_DISPLAY_MODE_PIE),
);
}
@@ -205,9 +206,9 @@ class ManageBrick extends PortalBrick
$this->sOql = static::DEFAULT_OQL;
$this->sOpeningMode = static::DEFAULT_OPENING_MODE;
$this->aGrouping = array();
$this->aFields = array();
$this->aExportFields = array();
$this->aGrouping = [];
$this->aFields = [];
$this->aExportFields = [];
$this->bShowTabCounts = static::DEFAULT_SHOW_TAB_COUNTS;
$this->sDefaultDisplayMode = static::DEFAULT_DISPLAY_MODE;
@@ -217,7 +218,7 @@ class ManageBrick extends PortalBrick
$this->iDefaultListLength = static::DEFAULT_LIST_LENGTH;
// This is hardcoded for now, we might allow area grouping on another attribute in the future
$this->AddGrouping('areas', array('attribute' => 'finalclass'));
$this->AddGrouping('areas', ['attribute' => 'finalclass']);
}
/**
@@ -488,7 +489,8 @@ class ManageBrick extends PortalBrick
*
* @return $this
*/
public function SetDefaultListLength($iDefaultListLength) {
public function SetDefaultListLength($iDefaultListLength)
{
$this->iDefaultListLength = $iDefaultListLength;
return $this;
}
@@ -508,8 +510,7 @@ class ManageBrick extends PortalBrick
$this->aGrouping[$sName] = $aGrouping;
// Sorting
if (!$this->IsGroupingByDistinctValues($sName))
{
if (!$this->IsGroupingByDistinctValues($sName)) {
usort($this->aGrouping[$sName]['groups'], function ($a, $b) {
if ($a['rank'] === $b['rank']) {
return 0;
@@ -531,8 +532,7 @@ class ManageBrick extends PortalBrick
*/
public function RemoveGrouping($sName)
{
if (isset($this->aGrouping[$sName]))
{
if (isset($this->aGrouping[$sName])) {
unset($this->aGrouping[$sName]);
}
@@ -548,8 +548,7 @@ class ManageBrick extends PortalBrick
*/
public function AddField($sAttCode)
{
if (!in_array($sAttCode, $this->aFields))
{
if (!in_array($sAttCode, $this->aFields)) {
$this->aFields[] = $sAttCode;
}
@@ -565,8 +564,7 @@ class ManageBrick extends PortalBrick
*/
public function RemoveField($sAttCode)
{
if (isset($this->aFields[$sAttCode]))
{
if (isset($this->aFields[$sAttCode])) {
unset($this->aFields[$sAttCode]);
}
@@ -575,8 +573,7 @@ class ManageBrick extends PortalBrick
public function AddExportField($sAttCode)
{
if (!in_array($sAttCode, $this->aExportFields))
{
if (!in_array($sAttCode, $this->aExportFields)) {
$this->aExportFields[] = $sAttCode;
}
@@ -585,8 +582,7 @@ class ManageBrick extends PortalBrick
public function RemoveExportField($sAttCode)
{
if (isset($this->aExportFields[$sAttCode]))
{
if (isset($this->aExportFields[$sAttCode])) {
unset($this->aExportFields[$sAttCode]);
}
@@ -642,10 +638,11 @@ class ManageBrick extends PortalBrick
*/
public function AddAvailableDisplayMode($sModeId)
{
if (!in_array($sModeId, static::$aDisplayModes))
{
throw new Exception('ManageBrick: Display mode "'.$sModeId.'" must be one of the allowed display modes ('.implode(', ',
static::$aDisplayModes).')');
if (!in_array($sModeId, static::$aDisplayModes)) {
throw new Exception('ManageBrick: Display mode "'.$sModeId.'" must be one of the allowed display modes ('.implode(
', ',
static::$aDisplayModes
).')');
}
$this->aAvailableDisplayModes[] = $sModeId;
@@ -662,8 +659,7 @@ class ManageBrick extends PortalBrick
*/
public function RemoveAvailableDisplayMode($sModeId)
{
if (isset($this->aAvailableDisplayModes[$sModeId]))
{
if (isset($this->aAvailableDisplayModes[$sModeId])) {
unset($this->aAvailableDisplayModes[$sModeId]);
}
@@ -736,16 +732,17 @@ class ManageBrick extends PortalBrick
// Checking specific elements
/** @var \Combodo\iTop\DesignElement $oBrickSubNode */
foreach ($oMDElement->GetNodes('./*') as $oBrickSubNode)
{
switch ($oBrickSubNode->nodeName)
{
foreach ($oMDElement->GetNodes('./*') as $oBrickSubNode) {
switch ($oBrickSubNode->nodeName) {
case 'class':
$sClass = $oBrickSubNode->GetText();
if ($sClass === '')
{
throw new DOMFormatException('ManageBrick: class tag is empty. Must contain Classname', null,
null, $oBrickSubNode);
if ($sClass === '') {
throw new DOMFormatException(
'ManageBrick: class tag is empty. Must contain Classname',
null,
null,
$oBrickSubNode
);
}
$this->SetOql('SELECT '.$sClass);
@@ -753,10 +750,13 @@ class ManageBrick extends PortalBrick
case 'oql':
$sOql = $oBrickSubNode->GetText();
if ($sOql === '')
{
throw new DOMFormatException('ManageBrick: oql tag is empty. Must contain OQL statement', null,
null, $oBrickSubNode);
if ($sOql === '') {
throw new DOMFormatException(
'ManageBrick: oql tag is empty. Must contain OQL statement',
null,
null,
$oBrickSubNode
);
}
$this->SetOql($sOql);
@@ -764,10 +764,13 @@ class ManageBrick extends PortalBrick
case 'opening_mode':
$sOpeningMode = $oBrickSubNode->GetText(static::DEFAULT_OPENING_MODE);
if (!in_array($sOpeningMode, array(static::ENUM_ACTION_VIEW, static::ENUM_ACTION_EDIT)))
{
throw new DOMFormatException('ManageBrick: opening_mode tag value must be edit|view ("'.$sOpeningMode.'" given)',
null, null, $oBrickSubNode);
if (!in_array($sOpeningMode, [static::ENUM_ACTION_VIEW, static::ENUM_ACTION_EDIT])) {
throw new DOMFormatException(
'ManageBrick: opening_mode tag value must be edit|view ("'.$sOpeningMode.'" given)',
null,
null,
$oBrickSubNode
);
}
$this->SetOpeningMode($sOpeningMode);
@@ -775,26 +778,31 @@ class ManageBrick extends PortalBrick
case 'display_modes':
/** @var \Combodo\iTop\DesignElement $oDisplayNode */
foreach ($oBrickSubNode->GetNodes('./*') as $oDisplayNode)
{
switch ($oDisplayNode->nodeName)
{
case 'availables';
foreach ($oBrickSubNode->GetNodes('./*') as $oDisplayNode) {
switch ($oDisplayNode->nodeName) {
case 'availables':
/** @var \Combodo\iTop\DesignElement $oModeNode */
foreach ($oDisplayNode->GetNodes('*') as $oModeNode)
{
if (!$oModeNode->hasAttribute('id'))
{
throw new DOMFormatException('ManageBrick: Display mode must have a unique ID attribute',
0, null, $oModeNode);
foreach ($oDisplayNode->GetNodes('*') as $oModeNode) {
if (!$oModeNode->hasAttribute('id')) {
throw new DOMFormatException(
'ManageBrick: Display mode must have a unique ID attribute',
0,
null,
$oModeNode
);
}
$sModeId = $oModeNode->getAttribute('id');
if (!in_array($sModeId, static::$aDisplayModes))
{
throw new DOMFormatException('ManageBrick: Display mode has an invalid value. Expected '.implode('/',
static::$aDisplayModes.', "'.$sModeId.'" given.'),
null, null, $oModeNode);
if (!in_array($sModeId, static::$aDisplayModes)) {
throw new DOMFormatException(
'ManageBrick: Display mode has an invalid value. Expected '.implode(
'/',
static::$aDisplayModes.', "'.$sModeId.'" given.'
),
null,
null,
$oModeNode
);
}
$this->AddAvailableDisplayMode($sModeId);
@@ -805,9 +813,9 @@ class ManageBrick extends PortalBrick
$this->SetDefaultDisplayMode($oDisplayNode->GetText(static::DEFAULT_DISPLAY_MODE));
break;
case 'tile';
case 'tile':
$this->SetTileMode($oDisplayNode->GetText(static::DEFAULT_TILE_MODE));
if($this->sDecorationClassHome === static::DEFAULT_DECORATION_CLASS_HOME){
if ($this->sDecorationClassHome === static::DEFAULT_DECORATION_CLASS_HOME) {
$this->sDecorationClassHome = static::$aDefaultTileData[$this->GetTileMode()]['decorationCssClass'];
$this->SetDecorationClassNavigationMenu(static::$aDefaultTileData[$this->GetTileMode()]['decorationCssClass']);
$this->SetDecorationClassHome(static::$aDefaultTileData[$this->GetTileMode()]['decorationCssClass']);
@@ -820,12 +828,14 @@ class ManageBrick extends PortalBrick
case 'fields':
/** @var \Combodo\iTop\DesignElement $oFieldNode */
foreach ($oBrickSubNode->GetNodes('./field') as $oFieldNode)
{
if (!$oFieldNode->hasAttribute('id'))
{
throw new DOMFormatException('ManageBrick : Field must have a unique ID attribute', 0,
null, $oFieldNode);
foreach ($oBrickSubNode->GetNodes('./field') as $oFieldNode) {
if (!$oFieldNode->hasAttribute('id')) {
throw new DOMFormatException(
'ManageBrick : Field must have a unique ID attribute',
0,
null,
$oFieldNode
);
}
$this->AddField($oFieldNode->getAttribute('id'));
}
@@ -833,19 +843,18 @@ class ManageBrick extends PortalBrick
case 'export':
/** @var \Combodo\iTop\DesignElement $oExportNode */
foreach ($oBrickSubNode->GetNodes('./*') as $oExportNode)
{
switch ($oExportNode->nodeName)
{
foreach ($oBrickSubNode->GetNodes('./*') as $oExportNode) {
switch ($oExportNode->nodeName) {
case 'fields':
/** @var \Combodo\iTop\DesignElement $oFieldNode */
foreach ($oExportNode->GetNodes('./field') as $oFieldNode)
{
if (!$oFieldNode->hasAttribute('id'))
{
throw new DOMFormatException('ManageBrick : Field must have a unique ID attribute',
foreach ($oExportNode->GetNodes('./field') as $oFieldNode) {
if (!$oFieldNode->hasAttribute('id')) {
throw new DOMFormatException(
'ManageBrick : Field must have a unique ID attribute',
0,
null, $oFieldNode);
null,
$oFieldNode
);
}
$this->AddExportField($oFieldNode->getAttribute('id'));
}
@@ -860,12 +869,12 @@ class ManageBrick extends PortalBrick
break;
case 'default_list_length':
$iNodeDefaultListLength = (int)$oBrickSubNode->GetText(static::DEFAULT_LIST_LENGTH);
if(!in_array($iNodeDefaultListLength, array(10, 20, 50, -1),true))
{
if (!in_array($iNodeDefaultListLength, [10, 20, 50, -1], true)) {
throw new DOMFormatException(
'ManageBrick : Default list length must be contained in list length options. Expected -1/10/20/50, '.$iNodeDefaultListLength.' given.',
null,
null, $oBrickSubNode
null,
$oBrickSubNode
);
}
$this->SetDefaultListLength($iNodeDefaultListLength);
@@ -873,25 +882,21 @@ class ManageBrick extends PortalBrick
case 'grouping':
// Tabs grouping
/** @var \Combodo\iTop\DesignElement $oGroupingNode */
foreach ($oBrickSubNode->GetNodes('./tabs/*') as $oGroupingNode)
{
switch ($oGroupingNode->nodeName)
{
case 'show_tab_counts';
foreach ($oBrickSubNode->GetNodes('./tabs/*') as $oGroupingNode) {
switch ($oGroupingNode->nodeName) {
case 'show_tab_counts':
$bShowTabCounts = ($oGroupingNode->GetText(static::DEFAULT_SHOW_TAB_COUNTS) === 'true') ? true : false;
$this->SetShowTabCounts($bShowTabCounts);
break;
case 'attribute':
$sAttribute = $oGroupingNode->GetText();
if ($sAttribute !== '')
{
$this->AddGrouping('tabs', array('attribute' => $sAttribute));
if ($sAttribute !== '') {
$this->AddGrouping('tabs', ['attribute' => $sAttribute]);
}
break;
case 'limit':
$iLimit = $oGroupingNode->GetText();
if (is_numeric($iLimit))
{
if (is_numeric($iLimit)) {
$this->iGroupLimit = $iLimit;
}
break;
@@ -899,24 +904,24 @@ class ManageBrick extends PortalBrick
$this->bGroupShowOthers = ($oGroupingNode->GetText() === 'true') ? true : false;
break;
case 'groups':
$aGroups = array();
$aGroups = [];
/** @var \Combodo\iTop\DesignElement $oGroupNode */
foreach ($oGroupingNode->GetNodes('./group') as $oGroupNode)
{
if (!$oGroupNode->hasAttribute('id'))
{
throw new DOMFormatException('ManageBrick : Group must have a unique ID attribute',
0, null, $oGroupNode);
foreach ($oGroupingNode->GetNodes('./group') as $oGroupNode) {
if (!$oGroupNode->hasAttribute('id')) {
throw new DOMFormatException(
'ManageBrick : Group must have a unique ID attribute',
0,
null,
$oGroupNode
);
}
$sGroupId = $oGroupNode->getAttribute('id');
$aGroup = array();
$aGroup = [];
$aGroup['id'] = $sGroupId; // We don't put the group id as the $aGroups key because the array will be sorted later in AddGrouping, which replace array keys by integer ordered keys
/** @var \Combodo\iTop\DesignElement $oGroupProperty */
foreach ($oGroupNode->GetNodes('*') as $oGroupProperty)
{
switch ($oGroupProperty->nodeName)
{
foreach ($oGroupNode->GetNodes('*') as $oGroupProperty) {
switch ($oGroupProperty->nodeName) {
case 'rank':
$aGroup[$oGroupProperty->nodeName] = (int)$oGroupProperty->GetText(0);
break;
@@ -929,19 +934,25 @@ class ManageBrick extends PortalBrick
}
// Checking constitancy
if (!isset($aGroup['title']) || $aGroup['title'] === '')
{
throw new DOMFormatException('ManageBrick : Group must have a title tag and it must not be empty',
0, null, $oGroupNode);
if (!isset($aGroup['title']) || $aGroup['title'] === '') {
throw new DOMFormatException(
'ManageBrick : Group must have a title tag and it must not be empty',
0,
null,
$oGroupNode
);
}
if (!isset($aGroup['condition']) || $aGroup['condition'] === '')
{
throw new DOMFormatException('ManageBrick : Group must have a condition tag and it must not be empty',
0, null, $oGroupNode);
if (!isset($aGroup['condition']) || $aGroup['condition'] === '') {
throw new DOMFormatException(
'ManageBrick : Group must have a condition tag and it must not be empty',
0,
null,
$oGroupNode
);
}
$aGroups[] = $aGroup;
}
$this->AddGrouping('tabs', array('groups' => $aGroups));
$this->AddGrouping('tabs', ['groups' => $aGroups]);
break;
}
}
@@ -963,62 +974,58 @@ class ManageBrick extends PortalBrick
}
// Checking if has an oql
if ($this->GetOql() === '')
{
if ($this->GetOql() === '') {
throw new DOMFormatException('ManageBrick: must have a valid <class|oql> tag', null, null, $oMDElement);
}
// Checking that the brick has at least a display mode
if (count($this->GetAvailablesDisplayModes()) === 0)
{
if (count($this->GetAvailablesDisplayModes()) === 0) {
$this->AddAvailableDisplayMode(static::DEFAULT_DISPLAY_MODE);
}
// Checking that default display mode in among the availables
if (!in_array($this->sDefaultDisplayMode, $this->aAvailableDisplayModes))
{
throw new DOMFormatException('ManageBrick: Default display mode "'.$this->sDefaultDisplayMode.'" must be one of the available display modes ('.implode(', ',
$this->aAvailableDisplayModes).')', null, null, $oMDElement);
if (!in_array($this->sDefaultDisplayMode, $this->aAvailableDisplayModes)) {
throw new DOMFormatException('ManageBrick: Default display mode "'.$this->sDefaultDisplayMode.'" must be one of the available display modes ('.implode(
', ',
$this->aAvailableDisplayModes
).')', null, null, $oMDElement);
}
// Checking that tile mode in among the availables
if (!in_array($this->sTileMode, static::$aTileModes))
{
throw new DOMFormatException('ManageBrick: Tile mode "'.$this->sTileMode.'" must be one of the allowed tile modes ('.implode(', ',
static::$aTileModes).')', null, null, $oMDElement);
if (!in_array($this->sTileMode, static::$aTileModes)) {
throw new DOMFormatException('ManageBrick: Tile mode "'.$this->sTileMode.'" must be one of the allowed tile modes ('.implode(
', ',
static::$aTileModes
).')', null, null, $oMDElement);
}
// Checking if specified fields, if not we put those from the details zlist
if (empty($this->aFields))
{
if (empty($this->aFields)) {
$sClass = DBSearch::FromOQL($this->GetOql());
$aFields = MetaModel::FlattenZList(MetaModel::GetZListItems($sClass->GetClass(),
static::DEFAULT_ZLIST_FIELDS));
$aFields = MetaModel::FlattenZList(MetaModel::GetZListItems(
$sClass->GetClass(),
static::DEFAULT_ZLIST_FIELDS
));
$this->SetFields($aFields);
}
// Default Export Fields
if ($bUseListFieldsForExport)
{
foreach ($this->GetFields() as $sAttCode)
{
if ($bUseListFieldsForExport) {
foreach ($this->GetFields() as $sAttCode) {
$this->AddExportField($sAttCode);
}
}
// Checking the navigation icon
$sDecorationClassNavigationMenu = $this->GetDecorationClassNavigationMenu();
if (empty($sDecorationClassNavigationMenu) && isset(static::$aDefaultTileData[$this->sTileMode]))
{
if (empty($sDecorationClassNavigationMenu) && isset(static::$aDefaultTileData[$this->sTileMode])) {
/** @var string $sDecorationClassNavigationMenu */
$sDecorationClassNavigationMenu = static::$aDefaultTileData[$this->sTileMode]['decorationCssClass'];
if (!empty($sDecorationClassNavigationMenu))
{
if (!empty($sDecorationClassNavigationMenu)) {
$this->SetDecorationClassNavigationMenu($sDecorationClassNavigationMenu);
}
}
$sTitle = $this->GetTitleHome();
if (empty($sTitle))
{
if (empty($sTitle)) {
$sOql = $this->GetOql();
$oSearch = DBSearch::FromOQL($sOql);
$sClassName = MetaModel::GetName($oSearch->GetClass());

View File

@@ -38,37 +38,37 @@ use ModuleDesign;
abstract class PortalBrick extends AbstractBrick
{
/** @var string ENUM_OPENING_TARGET_MODAL */
const ENUM_OPENING_TARGET_MODAL = 'modal';
public const ENUM_OPENING_TARGET_MODAL = 'modal';
/** @var string ENUM_OPENING_TARGET_SELF */
const ENUM_OPENING_TARGET_SELF = 'self';
public const ENUM_OPENING_TARGET_SELF = 'self';
/** @var string ENUM_OPENING_TARGET_NEW */
const ENUM_OPENING_TARGET_NEW = 'new';
public const ENUM_OPENING_TARGET_NEW = 'new';
/** @var int DEFAULT_WIDTH */
const DEFAULT_WIDTH = 400;
public const DEFAULT_WIDTH = 400;
/** @var int DEFAULT_HEIGHT */
const DEFAULT_HEIGHT = null;
public const DEFAULT_HEIGHT = null;
/** @var bool DEFAULT_MODAL */
const DEFAULT_MODAL = false;
public const DEFAULT_MODAL = false;
/** @var bool DEFAULT_VISIBLE_HOME */
const DEFAULT_VISIBLE_HOME = true;
public const DEFAULT_VISIBLE_HOME = true;
/** @var bool DEFAULT_VISIBLE_NAVIGATION_MENU */
const DEFAULT_VISIBLE_NAVIGATION_MENU = true;
public const DEFAULT_VISIBLE_NAVIGATION_MENU = true;
/** @var string DEFAULT_DECORATION_CLASS_HOME */
const DEFAULT_DECORATION_CLASS_HOME = '';
public const DEFAULT_DECORATION_CLASS_HOME = '';
/** @var string DEFAULT_DECORATION_CLASS_NAVIGATION_MENU */
const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = '';
public const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = '';
/** @var string DEFAULT_TILE_TEMPLATE_PATH */
const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/tile.html.twig';
public const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/tile.html.twig';
/** @var string|null DEFAULT_TILE_CONTROLLER_ACTION */
const DEFAULT_TILE_CONTROLLER_ACTION = null;
public const DEFAULT_TILE_CONTROLLER_ACTION = null;
/** @var string DEFAULT_OPENING_TARGET */
const DEFAULT_OPENING_TARGET = self::ENUM_OPENING_TARGET_MODAL;
public const DEFAULT_OPENING_TARGET = self::ENUM_OPENING_TARGET_MODAL;
/** @var string|null $sRouteName */
static $sRouteName = null;
public static $sRouteName = null;
/** @var array $aOpeningTargets */
static $aOpeningTargets = array(self::ENUM_OPENING_TARGET_MODAL, self::ENUM_OPENING_TARGET_SELF, self::ENUM_OPENING_TARGET_NEW);
public static $aOpeningTargets = [self::ENUM_OPENING_TARGET_MODAL, self::ENUM_OPENING_TARGET_SELF, self::ENUM_OPENING_TARGET_NEW];
/** @var int $iWidth */
protected $iWidth;
@@ -101,14 +101,13 @@ abstract class PortalBrick extends AbstractBrick
/** @var string $sTitleNavigationMenu */
protected $sTitleNavigationMenu;
/** @inheritdoc */
public static function RegisterTemplates(TemplatesRegister $oTemplatesRegister): void
{
parent::RegisterTemplates($oTemplatesRegister);
$oTemplatesRegister->RegisterTemplates(self::class,
TemplateDefinitionDto::Create('tile', static::TEMPLATES_BASE_PATH . 'tile.html.twig'),
$oTemplatesRegister->RegisterTemplates(
self::class,
TemplateDefinitionDto::Create('tile', static::TEMPLATES_BASE_PATH.'tile.html.twig'),
);
}
@@ -466,10 +465,8 @@ abstract class PortalBrick extends AbstractBrick
// Checking specific elements
/** @var \Combodo\iTop\DesignElement $oBrickSubNode */
foreach ($oMDElement->GetNodes('./*') as $oBrickSubNode)
{
switch ($oBrickSubNode->nodeName)
{
foreach ($oMDElement->GetNodes('./*') as $oBrickSubNode) {
switch ($oBrickSubNode->nodeName) {
case 'width':
$sWidth = $oBrickSubNode->GetText(static::DEFAULT_WIDTH);
$this->bIsWidthPixel = str_contains($sWidth, 'px');
@@ -488,23 +485,20 @@ abstract class PortalBrick extends AbstractBrick
case 'visible':
// Default value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('default');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = ($oOptionalNode->GetText() === 'false') ? false : true;
$this->SetVisibleHome($optionalNodeValue);
$this->SetVisibleNavigationMenu($optionalNodeValue);
}
// Home value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('home');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = ($oOptionalNode->GetText() === 'false') ? false : true;
$this->SetVisibleHome($optionalNodeValue);
}
// Navigation menu value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('navigation_menu');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = ($oOptionalNode->GetText() === 'false') ? false : true;
$this->SetVisibleNavigationMenu($optionalNodeValue);
}
@@ -512,8 +506,7 @@ abstract class PortalBrick extends AbstractBrick
case 'templates':
$oTemplateNodeList = $oBrickSubNode->GetNodes('template[@id='.ModuleDesign::XPathQuote('tile').']');
if ($oTemplateNodeList->length > 0)
{
if ($oTemplateNodeList->length > 0) {
/** @var \Combodo\iTop\DesignElement $oTemplateNode */
$oTemplateNode = $oTemplateNodeList->item(0);
$this->SetTemplatePath('tile', $oTemplateNode->GetText(static::DEFAULT_TILE_TEMPLATE_PATH));
@@ -526,23 +519,20 @@ abstract class PortalBrick extends AbstractBrick
$this->SetRankNavigationMenu($this->fRank);
// Default value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('default');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_RANK);
$this->SetRankHome($optionalNodeValue);
$this->SetRankNavigationMenu($optionalNodeValue);
}
// Home value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('home');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_RANK);
$this->SetRankHome($optionalNodeValue);
}
// Navigation menu value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('navigation_menu');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_RANK);
$this->SetRankNavigationMenu($optionalNodeValue);
}
@@ -554,23 +544,20 @@ abstract class PortalBrick extends AbstractBrick
$this->SetTitleNavigationMenu($this->sTitle);
// Default value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('default');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_TITLE);
$this->SetTitleHome($optionalNodeValue);
$this->SetTitleNavigationMenu($optionalNodeValue);
}
// Home value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('home');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_TITLE);
$this->SetTitleHome($optionalNodeValue);
}
// Navigation menu value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('navigation_menu');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_TITLE);
$this->SetTitleNavigationMenu($optionalNodeValue);
$this->SetTitle($optionalNodeValue);
@@ -583,23 +570,20 @@ abstract class PortalBrick extends AbstractBrick
$this->SetDecorationClassNavigationMenu(static::DEFAULT_DECORATION_CLASS_NAVIGATION_MENU);
// Default value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('default');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_DECORATION_CLASS_NAVIGATION_MENU);
$this->SetDecorationClassHome($optionalNodeValue);
$this->SetDecorationClassNavigationMenu($optionalNodeValue);
}
// Home value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('home');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_DECORATION_CLASS_HOME);
$this->SetDecorationClassHome($optionalNodeValue);
}
// Navigation menu value
$oOptionalNode = $oBrickSubNode->GetOptionalElement('navigation_menu');
if ($oOptionalNode !== null)
{
if ($oOptionalNode !== null) {
$optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_DECORATION_CLASS_NAVIGATION_MENU);
$this->SetDecorationClassNavigationMenu($optionalNodeValue);
}
@@ -611,11 +595,16 @@ abstract class PortalBrick extends AbstractBrick
case 'opening_target':
$sOpeningTarget = $oBrickSubNode->GetText(static::DEFAULT_OPENING_TARGET);
if (!in_array($sOpeningTarget,
array(static::ENUM_OPENING_TARGET_MODAL, static::ENUM_OPENING_TARGET_NEW, static::ENUM_OPENING_TARGET_SELF)))
{
throw new DOMFormatException('PortalBrick : opening_target tag value must be modal|new|self ("'.$sOpeningTarget.'" given)',
null, null, $oBrickSubNode);
if (!in_array(
$sOpeningTarget,
[static::ENUM_OPENING_TARGET_MODAL, static::ENUM_OPENING_TARGET_NEW, static::ENUM_OPENING_TARGET_SELF]
)) {
throw new DOMFormatException(
'PortalBrick : opening_target tag value must be modal|new|self ("'.$sOpeningTarget.'" given)',
null,
null,
$oBrickSubNode
);
}
$this->SetOpeningTarget($sOpeningTarget);

View File

@@ -1,4 +1,5 @@
<?php
/**
* Copyright (C) 2013-2024 Combodo SAS
*
@@ -34,20 +35,20 @@ use DOMFormatException;
class UserProfileBrick extends PortalBrick
{
// Overloaded constants
const DEFAULT_WIDTH = 200;
const DEFAULT_VISIBLE_NAVIGATION_MENU = false;
const DEFAULT_VISIBLE_HOME = false;
const DEFAULT_DECORATION_CLASS_HOME = 'glyphicon glyphicon-user';
const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = 'glyphicon glyphicon-user';
public const DEFAULT_WIDTH = 200;
public const DEFAULT_VISIBLE_NAVIGATION_MENU = false;
public const DEFAULT_VISIBLE_HOME = false;
public const DEFAULT_DECORATION_CLASS_HOME = 'glyphicon glyphicon-user';
public const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = 'glyphicon glyphicon-user';
/** @var bool DEFAULT_SHOW_PICTURE_FORM */
const DEFAULT_SHOW_PICTURE_FORM = true;
public const DEFAULT_SHOW_PICTURE_FORM = true;
/** @var bool DEFAULT_SHOW_PREFERENCES_FORM */
const DEFAULT_SHOW_PREFERENCES_FORM = true;
public const DEFAULT_SHOW_PREFERENCES_FORM = true;
/** @var bool DEFAULT_SHOW_PASSWORD_FORM */
const DEFAULT_SHOW_PASSWORD_FORM = true;
public const DEFAULT_SHOW_PASSWORD_FORM = true;
// Overloaded variables
static $sRouteName = 'p_user_profile_brick';
public static $sRouteName = 'p_user_profile_brick';
/** @var array $aForm */
protected $aForm;
@@ -62,8 +63,9 @@ class UserProfileBrick extends PortalBrick
public static function RegisterTemplates(TemplatesRegister $oTemplatesRegister): void
{
parent::RegisterTemplates($oTemplatesRegister);
$oTemplatesRegister->RegisterTemplates(self::class,
TemplateDefinitionDto::Create('page', static::TEMPLATES_BASE_PATH . 'user-profile/layout.html.twig'),
$oTemplatesRegister->RegisterTemplates(
self::class,
TemplateDefinitionDto::Create('page', static::TEMPLATES_BASE_PATH.'user-profile/layout.html.twig'),
TemplateDefinitionDto::Create('user_info', static::TEMPLATES_BASE_PATH.'user-profile/user_info.html.twig'),
TemplateDefinitionDto::Create('user_info_ready_js', static::TEMPLATES_BASE_PATH.'user-profile/user_info.ready.js.twig'),
);
@@ -76,12 +78,12 @@ class UserProfileBrick extends PortalBrick
{
parent::__construct();
$this->aForm = array(
$this->aForm = [
'id' => 'default-user-profile',
'type' => 'zlist',
'fields' => 'details',
'layout' => null,
);
];
$this->bShowPictureForm = static::DEFAULT_SHOW_PICTURE_FORM;
$this->bShowPreferencesForm = static::DEFAULT_SHOW_PREFERENCES_FORM;
$this->bShowPasswordForm = static::DEFAULT_SHOW_PASSWORD_FORM;
@@ -192,13 +194,13 @@ class UserProfileBrick extends PortalBrick
// Enumerating fields
if ($oBrickSubNode->GetOptionalElement('fields') !== null) {
$this->aForm['type'] = 'custom_list';
$this->aForm['fields'] = array();
$this->aForm['fields'] = [];
/** @var \Combodo\iTop\DesignElement $oFieldNode */
foreach ($oBrickSubNode->GetOptionalElement('fields')->GetNodes('field') as $oFieldNode) {
$sFieldId = $oFieldNode->getAttribute('id');
if ($sFieldId !== '') {
$aField = array();
$aField = [];
// Parsing field options like read_only, hidden and mandatory
if ($oFieldNode->GetOptionalElement('read_only')) {
$aField['readonly'] = ($oFieldNode->GetOptionalElement('read_only')->GetText('true') === 'true') ? true : false;
@@ -224,10 +226,10 @@ class UserProfileBrick extends PortalBrick
$sXml = preg_replace('/^.+\n/', '', $sXml);
$sXml = preg_replace('/\n.+$/', '', $sXml);
$this->aForm['layout'] = array(
$this->aForm['layout'] = [
'type' => (preg_match('/\{\{|\{\#|\{\%/', $sXml) === 1) ? 'twig' : 'xhtml',
'content' => $sXml,
);
];
}
break;

View File

@@ -37,15 +37,16 @@ use Symfony\Contracts\Service\Attribute\Required;
*/
abstract class AbstractController extends SymfonyAbstractController implements TemplatesProviderInterface
{
const TEMPLATES_BASE_PATH = 'itop-portal-base/portal/templates/';
public const TEMPLATES_BASE_PATH = 'itop-portal-base/portal/templates/';
/** @inheritdoc */
public static function RegisterTemplates(TemplatesRegister $oTemplatesRegister): void
{
$oTemplatesRegister->RegisterTemplates(self::class,
TemplateDefinitionDto::Create('page', static::TEMPLATES_BASE_PATH . 'layout.html.twig'),
$oTemplatesRegister->RegisterTemplates(
self::class,
TemplateDefinitionDto::Create('page', static::TEMPLATES_BASE_PATH.'layout.html.twig'),
TemplateDefinitionDto::Create('navigation_menu', static::TEMPLATES_BASE_PATH.'/pages/navigation_menu.html.twig'),
TemplateDefinitionDto::Create('modal', static::TEMPLATES_BASE_PATH . 'modal/layout.html.twig'),
TemplateDefinitionDto::Create('modal', static::TEMPLATES_BASE_PATH.'modal/layout.html.twig'),
TemplateDefinitionDto::Create('loader', static::TEMPLATES_BASE_PATH.'helpers/loader.html.twig'),
TemplateDefinitionDto::Create('tagset_clic_handler_js', static::TEMPLATES_BASE_PATH.'helpers/tagset_clic_handler.js.twig'),
TemplateDefinitionDto::Create('session_message', static::TEMPLATES_BASE_PATH.'helpers/session_messages/session_message.html.twig'),

View File

@@ -34,7 +34,6 @@ use Symfony\Component\HttpFoundation\Request;
*/
class PreferencesController extends SymfonyAbstractController
{
/**
* Set a preference for the current user.
*
@@ -51,10 +50,9 @@ class PreferencesController extends SymfonyAbstractController
$sValue = $oRequest->request->get('value');
// set user preference
try{
try {
appUserPreferences::SetPref($sKey, $sValue);
}
catch(Exception){
} catch (Exception) {
$sStatus = 'error';
}

View File

@@ -45,6 +45,7 @@ use Symfony\Component\HttpKernel\Exception\HttpException;
use UserRights;
use utils;
use Dict;
/**
* Class UserProfileBrickController
*
@@ -60,7 +61,7 @@ class UserProfileBrickController extends BrickController
* @param \Combodo\iTop\Portal\Brick\BrickCollection $oBrickCollection
* @param \Combodo\iTop\Portal\Routing\UrlGenerator $oUrlGenerator
* @param \Combodo\iTop\Portal\Helper\SecurityHelper $oSecurityHelper
*
* @since 3.2.0 N°6933
*/
@@ -70,12 +71,11 @@ class UserProfileBrickController extends BrickController
protected BrickCollection $oBrickCollection,
protected UrlGenerator $oUrlGenerator,
protected SecurityHelper $oSecurityHelper
)
{
) {
}
/** @var string ENUM_FORM_TYPE_PICTURE */
const ENUM_FORM_TYPE_PICTURE = 'picture';
public const ENUM_FORM_TYPE_PICTURE = 'picture';
/**
* @param \Symfony\Component\HttpFoundation\Request $oRequest
@@ -92,26 +92,20 @@ class UserProfileBrickController extends BrickController
public function DisplayAction(Request $oRequest, $sBrickId)
{
// If the brick id was not specified, we get the first one registered that is an instance of UserProfileBrick as default
if ($sBrickId === null)
{
if ($sBrickId === null) {
/** @var \Combodo\iTop\Portal\Brick\PortalBrick $oTmpBrick */
foreach ($this->oBrickCollection->GetBricks() as $oTmpBrick)
{
if ($oTmpBrick instanceof UserProfileBrick)
{
foreach ($this->oBrickCollection->GetBricks() as $oTmpBrick) {
if ($oTmpBrick instanceof UserProfileBrick) {
$oBrick = $oTmpBrick;
}
}
// We make sure a UserProfileBrick was found
if (!isset($oBrick) || $oBrick === null)
{
if (!isset($oBrick) || $oBrick === null) {
$oBrick = new UserProfileBrick();
//throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR, 'UserProfileBrick : Brick could not be loaded as there was no UserProfileBrick loaded in the application.');
}
}
else
{
} else {
$oBrick = $this->oBrickCollection->GetBrickById($sBrickId);
}
@@ -124,11 +118,14 @@ class UserProfileBrickController extends BrickController
$sTab = $this->oRequestManipulatorHelper->ReadParam('sTab', 'user-info', FILTER_UNSAFE_RAW, FILTER_FLAG_EMPTY_STRING_NULL);
// If this is ajax call, we are just submitting preferences or password forms
if ($oRequest->isXmlHttpRequest())
{
if ($oRequest->isXmlHttpRequest()) {
if ($sTab === "user-info") {
$aCurrentValues = $this->oRequestManipulatorHelper->ReadParam('current_values', array(), FILTER_UNSAFE_RAW,
FILTER_REQUIRE_ARRAY);
$aCurrentValues = $this->oRequestManipulatorHelper->ReadParam(
'current_values',
[],
FILTER_UNSAFE_RAW,
FILTER_REQUIRE_ARRAY
);
$sFormType = $aCurrentValues['form_type'];
if ($sFormType === PreferencesFormManager::FORM_TYPE) {
$aData['form'] = $this->HandlePreferencesForm($oRequest, $sFormMode);
@@ -143,8 +140,7 @@ class UserProfileBrickController extends BrickController
$oResponse = new JsonResponse($aData);
}
// Else, we are displaying page for first time
else
{
else {
if ($sTab === "user-info") {
// Retrieving current contact
/** @var \DBObject $oCurContact */
@@ -175,7 +171,6 @@ class UserProfileBrickController extends BrickController
return $oResponse;
}
private function ManageUserProfileBrickExtensibility(string $sTab, array &$aData): void
{
$aData['sTab'] = $sTab;
@@ -193,7 +188,7 @@ class UserProfileBrickController extends BrickController
// Read the current tab content From iPortalTabSectionExtension
$aTabSectionExtensions = ExtensibilityHelper::GetInstance()->GetPortalTabContentExtensions(iUserProfileTabContentExtension::class, $sTab);
if (count($aTabSectionExtensions) !== 0 && count($_POST) !== 0){
if (count($aTabSectionExtensions) !== 0 && count($_POST) !== 0) {
$sTransactionId = utils::ReadPostedParam('transaction_id', null, utils::ENUM_SANITIZATION_FILTER_TRANSACTION_ID);
IssueLog::Debug(__FUNCTION__.": transaction [$sTransactionId]");
if (utils::IsNullOrEmptyString($sTransactionId) || !utils::IsTransactionValid($sTransactionId, false)) {
@@ -214,30 +209,28 @@ class UserProfileBrickController extends BrickController
}
}
public function EditPerson(Request $oRequest)
{
$oCurContact = UserRights::GetContactObject();
$sObjectClass = get_class($oCurContact);
$sObjectId = $oCurContact->GetKey();
public function EditPerson(Request $oRequest)
{
$oCurContact = UserRights::GetContactObject();
$sObjectClass = get_class($oCurContact);
$sObjectId = $oCurContact->GetKey();
// Checking security layers
// Warning : This is a dirty quick fix to allow editing its own contact information
$bAllowWrite = ($sObjectClass === 'Person' && $sObjectId == UserRights::GetContactId());
if (!$this->oSecurityHelper->IsActionAllowed(UR_ACTION_MODIFY, $sObjectClass, $sObjectId) && !$bAllowWrite) {
IssueLog::Warning(__METHOD__.' at line '.__LINE__.' : User #'.UserRights::GetUserId().' not allowed to modify '.$sObjectClass.'::'.$sObjectId.' object.');
throw new HttpException(Response::HTTP_NOT_FOUND, Dict::S('UI:ObjectDoesNotExist'));
}
// Checking security layers
// Warning : This is a dirty quick fix to allow editing its own contact information
$bAllowWrite = ($sObjectClass === 'Person' && $sObjectId == UserRights::GetContactId());
if (!$this->oSecurityHelper->IsActionAllowed(UR_ACTION_MODIFY, $sObjectClass, $sObjectId) && !$bAllowWrite) {
IssueLog::Warning(__METHOD__ . ' at line ' . __LINE__ . ' : User #' . UserRights::GetUserId() . ' not allowed to modify ' . $sObjectClass . '::' . $sObjectId . ' object.');
throw new HttpException(Response::HTTP_NOT_FOUND, Dict::S('UI:ObjectDoesNotExist'));
}
$aForm = $this->GetBrick()->GetForm();
$aForm['submit_endpoint'] = $this->generateUrl('p_user_profile_brick_edit_person');
$aForm = $this->GetBrick()->GetForm();
$aForm['submit_endpoint'] = $this->generateUrl('p_user_profile_brick_edit_person');
$aData = ['sMode' => 'edit'];
$aData['form'] = $this->ObjectFormHandlerHelper->HandleForm($oRequest, $aData['sMode'], $sObjectClass, $sObjectId, $aForm);
return new JsonResponse($aData);
}
$aData = ['sMode' => 'edit'];
$aData['form'] = $this->ObjectFormHandlerHelper->HandleForm($oRequest, $aData['sMode'], $sObjectClass, $sObjectId, $aForm);
return new JsonResponse($aData);
}
/**
* @param \Symfony\Component\HttpFoundation\Request $oRequest
@@ -249,13 +242,12 @@ class UserProfileBrickController extends BrickController
*/
public function HandlePreferencesForm(Request $oRequest, $sFormMode)
{
$aFormData = array();
$aFormData = [];
// Handling form
$sOperation = $this->oRequestManipulatorHelper->ReadParam('operation', null);
// - Create
if ($sOperation === null)
{
if ($sOperation === null) {
// - Creating renderer
$oFormRenderer = new BsFormRenderer();
$oFormRenderer->SetEndpoint($this->oUrlGenerator->generate('p_user_profile_brick'));
@@ -264,50 +256,47 @@ class UserProfileBrickController extends BrickController
$oFormManager->SetRenderer($oFormRenderer)
->Build();
// - Checking if we have to make the form read only
if ($sFormMode === ObjectFormHandlerHelper::ENUM_MODE_VIEW)
{
if ($sFormMode === ObjectFormHandlerHelper::ENUM_MODE_VIEW) {
$oFormManager->GetForm()->MakeReadOnly();
}
}
// - Submit
else
{
if ($sOperation === 'submit')
{
else {
if ($sOperation === 'submit') {
$sFormManagerClass = $this->oRequestManipulatorHelper->ReadParam('formmanager_class', null, FILTER_UNSAFE_RAW);
$sFormManagerData = $this->oRequestManipulatorHelper->ReadParam('formmanager_data', null, FILTER_UNSAFE_RAW);
if ($sFormManagerClass === null || $sFormManagerData === null)
{
if ($sFormManagerClass === null || $sFormManagerData === null) {
IssueLog::Error(__METHOD__.' at line '.__LINE__.' : Parameters formmanager_class and formmanager_data must be defined.');
throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR,
'Parameters formmanager_class and formmanager_data must be defined.');
throw new HttpException(
Response::HTTP_INTERNAL_SERVER_ERROR,
'Parameters formmanager_class and formmanager_data must be defined.'
);
}
// Rebuilding manager from json
/** @var \Combodo\iTop\Form\FormManager $oFormManager */
$oFormManager = $sFormManagerClass::FromJSON($sFormManagerData);
// Applying modification to object
$aFormData['validation'] = $oFormManager->OnSubmit(array(
'currentValues' => $this->oRequestManipulatorHelper->ReadParam('current_values', array(), FILTER_UNSAFE_RAW, FILTER_REQUIRE_ARRAY),
));
$aFormData['validation'] = $oFormManager->OnSubmit([
'currentValues' => $this->oRequestManipulatorHelper->ReadParam('current_values', [], FILTER_UNSAFE_RAW, FILTER_REQUIRE_ARRAY),
]);
// Reloading page only if preferences were changed
if (($aFormData['validation']['valid'] === true) && !empty($aFormData['validation']['messages']['success']))
{
$aFormData['validation']['redirection'] = array(
if (($aFormData['validation']['valid'] === true) && !empty($aFormData['validation']['messages']['success'])) {
$aFormData['validation']['redirection'] = [
'url' => $this->oUrlGenerator->generate('p_user_profile_brick'),
'timeout_duration' => 1000, //since there are several ajax request, we use a longer timeout in hope that they will all be finished in time. A promise would have been more reliable, but since this change is made in a minor version, this approach is less error prone.
);
];
}
}
}
// Else, submit from another form
// Preparing field_set data
$aFieldSetData = array(
$aFieldSetData = [
'fields_list' => $oFormManager->GetRenderer()->Render(),
'fields_impacts' => $oFormManager->GetForm()->GetFieldsImpacts(),
'form_path' => $oFormManager->GetForm()->GetId(),
);
];
// Preparing form data
$aFormData['id'] = $oFormManager->GetForm()->GetId();
@@ -329,14 +318,13 @@ class UserProfileBrickController extends BrickController
*/
public function HandlePasswordForm(Request $oRequest, $sFormMode)
{
$aFormData = array();
$aFormData = [];
// Handling form
$sOperation = /** @var \Combodo\iTop\Portal\Helper\RequestManipulatorHelper $oRequestManipulator */
$this->oRequestManipulatorHelper->ReadParam('operation', null);
// - Create
if ($sOperation === null)
{
if ($sOperation === null) {
// - Creating renderer
$oFormRenderer = new BsFormRenderer();
$oFormRenderer->SetEndpoint($this->oUrlGenerator->generate('p_user_profile_brick'));
@@ -345,41 +333,40 @@ class UserProfileBrickController extends BrickController
$oFormManager->SetRenderer($oFormRenderer)
->Build();
// - Checking if we have to make the form read only
if ($sFormMode === ObjectFormHandlerHelper::ENUM_MODE_VIEW)
{
if ($sFormMode === ObjectFormHandlerHelper::ENUM_MODE_VIEW) {
$oFormManager->GetForm()->MakeReadOnly();
}
}
// - Submit
else
{
if ($sOperation === 'submit')
{
else {
if ($sOperation === 'submit') {
$sFormManagerClass = $this->oRequestManipulatorHelper->ReadParam('formmanager_class', null, FILTER_UNSAFE_RAW);
$sFormManagerData = $this->oRequestManipulatorHelper->ReadParam('formmanager_data', null, FILTER_UNSAFE_RAW);
if ($sFormManagerClass === null || $sFormManagerData === null) {
IssueLog::Error(__METHOD__.' at line '.__LINE__.' : Parameters formmanager_class and formmanager_data must be defined.');
throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR,
'Parameters formmanager_class and formmanager_data must be defined.');
throw new HttpException(
Response::HTTP_INTERNAL_SERVER_ERROR,
'Parameters formmanager_class and formmanager_data must be defined.'
);
}
// Rebuilding manager from json
/** @var \Combodo\iTop\Form\FormManager $oFormManager */
$oFormManager = $sFormManagerClass::FromJSON($sFormManagerData);
// Applying modification to object
$aFormData['validation'] = $oFormManager->OnSubmit(array(
'currentValues' => $this->oRequestManipulatorHelper->ReadParam('current_values', array(), FILTER_UNSAFE_RAW, FILTER_REQUIRE_ARRAY),
));
$aFormData['validation'] = $oFormManager->OnSubmit([
'currentValues' => $this->oRequestManipulatorHelper->ReadParam('current_values', [], FILTER_UNSAFE_RAW, FILTER_REQUIRE_ARRAY),
]);
}
}
// Else, submit from another form
// Preparing field_set data
$aFieldSetData = array(
$aFieldSetData = [
'fields_list' => $oFormManager->GetRenderer()->Render(),
'fields_impacts' => $oFormManager->GetForm()->GetFieldsImpacts(),
'form_path' => $oFormManager->GetForm()->GetId(),
);
];
// Preparing form data
$aFormData['id'] = $oFormManager->GetForm()->GetId();
@@ -400,32 +387,27 @@ class UserProfileBrickController extends BrickController
*/
public function HandlePictureForm(Request $oRequest)
{
$aFormData = array();
$aFormData = [];
$sPictureAttCode = 'picture';
// Handling form
$sOperation = $this->oRequestManipulatorHelper->ReadParam('operation', null);
// - No operation specified
if ($sOperation === null)
{
if ($sOperation === null) {
IssueLog::Error(__METHOD__.' at line '.__LINE__.' : Operation parameter must be specified.');
throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR, 'Operation parameter must be specified.');
}
// - Submit
else
{
if ($sOperation === 'submit')
{
else {
if ($sOperation === 'submit') {
$oRequestFiles = $oRequest->files;
$oPictureFile = $oRequestFiles->get($sPictureAttCode);
if ($oPictureFile === null)
{
if ($oPictureFile === null) {
IssueLog::Error(__METHOD__.' at line '.__LINE__.' : Parameter picture must be defined.');
throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR, 'Parameter picture must be defined.');
}
try
{
try {
// Retrieving image as an ORMDocument
$oImage = utils::ReadPostedDocument($sPictureAttCode);
// Retrieving current contact
@@ -442,9 +424,7 @@ class UserProfileBrickController extends BrickController
// Forcing allowed writing on the object if necessary.
$oCurContact->AllowWrite(true);
$oCurContact->DBUpdate();
}
catch (FileUploadException $e)
{
} catch (FileUploadException $e) {
$aFormData['error'] = $e->GetMessage();
}
@@ -457,10 +437,10 @@ class UserProfileBrickController extends BrickController
'cache' => 86400,
's' => $oOrmDoc->GetSignature(),
]);
$aFormData['validation'] = array(
$aFormData['validation'] = [
'valid' => true,
'messages' => array(),
);
'messages' => [],
];
}
}
@@ -469,30 +449,30 @@ class UserProfileBrickController extends BrickController
return $aFormData;
}
/**
* @param $sBrickId
* @return \Combodo\iTop\Portal\Brick\PortalBrick|UserProfileBrick
* @throws \Combodo\iTop\Portal\Brick\BrickNotFoundException
*/
public function GetBrick($sBrickId = null)
{
// If the brick id was not specified, we get the first one registered that is an instance of UserProfileBrick as default
if ($sBrickId === null) {
/** @var \Combodo\iTop\Portal\Brick\PortalBrick $oTmpBrick */
foreach ($this->oBrickCollection->GetBricks() as $oTmpBrick) {
if ($oTmpBrick instanceof UserProfileBrick) {
$oBrick = $oTmpBrick;
}
}
/**
* @param $sBrickId
* @return \Combodo\iTop\Portal\Brick\PortalBrick|UserProfileBrick
* @throws \Combodo\iTop\Portal\Brick\BrickNotFoundException
*/
public function GetBrick($sBrickId = null)
{
// If the brick id was not specified, we get the first one registered that is an instance of UserProfileBrick as default
if ($sBrickId === null) {
/** @var \Combodo\iTop\Portal\Brick\PortalBrick $oTmpBrick */
foreach ($this->oBrickCollection->GetBricks() as $oTmpBrick) {
if ($oTmpBrick instanceof UserProfileBrick) {
$oBrick = $oTmpBrick;
}
}
// We make sure a UserProfileBrick was found
if (!isset($oBrick) || $oBrick === null) {
$oBrick = new UserProfileBrick();
//throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR, 'UserProfileBrick : Brick could not be loaded as there was no UserProfileBrick loaded in the application.');
}
} else {
$oBrick = $this->oBrickCollection->GetBrickById($sBrickId);
}
return $oBrick;
}
// We make sure a UserProfileBrick was found
if (!isset($oBrick) || $oBrick === null) {
$oBrick = new UserProfileBrick();
//throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR, 'UserProfileBrick : Brick could not be loaded as there was no UserProfileBrick loaded in the application.');
}
} else {
$oBrick = $this->oBrickCollection->GetBrickById($sBrickId);
}
return $oBrick;
}
}

View File

@@ -1,4 +1,5 @@
<?php
/**
* Copyright (C) 2013-2024 Combodo SAS
*
@@ -44,8 +45,7 @@ class Basic extends AbstractConfiguration
*/
public function Process(Container $oContainer)
{
try
{
try {
// Parsing file
// - Default values
$aPortalConf = $this->GetInitialPortalConf();
@@ -55,9 +55,7 @@ class Basic extends AbstractConfiguration
$aPortalConf = $this->AppendLogoUri($aPortalConf);
// - Rectifying portal favicon url
$aPortalConf = $this->AppendFavIconUri($aPortalConf);
}
catch (Exception $oException)
{
} catch (Exception $oException) {
throw new Exception('Error while parsing portal configuration file : '.$oException->getMessage());
}
@@ -72,8 +70,8 @@ class Basic extends AbstractConfiguration
*/
private function GetInitialPortalConf()
{
$aPortalConf = array(
'properties' => array(
$aPortalConf = [
'properties' => [
'id' => $_ENV['PORTAL_ID'],
'ui_version' => 'v3',
'ui_settings' => [
@@ -82,29 +80,29 @@ class Basic extends AbstractConfiguration
'name' => 'Page:DefaultTitle',
'logo' => Branding::GetPortalLogoAbsoluteUrl(),
'favicon' => Branding::GetPortalFavIconAbsoluteUrl(),
'themes' => array(
'themes' => [
'bootstrap' => 'itop-portal-base/portal/public/css/bootstrap-theme-combodo.scss',
'portal' => 'itop-portal-base/portal/public/css/portal.scss',
'main' => 'itop-portal-base/portal/public/css/main.scss',
'others' => array(),
),
'templates' => array(
'others' => [],
],
'templates' => [
'layout' => 'itop-portal-base/portal/templates/layout.html.twig',
'home' => 'itop-portal-base/portal/templates/home/layout.html.twig',
),
],
'urlmaker_class' => null,
'triggers_query' => null,
'attachments' => array(
'attachments' => [
'allow_delete' => true,
),
'allowed_portals' => array(
],
'allowed_portals' => [
'opening_mode' => null,
),
),
'forms' => array(),
'bricks' => array(),
],
],
'forms' => [],
'bricks' => [],
'bricks_total_width' => 0,
);
];
return $aPortalConf;
}
@@ -118,10 +116,8 @@ class Basic extends AbstractConfiguration
private function ParseGlobalProperties(array $aPortalConf)
{
/** @var \MFElement $oPropertyNode */
foreach ($this->GetModuleDesign()->GetNodes('/module_design/properties/*') as $oPropertyNode)
{
switch ($oPropertyNode->nodeName)
{
foreach ($this->GetModuleDesign()->GetNodes('/module_design/properties/*') as $oPropertyNode) {
switch ($oPropertyNode->nodeName) {
case 'ui_version':
case 'name':
case 'urlmaker_class':
@@ -131,7 +127,7 @@ class Basic extends AbstractConfiguration
$aPortalConf['properties'][$oPropertyNode->nodeName] = $oPropertyNode->GetText(
$aPortalConf['properties'][$oPropertyNode->nodeName]
);
break;
break;
case 'ui_settings':
foreach ($oPropertyNode->GetNodes('*') as $oSubNode) {
$aPortalConf['properties'][$oPropertyNode->nodeName][$oSubNode->nodeName] = $oSubNode->GetText();
@@ -163,22 +159,20 @@ class Basic extends AbstractConfiguration
private function ParseTemplateAndTheme(array $aPortalConf, DesignElement $oPropertyNode)
{
/** @var \MFElement $oSubNode */
foreach ($oPropertyNode->GetNodes('template|theme') as $oSubNode)
{
if (!$oSubNode->hasAttribute('id') || $oSubNode->GetText(null) === null)
{
foreach ($oPropertyNode->GetNodes('template|theme') as $oSubNode) {
if (!$oSubNode->hasAttribute('id') || $oSubNode->GetText(null) === null) {
throw new DOMFormatException(
'Tag '.$oSubNode->nodeName.' must have a "id" attribute as well as a value',
null, null, $oSubNode
null,
null,
$oSubNode
);
}
$sNodeId = $oSubNode->getAttribute('id');
switch ($oSubNode->nodeName)
{
switch ($oSubNode->nodeName) {
case 'theme':
switch ($sNodeId)
{
switch ($sNodeId) {
case 'bootstrap':
case 'portal':
case 'custom':
@@ -190,8 +184,7 @@ class Basic extends AbstractConfiguration
}
break;
case 'template':
switch ($sNodeId)
{
switch ($sNodeId) {
case 'layout':
case 'home':
$aPortalConf['properties']['templates'][$sNodeId] = $oSubNode->GetText(null);
@@ -199,19 +192,21 @@ class Basic extends AbstractConfiguration
default:
$aMatches = [];
// allowed format is: <class implementing TemplatesProviderInterface>:<template_id>
if(preg_match('#([\w\\\d_]+):(\w+)#', $sNodeId, $aMatches)){
try{
if (preg_match('#([\w\\\d_]+):(\w+)#', $sNodeId, $aMatches)) {
try {
$oClass = new ReflectionClass($aMatches[1]);
if($oClass->implementsInterface(TemplatesProviderInterface::class)){
if ($oClass->implementsInterface(TemplatesProviderInterface::class)) {
$aPortalConf['properties']['templates'][$aMatches[1]][$aMatches[2]] = $oSubNode->GetText(null);
break;
}
} catch (Exception) {
}
catch(Exception){}
}
throw new DOMFormatException(
'Template ID "'.$sNodeId.'" is not handled in module design templates property',
null, null, $oSubNode
null,
null,
$oSubNode
);
}
break;
@@ -230,16 +225,13 @@ class Basic extends AbstractConfiguration
private function ParseAttachments(array $aPortalConf, DesignElement $oPropertyNode)
{
/** @var \MFElement $oSubNode */
foreach ($oPropertyNode->GetNodes('*') as $oSubNode)
{
switch ($oSubNode->nodeName)
{
foreach ($oPropertyNode->GetNodes('*') as $oSubNode) {
switch ($oSubNode->nodeName) {
case 'allow_delete':
$sValue = $oSubNode->GetText();
// If the text is null, we keep the default value
// Else we set it
if ($sValue !== null)
{
if ($sValue !== null) {
$aPortalConf['properties']['attachments'][$oSubNode->nodeName] = ($sValue === 'true') ? true : false;
}
break;
@@ -258,16 +250,13 @@ class Basic extends AbstractConfiguration
private function ParseAllowedPortalsOptions(array $aPortalConf, DesignElement $oPropertyNode)
{
/** @var \MFElement $oSubNode */
foreach ($oPropertyNode->GetNodes('*') as $oSubNode)
{
switch ($oSubNode->nodeName)
{
foreach ($oPropertyNode->GetNodes('*') as $oSubNode) {
switch ($oSubNode->nodeName) {
case 'opening_mode':
$sValue = $oSubNode->GetText();
// If the text is null, we keep the default value
// Else we set it
if ($sValue !== null)
{
if ($sValue !== null) {
$aPortalConf['properties']['allowed_portals'][$oSubNode->nodeName] = ($sValue === 'self') ? 'self' : 'tab';
}
break;
@@ -313,4 +302,4 @@ class Basic extends AbstractConfiguration
return $aPortalConf;
}
}
}

View File

@@ -41,13 +41,13 @@ use utils;
class ApplicationHelper
{
/** @var string FORM_ENUM_DISPLAY_MODE_COSY */
const FORM_ENUM_DISPLAY_MODE_COSY = 'cosy';
public const FORM_ENUM_DISPLAY_MODE_COSY = 'cosy';
/** @var string FORM_ENUM_DISPLAY_MODE_COMPACT */
const FORM_ENUM_DISPLAY_MODE_COMPACT = 'compact';
public const FORM_ENUM_DISPLAY_MODE_COMPACT = 'compact';
/** @var string FORM_DEFAULT_DISPLAY_MODE */
const FORM_DEFAULT_DISPLAY_MODE = self::FORM_ENUM_DISPLAY_MODE_COSY;
public const FORM_DEFAULT_DISPLAY_MODE = self::FORM_ENUM_DISPLAY_MODE_COSY;
/** @var bool FORM_DEFAULT_ALWAYS_SHOW_SUBMIT */
const FORM_DEFAULT_ALWAYS_SHOW_SUBMIT = false;
public const FORM_DEFAULT_ALWAYS_SHOW_SUBMIT = false;
/**
* Loads the brick's security from the OQL queries to profiles arrays
@@ -58,32 +58,25 @@ class ApplicationHelper
*/
public static function LoadBrickSecurity(AbstractBrick $oBrick)
{
try
{
try {
// Allowed profiles
if (utils::IsNotNullOrEmptyString($oBrick->GetAllowedProfilesOql()))
{
if (utils::IsNotNullOrEmptyString($oBrick->GetAllowedProfilesOql())) {
$oSearch = DBObjectSearch::FromOQL_AllData($oBrick->GetAllowedProfilesOql());
$oSet = new DBObjectSet($oSearch);
while ($oProfile = $oSet->Fetch())
{
while ($oProfile = $oSet->Fetch()) {
$oBrick->AddAllowedProfile($oProfile->Get('name'));
}
}
// Denied profiles
if (utils::IsNotNullOrEmptyString($oBrick->GetDeniedProfilesOql()))
{
if (utils::IsNotNullOrEmptyString($oBrick->GetDeniedProfilesOql())) {
$oSearch = DBObjectSearch::FromOQL_AllData($oBrick->GetDeniedProfilesOql());
$oSet = new DBObjectSet($oSearch);
while ($oProfile = $oSet->Fetch())
{
while ($oProfile = $oSet->Fetch()) {
$oBrick->AddDeniedProfile($oProfile->Get('name'));
}
}
}
catch (Exception $e)
{
} catch (Exception $e) {
throw new Exception('Error while loading security from '.$oBrick->GetId().' brick');
}
}
@@ -108,18 +101,14 @@ class ApplicationHelper
$aForm = null;
// We try to find the form for that class
if (isset($aForms[$sClass]) && isset($aForms[$sClass][$sMode]))
{
if (isset($aForms[$sClass]) && isset($aForms[$sClass][$sMode])) {
$aForm = $aForms[$sClass][$sMode];
}
// If not found, we try find one from the closest parent class
else
{
else {
$bFound = false;
foreach (MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_EXCLUDELEAF, false) as $sParentClass)
{
if (isset($aForms[$sParentClass]) && isset($aForms[$sParentClass][$sMode]))
{
foreach (MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_EXCLUDELEAF, false) as $sParentClass) {
if (isset($aForms[$sParentClass]) && isset($aForms[$sParentClass][$sMode])) {
$aForm = $aForms[$sParentClass][$sMode];
$bFound = true;
break;
@@ -127,8 +116,7 @@ class ApplicationHelper
}
// If we have still not found one, we return a default form
if (!$bFound)
{
if (!$bFound) {
$aForm = static::GenerateDefaultFormForClass($sClass);
}
}
@@ -153,32 +141,26 @@ class ApplicationHelper
public static function GetLoadedListFromClass($aLists, $sClass, $sList = 'default')
{
$aFoundList = null;
$aAttCodes = array();
$aAttCodes = [];
// We try to find the list for that class
if (isset($aLists[$sClass]) && isset($aLists[$sClass][$sList]))
{
if (isset($aLists[$sClass]) && isset($aLists[$sClass][$sList])) {
$aFoundList = $aLists[$sClass][$sList];
}
// Else we try to found the default list for that class
elseif (isset($aLists[$sClass]) && isset($aLists[$sClass]['default']))
{
elseif (isset($aLists[$sClass]) && isset($aLists[$sClass]['default'])) {
$aFoundList = $aLists[$sClass]['default'];
}
// If not found, we try find one from the closest parent class
else
{
foreach (MetaModel::EnumParentClasses($sClass) as $sParentClass)
{
else {
foreach (MetaModel::EnumParentClasses($sClass) as $sParentClass) {
// Trying to find the right list
if (isset($aLists[$sParentClass]) && isset($aLists[$sParentClass][$sList]))
{
if (isset($aLists[$sParentClass]) && isset($aLists[$sParentClass][$sList])) {
$aFoundList = $aLists[$sParentClass][$sList];
break;
}
// Or the default list
elseif (isset($aLists[$sParentClass]) && isset($aLists[$sParentClass]['default']))
{
elseif (isset($aLists[$sParentClass]) && isset($aLists[$sParentClass]['default'])) {
$aFoundList = $aLists[$sParentClass]['default'];
break;
}
@@ -186,15 +168,11 @@ class ApplicationHelper
}
// If found, we flatten the list to keep only the attribute codes (not the rank)
if ($aFoundList !== null)
{
foreach ($aFoundList as $aItem)
{
if ($aFoundList !== null) {
foreach ($aFoundList as $aItem) {
$aAttCodes[] = $aItem['att_code'];
}
}
else
{
} else {
$aAttCodes = MetaModel::FlattenZList(MetaModel::GetZListItems($sClass, 'list'));
}
@@ -213,32 +191,31 @@ class ApplicationHelper
*/
protected static function GenerateDefaultFormForClass($sClass, $bAddLinksets = false)
{
$aForm = array(
$aForm = [
'id' => strtolower($sClass)."-default-".uniqid(),
'type' => 'custom_list',
'properties' => array(
'properties' => [
'display_mode' => static::FORM_DEFAULT_DISPLAY_MODE,
'always_show_submit' => static::FORM_DEFAULT_ALWAYS_SHOW_SUBMIT,
'navigation_rules' => array(
'navigation_rules' => [
'submit' => null,
'cancel' => null,
),
),
'fields' => array(),
'layout' => array(
],
],
'fields' => [],
'layout' => [
'type' => 'xhtml',
'content' => '',
),
);
],
];
// Generate layout
$sContent = "";
// - Retrieve zlist details
$aDetailsList = MetaModel::GetZListItems($sClass, 'details');
$aDetailsStruct = cmdbAbstractObject::ProcessZlist($aDetailsList, array(), 'UI:PropertiesTab', 'col1', '');
if(!isset($aDetailsStruct['UI:PropertiesTab']))
{
$aDetailsStruct = cmdbAbstractObject::ProcessZlist($aDetailsList, [], 'UI:PropertiesTab', 'col1', '');
if (!isset($aDetailsStruct['UI:PropertiesTab'])) {
// For the iTop administrator
IssueLog::Error('Could not generate default form for "'.$sClass.'" class. Is the "details" zlist empty?');
// For the end-user
@@ -248,14 +225,10 @@ class ApplicationHelper
// Count cols (not linksets)
$iColCount = 0;
foreach ($aPropertiesStruct as $sColId => $aColFieldsets)
{
if (substr($sColId, 0, 1) !== '_')
{
foreach ($aColFieldsets as $sFieldsetName => $aAttCodes)
{
if (substr($sFieldsetName, 0, 1) !== '_')
{
foreach ($aPropertiesStruct as $sColId => $aColFieldsets) {
if (substr($sColId, 0, 1) !== '_') {
foreach ($aColFieldsets as $sFieldsetName => $aAttCodes) {
if (substr($sFieldsetName, 0, 1) !== '_') {
$iColCount++;
break;
}
@@ -263,28 +236,24 @@ class ApplicationHelper
}
}
// If no cols, return a default form with all fields one after another
if ($iColCount === 0)
{
return array(
if ($iColCount === 0) {
return [
'id' => 'default',
'type' => 'zlist',
'fields' => 'details',
'layout' => null,
);
];
}
// Warning, this might not be great when 12 modulo $iColCount is greater than 0.
$sColCSSClass = 'col-sm-'.floor(12 / $iColCount);
$sLinksetsHTML = "";
$sRowHTML = "<div class=\"row\">\n";
foreach ($aPropertiesStruct as $sColId => $aColFieldsets)
{
foreach ($aPropertiesStruct as $sColId => $aColFieldsets) {
$sColsHTML = "\t<div class=\"".$sColCSSClass."\">\n";
foreach ($aColFieldsets as $sFieldsetName => $aAttCodes)
{
foreach ($aColFieldsets as $sFieldsetName => $aAttCodes) {
// Add fieldset, not linkset
if (substr($sFieldsetName, 0, 1) !== '_')
{
if (substr($sFieldsetName, 0, 1) !== '_') {
$sFieldsetHTML = "\t\t<fieldset>\n";
$sFieldsetHTML .= "\t\t\t<legend>".utils::EscapeHtml(Dict::S($sFieldsetName))."</legend>\n";
@@ -296,11 +265,8 @@ class ApplicationHelper
// Add to col
$sColsHTML .= $sFieldsetHTML;
}
elseif ($bAddLinksets)
{
foreach ($aAttCodes as $sAttCode)
{
} elseif ($bAddLinksets) {
foreach ($aAttCodes as $sAttCode) {
$sLinksetsHTML .= "<div class=\"form_field\" data-field-id=\"".$sAttCode."\"></div>\n";
}
}
@@ -329,8 +295,9 @@ class ApplicationHelper
* @return array
* @since 2.7.0
*/
public static function GetAttDefClassesToExcludeFromMarkupMetadataRawValue(){
return array(
public static function GetAttDefClassesToExcludeFromMarkupMetadataRawValue()
{
return [
'AttributeBlob',
'AttributeCustomFields',
'AttributeDashboard',
@@ -338,7 +305,7 @@ class ApplicationHelper
'AttributeStopWatch',
'AttributeSubItem',
'AttributeTable',
'AttributeText'
);
'AttributeText',
];
}
}

View File

@@ -27,6 +27,7 @@ use SimpleCrypt;
use Symfony\Component\Routing\RouterInterface;
use TrueExpression;
use UserRights;
use const UR_ACTION_READ;
/**
@@ -39,17 +40,17 @@ use const UR_ACTION_READ;
class ContextManipulatorHelper
{
/** @var string ENUM_RULE_CALLBACK_BACK */
const ENUM_RULE_CALLBACK_BACK = 'back';
public const ENUM_RULE_CALLBACK_BACK = 'back';
/** @var string ENUM_RULE_CALLBACK_OPEN */
const ENUM_RULE_CALLBACK_OPEN = 'open';
public const ENUM_RULE_CALLBACK_OPEN = 'open';
/** @var string ENUM_RULE_CALLBACK_OPEN_VIEW */
const ENUM_RULE_CALLBACK_OPEN_VIEW = 'view';
public const ENUM_RULE_CALLBACK_OPEN_VIEW = 'view';
/** @var string ENUM_RULE_CALLBACK_OPEN_EDIT */
const ENUM_RULE_CALLBACK_OPEN_EDIT = 'edit';
public const ENUM_RULE_CALLBACK_OPEN_EDIT = 'edit';
/** @var string DEFAULT_RULE_CALLBACK_OPEN */
const DEFAULT_RULE_CALLBACK_OPEN = self::ENUM_RULE_CALLBACK_OPEN_VIEW;
public const DEFAULT_RULE_CALLBACK_OPEN = self::ENUM_RULE_CALLBACK_OPEN_VIEW;
const PRIVATE_KEY = 'portal-priv-key';
public const PRIVATE_KEY = 'portal-priv-key';
/** @var array $aRules */
protected $aRules;
@@ -73,8 +74,9 @@ class ContextManipulatorHelper
*
* @throws \DOMFormatException
*/
public function __construct(ModuleDesign $oModuleDesign, RouterInterface $oRouter, BrickCollection $oBrickCollection, ScopeValidatorHelper $oScopeValidator) {
$this->aRules = array();
public function __construct(ModuleDesign $oModuleDesign, RouterInterface $oRouter, BrickCollection $oBrickCollection, ScopeValidatorHelper $oScopeValidator)
{
$this->aRules = [];
$this->oRouter = $oRouter;
$this->oBrickCollection = $oBrickCollection;
@@ -92,38 +94,34 @@ class ContextManipulatorHelper
*/
public function Init(DOMNodeList $oNodes)
{
$this->aRules = array();
$this->aRules = [];
// Iterating over the scope nodes
/** @var \Combodo\iTop\DesignElement $oRuleNode */
foreach ($oNodes as $oRuleNode)
{
foreach ($oNodes as $oRuleNode) {
// Retrieving mandatory id attribute
$sRuleId = $oRuleNode->getAttribute('id');
if ($sRuleId === '')
{
if ($sRuleId === '') {
throw new DOMFormatException('Rule tag must have an id attribute.', null, null, $oRuleNode);
}
// Setting if the rule needs a source object
$bNeedsSource = false;
// Note : preset and retrofit are no longer plurals as it should match as much as possible iTopObjectCopier specs. We use plurals only in the xml for the collection tags
$aRule = array(
$aRule = [
'source_oql' => null,
'dest_class' => null,
'preset' => array(),
'retrofit' => array(),
'preset' => [],
'retrofit' => [],
'submit' => null,
'cancel' => null,
);
];
// Iterating over the rule's nodes
/** @var \Combodo\iTop\DesignElement $oSubNode */
foreach ($oRuleNode->GetNodes('*') as $oSubNode)
{
foreach ($oRuleNode->GetNodes('*') as $oSubNode) {
$sSubNodeName = $oSubNode->nodeName;
switch ($sSubNodeName)
{
switch ($sSubNodeName) {
case 'source_class':
$aRule['source_oql'] = 'SELECT '.$oSubNode->GetText();
break;
@@ -136,17 +134,14 @@ class ContextManipulatorHelper
case 'presets':
case 'retrofits':
/** @var \Combodo\iTop\DesignElement $oActionNode */
foreach ($oSubNode->GetNodes('*') as $oActionNode)
{
foreach ($oSubNode->GetNodes('*') as $oActionNode) {
// Note : Caution, the index of $aRule is now $oActionNode->nodeName instead of $sSubNodeName, as we want to match iTopObjectCopier specs like told previously
if (in_array($oActionNode->nodeName, array('preset', 'retrofit')))
{
if (in_array($oActionNode->nodeName, ['preset', 'retrofit'])) {
$sActionText = $oActionNode->GetText();
$aRule[$oActionNode->nodeName][] = $sActionText;
// Checking if the rule needs a source object
if (substr($sActionText, 0, 4) === 'copy')
{
if (substr($sActionText, 0, 4) === 'copy') {
$bNeedsSource = true;
}
}
@@ -157,25 +152,21 @@ class ContextManipulatorHelper
case 'cancel':
// Retrieving callback type and checking that it is allowed
$sType = $oSubNode->getAttribute('xsi:type');
if ($sType === '')
{
if ($sType === '') {
throw new DOMFormatException($sSubNodeName.' must have an xsi:type attribute.', null, null, $oSubNode);
}
if (($sType === static::ENUM_RULE_CALLBACK_OPEN) && ($sSubNodeName === 'cancel'))
{
if (($sType === static::ENUM_RULE_CALLBACK_OPEN) && ($sSubNodeName === 'cancel')) {
throw new DOMFormatException('Cancel tag cannot be of type '.$sType.'.', null, null, $oSubNode);
}
$aRule[$sSubNodeName] = array('type' => $sType);
switch ($sType)
{
$aRule[$sSubNodeName] = ['type' => $sType];
switch ($sType) {
case static::ENUM_RULE_CALLBACK_BACK:
// Default value
$sRefresh = false;
// Retrieving value
$oRefreshNode = $oSubNode->GetOptionalElement('refresh');
if (($oRefreshNode !== null) && ($oRefreshNode->GetText() !== null))
{
if (($oRefreshNode !== null) && ($oRefreshNode->GetText() !== null)) {
$sRefresh = $oRefreshNode->GetText();
}
@@ -187,8 +178,7 @@ class ContextManipulatorHelper
$sMode = static::ENUM_RULE_CALLBACK_OPEN_VIEW;
// Retrieving value
$oModeNode = $oSubNode->GetOptionalElement('mode');
if (($oModeNode !== null) && ($oModeNode->GetText() !== null))
{
if (($oModeNode !== null) && ($oModeNode->GetText() !== null)) {
$sMode = $oModeNode->GetText();
}
@@ -200,8 +190,7 @@ class ContextManipulatorHelper
}
// If there is no source information we check if there is a preset that requires a copy in order to throw an exception
if (($aRule['source_oql'] === null) && ($bNeedsSource === true))
{
if (($aRule['source_oql'] === null) && ($bNeedsSource === true)) {
throw new DOMFormatException('Rule tag must have either a "source_oql" or a "source_class" child node.', null, null, $oRuleNode);
}
@@ -209,7 +198,6 @@ class ContextManipulatorHelper
}
}
/**
* Returns a hash array of rules
*
@@ -230,8 +218,7 @@ class ContextManipulatorHelper
*/
public function GetRule($sId)
{
if (!array_key_exists($sId, $this->aRules))
{
if (!array_key_exists($sId, $this->aRules)) {
throw new Exception('Context creator : Could not find "'.$sId.'" in the rules list');
}
@@ -264,30 +251,26 @@ class ContextManipulatorHelper
*/
public function PrepareObject(array $aData, DBObject $oObject)
{
if (isset($aData['rules']) && isset($aData['sources']))
{
if (isset($aData['rules']) && isset($aData['sources'])) {
$aRules = $aData['rules'];
$aSources = $aData['sources'];
$aActionRulesErrors = array();
foreach ($aRules as $sRuleId)
{
try
{
$aActionRulesErrors = [];
foreach ($aRules as $sRuleId) {
try {
$this->PrepareAndExecActionRule($sRuleId, $aSources, $oObject);
}
catch (CorePortalInvalidActionRuleException $e)
{
} catch (CorePortalInvalidActionRuleException $e) {
$aActionRulesErrors[$sRuleId] = $e->getMessage();
}
}
if (!empty($aActionRulesErrors))
{
if (!empty($aActionRulesErrors)) {
$sDestinationObjectDesc = '';
$sDestinationObjectDesc .= get_class($oObject);
$sDestinationObjectDesc .= '['.$oObject->GetKey().']';
throw new CorePortalInvalidActionRuleException('Some action rules were not executed',
throw new CorePortalInvalidActionRuleException(
'Some action rules were not executed',
$aActionRulesErrors,
'destination object: '.$sDestinationObjectDesc);
'destination object: '.$sDestinationObjectDesc
);
}
}
}
@@ -311,8 +294,7 @@ class ContextManipulatorHelper
$aRule = $this->GetRule($sRuleId);
// Retrieving source object if needed
if ($aRule['source_oql'] !== null)
{
if ($aRule['source_oql'] !== null) {
// Preparing query to retrieve source object(s)
/** @var \DBObjectSearch $oSearch */
$oSearch = DBSearch::FromOQL($aRule['source_oql']);
@@ -324,45 +306,37 @@ class ContextManipulatorHelper
$sSearchClass = $oSearch->GetClass();
$aSearchParams = $oSearch->GetInternalParams();
if (array_key_exists($sSearchClass, $aSources))
{
if (array_key_exists($sSearchClass, $aSources)) {
$sourceId = $aSources[$sSearchClass];
if (array_key_exists('id', $oSearch->GetQueryParams()))
{
if (is_array($sourceId))
{
if (array_key_exists('id', $oSearch->GetQueryParams())) {
if (is_array($sourceId)) {
throw new Exception('Context creator : ":id" parameter in rule "'.$sRuleId.'" cannot be an array (This is a limitation of DBSearch)');
}
$aSearchParams['id'] = $sourceId;
}
else
{
if (!is_array($sourceId))
{
$sourceId = array($sourceId);
} else {
if (!is_array($sourceId)) {
$sourceId = [$sourceId];
}
$iLoopMax = count($sourceId);
$oFullBinExpr = null;
for ($i = 0; $i < $iLoopMax; $i++)
{
for ($i = 0; $i < $iLoopMax; $i++) {
// - Building full search expression
$oBinExpr = new BinaryExpression(new FieldExpression('id', $oSearch->GetClassAlias()), '=',
new ScalarExpression($sourceId[$i]));
if ($i === 0)
{
$oBinExpr = new BinaryExpression(
new FieldExpression('id', $oSearch->GetClassAlias()),
'=',
new ScalarExpression($sourceId[$i])
);
if ($i === 0) {
$oFullBinExpr = $oBinExpr;
}
else
{
} else {
$oFullBinExpr = new BinaryExpression($oFullBinExpr, 'OR', $oBinExpr);
}
// - Adding it to the query when complete
if ($i === ($iLoopMax - 1))
{
if ($i === ($iLoopMax - 1)) {
$oSearch->AddConditionExpression($oFullBinExpr);
}
}
@@ -370,8 +344,7 @@ class ContextManipulatorHelper
}
$oSearchRootCondition = $oSearch->GetCriteria();
if (($oSearchRootCondition === null) || ($oSearchRootCondition instanceof TrueExpression))
{
if (($oSearchRootCondition === null) || ($oSearchRootCondition instanceof TrueExpression)) {
// N°2555 : disallow searches without any condition
$sErrMsg = "Portal query was stopped: action_rule '$sRuleId' searches for '$sSearchClass' without any condition is forbidden";
IssueLog::Error($sErrMsg);
@@ -379,35 +352,31 @@ class ContextManipulatorHelper
}
// Checking for silos
$oScopeSearch = $this->oScopeValidator->GetScopeFilterForProfiles(UserRights::ListProfiles(), $sSearchClass,
UR_ACTION_READ);
if ($oScopeSearch->IsAllDataAllowed())
{
$oScopeSearch = $this->oScopeValidator->GetScopeFilterForProfiles(
UserRights::ListProfiles(),
$sSearchClass,
UR_ACTION_READ
);
if ($oScopeSearch->IsAllDataAllowed()) {
$oSearch->AllowAllData();
}
// Retrieving source object(s) and applying rules
$oSet = new DBObjectSet($oSearch, array(), $aSearchParams);
while ($oSourceObject = $oSet->Fetch()) // we need a loop for certain preset verbs like add_to_list, see N°2555
{
$oSet = new DBObjectSet($oSearch, [], $aSearchParams);
while ($oSourceObject = $oSet->Fetch()) { // we need a loop for certain preset verbs like add_to_list, see N°2555
// Presets
if (isset($aRule['preset']) && !empty($aRule['preset']))
{
$oDestinationObject->ExecActions($aRule['preset'], array('source' => $oSourceObject));
if (isset($aRule['preset']) && !empty($aRule['preset'])) {
$oDestinationObject->ExecActions($aRule['preset'], ['source' => $oSourceObject]);
}
// Retrofits
if (isset($aRule['retrofit']) && !empty($aRule['retrofit']))
{
$oSourceObject->ExecActions($aRule['retrofit'], array('source' => $oDestinationObject));
if (isset($aRule['retrofit']) && !empty($aRule['retrofit'])) {
$oSourceObject->ExecActions($aRule['retrofit'], ['source' => $oDestinationObject]);
}
}
}
else
{
} else {
// Presets
if (isset($aRule['preset']) && !empty($aRule['preset']))
{
$oDestinationObject->ExecActions($aRule['preset'], array('source' => $oDestinationObject));
if (isset($aRule['preset']) && !empty($aRule['preset'])) {
$oDestinationObject->ExecActions($aRule['preset'], ['source' => $oDestinationObject]);
}
}
}
@@ -420,20 +389,19 @@ class ContextManipulatorHelper
*
* @return array
*/
public static function PrepareRulesForToken($aRules, $aObjects = array())
public static function PrepareRulesForToken($aRules, $aObjects = [])
{
// Getting necessary information from objects
$aSources = array();
foreach ($aObjects as $oObject)
{
$aSources = [];
foreach ($aObjects as $oObject) {
$aSources[get_class($oObject)] = $oObject->GetKey();
}
// Preparing data
$aTokenRules = array(
$aTokenRules = [
'rules' => $aRules,
'sources' => $aSources,
);
];
return $aTokenRules;
}
@@ -464,7 +432,7 @@ class ContextManipulatorHelper
*
* @return string
*/
public static function PrepareAndEncodeRulesToken($aRules, $aObjects = array())
public static function PrepareAndEncodeRulesToken($aRules, $aObjects = [])
{
// Preparing rules before making a token
$aTokenRules = static::PrepareRulesForToken($aRules, $aObjects);
@@ -491,19 +459,20 @@ class ContextManipulatorHelper
$sDecryptedToken = $oCrypt->Decrypt($sPrivateKey, self::base64url_decode($sToken));
$aTokenRules = json_decode($sDecryptedToken, true);
if (!is_array($aTokenRules))
{
if (!is_array($aTokenRules)) {
throw new Exception('DecodeRulesToken not a proper json structure.');
}
return $aTokenRules;
}
private static function base64url_encode($sData) {
private static function base64url_encode($sData)
{
return rtrim(strtr(base64_encode($sData), '+/', '-_'), '=');
}
private static function base64url_decode($sData) {
private static function base64url_decode($sData)
{
return base64_decode(str_pad(strtr($sData, '-_', '+/'), strlen($sData) % 4, '=', STR_PAD_RIGHT));
}
@@ -515,7 +484,7 @@ class ContextManipulatorHelper
*/
private static function GetPrivateKey()
{
if(self::$sPrivateKey === null) {
if (self::$sPrivateKey === null) {
self::$sPrivateKey = DBProperty::GetProperty(self::PRIVATE_KEY);
if (is_null(self::$sPrivateKey)) {
self::$sPrivateKey = bin2hex(random_bytes(32));

View File

@@ -1,4 +1,5 @@
<?php
/**
* Copyright (C) 2013-2024 Combodo SAS
*
@@ -35,21 +36,21 @@ use utils;
class SessionMessageHelper implements IteratorAggregate
{
/** @var string ENUM_SEVERITY_INFO */
const ENUM_SEVERITY_INFO = 'info';
public const ENUM_SEVERITY_INFO = 'info';
/** @var string ENUM_SEVERITY_OK */
const ENUM_SEVERITY_OK = 'ok';
public const ENUM_SEVERITY_OK = 'ok';
/** @var string ENUM_SEVERITY_WARNING */
const ENUM_SEVERITY_WARNING = 'warning';
public const ENUM_SEVERITY_WARNING = 'warning';
/** @var string ENUM_SEVERITY_ERROR */
const ENUM_SEVERITY_ERROR = 'error';
public const ENUM_SEVERITY_ERROR = 'error';
/** @var string DEFAULT_SEVERITY */
const DEFAULT_SEVERITY = self::ENUM_SEVERITY_INFO;
public const DEFAULT_SEVERITY = self::ENUM_SEVERITY_INFO;
/** @var \Symfony\Component\DependencyInjection\ContainerInterface $oContainer */
private $oContainer;
/** @var array $aAllMessages */
private $aAllMessages = array();
private $aAllMessages = [];
/**
* SessionMessageHelper constructor.
@@ -71,11 +72,10 @@ class SessionMessageHelper implements IteratorAggregate
* @param array $aMetadata An array of key => scalar value
* @param int $iRank
*/
public function AddMessage($sId, $sContent, $sSeverity = self::DEFAULT_SEVERITY, $aMetadata = array(), $iRank = 1)
public function AddMessage($sId, $sContent, $sSeverity = self::DEFAULT_SEVERITY, $aMetadata = [], $iRank = 1)
{
$sKey = $this->GetMessagesKey();
if(!Session::IsSet(['obj_messages', $sKey]))
{
if (!Session::IsSet(['obj_messages', $sKey])) {
Session::Set(['obj_messages', $sKey], []);
}
@@ -115,7 +115,7 @@ class SessionMessageHelper implements IteratorAggregate
*/
private function GetMessagesKey()
{
return 'GUI:' . $this->oContainer->getParameter('combodo.portal.instance.id');
return 'GUI:'.$this->oContainer->getParameter('combodo.portal.instance.id');
}
/**
@@ -126,23 +126,18 @@ class SessionMessageHelper implements IteratorAggregate
*/
private function FetchMessages()
{
if (!empty($this->aAllMessages))
{
if (!empty($this->aAllMessages)) {
return;
}
$this->aAllMessages = array();
if (is_array(Session::Get('obj_messages')))
{
foreach (Session::Get('obj_messages') as $sMessageKey => $aMessageObjectData)
{
$aObjectMessages = array();
$aRanks = array();
foreach ($aMessageObjectData as $sMessageId => $aMessageData)
{
$this->aAllMessages = [];
if (is_array(Session::Get('obj_messages'))) {
foreach (Session::Get('obj_messages') as $sMessageKey => $aMessageObjectData) {
$aObjectMessages = [];
$aRanks = [];
foreach ($aMessageObjectData as $sMessageId => $aMessageData) {
$sMsgClass = 'ipb-alert alert alert-dismissible alert-';
switch ($aMessageData['severity'])
{
switch ($aMessageData['severity']) {
case static::ENUM_SEVERITY_INFO:
$sMsgClass .= 'info';
break;
@@ -168,17 +163,16 @@ class SessionMessageHelper implements IteratorAggregate
$sMsgMetadata .= 'data-'.str_replace('_', '-', $sMetadatumName).'="'.utils::HtmlEntities($sMetadatumValue).'" ';
}
}
$aObjectMessages[] = array('css_classes' => $sMsgClass, 'message' => $aMessageData['message'], 'metadata' => $sMsgMetadata);
$aObjectMessages[] = ['css_classes' => $sMsgClass, 'message' => $aMessageData['message'], 'metadata' => $sMsgMetadata];
$aRanks[] = $aMessageData['rank'];
}
Session::Unset(['obj_messages', $sMessageKey]);
array_multisort($aRanks, $aObjectMessages);
foreach ($aObjectMessages as $aObjectMessage)
{
foreach ($aObjectMessages as $aObjectMessage) {
$this->aAllMessages[] = $aObjectMessage;
}
}
}
}
}
}

View File

@@ -1,4 +1,5 @@
<?php
/**
* Copyright (C) 2013-2024 Combodo SAS
*
@@ -37,8 +38,8 @@ class Kernel extends BaseKernel
{
use MicroKernelTrait;
/** @var string CONFIG_EXTS */
const CONFIG_EXTS = '.{php,xml,yaml,yml}';
/** @var string CONFIG_EXTS */
public const CONFIG_EXTS = '.{php,xml,yaml,yml}';
/**
* @return string
@@ -55,23 +56,23 @@ class Kernel extends BaseKernel
*/
public function getLogDir(): string
{
$logDir = $_ENV['PORTAL_ID'] . '-' . $this->environment;
$logDir = $_ENV['PORTAL_ID'].'-'.$this->environment;
return utils::GetLogPath() . "/portals/$logDir";
}
return utils::GetLogPath()."/portals/$logDir";
}
/**
* @return \Generator|iterable|\Symfony\Component\HttpKernel\Bundle\BundleInterface[]
*/
public function registerBundles(): iterable
{
$contents = require $this->getProjectDir().'/config/bundles.php';
foreach ($contents as $class => $envs) {
if (isset($envs[$this->environment]) || isset($envs['all'])) {
yield new $class();
}
}
}
$contents = require $this->getProjectDir().'/config/bundles.php';
foreach ($contents as $class => $envs) {
if (isset($envs[$this->environment]) || isset($envs['all'])) {
yield new $class();
}
}
}
/**
* @param \Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator $container

View File

@@ -29,7 +29,6 @@ namespace Combodo\iTop\Portal\Service\TemplatesProvider;
*/
class TemplatesRegister
{
/** @var array Templates definitions (possibly altered by portal configuration) */
private array $aTemplatesDefinitions = [];
@@ -127,7 +126,7 @@ class TemplatesRegister
*/
public function GetProviderTemplatesIds(string $sProviderId): array
{
return array_map(fn($oTemplateDefinition) => $oTemplateDefinition->GetId(), $this->aTemplatesDefinitions[$sProviderId] ?? ['tile', 'page']);
return array_map(fn ($oTemplateDefinition) => $oTemplateDefinition->GetId(), $this->aTemplatesDefinitions[$sProviderId] ?? ['tile', 'page']);
}
/**
@@ -139,4 +138,4 @@ class TemplatesRegister
{
return $this->aTemplatesDefinitions;
}
}
}

View File

@@ -37,7 +37,6 @@ use Twig\Extension\GlobalsInterface;
*/
class AppGlobal extends AbstractExtension implements GlobalsInterface
{
/**
* Constructor.
*

View File

@@ -8,14 +8,14 @@ use MetaModel;
class AppIconUrlAccessor
{
private $oUrlGenerator;
public function __construct(UrlGenerator $oUrlGenerator)
{
$this->oUrlGenerator = $oUrlGenerator;
}
/**
*
*
* @param $bIgnoreOverrideCheck bool If true, use the URL set in the configuration file even if it's not a custom value
*
* @return string
@@ -23,10 +23,10 @@ class AppIconUrlAccessor
public function GetAppIconUrl($bIgnoreOverrideCheck = false): string
{
// Try if a custom URL was set in the configuration file
if($bIgnoreOverrideCheck === true || MetaModel::GetConfig()->IsCustomValue('app_icon_url')) {
if ($bIgnoreOverrideCheck === true || MetaModel::GetConfig()->IsCustomValue('app_icon_url')) {
return $_ENV['COMBODO_CONF_APP_ICON_URL'] ;
}
// Otherwise use the home page
return $this->oUrlGenerator->generate('p_home');
}
}
}