Open JBPressac opened 7 years ago
Le bug est sur HistoryLog, les deux plugins étant développés en parallèle pour un site.
La page en question montre des statistiques sur l'avancement de l'édition des métadonnées à partir des éléments "Monitor" (voir l'onglet dans l'édition des items) et permet de publier en lot ceux qui sont suffisamment avancés.
Je n'ai pas réussi à reproduire l'erreur (mais je viens de corriger deux petits bugs dans HistoryLog). Peut-être est-ce dû à la version mysql.
Est-ce que cela fonctionne en remplaçant dans le fichier HistoryLog/models/Table/HistoryLogChange.php
ligne 267 :
$lastChangesColumns['added'] = "IF(MAX($aliasEntry.added)";
par
$lastChangesColumns['added'] = "IFNULL(MAX($aliasEntry.added), '2001-01-01')";
ou
$lastChangesColumns['added'] = new Zend_Db_Expr("IFNULL(MAX($aliasEntry.added), '2001-01-01')");
Merci pour votre réponse. J'ai essayé les deux solutions proposées mais aucune ne fonctionne. Notez que je ne reproduis pas le problème sous Omeka 2.3.1.
Y-a-t-il des métadonnées de date en "0000-00-00" (dans le champ "added" de "history_logs") ?
Dans la table mySQL omeka_history_log_entries
? Non, il n'y en a pas.
Je n'arrive pas à reproduire dans Omeka 2.3.1 ou Omeka 2.5.1 sur une installation fraiche (mais j'utilise mariadb 15 et je n'ai pas mysql sous la main). En fait, l'erreur devrait se produire avec cette requête :
CREATE TEMPORARY TABLE history_log_1 AS
SELECT `history_log_changes`.`element_id`, `history_log_entries`.`record_type`, `history_log_entries`.`record_id`, IF (history_log_changes.type = 'delete', NULL, history_log_changes.text) AS `text`, `history_log_entries`.`added`
FROM `omeka_history_log_changes` AS `history_log_changes`
INNER JOIN `omeka_history_log_entries` AS `history_log_entries` ON `history_log_entries`.`id` = `history_log_changes`.`entry_id`
WHERE (`history_log_changes`.`element_id` IN (76, 77, 78, 79, 80, 81, 82, 85, 86, 87))
AND (`history_log_entries`.`added` >= '2017-08-24 00:00:00')
AND (`history_log_entries`.`added` <= '2017-08-24 23:59:59.999999');
CREATE TEMPORARY TABLE history_log_2 AS
SELECT `history_log_changes`.`element_id`, `history_log_entries`.`record_type`, `history_log_entries`.`record_id`, IFNULL(MAX(history_log_entries.added), '2001-01-01') AS `added`
FROM `omeka_history_log_changes` AS `history_log_changes`
INNER JOIN `omeka_history_log_entries` AS `history_log_entries` ON `history_log_entries`.`id` = `history_log_changes`.`entry_id`
WHERE (`history_log_changes`.`element_id` IN (76, 77, 78, 79, 80, 81, 82, 85, 86, 87))
AND (`history_log_entries`.`added` >= '2017-08-24 00:00:00')
AND (`history_log_entries`.`added` <= '2017-08-24 23:59:59.999999')
GROUP BY `history_log_changes`.`element_id`, `history_log_entries`.`record_type`, `history_log_entries`.`record_id`;
DROP TABLE IF EXISTS history_log_1;
DROP TABLE IF EXISTS history_log_2;
Je ne sais pas si le problème survient avec la première requête ou la seconde, j'ai mis les deux. Les éléments (76, 77, 78, 79, 80, 81, 82, 85, 86, 87) doivent correspondre aux ids des éléments ajoutés par le plugin CuratorMonitor.
Si cela ne fonctionne pas, il faut m'indiquer la version de mysql. Si cela fonctionne, c'est que la requête sur votre site est différente et il faudrait récupérer la requête query qui échoue ligne 302/303.
Les tables temporaires ne sont pas créées quand j'execute le code SQL dans phpMyAdmin. J'utilise la version 5.5.57-0 de mySQL sous Debian. Je ne sais pas comment récupérer la requête ligne 302/303. Comment puis-je procéder ?
Les tables ne sont pas forcément visibles dans phpmyadmin et elles n'existent que le temps de la requête.
CREATE TEMPORARY TABLE history_log_1 AS
SELECT `history_log_changes`.`element_id`, `history_log_entries`.`record_type`, `history_log_entries`.`record_id`, IF (history_log_changes.type = 'delete', NULL, history_log_changes.text) AS `text`, `history_log_entries`.`added`
FROM `omeka_history_log_changes` AS `history_log_changes`
INNER JOIN `omeka_history_log_entries` AS `history_log_entries` ON `history_log_entries`.`id` = `history_log_changes`.`entry_id`
WHERE (`history_log_entries`.`added` >= '2010-08-24 00:00:00')
AND (`history_log_entries`.`added` <= '2017-08-24 23:59:59.999999');
CREATE TEMPORARY TABLE history_log_2 AS
SELECT `history_log_changes`.`element_id`, `history_log_entries`.`record_type`, `history_log_entries`.`record_id`, IFNULL(MAX(history_log_entries.added), '2001-01-01') AS `added`
FROM `omeka_history_log_changes` AS `history_log_changes`
INNER JOIN `omeka_history_log_entries` AS `history_log_entries` ON `history_log_entries`.`id` = `history_log_changes`.`entry_id`
WHERE (`history_log_entries`.`added` >= '2010-08-24 00:00:00')
AND (`history_log_entries`.`added` <= '2017-08-24 23:59:59.999999')
GROUP BY `history_log_changes`.`element_id`, `history_log_entries`.`record_type`, `history_log_entries`.`record_id`;
# puis tester.
SELECT * FROM history_log_1;
SELECT * FROM history_log_2;
DROP TABLE IF EXISTS history_log_1;
DROP TABLE IF EXISTS history_log_2;
L'essentiel est que les tables temporaires aient pu être créées et supprimées sans erreur, ce qui semblent le cas. Donc l'erreur vient d'ailleurs, mais je ne vois pas où. Pour avoir la requête, il faut modifier la config dans application/config/config.ini
(log.errors = true
, log.priority = Zend_Log::DEBUG
, et log.sql = true
), et/ou ajouter debug($query);
dans la boucle.
C'est sans doute lié à la base elle-même, à des colonnes added qui n'ont pas été mises à jour ou à autre chose (cf. sur le forum notamment https://forum.omeka.org/t/migrating-omeka-to-php7-and-mysql-5-7-16/2173).
Bonjour, J'ai voulu tester Curator Monitor 2.4.7 avec Omeka 2.5.1 mais lorsque je clique sur le menu Curator monitor (http://localhost/omeka/admin/curator-monitor), j'obtiens une erreur: