/home/techb158/ileadtechnology.com/SSM/app/Repositories/communication
NameSizeModeActions
CommunicationRepository.php181010644editdlrm
EmailRepository.php95950644editdlrm
MeetingRepository.php294230644editdlrm
PushNotificationRepository.php96930644editdlrm
SMSRepository.php99010644editdlrm
Edit: /home/techb158/ileadtechnology.com/SSM/app/Repositories/communication/MeetingRepository.php (29423B)
meeting = $meeting; $this->upload = $upload; $this->batch = $batch; $this->course = $course; $this->department = $department; $this->course_group = $course_group; $this->employee = $employee; $this->employee_category = $employee_category; $this->student_record = $student_record; $this->employee_model = $employee_model; } /** * Get meeting query * * @return Meeting query */ public function getQuery() { return $this->meeting; } /** * Count meeting * * @return integer */ public function count() { return $this->meeting->filterBySession()->count(); } /** * List all meeting by title & id * * @return array */ public function listAll() { return $this->meeting->filterBySession()->get()->pluck('title', 'id')->all(); } /** * Get all meetings * * @return array */ public function getAll() { return $this->meeting->all(); } /** * Find meeting with given id. * * @param integer $id * @return Meeting */ public function find($id) { return $this->meeting->info()->filterBySession()->filterById($id)->first(); } /** * Find meeting with given id or throw an error. * * @param integer $id * @return Meeting */ public function findOrFail($id, $field = 'message') { $meeting = $this->meeting->info()->filterBySession()->filterById($id)->first(); if (! $meeting) { throw ValidationException::withMessages([$field => trans('communication.could_not_find_meeting')]); } return $meeting; } /** * Find meeting with given uuid. * * @param string $uuid * @return Meeting */ public function findByUuid($uuid) { return $this->meeting->info()->filterBySession()->filterByUuid($uuid)->first(); } /** * Find meeting with given uuid or throw an error. * * @param string $uuid * @return Meeting */ public function findByUuidOrFail($uuid, $field = 'message') { $meeting = $this->meeting->info()->filterBySession()->filterByUuid($uuid)->first(); if (! $meeting) { throw ValidationException::withMessages([$field => trans('communication.could_not_find_meeting')]); } return $meeting; } /** * Get all filtered data * * @param array $params * @return Meeting */ public function getData($params) { $sort_by = gv($params, 'sort_by', 'date'); $order = gv($params, 'order', 'desc'); $keyword = gv($params, 'keyword'); $course_id = gv($params, 'course_id'); $batch_id = gv($params, 'batch_id'); $department_id = gv($params, 'department_id'); $employee_category_id = gv($params, 'employee_category_id'); $course_id = is_array($course_id) ? $course_id : ($course_id ? explode(',', $course_id) : []); $batch_id = is_array($batch_id) ? $batch_id : ($batch_id ? explode(',', $batch_id) : []); $department_id = is_array($department_id) ? $department_id : ($department_id ? explode(',', $department_id) : []); $employee_category_id = is_array($employee_category_id) ? $employee_category_id : ($employee_category_id ? explode(',', $employee_category_id) : []); $query = $this->meeting->info(); if (! \Auth::user()->hasRole(config('system.default_role.admin'))) { $query->whereUserId(\Auth::user()->id); } $query->filterBySession()->filterByKeyword($keyword); if (count($course_id)) { $query->where(function ($q1) use ($course_id) { $q1->where('audience', 'everyone')->orWhereHas('courses', function ($q2) use ($course_id) { $q2->whereIn('course_id', $course_id); }); }); } if (count($batch_id)) { $query->where(function ($q1) use ($batch_id) { $q1->where('audience', 'everyone')->orWhereHas('batches', function ($q2) use ($batch_id) { $q2->whereIn('batch_id', $batch_id); }); }); } if (count($department_id)) { $query->where(function ($q1) use ($department_id) { $q1->where('audience', 'everyone')->orWhereHas('departments', function ($q2) use ($department_id) { $q2->whereIn('department_id', $department_id); }); }); } if (count($employee_category_id)) { $query->where(function ($q1) use ($employee_category_id) { $q1->where('audience', 'everyone')->orWhereHas('employeeCategories', function ($q2) use ($employee_category_id) { $q2->whereIn('employee_category_id', $employee_category_id); }); }); } return $query->orderBy($sort_by, $order); } /** * Paginate all meeting using given params. * * @param array $params * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator */ public function paginate($params) { $page_length = gv($params, 'page_length', config('config.page_length')); return $this->getData($params)->paginate($page_length); } /** * Get all filtered data for printing * * @param array $params * @return Meeting */ public function print($params) { return $this->getData($params)->get(); } /** * Get my meeting * * @param array $params * @return array */ public function myMeeting($params = array()) { $page_length = gv($params, 'page_length', config('config.page_length')); if (\Auth::user()->hasRole(config('system.default_role.admin'))) { return $this->meeting->info()->filterBySession()->orderBy('created_at', 'desc')->paginate($page_length); } return $this->meetingQuery()->orderBy('created_at', 'desc')->paginate($page_length); } private function meetingQuery($meeting_id = null) { $query = $this->meeting->info(); if ($meeting_id) { $query->whereId($meeting_id); } return $query->filterBySession()->where(function($q0) { $q0->whereUserId(\Auth::user()->id)->orWhere(function ($q) { if (\Auth::user()->hasAnyRole([ config('system.default_role.parent'), config('system.default_role.student'), ]) ) { $student_record_ids = getAuthUserStudentRecordId(); $student_batch_ids = getAuthUserBatchId(); $student_course_ids = $this->batch->getCourseIdFromBatchIds($student_batch_ids); $q->where(function ($q1) use ($student_course_ids) { $q1->where('audience', 'selected_course')->whereHas('courses', function ($q2) use ($student_course_ids) { $q2->whereIn('course_id', $student_course_ids); }); })->orWhere(function ($q3) use ($student_batch_ids) { $q3->where('audience', 'selected_batch')->whereHas('batches', function ($q4) use ($student_batch_ids) { $q4->whereIn('batch_id', $student_batch_ids); }); })->orWhere(function ($q5) use ($student_record_ids) { $q5->whereHas('studentRecords', function ($q6) use ($student_record_ids) { $q6->whereIn('student_record_id', $student_record_ids); }); }); } else { $employee = \Auth::user()->employee; $employee_designation = getEmployeeDesignation($employee); $department_id = optional($employee_designation)->department_id; $employee_category_id = $employee_designation ? $employee_designation->designation->employee_category_id : null; $q->where(function ($q1) use ($department_id) { $q1->where('audience', 'selected_department')->whereHas('departments', function ($q2) use ($department_id) { $q2->where('department_id', $department_id); }); })->orWhere(function ($q3) use ($employee_category_id) { $q3->where('audience', 'selected_employee_category')->whereHas('employeeCategories', function ($q4) use ($employee_category_id) { $q4->where('employee_category_id', $employee_category_id); }); })->orWhere(function ($q5) use ($employee) { $q5->whereHas('employees', function ($q6) use ($employee) { $q6->where('employee_id', $employee->id); }); }); } }); }); } /** * Get pre requisite * * @return Array */ public function getPreRequisite() { $employee_categories = $this->employee_category->selectAllExludingDefault(); $departments = $this->department->selectAll(); $courses = $this->course_group->getCourseOption(); $batches = $this->course_group->getBatchOption(); $audiences = [ array('value' => 'selected_course' , 'text' => trans('communication.meeting_audience_selected_course')), array('value' => 'selected_batch' , 'text' => trans('communication.meeting_audience_selected_batch')), array('value' => 'selected_department' , 'text' => trans('communication.meeting_audience_selected_department')), array('value' => 'selected_employee_category', 'text' => trans('communication.meeting_audience_selected_employee_category')) ]; return compact('employee_categories', 'departments', 'courses', 'batches', 'audiences'); } /** * Get course filters. * * @return Array */ public function getFilters() { return $this->getPreRequisite(); } /** * Create a new meeting. * * @param array $params * @return Meeting */ public function create($params) { $meeting = $this->meeting->forceCreate($this->formatParams($params)); $this->syncRelations($meeting, $params); $this->processUpload($meeting, $params); return $meeting; } /** * Prepare given params for inserting into database. * * @param array $params * @param string $type * @return array */ public function formatParams($params, $meeting_id = null) { $title = gv($params, 'title'); $description = gv($params, 'description'); $date = toDate(gv($params, 'date')); $start_time = gv($params, 'start_time'); $end_time = gv($params, 'end_time'); $audience = gv($params, 'audience'); $course_id = gv($params, 'course_id', []); $batch_id = gv($params, 'batch_id', []); $employee_category_id = gv($params, 'employee_category_id', []); $department_id = gv($params, 'department_id', []); if (! dateBetweenSession($date)) { throw ValidationException::withMessages(['date' => trans('academic.invalid_session_date_range')]); } if ($audience == 'selected_department' && (! $department_id || count(array_diff($department_id, $this->department->listId())))) { throw ValidationException::withMessages(['department_id' => trans('employee.could_not_find_department')]); } if ($audience == 'selected_employee_category' && (! $employee_category_id || count(array_diff($employee_category_id, $this->employee_category->listId())))) { throw ValidationException::withMessages(['employee_category_id' => trans('employee.could_not_find_employee_category')]); } if ($audience == 'selected_course' && (! $course_id || count(array_diff($course_id, $this->course->listId())))) { throw ValidationException::withMessages(['course_id' => trans('academic.could_not_find_course')]); } if ($audience == 'selected_batch' && (! $batch_id || count(array_diff($batch_id, $this->batch->listId())))) { throw ValidationException::withMessages(['batch_id' => trans('academic.could_not_find_batch')]); } if (strtotime($start_time) === false) { throw ValidationException::withMessages(['message' => trans('communication.invalid_start_time')]); } if ($end_time && strtotime($end_time) === false) { throw ValidationException::withMessages(['message' => trans('communication.invalid_end_time')]); } if ($end_time && toTime($start_time) > toTime($end_time)) { throw ValidationException::withMessages(['message' => trans('communication.meeting_start_time_greater_than_end_time')]); } if (Carbon::parse($date.' '.$start_time) < Carbon::now()) { throw ValidationException::withMessages(['message' => trans('communication.meeting_cannot_schedule_earlier')]); } if ($audience && ! in_array($audience, ['selected_course','selected_batch','selected_department','selected_employee_category'])) { throw ValidationException::withMessages(['audience' => trans('general.invalid_input') ]); } $individual_students = array_unique(gv($params, 'individual_students', [])); $individual_employees = array_unique(gv($params, 'individual_employees', [])); if (! $meeting_id && ! $audience && ! $individual_employees && ! $individual_students) { throw ValidationException::withMessages(['message' => trans('communication.could_not_find_any_audience')]); } $formatted = [ 'title' => $title, 'date' => toDate($date), 'start_time' => toTime($start_time), 'end_time' => $end_time ? toTime($end_time) : null, 'description' => cleanBody($description), 'audience' => $audience ]; $options = []; if (! $meeting_id) { $formatted['upload_token'] = gv($params, 'upload_token'); $formatted['uuid'] = Str::uuid(); $formatted['user_id'] = \Auth::user()->id; $formatted['code'] = Str::random(20); $options['individual_students'] = array_unique(gv($params, 'individual_students', [])); $options['individual_employees'] = array_unique(gv($params, 'individual_employees', [])); $options['owner_video_preference'] = gbv($params, 'owner_video_preference'); $options['audience_video_preference'] = gbv($params, 'audience_video_preference'); $formatted['options'] = $options; } return $formatted; } /** * Sync meeting relations * * @param Meeting $meeting * @param array $params * @return void */ private function syncRelations(Meeting $meeting, $params = array()) { $individual_students = array_unique(gv($params, 'individual_students', [])); if ($individual_students) { $meeting->studentRecords()->sync(gv($params, 'individual_students', [])); } $individual_employees = array_unique(gv($params, 'individual_employees', [])); if ($individual_employees) { $meeting->employees()->sync(gv($params, 'individual_employees', [])); } if (gv($params, 'audience') == 'selected_course') { $meeting->courses()->sync(gv($params, 'course_id', [])); $meeting->batches()->sync([]); $meeting->departments()->sync([]); $meeting->employeeCategories()->sync([]); return; } if (gv($params, 'audience') == 'selected_batch') { $meeting->courses()->sync([]); $meeting->batches()->sync(gv($params, 'batch_id', [])); $meeting->departments()->sync([]); $meeting->employeeCategories()->sync([]); return; } if (gv($params, 'audience') == 'selected_department') { $meeting->courses()->sync([]); $meeting->batches()->sync([]); $meeting->departments()->sync(gv($params, 'department_id', [])); $meeting->employeeCategories()->sync([]); return; } if (gv($params, 'audience') == 'selected_employee_category') { $meeting->courses()->sync([]); $meeting->batches()->sync([]); $meeting->departments()->sync([]); $meeting->employeeCategories()->sync(gv($params, 'employee_category_id', [])); return; } } /** * Upload attachment * * @param Meeting $meeting * @param array $params * @param string $action * @return void */ public function processUpload(Meeting $meeting, $params = array(), $action = 'create') { $upload_token = gv($params, 'upload_token'); if ($action === 'create') { $this->upload->store($this->module, $meeting->id, $upload_token); } else { $this->upload->update($this->module, $meeting->id, $upload_token); } } /** * Join a meeting * * @param Meeting $meeting * @return void */ public function join(Meeting $meeting) { $this->isAccessible($meeting); if (! $meeting->is_live) { throw ValidationException::withMessages(['message' => trans('general.invalid_action')]); } $code = $meeting->code; return compact('code'); } /** * Leave a meeting * * @param Meeting $meeting * @return void */ public function leave(Meeting $meeting) { $this->isAccessible($meeting); if (! $meeting->is_live) { throw ValidationException::withMessages(['message' => trans('general.invalid_action')]); } } /** * Update given meeting. * * @param Meeting $meeting * @param array $params * * @return Meeting */ public function update(Meeting $meeting, $params) { $this->isEditableOrFail($meeting); $meeting->forceFill($this->formatParams($params, $meeting->id))->save(); $options = $meeting->options; $options['owner_video_preference'] = gbv($params, 'owner_video_preference'); $options['audience_video_preference'] = gbv($params, 'audience_video_preference'); $meeting->options = $options; $meeting->save(); $this->syncRelations($meeting, $params); $this->processUpload($meeting, $params, 'update'); return $meeting; } /** * Is given meeting accessible. * * @param Meeting $meeting * * @return bool */ public function isAccessible(Meeting $meeting) { if (! \Auth::user()->can('list-meeting')) { throw ValidationException::withMessages(['message' => trans('user.permission_denied')]); } if (\Auth::user()->hasRole(config('system.default_role.admin')) || $meeting->user_id === \Auth::user()->id) { return true; } if (! $this->meetingQuery($meeting->id)->count()) { throw ValidationException::withMessages(['message' => trans('user.permission_denied')]); } return true; } /** * Is given meeting editable. * * @param Meeting $meeting * * @return bool */ public function isEditable(Meeting $meeting) { if (! \Auth::user()->can('edit-meeting')) { return false; } if (! $this->employee->userAccessible($meeting->user->employee) && $meeting->user_id != \Auth::user()->id) { return false; } if (Carbon::parse($meeting->date.' '.$meeting->start_time) < Carbon::now()) { return false; } return true; } /** * Is given meeting editable else fail. * * @param Meeting $meeting * * @return null */ public function isEditableOrFail(Meeting $meeting) { if (! $this->isEditable($meeting)) { throw ValidationException::withMessages(['message' => trans('user.permission_denied')]); } } /** * Delete meeting. * * @param integer $id * @return bool|null */ public function delete(Meeting $meeting) { return $meeting->delete(); } /** * Delete multiple meetings. * * @param array $ids * @return bool|null */ public function deleteMultiple($ids) { return $this->meeting->whereIn('id', $ids)->delete(); } /** * Get selected audience. * * @param Meeting $meeting * @return Array */ public function getSelectedAudience(Meeting $meeting) { $selected = array(); if ($meeting->audience == 'selected_course') { foreach ($meeting->courses as $course) { $selected[] = ['id' => $course->id, 'name' => $course->name]; } } elseif ($meeting->audience == 'selected_batch') { foreach ($meeting->batches as $batch) { $selected[] = ['id' => $batch->id, 'name' => $batch->batch_with_course]; } } elseif ($meeting->audience == 'selected_department') { foreach ($meeting->departments as $department) { $selected[] = ['id' => $department->id, 'name' => $department->name]; } } elseif ($meeting->audience == 'selected_employee_category') { foreach ($meeting->employeeCategories as $employee_category) { $selected[] = ['id' => $employee_category->id, 'name' => $employee_category->name]; } } return $selected; } /** * Get selected individual audience. * * @param Meeting $meeting * @return Array */ public function getSelectedIndividualAudience(Meeting $meeting) { $student_record_ids = $meeting->studentRecords()->pluck('student_record_id')->all(); $employee_ids = $meeting->employees()->pluck('employee_id')->all(); $individual_audiences = array(); if ($student_record_ids) { $student_records = $this->student_record->select('id', 'student_id', 'batch_id', 'admission_id', 'roll_number') ->with([ 'student:id,uuid,student_parent_id,first_name,middle_name,last_name,contact_number,date_of_birth,gender,student_photo', 'student.parent:id,first_guardian_name', 'batch:id,course_id,name,options', 'batch.course:id,name', 'admission:id,number,prefix' ])->whereIn('id', $student_record_ids)->get(); foreach ($student_records as $item) { $individual_audiences[] = array( 'key' => 'student_'.$item->id, 'type' => 'student', 'id' => $item->id, 'name' => $item->student->name, 'description_1' => $item->batch->course->name.' '.$item->batch->name, 'description_2' => $item->student->parent->first_guardian_name, 'contact_number' => $item->student->contact_number ); } } if ($employee_ids) { $employees = $this->employee_model->select('id', 'uuid', 'first_name', 'middle_name', 'last_name', 'code', 'contact_number','date_of_birth','prefix', 'gender', 'photo') ->with('employeeTerms:id,employee_id,date_of_joining,date_of_leaving', 'employeeDesignations:id,employee_id,designation_id,date_effective,date_end', 'employeeDesignations.designation:id,name,employee_category_id', 'employeeDesignations.designation.employeeCategory:id,name')->whereIn('id', $employee_ids)->get(); foreach ($employees as $item) { $individual_audiences[] = array( 'key' => 'employee_'.$item->id, 'type' => 'employee', 'id' => $item->id, 'name' => $item->name, 'description_1' => getEmployeeDesignationName($item), 'description_2' => $item->employee_code, 'contact_number' => $item->contact_number ); } } return $individual_audiences; } /** * Add meeting audience * * @param Meeting $meeting * @param array $params * @return void */ public function addAudience(Meeting $meeting, $params = array()) { $this->isEditableOrFail($meeting); $individual_students = array_unique(gv($params, 'individual_students', [])); $individual_employees = array_unique(gv($params, 'individual_employees', [])); if (! $individual_students && ! $individual_employees) { throw ValidationException::withMessages(['message' => trans('communication.could_not_find_any_audience')]); } $options = $meeting->options; $options['individual_students'] = array_values(array_unique(array_merge(($meeting->getOption('individual_students') ? : []), $individual_students))); $options['individual_employees'] = array_values(array_unique(array_merge(($meeting->getOption('individual_employees') ? : []), $individual_employees))); $meeting->options = $options; $meeting->save(); foreach ($individual_students as $individual_student) { $meeting->studentRecords()->attach($individual_student); } foreach ($individual_employees as $individual_employee) { $meeting->employees()->attach($individual_employee); } } /** * Delete meeting audience * * @param Meeting $meeting * @param array $params * @param string $type * @param int $id * @return void */ public function deleteAudience(Meeting $meeting, $type, $id) { $this->isEditableOrFail($meeting); $options = $meeting->options; if ($type === 'student') { $individual_students = $meeting->getOption('individual_students') ? : []; $individual_students = Arr::where($individual_students, function($item) use($id) { return $item != $id; }); $options['individual_students'] = array_values($individual_students); } else if($type === 'employee') { $individual_employees = $meeting->getOption('individual_employees') ? : []; $individual_employees = Arr::where($individual_employees, function($item) use($id) { return $item != $id; }); $options['individual_employees'] = array_values($individual_employees); } $meeting->options = $options; $meeting->save(); if ($type === 'student') { $meeting->studentRecords()->detach($id); } if ($type === 'employee') { $meeting->employees()->detach($id); } } }