diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fadc7c1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/vendor +.env diff --git a/app/Console/Commands/.gitkeep b/app/Console/Commands/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..ad6e311 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,29 @@ +wantsJson() && !($e instanceof ValidationException)) { + if(is_object($e)) { + $e = substr(strrchr(get_class($e), "\\"), 1); + } + + return response()->json([ + 'code' => method_exists($e, 'getStatusCode') ? $e->getStatusCode() : 500, + 'message' => empty($e) ? 'Server error' : $e + ]); + } + + return parent::render($request, $e); + } +} diff --git a/app/Http/Controllers/ConstantsController.php b/app/Http/Controllers/ConstantsController.php new file mode 100644 index 0000000..35c4cca --- /dev/null +++ b/app/Http/Controllers/ConstantsController.php @@ -0,0 +1,55 @@ +json(School::with('level')->get()); + } + + public function addSchool(Request $request) { + $this->validate($request, [ + 'name' => 'required', + 'city' => 'required', + 'level' => 'required' + ]); + + if(School::where('name', $request['name']) + ->where('city', $request['city']) + ->where('level', $request['level']) + ->first()) { + return MyResponse::show('School already exists', 400); + } + + return response()->json(School::create($request->all())); + } + + public function subjects() { + return response()->json(Subject::all()); + } + + public function addSubject(Request $request) { + $this->validate($request, [ + 'name' => 'required' + ]); + + if(Subject::where('name', $request['name']) + ->first()) { + return MyResponse::show('Subject already exists', 400); + } + + return response()->json(Subject::create($request->all())); + } + + public function levels() { + return response()->json(Level::all()); + } +} +?> diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..0ccb918 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,10 @@ +json(Login::all()); + } +} +?> diff --git a/app/Http/Controllers/MyResponse.php b/app/Http/Controllers/MyResponse.php new file mode 100644 index 0000000..e62ae80 --- /dev/null +++ b/app/Http/Controllers/MyResponse.php @@ -0,0 +1,22 @@ +toArray(); + } + + $data = [ + 'code' => $code, + 'message' => $message + ]; + + return new JsonResponse($data, 200, [], 0); + } +} +?> diff --git a/app/Http/Controllers/SessionsController.php b/app/Http/Controllers/SessionsController.php new file mode 100644 index 0000000..3987fee --- /dev/null +++ b/app/Http/Controllers/SessionsController.php @@ -0,0 +1,418 @@ +type != 'student') { + return MyResponse::show('Only student can create session', 400); + } + + $fields = [ + 'lecture' => 'required', + 'date' => 'required', + 'time' => 'required', + 'location' => 'required', + 'mentor' => 'required', + 'subject' => 'required' + ]; + + $this->validate($request, $fields); + + foreach($fields as $key => $value) { + $fields[$key] = $request[$key]; + } + + $fields['student'] = $student->id; + + $school = Junction::where('user', $fields['student'])->first()->school; + $fields['level'] = School::findOrFail($school)->level; + + if(strtotime($fields['date']) <= strtotime('now')) { + return MyResponse::show('Date must be in future', 400); + } + + $day = strtolower(date('D', strtotime($fields['date']))); + + $mentor = User::where('type', 'mentor')->findOrFail($fields['mentor']); + + $interval = Interval::findOrFail($mentor->interval)[$day]; + + $intervalBegin = strtotime(substr($interval, 0, strpos($interval, ','))); + $intervalEnd = strtotime(substr($interval, strpos($interval, ',') + 1)); + + $time = $fields['time']; + unset($fields['time']); + + $sTimeBegin = substr($time, 0, strpos($time, ',')); + $sTimeEnd = substr($time, strpos($time, ',') + 1); + + if(!preg_match('/(2[0-3]|[01][0-9]):([0-5][0-9])/', $sTimeBegin) + || !preg_match('/(2[0-3]|[01][0-9]):([0-5][0-9])/', $sTimeEnd)) { + return myresponse::show('Invalid time format', 400); + } + + $fields['timeBegin'] = $sTimeBegin; + $fields['timeEnd'] = $sTimeEnd; + + $timeBegin = strtotime($sTimeBegin); + $timeEnd = strtotime($sTimeEnd); + + if($timeBegin > $timeEnd) { + return MyResponse::show('Starting time must be before ending time', 400); + } + + $duration = ceil(abs($timeEnd - $timeBegin) / 3600); + + if($duration < 1) { + return MyResponse::show('Session duration minimum is one hour', 400); + } + + if($timeBegin < $intervalBegin + || $timeBegin > $intervalEnd + || $timeEnd > $intervalEnd) { + return MyResponse::show('Mentor is not available in specified time', 400); + } + + $fields['price'] = $mentor->price * $duration; + + if(Session::where('lecture', $fields['lecture']) + ->where('timeBegin', $fields['timeBegin']) + ->where('timeEnd', $fields['timeEnd']) + ->where('date', $fields['date']) + ->where('location', $fields['location']) + ->where('mentor', $fields['mentor']) + ->where('subject', $fields['subject']) + ->first()) { + return MyResponse::show('Session already exists', 400); + } + + $name = $student->firstName . ' ' . $student->lastName; + + $session = Session::create($fields); + + $this->notify('New session', $name . ' has created a session.', ['session' => $session->id], $mentor->fcmToken); + + return response()->json($session); + } + + public function update(Request $request, $id) { + $session = Session::findOrFail($id); + + if($session->status != 'accepted') { + return MyResponse::show('Session must be accepted', 400); + } + + if(!is_null($session->dateEdit) + || !is_null($session->timeBeginEdit) + || !is_null($session->timeEndEdit) + || !is_null($session->locationEdit)) { + return MyResponse::show('Previous update is not reviewed', 400); + } + + $time = $request['time']; + + $timeBegin = substr($time, 0, strpos($time, ',')); + $timeEnd = substr($time, strpos($time, ',') + 1); + + if(isset($request['time']) && (!preg_match('/(2[0-3]|[01][0-9]):([0-5][0-9])/', $timeBegin) + || !preg_match('/(2[0-3]|[01][0-9]):([0-5][0-9])/', $timeEnd))) { + return myresponse::show('Invalid time format', 400); + } + + unset($request['time']); + + $request['timeBegin'] = $timeBegin . ':00'; + $request['timeEnd'] = $timeEnd . ':00'; + + $fields = [ + 'date', + 'timeBegin', + 'timeEnd', + 'location' + ]; + + $old = [ + $session->date, + $session->timeBegin, + $session->timeEnd, + $session->location + ]; + + $edit = []; + + for($i = 0; $i < sizeof($fields); $i++) { + $new = $request[$fields[$i]]; + + if(!empty($new)) { + $edit[$fields[$i] . 'Edit'] = $new; + }else { + $edit[$fields[$i] . 'Edit'] = $old; + } + } + + $currentUser = UsersController::currentUser(); + + if($currentUser->type != 'mentor') { + return MyResponse::show('Only mentor can update session', 400); + } + + if($currentUser->id != $session->mentor) { + return MyResponse::show('Mentor not authorized', 400); + } + + $user = User::findOrFail($session->student); + + $name = $currentUser->firstName . ' ' . $currentUser->lastName; + + Session::where('id', $id)->update($edit); + + $this->notify('Updated session', $name . ' has changed session details.', ['session' => $id], $user->fcmToken); + + return response()->json(Session::find($id)); + } + + public function decideEdit($id, $status) { + if($status != 'accept' && $status != 'decline') { + return MyResponse::show('Invalid action', 400); + } + + $session = Session::findOrFail($id); + + if($session->status != 'accepted') { + return MyResponse::show('Session must be accepted', 400); + } + + if(is_null($session->dateEdit) + && is_null($session->timeBeginEdit) + && is_null($session->timeEndEdit) + && is_null($session->locationEdit)) { + return MyResponse::show('Session is not updated', 400); + } + + $currentUser = UsersController::currentUser(); + + if($currentUser->type != 'student') { + return MyResponse::show('Only student can review session update', 400); + } + + if($currentUser->id != $session->student) { + return MyResponse::show('Student not authorized', 400); + } + + $user = User::findOrFail($session->mentor); + + $name = $currentUser->firstName . ' ' . $currentUser->lastName; + + if($status == 'accept') { + Session::where('id', $id)->update([ + 'date' => $session->dateEdit, + 'timeBegin' => $session->timeBeginEdit, + 'timeEnd' => $session->timeEndEdit, + 'location' => $session->locationEdit, + ]); + + $this->notify('Accepted changes', $name . ' has accepted session changes.', ['session' => $id], $user->fcmToken); + }else { + $this->notify('Declined changes', $name . ' has declined session changes.', ['session' => $id], $user->fcmToken); + } + + Session::where('id', $id)->update([ + 'dateEdit' => null, + 'timeBeginEdit' => null, + 'timeEndEdit' => null, + 'locationEdit' => null + ]); + + return MyResponse::show('Success', 200); + } + + public function decide($id, $status) { + if($status != 'accept' && $status != 'decline') { + return MyResponse::show('Invalid action', 400); + } + + $session = Session::findOrFail($id); + + if($status == 'accept') { + if($session->status == 'declined') { + return MyResponse::show('Session cannot be declined', 400); + }else if($session->status == 'accepted') { + return MyResponse::show('Session is already accepted', 400); + } + }else { + if($session->status == 'accepted') { + return MyResponse::show('Session cannot be accepted', 400); + }else if($session-status == 'declined') { + return MyResponse::show('Session is already declined', 400); + } + } + + $currentUser = UsersController::currentUser(); + + if($currentUser->type != 'mentor') { + return MyResponse::show('Only mentor can ' . $status . ' session', 400); + } + + if($currentUser->id != $session->mentor) { + return MyResponse::show('Mentor not authorized', 400); + } + + $name = $currentUser->firstName . ' ' . $currentUser->lastName; + + $user = User::findOrFail($session->student); + + if($status == 'accept') { + Session::where('id', $id)->update(['status' => 'accepted']); + + $this->notify('Accepted session', $name . ' has accepted a session.', ['session' => $id], $user->fcmToken); + }else { + Session::where('id', $id)->update(['status' => 'declined']); + + $this->notify('Declined session', $name . ' has declined a session.', ['session' => $id], $user->fcmToken); + } + + return MyResponse::show('Success', 200); + } + + public function cancel($id) { + $session = Session::findOrFail($id); + + if($session->status != 'accepted') { + return MyResponse::show('Session must be accepted', 400); + } + + if($session->canceled == 1) { + return MyResponse::show('Session is already canceled', 400); + } + + $currentUser = UsersController::currentUser(); + + $user = User::findOrFail($session->student); + + if($currentUser->type == 'student') { + $user = User::findOrFail($session->mentor); + } + + if($currentUser->id != $session->student + && $currentUser->id != $session->mentor) { + return MyResponse::show('User not authorized', 400); + } + + $name = $currentUser->firstName . ' ' . $currentUser->lastName; + + Session::where('id', $id)->update(['canceled' => 1]); + + $this->notify('Canceled session', $name . ' has canceled a session.', ['session' => $id], $user->fcmToken); + + return MyResponse::show('Success', 200); + } + + public function review(Request $request, $id) { + $this->validate($request, [ + 'rating' => 'required', + 'description' => 'required' + ]); + + $session = Session::findOrFail($id); + + $currentUser = UsersController::currentUser(); + + if($currentUser->type != 'student') { + return MyResponse::show('Only student can review session', 400); + } + + if($currentUser->id != $session->student) { + return MyResponse::show('Student not authorized', 400); + } + + if($session->status != 'accepted') { + return MyResponse::show('Session must be accepted', 400); + } + + if($session->canceled == 1) { + return MyResponse::show('Session must not be canceled', 400); + } + + if(isset($session->review)) { + return MyResponse::show('Session already has a review', 400); + } + + if($request['rating'] < 1 || $request['rating'] > 5) { + return MyResponse::show('Rating is out of bounds', 400); + } + + $review = Review::create($request->all()); + + Session::where('id', $id)->update(['review' => $review->id]); + + return response()->json($review); + } + + public function get($id) { + $session = $this->getSession($id); + $user = UsersController::currentUser(); + + if($session->student != $user->id && $session->mentor != $user->id) { + return MyResponse::show('User not authorized', 400); + } + + return response()->json($session); + } + + public function all() { + $user = UsersController::currentUser(); + + return response()->json(Session::where($user->type, $user->id)->get()); + } + + private function getSession($id) { + return Session::with('student', 'mentor', 'review', 'level', 'subject')->findOrFail($id); + } + + private function notify($title, $body, $data, $token) { + //todo uncomment before release + return; + + $optionBuilder = new OptionsBuilder(); + $optionBuilder->setTimeToLive(60*20); + + $notificationBuilder = new PayloadNotificationBuilder($title); + $notificationBuilder->setBody($body) + ->setSound('default'); + + $dataBuilder = new PayloadDataBuilder(); + $dataBuilder->addData($data); + + $option = $optionBuilder->build(); + $notification = $notificationBuilder->build(); + $data = $dataBuilder->build(); + + $downstreamResponse = FCM::sendTo($token, $option, $notification, $data); + + $downstreamResponse->numberSuccess(); + $downstreamResponse->numberFailure(); + $downstreamResponse->numberModification(); + + $downstreamResponse->tokensToDelete(); + $downstreamResponse->tokensToModify(); + $downstreamResponse->tokensToRetry(); + } +} +?> diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php new file mode 100644 index 0000000..9b7e011 --- /dev/null +++ b/app/Http/Controllers/UsersController.php @@ -0,0 +1,477 @@ + 'required', + 'password' => 'required', + 'firstName' => 'required', + 'lastName' => 'required', + 'type' => 'required' + ]; + + $this->validate($request, $fields); + + if(User::where('email', $request['email'])->first()) { + return MyResponse::show('Email is already in use', 400); + } + + if($request['type'] == 'mentor') { + $fields = array_merge($fields, [ + 'interval' => 'required', + 'price' => 'required', + 'location' => 'required', + 'promoted' => 'required', + 'schools' => 'required', + 'subjects' => 'required', + 'levels' => 'required' + ]); + }else if($request['type'] == 'mentor') { + $fields = array_merge($fields, [ + 'school' => 'required', + 'grade' => 'required' + ]); + }else { + return MyResponse::show('Invalid type', 400); + } + + $this->validate($request, $fields); + + $temp = []; + + if($request['type'] == 'mentor') { + if(sizeof($request['interval']) != 7) { + return MyResponse::show('Interval must contain whole week', 400); + } + + $model = new Interval(); + + $days = $model->getColumns(); + + $count = 0; + + foreach($request['interval'] as $day => $i) { + $count++; + + if($day != $days[$count]) { + return MyResponse::show('Invalid day specified in interval', 400); + } + + $timeBegin = substr($i, 0, strpos($i, ',')); + $timeEnd = substr($i, strpos($i, ',') + 1); + + if(!preg_match('/(2[0-3]|[01][0-9]):([0-5][0-9])/', $timeBegin) + || !preg_match('/(2[0-3]|[01][0-9]):([0-5][0-9])/', $timeEnd)) { + return myresponse::show('Invalid time format', 400); + } + + $timeBegin = strtotime($timeBegin); + $timeEnd = strtotime($timeEnd); + + if($timeBegin > $timeEnd) { + return MyResponse::show('Starting time must be before ending time', 400); + } + } + + $interval = Interval::create($request['interval']); + $request['interval'] = $interval->id; + + $columns = [ + 'school', + 'subject', + 'level' + ]; + + foreach($columns as $column) { + $temp[$column] = explode(',', $request[$column . 's']); + unset($request[$column . 's']); + } + }else { + $temp['school'] = $request['school']; + unset($request['school']); + } + + $create = []; + + foreach($fields as $key => $value) { + $create[$key] = $request[$key]; + } + + $create['password'] = $this->hashPassword($request['password']); + $create['accessToken'] = $this->createToken(); + + $user = User::create($create); + + if($request['type'] == 'mentor') { + foreach($temp as $key => $value) { + switch($key) { + case 'school': + $model = new School(); + break; + case 'subject': + $model = new Subject(); + break; + case 'level'; + $model = new Level(); + break; + } + + foreach($value as $entry) { + if(Junction::where('user', $user->id) + ->where($key, $entry) + ->first()) { + continue; + } + + if(!$model->where('id', $entry)->first()) { + return MyResponse::show('Invalid ' . $key, 400); + } + + Junction::create([ + 'user' => $user->id, + $key => $entry + ]); + } + } + }else { + if(isset($request['school']) + && !Junction::where('user', $user->id) + ->where('school', $request['school']) + ->first()) { + + if(School::where('id', $request['school'])->first()) { + return MyResponse::show('Invalid school', 400); + } + + Junction::create([ + 'user' => $user->id, + 'school' => $temp['school'] + ]); + } + } + + return response()->json(User::find($user->id)); + } + + public function login(Request $request) { + $this->validate($request, [ + 'email' => 'required', + 'password' => 'required', + 'token' => 'required' + ]); + + $user = User::where('email', $request['email']) + ->firstOrFail(); + + if(!app('hash')->check($request['password'], $user->password)) { + return MyResponse::show('Incorrect password', 400); + } + + if($user->active == 1) { + return MyResponse::show('User is already active', 400); + } + + $accessToken = $this->createToken(); + + User::where('id', $user->id) + ->update([ + 'accessToken' => $accessToken, + 'fcmToken' => $request['token'], + 'active' => 1 + ]); + + $login = Login::create([ + 'user' => $user->id, + 'ip' => $request->ip() + ]); + + return response()->json([ + 'accessToken' => $accessToken, + 'login' => $login + ]); + } + + public function logout() { + $user = UsersController::currentUser(); + + if($user->active == 0) { + return MyResponse::show('User must be active', 400); + } + + $user->active = 0; + + return MyResponse::show('Success', 200); + } + + public function update(Request $request) { + $user = UsersController::currentUser(); + + $fields = [ + 'firstName', + 'lastName' + ]; + + if($user->type == 'mentor') { + $fields = array_merge($fields, [ + 'interval', + 'price', + 'location', + 'promoted' + ]); + + $columns = [ + 'school', + 'subject', + 'level' + ]; + + foreach($columns as $column) { + $key = $column . 's'; + + if(isset($request[$key])) { + if(empty($request[$key])) { + return MyResponse::show($key . ' are required', 400); + } + + $temp[$column] = explode(',', $request[$key]); + + Junction::where('user', $user->id) + ->whereNotNull($column) + ->delete(); + } + } + + foreach($temp as $key => $value) { + $model = null; + + switch($key) { + case 'school': + $model = new School(); + break; + case 'subject': + $model = new Subject(); + break; + case 'level'; + $model = new Level(); + break; + } + + foreach($value as $entry) { + if(!$model->where('id', $entry)->first()) { + return MyResponse::show('Invalid ' . $key, 400); + } + + Junction::create([ + 'user' => $user->id, + $key => $entry + ]); + } + } + }else { + if(isset($request['school'])) { + if(empty($request['school'])) { + return MyResponse::show('School is required', 400); + } + + Junction::where('user', $user->id) + ->whereNotNull('school') + ->delete(); + + if(!School::where('id', $request['school'])->first()) { + return MyResponse::show('Invalid school', 400); + } + + Junction::create([ + 'user' => $user->id, + 'school' => $request['school'] + ]); + } + + $fields = array_merge($fields, [ + 'grade' + ]); + } + + $edit = []; + + foreach($fields as $field) { + $new = $request[$field]; + + if(empty($new)) { + continue; + } + + $edit[$field] = $new; + } + + $user->update($edit); + + return response()->json($user); + } + + public function setImage(Request $request) { + $user = UsersController::currentUser(); + + $this->validate($request, ['file' => 'required']); + + $file = $request->file('file'); + + $name = $user->id . '.' . $file->getClientOriginalExtension(); + + $path = 'images/profile'; + + if(!File::exists($path)) { + File::makeDirectory($path); + } + + $file->move($path, $name); + + $user->image = $name; + + return response()->json($user); + } + + public function getImage($id) { + return response()->file(User::findOrFail($id)->image); + } + + public function delete() { + $user = UsersController::currentUser(); + + $user->active = 0; + $user->delete(); + + return MyResponse::show('Success', 200); + } + + public function get($id) { + $view = true; + + $user = User::findOrfail($id); + + if($user->id == UsersController::currentUser()->id) { + $view = false; + } + + foreach($user as $key => $value) { + if(!isset($value) || empty($value)) { + unset($user[$key]); + } + } + + if($user->type == 'mentor') { + $user['schools'] = Junction::with('school') + ->where('user', $id) + ->whereNotNull('school') + ->get(); + + $user['subjects'] = Junction::with('subject') + ->where('user', $id) + ->whereNotNull('subject') + ->get(); + + $user['levels'] = Junction::with('level') + ->where('user', $id) + ->whereNotNull('level') + ->get(); + + $user['sessions'] = Session::where('mentor', $user->id)->count(); + + $user['students'] = sizeof(Session::where('mentor', $user->id)->groupBy('student')->get()); + + $user['reviews'] = Session::where('mentor', $user->id) + ->whereNotNull('review') + ->count(); + + $user['rating'] = $this->reviews($user->id, true); + + if($view) { + $user->increment('views'); + } + }else { + $user['school'] = Junction::with('school') + ->where('user', $id) + ->whereNotNull('school') + ->first(); + } + + return response()->json($user); + } + + public function all() { + return response()->json(User::all()); + } + + public function reviews($id, $calculate = false) { + $user = User::findOrFail($id); + + if($user->type != 'mentor') { + return MyResponse::show('Only mentors have reviews', 400); + } + + $sessions = Session::where($user->type, $id)->get(); + + $reviews = []; + + $sum = 0; + $cnt = 0; + + for($i = 0; $i < sizeof($sessions); $i++) { + $r = Review::find($sessions[$i]->review); + + if($r != null) { + $reviews[$i] = $r; + $sum += $reviews[$i]->rating; + $cnt++; + } + } + + if($calculate) { + $avg = 0; + + if($cnt > 0) { + $avg = $sum / $cnt; + } + + return $avg; + } + + return response()->json($reviews); + } + + private function hashPassword($password) { + return app('hash')->make($password); + } + + private function createToken() { + do { + $token = str_random(64); + }while(User::where("accessToken", $token)->first() instanceof User); + + return $token; + } + + public static function currentUser() { + $user = User::findOrFail(Auth::user()->id); + + return $user; + } +} +?> diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..325f967 --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,45 @@ +auth = $auth; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param string|null $guard + * @return mixed + */ + public function handle($request, Closure $next, $guard = null) + { + if ($this->auth->guard($guard)->guest()) { + return response('Unauthorized', 401); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/ExampleMiddleware.php b/app/Http/Middleware/ExampleMiddleware.php new file mode 100644 index 0000000..166581c --- /dev/null +++ b/app/Http/Middleware/ExampleMiddleware.php @@ -0,0 +1,20 @@ +get('/', function() use ($app) { + return view('home', [ + 'version' => '1.0', + 'year' => date('Y') + ]); +}); + +$app->group(['prefix' => 'api/v1'], function($app) { + $app->get('schools', 'ConstantsController@schools'); + $app->get('subjects', 'ConstantsController@subjects'); + $app->get('levels', 'ConstantsController@levels'); + + $app->post('schools', 'ConstantsController@addSchool'); + $app->post('subjects', 'ConstantsController@addSubject'); + + $app->get('logins', 'LoginsController@all'); + + $app->post('register', 'UsersController@register'); + $app->post('login', 'UsersController@login'); + + $app->group(['middleware' => 'auth'], function($app) { + $app->put('account/image', 'UsersController@setImage'); + $app->put('account', 'UsersController@update'); + $app->delete('account', 'UsersController@delete'); + $app->post('logout', 'UsersController@logout'); + }); + + $app->group(['prefix' => 'users', 'middleware' => 'auth'], function($app) { + $app->get('all', 'UsersController@all'); + $app->get('{id}', 'UsersController@get'); + $app->get('{id}/reviews', 'UsersController@reviews'); + $app->get('{id}/image', 'UsersController@getImage'); + }); + + $app->group(['prefix' => 'sessions', 'middleware' => 'auth'], function($app) { + $app->get('all', 'SessionsController@all'); + $app->post('create', 'SessionsController@create'); + $app->put('{id}', 'SessionsController@update'); + $app->get('{id}', 'SessionsController@get'); + $app->post('{id}/cancel', 'SessionsController@cancel'); + $app->post('{id}/review', 'SessionsController@review'); + $app->post('{id}/{status}', 'SessionsController@decide'); + $app->post('{id}/edit/{status}', 'SessionsController@decideEdit'); + }); +}); +?> diff --git a/app/Interval.php b/app/Interval.php new file mode 100644 index 0000000..bb45163 --- /dev/null +++ b/app/Interval.php @@ -0,0 +1,25 @@ +getConnection() + ->getSchemaBuilder() + ->getColumnListing($this->getTable()); + } +} +?> diff --git a/app/Jobs/ExampleJob.php b/app/Jobs/ExampleJob.php new file mode 100644 index 0000000..7b65bb4 --- /dev/null +++ b/app/Jobs/ExampleJob.php @@ -0,0 +1,26 @@ +belongsTo('App\User', 'user'); + } + + public function school() { + return $this->belongsTo('App\School', 'school'); + } + + public function subject() { + return $this->belongsTo('App\Subject', 'subject'); + } + + public function level() { + return $this->belongsTo('App\Level', 'level'); + } +} +?> diff --git a/app/Level.php b/app/Level.php new file mode 100644 index 0000000..f513630 --- /dev/null +++ b/app/Level.php @@ -0,0 +1,13 @@ + diff --git a/app/Listeners/ExampleListener.php b/app/Listeners/ExampleListener.php new file mode 100644 index 0000000..77fc6a8 --- /dev/null +++ b/app/Listeners/ExampleListener.php @@ -0,0 +1,31 @@ +belongsTo('App\User', 'user'); + } +} +?> diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..ddec046 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,18 @@ +header('accessToken')) { + return User::where('accessToken', $request->header('accessToken')) + ->where('active', 1) + ->first(); + } + }); + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php new file mode 100644 index 0000000..0b8f393 --- /dev/null +++ b/app/Providers/EventServiceProvider.php @@ -0,0 +1,19 @@ + [ + 'App\Listeners\EventListener', + ], + ]; +} diff --git a/app/Review.php b/app/Review.php new file mode 100644 index 0000000..58ed23d --- /dev/null +++ b/app/Review.php @@ -0,0 +1,12 @@ + diff --git a/app/School.php b/app/School.php new file mode 100644 index 0000000..7ae1a50 --- /dev/null +++ b/app/School.php @@ -0,0 +1,19 @@ +belongsTo('App\Level', 'level'); + } +} +?> diff --git a/app/Session.php b/app/Session.php new file mode 100644 index 0000000..f454705 --- /dev/null +++ b/app/Session.php @@ -0,0 +1,43 @@ +belongsTo('App\Review', 'review'); + } + + public function mentor() { + return $this->belongsTo('App\User', 'mentor'); + } + + public function student() { + return $this->belongsTo('App\User', 'student'); + } + + public function level() { + return $this->belongsTo('App\Level', 'level'); + } + + public function subject() { + return $this->belongsTo('App\Subject', 'subject'); + } +} +?> diff --git a/app/Subject.php b/app/Subject.php new file mode 100644 index 0000000..0a64694 --- /dev/null +++ b/app/Subject.php @@ -0,0 +1,13 @@ + diff --git a/app/User.php b/app/User.php new file mode 100644 index 0000000..4d03e52 --- /dev/null +++ b/app/User.php @@ -0,0 +1,53 @@ +belongsTo('App\Interval', 'interval'); + } +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..6a9d095 --- /dev/null +++ b/artisan @@ -0,0 +1,35 @@ +#!/usr/bin/env php +make( + 'Illuminate\Contracts\Console\Kernel' +); + +exit($kernel->handle(new ArgvInput, new ConsoleOutput)); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..b32139f --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,103 @@ +load(); +} catch (Dotenv\Exception\InvalidPathException $e) { + // +} + +/* +|-------------------------------------------------------------------------- +| Create The Application +|-------------------------------------------------------------------------- +| +| Here we will load the environment and create the application instance +| that serves as the central piece of this framework. We'll use this +| application as an "IoC" container and router for this framework. +| +*/ + +$app = new Fremail\NestedRouteGroups\Application( + realpath(__DIR__.'/../') +); + +$app->withFacades(); +class_alias(\LaravelFCM\Facades\FCM::class, 'FCM'); +class_alias(\LaravelFCM\Facades\FCMGroup::class, 'FCMGroup'); + +$app->withEloquent(); + +/* +|-------------------------------------------------------------------------- +| Register Container Bindings +|-------------------------------------------------------------------------- +| +| Now we will register a few bindings in the service container. We will +| register the exception handler and the console kernel. You may add +| your own bindings here if you like or you can make another file. +| +*/ + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +/* +|-------------------------------------------------------------------------- +| Register Middleware +|-------------------------------------------------------------------------- +| +| Next, we will register the middleware with the application. These can +| be global middleware that run before and after each request into a +| route or middleware that'll be assigned to some specific routes. +| +*/ + +// $app->middleware([ +// App\Http\Middleware\ExampleMiddleware::class +// ]); + +$app->routeMiddleware([ + 'auth' => App\Http\Middleware\Authenticate::class, +]); + +/* +|-------------------------------------------------------------------------- +| Register Service Providers +|-------------------------------------------------------------------------- +| +| Here we will register all of the application's service providers which +| are used to bind services into the container. Service providers are +| totally optional, so you are not required to uncomment this line. +| +*/ + +//$app->register(App\Providers\AppServiceProvider::class); +$app->register(App\Providers\AuthServiceProvider::class); +// $app->register(App\Providers\EventServiceProvider::class); +$app->register(LaravelFCM\FCMServiceProvider::class); + +/* +|-------------------------------------------------------------------------- +| Load The Application Routes +|-------------------------------------------------------------------------- +| +| Next we will include the routes file so that they can all be added to +| the application. This will provide all of the URLs the application +| can respond to, as well as the controllers that may handle them. +| +*/ + +$app->group(['namespace' => 'App\Http\Controllers'], function ($app) { + require __DIR__.'/../app/Http/routes.php'; +}); + +return $app; diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..87b2c0a --- /dev/null +++ b/composer.json @@ -0,0 +1,32 @@ +{ + "name": "laravel/lumen", + "description": "The Laravel Lumen Framework.", + "keywords": ["framework", "laravel", "lumen"], + "license": "MIT", + "type": "project", + "require": { + "php": ">=5.5.9", + "laravel/lumen-framework": "5.2.*", + "vlucas/phpdotenv": "~2.2", + "fremail/lumen-nested-route-groups": "~1.1", + "brozot/laravel-fcm": "^1.2" + }, + "require-dev": { + "fzaninotto/faker": "~1.4", + "phpunit/phpunit": "~4.0" + }, + "autoload": { + "classmap": [ + "database/" + ], + "psr-4": { + "App\\": "app/" + } + }, + "autoload-dev": { + "classmap": [ + "tests/", + "database/" + ] + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..a0d93c9 --- /dev/null +++ b/composer.lock @@ -0,0 +1,3737 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "4c338725743227cf619c92ade38c0172", + "content-hash": "0292a88e8dcc55d7e9d83c88f195b6b1", + "packages": [ + { + "name": "brozot/laravel-fcm", + "version": "v1.2.4", + "source": { + "type": "git", + "url": "https://github.com/brozot/Laravel-FCM.git", + "reference": "2122ba0fda51fbec87a14a1a9dc7e292f10b26df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brozot/Laravel-FCM/zipball/2122ba0fda51fbec87a14a1a9dc7e292f10b26df", + "reference": "2122ba0fda51fbec87a14a1a9dc7e292f10b26df", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "~6.0", + "illuminate/support": "5.*", + "monolog/monolog": "^1.19", + "php": ">=5.5.9" + }, + "require-dev": { + "laravel/laravel": "5.2.*", + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "4.7.*", + "satooshi/php-coveralls": "dev-master" + }, + "type": "library", + "autoload": { + "psr-4": { + "LaravelFCM\\": "src/", + "LaravelFCM\\Mocks\\": "tests/mocks" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Brosy", + "email": "nicolas.brosy@gmail.com" + } + ], + "description": "Laravel / Lumen package for Firebase Cloud Messaging ", + "keywords": [ + "FCM", + "Firebase Cloud Messaging", + "firebase", + "laravel", + "lumen", + "notification", + "push" + ], + "time": "2017-04-20 06:27:21" + }, + { + "name": "doctrine/inflector", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2015-11-06 14:35:42" + }, + { + "name": "fremail/lumen-nested-route-groups", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/fremail/lumen-nested-route-groups.git", + "reference": "bb0bef1a451d57d59037a608167757860d204105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fremail/lumen-nested-route-groups/zipball/bb0bef1a451d57d59037a608167757860d204105", + "reference": "bb0bef1a451d57d59037a608167757860d204105", + "shasum": "" + }, + "require": { + "laravel/lumen-framework": "5.*", + "php": ">=5.5.9" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fremail\\NestedRouteGroups\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Demushkin", + "email": "fremail@yandex.com" + } + ], + "description": "Extends a lumen application for using nested route groups. In addition to the groups it's possible to use any() and match() methods.", + "keywords": [ + "Match", + "any", + "group", + "lumen", + "route" + ], + "time": "2016-11-12 21:21:42" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22 18:50:49" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "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-20 10:07:11" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "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" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20 17:10:46" + }, + { + "name": "illuminate/auth", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/auth.git", + "reference": "4098195b10a2c7a83f66bcd19663b4c60cd2106c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/auth/zipball/4098195b10a2c7a83f66bcd19663b4c60cd2106c", + "reference": "4098195b10a2c7a83f66bcd19663b4c60cd2106c", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/http": "5.2.*", + "illuminate/support": "5.2.*", + "nesbot/carbon": "~1.20", + "php": ">=5.5.9" + }, + "suggest": { + "illuminate/console": "Required to use the auth:clear-resets command (5.2.*).", + "illuminate/queue": "Required to fire login / logout events (5.2.*).", + "illuminate/session": "Required to use the session based guard (5.2.*)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Auth\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Auth package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/broadcasting", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/broadcasting.git", + "reference": "7137f24d2520697203d95bcac2d0831549b1ca0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/broadcasting/zipball/7137f24d2520697203d95bcac2d0831549b1ca0b", + "reference": "7137f24d2520697203d95bcac2d0831549b1ca0b", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9" + }, + "suggest": { + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Broadcasting\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Broadcasting package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/bus", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/bus.git", + "reference": "1213ce87493bd2c0530051f86a2580bc1f60a7db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/bus/zipball/1213ce87493bd2c0530051f86a2580bc1f60a7db", + "reference": "1213ce87493bd2c0530051f86a2580bc1f60a7db", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/pipeline": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Bus\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Bus package.", + "homepage": "http://laravel.com", + "time": "2016-08-02 12:44:26" + }, + { + "name": "illuminate/cache", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/cache.git", + "reference": "09bcee8982c40570947b799d65987aa030d7706b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/cache/zipball/09bcee8982c40570947b799d65987aa030d7706b", + "reference": "09bcee8982c40570947b799d65987aa030d7706b", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "nesbot/carbon": "~1.20", + "php": ">=5.5.9" + }, + "suggest": { + "illuminate/database": "Required to use the database cache driver (5.2.*).", + "illuminate/filesystem": "Required to use the file cache driver (5.2.*).", + "illuminate/redis": "Required to use the redis cache driver (5.2.*)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Cache package.", + "homepage": "http://laravel.com", + "time": "2016-08-18 14:17:46" + }, + { + "name": "illuminate/config", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/config.git", + "reference": "2db869c5b5a675cece410a0d0bc634dba0f69998" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/config/zipball/2db869c5b5a675cece410a0d0bc634dba0f69998", + "reference": "2db869c5b5a675cece410a0d0bc634dba0f69998", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/filesystem": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Config\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Config package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/console", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/console.git", + "reference": "c6d838c6f9ac3f1aec28cde93bf613283153785e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/console/zipball/c6d838c6f9ac3f1aec28cde93bf613283153785e", + "reference": "c6d838c6f9ac3f1aec28cde93bf613283153785e", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "nesbot/carbon": "~1.20", + "php": ">=5.5.9", + "symfony/console": "2.8.*|3.0.*" + }, + "suggest": { + "guzzlehttp/guzzle": "Required to use the ping methods on schedules (~5.3|~6.0).", + "mtdowling/cron-expression": "Required to use scheduling component (~1.0).", + "symfony/process": "Required to use scheduling component (2.8.*|3.0.*)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Console\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Console package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/container", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/container.git", + "reference": "5139cebc8293b6820b91aef6f4b4e18bde33c9b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/container/zipball/5139cebc8293b6820b91aef6f4b4e18bde33c9b2", + "reference": "5139cebc8293b6820b91aef6f4b4e18bde33c9b2", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Container\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Container package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/contracts", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/contracts.git", + "reference": "22bde7b048a33c702d9737fc1446234fff9b1363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/22bde7b048a33c702d9737fc1446234fff9b1363", + "reference": "22bde7b048a33c702d9737fc1446234fff9b1363", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Contracts\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Contracts package.", + "homepage": "http://laravel.com", + "time": "2016-08-08 11:46:08" + }, + { + "name": "illuminate/database", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/database.git", + "reference": "4a70c0598ed41d18a99f23c12be4e22b5006d30a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/database/zipball/4a70c0598ed41d18a99f23c12be4e22b5006d30a", + "reference": "4a70c0598ed41d18a99f23c12be4e22b5006d30a", + "shasum": "" + }, + "require": { + "illuminate/container": "5.2.*", + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "nesbot/carbon": "~1.20", + "php": ">=5.5.9" + }, + "suggest": { + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", + "illuminate/console": "Required to use the database commands (5.2.*).", + "illuminate/events": "Required to use the observers with Eloquent (5.2.*).", + "illuminate/filesystem": "Required to use the migrations (5.2.*).", + "illuminate/pagination": "Required to paginate the result set (5.2.*)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Database\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Database package.", + "homepage": "http://laravel.com", + "keywords": [ + "database", + "laravel", + "orm", + "sql" + ], + "time": "2016-08-25 07:01:20" + }, + { + "name": "illuminate/encryption", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/encryption.git", + "reference": "9e930c111c35850d5c133316c8b0c61dcccaa942" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/encryption/zipball/9e930c111c35850d5c133316c8b0c61dcccaa942", + "reference": "9e930c111c35850d5c133316c8b0c61dcccaa942", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "paragonie/random_compat": "~1.4", + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Encryption\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Encryption package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/events", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/events.git", + "reference": "9c16e022d9c4b9f875bf447f4384bd1b952c69b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/events/zipball/9c16e022d9c4b9f875bf447f4384bd1b952c69b9", + "reference": "9c16e022d9c4b9f875bf447f4384bd1b952c69b9", + "shasum": "" + }, + "require": { + "illuminate/container": "5.2.*", + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Events\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Events package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/filesystem", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/filesystem.git", + "reference": "39668a50e0cf1d673e58e7dbb437475708cfb508" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/filesystem/zipball/39668a50e0cf1d673e58e7dbb437475708cfb508", + "reference": "39668a50e0cf1d673e58e7dbb437475708cfb508", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9", + "symfony/finder": "2.8.*|3.0.*" + }, + "suggest": { + "league/flysystem": "Required to use the Flysystem local and FTP drivers (~1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Filesystem\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Filesystem package.", + "homepage": "http://laravel.com", + "time": "2016-08-17 17:21:29" + }, + { + "name": "illuminate/hashing", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/hashing.git", + "reference": "a38de58f53a085888feb432acce8a6ea7c1a5b71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/hashing/zipball/a38de58f53a085888feb432acce8a6ea7c1a5b71", + "reference": "a38de58f53a085888feb432acce8a6ea7c1a5b71", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Hashing\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Hashing package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/http", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/http.git", + "reference": "019d947e218f8dce421010a22d899d6f4b4ced45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/http/zipball/019d947e218f8dce421010a22d899d6f4b4ced45", + "reference": "019d947e218f8dce421010a22d899d6f4b4ced45", + "shasum": "" + }, + "require": { + "illuminate/session": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9", + "symfony/http-foundation": "2.8.*|3.0.*", + "symfony/http-kernel": "2.8.*|3.0.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Http\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Http package.", + "homepage": "http://laravel.com", + "time": "2016-08-10 17:33:08" + }, + { + "name": "illuminate/pagination", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/pagination.git", + "reference": "a4450887251f443a1243ef537d98ce5bbea6b193" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/pagination/zipball/a4450887251f443a1243ef537d98ce5bbea6b193", + "reference": "a4450887251f443a1243ef537d98ce5bbea6b193", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Pagination\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Pagination package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/pipeline", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/pipeline.git", + "reference": "592d84b101437de3432851e4fa60a33f849164e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/pipeline/zipball/592d84b101437de3432851e4fa60a33f849164e5", + "reference": "592d84b101437de3432851e4fa60a33f849164e5", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Pipeline\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Pipeline package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/queue", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/queue.git", + "reference": "363b6752051327b7e4e500e6d2fa5ae132ccef47" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/queue/zipball/363b6752051327b7e4e500e6d2fa5ae132ccef47", + "reference": "363b6752051327b7e4e500e6d2fa5ae132ccef47", + "shasum": "" + }, + "require": { + "illuminate/console": "5.2.*", + "illuminate/container": "5.2.*", + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "nesbot/carbon": "~1.20", + "php": ">=5.5.9", + "symfony/debug": "2.8.*|3.0.*", + "symfony/process": "2.8.*|3.0.*" + }, + "suggest": { + "aws/aws-sdk-php": "Required to use the SQS queue driver (~3.0).", + "illuminate/redis": "Required to use the Redis queue driver (5.2.*).", + "pda/pheanstalk": "Required to use the Beanstalk queue driver (~3.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Queue\\": "" + }, + "classmap": [ + "IlluminateQueueClosure.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Queue package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/session", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/session.git", + "reference": "259ae8eaee714b4633b3ee4e51e98648840a976c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/session/zipball/259ae8eaee714b4633b3ee4e51e98648840a976c", + "reference": "259ae8eaee714b4633b3ee4e51e98648840a976c", + "shasum": "" + }, + "require": { + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "nesbot/carbon": "~1.20", + "php": ">=5.5.9", + "symfony/finder": "2.8.*|3.0.*", + "symfony/http-foundation": "2.8.*|3.0.*" + }, + "suggest": { + "illuminate/console": "Required to use the session:table command (5.2.*)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Session\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Session package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/support", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/support.git", + "reference": "510230ab62a7d85dc70203f4fdca6fb71a19e08a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/support/zipball/510230ab62a7d85dc70203f4fdca6fb71a19e08a", + "reference": "510230ab62a7d85dc70203f4fdca6fb71a19e08a", + "shasum": "" + }, + "require": { + "doctrine/inflector": "~1.0", + "ext-mbstring": "*", + "illuminate/contracts": "5.2.*", + "paragonie/random_compat": "~1.4", + "php": ">=5.5.9" + }, + "replace": { + "tightenco/collect": "self.version" + }, + "suggest": { + "illuminate/filesystem": "Required to use the composer class (5.2.*).", + "jeremeamia/superclosure": "Required to be able to serialize closures (~2.2).", + "symfony/polyfill-php56": "Required to use the hash_equals function on PHP 5.5 (~1.0).", + "symfony/process": "Required to use the composer class (2.8.*|3.0.*).", + "symfony/var-dumper": "Improves the dd function (2.8.*|3.0.*)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Support\\": "" + }, + "files": [ + "helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Support package.", + "homepage": "http://laravel.com", + "time": "2016-08-05 14:49:58" + }, + { + "name": "illuminate/translation", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/translation.git", + "reference": "19247e4194e110d2d37713709e0e4b8bd0cae620" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/translation/zipball/19247e4194e110d2d37713709e0e4b8bd0cae620", + "reference": "19247e4194e110d2d37713709e0e4b8bd0cae620", + "shasum": "" + }, + "require": { + "illuminate/filesystem": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9", + "symfony/translation": "2.8.*|3.0.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Translation package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "illuminate/validation", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/validation.git", + "reference": "24909f0ee0866256eca0a0b72977753886a8a479" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/validation/zipball/24909f0ee0866256eca0a0b72977753886a8a479", + "reference": "24909f0ee0866256eca0a0b72977753886a8a479", + "shasum": "" + }, + "require": { + "illuminate/container": "5.2.*", + "illuminate/contracts": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9", + "symfony/http-foundation": "2.8.*|3.0.*", + "symfony/translation": "2.8.*|3.0.*" + }, + "suggest": { + "illuminate/database": "Required to use the database presence verifier (5.2.*)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Validation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Validation package.", + "homepage": "http://laravel.com", + "time": "2016-08-18 13:15:33" + }, + { + "name": "illuminate/view", + "version": "v5.2.45", + "source": { + "type": "git", + "url": "https://github.com/illuminate/view.git", + "reference": "a3f9252c7d0dce3c2a9e70e40e9397f62850aa23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/view/zipball/a3f9252c7d0dce3c2a9e70e40e9397f62850aa23", + "reference": "a3f9252c7d0dce3c2a9e70e40e9397f62850aa23", + "shasum": "" + }, + "require": { + "illuminate/container": "5.2.*", + "illuminate/contracts": "5.2.*", + "illuminate/events": "5.2.*", + "illuminate/filesystem": "5.2.*", + "illuminate/support": "5.2.*", + "php": ">=5.5.9", + "symfony/debug": "2.8.*|3.0.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\View\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate View package.", + "homepage": "http://laravel.com", + "time": "2016-08-01 13:49:14" + }, + { + "name": "laravel/lumen-framework", + "version": "v5.2.9", + "source": { + "type": "git", + "url": "https://github.com/laravel/lumen-framework.git", + "reference": "dafb4d4aad71d7ab8914db7769c4bbfcff4073f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/lumen-framework/zipball/dafb4d4aad71d7ab8914db7769c4bbfcff4073f1", + "reference": "dafb4d4aad71d7ab8914db7769c4bbfcff4073f1", + "shasum": "" + }, + "require": { + "illuminate/auth": "5.2.*", + "illuminate/broadcasting": "5.2.*", + "illuminate/bus": "5.2.*", + "illuminate/cache": "5.2.*", + "illuminate/config": "5.2.*", + "illuminate/container": "5.2.*", + "illuminate/contracts": "5.2.*", + "illuminate/database": "5.2.*", + "illuminate/encryption": "5.2.*", + "illuminate/events": "5.2.*", + "illuminate/filesystem": "5.2.*", + "illuminate/hashing": "5.2.*", + "illuminate/http": "5.2.*", + "illuminate/pagination": "5.2.*", + "illuminate/pipeline": "5.2.*", + "illuminate/queue": "5.2.*", + "illuminate/support": "5.2.*", + "illuminate/translation": "5.2.*", + "illuminate/validation": "~5.2.7", + "illuminate/view": "5.2.*", + "monolog/monolog": "~1.11", + "mtdowling/cron-expression": "~1.0", + "nikic/fast-route": "0.7.*", + "paragonie/random_compat": "~1.1", + "php": ">=5.5.9", + "symfony/http-foundation": "2.8.*|3.0.*", + "symfony/http-kernel": "2.8.*|3.0.*", + "symfony/polyfill-php56": "~1.0" + }, + "require-dev": { + "mockery/mockery": "~0.9", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "vlucas/phpdotenv": "Required to use .env files (~2.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Lumen\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "The Laravel Lumen Framework.", + "homepage": "http://laravel.com", + "keywords": [ + "framework", + "laravel", + "lumen" + ], + "time": "2016-09-07 18:38:25" + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-06-19 01:22:40" + }, + { + "name": "mtdowling/cron-expression", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/mtdowling/cron-expression.git", + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2017-01-23 04:29:33" + }, + { + "name": "nesbot/carbon", + "version": "1.22.1", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", + "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "symfony/translation": "~2.6 || ~3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2", + "phpunit/phpunit": "~4.0 || ~5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.23-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "http://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "time": "2017-01-16 07:55:07" + }, + { + "name": "nikic/fast-route", + "version": "v0.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/FastRoute.git", + "reference": "8164b4a0d8afde4eae5f1bfc39084972ba23ad36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/8164b4a0d8afde4eae5f1bfc39084972ba23ad36", + "reference": "8164b4a0d8afde4eae5f1bfc39084972ba23ad36", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "FastRoute\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Fast request router for PHP", + "keywords": [ + "router", + "routing" + ], + "time": "2015-12-20 19:50:12" + }, + { + "name": "paragonie/random_compat", + "version": "v1.4.2", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "965cdeb01fdcab7653253aa81d40441d261f1e66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/965cdeb01fdcab7653253aa81d40441d261f1e66", + "reference": "965cdeb01fdcab7653253aa81d40441d261f1e66", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "pseudorandom", + "random" + ], + "time": "2017-03-13 16:22:52" + }, + { + "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-06 14:39:51" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10 12:19:37" + }, + { + "name": "symfony/console", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "926061e74229e935d3c5b4e9ba87237316c6693f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/926061e74229e935d3c5b4e9ba87237316c6693f", + "reference": "926061e74229e935d3c5b4e9ba87237316c6693f", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2016-07-30 07:22:48" + }, + { + "name": "symfony/debug", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/697c527acd9ea1b2d3efac34d9806bf255278b0a", + "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2016-07-30 07:22:48" + }, + { + "name": "symfony/event-dispatcher", + "version": "v3.3.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67535f1e3fd662bdc68d7ba317c93eecd973617e", + "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", + "symfony/expression-language": "~2.8|~3.0", + "symfony/stopwatch": "~2.8|~3.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-06-09 14:53:08" + }, + { + "name": "symfony/finder", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9", + "reference": "3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2016-06-29 05:40:00" + }, + { + "name": "symfony/http-foundation", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "49ba00f8ede742169cb6b70abe33243f4d673f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49ba00f8ede742169cb6b70abe33243f4d673f82", + "reference": "49ba00f8ede742169cb6b70abe33243f4d673f82", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "symfony/expression-language": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2016-07-17 13:54:30" + }, + { + "name": "symfony/http-kernel", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "d97ba4425e36e79c794e7d14ff36f00f081b37b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d97ba4425e36e79c794e7d14ff36f00f081b37b3", + "reference": "d97ba4425e36e79c794e7d14ff36f00f081b37b3", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0", + "symfony/debug": "~2.8|~3.0", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2" + }, + "conflict": { + "symfony/config": "<2.8" + }, + "require-dev": { + "symfony/browser-kit": "~2.8|~3.0", + "symfony/class-loader": "~2.8|~3.0", + "symfony/config": "~2.8|~3.0", + "symfony/console": "~2.8|~3.0", + "symfony/css-selector": "~2.8|~3.0", + "symfony/dependency-injection": "~2.8|~3.0", + "symfony/dom-crawler": "~2.8|~3.0", + "symfony/expression-language": "~2.8|~3.0", + "symfony/finder": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0", + "symfony/routing": "~2.8|~3.0", + "symfony/stopwatch": "~2.8|~3.0", + "symfony/templating": "~2.8|~3.0", + "symfony/translation": "~2.8|~3.0", + "symfony/var-dumper": "~2.8|~3.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/class-loader": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/finder": "", + "symfony/var-dumper": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "time": "2016-07-30 09:10:37" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "f29dca382a6485c3cbe6379f0c61230167681937" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f29dca382a6485c3cbe6379f0c61230167681937", + "reference": "f29dca382a6485c3cbe6379f0c61230167681937", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-06-09 14:24:12" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "bc0b7d6cb36b10cfabb170a3e359944a95174929" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/bc0b7d6cb36b10cfabb170a3e359944a95174929", + "reference": "bc0b7d6cb36b10cfabb170a3e359944a95174929", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2017-06-09 08:25:21" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "ebccbde4aad410f6438d86d7d261c6b4d2b9a51d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ebccbde4aad410f6438d86d7d261c6b4d2b9a51d", + "reference": "ebccbde4aad410f6438d86d7d261c6b4d2b9a51d", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2017-06-09 08:25:21" + }, + { + "name": "symfony/process", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "768debc5996f599c4372b322d9061dba2a4bf505" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/768debc5996f599c4372b322d9061dba2a4bf505", + "reference": "768debc5996f599c4372b322d9061dba2a4bf505", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2016-07-28 11:13:34" + }, + { + "name": "symfony/translation", + "version": "v3.0.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/eee6c664853fd0576f21ae25725cfffeafe83f26", + "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/config": "<2.8" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0", + "symfony/intl": "~2.8|~3.0", + "symfony/yaml": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "time": "2016-07-30 07:22:48" + }, + { + "name": "vlucas/phpdotenv", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", + "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause-Attribution" + ], + "authors": [ + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "http://www.vancelucas.com" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2016-09-01 10:05:43" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "fzaninotto/faker", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/44f9a286a04b80c76a4e5fb7aad8bb539b920123", + "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123", + "shasum": "" + }, + "require": { + "php": "^5.3.3|^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5" + }, + "type": "library", + "extra": { + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "time": "2016-04-29 12:21:54" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27 11:43:31" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157", + "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.3.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-08-08 06:39:58" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773", + "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-06-03 08:32:36" + }, + { + "name": "phpspec/prophecy", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-03-02 20:05:34" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06 15:47:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03 07:40:28" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26 11:10:40" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27 10:12:30" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-06-21 08:07:12" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02 06:51:40" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29 09:50:25" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22 07:24:03" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18 05:49:44" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17 09:04:28" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03 07:41:43" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21 13:59:46" + }, + { + "name": "symfony/yaml", + "version": "v3.3.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "ddc23324e6cfe066f3dd34a37ff494fa80b617ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ddc23324e6cfe066f3dd34a37ff494fa80b617ed", + "reference": "ddc23324e6cfe066f3dd34a37ff494fa80b617ed", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-07-23 12:43:26" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23 20:04:58" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.5.9" + }, + "platform-dev": [] +} diff --git a/config/fcm.php b/config/fcm.php new file mode 100755 index 0000000..887cbf9 --- /dev/null +++ b/config/fcm.php @@ -0,0 +1,12 @@ + env('FCM_PROTOCOL', 'http'), + 'log_enabled' => true, + 'http' => [ + 'server_key' => env('FCM_SERVER_KEY', 'Your FCM server key'), + 'sender_id' => env('FCM_SENDER_ID', 'Your sender id'), + 'server_send_url' => 'https://fcm.googleapis.com/fcm/send', + 'server_group_url' => 'https://android.googleapis.com/gcm/notification', + 'timeout' => 30.0 + ] +]; diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php new file mode 100644 index 0000000..b795b09 --- /dev/null +++ b/database/factories/ModelFactory.php @@ -0,0 +1,19 @@ +define(App\User::class, function ($faker) { + return [ + 'name' => $faker->name, + 'email' => $faker->email, + ]; +}); diff --git a/database/migrations/.gitkeep b/database/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/migrations/1_0_0_0_create_table_intervals.php b/database/migrations/1_0_0_0_create_table_intervals.php new file mode 100644 index 0000000..3461bcf --- /dev/null +++ b/database/migrations/1_0_0_0_create_table_intervals.php @@ -0,0 +1,36 @@ +increments('id'); + $table->string('mon', 11)->default('00:00,23:59'); + $table->string('tue', 11)->default('00:00,23:59'); + $table->string('wed', 11)->default('00:00,23:59'); + $table->string('thu', 11)->default('00:00,23:59'); + $table->string('fri', 11)->default('00:00,23:59'); + $table->string('sat', 11)->default('00:00,23:59'); + $table->string('sun', 11)->default('00:00,23:59'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('intervals'); + } +} diff --git a/database/migrations/1_0_0_0_create_table_levels.php b/database/migrations/1_0_0_0_create_table_levels.php new file mode 100644 index 0000000..8d0bb2e --- /dev/null +++ b/database/migrations/1_0_0_0_create_table_levels.php @@ -0,0 +1,30 @@ +increments('id'); + $table->string('name', 50)->unique(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('levels'); + } +} diff --git a/database/migrations/1_0_0_0_create_table_reviews.php b/database/migrations/1_0_0_0_create_table_reviews.php new file mode 100644 index 0000000..10994c4 --- /dev/null +++ b/database/migrations/1_0_0_0_create_table_reviews.php @@ -0,0 +1,32 @@ +increments('id'); + $table->tinyInteger('rating'); + $table->string('description', 500)->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('reviews'); + } +} diff --git a/database/migrations/1_0_0_0_create_table_subjects.php b/database/migrations/1_0_0_0_create_table_subjects.php new file mode 100644 index 0000000..c9edb53 --- /dev/null +++ b/database/migrations/1_0_0_0_create_table_subjects.php @@ -0,0 +1,30 @@ +increments('id'); + $table->string('name', 50)->unique(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('subjects'); + } +} diff --git a/database/migrations/1_1_0_0_create_table_users.php b/database/migrations/1_1_0_0_create_table_users.php new file mode 100644 index 0000000..8cb0a80 --- /dev/null +++ b/database/migrations/1_1_0_0_create_table_users.php @@ -0,0 +1,50 @@ +increments('id'); + $table->enum('type', ['student', 'mentor']); + $table->string('firstName', 50); + $table->string('lastName', 50); + $table->string('email')->unique(); + $table->string('password', 60); + $table->string('accessToken', 64)->unique(); + $table->text('image')->nullable(); + $table->string('fcmToken')->nullable(); + $table->boolean('active')->default(0); + $table->integer('views')->default(0); + + $table->integer('interval')->unsigned()->nullable(); + $table->foreign('interval')->references('id')->on('intervals'); + $table->string('location')->nullable(); + $table->smallInteger('price')->nullable(); + $table->boolean('promoted')->default(0); + + $table->smallInteger('grade')->nullable(); + + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('users'); + } +} diff --git a/database/migrations/2_0_0_0_create_table_logins.php b/database/migrations/2_0_0_0_create_table_logins.php new file mode 100644 index 0000000..6a9a080 --- /dev/null +++ b/database/migrations/2_0_0_0_create_table_logins.php @@ -0,0 +1,33 @@ +increments('id'); + $table->string('ip', 15); + $table->integer('user')->unsigned(); + $table->foreign('user')->references('id')->on('users'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('logins'); + } +} diff --git a/database/migrations/2_0_0_0_create_table_schools.php b/database/migrations/2_0_0_0_create_table_schools.php new file mode 100644 index 0000000..0d67b00 --- /dev/null +++ b/database/migrations/2_0_0_0_create_table_schools.php @@ -0,0 +1,33 @@ +increments('id'); + $table->string('name', 50); + $table->string('city', 50); + $table->integer('level')->unsigned()->nullable(); + $table->foreign('level')->references('id')->on('levels'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('schools'); + } +} diff --git a/database/migrations/2_0_0_0_create_table_sessions.php b/database/migrations/2_0_0_0_create_table_sessions.php new file mode 100644 index 0000000..d9921ee --- /dev/null +++ b/database/migrations/2_0_0_0_create_table_sessions.php @@ -0,0 +1,52 @@ +increments('id'); + $table->string('lecture', 50); + $table->smallInteger('price')->default(0);; + $table->string('location'); + $table->string('locationEdit')->nullable(); + $table->time('timeBegin', 11); + $table->time('timeEnd', 11); + $table->time('timeBeginEdit')->nullable(); + $table->time('timeEndEdit')->nullable(); + $table->date('date'); + $table->date('dateEdit')->nullable(); + $table->enum('status', ['accepted', 'declined'])->nullable(); + $table->boolean('canceled')->default(0); + $table->integer('mentor')->unsigned(); + $table->foreign('mentor')->references('id')->on('users'); + $table->integer('student')->unsigned(); + $table->foreign('student')->references('id')->on('users'); + $table->integer('subject')->unsigned()->nullable(); + $table->foreign('subject')->references('id')->on('subjects'); + $table->integer('level')->unsigned()->nullable(); + $table->foreign('level')->references('id')->on('levels'); + $table->integer('review')->unsigned()->nullable(); + $table->foreign('review')->references('id')->on('reviews'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('sessions'); + } +} diff --git a/database/migrations/3_0_0_0_create_table_junctions.php b/database/migrations/3_0_0_0_create_table_junctions.php new file mode 100644 index 0000000..288f927 --- /dev/null +++ b/database/migrations/3_0_0_0_create_table_junctions.php @@ -0,0 +1,37 @@ +increments('id'); + $table->integer('user')->unsigned(); + $table->foreign('user')->references('id')->on('users'); + $table->integer('school')->unsigned()->nullable(); + $table->foreign('school')->references('id')->on('schools'); + $table->integer('subject')->unsigned()->nullable(); + $table->foreign('subject')->references('id')->on('subjects'); + $table->integer('level')->unsigned()->nullable(); + $table->foreign('level')->references('id')->on('levels'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('junctions'); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php new file mode 100644 index 0000000..8673de3 --- /dev/null +++ b/database/seeds/DatabaseSeeder.php @@ -0,0 +1,13 @@ +call('LevelTableSeeder'); + $this->call('SubjectTableSeeder'); + $this->call('IntervalTableSeeder'); + $this->call('SchoolTableSeeder'); + } +} diff --git a/database/seeds/LevelTableSeeder.php b/database/seeds/LevelTableSeeder.php new file mode 100644 index 0000000..ba185d1 --- /dev/null +++ b/database/seeds/LevelTableSeeder.php @@ -0,0 +1,18 @@ +delete(); + + DB::table('levels')->insert([ + ['name' => 'Osnovna skola'], + ['name' => 'Srednja skola'], + ['name' => 'Visa skola'], + ['name' => 'Fakultet'] + ]); + } +} +?> diff --git a/database/seeds/SchoolTableSeeder.php b/database/seeds/SchoolTableSeeder.php new file mode 100644 index 0000000..2d3d351 --- /dev/null +++ b/database/seeds/SchoolTableSeeder.php @@ -0,0 +1,22 @@ +delete(); + + DB::table('schools')->insert([ + ['name' => 'Visoka poslovna skola', 'city' => 'Beograd', 'level' => 3], + ['name' => 'Gimnazija', 'city' => 'Krusevac', 'level' => 2], + ['name' => 'Tehnicka skola', 'city' => 'Novi Sad', 'level' => 2], + ['name' => 'Ekonomska skola', 'city' => 'Nis', 'level' => 2], + ['name' => 'OS Vuk Karadzic', 'city' => 'Kragujevac', 'level' => 1], + ['name' => 'Ekonomska skola', 'city' => 'Beograd', 'level' => 2], + ['name' => 'Gradjevinska skola', 'city' => 'Beograd', 'level' => 2], + ['name' => 'Pravni fakultet', 'city' => 'Kraljevo', 'level' => 4] + ]); + } +} +?> diff --git a/database/seeds/SubjectTableSeeder.php b/database/seeds/SubjectTableSeeder.php new file mode 100644 index 0000000..98ada75 --- /dev/null +++ b/database/seeds/SubjectTableSeeder.php @@ -0,0 +1,22 @@ +delete(); + + DB::table('subjects')->insert([ + ['name' => 'Matematika'], + ['name' => 'Fizika'], + ['name' => 'Srpski jezik'], + ['name' => 'Knjizevnost'], + ['name' => 'Osnove racunarskih sistema'], + ['name' => 'Svet oko nas'], + ['name' => 'Programiranje 1'], + ['name' => 'Hemija'] + ]); + } +} +?> diff --git a/doc/brief.pdf b/doc/brief.pdf new file mode 100644 index 0000000..4fb3f1f Binary files /dev/null and b/doc/brief.pdf differ diff --git a/doc/spec.pages b/doc/spec.pages new file mode 100644 index 0000000..9e6c579 Binary files /dev/null and b/doc/spec.pages differ diff --git a/doc/spec.pdf b/doc/spec.pdf new file mode 100644 index 0000000..36daf1d Binary files /dev/null and b/doc/spec.pdf differ diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..77c29fe --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,26 @@ + + + + + ./tests/ + + + + + app/ + + + + + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..8eb2dd0 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,16 @@ + + + Options -MultiViews + + + RewriteEngine On + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^(.*)/$ /$1 [L,R=301] + + # Handle Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..391d6ca --- /dev/null +++ b/public/index.php @@ -0,0 +1,28 @@ +run($app->request); diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..9605e5f --- /dev/null +++ b/readme.md @@ -0,0 +1,21 @@ +## Lumen PHP Framework + +[![Build Status](https://travis-ci.org/laravel/lumen-framework.svg)](https://travis-ci.org/laravel/lumen-framework) +[![Total Downloads](https://poser.pugx.org/laravel/lumen-framework/d/total.svg)](https://packagist.org/packages/laravel/lumen-framework) +[![Latest Stable Version](https://poser.pugx.org/laravel/lumen-framework/v/stable.svg)](https://packagist.org/packages/laravel/lumen-framework) +[![Latest Unstable Version](https://poser.pugx.org/laravel/lumen-framework/v/unstable.svg)](https://packagist.org/packages/laravel/lumen-framework) +[![License](https://poser.pugx.org/laravel/lumen-framework/license.svg)](https://packagist.org/packages/laravel/lumen-framework) + +Laravel Lumen is a stunningly fast PHP micro-framework for building web applications with expressive, elegant syntax. We believe development must be an enjoyable, creative experience to be truly fulfilling. Lumen attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as routing, database abstraction, queueing, and caching. + +## Official Documentation + +Documentation for the framework can be found on the [Lumen website](http://lumen.laravel.com/docs). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell at taylor@laravel.com. All security vulnerabilities will be promptly addressed. + +### License + +The Lumen framework is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT) diff --git a/resources/views/.gitkeep b/resources/views/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 0000000..5db970b --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,9 @@ + + + Home + + +

PetPlus API v{{$version}}

+

Developed by Ecloga Apps © {{$year}}

+ + diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/ExampleTest.php b/tests/ExampleTest.php new file mode 100644 index 0000000..2b206c6 --- /dev/null +++ b/tests/ExampleTest.php @@ -0,0 +1,20 @@ +get('/'); + + $this->assertEquals( + $this->response->getContent(), $this->app->version() + ); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..651d9cb --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,14 @@ +