%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/yiisoft/yii2-queue/src/gii/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/yiisoft/yii2-queue/src/gii/Generator.php |
<?php /** * @link https://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license https://www.yiiframework.com/license/ */ namespace yii\queue\gii; use Yii; use yii\base\BaseObject; use yii\gii\CodeFile; use yii\queue\JobInterface; use yii\queue\RetryableJobInterface; /** * This generator will generate a job. * * @author Roman Zhuravlev <zhuravljov@gmail.com> */ class Generator extends \yii\gii\Generator { public $jobClass; public $properties; public $retryable = false; public $ns = 'app\jobs'; public $baseClass = BaseObject::class; /** * @inheritdoc */ public function getName() { return 'Job Generator'; } /** * @inheritdoc */ public function getDescription() { return 'This generator generates a Job class for the queue.'; } /** * @inheritdoc */ public function rules() { return array_merge(parent::rules(), [ [['jobClass', 'properties', 'ns', 'baseClass'], 'trim'], [['jobClass', 'ns', 'baseClass'], 'required'], ['jobClass', 'match', 'pattern' => '/^\w+$/', 'message' => 'Only word characters are allowed.'], ['jobClass', 'validateJobClass'], ['properties', 'match', 'pattern' => '/^[a-z_][a-z0-9_,\\s]*$/i', 'message' => 'Must be valid class properties.'], ['retryable', 'boolean'], ['ns', 'validateNamespace'], ['baseClass', 'validateClass'], ]); } /** * @inheritdoc */ public function attributeLabels() { return array_merge(parent::attributeLabels(), [ 'jobClass' => 'Job Class', 'properties' => 'Job Properties', 'retryable' => 'Retryable Job', 'ns' => 'Namespace', 'baseClass' => 'Base Class', ]); } /** * @inheritdoc */ public function hints() { return array_merge(parent::hints(), [ 'jobClass' => 'This is the name of the Job class to be generated, e.g., <code>SomeJob</code>.', 'properties' => 'Job object property names. Separate multiple properties with commas or spaces, e.g., <code>prop1, prop2</code>.', 'retryable' => 'Job object will implement <code>RetryableJobInterface</code> interface.', 'ns' => 'This is the namespace of the Job class to be generated.', 'baseClass' => 'This is the class that the new Job class will extend from.', ]); } /** * @inheritdoc */ public function stickyAttributes() { return array_merge(parent::stickyAttributes(), ['ns', 'baseClass']); } /** * @inheritdoc */ public function requiredTemplates() { return ['job.php']; } /** * @inheritdoc */ public function generate() { $params = []; $params['jobClass'] = $this->jobClass; $params['ns'] = $this->ns; $params['baseClass'] = '\\' . ltrim($this->baseClass, '\\'); $params['interfaces'] = []; if (!$this->retryable) { if (!is_a($this->baseClass, JobInterface::class, true)) { $params['interfaces'][] = '\\' . JobInterface::class; } } else { if (!is_a($this->baseClass, RetryableJobInterface::class, true)) { $params['interfaces'][] = '\\' . RetryableJobInterface::class; } } $params['properties'] = array_unique(preg_split('/[\s,]+/', $this->properties, -1, PREG_SPLIT_NO_EMPTY)); $jobFile = new CodeFile( Yii::getAlias('@' . str_replace('\\', '/', $this->ns)) . '/' . $this->jobClass . '.php', $this->render('job.php', $params) ); return [$jobFile]; } /** * Validates the job class. * * @param string $attribute job attribute name. */ public function validateJobClass($attribute) { if ($this->isReservedKeyword($this->$attribute)) { $this->addError($attribute, 'Class name cannot be a reserved PHP keyword.'); } } /** * Validates the namespace. * * @param string $attribute Namespace attribute name. */ public function validateNamespace($attribute) { $value = $this->$attribute; $value = ltrim($value, '\\'); $path = Yii::getAlias('@' . str_replace('\\', '/', $value), false); if ($path === false) { $this->addError($attribute, 'Namespace must be associated with an existing directory.'); } } }