Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace frontend\controllers;
- use frontend\models\ProjectUser;
- use Yii;
- use frontend\models\Project;
- use yii\data\ActiveDataProvider;
- use yii\web\Controller;
- use yii\web\NotFoundHttpException;
- use yii\filters\VerbFilter;
- use frontend\models\User;
- use yii\web\UploadedFile;
- use frontend\models\ProjectSearch;
- use yii\web\ForbiddenHttpException;
- /**
- * ProjectController implements the CRUD actions for Project model.
- */
- class ProjectController extends Controller
- {
- /**
- * {@inheritdoc}
- */
- public function behaviors()
- {
- return [
- 'verbs' => [
- 'class' => VerbFilter::className(),
- 'actions' => [
- 'delete' => ['POST'],
- ],
- ],
- ];
- }
- public function beforeAction($action)
- {
- if (parent::beforeAction($action)) {
- if (!Yii::$app->user->identity) {
- return Yii::$app->response->redirect(['site/login']);
- }
- if (User::ROLE_ADMIN != Yii::$app->user->identity->role) {
- throw new ForbiddenHttpException('Access denied');
- }
- return true;
- } else {
- return false;
- }
- }
- /**
- * Lists all Project models.
- * @return mixed
- */
- public function actionIndex()
- {
- $searchModel = new ProjectSearch();
- $project = Yii::$app->request->queryParams ? $searchModel->search(Yii::$app->request->queryParams) : '';
- return $this->render('index', [
- 'searchModel' => $searchModel,
- 'project' => $project,
- ]);
- // $projects = Project::find()->all();
- // $dataProvider = new ActiveDataProvider([
- // 'query' => Project::find(),
- // ]);
- //
- // if (User::ROLE_ADMIN == Yii::$app->user->identity->role) {
- // $this->view->params['menuItem'] = 'Admin';
- // $this->view->params['menuLink'] = 'project/admin';
- // }
- //
- // return $this->render('index', [
- // 'dataProvider' => $dataProvider,
- // 'projects' => $projects,
- // ]);
- // $model = new ProjectUser();
- // $model->project_id = 103;
- // if ($model->load(Yii::$app->request->post()) )
- // {
- //// $attr = Yii::$app->request->post('Project');
- //// $user = User::findOne(['id' => $attr['user']]);
- //// $model->users = $user;
- //
- // $model->save();
- // $model = new ProjectUser();
- // }
- // $searchModel = new ProjectSearch();
- // $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
- //
- // $project = Project::findOne(['id' => 103]);
- // $limits = ProjectUser::findAll(['project_id' => 103]);
- //
- // if (Yii::$app->request->post()) {
- // if (\yii\base\Model::loadMultiple($limits, Yii::$app->request->post())) {
- // foreach ($limits as $limit) {
- // $limit->save();
- // }
- // }
- //
- // }
- return $this->render('index', [
- 'searchModel' => $searchModel,
- 'dataProvider' => $dataProvider,
- 'model' => $model,
- 'limits' => $limits,
- ]);
- }
- public function actionAdmin()
- {
- $user = Yii::$app->user->identity;
- if (!$user) {
- return Yii::$app->response->redirect(['site/login']);
- }
- $projects = Project::find()->all();
- $dataProvider = new ActiveDataProvider([
- 'query' => Project::find(),
- ]);
- if (User::ROLE_ADMIN == Yii::$app->user->identity->role) {
- $this->view->params['menuItem'] = 'Team member';
- $this->view->params['menuLink'] = '/';
- }
- return $this->render('admin', [
- 'dataProvider' => $dataProvider,
- 'projects' => $projects,
- ]);
- }
- public function actionReport()
- {
- $searchModel = new ProjectSearch();
- $project = Yii::$app->request->queryParams ? $searchModel->search(Yii::$app->request->queryParams) : '';
- return $this->render('report', [
- 'searchModel' => $searchModel,
- 'project' => $project,
- ]);
- }
- /**
- * Displays a single Project model.
- * @param integer $id
- * @return mixed
- * @throws NotFoundHttpException if the model cannot be found
- */
- public function actionView($id)
- {
- return $this->render('view', [
- 'model' => $this->findModel($id),
- ]);
- }
- /**
- * Creates a new Project model.
- * If creation is successful, the browser will be redirected to the 'view' page.
- * @return mixed
- */
- public function actionCreate($slug = '')
- {
- // $model = new Project();
- // if ($model->load(Yii::$app->request->post()) && $model->save()) {
- // return $this->redirect(['view', 'id' => $model->id]);
- // }
- //
- // return $this->render('create', [
- // 'model' => $model,
- // ]);
- // $this->checkAccess($id);
- $model = Project::find()->andWhere(['not', ['step' => Project::STATUS_SAVE]])->one();
- if (!Yii::$app->request->post('step') && $model) {
- $model->delete();
- $model = new Project(['step' => Project::STATUS_STEP1]);
- $model->step = Project::STATUS_STEP1;
- }
- if (!$model) {
- $model = new Project(['step' => Project::STATUS_STEP1]);
- $model->step = Project::STATUS_STEP1;
- }
- // var_dump(Yii::$app->request->post());
- // var_dump($model);
- // exit;
- if ($model->step == Project::STATUS_STEP1 && Yii::$app->request->post() && $model->load(Yii::$app->request->post())) {
- $model->save();
- // $dates = $this->loadDinamicFormPostData('TicketDatePrototype', TicketDatePrototype::className());
- // if (Model::loadMultiple($dates, Yii::$app->request->post())) {
- //
- // if (Model::validateMultiple($dates)) {
- // var_dump($model);
- $model->step = Yii::$app->request->post('step');
- // var_dump(Yii::$app->request->post());
- // var_dump($model);
- // exit;
- $model->save();
- // $model->scenario = TicketInfo::SCENARIO_STEP2;
- // $model->linkImageAll('ticketDatesPrototypes', $dates);
- // } else {
- //
- // }
- //
- // }
- } elseif ($model->step == Project::STATUS_STEP2 && Yii::$app->request->post()) {
- // $types = $this->loadDinamicFormPostData('TicketType', TicketType::className());
- // if (Model::loadMultiple($types, Yii::$app->request->post())) {
- //
- // if (Model::validateMultiple($types)) {
- // var_dump(Yii::$app->request->post());
- // var_dump($model);
- // exit;
- $picture = UploadedFile::getInstance($model, 'picture');
- // store the source file name
- // $model->filename = $picture->name;
- // var_dump($picture->name);
- // exit;
- if ($picture) {
- $tmp = explode('.', $picture->name);
- $ext = end($tmp);
- $image = Yii::$app->security->generateRandomString().".{$ext}";
- } else {
- $image = '';
- }
- // $ext = end((explode(".", $picture->name)));
- // generate a unique file name
- $model->image = $image;
- // the path to save file, you can set an uploadPath
- // in Yii::$app->params (as used in example below)
- $path = Yii::getAlias('@uploadProjectImage'. '/' . $model->image);
- if($model->save()){
- if ($picture) {
- $picture->saveAs($path);
- }
- $model->step = Yii::$app->request->post('step');
- $model->save();
- if (Project::STATUS_SAVE == $model->step) {
- return $this->redirect(['limit', 'id' => $model->id]);
- }
- } else {
- // error in saving model
- }
- // $model->scenario = TicketInfo::SCENARIO_STEP3;
- // $model->linkImageAll('ticketTypes', $types);
- // }
- // }
- // $individualFields = $this->loadDinamicFormPostData('TicketTypeFields', TicketTypeFields::className());
- // Model::loadMultiple($individualFields, Yii::$app->request->post());
- // if (isset($_POST['TicketTypeFields'][0][0])) {
- // foreach ($_POST['TicketTypeFields'] as $indexType => $individualFields) {
- // TicketTypeFields::deleteAll(['ticket_type_id' => $model->ticketTypes[$indexType]['id']]);
- // foreach ($individualFields as $indexField => $field) {
- // $data['TicketTypeFields'] = $field;
- // $modelField = new TicketTypeFields;
- // $modelField->load($data);
- // $valid = $modelField->validate();
- // $modelField->ticket_type_id = $model->ticketTypes[$indexType]['id'];
- // $modelField->save();
- // $modelFields[$indexType][$indexField] = $modelField;
- // }
- // }
- // }
- }elseif ($model->step == Project::STATUS_STEP3 && Yii::$app->request->post() && $model->load(Yii::$app->request->post())) {
- // $promotions = $this->loadDinamicFormPostData('TicketPromotion', TicketPromotion::className());
- // Model::loadMultiple($promotions, Yii::$app->request->post());
- // Model::loadMultiple($types, Yii::$app->request->post());
- // $fields = $this->loadDinamicFormPostData('TicketInfoFields', TicketInfoFields::className());
- // Model::loadMultiple($fields, Yii::$app->request->post());
- // if (Model::validateMultiple($promotions) && Model::validateMultiple($types)) {
- $model->step = Yii::$app->request->post('step');
- //// foreach ($model->ticketTypes as $type) {
- //// if (3 == $type->type || 10 == $type->type) {
- //// $type->people_count = $type->people_count - 1;
- //// }
- //// }
- ///
- // var_dump(Yii::$app->request->post());
- // var_dump($model);
- // exit;
- if ($model->step != Project::STATUS_SAVE) {
- // $model->linkImageAll('ticketPromotions', $promotions);
- // $model->linkImageAll('ticketTypes', $types);
- // $save = $model->save();
- } else {
- $save = $model->save();
- // if ($save) {
- // $model->linkImageAll('ticketFields', $fields);
- // $model->linkImageAll('ticketPromotions', $promotions);
- // $model->linkImageAll('ticketTypes', $types);
- return $this->redirect(['view', 'id' => $model->id]);
- }
- // }
- // }
- }
- return $this->render('create', [
- 'model' => $model,
- // 'dates' => $dates,
- // 'types' => $types,
- // 'fields' => $fields,
- // 'modelFields' => $modelFields,
- // 'promotions' => $promotions,
- ]);
- }
- /**
- * Updates an existing Project model.
- * If update is successful, the browser will be redirected to the 'view' page.
- * @param integer $id
- * @return mixed
- * @throws NotFoundHttpException if the model cannot be found
- */
- public function actionUpdate($id)
- {
- $model = $this->findModel($id);
- if ($model->load(Yii::$app->request->post()) && $model->save()) {
- return $this->redirect(['admin']);
- }
- return $this->render('update1', [
- 'model' => $model,
- ]);
- }
- public function actionUpdateLogo($id)
- {
- $model = $this->findModel($id);
- if ($model->load(Yii::$app->request->post())) {
- $picture = UploadedFile::getInstance($model, 'picture');
- if (null == $picture) {
- return $this->redirect(['admin']);
- }
- if ($picture) {
- $tmp = explode('.', $picture->name);
- $ext = end($tmp);
- $image = Yii::$app->security->generateRandomString().".{$ext}";
- } else {
- $image = '';
- }
- $model->image = $image;
- // the path to save file, you can set an uploadPath
- // in Yii::$app->params (as used in example below)
- $path = Yii::getAlias('@uploadProjectImage'. '/' . $model->image);
- if($model->save()){
- if ($picture) {
- $picture->saveAs($path);
- }
- $model->save();
- return $this->redirect(['admin']);
- } else {
- // error in saving model
- }
- }
- return $this->render('update2', [
- 'model' => $model,
- ]);
- }
- /**
- * Deletes an existing Project model.
- * If deletion is successful, the browser will be redirected to the 'index' page.
- * @param integer $id
- * @return mixed
- * @throws NotFoundHttpException if the model cannot be found
- */
- public function actionDelete($id)
- {
- $this->findModel($id)->delete();
- // return $this->redirect(Yii::$app->request->referrer ?: ['admin']);
- return $this->redirect(['admin']);
- }
- public function actionDeleteFromProject($id)
- {
- // var_dump(Yii::$app->request->referrer);
- // exit;
- $limit = ProjectUser::findOne($id);
- $limit->delete();
- return $this->redirect(Yii::$app->request->referrer ?: ['admin']);
- return $this->redirect(['admin']);
- }
- public function actionLimit($id)
- {
- $modelUser = new User();
- $model = new ProjectUser();
- $model->project_id = $id;
- if(Yii::$app->request->isPjax){
- if ($modelUser->load(Yii::$app->request->post()) ) {
- $userPost = Yii::$app->request->post('User');
- $user = User::findOne(['email' => $userPost['email']]);
- if (!$user) {
- $user = $this->createUserByEmail($userPost['email']);
- }
- if ($user) {
- $model->user_id = $user->id;
- !$model->existUser() ? $model->save() : Yii::$app->getSession()->setFlash('error', Yii::t('app', 'This user already has been added to this project.'));
- }
- $modelUser = new User();
- }
- }
- $limits = ProjectUser::findAll(['project_id' => $id]);
- if (Yii::$app->request->post()) {
- if (\yii\base\Model::loadMultiple($limits, Yii::$app->request->post())) {
- foreach ($limits as $limit) {
- $limit->save();
- }
- }
- if ('finish' == Yii::$app->request->post('step')) {
- return $this->redirect(['admin']);
- }
- }
- $model->project_id = $id;
- return $this->render('limit', [
- 'model' => $model,
- 'modelUser' => $modelUser,
- 'limits' => $limits,
- ]);
- }
- public function actionLimitUpdate($id)
- {
- $modelUser = new User();
- $model = new ProjectUser();
- $model->project_id = $id;
- if(Yii::$app->request->isPjax){
- if ($modelUser->load(Yii::$app->request->post()) ) {
- $userPost = Yii::$app->request->post('User');
- $user = User::findOne(['email' => $userPost['email']]);
- if (!$user) {
- $user = $this->createUserByEmail($userPost['email']);
- }
- if ($user) {
- $model->user_id = $user->id;
- !$model->existUser() ? $model->save() : Yii::$app->getSession()->setFlash('error', Yii::t('app', 'This user already has been added to this project.'));
- }
- $modelUser = new User();
- }
- }
- $limits = ProjectUser::findAll(['project_id' => $id]);
- if (Yii::$app->request->post()) {
- if (\yii\base\Model::loadMultiple($limits, Yii::$app->request->post())) {
- foreach ($limits as $limit) {
- $limit->save();
- }
- }
- if ('finish' == Yii::$app->request->post('step')) {
- return $this->redirect(['admin']);
- }
- }
- $model->project_id = $id;
- return $this->render('update3', [
- 'model' => $model,
- 'modelUser' => $modelUser,
- 'limits' => $limits,
- ]);
- }
- /**
- * Finds the Project model based on its primary key value.
- * If the model is not found, a 404 HTTP exception will be thrown.
- * @param integer $id
- * @return Project the loaded model
- * @throws NotFoundHttpException if the model cannot be found
- */
- protected function findModel($id)
- {
- if (($model = Project::findOne($id)) !== null) {
- return $model;
- }
- throw new NotFoundHttpException('The requested page does not exist.');
- }
- public function createUserByEmail($email) {
- if ($email !== null && !preg_match('~@wonderslab.com$~', $email)) {
- Yii::$app->getSession()->setFlash('error', Yii::t('app', "You have entered a non-corporate email - " . $email));
- } else {
- $password = Yii::$app->security->generateRandomString(6);
- $names = explode('.', strtok($email, '@'));
- $firstName = (isset($names[0])) ? ucfirst($names[0]) : '';
- $lastName = (isset($names[1])) ? ucfirst($names[1]) : '';
- $nickname = $firstName . ' ' . $lastName;
- $user = new User([
- 'first_name' => $firstName,
- 'last_name' => $lastName,
- 'username' => $nickname,
- 'email' => $email,
- 'password' => $password,
- 'created_at' => time(),
- 'updated_at' => time(),
- ]);
- $user->generateAuthKey();
- $user->generatePasswordResetToken();
- if ($user->save()) {
- $user->emailAddToProject();
- return $user;
- } else {
- Yii::$app->getSession()->setFlash('error', Yii::t('app', 'Unable to save user: ' . json_encode($user->getErrors())));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement