Contenu du dictionnaire, ou FALSE si erreur * */ private static function loadDictionary(){ $dict = ResourceDispatcher::getResource('f/json/dictionary/dy/phone'); $dict = json_decode( $dict, true ); // Si erreur, on retourne false if( is_null($dict) ) return false; return $dict; } /* MODIFIE LES COULEURS DONNEES * * @colors Tableau de couleurs au format hsla * @tint Valeur a ajouter à tint * @constract Valeur a ajouter à constract * @lightness Valeur a ajouter à lightness * @opacity Valeur a ajouter à opacity * * @return darken Copie du tableau d'entrée, mais en plus foncé * */ private static function cFilter($colors, $tint=0, $contrast=0, $lightness=0, $opacity=0){ $darken = $colors; /* [1] Pour chaque couleur =========================================================*/ foreach($colors as $i=>$color){ /* (1) On vérifie que c'est bien au format hsl(tint, saturation%, lightness%, ) */ if( !preg_match('/^hsl\((\d+) ?, ?(\d+)% ?, ?(\d+)%\ ?, ?(\d+?.\d*)\)$/i', $color, $matches) ) continue; $newTint = intval($matches[1]) + $tint; $newContrast = intval($matches[2]) + $contrast; $newLightness = intval($matches[3]) + $lightness; $newOpacity = floatval($matches[4]) + $opacity; $darken[$i] = "hsl($newTint,$newContrast%, $newLightness%, $newOpacity)"; } return $darken; } /* RETOURNE UN JEU DE DONNEES POUR LE SENS DE COMMUNICATION (MANQUE/ENTRANT/SORTANT) * */ public static function direction($params){ extract($params); $subject = intval($subject); /* [1] On récupère les données de ce sujet =========================================================*/ $db = new lightdb('phone_db', __ROOT__.'/src/dynamic/'); $data = $db->fetch($subject); $db->close(); // Si erreur if( $data === false ) return array( 'ModuleError' => ManagerError::ModuleError ); /* [2] On initialise les compteurs =========================================================*/ $labels = array('ENTRANT', 'SORTANT', 'MANQUÉ'); $MISSED = 0; $OUTGOING = 0; $INCOMING = 0; /* [3] S'il a un journal d'appel, on renvoie les données =========================================================*/ if( isset($data['logs']) && is_array($data['logs']) ){ /* (1) On incrémente les compteurs */ foreach($data['logs'] as $log){ /* (2) Si ce n'est pas un appel, on passe au suivant */ if( $log['type'] != 0 ) continue; /* (3) On incrémente les types */ $MISSED += ($log['direction']==2) ? 1 : 0; $OUTGOING += ($log['direction']==1) ? 1 : 0; $INCOMING += ($log['direction']==0) ? 1 : 0; } } /* [4] Gestion des couleurs =========================================================*/ $colors = array(); $colors['default'] = array( 'hsla(347,100%,69%,1)', 'hsla(204,82%,57%,1)', 'hsla(43,100%,67%,1)' ); $colors['hover'] = self::cFilter($colors['default'], 0, 0, -2); return array( 'ModuleError' => ManagerError::Success, 'labels' => $labels, 'datasets' => array(array( 'data' => array($INCOMING, $OUTGOING, $MISSED), 'backgroundColor' => $colors['default'], 'hoverBackgroundColor' => $colors['hover'] )) ); } /* RETOURNE UN JEU DE DONNEES POUR LE TYPE DE COMMUNICATION (APPEL/SMS) * */ public static function type($params){ extract($params); $subject = intval($subject); /* [1] On récupère les données de ce sujet =========================================================*/ $db = new lightdb('phone_db', __ROOT__.'/src/dynamic/'); $data = $db->fetch($subject); $db->close(); // Si erreur if( $data === false ) return array( 'ModuleError' => ManagerError::ModuleError ); /* [2] On initialise les compteurs =========================================================*/ $PHONE = 0; $SMS = 0; /* [2] S'il a un journal d'appel, on renvoie les données =========================================================*/ if( isset($data['logs']) && is_array($data['logs']) ){ /* (1) On incrémente les compteurs */ foreach($data['logs'] as $log){ /* (2) On incrémente les compteurs */ $PHONE += ($log['type']==0) ? 1 : 0; $SMS += ($log['type']==1) ? 1 : 0; } } /* [4] Gestion des couleurs =========================================================*/ $colors = array(); $colors['default'] = array( 'hsla(347,100%,69%,1)', 'hsla(204,82%,57%,1)' ); $colors['hover'] = self::cFilter($colors['default'], 0, 0, -2); return array( 'ModuleError' => ManagerError::Success, 'labels' => array('APPELS', 'SMS'), 'datasets' => array(array( 'data' => array($PHONE, $SMS), 'backgroundColor' => $colors['default'], 'hoverBackgroundColor' => $colors['hover'] )) ); } /* RETOURNE UN JEU DE DONNEES POUR LE SEXE DES COMMUNICATIONS (HOMME/FEMME) * */ public static function sexe($params){ extract($params); $subject = intval($subject); /* [1] On récupère les données de ce sujet =========================================================*/ $db = new lightdb('phone_db', __ROOT__.'/src/dynamic/'); $data = $db->fetch($subject); $db->close(); // Si erreur if( $data === false ) return array( 'ModuleError' => ManagerError::ModuleError ); /* [2] On initialise les compteurs =========================================================*/ $H = 0; $F = 0; /* [3] S'il a un journal d'appel, on renvoie les données =========================================================*/ if( isset($data['logs']) && is_array($data['logs']) ){ /* (1) On incrémente les compteurs */ foreach($data['logs'] as $log){ /* (2) On récupère le contact associé */ $associatedContact = null; foreach($data['contacts'] as $contact) if( $log['id'] == $contact['id'] ) $associatedContact = $contact; // Si on ne trouve pas, on passe au suivant if( is_null($associatedContact) ) continue; /* (3) On incrémente les compteurs */ $H += ($associatedContact['sexe']==0) ? 1 : 0; $F += ($associatedContact['sexe']==1) ? 1 : 0; } } /* [4] Gestion des couleurs =========================================================*/ $colors = array(); $colors['default'] = array( 'hsla(347,100%,69%,1)', 'hsla(204,82%,57%,1)' ); $colors['hover'] = self::cFilter($colors['default'], 0, 0, -2); return array( 'ModuleError' => ManagerError::Success, 'labels' => array('HOMME', 'FEMME'), 'datasets' => array(array( 'data' => array($H, $F), 'backgroundColor' => $colors['default'], 'hoverBackgroundColor' => $colors['hover'] )) ); } /* RETOURNE UN JEU DE DONNEES POUR LES AGES DES COMMUNICATIONS * */ public static function ages($params){ extract($params); $subject = intval($subject); /* [1] On récupère les données de ce sujet =========================================================*/ $db = new lightdb('phone_db', __ROOT__.'/src/dynamic/'); $data = $db->fetch($subject); $db->close(); // Si erreur if( $data === false ) return array( 'ModuleError' => ManagerError::ModuleError ); /* [2] On initialise les valeurs =========================================================*/ /* (1) On initialise les compteurs */ $age_classes = array(); for( $i = 0 ; $i < 18 ; $i++ ) $age_classes[$i] = 0; /* (2) On charge le dictionnaire */ $dict = self::loadDictionary(); if( $dict === false ) return array( 'ModuleError' => ManagerError::ParsingFailed ); /* (2) On initialise les labels */ $labels = array(); foreach($dict['contacts']['age'] as $i=>$label) array_push($labels, $label); /* [3] S'il a un journal d'appel, on renvoie les données =========================================================*/ if( isset($data['logs']) && is_array($data['logs']) ){ /* (2) On incrémente les compteurs */ foreach($data['logs'] as $log){ /* (3) On récupère le contact associé */ $associatedContact = null; foreach($data['contacts'] as $contact) if( $log['id'] == $contact['id'] ) $associatedContact = $contact; // Si on ne trouve pas, on passe au suivant if( is_null($associatedContact) ) continue; /* (4) On incrémente le compteur de la classe d'age en question */ if( isset($age_classes[ $associatedContact['age'] ]) ) $age_classes[ $associatedContact['age'] ]++; } } /* [4] Gestion des couleurs =========================================================*/ $colors = array(); $colors['default'] = array(); $step = (int) (50/count($age_classes)); // Pour chaque classe, on ajoute une couleur for( $i = 0 ; $i < count($age_classes) ; $i++ ) array_push($colors['default'], 'hsl(216,100%,'.(25+(50-$step*$i)).'%)'); $colors['hover'] = self::cFilter($colors['default'], 0, 0, -2); return array( 'ModuleError' => ManagerError::Success, 'labels' => $labels, 'datasets' => array(array( 'data' => $age_classes, 'backgroundColor' => $colors['default'], 'hoverBackgroundColor' => $colors['hover'] )) ); } /* RETOURNE UN JEU DE DONNEES POUR LES TYPES DE RELATION DES COMMUNICATIONS * */ public static function relations($params){ extract($params); $subject = intval($subject); /* [1] On récupère les données de ce sujet =========================================================*/ $db = new lightdb('phone_db', __ROOT__.'/src/dynamic/'); $data = $db->fetch($subject); $db->close(); // Si erreur if( $data === false ) return array( 'ModuleError' => ManagerError::ModuleError ); /* [2] On initialise les valeurs =========================================================*/ /* (1) On initialise les compteurs */ $relations = array(); for( $i = 0 ; $i < 18 ; $i++ ) $relations[$i] = 0; /* (2) On charge le dictionnaire */ $dict = self::loadDictionary(); if( $dict === false ) return array( 'ModuleError' => ManagerError::ParsingFailed ); /* (2) On initialise les labels */ $labels = array(); foreach($dict['contacts']['reltype'] as $i=>$label) array_push($labels, $label); /* [3] S'il a un journal d'appel, on renvoie les données =========================================================*/ if( isset($data['logs']) && is_array($data['logs']) ){ /* (2) On incrémente les compteurs */ foreach($data['logs'] as $log){ /* (3) On récupère le contact associé */ $associatedContact = null; foreach($data['contacts'] as $contact) if( $log['id'] == $contact['id'] ) $associatedContact = $contact; // Si on ne trouve pas, on passe au suivant if( is_null($associatedContact) ) continue; /* (4) On incrémente le compteur de la classe d'age en question */ if( isset($relations[ $associatedContact['reltype'] ]) ) $relations[ $associatedContact['reltype'] ]++; } } /* [4] Gestion des couleurs =========================================================*/ $colors = array(); $colors['default'] = array(); $step = (int) (50/count($relations)); // Pour chaque classe, on ajoute une couleur for( $i = 0 ; $i < count($relations) ; $i++ ) array_push($colors['default'], 'hsla(216,100%,'.(25+(50-$step*$i)).'%,.5)'); $colors['hover'] = self::cFilter($colors['default'], 0, 0, -2); return array( 'ModuleError' => ManagerError::Success, 'labels' => $labels, 'datasets' => array(array( 'data' => $relations, 'backgroundColor' => $colors['default'], 'hoverBackgroundColor' => $colors['hover'], 'borderWidth' => 1, 'borderColor' => 'hsla(216,100%,80%,1)' )) ); } } ?>