예제 #1
0
 /**
  * Inserts the AutoCode into the project.
  *
  * @param EcrProjectBase $project The project.
  * @param array $options Insert options.
  * @param EcrLogger $logger EcrLogger.
  *
  * @return boolean
  */
 public function insert(EcrProjectBase $project, $options, EcrLogger $logger)
 {
     $input = JFactory::getApplication()->input;
     $table_name = $input->get('element');
     $element_scope = $input->get('element_scope');
     $element = 'row';
     if (!$table_name) {
         JFactory::getApplication()->enqueueMessage(jgettext('No table given'), 'error');
         return false;
     }
     $table = new EcrTable($table_name);
     $fields = EcrTableHelper::getTableColumns($table_name);
     $reqFields = $input->get('field', array(), 'array');
     $rows = '';
     $tags = array('<!--', '-->');
     $indent = '            ';
     if (!count($fields)) {
         JFactory::getApplication()->enqueueMessage('No table fields found', 'error');
         return false;
     }
     foreach ($fields as $name => $field) {
         $reqFieldHeader = $reqFields[$name];
         if (isset($project->autoCodes[$this->key]->fields[$this->key . '.' . $element][$name])) {
             $fieldHeader = $project->autoCodes[$this->key]->fields[$this->key . '.' . $element][$name];
         } else {
             $fieldHeader = new EcrTableField();
             $fieldHeader->name = $name;
         }
         $fieldHeader->label = $reqFieldHeader['label'];
         $fieldHeader->inputType = $reqFieldHeader['input_type'];
         $autoCodeFieldsHeader[] = $fieldHeader;
         $table->addField($fieldHeader);
     }
     //foreach
     $rows .= $this->getCode($element, $table, $indent);
     $this->fields[$this->key . '.' . $element] = $autoCodeFieldsHeader;
     $this->codes[$this->key . '.' . $element] = $this->enclose($rows, $this->key . '.' . $element);
     $project->addAutoCode($this);
     /*
      * Add substitutes
      *
      * Define keys that will be substitutes in the code
      */
     $project->addSubstitute('ECR_SUBPACKAGE', 'Views');
     $project->addSubstitute('_ECR_TABLE_NAME_', $table_name);
     foreach ($this->codes as $key => $code) {
         $project->addSubstitute($tags[0] . $key . $tags[1], $code);
     }
     //foreach
     /* Insert the part to your project and return the results */
     return $project->insertPart($options, $logger);
 }
예제 #2
0
 /**
  * Process custom options.
  *
  * @param EcrProjectBuilder $builder The Builder class.
  *
  * @return boolean True on sucess.
  */
 public function processOptions(EcrProjectBuilder $builder)
 {
     $fields = JFactory::getApplication()->input->get('fields', array(), 'array');
     if (false == is_array($fields)) {
         JFactory::getApplication()->enqueueMessage('No fields to process', 'error');
         return false;
     }
     $tableName = strtolower($builder->project->name);
     $comName = strtolower($builder->project->prefix . $builder->project->name);
     $builder->replacements->ECR_COM_TBL_NAME = $tableName;
     //-- Add the core categories table
     $table = new EcrTable('categories', true);
     $builder->project->addTable($table);
     //-- Prepare extension table
     $table = new EcrTable($tableName);
     for ($i = 0; $i < count($fields); $i++) {
         //@todo move out
         if ($fields[$i]['name'] == 'catid') {
             $fields[$i]['inputType'] = 'category';
             $fields[$i]['extension'] = $comName;
         }
         if ($fields[$i]['name'] == 'id') {
             $fields[$i]['inputType'] = 'hidden';
         }
         if ($fields[$i]['name'] == 'checked_out') {
             $fields[$i]['display'] = false;
         }
         $field = new EcrTableField($fields[$i]);
         $table->addField($field);
     }
     $relation = new EcrTableRelation();
     $relation->type = 'LEFT JOIN';
     $relation->field = 'catid';
     $relation->onTable = 'categories';
     $relation->onField = 'id';
     $alias = new EcrTableRelationalias();
     $alias->alias = 'category';
     $alias->aliasField = 'title';
     $relation->addAlias($alias);
     $table->addRelation($relation);
     $builder->project->addTable($table);
     $codes = array();
     /*
      * Admin
      */
     $c = EcrProjectHelper::getAutoCode('admin.sql.insert.' . $tableName);
     $c->elements = array('field');
     $codes[] = $c;
     $c = EcrProjectHelper::getAutoCode('admin.models.model.' . $tableName);
     $c->elements = array('buildquery16');
     $codes[] = $c;
     $c = EcrProjectHelper::getAutoCode('admin.forms.edit.' . $tableName);
     $c->elements = array('field');
     $codes[] = $c;
     $c = EcrProjectHelper::getAutoCode('admin.tableclass.classvar.' . $tableName);
     $c->elements = array('var');
     $c->options['varscope'] = $builder->project->phpVersion == '4' ? 'var' : 'protected';
     $codes[] = $c;
     $c = EcrProjectHelper::getAutoCode('admin.viewlist.table.' . $tableName);
     $c->elements = array('header', 'cell');
     $codes[] = $c;
     $c = EcrProjectHelper::getAutoCode('admin.viewform.table.' . $tableName);
     $c->elements = array('row');
     $codes[] = $c;
     /*
      * Site
      */
     $c = EcrProjectHelper::getAutoCode('site.viewitem.div.' . $tableName);
     $c->elements = array('divrow');
     $codes[] = $c;
     $c = EcrProjectHelper::getAutoCode('site.viewcategory.table.' . $tableName);
     $c->elements = array('header', 'cell');
     $codes[] = $c;
     /* @var EcrProjectAutocode $autoCode */
     foreach ($codes as $autoCode) {
         foreach ($autoCode->elements as $acElement) {
             $key = $autoCode->getKey() . '.' . $acElement;
             $code = $autoCode->getCode($acElement, $table);
             $code = $autoCode->enclose($code, $key);
             $builder->replacements->addCustom($autoCode->getFormattedKey($key), $code);
             $autoCode->fields[$key] = $table->getFields();
             $autoCode->codes[$key] = $code;
             $autoCode->tables[$key] = $table;
         }
         $builder->project->addAutoCode($autoCode);
     }
     $builder->replacements->addCustom('#_ECR_ADMIN_LIST_COLSPAN_#', count($fields) + 2);
     return true;
 }