diff --git a/.env.example b/.env.example index 604b401..6e5a339 100644 --- a/.env.example +++ b/.env.example @@ -9,7 +9,7 @@ LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 -DB_DATABASE=laravel +DB_DATABASE=fellow-admin DB_USERNAME=root DB_PASSWORD= diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..e7e9d11 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml diff --git a/.idea/FellowShipSMSSystemAPI.iml b/.idea/FellowShipSMSSystemAPI.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/FellowShipSMSSystemAPI.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..28a804d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5c986a5 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.rnd b/.rnd new file mode 100644 index 0000000..47c4d12 Binary files /dev/null and b/.rnd differ diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index a8c5158..2d72860 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -26,6 +26,10 @@ protected function schedule(Schedule $schedule) { // $schedule->command('inspire') // ->hourly(); + + /* DB::table('users')->where('created_at', '<=', Carbon::now() + ->subDay())->delete(); + }*/ } /** diff --git a/app/Contact.php b/app/Contact.php new file mode 100644 index 0000000..7e05dd0 --- /dev/null +++ b/app/Contact.php @@ -0,0 +1,10 @@ +>>>>>>>>>><<<<<<<<<<<------------- + + try{ + $credentials = request()->only('email','password'); + $rules = [ + 'email' => 'required|max:255', + 'password' => 'required|min:4']; + $validator = Validator::make($credentials, $rules); + + if($validator->fails()){ + $error = $validator->messages(); + return response()->json(['status'=>false, 'result'=>null, 'message'=>null, 'error'=> $error],500); + } + if(!Auth::attempt($credentials)) { + // return response()->json(['status'=>false, 'result'=>null, 'message'=>'whoops! invalid credential has been used!','error'=>$exception->getMessage()], 401); + } + // ########## Fetch user id from user table + // ########## Match it in user->role table + // ########## Then use value and return role table name + $contacts_id = DB::table('users')->select('id')->where([ + ['email', '=', $credentials['email']] + ])->value('id'); + + $role = DB::table('user_role')->select('role_id')->where([ + ['user_id', '=', $contacts_id] + ])->value('role_id'); + + $role_name = DB::table('roles')->select('name')->where([ + ['id', '=', $role] + ])->value('name'); + + // >>>>>>>>>>>>>>||||||| Check Role for Login ||||||||<<<<<<<<<<<<<<<<<<< + + if($role_name == 'Admin' || $role_name == 'User'){ + $user = Auth::user(); + $token = $user->createToken('authToken')->accessToken; + + // $user_id=auth('api')->user()->id; + // $id=$user_id->id; + $id=$user->id; + $role=User::find($id)->roles; + + return response()->json(['status'=>true, 'message'=>'Authentication Successful','User_role_id'=>$role,'result'=>$user, 'token'=>$token],200); + }else{ + + return response()->json(['status'=>false, 'message'=>'Woops UnAuthenticated!!!!'],500); + } + + }catch (Exception $exception){ + return response()->json(['status'=>false, 'result'=>null, 'message'=>'whoops! exception has occurred', 'error'=>$exception->getMessage()],500); + } + } + + + public function logout (Request $request) { + + $token = $request->user()->token(); + $token->revoke(); + + $response = 'You have been succesfully logged out!'; + return response($response, 200); + + } + + public function loginSys(){ + + } +} diff --git a/app/Http/Controllers/AppController.php b/app/Http/Controllers/AppController.php new file mode 100644 index 0000000..7f183cb --- /dev/null +++ b/app/Http/Controllers/AppController.php @@ -0,0 +1,45 @@ +middleware('auth:api'); + } + + public function postAdminAssignRoles($value,$id) + { + ############ check box condition ####################### + + // $user->roles()->attach(Role::where('name', 'User')->first()); + + if($value == true){ + + $user = User::where([['id','=', $id]])->first(); + $user->roles()->attach(Role::where('name', 'User')->first()); + + $accessToken = $user ->createToken('authToken')->accessToken; + return response(['Role Added to user' => $user,'access_token' => $accessToken]); + + }else{ + $user = User::where([['id','=', $id]])->first(); + $user->roles()->detach(); + return response(['Role detached from user' => $user]); + } + + /* if ($request['role_user']) { + $user->roles()->attach(Role::where('name', 'User')->first()); + } + return redirect()->back(); */ + } + + public function adminPage(){ + return response(['Admin page']); + } +} diff --git a/app/Http/Controllers/ContactController.php b/app/Http/Controllers/ContactController.php new file mode 100644 index 0000000..65c9a05 --- /dev/null +++ b/app/Http/Controllers/ContactController.php @@ -0,0 +1,491 @@ +middleware('auth:api'); + } + + public function addContact() { + try{ + $user=auth('api')->user(); + + $request = request()->only('full_name', 'phone_number', 'email','acadamic_dep','fellow_dep', 'gender','graduate_year','id_number'); + $rule = [ + 'full_name' => 'required|string|max:255', + 'phone_number' => 'regex:/^([0-9\s\-\+\(\)]*)$/', + 'email' => 'email|max:255|unique:contacts|nullable', + 'acadamic_dep' => 'string|max:255', + 'fellow_dep' => 'required|string|max:255', + 'gender' => 'required|string|max:6', + 'graduate_year' => 'string', + 'id_number'=> 'string|max:12', + ]; + return response()->json($request['full_name']); + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['error' => 'validation error' , 'message' => $validator->messages()], 400); + } + $phone_number = $request['phone_number']; + $email=$request['email']; + + $contact0 = Str::startsWith($request['phone_number'], '0'); + $contact9 = Str::startsWith($request['phone_number'], '9'); + $contact251 = Str::startsWith($request['phone_number'], '251'); + if($contact0) { + $phone_number = Str::replaceArray("0", ["+251"], $request['phone_number']); + } + else if($contact9) { + $phone_number = Str::replaceArray("9", ["+2519"], $request['phone_number']); + } + else if($contact251) { + $phone_number = Str::replaceArray("251", ['+251'], $request['phone_number']); + } + if(strlen($phone_number) > 13 || strlen($phone_number) < 7) { + return response()->json(['message' => 'validation error', 'error' => 'phone number length is not valid'], 400); + } + /* $check_phone_existance = Contact::where('phone_number', $phone_number)->exists(); + if($check_phone_existance) { + return response()->json(['error' => 'The phone has already been taken'], 400); + } */ + + $check_email = GroupContact::where('email', $email)->exists(); + if($check_email) { + return response()->json(['error' => 'The email has already been taken in Group Contact'], 400); + } + + // ((((((((((((((((((((( check whether contact is under graduate ))))))))))))))))))))) + + $graduationYear = $request['graduate_year'].'-07-30'; + $parse_graduation_year = Carbon::parse($graduationYear); + $today = Carbon::parse(date('Y-m-d')); + $difference = $today->diffInDays($parse_graduation_year, false); + + if($difference <= 0) { + return response()->json(['error' => 'graduation year is not valid for under graduate member'], 400); + } else if($difference < 380 && $difference > 0) { + $this_year_gc = true; + }else{ + $this_year_gc = false; + } + + $contact = new Contact(); + $contact->full_name = $request['full_name']; + $contact->phone_number = $phone_number; + $contact->email = $request['email']; + $contact->acadamic_dep = $request['acadamic_dep']; + $contact->fellow_dep = $request['fellow_dep']; + $contact->gender = $request['gender']; + $contact->graduate_year = $request['graduate_year']; + $contact->is_under_graduate = true; + $contact->is_this_year_gc = $this_year_gc; + $contact->id_number = $request['id_number']; + $contact->fellowship_id = $user->fellowship_id; + $contact->save(); + + $contact_id = DB::table('groups')->select('group_id')->where([ + ['group_name', '=', $contact->fellow_dep], + ])->value('group_id'); + + // if($contact->fellow_dep == ) + + $group_contact = new GroupContact(); + $group_contact->fullname = $request['full_name']; + $group_contact->phone = $phone_number; + $group_contact->email = $request['email']; + $group_contact->acadamic_department = $request['acadamic_dep']; + $group_contact->fellow_department = $request['fellow_dep']; + $group_contact->gender = $request['gender']; + $group_contact->graduation_year = $request['graduate_year']; + $group_contact->fellowship_id = $user->fellowship_id; + $group_contact->contacts_id = $contact_id; + $group_contact->save(); + + /* $group = DB::table('groups')->select('group_name')->where([ + ['group_name', '=', $contact->fellow_dep], + ])->first();*/ + $group = groups::where('group_name', '=', $request['fellow_dep'])->first(); + + if($request['fellow_dep'] != null && !$group) { + return response()->json(['message' => 'Group is not found', 'error' => 'Group is not found, please add '. $request['fellow_dep']. ' Group first before adding contact to '. $request['fellow_dep']. ' Group'], 404); + } + + if($contact->save()) { + + if($group instanceof groups) { + $contact_group = new ContactGroup(); + $contact_group->group_id = $group->group_id; + $contact_group->contact_id = $contact->contact_id; + $contact_group->save(); + } + return response()->json(['message' => 'contact added successfully'], 200); + } + + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'something went wrong, unable to save the contact'], 500); + }catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function upload_photo(Request $request,$id){ + $user = auth('api')->user(); + $image_file = request()->file('photo_file'); + + $image_url = null; + if (isset($image_file)){ + $file_extension = strtolower($image_file->getClientOriginalExtension()); + if($file_extension == "jpg" || $file_extension == "png") { + $posted_file_name = time().'.'. $file_extension; + $destinationPath = public_path('/uploads'); + $image_file->move($destinationPath, $posted_file_name); + $image_url = 'http://127.0.0.1:8000/uploads/' . $posted_file_name; + + $contact_photo=Contact::find($id); + if($contact_photo){ + $contact_photo->photo_url=$image_url; + $contact_photo->save(); + } + + return response()->json(['success' => true, 'file uploaded successfully' ], 200); + } + else { + return response()->json(['success' => false, 'error' => "The uploaded file does not have a valid image extension."], 500); + } + + /* DB::table('contacts')->where([ + ['fellowship_id', '=',$user->fellowship_id], + ['contact_id','=',$id]]) + ->update(['photo_url'=>$image_url]); + + /* $contact_photo=DB::table('contacts')->where([ + ['contact_id', '=', $id],['fellowship_id','=',$user->fellowship_id] + ])->first(); + $contact_photo->photo_url= $image_url; + $contact_photo->update();*/ + } + } + + + public function getContact($id) { + try { + $user=auth('api')->user(); + + $contact = Contact::where([['is_under_graduate','=', $id],['fellowship_id','=',$user->fellowship_id]])->get(); + if($contact){ + return response()->json(['contact' => $contact], 200); + }else{ + return response()->json(['contact is not found'], 200); + } + + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex], 500); + } + } + + public function getContacts($id) { + try { + $user=auth('api')->user(); + + $contacts = DB::table('contacts')->select('full_name','phone_number','email','acadamic_dep', + 'fellow_dep','gender','graduate_year')->where([ + ['is_under_graduate', '=', 1],['contact_id','=',$id],['fellowship_id','=',$user->fellowship_id] + ])->first(); + + $fname=$contacts->full_name; + $ph_number=$contacts->phone_number; + $email=$contacts->email; + $acadamic_dep=$contacts->acadamic_dep; + $fellow_dep=$contacts->fellow_dep; + $gender=$contacts->gender; + $graduate_year=$contacts->graduate_year; + + return response()->json([[$fname],[$ph_number],[$email],[$acadamic_dep],[$fellow_dep],[$gender],[$graduate_year]]); + + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex], 500); + } + } + + public function exportContact() { + + return Excel::download(new UsersExport, 'contacts.xlsx'); + } + + + public function deleteContact($contact_id) { + try { + $user=auth('api')->user(); + + $contact = Contact::find($contact_id); + if($contact instanceof Contact && $contact->fellowship_id == $user->fellowship_id) { + if($contact->delete()) { + return response()->json(['message' => 'contact deleted successfully'], 200); + } + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'unable to delete contact'], 500); + } + return response()->json(['message' => 'an error occurred', 'error' => 'contact is not found'], 404); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function updateContact($id) { + try { + $user=auth('api')->user(); + + $request = request()->only('full_name', 'phone_number', 'email','acadamic_dep','fellow_dep', 'graduate_year'); + $contact = Contact::find($id); + + if($contact instanceof Contact && $contact->fellowship_id == $user->fellowship_id) { + $rule = [ + 'full_name' => 'required|string|max:255', + 'phone_number' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:9|max:13|unique:contacts', + 'email' => 'email|max:255|nullable', + 'acadamic_dep' => 'string|max:255', + 'fellow_dep' => 'required|string|max:255', + 'graduate_year' => 'required|string', + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error' , 'error' => $validator->messages()], 500); + } + $phone_number = $request['phone_number']; + $contact0 = Str::startsWith($request['phone_number'], '0'); + $contact9 = Str::startsWith($request['phone_number'], '9'); + $contact251 = Str::startsWith($request['phone_number'], '251'); + if($contact0) { + $phone_number = Str::replaceArray("0", ["+251"], $request['phone_number']); + } + else if($contact9) { + $phone_number = Str::replaceArray("9", ["+2519"], $request['phone_number']); + } + else if($contact251) { + $phone_number = Str::replaceArray("251", ['+251'], $request['phone_number']); + } + if(strlen($phone_number) > 13 || strlen($phone_number) < 13) { + return response()->json(['message' => 'validation error', 'error' => 'phone number length is not valid'], 400); + } + // check weather the phone exists before + $check_phone_existance = Contact::where('phone_number', $phone_number)->exists(); + if($check_phone_existance && $phone_number != $contact->phone) { + return response()->json(['error' => 'The phone has already been taken'], 400); + } + // check email existance before + if($request['email'] != null) { + $check_email_existance = Contact::where('email', '=',$request['email'])->exists(); + if($check_email_existance && $request['email'] != $contact->email) { + return response()->json(['error' => 'The email has already been taken'], 400); + } + } + // >>>>>>>>>> ||| check whethe contact is under graduate ||| <<<<<<<<<<< + + $this_year_gc = false; + $graduationYear = $request['graduate_year'].'-07-30'; + $parse_graduation_year = Carbon::parse($graduationYear); + $today = Carbon::parse(date('Y-m-d')); + $difference = $today->diffInDays($parse_graduation_year, false); + + if($difference <= 0) { + return response()->json(['error' => 'graduation year is not valid for under graduate member'], 400); + } else if($difference < 380 && $difference > 0) { + $this_year_gc = true; + } + $contact->full_name = isset($request['full_name']) ? $request['full_name'] : $contact->full_name; + $contact->phone_number = isset($request['phone_number']) ? $phone_number : $contact->phone_number; + $contact->email = isset($request['email']) ? $request['email'] : $contact->email; + $contact->acadamic_dep = isset($request['acadamic_dep']) ? $request['acadamic_dep'] : $contact->acadamic_dep; + $contact->fellow_dep = isset($request['fellow_dep']) ? $request['fellow_dep'] : $contact->fellow_dep; + $contact->graduate_year = isset($request['graduate_year']) ? $request['graduate_year'].'-07-30' : $contact->graduate_year; + $contact->is_this_year_gc = $this_year_gc; + if($contact->update()) { + return response()->json(['message' => 'contact updated seccessfully'], 200); + } + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'unable to update contact'], 500); + } + return response()->json(['message' => 'error found', 'error' => 'contact is not found'], 404); + + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function getProfile($id){ + $user = auth('api')->user(); + $profile = Contact::where([['contact_id','=',$id],['fellowship_id','=',$user->fellowship_id]])->first(); + $full_name=$profile->full_name; + $phone_number=$profile->phone_number; + $email=$profile->email; + $acadamic_dep=$profile->acadamic_dep; + $fellow_dep=$profile->fellow_dep; + $gender=$profile->gender; + $graduation=$profile->graduate_year; + $id_no=$profile->id_number; + $photo=$profile->photo_url; + return response()->json([[$full_name],[$phone_number],[$email],[$acadamic_dep],[$fellow_dep],[$gender],[$graduation],[$id_no],[$photo]]); + } + + public function deleteProfile($id){ + $user = auth('api')->user(); + $deleteProfile=Contact::find($id); + $deleteOnGroup=DB::table('group_contacts')->where([ + ['id', '=', $id], + ])->first(); + if($deleteProfile->fellowship_id == $user->fellowship_id && $deleteOnGroup->fellowship_id == $user->fellowship_id ){ + $deleteProfile->delete(); + if($deleteProfile){ + return response()->json('Profile deleted successfully'); + } + } + } + + public function searchContact(Request $request) { + try { + $input = $request->all(); + $contacts = Contact::query(); + $search = Input::get('search'); + if($search) { + $contacts = $contacts->where([['full_name', 'LIKE', '%'.$search.'%'], ['is_under_graduate', '=', true]])->orWhere([['phone', 'LIKE','%'.$search.'%'], ['fellowship_id', '=', $user->fellowship_id], ['is_under_graduate', '=', true]])->get(); + if(count($contacts) > 0) { + return $contacts; + } + } + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function importContact() { + + $count_add_contacts = 0; + if(Input::hasFile('file')){ + $path = Input::file('file')->getRealPath(); + $data = Excel::load($path, function($reader) { + })->get(); + $headerRow = $data->first()->keys(); + $request = request()->only($headerRow[0], $headerRow[1], $headerRow[2], $headerRow[3], $headerRow[4], $headerRow[5], $headerRow[6]); + if(!empty($data) && $data->count()){ + foreach ($data as $key => $value) { + // ============ || phone validation || ============ + if($value->phone == null) { + if($count_add_contacts > 0) { + return response()->json(['response' => $count_add_contacts.' contacts added yet','message' => "validation error", 'error' => "phone can't be null"], 403); + } + return response()->json(['message' => "validation error", 'error' => "phone can't be null"], 403); + } + if($value->full_name == null) { + if($count_add_contacts > 0) { + return response()->json(['response' => $count_add_contacts. ' contacts added yet','message' => 'validation error', 'error' => "full name can't be null"], 403); + } + return response()->json(['message' => 'validation error', 'error' => "full name can't be null"], 403); + } + if($value->gender == null) { + if($count_add_contacts > 0) { + return response()->json(['response' => $count_add_contacts. ' contacts added yet','message' => 'validation error', 'error' => "gender can't be null"], 403); + } + return response()->json(['message' => 'validation error', 'error' => "gender can't be null"], 403); + } + if($value->acadamic_dep == null) { + if($count_add_contacts > 0) { + return response()->json(['response' => $count_add_contacts.' contacts added yet','message' => 'validation error', 'error' => "acadamic department year can't be null"], 404); + } + return response()->json(['message' => 'validation error', 'error' => "acadamic department year can't be null"], 404); + } + if($value->graduate_year == null) { + if($count_add_contacts > 0) { + return response()->json(['response' => $count_add_contacts.' contacts added yet','message' => 'validation error', 'error' => "graduation year can't be null"], 404); + } + return response()->json(['message' => 'validation error', 'error' => "graduation year can't be null"], 404); + } + // ===============||||||| check whethe contact is under graduate |||||||||================== + $this_year_gc = false; + $graduationYear = $value->graduation_year.'-07-30'; + $parse_graduation_year = Carbon::parse($graduationYear); + $today = Carbon::parse(date('Y-m-d')); + $difference = $today->diffInDays($parse_graduation_year, false); + + if($difference <= 0) { + if($count_add_contacts > 0) { + return response()->json(['response' => $count_add_contacts.' contacts added yet','error' => 'graduation year is not valid for under graduate member'], 400); + } + return response()->json(['error' => 'graduation year is not valid for under graduate member'], 400); + } else if($difference < 380 && $difference > 0) { + $this_year_gc = true; + } + $team = groups::where(['group_name', '=', $value->team])->first(); + if($value->team != null && !$team) { + if($count_add_contacts > 0) { + return response()->json(['response' => $count_add_contacts.' contacts added yet','error' => $value->team.' team is not found, please add '.$value->team.' team first if you want to add contact to '.$value->team.' team'], 400); + } + return response()->json(['error' => $value->team.' team is not found, please add '.$value->team.' team first if you want to add contact to '.$value->team.' team'], 400); + } + $phone_number = $value->phone; + $contact0 = Str::startsWith($value->phone, '0'); + $contact9 = Str::startsWith($value->phone, '9'); + $contact251 = Str::startsWith($value->phone, '251'); + if($contact0) { + $phone_number = Str::replaceArray("0", ["+251"], $value->phone); + } + else if($contact9) { + $phone_number = Str::replaceArray("9", ["+2519"], $value->phone); + } + else if($contact251) { + $phone_number = Str::replaceArray("251", ['+251'], $value->phone); + } + if(strlen($phone_number) > 13 || strlen($phone_number) < 13) { + } + // *********** check weather the phone exists before ************** + $check_phone_existance = Contact::where('phone', $phone_number)->exists(); + + // ************ check weather the email exists before *************** + $check_email_existance = Contact::where([['email', '=',$value->email],['email', '!=', null]])->exists(); + if(!$check_phone_existance && !$check_email_existance && strlen($phone_number) == 13) { + $contact = new Contact(); + $contact->full_name = $value->full_name; + $contact->phone = $phone_number; + $contact->email = $value->email; + $contact->acadamic_dep = $value->acadamic_dep; + $contact->fellow_dep = $value->fellow_dep; + $contact->gender = $value->gender; + $contact->graduate_year = $value->graduate_year.'-07-30'; + $contact->is_under_graduate = true; + $contact->is_this_year_gc = $this_year_gc; + + if($contact->save()) { + return response()->json(['message' => $count_add_contacts.' contacts Imported successfully'], 200); + } + $count_add_contacts++; + } + } + } + if($count_add_contacts == 0) { + return response()->json(['message' => 'no contact is added'], 200); + } + return response()->json(['message' => $count_add_contacts.' contacts added successfully'], 200); + } + else { + return response()->json(['message' => 'file is empty', 'error' => 'No contact is found in the file'], 404); + } + } + // return response()->json(['message' => 'File not found', 'error' => 'Contact File is not provided'], 404); + } + diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index a0a2a8a..ae40461 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -10,4 +10,27 @@ class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; + + public static function sendPostRequest($requestUrl, $route_url, $send_post_data) { + $ch = curl_init($requestUrl.$route_url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $send_post_data); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + $response = curl_exec($ch); + curl_close($ch); + return $response; + } + public function sendGetRequest($requestUrl, $route_url) { + $ch = curl_init($requestUrl.$route_url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + $response = curl_exec($ch); + curl_close($ch); + return $response; + } } diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php new file mode 100644 index 0000000..b92ff85 --- /dev/null +++ b/app/Http/Controllers/DashboardController.php @@ -0,0 +1,266 @@ +middleware('auth:api'); + } + + public function current_user(){ + + $user=auth('api')->user(); + + $fname=$user->first_name; + $lname=$user->last_name; + return response()->json([[$fname],[$lname]]); + } + + public function current_univ(){ + + $user=auth('api')->user(); + + $uni=Fellowship::where('fellow_id', '=', $user->fellowship_id)->first(); + $university=$uni->university_name; + $campus=$uni->campus; + return response()->json([[$university],[$campus]]); + } + + public function underGraduateMembersNumber() { + try { + $user=auth('api')->user(); + + // $under_graduate_contact = new Contact(); + + $under_graduate_contact = Contact::where([['fellowship_id', '=', $user->fellowship_id],['is_under_graduate','=',true]])->get(); + $count = $under_graduate_contact->count(); + return response()->json(['count' => $count], 200); + + } catch(Exception $ex) { + return response()->json(['message' => 'somthing went wrong', 'error' => $ex->getMessage()], $ex->getStatusCode()); + } + } + + + public function numberOfGroups() { + try { + $user=auth('api')->user(); + + $count_group = groups::where('fellowship_id', '=', $user->fellowship_id)->get(); + $count = $count_group->count(); + return response()->json(['count' => $count], 200); + + } catch(Exception $ex) { + return response()->json(['message' => 'somthing went wrong', 'error' => $ex->getMessage()], $ex->getStatusCode()); + } + } + + public function campusTotalContact(){ + try { + $user=auth('api')->user(); + + $count_group = new Contact(); + $count_group = Contact::where('fellowship_id', '=', $user->fellowship_id)->get(); + $count = $count_group->count(); + return response()->json([$count], 200); + } catch(Exception $ex) { + return response()->json(['message' => 'somthing went wrong', 'error' => $ex->getMessage()], $ex->getStatusCode()); + } + } + + public function getGenderCount() { + $user=auth('api')->user(); + try { + + $male = Contact::where([['is_under_graduate', '=', 1],['gender','=','male'],['fellowship_id', '=', $user->fellowship_id]])->count(); + $female = Contact::where([['is_under_graduate', '=', 1],['gender','=','female'],['fellowship_id', '=', $user->fellowship_id]])->count(); + + return response()->json(['male' => $male, 'female' =>$female], 200); + + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex], 500); + } + } + + public function count_sentMessage(){ + + $user=auth('api')->user(); + + $contactMessage = sentMessages::where([['is_removed', '=', false],['fellowship_id', '=', $user->fellowship_id]])->orderBy('id', 'desc')->paginate(10); + $countMessages = $contactMessage->count(); + if($countMessages == 0) { + return response()->json(['No Mssages Available'], 200); + }else{ + return response()->json(['messages'=>$countMessages], 200); + } + } + + public function get_msg(){ + $user=auth('api')->user(); + + $month1 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '01') + // ->whereDate('created_at', '2020-02-08') + ->count(); + $month2 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '02') + ->count(); + $month3 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '03') + ->count(); + $month4 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '04') + ->count(); + $month5 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '05') + ->count(); + $month6 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '06') + ->count(); + $month7 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '07') + ->count(); + $month8 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '08') + ->count(); + $month9 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '09') + ->count(); + $month10 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '10') + ->count(); + $month11 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '11') + ->count(); + $month12 = DB::table('sent_messages') + ->select('message') + ->where('fellowship_id','=',$user->fellowship_id) + ->whereMonth('created_at', '12') + ->count(); + + return response()->json([[$month1],[$month2],[$month3],[$month4],[$month5],[$month6],[$month7],[$month8] + ,[$month9],[$month10],[$month11],[$month12]]); + + // $users = DB::table('users') + // ->whereMonth('created_at', '10') + // ->get(); + + // The whereDay() method may be used to compare a column's value against a specific day of a month: + + // $users = DB::table('users') + // ->whereDay('created_at', '20') + // ->get(); + } + + public function messageCost(){ + $user=auth('api')->user(); + + $contactMessage = sentMessages::where([['is_removed', '=', false],['fellowship_id', '=', $user->fellowship_id]])->orderBy('id', 'desc')->paginate(10); + $countMessages = $contactMessage->count(); + if($countMessages == 0) { + return response()->json(['No Mssages Available'], 200); + }else{ + $totalCost = $countMessages*0.25; + return response()->json(['cost'=>$totalCost], 200); + } + } + + public function get_Recivemsg(){ + $user=auth('api')->user(); + + $month1 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '01') + // ->whereDate('created_at', '2020-02-08') + ->count(); + $month2 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '02') + ->count(); + $month3 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '03') + ->count(); + $month4 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '04') + ->count(); + $month5 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '05') + ->count(); + $month6 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '06') + ->count(); + $month7 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '07') + ->count(); + $month8 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '08') + ->count(); + $month9 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '09') + ->count(); + $month10 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '10') + ->count(); + $month11 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '11') + ->count(); + $month12 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '12') + ->count(); + + return response()->json([[$month1],[$month2],[$month3],[$month4],[$month5],[$month6],[$month7],[$month8] + ,[$month9],[$month10],[$month11],[$month12]]); + + // $users = DB::table('users') + // ->whereMonth('created_at', '10') + // ->get(); + + // The whereDay() method may be used to compare a column's value against a specific day of a month: + + // $users = DB::table('users') + // ->whereDay('created_at', '20') + // ->get(); + } +} diff --git a/app/Http/Controllers/FellowshipController.php b/app/Http/Controllers/FellowshipController.php new file mode 100644 index 0000000..cdc2ad7 --- /dev/null +++ b/app/Http/Controllers/FellowshipController.php @@ -0,0 +1,99 @@ +fellowship_id; + $fellowship = Fellowship::find($fellowship_id); + if($fellowship instanceof Fellowship) { + return response()->json(['fellowship' => $fellowship], 200); + } else { + return response()->json(['error' => 'Ooops! something went wrong, fellowship is not found'], 404); + } + } else { + return response()->json(['error' => 'token expired'], 401); + } + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], $ex->getStatusCode()); + } + } + + public function addFellow() { + try{ + + $request = request()->only('university_name', 'university_city','campus'); + $rule = [ + 'university_name' => 'required|string|max:255', + 'university_city' => 'required|string', + 'campus' => 'required|string', + ]; + $validator = Validator::make($request, $rule); + + $fellow = new Fellowship(); + $fellow->university_name = $request['university_name']; + $fellow->university_city = $request['university_city']; + $fellow->campus = $request['campus']; + + if($fellow->save()) { + + return response()->json(['message' => 'contact added successfully'], 200); + + } + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'something went wrong, unable to save the contact'], 500); + }catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + + + public function update() { + try { + $user = JWTAuth::parseToken()->toUser(); + if($user instanceof User) { + $request = request()->only('university_name', 'university_city', 'specific_place'); + $rule = [ + 'university_name' => 'required|string|min:10', + 'university_city' => 'required|string|min:110', + 'specific_place' => 'string|nullable', + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 400); + } + $notification = new Notification(); + $fellowship_id = $user->fellowship_id; + $fellowship = Fellowship::find($fellowship_id); + $fellowship->university_name = $request['university_name']; + $fellowship->university_city = $request['university_city']; + $fellowship->specific_place = $request['specific_place']; + + if($fellowship->update()) { + $notification->notification = "Fellowship profile has been updated by ".$user->full_name; + $notification->fellowship_id = $fellowship_id; + $notification->save(); + return response()->json(['message' => 'fellowship updated successfully'], 200); + } else { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'fellowship is not updated'], 500); + } + } else { + return response()->json(['error' => 'token expired'], 401); + } + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], $ex->getStatusCode()); + } + } +} diff --git a/app/Http/Controllers/GroupContactCountController.php b/app/Http/Controllers/GroupContactCountController.php new file mode 100644 index 0000000..7ff115a --- /dev/null +++ b/app/Http/Controllers/GroupContactCountController.php @@ -0,0 +1,25 @@ +get(); + // $count = $count_member->count(); + $_count = DB::table('group_contacts')->where('contacts_id','=',$id)->count(); + return response()->json(['count' => $_count], 200); + + } catch(Exception $ex) { + return response()->json(['message' => 'somthing went wrong', 'error' => $ex->getMessage()], $ex->getStatusCode()); + } + } +} diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php new file mode 100644 index 0000000..464e1f8 --- /dev/null +++ b/app/Http/Controllers/GroupController.php @@ -0,0 +1,118 @@ +middleware('auth:api'); + } + + public function addGroup() { + try{ + $user=auth('api')->user(); + + $request = request()->only('group_name', 'description'); + $rule = [ + 'group_name' => 'required|string|max:255', + 'description' => 'required|string', + ]; + $validator = Validator::make($request, $rule); + + // $contact = Contact::find($phone_number); + $group = new groups(); + + $group->group_name = $request['group_name']; + $group->description = $request['description']; + $group->created_by = $user->first_name; + $group->contacts_id = true; + $group->fellowship_id = $user->fellowship_id; + // $group->created_at=$request['created_at']; + + if($group->save()) { + + return response()->json(['message' => 'Group added successfully'], 200); + + } + + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'something went wrong, unable to save the contact'], 500); + }catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function getGroup($id) { + + $user=auth('api')->user(); + try { + + // """""""""" some foreign key conditions here """"""""""""" + $group = groups::where([['contacts_id', '=', 1],['fellowship_id','=',$user->fellowship_id]])->orderBy('group_id', 'asc')->paginate(10); + + $_count = DB::table('group_contacts')->where( + [['contacts_id','=',$id],['fellowship_id','=',$user->fellowship_id]] + )->count(); + + return response()->json(['Groups' => $group,'contacts' =>$_count], 200); + + // return response()->json(['Groups' => $group], 200); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex], 500); + } + } + + public function getGroups() { + try { + $user=auth('api')->user(); + + $groups = groups::where('fellowship_id', '=', $user->fellowship_id)->get(); + // $group_name =$groups->group_name; + //$countGroups = $groups->count(); + + return response()->json(['Groups' => $groups], 200); + for($i = 0; $i < $countGroups; $i++) { + $groups[$i]->created_by = json_decode($groups[$i]->created_by); + } + return response()->json(['Groups' => $groups], 200); + }catch(Exception $ex) { + return repsonse()->josn(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function deleteGroup($id) { + try { + $user=auth('api')->user(); + + $group = groups::find($id); + + if($group instanceof groups && $group->group_id == $user->fellowship_id) { + + if($group->delete()) { + return response()->json(['message' => 'contact deleted successfully'], 200); + } + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'unable to delete contact'], 500); + } + return response()->json(['message' => 'an error occurred', 'error' => 'contact is not found'], 404); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + +} diff --git a/app/Http/Controllers/GroupedContactController.php b/app/Http/Controllers/GroupedContactController.php new file mode 100644 index 0000000..d1e4088 --- /dev/null +++ b/app/Http/Controllers/GroupedContactController.php @@ -0,0 +1,170 @@ +middleware('auth:api'); + } + + public function addGroupedContact($id) { + try{ + $user=auth('api')->user(); + + $request = request()->only('fullname', 'phone', 'email', 'acadamic_department','gender','graduation_year'); + $rule = [ + 'fullname' => 'required|string|max:255', + 'phone' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:9|max:13|unique:grouped_contacts', + 'email' => 'required|string', + 'acadamic_department' => 'required|string', + 'gender' => 'required|string', + 'graduation_year' => 'required|date' + ]; + $validator = Validator::make($request, $rule); + $phone = $request['phone']; + //********** check weather the phone exists before ************ + /* $check_phone_existance = GroupContact::where('phone', $phone)->exists(); + $check_cphone_existance = Contact::where('phone_number', $phone)->exists(); + if($check_phone_existance) { + return response()->json(['error' => 'The phone has already been taken'], 400); + } */ + + $contact0 = Str::startsWith($request['phone'], '0'); + $contact9 = Str::startsWith($request['phone'], '9'); + $contact251 = Str::startsWith($request['phone'], '251'); + if($contact0) { + $phone = Str::replaceArray("0", ["+251"], $request['phone']); + } + else if($contact9) { + $phone = Str::replaceArray("9", ["+2519"], $request['phone']); + } + else if($contact251) { + $phone = Str::replaceArray("251", ['+251'], $request['phone']); + } + if(strlen($phone) > 13 || strlen($phone) < 7) { + return response()->json(['message' => 'validation error', 'error' => 'phone number length is not valid'], 400); + } + + // check mail existance before + if($request['email'] != null) { + $check_email_existance = GroupContact::where('email', '=',$request['email'])->exists(); + if($check_email_existance) { + return response()->json(['error' => 'The email has already been taken'], 400); + } + } + + + $graduationYear = $request['graduation_year'].'-07-30'; + $parse_graduation_year = Carbon::parse($graduationYear); + $today = Carbon::parse(date('Y-m-d')); + $difference = $today->diffInDays($parse_graduation_year, false); + + if($difference <= 0) { + return response()->json(['error' => 'graduation year is not valid for under graduate member'], 400); + } else if($difference < 380 && $difference > 0) { + $this_year_gc = true; + } + + $group_contact = new GroupContact(); + $contact = new Contact(); + + $group_name = DB::table('groups')->select('group_name')->where([ + ['group_id', '=', $id],['fellowship_id','=',$user->fellowship_id] + ])->value('group_name'); + + $group_contact->fullname = $request['fullname']; + $group_contact->phone = $request['phone']; + $group_contact->email = $request['email']; + $group_contact->acadamic_department = $request['acadamic_department']; + $group_contact->fellow_department = $group_name; + $group_contact->gender = $request['gender']; + $group_contact->graduation_year = $request['graduation_year']; + $group_contact->fellowship_id =$user->fellowship_id; + $group_contact->contacts_id = $id; + + + $contact->full_name = $request['fullname']; + $contact->phone_number = $request['phone']; + $contact->email = $request['email']; + $contact->acadamic_dep = $request['acadamic_department']; + $contact->fellow_dep = $group_name; + $contact->gender = $request['gender']; + $contact->graduate_year = $request['graduation_year']; + $contact->is_under_graduate=true; + $contact->is_this_year_gc = $this_year_gc; + $contact->fellowship_id = $user->fellowship_id; + $contact->save(); + // $contact->contacts_id = $id; + + if($group_contact->save()) { + + return response()->json(['message' => 'contact added successfully'], 200); + } + + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'something went wrong, unable to save the contact'], 500); + }catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + + + public function getGroupedContact($id) { + try { + + // some foreign key conditions here + $group_contact = GroupContact::where([['contacts_id', '=', $id]])->orderBy('id')->paginate(10); + + return response()->json(['Group_Contacts' => $group_contact], 200); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex], 500); + } + } + + public function deleteGroupedContact($id) { + try { + + $group = GroupContact::find($id); + + if($group instanceof GroupContact) { + + if($group->delete()) { + return response()->json(['message' => 'contact deleted successfully'], 200); + } + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'unable to delete contact'], 500); + } + return response()->json(['message' => 'an error occurred', 'error' => 'contact is not found'], 404); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function getGenders(){ + $group_contact = new GroupContact(); + + $group_contacts = GroupContact::where(['gender', '=', 'male'])->orderBy('group_id')->paginate(10); + + } + + public function exportGroupedContact() { + + return Excel::download(new GroupExport, 'group_contacts.xlsx'); +} + +} diff --git a/app/Http/Controllers/MessagesController.php b/app/Http/Controllers/MessagesController.php new file mode 100644 index 0000000..8cf672b --- /dev/null +++ b/app/Http/Controllers/MessagesController.php @@ -0,0 +1,797 @@ +middleware('auth:api'); + $this->negarit_api_url = 'https://api.negarit.net/api/'; + } + + public function sendContactMessage() { + try { + + $user=auth('api')->user(); + + $request = request()->only('message', 'sent_to', 'port_name'); + + $rule = [ + 'message' => 'required|string|min:1', + 'port_name' => 'required|string|max:255', + 'sent_to' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|max:13', + ]; + + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['response' => 'validation error', 'error' => $validator->messages()], 500); + } + + // $getSmsPortName = SmsPort::find($request['port_name']); + // $getSmsPortName = DB::table('sms_ports')->where('port_name', '=', $request['port_name'])->first(); + $getSmsPortName = SmsPort::where('port_name', '=', $request['port_name'])->first(); + if(!$getSmsPortName) { + return response()->json(['error' => 'sms port is not found', + 'message' => 'add sms port first'], 404); + } + $getSmsPortId = $getSmsPortName->id; + + $getSmsPort = SmsPort::find($getSmsPortId); + if(!$getSmsPort) { + return response()->json(['message' => 'error found', 'error' => 'sms port is not found'], 404); + } + // get api key from setting table + $setting = Settings::where('name', '=', 'API_KEY')->first(); + if(!$setting) { + return response()->json(['message' => '404 error found', 'error' => 'Api Key is not found'], 404); + } + + $phone_number = $request['sent_to']; + $contact0 = Str::startsWith($request['sent_to'], '0'); + $contact9 = Str::startsWith($request['sent_to'], '9'); + $contact251 = Str::startsWith($request['sent_to'], '251'); + if($contact0) { + $phone_number = Str::replaceArray("0", ["+251"], $request['sent_to']); + } + else if($contact9) { + $phone_number = Str::replaceArray("9", ["+2519"], $request['sent_to']); + } + else if($contact251) { + $phone_number = Str::replaceArray("251", ['+251'], $request['sent_to']); + } + //|| strlen($phone_number) < 13 + if(strlen($phone_number) > 13) { + return response()->json(['message' => 'validation error', 'error' => 'phone number length is not valid'], 400); + } + + $contains_name = Str::contains($request['message'], '{name}'); + $contact = Contact::where([['phone_number', '=', $phone_number], ['fellowship_id', '=', $user->fellowship_id]])->first(); + if($contact instanceof Contact) { + if($contains_name) { + $replaceName = Str::replaceArray('{name}', [$contact->full_name], $request['message']); + + $sentMessage = new sentMessages(); + $sentMessage->message = $replaceName; + $sentMessage->sent_to = $contact->full_name; + $sentMessage->is_sent = false; + $sentMessage->is_delivered = false; + $sentMessage->sms_port_id = $getSmsPortId; + $sentMessage->fellowship_id = $user->fellowship_id; + $sentMessage->sent_by = $user->first_name; + } else { + $sentMessage = new sentMessages(); + $sentMessage->message = $request['message']; + $sentMessage->sent_to = $phone_number; + $sentMessage->is_sent = false; + $sentMessage->is_delivered = false; + $sentMessage->sms_port_id = $getSmsPortId; + $sentMessage->fellowship_id = $user->fellowship_id; + $sentMessage->sent_by = $user->first_name; + } + } else { + $sentMessage = new sentMessages(); + $sentMessage->message = $request['message']; + $sentMessage->sent_to = $phone_number; + $sentMessage->is_sent = false; + $sentMessage->is_delivered = false; + $sentMessage->sms_port_id = $getSmsPortId; + $sentMessage->fellowship_id = $user->fellowship_id; + $sentMessage->sent_by = $user->first_name; + } + + if($sentMessage->save()) { + + $get_campaign_id = $getSmsPort->negarit_campaign_id; + $get_api_key = $getSmsPort->negarit_sms_port_id; + $get_message = $sentMessage->message; + $get_phone = $phone_number; + $get_sender = $sentMessage->sent_by; + + // to send a post request (message) for Negarit API + $message_send_request = array(); + $message_send_request['API_KEY'] = $setting->value; + $message_send_request['message'] = $get_message; + $message_send_request['sent_to'] = $get_phone; + $message_send_request['campaign_id'] = $get_campaign_id; + // return $get_campaign_id; + // return $setting->value; + $negarit_response = $this->sendPostRequest($this->negarit_api_url, + 'api_request/sent_message?API_KEY='.$setting->value, + json_encode($message_send_request)); + $decoded_response = json_decode($negarit_response); + if($decoded_response) { + if(isset($decoded_response->status) && isset($decoded_response->sent_message)) { + $send_message = $decoded_response->sent_message; + $sentMessage->is_sent = true; + $sentMessage->is_delivered = true; + $sentMessage->update(); + return response()->json(['message' => 'message sent successfully', + 'sent_message' => $send_message], 200); + } + $sentMessage->is_sent = true; + $sentMessage->is_delivered = true; + $sentMessage->update(); + return response()->json(['response' => $decoded_response], 500); + } + return response()->json(['sent_message' => [], 'response' => 'Ooops! something went wrong, message is not sent'], 500); + } + return response()->json(['response' => '!Ooops something went wrong, message is not sent', 'error' => 'message is not sent, please send again'], 500); + } catch(Exception $ex) { + return response()->json(['response' => '!Ooops something went wrong, message is not sent', 'error' => $ex->getMessage()], 500); + } + } + + + // ................................... + + public function getContactsMessage() { + try{ + $user=auth('api')->user(); + + $contactMessage = sentMessages::where([['is_removed', '=', false],['fellowship_id', '=', $user->fellowship_id]])->orderBy('id', 'desc')->paginate(10); + $countMessages = $contactMessage->count(); + if($countMessages == 0) { + return response()->json(['messages' => $contactMessage], 200); + } + for($i = 0; $i < $countMessages; $i++) { + $contactMessage[$i]->sent_by = $contactMessage[$i]->sent_by; + } + return response()->json(['messages' => $contactMessage, 'number_of_messages' => $countMessages], 200); + } catch(Exception $x) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function removeContactMessage($id) { + try { + $user=auth('api')->user(); + + $sentMessage = sentMessages::find($id); + // && $sentMessage->fellowship_id == $user->fellowship_id + if($sentMessage instanceof sentMessages) { + + // if($sentMessage->delete()) { + $sentMessage->is_removed = 1; + // } + + if($sentMessage->update()) { + return response()->json(['message' => 'message removed successfully'], 200); + } + else { + return response()->json(['message' => 'Ooops! something went wrong, message is not removed'], 500); + } + } else { + return response()->json(['error' => 'message is not available'], 404); + } + + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } +// """""""""""""""""""""""""""""""""""""""" Group Message """"""""""""""""""""""""""" + public function sendGroupMessage() { + try { + $user=auth('api')->user(); + + $team_message = new GroupMessage(); + $request = request()->only('port_name', 'group', 'message'); + $rule = [ + 'port_name' => 'required|string|max:250', + 'group' => 'required|string|max:250', + 'message' => 'required|string|min:1', + + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 500); + } + $group = groups::where([['group_name', '=', $request['group']],['fellowship_id', '=', $user->fellowship_id]])->first(); + if(!$group) { + return response()->json(['message' => 'Group is not found'], 404); + } + //, ['fellowship_id', '=', $user->fellowship_id] + $getSmsPortName = SmsPort::where('port_name', '=', $request['port_name'])->first(); + if(!$getSmsPortName) { + return response()->json(['message' => 'error found', 'error' => 'sms port is not found'], 404); + } + + $getSmsPortId = $getSmsPortName->id; + // $fellowship_id = $user->fellowship_id; + + $team_id = $group->group_id; + + $contacts = Contact::whereIn('contact_id', ContactGroup::where('group_id','=', + $team_id)->select('contact_id')->get())->get(); + + if(count($contacts) == 0) { + return response()->json(['message' => 'member is not found in '.$group->name. ' team'], 404); + } + + $team_message->message = $request['message']; + $team_message->group_id = $team_id; + $team_message->sent_by = $user->first_name; + $team_message->under_graduate = true; + $team_message->fellowship_id = $user->fellowship_id; + $team_message->save(); + + + // get phones that recieve the message and not recieve the message + // $get_successfull_sent_phones = array(); + // , ['fellowship_id', '=', $user->fellowship_id]] + $setting = Settings::where('name', '=', 'API_KEY')->first(); + + if(!$setting) { + return response()->json(['message' => '404 error found', 'error' => 'Api Key is not found'], 404); + } + $insert = []; + $contains_name = Str::contains($request['message'], '{name}'); + + // return response()->json(['message' => $contains_name]); + + if($contains_name) { + for($i = 0; $i < count($contacts); $i++) { + $contact = $contacts[$i]; + $replaceName = Str::replaceArray('{name}', [$contact->full_name], $request['message']); + // $under_graduate = Contact::where([['id', $contacts[$i]->id], ['is_under_graduate', 0]])->get(); + if($contact->is_under_graduate) { + $sent_message = new sentMessages(); + $sent_message->message = $replaceName; + $sent_message->sent_to = $contact->$phone_number;; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->is_removed=false; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + + if(!$sent_message->save()) { + $sent_message = new sentMessages(); + $sent_message->message = $replaceName; + $sent_message->sent_to = $contact->$phone_number;; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->is_removed=false; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + $sent_message->save(); + } + $insert[] = ['id' => $i+1, 'message' => $sent_message->message, 'phone_number' => $contact->phone]; + } + } + } else { + for($i = 0; $i < count($contacts); $i++) { + $contact = $contacts[$i]; + // $under_graduate = Contact::where([['id', $contacts[$i]->id], ['is_under_graduate', 0]])->get(); + if($contact->is_under_graduate) { + $sent_message = new sentMessages(); + $sent_message->message = $request['message']; + $sent_message->sent_to = $contact->phone_number; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + + if(!$sent_message->save()) { + $sent_message = new sentMessages(); + $sent_message->message = $request['message']; + $sent_message->sent_to = $contact->phone_number; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + $sent_message->save(); + } + $insert[] = ['id' => $i+1, 'message' => $sent_message->message, 'phone' => $contact->phone_number]; + } + } + } + if($insert == []) { + $team_message->delete(); + return response()->json(['message' => 'under graduate member is not found in '.$group->name. ' Group'], 404); + } + $negarit_message_request = array(); + $negarit_message_request['API_KEY'] = $setting->value; + $negarit_message_request['campaign_id'] = $getSmsPortName->negarit_campaign_id; + $negarit_message_request['messages'] = $insert; + + // return response()->json(['message' => $negarit_message_request]); + + // sent_multiple_messages + $negarit_response = $this->sendPostRequest($this->negarit_api_url, + 'api_request/sent_multiple_messages', + json_encode($negarit_message_request)); + $decoded_response = json_decode($negarit_response); + + // return response()->json(['message' => $decoded_response]); + + if($decoded_response) { + + if(isset($decoded_response->status)) { + $sent_message->is_sent = true; + $sent_message->is_delivered = true; + $sent_message->update(); + return response()->json(['response' => $decoded_response], 200); + } + else { + $sent_message->is_sent = true; + $sent_message->is_delivered = true; + $sent_message->update(); + return response()->json(['response' => $decoded_response], 500); + } + // return response()->json(['message' => $decoded_response]); + } else { + return response()->json(['message' => 'Ooops! something went wrong', 'response' => $decoded_response], 500); + } + + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function getGroupMessage() { + try { + $user=auth('api')->user(); + + $group_message = GroupMessage::where([['under_graduate', '=', true], ['is_removed', '=', false],['fellowship_id', '=', $user->fellowship_id]])->orderBy('id', 'desc')->paginate(10); + $count_group_message= $group_message->count(); + // return response()->json(['group_message' => $group_message], 200); json_decode($group_message[$i]->sent_by + + for($i = 0; $i < $count_group_message; $i++) { + $group = groups::find($group_message[$i]->group_id); + $group_message[$i]->sent_by = $user->first_name; + $group_message[$i]->group_id = $group->group_name; + } + return response()->json(['group_message' => $group_message,'count'=>$count_group_message], 200); + } catch(Exception $ex) { + return response()->json(['messag' => 'Ooops! something went wrong', + 'error' => $ex->getMessage()], 500); + } + } + + public function deleteGroupMessage($id) { + try { + $user=auth('api')->user(); + + $group_message = GroupMessage::find($id); + if($group_message instanceof getGroupMessage) { //&& $group_message->fellowship_id == $user->fellowship_id + $group_message->is_removed = 1; + if($group_message->update()) { + return response()->json(['message' => 'Group message removed successfully'], 200); + } + return response()->json(['message' => 'Ooops! something went wrong, please try again'], 500); + } + return response()->json(['error' => 'Group message is not found'], 404); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + // ||||||||**** Bulk Message ****|||||||||| + + public function sendBulkMessage() { + try { + $user=auth('api')->user(); + + $request = request()->only('port_name','message'); + $fellowship_message = new FellowMessages(); + $rule = [ + 'port_name' => 'required|string|max:250', + 'message' => 'required|string|min:1', + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 400); + } // ['fellowship_id', '=', $user->fellowship_id]] + $getSmsPortName = SmsPort::where('port_name', '=', $request['port_name'])->first(); + if(!$getSmsPortName) { + return response()->json(['message' => 'error found', 'error' => 'sms port is not found'], 404); + } + $getSmsPortId = $getSmsPortName->id; + + $fellowship_id = $user->fellowship_id; + + $fellowship = Fellowship::find($fellowship_id); + if(!$fellowship) { + return response()->json(['message' => "can't send a fellowship message", 'error' => 'fellowship is not found'], 404); + } + + $fellowship_message->message = $request['message']; + $fellowship_message->fellowship_id = $fellowship_id; + $fellowship_message->sent_by = $user->first_name; + $fellowship_message->under_graduate = true; + $fellowship_message->save(); + + $contacts = Contact::where('fellowship_id', '=', $user->fellowship_id)->get(); + + if(count($contacts) == 0) { + return response()->json(['message' => 'member is not found in '. $fellowship->university_name. ' fellowship'], 404); + } + + $setting = Settings::where('name', '=', 'API_KEY')->first(); + if(!$setting) { + return response()->json(['message' => '404 error found', 'error' => 'Api Key is not found'], 404); + } + $insert = []; + $contains_name = Str::contains($request['message'], '{name}'); + if($contains_name) { + for($i = 0; $i < count($contacts); $i++) { + $contact = $contacts[$i]; + $replaceName = Str::replaceArray('{name}', [$contact->full_name], $request['message']); + + if($contact->is_under_graduate) { + + $sent_message = new sentMessages(); + $sent_message->message = $replaceName; + $sent_message->sent_to = $contact->full_name; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + + if(!$sent_message->save()) { + + $sent_message = new sentMessages(); + $sent_message->message = $replaceName; + $sent_message->sent_to = $contact->full_name; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + $sent_message->save(); + } + $insert[] = ['id' => $i+1, 'message' => $sent_message->message, 'phone' => $contact->phone]; + } + } + } else { + for($i = 0; $i < count($contacts); $i++) { + $contact = $contacts[$i]; + + if($contact->is_under_graduate) { + + $sent_message = new sentMessages(); + $sent_message->message = $request['message']; + $sent_message->sent_to = $contact->full_name; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + if(!$sent_message->save()) { + + $sent_message = new sentMessages(); + $sent_message->message = $request['message']; + $sent_message->sent_to = $contact->full_name; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + $sent_message->save(); + } + $insert[] = ['id' => $i+1, 'message' => $sent_message->message, 'phone' => $contact->phone_number]; + } + } + // return response()->json(['message' => $sent_message]); + } + if($insert == []) { + $fellowship_message->delete(); + return response()->json(['message' => 'under graduate members are not found in this fellowship'], 404); + } + $negarit_message_request = array(); + $negarit_message_request['API_KEY'] = $setting->value; + $negarit_message_request['campaign_id'] = $getSmsPortName->negarit_campaign_id; + $negarit_message_request['messages'] = $insert; + + $negarit_response = $this->sendPostRequest($this->negarit_api_url, + 'api_request/sent_multiple_messages', + json_encode($negarit_message_request)); + $decoded_response = json_decode($negarit_response); + + // return response()->json(['message' => $decoded_response]); + + if($decoded_response) { + if(isset($decoded_response->status)) { + $sent_message->is_sent = true; + $sent_message->is_delivered = true; + $sent_message->update(); + return response()->json(['response' => $decoded_response], 200); + } + else { + $sent_message->is_sent = true; + $sent_message->is_delivered = true; + $sent_message->update(); + return response()->json(['response' => $decoded_response], 500); + } + return response()->json(['message' => $decoded_response]); + } else { + return response()->json(['message' => 'Ooops! something went wrong', 'response' => $decoded_response], 500); + } + + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function getBulkMessage(){ + try{ + $user=auth('api')->user(); + + $contactMessage = sentMessages::where([['is_removed', '=', false],['fellowship_id', '=', $user->fellowship_id]])->orderBy('id', 'desc')->paginate(10); + $countMessages = $contactMessage->count(); + if($countMessages == 0) { + return response()->json(['messages' => $contactMessage], 200); + } + for($i = 0; $i < $countMessages; $i++) { + $contactMessage[$i]->sent_by = $contactMessage[$i]->sent_by; + } + return response()->json(['messages' => $contactMessage, 'number_of_messages' => $countMessages], 200); + } catch(Exception $x) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + // ******** || *** Recieve Message from client *** || ************ + + public function getNegaritRecievedMessage() { + try{ + Logger('message', ['data'=>request()->all()]); + // $user=auth('api')->user(); + $request = request()->only('message','sent_from','sender_name','received_date'); + $received = new RecievedMessage(); + $received->message = $request['message']; + $received->sent_from =$request['sent_from']; + $received->sender_name =$request['sender_name']; + $received->received_date =$request['received_date']; + // $received->fellowship_id = $user->fellowship_id; + $received->save(); + return response()->json($request['message']); + }catch(Exception $e){ + return response()->json(['Error'=>'double message from same client']); + } + } + + public function smsVote(){ + try { + $user=auth('api')->user(); + + $request = request()->only('port_name','message','start_date','end_date'); + $fellowship_message = new FellowMessages(); + $rule = [ + 'port_name' => 'required|string|max:250', + 'message' => 'required|string|min:1', + 'start_date'=> 'required', + 'end_date' => 'required' + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 400); + } + $getSmsPortName = SmsPort::where('port_name', '=', $request['port_name'])->first(); + if(!$getSmsPortName) { + return response()->json(['message' => 'error found', 'error' => 'sms port is not found'], 404); + } + $getSmsPortId = $getSmsPortName->id; + + $fellowship_id = $user->fellowship_id; + + $fellowship = Fellowship::find($fellowship_id); + if(!$fellowship) { + return response()->json(['message' => "can't send a voting campaign", 'error' => 'fellowship is not found'], 404); + } + // $today = Carbon::parse(date('Y-m-d')); + $date = date('Y-m-d'); + $date = $request['start_date']; + $date2 = date('Y-m-d'); + $date2 = $request['end_date']; + + $vote = new smsVote(); + $vote->message = $request['message']; + $vote->start_date = $date; + $vote->end_date = $date2; + $vote->save(); + + $fellowship_message->message = $request['message'] && $request['start_date']; + $fellowship_message->fellowship_id = $fellowship_id; + $fellowship_message->sent_by = $user->first_name; + $fellowship_message->under_graduate = true; + $fellowship_message->save(); + + $contacts = Contact::where('fellowship_id', '=', $user->fellowship_id)->get(); + + if(count($contacts) == 0) { + return response()->json(['message' => 'member is not found in '. $fellowship->university_name. ' fellowship'], 404); + } + + $setting = Settings::where('name', '=', 'API_KEY')->first(); + if(!$setting) { + return response()->json(['message' => '404 error found', 'error' => 'Api Key is not found'], 404); + } + $insert = []; + $contains_name = Str::contains($request['message'], '{name}'); + if($contains_name) { + for($i = 0; $i < count($contacts); $i++) { + $contact = $contacts[$i]; + $replaceName = Str::replaceArray('{name}', [$contact->full_name], $request['message']); + + if($contact->is_under_graduate) { + + $sent_message = new sentMessages(); + $sent_message->message = $replaceName; + $sent_message->sent_to = $contact->full_name; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + + if(!$sent_message->save()) { + + $sent_message = new sentMessages(); + $sent_message->message = $replaceName; + $sent_message->sent_to = $contact->full_name; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + $sent_message->save(); + } + $insert[] = ['id' => $i+1, 'message' => $sent_message->message, 'phone' => $contact->phone]; + } + } + } else { + for($i = 0; $i < count($contacts); $i++) { + $contact = $contacts[$i]; + + if($contact->is_under_graduate) { + + $sent_message = new sentMessages(); + $sent_message->message = $request['message']; + $sent_message->sent_to = $contact->full_name; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + if(!$sent_message->save()) { + + $sent_message = new sentMessages(); + $sent_message->message = $request['message']; + $sent_message->sent_to = $contact->full_name; + $sent_message->is_sent = false; + $sent_message->is_delivered = false; + $sent_message->sms_port_id = $getSmsPortId; + $sent_message->fellowship_id = $user->fellowship_id; + $sent_message->sent_by = $user->first_name; + $sent_message->save(); + } + $insert[] = ['id' => $i+1, 'message' => $sent_message->message, 'phone' => $contact->phone_number]; + } + } + // return response()->json(['message' => $sent_message]); + } + if($insert == []) { + $fellowship_message->delete(); + return response()->json(['message' => 'under graduate members are not found in this fellowship'], 404); + } + // start date if condition with end date + if($sent_message->created_at >= $request['start_date']){ + + $negarit_message_request = array(); + $negarit_message_request['API_KEY'] = $setting->value; + $negarit_message_request['campaign_id'] = $getSmsPortName->negarit_campaign_id; + $negarit_message_request['messages'] = $insert; + + $negarit_response = $this->sendPostRequest($this->negarit_api_url, + 'api_request/sent_multiple_messages', + json_encode($negarit_message_request)); + $decoded_response = json_decode($negarit_response); + } + // return response()->json(['message' => $decoded_response]); + + if($decoded_response) { + if(isset($decoded_response->status)) { + $sent_message->is_sent = true; + $sent_message->is_delivered = true; + $sent_message->update(); + return response()->json(['response' => $decoded_response], 200); + } + else { + $sent_message->is_sent = true; + $sent_message->is_delivered = true; + $sent_message->update(); + return response()->json(['response' => $decoded_response], 500); + } + return response()->json(['message' => $decoded_response]); + } else { + return response()->json(['message' => 'Ooops! something went wrong', 'response' => $decoded_response], 500); + } + +} catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); +} + } + + public function getVote(){ + // from Recieved message table + // get messages between start date and end date + // double message(vote) from same contact is not allowed + // vote from non contact is not allowed + // use matching keyword. + $getvote = DB::table('sms_votes') + ->select('start_date','end_date') + ->first(); + $start_date = $getvote->start_date; + $end_date = $getvote->end_date; + //$collect = RecievedMessage::where('start_date','>=',); + $message = DB::table('recieved_messages') + ->select('message') + ->whereBetween('created_at', [$start_date, $end_date]) + ->value('message'); + + $keyA = DB::table('recieved_messages') + ->where('message','=','A') + ->whereBetween('created_at', [$start_date, $end_date]) + ->count(); + + $keyB = DB::table('recieved_messages') + ->where('message','=','B') + ->whereBetween('created_at', [$start_date, $end_date]) + ->count(); + + $keyC = DB::table('recieved_messages') + ->where('message','=','C') + ->whereBetween('created_at', [$start_date, $end_date]) + ->count(); + + + return response()->json([[$message],[$keyA],[$keyB],[$keyC],[$start_date],[$end_date]]); + + } +} + diff --git a/app/Http/Controllers/NegaritController.php b/app/Http/Controllers/NegaritController.php new file mode 100644 index 0000000..5b8c6a5 --- /dev/null +++ b/app/Http/Controllers/NegaritController.php @@ -0,0 +1,127 @@ +middleware('auth:api'); + } + + public function storeSmsPort(Request $request) { + try { + + $user=auth('api')->user('first_name'); + // $request = request()->only('port_name','port_type','port_id','campaign_id'); + $setting = Settings::where('name', '=', 'API_KEY')->first(); + if(!$setting) { + return response()->json(['error' => 'setting was not found'], 404); + } + $API_KEY = $setting->value; + $rule = [ + 'port_name' => 'required|string|min:4', + 'port_type' => 'required|string', + 'port_id' => 'required|integer', + 'campaign_id' => 'required|integer', + ]; + $validator = Validator::make($request->all(), $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 500); + } + + $smsPort = new SmsPort(); + $smsPort->port_name = $request->input('port_name'); + $smsPort->port_type = $request->input('port_type'); + $smsPort->api_key = $API_KEY; + $smsPort->negarit_sms_port_id = $request->input('port_id'); + $smsPort->negarit_campaign_id = $request->input('campaign_id'); + $smsPort->created_by = $user->first_name; + if($smsPort->save()) { + return response()->json(['message' => 'port saved successfully'], 200); + } + return response()->json(['message' => 'something went wrong', 'error' => 'sms port is not saved'], 500); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex], 500); + } + } + + public function getSmsPorts() { + try { + + $smsPorts = SmsPort::all(); + $countSmsPorts = $smsPorts->count(); + if($countSmsPorts > 0) { + return response()->json(['sms_ports' => $smsPorts], 200); + } + for($i = 0; $i < $countSmsPorts; $i++) { + $smsPorts[$i]->created_by = json_decode($smsPorts[$i]->created_by); + } + return response()->json(['sms_ports' => $smsPorts], 200); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function updateSmsPort($id) { + try { + + $request = request()->only('port_name', 'port_type', 'api_key', 'negarit_sms_port_id', 'negarit_campaign_id'); + + $smsPort = SmsPort::find($id); + + if(!$smsPort) { + return response()->json(['message' => 'an error found', 'error' => 'sms port is not foudn'], 404); + } + $rule = [ + 'port_name' => 'required|string|min:4', + 'negarit_sms_port_id' => 'required|integer', + 'negarit_campaign_id' => 'required|integer', + 'port_type' => 'required|string' + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 400); + } + // check weather the sms port name exists before + $check_smsPort_existance = SmsPort::where([['port_name', '=',$request['port_name']], ['fellowship_id', '=', $user->fellowship_id]])->exists(); + if($check_smsPort_existance && $request['port_name'] != $smsPort->port_name) { + return response()->json(['message' => 'duplication error', 'error' => 'Sms Port has already been taken.'], 400); + } + + $smsPort->port_name = isset($request['port_name']) ? $request['port_name'] : $smsPort->port_name; + $smsPort->port_type = isset($request['port_type']) ? $request['port_type'] : $smsPort->port_type; + $smsPort->api_key = isset($request['api_key']) ? $request['api_key'] : $smsPort->api_key; + $smsPort->negarit_sms_port_id = isset($request['negarit_sms_port_id']) ? $request['negarit_sms_port_id'] : $smsPort->negarit_sms_port_id; + $smsPort->negarit_campaign_id = isset($request['negarit_campaign_id']) ? $request['negarit_campaign_id'] : $smsPort->negarit_campaign_id; + $smsPort->created_by = $user; + if($smsPort->update()) { + return response()->json(['message' => 'port updated successfully'], 200); + } + return response()->json(['message' => 'something went wrong', 'error' => 'sms port is not saved'], 500); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + public function deleteSmsPort($id) { + try { + + $smsPort = SmsPort::find($id); + if(!$smsPort || $smsPort->fellowship_id != $user->fellowship_id) { + return response()->json(['error' => 'sms port is not found'], 404); + } + if($smsPort->delete()) { + return response()->json(['message' => 'sms port deleted successfully'], 200); + } else { + return response()->json(['message' => 'Ooops! something went wrong','error' => 'sms port is not deleted'], 401); + } + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } +} diff --git a/app/Http/Controllers/PasswordResetController.php b/app/Http/Controllers/PasswordResetController.php new file mode 100644 index 0000000..b1f92c3 --- /dev/null +++ b/app/Http/Controllers/PasswordResetController.php @@ -0,0 +1,25 @@ +exists()){ + + DB::table('users')->where("email", '=',$email) + ->update(['users.password'=>$pass]); + + return response()->json('Password Updates Successfully'); + + }else{ + return response()->json('Woops Failed operation !!!'); + } + } +} diff --git a/app/Http/Controllers/RegisterAdminController.php b/app/Http/Controllers/RegisterAdminController.php new file mode 100644 index 0000000..ec64f48 --- /dev/null +++ b/app/Http/Controllers/RegisterAdminController.php @@ -0,0 +1,50 @@ +middleware('auth:api'); + + } + public function getAdmins() { + try { + $admins = User::all(); + $fellow = DB::table('fellowships')->select('fellow_id')->get(); + + // $admin = User::where(['fellowship_id', '=', $fellow])->get(); + return response()->json(['contacts' => $admins], 200); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex], 500); + } + } + + public function deleteAdmin($id){ + try { + + $admin = User::find($id); + + if($admin instanceof User) { + + if($admin->delete()) { + return response()->json(['message' => 'Admin deleted successfully'], 200); + } + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'unable to delete Admin'], 500); + } + return response()->json(['message' => 'an error occurred', 'error' => 'Admin is not found'], 404); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + + } diff --git a/app/Http/Controllers/ScheduledMessageController.php b/app/Http/Controllers/ScheduledMessageController.php new file mode 100644 index 0000000..f241a4e --- /dev/null +++ b/app/Http/Controllers/ScheduledMessageController.php @@ -0,0 +1,89 @@ +user(); + + $request = request()->only('port_name', 'type', 'start_date', 'end_date', 'sent_time', 'group','message'); + $rule = [ + 'port_name' => 'required|string|max:255', + 'type' => 'required|string|min:1', + 'start_date' => 'required|date_format:Y-m-d|after:today', + 'end_date' => 'required|date_format:Y-m-d|after:tomorrow', + 'sent_time' => 'required|date_format:H:i', + 'group' => 'required|string|min:1', + 'message' => 'required|string|min:1', + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 400); + } + $group = groups::where([['group_name', '=', $request['group']], ['fellowship_id', '=', $user->fellowship_id]])->first(); + if(!$group) { + return response()->json(['error' => 'group is not found'], 404); + } // ['fellowship_id', '=', $user->fellowship_id] + $sms_port = SmsPort::where('port_name', '=', $request['port_name'])->first(); + if(!$sms_port) { + return response()->json(['error' => 'sms port is not found'], 404); + } + if(Carbon::parse($request['start_date'])->diffInDays(Carbon::parse($request['end_date']), false) < 0) { + return response()->json(['error' => "end date can't be sooner than start date"], 400); + } + $group_id = $group->group_id; + $sms_port_id = $sms_port->id; + + $contacts = Contact::whereIn('contact_id', GroupContact::where('contacts_id','=', + $group_id)->select('contacts_id')->get())->get(); + + // return response()->json(['message' => $contacts]); + + if(count($contacts) == 0) { + return response()->json(['message' => 'member is not found in '.$group->group_name. ' group'], 404); + } + + $api_key = $sms_port->api_key; + // check setting existance + $setting = Settings::where([['name', '=', 'API_KEY'],['value', '=', $api_key]])->exists(); + if(!$setting) { + return response()->json(['error' => 'API_KEY is not found'], 404); + } + + $shceduled_message = new ScheduleMessage(); + $shceduled_message->type = $request['type']; + $shceduled_message->start_date = $request['start_date']; + $shceduled_message->end_date = $request['end_date']; + $shceduled_message->sent_time = $request['sent_time']; + $shceduled_message->message = $request['message']; + $shceduled_message->group_id = $group_id; + $shceduled_message->fellowship_id = $user->fellowship_id; + $shceduled_message->sent_to = $group->group_name.' group'; + $shceduled_message->get_fellowship_id = $user->fellowship_id; + $shceduled_message->sms_port_id = $sms_port_id; + // $shceduled_message->key = $key; + $shceduled_message->sent_by = $user->first_name; + if($shceduled_message->save()) { + return response()->json(['message' => 'message scheduled successfully'], 200); + } else { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'scheduled message is not sent, please try again'], 500); + } + + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } +} diff --git a/app/Http/Controllers/SettingController.php b/app/Http/Controllers/SettingController.php new file mode 100644 index 0000000..3586f42 --- /dev/null +++ b/app/Http/Controllers/SettingController.php @@ -0,0 +1,218 @@ +middleware('auth:api'); + $this->root_url = "https://api.negarit.net/api/"; + + } + + public function createSetting() { + try { + $user=auth('api')->user(); + + $request = request()->only('value'); + $rule = [ + // 'name' => 'required|string|unique:settings', + 'value' => 'required|string|min:1' + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 500); + } + $old_setting = Settings::where('name', '=', "API_KEY")->first(); + if($old_setting instanceof Setting) { + $old_setting->name = $old_setting->name; + // $old_setting->fellowship_id = $old_setting->fellowship_id; + $old_setting->value = $request['value']; + if($old_setting->update()) { + return response()->json(['message' => 'setting successfully updated'], 200); + } + else { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'failed to create setting'], 500); + } + } else { + $new_setting = new Settings(); + $new_setting->name = "API_KEY"; + $new_setting->value = $request['value']; + if($new_setting->save()) { + return response()->json(['message' => 'setting successfully created'], 200); + } + else { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'failed to create setting'], 500); + } + } + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function getSetting($id) { + try { + $setting = Settings::find($id); + if($setting instanceof Settings) { + return response()->json(['setting',$setting], 200); + } + return response()->json(['message' => '404 error found', 'error' => 'setting was not fuond'], 404); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function getSettings() { + try { + + $settings = Settings::all(); + $countSetting = $settings->count(); + if($countSetting == 0) { + return response()->json(['settings' => $settings], 200); + } + return response()->json(['settings' => $settings], 200); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function removeSetting($id){ + try { + + $setting = Settings::find($id); + if($setting instanceof Settings) { + if($setting->delete()) { + return response()->json(['message' => 'Setting deleted successfully'], 200); + } + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'unable to delete Setting'], 500); + } + return response()->json(['message' => 'an error occurred', 'error' => 'Setting is not found'], 404); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + + public function updateSetting($id) { + try { + + $request = request()->only('value'); + $old_setting = Settings::find($id); + + + if($old_setting instanceof Settings) { + $rule = [ + 'value' => 'required|string|min:1', + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 500); + } + $old_setting->value = isset($request['value']) ? $request['value'] : $old_setting->value; + if($old_setting->update()) { + return response()->json(['message' => 'setting updated successfully'], 200); + } + return response()->json(['message' => 'Ooops! something went wrong', 'error' => 'setting is not updated successfully'], 500); + } + return response()->json(['message' => '404 error found', 'error' => 'setting was not found'], 404); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + // ================================================================== + + public function getCampaigns() { + try { + + $API_KEY = Settings::where('name', '=', 'API_KEY')->first(); + // return $this->root_url.'api_request/campaigns?API_KEY='.$API_KEY->value; + if($API_KEY instanceof Settings) { + $response = $this->sendGetRequest('https://api.negarit.net/api/', 'api_request/campaigns?API_KEY='.$API_KEY->value); + $decoded_response = json_decode($response); + if($decoded_response) { + if(isset($decoded_response->campaigns)) { + $campaigns = $decoded_response->campaigns; + for($i = 0; $i < count($campaigns); $i++) { + $campaign[] = ['id' => $campaigns[$i]->id, 'name' => $campaigns[$i]->name]; + } + return response()->json(['campaigns' => $campaign], 200); + } else { + return response()->json(['response' => count($decoded_response)], 500); + } + } else { + return response()->json(['message' => 'Ooops! something went wrong', 'response' => $decoded_response], 500); + } + } else { + return response()->json(['message' => '404 error found', 'error' => 'API Key was not found'], 404); + } + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function addSmsPorts(){ + $request = request()->only('port_name','port_id','campaign_id'); + $rule = [ + 'port_name' => 'required|string', + 'port_id' => 'required|string', + 'campaign_id' => 'required|string' + ]; + $validator = Validator::make($request, $rule); + if($validator->fails()) { + return response()->json(['message' => 'validation error', 'error' => $validator->messages()], 500); + } + $API_KEY = Settings::where('name', '=', 'API_KEY')->first(); + $smsport = new SmsPort(); + $smsport->port_name= $request['port_name']; + $smsport->api_key = $API_KEY->value; + $smsport->negarit_sms_port_id = $request['port_id']; + $smsport->negarit_sms_campaign_id = $request['campaign_id']; + $smsport->save(); + + } + + public function getSmsPorts() { + try { + + $setting = Settings::where(['name', '=', 'API_KEY'])->first(); + if($setting instanceof Settings) { + $API_KEY = $setting->value; + $negarit_response = $this->sendGetRequest($this->root_url, 'api_request/sms_ports?API_KEY='.$API_KEY); + $decoded_response = json_decode($negarit_response); + if($decoded_response) { + if(isset($decoded_response->sms_ports)) { + $smsPorts = $decoded_response->sms_ports; + for($i = 0; $i < count($smsPorts); $i++) { + $sms_name[] = ['id' => $smsPorts[$i]->id, 'name' => $smsPorts[$i]->name]; + } + return response()->json(['sms ports' => $sms_name], 200); + } + return response()->json(['response' => $decoded_response], 500); + } + return response()->json(['message' => 'error found', 'error' => $decoded_response], 500); + } + return response()->json(['message' => 'error found', 'error' => 'setting was not found'], 404); + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } + + public function getSmsPortName(){ + try { + $ports = SmsPort::all(); + + return response()->json(['ports' => $ports], 200); + + }catch(Exception $ex) { + return repsonse()->josn(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } +} diff --git a/app/Http/Controllers/SuperDashboardController.php b/app/Http/Controllers/SuperDashboardController.php new file mode 100644 index 0000000..152a50e --- /dev/null +++ b/app/Http/Controllers/SuperDashboardController.php @@ -0,0 +1,227 @@ +middleware('auth:api'); + } + + public function current_user(){ + + $user=auth('api')->user(); + + $fname=$user->first_name; + $lname=$user->last_name; + return response()->json([[$fname],[$lname]]); + } + + public function total_univ(){ + + } + + public function TotalunderGraduateMembersNumber() { + try { + + $under_graduate_contact = Contact::where('is_under_graduate','=',true)->get(); + $count = $under_graduate_contact->count(); + return response()->json(['count' => $count], 200); + + } catch(Exception $ex) { + return response()->json(['message' => 'somthing went wrong', 'error' => $ex->getMessage()], $ex->getStatusCode()); + } + } + + + public function TotalnumberOfGroups() { + try { + + $count_group = groups::all(); + $count = $count_group->count(); + return response()->json(['count' => $count], 200); + + } catch(Exception $ex) { + return response()->json(['message' => 'somthing went wrong', 'error' => $ex->getMessage()], $ex->getStatusCode()); + } + } + + public function campusTotalContact(){ + try { + $count_group = Contact::all(); + $count = $count_group->count(); + return response()->json([$count], 200); + } catch(Exception $ex) { + return response()->json(['message' => 'somthing went wrong', 'error' => $ex->getMessage()], $ex->getStatusCode()); + } + } + + public function getGenderCount() { + $user=auth('api')->user(); + try { + + $male = Contact::where([['is_under_graduate', '=', 1],['gender','=','male']])->count(); + $female = Contact::where([['is_under_graduate', '=', 1],['gender','=','female']])->count(); + + return response()->json(['male' => $male, 'female' =>$female], 200); + + } catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex], 500); + } + } + + public function count_sentMessage(){ + + $contactMessage = sentMessages::where('is_removed', '=', false)->get(); + $countMessages = $contactMessage->count(); + if($countMessages == 0) { + return response()->json(['No Mssages Available'], 200); + }else{ + return response()->json(['messages'=>$countMessages], 200); + } + } + + public function total_group_message(){ + $group_message = GroupMessage::where('is_removed', '=',false)->count(); + if($group_message == 0){ + //return response()->json('no group message available',200); + }else{ + return response()->json([$group_message],200); + } + } + + public function totalMessageCost(){ + $contactMessage = sentMessages::where('is_removed', '=', false)->orderBy('id', 'desc')->paginate(10); + $countMessages = $contactMessage->count(); + if($countMessages == 0) { + return response()->json(['No Mssages Available'], 200); + }else{ + $totalCost = $countMessages*0.25; + return response()->json(['cost'=>$totalCost], 200); + } + } + + public function get_Recivemsgs(){ + + $month1 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '01') + // ->whereDate('created_at', '2020-02-08') + ->count(); + $month2 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '02') + ->count(); + $month3 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '03') + ->count(); + $month4 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '04') + ->count(); + $month5 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '05') + ->count(); + $month6 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '06') + ->count(); + $month7 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '07') + ->count(); + $month8 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '08') + ->count(); + $month9 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '09') + ->count(); + $month10 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '10') + ->count(); + $month11 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '11') + ->count(); + $month12 = DB::table('recieved_messages') + ->select('message') + ->whereMonth('created_at', '12') + ->count(); + + return response()->json([[$month1],[$month2],[$month3],[$month4],[$month5],[$month6],[$month7],[$month8] + ,[$month9],[$month10],[$month11],[$month12]]); + + } + + + public function get_sentmsg(){ + + $month1 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '01') + // ->whereDate('created_at', '2020-02-08') + ->count(); + $month2 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '02') + ->count(); + $month3 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '03') + ->count(); + $month4 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '04') + ->count(); + $month5 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '05') + ->count(); + $month6 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '06') + ->count(); + $month7 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '07') + ->count(); + $month8 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '08') + ->count(); + $month9 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '09') + ->count(); + $month10 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '10') + ->count(); + $month11 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '11') + ->count(); + $month12 = DB::table('sent_messages') + ->select('message') + ->whereMonth('created_at', '12') + ->count(); + + return response()->json([[$month1],[$month2],[$month3],[$month4],[$month5],[$month6],[$month7],[$month8] + ,[$month9],[$month10],[$month11],[$month12]]); + + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 0000000..91f4222 --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,91 @@ +only('first_name', 'last_name','email','university_name','university_city','campus','phone_number','password'); + $rule = [ + 'first_name' => 'required|string|max:255', + 'last_name' => 'required|string', + 'email' => 'required|string|unique:users', + 'university_name' => 'required|string', + 'university_city' => 'required|string', + 'campus' => 'required|string', + 'phone_number'=> 'regex:/^([0-9\s\-\+\(\)]*)$/', + 'password' => 'required|string', + ]; + $validator = Validator::make($requests, $rule); + + if($validator->fails()) { + return response()->json(['error' => 'validation error' , 'message' => $validator->messages()], 400); + } + $phone_number = $request['phone_number']; + $contact0 = Str::startsWith($request['phone_number'], '0'); + $contact9 = Str::startsWith($request['phone_number'], '9'); + $contact251 = Str::startsWith($request['phone_number'], '251'); + if($contact0) { + $phone_number = Str::replaceArray("0", ["+251"], $request['phone_number']); + } + else if($contact9) { + $phone_number = Str::replaceArray("9", ["+2519"], $request['phone_number']); + } + else if($contact251) { + $phone_number = Str::replaceArray("251", ['+251'], $request['phone_number']); + } + if(strlen($phone_number) > 13 || strlen($phone_number) < 13) { + return response()->json(['message' => 'validation error', 'error' => 'phone number length is not valid'], 400); + } + + + $check_phone_existance = User::where('phone_number', $phone_number)->exists(); + if($check_phone_existance) { + return response()->json(['error' => 'The phone has already been taken'], 400); + } + + $fellowship = new Fellowship(); + $fellowship->university_name = $request->input('university_name'); + $fellowship->university_city = $request->input('university_city'); + $fellowship->campus = $request->input('campus'); + + if($fellowship->save()) { + $user = new User(); + $user->first_name = $request['first_name']; + $user->last_name = $request['last_name']; + $user->email = $request['email']; + $user->phone_number = $request['phone_number']; + $user->fellowship_id = $fellowship->fellow_id; + $user->password = $request['password']; + $user->password = bcrypt($request->password); + $user->save(); + + // $user->roles()->attach(Role::where('name', 'User')->first()); + + // $user = User::create(); + $accessToken = $user ->createToken('authToken')->accessToken; + + Auth::login($user); + + return response(['user' => $user, 'access_token' => $accessToken]); + } else { + $fellowship->delete(); + return response()->json(['error' => 'something went wrong unable to register'], 500); + } + }catch(Exception $ex) { + return response()->json(['message' => 'Ooops! something went wrong', 'error' => $ex->getMessage()], 500); + } + } +} diff --git a/app/Http/Controllers/mailcontroller.php b/app/Http/Controllers/mailcontroller.php new file mode 100644 index 0000000..aac1f7b --- /dev/null +++ b/app/Http/Controllers/mailcontroller.php @@ -0,0 +1,27 @@ +'mail'],['name','campus SMS system'],function($message) use ($email){ + $message->to($email)->subject('Register Admin'); + $message->from('smssolutionsystem@gmail.com','ruth'); + + }); + return response(['email'=>$email]); + } + + // Mail::send(new sendmail()); +/* +public function email() +{ + return view('mail'); + }*/ +} diff --git a/app/Http/Controllers/sendMailController.php b/app/Http/Controllers/sendMailController.php new file mode 100644 index 0000000..173a1dc --- /dev/null +++ b/app/Http/Controllers/sendMailController.php @@ -0,0 +1,41 @@ +>>>>>>>>>>>>|||| Send Registration Link |||||<<<<<<<<<<<<<< + + /* public function sendMail($email) { + + Mail::send(['text'=>'mail'],['name','ruth'],function($message) use ($email){ + $message->to($email)->subject('test Email'); + $message->from('smssolutionsystem@gmail.com','ruth'); + + }); + return response(['email'=>$email]); + + }*/ + + // >>>>>>>>>>>>|||| Check mail existance and send Password ResetLink||||<<<<<<<<<< + + public function sendResetLink($email){ + + if($admin_email = User::where('email', '=', $email)->exists()){ + + Mail::send(['text'=>'reset_mail'],['name','ruth'],function($message) use ($email){ + $message->to($email)->subject('Password Reset '); + $message->from('smssolutionsystem@gmail.com','DS Fellow System'); + }); + return response(['Success']); + }else{ + return response(['Email'=>$email,'Does not exit']); + //exit(); + } + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 2741c0a..ff3a4ed 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -61,6 +61,8 @@ class Kernel extends HttpKernel 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + + 'roles' => \App\Http\Middleware\CheckRole::class ]; /** diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index a4be5c5..56ea36e 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -2,9 +2,11 @@ namespace App\Http\Middleware; -use Illuminate\Auth\Middleware\Authenticate as Middleware; +//use Illuminate\Auth\Middleware\Authenticate; +use Illuminate\Support\Facades\Auth; +use Closure; -class Authenticate extends Middleware +class Authenticate { /** * Get the path the user should be redirected to when they are not authenticated. @@ -12,10 +14,21 @@ class Authenticate extends Middleware * @param \Illuminate\Http\Request $request * @return string */ - protected function redirectTo($request) + + public function handle($request, Closure $next, $guard = null) { - if (! $request->expectsJson()) { - return route('login'); + if (Auth::guard($guard)->guest()) { + if ($request->ajax() || $request->wantsJson()) { + return response('authorized.', 401); + } else { + return response('Unauthorized.', 401); + } } + + return $next($request); } + /* if(!$request->expectsJson()){ + return response('Unauthorized.', 401); + + }*/ } diff --git a/app/Http/Middleware/CheckRole.php b/app/Http/Middleware/CheckRole.php new file mode 100644 index 0000000..3c4ddd5 --- /dev/null +++ b/app/Http/Middleware/CheckRole.php @@ -0,0 +1,28 @@ +user()==null){ + return response("Insufficient permission",401); + } + + if ($request->user()->hasAnyRole($roles) || !$roles) { + return $next($request); + }else{ + return response("Insufficient permissions", 401); + } + } +} diff --git a/app/Imports/UsersImport.php b/app/Imports/UsersImport.php new file mode 100644 index 0000000..203146d --- /dev/null +++ b/app/Imports/UsersImport.php @@ -0,0 +1,35 @@ + $row[0], + 'phone_number' => $row[1], + 'email'=> $row[2], + 'acadamic_dep'=> $row[3], + 'fellow_dep' => $row[4], + 'gender'=> $row[5], + 'graduate_year'=>$row[6], + 'phone_number'=>$row[7], + 'is_under_graduate'=> $row[8], + ]); + } +} diff --git a/app/Mail/Mail.php b/app/Mail/Mail.php new file mode 100644 index 0000000..a8a45be --- /dev/null +++ b/app/Mail/Mail.php @@ -0,0 +1,33 @@ +view('mail',['msg'=>$request->message])->to($request->to); + } +} diff --git a/app/Mail/ResetMail.php b/app/Mail/ResetMail.php new file mode 100644 index 0000000..9edb77b --- /dev/null +++ b/app/Mail/ResetMail.php @@ -0,0 +1,33 @@ +view('reset_mail',['msg'=>$request->message])->to($request->to); + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 3049068..78f4ce5 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use Laravel\Passport\Passport; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Gate; @@ -25,6 +26,6 @@ public function boot() { $this->registerPolicies(); - // + Passport::routes(); } } diff --git a/app/RecievedMessage.php b/app/RecievedMessage.php new file mode 100644 index 0000000..a5a872b --- /dev/null +++ b/app/RecievedMessage.php @@ -0,0 +1,10 @@ +belongsToMany('App\User','user_role', 'role_id','user_id'); + } +} diff --git a/app/ScheduleMessage.php b/app/ScheduleMessage.php new file mode 100644 index 0000000..4d9a769 --- /dev/null +++ b/app/ScheduleMessage.php @@ -0,0 +1,10 @@ +belongsToMany('App\Role', 'user_role', 'user_id','role_id'); + } /** * The attributes that are mass assignable. @@ -16,7 +22,7 @@ class User extends Authenticatable * @var array */ protected $fillable = [ - 'name', 'email', 'password', + 'first_name','email', 'password', ]; /** diff --git a/app/groups.php b/app/groups.php new file mode 100644 index 0000000..c5e804e --- /dev/null +++ b/app/groups.php @@ -0,0 +1,10 @@ += 2", + "php": ">=5.4.0" + }, + "require-dev": { + "nikic/php-parser": "^2.0|^3.0|^4.0", + "phpunit/phpunit": "^4|^5" + }, + "bin": [ + "bin/generate-defuse-key" + ], + "type": "library", + "autoload": { + "psr-4": { + "Defuse\\Crypto\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Hornby", + "email": "taylor@defuse.ca", + "homepage": "https://defuse.ca/" + }, + { + "name": "Scott Arciszewski", + "email": "info@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "Secure PHP Encryption Library", + "keywords": [ + "aes", + "authenticated encryption", + "cipher", + "crypto", + "cryptography", + "encrypt", + "encryption", + "openssl", + "security", + "symmetric key cryptography" + ], + "time": "2018-07-24T23:27:56+00:00" + }, { "name": "dnoegel/php-xdg-base-dir", - "version": "0.1", + "version": "v0.1.1", "source": { "type": "git", "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", "shasum": "" }, "require": { "php": ">=5.3.2" }, "require-dev": { - "phpunit/phpunit": "@stable" + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" }, - "type": "project", + "type": "library", "autoload": { "psr-4": { "XdgBaseDir\\": "src/" @@ -37,7 +100,7 @@ "MIT" ], "description": "implementation of xdg base directory specification for php", - "time": "2014-10-24T07:27:01+00:00" + "time": "2019-12-04T15:06:13+00:00" }, { "name": "doctrine/inflector", @@ -224,27 +287,26 @@ }, { "name": "egulias/email-validator", - "version": "2.1.11", + "version": "2.1.14", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23" + "reference": "c4b8d12921999d8a561004371701dbc2e05b5ece" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/92dd169c32f6f55ba570c309d83f5209cefb5e23", - "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/c4b8d12921999d8a561004371701dbc2e05b5ece", + "reference": "c4b8d12921999d8a561004371701dbc2e05b5ece", "shasum": "" }, "require": { "doctrine/lexer": "^1.0.1", - "php": ">= 5.5" + "php": ">=5.5" }, "require-dev": { - "dominicsayers/isemail": "dev-master", - "phpunit/phpunit": "^4.8.35||^5.7||^6.0", - "satooshi/php-coveralls": "^1.0.1", - "symfony/phpunit-bridge": "^4.4@dev" + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -278,107 +340,296 @@ "validation", "validator" ], - "time": "2019-08-13T17:33:27+00:00" + "time": "2020-01-05T14:11:20+00:00" }, { - "name": "erusev/parsedown", - "version": "1.7.3", + "name": "fideloper/proxy", + "version": "4.2.2", "source": { "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" + "url": "https://github.com/fideloper/TrustedProxy.git", + "reference": "790194d5d3da89a713478875d2e2d05855a90a81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", - "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/790194d5d3da89a713478875d2e2d05855a90a81", + "reference": "790194d5d3da89a713478875d2e2d05855a90a81", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^5.0|^6.0|^7.0", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/http": "^5.0|^6.0|^7.0", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Fideloper\\Proxy\\TrustedProxyServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Fideloper\\Proxy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Fidao", + "email": "fideloper@gmail.com" + } + ], + "description": "Set trusted proxies for Laravel", + "keywords": [ + "load balancing", + "proxy", + "trusted proxy" + ], + "time": "2019-12-20T13:11:11+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v5.0.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", + "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", "shasum": "" }, "require": { - "ext-mbstring": "*", "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35" + "phpunit/phpunit": " 4.8.35" }, "type": "library", "autoload": { - "psr-0": { - "Parsedown": "" + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "time": "2017-06-27T22:17:23+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" } }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", "keywords": [ - "markdown", - "parser" + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" ], - "time": "2019-03-17T18:48:37+00:00" + "time": "2019-12-23T11:57:10+00:00" }, { - "name": "fideloper/proxy", - "version": "4.2.1", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "03085e58ec7bee24773fa5a8850751a6e61a7e8a" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/03085e58ec7bee24773fa5a8850751a6e61a7e8a", - "reference": "03085e58ec7bee24773fa5a8850751a6e61a7e8a", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "illuminate/contracts": "^5.0|^6.0|^7.0", - "php": ">=5.4.0" + "php": ">=5.5.0" }, "require-dev": { - "illuminate/http": "^5.0|^6.0|^7.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^4.0" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "Fideloper\\Proxy\\TrustedProxyServiceProvider" - ] + "branch-alias": { + "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { - "Fideloper\\Proxy\\": "src/" + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" } }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Chris Fidao", - "email": "fideloper@gmail.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "Set trusted proxies for Laravel", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "load balancing", - "proxy", - "trusted proxy" + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" ], - "time": "2019-09-03T16:45:42+00:00" + "time": "2019-07-01T23:21:34+00:00" }, { "name": "jakub-onderka/php-console-color", @@ -469,72 +720,209 @@ "time": "2018-09-29T18:48:56+00:00" }, { - "name": "laravel/framework", - "version": "v6.6.1", + "name": "laminas/laminas-diactoros", + "version": "2.2.2", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "0a8e3e6e96e5ec3af6b9f30026cb8e5551554875" + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "95178c4751d737cdf9ab0a9f70a42754ac860e7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/0a8e3e6e96e5ec3af6b9f30026cb8e5551554875", - "reference": "0a8e3e6e96e5ec3af6b9f30026cb8e5551554875", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/95178c4751d737cdf9ab0a9f70a42754ac860e7b", + "reference": "95178c4751d737cdf9ab0a9f70a42754ac860e7b", "shasum": "" }, "require": { - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "egulias/email-validator": "^2.1.10", - "erusev/parsedown": "^1.7", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12|^2.0", - "nesbot/carbon": "^2.0", - "opis/closure": "^3.1", - "php": "^7.2", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.3.4", - "symfony/debug": "^4.3.4", - "symfony/finder": "^4.3.4", - "symfony/http-foundation": "^4.3.4", - "symfony/http-kernel": "^4.3.4", - "symfony/process": "^4.3.4", - "symfony/routing": "^4.3.4", - "symfony/var-dumper": "^4.3.4", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^3.3" + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" }, "conflict": { - "tightenco/collect": "<5.5.33" + "phpspec/prophecy": "<1.9.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" }, "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/queue": "self.version", + "zendframework/zend-diactoros": "self.version" + }, + "require-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "laminas/laminas-coding-standard": "~1.0.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^7.5.18" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", + "dev-release-1.8": "1.8.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-7" + ], + "time": "2020-01-07T19:39:26+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "0fb9675b84a1666ab45182b6c5b29956921e818d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/0fb9675b84a1666ab45182b6c5b29956921e818d", + "reference": "0fb9675b84a1666ab45182b6c5b29956921e818d", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev", + "dev-develop": "1.1.x-dev" + }, + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "time": "2020-01-07T22:58:31+00:00" + }, + { + "name": "laravel/framework", + "version": "v6.11.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "17af23842c259edcfd8c5b9e6a7c86596e040034" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/17af23842c259edcfd8c5b9e6a7c86596e040034", + "reference": "17af23842c259edcfd8c5b9e6a7c86596e040034", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.1", + "dragonmantank/cron-expression": "^2.0", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "league/commonmark": "^1.1", + "league/commonmark-ext-table": "^2.1", + "league/flysystem": "^1.0.8", + "monolog/monolog": "^1.12|^2.0", + "nesbot/carbon": "^2.0", + "opis/closure": "^3.1", + "php": "^7.2", + "psr/container": "^1.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^3.7", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.3.4", + "symfony/debug": "^4.3.4", + "symfony/finder": "^4.3.4", + "symfony/http-foundation": "^4.3.4", + "symfony/http-kernel": "^4.3.4", + "symfony/process": "^4.3.4", + "symfony/routing": "^4.3.4", + "symfony/var-dumper": "^4.3.4", + "tijsverkoyen/css-to-inline-styles": "^2.2.1", + "vlucas/phpdotenv": "^3.3" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", "illuminate/redis": "self.version", "illuminate/routing": "self.version", "illuminate/session": "self.version", @@ -549,14 +937,13 @@ "filp/whoops": "^2.4", "guzzlehttp/guzzle": "^6.3", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.2.3", + "mockery/mockery": "^1.3.1", "moontoast/math": "^1.1", "orchestra/testbench-core": "^4.0", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.3", + "phpunit/phpunit": "^8.4|^9.0", "predis/predis": "^1.1.1", - "symfony/cache": "^4.3", - "true/punycode": "^2.1" + "symfony/cache": "^4.3.4" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).", @@ -574,8 +961,9 @@ "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0)", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", "symfony/cache": "Required to PSR-6 cache bridge (^4.3.4).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.2).", @@ -612,7 +1000,79 @@ "framework", "laravel" ], - "time": "2019-12-03T15:23:55+00:00" + "time": "2020-01-14T15:12:09+00:00" + }, + { + "name": "laravel/passport", + "version": "v8.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/passport.git", + "reference": "4c163b7821d29b6166fc2e93ad7649428b51c6db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/passport/zipball/4c163b7821d29b6166fc2e93ad7649428b51c6db", + "reference": "4c163b7821d29b6166fc2e93ad7649428b51c6db", + "shasum": "" + }, + "require": { + "ext-json": "*", + "firebase/php-jwt": "^3.0|^4.0|^5.0", + "guzzlehttp/guzzle": "^6.0", + "illuminate/auth": "^6.0|^7.0", + "illuminate/console": "^6.0|^7.0", + "illuminate/container": "^6.0|^7.0", + "illuminate/contracts": "^6.0|^7.0", + "illuminate/cookie": "^6.0|^7.0", + "illuminate/database": "^6.0|^7.0", + "illuminate/encryption": "^6.0|^7.0", + "illuminate/http": "^6.0|^7.0", + "illuminate/support": "^6.0|^7.0", + "laminas/laminas-diactoros": "^2.2", + "league/oauth2-server": "^8.0", + "php": "^7.2", + "phpseclib/phpseclib": "^2.0", + "symfony/psr-http-message-bridge": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.4|^5.0", + "phpunit/phpunit": "^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Passport\\PassportServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Passport\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Passport provides OAuth2 server support to Laravel.", + "keywords": [ + "laravel", + "oauth", + "passport" + ], + "time": "2020-01-07T19:25:00+00:00" }, { "name": "laravel/tinker", @@ -677,18 +1137,259 @@ ], "time": "2019-08-07T15:10:45+00:00" }, + { + "name": "lcobucci/jwt", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "^5.7 || ^7.3", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2019-05-24T18:30:49+00:00" + }, + { + "name": "league/commonmark", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "34cf4ddb3892c715ae785c880e6691d839cff88d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/34cf4ddb3892c715ae785c880e6691d839cff88d", + "reference": "34cf4ddb3892c715ae785c880e6691d839cff88d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1" + }, + "replace": { + "colinodell/commonmark-php": "*" + }, + "require-dev": { + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.1", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan-shim": "^0.11.5", + "phpunit/phpunit": "^7.5", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" + }, + "suggest": { + "league/commonmark-extras": "Library of useful extensions including smart punctuation" + }, + "bin": [ + "bin/commonmark" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "PHP Markdown parser based on the CommonMark spec", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "markdown", + "parser" + ], + "time": "2020-01-16T01:18:13+00:00" + }, + { + "name": "league/commonmark-ext-table", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark-ext-table.git", + "reference": "3228888ea69636e855efcf6636ff8e6316933fe7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark-ext-table/zipball/3228888ea69636e855efcf6636ff8e6316933fe7", + "reference": "3228888ea69636e855efcf6636ff8e6316933fe7", + "shasum": "" + }, + "require": { + "league/commonmark": "~0.19.3|^1.0", + "php": "^7.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "phpstan/phpstan": "~0.11", + "phpunit/phpunit": "^7.0|^8.0", + "symfony/var-dumper": "^4.0", + "vimeo/psalm": "^3.0" + }, + "type": "commonmark-extension", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\Ext\\Table\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Martin Hasoň", + "email": "martin.hason@gmail.com" + }, + { + "name": "Webuni s.r.o.", + "homepage": "https://www.webuni.cz" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Table extension for league/commonmark", + "homepage": "https://github.com/thephpleague/commonmark-ext-table", + "keywords": [ + "commonmark", + "extension", + "markdown", + "table" + ], + "time": "2019-09-26T13:28:33+00:00" + }, + { + "name": "league/event", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/event.git", + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/event/zipball/d2cc124cf9a3fab2bb4ff963307f60361ce4d119", + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "~1.0.1", + "phpspec/phpspec": "^2.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Event\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Event package", + "keywords": [ + "emitter", + "event", + "listener" + ], + "time": "2018-11-26T11:52:41+00:00" + }, { "name": "league/flysystem", - "version": "1.0.57", + "version": "1.0.63", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a" + "reference": "8132daec326565036bc8e8d1876f77ec183a7bd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a", - "reference": "0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8132daec326565036bc8e8d1876f77ec183a7bd6", + "reference": "8132daec326565036bc8e8d1876f77ec183a7bd6", "shasum": "" }, "require": { @@ -759,20 +1460,328 @@ "sftp", "storage" ], - "time": "2019-10-16T21:01:05+00:00" + "time": "2020-01-04T16:30:31+00:00" + }, + { + "name": "league/oauth2-server", + "version": "8.0.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-server.git", + "reference": "e1dc4d708c56fcfa205be4bb1862b6d525b4baac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/e1dc4d708c56fcfa205be4bb1862b6d525b4baac", + "reference": "e1dc4d708c56fcfa205be4bb1862b6d525b4baac", + "shasum": "" + }, + "require": { + "defuse/php-encryption": "^2.2.1", + "ext-json": "*", + "ext-openssl": "*", + "lcobucci/jwt": "^3.3.1", + "league/event": "^2.2", + "php": ">=7.1.0", + "psr/http-message": "^1.0.1" + }, + "replace": { + "league/oauth2server": "*", + "lncd/oauth2": "*" + }, + "require-dev": { + "phpstan/phpstan": "^0.11.8", + "phpstan/phpstan-phpunit": "^0.11.2", + "phpunit/phpunit": "^7.5.13 || ^8.2.3", + "roave/security-advisories": "dev-master", + "zendframework/zend-diactoros": "^2.1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\OAuth2\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Bilbie", + "email": "hello@alexbilbie.com", + "homepage": "http://www.alexbilbie.com", + "role": "Developer" + }, + { + "name": "Andy Millington", + "email": "andrew@noexceptions.io", + "homepage": "https://www.noexceptions.io", + "role": "Developer" + } + ], + "description": "A lightweight and powerful OAuth 2.0 authorization and resource server library with support for all the core specification grants. This library will allow you to secure your API with OAuth and allow your applications users to approve apps that want to access their data from your API.", + "homepage": "https://oauth2.thephpleague.com/", + "keywords": [ + "Authentication", + "api", + "auth", + "authorisation", + "authorization", + "oauth", + "oauth 2", + "oauth 2.0", + "oauth2", + "protect", + "resource", + "secure", + "server" + ], + "time": "2019-07-13T18:58:26+00:00" + }, + { + "name": "maatwebsite/excel", + "version": "3.1.18", + "source": { + "type": "git", + "url": "https://github.com/Maatwebsite/Laravel-Excel.git", + "reference": "d0231ab1f4bb93c8695630cb445ada1fdc54add0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/d0231ab1f4bb93c8695630cb445ada1fdc54add0", + "reference": "d0231ab1f4bb93c8695630cb445ada1fdc54add0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*|^6.0", + "php": "^7.0", + "phpoffice/phpspreadsheet": "^1.10" + }, + "require-dev": { + "mockery/mockery": "^1.1", + "orchestra/database": "^4.0", + "orchestra/testbench": "^4.0", + "phpunit/phpunit": "^8.0", + "predis/predis": "^1.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ], + "aliases": { + "Excel": "Maatwebsite\\Excel\\Facades\\Excel" + } + } + }, + "autoload": { + "psr-4": { + "Maatwebsite\\Excel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Patrick Brouwers", + "email": "patrick@maatwebsite.nl" + } + ], + "description": "Supercharged Excel exports and imports in Laravel", + "keywords": [ + "PHPExcel", + "batch", + "csv", + "excel", + "export", + "import", + "laravel", + "php", + "phpspreadsheet" + ], + "time": "2019-12-24T10:40:12+00:00" + }, + { + "name": "markbaker/complex", + "version": "1.4.7", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/1ea674a8308baf547cbcbd30c5fcd6d301b7c000", + "reference": "1ea674a8308baf547cbcbd30c5fcd6d301b7c000", + "shasum": "" + }, + "require": { + "php": "^5.6.0|^7.0.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3", + "phpcompatibility/php-compatibility": "^8.0", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "2.*", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^4.8.35|^5.4.0", + "sebastian/phpcpd": "2.*", + "squizlabs/php_codesniffer": "^3.3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + }, + "files": [ + "classes/src/functions/abs.php", + "classes/src/functions/acos.php", + "classes/src/functions/acosh.php", + "classes/src/functions/acot.php", + "classes/src/functions/acoth.php", + "classes/src/functions/acsc.php", + "classes/src/functions/acsch.php", + "classes/src/functions/argument.php", + "classes/src/functions/asec.php", + "classes/src/functions/asech.php", + "classes/src/functions/asin.php", + "classes/src/functions/asinh.php", + "classes/src/functions/atan.php", + "classes/src/functions/atanh.php", + "classes/src/functions/conjugate.php", + "classes/src/functions/cos.php", + "classes/src/functions/cosh.php", + "classes/src/functions/cot.php", + "classes/src/functions/coth.php", + "classes/src/functions/csc.php", + "classes/src/functions/csch.php", + "classes/src/functions/exp.php", + "classes/src/functions/inverse.php", + "classes/src/functions/ln.php", + "classes/src/functions/log2.php", + "classes/src/functions/log10.php", + "classes/src/functions/negative.php", + "classes/src/functions/pow.php", + "classes/src/functions/rho.php", + "classes/src/functions/sec.php", + "classes/src/functions/sech.php", + "classes/src/functions/sin.php", + "classes/src/functions/sinh.php", + "classes/src/functions/sqrt.php", + "classes/src/functions/tan.php", + "classes/src/functions/tanh.php", + "classes/src/functions/theta.php", + "classes/src/operations/add.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "time": "2018-10-13T23:28:42+00:00" + }, + { + "name": "markbaker/matrix", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "5348c5a67e3b75cd209d70103f916a93b1f1ed21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/5348c5a67e3b75cd209d70103f916a93b1f1ed21", + "reference": "5348c5a67e3b75cd209d70103f916a93b1f1ed21", + "shasum": "" + }, + "require": { + "php": "^5.6.0|^7.0.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "dev-master", + "phploc/phploc": "^4", + "phpmd/phpmd": "dev-master", + "phpunit/phpunit": "^5.7", + "sebastian/phpcpd": "^3.0", + "squizlabs/php_codesniffer": "^3.0@dev" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + }, + "files": [ + "classes/src/functions/adjoint.php", + "classes/src/functions/antidiagonal.php", + "classes/src/functions/cofactors.php", + "classes/src/functions/determinant.php", + "classes/src/functions/diagonal.php", + "classes/src/functions/identity.php", + "classes/src/functions/inverse.php", + "classes/src/functions/minors.php", + "classes/src/functions/trace.php", + "classes/src/functions/transpose.php", + "classes/src/operations/add.php", + "classes/src/operations/directsum.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "time": "2019-10-06T11:29:25+00:00" }, { "name": "monolog/monolog", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f9d56fd2f5533322caccdfcddbb56aedd622ef1c" + "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f9d56fd2f5533322caccdfcddbb56aedd622ef1c", - "reference": "f9d56fd2f5533322caccdfcddbb56aedd622ef1c", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", + "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", "shasum": "" }, "require": { @@ -840,20 +1849,20 @@ "logging", "psr-3" ], - "time": "2019-11-13T10:27:43+00:00" + "time": "2019-12-20T14:22:59+00:00" }, { "name": "nesbot/carbon", - "version": "2.27.0", + "version": "2.28.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "13b8485a8690f103bf19cba64879c218b102b726" + "reference": "e2bcbcd43e67ee6101d321d5de916251d2870ca8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/13b8485a8690f103bf19cba64879c218b102b726", - "reference": "13b8485a8690f103bf19cba64879c218b102b726", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e2bcbcd43e67ee6101d321d5de916251d2870ca8", + "reference": "e2bcbcd43e67ee6101d321d5de916251d2870ca8", "shasum": "" }, "require": { @@ -910,7 +1919,7 @@ "datetime", "time" ], - "time": "2019-11-20T06:59:06+00:00" + "time": "2019-12-16T16:30:25+00:00" }, { "name": "nikic/php-parser", @@ -1070,30 +2079,124 @@ ], "time": "2018-07-02T15:55:56+00:00" }, + { + "name": "phpoffice/phpspreadsheet", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "1648dc9ebef6ebe0c5a172e16cf66732918416e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/1648dc9ebef6ebe0c5a172e16cf66732918416e0", + "reference": "1648dc9ebef6ebe0c5a172e16cf66732918416e0", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "markbaker/complex": "^1.4", + "markbaker/matrix": "^1.2", + "php": "^7.1", + "psr/simple-cache": "^1.0" + }, + "require-dev": { + "dompdf/dompdf": "^0.8.3", + "friendsofphp/php-cs-fixer": "^2.16", + "jpgraph/jpgraph": "^4.0", + "mpdf/mpdf": "^8.0", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.5", + "squizlabs/php_codesniffer": "^3.5", + "tecnickcom/tcpdf": "^6.3" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "time": "2019-12-01T23:13:51+00:00" + }, { "name": "phpoption/phpoption", - "version": "1.6.0", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "f4e7a6a1382183412246f0d361078c29fb85089e" + "reference": "77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/f4e7a6a1382183412246f0d361078c29fb85089e", - "reference": "f4e7a6a1382183412246f0d361078c29fb85089e", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959", + "reference": "77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959", "shasum": "" }, "require": { "php": "^5.5.9 || ^7.0" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.3", "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -1122,7 +2225,99 @@ "php", "type" ], - "time": "2019-11-30T20:20:49+00:00" + "time": "2019-12-15T19:35:24+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.23", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c78eb5058d5bb1a183133c36d4ba5b6675dfa099", + "reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2019-09-17T03:41:22+00:00" }, { "name": "psr/container", @@ -1173,6 +2368,108 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.1.2", @@ -1270,20 +2567,20 @@ }, { "name": "psy/psysh", - "version": "v0.9.11", + "version": "v0.9.12", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "75d9ac1c16db676de27ab554a4152b594be4748e" + "reference": "90da7f37568aee36b116a030c5f99c915267edd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/75d9ac1c16db676de27ab554a4152b594be4748e", - "reference": "75d9ac1c16db676de27ab554a4152b594be4748e", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/90da7f37568aee36b116a030c5f99c915267edd4", + "reference": "90da7f37568aee36b116a030c5f99c915267edd4", "shasum": "" }, "require": { - "dnoegel/php-xdg-base-dir": "0.1", + "dnoegel/php-xdg-base-dir": "0.1.*", "ext-json": "*", "ext-tokenizer": "*", "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", @@ -1340,26 +2637,66 @@ "interactive", "shell" ], - "time": "2019-11-27T22:44:29+00:00" + "time": "2019-12-06T14:19:43+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" }, { "name": "ramsey/uuid", - "version": "3.9.1", + "version": "3.9.2", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5ac2740e0c8c599d2bbe7f113a939f2b5b216c67" + "reference": "7779489a47d443f845271badbdcedfe4df8e06fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5ac2740e0c8c599d2bbe7f113a939f2b5b216c67", - "reference": "5ac2740e0c8c599d2bbe7f113a939f2b5b216c67", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/7779489a47d443f845271badbdcedfe4df8e06fb", + "reference": "7779489a47d443f845271badbdcedfe4df8e06fb", "shasum": "" }, "require": { "ext-json": "*", "paragonie/random_compat": "^1 | ^2 | 9.99.99", - "php": "^5.4 | ^7", + "php": "^5.4 | ^7 | ^8", "symfony/polyfill-ctype": "^1.8" }, "replace": { @@ -1369,13 +2706,13 @@ "codeception/aspect-mock": "^1 | ^2", "doctrine/annotations": "^1.2", "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.9", + "jakub-onderka/php-parallel-lint": "^1", + "mockery/mockery": "^0.9.11 | ^1", "moontoast/math": "^1.1", "paragonie/random-lib": "^2", "php-mock/php-mock-phpunit": "^0.3 | ^1.1", "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", - "squizlabs/php_codesniffer": "^2.3" + "squizlabs/php_codesniffer": "^3.5" }, "suggest": { "ext-ctype": "Provides support for PHP Ctype functions", @@ -1427,7 +2764,7 @@ "identifier", "uuid" ], - "time": "2019-12-01T04:55:27+00:00" + "time": "2019-12-17T08:18:51+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -1493,16 +2830,16 @@ }, { "name": "symfony/console", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "f0aea3df20d15635b3cb9730ca5eea1c65b7f201" + "reference": "82437719dab1e6bdd28726af14cb345c2ec816d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f0aea3df20d15635b3cb9730ca5eea1c65b7f201", - "reference": "f0aea3df20d15635b3cb9730ca5eea1c65b7f201", + "url": "https://api.github.com/repos/symfony/console/zipball/82437719dab1e6bdd28726af14cb345c2ec816d0", + "reference": "82437719dab1e6bdd28726af14cb345c2ec816d0", "shasum": "" }, "require": { @@ -1565,11 +2902,11 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-12-01T10:06:17+00:00" + "time": "2019-12-17T10:32:23+00:00" }, { "name": "symfony/css-selector", - "version": "v5.0.1", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -1622,16 +2959,16 @@ }, { "name": "symfony/debug", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "b8600a1d7d20b0e80906398bb1f50612fa074a8e" + "reference": "5c4c1db977dc70bb3250e1308d3e8c6341aa38f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/b8600a1d7d20b0e80906398bb1f50612fa074a8e", - "reference": "b8600a1d7d20b0e80906398bb1f50612fa074a8e", + "url": "https://api.github.com/repos/symfony/debug/zipball/5c4c1db977dc70bb3250e1308d3e8c6341aa38f5", + "reference": "5c4c1db977dc70bb3250e1308d3e8c6341aa38f5", "shasum": "" }, "require": { @@ -1674,20 +3011,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-16T14:46:54+00:00" }, { "name": "symfony/error-handler", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b" + "reference": "6d7d7712a6ff5215ec26215672293b154f1db8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b", - "reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/6d7d7712a6ff5215ec26215672293b154f1db8c1", + "reference": "6d7d7712a6ff5215ec26215672293b154f1db8c1", "shasum": "" }, "require": { @@ -1730,11 +3067,11 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2019-12-01T08:46:01+00:00" + "time": "2019-12-16T14:46:54+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -1862,7 +3199,7 @@ }, { "name": "symfony/finder", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -1911,16 +3248,16 @@ }, { "name": "symfony/http-foundation", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "8bccc59e61b41963d14c3dbdb23181e5c932a1d5" + "reference": "fcae1cff5b57b2a9c3aabefeb1527678705ddb62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8bccc59e61b41963d14c3dbdb23181e5c932a1d5", - "reference": "8bccc59e61b41963d14c3dbdb23181e5c932a1d5", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/fcae1cff5b57b2a9c3aabefeb1527678705ddb62", + "reference": "fcae1cff5b57b2a9c3aabefeb1527678705ddb62", "shasum": "" }, "require": { @@ -1962,20 +3299,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-19T15:57:49+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "e4187780ed26129ee86d5234afbebf085e144f88" + "reference": "fe310d2e95cd4c356836c8ecb0895a46d97fede2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e4187780ed26129ee86d5234afbebf085e144f88", - "reference": "e4187780ed26129ee86d5234afbebf085e144f88", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/fe310d2e95cd4c356836c8ecb0895a46d97fede2", + "reference": "fe310d2e95cd4c356836c8ecb0895a46d97fede2", "shasum": "" }, "require": { @@ -2052,11 +3389,11 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-12-01T14:06:38+00:00" + "time": "2019-12-19T16:23:40+00:00" }, { "name": "symfony/mime", - "version": "v5.0.1", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -2469,16 +3806,16 @@ }, { "name": "symfony/process", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726" + "reference": "b84501ad50adb72a94fb460a5b5c91f693e99c9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/51c0135ef3f44c5803b33dc60e96bf4f77752726", - "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726", + "url": "https://api.github.com/repos/symfony/process/zipball/b84501ad50adb72a94fb460a5b5c91f693e99c9b", + "reference": "b84501ad50adb72a94fb460a5b5c91f693e99c9b", "shasum": "" }, "require": { @@ -2514,20 +3851,85 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-06T10:06:46+00:00" + }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "9d3e80d54d9ae747ad573cad796e8e247df7b796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9d3e80d54d9ae747ad573cad796e8e247df7b796", + "reference": "9d3e80d54d9ae747ad573cad796e8e247df7b796", + "shasum": "" + }, + "require": { + "php": "^7.1", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^4.4 || ^5.0" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "symfony/phpunit-bridge": "^4.4 || ^5.0", + "zendframework/zend-diactoros": "^1.4.1 || ^2.0" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "time": "2019-11-25T19:33:50+00:00" }, { "name": "symfony/routing", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273" + "reference": "628bcafae1b2043969378dcfbf9c196539a38722" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/51f3f20ad29329a0bdf5c0e2f722d3764b065273", - "reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273", + "url": "https://api.github.com/repos/symfony/routing/zipball/628bcafae1b2043969378dcfbf9c196539a38722", + "reference": "628bcafae1b2043969378dcfbf9c196539a38722", "shasum": "" }, "require": { @@ -2590,7 +3992,7 @@ "uri", "url" ], - "time": "2019-12-01T08:39:58+00:00" + "time": "2019-12-12T12:53:52+00:00" }, { "name": "symfony/service-contracts", @@ -2652,16 +4054,16 @@ }, { "name": "symfony/translation", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "897fb68ee7933372517b551d6f08c6d4bb0b8c40" + "reference": "f7669f48a9633bf8139bc026c755e894b7206677" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/897fb68ee7933372517b551d6f08c6d4bb0b8c40", - "reference": "897fb68ee7933372517b551d6f08c6d4bb0b8c40", + "url": "https://api.github.com/repos/symfony/translation/zipball/f7669f48a9633bf8139bc026c755e894b7206677", + "reference": "f7669f48a9633bf8139bc026c755e894b7206677", "shasum": "" }, "require": { @@ -2724,7 +4126,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-11-12T17:18:47+00:00" + "time": "2019-12-12T12:53:52+00:00" }, { "name": "symfony/translation-contracts", @@ -2785,16 +4187,16 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a" + "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0a89a1dbbedd9fb2cfb2336556dec8305273c19a", - "reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/be330f919bdb395d1e0c3f2bfb8948512d6bdd99", + "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99", "shasum": "" }, "require": { @@ -2857,7 +4259,7 @@ "debug", "dump" ], - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-18T13:41:29+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3025,16 +4427,16 @@ }, { "name": "facade/flare-client-php", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/facade/flare-client-php.git", - "reference": "0fd0c0a5c75a5acf04578311a08a7832e06a981c" + "reference": "24444ea0e1556f0a4b5fc8e61802caf72ae9a408" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/0fd0c0a5c75a5acf04578311a08a7832e06a981c", - "reference": "0fd0c0a5c75a5acf04578311a08a7832e06a981c", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/24444ea0e1556f0a4b5fc8e61802caf72ae9a408", + "reference": "24444ea0e1556f0a4b5fc8e61802caf72ae9a408", "shasum": "" }, "require": { @@ -3042,7 +4444,7 @@ "illuminate/pipeline": "~5.5|~5.6|~5.7|~5.8|^6.0", "php": "^7.1", "symfony/http-foundation": "~3.3|~4.1", - "symfony/var-dumper": "^3.4|^4.0" + "symfony/var-dumper": "^3.4|^4.0|^5.0" }, "require-dev": { "larapack/dd": "^1.1", @@ -3075,20 +4477,20 @@ "flare", "reporting" ], - "time": "2019-11-27T10:09:46+00:00" + "time": "2019-12-15T18:28:38+00:00" }, { "name": "facade/ignition", - "version": "1.13.0", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "1d2103aefecc9c4e6975bcc77fc5eceb330adb33" + "reference": "c6d36683b40e005cd395ddff1bbfbf0aa0fcd3c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/1d2103aefecc9c4e6975bcc77fc5eceb330adb33", - "reference": "1d2103aefecc9c4e6975bcc77fc5eceb330adb33", + "url": "https://api.github.com/repos/facade/ignition/zipball/c6d36683b40e005cd395ddff1bbfbf0aa0fcd3c5", + "reference": "c6d36683b40e005cd395ddff1bbfbf0aa0fcd3c5", "shasum": "" }, "require": { @@ -3146,7 +4548,7 @@ "laravel", "page" ], - "time": "2019-11-27T11:17:18+00:00" + "time": "2020-01-06T09:32:42+00:00" }, { "name": "facade/ignition-contracts", @@ -3194,16 +4596,16 @@ }, { "name": "filp/whoops", - "version": "2.5.0", + "version": "2.7.1", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "cde50e6720a39fdacb240159d3eea6865d51fd96" + "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/cde50e6720a39fdacb240159d3eea6865d51fd96", - "reference": "cde50e6720a39fdacb240159d3eea6865d51fd96", + "url": "https://api.github.com/repos/filp/whoops/zipball/fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", + "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", "shasum": "" }, "require": { @@ -3212,8 +4614,8 @@ }, "require-dev": { "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -3222,7 +4624,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -3251,20 +4653,20 @@ "throwable", "whoops" ], - "time": "2019-08-07T09:00:00+00:00" + "time": "2020-01-15T10:00:00+00:00" }, { "name": "fzaninotto/faker", - "version": "v1.9.0", + "version": "v1.9.1", "source": { "type": "git", "url": "https://github.com/fzaninotto/Faker.git", - "reference": "27a216cbe72327b2d6369fab721a5843be71e57d" + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/27a216cbe72327b2d6369fab721a5843be71e57d", - "reference": "27a216cbe72327b2d6369fab721a5843be71e57d", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", "shasum": "" }, "require": { @@ -3277,7 +4679,9 @@ }, "type": "library", "extra": { - "branch-alias": [] + "branch-alias": { + "dev-master": "1.9-dev" + } }, "autoload": { "psr-4": { @@ -3299,7 +4703,7 @@ "faker", "fixtures" ], - "time": "2019-11-14T13:13:06+00:00" + "time": "2019-12-12T13:22:17+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -3351,23 +4755,22 @@ }, { "name": "mockery/mockery", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "5571962a4f733fbb57bede39778f71647fae8e66" + "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/5571962a4f733fbb57bede39778f71647fae8e66", - "reference": "5571962a4f733fbb57bede39778f71647fae8e66", + "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", + "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "~2.0", "lib-pcre": ">=7.0", - "php": ">=5.6.0", - "sebastian/comparator": "^1.2.4|^3.0" + "php": ">=5.6.0" }, "require-dev": { "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" @@ -3375,7 +4778,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -3413,20 +4816,20 @@ "test double", "testing" ], - "time": "2019-11-24T07:54:50+00:00" + "time": "2019-12-26T09:49:15+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.3", + "version": "1.9.5", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", - "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", "shasum": "" }, "require": { @@ -3461,7 +4864,7 @@ "object", "object graph" ], - "time": "2019-08-09T12:45:53+00:00" + "time": "2020-01-17T21:11:47+00:00" }, { "name": "nunomaduro/collision", @@ -3683,16 +5086,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.2", + "version": "4.3.4", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", "shasum": "" }, "require": { @@ -3704,6 +5107,7 @@ "require-dev": { "doctrine/instantiator": "^1.0.5", "mockery/mockery": "^1.0", + "phpdocumentor/type-resolver": "0.4.*", "phpunit/phpunit": "^6.4" }, "type": "library", @@ -3730,7 +5134,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2019-09-12T14:27:41+00:00" + "time": "2019-12-28T18:55:12+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -3781,33 +5185,33 @@ }, { "name": "phpspec/prophecy", - "version": "1.9.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203" + "reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203", - "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/cbe1df668b3fe136bcc909126a0f529a78d4cbbc", + "reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", + "phpspec/phpspec": "^2.5 || ^3.2", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev" + "dev-master": "1.10.x-dev" } }, "autoload": { @@ -3840,7 +5244,7 @@ "spy", "stub" ], - "time": "2019-10-03T11:07:50+00:00" + "time": "2019-12-22T21:05:45+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4096,16 +5500,16 @@ }, { "name": "phpunit/phpunit", - "version": "8.4.3", + "version": "8.5.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "67f9e35bffc0dd52d55d565ddbe4230454fd6a4e" + "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67f9e35bffc0dd52d55d565ddbe4230454fd6a4e", - "reference": "67f9e35bffc0dd52d55d565ddbe4230454fd6a4e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/018b6ac3c8ab20916db85fa91bf6465acb64d1e0", + "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0", "shasum": "" }, "require": { @@ -4149,7 +5553,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.4-dev" + "dev-master": "8.5-dev" } }, "autoload": { @@ -4175,20 +5579,20 @@ "testing", "xunit" ], - "time": "2019-11-06T09:42:23+00:00" + "time": "2020-01-08T08:49:49+00:00" }, { "name": "scrivo/highlight.php", - "version": "v9.15.10.0", + "version": "v9.17.1.0", "source": { "type": "git", "url": "https://github.com/scrivo/highlight.php.git", - "reference": "9ad3adb4456dc91196327498dbbce6aa1ba1239e" + "reference": "5451a9ad6d638559cf2a092880f935c39776134e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/9ad3adb4456dc91196327498dbbce6aa1ba1239e", - "reference": "9ad3adb4456dc91196327498dbbce6aa1ba1239e", + "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/5451a9ad6d638559cf2a092880f935c39776134e", + "reference": "5451a9ad6d638559cf2a092880f935c39776134e", "shasum": "" }, "require": { @@ -4198,7 +5602,8 @@ }, "require-dev": { "phpunit/phpunit": "^4.8|^5.7", - "symfony/finder": "^2.8" + "symfony/finder": "^3.4", + "symfony/var-dumper": "^3.4" }, "suggest": { "ext-dom": "Needed to make use of the features in the utilities namespace" @@ -4226,7 +5631,7 @@ { "name": "Vladimir Jimenez", "homepage": "https://allejo.io", - "role": "Contributor" + "role": "Maintainer" }, { "name": "Martin Folkers", @@ -4242,7 +5647,7 @@ "highlight.php", "syntax" ], - "time": "2019-08-27T04:27:48+00:00" + "time": "2019-12-13T21:54:06+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", diff --git a/config/app.php b/config/app.php index c9960cd..11e5cc4 100644 --- a/config/app.php +++ b/config/app.php @@ -1,5 +1,5 @@ Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, - + 'Excel' => Maatwebsite\Excel\Facades\Excel::class, ], ]; diff --git a/config/auth.php b/config/auth.php index aaf982b..31e1f55 100644 --- a/config/auth.php +++ b/config/auth.php @@ -42,10 +42,16 @@ ], 'api' => [ + 'driver' => 'passport', + 'provider' => 'users', + ], + + /* 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, - ], + ],*/ + ], /* diff --git a/config/excel.php b/config/excel.php new file mode 100644 index 0000000..213afe5 --- /dev/null +++ b/config/excel.php @@ -0,0 +1,185 @@ + [ + + /* + |-------------------------------------------------------------------------- + | Chunk size + |-------------------------------------------------------------------------- + | + | When using FromQuery, the query is automatically chunked. + | Here you can specify how big the chunk should be. + | + */ + 'chunk_size' => 1000, + + /* + |-------------------------------------------------------------------------- + | Pre-calculate formulas during export + |-------------------------------------------------------------------------- + */ + 'pre_calculate_formulas' => false, + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV exports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'line_ending' => PHP_EOL, + 'use_bom' => false, + 'include_separator_line' => false, + 'excel_compatibility' => false, + ], + ], + + 'imports' => [ + + 'read_only' => true, + + 'heading_row' => [ + + /* + |-------------------------------------------------------------------------- + | Heading Row Formatter + |-------------------------------------------------------------------------- + | + | Configure the heading row formatter. + | Available options: none|slug|custom + | + */ + 'formatter' => 'slug', + ], + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV imports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'escape_character' => '\\', + 'contiguous' => false, + 'input_encoding' => 'UTF-8', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Extension detector + |-------------------------------------------------------------------------- + | + | Configure here which writer type should be used when + | the package needs to guess the correct type + | based on the extension alone. + | + */ + 'extension_detector' => [ + 'xlsx' => Excel::XLSX, + 'xlsm' => Excel::XLSX, + 'xltx' => Excel::XLSX, + 'xltm' => Excel::XLSX, + 'xls' => Excel::XLS, + 'xlt' => Excel::XLS, + 'ods' => Excel::ODS, + 'ots' => Excel::ODS, + 'slk' => Excel::SLK, + 'xml' => Excel::XML, + 'gnumeric' => Excel::GNUMERIC, + 'htm' => Excel::HTML, + 'html' => Excel::HTML, + 'csv' => Excel::CSV, + 'tsv' => Excel::TSV, + + /* + |-------------------------------------------------------------------------- + | PDF Extension + |-------------------------------------------------------------------------- + | + | Configure here which Pdf driver should be used by default. + | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF + | + */ + 'pdf' => Excel::DOMPDF, + ], + + 'value_binder' => [ + + /* + |-------------------------------------------------------------------------- + | Default Value Binder + |-------------------------------------------------------------------------- + | + | PhpSpreadsheet offers a way to hook into the process of a value being + | written to a cell. In there some assumptions are made on how the + | value should be formatted. If you want to change those defaults, + | you can implement your own default value binder. + | + */ + 'default' => Maatwebsite\Excel\DefaultValueBinder::class, + ], + + 'transactions' => [ + + /* + |-------------------------------------------------------------------------- + | Transaction Handler + |-------------------------------------------------------------------------- + | + | By default the import is wrapped in a transaction. This is useful + | for when an import may fail and you want to retry it. With the + | transactions, the previous import gets rolled-back. + | + | You can disable the transaction handler by setting this to null. + | Or you can choose a custom made transaction handler here. + | + | Supported handlers: null|db + | + */ + 'handler' => 'db', + ], + + 'temporary_files' => [ + + /* + |-------------------------------------------------------------------------- + | Local Temporary Path + |-------------------------------------------------------------------------- + | + | When exporting and importing files, we use a temporary file, before + | storing reading or downloading. Here you can customize that path. + | + */ + 'local_path' => sys_get_temp_dir(), + + /* + |-------------------------------------------------------------------------- + | Remote Temporary Disk + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup with queues in which you + | cannot rely on having a shared local temporary path, you might + | want to store the temporary file on a shared disk. During the + | queue executing, we'll retrieve the temporary file from that + | location instead. When left to null, it will always use + | the local path. This setting only has effect when using + | in conjunction with queued imports and exports. + | + */ + 'remote_disk' => null, + + ], +]; diff --git a/config/mail.php b/config/mail.php index 3c65eb3..70f8ca6 100644 --- a/config/mail.php +++ b/config/mail.php @@ -56,8 +56,8 @@ */ 'from' => [ - 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), - 'name' => env('MAIL_FROM_NAME', 'Example'), + 'address' => env('MAIL_FROM_ADDRESS', 'postmaster@sandboxa91bd173f77f4925b88358d549e9ad68.mailgun.org'), + 'name' => env('MAIL_FROM_NAME', 'Yididiya'), ], /* diff --git a/config/tinker.php b/config/tinker.php new file mode 100644 index 0000000..0d2bf00 --- /dev/null +++ b/config/tinker.php @@ -0,0 +1,35 @@ + [ + // App\Console\Commands\ExampleCommand::class, + ], + + /* + |-------------------------------------------------------------------------- + | Alias Blacklist + |-------------------------------------------------------------------------- + | + | Typically, Tinker automatically aliases classes as you require them in + | Tinker. However, you may wish to never alias certain classes, which + | you may accomplish by listing the classes in the following array. + | + */ + + 'dont_alias' => [ + 'App\Nova', + ], + +]; diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index a91e1d3..f0f3a33 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -15,13 +15,17 @@ public function up() { Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); - $table->string('name'); + $table->string('first_name'); + $table->string('last_name'); $table->string('email')->unique(); - $table->timestamp('email_verified_at')->nullable(); + $table->integer('phone_number'); + $table->bigInteger('fellowship_id')->unsigned(); + $table->foreign('fellowship_id')->references('fellow_id')->on('fellowships')->onDelete('cascade'); $table->string('password'); $table->rememberToken(); $table->timestamps(); - }); + }); + } /** diff --git a/database/migrations/2019_12_27_135113_contact-message.php b/database/migrations/2019_12_27_135113_contact-message.php new file mode 100644 index 0000000..a979817 --- /dev/null +++ b/database/migrations/2019_12_27_135113_contact-message.php @@ -0,0 +1,28 @@ +bigIncrements('fellow_id'); + $table->string('university_name'); + $table->string('university_city'); + $table->string('campus'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2020_01_08_092732_contacts.php b/database/migrations/2020_01_08_092732_contacts.php new file mode 100644 index 0000000..28fc64a --- /dev/null +++ b/database/migrations/2020_01_08_092732_contacts.php @@ -0,0 +1,45 @@ +bigIncrements('contact_id'); + $table->string('full_name'); + $table->string('phone_number'); + $table->string('email')->unique()->nullable(); + $table->string('acadamic_dep')->nullable(); + $table->string('fellow_dep'); + $table->string('gender'); + $table->string('graduate_year'); + $table->integer('is_under_graduate'); + $table->integer('is_this_year_gc'); + $table->string('id_number'); + $table->longText('photo_url')->nullable(); + $table->bigInteger('fellowship_id')->unsigned(); + $table->foreign('fellowship_id')->references('fellow_id')->on('fellowships')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2020_01_08_122126_register_admins.php b/database/migrations/2020_01_08_122126_register_admins.php new file mode 100644 index 0000000..ac0ed91 --- /dev/null +++ b/database/migrations/2020_01_08_122126_register_admins.php @@ -0,0 +1,38 @@ +bigIncrements('admin_id'); + $table->string('admin_name'); + $table->string('university'); + $table->string('campus'); + $table->string('email')->unique()->nullable(); + $table->string('sex'); + $table->integer('phone_number'); + $table->timestamps(); + });*/ + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2020_01_08_123418_groups.php b/database/migrations/2020_01_08_123418_groups.php new file mode 100644 index 0000000..7c9ef05 --- /dev/null +++ b/database/migrations/2020_01_08_123418_groups.php @@ -0,0 +1,38 @@ +bigIncrements('group_id'); + $table->string('group_name'); + $table->string('description'); + $table->string('created_by'); + $table->bigInteger('contacts_id')->unsigned()->nullable(); + $table->bigInteger('fellowship_id')->unsigned(); + $table->foreign('fellowship_id')->references('fellow_id')->on('fellowships')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2020_01_13_072908_group_contacts.php b/database/migrations/2020_01_13_072908_group_contacts.php new file mode 100644 index 0000000..fb57a2c --- /dev/null +++ b/database/migrations/2020_01_13_072908_group_contacts.php @@ -0,0 +1,44 @@ +bigIncrements('Id'); + $table->string('fullname'); + $table->string('phone'); + $table->string('email')->unique(); + $table->string('acadamic_department'); + $table->string('fellow_department'); + $table->string('gender'); + $table->string('graduation_year'); + $table->bigInteger('fellowship_id')->unsigned(); + $table->foreign('fellowship_id')->references('fellow_id')->on('fellowships')->onDelete('cascade'); + $table->bigInteger('contacts_id')->unsigned()->nullable(); + $table->foreign('contacts_id')->references('group_id')->on('groups')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2020_01_24_080308_create_roles_table.php b/database/migrations/2020_01_24_080308_create_roles_table.php new file mode 100644 index 0000000..9d5535b --- /dev/null +++ b/database/migrations/2020_01_24_080308_create_roles_table.php @@ -0,0 +1,33 @@ +bigIncrements('id'); + $table->string('name'); + $table->string('description'); + $table->timestamps(); + }); */ + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('roles'); + } +} diff --git a/database/migrations/2020_01_24_080655_create_user_role_table.php b/database/migrations/2020_01_24_080655_create_user_role_table.php new file mode 100644 index 0000000..90865a9 --- /dev/null +++ b/database/migrations/2020_01_24_080655_create_user_role_table.php @@ -0,0 +1,33 @@ +bigIncrements('id'); + $table->timestamps(); + $table->integer('user_id'); + $table->integer('role_id'); + }); */ + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_role'); + } +} diff --git a/database/migrations/2020_01_27_124320_add_created_by_to_groups.php b/database/migrations/2020_01_27_124320_add_created_by_to_groups.php new file mode 100644 index 0000000..bbe4676 --- /dev/null +++ b/database/migrations/2020_01_27_124320_add_created_by_to_groups.php @@ -0,0 +1,32 @@ +string('created_by')->after('description'); + }); */ + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + /* Schema::table('groups', function (Blueprint $table) { + // + });*/ + } +} diff --git a/database/migrations/2020_01_29_123929_create_sms_port_table.php b/database/migrations/2020_01_29_123929_create_sms_port_table.php new file mode 100644 index 0000000..502e1c3 --- /dev/null +++ b/database/migrations/2020_01_29_123929_create_sms_port_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->string('port_name'); + $table->string('port_type'); + $table->string('api_key'); + $table->integer('negarit_sms_port_id'); + $table->integer('negarit_campaign_id'); + $table->string('created_by'); + $table->timestamps(); + }); */ + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('sms_port'); + } +} diff --git a/database/migrations/2020_01_29_124013_create_schedule_messages.php b/database/migrations/2020_01_29_124013_create_schedule_messages.php new file mode 100644 index 0000000..bc2a2a5 --- /dev/null +++ b/database/migrations/2020_01_29_124013_create_schedule_messages.php @@ -0,0 +1,50 @@ +bigIncrements('id'); + $table->string('type'); + $table->date('start_date'); + $table->date('end_date'); + $table->time('sent_time'); + $table->string('message'); + $table->bigInteger('group_id')->unsigned(); + $table->foreign('group_id')->references('group_id')->on('groups')->onDelete('cascade'); + $table->bigInteger('fellowship_id')->unsigned(); + $table->foreign('fellowship_id')->references('fellow_id')->on('fellowships')->onDelete('cascade'); + // $table->integer('event_id')->unsigned(); + // $table->foreign('event_id')->references('id')->on('events')->onDelete('cascade'); + $table->bigInteger('sms_port_id')->unsigned(); + $table->foreign('sms_port_id')->references('id')->on('sms_ports')->onDelete('cascade'); + $table->string('phone'); + $table->string('sent_to'); + $table->bigInteger('get_fellowship_id')->unsigned(); + $table->foreign('get_fellowship_id')->references('id')->on('fellowships')->onDelete('cascade'); + $table->boolean('for_under_graduate')->default(true); + $table->string('sent_by'); + $table->timestamps(); + });*/ + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('schedule_messages'); + } +} diff --git a/database/migrations/2020_01_29_124019_create_send_message.php b/database/migrations/2020_01_29_124019_create_send_message.php new file mode 100644 index 0000000..308475f --- /dev/null +++ b/database/migrations/2020_01_29_124019_create_send_message.php @@ -0,0 +1,41 @@ +increments('id'); + $table->string('message'); + $table->string('sent_to'); + $table->boolean('is_sent'); + $table->boolean('is_delivered'); + $table->integer('sms_port_id')->unsigned()->nullable(); + $table->foreign('sms_port_id')->references('id')->on('sms_ports')->onDelete('cascade'); + $table->bigInteger('fellowship_id')->unsigned(); + $table->foreign('fellowship_id')->references('fellow_id')->on('fellowships')->onDelete('cascade'); + $table->boolean('is_removed')->default(false); + $table->string('sent_by'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // Schema::dropIfExists('send_message'); + } +} diff --git a/database/migrations/2020_01_29_181458_create_settings_table.php b/database/migrations/2020_01_29_181458_create_settings_table.php new file mode 100644 index 0000000..45a9461 --- /dev/null +++ b/database/migrations/2020_01_29_181458_create_settings_table.php @@ -0,0 +1,33 @@ +increments('id'); + $table->string('name'); + $table->string('value'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('settings'); + } +} diff --git a/database/migrations/2020_01_30_075038_create_group_message.php b/database/migrations/2020_01_30_075038_create_group_message.php new file mode 100644 index 0000000..0af6dd6 --- /dev/null +++ b/database/migrations/2020_01_30_075038_create_group_message.php @@ -0,0 +1,39 @@ +bigIncrements('id'); + $table->string('message'); + $table->bigInteger('group_id')->unsigned(); + $table->foreign('group_id')->references('group_id')->on('groups')->onDelete('cascade'); + $table->boolean('under_graduate'); + $table->boolean('is_removed')->default(false); + $table->bigInteger('fellowship_id')->unsigned(); + $table->foreign('fellowship_id')->references('fellow_id')->on('fellowships')->onDelete('cascade'); + $table->string('sent_by'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('group_messages'); + } +} diff --git a/database/migrations/2020_02_06_101232_create_contact_group.php b/database/migrations/2020_02_06_101232_create_contact_group.php new file mode 100644 index 0000000..7b25136 --- /dev/null +++ b/database/migrations/2020_02_06_101232_create_contact_group.php @@ -0,0 +1,35 @@ +bigIncrements('id'); + $table->bigInteger('group_id')->unsigned(); + $table->foreign('group_id')->references('group_id')->on('groups')->onDelete('cascade'); + $table->bigInteger('contact_id')->unsigned(); + $table->foreign('contact_id')->references('contact_id')->on('contacts')->onDelete('cascade'); + $table->timestamps(); + });*/ + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // Schema::dropIfExists('contact_groups'); + } +} diff --git a/database/migrations/2020_02_07_140543_create_fellow_message.php b/database/migrations/2020_02_07_140543_create_fellow_message.php new file mode 100644 index 0000000..fe2e248 --- /dev/null +++ b/database/migrations/2020_02_07_140543_create_fellow_message.php @@ -0,0 +1,38 @@ +bigIncrements('id'); + $table->string('message'); + $table->bigInteger('fellowship_id')->unsigned()->nullable(); + $table->foreign('fellowship_id')->references('fellow_id')->on('fellowships')->onDelete('cascade'); + $table->boolean('under_graduate'); + $table->boolean('is_removed')->default(false); + $table->string('sent_by'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('fellow_message'); + } +} diff --git a/database/migrations/2020_02_21_081913_create_recieved_messages.php b/database/migrations/2020_02_21_081913_create_recieved_messages.php new file mode 100644 index 0000000..d8b8d28 --- /dev/null +++ b/database/migrations/2020_02_21_081913_create_recieved_messages.php @@ -0,0 +1,37 @@ +bigIncrements('message_id'); + $table->string('message'); + $table->string('sent_from')->unique(); + $table->string('sender_name'); + $table->string('received_date'); + $table->bigInteger('fellowship_id')->unsigned()->nullable(); + $table->foreign('fellowship_id')->references('fellow_id')->on('fellowships')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('recieved_messages'); + } +} diff --git a/database/migrations/2020_02_21_085820_create_sms_votes.php b/database/migrations/2020_02_21_085820_create_sms_votes.php new file mode 100644 index 0000000..64a8cd5 --- /dev/null +++ b/database/migrations/2020_02_21_085820_create_sms_votes.php @@ -0,0 +1,34 @@ +bigIncrements('id'); + $table->string('message'); + $table->date('start_date'); + $table->date('end_date'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('sms_votes'); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 91cb6d1..43fc949 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -11,6 +11,7 @@ class DatabaseSeeder extends Seeder */ public function run() { - // $this->call(UsersTableSeeder::class); + // $this->call(RoleTableSeeder::class); + $this->call(UserTableSeeder::class); } } diff --git a/database/seeds/RoleTableSeeder.php b/database/seeds/RoleTableSeeder.php new file mode 100644 index 0000000..0b2fd5f --- /dev/null +++ b/database/seeds/RoleTableSeeder.php @@ -0,0 +1,25 @@ +name ='User'; + $role_user->description= 'A fellow admin'; + $role_user->save(); + + $role_admin = new Role(); + $role_admin->name ='Admin'; + $role_admin->description= 'A System admin'; + $role_admin->save(); + } +} diff --git a/database/seeds/UserTableSeeder.php b/database/seeds/UserTableSeeder.php new file mode 100644 index 0000000..e681cce --- /dev/null +++ b/database/seeds/UserTableSeeder.php @@ -0,0 +1,28 @@ +first(); + + $user = new User(); + $user->first_name='yididiya'; + $user->last_name='kassahun'; + $user->email='yididiya1@gmail.com'; + $user->phone_number='0943342812'; + $user->fellowship_id='5'; + $user->password=bcrypt('1234'); + $user->save(); + $user->roles()->attach($role_admin); + } +} diff --git a/nullable() b/nullable() new file mode 100644 index 0000000..e69de29 diff --git a/onDelete('cascade') b/onDelete('cascade') new file mode 100644 index 0000000..e69de29 diff --git a/public/index.php b/public/index.php index 4584cbc..ca91d48 100644 --- a/public/index.php +++ b/public/index.php @@ -9,6 +9,23 @@ define('LARAVEL_START', microtime(true)); +if (isset($_SERVER['HTTP_ORIGIN'])) { + header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); + header('Access-Control-Allow-Credentials: true'); + header('Access-Control-Max-Age: 86400'); // cache for 1 day +} +// Access-Control headers are received during OPTIONS requests +if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { + + if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) + header("Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS"); + + if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) + header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); + + exit(0); +} + /* |-------------------------------------------------------------------------- | Register The Auto Loader diff --git a/public/uploads/1581930438jpg b/public/uploads/1581930438jpg new file mode 100644 index 0000000..9a08692 Binary files /dev/null and b/public/uploads/1581930438jpg differ diff --git a/public/uploads/1581931115jpg b/public/uploads/1581931115jpg new file mode 100644 index 0000000..98879fc Binary files /dev/null and b/public/uploads/1581931115jpg differ diff --git a/public/uploads/1581931423.jpg b/public/uploads/1581931423.jpg new file mode 100644 index 0000000..98879fc Binary files /dev/null and b/public/uploads/1581931423.jpg differ diff --git a/public/uploads/1581932138.jpg b/public/uploads/1581932138.jpg new file mode 100644 index 0000000..9a08692 Binary files /dev/null and b/public/uploads/1581932138.jpg differ diff --git a/public/uploads/1581932206.jpg b/public/uploads/1581932206.jpg new file mode 100644 index 0000000..eadc5dc Binary files /dev/null and b/public/uploads/1581932206.jpg differ diff --git a/public/uploads/1581932428.jpg b/public/uploads/1581932428.jpg new file mode 100644 index 0000000..eadc5dc Binary files /dev/null and b/public/uploads/1581932428.jpg differ diff --git a/public/uploads/1581932805.jpg b/public/uploads/1581932805.jpg new file mode 100644 index 0000000..9a08692 Binary files /dev/null and b/public/uploads/1581932805.jpg differ diff --git a/public/uploads/1581935968.jpg b/public/uploads/1581935968.jpg new file mode 100644 index 0000000..eadc5dc Binary files /dev/null and b/public/uploads/1581935968.jpg differ diff --git a/public/uploads/1581945821.jpg b/public/uploads/1581945821.jpg new file mode 100644 index 0000000..40aeda1 Binary files /dev/null and b/public/uploads/1581945821.jpg differ diff --git a/resources/views/mail.blade.php b/resources/views/mail.blade.php new file mode 100644 index 0000000..a663ce2 --- /dev/null +++ b/resources/views/mail.blade.php @@ -0,0 +1 @@ +http://localhost:4200/register \ No newline at end of file diff --git a/resources/views/reset_mail.blade.php b/resources/views/reset_mail.blade.php new file mode 100644 index 0000000..ad2a873 --- /dev/null +++ b/resources/views/reset_mail.blade.php @@ -0,0 +1 @@ +http://localhost:4200/reset \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index c641ca5..e3b17b5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -13,6 +13,364 @@ | */ -Route::middleware('auth:api')->get('/user', function (Request $request) { - return $request->user(); +Route::get('sample-restful-apis', 'EmailController@mail'); + + +// >>>>>>>>>>>>>>>>>>>> Authentication Routes <<<<<<<<<<<<<<<<<<<< + +Route::post('/register', [ + 'uses'=> 'UserController@register' + ]); + + + Route::post('/login', [ + 'uses'=> 'Api\AuthController@login', + ]); + + // *********||||||||| Guard ||||||||||************ + +/*Route::middleware('auth:api')->get() { + +});*/ + Route::post('/assignRole/{value}/{id}', [ + 'uses' => 'AppController@postAdminAssignRoles', + ]); + + // >>>>>>>>>>>>>>>>>>> Admin Route <<<<<<<<<<<<<<<<<<<<<<<< + + Route::get('/getAdmin',[ + 'uses' => 'RegisterAdminController@getAdmins' + ]); + + Route::delete('/deleteAdmin/{id}',[ + 'uses' => 'RegisterAdminController@deleteAdmin' + ]); + + Route::get('/admin',[ + 'uses' => 'AppController@adminPage', + 'as' => 'admin', + 'middleware' => 'roles', + 'roles' => ['Admin'] + ]); + +// >>>>>>>>>>>>>>>> contact Routes <<<<<<<<<<<<<<<<<<<<<<< + +Route::group(['prefix' => 'contact'], function() { + Route::post('/', [ + 'uses' => 'ContactController@addContact' + ]); + + Route::get('/{id}', [ + 'uses' => 'ContactController@getContact' + ]); + Route::delete('/{id}', [ + 'uses' => 'ContactController@deleteContact' + ]); + + Route::patch('/{id}', [ + 'uses' => 'ContactController@updateContact', + ]); }); + + +Route::get('/contacts/{id}', [ + 'uses' => 'ContactController@getContacts' +]); + +// >>>>>>>>>>>>>>>>>>> Get Admins Route <<<<<<<<<<<<<<<<<<<<<<< + +Route::get('/getAdmins',[ + 'uses' => 'RegisterAdminController@getAdmins', +]); + +// >>>>>>>>>>>>>>>>> Group Routes <<<<<<<<<<<<<<<<<<<<<<<<<<< + +Route::group(['prefix' => 'group'], function() { + + Route::post('/', [ + 'uses' => 'GroupController@addGroup', + ]); + Route::get('/{id}', [ + 'uses' => 'GroupController@getGroup', + ]); + Route::delete('/{id}',[ + 'uses' => 'GroupController@deleteGroup', + ]); + + }); + + Route::group(['prefix' => 'groupcontact'], function(){ + Route::post('/{id}', [ + 'uses' => 'GroupedContactController@addGroupedContact', + ]); + Route::get('/{id}', [ + 'uses' => 'GroupedContactController@getGroupedContact', + ]); + Route::delete('/{id}',[ + 'uses' => 'GroupedContactController@deleteGroupedContact', + ]); + Route::patch('/{id}', [ + 'uses' => 'GroupedContactController@updateGroupedContact' + ]); + + }); + + + Route::get('/groups', [ + 'uses' => 'GroupController@getGroups', +]); + +Route::get('/getGender',[ + 'uses' => 'GroupedContactController@getGenders' +]); + + // >>>>>>>>>>>>>>>>>>> Fellow Routes <<<<<<<<<<<<<<<<<<<<<<< + + Route::group(['prefix'=> 'fellow'],function() { + + Route::post('/', [ + 'uses' => 'FellowshipController@addFellow' + ]); + }); +/*Route::post('/register', [ + 'uses' => 'RegisterAdminController@RegisterAdmin' + ]); */ + +// >>>>>>>>>>>>>>>>>>>>> Dashboard <<<<<<<<<<<<<<<<<<<<<<<<<< + +Route::get('/under_graduates_number', [ + 'uses' => 'DashboardController@underGraduateMembersNumber', + ]); +Route::get('/totalGroupedContact/{id}',[ + 'uses' => 'GroupContactCountController@GroupMemberCount' +]); + +Route::get('/totalGroups',[ + 'uses' => 'DashboardController@numberOfGroups', +]); + +Route::get('/gendercount',[ + 'uses' => 'DashboardController@getGenderCount' +]); + +Route::get('/current_user',[ + 'uses' => 'DashboardController@current_user' +]); + +Route::get('/current_univ',[ + 'uses' => 'DashboardController@current_univ' +]); + +Route::get('/count_sentMessage',[ + 'uses' => 'DashboardController@count_sentMessage' +]); + +Route::get('/messageCost',[ + 'uses' => 'DashboardController@messageCost' +]); +// --------------------- Super Dashboard ----------------- // + +Route::get('/TotalnumberOfGroups',[ + 'uses' => 'SuperDashboardController@TotalnumberOfGroups' +]); +Route::get('/campusTotalContact',[ + 'uses' => 'SuperDashboardController@campusTotalContact' +]); +Route::get('/total_sentMessage',[ + 'uses' => 'SuperDashboardController@count_sentMessage' +]); +Route::get('/all_group_message',[ + 'uses' => 'SuperDashboardController@total_group_message' +]); +Route::get('/TotalunderGraduateMembers',[ + 'uses' => 'SuperDashboardController@TotalunderGraduateMembersNumber' +]); + +Route::get('/totalMessageCost',[ + 'uses'=> 'SuperDashboardController@totalMessageCost' +]); + +Route::get('/get_sentmsg',[ + 'uses'=> 'SuperDashboardController@get_sentmsg' +]); + +Route::get('/get_recivemsgs',[ + 'uses' => 'SuperDashboardController@get_Recivemsgs' +]); + +//........................................................... +Route::post('/importContact',[ + 'uses' => 'ContactController@importContact' +]); + +Route::get('/exportContact',[ + 'uses' => 'ContactController@exportContact', + +]); +Route::get('/importContact',[ + 'uses'=> 'ContactController@importContact', +]); + +Route::get('/exportGroupedContact',[ + 'uses' => 'GroupedContactController@exportGroupedContact' +]); + +Route::get('/getprofile/{id}',[ + 'uses'=> 'ContactController@getProfile', +]); + +Route::post('/upload_photo/{id}',[ + 'uses'=> 'ContactController@upload_photo' +]); + +Route::delete('/deleteProfile/{id}',[ + 'uses'=>'ContactController@deleteProfile' +]); +// ************* |||| Email |||| ************ + + +Route::get("/email", [ + 'uses' => 'sendMailController@sendMail' +]); + +Route::get('/sendResetLink/{email}',[ + 'uses' => 'sendMailController@sendResetLink' +]); + +Route::get('/sendmail/{email}',[ + 'uses' => 'mailcontroller@send' +]); +// {{password Reset}} +Route::get('/passwordReset/{email}/{pass}',[ + 'uses' => 'PasswordResetController@passwordReset' +]); + +// **************** ||||||| Messaging Routes ||||||| *************** + + +Route::group(['prefix' => 'message'], function(){ + Route::post('/', [ + 'uses' => 'MessageController@sendContactMessage', + ]); + Route::get('/{id}', [ + 'uses' => 'MessageController@getContactMessage', + ]); + Route::delete('/{id}', [ + 'uses' => 'MessageController@removeContactMessage', + ]); + Route::post('/search', [ + 'uses' => "MessageController@searchContactMessage", + ]); +}); + +//******************** |||||||| Messaging ||||||||| ******************** + +Route::group(['prefix' => 'message'], function(){ + Route::post('/', [ + 'uses' => 'MessagesController@sendContactMessage', + ]); + Route::get('/', [ + 'uses' => 'MessagesController@getContactsMessage', + ]); + Route::delete('/{id}', [ + 'uses' => 'MessagesController@removeContactMessage', + ]); + Route::post('/search', [ + 'uses' => "MessagesController@searchContactMessage", + ]); +}); + + +//---------------||||||||| Group Message ||||||||||------------------- + +Route::group(['prefix' => 'group-message'], function() { + Route::post('/', [ + 'uses' => 'MessagesController@sendGroupMessage' + ]); + Route::get('/', [ + 'uses' => 'MessagesController@getGroupMessage' + ]); + Route::delete('/{id}', [ + 'uses' => 'MessagesController@deleteTeamMessage' + ]); + Route::post('/search', [ + 'uses' => 'MessagesController@searchTeamMessage', + ]); +}); +Route::get('/group-messages', [ + 'uses' => 'MessagesController@getTeamMessage' +]); + +//************Bulk Message**************/ + +Route::post('/sendBulkMessage', [ + 'uses' => 'MessagesController@sendBulkMessage' +]); + +Route::get('/getBulkMessage',[ + 'uses' => 'MessagesController@getBulkMessage' +]); + +Route::post('/smsVote',[ + 'uses' => 'MessagesController@smsVote' +]); + +Route::get('/getVote',[ + 'uses' => 'MessagesController@getVote' +]); + +//************** Negarit Recieved Messages****************/ + +Route::post('/recieveNegaritMessage',[ + 'uses' => 'MessagesController@getNegaritRecievedMessage' +]); +//****************>>>>>>>>> Messaging Port <<<<<<<<<<<<*****************/ + +Route::post('/storeSmsPort',[ + 'uses' => 'NegaritController@storeSmsPort' +]); + +Route::get('/sms-ports', [ + 'uses' => 'NegaritController@getSmsPorts', +]); + +Route::get('/port_name', [ + 'uses' => 'SettingController@getSmsPortName', +]); +// *****************>>>>>>>>> Settings <<<<<<<<<<<<<******************/ + +Route::group(['prefix' => 'setting'], function () { + Route::post('/', [ + 'uses' => 'SettingController@createSetting', // worked + ]); + Route::get('/{id}', [ + 'uses' => 'SettingController@getSetting', // worked + ]); + Route::patch('/{id}', [ + 'uses' => 'SettingController@updateSetting', + ]); + Route::delete('/{id}', [ + 'uses' => 'SettingController@removeSetting', + ]); +}); + +Route::get('/settings', [ + 'uses' => 'SettingController@getSettings', // worked +]); +Route::get('/campaigns', [ + 'uses' => 'SettingController@getCampaigns', +]); +Route::get('/get-sms-ports', [ + 'uses' => 'SettingController@getSmsPorts', +]); + + +// *********** || *** Scheduled Message *** || ******* + +Route::post('/addMessageForGroup',[ + 'uses' => 'ScheduledMessageController@addMessageForGroup' +]); + +Route::get('/get_msg',[ + 'uses' => 'DashboardController@get_msg' +]); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 810aa34..eb3bdbf 100644 --- a/routes/web.php +++ b/routes/web.php @@ -14,3 +14,4 @@ Route::get('/', function () { return view('welcome'); }); + diff --git a/string('acadamic_department') b/string('acadamic_department') new file mode 100644 index 0000000..e69de29 diff --git a/string('fellow_department') b/string('fellow_department') new file mode 100644 index 0000000..e69de29 diff --git a/string('fullname') b/string('fullname') new file mode 100644 index 0000000..e69de29 diff --git a/string('gender') b/string('gender') new file mode 100644 index 0000000..e69de29 diff --git a/string('graduation_year') b/string('graduation_year') new file mode 100644 index 0000000..e69de29 diff --git a/string('phone') b/string('phone') new file mode 100644 index 0000000..e69de29 diff --git a/timestamps() b/timestamps() new file mode 100644 index 0000000..e69de29 diff --git a/unique() b/unique() new file mode 100644 index 0000000..e69de29