DiscuzX/upload/source/class/class_blockpermission.php

270 lines
8.8 KiB
PHP

<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: class_blockpermission.php 27449 2012-02-01 05:32:35Z zhangguosheng $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
class block_permission {
function block_permission() {}
function &instance() {
static $object;
if(empty($object)) {
$object = new block_permission();
}
return $object;
}
function add_users_perm($bid, $users) {
if(($uids = C::t('common_block_permission')->insert_by_bid($bid, $users))) {
$this->_update_member_allowadmincp($uids);
}
}
function _update_member_allowadmincp($uids) {
if(!empty($uids)) {
$userperms = C::t('common_block_permission')->fetch_permission_by_uid($uids);
foreach(C::t('common_member')->fetch_all($uids, false, 0) as $uid => $v) {
$v['allowadmincp'] = setstatus(4, empty($userperms[$uid]['allowmanage']) ? 0 : 1, $v['allowadmincp']);
if($userperms[$uid]['allowrecommend'] > 0 ) {
if($userperms[$uid]['allowrecommend'] == $userperms[$uid]['needverify']) {
$v['allowadmincp'] = setstatus(5, 1, $v['allowadmincp']);
$v['allowadmincp'] = setstatus(6, 0, $v['allowadmincp']);
} else {
$v['allowadmincp'] = setstatus(5, 0, $v['allowadmincp']);
$v['allowadmincp'] = setstatus(6, 1, $v['allowadmincp']);
}
} else {
$v['allowadmincp'] = setstatus(5, 0, $v['allowadmincp']);
$v['allowadmincp'] = setstatus(6, 0, $v['allowadmincp']);
}
C::t('common_member')->update($uid, array('allowadmincp'=>$v['allowadmincp']));
}
}
}
function delete_users_perm($bid, $users) {
$bid = intval($bid);
if($bid && $users) {
C::t('common_block_permission')->delete_by_bid_uid_inheritedtplname($bid, $users, '');
C::t('common_block_favorite')->delete_by_uid_bid($users, $bid);
$this->_update_member_allowadmincp($users);
}
}
function delete_inherited_perm_by_bid($bids, $inheritedtplname = '', $uid = 0) {
if(!is_array($bids)) $bids = array($bids);
if($bids) {
$uid = intval($uid);
C::t('common_block_permission')->delete_by_bid_uid_inheritedtplname($bids, $users, empty($inheritedtplname) ? true : $inheritedtplname);
if($uid) {
C::t('common_block_favorite')->delete_by_uid_bid($uid, $bids);
$this->_update_member_allowadmincp(array($uid));
}
}
}
function remake_inherited_perm($bid) {
$bid = intval($bid);
if($bid) {
if(($targettplname = C::t('common_template_block')->fetch_targettplname_by_bid($bid))) {
$tplpermsission = & template_permission::instance();
$userperm = $tplpermsission->get_users_perm_by_template($targettplname);
$this->add_users_blocks($userperm, $bid, $targettplname);
}
}
}
function get_perms_by_bid($bid, $uid = 0) {
$perms = array();
$bid = intval($bid);
$uid = intval($uid);
if($bid) {
$perms = C::t('common_block_permission')->fetch_all_by_bid($bid, $uid);
}
return $perms;
}
function add_users_blocks($users, $bids, $tplname = '') {
if(($uids = C::t('common_block_permission')->insert_batch($users, $bids, $tplname))) {
$this->_update_member_allowadmincp($uids);
}
}
function delete_perm_by_inheritedtpl($tplname, $uids) {
if(!empty($uids) && !is_array($uids)) $uids = array($uids);
if($tplname) {
C::t('common_block_permission')->delete_by_bid_uid_inheritedtplname(FALSE, $uids, $tplname);
if($uids) {
$this->_update_member_allowadmincp($uids);
}
}
}
function delete_perm_by_template($templates) {
if($templates) {
C::t('common_block_permission')->delete_by_bid_uid_inheritedtplname(FALSE, FALSE, $templates);
}
}
function get_bids_by_template($tplname) {
return $tplname ? C::t('common_template_block')->fetch_all_bid_by_targettplname_notinherited($tplname, 0) : array();
}
}
class template_permission {
function template_permission() {}
function &instance() {
static $object;
if(empty($object)) {
$object = new template_permission();
}
return $object;
}
function add_users($tplname, $users) {
$templates = $this->_get_templates_subs($tplname);
$this->_add_users_templates($users, $templates);
$blockpermission = & block_permission::instance();
$bids = $blockpermission->get_bids_by_template($templates);
$blockpermission->add_users_blocks($users, $bids, $tplname);
}
function delete_users($tplname, $uids) {
$uids = !is_array($uids) ? array($uids) : $uids;
$uids = array_map('intval', $uids);
$uids = array_filter($uids);
if($uids) {
C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname($tplname, $uids, '');
}
$this->delete_perm_by_inheritedtpl($tplname, $uids);
}
function add_blocks($tplname, $bids){
$users = $this->get_users_perm_by_template($tplname);
if($users) {
$blockpermission = & block_permission::instance();
$blockpermission->add_users_blocks($users, $bids, $tplname);
}
}
function get_users_perm_by_template($tplname){
$perm = array();
if($tplname) {
$perm = C::t('common_template_permission')->fetch_all_by_targettplname($tplname);
}
return $perm;
}
function _add_users_templates($users, $templates, $uptplname = '') {
C::t('common_template_permission')->insert_batch($users, $templates, $uptplname);
}
function delete_allperm_by_tplname($tplname){
if($tplname) {
$tplname = is_array($tplname) ? $tplname : array($tplname);
$blockpermission = & block_permission::instance();
$blockpermission->delete_perm_by_template($tplname);
$tplnames = dimplode($tplname);
C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname($tplnames);
C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname(false, false, $tplnames);
}
}
function delete_inherited_perm_by_tplname($templates, $inheritedtplname = '', $uid = 0) {
if($templates && !is_array($templates)) {
$templates = $this->_get_templates_subs($templates);
}
if($templates) {
$uid = intval($uid);
C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname($templates, $uid, $inheritedtplname ? $inheritedtplname : true);
$blockpermission = & block_permission::instance();
$blocks = $blockpermission->get_bids_by_template($templates);
$blockpermission->delete_inherited_perm_by_bid($blocks, $inheritedtplname, $uid);
}
}
function delete_perm_by_inheritedtpl($tplname, $uids = array()) {
if($uids && !is_array($uids)) $uids = array($uids);
if($tplname) {
C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname(false, $uids, $tplname);
$blockpermission = & block_permission::instance();
$blockpermission->delete_perm_by_inheritedtpl($tplname, $uids);
}
}
function remake_inherited_perm($tplname, $parenttplname) {
if($tplname && $parenttplname) {
$users = $this->get_users_perm_by_template($parenttplname);
$templates = $this->_get_templates_subs($tplname);
$this->_add_users_templates($users, $templates, $parenttplname);
$blockpermission = & block_permission::instance();
$bids = $blockpermission->get_bids_by_template($templates);
$blockpermission->add_users_blocks($users, $bids, $parenttplname);
}
}
function _get_templates_subs($tplname){
global $_G;
$tplpre = 'portal/list_';
$cattpls = array($tplname);
if(substr($tplname, 0, 12) == $tplpre){
loadcache('portalcategory');
$portalcategory = $_G['cache']['portalcategory'];
$catid = intval(str_replace($tplpre, '', $tplname));
if(isset($portalcategory[$catid]) && !empty($portalcategory[$catid]['children'])) {
$children = array();
foreach($portalcategory[$catid]['children'] as $cid) {
if(!$portalcategory[$cid]['notinheritedblock']) {
$cattpls[] = $tplpre.$cid;
if(!empty($portalcategory[$cid]['children'])) {
$children = array_merge($children, $portalcategory[$cid]['children']);
}
}
}
if(!empty($children)) {
foreach($children as $cid) {
if(!$portalcategory[$cid]['notinheritedblock']) {
$cattpls[] = $tplpre.$cid;
}
}
}
}
}
return $cattpls;
}
function _get_templates_ups($tplname){
global $_G;
$tplpre = 'portal/list_';
$cattpls = array($tplname);
if(substr($tplname, 0, 12) == $tplpre){
loadcache('portalcategory');
$portalcategory = $_G['cache']['portalcategory'];
$catid = intval(str_replace($tplpre, '', $tplname));
if(isset($portalcategory[$catid]) && !$portalcategory[$catid]['notinheritedblock']) {
$upid = $portalcategory[$catid]['upid'];
while(!empty($upid)) {
$cattpls[] = $tplpre.$upid;
$upid = !$portalcategory[$upid]['notinheritedblock'] ? $portalcategory[$upid]['upid'] : 0;
}
}
}
return $cattpls;
}
}
?>