/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
backend/forms/gpt/FileForm.php
166 строк
4 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace backend\forms\gpt; use common\components\OpenAIComponent; use common\forms\base\ObjectIdForm; use common\helpers\FileHelper; use common\helpers\NumHelper; use common\kdf\KFilePurpose; use common\models\AclRole; use common\models\File; use common\models\Project; use OpenAI\Client; use Yii; use yii\helpers\ArrayHelper; use yii\validators\FileValidator; use yii\web\UploadedFile; /** * Форма добавления ассистента * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2025 */ class FileForm extends ObjectIdForm { /** * purpose_id * @var null */ public $purpose_id = null; /** * File * @var null */ public $file = null; /** * Проект * @var null */ public $project_id = null; /** * @inheritdoc */ public function attributeLabels() { return ArrayHelper::merge(parent::attributeLabels(), [ 'file' => Yii::t('app', 'File'), 'purpose_id' => Yii::t('app', 'Purpose'), 'project_id' => Yii::t('app', 'Project'), ]); } /** * @inheritdoc */ public function rules() { return ArrayHelper::merge(parent::rules(), [ ['file', 'safe'], [['project_id', 'purpose_id'], 'number'], [['project_id', 'purpose_id'], 'required'], ]); } /** * @inheritdoc */ public function loadModel($condition) { parent::loadModel($condition); if ($project_id = Yii::$app->request->get('project_id')) { $this->project_id = $project_id; } elseif ($project_id = ArrayHelper::getValue($condition, 'project_id')) { $this->project_id = $project_id; } $a = File::getAlias(); $obj = File::find() ->alias($a) ->andWhere([ $a . '.id' => $this->oid, ]) ->one(); if ($obj) { $this->initState($obj); } } /** * @inheritdoc */ public function getPublicFields() { return ArrayHelper::merge(parent::getPublicFields(), [ 'file', 'purpose_id' => function () { return $this->prepareSelectField(KFilePurpose::find(), 'purpose_id', 'title'); }, 'project_id' ]); } /** * @inheritdoc */ protected function doSave() { $upload = UploadedFile::getInstance($this, 'file'); if (!$upload or $upload->hasError) { $this->addError('file', Yii::t('app', 'Error upload file')); return false; } $p = Project::findOne($this->project_id); $openAI = Yii::createObject([ 'class' => OpenAIComponent::class, 'project_id' => $p->key ]); /** @var Client $client */ $client = $openAI->getClient(); $f = File::findOrNew($this->oid); $purpose = KFilePurpose::findOne($this->purpose_id); $dir = Yii::getAlias('@common/runtime/upload/') . time() . '/'; FileHelper::createDirectory($dir); $filename = $dir . basename($upload->name); $upload->saveAs($filename); $fp = fopen($filename, 'r'); $response = $client->files()->upload([ 'purpose' => $purpose->code, 'file' => $fp, ]); $f->setAttributes([ 'project_id' => $this->project_id, 'key' => $response->id, 'purpose' => $purpose->code, 'fname' => $upload->name, 'fsize' => $upload->size, 'ftype' => $upload->type ]); if (!$f->save()) { $this->addErrors($f->errors); return false; } $this->model = $f; return true; } }