PageRenderTime 28ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 1ms

/core/model/modx/processors/security/forms/set/update.class.php

http://github.com/modxcms/revolution
PHP | 323 lines | 256 code | 16 blank | 51 comment | 46 complexity | 4c32ae1efcc0cf1cb45508a6af1e1f5b MD5 | raw file
Possible License(s): GPL-2.0, Apache-2.0, BSD-3-Clause, LGPL-2.1
  1. <?php
  2. /*
  3. * This file is part of MODX Revolution.
  4. *
  5. * Copyright (c) MODX, LLC. All Rights Reserved.
  6. *
  7. * For complete copyright and license information, see the COPYRIGHT and LICENSE
  8. * files found in the top-level directory of this distribution.
  9. */
  10. /**
  11. * Saves a Form Customization Set.
  12. *
  13. * @param integer $start (optional) The record to start at. Defaults to 0.
  14. * @param integer $limit (optional) The number of records to limit to. Defaults
  15. * to 10.
  16. * @param string $sort (optional) The column to sort by.
  17. * @param string $dir (optional) The direction of the sort. Default action.
  18. *
  19. * @package modx
  20. * @subpackage processors.security.forms.set
  21. */
  22. class modFormCustomizationSetUpdateProcessor extends modObjectUpdateProcessor {
  23. public $classKey = 'modFormCustomizationSet';
  24. public $languageTopics = array('formcustomization');
  25. public $permission = 'customize_forms';
  26. public $objectType = 'set';
  27. /** @var array $newRules */
  28. public $newRules = array();
  29. public function beforeSet() {
  30. $this->setCheckbox('active');
  31. return parent::beforeSet();
  32. }
  33. public function beforeSave() {
  34. $this->object->set('constraint_class','modResource');
  35. $actionId = $this->getProperty('action_id',null);
  36. if ($actionId !== null) {
  37. $this->object->set('action',$actionId);
  38. }
  39. return parent::beforeSave();
  40. }
  41. public function afterSave() {
  42. $this->clearOldRules();
  43. $this->setFieldRules();
  44. $this->setTabRules();
  45. $this->setTVRules();
  46. $this->saveNewRules();
  47. return parent::afterSave();
  48. }
  49. /**
  50. * Clear out the old rules
  51. * @return void
  52. */
  53. public function clearOldRules() {
  54. $oldRules = $this->modx->getCollection('modActionDom',array(
  55. 'set' => $this->object->get('id'),
  56. ));
  57. /** @var modActionDom $oldRule */
  58. foreach ($oldRules as $oldRule) {
  59. $oldRule->remove();
  60. }
  61. }
  62. /**
  63. * Calculate field rules
  64. * @return void
  65. */
  66. public function setFieldRules() {
  67. $fields = $this->getProperty('fields',null);
  68. if ($fields == null) return;
  69. $fields = is_array($fields) ? $fields : $this->modx->fromJSON($fields);
  70. foreach ($fields as $field) {
  71. if (empty($field['visible'])) {
  72. /** @var modActionDom $rule */
  73. $rule = $this->modx->newObject('modActionDom');
  74. $rule->set('set',$this->object->get('id'));
  75. $rule->set('action',$this->object->get('action'));
  76. $rule->set('name',$field['name']);
  77. $rule->set('container','modx-panel-resource');
  78. $rule->set('rule','fieldVisible');
  79. $rule->set('value',0);
  80. $rule->set('constraint_class',$this->object->get('constraint_class'));
  81. $rule->set('constraint_field',$this->object->get('constraint_field'));
  82. $rule->set('constraint',$this->object->get('constraint'));
  83. $rule->set('active',true);
  84. if ($this->object->get('action') == 'resource/create') {
  85. $rule->set('for_parent',true);
  86. }
  87. $rule->set('rank',5);
  88. $this->newRules[] = $rule;
  89. }
  90. if (!empty($field['label'])) {
  91. $rule = $this->modx->newObject('modActionDom');
  92. $rule->set('set',$this->object->get('id'));
  93. $rule->set('action',$this->object->get('action'));
  94. $rule->set('name',$field['name']);
  95. $rule->set('container','modx-panel-resource');
  96. $rule->set('rule','fieldTitle');
  97. $rule->set('value',$field['label']);
  98. $rule->set('constraint_class',$this->object->get('constraint_class'));
  99. $rule->set('constraint_field',$this->object->get('constraint_field'));
  100. $rule->set('constraint',$this->object->get('constraint'));
  101. $rule->set('active',true);
  102. if ($this->object->get('action') == 'resource/create') {
  103. $rule->set('for_parent',true);
  104. }
  105. $rule->set('rank',4);
  106. $this->newRules[] = $rule;
  107. }
  108. if (isset($field['default_value']) && $field['default_value'] != '') {
  109. $rule = $this->modx->newObject('modActionDom');
  110. $rule->set('set',$this->object->get('id'));
  111. $rule->set('action',$this->object->get('action'));
  112. $rule->set('name',$field['name']);
  113. $rule->set('container','modx-panel-resource');
  114. $rule->set('rule','fieldDefault');
  115. $rule->set('value',$field['default_value']);
  116. $rule->set('constraint_class',$this->object->get('constraint_class'));
  117. $rule->set('constraint_field',$this->object->get('constraint_field'));
  118. $rule->set('constraint',$this->object->get('constraint'));
  119. $rule->set('active',true);
  120. if ($this->object->get('action') == 'resource/create') {
  121. $rule->set('for_parent',true);
  122. }
  123. $rule->set('rank',0);
  124. $this->newRules[] = $rule;
  125. }
  126. }
  127. }
  128. /**
  129. * Calculate tab rules
  130. * @return void
  131. */
  132. public function setTabRules() {
  133. $tabs = $this->getProperty('tabs',null);
  134. if ($tabs == null) return;
  135. $tabs = is_array($tabs) ? $tabs : $this->modx->fromJSON($tabs);
  136. $action = $this->object->get('action');
  137. // If the action ends in /* (wildcard rule), we assume tabs that exist for an update action
  138. if (substr($action, -2) === '/*') {
  139. $action = str_replace('/*', '/update', $action);
  140. }
  141. foreach ($tabs as $tab) {
  142. $tabField = $this->modx->getObject('modActionField',array(
  143. 'action' => $action,
  144. 'name' => $tab['name'],
  145. 'type' => 'tab',
  146. ));
  147. /* if creating a new tab */
  148. if (empty($tabField) && !empty($tab['visible'])) {
  149. /** @var modActionDom $rule */
  150. $rule = $this->modx->newObject('modActionDom');
  151. $rule->set('set',$this->object->get('id'));
  152. $rule->set('action',$this->object->get('action'));
  153. $rule->set('name',$tab['name']);
  154. $rule->set('container','modx-resource-tabs');
  155. $rule->set('rule','tabNew');
  156. $rule->set('value',$tab['label']);
  157. $rule->set('constraint_class',$this->object->get('constraint_class'));
  158. $rule->set('constraint_field',$this->object->get('constraint_field'));
  159. $rule->set('constraint',$this->object->get('constraint'));
  160. $rule->set('active',true);
  161. if ($this->object->get('action') == 'resource/create') {
  162. $rule->set('for_parent',true);
  163. }
  164. $rule->set('rank',1);
  165. $this->newRules[] = $rule;
  166. } else {
  167. /* otherwise editing an existing one */
  168. if (empty($tab['visible'])) {
  169. $rule = $this->modx->newObject('modActionDom');
  170. $rule->set('set',$this->object->get('id'));
  171. $rule->set('action',$this->object->get('action'));
  172. $rule->set('name',$tab['name']);
  173. $rule->set('container','modx-resource-tabs');
  174. $rule->set('rule','tabVisible');
  175. $rule->set('value',0);
  176. $rule->set('constraint_class',$this->object->get('constraint_class'));
  177. $rule->set('constraint_field',$this->object->get('constraint_field'));
  178. $rule->set('constraint',$this->object->get('constraint'));
  179. $rule->set('active',true);
  180. if ($this->object->get('action') == 'resource/create') {
  181. $rule->set('for_parent',true);
  182. }
  183. $rule->set('rank',2);
  184. $this->newRules[] = $rule;
  185. }
  186. if (!empty($tab['label'])) {
  187. $rule = $this->modx->newObject('modActionDom');
  188. $rule->set('set',$this->object->get('id'));
  189. $rule->set('action',$this->object->get('action'));
  190. $rule->set('name',$tab['name']);
  191. $rule->set('container','modx-resource-tabs');
  192. $rule->set('rule','tabTitle');
  193. $rule->set('value',$tab['label']);
  194. $rule->set('constraint_class',$this->object->get('constraint_class'));
  195. $rule->set('constraint_field',$this->object->get('constraint_field'));
  196. $rule->set('constraint',$this->object->get('constraint'));
  197. $rule->set('active',true);
  198. if ($this->object->get('action') == 'resource/create') {
  199. $rule->set('for_parent',true);
  200. }
  201. $rule->set('rank',3);
  202. $this->newRules[] = $rule;
  203. }
  204. }
  205. }
  206. }
  207. /**
  208. * Calculate the TV rules
  209. * @return void
  210. */
  211. public function setTVRules() {
  212. $tvs = $this->getProperty('tvs',null);
  213. if ($tvs == null) return;
  214. $tvs = is_array($tvs) ? $tvs : $this->modx->fromJSON($tvs);
  215. foreach ($tvs as $tvData) {
  216. /** @var modTemplateVar $tv */
  217. $tv = $this->modx->getObject('modTemplateVar',$tvData['id']);
  218. if (empty($tv)) continue;
  219. if (empty($tvData['visible'])) {
  220. /** @var modActionDom $rule */
  221. $rule = $this->modx->newObject('modActionDom');
  222. $rule->set('set',$this->object->get('id'));
  223. $rule->set('action',$this->object->get('action'));
  224. $rule->set('name','tv'.$tv->get('id'));
  225. $rule->set('container','modx-panel-resource');
  226. $rule->set('rule','tvVisible');
  227. $rule->set('value',0);
  228. $rule->set('constraint_class',$this->object->get('constraint_class'));
  229. $rule->set('constraint_field',$this->object->get('constraint_field'));
  230. $rule->set('constraint',$this->object->get('constraint'));
  231. $rule->set('active',true);
  232. if ($this->object->get('action') == 'resource/create') {
  233. $rule->set('for_parent',true);
  234. }
  235. $rule->set('rank',12);
  236. $this->newRules[] = $rule;
  237. }
  238. if (!empty($tvData['label'])) {
  239. $rule = $this->modx->newObject('modActionDom');
  240. $rule->set('set',$this->object->get('id'));
  241. $rule->set('action',$this->object->get('action'));
  242. $rule->set('name','tv'.$tv->get('id'));
  243. $rule->set('container','modx-panel-resource');
  244. $rule->set('rule','tvTitle');
  245. $rule->set('value',$tvData['label']);
  246. $rule->set('constraint_class',$this->object->get('constraint_class'));
  247. $rule->set('constraint_field',$this->object->get('constraint_field'));
  248. $rule->set('constraint',$this->object->get('constraint'));
  249. $rule->set('active',true);
  250. if ($this->object->get('action') == 'resource/create') {
  251. $rule->set('for_parent',true);
  252. }
  253. $rule->set('rank',11);
  254. $this->newRules[] = $rule;
  255. }
  256. if ($tv->get('default_text') != $tvData['default_value']) {
  257. $rule = $this->modx->newObject('modActionDom');
  258. $rule->set('set',$this->object->get('id'));
  259. $rule->set('action',$this->object->get('action'));
  260. $rule->set('name','tv'.$tv->get('id'));
  261. $rule->set('container','modx-panel-resource');
  262. $rule->set('rule','tvDefault');
  263. $rule->set('value',$tvData['default_value']);
  264. $rule->set('constraint_class',$this->object->get('constraint_class'));
  265. $rule->set('constraint_field',$this->object->get('constraint_field'));
  266. $rule->set('constraint',$this->object->get('constraint'));
  267. $rule->set('active',true);
  268. if ($this->object->get('action') == 'resource/create') {
  269. $rule->set('for_parent',true);
  270. }
  271. $rule->set('rank',10);
  272. $this->newRules[] = $rule;
  273. }
  274. if (!empty($tvData['tab']) && $tvData['tab'] != 'modx-panel-resource-tv') {
  275. $rule = $this->modx->newObject('modActionDom');
  276. $rule->set('set',$this->object->get('id'));
  277. $rule->set('action',$this->object->get('action'));
  278. $rule->set('name','tv'.$tv->get('id'));
  279. $rule->set('container','modx-panel-resource');
  280. $rule->set('rule','tvMove');
  281. $rule->set('value',$tvData['tab']);
  282. $rule->set('constraint_class',$this->object->get('constraint_class'));
  283. $rule->set('constraint_field',$this->object->get('constraint_field'));
  284. $rule->set('constraint',$this->object->get('constraint'));
  285. $rule->set('active',true);
  286. if ($this->object->get('action') == 'resource/create') {
  287. $rule->set('for_parent',true);
  288. }
  289. /* add 20 to rank to make sure happens after tab create */
  290. $rank = 20+((int)$tvData['rank']);
  291. $rule->set('rank',$rank);
  292. $this->newRules[] = $rule;
  293. }
  294. }
  295. }
  296. /**
  297. * Save the new rules to the set
  298. * @return void
  299. */
  300. public function saveNewRules() {
  301. /** @var modActionDom $newRule */
  302. foreach ($this->newRules as $newRule) {
  303. $newRule->save();
  304. }
  305. }
  306. }
  307. return 'modFormCustomizationSetUpdateProcessor';