PageRenderTime 51ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/control/code/trunk/administrator/components/com_control/controller.php

https://bitbucket.org/eddieajau/the-art-of-joomla-archive
PHP | 400 lines | 290 code | 49 blank | 61 comment | 52 complexity | b8feac9f2673b252beecfe72347e045e MD5 | raw file
  1. <?php
  2. /**
  3. * @version $Id: controller.php 382 2010-11-03 08:31:13Z eddieajau $
  4. * @package NewLifeInIT
  5. * @copyright Copyright (C) 2009 New Life in IT Pty Ltd. All rights reserved.
  6. * @license GNU General Public License <http://www.gnu.org/copyleft/gpl.html>
  7. */
  8. // no direct access
  9. defined('_JEXEC') or die;
  10. jimport('joomla.application.component.controller');
  11. /**
  12. * Component Controller
  13. *
  14. * @package NewLifeInIT
  15. * @subpackage com_control
  16. */
  17. class ControlController extends JController
  18. {
  19. /**
  20. * Constructor
  21. */
  22. function __construct()
  23. {
  24. parent::__construct();
  25. $this->registerTask('save2new', 'save');
  26. $this->registerTask('apply', 'save');
  27. $this->registerTask('unpublish', 'publish');
  28. $this->registerTask('orderup', 'ordering');
  29. $this->registerTask('orderdown', 'ordering');
  30. }
  31. /**
  32. * Display the view
  33. */
  34. function display()
  35. {
  36. // Get the document object.
  37. $document = &JFactory::getDocument();
  38. $app = &JFactory::getApplication();
  39. jimport('joomla.application.component.model');
  40. JModel::addIncludePath(JPATH_COMPONENT.DS.'models');
  41. $config = JComponentHelper::getParams('com_control');
  42. $extMode = $config->get('ext_mode');
  43. $document->addStyleSheet(JURI::base().'components/com_control/media/css/default.css');
  44. // Set the default view name and format from the Request
  45. $vName = JRequest::getCmd('view', 'groups');
  46. $vFormat = $document->getType();
  47. $lName = JRequest::getCmd('layout', 'default');
  48. $gType = null;
  49. if ($view = &$this->getView($vName, $vFormat))
  50. {
  51. switch ($vName)
  52. {
  53. case 'config':
  54. $model = $this->getModel('config');
  55. break;
  56. case 'sections':
  57. $model = &$this->getModel('section');
  58. $type = $app->getUserStateFromRequest('control.'.$vName.'.section_type', 'section_type','aco');
  59. $model->setState('section_type', $type);
  60. // Common list state
  61. $this->_list($vName, $model, 'a.name');
  62. break;
  63. case 'section':
  64. $cid = JRequest::getVar('cid', array(0), '', 'array');
  65. $id = JRequest::getVar('id', $cid[0], '', 'int');
  66. $type = $app->getUserStateFromRequest('control.'.$vName.'.section_type', 'section_type','aco');
  67. $model = & $this->getModel('section');
  68. $model->setState('id', $id);
  69. $model->setState('section_type', $type);
  70. break;
  71. case 'objects':
  72. $model = &$this->getModel('object');
  73. if ($extMode == 1) {
  74. $type = $app->getUserStateFromRequest('control.'.$vName.'.object_type', 'object_type', 'aco');
  75. $sect = $app->getUserStateFromRequest('control.'.$vName.'.section_value', 'section_value');
  76. }
  77. else {
  78. $type = 'aro';
  79. $sect = 'users';
  80. $lName = 'easy';
  81. }
  82. $groupId = $app->getUserStateFromRequest('control.'.$vName.'.group_id', 'filter_group_id');
  83. $model->setState('object_type', $type);
  84. $model->setState('section_value', $sect);
  85. $model->setState('group_id', $groupId);
  86. // Common list state
  87. $this->_list($vName.$type, $model, 'a.name');
  88. break;
  89. case 'object':
  90. $cid = JRequest::getVar('cid', array(0), '', 'array');
  91. $id = JRequest::getVar('id', $cid[0], '', 'int');
  92. $type = $app->getUserStateFromRequest('control.'.$vName.'.object_type', 'object_type', 'aco');
  93. $sect = $app->getUserState('control.objects.section_value');
  94. $model = & $this->getModel('object');
  95. $model->setState('id', $id);
  96. $model->setState('object_type', $type);
  97. $model->setState('section_value', $sect);
  98. break;
  99. case 'groups':
  100. $model = &$this->getModel('group');
  101. $gType = strtolower($app->getUserStateFromRequest('control.groups.group_type', 'group_type','aro'));
  102. if ($extMode == 0) {
  103. $lName = 'easy';
  104. if ($gType == 'aro') {
  105. $model->setState('parent_id', 28);
  106. }
  107. else if ($gType == 'axo') {
  108. $model->setState('parent_id', 1);
  109. }
  110. }
  111. $model->setState('group_type', $gType);
  112. $model->setState('tree', 1);
  113. // Common list state
  114. $this->_list($vName, $model, 'a.lft');
  115. break;
  116. case 'group':
  117. $cid = JRequest::getVar('cid', array(0), '', 'array');
  118. $id = JRequest::getVar('id', $cid[0], '', 'int');
  119. $type = $app->getUserStateFromRequest('control.groups.group_type', 'group_type','aro');
  120. $model = & $this->getModel('group');
  121. $model->setState('id', $id);
  122. $model->setState('group_type', $type);
  123. if ($extMode == 0) {
  124. }
  125. break;
  126. case 'acls':
  127. $model = &$this->getModel('ACL');
  128. $sect = $app->getUserStateFromRequest('control.'.$vName.'.section_value','section_value');
  129. $model->setState('section_value', $sect);
  130. // Common list state
  131. $this->_list($vName, $model, 'a.note');
  132. break;
  133. case 'acl':
  134. $cid = JRequest::getVar('cid', array(0), '', 'array');
  135. $id = JRequest::getVar('id', $cid[0], '', 'int');
  136. $model = & $this->getModel('ACL');
  137. $model->setState('id', $id);
  138. break;
  139. case 'test2d':
  140. case 'test3d':
  141. $model = &$this->getModel('test');
  142. $sect = $app->getUserStateFromRequest('control.'.$vName.'.section_value','section_value');
  143. $sect2 = $app->getUserStateFromRequest('control.'.$vName.'.axo_section_value','axo_section_value');
  144. $model->setState('section_value', $sect);
  145. $model->setState('axo_section_value', $sect2);
  146. $this->_list($vName, $model, 'a.value');
  147. break;
  148. case 'debug':
  149. $model = &$this->getModel('test');
  150. $model->setState('aco_section_value', JRequest::getVar('aco_section_value'));
  151. $model->setState('aco_value', JRequest::getVar('aco_value'));
  152. $model->setState('aro_section_value', JRequest::getVar('aro_section_value'));
  153. $model->setState('aro_value', JRequest::getVar('aro_value'));
  154. $model->setState('axo_section_value', JRequest::getVar('axo_section_value'));
  155. $model->setState('axo_value', JRequest::getVar('axo_value'));
  156. break;
  157. default:
  158. $model = new JModel;
  159. break;
  160. }
  161. $model->setState('ext_mode', $extMode);
  162. // Push the model into the view (as default)
  163. $view->setModel($model, true);
  164. $view->setLayout($lName);
  165. // push document object into the view
  166. $view->assignRef('document', $document);
  167. $view->display();
  168. }
  169. if ($extMode == 1) {
  170. JSubMenuHelper::addEntry(JText::_('JX Link Sections'), 'index.php?option=com_control&view=sections', $vName == 'sections');
  171. JSubMenuHelper::addEntry(JText::_('JX Link Objects'), 'index.php?option=com_control&view=objects', $vName == 'objects');
  172. JSubMenuHelper::addEntry(JText::_('JX Link Groups'), 'index.php?option=com_control&view=groups', $vName == 'groups');
  173. JSubMenuHelper::addEntry(JText::_('JX Link Rules'), 'index.php?option=com_control&view=acls', $vName == 'acls');
  174. JSubMenuHelper::addEntry(JText::_('JX Link Test 2D'), 'index.php?option=com_control&view=test2d', $vName == 'test2d');
  175. JSubMenuHelper::addEntry(JText::_('JX Link Test 3D'), 'index.php?option=com_control&view=test3d', $vName == 'test3d');
  176. JSubMenuHelper::addEntry(JText::_('JX Link Debug'), 'index.php?option=com_control&view=debug', $vName == 'debug');
  177. }
  178. else {
  179. JSubMenuHelper::addEntry(JText::_('JX Link Manage User Groups'), 'index.php?option=com_control&view=groups&group_type=aro', ($vName == 'groups' AND $gType == 'aro'));
  180. JSubMenuHelper::addEntry(JText::_('JX Link Assign Users to Groups'), 'index.php?option=com_control&view=objects',$vName == 'objects');
  181. JSubMenuHelper::addEntry(JText::_('JX Link Manage Access Levels'), 'index.php?option=com_control&view=groups&group_type=axo', ($vName == 'groups' AND $gType == 'axo'));
  182. }
  183. }
  184. /**
  185. * Sets common list states in a model
  186. * @param string The view name
  187. * @param iModel The model object
  188. * @param string The order column
  189. */
  190. function _list($vName, &$model, $orderCol)
  191. {
  192. $app = &JFactory::getApplication();
  193. $limit = $app->getUserStateFromRequest('viewlistlimit', 'limit', $app->getCfg('list_limit'));
  194. $limitstart = $app->getUserStateFromRequest('control.'.$vName.'.limitstart', 'limitstart', 0);
  195. $search = $app->getUserStateFromRequest('control.'.$vName.'.search', 'search');
  196. //$published = $app->getUserStateFromRequest('control.'.$vName.'.published', 'published', 1);
  197. $orderCol = $app->getUserStateFromRequest('control.'.$vName.'.ordercol', 'filter_order', $orderCol);
  198. $orderDirn = $app->getUserStateFromRequest('control.'.$vName.'.orderdirn', 'filter_order_Dir', 'asc');
  199. $model->setState('limit', $limit);
  200. $model->setState('limitstart', $limitstart);
  201. //$model->setState('published', ($published == '*' ? null : $published));
  202. $model->setState('search', $search);
  203. if ($orderCol) {
  204. $model->setState('order by', $orderCol.' '.($orderDirn == 'desc' ? 'desc' : 'asc'));
  205. }
  206. $model->setState('orderCol', $orderCol);
  207. $model->setState('orderDirn', $orderDirn);
  208. }
  209. /**
  210. * Edit the item
  211. */
  212. function edit()
  213. {
  214. $modelName = JRequest::getVar('model');
  215. JRequest::setVar('hidemainmenu', 1);
  216. // The model name is the singular form, so use it for the view name
  217. JRequest::setVar('view', $modelName);
  218. JRequest::setVar('layout', 'edit');
  219. $this->display();
  220. }
  221. /**
  222. * Checks in a record
  223. */
  224. function cancel()
  225. {
  226. $return = JRequest::getVar('return');
  227. $values = JRequest::getVar('jxform', array(), 'post', 'array');
  228. $id = @$values['id'];
  229. if ($modelName = JRequest::getVar('model'))
  230. {
  231. $model = &$this->getModel($modelName);
  232. //$result = $model->checkin();
  233. //$table = & $model->getTable();
  234. //$table->checkin((int) $id);
  235. $err = '';
  236. }
  237. else {
  238. $err = 'Panic. Unknown model';
  239. }
  240. $this->setRedirect('index.php?option=com_control&view='.$return, $err);
  241. }
  242. /**
  243. * Save the record
  244. */
  245. function save()
  246. {
  247. jimport('joomla.utilities.utility');
  248. $token = JUtility::getToken();
  249. if (JRequest::getVar($token, false, 'post') == false) {
  250. JError::raiseError(403, JText::_('Request Forbidden'));
  251. }
  252. $view = JRequest::getVar('view');
  253. $return = JRequest::getVar('return');
  254. $values = JRequest::getVar('jxform', array(), 'post', 'array');
  255. if ($modelName = JRequest::getVar('model'))
  256. {
  257. $model = &$this->getModel($modelName);
  258. $model->setState('request', JRequest::get('post'));
  259. $form = &$model->getForm('model');
  260. $form->filter($values);
  261. $result = $form->validate($values);
  262. if (JError::isError($result))
  263. {
  264. // TODO: Load the <onerror> process instruction
  265. JError::raiseError(500, $result->message);
  266. }
  267. $result = $model->save($values);
  268. $msg = JError::isError($result) ? $result->message : 'Saved';
  269. $table = &$model->getResource();
  270. $task = $this->getTask();
  271. if ($task == 'apply') {
  272. $this->setRedirect('index.php?option=com_control&view='.$view.'&model='.$modelName.'&id='.$table->id.'&task=edit', JText::_($msg));
  273. } else {
  274. if ($task == 'save2new') {
  275. $this->setRedirect('index.php?option=com_control&view='.$view.'&model='.$modelName.'&id=0&task=edit', JText::_($msg));
  276. } else {
  277. $this->setRedirect('index.php?option=com_control&view='.$return, JText::_($msg));
  278. }
  279. }
  280. }
  281. else {
  282. $this->setRedirect('index.php?option=com_control&view='.$return, JText::_('Panic. No model specified'));
  283. }
  284. }
  285. /**
  286. * Removes an item
  287. */
  288. function delete()
  289. {
  290. // Check for request forgeries
  291. JRequest::checkToken() or die('Invalid Token');
  292. $view = JRequest::getWord('view');
  293. $cid = JRequest::getVar('cid', null, 'post', 'array');
  294. if ($modelName = JRequest::getVar('model'))
  295. {
  296. $model = & $this->getModel($modelName);
  297. $model->setState('request', JRequest::get('post'));
  298. $result = $model->delete($cid);
  299. $err = JText::sprintf('Items removed', count($cid));
  300. }
  301. else {
  302. $err = JText::_('Panic. No model specified');
  303. }
  304. $this->setRedirect('index.php?option=com_control&view='.$view, $err);
  305. }
  306. /**
  307. * Publishes or Unpublishes one or more records
  308. */
  309. function publish()
  310. {
  311. // Check for request forgeries
  312. JRequest::checkToken() or die('Invalid Token');
  313. $view = JRequest::getWord('view');
  314. $cid = JRequest::getVar('cid', null, 'post', 'array');
  315. $value = (int) ($this->getTask() == 'publish');
  316. if ($modelName = JRequest::getVar('model'))
  317. {
  318. $model = &$this->getModel($modelName);
  319. $result = $model->publish($cid, $value);
  320. $err = JError::isError($result) ? $result->message : '';
  321. }
  322. else {
  323. $err = JText::_('Panic. No model specified');
  324. }
  325. $this->setRedirect('index.php?option=com_control&view='.$view, $err);
  326. }
  327. /**
  328. * Changes the order of an item
  329. */
  330. function ordering()
  331. {
  332. // Check for request forgeries
  333. JRequest::checkToken() or die('Invalid Token');
  334. $app = &JFactory::getApplication();
  335. $view = JRequest::getCmd('view');
  336. $cid = JRequest::getVar('cid', null, 'post', 'array');
  337. $inc = $this->getTask() == 'orderup' ? -1 : +1;
  338. $type = $app->getUserStateFromRequest('control.'.$view.'.object_type', 'object_type', 'aco');
  339. if ($modelName = JRequest::getVar('model'))
  340. {
  341. $model = & $this->getModel($modelName);
  342. $model->setState('object_type', $type);
  343. $model->ordering($cid, $inc);
  344. $err = '';
  345. }
  346. else {
  347. $err = JText::_('Panic. No model specified');
  348. }
  349. $this->setRedirect('index.php?option=com_control&view='.$view, $err);
  350. }
  351. }