PageRenderTime 26ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/src/modules/Dizkus/lib/Dizkus/Controller/Admin.php

https://github.com/digicontents/Dizkus
PHP | 325 lines | 208 code | 61 blank | 56 comment | 41 complexity | a15b03eba3082fe7c72e5ce88d284999 MD5 | raw file
  1. <?php
  2. /**
  3. * Dizkus
  4. *
  5. * @copyright (c) 2001-now, Dizkus Development Team
  6. * @link http://code.zikula.org/dizkus
  7. * @version $Id$
  8. * @license GNU/GPL - http://www.gnu.org/copyleft/gpl.html
  9. * @package Dizkus
  10. */
  11. class Dizkus_Controller_Admin extends Zikula_AbstractController
  12. {
  13. public function postInitialize()
  14. {
  15. $this->view->setCaching(false)->add_core_data();
  16. }
  17. /**
  18. * the main administration function
  19. *
  20. */
  21. public function main()
  22. {
  23. if (!SecurityUtil::checkPermission('Dizkus::', '::', ACCESS_ADMIN)) {
  24. return LogUtil::registerPermissionError();
  25. }
  26. return $this->view->fetch('admin/main.tpl');
  27. }
  28. /**
  29. * preferences
  30. *
  31. */
  32. public function preferences()
  33. {
  34. if (!SecurityUtil::checkPermission('Dizkus::', '::', ACCESS_ADMIN)) {
  35. return LogUtil::registerPermissionError();
  36. }
  37. // Create output object
  38. $form = FormUtil::newForm('Dizkus', $this);
  39. // Return the output that has been generated by this function
  40. return $form->execute('admin/preferences.tpl', new Dizkus_Form_Handler_Admin_Prefs());
  41. }
  42. /**
  43. * syncforums
  44. */
  45. public function syncforums()
  46. {
  47. if (!SecurityUtil::checkPermission('Dizkus::', '::', ACCESS_ADMIN)) {
  48. return LogUtil::registerPermissionError();
  49. }
  50. $silent = FormUtil::getPassedValue('silent', 0);
  51. $messages = array();
  52. $messages[] = DataUtil::formatForDisplay($this->__('Done! Synchronized Zikula users and Dizkus users.'));
  53. ModUtil::apiFunc('Dizkus', 'admin', 'sync',
  54. array('type' => 'all forums'));
  55. $messages[] = DataUtil::formatForDisplay($this->__('Done! Synchronized forum index.'));
  56. ModUtil::apiFunc('Dizkus', 'admin', 'sync',
  57. array('type' => 'all topics'));
  58. $messages[] = DataUtil::formatForDisplay($this->__('Done! Synchronized topics.'));
  59. ModUtil::apiFunc('Dizkus', 'admin', 'sync',
  60. array('type' => 'all posts'));
  61. $messages[] = DataUtil::formatForDisplay($this->__('Done! Synchronized posts counter.'));
  62. if ($silent != 1) {
  63. LogUtil::registerStatus($messages);
  64. }
  65. return System::redirect(ModUtil::url('Dizkus', 'admin', 'main'));
  66. }
  67. /**
  68. * ranks
  69. */
  70. public function ranks()
  71. {
  72. if (!SecurityUtil::checkPermission('Dizkus::', '::', ACCESS_ADMIN)) {
  73. return LogUtil::registerPermissionError();
  74. }
  75. $submit = FormUtil::getPassedValue('submit', null, 'GETPOST');
  76. $ranktype = (int)FormUtil::getPassedValue('ranktype', 0, 'GETPOST');
  77. if (!$submit) {
  78. list($rankimages, $ranks) = ModUtil::apiFunc('Dizkus', 'admin', 'readranks',
  79. array('ranktype' => $ranktype));
  80. $this->view->assign('ranks', $ranks);
  81. $this->view->assign('ranktype', $ranktype);
  82. $this->view->assign('rankimages', $rankimages);
  83. if ($ranktype == 0) {
  84. return $this->view->fetch('admin/ranks.tpl');
  85. } else {
  86. return $this->view->fetch('admin/honoraryranks.tpl');
  87. }
  88. } else {
  89. $ranks = FormUtil::getPassedValue('ranks');
  90. ModUtil::apiFunc('Dizkus', 'admin', 'saverank', array('ranks' => $ranks));
  91. }
  92. return System::redirect(ModUtil::url('Dizkus','admin', 'ranks', array('ranktype' => $ranktype)));
  93. }
  94. /**
  95. * ranks
  96. */
  97. public function assignranks()
  98. {
  99. if (!SecurityUtil::checkPermission('Dizkus::', '::', ACCESS_ADMIN)) {
  100. return LogUtil::registerPermissionError();
  101. }
  102. $submit = FormUtil::getPassedValue('submit');
  103. $letter = FormUtil::getPassedValue('letter');
  104. $lastletter = FormUtil::getPassedValue('lastletter');
  105. $page = (int)FormUtil::getPassedValue('page', 1, 'GETPOST');
  106. // check for a letter parameter
  107. if (!empty($lastletter)) {
  108. $letter = $lastletter;
  109. }
  110. // count users and forbid '*' if more than 1000 users are present
  111. $usercount = DBUtil::selectObjectCount('users');
  112. if (empty($letter) || strlen($letter) != 1 || (($usercount > 1000) && $letter == '*')) {
  113. $letter = 'a';
  114. }
  115. $letter = strtolower($letter);
  116. if (!$submit) {
  117. list($rankimages, $ranks) = ModUtil::apiFunc('Dizkus', 'admin', 'readranks',
  118. array('ranktype' => 1));
  119. $tables = DBUtil::getTables();
  120. $userscol = $tables['users_column'];
  121. $where = 'LEFT('.$userscol['uname'].',1) LIKE \''.DataUtil::formatForStore($letter).'%\'';
  122. $orderby = $userscol['uname'].' ASC';
  123. $usercount = DBUtil::selectObjectCount('users', $where);
  124. $perpage = 50;
  125. if ($page <> -1 && $perpage <> -1) {
  126. $start = ($page-1) * $perpage;
  127. $users = DBUtil::selectObjectArray('users', $where, $orderby, $start, $perpage);
  128. }
  129. $allusers = array();
  130. foreach ($users as $user) {
  131. if ($user['uid'] == 1) continue;
  132. $alias = '';
  133. if (!empty($user['name'])) {
  134. $alias = ' (' . $user['name'] . ')';
  135. }
  136. $user['name'] = $user['uname'] . $alias;
  137. $user['rank_id'] = 0;
  138. for ($cnt = 0; $cnt < count($ranks); $cnt++) {
  139. if (in_array($user['uid'], $ranks[$cnt]['users'])) {
  140. $user['rank_id'] = $ranks[$cnt]['rank_id'];
  141. }
  142. }
  143. array_push($allusers, $user);
  144. }
  145. /*
  146. $inlinecss = '<style type="text/css">' ."\n";
  147. $rankpath = ModUtil::getVar('Dizkus', 'url_ranks_images') .'/';
  148. foreach ($ranks as $rank) {
  149. $inlinecss .= '#dizkus_admin option[value='.$rank['rank_id'].']:before { content:url("'.System::getBaseUrl() . $rankpath . $rank['rank_image'].'"); }' . "\n";
  150. }
  151. $inlinecss .= '</style>' . "\n";
  152. PageUtil::addVar('rawtext', $inlinecss);
  153. */
  154. //usort($allusers, 'cmp_userorder');
  155. unset($users);
  156. $this->view->assign('ranks', $ranks);
  157. $this->view->assign('rankimages', $rankimages);
  158. $this->view->assign('allusers', $allusers);
  159. $this->view->assign('letter', $letter);
  160. $this->view->assign('page', $page);
  161. $this->view->assign('perpage', $perpage);
  162. $this->view->assign('usercount', $usercount);
  163. $this->view->assign('allow_star', ($usercount < 1000));
  164. return $this->view->fetch('admin/assignranks.tpl');
  165. } else {
  166. // avoid some vars in the url of the pager
  167. unset($_GET['submit']);
  168. unset($_POST['submit']);
  169. unset($_REQUEST['submit']);
  170. $setrank = FormUtil::getPassedValue('setrank');
  171. ModUtil::apiFunc('Dizkus', 'admin', 'assignranksave',
  172. array('setrank' => $setrank));
  173. }
  174. return System::redirect(ModUtil::url('Dizkus','admin', 'assignranks',
  175. array('letter' => $letter,
  176. 'page' => $page)));
  177. }
  178. /**
  179. *
  180. */
  181. public function subforums()
  182. {
  183. if (!SecurityUtil::checkPermission('Dizkus::', '::', ACCESS_ADMIN)) {
  184. return LogUtil::registerPermissionError();
  185. }
  186. $subforums = DBUtil::selectObjectArray('dizkus_forums', $where = 'WHERE is_subforum > 0');
  187. $this->view->assign('subforums', $subforums);
  188. return $this->view->fetch('admin/subforums.tpl');
  189. }
  190. /**
  191. *
  192. */
  193. public function modifysubforum()
  194. {
  195. $form = FormUtil::newForm('Dizkus', $this);
  196. return $form->execute('admin/modifysubforum.tpl', new Dizkus_Form_Handler_Admin_ModifySubForum());
  197. }
  198. /**
  199. * reordertree
  200. *
  201. */
  202. public function reordertree()
  203. {
  204. if (!SecurityUtil::checkPermission('Dizkus::', '::', ACCESS_ADMIN)) {
  205. return LogUtil::registerPermissionError();
  206. }
  207. $categorytree = ModUtil::apiFunc('Dizkus', 'user', 'readcategorytree');
  208. $this->view->assign('categorytree', $categorytree);
  209. $this->view->assign('newcategory', false);
  210. $this->view->assign('newforum', false);
  211. return $this->view->fetch('admin/reordertree.tpl');
  212. }
  213. /**
  214. * managesubscriptions
  215. *
  216. */
  217. public function managesubscriptions()
  218. {
  219. if (!SecurityUtil::checkPermission('Dizkus::', '::', ACCESS_ADMIN)) {
  220. return LogUtil::registerPermissionError();
  221. }
  222. $submit = FormUtil::getPassedValue('submit');
  223. $username = FormUtil::getPassedValue('username');
  224. $uid = 0;
  225. $topicsubscriptions = array();
  226. $forumsubscriptions = array();
  227. if (!empty($username)) {
  228. $uid = UserUtil::getIDFromName($username);
  229. }
  230. if (!empty($uid)) {
  231. $topicsubscriptions = ModUtil::apiFunc('Dizkus', 'user', 'get_topic_subscriptions', array('user_id' => $uid));
  232. $forumsubscriptions = ModUtil::apiFunc('Dizkus', 'user', 'get_forum_subscriptions', array('user_id' => $uid));
  233. }
  234. if (!$submit) {
  235. // submit is empty
  236. $this->view->assign('username', $username);
  237. $this->view->assign('uid', $uid = UserUtil::getIDFromName($username));
  238. $this->view->assign('topicsubscriptions', $topicsubscriptions);
  239. $this->view->assign('forumsubscriptions', $forumsubscriptions);
  240. return $this->view->fetch('admin/managesubscriptions.tpl');
  241. } else { // submit not empty
  242. $uid = FormUtil::getPassedValue('uid');
  243. $allforums = FormUtil::getPassedValue('allforum');
  244. $forum_ids = FormUtil::getPassedValue('forum_id');
  245. $alltopics = FormUtil::getPassedValue('alltopic');
  246. $topic_ids = FormUtil::getPassedValue('topic_id');
  247. if ($allforums == '1') {
  248. ModUtil::apiFunc('Dizkus', 'user', 'unsubscribe_forum', array('user_id' => $uid));
  249. } elseif (count($forum_ids) > 0) {
  250. for($i = 0; $i < count($forum_ids); $i++) {
  251. ModUtil::apiFunc('Dizkus', 'user', 'unsubscribe_forum', array('user_id' => $uid, 'forum_id' => $forum_ids[$i]));
  252. }
  253. }
  254. if ($alltopics == '1') {
  255. ModUtil::apiFunc('Dizkus', 'user', 'unsubscribe_topic', array('user_id' => $uid));
  256. } elseif (count($topic_ids) > 0) {
  257. for($i = 0; $i < count($topic_ids); $i++) {
  258. ModUtil::apiFunc('Dizkus', 'user', 'unsubscribe_topic', array('user_id' => $uid, 'topic_id' => $topic_ids[$i]));
  259. }
  260. }
  261. }
  262. return System::redirect(ModUtil::url('Dizkus', 'admin', 'managesubscriptions', array('username' => UserUtil::getVar('uname', $uid))));
  263. }
  264. }