2017-08-14 6 views
0

En iTop, Comment est-il possible d'enregistrer l'adresse IP de l'appelant dans les billets (User Request et incidents)iTop - Get IP de l'appelant dans les billets

J'ai essayé de modifier datamodel.itop-tickets.xml dans mon extension module. J'ai ajouté un champ nommé 'ip' avec succès mais dans la section <methods> je ne peux pas obtenir l'adresse IP du client en utilisant $_SERVER['REMOTE_ADDR'].

<methods> 
      <method id="DBInsertNoReload" _delta="redefine"> 
       <static>false</static> 
       <access>public</access> 
       <type>Overload-DBObject</type> 
       <code><![CDATA[ 
public function DBInsertNoReload() 
{ 
     $oMutex = new iTopMutex('ticket_insert'); 
     $oMutex->Lock(); 
     $iNextId = MetaModel::GetNextKey(get_class($this)); 
     $sRef = $this->MakeTicketRef($iNextId); 
     $this->Set('ref', $sRef); 
     $iKey = parent::DBInsertNoReload(); 
     $oMutex->Unlock(); 
     return $iKey; 

     $this->Set('ip', $_SERVER['REMOTE_ADDR']); 
} 
    ]]></code> 
      </method>    
     </methods> 

Répondre

0

Après beaucoup de tentatives j'ai finalement trouvé la solution :) Nous devons redéfinir une méthode de type LifeCycleAction et donc je viens redéfinie ComputeImpactedItems méthode dans les deux Inciudent et UserRequest classes.

Pour le rendre beaucoup plus clair que je montre l'un d'eux ici:

<class id="Incident"> 
     <methods> 
       <method id="ComputeImpactedItems" _delta="redefine"> 
         <static>false</static> 
         <access>public</access> 
         <type>LifecycleAction</type> 
         <code><![CDATA[ public function ComputeImpactedItems() 
          { 
           // This method is kept for backward compatibility 
           // in case a delta redefines it, but you may call 
           // UpdateImpactedItems directly 
           $this->UpdateImpactedItems(); 

           // This line is added by this exstension for saving caller's ip 
           $this->Set('ip', $_SERVER['REMOTE_ADDR']); 
          }]]></code> 
       </method> 
     </methods> 
    </class>