add('name', PLUGIN_EVENT_OUTDATE); $propbag->add('description', PLUGIN_EVENT_OUTDATE_DESC); $propbag->add('event_hooks', array('entries_header' => true, 'entry_display' => true)); $propbag->add('configuration', array('timeout', 'timeout_sticky', 'timeout_custom')); $propbag->add('author', 'Garvin Hicking'); $propbag->add('requirements', array( 'serendipity' => '0.8', 'smarty' => '2.6.7', 'php' => '4.1.0' )); $propbag->add('groups', array('FRONTEND_ENTRY_RELATED')); $propbag->add('version', '1.6'); $propbag->add('stackable', false); $this->dependencies = array('serendipity_event_entryproperties' => 'keep'); } function introspect_config_item($name, &$propbag) { switch($name) { case 'timeout': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_EVENT_OUTDATE_TIMEOUT); $propbag->add('description', PLUGIN_EVENT_OUTDATE_TIMEOUT_DESC); $propbag->add('default', 31); break; case 'timeout_sticky': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_EVENT_OUTDATE_TIMEOUT_STICKY); $propbag->add('description', PLUGIN_EVENT_OUTDATE_TIMEOUT_STICKY_DESC); $propbag->add('default', 31); break; case 'timeout_custom': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_EVENT_OUTDATE_TIMEOUT_EXPIRY_FIELD); $propbag->add('description', PLUGIN_EVENT_OUTDATE_TIMEOUT_EXPIRY_FIELD_DESC); $propbag->add('default', ''); break; default: return false; } return true; } function generate_content(&$title) { $title = PLUGIN_EVENT_OUTDATE; } function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; $hooks = &$bag->get('event_hooks'); if (isset($hooks[$event])) { switch($event) { case 'entry_display': if ($this->get_config('timeout') > 0) { $sql = "SELECT id, ep.value AS access FROM {$serendipity['dbPrefix']}entries AS e LEFT OUTER JOIN {$serendipity['dbPrefix']}entryproperties AS ep ON (ep.entryid = e.id AND ep.property = 'ep_access') WHERE (ep.property IS NULL OR ep.value = 'public') AND e.timestamp < " . (time() - ($this->get_config('timeout') * 24 * 60 * 60)); $rows = serendipity_db_query($sql); if (is_array($rows)) { foreach($rows AS $idx => $row) { if (!empty($row['access'])) { serendipity_db_query("UPDATE {$serendipity['dbPrefix']}entryproperties SET value = 'member' WHERE entryid = " . (int)$row['id'] . " AND property = 'ep_access'"); } else { serendipity_db_query("INSERT INTO {$serendipity['dbPrefix']}entryproperties (entryid, property, value) VALUES (" . $row['id'] . ", 'ep_access', 'member')"); } } } } $timeout_custom = $this->get_config('timeout_custom'); if (!empty($timeout_custom)) { $sql = "SELECT id, ep.value AS access FROM {$serendipity['dbPrefix']}entries AS e JOIN {$serendipity['dbPrefix']}entryproperties AS ep ON ep.entryid = e.id WHERE e.isdraft = 'false' AND ep.property = 'ep_" . $timeout_custom . "' AND ep.value != '' AND UNIX_TIMESTAMP(ep.value) < " . time(); $rows = serendipity_db_query($sql); if (is_array($rows)) { foreach($rows AS $idx => $row) { serendipity_db_query("UPDATE {$serendipity['dbPrefix']}entries SET isdraft = 'true' WHERE id = " . (int)$row['id']); } } } if ($this->get_config('timeout_sticky') > 0) { $sql = "SELECT id, ep.value AS sticky FROM {$serendipity['dbPrefix']}entries AS e LEFT OUTER JOIN {$serendipity['dbPrefix']}entryproperties AS ep ON ep.entryid = e.id WHERE (ep.property = 'ep_is_sticky') AND e.timestamp < " . (time() - ($this->get_config('timeout_sticky') * 24 * 60 * 60)); $rows = serendipity_db_query($sql); if (is_array($rows)) { foreach($rows AS $idx => $row) { if (!empty($row['sticky'])) { serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}entryproperties WHERE property = 'ep_is_sticky' AND entryid = " . (int)$row['id']); } } } } return true; break; default: return false; break; } } else { return false; } } } /* vim: set sts=4 ts=4 expandtab : */