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