class_blockpermission.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: class_blockpermission.php 27449 2012-02-01 05:32:35Z zhangguosheng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class block_permission {
  12. function block_permission() {}
  13. function &instance() {
  14. static $object;
  15. if(empty($object)) {
  16. $object = new block_permission();
  17. }
  18. return $object;
  19. }
  20. function add_users_perm($bid, $users) {
  21. if(($uids = C::t('common_block_permission')->insert_by_bid($bid, $users))) {
  22. $this->_update_member_allowadmincp($uids);
  23. }
  24. }
  25. function _update_member_allowadmincp($uids) {
  26. if(!empty($uids)) {
  27. $userperms = C::t('common_block_permission')->fetch_permission_by_uid($uids);
  28. foreach(C::t('common_member')->fetch_all($uids, false, 0) as $uid => $v) {
  29. $v['allowadmincp'] = setstatus(4, empty($userperms[$uid]['allowmanage']) ? 0 : 1, $v['allowadmincp']);
  30. if($userperms[$uid]['allowrecommend'] > 0 ) {
  31. if($userperms[$uid]['allowrecommend'] == $userperms[$uid]['needverify']) {
  32. $v['allowadmincp'] = setstatus(5, 1, $v['allowadmincp']);
  33. $v['allowadmincp'] = setstatus(6, 0, $v['allowadmincp']);
  34. } else {
  35. $v['allowadmincp'] = setstatus(5, 0, $v['allowadmincp']);
  36. $v['allowadmincp'] = setstatus(6, 1, $v['allowadmincp']);
  37. }
  38. } else {
  39. $v['allowadmincp'] = setstatus(5, 0, $v['allowadmincp']);
  40. $v['allowadmincp'] = setstatus(6, 0, $v['allowadmincp']);
  41. }
  42. C::t('common_member')->update($uid, array('allowadmincp'=>$v['allowadmincp']));
  43. }
  44. }
  45. }
  46. function delete_users_perm($bid, $users) {
  47. $bid = intval($bid);
  48. if($bid && $users) {
  49. C::t('common_block_permission')->delete_by_bid_uid_inheritedtplname($bid, $users, '');
  50. C::t('common_block_favorite')->delete_by_uid_bid($users, $bid);
  51. $this->_update_member_allowadmincp($users);
  52. }
  53. }
  54. function delete_inherited_perm_by_bid($bids, $inheritedtplname = '', $uid = 0) {
  55. if(!is_array($bids)) $bids = array($bids);
  56. if($bids) {
  57. $uid = intval($uid);
  58. C::t('common_block_permission')->delete_by_bid_uid_inheritedtplname($bids, $users, empty($inheritedtplname) ? true : $inheritedtplname);
  59. if($uid) {
  60. C::t('common_block_favorite')->delete_by_uid_bid($uid, $bids);
  61. $this->_update_member_allowadmincp(array($uid));
  62. }
  63. }
  64. }
  65. function remake_inherited_perm($bid) {
  66. $bid = intval($bid);
  67. if($bid) {
  68. if(($targettplname = C::t('common_template_block')->fetch_targettplname_by_bid($bid))) {
  69. $tplpermsission = & template_permission::instance();
  70. $userperm = $tplpermsission->get_users_perm_by_template($targettplname);
  71. $this->add_users_blocks($userperm, $bid, $targettplname);
  72. }
  73. }
  74. }
  75. function get_perms_by_bid($bid, $uid = 0) {
  76. $perms = array();
  77. $bid = intval($bid);
  78. $uid = intval($uid);
  79. if($bid) {
  80. $perms = C::t('common_block_permission')->fetch_all_by_bid($bid, $uid);
  81. }
  82. return $perms;
  83. }
  84. function add_users_blocks($users, $bids, $tplname = '') {
  85. if(($uids = C::t('common_block_permission')->insert_batch($users, $bids, $tplname))) {
  86. $this->_update_member_allowadmincp($uids);
  87. }
  88. }
  89. function delete_perm_by_inheritedtpl($tplname, $uids) {
  90. if(!empty($uids) && !is_array($uids)) $uids = array($uids);
  91. if($tplname) {
  92. C::t('common_block_permission')->delete_by_bid_uid_inheritedtplname(FALSE, $uids, $tplname);
  93. if($uids) {
  94. $this->_update_member_allowadmincp($uids);
  95. }
  96. }
  97. }
  98. function delete_perm_by_template($templates) {
  99. if($templates) {
  100. C::t('common_block_permission')->delete_by_bid_uid_inheritedtplname(FALSE, FALSE, $templates);
  101. }
  102. }
  103. function get_bids_by_template($tplname) {
  104. return $tplname ? C::t('common_template_block')->fetch_all_bid_by_targettplname_notinherited($tplname, 0) : array();
  105. }
  106. }
  107. class template_permission {
  108. function template_permission() {}
  109. function &instance() {
  110. static $object;
  111. if(empty($object)) {
  112. $object = new template_permission();
  113. }
  114. return $object;
  115. }
  116. function add_users($tplname, $users) {
  117. $templates = $this->_get_templates_subs($tplname);
  118. $this->_add_users_templates($users, $templates);
  119. $blockpermission = & block_permission::instance();
  120. $bids = $blockpermission->get_bids_by_template($templates);
  121. $blockpermission->add_users_blocks($users, $bids, $tplname);
  122. }
  123. function delete_users($tplname, $uids) {
  124. $uids = !is_array($uids) ? array($uids) : $uids;
  125. $uids = array_map('intval', $uids);
  126. $uids = array_filter($uids);
  127. if($uids) {
  128. C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname($tplname, $uids, '');
  129. }
  130. $this->delete_perm_by_inheritedtpl($tplname, $uids);
  131. }
  132. function add_blocks($tplname, $bids){
  133. $users = $this->get_users_perm_by_template($tplname);
  134. if($users) {
  135. $blockpermission = & block_permission::instance();
  136. $blockpermission->add_users_blocks($users, $bids, $tplname);
  137. }
  138. }
  139. function get_users_perm_by_template($tplname){
  140. $perm = array();
  141. if($tplname) {
  142. $perm = C::t('common_template_permission')->fetch_all_by_targettplname($tplname);
  143. }
  144. return $perm;
  145. }
  146. function _add_users_templates($users, $templates, $uptplname = '') {
  147. C::t('common_template_permission')->insert_batch($users, $templates, $uptplname);
  148. }
  149. function delete_allperm_by_tplname($tplname){
  150. if($tplname) {
  151. $tplname = is_array($tplname) ? $tplname : array($tplname);
  152. $blockpermission = & block_permission::instance();
  153. $blockpermission->delete_perm_by_template($tplname);
  154. $tplnames = dimplode($tplname);
  155. C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname($tplnames);
  156. C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname(false, false, $tplnames);
  157. }
  158. }
  159. function delete_inherited_perm_by_tplname($templates, $inheritedtplname = '', $uid = 0) {
  160. if($templates && !is_array($templates)) {
  161. $templates = $this->_get_templates_subs($templates);
  162. }
  163. if($templates) {
  164. $uid = intval($uid);
  165. C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname($templates, $uid, $inheritedtplname ? $inheritedtplname : true);
  166. $blockpermission = & block_permission::instance();
  167. $blocks = $blockpermission->get_bids_by_template($templates);
  168. $blockpermission->delete_inherited_perm_by_bid($blocks, $inheritedtplname, $uid);
  169. }
  170. }
  171. function delete_perm_by_inheritedtpl($tplname, $uids = array()) {
  172. if($uids && !is_array($uids)) $uids = array($uids);
  173. if($tplname) {
  174. C::t('common_template_permission')->delete_by_targettplname_uid_inheritedtplname(false, $uids, $tplname);
  175. $blockpermission = & block_permission::instance();
  176. $blockpermission->delete_perm_by_inheritedtpl($tplname, $uids);
  177. }
  178. }
  179. function remake_inherited_perm($tplname, $parenttplname) {
  180. if($tplname && $parenttplname) {
  181. $users = $this->get_users_perm_by_template($parenttplname);
  182. $templates = $this->_get_templates_subs($tplname);
  183. $this->_add_users_templates($users, $templates, $parenttplname);
  184. $blockpermission = & block_permission::instance();
  185. $bids = $blockpermission->get_bids_by_template($templates);
  186. $blockpermission->add_users_blocks($users, $bids, $parenttplname);
  187. }
  188. }
  189. function _get_templates_subs($tplname){
  190. global $_G;
  191. $tplpre = 'portal/list_';
  192. $cattpls = array($tplname);
  193. if(substr($tplname, 0, 12) == $tplpre){
  194. loadcache('portalcategory');
  195. $portalcategory = $_G['cache']['portalcategory'];
  196. $catid = intval(str_replace($tplpre, '', $tplname));
  197. if(isset($portalcategory[$catid]) && !empty($portalcategory[$catid]['children'])) {
  198. $children = array();
  199. foreach($portalcategory[$catid]['children'] as $cid) {
  200. if(!$portalcategory[$cid]['notinheritedblock']) {
  201. $cattpls[] = $tplpre.$cid;
  202. if(!empty($portalcategory[$cid]['children'])) {
  203. $children = array_merge($children, $portalcategory[$cid]['children']);
  204. }
  205. }
  206. }
  207. if(!empty($children)) {
  208. foreach($children as $cid) {
  209. if(!$portalcategory[$cid]['notinheritedblock']) {
  210. $cattpls[] = $tplpre.$cid;
  211. }
  212. }
  213. }
  214. }
  215. }
  216. return $cattpls;
  217. }
  218. function _get_templates_ups($tplname){
  219. global $_G;
  220. $tplpre = 'portal/list_';
  221. $cattpls = array($tplname);
  222. if(substr($tplname, 0, 12) == $tplpre){
  223. loadcache('portalcategory');
  224. $portalcategory = $_G['cache']['portalcategory'];
  225. $catid = intval(str_replace($tplpre, '', $tplname));
  226. if(isset($portalcategory[$catid]) && !$portalcategory[$catid]['notinheritedblock']) {
  227. $upid = $portalcategory[$catid]['upid'];
  228. while(!empty($upid)) {
  229. $cattpls[] = $tplpre.$upid;
  230. $upid = !$portalcategory[$upid]['notinheritedblock'] ? $portalcategory[$upid]['upid'] : 0;
  231. }
  232. }
  233. }
  234. return $cattpls;
  235. }
  236. }
  237. ?>