[PLUGINS] +piwik 0.7.0
[lhc/web/clavette_www.git] / www / plugins / spip_piwik_2_0 / piwik_pipelines.php
1 <?php
2 /**
3 * Plugin Piwik
4 *
5 * @package SPIP\Piwik\Pipelines
6 */
7
8 if (!defined("_ECRIRE_INC_VERSION")) return;
9
10 /**
11 * Insertion dans le pipeline insert_head (SPIP)
12 *
13 * Ajout du code de piwik dans le head si configuré comme tel
14 *
15 * @param string $flux
16 * Le contenu de la balise #INSERT_HEAD
17 * @return string $flux
18 * Le contenu de la balise #INSERT_HEAD modifié
19 *
20 */
21 function piwik_insert_head($flux){
22 $options = array();
23
24 if(!function_exists('lire_config'))
25 include_spip('inc/config');
26
27 if(lire_config('piwik/mode_insertion') == 'pipeline'){
28 $options['type'] = 'public';
29 $flux .= piwik_head_js($options);
30 }
31
32 return $flux;
33 }
34
35 /**
36 * Insertion dans le pipeline header_prive (SPIP)
37 *
38 * Insertion du code de Piwik dans l'espace privé si configuré comme tel
39 *
40 * @param string $flux
41 * Le contenu du head privé
42 * @return string $flux
43 * Le contenu du head privé modifié
44 */
45 function piwik_header_prive($flux){
46 $options = array();
47
48 if(!function_exists('lire_config'))
49 include_spip('inc/config');
50
51 if(lire_config('piwik/piwik_prive')){
52 if(is_array(lire_config('piwik/restreindre_statut_prive'))){
53 $options['statuts_restreints'] = lire_config('piwik/restreindre_statut_prive');
54 }
55 if(is_array(lire_config('piwik/restreindre_auteurs_prive'))){
56 $options['auteurs_restreints'] = lire_config('piwik/restreindre_auteurs_prive');
57 }
58 $options['type'] = 'prive';
59 $flux .= piwik_head_js($options);
60 }
61 return $flux;
62 }
63
64 /**
65 * La fonction de génération du code du tracker javascript
66 *
67 * @param array $options [optional]
68 *
69 * @return
70 */
71 function piwik_head_js($options=array()){
72 if(!function_exists('lire_config'))
73 include_spip('inc/config');
74
75 $config = lire_config('piwik',array('id_piwik'=>false,'urlpiwik'=>false));
76 $id_piwik = $config['idpiwik'];
77 $url_piwik = $config['urlpiwik'];
78 $conformite_cnil = '';
79 if($config['conformite_cnil']=="on"){
80 $conformite_cnil = '
81 '.recuperer_fond("inc/js-cnil");
82 }
83 $afficher_js = true;
84
85 $ret = '';
86
87 if($url_piwik && $id_piwik){
88 if((isset($options['statut_restreint']) && $options['statut_restreint']) || (isset($options['auteurs_restreints']) && $options['auteurs_restreints'])){
89 $statut = isset($GLOBALS['visiteur_session']['statut']) ? $GLOBALS['visiteur_session']['statut'] : '';
90 $id_auteur = isset($GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['id_auteur'] : '';
91 if(in_array($statut,$options['statuts_restreints'])){
92 $afficher_js = false;
93 }
94 if($afficher_js && in_array($id_auteur,$options['auteurs_restreints'])){
95 $afficher_js = false;
96 }
97 }
98
99 if($afficher_js){
100 $ret .= "
101 <script type='text/javascript'>var _paq = _paq || [];$conformite_cnil
102 (function(){ var u=(('https:' == document.location.protocol) ? 'https://$url_piwik/' : 'http://$url_piwik/');
103 _paq.push(['setSiteId', $id_piwik]);
104 _paq.push(['setTrackerUrl', u+'piwik.php']);
105 _paq.push(['trackPageView']);
106 _paq.push(['enableLinkTracking']);
107 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.defer=true; g.async=true; g.src=u+'piwik.js';
108 s.parentNode.insertBefore(g,s); })();
109 </script>";
110 }
111 }
112
113 return $ret;
114 }
115
116 /**
117 * Insertion dans le pipeline formulaire_verifier (SPIP)
118 * On vérifie les valeurs des champs fournis
119 *
120 * @param array $flux
121 * Le contexte du pipeline
122 * @return array $flux
123 * Le contexte du pipeline modifié auquel on a ajouté nos erreurs potentielles
124 */
125 function piwik_formulaire_verifier($flux){
126 if($flux['args']['form'] == 'configurer_piwik'){
127 $obligatoires = array('token','user','urlpiwik');
128 foreach($obligatoires as $obligatoire){
129 if(!_request($obligatoire)){
130 $flux['data'][$obligatoire] = _T('info_obligatoire');
131 }
132 }
133
134 $piwik_token = _request('token');
135 if (!$flux['data']['token'] && !preg_match('/^[a-f0-9]{32}$/i',$piwik_token)) {
136 $flux['data']['token'] = _T('piwik:cfg_erreur_token');
137 return $flux;
138 }
139 $piwik_url = 'http://'._request('urlpiwik').'/';
140
141 $piwik_recuperer_data = charger_fonction('piwik_recuperer_data','inc');
142
143 /**
144 * Vérifier la correspondance nom d'utilisateur/ token
145 * Qui nous permettra par la suite de définir d'autres choses
146 */
147 $method_verif_user = 'UsersManager.getUser';
148 $options_user = array('userLogin'=>_request('user'));
149 $datas_user = $piwik_recuperer_data($piwik_url,$piwik_token,'',$method_verif_user,'PHP',$options_user);
150 if(is_array($datas_user = unserialize($datas_user))){
151 if(!$flux['data']['user'] && $flux['data']['result'] == 'error'){
152 $flux['data']['user'] = _T('piwik:cfg_erreur_user_token');
153 }
154 /**
155 * Vérifier que ce token est un token admin
156 * Si non : mettre une meta comme quoi il n'est pas admin pour créer des sites
157 */
158 $method_verif_user_bis = 'UsersManager.getUsers';
159 $datas_user_bis = $piwik_recuperer_data($piwik_url,$piwik_token,'',$method_verif_user_bis,'PHP');
160 $datas_user_bis = unserialize($datas_user_bis);
161 if(is_array($datas_user_bis) && ($datas_user_bis['result'] == 'error')){
162 ecrire_meta('piwik_admin', 'non');
163 }else{
164 ecrire_meta('piwik_admin', 'oui');
165 unset($flux['data']['user']);
166 }
167 }
168
169 /**
170 * Récupération de la liste des sites où cet utilisateur
171 * a les droits d'admin
172 */
173 $method = 'SitesManager.getSitesWithAdminAccess';
174 $datas = $piwik_recuperer_data($piwik_url,$piwik_token,'',$method,'PHP');
175 if(!$flux['data']['urlpiwik'] && !is_array(unserialize($datas))){
176 $flux['data']['urlpiwik'] = _T('piwik:cfg_erreur_recuperation_data');
177 }else{
178 ecrire_meta('piwik_sites_dispo', $datas);
179 }
180 }
181 return $flux;
182 }
183 ?>