public function getAddHandlerCode() { /** * @var \Cti\Storage\Component\Reference[] $references */ $references = array_values($this->model->getOutReferences()); /** * @var \Cti\Storage\Component\Model[] $referencesModels */ $referencesModels = array(); $referencesModels[] = $this->schema->getModel($references[0]->getDestination()); $referencesModels[] = $this->schema->getModel($references[1]->getDestination()); $code = " if @record instanceof Model." . $referencesModels[0]->getClassName() . "\r\n config =\r\n id_" . $referencesModels[0]->getName() . ": @record.data.id_" . $referencesModels[0]->getName() . "\r\n else if @record instanceof Model." . $referencesModels[1]->getClassName() . "\r\n config =\r\n id_" . $referencesModels[1]->getName() . ": @record.data.id_" . $referencesModels[1]->getName() . "\r\n"; $code .= " @store.add Ext.create 'Model." . $this->model->getClassName() . "', config"; return $code; }
protected function getAdditionalStoresPreConstructor() { $code = ''; $references = $this->model->getOutReferences(); if (count($references)) { $code .= " @additionalStores = \n"; foreach ($references as $reference) { $code .= <<<COFFEE {$reference->getDestination()}: Ext.create('Ext.data.Store', model: 'Model.{$this->model->getClassName()}' proxy: 'memory' ) COFFEE; } } return $code; }
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; }