Snippets

Evgeniy Sokolov lnkSecurityRoleBidirectional for ITOP

Created by Evgeniy Sokolov last modified
    <class id="lnkSecurityRoleBidirectional" _delta="define">
      <parent>cmdbAbstractObject</parent>
      <properties>
        <is_link>1</is_link>
        <category>bizmodel</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>lnksecurityrolebidirectional</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <attributes>
            <attribute id="left_securityrole_id"/>
            <attribute id="right_securityrole_id"/>
          </attributes>
        </naming>
        <display_template/>
        <icon/>
        <reconciliation>
          <attributes>
            <attribute id="left_securityrole_id"/>
            <attribute id="right_securityrole_id"/>
          </attributes>
        </reconciliation>
      </properties>
      <fields>
        <field id="left_securityrole_id" xsi:type="AttributeExternalKey">
          <sql>left_securityrole_id</sql>
          <target_class>SecurityRole</target_class>
          <is_null_allowed>false</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="left_securityrole_name" xsi:type="AttributeExternalField">
          <extkey_attcode>left_securityrole_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="right_securityrole_id" xsi:type="AttributeExternalKey">
          <sql>right_securityrole_id</sql>
          <target_class>SecurityRole</target_class>
          <is_null_allowed>false</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="right_securityrole_name" xsi:type="AttributeExternalField">
          <extkey_attcode>right_securityrole_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
      </fields>
        <methods>
            <method id="DBInsert">
                <comment>/**
                * Placeholder for backward compatibility (iTop &lt;= 2.1.0)
                * in case an extension attempts to redefine this function...     
                */</comment>
                <static>false</static>
                <access>public</access>
                <type>Overload-DBObject</type>
                <code><![CDATA[ public function DBInsert(){
                            $this->DBInsertNoReload();
                            $this->Reload();
                            $oMyClone = clone $this;
                            $mem_left = $oMyClone->Get('left_securityrole_id');
                            $mem_right = $oMyClone->Get('right_securityrole_id');
                            $oMyClone->Set('left_securityrole_id',$mem_right);
                            $oMyClone->Set('right_securityrole_id',$mem_left);
                            $oMyClone->DBInsertNoReload();
                            $oMyClone->Reload();
                            return $this->m_iKey;
                } ]]></code>
            </method>
            <method id="AfterDelete">
                <comment>/**
                * Placeholder for backward compatibility (iTop &lt;= 2.1.0)
                * in case an extension attempts to redefine this function...     
                */</comment>
                <static>false</static>
                <access>protected</access>
                <type>Overload-DBObject</type>
                <code><![CDATA[ protected function AfterDelete(){
                        $mem_left = $this->Get('right_securityrole_id');
                        $mem_right = $this->Get('left_securityrole_id');
                        $oObjectSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT lnkSecurityRoleBidirectional WHERE left_securityrole_id='$mem_left' AND  right_securityrole_id='$mem_right'"));
                        $oObjectSet->Seek(0);
                        while ($oObject = $oObjectSet->Fetch())
                        {
                            $oObject->DBDeleteSingleObject();
                        }
                        return;
                } ]]></code>
            </method>
            
        </methods>

      <presentation>
        <details>
          <items>
            <item id="left_securityrole_id">
              <rank>10</rank>
            </item>
            <item id="right_securityrole_id">
              <rank>20</rank>
            </item>
          </items>
        </details>
        <search>
          <items>
            <item id="left_securityrole_id">
              <rank>10</rank>
            </item>
            <item id="right_securityrole_id">
              <rank>20</rank>
            </item>
          </items>
        </search>
        <list>
          <items>
            <item id="left_securityrole_id">
              <rank>10</rank>
            </item>
            <item id="right_securityrole_id">
              <rank>20</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.