[ 'class' => AccessControl::className(), 'rules' => [ [ //'actions' => ['cabinet','change-password', 'bookmarks', 'projects'], 'allow' => true, 'roles' => [ '@' ], ], ], ], 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'team-delete' => [ 'POST' ], 'vacancy-delete' => [ 'POST' ], 'portfolio-delete' => [ 'POST' ], 'projects-delete' => [ 'POST' ], 'blog-delete' => [ 'POST' ], ], ], ]; } /** * Page of additional skills, consist: * * * working with programs; * * education; * * own developments and patents; * * courses and trainings; * * @return string */ public function actionAddSkills() { $user = \Yii::$app->user->identity; if(!empty( \Yii::$app->request->post() )) { Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru'); } return $this->render('add-skills', [ 'user' => $user ]); } /** * Page of blog grid view * * @return string */ public function actionBlog() { $searchModel = new BlogSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('blog', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); } /** * Page of creating one record of blog. * * @return string|\yii\web\Response Page html / Redirect */ public function actionBlogCreate() { $blog = new Blog(); $post = \Yii::$app->request->post(); if($blog->load($post) && $blog->save()) { return $this->redirect([ 'blog-update', 'id' => $blog->blog_id, ]); } else { return $this->render('_blog_form', [ 'blog' => $blog ]); } } /** * Page of editting one User's record of blog. * * @param integer $id ID of User's record * * @return string|\yii\web\Response Page html / Redirect * @throws NotFoundHttpException if not found or someone else's post */ public function actionBlogUpdate($id) { $user = \Yii::$app->user->identity; $blog = $user->getBlog() ->where([ 'blog_id' => $id ]) ->one(); if(!$blog instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $post = \Yii::$app->request->post(); if($blog->load($post) && $blog->save()) { return $this->redirect('blog'); } else { return $this->render('_blog_form', [ 'blog' => $blog ]); } } /** * Delete User's blog record * * @param $id ID of User's record * * @return \yii\web\Response Redirect * @throws NotFoundHttpException */ public function actionBlogDelete($id) { $user = \Yii::$app->user->identity; $blog = $user->getBlog() ->where([ 'blog_id' => $id ]) ->one(); if(!$blog instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $blog->delete(); return $this->redirect('blog'); } /** * Page of contacts. Consist: * * * phones; * * social pages; * * sites; * * @return string page html */ public function actionContacts() { $user = \Yii::$app->user->identity; $user_info = $user->userInfo; if(empty( $user_info )) { $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); } if(!empty( \Yii::$app->request->post() )) { Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru'); $user_info->load(\Yii::$app->request->post()); $user_info->save(); } return $this->render('contacts', [ 'user_info' => $user_info ]); } /** * Page of description. Consist of information about User. * * @return string page html */ public function actionDescription() { $user = \Yii::$app->user->identity; $user_info = $user->userInfo; if(empty( $user_info )) { $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); } $post = \Yii::$app->request->post(); if(!empty( $post )) { $user_info->load($post); $user_info->save(); } return $this->render('description', [ 'user_info' => $user_info ]); } /** * Page of seniority. Consist: * * * current job; * * year of the beginning of designing * * previous jobs * * @return string page html */ public function actionEmployment() { $user = \Yii::$app->user->identity; $user_info = $user->userInfo; if(empty( $user_info )) { $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); } $post = \Yii::$app->request->post(); if(!empty( $post )) { $user_info->load($post); $user_info->save(); $job = [ ]; for($i = 0; $i < count($post[ 'Job' ]); $i++) { $job[ $i ] = new Job([ 'user_id' => \Yii::$app->user->getId(), 'current' => 0, ]); } if(Job::loadMultiple($job, $post)) { $job[ 0 ]->current = 1; if(Job::validateMultiple($job)) { Job::deleteAll([ 'user_id' => \Yii::$app->user->getId() ]); foreach($job as $onejob) { $onejob->save(false); } } } } else { $job = $user->getJobs() ->orderBy([ 'current' => SORT_DESC ]) ->all(); if(empty( $job )) { $job[] = new Job([ 'user_id' => \Yii::$app->user->getId(), 'current' => 0, ]); } if(!$job[ 0 ]->current) { array_unshift($job, new Job([ 'user_id' => \Yii::$app->user->getId(), 'current' => 1, ])); } } return $this->render('employment', [ 'job' => $job, 'user_info' => $user_info, ]); } /** * Page of User's image galleries * * @return string */ public function actionGallery() { $searchModel = new GallerySearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('gallery', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); } /** * Page of User's videos * * @return string */ public function actionGalleryVideo() { $user = \Yii::$app->user->identity; $video = Fields::getData($user->id,Gallery::className(),'youtube'); if(!empty(Yii::$app->request->post('Fields'))) { Fields::saveFieldVideoData(Yii::$app->request->post('Fields'), $user->id, Gallery::className(), 'ru'); } return $this->render('gallery-video', [ 'video' => $video, 'user' => $user, ]); } /** * Page of creating a photo gallery * * @return string|\yii\web\Response */ public function actionGalleryCreate() { $gallery = new Gallery(); $user = \Yii::$app->user->identity; $post = \Yii::$app->request->post(); if($gallery->load($post) && $gallery->save()) { return $this->redirect([ 'gallery-update', 'id' => $gallery->gallery_id, ]); } else { return $this->render('_gallery_form', [ 'gallery' => $gallery, 'user' => $user, ]); } } /** * Page of updating existing photo gallery * * @param $id ID of Gallery * * @return string|\yii\web\Response */ public function actionGalleryUpdate($id) { $gallery = Gallery::findOne($id); $user = \Yii::$app->user->identity; $post = \Yii::$app->request->post(); if($gallery->load($post) && $gallery->save()) { Fields::saveFieldData(Yii::$app->request->post('Fields'), \Yii::$app->user->identity->id, User::className(), 'ru'); return $this->redirect([ 'gallery-update', 'id' => $gallery->gallery_id, ]); } else { return $this->render('_gallery_form', [ 'gallery' => $gallery, 'user' => $user, ]); } } /** * Page of deleting existing photo gallery * * @param $id ID of Gallery * * @throws \Exception */ public function actionGalleryDelete($id) { Gallery::findOne($id) ->delete(); $this->redirect('gallery'); } /** * Page of credentials. Consist: * * * @return string page html */ public function actionGeneral() { $user = \Yii::$app->user->identity; $user_info = $user->userInfo; $company_info = $user->companyInfo; $user = \Yii::$app->user->identity; if(empty( $user_info )) { $user_info = new UserInfo([ 'user_id' => $user->id ]); } if(empty( $company_info )) { $company_info = new CompanyInfo([ 'user_id' => $user->id ]); } $post = \Yii::$app->request->post(); if(!empty( $post )) { $user_info->load($post); $company_info->load($post); $user->load($post); if($user_info->save() && $user->save() && $company_info->save()) { \Yii::$app->session->setFlash('userinfoupdate', 'Информация успешно обновлена'); } else { \Yii::$app->session->setFlash('userinfoupdate', 'Ошибка обновления. Проверьте форму'); } } return $this->render('general', [ 'user_info' => $user_info, 'user' => $user, 'company_info' => $company_info, ]); } /** * Renders form via ajax, using lastindex. * * @param integer $lastindex Last index of form input of current type * * @return string */ public function actionGetForm($lastindex) { return $this->renderAjax('_job_form', [ 'index' => $lastindex + 1 ]); } /** * Page of User's portfolio * * @return string */ public function actionPortfolio() { $searchModel = new PortfolioSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); $dataProvider->pagination->pageSize=5; return $this->render('portfolio', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); } /** * Page of creating User's portfolio records. * * @return string|\yii\web\Response */ public function actionPortfolioCreate() { $portfolio = new Portfolio(); $specializations = Specialization::find()->where(['specialization_pid' => 0])->orderBy('specialization_id')->all(); $post = \Yii::$app->request->post(); if(!empty( $post )) { $portfolio->load($post); $portfolio->validate(); if(!$portfolio->hasErrors()) { $portfolio->save(); $portfolio->unlinkAll('specializations', true); foreach($portfolio->specializationInput as $one_specialization) { if($one_specialization){ $portfolio->link('specializations', Specialization::findOne($one_specialization)); } } return $this->redirect('portfolio'); } } return $this->render('_portfolio_form', [ 'portfolio' => $portfolio, 'specializations' => $specializations, ]); } /** * Page of updating User's portfolio record. * * @param integer $id ID of User's portfolio record * * @return string|\yii\web\Response * @throws NotFoundHttpException if record not found */ public function actionPortfolioUpdate($id) { $user = \Yii::$app->user->identity; $portfolio = $user->getPortfolios() ->where([ 'portfolio_id' => $id ]) ->one(); if(!$portfolio instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $specializations = Specialization::find()->where(['specialization_pid' => 0])->orderBy('specialization_id')->all(); $post = \Yii::$app->request->post(); if(!empty( $post )) { $portfolio->load($post); $portfolio->validate(); if(!$portfolio->hasErrors()) { $portfolio->save(); $portfolio->unlinkAll('specializations', true); foreach($portfolio->specializationInput as $one_specialization) { if($one_specialization){ $portfolio->link('specializations', Specialization::findOne($one_specialization)); } } return $this->redirect('portfolio'); } } return $this->render('_portfolio_form', [ 'portfolio' => $portfolio, 'specializations' => $specializations, ]); } /** * Page of deleting User's portfolio record. * * @param integer $id ID of User's portfolio record * * @throws NotFoundHttpException * @throws \Exception if record not found */ public function actionPortfolioDelete($id) { $user = \Yii::$app->user->identity; $portfolio = $user->getPortfolios() ->where([ 'portfolio_id' => $id ]) ->one(); if(!$portfolio instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $portfolio->delete(); $this->redirect('portfolio'); } /** * Page of User's projects. * * @return string */ public function actionProjects() { $searchModel = new ProjectSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('projects', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); } /** * Page of creating User's project. * * @return string|\yii\web\Response */ public function actionProjectsCreate() { $project = new Project(); $specialization = Specialization::find() ->select([ 'specialization_name', 'specialization_id', ]) ->indexBy('specialization_id') ->asArray() ->column(); $payment = Payment::find() ->select([ 'name', 'payment_id', ]) ->indexBy('payment_id') ->asArray() ->column(); $projects = Project::find() ->select([ 'name', 'project_id', ]) ->where([ 'user_id' => \Yii::$app->user->getId() ]) ->indexBy('project_id') ->asArray() ->column(); $post = \Yii::$app->request->post(); if(!empty( $post )) { $project->load($post); $project->validate(); if(!$project->hasErrors()) { $date_end = new \DateTime(); switch($post[ 'Project' ][ 'date_end' ]) { case 2: $date_end->modify('+14 day'); break; case 3: $date_end->modify('+30 day'); break; default: $date_end->modify('+7 day'); }; $project->date_end = \Yii::$app->formatter->asDate($date_end->getTimestamp(), 'short'); $project->save(); $project->unlinkAll('specializations', true); foreach($project->specializationInput as $one_specialization) { $project->link('specializations', Specialization::findOne($one_specialization)); } $project->unlinkAll('payments', true); foreach($project->paymentInput as $one_payment) { $project->link('payments', Payment::findOne($one_payment)); } return $this->redirect([ 'projects-update', 'id' => $project->project_id, ]); } } return $this->render('_projects_form', [ 'project' => $project, 'specialization' => $specialization, 'payment' => $payment, 'projects' => $projects, ]); } /** * Page of updating User's project. * * @param integer $id ID of User's project * * @return string * @throws NotFoundHttpException if record not found */ public function actionProjectsUpdate($id) { $user = \Yii::$app->user->identity; $project = $user->getProjects() ->where([ 'project_id' => $id ]) ->one(); if(!$project instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $specialization = Specialization::find() ->select([ 'specialization_name', 'specialization_id', ]) ->indexBy('specialization_id') ->asArray() ->column(); $payment = Payment::find() ->select([ 'name', 'payment_id', ]) ->indexBy('payment_id') ->asArray() ->column(); $projects = $user->getProjects() ->select([ 'name', 'project_id', ]) ->andWhere([ 'not', [ 'project_id' => $project->project_id ], ]) ->indexBy('project_id') ->asArray() ->column(); $post = \Yii::$app->request->post(); if(!empty( $post )) { $project->load($post); $project->validate(); if(!$project->hasErrors()) { $date_end = new \DateTime(); switch($post[ 'Project' ][ 'date_end' ]) { case 2: $date_end->modify('+14 day'); break; case 3: $date_end->modify('+30 day'); break; default: $date_end->modify('+7 day'); }; $project->date_end = \Yii::$app->formatter->asDate($date_end->getTimestamp(), 'short'); $project->save(); $project->unlinkAll('specializations', true); foreach($project->specializationInput as $one_specialization) { $project->link('specializations', Specialization::findOne($one_specialization)); } $project->unlinkAll('payments', true); foreach($project->paymentInput as $one_payment) { $project->link('payments', Payment::findOne($one_payment)); } } } return $this->render('_projects_form', [ 'project' => $project, 'specialization' => $specialization, 'payment' => $payment, 'projects' => $projects, ]); } /** * Page of deleting User's project * * @param integer $id ID of User's project * * @throws NotFoundHttpException * @throws \Exception */ public function actionProjectsDelete($id) { $user = \Yii::$app->user->identity; $project = $user->getProjects() ->where([ 'project_id' => $id ]) ->one(); if(!$project instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $project->delete(); $this->redirect('projects'); } /** * Page of editting User's service info. Consist of: * * cost of work; * * service specializations; * * work geography; * * work guarantee; * * work on contract; * * providing estimates; * * purchase of materials; * * delivery of materials; * * minimal prepayment; * * payment types; * * @return string */ public function actionService() { $user = \Yii::$app->user->identity; $user_info = $user->userInfo; if(empty( $user_info )) { $user_info = new UserInfo([ 'user_id' => \Yii::$app->user->getId() ]); } $specializations = Specialization::find()->where(['specialization_pid' => 0])->orderBy('specialization_id')->all(); $payment = Payment::find() ->select([ 'name', 'payment_id', ]) ->indexBy('payment_id') ->asArray() ->column(); $post = \Yii::$app->request->post(); if(!empty( $post )) { $user_info->load($post); $user_info->validate(); if(!$user_info->hasErrors()) { $user_info->save(); $user->load($post); $user->unlinkAll('specializations', true); foreach($user->specializationInput as $one_specialization) { $user->link('specializations', Specialization::findOne($one_specialization)); } $user->unlinkAll('payments', true); foreach($user->paymentInput as $one_payment) { $user->link('payments', Payment::findOne($one_payment)); } } } return $this->render('service', [ 'user' => $user, 'user_info' => $user_info, 'specializations' => $specializations, 'payment' => $payment, ]); } /** * Page of account setting. Consist of: * * changing password; * * @return string */ public function actionSetting() { $user = \Yii::$app->user->identity; $post = \Yii::$app->request->post('User'); if(!empty( $post )) { if(empty( $post[ 'new_password' ] )) { $user->addError('new_password', 'Введите новый пароль'); } else { $user->new_password = $post[ 'new_password' ]; } if(empty( $post[ 'old_password' ] )) { $user->addError('old_password', 'Введите новый пароль'); } else { $user->old_password = $post[ 'old_password' ]; } if(empty( $post[ 'password_reply' ] ) || $post[ 'password_reply' ] !== $post[ 'new_password' ]) { $user->addError('password_reply', 'Неправильный повтор пароля'); } else { $user->password_reply = $post[ 'password_reply' ]; } if(!$user->hasErrors()) { if($user->validatePassword($user->old_password)) { $user->setPassword($user->new_password); $user->generateAuthKey(); if($user->save()) { \Yii::$app->session->setFlash('passwordupdate', 'Пароль успешно обновлен'); } } else { $user->addError('old_password', 'Неправильный старый пароль'); } } } return $this->render('setting', [ 'user' => $user ]); } /** * Page of company's team * * @return string */ public function actionTeam() { $searchModel = new TeamSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('team', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); } /** * Page of creating company's team member * * @return string|\yii\web\Response */ public function actionTeamCreate() { $team = new Team(); $department = Department::find() ->select([ 'name', 'department_id', ]) ->indexBy('department_id') ->asArray() ->column(); $country = Country::find() ->select([ 'country_name' ]) ->indexBy('country_name') ->asArray() ->column(); $post = \Yii::$app->request->post(); if($team->load($post) && $team->save()) { return $this->redirect([ 'team-update', 'id' => $team->team_id, ]); } else { return $this->render('_team_form', [ 'team' => $team, 'department' => $department, 'country' => $country, ]); } } /** * Page of updating company's team member info. * * @param integer $id ID of company's team member * * @return string|\yii\web\Response * @throws NotFoundHttpException */ public function actionTeamUpdate($id) { $user = \Yii::$app->user->identity; $team = $user->getTeams() ->where([ 'team_id' => $id ]) ->one(); if(!$team instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $department = Department::find() ->select([ 'name', 'department_id', ]) ->indexBy('department_id') ->asArray() ->column(); $country = Country::find() ->select([ 'country_name' ]) ->indexBy('country_name') ->asArray() ->column(); $post = \Yii::$app->request->post(); if($team->load($post) && $team->save()) { return $this->redirect([ 'team-update', 'id' => $team->team_id, ]); } else { return $this->render('_team_form', [ 'team' => $team, 'department' => $department, 'country' => $country, ]); } } /** * Page of deleting company's team member. * * @param integer $id ID of company's team member * * @throws NotFoundHttpException * @throws \Exception */ public function actionTeamDelete($id) { $user = \Yii::$app->user->identity; $team = $user->getTeams() ->where([ 'team_id' => $id ]) ->one(); if(!$team instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $team->delete(); $this->redirect('team'); } /** * Page of company's vacancies * * @return string */ public function actionVacancy() { $searchModel = new VacancySearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('vacancy', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); } /** * Page of creating company's vacancies. * * @return string|\yii\web\Response */ public function actionVacancyCreate() { $vacancy = new Vacancy(); $employment = Employment::find() ->select([ 'name', 'employment_id', ]) ->indexBy('employment_id') ->asArray() ->column(); $post = \Yii::$app->request->post(); if(!empty( $post )) { $vacancy->load($post); $vacancy->validate(); if(!$vacancy->hasErrors()) { $vacancy->save(); Fields::saveFieldData(Yii::$app->request->post('Fields'), $vacancy->vacancy_id, Vacancy::className(), 'ru'); $vacancy->unlinkAll('employments', true); foreach($vacancy->employmentInput as $one_employment) { $vacancy->link('employments', Employment::findOne($one_employment)); } return $this->redirect([ 'vacancy-update', 'id' => $vacancy->vacancy_id, ]); } } return $this->render('_vacancy_form', [ 'vacancy' => $vacancy, 'employment' => $employment, ]); } /** * Page of updating company's vacancy. * * @param integer $id ID of company's vacancy. * * @return string|\yii\web\Response * @throws NotFoundHttpException */ public function actionVacancyUpdate($id) { $user = \Yii::$app->user->identity; $vacancy = $user->getVacancies() ->where([ 'vacancy_id' => $id ]) ->one(); if(!$vacancy instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $employment = Employment::find() ->select([ 'name', 'employment_id', ]) ->indexBy('employment_id') ->asArray() ->column(); $post = \Yii::$app->request->post(); if(!empty( $post )) { $vacancy->load($post); $vacancy->validate(); if(!$vacancy->hasErrors()) { $vacancy->save(); Fields::saveFieldData(Yii::$app->request->post('Fields'), $vacancy->vacancy_id, Vacancy::className(), 'ru'); $vacancy->unlinkAll('employments', true); foreach($vacancy->employmentInput as $one_employment) { $vacancy->link('employments', Employment::findOne($one_employment)); } return $this->redirect([ 'vacancy-update', 'id' => $vacancy->vacancy_id, ]); } } return $this->render('_vacancy_form', [ 'vacancy' => $vacancy, 'employment' => $employment, ]); } /** * Page of deleting company's vacancy. * * @param integer $id ID of company's vacancy * * @throws NotFoundHttpException * @throws \Exception */ public function actionVacancyDelete($id) { $user = \Yii::$app->user->identity; $vacancy = $user->getVacancies() ->where([ 'vacancy_id' => $id ]) ->one(); if(!$vacancy instanceof ActiveRecord) { throw new NotFoundHttpException('Запись не найдена'); } $vacancy->delete(); $this->redirect('vacancy'); } /** * Used to find model of User and throws exception if not found. * * @param integer $id ID of User * * @return User if User with particular ID found * @throws NotFoundHttpException if User with particular ID not found */ protected function findUser($id) { if($model = User::findOne([ "id" => $id ])) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } } }