Le contenu du journal d'appel a deserialiser * * @return sms Retourne un tableau associatif contenant les sms triees * @return call Retourne un tableau associatif contenant les appels triees * @return contact Retourne un tableau associatif contenant les correspondances numero/nom de contact * */ public static function unserialize($content=null){ /* [2] On recupere le xml =========================================================*/ $xml = simplexml_load_string($content); // Si le format XML n'est pas bon, on retourne une erreur if( $xml === false ) return array('ModuleError' => ManagerError::ParsingFailed); /* [3] Initialisation des variables =========================================================*/ $names = array(); // Contiendra les correspondances numero/contact $msms = array(); // Contiendra les personnes utilisant SMS/MMS $call = array(); // Contiendra les personnes utilisant CALL /* [4] On traite les donnees pour chaque champ du xml =========================================================*/ foreach($xml->Item as $log){ // On recupere le numero en string $num = (string) $log['Number']; // On formatte le numero if( preg_match("/^(?:\+33|33|0)(.+)/", $num, $m) ) $num = '0'.$m[1]; // Si pas un numero, on sort de la boucle else continue; /* (1) Si le type est MMS ou SMS */ if( $log['Type'] == 'SMS' || $log['Type'] == 'MMS' ){ // Si la personne n'est pas referencee, on l'ajoute // Sinon on incremente son nombre d'apparition if( isset($msms[$num]) ) $msms[$num]+= 1; else $msms[$num] = 1; // On enregistre le nom si c'est pas fait if( !isset($names[$num]) ) $names[$num] = $log['Name']; /* (2) Si le type est PHONE */ }else if( $log['Type'] == 'PHONE' ){ // Si la personne n'est pas referencee, on l'ajoute // Sinon on incremente son nombre d'apparition if( isset($call[$num]) ) $call[$num]+= 1; else $call[$num] = 1; // On enregistre le nom si c'est pas fait if( !isset($names[$num]) ) $names[$num] = $log['Name']; } } /* [4] On trie par nombre d'interactions (sms/appel) =========================================================*/ $tmp = $msms; /* (1) Tri des SMS/MMS */ $sortedMSMS = array(); // On fait le tri pour les 10 premiers elements sauf s'il en a moins for( $i = 0 ; $i < 10 && $i < count($tmp) ; $i++ ){ $maxval = max($tmp); $maxkey = array_search($maxval, $tmp); array_push( $sortedMSMS, array($maxkey, $maxval) ); unset($tmp[$maxkey]); } $tmp = $call; /* (2) Tri des appels */ $sortedCALL = array(); // On fait le tri pour les 10 premiers elements sauf s'il en a moins for( $i = 0 ; $i < 10 && $i < count($tmp) ; $i++ ){ $maxval = max($tmp); $maxkey = array_search($maxval, $tmp); array_push( $sortedCALL, array($maxkey, $maxval) ); unset($tmp[$maxkey]); } /* [5] Gestion du retour =========================================================*/ return array( 'ModuleError' => ManagerError::Success, 'sms' => $sortedMSMS, 'call' => $sortedCALL, 'contact' => $names ); } } ?>