/** * 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; }
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(); } }