コード例 #1
0
 function createForm(&$tabs, &$record, &$allfields, &$categories, $scriptProperties, &$xtypes)
 {
     $fieldid = 0;
     foreach ($tabs as $tabid => $tab) {
         $tvs = array();
         $inputs = array();
         $fields = is_array($tab['fields']) ? $tab['fields'] : $this->modx->fromJson($tab['fields']);
         if (is_array($fields) && count($fields) > 0) {
             foreach ($fields as &$field) {
                 $fieldid++;
                 /*generate unique tvid, must be numeric*/
                 /*todo: find a better solution*/
                 $field['tv_id'] = ($scriptProperties['tv_id'] . '99' . $fieldid) * 1;
                 if (isset($field['description_is_code']) && !empty($field['description_is_code'])) {
                     $tv = $this->modx->newObject('modTemplateVar');
                     $tv->set('description', $this->renderChunk($field['description'], $record, false, false));
                     $tv->set('type', 'description_is_code');
                     $tv->set('id', $field['tv_id']);
                 } else {
                     if (isset($field['inputTV']) && ($tv = $this->modx->getObject('modTemplateVar', array('name' => $field['inputTV'])))) {
                         $params = $tv->get('input_properties');
                     } else {
                         $tv = $this->modx->newObject('modTemplateVar');
                         $tv->set('type', !empty($field['inputTVtype']) ? $field['inputTVtype'] : 'text');
                     }
                     if (!empty($field['inputOptionValues'])) {
                         $tv->set('elements', $field['inputOptionValues']);
                     }
                     if (!empty($field['default'])) {
                         $tv->set('default_text', $tv->processBindings($field['default']));
                     }
                     if (!empty($field['configs'])) {
                         $params['configs'] = $field['configs'];
                     }
                     /*insert actual value from requested record, convert arrays to ||-delimeted string */
                     $fieldvalue = '';
                     if (isset($record[$field['field']])) {
                         $fieldvalue = $record[$field['field']];
                         if (is_array($fieldvalue)) {
                             $fieldvalue = is_array($fieldvalue[0]) ? $this->modx->toJson($fieldvalue) : implode('||', $fieldvalue);
                         }
                     }
                     $tv->set('value', $fieldvalue);
                     if (!empty($field['caption'])) {
                         $field['caption'] = htmlentities($field['caption'], ENT_QUOTES, $this->modx->getOption('modx_charset'));
                         $tv->set('caption', $field['caption']);
                     }
                     if (!empty($field['description'])) {
                         $field['description'] = htmlentities($field['description'], ENT_QUOTES, $this->modx->getOption('modx_charset'));
                         $tv->set('description', $field['description']);
                     }
                     $field['array_tv_id'] = $field['tv_id'] . '[]';
                     $allfield = array();
                     $allfield['field'] = $field['field'];
                     $allfield['tv_id'] = $field['tv_id'];
                     $allfield['array_tv_id'] = $field['array_tv_id'];
                     $allfields[] = $allfield;
                     $mediasource = $this->getFieldSource($field, $tv);
                     $tv->setSource($mediasource);
                     $tv->set('id', $field['tv_id']);
                     /*
                     $default = $tv->processBindings($tv->get('default_text'), $resourceId);
                     if (strpos($tv->get('default_text'), '@INHERIT') > -1 && (strcmp($default, $tv->get('value')) == 0 || $tv->get('value') == null)) {
                     $tv->set('inherited', true);
                     }
                     */
                     if ($tv->get('value') == null) {
                         $v = $tv->get('default_text');
                         if ($tv->get('type') == 'checkbox' && $tv->get('value') == '') {
                             $v = '';
                         }
                         $tv->set('value', $v);
                     }
                     //$this->modx->smarty->assign('tv', $tv);
                     /* move this part into a plugin onMediaSourceGetProperties and create a mediaSource - property 'autoCreateFolder'
                                             * may be performancewise its better todo that here?
                                             
                                             if (!empty($properties['basePath'])) {
                                             if ($properties['autoResourceFolders'] == 'true') {
                                             $params['basePath'] = $basePath . $scriptProperties['resource_id'] . '/';
                                             $targetDir = $params['basePath'];
                     
                                             $cacheManager = $this->modx->getCacheManager();
                                             // if directory doesnt exist, create it 
                                             if (!file_exists($targetDir) || !is_dir($targetDir)) {
                                             if (!$cacheManager->writeTree($targetDir)) {
                                             $this->modx->log(modX::LOG_LEVEL_ERROR, '[MIGX] Could not create directory: ' . $targetDir);
                                             return $this->modx->error->failure('Could not create directory: ' . $targetDir);
                                             }
                                             }
                                             // make sure directory is readable/writable 
                                             if (!is_readable($targetDir) || !is_writable($targetDir)) {
                                             $this->modx->log(xPDO::LOG_LEVEL_ERROR, '[MIGX] Could not write to directory: ' . $targetDir);
                                             return $this->modx->error->failure('Could not write to directory: ' . $targetDir);
                                             }
                                             } else {
                                             $params['basePath'] = $basePath;
                                             }
                                             }
                                             */
                     if (!isset($params['allowBlank'])) {
                         $params['allowBlank'] = 1;
                     }
                     $value = $tv->get('value');
                     if ($value === null) {
                         $value = $tv->get('default_text');
                     }
                     //$this->modx->smarty->assign('params', $params);
                     /* find the correct renderer for the TV, if not one, render a textbox */
                     //Todo: Create plugin-event OnTVInputRenderListMIGXfe to get custom TV-rendererPaths
                     //$inputRenderPaths = $tv->getRenderDirectories('OnTVInputRenderList', 'input');
                     //print_r($inputRenderPaths);
                     $inputRenderPaths = $this->config['corePath'] . 'elements/tv/input/';
                     $inputRenderPaths = explode(',', $inputRenderPaths);
                     $inputForm = $tv->getRender($params, $value, $inputRenderPaths, 'input', null, $tv->get('type'));
                     $this->modx->getParser();
                     /*parse all non-cacheable tags and remove unprocessed tags, if you want to parse only cacheable tags set param 3 as false*/
                     $this->modx->parser->processElementTags('', $inputForm, true, true, '[[', ']]', array(), $counts);
                     echo '<input type="hidden" id="original' . $_REQUEST['win_id'] . '-' . $tv->get('id') . '" name="original' . $tv->get('id') . '" value="' . htmlspecialchars($tv->get('value'), ENT_QUOTES) . '" />';
                     if (is_array($xtypes)) {
                         $xtype = $tv->get('xtype_template');
                         if (file_exists($xtype)) {
                             $template = '@FILE ' . $xtype;
                             $parser = new migxfeChunkie($template, '', false);
                             //print_r($parser->getPlaceholders());
                             $xtypes[$tv->get('xtype_template')] = $parser->render();
                         }
                     }
                     if (empty($inputForm)) {
                         continue;
                     }
                     $tv->set('formElement', $inputForm);
                     $inputs[] = $inputForm;
                 }
                 $tvs[] = $tv->toArray();
             }
         }
         $cat = array();
         $cat['category'] = $tab['caption'];
         $cat['print_before_tabs'] = isset($tab['print_before_tabs']) && !empty($tab['print_before_tabs']) ? true : false;
         $cat['id'] = $tabid;
         $cat['tvs'] = $tvs;
         $cat['inputs'] = $inputs;
         $categories[] = $cat;
     }
 }
コード例 #2
0
 public function process()
 {
     //require_once dirname(dirname(dirname(__file__))) . '/model/migx/migx.class.php';
     //$migx = new Migx($this->modx);
     $modx =& $this->modx;
     $corePath = dirname(dirname(dirname(dirname(__FILE__)))) . '/';
     require_once $corePath . 'model/chunkie/chunkie.class.inc.php';
     //require_once $modx->getOption('core_path') . 'model/modx/modtemplatevar.class.php';
     require_once $corePath . '/model/migxfe/modtemplatevarinputrendermigxfe.class.php';
     $template = '@FILE form.tpl';
     $controller = new migxfeChunkie($template, $corePath . 'templates/web/form/');
     $scriptProperties = $this->getProperties();
     // special actions, for example the selectFromGrid - action
     $tempParams = $this->modx->getOption('tempParams', $scriptProperties, '');
     $action = '';
     if (!empty($tempParams)) {
         $tempParams = $this->modx->fromJson($tempParams);
         if (array_key_exists('action', $tempParams) && !empty($tempParams['action'])) {
             $action = strtolower($tempParams['action']);
             if ($action == 'selectfromgrid') {
                 $scriptProperties['configs'] = !empty($tempParams['selectorconfig']) ? $tempParams['selectorconfig'] : $action;
             }
             $action = '_' . $action;
         }
     }
     //$controller->loadControllersPath();
     // we will need a way to get a context-key, if in CMP-mode, from config, from dataset..... thoughts??
     // can be overridden in custom-processors for now, but whats with the preparegrid-method and working-context?
     // ok let's see when we need this.
     $this->modx->migxfe->working_context = 'web';
     if ($this->modx->resource = $this->modx->getObject('modResource', $scriptProperties['resource_id'])) {
         $this->modx->migxfe->working_context = $this->modx->resource->get('context_key');
         //$_REQUEST['id']=$scriptProperties['resource_id'];
     }
     //$controller->setPlaceholder('_config', $this->modx->config);
     $task = $this->modx->migxfe->getTask();
     $filename = str_replace(array('.class', '.php'), '', basename(__FILE__)) . $action . '.php';
     $processorspath = $this->modx->migxfe->config['migxCorePath'] . 'processors/mgr/';
     $filenames = array();
     if ($processor_file = $this->modx->migxfe->findProcessor($processorspath, $filename, $filenames)) {
         include_once $processor_file;
     }
     $sender = isset($sender) ? $sender : '';
     $this->modx->migxfe->loadConfigs(true, true, $scriptProperties, $sender);
     $tabs = $this->modx->migxfe->getTabs();
     $fieldid = 0;
     $allfields[] = array();
     $categories = array();
     $xtypes = array();
     $template = '@FILE fields.tpl';
     $this->modx->controller = new migxfeChunkie($template, $corePath . 'templates/web/form/');
     //needed because TVs are using smarty
     //$this->modx->getService('smarty', 'smarty.modSmarty');
     //$this->modx->controller = new MigxFormController($this->modx);
     //$this->modx->controller->loadTemplatesPath();
     $this->modx->controller->setPlaceholder('_config', $this->modx->config);
     $this->modx->migxfe->createForm($tabs, $record, $allfields, $categories, $scriptProperties, $xtypes);
     $formcaption = $this->modx->migxfe->customconfigs['formcaption'];
     //collected custom TV-xtypes
     $xtypesoutput = implode('', $xtypes);
     //$innerrows['tab']='Test';<- parse categories to tabs here
     //{if count($categories) < 2 OR ($smarty.foreach.cat.first AND $category.print_before_tabs)}
     $tabsoutput = array();
     if (is_array($categories)) {
         $i = 0;
         foreach ($categories as $category) {
             $i++;
             $template = '@FILE tab.tpl';
             $parser = new migxfeChunkie($template, $corePath . 'templates/web/form/');
             $parser->createVars($category);
             $parser->setPlaceholder('innerrows.input', implode(',', $category['inputs']));
             $is_xtab = count($categories) < 2 || $i == 1 && $category['print_before_tabs'] ? '0' : '1';
             $parser->setPlaceholder('is_xtab', $is_xtab);
             //print_r($parser->getPlaceholders());
             $tabsoutput[] = $parser->render();
         }
     }
     $tabsoutput = implode(',', $tabsoutput);
     $innerrows['tab'] = $tabsoutput;
     $innercounts['tab'] = count($categories);
     $formcaption = $this->modx->migxfe->renderChunk($formcaption, $record, false, false);
     $formcaption = addslashes($formcaption);
     $formcaption = str_replace(array("\n", "\r"), array("\\n", "\\r"), $formcaption);
     $o_array = array();
     if ($object) {
         $o_array = $object->toArray();
     }
     $template = '@FILE winbuttons.tpl';
     $parser = new migxfeChunkie($template, $corePath . 'templates/web/form/');
     $parser->createVars($controller->getPlaceholders());
     $winbuttons = $parser->render();
     $controller->setPlaceholder('xtypes', $xtypesoutput);
     $controller->setPlaceholder('formcaption', $formcaption);
     $controller->setPlaceholder('fields', $this->modx->toJSON($allfields));
     $controller->setPlaceholder('customconfigs', $this->modx->migxfe->customconfigs);
     $controller->setPlaceholder('object', $o_array);
     $controller->setPlaceholder('innerrows', $innerrows);
     $controller->setPlaceholder('innercounts', $innercounts);
     $controller->setPlaceholder('request', $_REQUEST);
     $controller->setPlaceholder('migxfeconfig', $this->modx->migxfe->config);
     $controller->setPlaceholder('OnMigxfeFormPrerender', '');
     $controller->setPlaceholder('OnMigxfeFormRender', '');
     //$controller->setPlaceholder('win_id', $scriptProperties['tv_id']);
     $controller->setPlaceholder('win_id', isset($this->modx->migxfe->customconfigs['win_id']) ? $this->modx->migxfe->customconfigs['win_id'] : $scriptProperties['tv_id']);
     //$c->setPlaceholder('id_update_window', 'modx-window-midb-grid-update');
     $controller->setPlaceholder('onsubmitsuccess', $this->modx->getOption('onsubmitsuccess', $this->modx->migxfe->customconfigs, ''));
     $controller->setPlaceholder('winbuttons', $this->modx->getOption('winbuttons', $this->modx->migxfe->customconfigs, $winbuttons));
     $controller->setPlaceholder('submitparams', $this->modx->getOption('submitparams', $this->modx->migxfe->customconfigs, ''));
     $tabs_js = '';
     if (count($categories) > 1) {
         $template = '@FILE tabs_js.tpl';
         $parser = new migxfeChunkie($template, $corePath . 'templates/web/form/');
         $parser->createVars($controller->getPlaceholders());
         $tabs_js = $parser->render();
     }
     $controller->setPlaceholder('tabs_js', $tabs_js);
     if (!empty($_REQUEST['showCheckbox'])) {
         $controller->setPlaceholder('showCheckbox', 1);
     }
     //echo '<pre>' .print_r($controller->getPlaceholders(),1) .'</pre>';
     $output = $controller->render();
     //$this->modx->getParser();
     /*parse all non-cacheable tags and remove unprocessed tags, if you want to parse only cacheable tags set param 3 as false*/
     //$this->modx->parser->processElementTags('', $output, true, true, '[[', ']]', array(), $counts);
     return $output;
 }