additional_plugins/serendipity_event_entrylastmodified/serendipity_event_entrylastmodified.php
Thomas Hochstein 697e3306ff Catch wrong last_modified dates. (#95)
My database has some last_modified entries
just containing the year (2004, as it is)
or "0", leading to wrong "last modified"
dates in January, 1970 (2004) or displaying
the current date and time for "last modified".
A simple check can catch those wrong entries,
as there can't be any valid modification dates
before 1990 (not even after an import from
some older blog software).

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-06-09 16:28:05 +02:00

140 lines
6.4 KiB
PHP

<?php #
if (IN_serendipity !== true) {
die ("Don't hack!");
}
// Probe for a language include with constants. Still include defines later on, if some constants were missing
$probelang = dirname(__FILE__) . '/' . $serendipity['charset'] . 'lang_' . $serendipity['lang'] . '.inc.php';
if (file_exists($probelang)) {
include $probelang;
}
include dirname(__FILE__) . '/lang_en.inc.php';
class serendipity_event_entrylastmodified extends serendipity_event {
var $title = PLUGIN_EVENT_ENTRYLASTMODIFIED_NAME;
function introspect(&$propbag) {
global $serendipity;
$propbag->add('name', PLUGIN_EVENT_ENTRYLASTMODIFIED_NAME);
$propbag->add('description', PLUGIN_EVENT_ENTRYLASTMODIFIED_DESC);
$propbag->add('stackable', false);
$propbag->add('author', 'Garvin Hicking');
$propbag->add('version', '1.10');
$propbag->add('requirements', array(
'serendipity' => '0.8',
'smarty' => '2.6.7',
'php' => '4.1.0'
));
$propbag->add('event_hooks', array('entry_display' => true));
$propbag->add('groups', array('FRONTEND_ENTRY_RELATED'));
$propbag->add('configuration', array('notmodified', 'position'));
}
function introspect_config_item($name, &$propbag)
{
global $serendipity;
switch($name) {
case 'position':
$propbag->add('type','radio');
$propbag->add('name',PLUGIN_EVENT_ENTRYLASTMODIFIED_POSITION);
$propbag->add('description',PLUGIN_EVENT_ENTRYLASTMODIFIED_POSITION_DESC);
$propbag->add('radio',array(
'value' => array('left','center','right'),
'desc' => array(PLUGIN_EVENT_ENTRYLASTMODIFIED_LEFT,PLUGIN_EVENT_ENTRYLASTMODIFIED_CENTER,PLUGIN_EVENT_ENTRYLASTMODIFIED_RIGHT)
));
$propbag->add('default','right');
// languages for which options per row are 2, add your language if appropriate
$per_row_2 = array(1 => 'bg');
// languages for which options per row are 3, add your language if appropriate
$per_row_3 = array(1 => 'en');
$lang = $serendipity['lang'];
if (in_array($lang,$per_row_2) == true)
$per_row = 2;
else if (in_array($lang,$per_row_3) == true)
$per_row = 3;
else
$per_row = 1; // by default one option per row - for languages with very long words
unset($per_row_2, $per_row_3);
$propbag->add('radio_per_row', $per_row);
break;
case 'notmodified':
$propbag->add('type','boolean');
$propbag->add('name',PLUGIN_EVENT_ENTRYLASTMODIFIED_SHOWNOTMODIFIED);
$propbag->add('description',PLUGIN_EVENT_ENTRYLASTMODIFIED_SHOWNOTMODIFIED_DESC);
$propbag->add('default','true');
break;
default:
return false;
}
return true;
}
function generate_content(&$title) {
$title = $this->title;
}
function event_hook($event, &$bag, &$eventData, $addData = null) {
global $serendipity;
$hooks = &$bag->get('event_hooks');
$notmodified = $this->get_config('notmodified');
$position = $this->get_config('position');
// %1 = position, %2 = the message itself, %3 = last_modified timestamp
$format_string_mod = '<div class="entry_last_modified" style="text-align: %s">%s %s</div>';
// %1 = position, %2 = the message itself
$format_string_nomod = '<div class="entry_last_modified" style="text-align: %s">%s</div>';
if (isset($hooks[$event])) {
switch($event) {
case 'entry_display':
if (!isset($eventData[0])) continue;
$extended_key = &$this->getFieldReference('extended', $eventData);
if ($addData['extended'] || $addData['preview']) {
$eventData[0]['exflag'] = 1;
# 631152000 is 01.01.1990 00:00:00 GMT - earlier timestamps must be wrong
if ($eventData[0]['timestamp'] != $eventData[0]['last_modified'] && $eventData[0]['last_modified'] > 631152000) {
$lm = sprintf($format_string_mod, $position, PLUGIN_EVENT_ENTRYLASTMODIFIED_HTML, serendipity_formatTime(DATE_FORMAT_SHORT, $eventData[0]['last_modified']));
$eventData[0]['add_footer'] .= $lm;
$eventData[0]['string_last_modified'] .= $lm;
} elseif ($notmodified == true && PLUGIN_EVENT_ENTRYLASTMODIFIED_NOTMODIFIED != '') {
$lm = sprintf($format_string_nomod, $position, PLUGIN_EVENT_ENTRYLASTMODIFIED_NOTMODIFIED);
$eventData[0]['add_footer'] .= $lm;
$eventData[0]['string_last_modified'] .= $lm;
}
} elseif (is_array($eventData)) {
$elements = count($eventData);
for ($i = 0; $i < $elements; $i++) {
if (!isset($eventData[$i]['add_footer'])) {
$eventData[$i]['add_footer'] = '';
}
if ($eventData[$i]['timestamp'] != $eventData[$i]['last_modified']) {
$lm = sprintf($format_string_mod, $position, PLUGIN_EVENT_ENTRYLASTMODIFIED_HTML, serendipity_formatTime(DATE_FORMAT_SHORT, $eventData[$i]['last_modified']));
$eventData[$i]['add_footer'] .= $lm;
$eventData[$i]['string_last_modified'] .= $lm;
} elseif ($notmodified == true && PLUGIN_EVENT_ENTRYLASTMODIFIED_NOTMODIFIED != '') {
$lm = sprintf($format_string_nomod, $position, PLUGIN_EVENT_ENTRYLASTMODIFIED_NOTMODIFIED);
$eventData[$i]['add_footer'] .= $lm;
$eventData[$i]['string_last_modified'] .= $lm;
}
}
}
return true;
break;
}
}
return false;
}
}
/* vim: set sts=4 ts=4 expandtab : */
?>