added caches.listing_last_modified; db-changelog fixes

This commit is contained in:
following
2013-03-20 12:06:53 +01:00
parent d5ee4baef8
commit 085c13983f
13 changed files with 102 additions and 44 deletions

View File

@ -25,6 +25,7 @@
$procedures[] = 'sp_updateall_topratingstat';
$procedures[] = 'sp_updateall_cache_picturestat';
$procedures[] = 'sp_updateall_cachelog_picturestat';
$procedures[] = 'sp_updateall_cache_listingdates';
$tpl->assign('procedures', $procedures);
@ -52,6 +53,8 @@
sql("CALL sp_updateall_cache_picturestat(@c)");
else if ($proc == 'sp_updateall_cachelog_picturestat')
sql("CALL sp_updateall_cachelog_picturestat(@c)");
else if ($proc == 'sp_updateall_cache_listingdates')
sql("CALL sp_updateall_cache_listingdates(@c)");
else
{
$bError = true;

View File

@ -29,7 +29,7 @@ date commit ID change
2013-02-15 92e522f6 adjusted developer and production system:
- added index logentries:userid
- changed user.password length to 32
- removed sqlsession.remote_addr and index remote_addr
- removed xmlsession.remote_addr and index remote_addr
2013-02-16 06d832c3 new table data_licenses
added user.data_license
2013-02-17 b7b51eab added user.email_problems
@ -45,12 +45,15 @@ date commit ID change
- modified lots of triggers
2013-03-09 09b51ecc added field 'restored_by' to cache_coordinates, cache_countries,
cache_logs_archived, all new tables and to triggers
removed table listing_restored
discarded table listing_restored
added index cache_logs_archived:user_id
2013-03-10 f8738936 added field 'mappreview' in pictures and pictures_modified
2013-03-10 f8738936 added field pictures.mappreview
2013-03-14 69abeb67 added fields coordinates_type.preposition and pp_trans_id
2013-03-15 a15b5582 discarded table 'data_license'
2013-03-16 added fields coordinates.date_created and .last_modified
2013-03-18 added table 'saved_texts' + triggers
2013-03-15 a15b5582 discarded table 'data_licenses'
2013-03-16 80b89939 added fields coordinates.date_created and .last_modified
2013-03-18 37b5268a added table 'saved_texts' + triggers
added triggers to table 'coordinates'
2013-03-20 added field caches.listing_last_modified;
must be initialized once via Admin / DB Maintenance / sp_updateall_cache_listingdates

View File

@ -200,6 +200,27 @@
UPDATE `mp3` SET `last_modified`=NOW() WHERE `object_id`=nCacheId;
END;");
// update listing modification date
sql_dropProcedure('sp_update_cache_listingdate');
sql("CREATE PROCEDURE sp_update_cache_listingdate (IN nCacheId INT(10) UNSIGNED)
BEGIN
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
UPDATE `caches` SET `listing_last_modified`=NOW() WHERE `cache_id`=nCacheId LIMIT 1;
END IF;
END;");
sql_dropProcedure('sp_updateall_cache_listingdates');
sql("CREATE PROCEDURE sp_updateall_cache_listingdates (OUT nModified INT)
BEGIN
UPDATE `caches` SET `listing_last_modified` =
GREATEST(`last_modified`,
GREATEST(IFNULL((SELECT MAX(`last_modified`) FROM `cache_desc` WHERE `cache_desc`.`cache_id`=`caches`.`cache_id`),'0'),
GREATEST(IFNULL((SELECT MAX(`last_modified`) FROM `coordinates` WHERE `coordinates`.`type`=1 AND `coordinates`.`cache_id`=`caches`.`cache_id`),'0'),
IFNULL((SELECT MAX(`last_modified`) FROM `pictures` WHERE `pictures`.`object_type`=2 AND `pictures`.`object_id` = `caches`.`cache_id`),'0')
)));
SET nModified = ROW_COUNT();
END;");
// set caches.desc_languages of given cacheid and fill cache_desc_prefered
sql_dropProcedure('sp_update_caches_descLanguages');
sql("CREATE PROCEDURE sp_update_caches_descLanguages (IN nCacheId INT(10) UNSIGNED)
@ -214,9 +235,8 @@
sql_dropProcedure('sp_updateall_caches_descLanguages');
sql("CREATE PROCEDURE sp_updateall_caches_descLanguages (OUT nModified INT)
BEGIN
SET nModified = 0;
UPDATE `caches`, (SELECT `cache_id`, GROUP_CONCAT(DISTINCT `language` ORDER BY `language` SEPARATOR ',') AS `dl` FROM `cache_desc` GROUP BY `cache_id`) AS `tbl` SET `caches`.`desc_languages`=`tbl`.`dl`, `caches`.`default_desclang`=PREFERED_LANG(`tbl`.`dl`, '&1') WHERE `caches`.`cache_id`=`tbl`.`cache_id`;
SET nModified = nModified + ROW_COUNT() ;
SET nModified = ROW_COUNT() ;
END;", strtoupper($lang . ',EN'));
// update found, last_found, notfound and note of stat_cache_logs, stat_caches and stat_user
@ -513,6 +533,7 @@
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
SET NEW.`date_created`=NOW();
SET NEW.`last_modified`=NOW();
SET NEW.`listing_last_modified`=NOW();
END IF;
IF NEW.`status` <> 5 THEN
SET NEW.`is_publishdate`=1;
@ -589,6 +610,7 @@
OLD.`uuid`!=NEW.`uuid` OR
OLD.`node`!=NEW.`node` OR
OLD.`date_created`!=NEW.`date_created` OR
OLD.`is_publishdate`!=NEW.`is_publishdate` OR
OLD.`user_id`!=NEW.`user_id` OR
OLD.`name`!=NEW.`name` OR
OLD.`longitude`!=NEW.`longitude` OR
@ -612,6 +634,10 @@
SET NEW.`last_modified`=NOW();
END IF;
IF NEW.`last_modified` != OLD.`last_modified` THEN
SET NEW.`listing_last_modified`=NOW();
END IF;
IF OLD.`status`!=NEW.`status` THEN
CALL sp_touch_cache(OLD.`cache_id`, FALSE);
END IF;
@ -690,6 +716,7 @@
sql("CREATE TRIGGER `cacheDescAfterInsert` AFTER INSERT ON `cache_desc`
FOR EACH ROW
BEGIN
CALL sp_update_cache_listingdate(NEW.`cache_id`);
IF (SELECT `date_created` FROM `caches` WHERE `cache_id`=NEW.`cache_id`) < LEFT(NOW(),10) AND
(SELECT `status` FROM `caches` WHERE `caches`.`cache_id`=NEW.`cache_id`) != 5 THEN
INSERT IGNORE INTO `cache_desc_modified` (`cache_id`, `language`, `date_modified`, `desc`, `restored_by`) VALUES (NEW.`cache_id`, NEW.`language`, NOW(), NULL, IFNULL(@restoredby,0));
@ -714,9 +741,11 @@
IF OLD.`language`!=NEW.`language` OR OLD.`cache_id`!=NEW.`cache_id` THEN
IF OLD.`cache_id`!=NEW.`cache_id` THEN
CALL sp_update_caches_descLanguages(OLD.`cache_id`);
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END IF;
CALL sp_update_caches_descLanguages(NEW.`cache_id`);
END IF;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
/* changes at date of creation are ignored to save archive space */
IF NEW.`cache_id`=OLD.`cache_id` AND
(SELECT `status` FROM `caches` WHERE `caches`.`cache_id`=OLD.`cache_id`) != 5 THEN
@ -733,6 +762,7 @@
sql("CREATE TRIGGER `cacheDescAfterDelete` AFTER DELETE ON `cache_desc`
FOR EACH ROW
BEGIN
CALL sp_update_cache_listingdate(OLD.`cache_id`);
INSERT IGNORE INTO `removed_objects` (`localId`, `uuid`, `type`, `node`) VALUES (OLD.`id`, OLD.`uuid`, 3, OLD.`node`);
/* changes at date of creation are ignored to save archive space */
IF (OLD.`date_created` < LEFT(NOW(),10)) AND
@ -979,6 +1009,7 @@
CALL sp_update_cachelog_picturestat(NEW.`object_id`, FALSE);
ELSEIF NEW.`object_type`=2 THEN
CALL sp_update_cache_picturestat(NEW.`object_id`, FALSE);
CALL sp_update_cache_listingdate(NEW.`object_id`);
END IF;
END;");
@ -1001,21 +1032,28 @@
CALL sp_update_cachelog_picturestat(OLD.`object_id`, TRUE);
ELSEIF OLD.`object_type`=2 THEN
CALL sp_update_cache_picturestat(OLD.`object_id`, TRUE);
CALL sp_update_cache_listingdate(OLD.`object_id`);
END IF;
IF NEW.`object_type`=1 THEN
CALL sp_update_cachelog_picturestat(NEW.`object_id`, FALSE);
ELSEIF NEW.`object_type`=2 THEN
CALL sp_update_cache_picturestat(NEW.`object_id`, FALSE);
CALL sp_update_cache_listingdate(NEW.`object_id`);
END IF;
ELSEIF @archive_picop AND
ELSE
IF NEW.`object_type`=2 THEN
CALL sp_update_cache_listingdate(NEW.`object_id`);
END IF;
IF @archive_picop AND
( ( NEW.`object_type`=2 AND
OLD.`date_created` < LEFT(NOW(),10) AND
(SELECT `status` FROM `caches` WHERE `caches`.`cache_id`=OLD.`object_id`) != 5
) OR
NEW.`object_type`=1 ) AND
(NEW.`title` != OLD.`title` OR NEW.`spoiler` != OLD.`spoiler` OR NEW.`display` != OLD.`display`) THEN
INSERT IGNORE INTO `pictures_modified` (`id`, `date_modified`, `operation`, `date_created`, `url`, `title`, `object_id`, `object_type`, `spoiler`, `unknown_format`, `display`, `restored_by`) VALUES (OLD.`id`, NOW(), 'U', OLD.`date_created`, OLD.`url`, OLD.`title`, OLD.`object_id`, OLD.`object_type`, OLD.`spoiler`, OLD.`unknown_format`, OLD.`display`, IFNULL(@restoredby,0));
/* mappreview is not archived, can be safely set to 0 on restore */
INSERT IGNORE INTO `pictures_modified` (`id`, `date_modified`, `operation`, `date_created`, `url`, `title`, `object_id`, `object_type`, `spoiler`, `unknown_format`, `display`, `restored_by`) VALUES (OLD.`id`, NOW(), 'U', OLD.`date_created`, OLD.`url`, OLD.`title`, OLD.`object_id`, OLD.`object_type`, OLD.`spoiler`, OLD.`unknown_format`, OLD.`display`, IFNULL(@restoredby,0));
/* mappreview is not archived, can be safely set to 0 on restore */
END IF;
END IF;
END;");
@ -1038,6 +1076,7 @@
CALL sp_update_cachelog_picturestat(OLD.`object_id`, TRUE);
ELSEIF OLD.`object_type`=2 THEN
CALL sp_update_cache_picturestat(OLD.`object_id`, TRUE);
CALL sp_update_cache_listingdate(OLD.`object_id`);
END IF;
END;");
@ -1247,7 +1286,10 @@
sql("CREATE TRIGGER `cacheAttributesAfterInsert` AFTER INSERT ON `caches_attributes`
FOR EACH ROW
BEGIN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=NEW.`cache_id`;
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=NEW.`cache_id`;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
END IF;
IF (SELECT `status` FROM `caches` WHERE `cache_id`=NEW.`cache_id`) != 5 AND
(SELECT `date_created` FROM `caches` WHERE `cache_id`=NEW.`cache_id`) < LEFT(NOW(),10) THEN
INSERT IGNORE INTO `caches_attributes_modified` (`cache_id`, `attrib_id`, `date_modified`, `was_set`, `restored_by`) VALUES (NEW.`cache_id`, NEW.`attrib_id`, NOW(), 0, IFNULL(@restoredby,0));
@ -1258,9 +1300,13 @@
sql("CREATE TRIGGER `cacheAttributesAfterUpdate` AFTER UPDATE ON `caches_attributes`
FOR EACH ROW
BEGIN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=NEW.`cache_id`;
IF OLD.`cache_id`!=NEW.`cache_id` THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=OLD.`cache_id`;
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=NEW.`cache_id`;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
IF OLD.`cache_id`!=NEW.`cache_id` THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=OLD.`cache_id`;
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END IF;
END IF;
/* is not called, otherweise cache_attributes_modified would have to be updated */
END;");
@ -1269,7 +1315,10 @@
sql("CREATE TRIGGER `cacheAttributesAfterDelete` AFTER DELETE ON `caches_attributes`
FOR EACH ROW
BEGIN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=OLD.`cache_id`;
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `cache_id`=OLD.`cache_id`;
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END IF;
IF (SELECT `status` FROM `caches` WHERE `cache_id`=OLD.`cache_id`) != 5 AND
(SELECT `date_created` FROM `caches` WHERE `cache_id`=OLD.`cache_id`) < LEFT(NOW(),10) THEN
INSERT IGNORE INTO `caches_attributes_modified` (`cache_id`, `attrib_id`, `date_modified`, `was_set`, `restored_by`) VALUES (OLD.`cache_id`, OLD.`attrib_id`, NOW(), 1, IFNULL(@restoredby,0));
@ -1298,10 +1347,7 @@
sql("CREATE TRIGGER `coordinatesAfterInsert` AFTER INSERT ON `coordinates`
FOR EACH ROW
BEGIN
/* dont overwrite date values while XML client is running */
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 AND NEW.`type`=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `caches`.`cache_id`=NEW.`cache_id`;
END IF;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
END;");
sql_dropTrigger('coordinatesBeforeUpdate');
@ -1318,9 +1364,9 @@
sql("CREATE TRIGGER `coordinatesAfterUpdate` AFTER UPDATE ON `coordinates`
FOR EACH ROW
BEGIN
/* dont overwrite date values while XML client is running */
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 AND NEW.`type`=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `caches`.`cache_id`=NEW.`cache_id`;
CALL sp_update_cache_listingdate(NEW.`cache_id`);
IF OLD.`cache_id`!=NEW.`cache_id` THEN
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END IF;
END;");
@ -1328,17 +1374,14 @@
sql("CREATE TRIGGER `coordinatesAfterDelete` AFTER DELETE ON `coordinates`
FOR EACH ROW
BEGIN
/* dont overwrite date values while XML client is running */
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 AND OLD.`type`=1 THEN
UPDATE `caches` SET `last_modified`=NOW() WHERE `caches`.`cache_id`=OLD.`cache_id`;
END IF;
CALL sp_update_cache_listingdate(OLD.`cache_id`);
END;");
sql_dropTrigger('savedTextsBeforeInsert');
sql("CREATE TRIGGER `savedTextsBeforeInsert` BEFORE INSERT ON `saved_texts`
FOR EACH ROW
BEGIN
/* dont overwrite date values while XML client is running */
/* dont overwrite creation date while XML client is running */
IF ISNULL(@XMLSYNC) OR @XMLSYNC!=1 THEN
SET NEW.`date_created`=NOW();
END IF;

View File

@ -7,6 +7,7 @@ CREATE TABLE `caches` (
`date_created` datetime NOT NULL COMMENT 'via Trigger (caches)',
`is_publishdate` tinyint(1) NOT NULL default '0' COMMENT '1 = date_created is publication date',
`last_modified` datetime NOT NULL COMMENT 'via Trigger (caches)',
`listing_last_modified` datetime NOT NULL COMMENT 'via Trigger (caches, cache_desc, coordinates, pictures)',
`user_id` int(10) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`longitude` double NOT NULL,

View File

@ -17,7 +17,7 @@ CREATE TABLE `pictures` (
`local` tinyint(1) NOT NULL default '1',
`unknown_format` tinyint(1) NOT NULL default '0',
`display` tinyint(1) NOT NULL default '1',
`mappreview` tinyint(2) NOT NULL default '7',
`mappreview` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `uuid` (`uuid`),
KEY `last_modified` (`last_modified`),

View File

@ -130,8 +130,10 @@
&nbsp;&nbsp;&nbsp;&nbsp;&lt;attribute id="6"&gt;&lt;![CDATA[ Nur bei Opencaching]]&gt;&lt;/attribute&gt;<br>
&nbsp; &lt;/attributes&gt;<br>
&lt;/cache&gt;</P>
<p><em>lastmodified</em> ist das letzte Änderungsdatum des cache-Datensatzes, ohne Änderungen an Cachebeschreibungen oder Bildern. Für das Gesamt-Änderungsdatum des Listings müssen Letztere also mit "eingerechnet" werden. Ein Gesamt-Änderungsdatum des Listings kann bei Bedarf eingebaut werden.</p>
<p><em>datecreated</em> ist bei mit OC Version 1 und 2 angelegten Caches das Datum, an dem das Listing angelegt wurde, bei mit Version 3 angelegten Caches das Veröffentlichungsdatum. Ab Interface Version 1.2 zeigt das Attribut <em>ispublishdate="1"</em> an, dass es sich um das Veröffentlichungsdatum handelt.</p>
<p>Ab XML-Version 1.2 werden im <em>size</em>-Feld auch Nano-Größen zurückgeliefert. In älteren Interface-Versionen wird stattdessen "micro" ausgegeben.</p>
<p>Es fehlen noch Empfehlungen und zusätzliche Wegpunkte; wird bei Bedarf eingebaut.</p>
<h3>cachedesc (Cachebeschreibungen)</h3>
<p>
&lt;cachedesc&gt;<br>

View File

@ -85,6 +85,7 @@ class cache
$this->reCache->addInt('node', 0, false);
$this->reCache->addDate('date_created', time(), true, RE_INSERT_IGNORE);
$this->reCache->addDate('last_modified', time(), true, RE_INSERT_IGNORE);
$this->reCache->addDate('listing_last_modified', time(), true, RE_INSERT_IGNORE);
$this->reCache->addInt('user_id', 0, false);
$this->reCache->addString('name', '', false);
$this->reCache->addDouble('longitude', 0, false);
@ -173,13 +174,17 @@ class cache
{
return $this->reCache->getValue('uuid');
}
function getDateCreated()
{
return $this->reCache->getValue('date_created');
}
function getLastModified()
{
return $this->reCache->getValue('last_modified');
}
function getDateCreated()
function getListingLastModified()
{
return $this->reCache->getValue('date_created');
return $this->reCache->getValue('listing_last_modified');
}
function getNode()
{

View File

@ -49,7 +49,7 @@
{
echo "Changed name to: " . $name . "\n";
sql("UPDATE `caches` SET `last_modified`=NOW(), `name`='&1' WHERE `cache_id`=&2", $name, $r['cache_id']);
sql("UPDATE `caches` SET `name`='&1' WHERE `cache_id`=&2", $name, $r['cache_id']);
}
}
else

View File

@ -41,7 +41,7 @@
if ($rCache === false) die('Cache existiert nicht!');
if ($rUser === false) die('User existiert nicht!');
sql("UPDATE caches SET user_id='&1', last_modified=NOW() WHERE cache_id='&2'", $rUser['user_id'], $rCache['cache_id']);
sql("UPDATE caches SET user_id='&1' WHERE cache_id='&2'", $rUser['user_id'], $rCache['cache_id']);
// send event to delete statpic
event_change_statpic($rCache['user_id']);

View File

@ -48,7 +48,7 @@
$cacheid = $rPublish['cache_id'];
// update cache status to active
sql("UPDATE `caches` SET `status`=1, `date_activate`=NULL, `last_modified`=NOW() WHERE `cache_id`='&1'", $cacheid);
sql("UPDATE `caches` SET `status`=1, `date_activate`=NULL WHERE `cache_id`='&1'", $cacheid);
// send events
touchCache($cacheid);

View File

@ -132,9 +132,10 @@ class sitemaps
WHERE `cache_status`.`allow_user_view`=1");
while ($r = sql_fetch_assoc($rs))
{
$dLastMod = sql_value("SELECT MAX(`last_modified`) `last_modified` FROM (SELECT `last_modified` FROM `caches` WHERE `cache_id` ='&1' UNION
SELECT `last_modified` FROM `cache_desc` WHERE `cache_id` ='&1' UNION
SELECT MAX(`last_modified`) AS `last_modified` FROM `cache_logs` WHERE `cache_id` ='&1') `tmp_result`", time(), $r['cache_id']);
$dLastMod = sql_value("SELECT MAX(`last_modified`) `last_modified` FROM
(SELECT `listing_last_modified` AS `last_modified` FROM `caches` WHERE `cache_id` ='&1' UNION
SELECT MAX(`last_modified`) AS `last_modified` FROM `cache_logs` WHERE `cache_id` ='&1') `tmp_result`",
time(), $r['cache_id']);
$this->oSitemapXML->write('viewcache.php?wp=' . $r['wp_oc'] . '&desclang=' . $r['language'], strtotime($dLastMod));
}
sql_free_result($rs);

View File

@ -86,6 +86,7 @@ function getChildWaypoints($cacheid)
//get cache record
$rs = sql("SELECT `caches`.`cache_id` AS `cacheid`,
`caches`.`listing_last_modified` AS `lastmodified`,
`caches`.`user_id` AS `userid`,
`caches`.`status` AS `status`,
`caches`.`latitude` AS `latitude`,
@ -152,12 +153,6 @@ function getChildWaypoints($cacheid)
$tpl->error(ERROR_CACHE_NOT_PUBLISHED);
}
$rCache['lastmodified'] = sql_value("SELECT MAX(`last_modified`) `last_modified` FROM
(SELECT `last_modified` FROM `caches` WHERE `cache_id` ='&1'
UNION SELECT `last_modified` FROM `cache_desc` WHERE `cache_id` ='&1'
UNION SELECT `last_modified` FROM `coordinates` WHERE `cache_id`='&1' AND `type`='&2') `tmp_result`",
null, $cacheid, COORDINATE_WAYPOINT);
$rCache['desclanguages'] = explode(',', $rCache['desclanguages']);
$rCache['sizeName'] = labels::getLabelValue('cache_size', $rCache['size']);

View File

@ -126,7 +126,7 @@
}
else
{
// fitler parameters
// filter parameters
$dModifiedsince = isset($_REQUEST['modifiedsince']) ? $_REQUEST['modifiedsince'] : '0';
// selections
@ -532,6 +532,11 @@ function outputXmlFile($sessionid, $filenr, $bXmlDecl, $bOcXmlTag, $bDocType, $z
fwrite($f, $t2 . '</attributes>' . "\n");
sql_free_result($rsAttributes);
// If additional waypoints are added here, last_modified date handling must be changed
// to include also max(last_modified) of all waypoints: either set caches.last_modified via
// coordinates trigger, or - better - check coordinates.last_modified when constructing
// xml session data.
fwrite($f, $t1 . '</cache>' . "\n");
}
mysql_free_result($rs);