/** * Unified action for import and export * @param $id * @param $importMode * @return string|\yii\web\Response * @throws ErrorException */ private function unifiedAction($id, $importMode) { $object = Object::findById($id); /* @var $className \app\modules\data\models\Import */ $className = $importMode ? 'app\\modules\\data\\models\\Import' : 'app\\modules\\data\\models\\Export'; if ($object !== null) { $model = new ImportModel(['object' => $id]); $fields = \app\modules\data\components\Import::getFields($model->object); if (\Yii::$app->request->isPost) { if ($model->load(\Yii::$app->request->post()) && $model->validate()) { $import = $className::find()->where(['user_id' => Yii::$app->user->id, 'object_id' => $id])->one(); if ($import === null) { $import = new $className(['user_id' => Yii::$app->user->id, 'object_id' => $id]); } $import->filename = null; if ($importMode === true) { $file = UploadedFile::getInstance($model, 'file'); $model->type = $file->extension; $filename = $model->getFilename('Import'); $import->filename = $filename; $fullFilename = Yii::$app->getModule('data')->importDir . '/' . $filename; if ($file->saveAs($fullFilename) === false) { throw new ErrorException("Unable to save file"); } } $import->status = $className::STATUS_PROCESS; $task_options = Yii::$app->request->post('Task', []); if ($import->save()) { BackgroundTasks::addTask(['name' => $importMode ? 'import' : 'export', 'description' => ($importMode ? 'import' : 'export') . " {$model->object}", 'action' => 'data/file/' . ($importMode ? 'import' : 'export'), 'params' => $model->serialize(), 'init_event' => $importMode ? 'import' : 'export'], ['create_notification' => isset($task_options['create_notification']) && 1 == $task_options['create_notification'] ? true : false]); \Yii::$app->session->setFlash('info', \Yii::t('app', 'Task is queued. Come back later.')); } else { \Yii::$app->session->setFlash('error', \Yii::t('app', 'Import Error')); } return $this->redirect(['/data/file']); } } $availablePropertyGroups = []; /** @var \app\modules\shop\models\Product $exampleModel - product for example */ $exampleModel = new $object->object_class(); if ($exampleModel->hasMethod('getPropertyGroups')) { $availablePropertyGroups = $exampleModel->getPropertyGroups(false, true); } \Yii::$app->session->setFlash('info', \Yii::t('app', 'Specify fields to import and select the file')); $fields['additionalFields'] = []; if ($exampleModel instanceof ExportableInterface) { $fields['additionalFields'] = $exampleModel::exportableAdditionalFields(); } if ($model->type === null) { $model->type = Yii::$app->modules['data']->defaultType; } return $this->render('import-export', ['model' => $model, 'object' => $object, 'fields' => $fields, 'availablePropertyGroups' => $availablePropertyGroups, 'importMode' => $importMode]); } else { \Yii::$app->session->setFlash('error', \Yii::t('app', 'Object not found')); return $this->redirect(['/data/file']); } }
public function actionOriginalText($taskId) { $data = BackgroundTasks::getData($taskId, $this); if (isset($data['text'])) { /* @var $yandex YandexWebmasterOAuth */ $yandex = \Yii::$app->apiServiceClientCollection->clients[self::SERVICE_NAME]; print_r($yandex->api("original-texts", 'POST', [$data['text']])); } else { throw new Exception("No text"); } }
public function actionIndex() { $now = time(); /* @var $event Task[] */ $event = Task::find()->where(['type' => Task::TYPE_EVENT, 'status' => Task::STATUS_ACTIVE])->all(); /* @var $repeat Task[] */ $repeat = Task::find()->where(['type' => Task::TYPE_REPEAT, 'status' => Task::STATUS_ACTIVE])->all(); foreach ($event as $task) { $task->run(); } foreach ($repeat as $task) { if (BackgroundTasks::checkExpression($now, $task->cron_expression)) { $task->setProcess(); } } /* @var $process Task[] */ $process = Task::find()->where(['type' => Task::TYPE_REPEAT, 'status' => Task::STATUS_PROCESS])->all(); foreach ($process as $task) { $task->run(); } }
public function actionIndex() { if (\Yii::$app->request->isPost) { $uploaded = UploadedFile::getInstancesByName('cmlFile'); $files = []; $date = time(); $dir = \Yii::getAlias(\Yii::$app->getModule('data')->importDirPath . '/'); if (!empty($uploaded)) { foreach ($uploaded as $k => $file) { if ($file->saveAs($dir . "cml{$date}_{$k}.xml")) { $files[] = $dir . "cml{$date}_{$k}.xml"; } } if (!empty($files)) { $params = ['files' => $files]; BackgroundTasks::addTask(['name' => 'CommerceML import', 'description' => 'CommerceML import', 'action' => 'data/commerceml/import', 'params' => Json::encode($params), 'init_event' => 'import'], ['create_notification' => true]); } } } return $this->render('index'); }
/** * @return \yii\web\Response */ public function actionCreate() { BackgroundTasks::addTask(['name' => 'yml_generate', 'description' => 'Creating YML file', 'action' => 'shop/yml/generate', 'params' => '', 'init_event' => 'shop/yml'], ['create_notification' => true]); Yii::$app->session->setFlash('success', 'Task has been created.'); return $this->redirect(['settings']); }
public function actionRecreate() { $result = BackgroundTasks::addTask(['action' => 'images/recreate-thumbnails', 'name' => 'Recreate images', 'description' => 'Creating YML file', 'init_event' => 'recreateThumbnails'], ['create_notification' => false]); Yii::$app->session->setFlash('info', Yii::t('app', $result ? 'Background task created' : 'Cannot create a task')); $this->redirect('index'); }
public function actionFind() { $result = BackgroundTasks::addTask(['action' => 'images/check-broken', 'name' => 'Find broken images', 'description' => 'Find broken images', 'init_event' => 'checkBrokenImages'], ['create_notification' => false]); Yii::$app->session->setFlash('info', Yii::t('app', $result ? 'Background task created' : 'Cannot create a task')); $this->redirect('index'); }