N°5563 Convert datamodels files with new 3.1 conversion methods

This commit is contained in:
Pierre Goiffon
2022-11-18 19:00:07 +01:00
parent 3aab49c372
commit 6258b97b92
30 changed files with 17641 additions and 17509 deletions

View File

@@ -7,6 +7,8 @@
*
* datamodels/2.x/.../datamodel.*.xml
*
* Warning : this will NOT update the XML structure (iTopDesignFormat convert methods)
*
* Usage :
* `php .make\release\update-xml.php "1.7"`
*

View File

@@ -174,6 +174,7 @@ class DatamodelsXmlFiles extends AbstractGlobFileVersionUpdater
*/
public function UpdateFileContent($sVersionLabel, $sFileContent, $sFileFullPath)
{
//TODO should also CONVERT files !
return preg_replace(
'/(<itop_design .* version=")[^"]+(">)/',
'${1}'.$sVersionLabel.'${2}',

View File

@@ -1,51 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1">
<classes>
<class id="UserLDAP" _delta="define">
<parent>cmdbAbstractObject</parent>
<php_parent>
<name>UserInternal</name>
</php_parent>
<properties>
<comment>/**
<classes>
<class id="UserLDAP" _delta="define">
<parent>cmdbAbstractObject</parent>
<php_parent>
<name>UserInternal</name>
</php_parent>
<properties>
<comment>/**
* LDAP Authentication
* User authentication Module, no password at all!
*
* @copyright Copyright (C) 2010-2020 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/</comment>
<category>addon/authentication,grant_by_profile,silo</category>
<abstract>false</abstract>
<key_type>autoincrement</key_type>
<db_table>priv_user_ldap</db_table>
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="login"/>
</attributes>
</naming>
<display_template/>
<style>
<icon/>
</style>
<reconciliation>
<attributes>
<attribute id="login"/>
</attributes>
</reconciliation>
</properties>
<fields>
<field id="ldap_server" xsi:type="AttributeString">
<sql>ldap_server</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
</field>
</fields>
<methods>
<method id="CheckCredentials">
<comment><![CDATA[/**
<category>addon/authentication,grant_by_profile,silo</category>
<abstract>false</abstract>
<key_type>autoincrement</key_type>
<db_table>priv_user_ldap</db_table>
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="login"/>
</attributes>
</naming>
<display_template/>
<style>
<icon/>
</style>
<reconciliation>
<attributes>
<attribute id="login"/>
</attributes>
</reconciliation>
</properties>
<fields>
<field id="ldap_server" xsi:type="AttributeString">
<sql>ldap_server</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
</field>
</fields>
<methods>
<method id="CheckCredentials">
<comment><![CDATA[/**
* Check the user's password against the LDAP server
* Algorithm:
* 1) Connect to the LDAP server, using a predefined account (or anonymously)
@@ -60,10 +60,10 @@
* @throws \ArchivedObjectException
* @throws \CoreException
*/]]></comment>
<static>false</static>
<access>public</access>
<type>OQLMenuNode</type>
<code><![CDATA[ public function CheckCredentials($sPassword)
<static>false</static>
<access>public</access>
<type>OQLMenuNode</type>
<code><![CDATA[ public function CheckCredentials($sPassword)
{
$sServer = $this->Get('ldap_server');
if (empty($sServer))
@@ -190,39 +190,39 @@
return false;
}
}]]></code>
</method>
<method id="TrustWebServerContext">
<static>false</static>
<access>public</access>
<type>OQLMenuNode</type>
<code> public function TrustWebServerContext()
</method>
<method id="TrustWebServerContext">
<static>false</static>
<access>public</access>
<type>OQLMenuNode</type>
<code> public function TrustWebServerContext()
{
return false;
}</code>
</method>
<method id="CanChangePassword">
<static>false</static>
<access>public</access>
<type>OQLMenuNode</type>
<code> public function CanChangePassword()
</method>
<method id="CanChangePassword">
<static>false</static>
<access>public</access>
<type>OQLMenuNode</type>
<code> public function CanChangePassword()
{
return false;
}</code>
</method>
<method id="ChangePassword">
<static>false</static>
<access>public</access>
<type>OQLMenuNode</type>
<code> public function ChangePassword($sOldPassword, $sNewPassword)
</method>
<method id="ChangePassword">
<static>false</static>
<access>public</access>
<type>OQLMenuNode</type>
<code> public function ChangePassword($sOldPassword, $sNewPassword)
{
return false;
}</code>
</method>
<method id="LogIssue">
<static>false</static>
<access>protected</access>
<type>OQLMenuNode</type>
<code><![CDATA[ protected function LogIssue($bDebug, $sMessage, $aData = array())
</method>
<method id="LogIssue">
<static>false</static>
<access>protected</access>
<type>OQLMenuNode</type>
<code><![CDATA[ protected function LogIssue($bDebug, $sMessage, $aData = array())
{
if ($bDebug)
{
@@ -240,91 +240,91 @@
}
IssueLog::Error($sMessage);
}]]></code>
</method>
<method id="LogInfo">
<static>false</static>
<access>protected</access>
<type>OQLMenuNode</type>
<code><![CDATA[ protected function LogInfo($bDebug, $sMessage)
</method>
<method id="LogInfo">
<static>false</static>
<access>protected</access>
<type>OQLMenuNode</type>
<code><![CDATA[ protected function LogInfo($bDebug, $sMessage)
{
if ($bDebug)
{
IssueLog::Info($sMessage);
}
}]]></code>
</method>
</methods>
<presentation>
<details>
<items>
<item id="contactid">
<rank>10</rank>
</item>
<item id="org_id">
<rank>20</rank>
</item>
<item id="email">
<rank>30</rank>
</item>
<item id="login">
<rank>40</rank>
</item>
<item id="language">
<rank>50</rank>
</item>
<item id="status">
<rank>60</rank>
</item>
<item id="profile_list">
<rank>70</rank>
</item>
<item id="allowed_org_list">
<rank>80</rank>
</item>
<item id="ldap_server">
<rank>90</rank>
</item>
</items>
</details>
<search>
<items>
<item id="login">
<rank>10</rank>
</item>
<item id="contactid">
<rank>20</rank>
</item>
<item id="status">
<rank>30</rank>
</item>
<item id="org_id">
<rank>40</rank>
</item>
<item id="ldap_server">
<rank>50</rank>
</item>
</items>
</search>
<list>
<items>
<item id="first_name">
<rank>10</rank>
</item>
<item id="last_name">
<rank>20</rank>
</item>
<item id="status">
<rank>30</rank>
</item>
<item id="org_id">
<rank>40</rank>
</item>
<item id="ldap_server">
<rank>50</rank>
</item>
</items>
</list>
</presentation>
</class>
</classes>
</method>
</methods>
<presentation>
<details>
<items>
<item id="contactid">
<rank>10</rank>
</item>
<item id="org_id">
<rank>20</rank>
</item>
<item id="email">
<rank>30</rank>
</item>
<item id="login">
<rank>40</rank>
</item>
<item id="language">
<rank>50</rank>
</item>
<item id="status">
<rank>60</rank>
</item>
<item id="profile_list">
<rank>70</rank>
</item>
<item id="allowed_org_list">
<rank>80</rank>
</item>
<item id="ldap_server">
<rank>90</rank>
</item>
</items>
</details>
<search>
<items>
<item id="login">
<rank>10</rank>
</item>
<item id="contactid">
<rank>20</rank>
</item>
<item id="status">
<rank>30</rank>
</item>
<item id="org_id">
<rank>40</rank>
</item>
<item id="ldap_server">
<rank>50</rank>
</item>
</items>
</search>
<list>
<items>
<item id="first_name">
<rank>10</rank>
</item>
<item id="last_name">
<rank>20</rank>
</item>
<item id="status">
<rank>30</rank>
</item>
<item id="org_id">
<rank>40</rank>
</item>
<item id="ldap_server">
<rank>50</rank>
</item>
</items>
</list>
</presentation>
</class>
</classes>
</itop_design>

View File

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

View File

@@ -55,51 +55,51 @@
</indexes>
</properties>
<fields>
<field id="expire" xsi:type="AttributeDateTime">
<sql>expire</sql>
<default_value/>
<is_null_allowed>false</is_null_allowed>
</field>
<field id="temp_id" xsi:type="AttributeString">
<sql>temp_id</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="item_class" xsi:type="AttributeString">
<sql>item_class</sql>
<default_value/>
<is_null_allowed>false</is_null_allowed>
</field>
<field id="item_id" xsi:type="AttributeObjectKey">
<sql>item_id</sql>
<is_null_allowed>true</is_null_allowed>
<class_attcode>item_class</class_attcode>
</field>
<field id="item_org_id" xsi:type="AttributeInteger">
<sql>item_org_id</sql>
<default_value>0</default_value>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="contents" xsi:type="AttributeBlob"/>
<field id="creation_date" xsi:type="AttributeDateTime">
<sql>creation_date</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="user_id" xsi:type="AttributeExternalKey">
<sql>user_id</sql>
<is_null_allowed>true</is_null_allowed>
<on_target_delete>DEL_MANUAL</on_target_delete>
<target_class>User</target_class>
<allow_target_creation>false</allow_target_creation>
</field>
<field id="contact_id" xsi:type="AttributeExternalField">
<extkey_attcode>user_id</extkey_attcode>
<target_attcode>contactid</target_attcode>
<dependencies>
<attribute id="user_id"></attribute>
</dependencies>
</field>
<field id="expire" xsi:type="AttributeDateTime">
<sql>expire</sql>
<default_value/>
<is_null_allowed>false</is_null_allowed>
</field>
<field id="temp_id" xsi:type="AttributeString">
<sql>temp_id</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="item_class" xsi:type="AttributeString">
<sql>item_class</sql>
<default_value/>
<is_null_allowed>false</is_null_allowed>
</field>
<field id="item_id" xsi:type="AttributeObjectKey">
<sql>item_id</sql>
<is_null_allowed>true</is_null_allowed>
<class_attcode>item_class</class_attcode>
</field>
<field id="item_org_id" xsi:type="AttributeInteger">
<sql>item_org_id</sql>
<default_value>0</default_value>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="contents" xsi:type="AttributeBlob"/>
<field id="creation_date" xsi:type="AttributeDateTime">
<sql>creation_date</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="user_id" xsi:type="AttributeExternalKey">
<sql>user_id</sql>
<is_null_allowed>true</is_null_allowed>
<on_target_delete>DEL_MANUAL</on_target_delete>
<target_class>User</target_class>
<allow_target_creation>false</allow_target_creation>
</field>
<field id="contact_id" xsi:type="AttributeExternalField">
<extkey_attcode>user_id</extkey_attcode>
<target_attcode>contactid</target_attcode>
<dependencies>
<attribute id="user_id"/>
</dependencies>
</field>
</fields>
<methods>
<method id="MapContextParam">
@@ -236,22 +236,22 @@
</item>
</items>
</search>
<list>
<items>
<item id="temp_id">
<rank>10</rank>
</item>
<item id="item_class">
<rank>20</rank>
</item>
<item id="item_id">
<rank>30</rank>
</item>
<item id="creation_date">
<rank>40</rank>
</item>
</items>
</list>
<list>
<items>
<item id="temp_id">
<rank>10</rank>
</item>
<item id="item_class">
<rank>20</rank>
</item>
<item id="item_id">
<rank>30</rank>
</item>
<item id="creation_date">
<rank>40</rank>
</item>
</items>
</list>
</presentation>
</class>
</classes>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1">
<constants></constants>
<constants/>
<classes>
<class id="lnkFunctionalCIToTicket" _delta="define">
<parent>cmdbAbstractObject</parent>
@@ -292,6 +292,7 @@
<count_max>0</count_max>
<ext_key_to_remote>providercontract_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="services_list" xsi:type="AttributeLinkedSetIndirect" _delta="define">
<linked_class>lnkFunctionalCIToService</linked_class>
@@ -300,6 +301,7 @@
<count_max>0</count_max>
<ext_key_to_remote>service_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="tickets_list" xsi:type="AttributeLinkedSetIndirect" _delta="define">
<linked_class>lnkFunctionalCIToTicket</linked_class>
@@ -308,6 +310,7 @@
<count_max>0</count_max>
<ext_key_to_remote>ticket_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
</fields>
<presentation>

View File

@@ -44,19 +44,11 @@
<values>
<value id="approved">approved
<code>approved</code>
<style>
<main_color>$ibo-lifecycle-success-state-primary-color</main_color>
<complementary_color>$ibo-lifecycle-success-state-secondary-color</complementary_color>
<decoration_classes>fas fa-user-check</decoration_classes>
</style>
<style><main_color>$ibo-lifecycle-success-state-primary-color</main_color><complementary_color>$ibo-lifecycle-success-state-secondary-color</complementary_color><decoration_classes>fas fa-user-check</decoration_classes></style>
</value>
<value id="assigned">assigned
<code>assigned</code>
<style>
<main_color>$ibo-lifecycle-neutral-state-primary-color</main_color>
<complementary_color>$ibo-lifecycle-neutral-state-secondary-color</complementary_color>
<decoration_classes/>
</style>
<style><main_color>$ibo-lifecycle-neutral-state-primary-color</main_color><complementary_color>$ibo-lifecycle-neutral-state-secondary-color</complementary_color><decoration_classes/></style>
</value>
<value id="closed">
<code>closed</code>
@@ -247,31 +239,39 @@
<field id="related_request_list" xsi:type="AttributeLinkedSet">
<linked_class>UserRequest</linked_class>
<ext_key_to_me>parent_change_id</ext_key_to_me>
<edit_mode>add_remove</edit_mode>
<legacy_edit_mode>add_remove</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
<field id="related_incident_list" xsi:type="AttributeLinkedSet">
<linked_class>Incident</linked_class>
<ext_key_to_me>parent_change_id</ext_key_to_me>
<edit_mode>add_remove</edit_mode>
<legacy_edit_mode>add_remove</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
<field id="related_problems_list" xsi:type="AttributeLinkedSet">
<linked_class>Problem</linked_class>
<ext_key_to_me>related_change_id</ext_key_to_me>
<edit_mode>add_remove</edit_mode>
<legacy_edit_mode>add_remove</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
<field id="child_changes_list" xsi:type="AttributeLinkedSet">
<linked_class>Change</linked_class>
<ext_key_to_me>parent_id</ext_key_to_me>
<edit_mode>add_remove</edit_mode>
<legacy_edit_mode>add_remove</legacy_edit_mode>
<filter><![CDATA[SELECT Change WHERE id != :this->id]]></filter>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<lifecycle>
@@ -279,17 +279,17 @@
<item id="approved">
<rank>1</rank>
<color>HIGHLIGHT_CLASS_NONE</color>
<icon>images/change-approved.svg</icon>
<icon>images/change-approved.svg</icon>
</item>
<item id="rejected">
<rank>2</rank>
<color>HIGHLIGHT_CLASS_NONE</color>
<icon>images/change-rejected.svg</icon>
<icon>images/change-rejected.svg</icon>
</item>
<item id="closed">
<rank>3</rank>
<color>HIGHLIGHT_CLASS_NONE</color>
<icon>images/change-closed.svg</icon>
<icon>images/change-closed.svg</icon>
</item>
</highlight_scale>
<stimuli>
@@ -976,17 +976,17 @@
</states>
</lifecycle>
<methods>
<method id="GetTicketRefFormat">
<static>true</static>
<access>public</access>
<type>Overload-DBObject</type>
<code><![CDATA[
<method id="GetTicketRefFormat">
<static>true</static>
<access>public</access>
<type>Overload-DBObject</type>
<code><![CDATA[
public static function GetTicketRefFormat()
{
return 'C-%06d';
}
]]></code>
</method>
</method>
<method id="SetClosureDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
@@ -1026,8 +1026,7 @@
$this->UpdateImpactedItems();
$this->SetIfNull('creation_date', time());
$this->SetIfNull('last_update', time());
}]]>
</code>
}]]></code>
</method>
<method id="OnUpdate">
<static>false</static>
@@ -1043,8 +1042,7 @@
$this->UpdateImpactedItems();
}
$this->Set('last_update', time());
}]]>
</code>
}]]></code>
</method>
</methods>
<presentation>
@@ -4534,9 +4532,9 @@
<menus>
<menu id="ChangeManagement" xsi:type="MenuGroup" _delta="define">
<rank>50</rank>
<style>
<decoration_classes>fas fa-exchange-alt</decoration_classes>
</style>
<style>
<decoration_classes>fas fa-exchange-alt</decoration_classes>
</style>
</menu>
<menu id="Change:Overview" xsi:type="DashboardMenuNode" _delta="define">
<rank>0</rank>
@@ -4659,7 +4657,7 @@
AND (C.id != :this->id)
]]></oql>
<dict>Tickets:Related:OpenChanges</dict>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
</item>
<item id="recent_changes" _delta="define">
<oql><![CDATA[
@@ -4674,7 +4672,7 @@
AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
]]></oql>
<dict>Tickets:Related:RecentChanges</dict>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
</item>
</items>
</down>
@@ -4696,7 +4694,7 @@
AND (C.id != :this->id)
]]></oql>
<dict>Tickets:Related:OpenChanges</dict>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
</item>
<item id="recent_changes" _delta="define">
<oql><![CDATA[
@@ -4711,7 +4709,7 @@
AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
]]></oql>
<dict>Tickets:Related:RecentChanges</dict>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
</item>
</items>
</down>
@@ -4733,7 +4731,7 @@
AND (C.id != :this->id)
]]></oql>
<dict>Tickets:Related:OpenChanges</dict>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
</item>
<item id="recent_changes" _delta="define">
<oql><![CDATA[
@@ -4748,7 +4746,7 @@
AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
]]></oql>
<dict>Tickets:Related:RecentChanges</dict>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
</item>
</items>
</down>
@@ -4773,7 +4771,7 @@
AND (L.impact_code != 'not_impacted')
]]></oql>
<dict>Tickets:Related:OpenChanges</dict>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
</item>
<item id="recent_changes" _delta="define">
<oql><![CDATA[
@@ -4787,7 +4785,7 @@
AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
]]></oql>
<dict>Tickets:Related:RecentChanges</dict>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
</item>
</items>
</down>
@@ -4804,7 +4802,7 @@
AND (L.impact_code != 'not_impacted')
]]></oql>
<dict>Tickets:Related:OpenChanges</dict>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
<icon>itop-change-mgmt-itil/images/change-ongoing.png</icon>
</item>
<item id="recent_changes" _delta="define">
<oql><![CDATA[
@@ -4818,7 +4816,7 @@
AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
]]></oql>
<dict>Tickets:Related:RecentChanges</dict>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
<icon>itop-change-mgmt-itil/images/change-done.png</icon>
</item>
</items>
</up>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -37,16 +37,20 @@
<field id="device_list" xsi:type="AttributeLinkedSet">
<linked_class>DatacenterDevice</linked_class>
<ext_key_to_me>rack_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
<field id="enclosure_list" xsi:type="AttributeLinkedSet">
<linked_class>Enclosure</linked_class>
<ext_key_to_me>rack_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -229,9 +233,11 @@
<field id="device_list" xsi:type="AttributeLinkedSet">
<linked_class>DatacenterDevice</linked_class>
<ext_key_to_me>enclosure_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -573,9 +579,11 @@
<field id="pdus_list" xsi:type="AttributeLinkedSet">
<linked_class>PDU</linked_class>
<ext_key_to_me>powerstart_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<methods/>

View File

@@ -1390,7 +1390,7 @@
<dashlet id="25" xsi:type="DashletHeaderStatic">
<rank>0</rank>
<title>Menu:ConfigManagement:EndUsers</title>
<icon>../images/icons/icons8-team.svg</icon>
<icon>../images/icons/icons8-team.svg</icon>
</dashlet>
<dashlet id="26" xsi:type="DashletBadge">
<rank>1</rank>

View File

@@ -173,9 +173,11 @@
<field id="faq_list" xsi:type="AttributeLinkedSet">
<linked_class>FAQ</linked_class>
<ext_key_to_me>category_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -305,15 +307,15 @@
<twig>
<div class="row">
<div class="col-sm-4">
<div class="form_field" data-field-id="category_name"></div>
<div class="form_field" data-field-id="title"></div>
<div class="form_field" data-field-id="error_code"></div>
<div class="form_field" data-field-id="key_words"></div>
<div class="form_field" data-field-id="domains"></div>
<div class="form_field" data-field-id="summary"></div>
<div class="form_field" data-field-id="category_name"/>
<div class="form_field" data-field-id="title"/>
<div class="form_field" data-field-id="error_code"/>
<div class="form_field" data-field-id="key_words"/>
<div class="form_field" data-field-id="domains"/>
<div class="form_field" data-field-id="summary"/>
</div>
<div class="col-sm-8">
<div class="form_field" data-field-id="description"></div>
<div class="form_field" data-field-id="description"/>
</div>
</div>
</twig>

View File

@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1">
<classes>
<class id="Ticket">
<methods>
<method id="CreateFromServiceSubcategory" _delta="define">
<comment>/**
<classes>
<class id="Ticket">
<methods>
<method id="CreateFromServiceSubcategory" _delta="define">
<comment>/**
* Instanciate an object of the relevant class, depending on the request type
* @return DBObject
*/</comment>
<static>true</static>
<access>public</access>
<type>Factory</type>
<code><![CDATA[ static public function CreateFromServiceSubcategory($oServiceSubcategory)
<static>true</static>
<access>public</access>
<type>Factory</type>
<code><![CDATA[ static public function CreateFromServiceSubcategory($oServiceSubcategory)
{
$sType = $oServiceSubcategory->Get('request_type');
if ($sType == 'incident')
@@ -32,43 +32,43 @@
}
return $oRet;
}]]></code>
</method>
</methods>
</class>
</classes>
<module_designs>
<module_design id="itop-portal">
<bricks>
<brick id="services">
<levels>
<level id="1">
<levels>
<level id="1">
<levels>
<level id="1">
<actions>
<action id="create_from_this">
<class _delta="delete" />
<factory_method _delta="define"><![CDATA[\Ticket::CreateFromServiceSubcategory]]></factory_method>
</action>
</actions>
</level>
</levels>
</level>
</levels>
</level>
</levels>
</brick>
</bricks>
<classes>
<class id="ServiceSubcategory">
<scopes>
<scope id="all">
<oql_view _delta="redefine"><![CDATA[SELECT ServiceSubcategory WHERE status != 'obsolete']]></oql_view>
</scope>
</scopes>
</class>
</classes>
</module_design>
</module_designs>
</method>
</methods>
</class>
</classes>
<module_designs>
<module_design id="itop-portal">
<bricks>
<brick id="services">
<levels>
<level id="1">
<levels>
<level id="1">
<levels>
<level id="1">
<actions>
<action id="create_from_this">
<class _delta="delete"/>
<factory_method _delta="define"><![CDATA[\Ticket::CreateFromServiceSubcategory]]></factory_method>
</action>
</actions>
</level>
</levels>
</level>
</levels>
</level>
</levels>
</brick>
</bricks>
<classes>
<class id="ServiceSubcategory">
<scopes>
<scope id="all">
<oql_view _delta="redefine"><![CDATA[SELECT ServiceSubcategory WHERE status != 'obsolete']]></oql_view>
</scope>
</scopes>
</class>
</classes>
</module_design>
</module_designs>
</itop_design>

View File

@@ -13,15 +13,15 @@
</profiles>
</user_rights>
<module_parameters>
<parameters id="itop-hub-connector" _delta="define">
<url>https://www.itophub.io</url>
<parameters id="itop-hub-connector" _delta="define">
<url>https://www.itophub.io</url>
<route_landing>/my-instances/landing-from-remote</route_landing>
<route_landing_stateless>/stateless-remote-itop/landing-from-remote-stateless</route_landing_stateless>
<route_fetch_unread_messages>/api/messages</route_fetch_unread_messages>
<route_mark_all_messages_as_read>/api/messages/mark-all-as-read</route_mark_all_messages_as_read>
<route_view_all_messages>/messages</route_view_all_messages>
<setup_url>../pages/exec.php?exec_module=itop-hub-connector&amp;exec_page=launch.php&amp;target=inform_after_setup</setup_url>
<route_landing_stateless>/stateless-remote-itop/landing-from-remote-stateless</route_landing_stateless>
<route_fetch_unread_messages>/api/messages</route_fetch_unread_messages>
<route_mark_all_messages_as_read>/api/messages/mark-all-as-read</route_mark_all_messages_as_read>
<route_view_all_messages>/messages</route_view_all_messages>
<setup_url>../pages/exec.php?exec_module=itop-hub-connector&amp;exec_page=launch.php&amp;target=inform_after_setup</setup_url>
<rgpd_url>https://www.itophub.io/page/data-privacy</rgpd_url>
</parameters>
</parameters>
</module_parameters>
</itop_design>

View File

@@ -121,6 +121,7 @@
<count_max>0</count_max>
<ext_key_to_remote>functionalci_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="document_list" xsi:type="AttributeLinkedSetIndirect">
<linked_class>lnkDocumentToError</linked_class>
@@ -129,6 +130,7 @@
<count_max>0</count_max>
<ext_key_to_remote>document_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -414,9 +416,9 @@
<menus>
<menu id="ProblemManagement" xsi:type="MenuGroup" _delta="define_if_not_exists">
<rank>42</rank>
<style>
<decoration_classes>fas fa-question</decoration_classes>
</style>
<style>
<decoration_classes>fas fa-question</decoration_classes>
</style>
</menu>
<menu id="Problem:Shortcuts" xsi:type="TemplateMenuNode" _delta="define_if_not_exists">
<rank>5</rank>

View File

@@ -112,6 +112,8 @@
<ext_key_to_me>oauth_client_id</ext_key_to_me>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<methods>

View File

@@ -18,4 +18,4 @@
</arguments>
</event>
</events>
</itop_design>
</itop_design>

View File

@@ -1,157 +1,160 @@
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1">
<portals>
<portal id="itop-portal" _delta="define"><!-- ID must match module_design[id] -->
<url>pages/exec.php?exec_module=itop-portal-base&amp;exec_page=index.php&amp;portal_id=itop-portal</url><!-- portal_id must match module_design[id] -->
<rank>1.0</rank>
<handler />
<allow>
<portals>
<portal id="itop-portal" _delta="define">
<!-- ID must match module_design[id] -->
<url>pages/exec.php?exec_module=itop-portal-base&amp;exec_page=index.php&amp;portal_id=itop-portal</url>
<!-- portal_id must match module_design[id] -->
<rank>1.0</rank>
<handler/>
<allow>
</allow>
<deny />
</portal>
</portals>
<module_designs>
<module_design id="itop-portal" xsi:type="portal" _delta="define">
<properties>
<name>portal:itop-portal</name>
<!-- Can be either a fileref or a relative path to the file (To be tested). Takes over env-xxx/branding/portal-logo.png -->
<!-- Priority order is <logo> from xml > env-xxx/branding/portal-logo.png > /images/logo-itop-dark-bg.svg -->
<!--<fileref ref="brt_6a2be154b2a62659d3332c513bdad715" />-->
<!--<logo>../images/itop-logo.png</logo>-->
<!-- Can be either a fileref or a relative path to the file from /env-xxx (eg. itop-portal-base/mystyle.css) -->
<!-- Available themes must have a unique id. Some ids are loaded in a specific order : bootstrap/portal/custom. Other ids are loaded after them, but their order cannot be predicted -->
<themes/>
<!-- Can be either a fileref or a relative path to the file from /env-xxx (eg. itop-portal-base/mytemplate.html.twig) -->
<!-- Available templates are id="layout|home" -->
<templates/>
<!-- Class used for generating objects view/edit urls (eg. in linked sets). -->
<!-- Note: Notification placeholders are NOT using this but the "DBObject::RegisterURLMakerClass(<PORTAL_ID>, <CLASS_NAME>)" declarations. -->
<urlmaker_class>iTopPortalViewUrlMaker</urlmaker_class>
<!-- An OQL query to determine which TriggerOnPortalUpdate to use within THIS instance of the portal. This is mostly needed to enable different triggers on several portal instances -->
<!-- Note : ":parent_classes" parameter is a reserved name that will be used for the current object class name (and its ancestors) -->
<triggers_query><![CDATA[SELECT TriggerOnPortalUpdate AS t WHERE t.target_class IN (:parent_classes)]]></triggers_query>
<attachments>
<allow_delete>true</allow_delete>
</attachments>
<allowed_portals>
<!-- Defines how other portals -allowed for the current user- will be opened. "tab" for a new tab, "self" for the current window -->
<opening_mode>tab</opening_mode>
</allowed_portals>
</properties>
<classes>
<class id="User" _delta="define">
<!-- Allow <allowed_profile>s to apply the <transition>s below. Flags on <field>s will be merged with those from datamodel -->
<!-- See example in UserRequest class -->
<!--<lifecycle/>-->
<scopes>
<!-- Note : Silos apply to those scope queries -->
<scope id="all">
<oql_view><![CDATA[SELECT User AS U JOIN Person AS P ON U.contactid=P.id WHERE P.id = :current_contact_id]]></oql_view>
<!-- No object of this class can be edited -->
<!--<oql_edit />-->
<!-- Everybody -->
<!--<allowed_profiles />-->
</scope>
</scopes>
</class>
<class id="Organization" _delta="define">
<scopes>
<scope id="all">
<oql_view><![CDATA[SELECT Organization WHERE id = :current_contact->org_id]]></oql_view>
</scope>
</scopes>
</class>
<class id="Location" _delta="define">
<scopes>
<scope id="all">
<oql_view><![CDATA[SELECT Location WHERE org_id = :current_contact->org_id]]></oql_view>
</scope>
</scopes>
</class>
<class id="Contact" _delta="define">
<scopes>
<scope id="all">
<oql_view><![CDATA[SELECT Contact WHERE org_id = :current_contact->org_id]]></oql_view>
</scope>
<scope id="admin">
<oql_view><![CDATA[SELECT Contact]]></oql_view>
<allowed_profiles>
<allowed_profile id="Administrator"/>
</allowed_profiles>
</scope>
</scopes>
<lists>
<list id="default">
<items>
<item id="status">
<rank>10</rank>
</item>
<item id="org_id">
<rank>20</rank>
</item>
<item id="function">
<rank>50</rank>
</item>
</items>
</list>
</lists>
</class>
</classes>
<bricks>
<brick id="user-profile" xsi:type="Combodo\iTop\Portal\Brick\UserProfileBrick">
<rank>
<!-- Can be either a <default> tag for both home page and navigation menu or distinct <home> or/and <navigation_menu> tags-->
<default>1</default>
</rank>
<title>
<!-- Can be either a <default> tag for both home page and navigation menu or distinct <home> or/and <navigation_menu> tags-->
<default>Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil</default>
</title>
<decoration_class>
<default>fas fa-user fa-2x</default>
</decoration_class>
<!-- Show / hide some of the user profile forms by setting the tag value to true|false -->
<!--<show_picture_form>true</show_picture_form>-->
<!--<show_preferences_form>true</show_preferences_form>-->
<!--<show_password_form>true</show_password_form>-->
<form>
<!-- Optional tag to list the fields. If empty only fields from <twig> tag will be displayed, if omitted fields from zlist details will. -->
<fields />
<!-- Optional tag to specify the form layout. Fields that are not positioned in the layout will be placed at the end of the form -->
<twig>
<!-- data-field-id attribute must be an attribute code of the class -->
<!-- data-field-flags attribute contains flags among read_only/hidden/mandatory/must_prompt/must_change -->
<div class="form_field" data-field-id="first_name" data-field-flags="read_only">
<deny/>
</portal>
</portals>
<module_designs>
<module_design id="itop-portal" xsi:type="portal" _delta="define">
<properties>
<name>portal:itop-portal</name>
<!-- Can be either a fileref or a relative path to the file (To be tested). Takes over env-xxx/branding/portal-logo.png -->
<!-- Priority order is <logo> from xml > env-xxx/branding/portal-logo.png > /images/logo-itop-dark-bg.svg -->
<!--<fileref ref="brt_6a2be154b2a62659d3332c513bdad715" />-->
<!--<logo>../images/itop-logo.png</logo>-->
<!-- Can be either a fileref or a relative path to the file from /env-xxx (eg. itop-portal-base/mystyle.css) -->
<!-- Available themes must have a unique id. Some ids are loaded in a specific order : bootstrap/portal/custom. Other ids are loaded after them, but their order cannot be predicted -->
<themes/>
<!-- Can be either a fileref or a relative path to the file from /env-xxx (eg. itop-portal-base/mytemplate.html.twig) -->
<!-- Available templates are id="layout|home" -->
<templates/>
<!-- Class used for generating objects view/edit urls (eg. in linked sets). -->
<!-- Note: Notification placeholders are NOT using this but the "DBObject::RegisterURLMakerClass(<PORTAL_ID>, <CLASS_NAME>)" declarations. -->
<urlmaker_class>iTopPortalViewUrlMaker</urlmaker_class>
<!-- An OQL query to determine which TriggerOnPortalUpdate to use within THIS instance of the portal. This is mostly needed to enable different triggers on several portal instances -->
<!-- Note : ":parent_classes" parameter is a reserved name that will be used for the current object class name (and its ancestors) -->
<triggers_query><![CDATA[SELECT TriggerOnPortalUpdate AS t WHERE t.target_class IN (:parent_classes)]]></triggers_query>
<attachments>
<allow_delete>true</allow_delete>
</attachments>
<allowed_portals>
<!-- Defines how other portals -allowed for the current user- will be opened. "tab" for a new tab, "self" for the current window -->
<opening_mode>tab</opening_mode>
</allowed_portals>
</properties>
<classes>
<class id="User" _delta="define">
<!-- Allow <allowed_profile>s to apply the <transition>s below. Flags on <field>s will be merged with those from datamodel -->
<!-- See example in UserRequest class -->
<!--<lifecycle/>-->
<scopes>
<!-- Note : Silos apply to those scope queries -->
<scope id="all">
<oql_view><![CDATA[SELECT User AS U JOIN Person AS P ON U.contactid=P.id WHERE P.id = :current_contact_id]]></oql_view>
<!-- No object of this class can be edited -->
<!--<oql_edit />-->
<!-- Everybody -->
<!--<allowed_profiles />-->
</scope>
</scopes>
</class>
<class id="Organization" _delta="define">
<scopes>
<scope id="all">
<oql_view><![CDATA[SELECT Organization WHERE id = :current_contact->org_id]]></oql_view>
</scope>
</scopes>
</class>
<class id="Location" _delta="define">
<scopes>
<scope id="all">
<oql_view><![CDATA[SELECT Location WHERE org_id = :current_contact->org_id]]></oql_view>
</scope>
</scopes>
</class>
<class id="Contact" _delta="define">
<scopes>
<scope id="all">
<oql_view><![CDATA[SELECT Contact WHERE org_id = :current_contact->org_id]]></oql_view>
</scope>
<scope id="admin">
<oql_view><![CDATA[SELECT Contact]]></oql_view>
<allowed_profiles>
<allowed_profile id="Administrator"/>
</allowed_profiles>
</scope>
</scopes>
<lists>
<list id="default">
<items>
<item id="status">
<rank>10</rank>
</item>
<item id="org_id">
<rank>20</rank>
</item>
<item id="function">
<rank>50</rank>
</item>
</items>
</list>
</lists>
</class>
</classes>
<bricks>
<brick id="user-profile" xsi:type="Combodo\iTop\Portal\Brick\UserProfileBrick">
<rank>
<!-- Can be either a <default> tag for both home page and navigation menu or distinct <home> or/and <navigation_menu> tags-->
<default>1</default>
</rank>
<title>
<!-- Can be either a <default> tag for both home page and navigation menu or distinct <home> or/and <navigation_menu> tags-->
<default>Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil</default>
</title>
<decoration_class>
<default>fas fa-user fa-2x</default>
</decoration_class>
<!-- Show / hide some of the user profile forms by setting the tag value to true|false -->
<!--<show_picture_form>true</show_picture_form>-->
<!--<show_preferences_form>true</show_preferences_form>-->
<!--<show_password_form>true</show_password_form>-->
<form>
<!-- Optional tag to list the fields. If empty only fields from <twig> tag will be displayed, if omitted fields from zlist details will. -->
<fields/>
<!-- Optional tag to specify the form layout. Fields that are not positioned in the layout will be placed at the end of the form -->
<twig>
<!-- data-field-id attribute must be an attribute code of the class -->
<!-- data-field-flags attribute contains flags among read_only/hidden/mandatory/must_prompt/must_change -->
<div class="form_field" data-field-id="first_name" data-field-flags="read_only">
</div>
<div class="form_field" data-field-id="name" data-field-flags="read_only">
<div class="form_field" data-field-id="name" data-field-flags="read_only">
</div>
<div class="form_field" data-field-id="org_id" data-field-flags="read_only">
<div class="form_field" data-field-id="org_id" data-field-flags="read_only">
</div>
<div class="form_field" data-field-id="email" data-field-flags="read_only">
<div class="form_field" data-field-id="email" data-field-flags="read_only">
</div>
<div class="form_field" data-field-id="phone">
<div class="form_field" data-field-id="phone">
</div>
<div class="form_field" data-field-id="location_id">
<div class="form_field" data-field-id="location_id">
</div>
<div class="form_field" data-field-id="function">
<div class="form_field" data-field-id="function">
</div>
<div class="form_field" data-field-id="manager_id" data-field-flags="read_only">
<div class="form_field" data-field-id="manager_id" data-field-flags="read_only">
</div>
</twig>
</form>
</brick>
</bricks>
</twig>
</form>
</brick>
</bricks>
<navigation_rules>
<!-- Close form (either the modal or the whole page) -->
<navigation_rule id="close-form" xsi:type="close" _delta="define"/>
<!-- Go to the homepage -->
<navigation_rule id="go-to-homepage" xsi:type="go-to-homepage" _delta="define"/>
</navigation_rules>
</module_design>
</module_designs>
</module_design>
</module_designs>
<module_parameters>
<parameters id="itop-portal" _delta="define">
<lazy_loading_threshold>500</lazy_loading_threshold><!-- Will be placed in the conf/<env>/config-itop.php file under the itop-portal module's settings -->
<lazy_loading_threshold>500</lazy_loading_threshold>
<!-- Will be placed in the conf/<env>/config-itop.php file under the itop-portal module's settings -->
</parameters>
</module_parameters>
</itop_design>

View File

@@ -167,8 +167,8 @@
<class id="QueryOQL"/>
<!-- SynchroData group -->
<class id="SynchroDataSource"/>
<class id="SynchroAttribute"/>
<class id="SynchroReplica"/>
<class id="SynchroAttribute"/>
<class id="SynchroReplica"/>
</classes>
</group>
</groups>

View File

@@ -100,6 +100,7 @@
<count_max>0</count_max>
<ext_key_to_remote>contact_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="documents_list" xsi:type="AttributeLinkedSetIndirect">
<linked_class>lnkContractToDocument</linked_class>
@@ -108,6 +109,7 @@
<count_max>0</count_max>
<ext_key_to_remote>document_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="description" xsi:type="AttributeText">
<sql>description</sql>
@@ -193,8 +195,7 @@
</fields>
<methods>
<method id="PrefillSearchForm">
<code>
<![CDATA[
<code><![CDATA[
public function PrefillSearchForm(&$aContextParam)
{
if($aContextParam['dest_class'] == 'Service' || is_subclass_of($aContextParam['dest_class'], 'Service'))
@@ -217,8 +218,7 @@ public function PrefillSearchForm(&$aContextParam)
}
}
}
]]>
</code>
]]></code>
</method>
</methods>
<presentation>
@@ -432,6 +432,7 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>service_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="functionalcis_list" xsi:type="AttributeLinkedSetIndirect">
<linked_class>lnkCustomerContractToFunctionalCI</linked_class>
@@ -440,6 +441,7 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>functionalci_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="providercontracts_list" xsi:type="AttributeLinkedSetIndirect">
<linked_class>lnkCustomerContractToProviderContract</linked_class>
@@ -448,6 +450,7 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>providercontract_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -606,6 +609,7 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>functionalci_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="sla" xsi:type="AttributeString">
<sql>sla</sql>
@@ -958,10 +962,12 @@ public function PrefillSearchForm(&$aContextParam)
<field id="services_list" xsi:type="AttributeLinkedSet">
<linked_class>Service</linked_class>
<ext_key_to_me>servicefamily_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<duplicates/>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -1069,6 +1075,7 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>document_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="contacts_list" xsi:type="AttributeLinkedSetIndirect">
<linked_class>lnkContactToService</linked_class>
@@ -1077,6 +1084,7 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>contact_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="status" xsi:type="AttributeEnum">
<values>
@@ -1110,14 +1118,17 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>customercontract_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="servicesubcategories_list" xsi:type="AttributeLinkedSet">
<linked_class>ServiceSubcategory</linked_class>
<ext_key_to_me>service_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<duplicates/>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -1587,6 +1598,7 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>slt_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="customercontracts_list" xsi:type="AttributeLinkedSetIndirect">
<linked_class>lnkCustomerContractToService</linked_class>
@@ -1595,13 +1607,14 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>customercontract_id</ext_key_to_remote>
<duplicates>true</duplicates>
<read_only>false</read_only>
</field>
</fields>
<methods>
<method id="DoCheckToWrite">
<static>false</static>
<access>public</access>
<code><![CDATA[
<method id="DoCheckToWrite">
<static>false</static>
<access>public</access>
<code><![CDATA[
public function DoCheckToWrite()
{
parent::DoCheckToWrite();
@@ -1628,7 +1641,7 @@ public function PrefillSearchForm(&$aContextParam)
}
}
]]></code>
</method>
</method>
</methods>
<presentation>
<details>
@@ -2279,14 +2292,17 @@ public function PrefillSearchForm(&$aContextParam)
<count_max>0</count_max>
<ext_key_to_remote>contact_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="customers_list" xsi:type="AttributeLinkedSet">
<linked_class>Organization</linked_class>
<ext_key_to_me>deliverymodel_id</ext_key_to_me>
<edit_mode>add_remove</edit_mode>
<legacy_edit_mode>add_remove</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<duplicates/>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -2479,9 +2495,9 @@ public function PrefillSearchForm(&$aContextParam)
<menus>
<menu id="ServiceManagement" xsi:type="MenuGroup" _delta="define">
<rank>60</rank>
<style>
<decoration_classes>fas fa-hands-helping</decoration_classes>
</style>
<style>
<decoration_classes>fas fa-hands-helping</decoration_classes>
</style>
</menu>
<menu id="Service:Overview" xsi:type="DashboardMenuNode" _delta="define">
<rank>0</rank>

View File

@@ -30,10 +30,12 @@
<field id="logicalvolume_list" xsi:type="AttributeLinkedSet">
<linked_class>LogicalVolume</linked_class>
<ext_key_to_me>storagesystem_id</ext_key_to_me>
<edit_mode>in_place</edit_mode>
<legacy_edit_mode>in_place</legacy_edit_mode>
<tracking_level>all</tracking_level>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>property</relation_type>
<read_only>false</read_only>
</field>
</fields>
<presentation>
@@ -285,6 +287,7 @@
<count_max>0</count_max>
<ext_key_to_remote>datacenterdevice_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
</fields>
<presentation>
@@ -529,10 +532,12 @@
<field id="tapes_list" xsi:type="AttributeLinkedSet">
<linked_class>Tape</linked_class>
<ext_key_to_me>tapelibrary_id</ext_key_to_me>
<edit_mode>in_place</edit_mode>
<legacy_edit_mode>in_place</legacy_edit_mode>
<tracking_level>all</tracking_level>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>property</relation_type>
<read_only>false</read_only>
</field>
</fields>
<presentation>
@@ -777,10 +782,12 @@
<field id="nasfilesystem_list" xsi:type="AttributeLinkedSet">
<linked_class>NASFileSystem</linked_class>
<ext_key_to_me>nas_id</ext_key_to_me>
<edit_mode>in_place</edit_mode>
<legacy_edit_mode>in_place</legacy_edit_mode>
<tracking_level>all</tracking_level>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>property</relation_type>
<read_only>false</read_only>
</field>
</fields>
<presentation>
@@ -1381,6 +1388,7 @@
<count_max>0</count_max>
<ext_key_to_remote>server_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
<field id="virtualdevices_list" xsi:type="AttributeLinkedSetIndirect">
<linked_class>lnkVirtualDeviceToVolume</linked_class>
@@ -1389,6 +1397,7 @@
<count_max>0</count_max>
<ext_key_to_remote>virtualdevice_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
</fields>
<presentation>

View File

@@ -282,9 +282,11 @@
<field id="person_list" xsi:type="AttributeLinkedSet">
<linked_class>Person</linked_class>
<ext_key_to_me>location_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -674,6 +676,7 @@
<count_max>0</count_max>
<ext_key_to_remote>team_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
</fields>
<methods>
@@ -921,6 +924,7 @@
<count_max>0</count_max>
<ext_key_to_remote>person_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -1882,11 +1886,11 @@
</theme>
</themes>
<themes_common>
<variables>
<variables>
</variables>
<imports>
<imports>
</imports>
<stylesheets>
<stylesheets>
</stylesheets>
</themes_common>
</branding>
@@ -1897,4 +1901,4 @@
</profiles>
</user_rights>
<constants/>
</itop_design>
</itop_design>

File diff suppressed because it is too large Load Diff

View File

@@ -16,7 +16,7 @@
</attributes>
</naming>
<fields_semantic>
<state_attribute>status</state_attribute>
<state_attribute>status</state_attribute>
</fields_semantic>
<style>
<icon/>
@@ -61,6 +61,7 @@
<count_max>0</count_max>
<ext_key_to_remote>volume_id</ext_key_to_remote>
<duplicates/>
<read_only>false</read_only>
</field>
</fields>
<methods/>
@@ -169,9 +170,11 @@
<field id="virtualmachine_list" xsi:type="AttributeLinkedSet">
<linked_class>VirtualMachine</linked_class>
<ext_key_to_me>virtualhost_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
</fields>
<presentation>
@@ -437,9 +440,11 @@
<field id="hypervisor_list" xsi:type="AttributeLinkedSet">
<linked_class>Hypervisor</linked_class>
<ext_key_to_me>farm_id</ext_key_to_me>
<edit_mode>add_only</edit_mode>
<legacy_edit_mode>add_only</legacy_edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>link</relation_type>
<read_only>false</read_only>
</field>
<field id="redundancy" xsi:type="AttributeRedundancySettings">
<sql>redundancy</sql>
@@ -626,10 +631,12 @@
<field id="logicalinterface_list" xsi:type="AttributeLinkedSet">
<linked_class>LogicalInterface</linked_class>
<ext_key_to_me>virtualmachine_id</ext_key_to_me>
<edit_mode>in_place</edit_mode>
<legacy_edit_mode>in_place</legacy_edit_mode>
<tracking_level>all</tracking_level>
<count_min>0</count_min>
<count_max>0</count_max>
<relation_type>property</relation_type>
<read_only>false</read_only>
</field>
<field id="managementip" xsi:type="AttributeIPAddress">
<sql>managementip</sql>
@@ -905,7 +912,7 @@
<dashlet id="38" xsi:type="DashletHeaderStatic">
<rank>0</rank>
<title>Menu:ConfigManagement:virtualization</title>
<icon>../images/icons/icons8-old-vmware-logo.svg</icon>
<icon>../images/icons/icons8-old-vmware-logo.svg</icon>
</dashlet>
<dashlet id="39" xsi:type="DashletBadge">
<rank>1</rank>

View File

@@ -11,11 +11,11 @@
<cell id="0">
<rank>0</rank>
<dashlets>
<dashlet id="1" xsi:type="DashletHeaderStatic">
<rank>0</rank>
<title>Menu:ConfigManagementCI</title>
<icon>../images/icons/icons8-database.svg</icon>
</dashlet>
<dashlet id="1" xsi:type="DashletHeaderStatic">
<rank>0</rank>
<title>Menu:ConfigManagementCI</title>
<icon>../images/icons/icons8-database.svg</icon>
</dashlet>
<dashlet id="4" xsi:type="DashletBadge">
<rank>3</rank>
<class>Contact</class>