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($params){ $file_content = null; extract($params); // On formatte le numéro de téléphone $phone_number = Database::formatNumber($phone_number); /* [1] On parse/récupère le xml =========================================================*/ $xml = simplexml_load_string($file_content); // Si le format XML n'est pas bon, on retourne une erreur if( $xml === false ) return array('ModuleError' => ManagerError::ParsingFailed); /* [2] On lit chaque élément =========================================================*/ $phone_directory = array(); // Contiendra les correspondances num->Nom $phone_logs = array(); // Contiendra nos logs (appels/sms) foreach($xml->Item as $log){ /* (1) On formatte le numéro */ $number = Database::formatNumber($log['Number']); /* (2) On enregistre le contact dans l'annuaire s'il y est pas déjà */ if( !isset($phone_directory[$number]) ) $phone_directory[$number] = strlen($log['Name']) ? (string) $log['Name'] : null; /* (3) On complète le log */ $phone_log = array( 'source' => ($log['Direction']=='INCOMING') ? $number : Database::formatNumber($phone_number), 'target' => ($log['Direction']=='INCOMING') ? Database::formatNumber($phone_number) : $number, 'type' => strtolower($log['Type']), 'date' => strtotime($log['Date']), 'duration' => (int) $log['Duration'] ); array_push($phone_logs, $phone_log); } /* [5] Gestion du retour =========================================================*/ return array( 'ModuleError' => ManagerError::Success, 'directory' => $phone_directory, 'logs' => $phone_logs ); } /* DESERIALISATION D'UN JOURNAL D'APPEL * * @content 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 * */ private static function unserializeOld($params){ $filecontent = null; extract($params); /* [2] On recupere le xml =========================================================*/ $xml = simplexml_load_string($filecontent); // Si le format XML n'est pas bon, on retourne une erreur if( $xml === false ) return array('ModuleError' => ManagerError::ParsingFailed); return array( 'ModuleError' => ManagerError::Success, 'xml' => $xml ); /* [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 ); } } ?>