168 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace frontend\modules\api\services;
 | |
| 
 | |
| use common\models\Manager;
 | |
| use common\models\ManagerEmployee;
 | |
| use common\models\Position;
 | |
| use common\models\UserCard;
 | |
| use common\models\UserCardPortfolioProjects;
 | |
| use frontend\modules\api\models\profile\ProfileSearchForm;
 | |
| use Yii;
 | |
| use yii\web\ServerErrorHttpException;
 | |
| 
 | |
| class ProfileService
 | |
| {
 | |
|     public static function getPortfolioProjects($card_id)
 | |
|     {
 | |
|         /** @var UserCardPortfolioProjects[] $portfolioProjects */
 | |
|         $portfolioProjects = UserCardPortfolioProjects::find()
 | |
|             ->where(['card_id' => $card_id])
 | |
|             ->all();
 | |
| 
 | |
|         $array = [];
 | |
|         if (!empty($portfolioProjects)) {
 | |
|             foreach ($portfolioProjects as $project) {
 | |
|                 array_push(
 | |
|                     $array,
 | |
|                     [
 | |
|                         'id' => $project->id,
 | |
|                         'title' => $project->title,
 | |
|                         'description' => $project->description,
 | |
|                         'main_stack' => $project->skill->name,
 | |
|                         'additional_stack' => $project->additional_stack,
 | |
|                         'link' => $project->link
 | |
|                     ]
 | |
|                 );
 | |
|             }
 | |
|         }
 | |
|         return $array;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @throws ServerErrorHttpException
 | |
|      */
 | |
|     public static function getMainData($user_id): array
 | |
|     {
 | |
|         $userCard = UserCard::findOne(['id_user' => $user_id]);
 | |
|         if (empty($userCard)) {
 | |
|             throw new ServerErrorHttpException('Profile not found!');
 | |
|         }
 | |
|         return array('fio' => $userCard->fio,
 | |
|             'photo' => $userCard->photo,
 | |
|             'gender' => $userCard->gender,
 | |
|             'level' => $userCard->level,
 | |
|             'years_of_exp' => $userCard->years_of_exp,
 | |
|             'specification' => $userCard->specification,
 | |
|             'position_name' => $userCard->position->name);
 | |
|     }
 | |
| 
 | |
|     public static function getProfile($id, $request): ?array
 | |
|     {
 | |
|         $searchModel = new ProfileSearchForm();
 | |
|         $searchModel->attributes = $request;
 | |
| 
 | |
|         if ($id) {
 | |
|             return $searchModel->byId();
 | |
|         }
 | |
|         return $searchModel->byParams();
 | |
|     }
 | |
| 
 | |
|     public static function getProfileById($id): ?array
 | |
|     {
 | |
|         $searchModel = new ProfileSearchForm();
 | |
|         $searchModel->id = $id;
 | |
|         return $searchModel->byId();
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @throws ServerErrorHttpException
 | |
|      */
 | |
|     public static function getProfileWithReportPermission($user_card_id): ?array
 | |
|     {
 | |
|         if (UserCard::find()->where(['id' => $user_card_id])->exists()) {
 | |
| 
 | |
|             $searchModel = new ProfileSearchForm();
 | |
|             $searchModel->id = $user_card_id;
 | |
|             $profile = $searchModel->byId();
 | |
| 
 | |
|             self::addPermission($profile, $user_card_id);
 | |
|             return $profile;
 | |
|         }
 | |
|         throw new ServerErrorHttpException('There is no user with this id');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return array|\yii\db\ActiveRecord[]
 | |
|      */
 | |
|     public static function getPositionsList()
 | |
|     {
 | |
|         return Position::find()->all();
 | |
|     }
 | |
| 
 | |
|     private static function addPermission(&$profile, $user_card_id)
 | |
|     {
 | |
|         $searcherCardID = self::getSearcherCardID(Yii::$app->user->getId());
 | |
|         if (self::checkReportPermission($user_card_id, $searcherCardID)) {
 | |
|             $profile += ['report_permission' => '1'];
 | |
|         } else {
 | |
|             $profile += ['report_permission' => '0'];
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static function getSearcherCardID($user_id): int
 | |
|     {
 | |
|         return UserCard::findOne(['id_user' => $user_id])->id;
 | |
|     }
 | |
| 
 | |
|     private static function checkReportPermission($user_card_id, $searcherCardID): bool
 | |
|     {
 | |
|         if (self::isMyProfile($user_card_id, $searcherCardID)
 | |
|             or self::isMyEmployee($user_card_id, $searcherCardID)) {
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     private static function isMyProfile($user_card_id, $searcherCardID): bool
 | |
|     {
 | |
|         if ($user_card_id == $searcherCardID) {
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     private static function isMyEmployee($user_card_id, $searcherCardID): bool
 | |
|     {
 | |
|         if (!self::amIManager($searcherCardID)) {
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         if (self::isMyEmployer($user_card_id, $searcherCardID)) {
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     private static function amIManager($searcherCardID): bool
 | |
|     {
 | |
|         if (Manager::find()->where(['user_card_id' => $searcherCardID])->exists()) {
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     private static function isMyEmployer($user_card_id, $searcherCardID): bool
 | |
|     {
 | |
|         $manager = Manager::find()->where(['user_card_id' => $searcherCardID])->one();
 | |
|         $exist = ManagerEmployee::find()
 | |
|             ->where(['manager_id' => $manager->id, 'user_card_id' => $user_card_id])
 | |
|             ->exists();
 | |
| 
 | |
|         if ($exist) {
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| } | 
