124 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace frontend\modules\api\controllers;
 | |
| 
 | |
| use common\models\Document;
 | |
| use common\models\DocumentFieldValue;
 | |
| use common\models\Template;
 | |
| use common\models\TemplateDocumentField;
 | |
| use Exception;
 | |
| use Yii;
 | |
| use yii\filters\auth\HttpBearerAuth;
 | |
| use yii\web\BadRequestHttpException;
 | |
| use yii\web\NotFoundHttpException;
 | |
| use yii\rest\Controller;
 | |
| use yii\web\ServerErrorHttpException;
 | |
| 
 | |
| class DocumentController extends Controller
 | |
| {
 | |
|     public function behaviors(): array
 | |
|     {
 | |
|         $behaviors = parent::behaviors();
 | |
| 
 | |
|         $behaviors['authenticator']['authMethods'] = [
 | |
|             HttpBearerAuth::className(),
 | |
|         ];
 | |
| 
 | |
|         return $behaviors;
 | |
|     }
 | |
| 
 | |
|     public function verbs(): array
 | |
|     {
 | |
|         return [
 | |
| //            'get-task' => ['get'],
 | |
|             'get-document-list' => ['get'],
 | |
|             'create-document' => ['post'],
 | |
| //            'update-task' => ['put', 'patch'],
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     public function actionGetDocumentList(): array
 | |
|     {
 | |
|         $documents = Document::find()->select(['id','title', 'manager_id'])->all();
 | |
| 
 | |
|         if(empty($documents)) {
 | |
|             throw new NotFoundHttpException('Documents are not assigned');
 | |
|         }
 | |
| 
 | |
|         return $documents;
 | |
|     }
 | |
| 
 | |
|     public function actionGetDocument(): array
 | |
|     {
 | |
|         $document_id = Yii::$app->request->get('document_id');
 | |
|         if(empty($document_id) or !is_numeric($document_id))
 | |
|         {
 | |
|             throw new NotFoundHttpException('Incorrect document ID');
 | |
|         }
 | |
| 
 | |
|         $document = Document::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 = Yii::$app->getRequest()->getBodyParams()['documentFieldValues'];
 | |
| 
 | |
|         $tmp =  TemplateDocumentField::find()->select('field_id')
 | |
|             ->where(['template_id' => 94])->asArray()->all();
 | |
| 
 | |
|         $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  Document::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);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | 
