/**
  * 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']);
     }
 }
Ejemplo n.º 2
0
 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");
     }
 }
Ejemplo n.º 3
0
 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');
 }