125 lines
3.5 KiB
PHP
125 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace manager\module;
|
|
use \manager\Database;
|
|
use \manager\sessionManager;
|
|
use \manager\ManagerError;
|
|
use \manager\Repo;
|
|
|
|
class call_log{
|
|
|
|
|
|
/* DESERIALISATION D'UN JOURNAL D'APPEL
|
|
*
|
|
* @content<String> Le contenu du journal d'appel a deserialiser
|
|
*
|
|
* @return sms<Array> Retourne un tableau associatif contenant les sms triees
|
|
* @return call<Array> Retourne un tableau associatif contenant les appels triees
|
|
* @return contact<Array> 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
|
|
);
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
?>
|