Piwik Update 1.8
Cet article présente la mise à jour de Piwik en version 1.8. Sur le site officiel, deux méthodes sont présentées:
- Mise à jour directement depuis l'application.
- Mise à jour par déploiement de la nouvelle version.
Dans tous les cas, il est important de sauvegarder le fichier de configuration config.ini.php
créé lors de l'installation initiale, dans le répertoire config
.
Dans le cadre de cet article, la mise à jour est effectuée manuellement avec le même principe que pour l'installation initiale. Théoriquement, la mise à jour est simple. Cependant il est nécessaire de n'oublier aucune étape.
Sommaire
Votre avis
Nobody voted on this yet
|
|
Téléchargement
L'application est téléchargée, en version 1.8, dans le répertoire /var/opt/piwik
.
#sudo wget -O /var/opt/piwik/piwik-1.8.tar.gz http://builds.piwik.org/piwik-1.8.tar.gz
Installation
L'application va être installée sous /var/opt/piwik
, avec modification de l'emplacement racine pour être 1.8
.
#sudo tar --transform 's/^piwik/1.8/' -C /var/opt/piwik -xzvf /var/opt/piwik/piwik-1.8.tar.gz
Le fichier téléchargé peut être supprimé.
#sudo rm /var/opt/piwik/piwik-1.8.tar.gz
Propriétaire fichiers
L'installation a été réalisée avec le compte root
. Il est préférable de donner la propriété au compte de démarrage du serveur web, soit www-data
dans le cadre de cette installation.
#sudo chown -R www-data:www-data /var/opt/piwik/1.8
Sécurisation
Au niveau de la procédure d'installation, il est indiqué de placer les permissions pour tous les comptes. Cependant, cela présente un problème évident de sécurité. Les droits mis en place seront uniquement pour le compte d'exécution du serveur Web, soit www-data
dans le cadre de cet article.
#sudo chmod -R go-rwx /var/opt/piwik/1.8
Configuration
Sur la procédure de mise à jour officielle, il est recommandée de sauvegarder le fichier de configuration. Du fait de cette procédure de mise à jour, il suffit de copier depuis le précédent emplacement, dans la nouvelle instance.
#sudo cp /var/opt/piwik/1.7.1/config/config.ini.php /var/opt/piwik/1.8/config/config.ini.php #sudo chown www-data:www-data /var/opt/piwik/1.8/config/config.ini.php #sudo cp /var/opt/piwik/1.7.1/config/.htaccess /var/opt/piwik/1.8/config/.htaccess #sudo chown www-data:www-data /var/opt/piwik/1.8/config/.htaccess
Dans le cadre de cette étude, un logo personnalisé avait été mis en place. Il faut donc le recopier dans la nouvelle instance.
#sudo cp /var/opt/piwik/1.7.1/themes/.htaccess /var/opt/piwik/1.8/themes/.htaccess #sudo cp /var/opt/piwik/1.7.1/themes/logo-header.png /var/opt/piwik/1.8/themes/logo-header.png #sudo cp /var/opt/piwik/1.7.1/themes/logo.png /var/opt/piwik/1.8/themes/logo.png #sudo chown www-data:www-data /var/opt/piwik/1.8/themes/.htaccess #sudo chown www-data:www-data /var/opt/piwik/1.8/themes/logo-header.png #sudo chown www-data:www-data /var/opt/piwik/1.8/themes/logo.png
Plugins
Sur la précédente version, des plugins ont été mis en place. Etant référencé dans la base de données, il est impératif que ceux-ci soient de nouveau disponibles dans la nouvelle instance. Il n'est pas nécessaire de les installer de nouveau, mais tout simplement de mettre en place les différents liens. En effet, lors de leur installation, il a été choisi de les externaliser. Trois plugins avaient été mis en place:
Les liens sont donc placés dans le répertoire extensions
de piwik.
#sudo ln -s /var/datas/piwik/extensions/GeoIP /var/opt/piwik/1.8/plugins/GeoIP #sudo chown -h www-data:www-data /var/opt/piwik/1.8/plugins/GeoIP #sudo ln -s /var/datas/piwik/extensions/GeoIPMap /var/opt/piwik/1.8/plugins/GeoIPMap #sudo chown -h www-data:www-data /var/opt/piwik/1.8/plugins/GeoIPMap #sudo ln -s /var/datas/piwik/extensions/UserSettingsExt /var/opt/piwik/1.8/plugins/UserSettingsExt #sudo chown -h www-data:www-data /var/opt/piwik/1.8/plugins/UserSettingsExt
Une restriction d'accès était mise en place dans la précédente version. Celle-ci est reproduite.
#sudo cp /var/opt/piwik/1.7.1/plugins/.htaccess /var/opt/piwik/1.8/plugins/ #sudo chown www-data:www-data /var/opt/piwik/1.8/plugins/.htaccess
Publication sous Apache
Lors de l'installation initiale, la publication sous Apache pointait sur le lien /var/opt/piwik/installed
. Ce principe permet d'activer la nouvelle version rapidement, sans toucher au paramétrage de Apache. Il est juste nécessaire de modifier le répertoire pointé par le lien.
#sudo rm /var/opt/piwik/installed #sudo ln -s /var/opt/piwik/1.8 /var/opt/piwik/installed #sudo chown -h www-data:www-data /var/opt/piwik/installed
Des fichiers ne sont pas nécessaires et donc supprimés.
#sudo rm /var/opt/piwik/1.8/How\ to\ install\ Piwik.html #sudo rm /var/opt/piwik/1.8/piwik/README
Mise à jour base de données
Lors de l'accès suivant à l'application, une fenêtre indique que la base de données doit être mise à jour.

Il est possible de mettre à jour les données en ligne de commande pour les bases volumineuses. En effet, cette mise à jour étant effectuée depuis l'interface, il serait possible d’obtenir un TimeOut d'exécution de la requête HTTP. Dans le cadre de cet article, la mise à jour de la base est effectuée en cliquant sur le bouton Mettez Piwik à jour
. En fin de traitement, un message de confirmation est présenté.

Bug mise à jour base de données
Malgré le message de confirmation, la base de données n'avait pas été mise à jour. Cela est du à l'initialisation du compte d'accès à la base de données, ne permettant pas la mise à jour de la structure de la base.

Heureusement, le message d'erreur présenté permet d'analyser à partir du code source.
QLSTATE[42S22]: Column not found: 1054 Unknown column 'name' in 'field list'
Go to Piwik
Login
Backtrace:
#0 /var/opt/piwik/1.8/libs/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /var/opt/piwik/1.8/libs/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#2 /var/opt/piwik/1.8/libs/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT iddashbo...', Array)
#3 /var/opt/piwik/1.8/core/Db/Adapter/Pdo/Mysql.php(220): Zend_Db_Adapter_Pdo_Abstract->query('SELECT iddashbo...', Array)
#4 /var/opt/piwik/1.8/libs/Zend/Db/Adapter/Abstract.php(736): Piwik_Db_Adapter_Pdo_Mysql->query('SELECT iddashbo...', Array)
#5 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(80): Zend_Db_Adapter_Abstract->fetchAll('SELECT iddashbo...', Array)
#6 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(262): Piwik_Sql::fetchAll('SELECT iddashbo...', Array)
#7 /var/opt/piwik/1.8/plugins/Dashboard/Dashboard.php(42): Piwik_FetchAll('SELECT iddashbo...', Array)
#8 /var/opt/piwik/1.8/plugins/Dashboard/Dashboard.php(77): Piwik_Dashboard::getAllDashboards('etienne')
#9 [internal function]: Piwik_Dashboard->addMenus(Object(Piwik_Event_Notification))
#10 /var/opt/piwik/1.8/libs/Event/Dispatcher.php(284): call_user_func_array(Array, Array)
#11 /var/opt/piwik/1.8/core/PluginsManager.php(633): Event_Dispatcher->postNotification(Object(Piwik_Event_Notification), false, false)
#12 /var/opt/piwik/1.8/core/Menu/Main.php(65): Piwik_PostEvent('Menu.add')
#13 /var/opt/piwik/1.8/core/Menu/Main.php(90): Piwik_Menu_Main->get()
#14 /var/opt/piwik/1.8/plugins/CoreHome/Controller.php(58): Piwik_GetMenu()
#15 /var/opt/piwik/1.8/plugins/CoreHome/Controller.php(92): Piwik_CoreHome_Controller->getDefaultIndexView()
#16 [internal function]: Piwik_CoreHome_Controller->index()
#17 /var/opt/piwik/1.8/core/FrontController.php(138): call_user_func_array(Array, Array)
#18 /var/opt/piwik/1.8/index.php(53): Piwik_FrontController->dispatch()
#19 {main}
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
* @version $Id: Dashboard.php 6253 2012-05-07 19:28:09Z SteveG $
*
* @category Piwik_Plugins
* @package Piwik_Dashboard
*/
/**
* @package Piwik_Dashboard
*/
class Piwik_Dashboard extends Piwik_Plugin
{
public function getInformation()
{
return array(
'description' => Piwik_Translate('Dashboard_PluginDescription'),
'author' => 'Piwik',
'author_homepage' => 'http://piwik.org/',
'version' => Piwik_Version::VERSION,
);
}
public function getListHooksRegistered()
{
return array(
'AssetManager.getJsFiles' => 'getJsFiles',
'AssetManager.getCssFiles' => 'getCssFiles',
'UsersManager.deleteUser' => 'deleteDashboardLayout',
'Menu.add' => 'addMenus',
'TopMenu.add' => 'addTopMenu',
);
}
public static function getAllDashboards($login) {
$dashboards = Piwik_FetchAll('SELECT iddashboard, name
FROM '.Piwik_Common::prefixTable('user_dashboard') .
' WHERE login = ? ORDER BY iddashboard', array($login));
$pos = 0;
$nameless = 1;
foreach ($dashboards AS &$dashboard) {
if (!empty($dashboard['name'])) {
$dashboard['name'] = Piwik_Common::unsanitizeInputValue($dashboard['name']);
} else {
$dashboard['name'] = Piwik_Translate('Dashboard_DashboardOf', $login);
if($nameless > 1) {
$dashboard['name'] .= " ($nameless)";
}
if(empty($dashboard['layout']))
{
$layout = '[]';
}
else
{
$layout = html_entity_decode($dashboard['layout']);
$layout = str_replace("\\\"", "\"", $layout);
}
$dashboard['layout'] = Piwik_Common::json_decode($layout);
$nameless++;
}
$pos++;
}
return $dashboards;
}
public function addMenus()
{
Piwik_AddMenu('Dashboard_Dashboard', '', array('module' => 'Dashboard', 'action' => 'embeddedIndex', 'idDashboard' => 1), true, 5);
if (!Piwik::isUserIsAnonymous()) {
$login = Piwik::getCurrentUserLogin();
$dashboards = self::getAllDashboards($login);
if (count($dashboards) > 1)
{
$pos = 0;
foreach ($dashboards AS $dashboard) {
Piwik_AddMenu('Dashboard_Dashboard', $dashboard['name'], array('module' => 'Dashboard', 'action' => 'embeddedIndex', 'idDashboard' => $dashboard['iddashboard']), true, $pos);
$pos++;
}
}
}
}
public function addTopMenu()
{
Piwik_AddTopMenu('General_Dashboard', array('module' => 'CoreHome', 'action' => 'index'), true, 1);
}
/**
* @param Piwik_Event_Notification $notification notification object
*/
function getJsFiles( $notification )
{
$jsFiles = &$notification->getNotificationObject();
$jsFiles[] = "plugins/Dashboard/templates/widgetMenu.js";
$jsFiles[] = "libs/javascript/json2.js";
$jsFiles[] = "plugins/Dashboard/templates/dashboardObject.js";
$jsFiles[] = "plugins/Dashboard/templates/dashboardWidget.js";
$jsFiles[] = "plugins/Dashboard/templates/dashboard.js";
}
/**
* @param Piwik_Event_Notification $notification notification object
*/
function getCssFiles( $notification )
{
$cssFiles = &$notification->getNotificationObject();
$cssFiles[] = "plugins/CoreHome/templates/datatable.css";
$cssFiles[] = "plugins/Dashboard/templates/dashboard.css";
}
/**
* @param Piwik_Event_Notification $notification notification object
*/
function deleteDashboardLayout($notification)
{
$userLogin = $notification->getNotificationObject();
Piwik_Query('DELETE FROM ' . Piwik_Common::prefixTable('user_dashboard') . ' WHERE login = ?', array($userLogin));
}
public function install()
{
// we catch the exception
try{
$sql = "CREATE TABLE ". Piwik_Common::prefixTable('user_dashboard')." (
login VARCHAR( 100 ) NOT NULL ,
iddashboard INT NOT NULL ,
name VARCHAR( 100 ) NULL DEFAULT NULL ,
layout TEXT NOT NULL,
PRIMARY KEY ( login , iddashboard )
) DEFAULT CHARSET=utf8 " ;
Piwik_Exec($sql);
} catch(Exception $e){
// mysql code error 1050:table already exists
// see bug #153 http://dev.piwik.org/trac/ticket/153
if(!Zend_Registry::get('db')->isErrNo($e, '1050'))
{
throw $e;
}
}
}
public function uninstall()
{
Piwik_DropTables(Piwik_Common::prefixTable('user_dashboard'));
}
}
A ce stade, en regardant la description de la table user_dashboard
, préfixée par la constante définie lors de l'installation soit piwik_user_dashboard
dans le cadre de cette utilisation, il est constaté qu'il manque la colonne name
.
mysql> describe piwik_user_dashboard; +-------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+-------+ | login | varchar(100) | NO | PRI | NULL | | | iddashboard | int(11) | NO | PRI | NULL | | | layout | text | NO | | NULL | | +-------------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
Cela prouve que la mise à jour de la base de données ne s'est pas déroulée correctement. Ces actions vont être réalisées manuellement à posteriori, avec un compte permettant de modifier la structure de la base, par exemple le compte root
de MySql.
Lors des premières tentatives de modification, en passant par le compte d'accès défini, un message d'erreur était affiché, confirmant le manque de droit du compte:
mysql> ALTER TABLE `piwik_pdf` CHANGE `aggregate_reports_format` `display_format` TINYINT(1) NOT NULL;
ERROR 1142 (42000): ALTER command denied to user 'piwik'@'localhost' for table 'piwik_pdf'
Les scripts de mise à jour se situent dans le répertoire core/Updates
, soit /var/opt/piwik/1.8/core/Updates
.
-rw-r--r-- 1 www-data www-data 2168 mai 22 2011 0.2.10.php -rw-r--r-- 1 www-data www-data 905 août 20 2010 0.2.12.php -rw-r--r-- 1 www-data www-data 813 mai 22 2011 0.2.13.php -rw-r--r-- 1 www-data www-data 917 août 20 2010 0.2.24.php -rw-r--r-- 1 www-data www-data 2495 mai 22 2011 0.2.27.php -rw-r--r-- 1 www-data www-data 1022 août 20 2010 0.2.32.php -rw-r--r-- 1 www-data www-data 1074 août 20 2010 0.2.33.php -rw-r--r-- 1 www-data www-data 607 août 20 2010 0.2.34.php -rw-r--r-- 1 www-data www-data 622 août 20 2010 0.2.35.php -rw-r--r-- 1 www-data www-data 678 août 20 2010 0.2.37.php -rw-r--r-- 1 www-data www-data 767 août 20 2010 0.4.1.php -rw-r--r-- 1 www-data www-data 1103 août 20 2010 0.4.2.php -rw-r--r-- 1 www-data www-data 676 août 20 2010 0.4.4.php -rw-r--r-- 1 www-data www-data 1082 août 20 2010 0.4.php -rw-r--r-- 1 www-data www-data 1768 mars 10 04:47 0.5.4.php -rw-r--r-- 1 www-data www-data 1164 août 20 2010 0.5.5.php -rw-r--r-- 1 www-data www-data 1847 août 20 2010 0.5.php -rw-r--r-- 1 www-data www-data 975 août 20 2010 0.6.2.php -rw-r--r-- 1 www-data www-data 1360 mars 10 04:47 0.6.3.php -rw-r--r-- 1 www-data www-data 3535 sept. 25 2010 0.6-rc1.php -rw-r--r-- 1 www-data www-data 626 août 20 2010 0.7.php -rw-r--r-- 1 www-data www-data 1264 août 29 2010 0.9.1.php -rw-r--r-- 1 www-data www-data 768 mars 4 23:04 1.1.php -rw-r--r-- 1 www-data www-data 1032 mars 4 23:04 1.2.3.php -rw-r--r-- 1 www-data www-data 852 avril 4 2011 1.2.5-rc1.php -rw-r--r-- 1 www-data www-data 643 avril 8 2011 1.2.5-rc7.php -rw-r--r-- 1 www-data www-data 6364 mai 20 2011 1.2-rc1.php -rw-r--r-- 1 www-data www-data 482 févr. 15 2011 1.2-rc2.php -rw-r--r-- 1 www-data www-data 738 avril 30 2011 1.4-rc1.php -rw-r--r-- 1 www-data www-data 1434 avril 30 2011 1.4-rc2.php -rw-r--r-- 1 www-data www-data 2165 mai 22 2011 1.5-b1.php -rw-r--r-- 1 www-data www-data 1123 mai 22 2011 1.5-b2.php -rw-r--r-- 1 www-data www-data 2746 mai 22 2011 1.5-b3.php -rw-r--r-- 1 www-data www-data 606 mai 22 2011 1.5-b4.php -rw-r--r-- 1 www-data www-data 732 mai 22 2011 1.5-b5.php -rw-r--r-- 1 www-data www-data 481 juin 4 2011 1.5-rc6.php -rw-r--r-- 1 www-data www-data 3086 sept. 18 2011 1.6-b1.php -rw-r--r-- 1 www-data www-data 477 oct. 14 2011 1.6-rc1.php -rw-r--r-- 1 www-data www-data 691 mars 25 22:04 1.7.2-rc5.php -rwxr-xr-x 1 www-data www-data 1242 avril 1 08:42 1.7.2-rc7.php* -rw-r--r-- 1 www-data www-data 794 nov. 9 2011 1.7-b1.php
La mise à jour étant réalisée depuis une version 1.7.1
, les deux scripts suivants sont analysés et reproduit.
- 1.7.2-rc5.php
- 1.7.2-rc7.php
Fichier 1.7.2-rc5.php
L'analyse de ce fichier montre la modification de la table PREFIX_pdf.
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
* @version $Id: 1.7.2-rc5.php 6113 2012-03-25 20:04:22Z JulienM $
*
* @category Piwik
* @package Updates
*/
/**
* @package Updates
*/
class Piwik_Updates_1_7_2_rc5 extends Piwik_Updates
{
static function getSql($schema = 'Myisam')
{
return array(
'ALTER TABLE `'. Piwik_Common::prefixTable('pdf') .'`
CHANGE `aggregate_reports_format` `display_format` TINYINT(1) NOT NULL' => false
);
}
static function update()
{
try {
Piwik_Updater::updateDatabase(__FILE__, self::getSql());
}
catch(Exception $e){}
}
}
La requête exécutée est donc la suivante:
mysql> ALTER TABLE `piwik_pdf` CHANGE `aggregate_reports_format` `display_format` TINYINT(1) NOT NULL;
Query OK, 0 rows affected (0.07 sec)
La structure de la table était:
mysql> describe piwik_pdf; +--------------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------------+--------------+------+-----+---------+----------------+ | idreport | int(11) | NO | PRI | NULL | auto_increment | | idsite | int(11) | NO | | NULL | | | login | varchar(100) | NO | | NULL | | | description | varchar(255) | NO | | NULL | | | period | varchar(10) | YES | | NULL | | | format | varchar(10) | YES | | NULL | | | aggregate_reports_format | tinyint(1) | NO | | NULL | | | email_me | tinyint(4) | YES | | NULL | | | additional_emails | text | YES | | NULL | | | reports | text | NO | | NULL | | | ts_created | timestamp | YES | | NULL | | | ts_last_sent | timestamp | YES | | NULL | | | deleted | tinyint(4) | NO | | 0 | | +--------------------------+--------------+------+-----+---------+----------------+ 13 rows in set (0.01 sec)
La nouvelle structure est alors:
mysql> describe piwik_pdf; +-------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+----------------+ | idreport | int(11) | NO | PRI | NULL | auto_increment | | idsite | int(11) | NO | | NULL | | | login | varchar(100) | NO | | NULL | | | description | varchar(255) | NO | | NULL | | | period | varchar(10) | YES | | NULL | | | format | varchar(10) | YES | | NULL | | | display_format | tinyint(1) | NO | | NULL | | | email_me | tinyint(4) | YES | | NULL | | | additional_emails | text | YES | | NULL | | | reports | text | NO | | NULL | | | ts_created | timestamp | YES | | NULL | | | ts_last_sent | timestamp | YES | | NULL | | | deleted | tinyint(4) | NO | | 0 | | +-------------------+--------------+------+-----+---------+----------------+ 13 rows in set (0.00 sec)
Fichier Fichier 1.7.2-rc7.php
L'analyse de ce fichier montre la modification de la table PREFIX_user_dashboard.
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
* @version $Id: 1.7.2-rc7.php 6146 2012-04-01 06:42:16Z matt $
*
* @category Piwik
* @package Updates
*/
/**
* @package Updates
*/
class Piwik_Updates_1_7_2_rc7 extends Piwik_Updates
{
static function getSql($schema = 'Myisam')
{
return array(
'ALTER TABLE `'. Piwik_Common::prefixTable('user_dashboard') .'`
ADD `name` VARCHAR( 100 ) NULL DEFAULT NULL AFTER `iddashboard`' => false,
);
}
static function update()
{
try {
$dashboards = Piwik_FetchAll('SELECT * FROM `'. Piwik_Common::prefixTable('user_dashboard') .'`');
foreach($dashboards AS $dashboard) {
$idDashboard = $dashboard['iddashboard'];
$login = $dashboard['login'];
$layout = $dashboard['layout'];
$layout = html_entity_decode($layout);
$layout = str_replace("\\\"", "\"", $layout);
Piwik_Query('UPDATE `'. Piwik_Common::prefixTable('user_dashboard') .'` SET layout = ? WHERE iddashboard = ? AND login = ?', array($layout, $idDashboard, $login));
}
Piwik_Updater::updateDatabase(__FILE__, self::getSql());
}
catch(Exception $e){}
}
}
La requête exécutée est donc la suivante:
mysql> ALTER TABLE `piwik_user_dashboard` ADD `name` VARCHAR( 100 ) NULL DEFAULT NULL AFTER `iddashboard`;
Query OK, 0 rows affected (0.07 sec)
La structure de la table était:
mysql> describe piwik_user_dashboard; +-------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+-------+ | login | varchar(100) | NO | PRI | NULL | | | iddashboard | int(11) | NO | PRI | NULL | | | layout | text | NO | | NULL | | +-------------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
La nouvelle structure est alors:
mysql> describe piwik_user_dashboard; +-------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+-------+ | login | varchar(100) | NO | PRI | NULL | | | iddashboard | int(11) | NO | PRI | NULL | | | name | varchar(100) | YES | | NULL | | | layout | text | NO | | NULL | | +-------------+--------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
La deuxième étape est un peu plus compliquée car il faut mettre à jour les données. La requête suivante est utilisée afin de récupérer les données de la colonne layout
de la table piwik_user_dashboard
. Ces données sont modifiées pour remplacer la chaîne \"
par "
. Or dans le cadre de cette utilisation, cela n'a pas été nécessaire.
Bug widgets
Après la correction de la structure de la base de données, il était possible de se connecter. Cependant des erreurs continuaient d'être affichées sur la page d'accueil de Piwik.

Widget Graphique des dernières visites
Backtrace: #0 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(51): Zend_Db_Adapter_Pdo_Abstract->exec('LOCK TABLES piw...') #1 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(205): Piwik_Sql::exec('LOCK TABLES piw...') #2 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(359): Piwik_Sql::lockTables('piwik_archive_n...', 'piwik_archive_n...') #3 /var/opt/piwik/1.8/core/ArchiveProcessing.php(688): Piwik_LockTables('piwik_archive_n...', 'piwik_archive_n...') #4 /var/opt/piwik/1.8/core/ArchiveProcessing.php(533): Piwik_ArchiveProcessing->loadNextIdarchive() #5 /var/opt/piwik/1.8/core/ArchiveProcessing.php(472): Piwik_ArchiveProcessing->initCompute() #6 /var/opt/piwik/1.8/core/Archive/Single.php(226): Piwik_ArchiveProcessing->launchArchiving() #7 /var/opt/piwik/1.8/core/Archive/Array/IndexedByDate.php(90): Piwik_Archive_Single->prepareArchive() #8 /var/opt/piwik/1.8/plugins/VisitsSummary/API.php(88): Piwik_Archive_Array_IndexedByDate->getDataTableFromNumeric(Array) #9 [internal function]: Piwik_VisitsSummary_API->get('1', 'day', '2012-05-04,2012...', false, 'nb_visits') #10 /var/opt/piwik/1.8/core/API/Proxy.php(190): call_user_func_array(Array, Array) #11 /var/opt/piwik/1.8/plugins/API/API.php(986): Piwik_API_Proxy->call('Piwik_VisitsSum...', 'get', Array) #12 [internal function]: Piwik_API_API->get('1', 'day', '2012-05-04,2012...', false, 'nb_visits') #13 /var/opt/piwik/1.8/core/API/Proxy.php(190): call_user_func_array(Array, Array) #14 /var/opt/piwik/1.8/core/API/Request.php(128): Piwik_API_Proxy->call('Piwik_API_API', 'get', Array) #15 /var/opt/piwik/1.8/core/ViewDataTable.php(421): Piwik_API_Request->process() #16 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphData/ChartEvolution.php(109): Piwik_ViewDataTable->loadDataTableFromAPI() #17 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphData.php(181): Piwik_ViewDataTable_GenerateGraphData_ChartEvolution->loadDataTableFromAPI() #18 /var/opt/piwik/1.8/core/Controller.php(247): Piwik_ViewDataTable_GenerateGraphData->main() #19 /var/opt/piwik/1.8/plugins/VisitsSummary/Controller.php(78): Piwik_Controller->getLastUnitGraphAcrossPlugins('VisitsSummary', 'getEvolutionGra...', Array, Array, 'Ceci est un ape...') #20 [internal function]: Piwik_VisitsSummary_Controller->getEvolutionGraph() #21 /var/opt/piwik/1.8/core/FrontController.php(138): call_user_func_array(Array, Array) #22 /var/opt/piwik/1.8/core/FrontController.php(159): Piwik_FrontController->dispatch('VisitsSummary', 'getEvolutionGra...', Array) #23 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphHTML.php(170): Piwik_FrontController->fetchDispatch('VisitsSummary', 'getEvolutionGra...', Array) #24 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphHTML.php(125): Piwik_ViewDataTable_GenerateGraphHTML->getGraphData() #25 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphHTML.php(109): Piwik_ViewDataTable_GenerateGraphHTML->buildView() #26 /var/opt/piwik/1.8/core/Controller.php(247): Piwik_ViewDataTable_GenerateGraphHTML->main() #27 /var/opt/piwik/1.8/plugins/VisitsSummary/Controller.php(78): Piwik_Controller->getLastUnitGraphAcrossPlugins('VisitsSummary', 'getEvolutionGra...', Array, Array, 'Ceci est un ape...') #28 [internal function]: Piwik_VisitsSummary_Controller->getEvolutionGraph() #29 /var/opt/piwik/1.8/core/FrontController.php(138): call_user_func_array(Array, Array) #30 /var/opt/piwik/1.8/index.php(53): Piwik_FrontController->dispatch() #31 {main}
Widget Système d'exploitation
Backtrace: #0 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(51): Zend_Db_Adapter_Pdo_Abstract->exec('LOCK TABLES piw...') #1 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(205): Piwik_Sql::exec('LOCK TABLES piw...') #2 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(359): Piwik_Sql::lockTables('piwik_archive_n...', 'piwik_archive_n...') #3 /var/opt/piwik/1.8/core/ArchiveProcessing.php(688): Piwik_LockTables('piwik_archive_n...', 'piwik_archive_n...') #4 /var/opt/piwik/1.8/core/ArchiveProcessing.php(533): Piwik_ArchiveProcessing->loadNextIdarchive() #5 /var/opt/piwik/1.8/core/ArchiveProcessing.php(472): Piwik_ArchiveProcessing->initCompute() #6 /var/opt/piwik/1.8/core/Archive/Single.php(226): Piwik_ArchiveProcessing->launchArchiving() #7 /var/opt/piwik/1.8/core/Archive/Single.php(256): Piwik_Archive_Single->prepareArchive() #8 /var/opt/piwik/1.8/core/Archive/Single.php(514): Piwik_Archive_Single->get('UserSettings_os', 'blob', NULL) #9 /var/opt/piwik/1.8/plugins/UserSettings/API.php(40): Piwik_Archive_Single->getDataTable('UserSettings_os') #10 /var/opt/piwik/1.8/plugins/UserSettings/API.php(62): Piwik_UserSettings_API->getDataTable('UserSettings_os', '1', 'day', 'today', false) #11 [internal function]: Piwik_UserSettings_API->getOS('1', 'day', 'today', false, true) #12 /var/opt/piwik/1.8/core/API/Proxy.php(190): call_user_func_array(Array, Array) #13 /var/opt/piwik/1.8/core/API/Request.php(128): Piwik_API_Proxy->call('Piwik_UserSetti...', 'getOS', Array) #14 /var/opt/piwik/1.8/core/ViewDataTable.php(421): Piwik_API_Request->process() #15 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphData.php(181): Piwik_ViewDataTable->loadDataTableFromAPI() #16 /var/opt/piwik/1.8/core/Controller.php(152): Piwik_ViewDataTable_GenerateGraphData->main() #17 /var/opt/piwik/1.8/plugins/UserSettings/Controller.php(75): Piwik_Controller->renderView(Object(Piwik_ViewDataTable_GenerateGraphData_ChartPie), false) #18 [internal function]: Piwik_UserSettings_Controller->getOS() #19 /var/opt/piwik/1.8/core/FrontController.php(138): call_user_func_array(Array, Array) #20 /var/opt/piwik/1.8/core/FrontController.php(159): Piwik_FrontController->dispatch('UserSettings', 'getOS', Array) #21 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphHTML.php(170): Piwik_FrontController->fetchDispatch('UserSettings', 'getOS', Array) #22 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphHTML.php(125): Piwik_ViewDataTable_GenerateGraphHTML->getGraphData() #23 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphHTML.php(109): Piwik_ViewDataTable_GenerateGraphHTML->buildView() #24 /var/opt/piwik/1.8/core/Controller.php(152): Piwik_ViewDataTable_GenerateGraphHTML->main() #25 /var/opt/piwik/1.8/plugins/UserSettings/Controller.php(75): Piwik_Controller->renderView(Object(Piwik_ViewDataTable_GenerateGraphHTML_ChartPie), false) #26 [internal function]: Piwik_UserSettings_Controller->getOS() #27 /var/opt/piwik/1.8/core/FrontController.php(138): call_user_func_array(Array, Array) #28 /var/opt/piwik/1.8/index.php(53): Piwik_FrontController->dispatch() #29 {main}
Widget Visites par fuseau horaire du serveur
Backtrace: #0 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(51): Zend_Db_Adapter_Pdo_Abstract->exec('LOCK TABLES piw...') #1 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(205): Piwik_Sql::exec('LOCK TABLES piw...') #2 /var/opt/piwik/1.8/core/PluginsFunctions/Sql.php(359): Piwik_Sql::lockTables('piwik_archive_n...', 'piwik_archive_n...') #3 /var/opt/piwik/1.8/core/ArchiveProcessing.php(688): Piwik_LockTables('piwik_archive_n...', 'piwik_archive_n...') #4 /var/opt/piwik/1.8/core/ArchiveProcessing.php(533): Piwik_ArchiveProcessing->loadNextIdarchive() #5 /var/opt/piwik/1.8/core/ArchiveProcessing.php(472): Piwik_ArchiveProcessing->initCompute() #6 /var/opt/piwik/1.8/core/Archive/Single.php(226): Piwik_ArchiveProcessing->launchArchiving() #7 /var/opt/piwik/1.8/core/Archive/Single.php(256): Piwik_Archive_Single->prepareArchive() #8 /var/opt/piwik/1.8/core/Archive/Single.php(514): Piwik_Archive_Single->get('VisitTime_serve...', 'blob', NULL) #9 /var/opt/piwik/1.8/plugins/VisitTime/API.php(34): Piwik_Archive_Single->getDataTable('VisitTime_serve...') #10 /var/opt/piwik/1.8/plugins/VisitTime/API.php(48): Piwik_VisitTime_API->getDataTable('VisitTime_serve...', '1', 'day', 'today', false) #11 [internal function]: Piwik_VisitTime_API->getVisitInformationPerServerTime('1', 'day', 'today', false, '1') #12 /var/opt/piwik/1.8/core/API/Proxy.php(190): call_user_func_array(Array, Array) #13 /var/opt/piwik/1.8/core/API/Request.php(128): Piwik_API_Proxy->call('Piwik_VisitTime...', 'getVisitInforma...', Array) #14 /var/opt/piwik/1.8/core/ViewDataTable.php(421): Piwik_API_Request->process() #15 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphData.php(181): Piwik_ViewDataTable->loadDataTableFromAPI() #16 /var/opt/piwik/1.8/core/Controller.php(152): Piwik_ViewDataTable_GenerateGraphData->main() #17 /var/opt/piwik/1.8/plugins/VisitTime/Controller.php(35): Piwik_Controller->renderView(Object(Piwik_ViewDataTable_GenerateGraphData_ChartPie), false) #18 [internal function]: Piwik_VisitTime_Controller->getVisitInformationPerServerTime() #19 /var/opt/piwik/1.8/core/FrontController.php(138): call_user_func_array(Array, Array) #20 /var/opt/piwik/1.8/core/FrontController.php(159): Piwik_FrontController->dispatch('VisitTime', 'getVisitInforma...', Array) #21 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphHTML.php(170): Piwik_FrontController->fetchDispatch('VisitTime', 'getVisitInforma...', Array) #22 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphHTML.php(125): Piwik_ViewDataTable_GenerateGraphHTML->getGraphData() #23 /var/opt/piwik/1.8/core/ViewDataTable/GenerateGraphHTML.php(109): Piwik_ViewDataTable_GenerateGraphHTML->buildView() #24 /var/opt/piwik/1.8/core/Controller.php(152): Piwik_ViewDataTable_GenerateGraphHTML->main() #25 /var/opt/piwik/1.8/plugins/VisitTime/Controller.php(35): Piwik_Controller->renderView(Object(Piwik_ViewDataTable_GenerateGraphHTML_ChartPie), false) #26 [internal function]: Piwik_VisitTime_Controller->getVisitInformationPerServerTime() #27 /var/opt/piwik/1.8/core/FrontController.php(138): call_user_func_array(Array, Array) #28 /var/opt/piwik/1.8/index.php(53): Piwik_FrontController->dispatch() #29 {main}
Widget Durée des visites
Backtrace: #0 /var/opt/piwik/1.8/core/ViewDataTable/Cloud.php(74): Piwik_ViewDataTable->checkStandardDataTable() #1 /var/opt/piwik/1.8/core/Controller.php(152): Piwik_ViewDataTable_Cloud->main() #2 /var/opt/piwik/1.8/plugins/VisitorInterest/Controller.php(42): Piwik_Controller->renderView(Object(Piwik_ViewDataTable_Cloud), false) #3 [internal function]: Piwik_VisitorInterest_Controller->getNumberOfVisitsPerVisitDuration() #4 /var/opt/piwik/1.8/core/FrontController.php(138): call_user_func_array(Array, Array) #5 /var/opt/piwik/1.8/index.php(53): Piwik_FrontController->dispatch() #6 {main}
Correction
Pour les trois premiers messages, l'erreur est commune et concerne l'impossibilité de vérrouiller une table dans la base de données. En effet, cette permission n'a pas été accordé au compte lors de l'installation initiale.
L'ajout de cette permission permet de résoudre les quatre problèmes d'un coup.
mysql> GRANT LOCK TABLES ON piwik.* TO 'piwik'@'localhost';
Query OK, 0 rows affected (0.07 sec)
Label sur locale Française
Lors de l'installation initiale, des erreurs ont été constatés dans les messages. Certains ont été corrigés mais pas tous. Le message
Le mot clef %1$s a été a été noté %2$s dans la page de résultats de recherche %3$s pour ce visiteur
est toujours erroné.
Tous les messages sont externalisés dans des dictionnaires de langue, placés dans le sous répertoire lang
de l'installation. Dans le cas de la locale Française, le fichier modifié est fr.php
.
Patch des traductions: fr.php
Voir aussi
Documentation officielle: https://matomo.org/docs/update
Release Notes: https://matomo.org/changelog/piwik-1-8/ }