37 if ( empty($this->piwik_server_uri) || empty($this->piwik_admin_token))
return false;
40 'title' => _(
"Piwik statistics"),
41 'ico' =>
'images/piwik.png',
45 array(
'txt' => _(
"Piwik Users"),
'url' =>
'piwik_userlist.php'),
46 array(
'txt' => _(
"Piwik Sites"),
'url' =>
'piwik_sitelist.php'),
57 $this->piwik_server_uri=
variable_get(
'piwik_server_uri',null,
'Remote Piwik server uri');
58 $this->piwik_admin_token=
variable_get(
'piwik_admin_token',null,
'Remote Piwik super-admin token');
80 $db->query(
"SELECT COUNT(id) AS nb FROM piwik_users WHERE uid='$cuid'");
81 $q=Array(
"name"=>
"piwik",
"description"=>_(
"Statistics through Piwik accounts"),
"used"=>0);
82 if ($db->next_record()) {
83 $q[
'used']=$db->f(
'nb');
99 function user_add($user_login, $user_mail = null) {
105 $user_mail = $user_mail ? $user_mail : $mem->user[
'mail'];
107 $user_alias = $user_login;
109 $api_data = $this->
call_privileged_page(
'API',
'UsersManager.addUser', array(
'userLogin' => $user_login,
'password' => $user_pass,
'email' => $user_mail,
'alias' => $user_alias),
'JSON');
111 if ($api_data->result ===
'success') {
113 $user_creation_date =
$user->date_registered;
114 return $db->query(
"INSERT INTO piwik_users (uid, login, created_date) VALUES ('$cuid', '$user_login', '$user_creation_date')");
129 return $this->
call_privileged_page(
'API',
'UsersManager.getSitesAccessFromUser', array(
'userLogin' => $user_login));
135 if (!is_numeric($site_id)) {
136 $err->raise(
'piwik',
'site_id must be numeric');
139 if (!in_array($site_id, $this->alternc_sites)) {
140 $err->raise(
'piwik',
"you don't own this piwik website");
144 $api_data = $this->
call_privileged_page(
'API',
'UsersManager.getUsersAccessFromSite', array(
'idSite' => $site_id));
145 if ($api_data !== FALSE) {
146 $api_data = $api_data[0];
147 foreach ($this->alternc_users AS
$key=>
$user) {
148 if (!array_key_exists(
$user, $api_data)) {
149 $api_data->$user =
'noaccess';
158 $api_data = $this->
call_privileged_page(
'API',
'UsersManager.getUser', array(
'userLogin' => $user_login));
170 $db->query(
"SELECT login FROM piwik_users WHERE uid='$cuid'");
171 while ($db->next_record())
181 $db->query(
"SELECT created_date, COUNT(id) AS cnt FROM piwik_users WHERE uid='$cuid' AND login='$piwik_user_login'");
184 if ($db->f(
'cnt') == 1) {
185 $api_data = $this->
call_privileged_page(
'API',
'UsersManager.deleteUser', array(
'userLogin' => $piwik_user_login));
186 if ($api_data->result ==
'success') {
187 return $db->query(
"DELETE FROM piwik_users WHERE uid='$cuid' AND login='$piwik_user_login'");
193 $err->raise(
"piwik", _(
"You are not allowed to delete the statistics of this website"));
201 $db->query(
"SELECT login FROM piwik_users WHERE uid = '$cuid'");
202 if ($db->num_rows() == 0)
205 while ($db->next_record())
206 $users .= ($users !==
'') ?
',' . $db->f(
'login') : $db->f(
'login');
207 return $this->
call_privileged_page(
'API',
'UsersManager.getUsers', array(
'userLogins' => $users));
244 foreach ($api_data AS $site) {
246 if (!in_array($site->idsite, $this->alternc_sites))
249 $item =
new stdClass();
251 $item->id = $site->idsite;
252 $item->name = $site->name;
253 $item->main_url = $site->main_url;
255 $user_data = $this->
call_privileged_page(
'API',
'UsersManager.getUsersAccessFromSite', array(
'idSite' => $site->idsite));
260 $item->rights = $user_data[0];
271 return $this->
call_privileged_page(
'API',
'SitesManager.getJavascriptTag', array(
'idSite' => $site_id,
'piwikUrl' => $this->piwik_server_uri))->value;
278 $db->query(
"SELECT piwik_id AS site_id FROM piwik_sites WHERE uid='$cuid'");
279 while ($db->next_record())
291 function site_add($siteName, $urls, $ecommerce = FALSE) {
292 $urls = is_array($urls) ? implode(
',', $urls) : $urls;
293 $api_data = $this->
call_privileged_page(
'API',
'SitesManager.addSite', array(
'siteName' => $siteName,
'urls' => $urls));
304 $db->query(
"SELECT COUNT(id) AS cnt FROM piwik_sites WHERE uid='$cuid' AND piwik_id='$site_id'");
307 if ($db->f(
'cnt') == 1) {
308 $api_data = $this->
call_privileged_page(
'API',
'SitesManager.deleteSite', array(
'idSite' => $site_id));
310 if ($api_data->result ==
'success') {
311 return $db->query(
"DELETE FROM piwik_sites where uid='$cuid' AND piwik_id='$site_id' LIMIT 1");
316 $err->raise(
"piwik", _(
"You are not allowed to delete the statistics of this website"));
327 if (!in_array($right, array(
'noaccess',
'view',
'admin')))
329 $api_data = $this->
call_privileged_page(
'API',
'UsersManager.setUserAccess', array(
'userLogin' => $login,
'access' => $right,
'idSites' => $site_id));
330 if ($api_data->result ==
'success') {
333 $err->raise(
'piwik', $api_data->messsage);
348 return mysql_real_escape_string(trim(
$username));
358 function call_page($module, $method, $arguments=array(), $output =
'JSON') {
360 $url = sprintf(
'%s/?module=%s&method=%s&format=%s', $this->piwik_server_uri, $module, $method, $output);
361 foreach ($arguments AS $k=>$v)
362 $url .= sprintf(
'&%s=%s', urlencode($k), $v);
364 $page_content = file_get_contents($url);
365 if ($page_content === FALSE) {
366 $err->raise(
"piwik", _(
"Unable to reach the API"));
369 if ($output ==
'JSON') {
370 $api_data = json_decode($page_content);
371 if ($api_data === FALSE) {
372 $err->raise(
"piwik", _(
"Error while decoding response from the API"));
378 $err->raise(
"piwik", _(
"Other format than JSON is not implemented yet"));
386 return $this->
call_page($module, $method, $arguments, $output);