| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- <?php
- /*
- * This file is part of MODX Revolution.
- *
- * Copyright (c) MODX, LLC. All Rights Reserved.
- *
- * For complete copyright and license information, see the COPYRIGHT and LICENSE
- * files found in the top-level directory of this distribution.
- */
- /**
- * A collection of rules for the related Form Customization Profile. Can be applied to different "actions", or pages,
- * within the manager. Also can set a constraint on the set so that it only applies under certain circumstances, or
- * with a certain template.
- *
- * @property int $profile The ID of the Profile this set belongs to
- * @property int $action The ID of the modAction this set is tied to
- * @property string $description A description of the set provided by the user
- * @property boolean $active Whether or not this set is active, and will have its rules applied.
- * @property int $template If set to a non-zero value, will only apply rules if the Resource has the specified Template ID
- * @property string $constraint Optional. The value of the constraint_field on constraint_class to check against to see if rules should be applied.
- * @property string $constraint_field Optional. The field name of the constraint_class to check against with the constraint value to see if rules should be applied.
- * @property string $constraint_class Optional. The class of the constraint_field to check against with the constraint value to see if rules should be applied.
- * @see modCustomizationProfile
- * @see modActionDom
- * @package modx
- */
- class modFormCustomizationSet extends xPDOSimpleObject {
- /**
- * Get the formatted data for the FC Set
- *
- * @return array
- */
- public function getData() {
- $setArray = array();
- // If the action ends in /* (wildcard rule), we assume the update action to be the "base" action
- $baseAction = $this->get('action');
- if (substr($baseAction, -2) === '/*') {
- $baseAction = str_replace('/*', '/update', $baseAction);
- }
- /* get fields */
- $c = $this->xpdo->newQuery('modActionField');
- $c->innerJoin('modActionField','Tab','Tab.name = modActionField.tab');
- $c->select($this->xpdo->getSelectColumns('modActionField','modActionField'));
- $c->select(array(
- 'tab_rank' => 'Tab.rank',
- ));
- $c->where(array(
- 'action' => $baseAction,
- 'type' => 'field',
- ));
- $c->sortby('Tab.rank','ASC');
- $c->sortby('modActionField.rank','ASC');
- $fields = $this->xpdo->getCollection('modActionField',$c);
- /** @var modActionField $field */
- foreach ($fields as $field) {
- $c = $this->xpdo->newQuery('modActionDom');
- $c->where(array(
- 'set' => $this->get('id'),
- 'name' => $field->get('name'),
- ));
- $rules = $this->xpdo->getCollection('modActionDom',$c);
- $fieldArray = $field->toArray();
- $fieldArray['visible'] = true;
- $fieldArray['label'] = '';
- $fieldArray['default_value'] = '';
- /** @var modActionDom $rule */
- foreach ($rules as $rule) {
- switch ($rule->get('rule')) {
- case 'fieldVisible':
- if ($rule->get('value') == 0) {
- $fieldArray['visible'] = false;
- }
- break;
- case 'fieldDefault':
- $fieldArray['default_value'] = $rule->get('value');
- break;
- case 'fieldTitle':
- case 'fieldLabel':
- $fieldArray['label'] = $rule->get('value');
- break;
- }
- }
- $setArray['fields'][] = $fieldArray;
- }
- /* get TVs */
- if ($this->get('template')) {
- $c = $this->xpdo->newQuery('modTemplateVar');
- $c->leftJoin('modCategory','Category');
- $c->innerJoin('modTemplateVarTemplate','TemplateVarTemplates');
- $c->select($this->xpdo->getSelectColumns('modTemplateVar', 'modTemplateVar'));
- $c->select(array(
- 'Category.category AS category_name',
- ));
- $c->where(array(
- 'TemplateVarTemplates.templateid' => $this->get('template'),
- ));
- $c->sortby('Category.category','ASC');
- $c->sortby('TemplateVarTemplates.rank','ASC');
- $tvs = $this->xpdo->getCollection('modTemplateVar',$c);
- } else {
- $c = $this->xpdo->newQuery('modTemplateVar');
- $c->leftJoin('modCategory','Category');
- $c->select($this->xpdo->getSelectColumns('modTemplateVar', 'modTemplateVar'));
- $c->select(array(
- 'Category.category AS category_name',
- ));
- $c->sortby('Category.category','ASC');
- $c->sortby('modTemplateVar.name','ASC');
- $tvs = $this->xpdo->getCollection('modTemplateVar',$c);
- }
- /** @var modTemplateVar $tv */
- foreach ($tvs as $tv) {
- $c = $this->xpdo->newQuery('modActionDom');
- $c->where(array(
- 'set' => $this->get('id'),
- ));
- $c->andCondition(array(
- 'name:=' => 'tv'.$tv->get('id'),
- 'OR:value:=' => 'tv'.$tv->get('id'),
- ),null,2);
- $rules = $this->xpdo->getCollection('modActionDom',$c);
- $tvArray = $tv->toArray('',true,true);
- $tvArray['visible'] = true;
- $tvArray['label'] = '';
- $tvArray['default_value'] = $tv->get('default_text');
- $tvArray['tab'] = 'modx-panel-resource-tv';
- $tvArray['rank'] = '';
- /** @var modActionDom $rule */
- foreach ($rules as $rule) {
- switch ($rule->get('rule')) {
- case 'tvVisible':
- if ($rule->get('value') == 0) {
- $tvArray['visible'] = false;
- }
- break;
- case 'tvDefault':
- case 'tvDefaultValue':
- $tvArray['default_value'] = $rule->get('value');
- break;
- case 'tvTitle':
- case 'tvLabel':
- $tvArray['label'] = $rule->get('value');
- break;
- case 'tvMove':
- $tvArray['tab'] = $rule->get('value');
- /* subtract 20 from rank that have been added in update processor */
- $tvArray['rank'] = ((int)$rule->get('rank'))-20;
- if ($tvArray['rank'] < 0) $tvArray['rank'] = 0;
- break;
- }
- }
- $setArray['tvs'][] = $tvArray;
- }
- /* get tabs */
- $c = $this->xpdo->newQuery('modActionField');
- $c->where(array(
- 'action' => $baseAction,
- 'type' => 'tab',
- ));
- $c->sortby($this->xpdo->escape('rank'), 'ASC');
- $tabs = $this->xpdo->getCollection('modActionField',$c);
- /** @var modActionField $tab */
- foreach ($tabs as $tab) {
- $c = $this->xpdo->newQuery('modActionDom');
- $c->where(array(
- 'set' => $this->get('id'),
- 'name' => $tab->get('name'),
- ));
- $rules = $this->xpdo->getCollection('modActionDom',$c);
- $tabArray = $tab->toArray();
- $tabArray['visible'] = true;
- $tabArray['label'] = '';
- foreach ($rules as $rule) {
- switch ($rule->get('rule')) {
- case 'tabVisible':
- if ($rule->get('value') == 0) {
- $tabArray['visible'] = false;
- }
- break;
- case 'tabLabel':
- case 'tabTitle':
- $tabArray['label'] = $rule->get('value');
- break;
- }
- }
- $setArray['tabs'][] = $tabArray;
- }
- $newTabs = $this->xpdo->getCollection('modActionDom',array(
- 'set' => $this->get('id'),
- 'action' => $this->get('action'),
- 'rule' => 'tabNew',
- ));
- foreach ($newTabs as $tab) {
- $tabArray = $tab->toArray();
- $tabArray['visible'] = true;
- $tabArray['label'] = $tab->get('value');
- $tabArray['default_value'] = '';
- $tabArray['type'] = 'new';
- $setArray['tabs'][] = $tabArray;
- }
- return $setArray;
- }
- }
|