/** * @param \Cti\Storage\Component\Model $linkModel */ public function getOppositeModel($linkModel) { foreach ($linkModel->getReferences() as $reference) { if ($reference->getDestination() != $this->model->getName()) { return $this->schema->getModel($reference->getDestination()); } } }
public function init(Model $model) { $this->name = 'id_' . $model->getName(); $this->properties = array($this->name => new Property(array('behaviour' => $this, 'name' => $this->name, 'comment' => 'Identifier', 'type' => 'integer', 'primary' => true, 'required' => true, 'sequence' => true))); if (!$model->getSequence()) { $model->createSequence(); } }
public function getCode() { $fields = array(); foreach ($this->model->getProperties() as $property) { $fields[] = $property->getName(); } $code = $this->fenom->render('repository', array('model' => $this->model, 'fields' => $fields, 'schema' => $this->schema)); return $code; }
function init(Model $model) { $model->removeBehaviour('id'); $model->removeSequence(); foreach ($this->list as $foreign) { if ($foreign->hasBehaviour('log') && !$model->hasBehaviour('log')) { $model->addBehaviour('log'); } } }
protected function getAdditionalStoresAfterConstructor() { $code = "\n"; $references = $this->model->getOutReferences(); foreach ($references as $reference) { $code .= <<<COFFEE Storage.getList '{$reference->getDestination()}', (records) => @additionalStores.{$reference->getDestination()}.loadData records.data COFFEE; } return $code; }
protected function modelAsArray(Model $model) { $result = array('pk' => $model->getPk(), 'has_log' => (bool) $model->getBehaviour('log'), 'is_link' => (bool) $model->getBehaviour('link'), 'properties' => array(), 'references' => array()); foreach ($model->getProperties() as $property) { $result['properties'][$property->getName()] = $this->propertyAsArray($property); } foreach ($model->getOutReferences() as $reference) { $result['references'][] = $this->referenceAsArray($reference); } return $result; }
public function getConditionDefinition() { /** * @var \Cti\Storage\Component\Reference[] $references */ $references = array_values($this->model->getOutReferences()); /** * @var \Cti\Storage\Component\Model[] $referencesModels */ $referencesModels = array(); $referenceProperties = array(); $referencesModels[] = $this->schema->getModel($references[0]->getDestination()); $referenceProperties[] = $references[0]->getProperties(); $referencesModels[] = $this->schema->getModel($references[1]->getDestination()); $referenceProperties[] = $references[1]->getProperties(); $referenceProperties[0] = array_shift($referenceProperties[0]); $referenceProperties[1] = array_shift($referenceProperties[1]); return " if @record instanceof Model." . $referencesModels[0]->getClassName() . "\r\n condition =\r\n " . $referenceProperties[0]->getName() . ": record.data.id_" . $referencesModels[0]->getName() . "\r\n else if @record instanceof Model." . $referencesModels[1]->getClassName() . "\r\n condition =\r\n " . $referenceProperties[1]->getName() . ": record.data.id_" . $referencesModels[1]->getName() . "\r\n"; }
public function getGeneratedCode() { $class = $this->model->getClassName(); $name = $this->model->getName(); $pk = $this->model->getPk(); $idProperty = json_encode(count($pk) == 1 ? $pk[0] : $pk); $items = array(); // @todo References only by 1 field /** * @var \Cti\Storage\Component\Reference[] $referenceByField */ $referenceByField = array(); foreach ($this->model->getOutReferences() as $reference) { if (count($reference->getProperties()) == 1) { $properties = $reference->getProperties(); $property = array_shift($properties); $referenceByField[$property->getName()] = $reference; } } $item_list = $behaviours = array(); foreach ($this->model->getProperties() as $property) { $reference = isset($referenceByField[$property->getName()]) ? $referenceByField[$property->getName()] : null; $item = array('name' => $property->getName(), 'allowBlank' => !!$property->getRequired(), 'fieldLabel' => $property->getComment()); if ($reference) { $item['xtype'] = 'ctipicker'; $item['model'] = $reference->getDestination(); $item['displayField'] = 'name'; $item['valueField'] = 'id_' . $reference->getDestination(); } else { switch ($property->getJavascriptType()) { case 'date': $item['xtype'] = 'datefield'; break; case 'numeric': $item['xtype'] = 'numberfield'; break; default: $item['xtype'] = 'textfield'; break; } } if ($property->getBehaviour()) { $item['readOnly'] = true; $item['disabled'] = true; if (!in_array($property->getName(), $pk)) { $behaviours[] = $property->getName(); } } else { $item_list[] = $property->getName(); } if ($property->getJavascriptType() == 'numeric') { $item['xtype'] = 'numberfield'; } $items[$property->getName()] = $item; } $item_list = json_encode(array_merge($item_list, $pk, $behaviours)); $items = json_encode($items); $pk_getter = array(); foreach ($pk as $key) { $pk_getter[] = $key . ": @" . $key; } $pk_getter = implode(', ', $pk_getter); return <<<COFFEE Ext.define 'Generated.Form.{$class}', requires: ['Cti.Picker'], extend: 'Ext.form.Panel' bodyPadding: 10 monitorValid: true border: false getPk: -> {$pk_getter} getItemsConfig: -> {$items} getItemsList: -> {$item_list} modelExists: -> !Ext.Array.contains(Ext.Object.getValues(@getPk()), undefined) initComponent: -> @items = [] config = @getItemsConfig() for item in @getItemsList() @items.push config[item] @callParent arguments if @modelExists() Storage.getModel '{$name}', @getPk(), (response) => model = Ext.create 'Model.{$class}', response.data @getForm().loadRecord model @fireEvent 'recordloaded', model COFFEE; }