From 844087bc71f333719c1e08d807874f3ae3a7053e Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 3 Sep 2014 19:07:14 -0700 Subject: implement service class for feed polling frequenecy, fixed a service class bug, moved service class stuff from plugin to account.php where it belongs and load that by default instead of on demand --- boot.php | 1 + include/account.php | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++ include/plugin.php | 87 ---------------------------------------------------- include/poller.php | 5 +-- mod/admin.php | 2 -- mod/register.php | 1 - mod/regmod.php | 1 - mod/regver.php | 2 -- mod/zfinger.php | 1 - 9 files changed, 92 insertions(+), 96 deletions(-) diff --git a/boot.php b/boot.php index cb70b898b..0c2cfafbf 100755 --- a/boot.php +++ b/boot.php @@ -41,6 +41,7 @@ require_once('include/features.php'); require_once('include/taxonomy.php'); require_once('include/identity.php'); require_once('include/Contact.php'); +require_once('include/account.php'); define ( 'RED_PLATFORM', 'Red Matrix' ); diff --git a/include/account.php b/include/account.php index 4ded069d5..6cc203dc8 100644 --- a/include/account.php +++ b/include/account.php @@ -547,3 +547,91 @@ function downgrade_accounts() { } } + + +// check service_class restrictions. If there are no service_classes defined, everything is allowed. +// if $usage is supplied, we check against a maximum count and return true if the current usage is +// less than the subscriber plan allows. Otherwise we return boolean true or false if the property +// is allowed (or not) in this subscriber plan. An unset property for this service plan means +// the property is allowed, so it is only necessary to provide negative properties for each plan, +// or what the subscriber is not allowed to do. + + +function service_class_allows($uid,$property,$usage = false) { + $a = get_app(); + if($uid == local_user()) { + $service_class = $a->account['account_service_class']; + } + else { + $r = q("select account_service_class as service_class + from channel c, account a + where c.channel_account_id=a.account_id and c.channel_id= %d limit 1", + intval($uid) + ); + if($r !== false and count($r)) { + $service_class = $r[0]['service_class']; + } + } + if(! x($service_class)) + return true; // everything is allowed + + $arr = get_config('service_class',$service_class); + if(! is_array($arr) || (! count($arr))) + return true; + + if($usage === false) + return ((x($arr[$property])) ? (bool) $arr[$property] : true); + else { + if(! array_key_exists($property,$arr)) + return true; + return (((intval($usage)) < intval($arr[$property])) ? true : false); + } +} + + +function service_class_fetch($uid,$property) { + $a = get_app(); + if($uid == local_user()) { + $service_class = $a->account['account_service_class']; + } + else { + $r = q("select account_service_class as service_class + from channel c, account a + where c.channel_account_id=a.account_id and c.channel_id= %d limit 1", + intval($uid) + ); + if($r !== false and count($r)) { + $service_class = $r[0]['service_class']; + } + } + if(! x($service_class)) + return false; // everything is allowed + + $arr = get_config('service_class',$service_class); + + if(! is_array($arr) || (! count($arr))) + return false; + + return((array_key_exists($property,$arr)) ? $arr[$property] : false); +} + +function upgrade_link($bbcode = false) { + $l = get_config('service_class','upgrade_link'); + if(! $l) + return ''; + if($bbcode) + $t = sprintf('[zrl=%s]' . t('Click here to upgrade.') . '[/zrl]', $l); + else + $t = sprintf('' . t('Click here to upgrade.') . '', $l); + return $t; +} + +function upgrade_message($bbcode = false) { + $x = upgrade_link($bbcode); + return t('This action exceeds the limits set by your subscription plan.') . (($x) ? ' ' . $x : '') ; +} + +function upgrade_bool_message($bbcode = false) { + $x = upgrade_link($bbcode); + return t('This action is not available under your subscription plan.') . (($x) ? ' ' . $x : '') ; +} diff --git a/include/plugin.php b/include/plugin.php index c5f57829d..c2e08a989 100755 --- a/include/plugin.php +++ b/include/plugin.php @@ -430,93 +430,6 @@ function get_theme_screenshot($theme) { } -// check service_class restrictions. If there are no service_classes defined, everything is allowed. -// if $usage is supplied, we check against a maximum count and return true if the current usage is -// less than the subscriber plan allows. Otherwise we return boolean true or false if the property -// is allowed (or not) in this subscriber plan. An unset property for this service plan means -// the property is allowed, so it is only necessary to provide negative properties for each plan, -// or what the subscriber is not allowed to do. - - -function service_class_allows($uid,$property,$usage = false) { - $a = get_app(); - if($uid == local_user()) { - $service_class = $a->account['account_service_class']; - } - else { - $r = q("select account_service_class as service_class - from channel c, account a - where c.channel_account_id=a.account_id and c.channel_id= %d limit 1", - intval($uid) - ); - if($r !== false and count($r)) { - $service_class = $r[0]['service_class']; - } - } - if(! x($service_class)) - return true; // everything is allowed - - $arr = get_config('service_class',$service_class); - if(! is_array($arr) || (! count($arr))) - return true; - - if($usage === false) - return ((x($arr[$property])) ? (bool) $arr['property'] : true); - else { - if(! array_key_exists($property,$arr)) - return true; - return (((intval($usage)) < intval($arr[$property])) ? true : false); - } -} - - -function service_class_fetch($uid,$property) { - $a = get_app(); - if($uid == local_user()) { - $service_class = $a->account['account_service_class']; - } - else { - $r = q("select account_service_class as service_class - from channel c, account a - where c.channel_account_id=a.account_id and c.channel_id= %d limit 1", - intval($uid) - ); - if($r !== false and count($r)) { - $service_class = $r[0]['service_class']; - } - } - if(! x($service_class)) - return false; // everything is allowed - - $arr = get_config('service_class',$service_class); - - if(! is_array($arr) || (! count($arr))) - return false; - - return((array_key_exists($property,$arr)) ? $arr[$property] : false); -} - -function upgrade_link($bbcode = false) { - $l = get_config('service_class','upgrade_link'); - if(! $l) - return ''; - if($bbcode) - $t = sprintf('[zrl=%s]' . t('Click here to upgrade.') . '[/zrl]', $l); - else - $t = sprintf('' . t('Click here to upgrade.') . '', $l); - return $t; -} - -function upgrade_message($bbcode = false) { - $x = upgrade_link($bbcode); - return t('This action exceeds the limits set by your subscription plan.') . (($x) ? ' ' . $x : '') ; -} - -function upgrade_bool_message($bbcode = false) { - $x = upgrade_link($bbcode); - return t('This action is not available under your subscription plan.') . (($x) ? ' ' . $x : '') ; -} - /** * @brief add CSS to * diff --git a/include/poller.php b/include/poller.php index 2ba86dc0b..b26b9e696 100644 --- a/include/poller.php +++ b/include/poller.php @@ -151,7 +151,6 @@ function poller_run($argv, $argc){ q("delete from notify where seen = 1 and date < UTC_TIMESTAMP() - INTERVAL 30 DAY"); // expire any expired accounts - require_once('include/account.php'); downgrade_accounts(); // If this is a directory server, request a sync with an upstream @@ -264,7 +263,9 @@ function poller_run($argv, $argc){ $c = $contact['abook_connected']; if($contact['abook_flags'] & ABOOK_FLAG_FEED) { - $min = intval(get_config('system','minimum_feedcheck_minutes')); + $min = service_class_fetch($contact['abook_channel'],'minimum_feedcheck_minutes'); + if(! $min) + $min = intval(get_config('system','minimum_feedcheck_minutes')); if(! $min) $min = 60; $x = datetime_convert('UTC','UTC',"now - $min minutes"); diff --git a/mod/admin.php b/mod/admin.php index 31d3873ff..48b342d4e 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -608,13 +608,11 @@ function admin_page_users_post(&$a){ } if (x($_POST,'page_users_approve')){ - require_once('include/account.php'); foreach($pending as $hash){ user_allow($hash); } } if (x($_POST,'page_users_deny')){ - require_once('include/account.php'); foreach($pending as $hash){ user_deny($hash); } diff --git a/mod/register.php b/mod/register.php index 954a32fbf..0e33fa358 100644 --- a/mod/register.php +++ b/mod/register.php @@ -1,6 +1,5 @@