111 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace frontend\modules\api\controllers;
 | 
						|
 | 
						|
use common\models\Document;
 | 
						|
use common\models\DocumentFieldValue;
 | 
						|
use common\services\DocumentService;
 | 
						|
use Yii;
 | 
						|
use yii\web\BadRequestHttpException;
 | 
						|
use yii\web\NotFoundHttpException;
 | 
						|
use yii\web\ServerErrorHttpException;
 | 
						|
 | 
						|
class DocumentController extends ApiController
 | 
						|
{
 | 
						|
 | 
						|
    public function verbs(): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'get-document-list' => ['get'],
 | 
						|
            'get-document' => ['get'],
 | 
						|
            'create-document' => ['post'],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @throws NotFoundHttpException
 | 
						|
     */
 | 
						|
    public function actionGetDocumentList($document_type = null): array
 | 
						|
    {
 | 
						|
        $documents = DocumentService::getDocumentList($document_type);
 | 
						|
 | 
						|
        if(empty($documents)) {
 | 
						|
            throw new NotFoundHttpException('Documents not found');
 | 
						|
        }
 | 
						|
 | 
						|
        return $documents;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @throws NotFoundHttpException
 | 
						|
     */
 | 
						|
    public function actionGetDocument($document_id): array
 | 
						|
    {
 | 
						|
        if(empty($document_id) or !is_numeric($document_id))
 | 
						|
        {
 | 
						|
            throw new NotFoundHttpException('Incorrect document ID');
 | 
						|
        }
 | 
						|
 | 
						|
        $document = DocumentService::getDocument($document_id);
 | 
						|
 | 
						|
        if(empty($document)) {
 | 
						|
            throw new NotFoundHttpException('There is no such document');
 | 
						|
        }
 | 
						|
 | 
						|
        return $document;
 | 
						|
    }
 | 
						|
 | 
						|
    public function actionCreateDocument()
 | 
						|
    {
 | 
						|
        $document = Yii::$app->getRequest()->getBodyParams();
 | 
						|
        $documentFieldValues = $document['documentFieldValues'];
 | 
						|
 | 
						|
        $modelDocument = new Document();
 | 
						|
        if ($modelDocument->load($document, '') && $modelDocument->save()) {
 | 
						|
 | 
						|
            try {
 | 
						|
                $this->createDocimentFields($documentFieldValues, $modelDocument->id, $modelDocument->template_id);
 | 
						|
            }
 | 
						|
            catch (ServerErrorHttpException $e) {
 | 
						|
                $modelDocument->delete();
 | 
						|
                throw new BadRequestHttpException(json_encode($e->getMessage()));
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            throw new BadRequestHttpException(json_encode($modelDocument->errors));
 | 
						|
        }
 | 
						|
 | 
						|
        Yii::$app->getResponse()->setStatusCode(201);
 | 
						|
        return  DocumentService::getDocument($modelDocument->id);
 | 
						|
    }
 | 
						|
 | 
						|
    private function createDocimentFields($documentFieldValues , $document_id, $template_id)
 | 
						|
    {
 | 
						|
        if (!empty($documentFieldValues)) {
 | 
						|
 | 
						|
            $modelFieldsArray = array();
 | 
						|
 | 
						|
            foreach ($documentFieldValues as $docFieldValue) {
 | 
						|
                $tmpModelField = new DocumentFieldValue();
 | 
						|
 | 
						|
                if ($tmpModelField->load($docFieldValue, '')) {
 | 
						|
                    $modelFieldsArray[] = $tmpModelField;
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    throw new ServerErrorHttpException(
 | 
						|
                        'Failed to load document field value where modelField: field_id=' . $tmpModelField->field_id . ' value=' . $tmpModelField->value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            foreach ($modelFieldsArray as $modelField) {
 | 
						|
 | 
						|
                $modelField->document_id = $document_id;
 | 
						|
                if (!$modelField->save()) {
 | 
						|
                    throw new ServerErrorHttpException(
 | 
						|
                        'Failed to save document field value where modelField: field_id=' . $modelField->field_id . ' value=' . $modelField->value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |