/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
frontend/controllers/ReportController.php
129 строк
4 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace frontend\controllers; use common\helpers\ArrayHelper; use common\helpers\FileHelper; use common\helpers\TextHelper; use common\models\Request; use common\models\RequestSegment; use common\models\ResponseSegment; use common\models\TextSegment; use common\models\TextSegmentMongo; use frontend\assets\ReportAsset; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use Yii; use yii\filters\AccessControl; use yii\helpers\Json; use yii\helpers\VarDumper; use yii\web\Controller; /** * Контроллер запросов * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2024 */ class ReportController extends Controller { /** * @inheritdoc */ public function behaviors() { $behaviors = parent::behaviors(); $behaviors['AccessControl'] = [ 'class' => AccessControl::class, 'rules' => [ [ 'allow' => true, 'roles' => ['qa'], ], ], ]; return $behaviors; } /** * View XBench report form * * @return mixed */ public function actionView() { Yii::$app->view->title = Yii::$app->params['title']; ReportAsset::register(Yii::$app->view); return $this->render('view.twig'); } /** * Download XBench Analysis * * @return mixed */ public function actionDownload($token, $request, $sig = null) { // Yii::$app->request->validateSig(); $name = $token . '.xlsx'; $filename = Yii::getAlias('@root/tmp/upload/' . $name); $a = ResponseSegment::getAlias(); $response = ResponseSegment::find() ->select([$a . '.segment_id']) ->alias($a) ->innerJoin(['res' => RequestSegment::tableName()], 'res.id = request_segment_id') ->innerJoin(['r' => Request::tableName()], 'r.id = res.request_id') ->andWhere([ 'r.guid' => $request ]) ->orderBy([ 'segment_index' => SORT_ASC ]) ->asArray() ->all(); $spreadsheet = IOFactory::load($filename); /** @var Worksheet $worksheet */ $worksheet = $spreadsheet->getActiveSheet(); // Получаем данные из базы foreach ($response as $row) { $text_segment = TextSegment::getText($row['segment_id']); $segment = Json::decode($text_segment); $entries = ArrayHelper::getValue($segment, 'Entries'); foreach ((array)$entries as $line) { $line_id = ArrayHelper::getValue($line, 'Line_id'); $Flag = ArrayHelper::getValue($line, 'Flag'); $Commentary = ArrayHelper::getValue($line, 'Commentary'); $x = $line_id + 11; $worksheet->setCellValue([8, $x], $Flag); $worksheet->setCellValue([9, $x], $Commentary); } } $path = tempnam(sys_get_temp_dir(), (string)time()) . '.Xlsx'; $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save($path); $mimeType = FileHelper::getMimeType($path); Yii::debug(VarDumper::dumpAsString([ 'path' => $path ])); $filename = Yii::t('app', 'XBench Analysis ({0}).Xlsx', [ TextHelper::random('hexdec', 8) ]); return Yii::$app->response->sendFile($path, basename($filename), ['mimeType' => $mimeType]); } }