public function run()
 {
     /** @var Controller $controller */
     $controller = $this->controller;
     $data = ['controllerClassName' => $controller->className(), 'actionId' => $this->id, 'params' => Yii::$app->request->getQueryParams()];
     $exportRequest = new ExportRequest();
     $exportRequest->user_id = Yii::$app->user->id;
     $exportRequest->data = $data;
     if ($exportRequest->save() == false) {
         Yz::errorFlash(Json::encode($exportRequest->getFirstErrors()));
     }
     Yii::$app->session->setFlash(Yz::FLASH_INFO, Yii::t('admin/export', 'Export request was added to queue. System will notify you when it will be done'));
     return $controller->goBack();
 }
 /**
  * Finds the ExportRequest model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param integer $id
  * @return ExportRequest the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = ExportRequest::findOne($id)) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }
 /**
  * @param ExportRequest $request
  * @return bool
  */
 protected function processExportRequest($request)
 {
     $controllerClassName = $request->data['controllerClassName'];
     $actionId = $request->data['actionId'];
     $requestParams = $request->data['params'];
     /** @var \backend\base\Controller $originalController */
     $originalController = new $controllerClassName('temp-controller', $this->module);
     /** @var ExportAction $action */
     $action = $originalController->createAction($actionId);
     if (!is_a($action, ExportAction::className())) {
         return false;
     }
     if (is_callable($action->searchModel)) {
         $searchModel = call_user_func($action->searchModel, $requestParams);
     } else {
         $searchModel = $action->searchModel;
     }
     /** @var DataProviderInterface $dataProvider */
     $dataProvider = call_user_func($action->dataProvider, $requestParams, $searchModel);
     /** @var array $gridColumns */
     $gridColumns = call_user_func($action->getGridColumns(), $searchModel, $dataProvider, $requestParams);
     try {
         $exportedContent = GridView::widget(['renderAllPages' => true, 'runInConsoleMode' => true, 'layout' => "{items}", 'tableOptions' => ['class' => ''], 'dataProvider' => $dataProvider, 'columns' => $gridColumns]);
     } catch (Exception $e) {
         $request->delete();
         SystemEvent::create('error', $request->user_id, Yii::t('admin/export', 'Requested data was not exported, aborting'));
         return false;
     }
     $fileContent = strtr(ExportAction::EXPORT_TEMPLATE, ['{name}' => $action->reportName, '{grid}' => $exportedContent]);
     $fileName = 'Export_' . $request->id . '_' . strtotime('%d%m%Y%H%i%s') . '.xls';
     $request->file = $fileName;
     $request->is_exported = 1;
     $request->save();
     FileHelper::createDirectory(Yii::getAlias(ExportRequest::FILE_PATH));
     file_put_contents(Yii::getAlias($request->fullFileName), $fileContent);
     SystemEvent::create('success', $request->user_id, Yii::t('admin/export', 'Data requested for exporting is ready'), ['/admin-export/export-requests/index']);
     return true;
 }