123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <?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;
- }
- }
- ?>
|