Alternc  latest
Alternc logiel libre pour l'hébergement
m_piwik Class Reference

This class manage piwik statistics management through AlternC, using piwik's "API". More...

Public Member Functions

 hook_menu ()
 
 m_piwik ()
 Constructor. More...
 
 hook_admin_del_member ()
 hook called when an AlternC account is deleted More...
 
 hook_quota_get ()
 Returns the used quota for the $name service for the current user. More...
 
 url ()
 
 user_add ($user_login, $user_mail)
 
 user_edit ()
 Change a user @TODO: code this. More...
 
 get_site_access ($user_login)
 
 get_users_access_from_site ($site_id)
 
 get_user ($user_login)
 
 get_alternc_sites ($force=false)
 
 get_alternc_users ()
 
 get_users_url_infos ()
 
 user_has_sites ()
 does this user has piwik websites configured in AlternC ? More...
 
 user_delete ($piwik_user_login)
 Delete a piwik user don't delete it locally unless it has been remotely deleted. More...
 
 users_list ()
 
 user_checkremote ($puser_id)
 
 user_remoteauth ()
 
 user_access ()
 
 site_list ()
 
 site_js_tag ($site_id)
 
 get_site_list ()
 
 site_add ($siteName, $urls, $ecommerce=FALSE)
 
 site_delete ($site_id)
 
 site_set_user_right ($site_id, $login, $right)
 
 site_alias_add ()
 
 clean_user_name ($username)
 return a clean username with a unique prefix per account More...
 
 dev ()
 
 call_page ($module, $method, $arguments=array(), $output='JSON')
 
 call_privileged_page ($module, $method, $arguments=array(), $output='JSON')
 

Public Attributes

 $piwik_server_uri
 
 $piwik_admin_token
 
 $alternc_users
 
 $alternc_sites
 

Detailed Description

This class manage piwik statistics management through AlternC, using piwik's "API".

Definition at line 26 of file m_piwik.php.

Member Function Documentation

◆ call_page()

m_piwik::call_page (   $module,
  $method,
  $arguments = array(),
  $output = 'JSON' 
)
Parameters
string$module
string$method

Definition at line 475 of file m_piwik.php.

475  {
476  global $msg;
477 
478  $msg->debug("piwik","call_page");
479 
480  $url = sprintf('%s/?module=%s&method=%s&format=%s', $this->piwik_server_uri, $module, $method, $output);
481  foreach ($arguments AS $k=>$v)
482  $url .= sprintf('&%s=%s', urlencode($k), $v); // urlencode($v));
483 
484  $page_content = file_get_contents($url);
485  if ($page_content === FALSE) {
486  $msg->raise("ERROR", "piwik", _("Unable to reach the API"));
487  return FALSE;
488  }
489 
490  if ($output == 'JSON') {
491  $api_data = json_decode($page_content);
492  if ($api_data === FALSE) {
493  $msg->raise("ERROR", "piwik", _("Error while decoding response from the API"));
494  return FALSE;
495  }
496 
497  return $api_data;
498  } else {
499  $msg->raise("ERROR", "piwik", _("Other format than JSON is not implemented yet"));
500  return FALSE;
501  }
502  }
$msg
Definition: bootstrap.php:75

References $msg.

Referenced by call_privileged_page().

◆ call_privileged_page()

m_piwik::call_privileged_page (   $module,
  $method,
  $arguments = array(),
  $output = 'JSON' 
)
Parameters
string$module
string$method

Definition at line 509 of file m_piwik.php.

509  {
510  global $msg;
511 
512  $msg->debug("piwik","call_privileged_page");
513 
514  $arguments['token_auth'] = $this->piwik_admin_token;
515  return $this->call_page($module, $method, $arguments, $output);
516  }
$piwik_admin_token
Definition: m_piwik.php:28
call_page($module, $method, $arguments=array(), $output='JSON')
Definition: m_piwik.php:475

References $msg, $piwik_admin_token, and call_page().

Referenced by get_site_access(), get_site_list(), get_user(), get_users_access_from_site(), site_add(), site_delete(), site_js_tag(), site_list(), site_set_user_right(), user_add(), user_delete(), and users_list().

◆ clean_user_name()

m_piwik::clean_user_name (   $username)

return a clean username with a unique prefix per account

Definition at line 457 of file m_piwik.php.

457  {
458  global $admin, $cuid, $db;
459  $escaped_name=$db->quote(trim($username));
460  $escaped_name=preg_replace("/^'(.*)'/", "\\1", $escaped_name);
461  return 'alternc_' . $admin->get_login_by_uid($cuid) . '_' . $escaped_name;
462  }
global $db
Definition: bootstrap.php:26
$cuid
Definition: bootstrap.php:43
global $username
Definition: change.php:59

References $cuid, $db, and $username.

Referenced by user_add().

◆ dev()

m_piwik::dev ( )

Definition at line 465 of file m_piwik.php.

465  {
466  // $this->call_page('module', 'method', array('user' => 'fser', 'pass' => 'toto'));
467  // return $this->users_list();
468  }

◆ get_alternc_sites()

m_piwik::get_alternc_sites (   $force = false)

Definition at line 187 of file m_piwik.php.

187  {
188  global $db, $cuid, $msg;
189 
190  if (!count($this->alternc_sites) || $force) {
191  $db->query("SELECT piwik_id AS site_id FROM piwik_sites WHERE uid= ? ;", array($cuid));
192  while ($db->next_record())
193  $this->alternc_sites[]=$db->f('site_id');
194  }
195  return $this->alternc_sites;
196  }
$alternc_sites
Definition: m_piwik.php:30

References $alternc_sites, $cuid, $db, and $msg.

Referenced by get_users_access_from_site(), site_add(), and site_list().

◆ get_alternc_users()

m_piwik::get_alternc_users ( )

Definition at line 198 of file m_piwik.php.

198  {
199  global $db, $cuid, $msg;
200 
201  if (!count($this->alternc_users)) {
202  $db->query("SELECT login FROM piwik_users WHERE uid= ?;", array($cuid));
203  while ($db->next_record())
204  $this->alternc_users[]=$db->f('login');
205  }
206  return $this->alternc_users;
207  }
$alternc_users
Definition: m_piwik.php:29

References $alternc_users, $cuid, $db, and $msg.

Referenced by get_users_access_from_site().

◆ get_site_access()

m_piwik::get_site_access (   $user_login)

Definition at line 140 of file m_piwik.php.

140  {
141  return $this->call_privileged_page('API', 'UsersManager.getSitesAccessFromUser', array('userLogin' => $user_login));
142  }
call_privileged_page($module, $method, $arguments=array(), $output='JSON')
Definition: m_piwik.php:509

References call_privileged_page().

◆ get_site_list()

m_piwik::get_site_list ( )

Definition at line 366 of file m_piwik.php.

367  {
368  return $this->call_privileged_page('API', 'SitesManager.getAllSites',
369  array('filter_limit' => -1));
370  }

References call_privileged_page().

◆ get_user()

m_piwik::get_user (   $user_login)
Parameters
string$user_login

Definition at line 177 of file m_piwik.php.

177  {
178  $api_data = $this->call_privileged_page('API', 'UsersManager.getUser', array('userLogin' => $user_login));
179 
180  if ($api_data)
181  return $api_data[0];
182  else
183  return FALSE;
184  }

References call_privileged_page().

Referenced by user_add().

◆ get_users_access_from_site()

m_piwik::get_users_access_from_site (   $site_id)

Definition at line 144 of file m_piwik.php.

144  {
145  global $msg, $cuid;
146 
147  $msg->debug("piwik","get_users_access_from_site");
148 
149  $this->get_alternc_sites();
150  $this->get_alternc_users();
151  if (!is_numeric($site_id)) {
152  $msg->raise("ERROR", 'piwik', 'site_id must be numeric');
153  return FALSE;
154  }
155  if (!in_array($site_id, $this->alternc_sites)) {
156  $msg->raise("ERROR", 'piwik', "you don't own this piwik website");
157  return FALSE;
158  }
159 
160  $api_data = $this->call_privileged_page('API', 'UsersManager.getUsersAccessFromSite', array('idSite' => $site_id));
161  if ($api_data !== FALSE) {
162  $api_data = $api_data[0]; // Data is in the first column
163  foreach ($this->alternc_users AS $key=>$user) {
164  if (!array_key_exists($user, $api_data)) {
165  $api_data->$user = 'noaccess';
166  }
167  }
168  return $api_data;
169  }
170  else return FALSE;
171  }
get_alternc_users()
Definition: m_piwik.php:198
get_alternc_sites($force=false)
Definition: m_piwik.php:187
$user
Definition: bootstrap.php:84
if(empty($_POST['key'])||empty($_POST['val'])) $key
Definition: tempovars.php:14

References $cuid, $key, $msg, $user, call_privileged_page(), get_alternc_sites(), and get_alternc_users().

Referenced by get_users_url_infos().

◆ get_users_url_infos()

m_piwik::get_users_url_infos ( )

Definition at line 210 of file m_piwik.php.

210  {
211  global $db,$cuid, $msg;
212  $infos_user = array();
213  $api_calls = array();
214 
215 
216  $db->query("SELECT login, passwd, s.piwik_id as id FROM piwik_users as u INNER JOIN piwik_sites as s on u.uid = s.uid WHERE u.uid = $cuid");
217  while ($db->next_record()) {
218  $id = $db->f('id');
219  $login = $db->f('login');
220 
221  if (!isset($infos_user[$id]))
222  $infos_user[$id] = array();
223 
224  if (!isset($api_calls[$id]))
225  $api_calls[$id] = $this->get_users_access_from_site($id);
226 
227  foreach ($api_calls[$id] as $l => $cred) {
228  if ($l == $login)
229  $infos_user[$id][] = array('login' => $login, 'password' => $db->f('passwd'), 'cred' => $cred);
230  }
231  }
232 
233  return $infos_user;
234  }
get_users_access_from_site($site_id)
Definition: m_piwik.php:144
$login
if(!isset($is_include)) if(! $key &&! $crt) $id

References $cuid, $db, $id, $login, $msg, and get_users_access_from_site().

◆ hook_admin_del_member()

m_piwik::hook_admin_del_member ( )

hook called when an AlternC account is deleted

Definition at line 64 of file m_piwik.php.

64  {
65  //FIXME : implement the hook_admin_del_member for piwik
66  return true;
67  }

◆ hook_menu()

m_piwik::hook_menu ( )

Definition at line 32 of file m_piwik.php.

32  {
33  global $quota;
34  if ( empty($this->piwik_server_uri) || empty($this->piwik_admin_token)) return false;
35 
36  $obj = array(
37  'title' => _("Piwik statistics"),
38  'link' => 'toggle',
39  'pos' => 115,
40  'links' => array(
41  array( 'txt' => _("Piwik Users"), 'url' => 'piwik_userlist.php'),
42  array( 'txt' => _("Piwik Sites"), 'url' => 'piwik_sitelist.php'),
43  ),
44  ) ;
45 
46  return $obj;
47  }

◆ hook_quota_get()

m_piwik::hook_quota_get ( )

Returns the used quota for the $name service for the current user.

Parameters
$namestring name of the quota
Returns
integer the number of service used or false if an error occured @access private

Definition at line 76 of file m_piwik.php.

76  {
77  global $db, $cuid;
78  $db->query("SELECT COUNT(id) AS nb FROM piwik_sites WHERE uid= ? ;", array($cuid));
79  $q=Array("name"=>"piwik", "description"=>_("Statistics through Piwik accounts"), "used"=>0);
80  if ($db->next_record()) {
81  $q['used']=$db->f('nb');
82  }
83  return $q;
84  }
$q
Definition: menu_aws.php:32

References $cuid, $db, and $q.

◆ m_piwik()

m_piwik::m_piwik ( )

Constructor.

Definition at line 53 of file m_piwik.php.

53  {
54  $this->piwik_server_uri=variable_get('piwik_server_uri','','Remote Piwik server uri');
55  $this->piwik_admin_token=variable_get('piwik_admin_token','','Remote Piwik super-admin token');
56  $this->alternc_users=array();
57  $this->alternc_sites=array();
58  }
variable_get($name, $default=null, $createit_comment=null)
Return a persistent variable.
Definition: variables.php:85

References variable_get().

◆ site_add()

m_piwik::site_add (   $siteName,
  $urls,
  $ecommerce = FALSE 
)

Definition at line 373 of file m_piwik.php.

373  {
374  global $db, $cuid, $piwik, $msg;
375 
376  $msg->log("piwik","site_add");
377 
378  $this->get_alternc_sites();
379  $urls = is_array($urls) ? implode(',', $urls) : $urls;
380  $api_data = $this->call_privileged_page('API', 'SitesManager.addSite', array('siteName' => $siteName, 'urls' => $urls));
381 
382  if ($api_data->value) {
383  $id_site = $api_data->value;
384 
385  // Ajout de donner auto les droits de lecture à ce nouvel utilisateur pour le site qu'il a ajouté
386  $userslist = $piwik->users_list();
387  $api_data = $this->call_privileged_page('API', 'UsersManager.setUserAccess', array('userLogin' => $userslist[0]->login, 'idSites' => $id_site, 'access' => 'view'));
388 
389  if ($api_data->result == 'success') {
390  // On enregistre le site dans alternC
391  $db->query("INSERT INTO piwik_sites set uid= ? , piwik_id= ? ", array($cuid, $id_site));
392 
393  // Permet de prendre en compte le site qu'on vient de créer dans la page quis'affiche
394  $this->alternc_sites = $this->get_alternc_sites(true);
395  return TRUE;
396  }
397  return TRUE;
398  } else
399  return FALSE;
400  }
$userslist
Add a piwik account using piwik's API.

References $cuid, $db, $msg, $userslist, call_privileged_page(), and get_alternc_sites().

◆ site_alias_add()

m_piwik::site_alias_add ( )

Definition at line 448 of file m_piwik.php.

448  {
449  // FIXME
450  return true;
451  }

◆ site_delete()

m_piwik::site_delete (   $site_id)

Definition at line 405 of file m_piwik.php.

405  {
406  global $db, $cuid, $msg;
407 
408  $msg->log("piwik","site_delete");
409 
410  $db->query("SELECT COUNT(id) AS cnt FROM piwik_sites WHERE uid= ? AND piwik_id= ? ;", array($cuid, $site_id));
411  $db->next_record();
412 
413  if ($db->f('cnt') == 1) {
414  $api_data = $this->call_privileged_page('API', 'SitesManager.deleteSite', array('idSite' => $site_id));
415  if ($api_data->result == 'success') {
416  return $db->query("DELETE FROM piwik_sites where uid= ? AND piwik_id= ? LIMIT 1", array($cuid, $site_id));
417  } else {
418  return FALSE;
419  }
420  } else {
421  $msg->raise("ERROR", "piwik", _("You are not allowed to delete the statistics of this website"));
422  return FALSE;
423  }
424 
425  return true;
426  }

References $cuid, $db, $msg, and call_privileged_page().

◆ site_js_tag()

m_piwik::site_js_tag (   $site_id)

Definition at line 361 of file m_piwik.php.

361  {
362  return $this->call_privileged_page('API', 'SitesManager.getJavascriptTag', array('idSite' => $site_id, 'piwikUrl' => $this->piwik_server_uri))->value;
363  }

References call_privileged_page().

◆ site_list()

m_piwik::site_list ( )

Definition at line 323 of file m_piwik.php.

323  {
324  global $msg;
325 
326  $msg->debug("piwik","site_list");
327 
328  $this->get_alternc_sites();
329  $api_data = $this->call_privileged_page('API', 'SitesManager.getAllSites',
330  array('filter_limit' => -1));
331  $data = array();
332 
333  if($api_data) {
334  foreach ($api_data AS $site) {
335 
336  if (!in_array($site->idsite, $this->alternc_sites))
337  continue;
338 
339  $item = new stdClass();
340 
341  $item->id = $site->idsite;
342  $item->name = $site->name;
343  $item->main_url = $site->main_url;
344 
345  $user_data = $this->call_privileged_page('API', 'UsersManager.getUsersAccessFromSite', array('idSite' => $site->idsite));
346 
347  //if (is_array($user_data)) {
348  // printvar($user_data);
349  //} else if(is_object($user_data)) {
350  $item->rights = $user_data[0];
351  //}
352 
353  $data[] = $item;
354  }
355  return $data;
356  } else
357  return FALSE;
358  }

References $msg, call_privileged_page(), and get_alternc_sites().

◆ site_set_user_right()

m_piwik::site_set_user_right (   $site_id,
  $login,
  $right 
)

Definition at line 429 of file m_piwik.php.

430  {
431  global $msg;
432 
433  $msg->log("piwik","site_set_user_right");
434 
435  if (!in_array($right, array('noaccess', 'view', 'admin')))
436  return FALSE;
437  $api_data = $this->call_privileged_page('API', 'UsersManager.setUserAccess', array('userLogin' => $login, 'access' => $right, 'idSites' => $site_id));
438  if ($api_data->result == 'success') {
439  return TRUE;
440  } else {
441  $msg->raise("ERROR", 'piwik', $api_data->messsage);
442  return FALSE;
443  }
444  }

References $login, $msg, and call_privileged_page().

◆ url()

m_piwik::url ( )

Definition at line 87 of file m_piwik.php.

87  {
89  }
$piwik_server_uri
Definition: m_piwik.php:27

References $piwik_server_uri.

◆ user_access()

m_piwik::user_access ( )

Definition at line 312 of file m_piwik.php.

312  {
313  // FIXME
314  return true;
315  }

◆ user_add()

m_piwik::user_add (   $user_login,
  $user_mail 
)

Definition at line 96 of file m_piwik.php.

96  {
97  global $db, $mem, $cuid, $msg;
98 
99  $msg->log("piwik","user_add");
100 
101  if (empty($user_login) || is_null($user_login) || empty($user_mail) || is_null($user_mail)) {
102  $msg->raise("ERROR", "piwik", _("All fields are mandatory"));
103  return false;
104  }
105 
106  // Validate the email syntax:
107  if (!filter_var($user_mail, FILTER_VALIDATE_EMAIL)) {
108  $msg->raise("ERROR", "piwik", _("The email you entered is syntaxically incorrect"));
109  return false;
110  }
111 
112  $user_login = $this->clean_user_name($user_login);
113  $user_pass = create_pass();
114  $user_alias = $user_login;
115 
116  $api_data = $this->call_privileged_page('API', 'UsersManager.addUser', array('userLogin' => $user_login, 'password' => $user_pass, 'email' => $user_mail, 'alias' => $user_alias), 'JSON');
117  if ($api_data) {
118  if ($api_data->result === 'success') {
119  $user = $this->get_user($user_login);
120  $user_creation_date = $user->date_registered;
121  $ret_value = $db->query("INSERT INTO piwik_users (uid, passwd, login, created_date) VALUES ( ?, ?, ?, ?);", array($cuid, md5($user_pass), $user_login, $user_creation_date));
122  return $ret_value;
123  } else {
124  $msg->raise("ERROR", "piwik", $api_data->message);
125  return FALSE;
126  }
127  } else { // api_data = false -> error is already filled
128  return FALSE;
129  }
130  }
$mem
Definition: bootstrap.php:71
clean_user_name($username)
return a clean username with a unique prefix per account
Definition: m_piwik.php:457
get_user($user_login)
Definition: m_piwik.php:177
create_pass($length=10, $classcount=3)
Create a password compatible with the password policy.
Definition: functions.php:879

References $cuid, $db, $mem, $msg, $user, call_privileged_page(), clean_user_name(), create_pass(), and get_user().

◆ user_checkremote()

m_piwik::user_checkremote (   $puser_id)

Definition at line 299 of file m_piwik.php.

299  {
300  //FIXME
301  return true;
302  }

◆ user_delete()

m_piwik::user_delete (   $piwik_user_login)

Delete a piwik user don't delete it locally unless it has been remotely deleted.

Definition at line 260 of file m_piwik.php.

260  {
261  global $db, $cuid, $msg;
262 
263  $msg->log("piwik","user_delete");
264 
265  $db->query("SELECT created_date, COUNT(id) AS cnt FROM piwik_users WHERE uid= ? AND login= ? ", array($cuid, $piwik_user_login));
266  $db->next_record();
267 
268  if ($db->f('cnt') == 1) {
269  $api_data = $this->call_privileged_page('API', 'UsersManager.deleteUser', array('userLogin' => $piwik_user_login));
270  if ($api_data->result == 'success') {
271  return $db->query("DELETE FROM piwik_users WHERE uid= ? AND login= ? ;", array($cuid, $piwik_user_login));
272  }
273  else {
274  return FALSE;
275  }
276  } else {
277  $msg->raise("ERROR", "piwik", _("You are not allowed to delete the statistics of this website"));
278  return FALSE;
279  }
280  }

References $cuid, $db, $msg, and call_privileged_page().

◆ user_edit()

m_piwik::user_edit ( )

Change a user @TODO: code this.

Definition at line 136 of file m_piwik.php.

136  {
137  return true;
138  }

◆ user_has_sites()

m_piwik::user_has_sites ( )

does this user has piwik websites configured in AlternC ?

Definition at line 240 of file m_piwik.php.

240  {
241  global $db, $cuid, $msg;
242 
243  $msg->debug("piwik","user_has_sites");
244 
245  $db->query("SELECT id FROM piwik_users WHERE uid='$cuid'");
246  if ($db->num_rows() <= 1) {
247  $db->query("SELECT id FROM piwik_sites WHERE uid='$cuid'");
248  if ($db->num_rows() > 0)
249  return true;
250  }
251 
252  return false;
253  }

References $cuid, $db, and $msg.

◆ user_remoteauth()

m_piwik::user_remoteauth ( )

Definition at line 306 of file m_piwik.php.

306  {
307  //FIXME
308  return true;
309  }

◆ users_list()

m_piwik::users_list ( )

Definition at line 283 of file m_piwik.php.

283  {
284  global $db, $cuid, $msg;
285 
286  $msg->debug("piwik","users_list");
287 
288  $db->query("SELECT login FROM piwik_users WHERE uid = ?;", array($cuid));
289  if ($db->num_rows() == 0)
290  return array();
291  $users = '';
292  while ($db->next_record())
293  $users .= ($users !== '') ? ',' . $db->f('login') : $db->f('login');
294  return $this->call_privileged_page('API', 'UsersManager.getUsers', array('userLogins' => $users));
295  }

References $cuid, $db, $msg, and call_privileged_page().

Member Data Documentation

◆ $alternc_sites

m_piwik::$alternc_sites

Definition at line 30 of file m_piwik.php.

Referenced by get_alternc_sites().

◆ $alternc_users

m_piwik::$alternc_users

Definition at line 29 of file m_piwik.php.

Referenced by get_alternc_users().

◆ $piwik_admin_token

m_piwik::$piwik_admin_token

Definition at line 28 of file m_piwik.php.

Referenced by call_privileged_page().

◆ $piwik_server_uri

m_piwik::$piwik_server_uri

Definition at line 27 of file m_piwik.php.

Referenced by url().


The documentation for this class was generated from the following file: