Example #1
0
 /**
  * Creates a new activity for a given user, associated with an input project and a specified activity type.
  * @param $user
  * @param $in
  * @param $flag 0 if a new project 1 if project activity
  * @param $type 0 if status update, 1 if comment
  * @return array|\stdClass
  */
 public function createActivity($user, $in, $flag, $files = [], $type)
 {
     $project = $this->projectRepository->getByHash($in['project_hash']);
     $content = ['hash' => Str::random(36), 'user_id' => $user->id, 'project_id' => $project->id, 'body' => $in['body'], 'html_body' => $in['html_body'], 'visibility' => 0];
     switch ($user->userable_type) {
         case DesignerModel::class:
             //designers and admins only
             $content['visibility'] = 2;
             $users = [UserModel::where('userable_type', AdministratorModel::class)->get()];
             break;
         case AdministratorModel::class:
             //if the administrator has a chosen invisibility that will be set by the admin when the admin wants to
             //switch in between visibility settings.
             if (array_key_exists('visibility', $in)) {
                 $content['visibility'] = $in['visibility'];
                 switch ($content['visibility']) {
                     case 1:
                         $retailerIds = \DB::table('retailer_map')->where('project_id', '=', $project->id)->lists('retailer_id');
                         $userIds = BuyerModel::whereIn('retailer_id', $retailerIds)->lists('id');
                         $arrayBuyers = UserModel::whereIn('userable_id', $userIds)->where('userable_type', BuyerModel::class)->get();
                         $arrayAdmins = UserModel::where('userable_type', AdministratorModel::class)->where('id', '!=', $user->id)->get();
                         $users = [$arrayBuyers->all(), $arrayAdmins->all()];
                         break;
                     case 2:
                         $users = [UserModel::where('userable_type', AdministratorModel::class)->where('id', '!=', $user->id)->orWhere('id', $project->user_id)->get()];
                         break;
                     case 3:
                         $retailerIds = \DB::table('retailer_map')->where('project_id', '=', $project->id)->lists('retailer_id');
                         $userIds = BuyerModel::whereIn('retailer_id', $retailerIds)->lists('id');
                         $arrayBuyers = UserModel::whereIn('userable_id', $userIds)->where('userable_type', BuyerModel::class)->get();
                         $arrayAll = UserModel::where('userable_type', AdministratorModel::class)->where('id', '!=', $user->id)->orWhere('id', $project->user_id)->get();
                         $users = [$arrayBuyers->all(), $arrayAll->all()];
                         break;
                     default:
                         $users = [UserModel::where('userable_type', AdministratorModel::class)->get()];
                         break;
                 }
             } else {
                 $content['visibility'] = 0;
                 $users = [UserModel::where('userable_type', AdministratorModel::class)->get()];
             }
             break;
         case BuyerModel::class:
             //buyers and admins only
             $content['visibility'] = 1;
             $users = [UserModel::where('userable_type', AdministratorModel::class)->get()];
             break;
         default:
             \App::abort(403, 'Unauthorized action.');
             break;
     }
     $project->touch();
     if (array_key_exists('status', $in)) {
         $this->projectRepository->update($in['project_hash'], ['status' => $in['status']]);
     }
     if (array_key_exists('parent_hash', $in)) {
         $parent = $this->activityRepository->getByHash($in['parent_hash']);
         $content['parent_id'] = $parent->id;
         $newActivity = $this->activityRepository->create($content);
         $activity = ['activity' => [], 'parent' => []];
         $activity['activity'] = $newActivity;
         $activity['parent'] = $parent;
     } else {
         $content['parent_id'] = 0;
         $newActivity = $this->activityRepository->create($content);
         $activity = $newActivity;
     }
     if (count($files) > 0) {
         foreach ($files as $file) {
             $this->uploadService->createUpload($user, $file, $newActivity, ['unique' => false, 'type' => 'activity-upload']);
         }
     }
     if ($flag == 0) {
         foreach ($users as $userArray) {
             foreach ($userArray as $userModel) {
                 $this->notificationService->issue('New Projects Submitted', $userModel, $project, $newActivity, ' has submitted a project.');
             }
         }
     } else {
         if ($flag == 1) {
             if ($type == 0) {
                 $corpus = ' has updated the status.';
             } else {
                 if ($type == 1) {
                     $corpus = ' has left a comment.';
                 } else {
                     $corpus = ' has submitted a project.';
                 }
             }
             foreach ($users as $userArray) {
                 foreach ($userArray as $userModel) {
                     $this->notificationService->issue('Project Activity', $userModel, $project, $newActivity, $corpus);
                 }
             }
         }
     }
     return $activity;
 }
Example #2
0
 public function search(Request $request)
 {
     $input = Input::all();
     $model = \Authorization::user();
     switch ($model->userable_type) {
         case AdministratorModel::class:
             $users = UserModel::where('name', 'like', '%' . $input['query'] . '%')->get();
             $projectQuery = ProjectModel::where('name', 'like', '%' . $input['query'] . '%');
             if (ctype_digit($input['query'])) {
                 $projects = $projectQuery->orWhere('id', intval($input['query']))->get();
             } else {
                 $projects = $projectQuery->get();
             }
             return $this->returnMultiModels([$users->all(), $projects->all()], [new UserTransformer(), new ProjectTransformer()]);
             break;
         case BuyerModel::class:
             $buyer = BuyerModel::where('id', $model->userable_id)->first();
             $retailerId = $buyer->retailer_id;
             $projectIds = \DB::table('retailer_map')->where('retailer_id', '=', $retailerId)->lists('project_id');
             $projects = ProjectModel::whereIn('id', $projectIds)->where(function ($query) use($input) {
                 if (ctype_digit($input['query'])) {
                     $query->where('name', 'like', '%' . $input['query'] . '%')->orWhere('id', intval($input['query']));
                 } else {
                     $query->where('name', 'like', '%' . $input['query'] . '%');
                 }
             })->get();
             return $this->returnProjectModel($projects);
             break;
         case DesignerModel::class:
             $projects = ProjectModel::where('user_id', $model->id)->where(function ($query) use($input) {
                 if (ctype_digit($input['query'])) {
                     $query->where('name', 'like', '%' . $input['query'] . '%')->orWhere('id', $input['query']);
                 } else {
                     $query->where('name', 'like', '%' . $input['query'] . '%');
                 }
             })->get();
             return $this->returnProjectModel($projects);
             break;
         default:
             return Response();
     }
 }