/** * 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); }
/** * 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; }