PageRenderTime 50ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/usr/apps/system/controllers/admin/EventController.php

https://github.com/Doap/xoops
PHP | 276 lines | 209 code | 31 blank | 36 comment | 9 complexity | dd055f305ce52ae4f69240156b8fb352 MD5 | raw file
  1. <?php
  2. /**
  3. * System admin event controller
  4. *
  5. * You may not change or alter any portion of this comment or credits
  6. * of supporting developers from this source code or any supporting source code
  7. * which is considered copyrighted (c) material of the original comment or credit authors.
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. *
  12. * @copyright Xoops Engine http://www.xoopsengine.org
  13. * @license http://www.fsf.org/copyleft/gpl.html GNU public license
  14. * @author Taiwen Jiang <phppp@users.sourceforge.net>
  15. * @since 3.0
  16. * @category Xoops_Module
  17. * @package System
  18. * @version $Id$
  19. */
  20. class System_EventController extends Xoops_Zend_Controller_Action_Admin
  21. {
  22. // Event list
  23. public function indexAction()
  24. {
  25. $module = $this->getRequest()->getModuleName();
  26. $modules = XOOPS::service("registry")->modulelist->read("active");
  27. $this->setTemplate("system/admin/event_list.html");
  28. $modelEvent = XOOPS::getModel("event");
  29. $select = $modelEvent->select()->where("module IN (?)", array_keys($modules));
  30. $rowset = $modelEvent->fetchAll($select);
  31. $events = array();
  32. foreach ($rowset as $row) {
  33. $modules[$row->module]["events"][$row->name] = array(
  34. "id" => $row->id,
  35. "name" => $row->name,
  36. "title" => $row->title,
  37. "active" => $row->active
  38. );
  39. //$events[] = $row->id;
  40. }
  41. $modelObserver = XOOPS::getModel("event_observer");
  42. $select = $modelObserver->select()->from($modelObserver, array("eventkey" => new Zend_Db_Expr("CONCAT(event_module, '-', event)"), "count" => "COUNT(*)"))
  43. ->where("event_module IN (?)", array_keys($modules))
  44. ->where("module IN (?)", array_keys($modules))
  45. ->group("eventkey");
  46. $countList = $modelObserver->getAdapter()->fetchPairs($select);
  47. foreach (array_keys($modules) as $dirname) {
  48. if (empty($modules[$dirname]["events"])) {
  49. unset($modules[$dirname]);
  50. continue;
  51. }
  52. foreach ($modules[$dirname]["events"] as $key => &$event) {
  53. $event["count"] = isset($countList[$dirname . "-" . $key]) ? $countList[$dirname . "-" . $key] : 0;
  54. }
  55. }
  56. $title = XOOPS::_("Module events");
  57. $action = $this->view->url(array("action" => "save", "controller" => "event", "module" => $module));
  58. $form = $this->getFormList("event_form_list", $modules, $title, $action);
  59. $form->assign($this->template);
  60. $this->template->assign("title", $title);
  61. }
  62. public function observerAction()
  63. {
  64. $module = $this->getRequest()->getModuleName();
  65. $this->setTemplate("system/admin/event_observers.html");
  66. $event = $this->_getParam("event");
  67. $modules = XOOPS::service("registry")->modulelist->read("active");
  68. $modelEvent = XOOPS::getModel("event");
  69. if (!$rowEvent = $modelEvent->findRow($event)) {
  70. $message = XOOPS::_("Specified event is not found");
  71. $options = array("message" => $message, "time" => 3);
  72. $redirect = array("action" => "index");
  73. $this->redirect($redirect, $options);
  74. return;
  75. }
  76. $modelObserver = XOOPS::getModel("event_observer");
  77. $select = $modelObserver->select()->where("event_module = ?", $rowEvent->module)
  78. ->where("event = ?", $rowEvent->name);
  79. $rowset = $modelObserver->fetchAll($select);
  80. $observers = array();
  81. foreach ($rowset as $row) {
  82. $observers[$row->id] = array(
  83. "id" => $row->id,
  84. "module" => $modules[$row->module]["name"],
  85. "class" => $row->class,
  86. "method" => $row->method,
  87. "active" => $row->active
  88. );
  89. }
  90. $title = sprintf(XOOPS::_("Observers of evnt %s"), $rowEvent->title);
  91. $action = $this->view->url(array("action" => "saveobserver", "controller" => "event", "module" => $module));
  92. $form = $this->getFormObservers("event_form_observers", $observers, $title, $action);
  93. $form->addElement(new XoopsFormHidden('event', $event));
  94. $form->assign($this->template);
  95. $this->template->assign("title", $title);
  96. }
  97. // Save event active options into database
  98. public function saveAction()
  99. {
  100. $module = $this->getRequest()->getModuleName();
  101. $actives = $this->getRequest()->getPost("actives");
  102. $modules = XOOPS::service("registry")->modulelist->read("active");
  103. $modelEvent = XOOPS::getModel("event");
  104. $select = $modelEvent->select()->where("module IN (?)", array_keys($modules));
  105. $rowset = $modelEvent->fetchAll($select);
  106. $flushList = array();
  107. foreach ($rowset as $row) {
  108. $newValue = empty($actives[$row->id]) ? 0 : 1;
  109. if ($newValue == $row->active) continue;
  110. $modelEvent->update(array("active" => $newValue), array("id = ?" => $row->id));
  111. $flushList[] = array($row->module, $row->name);
  112. }
  113. foreach ($flushList as $item) {
  114. XOOPS::service('registry')->event->flush($item[0], $item[1]);
  115. }
  116. $options = array("message" => _SYSTEM_AM_DBUPDATED, "time" => 3);
  117. $redirect = array("action" => "index");
  118. $this->redirect($redirect, $options);
  119. }
  120. // Save event active options into database
  121. public function saveobserverAction()
  122. {
  123. $module = $this->getRequest()->getModuleName();
  124. $event = $this->getRequest()->getPost("event");
  125. $actives = $this->getRequest()->getPost("actives");
  126. $modelEvent = XOOPS::getModel("event");
  127. if (!$rowEvent = $modelEvent->findRow($event)) {
  128. $message = XOOPS::_("Specified event is not found");
  129. $options = array("message" => $message, "time" => 3);
  130. $redirect = array("action" => "index");
  131. $this->redirect($redirect, $options);
  132. return;
  133. }
  134. $modelObserver = XOOPS::getModel("event_observer");
  135. $select = $modelObserver->select()->where("event_module = ?", $rowEvent->module)
  136. ->where("event = ?", $rowEvent->name);
  137. $rowset = $modelObserver->fetchAll($select);
  138. foreach ($rowset as $row) {
  139. $newValue = empty($actives[$row->id]) ? 0 : 1;
  140. if ($newValue == $row->active) continue;
  141. $modelObserver->update(array("active" => $newValue), array("id = ?" => $row->id));
  142. }
  143. XOOPS::service('registry')->event->flush($rowEvent->module, $rowEvent->name);
  144. $options = array("message" => _SYSTEM_AM_DBUPDATED, "time" => 3);
  145. $redirect = array("action" => "observer", "event" => $event);
  146. $this->redirect($redirect, $options);
  147. }
  148. // Event observer list form
  149. private function getFormObservers($name, $observers, $title, $action)
  150. {
  151. //include_once XOOPS::path('www') . '/class/xoopsformloader.php';
  152. Xoops_Legacy::autoload();
  153. $form = new XoopsFormGrid($title, $name, $action, 'post', true);
  154. $heads = array(
  155. XOOPS::_("No."),
  156. XOOPS::_("Module"),
  157. XOOPS::_("Class"),
  158. XOOPS::_("Method"),
  159. XOOPS::_("Active"),
  160. );
  161. $form->setHead($heads);
  162. $i = 0;
  163. foreach ($observers as $key => $observer) {
  164. $ele = new XoopsFormElementRow(++$i);
  165. // Observer Module
  166. $label = new XoopsFormLabel("", $observer["module"]);
  167. $ele->addElement($label);
  168. unset($label);
  169. // Observer Class
  170. $label = new XoopsFormLabel("", $observer["class"]);
  171. $ele->addElement($label);
  172. unset($label);
  173. // Observer Method
  174. $label = new XoopsFormLabel("", $observer["method"]);
  175. $ele->addElement($label);
  176. unset($label);
  177. // Observer Active Option
  178. $checkbox = new XoopsFormCheckBox("", "actives[" . $key . "]", $observer["active"]);
  179. $checkbox->addOption(1, "");
  180. $ele->addElement($checkbox);
  181. unset($checkbox);
  182. $form->addElement($ele);
  183. unset($ele);
  184. }
  185. $form->addElement(new XoopsFormButton('', 'button', _GO, 'submit'));
  186. return $form;
  187. }
  188. // Module's event list form
  189. private function getFormList($name, $modules, $title, $action)
  190. {
  191. //include_once XOOPS::path('www') . '/class/xoopsformloader.php';
  192. Xoops_Legacy::autoload();
  193. $form = new XoopsFormGrid($title, $name, $action, 'post', true);
  194. $heads = array(
  195. XOOPS::_("No."),
  196. XOOPS::_("Title"),
  197. XOOPS::_("Name"),
  198. XOOPS::_("Observers"),
  199. XOOPS::_("Active"),
  200. );
  201. $form->setHead($heads);
  202. //$i = 0;
  203. foreach ($modules as $dirname => $data) {
  204. $form->insertBreak($data["name"]);
  205. foreach ($data["events"] as $key => $event) {
  206. // Event Title
  207. $ele = new XoopsFormElementRow(++$i);
  208. // Event Title
  209. $label = new XoopsFormLabel("", $event["title"]);
  210. $ele->addElement($label);
  211. unset($label);
  212. // Event Name
  213. $label = new XoopsFormLabel("", $event["name"]);
  214. $ele->addElement($label);
  215. unset($label);
  216. // Event Observer Count
  217. if ($event["count"] > 0) {
  218. $label = "<a href='" . $this->getFrontController()->getRouter()->assemble(
  219. array(
  220. "module" => "system",
  221. "controller" => "event",
  222. "action" => "observer",
  223. "event" => $event["id"],
  224. ),
  225. "admin")
  226. . "' title='" . XOOPS::_("Edit") . "'>" . $event["count"] . "</a>";
  227. } else {
  228. $label = $event["count"];
  229. }
  230. $label = new XoopsFormLabel("", $label);
  231. $ele->addElement($label);
  232. unset($label);
  233. // Event Active Option
  234. $checkbox = new XoopsFormCheckBox("", "actives[" . $event["id"] . "]", $event["active"]);
  235. $checkbox->addOption(1, "");
  236. $ele->addElement($checkbox);
  237. unset($checkbox);
  238. $form->addElement($ele);
  239. unset($ele);
  240. }
  241. }
  242. $form->addElement(new XoopsFormButton('', 'button', _GO, 'submit'));
  243. return $form;
  244. }
  245. }