aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Vogeley <christian.vogeley@hotmail.de>2013-09-08 18:03:26 +0200
committerChristian Vogeley <christian.vogeley@hotmail.de>2013-09-08 18:03:26 +0200
commite70c9b3613088f2a34f83cb2e78a1eaee152f8cb (patch)
tree7b51c5e13cfd614ac475ec403860efa0945eb9a2
parentb88f60b51ff9416c35b5af9ce849026666c47cc8 (diff)
parentf4dfb90dbc9b7590d9b8bf84df9ca746f1aa1d6f (diff)
downloadvolse-hubzilla-e70c9b3613088f2a34f83cb2e78a1eaee152f8cb.tar.gz
volse-hubzilla-e70c9b3613088f2a34f83cb2e78a1eaee152f8cb.tar.bz2
volse-hubzilla-e70c9b3613088f2a34f83cb2e78a1eaee152f8cb.zip
Merge service class
//service class configure in .htconfig.php: $a->config['system']['default_service_class']='standard'; // this is the default service class that is attached to every new account $a->config['service_class']['standard'] = array('photo_upload_limit'=>20000000, // total photo storage limit per channel (here 20MB) 'total_identities' =>5, // number of channels an account can create 'total_items' =>2000, // number of top level posts a channel can create. Applies only to top level posts of the user, other posts and comments are unaffected 'total_pages' =>10, // number of pages a channel can create 'total_channels' =>500, // number of channels the user can add, other users can still add this channel, even if the limit is reached 'attach_upload_limit' =>20000000); // total attachment storage limit per channel (here 20MB)
-rw-r--r--include/attach.php2
-rw-r--r--include/contact_widgets.php19
-rw-r--r--include/identity.php7
-rwxr-xr-xinclude/plugin.php19
-rw-r--r--mod/item.php49
-rw-r--r--mod/manage.php12
-rwxr-xr-xview/tpl/channels.tpl5
-rwxr-xr-xview/tpl/follow.tpl3
-rwxr-xr-xview/tpl/photos_upload.tpl2
9 files changed, 104 insertions, 14 deletions
diff --git a/include/attach.php b/include/attach.php
index 46d406f4b..da08154c6 100644
--- a/include/attach.php
+++ b/include/attach.php
@@ -339,7 +339,7 @@ function attach_store($channel,$observer_hash,$options = '',$arr = null) {
intval($channel_id)
);
if(($r) && (($r[0]['total'] + $filesize) > ($limit - $existing_size))) {
- $ret['message'] = upgrade_message(true);
+ $ret['message'] = upgrade_message(true).sprintf(t("You have reached your limit of %1$.0f Mbytes attachment storage."),$limit / 1024000);
@unlink($src);
return $ret;
}
diff --git a/include/contact_widgets.php b/include/contact_widgets.php
index e5f778e49..cc7d92508 100644
--- a/include/contact_widgets.php
+++ b/include/contact_widgets.php
@@ -1,12 +1,27 @@
<?php /** @file */
function follow_widget() {
-
+ $a = get_app();
+ $uid =$a->channel['channel_id'];
+ $r = q("select count(*) as total from abook where abook_channel = %d and not (abook_flags & %d) ",
+ intval($uid),
+ intval(ABOOK_FLAG_SELF)
+ );
+ if($r)
+ $total_channels = $r[0]['total'];
+ $limit = service_class_fetch($uid,'total_channels');
+ if($limit !== false) {
+ $abook_usage_message = sprintf( t("You have %1$.0f of %2$.0f allowed connections."), $total_channels, $limit);
+ }
+ else {
+ $abook_usage_message = '';
+ }
return replace_macros(get_markup_template('follow.tpl'),array(
'$connect' => t('Add New Connection'),
'$desc' => t('Enter the channel address'),
'$hint' => t('Example: bob@example.com, http://example.com/barbara'),
- '$follow' => t('Connect')
+ '$follow' => t('Connect'),
+ '$abook_usage_message' => $abook_usage_message
));
}
diff --git a/include/identity.php b/include/identity.php
index 8db6355c0..98209c8ae 100644
--- a/include/identity.php
+++ b/include/identity.php
@@ -7,7 +7,7 @@ require_once('include/crypto.php');
function identity_check_service_class($account_id) {
$ret = array('success' => false, $message => '');
- $r = q("select count(channel_id) as total from channel were channel_account_id = %d ",
+ $r = q("select count(channel_id) as total from channel where channel_account_id = %d ",
intval($account_id)
);
if(! ($r && count($r))) {
@@ -80,7 +80,10 @@ function create_identity($arr) {
$ret['message'] = t('No account identifier');
return $ret;
}
-
+ $ret=identity_check_service_class($arr['account_id']);
+ if (!$ret['success']) {
+ return $ret;
+ }
$nick = mb_strtolower(trim($arr['nickname']));
$name = escape_tags($arr['name']);
$pageflags = ((x($arr,'pageflags')) ? intval($arr['pageflags']) : PAGE_NORMAL);
diff --git a/include/plugin.php b/include/plugin.php
index 01ee99786..ea88a61df 100755
--- a/include/plugin.php
+++ b/include/plugin.php
@@ -374,12 +374,14 @@ function get_theme_screenshot($theme) {
function service_class_allows($uid,$property,$usage = false) {
-
+ $a = get_app();
if($uid == local_user()) {
- $service_class = $a->user['service_class'];
+ $service_class = $a->account['account_service_class'];
}
else {
- $r = q("select service_class from user where uid = %d limit 1",
+ $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)) {
@@ -404,13 +406,15 @@ function service_class_allows($uid,$property,$usage = false) {
function service_class_fetch($uid,$property) {
-
+ $a = get_app();
if($uid == local_user()) {
- $service_class = $a->user['service_class'];
+ $service_class = $a->account['account_service_class'];
}
else {
- $r = q("select service_class from user where uid = %d limit 1",
- intval($uid)
+ $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'];
@@ -420,6 +424,7 @@ function service_class_fetch($uid,$property) {
return false; // everything is allowed
$arr = get_config('service_class',$service_class);
+
if(! is_array($arr) || (! count($arr)))
return false;
diff --git a/mod/item.php b/mod/item.php
index 3069bfa4d..f47180f19 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -71,7 +71,17 @@ function item_post(&$a) {
$webpage = ((x($_REQUEST,'webpage')) ? intval($_REQUEST['webpage']) : 0);
$pagetitle = ((x($_REQUEST,'pagetitle')) ? escape_tags($_REQUEST['pagetitle']) : '');
$layout_mid = ((x($_REQUEST,'layout_mid')) ? escape_tags($_REQUEST['layout_mid']): '');
-
+ /*
+ Check service class limits
+ */
+ if (local_user() && !(x($_REQUEST,'parent')) && !(x($_REQUEST,'post_id'))) {
+ $ret=item_check_service_class(local_user(),x($_REQUEST,'webpage'));
+ if (!$ret['success']) {
+ notice( t($ret['message']) . EOL) ;
+ goaway($a->get_baseurl() . "/" . $return_path );
+ killme();
+ }
+ }
if($pagetitle) {
require_once('library/urlify/URLify.php');
$pagetitle = strtolower(URLify::transliterate($pagetitle));
@@ -1115,3 +1125,40 @@ function fix_attached_file_permissions($channel,$observer_hash,$body,
}
}
}
+function item_check_service_class($channel_id,$iswebpage) {
+ $ret = array('success' => false, $message => '');
+ if ($iswebpage) {
+ $r = q("select count(i.id) as total from item i
+ right join channel c on (i.author_xchan=c.channel_hash and i.uid=c.channel_id )
+ and i.parent=i.id and (i.item_restrict & %d) and i.uid= %d ",
+ intval(ITEM_WEBPAGE),
+ intval($channel_id)
+ );
+ }
+ else {
+ $r = q("select count(i.id) as total from item i
+ right join channel c on (i.author_xchan=c.channel_hash and i.uid=c.channel_id )
+ and i.parent=i.id and (i.item_restrict=0) and i.uid= %d ",
+ intval($channel_id)
+ );
+ }
+ if(! ($r && count($r))) {
+ $ret['message'] = t('Unable to obtain identity information from database');
+ return $ret;
+ }
+ if (!$iswebpage) {
+ if(! service_class_allows($channel_id,'total_items',$r[0]['total'])) {
+ $result['message'] .= upgrade_message().sprintf(t("You have reached your limit of %1$.0f top level posts."),$r[0]['total']);
+ return $result;
+ }
+ }
+ else {
+ if(! service_class_allows($channel_id,'total_pages',$r[0]['total'])) {
+ $result['message'] .= upgrade_message().sprintf(t("You have reached your limit of %1$.0f webpages."),$r[0]['total']);
+ return $result;
+ }
+ }
+
+ $ret['success'] = true;
+ return $ret;
+}
diff --git a/mod/manage.php b/mod/manage.php
index 2cdfce115..fad359535 100644
--- a/mod/manage.php
+++ b/mod/manage.php
@@ -53,6 +53,17 @@ function manage_content(&$a) {
$channels[$x]['default_links'] = '1';
}
}
+
+ $r = q("select count(channel_id) as total from channel where channel_account_id = %d ",
+ intval($account)
+ );
+ $limit = service_class_fetch(local_user(),'total_identities');
+ if($limit !== false) {
+ $channel_usage_message = sprintf( t("You have created %1$.0f of %2$.0f allowed channels."), $r[0]['total'], $limit);
+ }
+ else {
+ $channel_usage_message = '';
+ }
}
$links = array(
@@ -69,6 +80,7 @@ function manage_content(&$a) {
'$msg_make_default' => t('Make Default'),
'$links' => $links,
'$all_channels' => $channels,
+ '$channel_usage_message' => $channel_usage_message,
));
diff --git a/view/tpl/channels.tpl b/view/tpl/channels.tpl
index 317384661..af6b36b1d 100755
--- a/view/tpl/channels.tpl
+++ b/view/tpl/channels.tpl
@@ -7,6 +7,11 @@
{{/foreach}}
{{/if}}
+{{if $channel_usage_message}}
+<div id="channel-usage-message" class="usage-message">
+{{$channel_usage_message}}
+</div>
+{{/if}}
{{if $selected}}
<div id="selected-channel">
<div id="channels-selected">{{$msg_selected}}</div>
diff --git a/view/tpl/follow.tpl b/view/tpl/follow.tpl
index 350f8d910..b0597e9b6 100755
--- a/view/tpl/follow.tpl
+++ b/view/tpl/follow.tpl
@@ -4,5 +4,8 @@
<form action="follow" method="post" />
<input id="side-follow-url" type="text" name="url" size="24" title="{{$hint}}" /><input id="side-follow-submit" type="submit" name="submit" value="{{$follow}}" />
</form>
+ {{if $abook_usage_message}}
+ <div class="usage-message" id="abook-usage-message">{{$abook_usage_message}}</div>
+ {{/if}}
</div>
diff --git a/view/tpl/photos_upload.tpl b/view/tpl/photos_upload.tpl
index 707024cb9..102c4d872 100755
--- a/view/tpl/photos_upload.tpl
+++ b/view/tpl/photos_upload.tpl
@@ -1,6 +1,6 @@
<h3>{{$pagename}}</h3>
-<div id="photos-usage-message">{{$usage}}</div>
+<div id="photos-usage-message" class="usage-message">{{$usage}}</div>
<form action="photos/{{$nickname}}" enctype="multipart/form-data" method="post" name="photos-upload-form" id="photos-upload-form" >
<input type="hidden" id="photos-upload-source" name="source" value="photos" />