Compare commits

..

15 Commits

Author SHA1 Message Date
Anne-Cath
3ff97be963 use new method GetOwnerOrganizationAttCode in Attachment
+ test
2024-12-16 15:42:47 +01:00
Anne-Cath
add7743b6f Add tests 2024-12-16 15:27:28 +01:00
Anne-Cath
2415d3d5d3 Add tests 2024-12-16 14:56:23 +01:00
Anne-Cath
77989b6bd8 Add tests 2024-12-16 14:55:56 +01:00
Anne-Cath
f26ed0ea71 indentation 2024-12-16 14:17:26 +01:00
Anne-Cath
309b6bd900 Replace UserRightsProfile::GetOwnerOrganizationAttCode($sClass) by UserRights::GetOwnerOrganizationAttCode($sClass) 2024-12-09 10:53:09 +01:00
Anne-Cath
83f1476de4 Refactor
+ use new function in Attachment
2024-11-25 15:22:35 +01:00
Anne-Cath
c2d0c310a9 N°7963 - Inlineimage::SetDefaultOrgId blend field name between Person and linked class 2024-11-13 11:17:35 +01:00
Timothee
e7488b2c89 N°7721 default configuration parameter 2024-11-12 14:48:58 +01:00
Stephen Abello
8ac4086e71 N°7793 Fix primary color being set to blue due to a mistake 2024-11-12 13:52:03 +01:00
Benjamin Dalsass
6b5273fa1c N°1000 - Portal: filter BrowseBrick result varies if in list or tree (#673)
* N°1000 - Portal: filter BrowseBrick result varies if in list or tree

* N°1000 - Portal: filter BrowseBrick result varies if in list or tree
- replace html separators by css class

* N°1000 - Portal: filter BrowseBrick result varies if in list or tree
- replace html separators by css class

* N°1000 - Portal: filter BrowseBrick result varies if in list or tree
- add alteration comment to Tree List Filter jQuery plugin 1.0
- remove display none to tree-item-filter-data
2024-11-12 11:02:43 +01:00
jf-cbd
9b1e854bf7 Update translations 2024-11-12 09:27:35 +01:00
Lars Kaltefleiter
926700856d Fix some typos in en translations (#678) 2024-11-08 10:56:10 +01:00
Stephen Abello
ab93d59a77 Merge branch 'support/3.1' into support/3.2
# Conflicts:
#	sources/Core/Email/EmailLaminas.php
2024-11-08 09:41:48 +01:00
Karel Vlk
c70d62a51e 🐛 N°7916 SF#2274 EmailLaminas.php: Keep charset with part header in multipart email (#672)
* 🐛 N°2274 EmailLaminas.php: Keep charset with part header in multipart email

* Add a unit test

---------

Co-authored-by: Stephen Abello <stephen.abello@combodo.com>
2024-11-08 09:38:57 +01:00
339 changed files with 28466 additions and 977 deletions

View File

@@ -79,8 +79,6 @@ Then, **for a method** of an eligible class:
## Installation ## Installation
Note : PHP7 is required. Migrating to PHP8 requires some additional work which is questionable as an alternative way to generate a documentation is being considered.
``` ```
cd .doc cd .doc
composer require phpdocumentor/phpdocumentor:~2 --dev composer require phpdocumentor/phpdocumentor:~2 --dev

View File

@@ -90,7 +90,6 @@ We would like to give a special thank you 🤗 to the people from the community
- Dejin, Bie (a.k.a [@bdejin](https://github.com/bdejin)) - Dejin, Bie (a.k.a [@bdejin](https://github.com/bdejin))
- Dvořák, Lukáš - Dvořák, Lukáš
- Goethals, Stefan - Goethals, Stefan
- Giuva, Vincenzo Katriel (a.k.a [@DarkNight97boss](https://github.com/DarkNight97boss))
- Gumble, David - Gumble, David
- Ji, Leeb (冀利斌) (a.k.a [@chileeb](https://github.com/chileeb)) - Ji, Leeb (冀利斌) (a.k.a [@chileeb](https://github.com/chileeb))
- Kaltefleiter, Lars (a.k.a [@larhip](https://www.github.com/larhip)) - Kaltefleiter, Lars (a.k.a [@larhip](https://www.github.com/larhip))

View File

@@ -648,7 +648,7 @@ class UserRightsProfile extends UserRightsAddOnAPI
$aConditions = array(); $aConditions = array();
// Determine if this class is part of a silo and build the filter for it // Determine if this class is part of a silo and build the filter for it
$sAttCode = self::GetOwnerOrganizationAttCode($sClass); $sAttCode = UserRights::GetOwnerOrganizationAttCode($sClass);
if (!is_null($sAttCode)) if (!is_null($sAttCode))
{ {
$aUserOrgs = $this->GetUserOrgs($oUser, $sClass); $aUserOrgs = $this->GetUserOrgs($oUser, $sClass);
@@ -834,7 +834,7 @@ class UserRightsProfile extends UserRightsAddOnAPI
// But currently we are checking wether the objects might be written... // But currently we are checking wether the objects might be written...
// Let's exclude the objects based on the relevant criteria // Let's exclude the objects based on the relevant criteria
$sOrgAttCode = self::GetOwnerOrganizationAttCode($sClass); $sOrgAttCode = UserRights::GetOwnerOrganizationAttCode($sClass);
if (!is_null($sOrgAttCode)) if (!is_null($sOrgAttCode))
{ {
$aUserOrgs = $this->GetUserOrgs($oUser, $sClass); $aUserOrgs = $this->GetUserOrgs($oUser, $sClass);
@@ -938,31 +938,11 @@ class UserRightsProfile extends UserRightsAddOnAPI
* @param string $sClass * @param string $sClass
* @return string|null Find out which attribute is corresponding the dimension 'owner org' * @return string|null Find out which attribute is corresponding the dimension 'owner org'
* returns null if no such attribute has been found (no filtering should occur) * returns null if no such attribute has been found (no filtering should occur)
* @deprecated 3.3.0 use @UserRights::GetOwnerOrganizationAttCode instead
*/ */
public static function GetOwnerOrganizationAttCode($sClass) public static function GetOwnerOrganizationAttCode($sClass)
{ {
$sAttCode = null; return UserRights::GetOwnerOrganizationAttCode($sClass);
$aCallSpec = array($sClass, 'MapContextParam');
if (($sClass == 'Organization') || is_subclass_of($sClass, 'Organization'))
{
$sAttCode = 'id';
}
elseif (is_callable($aCallSpec))
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (!MetaModel::IsValidAttCode($sClass, $sAttCode))
{
// Skip silently. The data model checker will tell you something about this...
$sAttCode = null;
}
}
elseif(MetaModel::IsValidAttCode($sClass, 'org_id'))
{
$sAttCode = 'org_id';
}
return $sAttCode;
} }
/** /**

View File

@@ -778,7 +778,7 @@ exit;
// Determine how to position the objects of this class // Determine how to position the objects of this class
// //
$sAttCode = self::GetOwnerOrganizationAttCode($sClass); $sAttCode = UserRights::GetOwnerOrganizationAttCode($sClass);
if (is_null($sAttCode)) if (is_null($sAttCode))
{ {
// No filtering for this object // No filtering for this object
@@ -909,7 +909,7 @@ exit;
// But currently we are checking wether the objects might be written... // But currently we are checking wether the objects might be written...
// Let's exclude the objects based on the relevant criteria // Let's exclude the objects based on the relevant criteria
$sOrgAttCode = self::GetOwnerOrganizationAttCode($sClass); $sOrgAttCode = UserRights::GetOwnerOrganizationAttCode($sClass);
if (!is_null($sOrgAttCode)) if (!is_null($sOrgAttCode))
{ {
$aUserOrgs = $this->GetUserOrgs($oUser, $sClass); $aUserOrgs = $this->GetUserOrgs($oUser, $sClass);
@@ -1015,28 +1015,7 @@ exit;
*/ */
public static function GetOwnerOrganizationAttCode($sClass) public static function GetOwnerOrganizationAttCode($sClass)
{ {
$sAttCode = null; return UserRights::GetOwnerOrganizationAttCode($sClass);;
$aCallSpec = array($sClass, 'MapContextParam');
if (($sClass == 'Organization') || is_subclass_of($sClass, 'Organization'))
{
$sAttCode = 'id';
}
elseif (is_callable($aCallSpec))
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (!MetaModel::IsValidAttCode($sClass, $sAttCode))
{
// Skip silently. The data model checker will tell you something about this...
$sAttCode = null;
}
}
elseif(MetaModel::IsValidAttCode($sClass, 'org_id'))
{
$sAttCode = 'org_id';
}
return $sAttCode;
} }
/** /**

View File

@@ -805,16 +805,16 @@ HTML
if (!$this->IsNew()) { if (!$this->IsNew()) {
// Look for any trigger that considers this object as "In Scope" // Look for any trigger that considers this object as "In Scope"
// If any trigger has been found then display a tab with notifications // If any trigger has been found then display a tab with notifications
// If all triggers on an object have been deleted, we consider that we no longer need the event notification information //
$aTriggers = $this->GetRelatedTriggersIDs(); $aTriggers = $this->GetRelatedTriggersIDs();
if (count($aTriggers) > 0) { if (count($aTriggers) > 0) {
$iId = $this->GetKey(); $iId = $this->GetKey();
$aParams = array('class' => get_class($this), 'id' => $iId); $aParams = array('triggers' => $aTriggers, 'id' => $iId);
$aNotifSearches = array(); $aNotifSearches = array();
$iNotifsCount = 0; $iNotifsCount = 0;
$aNotificationClasses = MetaModel::EnumChildClasses('EventNotification'); $aNotificationClasses = MetaModel::EnumChildClasses('EventNotification');
foreach ($aNotificationClasses as $sNotifClass) { foreach ($aNotificationClasses as $sNotifClass) {
$aNotifSearches[$sNotifClass] = DBObjectSearch::FromOQL("SELECT $sNotifClass AS Ev WHERE Ev.object_id = :id AND Ev.object_class = :class"); $aNotifSearches[$sNotifClass] = DBObjectSearch::FromOQL("SELECT $sNotifClass AS Ev JOIN Trigger AS T ON Ev.trigger_id = T.id WHERE T.id IN (:triggers) AND Ev.object_id = :id");
$aNotifSearches[$sNotifClass]->SetInternalParams($aParams); $aNotifSearches[$sNotifClass]->SetInternalParams($aParams);
$oNotifSet = new DBObjectSet($aNotifSearches[$sNotifClass], array()); $oNotifSet = new DBObjectSet($aNotifSearches[$sNotifClass], array());
$iNotifsCount += $oNotifSet->Count(); $iNotifsCount += $oNotifSet->Count();

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="AbstractResource" _delta="define"> <class id="AbstractResource" _delta="define">
<parent>cmdbAbstractObject</parent> <parent>cmdbAbstractObject</parent>
@@ -45,7 +45,7 @@
<properties> <properties>
<comment>/** Acknowledge welcome popup messages */</comment> <comment>/** Acknowledge welcome popup messages */</comment>
<abstract>false</abstract> <abstract>false</abstract>
<category/> <category></category>
<key_type>autoincrement</key_type> <key_type>autoincrement</key_type>
<db_table>priv_welcome_popup_acknowledge</db_table> <db_table>priv_welcome_popup_acknowledge</db_table>
</properties> </properties>

View File

@@ -303,7 +303,7 @@ class ExcelExporter
{ {
if ($this->sOutputFilePath == null) if ($this->sOutputFilePath == null)
{ {
return utils::GetDataPath().'bulk_export/'.$this->sToken.'.xlsx'; return APPROOT.'data/bulk_export/'.$this->sToken.'.xlsx';
} }
else else
{ {
@@ -313,14 +313,14 @@ class ExcelExporter
public static function GetExcelFileFromToken($sToken) public static function GetExcelFileFromToken($sToken)
{ {
return @file_get_contents(utils::GetDataPath().'bulk_export/'.$sToken.'.xlsx'); return @file_get_contents(APPROOT.'data/bulk_export/'.$sToken.'.xlsx');
} }
public static function CleanupFromToken($sToken) public static function CleanupFromToken($sToken)
{ {
@unlink(utils::GetDataPath().'bulk_export/'.$sToken.'.status'); @unlink(APPROOT.'data/bulk_export/'.$sToken.'.status');
@unlink(utils::GetDataPath().'bulk_export/'.$sToken.'.data'); @unlink(APPROOT.'data/bulk_export/'.$sToken.'.data');
@unlink(utils::GetDataPath().'bulk_export/'.$sToken.'.xlsx'); @unlink(APPROOT.'data/bulk_export/'.$sToken.'.xlsx');
} }
public function Cleanup() public function Cleanup()
@@ -334,7 +334,7 @@ class ExcelExporter
*/ */
public static function CleanupOldFiles() public static function CleanupOldFiles()
{ {
$aFiles = glob(utils::GetDataPath().'bulk_export/*.*'); $aFiles = glob(APPROOT.'data/bulk_export/*.*');
$iDelay = MetaModel::GetConfig()->Get('xlsx_exporter_cleanup_old_files_delay'); $iDelay = MetaModel::GetConfig()->Get('xlsx_exporter_cleanup_old_files_delay');
if($iDelay > 0) if($iDelay > 0)
@@ -416,14 +416,14 @@ class ExcelExporter
protected function CheckDataDir() protected function CheckDataDir()
{ {
if(!is_dir(utils::GetDataPath()."bulk_export")) if(!is_dir(APPROOT."data/bulk_export"))
{ {
@mkdir(utils::GetDataPath()."bulk_export", 0777, true /* recursive */); @mkdir(APPROOT."data/bulk_export", 0777, true /* recursive */);
clearstatcache(); clearstatcache();
} }
if (!is_writable(utils::GetDataPath()."bulk_export")) if (!is_writable(APPROOT."data/bulk_export"))
{ {
throw new Exception('Data directory "'.utils::GetDataPath().'bulk_export" could not be written.'); throw new Exception('Data directory "'.APPROOT.'data/bulk_export" could not be written.');
} }
} }
@@ -433,12 +433,12 @@ class ExcelExporter
{ {
$sToken = $this->sToken; $sToken = $this->sToken;
} }
return utils::GetDataPath()."bulk_export/$sToken.status"; return APPROOT."data/bulk_export/$sToken.status";
} }
protected function GetDataFile() protected function GetDataFile()
{ {
return utils::GetDataPath().'bulk_export/'.$this->sToken.'.data'; return APPROOT.'data/bulk_export/'.$this->sToken.'.data';
} }
protected function GetNewToken() protected function GetNewToken()

View File

@@ -228,7 +228,7 @@ class privUITransactionFile
*/ */
public static function GetNewTransactionId() public static function GetNewTransactionId()
{ {
if (!is_dir(utils::GetDataPath().'transactions')) if (!is_dir(APPROOT.'data/transactions'))
{ {
if (!is_writable(APPROOT.'data')) if (!is_writable(APPROOT.'data'))
{ {
@@ -236,22 +236,22 @@ class privUITransactionFile
} }
// condition avoids race condition N°2345 // condition avoids race condition N°2345
// See https://github.com/kalessil/phpinspectionsea/blob/master/docs/probable-bugs.md#mkdir-race-condition // See https://github.com/kalessil/phpinspectionsea/blob/master/docs/probable-bugs.md#mkdir-race-condition
if (!mkdir($concurrentDirectory = utils::GetDataPath().'transactions') && !is_dir($concurrentDirectory)) if (!mkdir($concurrentDirectory = APPROOT.'data/transactions') && !is_dir($concurrentDirectory))
{ {
throw new Exception('Failed to create the directory "'.utils::GetDataPath().'transactions". Ajust the rights on the parent directory or let an administrator create the transactions directory and give the web sever enough rights to write into it.'); throw new Exception('Failed to create the directory "'.APPROOT.'data/transactions". Ajust the rights on the parent directory or let an administrator create the transactions directory and give the web sever enough rights to write into it.');
} }
} }
if (!is_writable(utils::GetDataPath().'transactions')) if (!is_writable(APPROOT.'data/transactions'))
{ {
throw new Exception('The directory "'.utils::GetDataPath().'transactions" must be writable to the application.'); throw new Exception('The directory "'.APPROOT.'data/transactions" must be writable to the application.');
} }
$iCurrentUserId = static::GetCurrentUserId(); $iCurrentUserId = static::GetCurrentUserId();
self::CleanupOldTransactions(); self::CleanupOldTransactions();
$sTransactionIdFullPath = tempnam(utils::GetDataPath().'transactions', static::GetUserPrefix()); $sTransactionIdFullPath = tempnam(APPROOT.'data/transactions', static::GetUserPrefix());
file_put_contents($sTransactionIdFullPath, $iCurrentUserId, LOCK_EX); file_put_contents($sTransactionIdFullPath, $iCurrentUserId, LOCK_EX);
$sTransactionIdFileName = basename($sTransactionIdFullPath); $sTransactionIdFileName = basename($sTransactionIdFullPath);
@@ -274,8 +274,8 @@ class privUITransactionFile
*/ */
public static function IsTransactionValid($id, $bRemoveTransaction = true) public static function IsTransactionValid($id, $bRemoveTransaction = true)
{ {
// Constraint the transaction file within utils::GetDataPath().'transactions' // Constraint the transaction file within APPROOT.'data/transactions'
$sTransactionDir = realpath(utils::GetDataPath().'transactions'); $sTransactionDir = realpath(APPROOT.'data/transactions');
$sFilepath = utils::RealPath($sTransactionDir.'/'.$id, $sTransactionDir); $sFilepath = utils::RealPath($sTransactionDir.'/'.$id, $sTransactionDir);
if (($sFilepath === false) || (strlen($sTransactionDir) == strlen($sFilepath))) if (($sFilepath === false) || (strlen($sTransactionDir) == strlen($sFilepath)))
{ {
@@ -348,7 +348,7 @@ class privUITransactionFile
clearstatcache(); clearstatcache();
$iLimit = time() - 24*3600; $iLimit = time() - 24*3600;
$sPattern = $sTransactionDir ? "$sTransactionDir/*" : utils::GetDataPath().'transactions/*'; $sPattern = $sTransactionDir ? "$sTransactionDir/*" : APPROOT.'data/transactions/*';
$aTransactions = glob($sPattern); $aTransactions = glob($sPattern);
foreach($aTransactions as $sFileName) foreach($aTransactions as $sFileName)
{ {
@@ -368,7 +368,7 @@ class privUITransactionFile
{ {
clearstatcache(); clearstatcache();
$aResult = array(); $aResult = array();
$aTransactions = glob(utils::GetDataPath().'transactions/'.self::GetUserPrefix().'*'); $aTransactions = glob(APPROOT.'data/transactions/'.self::GetUserPrefix().'*');
foreach($aTransactions as $sFileName) foreach($aTransactions as $sFileName)
{ {
$aResult[] = date('Y-m-d H:i:s', filemtime($sFileName)).' - '.basename($sFileName); $aResult[] = date('Y-m-d H:i:s', filemtime($sFileName)).' - '.basename($sFileName);

View File

@@ -11,7 +11,7 @@ define('APPCONF', APPROOT.'conf/');
* *
* @see ITOP_CORE_VERSION to get full iTop core version * @see ITOP_CORE_VERSION to get full iTop core version
*/ */
define('ITOP_DESIGN_LATEST_VERSION', '3.3'); define('ITOP_DESIGN_LATEST_VERSION', '3.2');
/** /**
* Constant containing the iTop core version, whatever application was built * Constant containing the iTop core version, whatever application was built
@@ -23,7 +23,7 @@ define('ITOP_DESIGN_LATEST_VERSION', '3.3');
* @used-by utils::GetItopVersionWikiSyntax() * @used-by utils::GetItopVersionWikiSyntax()
* @used-by iTopModulesPhpVersionIntegrationTest * @used-by iTopModulesPhpVersionIntegrationTest
*/ */
define('ITOP_CORE_VERSION', '3.3.0'); define('ITOP_CORE_VERSION', '3.2.0');
/** /**
* @var string * @var string

View File

@@ -566,7 +566,6 @@ class ActionEmail extends ActionNotification
$oLog->Set('trigger_id', $oTrigger->GetKey()); $oLog->Set('trigger_id', $oTrigger->GetKey());
$oLog->Set('action_id', $this->GetKey()); $oLog->Set('action_id', $this->GetKey());
$oLog->Set('object_id', $aContextArgs['this->object()']->GetKey()); $oLog->Set('object_id', $aContextArgs['this->object()']->GetKey());
$oLog->Set('object_class', get_class($aContextArgs['this->object()']));
// Must be inserted now so that it gets a valid id that will make the link // Must be inserted now so that it gets a valid id that will make the link
// between an eventual asynchronous task (queued) and the log // between an eventual asynchronous task (queued) and the log
$oLog->DBInsertNoReload(); $oLog->DBInsertNoReload();

View File

@@ -474,14 +474,14 @@ abstract class BulkExport
*/ */
protected function MakeTmpFile($sExtension) protected function MakeTmpFile($sExtension)
{ {
if(!is_dir(utils::GetDataPath()."bulk_export")) if(!is_dir(APPROOT."data/bulk_export"))
{ {
@mkdir(utils::GetDataPath()."bulk_export", 0777, true /* recursive */); @mkdir(APPROOT."data/bulk_export", 0777, true /* recursive */);
clearstatcache(); clearstatcache();
} }
if (!is_writable(utils::GetDataPath()."bulk_export")) if (!is_writable(APPROOT."data/bulk_export"))
{ {
throw new Exception('Data directory "'.utils::GetDataPath().'bulk_export" could not be written.'); throw new Exception('Data directory "'.APPROOT.'data/bulk_export" could not be written.');
} }
$iNum = rand(); $iNum = rand();
@@ -489,7 +489,7 @@ abstract class BulkExport
{ {
$iNum++; $iNum++;
$sToken = sprintf("%08x", $iNum); $sToken = sprintf("%08x", $iNum);
$sFileName = utils::GetDataPath()."bulk_export/$sToken.".$sExtension; $sFileName = APPROOT."data/bulk_export/$sToken.".$sExtension;
$hFile = @fopen($sFileName, 'x'); $hFile = @fopen($sFileName, 'x');
} }
while($hFile === false); while($hFile === false);

View File

@@ -29,7 +29,7 @@ define('ITOP_APPLICATION_SHORT', 'iTop');
* *
* @see ITOP_CORE_VERSION to get iTop core version * @see ITOP_CORE_VERSION to get iTop core version
*/ */
define('ITOP_VERSION', '3.3.0-dev'); define('ITOP_VERSION', '3.2.0-dev');
define('ITOP_VERSION_NAME', 'Fullmoon'); define('ITOP_VERSION_NAME', 'Fullmoon');
define('ITOP_REVISION', 'svn'); define('ITOP_REVISION', 'svn');
@@ -71,7 +71,7 @@ define('DEFAULT_MAX_DISPLAY_LIMIT', 30);
define('DEFAULT_STANDARD_RELOAD_INTERVAL', 5 * 60); define('DEFAULT_STANDARD_RELOAD_INTERVAL', 5 * 60);
define('DEFAULT_FAST_RELOAD_INTERVAL', 1 * 60); define('DEFAULT_FAST_RELOAD_INTERVAL', 1 * 60);
define('DEFAULT_SECURE_CONNECTION_REQUIRED', false); define('DEFAULT_SECURE_CONNECTION_REQUIRED', false);
define('DEFAULT_ALLOWED_LOGIN_TYPES', 'form|external|basic'); define('DEFAULT_ALLOWED_LOGIN_TYPES', 'form|external|basic|token');
define('DEFAULT_EXT_AUTH_VARIABLE', '$_SERVER[\'REMOTE_USER\']'); define('DEFAULT_EXT_AUTH_VARIABLE', '$_SERVER[\'REMOTE_USER\']');
define('DEFAULT_ENCRYPTION_KEY', '@iT0pEncr1pti0n!'); // We'll use a random generated key later (if possible) define('DEFAULT_ENCRYPTION_KEY', '@iT0pEncr1pti0n!'); // We'll use a random generated key later (if possible)
define('DEFAULT_ENCRYPTION_LIB', 'Mcrypt'); // We'll define the best encryption available later define('DEFAULT_ENCRYPTION_LIB', 'Mcrypt'); // We'll define the best encryption available later

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="lnkActionNotificationToContact" _delta="define"> <class id="lnkActionNotificationToContact" _delta="define">
<parent>cmdbAbstractObject</parent> <parent>cmdbAbstractObject</parent>
@@ -99,7 +99,7 @@
</presentation> </presentation>
<methods/> <methods/>
</class> </class>
<class id="ActionNewsroom" _delta="define"> <class id="ActionNewsroom" _delta="define">
<php_parent> <php_parent>
<name>ActionNotification</name> <name>ActionNotification</name>
</php_parent> </php_parent>
@@ -148,7 +148,7 @@
<display_max_height>96</display_max_height> <display_max_height>96</display_max_height>
<storage_max_width>256</storage_max_width> <storage_max_width>256</storage_max_width>
<storage_max_height>256</storage_max_height> <storage_max_height>256</storage_max_height>
<default_image/> <default_image />
</field> </field>
<field id="priority" xsi:type="AttributeEnum"> <field id="priority" xsi:type="AttributeEnum">
<sql>priority</sql> <sql>priority</sql>
@@ -183,7 +183,7 @@
</field> </field>
<field id="url" xsi:type="AttributeString"> <field id="url" xsi:type="AttributeString">
<sql>url</sql> <sql>url</sql>
<default_value>$this-&gt;url()$</default_value> <default_value>$this->url()$</default_value>
<is_null_allowed>false</is_null_allowed> <is_null_allowed>false</is_null_allowed>
</field> </field>
</fields> </fields>
@@ -360,13 +360,7 @@
} else { } else {
foreach ($aRecipientsIds as $iRecipientId) { foreach ($aRecipientsIds as $iRecipientId) {
$oEvent = Combodo\iTop\Service\Notification\Event\EventNotificationNewsroomService::MakeEventFromAction($this, $iRecipientId, $oTrigger->GetKey(), $sMessage, $sTitle, $sUrl, $iObjectId, $sObjectClass); $oEvent = Combodo\iTop\Service\Notification\Event\EventNotificationNewsroomService::MakeEventFromAction($this, $iRecipientId, $oTrigger->GetKey(), $sMessage, $sTitle, $sUrl, $iObjectId, $sObjectClass);
try {
$oEvent->DBInsertNoReload(); $oEvent->DBInsertNoReload();
} catch(CoreCannotSaveObjectException $e) {
ExceptionLog::LogException($e);
$oEvent = Combodo\iTop\Service\Notification\Event\EventNotificationNewsroomService::MakeEventFromAction($this, $iRecipientId, $oTrigger->GetKey(), Dict::Format('Core:EventNotificationNewsroom:ErrorOnDBInsert'), Dict::Format('Core:EventNotificationNewsroom:ErrorNotificationNotSent'), $sUrl, $iObjectId, $sObjectClass);
$oEvent->DBInsertNoReload();
}
} }
} }
@@ -375,7 +369,7 @@
]]></code> ]]></code>
</method> </method>
<method id="GetAsynchronousGlobalSetting"> <method id="GetAsynchronousGlobalSetting">
<comment/> <comment></comment>
<static>true</static> <static>true</static>
<access>public</access> <access>public</access>
<code><![CDATA[ <code><![CDATA[
@@ -387,7 +381,7 @@
</method> </method>
</methods> </methods>
</class> </class>
<class id="EventNotificationNewsroom" _delta="define"> <class id="EventNotificationNewsroom" _delta="define">
<php_parent> <php_parent>
<name>EventNotification</name> <name>EventNotification</name>
</php_parent> </php_parent>
@@ -411,7 +405,7 @@
</reconciliation> </reconciliation>
<order> <order>
<columns> <columns>
<column id="date" ascending="false"/> <column id="date" ascending="false" />
</columns> </columns>
</order> </order>
</properties> </properties>
@@ -425,7 +419,7 @@
<sql>icon</sql> <sql>icon</sql>
<default_value/> <default_value/>
<is_null_allowed>true</is_null_allowed> <is_null_allowed>true</is_null_allowed>
<default_image/> <default_image />
</field> </field>
<field id="priority" xsi:type="AttributeEnum"> <field id="priority" xsi:type="AttributeEnum">
<sql>priority</sql> <sql>priority</sql>
@@ -507,14 +501,14 @@
</items> </items>
</details> </details>
<summary> <summary>
<items> <items>
<item id="date"> <item id="date">
<rank>10</rank> <rank>10</rank>
</item> </item>
<item id="message"> <item id="message">
<rank>20</rank> <rank>20</rank>
</item> </item>
</items> </items>
</summary> </summary>
<list> <list>
<items> <items>

View File

@@ -1552,13 +1552,13 @@ abstract class DBSearch
} }
$sLogFile = 'queries.latest'; $sLogFile = 'queries.latest';
file_put_contents(utils::GetDataPath().$sLogFile.'.html', $sHtml); file_put_contents(APPROOT.'data/'.$sLogFile.'.html', $sHtml);
$sLog = "<?php\n\$aQueriesLog = ".var_export(self::$m_aQueriesLog, true).";"; $sLog = "<?php\n\$aQueriesLog = ".var_export(self::$m_aQueriesLog, true).";";
file_put_contents(utils::GetDataPath().$sLogFile.'.log', $sLog); file_put_contents(APPROOT.'data/'.$sLogFile.'.log', $sLog);
// Cumulate the queries // Cumulate the queries
$sAllQueries = utils::GetDataPath().'queries.log'; $sAllQueries = APPROOT.'data/queries.log';
if (file_exists($sAllQueries)) if (file_exists($sAllQueries))
{ {
// Merge the new queries into the existing log // Merge the new queries into the existing log

View File

@@ -131,7 +131,7 @@ class EventNotification extends Event
"db_finalclass_field" => "", "db_finalclass_field" => "",
"order_by_default" => array('date' => false), "order_by_default" => array('date' => false),
'indexes' => array( 'indexes' => array(
array( 'object_class', 'object_id'), array('object_id'),
) )
); );
MetaModel::Init_Params($aParams); MetaModel::Init_Params($aParams);
@@ -139,11 +139,9 @@ class EventNotification extends Event
MetaModel::Init_AddAttribute(new AttributeExternalKey("trigger_id", array("targetclass"=>"Trigger", "jointype"=> "", "allowed_values"=>null, "sql"=>"trigger_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array()))); MetaModel::Init_AddAttribute(new AttributeExternalKey("trigger_id", array("targetclass"=>"Trigger", "jointype"=> "", "allowed_values"=>null, "sql"=>"trigger_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeExternalKey("action_id", array("targetclass" => "Action", "jointype" => "", "allowed_values" => null, "sql" => "action_id", "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array()))); MetaModel::Init_AddAttribute(new AttributeExternalKey("action_id", array("targetclass" => "Action", "jointype" => "", "allowed_values" => null, "sql" => "action_id", "is_null_allowed" => false, "on_target_delete" => DEL_AUTO, "depends_on" => array())));
MetaModel::Init_AddAttribute(new AttributeInteger("object_id", array("allowed_values" => null, "sql" => "object_id", "default_value" => 0, "is_null_allowed" => false, "depends_on" => array()))); MetaModel::Init_AddAttribute(new AttributeInteger("object_id", array("allowed_values" => null, "sql" => "object_id", "default_value" => 0, "is_null_allowed" => false, "depends_on" => array())));
//@since 3.2.0
MetaModel::Init_AddAttribute(new AttributeClass("object_class", array("class_category"=>"", "more_values"=>"", "sql"=>"object_class", "default_value"=>null, "is_null_allowed"=>true /*to avoid setting AbstractResource as default in database*/, "depends_on"=>array())));
// Display lists // Display lists
MetaModel::Init_SetZListItems('details', array('date', 'message', 'userinfo', 'trigger_id', 'action_id', 'object_class', 'object_id')); // Attributes to be displayed for the complete details MetaModel::Init_SetZListItems('details', array('date', 'message', 'userinfo', 'trigger_id', 'action_id', 'object_id')); // Attributes to be displayed for the complete details
MetaModel::Init_SetZListItems('list', array('date', 'message')); // Attributes to be displayed for a list MetaModel::Init_SetZListItems('list', array('date', 'message')); // Attributes to be displayed for a list
// Search criteria // Search criteria
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form // MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
@@ -178,7 +176,7 @@ class EventNotificationEmail extends EventNotification
MetaModel::Init_AddAttribute(new AttributeTable("attachments", array("allowed_values"=>null, "sql"=>"attachments", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array()))); MetaModel::Init_AddAttribute(new AttributeTable("attachments", array("allowed_values"=>null, "sql"=>"attachments", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
// Display lists // Display lists
MetaModel::Init_SetZListItems('details', array('date', 'userinfo', 'message', 'trigger_id', 'action_id', 'object_class', 'object_id', 'to', 'cc', 'bcc', 'from', 'subject', 'body', 'attachments')); // Attributes to be displayed for the complete details MetaModel::Init_SetZListItems('details', array('date', 'userinfo', 'message', 'trigger_id', 'action_id', 'object_id', 'to', 'cc', 'bcc', 'from', 'subject', 'body', 'attachments')); // Attributes to be displayed for the complete details
MetaModel::Init_SetZListItems('list', array('date', 'message', 'to', 'subject', 'attachments')); // Attributes to be displayed for a list MetaModel::Init_SetZListItems('list', array('date', 'message', 'to', 'subject', 'attachments')); // Attributes to be displayed for a list
// Search criteria // Search criteria

View File

@@ -140,36 +140,21 @@ class InlineImage extends DBObject
*/ */
public function SetDefaultOrgId() public function SetDefaultOrgId()
{ {
// First check that the organization CAN be fetched from the target class // If the item class has no organization attribute, then no need to set the organization id
// if (is_null(UserRights::GetOwnerOrganizationAttCode( $this->Get('item_class')))) {
$sClass = $this->Get('item_class'); // No need for silos
$aCallSpec = array($sClass, 'MapContextParam'); return;
if (is_callable($aCallSpec)) }
{ // get organization attribute code for the person class
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter $sOrgAttrCodeForPerson = UserRights::GetOwnerOrganizationAttCode('Person');
if (MetaModel::IsValidAttCode($sClass, $sAttCode)) if (is_null($sOrgAttrCodeForPerson)) {
{ // No need for silos
// Second: check that the organization CAN be fetched from the current user return;
// }
if (MetaModel::IsValidClass('Person'))
{ $oCurrentPerson = MetaModel::GetObject('Person', UserRights::GetContactId(), false);
$aCallSpec = array($sClass, 'MapContextParam'); if ($oCurrentPerson) {
if (is_callable($aCallSpec)) $this->Set('item_org_id', $oCurrentPerson->Get($sOrgAttrCodeForPerson));
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (MetaModel::IsValidAttCode($sClass, $sAttCode))
{
// OK - try it
//
$oCurrentPerson = MetaModel::GetObject('Person', UserRights::GetContactId(), false);
if ($oCurrentPerson)
{
$this->Set('item_org_id', $oCurrentPerson->Get($sAttCode));
}
}
}
}
}
} }
} }

View File

@@ -500,17 +500,17 @@ EOF
if (file_exists($sDotExecutable)) if (file_exists($sDotExecutable))
{ {
// create the file with Graphviz // create the file with Graphviz
if (!is_dir(utils::GetDataPath())) if (!is_dir(APPROOT."data"))
{ {
@mkdir(utils::GetDataPath()); @mkdir(APPROOT."data");
} }
if (!is_dir(utils::GetDataPath()."tmp")) if (!is_dir(APPROOT."data/tmp"))
{ {
@mkdir(utils::GetDataPath()."tmp"); @mkdir(APPROOT."data/tmp");
} }
$sImageFilePath = tempnam(utils::GetDataPath()."tmp", 'png-'); $sImageFilePath = tempnam(APPROOT."data/tmp", 'png-');
$sDotDescription = $this->GetDotDescription(); $sDotDescription = $this->GetDotDescription();
$sDotFilePath = tempnam(utils::GetDataPath()."tmp", 'dot-'); $sDotFilePath = tempnam(APPROOT."data/tmp", 'dot-');
$rFile = @fopen($sDotFilePath, "w"); $rFile = @fopen($sDotFilePath, "w");
@fwrite($rFile, $sDotDescription); @fwrite($rFile, $sDotDescription);
@@ -556,17 +556,17 @@ EOF
if (file_exists($sDotExecutable)) if (file_exists($sDotExecutable))
{ {
// create the file with Graphviz // create the file with Graphviz
if (!is_dir(utils::GetDataPath())) if (!is_dir(APPROOT."data"))
{ {
@mkdir(utils::GetDataPath()); @mkdir(APPROOT."data");
} }
if (!is_dir(utils::GetDataPath()."tmp")) if (!is_dir(APPROOT."data/tmp"))
{ {
@mkdir(utils::GetDataPath()."tmp"); @mkdir(APPROOT."data/tmp");
} }
$sXdotFilePath = tempnam(utils::GetDataPath()."tmp", 'xdot-'); $sXdotFilePath = tempnam(APPROOT."data/tmp", 'xdot-');
$sDotDescription = $this->GetDotDescription(true); // true => don't put (localized) labels in the file, since it makes it harder to parse $sDotDescription = $this->GetDotDescription(true); // true => don't put (localized) labels in the file, since it makes it harder to parse
$sDotFilePath = tempnam(utils::GetDataPath()."tmp", 'dot-'); $sDotFilePath = tempnam(APPROOT."data/tmp", 'dot-');
$rFile = @fopen($sDotFilePath, "w"); $rFile = @fopen($sDotFilePath, "w");
@fwrite($rFile, $sDotDescription); @fwrite($rFile, $sDotDescription);

View File

@@ -2033,6 +2033,36 @@ class UserRights
{ {
return self::$m_sLastLoginStatus; return self::$m_sLastLoginStatus;
} }
/**
* @param string $sClass
* @return string|null Find out which attribute is corresponding the dimension 'owner org'
* returns null if no such attribute has been found (no filtering should occur)
* @since 3.3.0
*/
public static function GetOwnerOrganizationAttCode($sClass)
{
$sAttCode = null;
$aCallSpec = array($sClass, 'MapContextParam');
if (($sClass == 'Organization') || is_subclass_of($sClass, 'Organization')) {
$sAttCode = 'id';
}
elseif (is_callable($aCallSpec)) {
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (!MetaModel::IsValidAttCode($sClass, $sAttCode)) {
// Skip silently. The data model checker will tell you something about this...
$sAttCode = null;
}
}
elseif(MetaModel::IsValidAttCode($sClass, 'org_id')) {
$sAttCode = 'org_id';
}
return $sAttCode;
}
} }
/** /**

5
css/c3.min.css vendored Normal file
View File

@@ -0,0 +1,5 @@
/*
* @deprecated 3.2.0 N°5621 Moved to NPM
*/
.c3 svg{font:10px sans-serif;-webkit-tap-highlight-color:transparent}.c3 line,.c3 path{fill:none;stroke:#000}.c3 text{-webkit-user-select:none;-moz-user-select:none;user-select:none}.c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}.c3-chart-arc path{stroke:#fff}.c3-chart-arc text{fill:#fff;font-size:13px}.c3-grid line{stroke:#aaa}.c3-grid text{fill:#aaa}.c3-xgrid,.c3-ygrid{stroke-dasharray:3 3}.c3-text.c3-empty{fill:gray;font-size:2em}.c3-line{stroke-width:1px}.c3-circle._expanded_{stroke-width:1px;stroke:#fff}.c3-selected-circle{fill:#fff;stroke-width:2px}.c3-bar{stroke-width:0}.c3-bar._expanded_{fill-opacity:.75}.c3-target.c3-focused{opacity:1}.c3-target.c3-focused path.c3-line,.c3-target.c3-focused path.c3-step{stroke-width:2px}.c3-target.c3-defocused{opacity:.3!important}.c3-region{fill:#4682b4;fill-opacity:.1}.c3-brush .extent{fill-opacity:.1}.c3-legend-item{font-size:12px}.c3-legend-item-hidden{opacity:.15}.c3-legend-background{opacity:.75;fill:#fff;stroke:#d3d3d3;stroke-width:1}.c3-title{font:14px sans-serif}.c3-tooltip-container{z-index:10}.c3-tooltip{border-collapse:collapse;border-spacing:0;background-color:#fff;empty-cells:show;-webkit-box-shadow:7px 7px 12px -9px #777;-moz-box-shadow:7px 7px 12px -9px #777;box-shadow:7px 7px 12px -9px #777;opacity:.9}.c3-tooltip tr{border:1px solid #CCC}.c3-tooltip th{background-color:#aaa;font-size:14px;padding:2px 5px;text-align:left;color:#FFF}.c3-tooltip td{font-size:13px;padding:3px 6px;background-color:#fff;border-left:1px dotted #999}.c3-tooltip td>span{display:inline-block;width:10px;height:10px;margin-right:6px}.c3-tooltip td.value{text-align:right}.c3-area{stroke-width:0;opacity:.2}.c3-chart-arcs-title{dominant-baseline:middle;font-size:1.3em}.c3-chart-arcs .c3-chart-arcs-background{fill:#e0e0e0;stroke:none}.c3-chart-arcs .c3-chart-arcs-gauge-unit{fill:#000;font-size:16px}.c3-chart-arcs .c3-chart-arcs-gauge-max,.c3-chart-arcs .c3-chart-arcs-gauge-min{fill:#777}.c3-chart-arc .c3-gauge-value{fill:#000}

View File

@@ -5,16 +5,16 @@
/* Semantic palettes */ /* Semantic palettes */
/* - Primary color of the brand */ /* - Primary color of the brand */
$common-color-primary-100: $common-color-blue-100 !default; $common-color-primary-100: $common-color-orange-100 !default;
$common-color-primary-200: $common-color-blue-200 !default; $common-color-primary-200: $common-color-orange-200 !default;
$common-color-primary-300: $common-color-blue-300 !default; $common-color-primary-300: $common-color-orange-300 !default;
$common-color-primary-400: $common-color-blue-400 !default; $common-color-primary-400: $common-color-orange-400 !default;
$common-color-primary-500: $common-color-blue-500 !default; $common-color-primary-500: $common-color-orange-500 !default;
$common-color-primary-600: $common-color-blue-600 !default; $common-color-primary-600: $common-color-orange-600 !default;
$common-color-primary-700: $common-color-blue-700 !default; $common-color-primary-700: $common-color-orange-700 !default;
$common-color-primary-800: $common-color-blue-800 !default; $common-color-primary-800: $common-color-orange-800 !default;
$common-color-primary-900: $common-color-blue-900 !default; $common-color-primary-900: $common-color-orange-900 !default;
$common-color-primary-950: $common-color-blue-950 !default; $common-color-primary-950: $common-color-orange-950 !default;
/* - Secondary color of the brand */ /* - Secondary color of the brand */
$common-color-secondary-100: $common-color-grey-100 !default; $common-color-secondary-100: $common-color-grey-100 !default;

146
css/jquery.contextMenu.css Executable file
View File

@@ -0,0 +1,146 @@
/**
* @deprecated 3.2.0 N°5621 Moved to NPM
*/
/*!
* jQuery contextMenu - Plugin for simple contextMenu handling
*
* Version: git-master
*
* Authors: Rodney Rehm, Addy Osmani (patches for FF)
* Web: http://medialize.github.com/jQuery-contextMenu/
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
* GPL v3 http://opensource.org/licenses/GPL-3.0
*
*/
.context-menu-list {
margin:0;
padding:0;
min-width: 120px;
max-width: 250px;
display: inline-block;
position: absolute;
list-style-type: none;
border: 1px solid #DDD;
background: #EEE;
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
-ms-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
-o-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
}
.context-menu-item {
padding: 2px 2px 2px 24px;
background-color: #EEE;
position: relative;
-webkit-user-select: none;
-moz-user-select: -moz-none;
-ms-user-select: none;
user-select: none;
}
.context-menu-separator {
padding-bottom:0;
border-bottom: 1px solid #DDD;
}
.context-menu-item > label > input,
.context-menu-item > label > textarea {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.context-menu-item.hover {
cursor: pointer;
background-color: #39F;
}
.context-menu-item.disabled {
color: #666;
}
.context-menu-input.hover,
.context-menu-item.disabled.hover {
cursor: default;
background-color: #EEE;
}
.context-menu-submenu:after {
content: ">";
color: #666;
position: absolute;
top: 0;
right: 3px;
z-index: 1;
}
/* icons
#protip:
In case you want to use sprites for icons (which I would suggest you do) have a look at
http://css-tricks.com/13224-pseudo-spriting/ to get an idea of how to implement
.context-menu-item.icon:before {}
*/
.context-menu-item.icon { min-height: 18px; background-repeat: no-repeat; background-position: 4px 2px; }
.context-menu-item.icon-edit { background-image: url(images/page_white_edit.png); }
.context-menu-item.icon-cut { background-image: url(images/cut.png); }
.context-menu-item.icon-copy { background-image: url(images/page_white_copy.png); }
.context-menu-item.icon-paste { background-image: url(images/page_white_paste.png); }
.context-menu-item.icon-delete { background-image: url(images/page_white_delete.png); }
.context-menu-item.icon-add { background-image: url(images/page_white_add.png); }
.context-menu-item.icon-quit { background-image: url(images/door.png); }
/* vertically align inside labels */
.context-menu-input > label > * { vertical-align: top; }
/* position checkboxes and radios as icons */
.context-menu-input > label > input[type="checkbox"],
.context-menu-input > label > input[type="radio"] {
margin-left: -17px;
}
.context-menu-input > label > span {
margin-left: 5px;
}
.context-menu-input > label,
.context-menu-input > label > input[type="text"],
.context-menu-input > label > textarea,
.context-menu-input > label > select {
display: block;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
}
.context-menu-input > label > textarea {
height: 100px;
}
.context-menu-item > .context-menu-list {
display: none;
/* re-positioned by js */
right: -5px;
top: 5px;
}
.context-menu-item.hover > .context-menu-list {
display: block;
}
.context-menu-accesskey {
text-decoration: underline;
}

378
css/magnific-popup.css Normal file
View File

@@ -0,0 +1,378 @@
/*
* @deprecated 3.2.0 N°5621 Moved to NPM
*/
/* Magnific Popup CSS */
.mfp-bg {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1042;
overflow: hidden;
position: fixed;
background: #0b0b0b;
opacity: 0.8;
filter: alpha(opacity=80); }
.mfp-wrap {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1043;
position: fixed;
outline: none !important;
-webkit-backface-visibility: hidden; }
.mfp-container {
text-align: center;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
padding: 0 8px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box; }
.mfp-container:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle; }
.mfp-align-top .mfp-container:before {
display: none; }
.mfp-content {
position: relative;
display: inline-block;
vertical-align: middle;
margin: 0 auto;
text-align: left;
z-index: 1045; }
.mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content {
width: 100%;
cursor: auto; }
.mfp-ajax-cur {
cursor: progress; }
.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
cursor: -moz-zoom-out;
cursor: -webkit-zoom-out;
cursor: zoom-out; }
.mfp-zoom {
cursor: pointer;
cursor: -webkit-zoom-in;
cursor: -moz-zoom-in;
cursor: zoom-in; }
.mfp-auto-cursor .mfp-content {
cursor: auto; }
.mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none; }
.mfp-loading.mfp-figure {
display: none; }
.mfp-hide {
display: none !important; }
.mfp-preloader {
color: #CCC;
position: absolute;
top: 50%;
width: auto;
text-align: center;
margin-top: -0.8em;
left: 8px;
right: 8px;
z-index: 1044; }
.mfp-preloader a {
color: #CCC; }
.mfp-preloader a:hover {
color: #FFF; }
.mfp-s-ready .mfp-preloader {
display: none; }
.mfp-s-error .mfp-content {
display: none; }
button.mfp-close, button.mfp-arrow {
overflow: visible;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
display: block;
outline: none;
padding: 0;
z-index: 1046;
-webkit-box-shadow: none;
box-shadow: none; }
button::-moz-focus-inner {
padding: 0;
border: 0; }
.mfp-close {
width: 44px;
height: 44px;
line-height: 44px;
position: absolute;
right: 0;
top: 0;
text-decoration: none;
text-align: center;
opacity: 0.65;
filter: alpha(opacity=65);
padding: 0 0 18px 10px;
color: #FFF;
font-style: normal;
font-size: 28px;
font-family: Arial, Baskerville, monospace; }
.mfp-close:hover, .mfp-close:focus {
opacity: 1;
filter: alpha(opacity=100); }
.mfp-close:active {
top: 1px; }
.mfp-close-btn-in .mfp-close {
color: #333; }
.mfp-image-holder .mfp-close, .mfp-iframe-holder .mfp-close {
color: #FFF;
right: -6px;
text-align: right;
padding-right: 6px;
width: 100%; }
.mfp-counter {
position: absolute;
top: 0;
right: 0;
color: #CCC;
font-size: 12px;
line-height: 18px;
white-space: nowrap; }
.mfp-arrow {
position: absolute;
opacity: 0.65;
filter: alpha(opacity=65);
margin: 0;
top: 50%;
margin-top: -55px;
padding: 0;
width: 90px;
height: 110px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
.mfp-arrow:active {
margin-top: -54px; }
.mfp-arrow:hover, .mfp-arrow:focus {
opacity: 1;
filter: alpha(opacity=100); }
.mfp-arrow:before, .mfp-arrow:after, .mfp-arrow .mfp-b, .mfp-arrow .mfp-a {
content: '';
display: block;
width: 0;
height: 0;
position: absolute;
left: 0;
top: 0;
margin-top: 35px;
margin-left: 35px;
border: medium inset transparent; }
.mfp-arrow:after, .mfp-arrow .mfp-a {
border-top-width: 13px;
border-bottom-width: 13px;
top: 8px; }
.mfp-arrow:before, .mfp-arrow .mfp-b {
border-top-width: 21px;
border-bottom-width: 21px;
opacity: 0.7; }
.mfp-arrow-left {
left: 0; }
.mfp-arrow-left:after, .mfp-arrow-left .mfp-a {
border-right: 17px solid #FFF;
margin-left: 31px; }
.mfp-arrow-left:before, .mfp-arrow-left .mfp-b {
margin-left: 25px;
border-right: 27px solid #3F3F3F; }
.mfp-arrow-right {
right: 0; }
.mfp-arrow-right:after, .mfp-arrow-right .mfp-a {
border-left: 17px solid #FFF;
margin-left: 39px; }
.mfp-arrow-right:before, .mfp-arrow-right .mfp-b {
border-left: 27px solid #3F3F3F; }
.mfp-iframe-holder {
padding-top: 40px;
padding-bottom: 40px; }
.mfp-iframe-holder .mfp-content {
line-height: 0;
width: 100%;
max-width: 900px; }
.mfp-iframe-holder .mfp-close {
top: -40px; }
.mfp-iframe-scaler {
width: 100%;
height: 0;
overflow: hidden;
padding-top: 56.25%; }
.mfp-iframe-scaler iframe {
position: absolute;
display: block;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
background: #000; }
/* Main image in popup */
img.mfp-img {
width: auto;
max-width: 100%;
height: auto;
display: block;
line-height: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 40px 0 40px;
margin: 0 auto; }
/* The shadow behind the image */
.mfp-figure {
line-height: 0; }
.mfp-figure:after {
content: '';
position: absolute;
left: 0;
top: 40px;
bottom: 40px;
display: block;
right: 0;
width: auto;
height: auto;
z-index: -1;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
background: #444; }
.mfp-figure small {
color: #BDBDBD;
display: block;
font-size: 12px;
line-height: 14px; }
.mfp-figure figure {
margin: 0; }
.mfp-bottom-bar {
margin-top: -36px;
position: absolute;
top: 100%;
left: 0;
width: 100%;
cursor: auto; }
.mfp-title {
text-align: left;
line-height: 18px;
color: #F3F3F3;
word-wrap: break-word;
padding-right: 36px; }
.mfp-image-holder .mfp-content {
max-width: 100%; }
.mfp-gallery .mfp-image-holder .mfp-figure {
cursor: pointer; }
@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
/**
* Remove all paddings around the image on small screen
*/
.mfp-img-mobile .mfp-image-holder {
padding-left: 0;
padding-right: 0; }
.mfp-img-mobile img.mfp-img {
padding: 0; }
.mfp-img-mobile .mfp-figure:after {
top: 0;
bottom: 0; }
.mfp-img-mobile .mfp-figure small {
display: inline;
margin-left: 5px; }
.mfp-img-mobile .mfp-bottom-bar {
background: rgba(0, 0, 0, 0.6);
bottom: 0;
margin: 0;
top: auto;
padding: 3px 5px;
position: fixed;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box; }
.mfp-img-mobile .mfp-bottom-bar:empty {
padding: 0; }
.mfp-img-mobile .mfp-counter {
right: 5px;
top: 3px; }
.mfp-img-mobile .mfp-close {
top: 0;
right: 0;
width: 35px;
height: 35px;
line-height: 35px;
background: rgba(0, 0, 0, 0.6);
position: fixed;
text-align: center;
padding: 0; }
}
@media all and (max-width: 900px) {
.mfp-arrow {
-webkit-transform: scale(0.75);
transform: scale(0.75); }
.mfp-arrow-left {
-webkit-transform-origin: 0;
transform-origin: 0; }
.mfp-arrow-right {
-webkit-transform-origin: 100%;
transform-origin: 100%; }
.mfp-container {
padding-left: 6px;
padding-right: 6px; }
}
.mfp-ie7 .mfp-img {
padding: 0; }
.mfp-ie7 .mfp-bottom-bar {
width: 600px;
left: 50%;
margin-left: -300px;
margin-top: 5px;
padding-bottom: 5px; }
.mfp-ie7 .mfp-container {
padding: 0; }
.mfp-ie7 .mfp-content {
padding-top: 44px; }
.mfp-ie7 .mfp-close {
top: 0;
right: 0;
padding-top: 0; }

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<constants> <constants>
</constants> </constants>
<classes> <classes>

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'authent-cas/3.3.0', 'authent-cas/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -27,7 +27,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'authent-external/3.3.0', 'authent-external/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="UserLDAP" _delta="define"> <class id="UserLDAP" _delta="define">
<parent>cmdbAbstractObject</parent> <parent>cmdbAbstractObject</parent>

View File

@@ -37,6 +37,6 @@
Dict::Add('EN US', 'English', 'English', array( Dict::Add('EN US', 'English', 'English', array(
'Class:UserLDAP' => 'LDAP user', 'Class:UserLDAP' => 'LDAP user',
'Class:UserLDAP+' => 'User authentified by LDAP', 'Class:UserLDAP+' => 'User authenticated by LDAP',
'UserLDAP:server' => 'LDAP specifics', 'UserLDAP:server' => 'LDAP specifics',
)); ));

View File

@@ -11,6 +11,6 @@
*/ */
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:UserLDAP' => 'LDAP užívateľ', 'Class:UserLDAP' => 'LDAP užívateľ',
'Class:UserLDAP+' => 'User authentified by LDAP~~', 'Class:UserLDAP+' => 'User authenticated by LDAP~~',
'UserLDAP:server' => 'LDAP specifics~~', 'UserLDAP:server' => 'LDAP specifics~~',
]); ]);

View File

@@ -9,7 +9,7 @@ if (function_exists('ldap_connect'))
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'authent-ldap/3.3.0', 'authent-ldap/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<module_parameters> <module_parameters>
<parameters id="authent-local" _delta="define"> <parameters id="authent-local" _delta="define">
<password_validation.pattern>^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,}$</password_validation.pattern> <password_validation.pattern>^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,}$</password_validation.pattern>

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'authent-local/3.3.0', 'authent-local/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<branding> <branding>
<themes> <themes>
<theme id="darkmoon" _delta="define"> <theme id="darkmoon" _delta="define">

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-backoffice-darkmoon-theme/3.3.0', 'combodo-backoffice-darkmoon-theme/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<branding> <branding>
<themes> <themes>
<theme id="fullmoon-high-contrast" _delta="define"> <theme id="fullmoon-high-contrast" _delta="define">

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-backoffice-fullmoon-high-contrast-theme/3.3.0', 'combodo-backoffice-fullmoon-high-contrast-theme/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<branding> <branding>
<themes> <themes>
<theme id="fullmoon-protanopia-deuteranopia" _delta="define"> <theme id="fullmoon-protanopia-deuteranopia" _delta="define">

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/3.3.0', 'combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<branding> <branding>
<themes> <themes>
<theme id="fullmoon-tritanopia" _delta="define"> <theme id="fullmoon-tritanopia" _delta="define">

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-backoffice-fullmoon-tritanopia-theme/3.3.0', 'combodo-backoffice-fullmoon-tritanopia-theme/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<menus> <menus>
<menu id="DBToolsMenu" xsi:type="WebPageMenuNode" _delta="define"> <menu id="DBToolsMenu" xsi:type="WebPageMenuNode" _delta="define">
<rank>30</rank> <rank>30</rank>

View File

@@ -17,7 +17,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~', 'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~', 'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~', 'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyzuj', 'DBTools:Analyze' => 'Analyzuj',
'DBTools:Base' => 'Base~~', 'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~', 'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~', 'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~', 'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~', 'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~', 'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~', 'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~', 'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -17,7 +17,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~', 'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~', 'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~', 'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyze~~', 'DBTools:Analyze' => 'Analyze~~',
'DBTools:Base' => 'Base~~', 'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~', 'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~', 'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~', 'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~', 'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~', 'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~', 'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~', 'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -59,7 +59,7 @@ Dict::Add('EN US', 'English', 'English', array(
'DBAnalyzer-Integrity-HKInvalid' => 'Broken hierarchical key `%1$s`', 'DBAnalyzer-Integrity-HKInvalid' => 'Broken hierarchical key `%1$s`',
'DBAnalyzer-Fetch-Count-Error' => 'Fetch count error in `%1$s`, %2$d entries fetched / %3$d counted', 'DBAnalyzer-Fetch-Count-Error' => 'Fetch count error in `%1$s`, %2$d entries fetched / %3$d counted',
'DBAnalyzer-Integrity-FinalClass' => 'Field `%2$s`.`%1$s` must have the same value as `%3$s`.`%1$s`', 'DBAnalyzer-Integrity-FinalClass' => 'Field `%2$s`.`%1$s` must have the same value as `%3$s`.`%1$s`',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class', 'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class',
)); ));
// Database Info // Database Info
@@ -72,7 +72,7 @@ Dict::Add('EN US', 'English', 'English', array(
// Lost attachments // Lost attachments
Dict::Add('EN US', 'English', 'English', array( Dict::Add('EN US', 'English', 'English', array(
'DBTools:LostAttachments' => 'Lost attachments', 'DBTools:LostAttachments' => 'Lost attachments',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.', 'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.',
'DBTools:LostAttachments:Button:Analyze' => 'Analyze', 'DBTools:LostAttachments:Button:Analyze' => 'Analyze',
'DBTools:LostAttachments:Button:Restore' => 'Restore', 'DBTools:LostAttachments:Button:Restore' => 'Restore',

View File

@@ -17,7 +17,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~', 'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~', 'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~', 'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyze~~', 'DBTools:Analyze' => 'Analyze~~',
'DBTools:Base' => 'Base~~', 'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~', 'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~', 'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~', 'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~', 'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~', 'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~', 'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~', 'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -18,7 +18,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'DBAnalyzer-Integrity-InvalidValue' => 'Недопустимое значение для %1$s (столбец: `%2$s.%3$s`)', 'DBAnalyzer-Integrity-InvalidValue' => 'Недопустимое значение для %1$s (столбец: `%2$s.%3$s`)',
'DBAnalyzer-Integrity-MissingExtKey' => 'Отсутствует внешний ключ %1$s (столбец: `%2$s.%3$s`)', 'DBAnalyzer-Integrity-MissingExtKey' => 'Отсутствует внешний ключ %1$s (столбец: `%2$s.%3$s`)',
'DBAnalyzer-Integrity-OrphanRecord' => 'Сиротская запись в `%1$s`, она должна иметь свой аналог в таблице `%2$s`', 'DBAnalyzer-Integrity-OrphanRecord' => 'Сиротская запись в `%1$s`, она должна иметь свой аналог в таблице `%2$s`',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~', 'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Некоторые учетные записи пользователей не имеют профилей', 'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Некоторые учетные записи пользователей не имеют профилей',
'DBTools:Analyze' => 'Анализировать', 'DBTools:Analyze' => 'Анализировать',
'DBTools:Base' => 'База', 'DBTools:Base' => 'База',

View File

@@ -17,7 +17,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~', 'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~', 'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~', 'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyze~~', 'DBTools:Analyze' => 'Analyze~~',
'DBTools:Base' => 'Base~~', 'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~', 'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~', 'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~', 'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~', 'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~', 'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~', 'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~', 'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -17,7 +17,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~', 'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~', 'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~', 'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~', 'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyze~~', 'DBTools:Analyze' => 'Analyze~~',
'DBTools:Base' => 'Base~~', 'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~', 'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~', 'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~', 'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~', 'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~', 'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~', 'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~', 'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -24,7 +24,7 @@
/** @noinspection PhpUnhandledExceptionInspection */ /** @noinspection PhpUnhandledExceptionInspection */
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-db-tools/3.3.0', 'combodo-db-tools/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="Attachment" _delta="define"> <class id="Attachment" _delta="define">
<parent>DBObject</parent> <parent>DBObject</parent>
@@ -160,26 +160,20 @@
$this->Set('item_class', $sClass); $this->Set('item_class', $sClass);
$this->Set('item_id', $iItemId); $this->Set('item_id', $iItemId);
$aCallSpec = array($sClass, 'MapContextParam'); $sAttCode = UserRights::GetOwnerOrganizationAttCode( $sClass);
if (is_callable($aCallSpec)) if (is_null($sAttCode)) {
{ // No need for silos
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter return;
if (MetaModel::IsValidAttCode($sClass, $sAttCode))
{
$iOrgId = $oItem->Get($sAttCode);
if ($iOrgId > 0)
{
if ($iOrgId != $this->Get('item_org_id'))
{
$this->Set('item_org_id', $iOrgId);
if ($bUpdateOnChange)
{
$this->DBUpdate();
}
}
}
}
} }
$iOrgId = $oItem->Get($sAttCode);
if ($iOrgId > 0) {
if ($iOrgId != $this->Get('item_org_id')) {
$this->Set('item_org_id', $iOrgId);
if ($bUpdateOnChange) {
$this->DBUpdate();
}
}
}
}]]></code> }]]></code>
</method> </method>
<method id="SetDefaultOrgId"> <method id="SetDefaultOrgId">
@@ -193,24 +187,15 @@
<code><![CDATA[ public function SetDefaultOrgId() <code><![CDATA[ public function SetDefaultOrgId()
{ {
// Check that the organization CAN be fetched from the current user // Check that the organization CAN be fetched from the current user
// $sOrgAttrCodeForPerson = UserRights::GetOwnerOrganizationAttCode('Person');
if (MetaModel::IsValidClass('Person')) if (is_null($sOrgAttrCodeForPerson)) {
{ // No need for silos
$aCallSpec = array('Person', 'MapContextParam'); return;
if (is_callable($aCallSpec)) }
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter $oCurrentPerson = MetaModel::GetObject('Person', UserRights::GetContactId(), false);
if (MetaModel::IsValidAttCode('Person', $sAttCode)) if ($oCurrentPerson) {
{ $this->Set('item_org_id', $oCurrentPerson->Get($sOrgAttrCodeForPerson));
// OK - try it
//
$oCurrentPerson = MetaModel::GetObject('Person', UserRights::GetContactId(), false);
if ($oCurrentPerson)
{
$this->Set('item_org_id', $oCurrentPerson->Get($sAttCode));
}
}
}
} }
}]]></code> }]]></code>
</method> </method>

View File

@@ -19,7 +19,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-attachments/3.3.0', 'itop-attachments/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -120,7 +120,7 @@ try
try try
{ {
set_time_limit(0); set_time_limit(0);
$oBB = new BackupExec(utils::GetDataPath().'backups/manual/', 0 /*iRetentionCount*/); $oBB = new BackupExec(APPROOT.'data/backups/manual/', 0 /*iRetentionCount*/);
$sRes = $oBB->Process(time() + 36000); // 10 hours to complete should be sufficient! $sRes = $oBB->Process(time() + 36000); // 10 hours to complete should be sufficient!
} }
catch (Exception $e) catch (Exception $e)
@@ -185,7 +185,7 @@ try
$oDBRS = new DBRestore($oItopConfig); $oDBRS = new DBRestore($oItopConfig);
$oDBRS->SetMySQLBinDir($sMySQLBinDir); $oDBRS->SetMySQLBinDir($sMySQLBinDir);
$sBackupDir = utils::GetDataPath().'backups/'; $sBackupDir = APPROOT.'data/backups/';
$sBackupFile = $sBackupDir.$sFile; $sBackupFile = $sBackupDir.$sFile;
$sRes = $oDBRS->RestoreFromCompressedBackup($sBackupFile, $sEnvironment); $sRes = $oDBRS->RestoreFromCompressedBackup($sBackupFile, $sEnvironment);
@@ -210,7 +210,7 @@ try
} }
$sFile = utils::ReadParam('file', '', false, 'raw_data'); $sFile = utils::ReadParam('file', '', false, 'raw_data');
$oBackup = new DBBackupScheduled(); $oBackup = new DBBackupScheduled();
$sBackupDir = utils::GetDataPath().'backups/'; $sBackupDir = APPROOT.'data/backups/';
$sBackupFilePath = utils::RealPath($sBackupDir.$sFile, $sBackupDir); $sBackupFilePath = utils::RealPath($sBackupDir.$sFile, $sBackupDir);
if ($sBackupFilePath === false) if ($sBackupFilePath === false)
{ {

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<menus> <menus>
<menu id="BackupStatus" xsi:type="WebPageMenuNode" _delta="define"> <menu id="BackupStatus" xsi:type="WebPageMenuNode" _delta="define">
<rank>50</rank> <rank>50</rank>

View File

@@ -154,7 +154,7 @@ class DBRestore extends DBBackup
// Load the database // Load the database
// //
$sDataDir = utils::GetDataPath().'tmp-backup-'.rand(10000, getrandmax()); $sDataDir = APPROOT.'data/tmp-backup-'.rand(10000, getrandmax());
SetupUtils::builddir($sDataDir); // Here is the directory SetupUtils::builddir($sDataDir); // Here is the directory
$oArchive->extractTo($sDataDir); $oArchive->extractTo($sDataDir);
@@ -164,7 +164,7 @@ class DBRestore extends DBBackup
// Update the code // Update the code
// //
$sDeltaFile = utils::GetDataPath().$sEnvironment.'.delta.xml'; $sDeltaFile = APPROOT.'data/'.$sEnvironment.'.delta.xml';
if (is_file($sDataDir.'/delta.xml')) { if (is_file($sDataDir.'/delta.xml')) {
// Extract and rename delta.xml => <env>.delta.xml; // Extract and rename delta.xml => <env>.delta.xml;
@@ -172,15 +172,15 @@ class DBRestore extends DBBackup
} else { } else {
@unlink($sDeltaFile); @unlink($sDeltaFile);
} }
if (is_dir(utils::GetDataPath().'production-modules/')) { if (is_dir(APPROOT.'data/production-modules/')) {
try { try {
SetupUtils::rrmdir(utils::GetDataPath().'production-modules/'); SetupUtils::rrmdir(APPROOT.'data/production-modules/');
} catch (Exception $e) { } catch (Exception $e) {
throw new BackupException("Can't remove production-modules dir", 0, $e); throw new BackupException("Can't remove production-modules dir", 0, $e);
} }
} }
if (is_dir($sDataDir.'/production-modules')) { if (is_dir($sDataDir.'/production-modules')) {
rename($sDataDir.'/production-modules', utils::GetDataPath().'production-modules/'); rename($sDataDir.'/production-modules', APPROOT.'data/production-modules/');
} }
$sConfigFile = APPROOT.'conf/'.$sEnvironment.'/config-itop.php'; $sConfigFile = APPROOT.'conf/'.$sEnvironment.'/config-itop.php';

View File

@@ -109,7 +109,7 @@ class BackupExec extends AbstractWeeklyScheduledProcess
{ {
if (is_null($sBackupDir)) if (is_null($sBackupDir))
{ {
$this->sBackupDir = utils::GetDataPath().'backups/auto/'; $this->sBackupDir = APPROOT.'data/backups/auto/';
} }
else else
{ {

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-backup/3.3.0', 'itop-backup/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -131,7 +131,7 @@ try {
// Destination directory // Destination directory
// //
// Make sure the target directory exists and is writeable // Make sure the target directory exists and is writeable
$sBackupDir = realpath(utils::GetDataPath().'backups/'); $sBackupDir = realpath(APPROOT.'data/backups/');
SetupUtils::builddir($sBackupDir); SetupUtils::builddir($sBackupDir);
if (!is_dir($sBackupDir)) { if (!is_dir($sBackupDir)) {
$oBlockForChecks->AddSubBlock( $oBlockForChecks->AddSubBlock(

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<constants/> <constants/>
<classes> <classes>
<class id="lnkFunctionalCIToProviderContract" _delta="define"> <class id="lnkFunctionalCIToProviderContract" _delta="define">

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-bridge-cmdb-services/3.3.0', 'itop-bridge-cmdb-services/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<constants/> <constants/>
<classes> <classes>
<class id="lnkFunctionalCIToTicket" _delta="define"> <class id="lnkFunctionalCIToTicket" _delta="define">
@@ -142,19 +142,6 @@
</field> </field>
</fields> </fields>
</class> </class>
<class id="Ticket" _delta="must_exist">
<fields>
<field id="functionalcis_list" xsi:type="AttributeLinkedSetIndirect" _delta="define">
<linked_class>lnkFunctionalCIToTicket</linked_class>
<ext_key_to_me>ticket_id</ext_key_to_me>
<count_min>0</count_min>
<count_max>0</count_max>
<ext_key_to_remote>functionalci_id</ext_key_to_remote>
<with_php_computation>true</with_php_computation>
<duplicates/>
</field>
</fields>
</class>
</classes> </classes>
<menus> <menus>
</menus> </menus>

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-bridge-cmdb-ticket/3.3.0', 'itop-bridge-cmdb-ticket/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<constants/> <constants/>
<classes> <classes>
<class id="Rack" _delta="must_exist"> <class id="Rack" _delta="must_exist">

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-bridge-datacenter-mgmt-services/3.3.0', 'itop-bridge-datacenter-mgmt-services/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<constants/> <constants/>
<classes> <classes>
<class id="Phone" _delta="must_exist"> <class id="Phone" _delta="must_exist">

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-bridge-endusers-devices-services/3.3.0', 'itop-bridge-endusers-devices-services/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<constants/> <constants/>
<classes> <classes>
<class id="SANSwitch" _delta="must_exist"> <class id="SANSwitch" _delta="must_exist">

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-bridge-storage-mgmt-services/3.3.0', 'itop-bridge-storage-mgmt-services/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<constants/> <constants/>
<classes> <classes>
<class id="Hypervisor" _delta="must_exist"> <class id="Hypervisor" _delta="must_exist">

View File

@@ -5,7 +5,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-bridge-virtualization-mgmt-services/3.3.0', 'itop-bridge-virtualization-mgmt-services/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="lnkVirtualDeviceToVolume" _delta="define"> <class id="lnkVirtualDeviceToVolume" _delta="define">
<parent>cmdbAbstractObject</parent> <parent>cmdbAbstractObject</parent>

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-bridge-virtualization-storage/3.3.0', 'itop-bridge-virtualization-storage/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="Change" _delta="define"> <class id="Change" _delta="define">
<parent>Ticket</parent> <parent>Ticket</parent>

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-change-mgmt-itil/3.3.0', 'itop-change-mgmt-itil/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="Change" _delta="define"> <class id="Change" _delta="define">
<parent>Ticket</parent> <parent>Ticket</parent>

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-change-mgmt/3.3.0', 'itop-change-mgmt/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="FunctionalCI" _delta="define"> <class id="FunctionalCI" _delta="define">
<parent>cmdbAbstractObject</parent> <parent>cmdbAbstractObject</parent>

View File

@@ -643,7 +643,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Class:Subnet/Tab:FreeIPs-count' => 'Počet volných adres: %1$s', 'Class:Subnet/Tab:FreeIPs-count' => 'Počet volných adres: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Tady je výčet volných IP adres (10)', 'Class:Subnet/Tab:FreeIPs-explain' => 'Tady je výčet volných IP adres (10)',
'Class:Subnet/Tab:IPUsage' => 'Využití IP', 'Class:Subnet/Tab:IPUsage' => 'Využití IP',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~', 'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Rozhraní, která mají IP adresu v rozsahu: <em>%1$s</em>-<em>%2$s</em>', 'Class:Subnet/Tab:IPUsage-explain' => 'Rozhraní, která mají IP adresu v rozsahu: <em>%1$s</em>-<em>%2$s</em>',
'Class:Tablet' => 'Tablet', 'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '', 'Class:Tablet+' => '',

View File

@@ -153,7 +153,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:FunctionalCI/Attribute:organization_name' => 'Organisationsnavn', 'Class:FunctionalCI/Attribute:organization_name' => 'Organisationsnavn',
'Class:FunctionalCI/Attribute:organization_name+' => '', 'Class:FunctionalCI/Attribute:organization_name+' => '',
'Class:FunctionalCI/Attribute:softwares_list' => 'Software', 'Class:FunctionalCI/Attribute:softwares_list' => 'Software',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~', 'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item~~',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~', 'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~', 'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
'Class:Group' => 'Gruppe', 'Class:Group' => 'Gruppe',
@@ -642,7 +642,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:Subnet/Tab:FreeIPs-count' => 'Ledige IP: %1$s', 'Class:Subnet/Tab:FreeIPs-count' => 'Ledige IP: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Her er et udtræk af 10 ledige IP adresser', 'Class:Subnet/Tab:FreeIPs-explain' => 'Her er et udtræk af 10 ledige IP adresser',
'Class:Subnet/Tab:IPUsage' => 'IP Brug', 'Class:Subnet/Tab:IPUsage' => 'IP Brug',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~', 'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces der har en IP i området: <em>%1$s</em> til <em>%2$s</em>', 'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces der har en IP i området: <em>%1$s</em> til <em>%2$s</em>',
'Class:Tablet' => 'Tablet', 'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '', 'Class:Tablet+' => '',

View File

@@ -129,7 +129,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Application solutions', 'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Application solutions',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'All the application solutions depending on this configuration item', 'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'All the application solutions depending on this configuration item',
'Class:FunctionalCI/Attribute:softwares_list' => 'Softwares', 'Class:FunctionalCI/Attribute:softwares_list' => 'Softwares',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item', 'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item',
'Class:FunctionalCI/Attribute:finalclass' => 'CI sub-class', 'Class:FunctionalCI/Attribute:finalclass' => 'CI sub-class',
'Class:FunctionalCI/Attribute:finalclass+' => 'Name of the final class', 'Class:FunctionalCI/Attribute:finalclass+' => 'Name of the final class',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets', 'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets',
@@ -1557,7 +1557,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Server:otherinfo' => 'Other information', 'Server:otherinfo' => 'Other information',
'Server:power' => 'Power supply', 'Server:power' => 'Power supply',
'Class:Subnet/Tab:IPUsage' => 'IP Usage', 'Class:Subnet/Tab:IPUsage' => 'IP Usage',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not', 'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not',
'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces having an IP in the range: <em>%1$s</em> to <em>%2$s</em>', 'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces having an IP in the range: <em>%1$s</em> to <em>%2$s</em>',
'Class:Subnet/Tab:FreeIPs' => 'Free IPs', 'Class:Subnet/Tab:FreeIPs' => 'Free IPs',
'Class:Subnet/Tab:FreeIPs-count' => 'Free IPs: %1$s', 'Class:Subnet/Tab:FreeIPs-count' => 'Free IPs: %1$s',

View File

@@ -641,7 +641,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Class:Subnet/Tab:FreeIPs-count' => 'Szabad IP címek: %1$s', 'Class:Subnet/Tab:FreeIPs-count' => 'Szabad IP címek: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => '10 szabad IP cím kivonata', 'Class:Subnet/Tab:FreeIPs-explain' => '10 szabad IP cím kivonata',
'Class:Subnet/Tab:IPUsage' => 'IP felhasználás', 'Class:Subnet/Tab:IPUsage' => 'IP felhasználás',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~', 'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'A hálózati csatolók a következő tartományba esnek: <em>%1$s</em> - <em>%2$s</em>', 'Class:Subnet/Tab:IPUsage-explain' => 'A hálózati csatolók a következő tartományba esnek: <em>%1$s</em> - <em>%2$s</em>',
'Class:Tablet' => 'Táblagép', 'Class:Tablet' => 'Táblagép',
'Class:Tablet+' => '~~', 'Class:Tablet+' => '~~',

View File

@@ -152,7 +152,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:FunctionalCI/Attribute:organization_name' => '組織名', 'Class:FunctionalCI/Attribute:organization_name' => '組織名',
'Class:FunctionalCI/Attribute:organization_name+' => '共通名', 'Class:FunctionalCI/Attribute:organization_name+' => '共通名',
'Class:FunctionalCI/Attribute:softwares_list' => 'ソフトウエア', 'Class:FunctionalCI/Attribute:softwares_list' => 'ソフトウエア',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~', 'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item~~',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~', 'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~', 'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
'Class:Group' => 'グループ', 'Class:Group' => 'グループ',
@@ -641,7 +641,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:Subnet/Tab:FreeIPs-count' => 'フリーIP: %1$s', 'Class:Subnet/Tab:FreeIPs-count' => 'フリーIP: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => '10個のフリーなIPアドレス', 'Class:Subnet/Tab:FreeIPs-explain' => '10個のフリーなIPアドレス',
'Class:Subnet/Tab:IPUsage' => 'IP 利用', 'Class:Subnet/Tab:IPUsage' => 'IP 利用',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~', 'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'インターフェースは、レンジ: <em>%1$s</em> から <em>%2$s</em>の中のIPを持っています。', 'Class:Subnet/Tab:IPUsage-explain' => 'インターフェースは、レンジ: <em>%1$s</em> から <em>%2$s</em>の中のIPを持っています。',
'Class:Tablet' => 'タブレット', 'Class:Tablet' => 'タブレット',
'Class:Tablet+' => '', 'Class:Tablet+' => '',

View File

@@ -641,7 +641,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Class:Subnet/Tab:FreeIPs-count' => 'IPs livres: %1$s', 'Class:Subnet/Tab:FreeIPs-count' => 'IPs livres: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Aqui uma faixa de 10 endereços IPs livres', 'Class:Subnet/Tab:FreeIPs-explain' => 'Aqui uma faixa de 10 endereços IPs livres',
'Class:Subnet/Tab:IPUsage' => 'IP usado', 'Class:Subnet/Tab:IPUsage' => 'IP usado',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~', 'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Placas de rede contendo IP na faixa: <em>%1$s</em> para <em>%2$s</em>', 'Class:Subnet/Tab:IPUsage-explain' => 'Placas de rede contendo IP na faixa: <em>%1$s</em> para <em>%2$s</em>',
'Class:Tablet' => 'Tablet', 'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '', 'Class:Tablet+' => '',

View File

@@ -642,7 +642,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Subnet/Tab:FreeIPs-count' => 'Свободных IP-адресов: %1$s', 'Class:Subnet/Tab:FreeIPs-count' => 'Свободных IP-адресов: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Вот выборка из 10 свободных IP-адресов', 'Class:Subnet/Tab:FreeIPs-explain' => 'Вот выборка из 10 свободных IP-адресов',
'Class:Subnet/Tab:IPUsage' => 'Использование IP-адресов', 'Class:Subnet/Tab:IPUsage' => 'Использование IP-адресов',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~', 'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Интерфейсы с IP-адресом в диапазоне: <em>%1$s</em> - <em>%2$s</em>', 'Class:Subnet/Tab:IPUsage-explain' => 'Интерфейсы с IP-адресом в диапазоне: <em>%1$s</em> - <em>%2$s</em>',
'Class:Tablet' => 'Планшет', 'Class:Tablet' => 'Планшет',
'Class:Tablet+' => '', 'Class:Tablet+' => '',

View File

@@ -152,7 +152,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:FunctionalCI/Attribute:organization_name' => 'Názov Organizácie', 'Class:FunctionalCI/Attribute:organization_name' => 'Názov Organizácie',
'Class:FunctionalCI/Attribute:organization_name+' => 'Common name~~', 'Class:FunctionalCI/Attribute:organization_name+' => 'Common name~~',
'Class:FunctionalCI/Attribute:softwares_list' => 'Softvér', 'Class:FunctionalCI/Attribute:softwares_list' => 'Softvér',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~', 'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item~~',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~', 'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~', 'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
'Class:Group' => 'Skupina', 'Class:Group' => 'Skupina',
@@ -641,7 +641,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:Subnet/Tab:FreeIPs-count' => 'Voľných IP adries: %1$s', 'Class:Subnet/Tab:FreeIPs-count' => 'Voľných IP adries: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Tu je extrakt 10 voľných IP adries', 'Class:Subnet/Tab:FreeIPs-explain' => 'Tu je extrakt 10 voľných IP adries',
'Class:Subnet/Tab:IPUsage' => 'Využívanosť IP adries', 'Class:Subnet/Tab:IPUsage' => 'Využívanosť IP adries',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~', 'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Rozhrania majúce IP adresu v rozsahu: <em>%1$s</em> do <em>%2$s</em>', 'Class:Subnet/Tab:IPUsage-explain' => 'Rozhrania majúce IP adresu v rozsahu: <em>%1$s</em> do <em>%2$s</em>',
'Class:Tablet' => 'Tablet', 'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '~~', 'Class:Tablet+' => '~~',

View File

@@ -642,7 +642,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:Subnet/Tab:FreeIPs-count' => 'Boş IPler: %1$s', 'Class:Subnet/Tab:FreeIPs-count' => 'Boş IPler: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Boş IP adresleri', 'Class:Subnet/Tab:FreeIPs-explain' => 'Boş IP adresleri',
'Class:Subnet/Tab:IPUsage' => 'IP Kullanımı', 'Class:Subnet/Tab:IPUsage' => 'IP Kullanımı',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~', 'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => '<em>%1$s</em> - <em>%2$s</em> aralığındaki IPye sahip arayüzler', 'Class:Subnet/Tab:IPUsage-explain' => '<em>%1$s</em> - <em>%2$s</em> aralığındaki IPye sahip arayüzler',
'Class:Tablet' => 'Tablet', 'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '~~', 'Class:Tablet+' => '~~',

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-config-mgmt/3.3.0', 'itop-config-mgmt/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<menus> <menus>
<menu id="ConfigEditor" xsi:type="WebPageMenuNode" _delta="define"> <menu id="ConfigEditor" xsi:type="WebPageMenuNode" _delta="define">
<rank>10</rank> <rank>10</rank>

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-config/3.3.0', 'itop-config/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<menus> <menus>
<menu id="iTopUpdate" xsi:type="WebPageMenuNode" _delta="define"> <menu id="iTopUpdate" xsi:type="WebPageMenuNode" _delta="define">
<rank>60</rank> <rank>60</rank>

View File

@@ -24,7 +24,7 @@
/** @noinspection PhpUnhandledExceptionInspection */ /** @noinspection PhpUnhandledExceptionInspection */
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-core-update/3.3.0', 'itop-core-update/3.2.0',
[ [
// Identification // Identification
// //

View File

@@ -486,7 +486,7 @@ final class CoreUpdater
*/ */
private static function GetItopArchiveName() private static function GetItopArchiveName()
{ {
$sItopArchiveName = utils::GetDataPath().'backups/itop'; $sItopArchiveName = APPROOT.'data/backups/itop';
return $sItopArchiveName; return $sItopArchiveName;
} }
@@ -504,7 +504,7 @@ final class CoreUpdater
*/ */
private static function GetBackupName() private static function GetBackupName()
{ {
$sBackupName = utils::GetDataPath().'backups/manual/backup-core-update'; $sBackupName = APPROOT.'data/backups/manual/backup-core-update';
return $sBackupName; return $sBackupName;
} }

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="Rack" _delta="define"> <class id="Rack" _delta="define">
<parent>PhysicalDevice</parent> <parent>PhysicalDevice</parent>

View File

@@ -18,7 +18,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-datacenter-mgmt/3.3.0', 'itop-datacenter-mgmt/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="TelephonyCI" _delta="define"> <class id="TelephonyCI" _delta="define">
<parent>PhysicalDevice</parent> <parent>PhysicalDevice</parent>

View File

@@ -25,7 +25,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-endusers-devices/3.3.0', 'itop-endusers-devices/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="FAQ" _delta="define"> <class id="FAQ" _delta="define">
<parent>cmdbAbstractObject</parent> <parent>cmdbAbstractObject</parent>

View File

@@ -3,7 +3,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-faq-light/3.3.0', 'itop-faq-light/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
</itop_design> </itop_design>

View File

@@ -24,7 +24,7 @@
/** @noinspection PhpUnhandledExceptionInspection */ /** @noinspection PhpUnhandledExceptionInspection */
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-files-information/3.3.0', 'itop-files-information/3.2.0',
array( array(
// Identification // Identification
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.3"> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<classes> <classes>
<class id="Ticket"> <class id="Ticket">
<methods> <methods>

View File

@@ -6,7 +6,7 @@
SetupWebPage::AddModule( SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file __FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'itop-full-itil/3.3.0', 'itop-full-itil/3.2.0',
array( array(
// Identification // Identification
// //

Some files were not shown because too many files have changed in this diff Show More