public function decorateRepresentation(\Extool\Representation\Representation &$rep) { $this->parse(); $pieces = explode('/', $this->resource); $rep->setName(ucfirst(array_pop($pieces))); foreach ($this->table_fields as $table_name => $fields) { $table = new \Extool\Representation\Table($table_name); $table->setFields($fields); $rep->addTable($table); $model = new \Extool\Representation\Model($table_name); $model->setCriteria($fields); $model->addTable($table); // Generate four views for each table $view = new \Extool\Representation\View($table_name); $view->setFields($fields); $rep->addPublicView($view); $rep->addPublicModel($model); $view->setAccess('admin'); $rep->addAdminView($view); $rep->addAdminModel($model); // Create new model for the list views $model = new \Extool\Representation\Model($table_name . ' List'); $model->setCriteria($fields); $model->addTable($table); $view = new \Extool\Representation\View($table_name . ' List'); $view->setType('list'); $view->setFields($fields); $rep->addPublicView($view); $rep->addPublicModel($model); $view->setAccess('admin'); $rep->addAdminView($view); $rep->addAdminModel($model); } }
public function decorateRepresentation(\Extool\Representation\Representation &$rep) { $this->parse(); $pieces = explode('/', $this->resource); $resource_name = ucfirst(preg_replace('/\\..*/', '', array_pop($pieces))); $rep->setName($resource_name); $fields = $this->determineFields(); $data = new \Extool\Representation\Data($fields); $data->setData($this->keyed_data); $rep->addData($data, $resource_name); $table = new \Extool\Representation\Table($resource_name); $table->setFields($fields); $rep->addTable($table); $model = new \Extool\Representation\Model($resource_name); $model->setCriteria($fields); $model->addTable($table); $view = new \Extool\Representation\View($resource_name); $view->setFields($fields); $rep->addPublicView($view); $rep->addPublicModel($model); $view->setAccess('admin'); $rep->addAdminView($view); $rep->addAdminModel($model); // Create new model for the list views $model = new \Extool\Representation\Model($resource_name . ' List'); $model->setCriteria($fields); $model->addTable($table); $view = new \Extool\Representation\View($resource_name . ' List'); $view->setType('list'); $view->setFields($fields); $rep->addPublicView($view); $rep->addPublicModel($model); $view->setAccess('admin'); $rep->addAdminView($view); $rep->addAdminModel($model); }
private function parseViews($prefix = '') { $views = array(); preg_match_all('/^' . $prefix . 'view\\s+(.+)\\s*\\((.+)\\)/sUm', $this->raw_plan, $matches); foreach ($matches[1] as $i => $view_name) { preg_match_all('/(\\w+):\\s+(.+)/', $matches[2][$i], $fields); $tables = $this->getMatchedProperties($fields, true); $model = $this->makeModel($tables, $view_name, $prefix); $merged_fields = new \Extool\Representation\Fields(); foreach ($model->tables as $table) { foreach ($table->fields as $field_name => $type) { $merged_fields->addField($field_name, $type); } } $view = new \Extool\Representation\View($view_name); if ($prefix == 'admin') { $view->setAccess('admin'); } if (preg_match('/ list$/i', $view_name)) { $view->setType('list'); } $view->setFields($merged_fields); $views[$view_name] = $view; } return $views; }