From 3d600088424d2e1f71c7b5ae7571a8a101e9e8e2 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 24 Mar 2015 15:53:55 -0700 Subject: provide a site-wide expiration policy without loopholes - still need work to reduce the impact of expiration queries. --- include/expire.php | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'include/expire.php') diff --git a/include/expire.php b/include/expire.php index a229bd4ac..8fedf71b5 100644 --- a/include/expire.php +++ b/include/expire.php @@ -7,7 +7,11 @@ function expire_run($argv, $argc){ cli_startup(); - $r = q("select id from item where (item_restrict & %d)>0 and not (item_restrict & %d)>0 and changed < %s - INTERVAL %s", + + // perform final cleanup on previously delete items + + $r = q("select id from item where (item_restrict & %d) > 0 and (item_restrict & %d) = 0 + and changed < %s - INTERVAL %s", intval(ITEM_DELETED), intval(ITEM_PENDING_REMOVE), db_utcnow(), db_quoteinterval('10 DAY') @@ -19,8 +23,9 @@ function expire_run($argv, $argc){ } // physically remove anything that has been deleted for more than two months + // FIXME - this is a wretchedly inefficient query - $r = q("delete from item where ( item_restrict & %d )>0 and changed < %s - INTERVAL %s", + $r = q("delete from item where ( item_restrict & %d ) > 0 and changed < %s - INTERVAL %s", intval(ITEM_PENDING_REMOVE), db_utcnow(), db_quoteinterval('36 DAY') ); @@ -32,12 +37,28 @@ function expire_run($argv, $argc){ logger('expire: start', LOGGER_DEBUG); + $site_expire = get_config('system', 'default_expire_days'); + if(intval($site_expire)) { + $r = q("SELECT channel_id, channel_address, channel_pageflags, channel_expire_days from channel where true"); + } + else { + $r = q("SELECT channel_id, channel_address, channel_pageflags, channel_expire_days from channel where channel_expire_days != 0"); + } - $r = q("SELECT channel_id, channel_address, channel_expire_days from channel where channel_expire_days != 0"); - if($r && count($r)) { + if($r) { foreach($r as $rr) { + + // expire the sys channel separately + if($rr['channel_pageflags'] & PAGE_SYSTEM) + continue; + + // if the site expiration is non-zero and less than person expiration, use that logger('Expire: ' . $rr['channel_address'] . ' interval: ' . $rr['channel_expire_days'], LOGGER_DEBUG); - item_expire($rr['channel_id'],$rr['channel_expire_days']); + item_expire($rr['channel_id'], + ((intval($site_expire) && intval($site_expire) < intval($rr['channel_expire_days'])) + ? $site_expire + : $rr['channel_expire_days']) + ); } } @@ -48,14 +69,13 @@ function expire_run($argv, $argc){ // this should probably just fetch the channel_expire_days from the sys channel, // but there's no convenient way to set it. - $expire_days = get_config('externals','expire_days'); + $expire_days = get_config('system','sys_expire_days'); if($expire_days === false) $expire_days = 30; if($expire_days) - item_expire($x['channel_id'],$expire_days); + item_expire($x['channel_id'],(($site_expire && $site_expire < $expire_days) ? $site_expire : $expire_days)); } - return; } -- cgit v1.2.3