/** * * @param \Sds\DoctrineExtensions\Generator\GenerateEventArgs $eventArgs */ public function generatorDojoValidator(GenerateEventArgs $eventArgs) { $metadata = $eventArgs->getDocumentManager()->getClassMetadata($eventArgs->getClassName()); $options = $eventArgs->getOptions(); $resource = $eventArgs->getResource(); $field = $options['field']; $defaultMixins = $this->getDefaultMixins(); if (!isset($metadata->validator['fields'][$field])) { return; } if (count($metadata->validator['fields'][$field]) > 1) { $templateArgs = ['dependencyMids' => $defaultMixins['validator']['group'], 'dependencies' => $this->namesFromMids($defaultMixins['validator']['group']), 'mixins' => $this->namesFromMids($defaultMixins['validator']['group']), 'params' => ['field' => "{$field}"]]; foreach ($metadata->validator['fields'][$field] as $validator) { $validatorMid = $this->midFromClass($validator['class']); $validatorName = $this->nameFromMid($validatorMid); $templateArgs['dependencyMids'][] = $validatorMid; $templateArgs['dependencies'][] = $validatorName; if (isset($validator['options']) && count($validator['options']) > 0) { $params = json_encode($validator['options']); $templateArgs['params']['validators'][] = new Expr("new {$validatorName}({$params})"); } else { $templateArgs['params']['validators'][] = new Expr("new {$validatorName}"); } } } else { $validator = $metadata->validator['fields'][$field][0]; $mid = $this->midFromClass($validator['class']); $templateArgs = ['dependencyMids' => [$mid], 'dependencies' => [$this->nameFromMid($mid)], 'mixins' => [$this->nameFromMid($mid)]]; if (isset($validator['options'])) { $templateArgs['params'] = array_merge(['field' => "{$field}"], $validator['options']); } else { $templateArgs['params'] = ['field' => "{$field}"]; } } $templateArgs['dependencyMids'] = ',' . $this->indent($this->implodeMids($templateArgs['dependencyMids'])); $templateArgs['dependencies'] = ',' . $this->indent($this->implodeNames($templateArgs['dependencies'])); $templateArgs['mixins'] = $this->indent($this->implodeNames($templateArgs['mixins']), 12) . $this->indent("\n", 8); $templateArgs['params'] = $this->implodeParams($templateArgs['params']); $templateArgs['comment'] = $this->indent("// Will return a validator that can be used to check\n// the {$field} field"); $resource->content = $this->populateTemplate(file_get_contents(__DIR__ . '/Template/Module.js.template'), $templateArgs); $this->persistToFile($this->getFilePath($metadata->name, $field), $resource->content); }
/** * * @param \Sds\DoctrineExtensions\Generator\GenerateEventArgs $eventArgs */ public function generatorDojoForm(GenerateEventArgs $eventArgs) { $metadata = $eventArgs->getDocumentManager()->getClassMetadata($eventArgs->getClassName()); $options = $eventArgs->getOptions(); $resource = $eventArgs->getResource(); $defaultMixins = $this->getDefaultMixins(); $templateArgs = []; $hasMultiFieldValidator = array_key_exists(MultiFieldValidator::getResourceName($metadata->name), $metadata->generator); $params = []; if ($hasMultiFieldValidator) { $defaultMids = $defaultMixins['form']['withValidator']; } else { $defaultMids = $defaultMixins['form']['simple']; } if (isset($options['mixins'])) { $templateArgs['dependencyMids'] = $options['mixins']; } else { $templateArgs['dependencyMids'] = $defaultMids; } $templateArgs['mixins'] = $this->namesFromMids($templateArgs['dependencyMids']); $templateArgs['dependencies'] = $this->namesFromMids($templateArgs['dependencyMids']); if ($hasMultiFieldValidator) { $templateArgs['dependencyMids'][] = MultiFieldValidator::getMid($metadata->name); $templateArgs['dependencies'][] = 'MultiFieldValidator'; $params['validator'] = new Expr('new MultiFieldValidator'); } $params['inputs'] = []; foreach ($this->getSerializer()->fieldListForUnserialize($metadata) as $field) { $templateArgs['dependencyMids'][] = Input::getMid($metadata->name, $field); $templateArgs['dependencies'][] = ucfirst($field) . 'Input'; $params['inputs'][] = new Expr('new ' . ucfirst($field) . 'Input'); } $templateArgs['dependencyMids'] = ',' . $this->indent($this->implodeMids($templateArgs['dependencyMids'])); $templateArgs['dependencies'] = ',' . $this->indent($this->implodeNames($templateArgs['dependencies'])); $templateArgs['mixins'] = $this->indent($this->implodeNames($templateArgs['mixins']), 12) . $this->indent("\n", 8); $templateArgs['params'] = $this->implodeParams($params); $templateArgs['comment'] = $this->indent("// Will return a form for {$metadata->name}"); $resource->content = $this->populateTemplate(file_get_contents(__DIR__ . '/Template/Module.js.template'), $templateArgs); $this->persistToFile($this->getFilePath($metadata->name), $resource->content); }
/** * * @param \Sds\DoctrineExtensions\Generator\GenerateEventArgs $eventArgs */ public function generatorDojoJsonRest(GenerateEventArgs $eventArgs) { $options = $eventArgs->getOptions(); $resource = $eventArgs->getResource(); $metadata = $eventArgs->getDocumentManager()->getClassMetadata($eventArgs->getClassName()); $defaultMixins = $this->getDefaultMixins(); $templateArgs = []; $params = []; if (isset($options['mixins'])) { $templateArgs['dependencyMids'] = $options['mixins']; } else { $templateArgs['dependencyMids'] = $defaultMixins['store']['jsonRest']; } $templateArgs['mixins'] = $this->namesFromMids($templateArgs['dependencyMids']); $templateArgs['dependencies'] = $this->namesFromMids($templateArgs['dependencyMids']); $modelMid = Model::getMid($metadata->name); $pieces = explode('/', $modelMid); $model = $pieces[count($pieces) - 1]; $templateArgs['dependencyMids'][] = $modelMid; $templateArgs['dependencies'][] = $model; $params['name'] = $metadata->collection; $params['idField'] = $metadata->identifier; if (isset($metadata->rest)) { $params['target'] = $metadata->rest['endpoint']; } else { $params['target'] = $metadata->collection; } $params['model'] = new Expr($model); $templateArgs['dependencyMids'] = ',' . $this->indent($this->implodeMids($templateArgs['dependencyMids'])); $templateArgs['dependencies'] = ',' . $this->indent($this->implodeNames($templateArgs['dependencies'])); $templateArgs['mixins'] = $this->indent($this->implodeNames($templateArgs['mixins']), 12) . $this->indent("\n", 8); $templateArgs['params'] = $this->implodeParams($params); $templateArgs['comment'] = $this->indent("// Will return create a dojo JsonRest store for {$metadata->name}"); $resource->content = $this->populateTemplate(file_get_contents(__DIR__ . '/Template/Module.js.template'), $templateArgs); $this->persistToFile($this->getFilePath($metadata->name), $resource->content); }
/** * * @param \Sds\DoctrineExtensions\Generator\GenerateEventArgs $eventArgs */ public function generatorDojoInput(GenerateEventArgs $eventArgs) { $metadata = $eventArgs->getDocumentManager()->getClassMetadata($eventArgs->getClassName()); $options = $eventArgs->getOptions(); $resource = $eventArgs->getResource(); $field = $options['field']; $defaultMixins = $this->getDefaultMixins(); $templateArgs = []; $hasValidator = array_key_exists(Validator::getResourceName($metadata->name, $field), $metadata->generator); $params = []; if ($hasValidator) { switch ($metadata->fieldMappings[$field]['type']) { case 'int': $defaultMids = $defaultMixins['input']['intWithValidator']; break; case 'float': $defaultMids = $defaultMixins['input']['floatWithValidator']; break; case 'custom_id': $params['type'] = "hidden"; case 'string': default: $defaultMids = $defaultMixins['input']['stringWithValidator']; break; } if (isset($options['mixins'])) { $templateArgs['dependencyMids'] = $options['mixins']; } else { $templateArgs['dependencyMids'] = $defaultMids; } $templateArgs['dependencies'] = $this->namesFromMids($templateArgs['dependencyMids']); $templateArgs['mixins'] = $this->namesFromMids($templateArgs['dependencyMids']); $templateArgs['dependencyMids'][] = Validator::getMid($metadata->name, $field); $templateArgs['dependencies'][] = ucfirst($field) . 'Validator'; $params['validator'] = new Expr('new ' . ucfirst($field) . 'Validator'); } else { switch ($metadata->fieldMappings[$field]['type']) { case 'int': $defaultMids = $defaultMixins['input']['int']; break; case 'float': $defaultMids = $defaultMixins['input']['float']; break; case 'custom_id': $params['type'] = 'hidden'; case 'string': default: $defaultMids = $defaultMixins['input']['string']; break; } if (isset($options['mixins'])) { $templateArgs['dependencyMids'] = $options['mixins']; } else { $templateArgs['dependencyMids'] = $defaultMids; } $templateArgs['dependencies'] = $this->namesFromMids($templateArgs['dependencyMids']); $templateArgs['mixins'] = $this->namesFromMids($templateArgs['dependencyMids']); } $params['name'] = $field; //Camel case splitting regex $regex = '/(?<=[a-z])(?=[A-Z])/x'; $params['label'] = ucfirst(implode(' ', preg_split($regex, $field))); if (isset($options['params'])) { foreach ($options['params'] as $key => $value) { $params[$key] = $value; } } $templateArgs['dependencyMids'] = ',' . $this->indent($this->implodeMids($templateArgs['dependencyMids'])); $templateArgs['dependencies'] = ',' . $this->indent($this->implodeNames($templateArgs['dependencies'])); $templateArgs['mixins'] = $this->indent($this->implodeNames($templateArgs['mixins']), 12) . $this->indent("\n", 8); $templateArgs['params'] = $this->implodeParams($params); $templateArgs['comment'] = $this->indent("// Will return an input for the {$field} field"); $resource->content = $this->populateTemplate(file_get_contents(__DIR__ . '/Template/Module.js.template'), $templateArgs); $this->persistToFile($this->getFilePath($metadata->name, $field), $resource->content); }