class_portalcategory.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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_portalcategory.php 27449 2012-02-01 05:32:35Z zhangguosheng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class portal_category {
  12. function portal_category() {}
  13. function &instance() {
  14. static $object;
  15. if(empty($object)) {
  16. $object = new portal_category();
  17. }
  18. return $object;
  19. }
  20. function add_users_perm($catid, $users) {
  21. $sqlarr = $uids = array();
  22. $catid = intval($catid);
  23. if(!empty($catid) && !empty($users)) {
  24. $catids = $this->get_subcatids_by_catid($catid);
  25. $this->_add_users_cats($users, $catids);
  26. foreach($users as $v) {
  27. $uids[$v['uid']] = $v['uid'];
  28. }
  29. $this->_update_member_allowadmincp($uids);
  30. }
  31. }
  32. function _update_member_allowadmincp($uids) {
  33. if(!empty($uids)) {
  34. $userperms = array();
  35. $userperms = C::t('portal_category_permission')->fetch_permission_by_uid($uids);
  36. foreach(C::t('common_member')->fetch_all($uids, false, 0) as $uid => $v) {
  37. $v['allowadmincp'] = setstatus(3, empty($userperms[$v['uid']]['allowpublish']) ? 0 : 1, $v['allowadmincp']);
  38. $v['allowadmincp'] = setstatus(2, empty($userperms[$v['uid']]['allowmanage']) ? 0 : 1, $v['allowadmincp']);
  39. C::t('common_member')->update($uid, array('allowadmincp'=>$v['allowadmincp']));
  40. }
  41. }
  42. }
  43. function delete_users_perm($catid, $uids) {
  44. $uids = !is_array($uids) ? array($uids) : $uids;
  45. $uids = array_map('intval', $uids);
  46. $uids = array_filter($uids);
  47. if($uids) {
  48. C::t('portal_category_permission')->delete_by_catid_uid_inheritedcatid($catid, $uids, 0);
  49. $this->delete_inherited_perm_by_catid($catid, $catid, $uids);
  50. $this->_update_member_allowadmincp($uids);
  51. }
  52. }
  53. function delete_inherited_perm_by_catid($catid, $upid = 0, $uid = 0) {
  54. if(!is_array($catid)) {
  55. $catids = $this->get_subcatids_by_catid($catid);
  56. }
  57. if($catids) {
  58. $uids = is_array($uid) ? $uid : array($uid);
  59. foreach($uids as $uid_) {
  60. $uid_ = intval($uid_);
  61. C::t('portal_category_permission')->delete_by_catid_uid_inheritedcatid($catids, $uid_, $upid ? $upid : true);
  62. if($uid_) {
  63. $this->_update_member_allowadmincp(array($uid_));
  64. }
  65. }
  66. }
  67. }
  68. function remake_inherited_perm($catid) {
  69. loadcache('portalcategory');
  70. $portalcategory = getglobal('cache/portalcategory');
  71. $catid = intval($catid);
  72. $upid = !empty($portalcategory[$catid]) ? $portalcategory[$catid]['upid'] : 0;
  73. if($upid) {
  74. $catids = $this->get_subcatids_by_catid($catid);
  75. $users = $this->get_perms_by_catid($upid);
  76. $this->_add_users_cats($users, $catids, $upid);
  77. }
  78. }
  79. function get_perms_by_catid($catid, $uid = 0) {
  80. $perms = array();
  81. $catid = intval($catid);
  82. $uid = intval($uid);
  83. if($catid) {
  84. $perms = C::t('portal_category_permission')->fetch_all_by_catid($catid, $uid);
  85. }
  86. return $perms;
  87. }
  88. function _add_users_cats($users, $catids, $upid = 0) {
  89. C::t('portal_category_permission')->insert_batch($users, $catids, $upid);
  90. }
  91. function delete_perm_by_inheritedcatid($catid, $uids = array()) {
  92. if($uids && !is_array($uids)) $uids = array($uids);
  93. if($catid) {
  94. C::t('portal_category_permission')->delete_by_catid_uid_inheritedcatid(false, $uids, $catid);
  95. if($uids) {
  96. $this->_update_member_allowadmincp($uids);
  97. }
  98. }
  99. }
  100. function delete_allperm_by_catid($catid) {
  101. if($catid) {
  102. C::t('portal_category_permission')->delete_by_catid_uid_inheritedcatid($catid);
  103. C::t('portal_category_permission')->delete_by_catid_uid_inheritedcatid(false, false, $catid);
  104. }
  105. }
  106. function get_subcatids_by_catid($catid) {
  107. loadcache('portalcategory');
  108. $portalcategory = getglobal('cache/portalcategory');
  109. $catids = array();
  110. $catids[$catid] = $catid;
  111. if(isset($portalcategory[$catid]) && !empty($portalcategory[$catid]['children'])) {
  112. $children = array();
  113. foreach($portalcategory[$catid]['children'] as $cid) {
  114. if(!$portalcategory[$cid]['notinheritedarticle']) {
  115. $catids[$cid] = $cid;
  116. if(!empty($portalcategory[$cid]['children'])) {
  117. $children = array_merge($children, $portalcategory[$cid]['children']);
  118. }
  119. }
  120. }
  121. if(!empty($children)) {
  122. foreach($children as $cid) {
  123. if(!$portalcategory[$cid]['notinheritedarticle']) {
  124. $catids[$cid] = $cid;
  125. }
  126. }
  127. }
  128. }
  129. return $catids;
  130. }
  131. }
  132. ?>