diff --git a/.env.example b/.env.example new file mode 100755 index 00000000..7becfff9 --- /dev/null +++ b/.env.example @@ -0,0 +1,67 @@ +# Application Settings + +APP_NAME=CloudSchool +APP_ENV=production +APP_KEY=base64:+m0h+ObGNu26eF4MVCgqX1ua0IukSUn7lRYInflNt8A= +APP_DEBUG=false +APP_URL=http://localhost +APP_TIMEZONE=Asia/Dhaka +APP_LOCALE=en +MAX_RECORD_PER_PAGE= 25 +INSTITUTE_CATEGORY=school +CURRENCY_SYMBOL="tk." +HOUSE_LIST="" + +# Its only for college. value will the the title of the year +DASHBOARD_STUDENT_COUNT_DEFAULT_ACADEMIC_YEAR=2018 + +# Website frontend Settings +MAX_RECORD_PER_PAGE_FRONT= 10 +GA_TRACK_ID= + + +# DB Settings + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=sms_2_0 +DB_USERNAME=root +DB_PASSWORD=root + +# Log, Session, Job Queue Settings + +BROADCAST_DRIVER=log +LOG_CHANNEL=stack +CACHE_DRIVER=file +SESSION_DRIVER=file +SESSION_LIFETIME=120 +QUEUE_CONNECTION=database + +# Storage Settings + +FILESYSTEM_DRIVER=local + +# Pusher Settings +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + + +# Email Server Settings + +MAIL_DRIVER=smtp +MAIL_HOST=smtp.mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME= +MAIL_PASSWORD= +MAIL_ENCRYPTION=tls + +# website admin email address for receive contact email + +MAIL_RECEIVER=contact@cloudschoolbd.com +MAIL_NO_REPLY_ADDRESS= + + +# Deployment settings + +DEVELOPER_MODE_ENABLED=false \ No newline at end of file diff --git a/.gitattributes b/.gitattributes old mode 100644 new mode 100755 index 176a458f..45e20c13 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,34 @@ * text=auto +*.css linguist-vendored +*.scss linguist-vendored +**/frontend/** linguist-vendored +adminlte.js linguist-vendored +bootstrap3-wysihtml5.all.min.js linguist-vendored +bootstrap.js linguist-vendored +colorpicker.js linguist-vendored +bootstrap-datetimepicker.min.js linguist-vendored +bootstrap-toggle.min.js linguist-vendored +webpack.backend.mix.js linguist-vendored +webpack.frontend.mix.js linguist-vendored + +# These files are text and should be normalized (Convert crlf => lf) +*.php text + +# These files are binary and should be left untouched +# (binary is a macro for -text -diff) +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.mov binary +*.mp4 binary +*.mp3 binary +*.flv binary +*.fla binary +*.swf binary +*.gz binary +*.zip binary +*.7z binary +*.ttf binary +*.pyc binary \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..dd84ea78 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 5cc2af20..1f117f97 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,22 @@ -/bootstrap/compiled.php -/vendor -composer.phar -composer.lock -.env.*.php -.env.php -.DS_Store -Thumbs.db -/public/admission +/node_modules +/public/hot +/public/storage +/public/css +/public/js +/public/fonts /public/images -.vcode \ No newline at end of file +/public/frontend +/public/mix-manifest.json +/storage/*.key +/vendor +/.idea +/.vscode +/.vagrant +Homestead.json +Homestead.yaml +npm-debug.log +yarn-error.log +yarn.lock +.env +storage/debugbar +database/seeds/DevPermissionTableSeeder.php diff --git a/AUTHORS b/AUTHORS new file mode 100755 index 00000000..340563d5 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,5 @@ +Copyright (c) 2020 CloudSchool + +Moral rights: + CloudSchool + H.R. Shadhin \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..f4efb1c1 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,49 @@ +## 3.0.1 # 2020-09-02 +- Update libs +- Fixed minor bugs + +## 3.0.0 # 2020-07-16 +- Upgrade support to PHP 7.2 from 7.1 +- Upgraded to Laravel 6(LTS) from 5.8 +- Bug fixes +- Update libraries +- Add new features + - Super admin access + - Promotion module +- Improve security, performance & UI +- Remove features + - Attendance upload + - Academic Calendar + - Work outside + +## 2.0.4 # 2019-08-13 +- Bug fixes +- Update libraries + +## 2.0.3 # 2019-07-22 +- Bug fixes +- Update frontend libs +- add laravel queue support for sms and email sending + +## 2.0.2 # 2019-06-22 +- Upgraded to Laravel 5.8 from 5.6 +- Update dependency libraries + +## 2.0.1 # 2019-06-02 +- Bug fixes + +## 2.0.0 # 2019-05-31 +- 2nd stable release +- Build with PHP 7.1 & Laravel 5.6 +- Complete re-write from v1.0 +- Added lot's of new features +- New theme +- Fronted website added + +## 1.0.0 # 2018-05-18 +- First stable release +- Build with PHP 5.6 & Laravel 4.2 + +## 0.1.0 # 2016-02-14 +- Init here +- Build with PHP 5.6 & Laravel 4.2 \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index f962bd89..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# Contribution Guidelines - -Please submit all issues and pull requests to the [hrshadhin/school-management-system](https://github.com/hrshadhin/school-management-system) repository! diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 index dbbe3558..bae94e18 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -633,8 +633,8 @@ the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -643,7 +643,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -658,4 +658,4 @@ specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see -. +. \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 7851c132..00000000 --- a/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# school-management-system(SMS) -Many School Mangers and Principal have been lacking the opportunity to manage their administrative activities using technological advancements such as Mobile Phones, Tablets, Computers and Internet. Currently it is difficult for School Mangers and Principals to know in real time how many students are attending classes, the Parents’ contact details of each student, or generating reports on school fee payments for each student. These are just some of the many solutions we are providing with our School Management System. - - -:loudspeaker: -**New theme, new features, more dynamic with support of PHP 7.2 and Laravel 5.6 is comming soon!!!** - -## Installation and use -# SMS is build using Laravel 4.2 -``` -$ git clone https://github.com/hrshadhin/school-management-system.git -``` -``` -$ cd school-management-system -``` - -**Change configuration according your need and create Database** -``` -$ composer install -``` -``` -$ php artisan migrate -``` -``` -$ php artisan db:seed -``` -``` -$ php artisan serve -``` -** http://localhost:8000 ** -USER: admin -PASS: demo123 - -# Demo Live Link -URL: http://school.hrshadhin.me -USER: admin -PASS: demo123 - -:information_desk_person: -**About SMS Sending** -- If you configure api link [here](https://github.com/hrshadhin/school-management-system/blob/master/app/controllers/attendanceController.php#L221) then sms will be send to the number. -- If you want to send bulk sms from the menu you have to congifure api link - also in [here](https://github.com/hrshadhin/school-management-system/blob/master/app/controllers/smsController.php#L179). Bulk sms will not send currently it store in queue inside the database - so you have process that queue. For that you can set a cron job with below command: - ``` - php artisan queue:listen - ``` - -# Screenshot - - - - - - - - - - - - - - - - - - - - -# License -SMS is open-sourced software licensed under the AGPL-3.0 license. Frameworks and libraries has it own licensed diff --git a/app/AboutContent.php b/app/AboutContent.php new file mode 100755 index 00000000..730dc922 --- /dev/null +++ b/app/AboutContent.php @@ -0,0 +1,35 @@ +command('inspire') + // ->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Employee.php b/app/Employee.php new file mode 100755 index 00000000..b1ebae8d --- /dev/null +++ b/app/Employee.php @@ -0,0 +1,153 @@ +belongsTo('App\User', 'user_id'); + } + + + public function getGenderAttribute($value) + { + return Arr::get(AppHelper::GENDER, $value); + } + + public function getShiftAttribute($value) + { + return Arr::get(AppHelper::EMP_SHIFTS, $value); + } + + public function getDesignationAttribute($value) + { + return Arr::get(AppHelper::EMPLOYEE_DESIGNATION_TYPES, $value); + } + + + public function setJoiningDateAttribute($value) + { + $this->attributes['joining_date'] = Carbon::createFromFormat('d/m/Y', $value)->format('Y-m-d'); + + } + + public function setLeaveDateAttribute($value) + { + if(strlen($value)) { + $this->attributes['leave_date'] = Carbon::createFromFormat('d/m/Y', $value)->format('Y-m-d'); + } + else{ + $this->attributes['leave_date'] = null; + } + + } + + public function setDutyStartAttribute($value) + { + if(strlen($value)){ + $this->attributes['duty_start'] = Carbon::createFromFormat('h:i a', $value)->format('H:i:s'); + } + + } + + public function getDutyStartAttribute($value) + { + if(!strlen($value)){ + return null; + } + + return Carbon::parse($value); + + } + + public function setDutyEndAttribute($value) + { + if(strlen($value)){ + $this->attributes['duty_end'] = Carbon::createFromFormat('h:i a', $value)->format('H:i:s'); + } + + } + + public function getDutyEndAttribute($value) + { + if(!strlen($value)){ + return null; + } + return Carbon::parse($value); + + } + + + public function getReligionAttribute($value) + { + return Arr::get(AppHelper::RELIGION, $value); + } + + public function class() + { + return $this->hasMany('App\IClass', 'teacher_id'); + } + + public function section() + { + return $this->hasMany('App\Section', 'teacher_id'); + } + + public function role() + { + return $this->belongsTo('App\Role', 'role_id'); + } + + + public function attendance() + { + + return $this->hasMany('App\EmployeeAttendance', 'employee_id'); + } + + +} diff --git a/app/EmployeeAttendance.php b/app/EmployeeAttendance.php new file mode 100755 index 00000000..3c5b81aa --- /dev/null +++ b/app/EmployeeAttendance.php @@ -0,0 +1,75 @@ +belongsTo('App\Employee', 'employee_id'); + } + + public function setAttendanceDateAttribute($value) + { + $this->attributes['attendance_date'] = Carbon::createFromFormat('d/m/Y', $value)->format('Y-m-d'); + } + + public function getAttendanceDateAttribute($value) + { + return Carbon::parse($value)->format('d/m/Y'); + } + + + public function getPresentAttribute($value) + { + return Arr::get(AppHelper::ATTENDANCE_TYPE, $value); + } + + public function scopeEmployee($query, $employee) + { + if($employee){ + return $query->where('employee_id', $employee); + } + + return $query; + } + + public function scopeCountOrGet($query, $isCount) + { + if($isCount){ + return $query->count(); + } + + return $query->get(); + } + +} diff --git a/app/Event.php b/app/Event.php new file mode 100755 index 00000000..9aa94691 --- /dev/null +++ b/app/Event.php @@ -0,0 +1,36 @@ +belongsTo('App\IClass', 'class_id'); + } + + public function scopeIclass($query, $classId) + { + if($classId){ + return $query->where('class_id', $classId); + } + + return $query; + } + + public function marks() + { + return $this->hasMany('App\Mark', 'exam_id'); + + } + + public function result() + { + return $this->hasMany('App\Result', 'exam_id'); + + } +} diff --git a/app/ExamRule.php b/app/ExamRule.php new file mode 100755 index 00000000..22ef7844 --- /dev/null +++ b/app/ExamRule.php @@ -0,0 +1,55 @@ +belongsTo('App\IClass', 'class_id'); + } + public function exam() + { + return $this->belongsTo('App\Exam', 'exam_id'); + } + + public function combineSubject() + { + return $this->belongsTo('App\Subject', 'combine_subject_id'); + } + + public function subject() + { + return $this->belongsTo('App\Subject', 'subject_id'); + } + + public function grade() + { + return $this->belongsTo('App\Grade', 'grade_id'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100755 index 00000000..382c13fd --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,94 @@ +getStatusCode(); + + if(!env('APP_DEBUG', false)) { + if (!$request->user() && AppHelper::isFrontendEnabled()) { + $locale = Session::get('user_locale'); + App::setLocale($locale); + + if ($statusCode == 404) { + return response()->view('errors.front_404', [], 404); + } + + if ($statusCode == 500) { + + return response()->view('errors.front_500', [], 500); + } + + } + } + + if ($request->user()) { + if ($statusCode == 404) { + return response()->view('errors.back_404', [], 404); + } + + if ($statusCode == 401) { + return response()->view('errors.back_401', [], 404); + } + } + + + + } + + + + return parent::render($request, $exception); + } +} diff --git a/app/Grade.php b/app/Grade.php new file mode 100755 index 00000000..ff200606 --- /dev/null +++ b/app/Grade.php @@ -0,0 +1,24 @@ +isMethod('post')) {// + $this->validate($request, [ + 'hiddenId' => 'required|integer', + ]); + $iclass = IClass::findOrFail($request->get('hiddenId')); + + $haveSection = Section::where('class_id', $iclass->id)->count(); + $haveStudent = Registration::where('class_id', $iclass->id)->count(); + if($haveStudent || $haveSection){ + return redirect()->route('academic.class')->with('error', 'Can not delete! Class used in section or have student.'); + } + + $iclass->delete(); + + //now notify the admins about this record + $msg = $iclass->name." class deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //invalid cache + Cache::forget('selected_classes_4_dashboard'); + + return redirect()->route('academic.class')->with('success', 'Record deleted!'); + } + + //for get request + $iclasses = IClass::orderBy('order', 'asc')->get(); + + return view('backend.academic.iclass.list', compact('iclasses')); + } + + /** + * class create, read, update manage + * @return \Illuminate\Http\Response + */ + public function classCru(Request $request, $id=0) + { + //for save on POST request + if ($request->isMethod('post')) { + $this->validate($request, [ + 'name' => 'required|min:2|max:255', + 'numeric_value' => 'required|integer', + 'order' => 'required|integer', + 'group' => 'nullable|max:20', + 'note' => 'max:500', + 'duration' => 'integer', + 'max_selective_subject' => 'nullable|integer' + ]); + + $data = $request->all(); + if(!$id){ + $data['status'] = AppHelper::ACTIVE; + + } + else{ + unset($data['numeric_value']); + } + if($request->has('have_selective_subject')){ + $data['have_selective_subject'] = true; + } + else{ + $data['have_selective_subject'] = false; + } + if($request->has('have_elective_subject')){ + $data['have_elective_subject'] = true; + } + else{ + $data['have_elective_subject'] = false; + } + if($request->has('is_open_for_admission')){ + $data['is_open_for_admission'] = 1; + } + else{ + $data['is_open_for_admission'] = 0; + } + + IClass::updateOrCreate( + ['id' => $id], + $data + ); + + if(!$id){ + //now notify the admins about this record + $msg = $data['name']." class added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //invalid cache + Cache::forget('selected_classes_4_dashboard'); + } + + + $msg = "Class "; + $msg .= $id ? 'updated.' : 'added.'; + + return redirect()->route('academic.class')->with('success', $msg); + } + + //for get request + $iclass = IClass::find($id); + $group = 'None'; + $have_selective_subject = 0; + $have_elective_subject = 0; + $is_open_for_admission = 0; + + if($iclass){ + $group = $iclass->group; + $have_selective_subject = $iclass->have_selective_subject; + $have_elective_subject = $iclass->have_elective_subject; + $is_open_for_admission = $iclass->is_open_for_admission; + + } + + return view('backend.academic.iclass.add', compact('iclass','group', + 'have_elective_subject', + 'have_selective_subject', + 'is_open_for_admission' + )); + } + + /** + * class status change + * @return mixed + */ + public function classStatus(Request $request, $id=0) + { + + $iclass = IClass::findOrFail($id); + if(!$iclass){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + $iclass->status = (string)$request->get('status'); + + $iclass->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + } + + + /** + * section manage + * @return \Illuminate\Http\Response + */ + public function sectionIndex(Request $request) + { + + //for save on POST request + if ($request->isMethod('post')) {// + $this->validate($request, [ + 'hiddenId' => 'required|integer', + ]); + $section = Section::findOrFail($request->get('hiddenId')); + + $haveStudent = Registration::where('section_id', $section->id)->count(); + if($haveStudent){ + return redirect()->route('academic.section')->with('error', 'Can not delete! Section have student.'); + } + + $section->delete(); + + //now notify the admins about this record + $msg = $section->name." section deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('academic.section')->with('success', 'Record deleted!'); + } + + + // check for ajax request here + if($request->ajax()){ + $class_id = $request->query->get('class', 0); + $sections = Section::select('id', 'name as text')->where('class_id',$class_id)->where('status', AppHelper::ACTIVE)->orderBy('name', 'asc')->get(); + return $sections; + } + + $sections = Section::with('teacher')->with('class')->orderBy('name', 'asc')->get(); + + return view('backend.academic.section.list', compact('sections')); + } + + /** + * section create, read, update manage + * @return \Illuminate\Http\Response + */ + public function sectionCru(Request $request, $id=0) + { + //for save on POST request + if ($request->isMethod('post')) { + ; + $this->validate($request, [ + 'name' => 'required|min:1|max:255', + 'capacity' => 'required|numeric', + 'class_id' => 'required|integer', + 'teacher_id' => 'required|integer', + 'note' => 'max:500', + ]); + + $data = $request->all(); + + Section::updateOrCreate( + ['id' => $id], + $data + ); + + + if(!$id){ + //now notify the admins about this record + $msg = $data['name']." section added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + } + + $msg = "section "; + $msg .= $id ? 'updated.' : 'added.'; + + return redirect()->route('academic.section')->with('success', $msg); + } + + //for get request + $section = Section::find($id); + + $teachers = Employee::where('role_id', AppHelper::EMP_TEACHER) + ->where('status', AppHelper::ACTIVE) + ->orderBy('order', 'asc') + ->pluck('name', 'id'); + $teacher = null; + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $iclass = null; + + if($section){ + $teacher = $section->teacher_id; + $iclass = $section->class_id; + } + + return view('backend.academic.section.add', compact('section', 'iclass', 'classes', 'teachers', 'teacher')); + } + + /** + * section status change + * @return mixed + */ + public function sectionStatus(Request $request, $id=0) + { + + $section = Section::findOrFail($id); + if(!$section){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + $section->status = (string)$request->get('status'); + + $section->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + } + + + /** + * subject manage + * @return \Illuminate\Http\Response + */ + public function subjectIndex(Request $request) + { + + //for save on POST request + if ($request->isMethod('post')) {// + $this->validate($request, [ + 'hiddenId' => 'required|integer', + ]); + $subject = Subject::findOrFail($request->get('hiddenId')); + + if(session('user_role_id',0) == AppHelper::USER_STUDENT){ + abort(401); + } + + //todo: add delete protection here +// $haveExam = Exam::where('section_id', $subject->id)->count(); +// if($haveExam){ +// return redirect()->route('academic.section')->with('error', 'Can not delete! Section have student.'); +// } + + $subject->delete(); + + //now notify the admins about this record + $msg = $subject->name." subject deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //invalid dashboard cache + Cache::forget('SubjectCount'); + + return redirect()->route('academic.subject')->with('success', 'Record deleted!'); + } + + // check for ajax request here + if($request->ajax()){ + $class_id = $request->query->get('class', 0); + $subjectType = $request->query->get('type', 0); + if(session('user_role_id',0) == AppHelper::USER_TEACHER){ + if(!auth()->user()->teacher){ + return response('Access denied!', 401); + } + $teacherId = auth()->user()->teacher->id; + $subjects = Subject::select('subjects.id', 'subjects.name as text') + ->where('class_id',$class_id) + ->sType($subjectType) + ->join('teacher_subjects','teacher_subjects.subject_id','subjects.id') + ->where('teacher_subjects.teacher_id', $teacherId) + ->where('subjects.status', AppHelper::ACTIVE) + ->orderBy('subjects.order','asc') + ->get(); + } + else { + $subjects = Subject::select('id', 'name as text') + ->where('class_id', $class_id) + ->sType($subjectType) + ->where('status', AppHelper::ACTIVE) + ->orderBy('order', 'asc') + ->get(); + } + return $subjects; + } + + + $class_id = $request->query->get('class',0); + $subjects = Subject::iclass($class_id)->with('teachers') + ->with(['class' => function($q){ + $q->select('id','name'); + }]) + ->orderBy('order', 'asc') + ->get(); + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $iclass = $class_id; + + + return view('backend.academic.subject.list', compact('subjects','classes', 'iclass')); + } + + /** + * subject create, read, update manage + * @return \Illuminate\Http\Response + */ + public function subjectCru(Request $request, $id=0) + { + //for save on POST request + if ($request->isMethod('post')) { + + $this->validate($request, [ + 'name' => 'required|min:1|max:255', + 'code' => 'required|min:1|max:255', + 'type' => 'required|numeric', + 'class_id' => 'required|integer', + 'teacher_id' => 'required|array', + 'order' => 'required|integer', + ]); + + DB::beginTransaction(); + try { + $data = $request->all(); + + if($request->has('exclude_in_result')){ + $data['exclude_in_result'] = true; + } + else{ + $data['exclude_in_result'] = false; + } + + $subject = Subject::updateOrCreate( + ['id' => $id], + $data + ); + $subject->teachers()->sync($request->get('teacher_id')); + DB::commit(); + } catch (\Exception $e) { + DB::rollback(); + $message = str_replace(array("\r", "\n", "'", "`"), ' ', $e->getMessage()); + return redirect()->back()->with("error", $message); + } + + + if(!$id){ + //now notify the admins about this record + $msg = $data['name']." subject added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //invalid dashboard cache + Cache::forget('SubjectCount'); + } + + $msg = "subject "; + $msg .= $id ? 'updated.' : 'added.'; + + return redirect()->route('academic.subject')->with('success', $msg); + } + + //for get request + $subject = Subject::with('teachers')->where('id',$id)->first(); + + $teachers = Employee::where('role_id', AppHelper::EMP_TEACHER) + ->where('status', AppHelper::ACTIVE) + ->orderBy('order', 'asc') + ->pluck('name', 'id'); + $teacher_ids = []; + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $iclass = null; + $subjectType = null; + $exclude_in_result = 0; + + if($subject){ + $teacher_ids = $subject->teachers->pluck('id')->toArray(); + $iclass = $subject->class_id; + $subjectType = $subject->getOriginal('type'); + $exclude_in_result = $subject->exclude_in_result; + } + return view('backend.academic.subject.add', compact('subject', 'iclass', 'classes', + 'teachers', 'teacher_ids', 'subjectType', 'exclude_in_result')); + + } + + /** + * subject status change + * @return mixed + */ + public function subjectStatus(Request $request, $id=0) + { + + $subject = Subject::findOrFail($id); + if(!$subject){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + $subject->status = (string)$request->get('status'); + + $subject->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + } + + + +} diff --git a/app/Http/Controllers/Backend/AdministratorController.php b/app/Http/Controllers/Backend/AdministratorController.php new file mode 100755 index 00000000..8b3ce3ad --- /dev/null +++ b/app/Http/Controllers/Backend/AdministratorController.php @@ -0,0 +1,474 @@ +isMethod('post')) {// + $this->validate($request, [ + 'hiddenId' => 'required|integer', + ]); + $year = AcademicYear::findOrFail($request->get('hiddenId')); + + // now check is academic year set or not + $settings = AppHelper::getAppSettings(); + $haveStudent = Registration::where('academic_year_id', $year->id)->count(); + if((isset($settings['academic_year']) && (int)$settings['academic_year'] == $year->id) || ($haveStudent > 0)){ + return redirect()->route('administrator.academic_year')->with('error', 'Can not delete it because this year have student or have in default setting.'); + } + $year->delete(); + + return redirect()->route('administrator.academic_year')->with('success', 'Record deleted!'); + } + + + //for ajax request + + if($request->ajax()){ + //for promotion + $currentAcademicYearId = $request->query->get('current_academic_year_id',0); + $academicYears = AcademicYear::where('status', AppHelper::ACTIVE) + ->when($currentAcademicYearId, function ($query) use($currentAcademicYearId){ + $query->where('id', '!=', $currentAcademicYearId); + }) + ->orderBy('id', 'desc') + ->select('id','title as text') + ->get(); + + return response()->json($academicYears); + + } + + //for get request + $academicYears = AcademicYear::orderBy('id', 'desc')->get(); + + return view('backend.administrator.academic.list', compact('academicYears')); + } + + /** + * academic year manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function academicYearCru(Request $request, $id=0) + { + //for save on POST request + if ($request->isMethod('post')) { + ; + $this->validate($request, [ + 'title' => 'required|min:4|max:255', + 'start_date' => 'required|min:10|max:255', + 'end_date' => 'required|min:10|max:255', + ]); + + $data = $request->all(); + $datetime = Carbon::createFromFormat('d/m/Y',$data['start_date']); + $data['start_date'] = $datetime; + $datetime = Carbon::createFromFormat('d/m/Y',$data['end_date']); + $data['end_date'] = $datetime; + if($request->has('is_open_for_admission')){ + $data['is_open_for_admission'] = 1; + } + else{ + $data['is_open_for_admission'] = 0; + } + if(!$id){ + $data['status'] = '1'; + } + + AcademicYear::updateOrCreate( + ['id' => $id], + $data + ); + $msg = "Academic year "; + $msg .= $id ? 'updated.' : 'added.'; + + return redirect()->route('administrator.academic_year')->with('success', $msg); + } + + //for get request + $academicYear = AcademicYear::find($id); + $is_open_for_admission = 0; + if($academicYear){ + $is_open_for_admission = $academicYear->is_open_for_admission; + } + + return view('backend.administrator.academic.add', compact('academicYear','is_open_for_admission')); + } + + /** + * academic year manage + * + * @param Request $request + * @return array + */ + public function academicYearChangeStatus(Request $request, $id=0) + { + $year = AcademicYear::findOrFail($id); + if(!$year){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + $settings = AppHelper::getAppSettings(); + if(isset($settings['academic_year']) && (int)$settings['academic_year'] == $year->id){ + return [ + 'success' => false, + 'message' => 'Can not change status! Year is using as academic year right now.' + ]; + } + + $year->status = (string)$request->get('status'); + + $year->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function userIndex() + { + + $users = User::rightJoin('user_roles', 'users.id', '=', 'user_roles.user_id') + ->leftJoin('roles', 'user_roles.role_id', '=', 'roles.id') + ->where('user_roles.role_id', '=', AppHelper::USER_ADMIN) + ->where('users.is_super_admin', false) + ->select('users.*','roles.name as role') + ->get(); + + return view('backend.administrator.user.list', compact('users')); + + } + + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function userCreate() + { + $user = null; + return view('backend.administrator.user.add', compact('user')); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function userStore(Request $request) + { + + $this->validate( + $request, [ + 'name' => 'required|min:5|max:255', + 'email' => 'email|max:255|unique:users,email', + 'username' => 'required|min:5|max:255|unique:users,username', + 'password' => 'required|min:6|max:50', + 'phone_no' => 'nullable|max:15', + + ] + ); + + $data = $request->all(); + + + DB::beginTransaction(); + try { + //now create user + $user = User::create( + [ + 'name' => $data['name'], + 'username' => $request->get('username'), + 'email' => $data['email'], + 'phone_no' => $data['phone_no'], + 'password' => bcrypt($request->get('password')), + 'remember_token' => null, + ] + ); + //now assign the user to role + UserRole::create( + [ + 'user_id' => $user->id, + 'role_id' => AppHelper::USER_ADMIN + ] + ); + + DB::commit(); + return redirect()->route('administrator.user_create')->with('success', 'System User added!'); + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + return redirect()->route('administrator.user_create')->with("error",$message); + } + + } + + public function useredit($id) + { + + $user = User::rightJoin('user_roles', 'users.id', '=', 'user_roles.user_id') + ->where('user_roles.role_id', '=', AppHelper::USER_ADMIN) + ->where('users.id', $id) + ->where('users.is_super_admin', false) + ->select('users.*','user_roles.role_id') + ->first(); + + if(!$user){ + abort(404); + } + + + return view('backend.administrator.user.add', compact('user')); + + } + + /** + * Update the specified resource in storage. + * + * @param Request $request + * @param $id + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Validation\ValidationException + */ + public function userUpdate(Request $request, $id) + { + $user = User::rightJoin('user_roles', 'users.id', '=', 'user_roles.user_id') + ->where('user_roles.role_id', '=', AppHelper::USER_ADMIN) + ->where('users.id', $id) + ->where('users.is_super_admin', false) + ->select('users.*','user_roles.role_id') + ->first(); + + if(!$user){ + abort(404); + } + + //validate form + $this->validate( + $request, [ + 'name' => 'required|min:5|max:255', + 'email' => 'email|max:255|unique:users,email,'.$user->id, + 'phone_no' => 'nullable|max:15', + ] + ); + + $data['name'] = $request->get('name'); + $data['email'] = $request->get('email'); + $data['phone_no'] = $request->get('phone_no'); + $user->fill($data); + $user->save(); + + return redirect()->route('administrator.user_index')->with('success', 'System User updated!'); + + + } + + + /** + * Remove the specified resource from storage. + * + * @param $id + * @return \Illuminate\Http\RedirectResponse + */ + public function userDestroy($id) + { + + $user = User::where('is_super_admin', false)->where('id', $id)->first(); + if(!$user){ + abort(404); + } + + if($user->id == auth()->user()->id){ + return redirect()->route('administrator.user_index')->with('error', 'You can\'t delete yourself!'); + + } + + + $userRole = UserRole::where('user_id', $user->id) + ->first(); + + if(!$userRole){ + return redirect()->route('administrator.user_index')->with('error', 'Don not mess with the system'); + + } + + $user->delete(); + return redirect()->route('administrator.user_index')->with('success', 'Admin user deleted.'); + + } + + /** + * status change + * @return mixed + */ + public function userChangeStatus(Request $request, $id=0) + { + + $user = User::where('is_super_admin', false)->where('id', $id)->first(); + + if(!$user){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + if($user->id == auth()->user()->id){ + return [ + 'success' => false, + 'message' => 'You can\'t change your own status!' + ]; + + } + + $status = (string)$request->get('status'); + + $user->status = $status; + $user->force_logout = (int)$status ? 0 : 1; + $user->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + } + + /* Handle an user password change + * + * @return Response + */ + public function userResetPassword(Request $request) + { + + if ($request->isMethod('post')) { + + //validate form + $this->validate($request, [ + 'password' => 'required|confirmed|min:6|max:50', + ]); + + $user = User::where('is_super_admin', false)->where('id', $request->get('user_id'))->first(); + if(!$user){ + abort(404); + } + + $user->password = bcrypt($request->get('password')); + $user->force_logout = 1; + $user->save(); + + return redirect()->route('administrator.user_password_reset')->with('success', 'Password successfully changed.'); + + } + + $users = User::select(DB::raw("CONCAT(name,'[',username,']') AS name"),'id') + ->where('is_super_admin', false) + ->where('status', '1') + ->pluck('name','id'); + + return view('backend.administrator.user.change_password', compact('users')); + } + + + private function formatPermissions($permissions, $rolePermissions=null){ + //now build the structure to view on blade + //$permissionList[group_name][module_name][permission_verb][permission_ids] + $permissionList = []; + + foreach ($permissions as $permission){ + + $namePart = preg_split("/\s+(?=\S*+$)/",$permission->name); + $moduleName = $namePart[0]; + $verb = $namePart[1]; + + $permissionList[$permission->group][$moduleName][$verb]['ids'][] = $permission->id; + + if($rolePermissions){ + $permissionList[$permission->group][$moduleName][$verb]['checked'] = in_array($permission->id, $rolePermissions) ? 1 : 0; + + } + else{ + $permissionList[$permission->group][$moduleName][$verb]['checked'] = 0; + + } + } + + return $permissionList; + + } + + private function proccessInputPermissions($permissionList, $type, $roleOrUserId, $loggedInUser){ + + $rolePermissions = []; + + $now = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + if(count($permissionList)) { + + foreach ($permissionList as $permissions) { + $permissions = explode(',', $permissions); + foreach ($permissions as $permission) { + $rolePermissions[] = [ + $type => $roleOrUserId, + 'permission_id' => $permission, + 'created_at' => $now, + 'updated_at' => $now, + 'created_by' => $loggedInUser, + 'updated_by' => $loggedInUser, + ]; + } + } + + + } + + //now add common permissions + $permissions = Permission::select('id')->where('group', 'Common')->get(); + foreach ($permissions as $permission) { + $rolePermissions[] = [ + $type => $roleOrUserId, + 'permission_id' => $permission->id, + 'created_at' => $now, + 'updated_at' => $now, + 'created_by' => $loggedInUser, + 'updated_by' => $loggedInUser, + ]; + } + + return $rolePermissions; + } + +} diff --git a/app/Http/Controllers/Backend/ClassProfileController.php b/app/Http/Controllers/Backend/ClassProfileController.php new file mode 100755 index 00000000..130c6ff5 --- /dev/null +++ b/app/Http/Controllers/Backend/ClassProfileController.php @@ -0,0 +1,119 @@ + 'The :attribute size must be under 2MB.', + 'image_sm.dimensions' => 'The :attribute dimensions must be minimum 370 X 280.', + 'image_lg.max' => 'The :attribute size must be under 2MB.', + 'image_lg.dimensions' => 'The :attribute dimensions must be minimum 870 X 460.', + ]; + $this->validate($request, [ + 'name' => 'required|min:5|max:255', + 'image_sm' => 'required|mimes:jpeg,jpg,png|max:2048|dimensions:min_width=370,min_height=280', + 'image_lg' => 'required|mimes:jpeg,jpg,png|max:2048|dimensions:min_width=870,min_height=460', + 'teacher' => 'required|min:5|max:255', + 'room_no' => 'required|min:5|max:255', + 'capacity' => 'required|integer', + 'shift' => 'required|min:5|max:255', + 'short_description' => 'required|min:5|max:255' + ], $messages); + + $storagepath = $request->file('image_sm')->store('public/class_profile'); + $fileNameSm = basename($storagepath); + $storagepath = $request->file('image_lg')->store('public/class_profile'); + $fileNameLg = basename($storagepath); + + $data = $request->all(); + $data['slug'] = strtolower(str_replace(' ','-', $data['name'])); + $data['image_sm'] = $fileNameSm; + $data['image_lg'] = $fileNameLg; + + ClassProfile::create($data); + + return redirect()->route('class_profile.create')->with('success', 'New class profile created.'); + } + + public function edit($id) + { + $profile = ClassProfile::findOrFail($id); + return view('backend.site.class.add', compact('profile')); + } + + public function update(Request $request, $id) + { + //validate form + $messages = [ + 'image_sm.max' => 'The :attribute size must be under 2MB.', + 'image_sm.dimensions' => 'The :attribute dimensions must be minimum 370 X 280.', + 'image_lg.max' => 'The :attribute size must be under 2MB.', + 'image_lg.dimensions' => 'The :attribute dimensions must be minimum 870 X 460.', + ]; + $this->validate($request, [ + 'name' => 'required|min:5|max:255', + 'image_sm' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=370,min_height=280', + 'image_lg' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=870,min_height=460', + 'teacher' => 'required|min:5|max:255', + 'room_no' => 'required|min:5|max:255', + 'capacity' => 'required|integer', + 'shift' => 'required|min:5|max:255', + 'short_description' => 'required|min:5|max:255' + ], $messages); + + $profile = ClassProfile::findOrFail($id); + $data = $request->all(); + + if($request->hasFile('image_sm')){ + $file_path = "public/class_profile/".$profile->image_sm; + Storage::delete($file_path); + + $storagepath = $request->file('image_sm')->store('public/class_profile'); + $fileName = basename($storagepath); + $data['image_sm'] = $fileName; + + } + if($request->hasFile('image_lg')){ + $file_path = "public/class_profile/".$profile->image_lg; + Storage::delete($file_path); + + $storagepath = $request->file('image_lg')->store('public/class_profile'); + $fileName = basename($storagepath); + $data['image_lg'] = $fileName; + + } + + $profile->fill($data); + $profile->save(); + + return redirect()->route('class_profile.index')->with('success', 'Class profile updated.'); + } + + public function destroy($id) + { + $profile = ClassProfile::findOrFail($id); + $profile->delete(); + return redirect()->route('class_profile.index')->with('success', 'Class profile deleted.'); + } +} diff --git a/app/Http/Controllers/Backend/EmployeeAttendanceController.php b/app/Http/Controllers/Backend/EmployeeAttendanceController.php new file mode 100755 index 00000000..aabbd114 --- /dev/null +++ b/app/Http/Controllers/Backend/EmployeeAttendanceController.php @@ -0,0 +1,245 @@ +ajax() && $request->query->get('employee_id', 0)) { + $id = $request->query->get('employee_id', 0); + $attendances = EmployeeAttendance::where('employee_id', $id) + ->whereYear('attendance_date', date('Y')) + ->select('attendance_date', 'present', 'employee_id') + ->orderBy('attendance_date', 'asc') + ->get(); + return response()->json($attendances); + } + + // get query parameter for filter the fetch + $employee_id = $request->query->get('employee_id', 0); + $attendance_date = $request->query->get('attendance_date', date('d/m/Y')); + + + //if its a ajax request that means come from attendance add exists checker + if ($request->ajax()) { + $attendances = $this->getAttendanceByFilters(null, $attendance_date, true); + return response()->json($attendances); + } + + + $employees = Employee::where('status', AppHelper::ACTIVE) + ->pluck('name', 'id'); + + + //now fetch attendance data + $attendances = []; + if (strlen($attendance_date) >= 10) { + + $attendances = $this->getAttendanceByFilters($employee_id, $attendance_date); + } + + + + return view('backend.attendance.employee.list', compact( + 'employees', + 'employee_id', + 'attendance_date', + 'attendances' + )); + } + + private function getAttendanceByFilters($employee_id = null, $attendance_date, $isCount = false) + { + $att_date = Carbon::createFromFormat('d/m/Y', $attendance_date)->toDateString(); + return $attendances = EmployeeAttendance::with('employee') + ->whereDate('attendance_date', $att_date) + ->Employee($employee_id) + ->CountOrGet($isCount); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $employees = Employee::select('name', 'id', 'id_card') + ->where('status', AppHelper::ACTIVE) + ->get(); + + $sendNotification = AppHelper::getAppSettings('student_attendance_notification'); + + + return view('backend.attendance.employee.add', compact( + 'employees', + 'sendNotification' + )); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + + + $rules = [ + 'attendance_date' => 'required|min:10|max:11', + 'employeeIds' => 'required', + 'inTime' => 'required', + 'outTime' => 'required' + ]; + + $this->validate($request, $rules); + + + //check attendance exists or not + $attendance_date = $request->get('attendance_date', ''); + $attendances = $this->getAttendanceByFilters(null, $attendance_date, true); + if ($attendances) { + return redirect()->route('employee_attendance.create')->with("error", "Attendance already exists!"); + } + + + //process the insert data + $employees = $request->get('employeeIds'); + $inTimes = $request->get('inTime'); + $outTimes = $request->get('outTime'); + + $attendance_date = Carbon::createFromFormat('d/m/Y', $request->get('attendance_date'))->format('Y-m-d'); + + //fetch employee working hours + $workTimes = Employee::where('status', AppHelper::ACTIVE)->get()->reduce(function ($workTimes, $employee) use ($request) { + $workTimes[$employee->id] = [ + 'in_time' => null, + 'out_time' => null + ]; + if ($employee->duty_start) { + $workTimes[$employee->id]['in_time'] = Carbon::createFromFormat('d/m/Y H:i:s', $request->get('attendance_date') . ' ' . $employee->getOriginal('duty_start')); + } + + if ($employee->duty_end) { + $workTimes[$employee->id]['out_time'] = Carbon::createFromFormat('d/m/Y H:i:s', $request->get('attendance_date') . ' ' . $employee->getOriginal('duty_end')); + } + + return $workTimes; + }); + + + $dateTimeNow = Carbon::now(env('APP_TIMEZONE', 'Asia/Dhaka')); + $attendances = []; + $absentIds = []; + $parseError = false; + $message = ""; + foreach ($employees as $employee) { + + $inTime = Carbon::createFromFormat('d/m/Y h:i a', $inTimes[$employee]); + $outTime = Carbon::createFromFormat('d/m/Y h:i a', $outTimes[$employee]); + + if ($outTime->lessThan($inTime)) { + $message = "Out time can't be less than in time!"; + $parseError = true; + } + + $timeDiff = $inTime->diff($outTime)->format('%H:%I'); + $isPresent = ($timeDiff == "00:00") ? "0" : "1"; + + $status = []; + //late or early out find + if ($timeDiff != "00:00" && isset($workTimes[$employee]) && $workTimes[$employee]['in_time'] && $workTimes[$employee]['out_time']) { + + if ($inTime->greaterThan($workTimes[$employee]['in_time'])) { + $status[] = 1; + } + + if ($outTime->lessThan($workTimes[$employee]['out_time'])) { + $status[] = 2; + } + } + + $attendances[] = [ + "employee_id" => $employee, + "attendance_date" => $attendance_date, + "in_time" => $inTime, + "out_time" => $outTime, + "working_hour" => $timeDiff, + "status" => implode(',', $status), + "present" => $isPresent, + "created_at" => $dateTimeNow, + "created_by" => auth()->user()->id, + ]; + + if (!$isPresent) { + $absentIds[] = $employee; + } + } + + if ($parseError) { + return redirect()->route('employee_attendance.create')->with("error", $message); + } + + + DB::beginTransaction(); + try { + + EmployeeAttendance::insert($attendances); + DB::commit(); + } catch (\Exception $e) { + DB::rollback(); + $message = str_replace(array("\r", "\n", "'", "`"), ' ', $e->getMessage()); + return redirect()->route('employee_attendance.create')->with("error", $message); + } + + $m = "Attendance saved successfully."; + return redirect()->route('employee_attendance.create')->with("success", $m); + } + + /** + * status change + * @return mixed + */ + public function changeStatus(Request $request, $id = 0) + { + + $attendance = EmployeeAttendance::findOrFail($id); + if (!$attendance) { + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + $attendance->present = (string) $request->get('status'); + + $attendance->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + } + +} diff --git a/app/Http/Controllers/Backend/EmployeeController.php b/app/Http/Controllers/Backend/EmployeeController.php new file mode 100755 index 00000000..1ecf27da --- /dev/null +++ b/app/Http/Controllers/Backend/EmployeeController.php @@ -0,0 +1,534 @@ +orderBy('order', 'asc')->get(); + + return view('backend.hrm.employee.list', compact('employees')); + + } + + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $employee = null; + $gender = 1; + $religion = 1; + $role = 0; + $shift = 1; + $roles = Role::whereNotIn('id', [AppHelper::USER_ADMIN, AppHelper::USER_TEACHER, AppHelper::USER_STUDENT, AppHelper::USER_PARENTS])->pluck('name', 'id'); + $designation = 0; + return view('backend.hrm.employee.add', compact('employee', 'gender', 'religion', 'role', 'roles', 'shift', 'designation')); + } + + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + //validate form + $messages = [ + 'photo.max' => 'The :attribute size must be under 200kb.', + 'signature.max' => 'The :attribute size must be under 100kb.', + 'photo.dimensions' => 'The :attribute dimensions min 150 X 150.', + 'signature.dimensions' => 'The :attribute dimensions max 170 X 60.', + ]; + + $rules = [ + 'name' => 'required|min:5|max:255', + 'photo' => 'mimes:jpeg,jpg,png|max:200|dimensions:min_width=150,min_height=150', + 'signature' => 'nullable|mimes:jpeg,jpg,png|max:100|dimensions:max_width=170,max_height=60', + 'designation' => 'required|integer', + 'qualification' => 'max:255', + 'dob' => 'min:10', + 'gender' => 'required|integer', + 'religion' => 'required|integer', + 'email' => 'nullable|email|max:255|unique:employees,email|unique:users,email', + 'phone_no' => 'required|min:8|max:255', + 'address' => 'max:500', + 'id_card' => 'required|min:4|max:50|unique:employees,id_card', + 'joining_date' => 'required|min:10|max:10', + 'leave_date' => 'nullable|min:10|max:10', + 'username' => 'nullable|min:5|max:255|unique:users,username', + 'password' => 'nullable|min:6|max:50', + 'shift' => 'nullable|integer', + 'duty_start' => 'nullable|max:8', + 'duty_end' => 'nullable|max:8', + 'order' => 'required|integer', + + ]; + + $createUser = false; + if(strlen($request->get('username',''))){ + $rules['email' ] = 'required|email|max:255|unique:students,email|unique:users,email'; + $createUser = true; + + } + + $this->validate($request, $rules); + + + if($request->hasFile('photo')) { + $storagepath = $request->file('photo')->store('public/employee'); + $fileName = basename($storagepath); + $data['photo'] = $fileName; + } + else{ + $data['photo'] = $request->get('oldPhoto',''); + } + + if($request->hasFile('signature')) { + $storagepath = $request->file('signature')->store('public/employee/signature'); + $fileName = basename($storagepath); + $data['signature'] = $fileName; + } + else{ + $data['signature'] = $request->get('oldSignature',''); + } + + $data['name'] = $request->get('name'); + $data['designation'] = $request->get('designation'); + $data['qualification'] = $request->get('qualification'); + $data['dob'] = $request->get('dob'); + $data['gender'] = $request->get('gender'); + $data['religion'] = $request->get('religion'); + $data['email'] = $request->get('email'); + $data['phone_no'] = $request->get('phone_no'); + $data['address'] = $request->get('address'); + $data['joining_date'] = $request->get('joining_date'); + $data['id_card'] = $request->get('id_card'); + $data['role_id'] = $request->get('role_id', 0); + $data['shift'] = $request->get('shift'); + $data['duty_start'] = $request->get('duty_start'); + $data['duty_end'] = $request->get('duty_end'); + $data['order'] = $request->get('order'); + + + DB::beginTransaction(); + try { + //now create user + if ($createUser) { + $user = User::create( + [ + 'name' => $data['name'], + 'username' => $request->get('username'), + 'email' => $data['email'], + 'phone_no' => $data['phone_no'], + 'password' => bcrypt($request->get('password')), + 'remember_token' => null, + ] + ); + //now assign the user to role + UserRole::create( + [ + 'user_id' => $user->id, + 'role_id' => $data['role_id'] + ] + ); + $data['user_id'] = $user->id; + } + // now save employee + Employee::create($data); + + DB::commit(); + + //now notify the admins about this record + $msg = $data['name']." Employee added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //invalid dashboard cache + Cache::forget('employeeCount'); + + return redirect()->route('hrm.employee.create')->with('success', 'Employee added!'); + + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); +// return $message; + return redirect()->route('hrm.employee.create')->with("error",$message); + } + + return redirect()->route('hrm.employee.create'); + + + } + + + /** + * Display the specified resource. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function show(Request $request, $id) + { + + $employee = Employee::with('user')->with('role')->where('id', $id)->first(); + if(!$employee){ + abort(404); + } + + //get leave information + $usedLeaves = Leave::where('employee_id',$employee->id) + ->where('status','2') + ->select('leave_type', DB::raw('count(*) as total')) + ->groupBy('leave_type') + ->pluck('total','leave_type') + ->all(); + + $policies = AppMeta::whereIn('meta_key', + ['total_casual_leave', 'total_sick_leave'] + )->get(); + + $metas = []; + foreach ($policies as $policy){ + $metas[$policy->meta_key] = $policy->meta_value; + } + + + + return view('backend.hrm.employee.view', compact('employee','usedLeaves', 'metas')); + + + } + + + /** + * Show the form for editing the specified resource. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $employee = Employee::where('role_id', '!=', AppHelper::EMP_TEACHER)->where('id', $id)->first(); + + if(!$employee){ + abort(404); + } + $gender = $employee->getOriginal('gender'); + $religion = $employee->getOriginal('religion'); + $role = $employee->role_id; + $shift = $employee->getOriginal('shift'); + $designation = $employee->getOriginal('designation'); + + $roles = Role::whereNotIn('id', [AppHelper::USER_ADMIN, AppHelper::USER_TEACHER, AppHelper::USER_STUDENT, AppHelper::USER_PARENTS])->pluck('name', 'id'); + + $users = []; + if(!$employee->user_id){ + $users = User::doesnthave('employee') + ->doesnthave('student') + ->whereHas('role' , function ($query) { + $query->whereNotIn('role_id', [AppHelper::USER_ADMIN, AppHelper::USER_TEACHER, AppHelper::USER_STUDENT, AppHelper::USER_PARENTS]); + }) + ->pluck('name', 'id'); + } + + return view('backend.hrm.employee.add', compact('employee', 'gender', 'religion', 'role', 'roles', 'shift','users', 'designation')); + + } + + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $employee = Employee::where('role_id', '!=', AppHelper::EMP_TEACHER)->where('id', $id)->first(); + + if(!$employee){ + abort(404); + } + //validate form + $messages = [ + 'photo.max' => 'The :attribute size must be under 200kb.', + 'signature.max' => 'The :attribute size must be under 100kb.', + 'photo.dimensions' => 'The :attribute dimensions min 150 X 150.', + 'signature.dimensions' => 'The :attribute dimensions max 170 X 60.', + ]; + $this->validate( + $request, [ + 'name' => 'required|min:5|max:255', + 'photo' => 'mimes:jpeg,jpg,png|max:200|dimensions:min_width=150,min_height=150', + 'signature' => 'mimes:jpeg,jpg,png|max:100|dimensions:max_width=170,max_height=60', + 'designation' => 'required|integer', + 'qualification' => 'max:255', + 'dob' => 'min:10', + 'gender' => 'required|integer', + 'religion' => 'required|integer', + 'email' => 'nullable|email|max:255|unique:employees,email,'.$employee->id.'|unique:users,email,'.$employee->user_id, + 'phone_no' => 'required|min:8|max:255', + 'address' => 'max:500', + 'id_card' => 'required|min:4|max:50|unique:employees,id_card,'.$employee->id, + 'joining_date' => 'required|min:10|max:10', + 'leave_date' => 'nullable|min:10|max:10', + 'shift' => 'nullable|integer', + 'duty_start' => 'nullable|max:8', + 'duty_end' => 'nullable|max:8', + 'user_id' => 'nullable|integer', + 'order' => 'required|integer', + + ] + ); + + if($request->hasFile('photo')) { + $storagepath = $request->file('photo')->store('public/employee'); + $fileName = basename($storagepath); + $data['photo'] = $fileName; + + //if file change then delete old one + $oldFile = $request->get('oldPhoto',''); + if( $oldFile != ''){ + $file_path = "public/employee/".$oldFile; + Storage::delete($file_path); + } + } + else{ + $data['photo'] = $request->get('oldPhoto',''); + } + + if($request->hasFile('signature')) { + $storagepath = $request->file('signature')->store('public/employee/signature'); + $fileName = basename($storagepath); + $data['signature'] = $fileName; + + //if file change then delete old one + $oldFile = $request->get('oldSignature',''); + if( $oldFile != ''){ + $file_path = "public/employee/signature/".$oldFile; + Storage::delete($file_path); + } + } + else{ + $data['signature'] = $request->get('oldSignature',''); + } + + + $data['name'] = $request->get('name'); + $data['designation'] = $request->get('designation'); + $data['qualification'] = $request->get('qualification'); + $data['dob'] = $request->get('dob'); + $data['gender'] = $request->get('gender'); + $data['religion'] = $request->get('religion'); + $data['email'] = $request->get('email'); + $data['phone_no'] = $request->get('phone_no'); + $data['address'] = $request->get('address'); + $data['joining_date'] = $request->get('joining_date'); + $data['leave_date'] = $request->get('leave_date'); + $data['id_card'] = $request->get('id_card'); + $data['role_id'] = $request->get('role_id', 0); + $data['shift'] = $request->get('shift', 1); + $data['duty_start'] = $request->get('duty_start', ''); + $data['duty_end'] = $request->get('duty_end', ''); + $data['order'] = $request->get('order'); + + // + if(!$employee->user_id && $request->get('user_id', 0)){ + $data['user_id'] = $request->get('user_id'); + } + + $employee->fill($data); + if($employee->isDirty('email') || $employee->isDirty('phone_no')){ + $user = $employee->user()->first(); + $user->email = $data['email']; + $user->phone_no = $data['phone_no']; + $user->save(); + } + $employee->save(); + + return redirect()->route('hrm.employee.index')->with('success', 'Employee updated!'); + + + } + + + /** + * Remove the specified resource from storage. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $employee = Employee::where('role_id', '!=', AppHelper::EMP_TEACHER)->where('id', $id)->first(); + + if(!$employee){ + abort(404); + } + + $message = "Something went wrong!"; + DB::beginTransaction(); + try { + + if($employee->user_id) { + User::destroy($employee->user_id); + DB::table('user_roles')->where('user_id', $employee->user_id)->update([ + 'deleted_by' => auth()->user()->id, + 'deleted_at' => Carbon::now() + ]); + } + $employee->delete(); + + DB::commit(); + + //now notify the admins about this record + $msg = $employee->name." Employee deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + //invalid dashboard cache + Cache::forget('employeeCount'); + + return redirect()->route('hrm.employee.index')->with('success', 'Employee deleted.'); + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + } + + + + + return redirect()->route('hrm.employee.index')->with('error', $message); + + } + + /** + * status change + * @return mixed + */ + public function changeStatus(Request $request, $id=0) + { + + $employee = Employee::findOrFail($id); + if(!$employee){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + $status = (string)$request->get('status'); + $employee->status = $status; + if($status == '0'){ + $employee->leave_date = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka'))->format('d/m/Y'); + } + else{ + $employee->leave_date = null; + } + + $employee->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + } + + /** + * HRM policy setting + * @param Request $request + * @return \Illuminate\Http\Response + */ + + public function hrmPolicy(Request $request) + { + + //for save on POST request + if ($request->isMethod('post')) { + + $rules = [ + 'total_casual_leave' => 'required|integer', + 'total_sick_leave' => 'required|integer', + 'total_maternity_leave' => 'required|integer', + 'total_special_leave' => 'required|integer' + ]; + + + $this->validate($request, $rules); + + //now crate + AppMeta::updateOrCreate( + ['meta_key' => 'total_casual_leave'], + ['meta_value' => $request->get('total_casual_leave', 0)] + ); + AppMeta::updateOrCreate( + ['meta_key' => 'total_sick_leave'], + ['meta_value' => $request->get('total_sick_leave', 0)] + ); + AppMeta::updateOrCreate( + ['meta_key' => 'total_maternity_leave'], + ['meta_value' => $request->get('total_maternity_leave', 0)] + ); + AppMeta::updateOrCreate( + ['meta_key' => 'total_special_leave'], + ['meta_value' => $request->get('total_special_leave', 0)] + ); + + + + Cache::forget('app_settings'); + + //now notify the admins about this record + $msg = "HR policy updated by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('hrm.policy')->with('success', 'Policy updated!'); + } + + + $policies = AppMeta::whereIn('meta_key', + ['total_casual_leave', 'total_sick_leave','total_maternity_leave','total_special_leave'] + )->get(); + + $metas = []; + foreach ($policies as $policy){ + $metas[$policy->meta_key] = $policy->meta_value; + } + + return view('backend.hrm.policy', compact( + 'metas' + )); + } +} diff --git a/app/Http/Controllers/Backend/EventController.php b/app/Http/Controllers/Backend/EventController.php new file mode 100755 index 00000000..f8163e40 --- /dev/null +++ b/app/Http/Controllers/Backend/EventController.php @@ -0,0 +1,184 @@ + 'The :attribute size must be under 2MB.', + 'slider_1.dimensions' => 'The :attribute dimensions must be minimum 1170 X 580.', + 'slider_2.max' => 'The :attribute size must be under 2MB.', + 'slider_2.dimensions' => 'The :attribute dimensions must be minimum 1170 X 580.', + 'slider_3.max' => 'The :attribute size must be under 2MB.', + 'slider_3.dimensions' => 'The :attribute dimensions must be minimum 1170 X 580.', + 'cover_photo.max' => 'The :attribute size must be under 2MB.', + 'cover_photo.dimensions' => 'The :attribute dimensions must be minimum 370 X 270.', + ]; + $this->validate($request, [ + 'title' => 'required|min:5|max:255', + 'event_time' => 'required|min:5|max:255', + 'cover_photo' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=370,min_height=270', + 'slider_1' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=1170,min_height=580', + 'slider_2' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=1170,min_height=580', + 'slider_3' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=1170,min_height=580', + 'description' => 'required', + 'tags' => 'max:255', + 'cover_videos' => 'max:255' + ], $messages); + + + $data = $request->all(); + $datetime = Carbon::createFromFormat('d/m/Y h:i a',$data['event_time']); + $data['event_time'] = $datetime; + $data['slug'] = strtolower(str_replace(' ','-', $data['title'])); + + $fileName = null; + if($request->hasFile('cover_photo')) { + $storagepath = $request->file('cover_photo')->store('public/events'); + $fileName = basename($storagepath); + $data['cover_photo'] = $fileName; + + } + $fileName = null; + if($request->hasFile('slider_1')) { + $storagepath = $request->file('slider_1')->store('public/events'); + $fileName = basename($storagepath); + $data['slider_1'] = $fileName; + + } + if($request->hasFile('slider_2')) { + $storagepath = $request->file('slider_2')->store('public/events'); + $fileName = basename($storagepath); + $data['slider_2'] = $fileName; + + } + if($request->hasFile('slider_3')) { + $storagepath = $request->file('slider_3')->store('public/events'); + $fileName = basename($storagepath); + $data['slider_3'] = $fileName; + + } + + Event::create($data); + Cache::forget('upcomming_event'); + + return redirect()->back()->with('success', 'New event added.'); + } + + public function edit($id) + { + $event = Event::findOrFail($id); + return view('backend.site.event.add', compact('event')); + } + + public function update(Request $request, $id) + { + //validate form + $messages = [ + 'slider_1.max' => 'The :attribute size must be under 2MB.', + 'slider_1.dimensions' => 'The :attribute dimensions must be minimum 1170 X 580.', + 'slider_2.max' => 'The :attribute size must be under 2MB.', + 'slider_2.dimensions' => 'The :attribute dimensions must be minimum 1170 X 580.', + 'slider_3.max' => 'The :attribute size must be under 2MB.', + 'slider_3.dimensions' => 'The :attribute dimensions must be minimum 1170 X 580.', + 'cover_photo.max' => 'The :attribute size must be under 2MB.', + 'cover_photo.dimensions' => 'The :attribute dimensions must be minimum 370 X 270.', + ]; + $this->validate($request, [ + 'title' => 'required|min:5|max:255', + 'event_time' => 'required|min:5|max:255', + 'cover_photo' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=370,min_height=270', + 'slider_1' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=1170,min_height=580', + 'slider_2' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=1170,min_height=580', + 'slider_3' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=1170,min_height=580', + 'description' => 'required', + 'tags' => 'max:255', + 'cover_videos' => 'max:255' + ], $messages); + + + $data = $request->all(); + $datetime = Carbon::createFromFormat('d/m/Y h:i a',$data['event_time']); + $data['event_time'] = $datetime; + $data['slug'] = strtolower(str_replace(' ','-', $data['title'])); + $event = Event::findOrFail($id); + + $fileName = null; + if($request->hasFile('cover_photo')) { + + if($event->cover_photo){ + $file_path = "public/events/".$event->cover_photo; + Storage::delete($file_path); + } + $storagepath = $request->file('cover_photo')->store('public/events'); + $fileName = basename($storagepath); + $data['cover_photo'] = $fileName; + + } + $fileName = null; + if($request->hasFile('slider_1')) { + if($event->slider_1){ + $file_path = "public/events/".$event->slider_1; + Storage::delete($file_path); + } + $storagepath = $request->file('slider_1')->store('public/events'); + $fileName = basename($storagepath); + $data['slider_1'] = $fileName; + + } + if($request->hasFile('slider_2')) { + if($event->slider_2){ + $file_path = "public/events/".$event->slider_2; + Storage::delete($file_path); + } + $storagepath = $request->file('slider_2')->store('public/events'); + $fileName = basename($storagepath); + $data['slider_2'] = $fileName; + + } + if($request->hasFile('slider_3')) { + if($event->slider_3){ + $file_path = "public/events/".$event->slider_3; + Storage::delete($file_path); + } + $storagepath = $request->file('slider_3')->store('public/events'); + $fileName = basename($storagepath); + $data['slider_3'] = $fileName; + + } + + $event->fill($data); + $event->save(); + Cache::forget('upcomming_event'); + + return redirect()->route('event.index')->with('success', 'Event information updated.'); + } + + public function destroy($id) + { + $event = Event::findOrFail($id); + $event->delete(); + return redirect()->route('event.index')->with('success', 'Event deleted.'); + } +} diff --git a/app/Http/Controllers/Backend/ExamController.php b/app/Http/Controllers/Backend/ExamController.php new file mode 100755 index 00000000..5f16967e --- /dev/null +++ b/app/Http/Controllers/Backend/ExamController.php @@ -0,0 +1,639 @@ +ajax()){ + + //exam list by class + $class_id = $request->query->get('class_id', 0); + $onlyOpenForExam = $request->query->get('open_for_exam', ''); + + if($class_id){ + $exams = Exam::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->if(strlen($onlyOpenForExam), 'open_for_marks_entry', '=', true) + ->select('name as text', 'id') + ->orderBy('name', 'asc') + ->get(); + + return response()->json($exams); + } + + // single exam details + $exam_id = $request->query->get('exam_id', 0); + $examInfo = Exam::select('marks_distribution_types') + ->where('id',$exam_id) + ->where('status', AppHelper::ACTIVE) + ->first(); + if($examInfo){ + $marksDistributionTypes = []; + foreach (json_decode($examInfo->marks_distribution_types) as $type){ + $marksDistributionTypes[] = [ + 'id' => $type, + 'text' => AppHelper::MARKS_DISTRIBUTION_TYPES[$type] + ]; + } + + return response()->json($marksDistributionTypes); + } + return response('Exam not found!', 404); + } + + $class_id = $request->query->get('class',0); + $exams = Exam::iclass($class_id)->with('class')->get(); + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $iclass = $class_id; + + return view('backend.exam.list', compact('exams','classes', 'iclass')); + } + + /** + * Display a listing exam for public use + * + * @return \Illuminate\Http\Response + */ + public function indexPublic(Request $request) + { + // check for ajax request here + if($request->ajax()){ + + //exam list by class + $class_id = $request->query->get('class_id', 0); + if($class_id){ + $exams = Exam::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->select('name as text', 'id') + ->orderBy('name', 'asc')->get(); + + return response()->json($exams); + } + + // single exam details + $exam_id = $request->query->get('exam_id', 0); + $examInfo = Exam::select('marks_distribution_types') + ->where('id',$exam_id) + ->where('status', AppHelper::ACTIVE) + ->first(); + if($examInfo){ + $marksDistributionTypes = []; + foreach (json_decode($examInfo->marks_distribution_types) as $type){ + $marksDistributionTypes[] = [ + 'id' => $type, + 'text' => AppHelper::MARKS_DISTRIBUTION_TYPES[$type] + ]; + } + + return response()->json($marksDistributionTypes); + } + return response('Exam not found!', 404); + } + + return response('Bad request!', 400); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $exam = null; + $marksDistributionTypes = [1,2]; + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + + $open_for_marks_entry = 0; + + return view('backend.exam.add', compact('exam', 'marksDistributionTypes','classes','open_for_marks_entry')); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + + $this->validate( + $request, [ + 'name' => 'required|max:255', + 'class_id' => 'required|integer', + 'elective_subject_point_addition' => 'required|numeric', + 'marks_distribution_types' => 'required|array', + ] + ); + + + $data = $request->all(); + $data['marks_distribution_types'] = json_encode($data['marks_distribution_types']); + if($request->has('open_for_marks_entry')){ + $data['open_for_marks_entry'] = true; + } + + // now save employee + Exam::create($data); + + //now notify the admins about this record + $msg = $data['name']." exam added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('exam.create')->with('success', 'Exam added!'); + + } + + + /** + * Show the form for editing the specified resource. + * + * @param $id integer + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $exam = Exam::findOrFail($id); + //todo: need protection to massy events. like modify after used or delete after user + $marksDistributionTypes = json_decode($exam->marks_distribution_types,true); + + $open_for_marks_entry = $exam->open_for_marks_entry; + + return view('backend.exam.add', compact('exam', 'marksDistributionTypes', 'open_for_marks_entry')); + + + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param $id integer + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + + $exam = Exam::findOrFail($id); + //todo: need protection to massy events. like modify after used or delete after user + $this->validate( + $request, [ + 'name' => 'required|max:255', + 'elective_subject_point_addition' => 'required|numeric', + 'marks_distribution_types' => 'required|array', + ] + ); + + + $data = $request->all(); + unset($data['class_id']); + $data['marks_distribution_types'] = json_encode($data['marks_distribution_types']); + if($request->has('open_for_marks_entry')){ + $data['open_for_marks_entry'] = true; + } + else { + $data['open_for_marks_entry'] = false; + } + + + $exam->fill($data); + $exam->save(); + + return redirect()->route('exam.index')->with('success', 'Exam Updated!'); + } + + + /** + * Destroy the resource + */ + public function destroy($id) { + $exam = Exam::findOrFail($id); + $exam->delete(); + //todo: need protection to massy events. like modify after used or delete after user + return redirect()->route('exam.index')->with('success', 'Exam Deleted!'); + } + + /** + * status change + * @return mixed + */ + public function changeStatus(Request $request, $id=0) + { + + $exam = Exam::findOrFail($id); + if(!$exam){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + if($request->has('open_entry')){ + $exam->open_for_marks_entry = $request->get('status'); + $exam->save(); + + return [ + 'success' => true, + 'message' => 'Record updated.' + ]; + } + + $exam->status = (string)$request->get('status'); + $exam->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + } + + + /** + * grade manage + * @return \Illuminate\Http\Response + */ + public function gradeIndex(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) {// + $this->validate($request, [ + 'hiddenId' => 'required|integer', + ]); + $grade = Grade::findOrFail($request->get('hiddenId')); + $haveRules = ExamRule::where('grade_id', $grade->id)->count(); + if($haveRules){ + return redirect()->route('exam.grade.index')->with('error', 'Can not delete! Grade used in exam rules.'); + } + + $grade->delete(); + + //now notify the admins about this record + $msg = $grade->name." grade deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('exam.grade.index')->with('success', 'Record deleted!'); + } + + // check for ajax request here + if($request->ajax()){ + $grade_id = $request->query->get('grade_id', 0); + $gradeInfo = Grade::select('rules') + ->where('id',$grade_id) + ->first(); + if($gradeInfo){ + $marks = []; + foreach (json_decode($gradeInfo->rules) as $rule){ + $marks[] = $rule->marks_from; + $marks[] = $rule->marks_upto; + } + + sort($marks); + //passing marks will be the last position in the array + $totalMarks = $marks[count($marks) - 1]; + //passing marks will be the 3rd position in the array + $passingMarks = $marks[2]; + + $data = [ + 'totalMarks' => $totalMarks, + 'passingMarks' => $passingMarks, + ]; + + return response()->json($data); + } + return response('Grade not found!', 404); + } + //for get request + $grades = Grade::get(); + return view('backend.exam.grade.list', compact('grades')); + } + + /** + * grade create, read, update manage + * @return \Illuminate\Http\Response + */ + public function gradeCru(Request $request, $id=0) + { + //for save on POST request + if ($request->isMethod('post')) { + + //protection to prevent massy event. Like edit grade after its use in rules + // or marks entry + if($id){ + $grade = Grade::find($id); + //if grade use then can't edit it + if($grade) { + $haveRules = ExamRule::where('grade_id', $grade->id)->count(); + if ($haveRules) { + return redirect()->route('exam.grade.index')->with('error', 'Can not Edit! Grade used in exam rules.'); + } + } + } + + $this->validate($request, [ + 'name' => 'required|max:255', + 'grade' => 'required|array', + 'point' => 'required|array', + 'marks_from' => 'required|array', + 'marks_upto' => 'required|array', + ]); + + $rules = []; + $inputs = $request->all(); + foreach ($inputs['grade'] as $key => $value){ + $rules[] = [ + 'grade' => $value, + 'point' => $inputs['point'][$key], + 'marks_from' => $inputs['marks_from'][$key], + 'marks_upto' => $inputs['marks_upto'][$key] + ]; + } + + $data = [ + 'name' => $request->get('name'), + 'rules' => json_encode($rules) + ]; + + Grade::updateOrCreate( + ['id' => $id], + $data + ); + + if(!$id){ + //now notify the admins about this record + $msg = $data['name']." graded added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + } + + + $msg = "Grade "; + $msg .= $id ? 'updated.' : 'added.'; + + return redirect()->route('exam.grade.index')->with('success', $msg); + } + + //for get request + $grade = Grade::find($id); + + //if grade use then can't edit it + if($grade) { + $haveRules = ExamRule::where('grade_id', $grade->id)->count(); + if ($haveRules) { + return redirect()->route('exam.grade.index')->with('error', 'Can not Edit! Grade used in exam rules.'); + } + } + + return view('backend.exam.grade.add', compact('grade')); + } + + /** + * rule manage + * @return \Illuminate\Http\Response + */ + public function ruleIndex(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) {// + $this->validate($request, [ + 'hiddenId' => 'required|integer', + ]); + $rules = ExamRule::findOrFail($request->get('hiddenId')); + $rules->delete(); + + //now notify the admins about this record + $msg = "Exam rules deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('exam.rule.index')->with('success', 'Record deleted!'); + } + + //for get request + $rules = collect(); + + $class_id = $request->query->get('class_id',0); + $exam_id = $request->query->get('exam_id',0); + + if($class_id && $exam_id){ + $rules = ExamRule::where('class_id', $class_id) + ->where('exam_id', $exam_id) + ->with(['subject' => function($query){ + $query->select('name','id'); + }]) + ->with(['grade' => function($query){ + $query->select('name','id'); + }]) + ->with(['combineSubject' => function($query){ + $query->select('name','id'); + }]) + ->get(); + } + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $exams = Exam::where('class_id', $class_id) + ->where('status', AppHelper::ACTIVE) + ->pluck('name', 'id');; + + return view('backend.exam.rule.list', compact('rules', 'classes', 'exams','class_id','exam_id')); + } + + /** + * rule create, read manage + * @return \Illuminate\Http\Response + */ + public function ruleCreate(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + $validateRules = [ + 'class_id' => 'required|integer', + 'subject_id' => 'required|integer', + 'exam_id' => 'required|integer', + 'grade_id' => 'required|integer', + 'combine_subject_id' => 'nullable|integer', + 'passing_rule' => 'required|integer', + 'total_exam_marks' => 'required|numeric', + 'over_all_pass' => 'required|numeric', + 'type' => 'required|array', + 'total_marks' => 'required|array', + 'pass_marks' => 'required|array', + ]; + + $this->validate($request, $validateRules); + + $inputs = $request->all(); + + //validation check of existing rule + $entryExists = ExamRule::where('subject_id', $inputs['subject_id']) + ->where('exam_id', $inputs['exam_id'])->count(); + if($entryExists){ + return redirect()->route('exam.rule.create')->with('error', 'Rule already exists for this subject and exam!'); + } + + //validation end + + $marksDistribution = []; + foreach ($inputs['type'] as $key => $value){ + $marksDistribution[] = [ + 'type' => $value, + 'total_marks' => $inputs['total_marks'][$key], + 'pass_marks' => $inputs['pass_marks'][$key], + ]; + } + + $inputs['marks_distribution'] = json_encode($marksDistribution); + + ExamRule::create($inputs); + + + //now notify the admins about this record + $msg = "Exam rule added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + $msg = "New exam rule added."; + return redirect()->route('exam.rule.create')->with('success', $msg); + } + + //for get request + $rule = null; + $combine_subject = null; + $subject_id = null; + $passing_rule = null; + $exam_id = null; + $grade_id = null; + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $exams = [];//Exam::where('status', AppHelper::ACTIVE)->pluck('name', 'id'); + $grades = Grade::pluck('name', 'id'); + $subjects = []; + + + return view('backend.exam.rule.add', compact('rule', + 'combine_subject', + 'subject_id', + 'exam_id', + 'grade_id', + 'passing_rule', + 'classes', + 'exams', + 'grades', + 'subjects' + )); + } + + /** + * rule update and edit manage + * @return \Illuminate\Http\Response + */ + public function ruleEdit(Request $request, $id=0){ + + $rule = ExamRule::findOrFail($id); + + + //for save on POST request + if ($request->isMethod('post')) { + $validateRules = [ + 'exam_id' => 'required|integer', + 'grade_id' => 'required|integer', + 'combine_subject_id' => 'nullable|integer', + 'passing_rule' => 'required|integer', + 'total_exam_marks' => 'required|numeric', + 'over_all_pass' => 'required|numeric', + 'type' => 'required|array', + 'total_marks' => 'required|array', + 'pass_marks' => 'required|array', + ]; + + $this->validate($request, $validateRules); + + $inputs = $request->all(); + unset($inputs['subject_id']); + //validation end + + $marksDistribution = []; + foreach ($inputs['type'] as $key => $value){ + $marksDistribution[] = [ + 'type' => $value, + 'total_marks' => $inputs['total_marks'][$key], + 'pass_marks' => $inputs['pass_marks'][$key], + ]; + } + + $inputs['marks_distribution'] = json_encode($marksDistribution); + + $rule->fill($inputs); + $rule->save(); + + + //now notify the admins about this record + $msg = "Exam rule updated by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + $msg = "Exam rule updated."; + return redirect()->route('exam.rule.index')->with('success', $msg); + } + + + $combine_subject = $rule->combine_subject_id; + $passing_rule = $rule->passing_rule; + $subject_id = $rule->subject_id; + $exam_id = $rule->exam_id; + $grade_id = $rule->grade_id; + + $subjects = Subject::where('class_id', $rule->class_id) + ->where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $exams = Exam::where('class_id', $rule->class_id) + ->where('status', AppHelper::ACTIVE) + ->pluck('name', 'id'); + $grades = Grade::pluck('name', 'id');; + + return view('backend.exam.rule.add', compact('rule', + 'combine_subject', + 'subject_id', + 'exam_id', + 'grade_id', + 'passing_rule', + 'subjects', + 'exams', + 'grades' + )); + + } + + +} diff --git a/app/Http/Controllers/Backend/LeaveController.php b/app/Http/Controllers/Backend/LeaveController.php new file mode 100755 index 00000000..018cae27 --- /dev/null +++ b/app/Http/Controllers/Backend/LeaveController.php @@ -0,0 +1,255 @@ +get('employee_id', 0); + $leave_type = $request->get('leave_type', 0); + $leave_date = $request->get('leave_date', ''); + $status = $request->get('status', 0); + $employees = Employee::pluck('name','id')->prepend('All', 0);; + + $leaves = collect(); + if($request->has('filter')) { + //need to implement filters here + $leaves = Leave::with('employee') + ->whereEmployee($employee) + ->whereLeaveType($leave_type) + ->whereLeaveDate($leave_date) + ->whereStatus($status) + ->get(); + } + + return view('backend.hrm.leave.list', compact( + 'leaves', + 'employees', + 'employee', + 'leave_type', + 'leave_date', + 'status' + )); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + + $employees = Employee::pluck('name','id'); + $leave = null; + $leave_type = null; + return view('backend.hrm.leave.add', compact('leave', 'employees', 'leave_type')); + + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + //validate form + $messages = [ + 'document.max' => 'The :attribute size must be under 2mb.', + ]; + + $rules = [ + 'employee_id' => 'required|integer', + 'leave_date' => 'min:10', + 'leave_date_end' => 'nullable|min:10', + 'leave_type' => 'required|integer', + 'document' => 'nullable|mimes:jpeg,jpg,png,pdf,doc,docx,txt|max:2048', + 'description' => 'nullable|max:500', + + ]; + + $this->validate($request, $rules); + + + //custom validation goes here + $dayCount = 1; + $leaveDateStart = Carbon::createFromFormat('d/m/Y',$request->get('leave_date')); + $leaveDateEnd = null; + if(strlen($request->get('leave_date_end',''))) { + $leaveDateEnd = Carbon::createFromFormat('d/m/Y', $request->get('leave_date_end')); + $dayCount = $leaveDateEnd->diff($leaveDateStart)->format("%a")+1; + + if($leaveDateEnd<$leaveDateStart){ + return redirect()->back()->with('error','Leave End date can\'t be less than start date!'); + } + } + + $dateList = [$leaveDateStart->format('Y-m-d')]; + if($leaveDateEnd){ + $startDate = $leaveDateStart->copy(); + $startDate->addDay(1); + while ($startDate->lte($leaveDateEnd)){ + $dateList[] = $startDate->format('Y-m-d'); + $startDate->addDay(1); + } + } + + + [$holidayBalance, $message] = AppHelper::checkLeaveBalance($request->get('leave_type',0), + $dayCount, $request->get('employee_id')); + + if(!$holidayBalance){ + return redirect()->back()->with('error', $message); + } + + + $data = $request->all(); + if($request->hasFile('document')) { + $storagepath = $request->file('document')->store('public/leave'); + $fileName = basename($storagepath); + $data['document'] = $fileName; + } + else{ + $data['document'] = $request->get('oldDocument',''); + } + + if(strlen($request->get('leave_date_end',''))){ + + $start_time = strtotime($leaveDateStart); + $end_time = strtotime($leaveDateEnd); + for($i=$start_time; $i<=$end_time; $i+=86400) + { + $data['leave_date'] = date('d/m/Y', $i); + Leave::create($data); + + } + + $message = $dayCount." days leave added!"; + + } + else { + // now save employee + Leave::create($data); + $message = "Leave added!"; + } + + return redirect()->route('hrm.leave.create')->with('success', $message); + + } + + + /** + * Show the form for editing the specified resource. + * + * @param integer $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $leave = Leave::findOrFail($id); + $leave_type = $leave->getOriginal('leave_type'); + return view('backend.hrm.leave.add', compact('leave', 'leave_type')); + + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param integer $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + + $leave = Leave::findOrFail($id); + + $rules = [ + 'status' => 'required|integer' + ]; + + if(!$request->has('update_status')){ + //validate form + $messages = [ + 'document.max' => 'The :attribute size must be under 2mb.', + ]; + + $rules = [ + 'leave_date' => 'min:10', + 'leave_type' => 'required|integer', + 'document' => 'nullable|mimes:jpeg,jpg,png,pdf,doc,docx,txt|max:2048', + 'description' => 'nullable|max:500', + + ]; + } + + $this->validate($request, $rules); + + if($request->has('update_status')){ + $leave->status = $request->get('status'); + $leave->save(); + return redirect()->route('hrm.leave.index')->with('success', 'Leave Updated!'); + } + + $leaveDate = Carbon::createFromFormat('d/m/Y',$request->get('leave_date'))->format('Y-m-d'); + + $data = $request->all(); + unset($data['employee_id']); + + if($request->hasFile('document')) { + $storagepath = $request->file('document')->store('public/leave'); + $fileName = basename($storagepath); + $data['document'] = $fileName; + + //if file change then delete old one + $oldFile = $request->get('oldDocument',''); + if( $oldFile != ''){ + $file_path = "public/leave/".$oldFile; + Storage::delete($file_path); + } + } + else{ + $data['document'] = $request->get('oldDocument',''); + } + + $leave->fill($data); + $leave->save(); + + + return redirect()->route('hrm.leave.index')->with('success', 'Leave Updated!'); + + + } + + /** + * Remove the specified resource from storage. + * + * @param integer $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $leave = Leave::findOrFail($id); + $leave->delete(); + + return redirect()->route('hrm.leave.index')->with('success', 'Leave deleted!'); + } +} diff --git a/app/Http/Controllers/Backend/MarkController.php b/app/Http/Controllers/Backend/MarkController.php new file mode 100755 index 00000000..b81bb653 --- /dev/null +++ b/app/Http/Controllers/Backend/MarkController.php @@ -0,0 +1,1654 @@ +isMethod('post')) { + + //inputs + if(AppHelper::getInstituteCategory() == 'college') { + $acYear = $request->get('academic_year_id', 0); + } + else{ + $acYear = AppHelper::getAcademicYear(); + } + $class_id = $request->get('class_id',0); + $section_id = $request->get('section_id',0); + $subject_id = $request->get('subject_id',0); + $exam_id = $request->get('exam_id',0); + $teacherId = 0; + if(session('user_role_id',0) == AppHelper::USER_TEACHER){ + $teacherId = auth()->user()->teacher->id; + } + + //validate + $examRule = ExamRule::where('exam_id',$exam_id) + ->where('subject_id', $subject_id) + ->first(); + if(!$examRule) { + return redirect()->back()->with('error', 'Exam rules not found for this subject and exam!'); + } + + //check is result is published? + $isPublish = DB::table('result_publish') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $exam_id) + ->count(); + + if($isPublish){ + $editMode = 0; + } + + $marks = Mark::with(['student' => function($query){ + $query->with(['info' => function($query){ + $query->select('name','id'); + }])->select('regi_no','student_id','roll_no','id'); + }])->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('section_id', $section_id) + ->where('subject_id', $subject_id) + ->where('exam_id', $exam_id) + ->select( 'registration_id', 'marks', 'total_marks', 'grade', 'point', 'present','id') + ->get() + ->sortBy('student.roll_no'); + + + //detect which form submitted + if($request->has('for_what')){ + + if($isPublish){ + return redirect()->route('marks.index')->with('error', 'Can\'t edit marks, because result is published for this exam!'); + } + + if($request->get('for_what', '') == "bulk_edit"){ + //now notify the admins about this record + $msg = "Class {$examRule->class->name}, {$examRule->subject->name} subject marks updated for {$examRule->exam->name} exam by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + return view('backend.exam.marks.bulk_edit', compact('marks', 'examRule')); + } + else if($request->get('for_what', '') == "update_all"){ + + $grade = Grade::where('id', $examRule->grade_id)->first(); + if(!$grade){ + return redirect()->route('marks.index')->with('error', 'Grading information not found!'); + } + + $gradingRules = json_decode($grade->rules); + + [$isUpdated, $message] = $this->updateAllMarks($marks, $examRule, $gradingRules); + + if($isUpdated){ + //now notify the admins about this record + $msg = "Class {$examRule->class->name}, {$examRule->subject->name} subject marks updated for {$examRule->exam->name} exam by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + return back()->with('success', 'Subject marks updated successfully!'); + } + + return redirect()->route('marks.index')->with('error', $message); + } + } + + + $sections = Section::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->pluck('name', 'id'); + + $subjectsQuery = Subject::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id); + if($teacherId){ + $subjectsQuery->join('teacher_subjects','teacher_subjects.subject_id','subjects.id') + ->where('teacher_subjects.teacher_id', $teacherId); + } + $subjects = $subjectsQuery->pluck('name', 'id'); + + $exams = Exam::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->pluck('name', 'id'); + + } + + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + + //if its college then have to get those academic years + if(AppHelper::getInstituteCategory() == 'college') { + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + } + + + + + return view('backend.exam.marks.list', compact('marks', + 'acYear', + 'class_id', + 'section_id', + 'subject_id', + 'exam_id', + 'classes', + 'sections', + 'subjects', + 'academic_years', + 'exams', + 'examRule', + 'editMode' + )); + + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create(Request $request) + { + $students = collect(); + $acYear = null; + $class_id = null; + $section_id = null; + $subject_id = null; + $exam_id = null; + $sections = []; + $academic_years = []; + $subjects = []; + $examRule = null; + $exams = []; + + if ($request->isMethod('post')) { + if(AppHelper::getInstituteCategory() == 'college') { + $acYear = $request->get('academic_year_id', 0); + } + else{ + $acYear = AppHelper::getAcademicYear(); + } + $class_id = $request->get('class_id',0); + $section_id = $request->get('section_id',0); + $subject_id = $request->get('subject_id',0); + $exam_id = $request->get('exam_id',0); + + + + // some validation before full the student + $examInfo = Exam::where('status', AppHelper::ACTIVE) + ->where('id', $exam_id) + ->first(); + if(!$examInfo) { + return redirect()->back()->with('error', 'Exam Not Found'); + } + + //check is result is published? + $isPublish = DB::table('result_publish') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $examInfo->id) + ->count(); + + if($isPublish){ + return redirect()->back()->with('error', 'Marks entry not possible! Because result is published for this exam!'); + } + + $examRule = ExamRule::where('exam_id',$exam_id) + ->where('subject_id', $subject_id) + ->first(); + if(!$examRule) { + return redirect()->back()->with('error', 'Exam rules not found for this subject and exam!'); + } + $teacherId = 0; + if(session('user_role_id',0) == AppHelper::USER_TEACHER){ + $teacherId = auth()->user()->teacher->id; + $subjectIds = DB::table('teacher_subjects') + ->where('teacher_id', $teacherId)->pluck('subject_id')->toArray(); + if(!in_array($subject_id, $subjectIds)){ + abort(401); + } + } + + //validation end + + $students = Registration::with(['info' => function($query){ + $query->select('name','id'); + }]) + ->whereHas('subjects', function($q) use($subject_id){ + $q->where('subject_id', $subject_id); + }) + ->whereDoesntHave('marks', function ($q) use($subject_id, $acYear, $class_id, $exam_id){ + $q->where('subject_id', $subject_id) + ->where('exam_id', $exam_id) + ->where('class_id', $class_id) + ->where('academic_year_id', $acYear); + }) +// ->with('subjects') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('section_id', $section_id) + ->where('status', AppHelper::ACTIVE) + ->select( 'regi_no', 'roll_no', 'id','student_id') + ->orderBy('roll_no','asc') + ->take(env('PER_PAGE_MARKS_ENTRY',25)) + ->get(); + + if(!$students->count()) { + return redirect()->back()->with('warning', 'There\'s no student left for entry marks!'); + } + + $sections = Section::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->pluck('name', 'id'); + + $subjects = Subject::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->when($teacherId, function ($query) use($teacherId){ + $query->where('teacher_id', $teacherId); + }) + ->pluck('name', 'id'); + + $exams = Exam::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->pluck('name', 'id'); + + } + + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + + //if its college then have to get those academic years + if(AppHelper::getInstituteCategory() == 'college') { + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + } + + + return view('backend.exam.marks.add', compact('students', + 'acYear', + 'class_id', + 'section_id', + 'subject_id', + 'exam_id', + 'classes', + 'sections', + 'subjects', + 'academic_years', + 'exams', + 'examRule' + )); + } + + + /** + * Old store logic in 2.0 + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $validateRules = [ + 'academic_year_id' => 'nullable|integer', + 'class_id' => 'required|integer', + 'section_id' => 'required|integer', + 'subject_id' => 'required|integer', + 'exam_id' => 'required|integer', + 'registrationIds' => 'required|array', + 'marks_type' => 'required|array', + 'absent' => 'nullable|array', + ]; + + $this->validate($request, $validateRules); + + if(AppHelper::getInstituteCategory() == 'college') { + $acYear = $request->get('academic_year_id'); + } + else{ + $acYear = AppHelper::getAcademicYear(); + } + + $class_id = $request->get('class_id',0); + $section_id = $request->get('section_id',0); + $subject_id = $request->get('subject_id',0); + $exam_id = $request->get('exam_id',0); + + // some validation before entry the mark + $examInfo = Exam::where('status', AppHelper::ACTIVE) + ->where('id', $exam_id) + ->first(); + if(!$examInfo) { + return redirect()->route('marks.create')->with('error', 'Exam Not Found'); + } + + $examRule = ExamRule::where('exam_id',$exam_id) + ->where('subject_id', $subject_id) + ->first(); + if(!$examRule) { + return redirect()->route('marks.create')->with('error', 'Exam rules not found for this subject and exam!'); + } + + $entryExists = Mark::where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('section_id', $section_id) + ->where('subject_id', $subject_id) + ->where('exam_id', $exam_id) + ->whereIn('registration_id', $request->get('registrationIds')) + ->count(); + + if($entryExists){ + return redirect()->route('marks.create')->with('error','This subject marks already exists for this exam & students!'); + } + //validation end + + //pull grading information + $grade = Grade::where('id', $examRule->grade_id)->first(); + if(!$grade){ + return redirect()->route('marks.create')->with('error','Grading information not found!'); + } + $gradingRules = json_decode($grade->rules); + + //exam distributed marks rules + $distributeMarksRules = []; + foreach (json_decode($examRule->marks_distribution) as $rule){ + $distributeMarksRules[$rule->type] = [ + 'total_marks' => $rule->total_marks, + 'pass_marks' => $rule->pass_marks + ]; + } + + $distributedMarks = $request->get('marks_type'); + $absent = $request->get('absent'); + $timeStampNow = Carbon::now(env('APP_TIMEZONE', 'Asia/Dhaka')); + $userId = auth()->user()->id; + + $marksData = []; + $isInvalid = false; + $message = ''; + + foreach ($request->get('registrationIds') as $student){ + $marks = $distributedMarks[$student]; + [$isInvalid, $message, $totalMarks, $grade, $point, $typeWiseMarks] = $this->processMarksAndCalculateResult( + $examRule, + $gradingRules, + $distributeMarksRules, + $marks); + + if($isInvalid){ + break; + } + + $data = [ + 'academic_year_id' => $acYear, + 'class_id' => $class_id, + 'section_id' => $section_id, + 'registration_id' => $student, + 'exam_id' => $exam_id, + 'subject_id' => $subject_id, + 'marks' => json_encode($typeWiseMarks), + 'total_marks' => $totalMarks, + 'grade' => $grade, + 'point' => $point, + 'present' => isset($absent[$student]) ? '0' : '1', + "created_at" => $timeStampNow, + "created_by" => $userId, + ]; + + $marksData[] = $data; + } + + + if($isInvalid){ + return redirect()->route('marks.create')->with('error', $message); + } + + + DB::beginTransaction(); + try { + + Mark::insert($marksData); + DB::commit(); + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + return redirect()->route('marks.create')->with("error",$message); + } + + $sectionInfo = Section::where('id', $section_id)->first(); + $subjectInfo = Subject::with(['class' => function($query){ + $query->select('name','id'); + }])->where('id', $subject_id)->first(); + //now notify the admins about this record + $msg = "Class {$subjectInfo->class->name}, section {$sectionInfo->name}, {$subjectInfo->name} subject marks added for {$examInfo->name} exam by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('marks.create')->with("success","Exam marks added successfully!"); + + + } + + + /** + * Process student entry marks and + * calculate grade point + * + * @param $examRule collection + * @param $gradingRules array + * @param $distributeMarksRules array + * @param $strudnetMarks array + */ + private function processMarksAndCalculateResult($examRule, $gradingRules, $distributeMarksRules, $studentMarks) { + $totalMarks = 0; + $isFail = false; + $isInvalid = false; + $message = ""; + $typeWiseMarks = []; + + foreach ($distributeMarksRules as $type => $marksRule){ + if(!isset($studentMarks[$type])){ + $typeWiseMarks[$type] = 0; + continue; + } + + $marks = floatval($studentMarks[$type]); + $typeWiseMarks[$type] = $marks; + $totalMarks += $marks; + + // AppHelper::PASSING_RULES + if(in_array($examRule->passing_rule, [2,3])){ + if($marks > $marksRule['total_marks']){ + $isInvalid = true; + $message = AppHelper::MARKS_DISTRIBUTION_TYPES[$type]. " marks is too high from exam rules marks distribution!"; + break; + } + + if($marks < $marksRule['pass_marks']){ + $isFail = true; + } + } + } + + //fraction number make ceiling + $totalMarks = ceil($totalMarks); + + // AppHelper::PASSING_RULES + if(in_array($examRule->passing_rule, [1,3])){ + if($totalMarks < $examRule->over_all_pass){ + $isFail = true; + } + } + + if($isFail){ + $grade = 'F'; + $point = 0.00; + + return [$isInvalid, $message, $totalMarks, $grade, $point, $typeWiseMarks]; + } + + [$grade, $point] = $this->findGradePointFromMarks($gradingRules, $totalMarks); + + return [$isInvalid, $message, $totalMarks, $grade, $point, $typeWiseMarks]; + + } + + private function findGradePointFromMarks($gradingRules, $marks) { + $grade = 'F'; + $point = 0.00; + foreach ($gradingRules as $rule){ + if ($marks >= $rule->marks_from && $marks <= $rule->marks_upto){ + $grade = AppHelper::GRADE_TYPES[$rule->grade]; + $point = $rule->point; + break; + } + } + return [$grade, $point]; + } + + private function findGradeFromPoint($point, $gradingRules) { + $grade = 'F'; + + foreach ($gradingRules as $rule){ + if($point >= floatval($rule->point)){ + $grade = AppHelper::GRADE_TYPES[$rule->grade]; + break; + } + } + + return $grade; + + } + + + /** + * Show the form for editing the specified resource. + * + * @param $id integer + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $marks = Mark::with(['student' => function($query){ + $query->with(['info' => function($query){ + $query->select('name','id'); + }])->select('regi_no','student_id','roll_no','id'); + }]) + ->where('id',$id) + ->select( 'id','academic_year_id','class_id','subject_id','exam_id','registration_id', 'marks', 'total_marks', 'present') + ->first(); + + if(!$marks){ + abort(404); + } + + //these code for security purpose, + // if some user try to edir other user data + if(session('user_role_id',0) == AppHelper::USER_TEACHER){ + $teacherId = auth()->user()->teacher->id; + $subjectIds = DB::table('teacher_subjects') + ->where('teacher_id', $teacherId)->pluck('subject_id')->toArray(); + if(!in_array($marks->subject_id, $subjectIds)){ + abort(401); + } + } + + //check is result is published? + $isPublish = DB::table('result_publish') + ->where('academic_year_id', $marks->academic_year_id) + ->where('class_id', $marks->class_id) + ->where('exam_id', $marks->exam_id) + ->count(); + + if($isPublish){ + return redirect()->route('marks.index')->with('error', 'Can\'t edit marks, because result is published for this exam!'); + } + + $examRule = ExamRule::where('exam_id', $marks->exam_id) + ->where('subject_id', $marks->subject_id) + ->first(); + if(!$examRule) { + return redirect()->route('marks.index')->with('error', 'Exam rules not found for this subject and exam!'); + } + + + return view('backend.exam.marks.edit', compact('marks', + 'examRule' + )); + + + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param $id integer + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $marks = Mark::with(['subject' => function ($query) { + $query->select('id', 'name'); + }]) + ->with(['class' => function ($query) { + $query->select('id', 'name'); + }]) + ->with(['exam' => function ($query) { + $query->select('id', 'name'); + }]) + ->where('id', $id) + ->first(); + + if(!$marks){ + abort(404); + } + + //these code for security purpose, + // if some user try to edir other user data + if(session('user_role_id',0) == AppHelper::USER_TEACHER){ + $teacherId = auth()->user()->teacher->id; + $subjectIds = DB::table('teacher_subjects') + ->where('teacher_id', $teacherId)->pluck('subject_id')->toArray(); + if(!in_array($marks->subject_id, $subjectIds)){ + abort(401); + } + } + + //check is result is published? + $isPublish = DB::table('result_publish') + ->where('academic_year_id', $marks->academic_year_id) + ->where('class_id', $marks->class_id) + ->where('exam_id', $marks->exam_id) + ->count(); + + if($isPublish){ + return redirect()->route('marks.index')->with('error', 'Can\'t edit marks, because result is published for this exam!'); + } + + $examRule = ExamRule::where('exam_id', $marks->exam_id) + ->where('subject_id', $marks->subject_id) + ->first(); + if(!$examRule) { + return redirect()->route('marks.index')->with('error', 'Exam rules not found for this subject and exam!'); + } + + $validateRules = [ + 'type' => 'required|array', + 'absent' => 'nullable', + ]; + + $this->validate($request, $validateRules); + + //pull grading information + $grade = Grade::where('id', $examRule->grade_id)->first(); + if(!$grade){ + return redirect()->route('marks.create')->with('error','Grading information not found!'); + } + $gradingRules = json_decode($grade->rules); + + //exam distributed marks rules + $distributeMarksRules = []; + foreach (json_decode($examRule->marks_distribution) as $rule){ + $distributeMarksRules[$rule->type] = [ + 'total_marks' => $rule->total_marks, + 'pass_marks' => $rule->pass_marks + ]; + } + + + [$isInvalid, $message, $totalMarks, $grade, $point, $typeWiseMarks] = $this->processMarksAndCalculateResult($examRule, + $gradingRules, $distributeMarksRules, $request->get('type')); + + if($isInvalid){ + return redirect()->back()->with('error', $message); + } + + $data = [ + 'marks' => json_encode($typeWiseMarks), + 'total_marks' => $totalMarks, + 'grade' => $grade, + 'point' => $point, + 'present' => $request->has('absent') ? '0' : '1', + ]; + + $marks->fill($data); + $marks->save(); + + //now notify the admins about this record + $msg = "Class {$marks->class->name}, {$marks->subject->name} subject marks updated for {$marks->exam->name} exam by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('marks.index')->with('success', 'Marks entry updated!'); + + + } + + + /** + * Published Result list + * @param Request $request + * @return \Illuminate\Http\Response + */ + public function resultIndex(Request $request){ + + + $acYear = $request->get('academic_year_id', 0); + $class_id = $request->get('class_id', 0); + $section_id = $request->get('section_id', 0); + $exam_id = $request->get('exam_id', 0); + $students = collect(); + $sections = []; + $exams = []; + + //in post request get the result and show it + if ($request->isMethod('post')) { + + $validateRules = [ + 'academic_year_id' => 'nullable|integer', + 'class_id' => 'required|integer', + 'exam_id' => 'required|integer', + ]; + + $this->validate($request, $validateRules); + + //check is result is published? + $isPublish = DB::table('result_publish') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $exam_id) + ->count(); + + if(!$isPublish){ + return redirect()->back()->with('error', 'Result not published for this class and exam yet!'); + } + + $students = Registration::where('status', AppHelper::ACTIVE) + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->when($section_id, function ($query) use($section_id){ + $query->where('section_id', $section_id); + }) + ->select('id','student_id','regi_no','roll_no','section_id') + ->with(['result' => function($query) use($exam_id){ + $query->select('registration_id','total_marks','grade', 'point') + ->where('exam_id', $exam_id); + }]) + ->with(['info' => function($query){ + $query->select('name','id'); + }]) + ->with(['section' => function($query){ + $query->select('name','id'); + }]) + ->get(); + + $sections = Section::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->pluck('name', 'id'); + + $exams = Exam::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->pluck('name', 'id'); + + } + else { + if (AppHelper::getInstituteCategory() != 'college') { + $acYear = AppHelper::getAcademicYear(); + } + } + + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + + + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + + + return view('backend.exam.result.list', compact('students', + 'acYear', + 'class_id', + 'classes', + 'section_id', + 'sections', + 'academic_years', + 'exams', + 'exam_id' + )); + } + + /** + * Published Result Generate + * @param Request $request + * @return \Illuminate\Http\Response + */ + public function resultGenerate(Request $request){ + + //in post request get the result and show it + if ($request->isMethod('post')) { + $rules = [ + 'class_id' => 'required|integer', + 'exam_id' => 'required|integer', + 'publish_date' => 'required|min:10|max:11', + ]; + + //if it college then need another 2 feilds + if(AppHelper::getInstituteCategory() == 'college') { + $rules['academic_year_id'] = 'required|integer'; + } + + $this->validate($request, $rules); + + + if (AppHelper::getInstituteCategory() == 'college') { + $acYear = $request->get('academic_year_id', 0); + } else { + $acYear = AppHelper::getAcademicYear(); + } + $class_id = $request->get('class_id', 0); + $exam_id = $request->get('exam_id', 0); + $publish_date = Carbon::createFromFormat('d/m/Y', $request->get('publish_date', date('d/m/Y'))); + + //validation start + //check is result is published? + $isPublish = DB::table('result_publish') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $exam_id) + ->count(); + + if($isPublish){ + return redirect()->back()->with('error', 'Result already published for this class and exam!'); + } + + + //this class all section mark submitted +// $unsubmittedSections = Section::where('status', AppHelper::ACTIVE) +// ->where('class_id', $class_id) +// ->whereDoesntHave('marks', function ($query) use($exam_id, $acYear, $class_id) { +// $query->select('section_id') +// ->where('academic_year_id', $acYear) +// ->where('class_id', $class_id) +// ->where('exam_id', $exam_id) +// ->groupBy('section_id'); +// }) +// ->count(); +// +// if($unsubmittedSections){ +// return redirect()->back()->with('error', 'All sections marks are not submitted yet!'); +// } + + + //this class all subject mark submitted +// $subjectsCount = Subject::where('status', AppHelper::ACTIVE) +// ->where('class_id', $class_id)->count(); +// +// $submittedSubjectMarksBySection = Section::where('status', AppHelper::ACTIVE) +// ->where('class_id', $class_id) +// ->with(['marks' => function ($query) use($exam_id, $acYear, $class_id) { +// $query->select('subject_id','section_id') +// ->where('academic_year_id', $acYear) +// ->where('class_id', $class_id) +// ->where('exam_id', $exam_id) +// ->groupBy('subject_id','section_id'); +// }]) +// ->get(); +// +// $havePedningSectionMarks = false; +// $pendingSections = []; +// foreach ($submittedSubjectMarksBySection as $section){ +// if(count($section->marks) != $subjectsCount){ +// $pendingSections[] = $section->name; +// $havePedningSectionMarks = true; +// } +// } +// +// if($havePedningSectionMarks){ +// $message = "Section ".implode(',' , $pendingSections)." all subjects marks not submitted yet!"; +// return redirect()->back()->with('error', $message); +// } + //validation end + + //now generate the result + // pull default grading system + $grade_id = AppHelper::getAppSettings('result_default_grade_id'); + $grade = Grade::where('id', $grade_id)->first(); + if(!$grade){ + return redirect()->back()->with('error', 'Result grade system not set! Set it from institute settings.'); + } + // pull exam info + $examInfo = Exam::where('status', AppHelper::ACTIVE) + ->where('id', $exam_id) + ->first(); + if(!$examInfo) { + return redirect()->back()->with('error', 'Exam Not Found'); + } + + // pull exam rules subject wise and find combine subject + $examRules = ExamRule::where('class_id', $class_id) + ->where('exam_id', $examInfo->id) + ->select('subject_id','combine_subject_id','passing_rule','marks_distribution','total_exam_marks','over_all_pass') + ->with(['subject' => function($query){ + $query->select('id','type','exclude_in_result'); + }]) + ->get() + ->reduce(function ($examRules, $rule){ + $examRules[$rule->subject_id] =[ + 'combine_subject_id' => $rule->combine_subject_id, + 'passing_rule' => $rule->passing_rule, + 'marks_distribution' => json_decode($rule->marks_distribution), + 'total_exam_marks' => $rule->total_exam_marks, + 'over_all_pass' => $rule->over_all_pass, + 'subject_type' => $rule->subject->getOriginal('type'), + 'exclude_in_result' => $rule->subject->exclude_in_result, + ]; + return $examRules; + }); + + + //pull students with marks + $students = Registration::where('status', AppHelper::ACTIVE) + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->select('id','roll_no','regi_no') + ->with(['marks' => function($query) use($acYear,$class_id,$exam_id){ + $query->select('registration_id','subject_id','marks', 'total_marks', 'point', 'present') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $exam_id); + }]) + ->get(); + + $markMissingStudents = []; + $isDataMissing = false; + $marksMissingStudentInfo = 0; + $resultInsertData = []; + $combineResultInsertData = []; + $gradingRules = json_decode($grade->rules); + $userId = auth()->user()->id; + + //loop the students + foreach ($students as $student){ + try { + $totalMarks = 0; + $totalPoint = 0; + $totalSubject = 0; + $combineSubjectsMarks = []; + $isFail = false; + $subjectFailCount = 0; + + //student have in this exam or not + $studentSubjects = $student->subjects->reduce(function ($studentSubjects, $subject){ + $studentSubjects[$subject->id] = $subject->pivot->subject_type; + return $studentSubjects; + }); + $studentMarksSubjectCount = count($student->marks); + if ($studentMarksSubjectCount != count($studentSubjects)) { + $markMissingStudents[] = $student->regi_no; + continue; + } + + foreach ($student->marks as $marks) { + /** + * If subject need to be exclude in + * Result calculation then skip it here + */ + if($examRules[$marks->subject_id]['exclude_in_result']){ + continue; + } + + + //find combine subjects + $isAndInCombineSubject = $this->isAndInCombine($marks->subject_id, $examRules); + if ($isAndInCombineSubject) { + $combineSubjectsMarks[$marks->subject_id] = $marks; + + //skip for next subject + continue; + } + + //find 4th subject AppHelper::SUBJECT_TYPE + $is4thSubject = ($studentSubjects[$marks->subject_id] == 2) ? 1 : 0; + if ($is4thSubject) { + if($marks->point >= $examInfo->elective_subject_point_addition) { + $totalPoint += ($marks->point - $examInfo->elective_subject_point_addition); + } + $totalMarks += $marks->total_marks; + + //skip for next subject + continue; + } + + //process not combine and 4th subjects + if (!$isAndInCombineSubject && !$is4thSubject) { + + $totalMarks += $marks->total_marks; + $totalPoint += $marks->point; + $totalSubject++; + if (intval($marks->point) == 0) { + $isFail = true; + $subjectFailCount++; + } + + } + } + + + //now process combine subjects + foreach ($examRules as $subject_id => $data) { + if ($data['combine_subject_id'] != null) { + $totalSubject++; + $subjectMarks = $combineSubjectsMarks[$subject_id]; + $pairSubjectMarks = $combineSubjectsMarks[$data['combine_subject_id']]; + + [$pairFail, $combineTotalMarks, $pairTotalMarks] = $this->processCombineSubjectMarks($subjectMarks, $pairSubjectMarks, $data, $examRules[$data['combine_subject_id']]); + + $totalMarks += $combineTotalMarks; + + if ($pairFail) { + //AppHelper::GRADE_TYPES + $pairGrade = "F"; + $pairPoint = 0.00; + $isFail = true; + $subjectFailCount++; + } else { + + [$pairGrade, $pairPoint] = $this->findGradePointFromMarks($gradingRules, $pairTotalMarks); + $totalPoint += $pairPoint; + } + + //need to store in db for marks sheet print + $combineResultInsertData[] = [ + 'registration_id' => $student->id, + 'subject_id' => $subject_id, + 'exam_id' => $examInfo->id, + 'total_marks' => $combineTotalMarks, + 'grade' => $pairGrade, + 'point' => $pairPoint, + ]; + + } + } + + + $finalPoint = ($totalPoint / $totalSubject); + if ($isFail) { + //AppHelper::GRADE_TYPES + $finalGrade = 'F'; + } else { + $finalGrade = $this->findGradeFromPoint($finalPoint, $gradingRules); + } + + $timeStampNow = Carbon::now(env('APP_TIMEZONE', 'Asia/Dhaka')); + $resultInsertData[] = [ + 'academic_year_id' => $acYear, + 'class_id' => $class_id, + 'registration_id' => $student->id, + 'exam_id' => $examInfo->id, + 'total_marks' => $totalMarks, + 'grade' => $finalGrade, + 'point' => $finalPoint, + 'subject_fail_count' => $subjectFailCount, + "created_at" => $timeStampNow, + "created_by" => $userId, + ]; + + } + catch (\Exception $e){ + $isDataMissing = true; + $marksMissingStudentInfo = "Regi. No. {$student->regi_no} , roll no {$student->roll_no} student subject marks can't be not processed! Need manual review."; + break; + } + + } + + + + if($isDataMissing){ + return redirect()->back()->with("error",$marksMissingStudentInfo); + } + + //if student not present exam time on this school + $message = ''; + if(count($markMissingStudents)){ + $message = "Student with these ".implode(',',$markMissingStudents)." registration numbers are not attend in this exam!"; + } + + + //now insert into db with transaction enabled + + DB::beginTransaction(); + try { + + Result::insert($resultInsertData); + DB::table('result_publish')->insert([ + 'academic_year_id' => $acYear, + 'class_id' => $class_id, + 'exam_id' => $exam_id, + 'publish_date' => $publish_date->format('Y-m-d') + ]); + DB::table('result_combines')->insert($combineResultInsertData); + DB::commit(); + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + return redirect()->back()->with("error",$message); + } + + return redirect()->back()->with("success","Result generated successfully.".$message); + } + + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $academic_years = []; + //if its college then have to get those academic years + if(AppHelper::getInstituteCategory() == 'college') { + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + } + $exams = []; + + + return view('backend.exam.result.generate', compact('classes', 'academic_years','exams')); + } + + + private function isAndInCombine($subject_id, $rules){ + $isCombine = false; + foreach ($rules as $subject => $data){ + if($subject == $subject_id && $data['combine_subject_id']){ + $isCombine = true; + break; + } + + if($data['combine_subject_id'] == $subject_id){ + $isCombine = true; + break; + } + } + + return $isCombine; + } + + + private function processCombineSubjectMarks($subjectMarks, $pairSubjectMarks, $subjectRule, $pairSubjectRule){ + $pairFail = false; + + $combineTotalMarks = ($subjectMarks->total_marks + $pairSubjectMarks->total_marks); + + if($subjectRule['total_exam_marks'] == $pairSubjectRule['total_exam_marks']){ + //dividing factor + $totalMarks = ($combineTotalMarks/2); + } + else{ + //if both subject exam marks not same then it must be 2:1 ratio + //Like: subject marks 100 pair subject marks 50 + $totalMarks = ($combineTotalMarks/ 1.5); + } + + //fraction number make ceiling + $totalMarks = ceil($totalMarks); + + $passingRule = $subjectRule['passing_rule']; + // AppHelper::PASSING_RULES + if(in_array($passingRule, [1,3])){ + if($totalMarks < $subjectRule['over_all_pass']){ + $pairFail = true; + } + } + + //if any subject absent then its fail + if($subjectMarks->present == 0 || $pairSubjectMarks->present == 0){ + $pairFail = true; + } + + // AppHelper::PASSING_RULES + if(!$pairFail && in_array($passingRule, [2,3])){ + + //acquire marks + $combineDistributedMarks = []; + foreach (json_decode($subjectMarks->marks) as $key => $distMarks){ + $combineDistributedMarks[$key] = floatval($distMarks); + + } + + foreach (json_decode($pairSubjectMarks->marks) as $key => $distMarks){ + $combineDistributedMarks[$key] += floatval($distMarks); + + } + + + //passing rules marks + $combineDistributeMarks = []; + foreach ($subjectRule['marks_distribution'] as $distMarks){ + $combineDistributeMarks[$distMarks->type] = floatval($distMarks->pass_marks); + } + + foreach ($pairSubjectRule['marks_distribution'] as $key => $distMarks){ + $combineDistributeMarks[$distMarks->type] += floatval($distMarks->pass_marks); + + } + + //now check for pass + foreach ($combineDistributeMarks as $key => $value){ + if($combineDistributedMarks[$key] < $value){ + $pairFail = true; + } + } + + } + + + return [$pairFail, $combineTotalMarks, $totalMarks]; + + } + + /** + * Published Result Delete + * @param Request $request + * @return \Illuminate\Http\Response + */ + public function resultDelete(Request $request){ + + //in post request get the result and show it + if ($request->isMethod('post')) { + $rules = [ + 'class_id' => 'required|integer', + 'exam_id' => 'required|integer', + ]; + + //if it college then need another 2 feilds + if(AppHelper::getInstituteCategory() == 'college') { + $rules['academic_year_id'] = 'required|integer'; + } + + $this->validate($request, $rules); + + + if (AppHelper::getInstituteCategory() == 'college') { + $acYear = $request->get('academic_year_id', 0); + } else { + $acYear = AppHelper::getAcademicYear(); + } + $class_id = $request->get('class_id', 0); + $exam_id = $request->get('exam_id', 0); + + //validation start + //check is result is published? + $isPublish = DB::table('result_publish') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $exam_id) + ->count(); + + if(!$isPublish){ + return redirect()->back()->with('error', 'Result not published for this class and exam!'); + } + + + //now delete data from db with transaction enabled + DB::beginTransaction(); + try { + + $studentIds = Result::where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $exam_id) + ->pluck('registration_id'); + + DB::table('results') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $exam_id) + ->delete(); + + DB::table('result_publish') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $exam_id) + ->delete(); + + DB::table('result_combines') + ->where('exam_id', $exam_id) + ->whereIn('registration_id', $studentIds) + ->delete(); + + DB::commit(); + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + return redirect()->back()->with("error",$message); + } + + return redirect()->back()->with("success","Result deleted successfully."); + } + + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $academic_years = []; + //if its college then have to get those academic years + if(AppHelper::getInstituteCategory() == 'college') { + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + } + $exams = []; + + return view('backend.exam.result.delete', compact('classes', 'academic_years','exams')); + } + + + /** + * Promote Student to next Academic Year form + * @param Request $request + * @return \Illuminate\Http\Response + */ + public function promotion(Request $request){ + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $academic_years = AcademicYear::where('status', '1')->orderBy('start_date','asc')->pluck('title', 'id'); + + + + return view('backend.exam.promotion.form', compact('classes', 'academic_years')); + } + + /** + * Promote Student to next Academic Year + * @param Request $request + * @return \Illuminate\Http\Response + */ + public function doPromotion(Request $request){ + $validateRules = [ + 'current_academic_year_id' => 'required|integer', + 'current_class_id' => 'required|integer', + 'exam_id' => 'required|integer', + 'fail_count' => 'required|integer', + 'promote_academic_year_id' => 'required|integer', + 'promote_class_id' => 'required|integer', + ]; + + + $validator = Validator::make($request->all(), $validateRules); + if ($validator->fails()) { + return redirect()->route('promotion.create') + ->withErrors($validator); + } + //inputs + $current_academic_year_id = $request->get('current_academic_year_id'); + $current_class_id = $request->get('current_class_id'); + $exam_id = $request->get('exam_id'); + $fail_count = $request->get('fail_count'); + $promote_academic_year_id = $request->get('promote_academic_year_id'); + $promote_class_id = $request->get('promote_class_id'); + + if($current_academic_year_id == $promote_academic_year_id){ + return redirect()->back()->with('error', 'Current and promoting academic year can not be same!'); + } + + if($current_class_id == $promote_class_id){ + return redirect()->back()->with('error', 'Current and promoting class can not be same!'); + } + + + $isPublish = DB::table('result_publish') + ->where('academic_year_id', $current_academic_year_id) + ->where('class_id', $current_class_id) + ->where('exam_id', $exam_id) + ->count(); + + if(!$isPublish){ + return redirect()->route('promotion.create')->with('error', 'Result not published for this class and exam!'); + } + + + //check have student for promotion + $promotableStudents = Registration::where('status', AppHelper::ACTIVE) + ->where('academic_year_id', $current_academic_year_id) + ->where('class_id', $current_class_id) + ->where('is_promoted', '0') + ->count(); + + if(!$promotableStudents){ + return redirect()->back()->with('error', 'There are no student left to promote from this class!'); + } + + //lower class promotion protection + $currentClassInfo = IClass::where('id', $current_class_id)->first(); + $promoteClassInfo = IClass::where('id', $promote_class_id)->first(); + if($currentClassInfo->order > $promoteClassInfo->order){ + return redirect()->back()->with('error', 'Can not promote student from higher to lower class!'); + } + //validation end + + //pull merit students + $meritWiseStudents = Result::where('academic_year_id', $current_academic_year_id) + ->where('class_id', $current_class_id) + ->where('exam_id', $exam_id) + ->orderBy('subject_fail_count','asc') + ->orderBy('point','desc') + ->orderBy('total_marks','desc') + ->select('registration_id','subject_fail_count') + ->with(['student' => function($q){ + $q->select('id','roll_no','student_id','shift','card_no'); + }]) + ->get(); + + //get promote class section wise capacity + $totalClassSeatCapacity = 0; + $promoteClassSectionCollection = Section::where('status', AppHelper::ACTIVE) + ->where('class_id', $promote_class_id) + ->orderBy('name','asc') + ->get(['id','name','capacity']); + $promoteClassSections = []; + foreach($promoteClassSectionCollection as $record){ + $promoteClassSections[] = [ + 'capacity' => $record->capacity, + 'id' => $record->id + ]; + $totalClassSeatCapacity += $record->capacity; + }; + //get current class section wise capacity + $currentClassSections = Section::where('status', AppHelper::ACTIVE) + ->where('class_id', $current_class_id) + ->orderBy('name','asc') + ->get(['id','name','capacity']) + ->reduce(function ($currentClassSections, $record){ + $currentClassSections[] = [ + 'capacity' => $record->capacity, + 'id' => $record->id + ]; + + return $currentClassSections; + }); + + $nextClassPromotingStudents = []; + $currentClassPromotingStudents = []; + $promoteableStudentCount = 0; + $readmitableStudentCount = 0; + foreach ($meritWiseStudents as $record){ + if($record->subject_fail_count <= $fail_count){ + $nextClassPromotingStudents[] = $record; + $promoteableStudentCount++; + } + else { + $currentClassPromotingStudents[] = $record; + $readmitableStudentCount++; + } + } + + //force validate for unwanted error + if($promoteableStudentCount < 1 && $readmitableStudentCount < 1) { + return redirect()->back()->with('error', 'Class'.$currentClassInfo->name.' has no student to promote or re-admit.'); + } + if($promoteableStudentCount > $totalClassSeatCapacity){ + return redirect()->back()->with('error', 'Class'.$promoteClassInfo->name.' has less capacity than promoting students! Create another section and try again.'); + } + + // pull subjects of promoting class[ core only] + $subjects = Subject::select('id') + ->where('class_id', $promote_class_id) + ->where('type', 1) + ->where('status', AppHelper::ACTIVE) + ->orderBy('order', 'asc') + ->get() + ->mapWithKeys(function ($sub) { + return [$sub->id => ['subject_type' => "1"]]; + })->toArray(); + + $need_to_assign_subject = false; + if(count($subjects)>0){ + $need_to_assign_subject = true; + } + + //start promoting the students + $acYearInfo = AcademicYear::where('id', $current_academic_year_id)->first(); + $newClassInfo = IClass::where('id', $promote_class_id)->first(); + $newAcYearInfo = AcademicYear::where('id', $promote_academic_year_id)->first(); + $prefixRegi = substr($acYearInfo->start_date->format('y'),1,1); + + + DB::beginTransaction(); + try { + + //first promote next class + if($promoteableStudentCount > 0) { + $rollNo = 1; + $sectionIndex = 0; + $totalPromoted = 0; + foreach ($nextClassPromotingStudents as $oldStudent) { + $regiNo = $newAcYearInfo->start_date->format('y') . (string)$newClassInfo->numeric_value; + $totalStudent = Registration::where('academic_year_id', $newAcYearInfo->id) + ->where('class_id', $newClassInfo->id)->withTrashed()->count(); + $regiNo .= str_pad(++$totalStudent, 3, '0', STR_PAD_LEFT); + + if ($promoteClassSections[$sectionIndex]['capacity'] == $totalPromoted) { + $rollNo = 1; + $sectionIndex++; + $totalPromoted = 0; + } + + $registrationData = [ + 'regi_no' => $regiNo, + 'student_id' => $oldStudent->student->student_id, + 'class_id' => $newClassInfo->id, + 'section_id' => $promoteClassSections[$sectionIndex]['id'], + 'academic_year_id' => $newAcYearInfo->id, + 'roll_no' => $rollNo, + 'shift' => $oldStudent->student->shift, + 'card_no' => $oldStudent->student->card_no, + 'board_regi_no' => $oldStudent->student->board_regi_no, + 'house' => $oldStudent->student->house, + 'old_registration_id' => $oldStudent->registration_id + ]; + + $newStudent = Registration::create($registrationData); + # now assign subjects to him + if ($need_to_assign_subject) { + $newStudent->subjects()->sync($subjects); + } + + $rollNo++; + $totalPromoted++; + } + } + + //re-admission start + if($readmitableStudentCount > 0) { + $rollNo = null; + $sectionIndex = 0; + $totalPromoted = 0; + $oldAndNewStudents = []; + foreach ($currentClassPromotingStudents as $oldStudent) { + $regiNo = $prefixRegi; + $regiNo .= $newAcYearInfo->start_date->format('y') . (string)$currentClassInfo->numeric_value; + $totalStudent = Registration::where('academic_year_id', $newAcYearInfo->id) + ->where('class_id', $currentClassInfo->id)->withTrashed()->count(); + $regiNo .= str_pad(++$totalStudent, 3, '0', STR_PAD_LEFT); + + if ($currentClassSections[$sectionIndex]['capacity'] == $totalPromoted) { + $rollNo = null; + $sectionIndex++; + $totalPromoted = 0; + } + + $registrationData = [ + 'regi_no' => $regiNo, + 'student_id' => $oldStudent->student->student_id, + 'class_id' => $currentClassInfo->id, + 'section_id' => $currentClassSections[$sectionIndex]['id'], + 'academic_year_id' => $newAcYearInfo->id, + 'roll_no' => $rollNo, + 'shift' => $oldStudent->student->shift, + 'card_no' => $oldStudent->student->card_no, + 'board_regi_no' => $oldStudent->student->board_regi_no, + 'house' => $oldStudent->student->house, + 'old_registration_id' => $oldStudent->registration_id + ]; + + $newStudent = Registration::create($registrationData); + $oldAndNewStudents[$oldStudent->registration_id] = $newStudent; + + $totalPromoted++; + } + + //now add subject for old student + $oldStudentsId = array_keys($oldAndNewStudents); + $studentsSubjects = DB::table('student_subjects') + ->whereIn('registration_id', $oldStudentsId) + ->get() + ->groupBy('registration_id'); + + foreach ($oldAndNewStudents as $oldId => $student) { + if (!isset($studentsSubjects[$oldId])) { + continue; + } + + $subjectWithType = $studentsSubjects[$oldId]->mapWithKeys(function ($record) { + return [$record->subject_id => ['subject_type' => $record->subject_type]]; + })->toArray(); + $student->subjects()->sync($subjectWithType); + } + } + // re-admission done + + if($promoteableStudentCount > 0 || $readmitableStudentCount > 0) { + //mark all old student as promoted + DB::table('registrations')->where('status', AppHelper::ACTIVE) + ->where('academic_year_id', $current_academic_year_id) + ->where('class_id', $current_class_id) + ->update(['is_promoted' => '1']); + + // now commit the database + DB::commit(); + } + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + return redirect()->route('promotion.create')->with("error",$message); + } + + //invalid dashboard cache + Cache::forget('studentCount'); + Cache::forget('student_count_by_class'); + Cache::forget('student_count_by_section'); + + //now notify the admins about this record + $msg = "{$promoteableStudentCount} students promoted to {$newClassInfo->name} class"; + if($readmitableStudentCount){ + $msg .= " and {$readmitableStudentCount} students re-admited to {$currentClassInfo->name} class"; + } + $whom =" by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg.$whom); + // Notification end + + return redirect()->route('promotion.create')->with('success', $msg); + } +} diff --git a/app/Http/Controllers/Backend/NotificationController.php b/app/Http/Controllers/Backend/NotificationController.php new file mode 100755 index 00000000..83dfe5a0 --- /dev/null +++ b/app/Http/Controllers/Backend/NotificationController.php @@ -0,0 +1,157 @@ +user(); + + //check if want to make read + if($request->query->get('action', '') == "mark_as_read"){ + $user->unreadNotifications->markAsRead(); + + if($request->ajax()) { + return response()->json([]); + } + return redirect()->back(); + } + //check if want to delete + if($request->query->get('action', '') == "delete"){ + $user->unreadNotifications()->delete(); + + if($request->ajax()) { + return response()->json([]); + } + return redirect()->back(); + } + + + $limit = $request->query->get('limit', 0); + if($limit){ + $notifications = $user->unreadNotifications->take($limit); + + } + else { + $notifications = $user->unreadNotifications; + + } + + + + + $messages = []; + foreach ($notifications as $notification){ + $messages[] = [ + "type" => $notification->data['msg_type'], + "message" => $notification->data['msg_text'], + "created_at" => $notification->created_at->format('M j,y h:i:s a') + ]; + } + + // check for ajax request here + if($request->ajax()) { + return response()->json($messages); + } + + $type = "unread"; + return view('backend.user.notification', compact('messages','type')); + + } + + public function getReadNotification(Request $request) + { + + $user = auth()->user(); + + //check if want to delete + if($request->query->get('action', '') == "delete"){ + $user->readNotifications()->delete(); + + if($request->ajax()) { + return response()->json([]); + } + return redirect()->back(); + } + + + + $limit = $request->query->get('limit', 0); + if($limit){ + $notifications = $user->readNotifications->take($limit); + + } + else { + $notifications = $user->readNotifications; + + } + + $messages = []; + foreach ($notifications as $notification){ + $messages[] = [ + "type" => $notification->data['msg_type'], + "message" => $notification->data['msg_text'], + "created_at" => $notification->created_at->format('M j,y h:i:s a') + ]; + } + + // check for ajax request here + if($request->ajax()) { + return response()->json($messages); + } + + $type = "read"; + return view('backend.user.notification', compact('messages','type')); + + } + + public function getAllNotification(Request $request) + { + + $user = auth()->user(); + + //check if want to delete + if($request->query->get('action', '') == "delete"){ + $user->notifications()->delete(); + + if($request->ajax()) { + return response()->json([]); + } + return redirect()->back(); + } + + + $notifications = $user->notifications; + + + $messages = []; + foreach ($notifications as $notification){ + $messages[] = [ + "type" => $notification->data['msg_type'], + "message" => $notification->data['msg_text'], + "created_at" => $notification->created_at->format('M j,y h:i:s a') + ]; + } + + // check for ajax request here + if($request->ajax()) { + return response()->json($messages); + } + + $type = "all"; + return view('backend.user.notification', compact('messages','type')); + + } + + +} diff --git a/app/Http/Controllers/Backend/PublicController.php b/app/Http/Controllers/Backend/PublicController.php new file mode 100755 index 00000000..bdcf8cf4 --- /dev/null +++ b/app/Http/Controllers/Backend/PublicController.php @@ -0,0 +1,323 @@ +user()->student->user_id) + ->first(); + if(!$studentInfo){ + abort(401); + } + + $student = Registration::where('student_id', $studentInfo->id) + ->where('is_promoted', '0') + ->with('student') + ->with('class') + ->with('section') + ->with('acYear') + ->first(); + if(!$student){ + abort(404); + } + + $username = ''; + if($student->student->user_id){ + $user = User::find($student->student->user_id); + $username = $user->username; + } + + //find siblings + if(strlen($student->student->siblings)){ + $siblingsRegiNumbers = array_map('trim', explode(',', $student->student->siblings)); + if(count($siblingsRegiNumbers)) { + $siblingStudents = Registration::whereIn('regi_no', $siblingsRegiNumbers) + ->with(['info' => function($q){ + $q->select('id','name'); + }]) + ->select('id','student_id') + ->get() + ->reduce(function ($siblingStudents, $record){ + $siblingStudents[] = $record->info->name; + return $siblingStudents; + }); + + $student->student->siblings = $siblingStudents ? implode(',', $siblingStudents) : ''; + } + } + + return view('backend.student.view', compact('student', 'username')); + + } + + private function checkSanity4Student($id) { + // sanity check + if(session('user_role_id',0) == AppHelper::USER_STUDENT){ + $studentInfo = auth()->user()->student; + if(!$studentInfo || $studentInfo->id != $id){ + abort(401); + } + } + //end check + } + /** + * Student attendance list + */ + + public function getStudentAttendance(Request $request) { + + $studentId = $request->query->get('student_id',0); + $student = Registration::where('status', AppHelper::ACTIVE) + ->where('id', $studentId) + ->first(); + // sanity check + $this->checkSanity4Student($student->student_id); + //end check + + $attendances = StudentAttendance::where('registration_id', $student->id) + ->select('attendance_date', 'present','registration_id') + ->orderBy('attendance_date', 'asc') + ->get(); + return response()->json($attendances); + + + } + + /** + * Check have empty seat in section for this academic year + * @return \Illuminate\Http\Response + */ + public function checkSectionHaveEmptySeat(Request $request) + { + if(AppHelper::getInstituteCategory() != 'college') { + // now check is academic year set or not + $settings = AppHelper::getAppSettings(); + if (!isset($settings['academic_year']) || (int)($settings['academic_year']) < 1) { + return response()->json([ + 'success' => false, + 'clear' => true, + 'message' => 'Academic year not set yet! Please go to settings and set it.' + ]); + } + + $acYearId = $settings['academic_year']; + } + else { + $acYearId = $request->get('academic_year'); + } + + /** + * Wrong class and section bug fix code + */ + $classId = $request->get("class_id",0); + $sectionId = $request->get("section_id",0); + $section = Section::where('id', $sectionId)->where('status', AppHelper::ACTIVE) + ->where('class_id', $classId)->select('id','capacity','class_id')->first(); + if(!$section){ + return response()->json([ + 'success' => false, + 'clear' => true, + 'message' => 'Wrong class and section selection!' + ]); + } + //end + + //Other validations + $studentInDesireSection = Registration::where('academic_year_id', $acYearId) + ->where('class_id', $section->class_id) + ->where('section_id', $section->id) + ->count(); + $studentInDesireSection += 1; + if($studentInDesireSection > $section->capacity){ + return response()->json([ + 'success' => false, + 'clear' => false, + 'message' => 'This section is full! Register student in another section.' + ]); + } + + return response()->json([ + 'success' => true, + 'message' => '' + ]); + } + + public function getAcademicYearsForPromotion(Request $request) { + //for promotion + $currentAcademicYearId = $request->query->get('current_academic_year_id',0); + $currentAcademicYear = AcademicYear::where('status', AppHelper::ACTIVE) + ->where('id', $currentAcademicYearId)->first(); + $academicYears = AcademicYear::where('status', AppHelper::ACTIVE) + ->when($currentAcademicYearId, function ($query) use($currentAcademicYear){ + $query->where('id', '!=', $currentAcademicYear->id) + ->whereDate('start_date','>', $currentAcademicYear->end_date->format('Y-m-d')); + }) + ->orderBy('start_date','asc') + ->select('id','title as text') + ->get(); + + return response()->json($academicYears); + + } + + public function getClassSubjectCountNewAlgo(Request $request) { + $classId = $request->query->get('classId',0); + $examId = $request->query->get('examId',0); + + if($examId){ + + $totalSubjects = DB::table('student_subjects') + ->select(DB::raw("registration_id, count(subject_id) as total")) + ->groupBy('registration_id') + ->get() + ->max('total'); + + } + else { + $totalSubjects = Subject::where('status', AppHelper::ACTIVE) + ->where('class_id', $classId)->count(); + } + + $data = []; + for ($i=0; $i <= $totalSubjects; $i++){ + $data[] = ['id' => $i, 'text' => $i]; + } + + return response()->json($data); + + } + + public function getStudentResults(Request $request) { + $studentId = $request->query->get('student_id',0); + $student = Registration::where('status', AppHelper::ACTIVE) + ->where('id', $studentId) + ->first(); + // sanity check + $this->checkSanity4Student($student->student_id); + //end check + + if($student) { + $publishedExams = DB::table('result_publish') + ->where('academic_year_id', $student->academic_year_id) + ->where('class_id', $student->class_id) + ->pluck('exam_id'); + + $examsData = Exam::where('class_id', $student->class_id) + ->whereIn('id', $publishedExams) + ->with(['marks' => function($q) use($student){ + $q->where('registration_id', $student->id) + ->select('registration_id','exam_id','subject_id','marks','total_marks','grade','point') + ->with(['subject' => function($q) { + $q->select('name','code','id'); + }]); + }]) + ->with(['result' => function($q) use($student){ + $q->where('registration_id', $student->id) + ->select('registration_id','exam_id','total_marks','grade','point'); + }]) + ->select('name','id','marks_distribution_types') + ->orderBy('id','asc') + ->get(); + + $examWithResults = []; + + foreach ($examsData as $datum) { + $marksDistribution = []; + foreach (json_decode($datum->marks_distribution_types) as $mdtypes){ + $marksDistribution[$mdtypes] = AppHelper::MARKS_DISTRIBUTION_TYPES[$mdtypes]; + } + + $examWithResults[] = [ + 'exam' => $datum->name, + 'marks' => $datum->marks, + 'result' => $datum->result->first(), + 'marks_distribution' => $marksDistribution + ]; + } + + $response = [ + 'success' => true, + 'message' => '', + 'data' => $examWithResults + ]; + } + else{ + $response = [ + 'success' => false, + 'message' => 'Student Not Found!', + 'data' => [] + ]; + } + + return response()->json($response); + } + + public function getStudentSubject(Request $request) { + $studentId = $request->query->get('student_id',0); + $student = Registration::where('status', AppHelper::ACTIVE) + ->where('id', $studentId) + ->first(); + // sanity check + $this->checkSanity4Student($student->student_id); + //end check + + if($student) { + $subjects = $student->subjects->map(function ($subject){ + return [ + "name" => $subject->name, + "code" => $subject->code, + "type" => AppHelper::SUBJECT_TYPE[$subject->pivot->subject_type] + ]; + }); + + $response = [ + 'success' => true, + 'message' => '', + 'data' => $subjects + ]; + } + else{ + $response = [ + 'success' => false, + 'message' => 'Student Not Found!', + 'data' => [] + ]; + } + + return response()->json($response); + } + + public function getClassSubjectSettings($classId) + { + $classInfo = IClass::where('id', $classId) + ->first(); + $settings = $classInfo->only([ + 'have_selective_subject', + 'max_selective_subject', + 'have_elective_subject' + ]); + return response()->json($settings); + } +} diff --git a/app/Http/Controllers/Backend/ReportController.php b/app/Http/Controllers/Backend/ReportController.php new file mode 100755 index 00000000..bc3d50b3 --- /dev/null +++ b/app/Http/Controllers/Backend/ReportController.php @@ -0,0 +1,583 @@ +isMethod('post')){ + $rules = [ + 'class_id' => 'required|integer', + 'section_id' => 'required|integer', + 'academic_year' => 'required|integer', + 'month' => 'required|min:7|max:7', + ]; + + + $this->validate($request, $rules); + + $month = Carbon::createFromFormat('m/Y', $request->get('month'))->timezone(env('APP_TIMEZONE','Asia/Dhaka')); + $classId = $request->get('class_id', 0); + $sectionId = $request->get('section_id', 0); + $academicYearId = $request->get('academic_year', 0); + + $monthStart = $month->startOfMonth()->copy(); + $monthEnd = $month->endOfMonth()->copy(); + + $students = Registration::where('status', AppHelper::ACTIVE) + ->where('class_id', $classId) + ->where('academic_year_id', $academicYearId) + ->where('section_id', $sectionId) + ->with(['info' => function($query){ + $query->select('name','id'); + }]) + ->select('id','student_id','roll_no','regi_no') + ->orderBy('roll_no','asc') + ->get(); + + $studentIds = $students->pluck('id'); + $attendanceData = StudentAttendance::select('registration_id','attendance_date','present','status') + ->whereIn('registration_id', $studentIds) + ->whereDate('attendance_date', '>=', $monthStart->format('Y-m-d')) + ->whereDate('attendance_date', '<=', $monthEnd->format('Y-m-d')) + ->get() + ->reduce(function ($attendanceData, $attendance){ + $inLate = 0; + if(strpos($attendance->status, '1') !== false){ + $inLate = 1; + } + $attendanceData[$attendance->registration_id][$attendance->getOriginal('attendance_date')] = [ + 'present' => $attendance->getOriginal('present'), + 'inLate' => $inLate + ]; + + return $attendanceData; + }); + + $wekends = AppHelper::getAppSettings('weekends'); + if($wekends){ + $wekends = json_decode($wekends); + } + + + $monthDates = AppHelper::generateDateRangeForReport($monthStart, $monthEnd, true, $wekends); + + $headerData = new \stdClass(); + $headerData->reportTitle = 'Student Monthly Attendance'; + $headerData->reportSubTitle = 'Month: '.$month->format('F,Y'); + $fileName = $headerData->reportTitle."_".$headerData->reportSubTitle; + $headerData->reportFileName = ReportHelper::replaceSpaceCharInString($fileName, ' ', '_'); + + + $filters = []; + $academicYearInfo = AcademicYear::where('id', $academicYearId)->first(); + $filters[] = "Academic year: ".$academicYearInfo->title; + + $section = Section::where('id', $sectionId) + ->with(['class' => function($q){ + $q->select('name','id'); + }]) + ->select('id','class_id','name') + ->first(); + + $filters[] = "Class: ".$section->class->name; + $filters[] = "Section: ".$section->name; + + + return view('backend.report.student.attendance.monthly_print',compact( + 'headerData', + 'monthDates', + 'students', + 'attendanceData', + 'filters' + )); + } + + + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + + return view('backend.report.student.attendance.monthly', compact( + 'academic_years', + 'classes' + )); + + } + + /** + * Student list print + * @param Request $request + * @return \Illuminate\View\View|\Illuminate\Http\Response + */ + public function studentList(Request $request){ + + $activeTab = 1; + + if($request->isMethod('post')) { + + if($request->get('form_name') == 'class') { + $rules = [ + 'academic_year' => 'required|integer', + 'class_id' => 'required|integer', + 'section_id' => 'nullable|integer', + ]; + } + else { + + $rules = [ + 'academic_year' => 'required|integer', + 'gender' => 'required|integer', + 'religion' => 'required|integer', + 'blood_group' => 'required|integer', + ]; + } + + + $this->validate($request, $rules); + + $academicYearId = $request->get('academic_year', 0); + $filters = []; + $academicYearInfo = AcademicYear::where('id', $academicYearId)->first(); + $filters[] = "Academic year: ".$academicYearInfo->title; + + + $students = collect(); + $showSection = false; + $showClass = false; + + if($request->get('form_name') == 'class') { + + //filter input + $classId = $request->get('class_id',0); + $sectionId = intval($request->get('section_id',0)); + + $students = Registration::where('status', AppHelper::ACTIVE) + ->where('academic_year_id', $academicYearId) + ->where('class_id', $classId) + ->if($sectionId, 'section_id', '=', $sectionId) + ->with('info') + ->when($sectionId, function ($q){ + $q->with(['section' => function($qq){ + $qq->select('id','name'); + }]); + }) + ->orderBy('regi_no','asc') + ->orderBy('roll_no','asc') + ->get(); + + $classInfo = IClass::where('id', $classId)->first(); + $filters[] = "Class: ".$classInfo->name; + + if($sectionId){ + $sectionInfo = Section::where('id', $sectionId) + ->select('id','name') + ->first(); + $filters[] = "Section: ".$sectionInfo->name; + } + else{ + $showSection = true; + } + + } + else{ + + //filter input + $gender = intval($request->get('gender',0)); + $religion = intval($request->get('religion',0)); + $bloodGroup = intval($request->get('blood_group',0)); + + $students = Registration::where('status', AppHelper::ACTIVE) + ->where('academic_year_id', $academicYearId) + ->with('info') + ->with(['class' => function($query){ + $query->select('name','id'); + }]) + ->with(['section' => function($query){ + $query->select('name','id'); + }]) + ->whereHas('student', function ($q) use($gender, $religion, $bloodGroup){ + $q->if($religion,'religion','=',$religion) + ->if($gender, 'gender', '=', $gender) + ->if($bloodGroup, 'blood_group', '=', $bloodGroup); + }) + ->orderBy('class_id','asc') + ->orderBy('section_id','asc') + ->orderBy('regi_no','asc') + ->orderBy('roll_no','asc') + ->get(); + + + $filters[] = "Gender: ".($gender ? AppHelper::GENDER[$gender] : 'All' ); + $filters[] = "Religion: ".($religion ? AppHelper::RELIGION[$religion] : 'All'); + $filters[] = "Blood Group: ".($bloodGroup ? AppHelper::BLOOD_GROUP[$bloodGroup] : 'All'); + + $showClass = true; + $showSection = true; + } + + + $headerData = new \stdClass(); + $headerData->reportTitle = 'Student List'; + $headerData->reportSubTitle = ''; + $fileName = $headerData->reportTitle; + $headerData->reportFileName = ReportHelper::replaceSpaceCharInString($fileName, ' ', '_'); + + + return view('backend.report.student.list_print', compact('headerData', 'students','filters','showClass','showSection')); + } + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + + return view('backend.report.student.list', compact( + 'academic_years', + 'classes', + 'activeTab' + )); + } + + /** + * Marksheet public print + * @param Request $request + * @return \Illuminate\View\View|\Illuminate\Http\RedirectResponse + */ + public function marksheetPublic(Request $request){ + + if($request->isMethod('post')) { + + $rules = [ + 'academic_year' => 'required|integer', + 'class_id' => 'required|integer', + 'exam_id' => 'required|integer', + 'regi_no' => 'required', + ]; + + if(!$request->exists('authorized_form',0)){ + $rules['captcha'] = 'required|captcha'; + } + + $v = Validator::make($request->all(), $rules); + if(!$v->passes()){ + return redirect()->route('report.marksheet_pub')->withErrors($v); + } + + + $classId = $request->get('class_id', 0); + $examId = $request->get('exam_id', 0); + $regiNo = $request->get('regi_no', ''); + $academicYear = $request->get('academic_year', 0); + + + $exam = Exam::where('id', $examId) + ->where('class_id', $classId) + ->select('id','name','marks_distribution_types') + ->first(); + + if(!$exam){ + return redirect()->back()->with('error', 'Exam not found!'); + } + + $student = Registration::where('status', AppHelper::ACTIVE) + ->where('academic_year_id', $academicYear) + ->where('class_id', $classId) + ->where(function ($q) use ($regiNo){ + $q->where('regi_no', $regiNo) + ->orWhere('roll_no', $regiNo); + }) + ->with(['info' => function($query){ + $query->select('name','dob','father_name','mother_name','id'); + }]) + ->with(['class' => function($query){ + $query->select('name','id'); + }]) + ->with(['section' => function($query){ + $query->select('name','id'); + }]) + ->with(['acYear' => function($q){ + $q->select('title','id','start_date','end_date'); + }]) + ->select('id','student_id','class_id','section_id','shift','regi_no','roll_no','academic_year_id') + ->first(); + + if(!$student){ + return redirect()->back()->with('error', 'Student not found!'); + } + + $publishedResult = DB::table('result_publish') + ->where('academic_year_id', $student->acYear->id) + ->where('academic_year_id', $student->acYear->id) + ->where('class_id', $classId) + ->where('exam_id', $exam->id) + ->whereDate('publish_date','<=', Carbon::now(env('APP_TIMEZONE','Asia/Dhaka'))->format('Y-m-d')) + ->select('publish_date') + ->first(); + + if(!$publishedResult){ + return redirect()->back()->with('error', 'Result not published for this class and exam!'); + } + + //result + $result = Result::where('class_id', $request->get('class_id')) + ->where('registration_id', $student->id) + ->where('exam_id', $exam->id) + ->select('registration_id','grade', 'point', 'total_marks') + ->first(); + $result->published_at = Carbon::createFromFormat('Y-m-d', $publishedResult->publish_date) + ->format('d/m/Y'); + + + + // now pull marks + //subject wise highest marks + $subjectWiseHighestMarks = Mark::where('marks.academic_year_id', $student->acYear->id) + ->where('marks.class_id', $request->get('class_id')) + ->where('marks.exam_id', $exam->id) + ->selectRaw('max(total_marks) as total, subject_id') + ->groupBy('subject_id') + ->get() + ->reduce(function ($subjectWiseHighestMarks, $mark){ + $subjectWiseHighestMarks[$mark->subject_id] = $mark->total; + return $subjectWiseHighestMarks; + }); + + //student + $examMakrs = Mark::join('subjects', 'marks.subject_id', 'subjects.id') + ->where('marks.registration_id', $student->id) + ->where('marks.academic_year_id', $student->acYear->id) + ->where('marks.class_id', $classId) + ->where('marks.exam_id', $exam->id) + ->select('subject_id','marks','total_marks','grade','point','present','subjects.name as subject_name', + 'subjects.type as subject_type','subjects.code as subject_code','subjects.order as order') + ->orderBy('order','asc') + ->get(); + + $coreSubjectsMarks = []; + foreach ($examMakrs as $marks){ + $coreSubjectsMarks[] = [ + 'id' => $marks->subject_id, + 'code' => $marks->subject_code, + 'name' => $marks->subject_name, + 'marks' => json_decode($marks->marks, true), + 'highest_marks' => $subjectWiseHighestMarks[$marks->subject_id], + 'total_marks' => $marks->total_marks, + 'grade' => $marks->grade, + 'point' => $marks->point + ]; + } + + + //marks distribution types + $marksDistributionTypes = json_decode($exam->marks_distribution_types, true); + $subjectWiseMarksDistributionTypeEmptyList = ExamRule::where('exam_id', $exam->id) + ->select('subject_id', 'marks_distribution') + ->get() + ->reduce(function ($subjectWiseMarksDistributionTypeEmptyList, $rule) { + + $emptyList = []; + foreach (json_decode($rule->marks_distribution) as $distribution) { + if($distribution->total_marks == 0) { + $emptyList[$distribution->type] = 0; + } + } + + $subjectWiseMarksDistributionTypeEmptyList[$rule->subject_id] = $emptyList; + + return $subjectWiseMarksDistributionTypeEmptyList; + }); + + + // report settings + $headerData = new \stdClass(); + $headerData->reportTitle = 'Marksheet'; + $headerData->reportSubTitle = $exam->name.'-'.$student->acYear->title; + $fileName = $headerData->reportTitle."_Class_{$student->class->name}_Section_{$student->section->name}_Roll_{$student->roll_no}"; + $headerData->reportFileName = ReportHelper::replaceSpaceCharInString($fileName, ' ', '_'); + + + return view('backend.report.exam.marksheet_pub_print', compact( + 'headerData', + 'exam', + 'marksDistributionTypes', + 'subjectWiseMarksDistributionTypeEmptyList', + 'student', + 'coreSubjectsMarks', + 'result' + )); + } + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + + $exams = []; + + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + + return view('backend.report.exam.marksheet_pub', compact( + 'exams', + 'classes', + 'academic_years' + )); + } + + /** + * employee list print + * @param Request $request + * @return \Illuminate\View\View|\Illuminate\Http\Response + */ + public function employeeList(Request $request){ + if($request->isMethod('post')) { + + $this->validate($request,[]); + + $employees = Employee::with(['role' => function($q){ + $q->select('id','name'); + }])->select( + 'id', + 'role_id', + 'id_card', + 'name', + 'designation', + 'qualification', + 'dob', + 'gender', + 'religion', + 'email', + 'phone_no', + 'address', + 'joining_date', + 'shift', + 'duty_start', + 'duty_end', + 'status' + ) + ->orderBy('order','asc') + ->get(); + + $headerData = new \stdClass(); + $headerData->reportTitle = 'Employee List'; + $headerData->reportSubTitle = ''; + + + return view('backend.report.hrm.employee.list_print', compact('headerData','employees')); + } + + return view('backend.report.hrm.employee.list'); + } + + + /** + * Employee attendance Monthly + * @return \Illuminate\View\View + */ + public function employeeMonthlyAttendance(Request $request){ + + if($request->isMethod('post')){ + $rules = [ + 'month' => 'required|min:7|max:7', + ]; + + + $this->validate($request, $rules); + + $month = Carbon::createFromFormat('m/Y', $request->get('month'))->timezone(env('APP_TIMEZONE','Asia/Dhaka')); + + $monthStart = $month->startOfMonth()->copy(); + $monthEnd = $month->endOfMonth()->copy(); + + $employees = Employee::select('id','name','id_card') + ->orderBy('order','asc') + ->get(); + + $employeeIds = $employees->pluck('id'); + $attendanceData = EmployeeAttendance::select('employee_id','attendance_date','present','status') + ->whereIn('employee_id', $employeeIds) + ->whereDate('attendance_date', '>=', $monthStart->format('Y-m-d')) + ->whereDate('attendance_date', '<=', $monthEnd->format('Y-m-d')) + ->get() + ->reduce(function ($attendanceData, $attendance){ + $inLate = 0; + if(strpos($attendance->status, '1') !== false){ + $inLate = 1; + } + $attendanceData[$attendance->employee_id][$attendance->getOriginal('attendance_date')] = [ + 'present' => $attendance->getOriginal('present'), + 'inLate' => $inLate + ]; + + return $attendanceData; + }); + + //get all leaves of employees for requested month + $employeesLeaves = Leave::where('status',2) //1= pending, 2= approved, 3= Rejected + ->whereDate('leave_date','>=', $monthStart->format('Y-m-d')) + ->whereDate('leave_date','<=', $monthEnd->format('Y-m-d')) + ->get(['employee_id','leave_date']) + ->reduce(function ($employeesLeaves, $leave) { + $employeesLeaves[$leave->employee_id][$leave->getOriginal('leave_date')] = 1; //just true + return $employeesLeaves; + }); + + + $wekends = AppHelper::getAppSettings('weekends'); + if($wekends){ + $wekends = json_decode($wekends); + } + + + $monthDates = AppHelper::generateDateRangeForReport($monthStart, $monthEnd, true, $wekends); + + $headerData = new \stdClass(); + $headerData->reportTitle = 'Employee Monthly Attendance'; + $headerData->reportSubTitle = 'Month: '.$month->format('F,Y'); + $fileName = $headerData->reportTitle."_".$headerData->reportSubTitle; + $headerData->reportFileName = ReportHelper::replaceSpaceCharInString($fileName, ' ', '_'); + + + return view('backend.report.hrm.employee.attendance.monthly_print',compact( + 'headerData', + 'monthDates', + 'employees', + 'attendanceData', + 'employeesLeaves' + )); + } + + return view('backend.report.hrm.employee.attendance.monthly'); + + } + +} diff --git a/app/Http/Controllers/Backend/SettingsController.php b/app/Http/Controllers/Backend/SettingsController.php new file mode 100755 index 00000000..2e25ceae --- /dev/null +++ b/app/Http/Controllers/Backend/SettingsController.php @@ -0,0 +1,372 @@ +isMethod('post')) { + + //validate form + $messages = [ + 'logo.max' => 'The :attribute size must be under 1MB.', + 'logo_small.max' => 'The :attribute size must be under 512kb.', + 'logo.dimensions' => 'The :attribute dimensions max be 230 X 50.', + 'logo_small.dimensions' => 'The :attribute dimensions max be 50 X 50.', + 'favicon.max' => 'The :attribute size must be under 512kb.', + 'favicon.dimensions' => 'The :attribute dimensions must be 32 X 32.', + ]; + + $rules = [ + 'name' => 'required|min:5|max:255', + 'short_name' => 'required|min:3|max:255', + 'logo' => 'mimes:jpeg,jpg,png|max:1024|dimensions:max_width=230,max_height=50', + 'logo_small' => 'mimes:jpeg,jpg,png|max:512|dimensions:max_width=50,max_height=50', + 'favicon' => 'mimes:png|max:512|dimensions:min_width=32,min_height=32,max_width=32,max_height=32', + 'establish' => 'min:4|max:255', + 'website_link' => 'max:255', + 'email' => 'nullable|email|max:255', + 'phone_no' => 'required|min:8|max:255', + 'address' => 'required|max:500', +// 'language' => 'required|min:2', + 'board_name' => 'nullable|max:255', + 'weekends' => 'required|array', + 'morning_start' => 'required|max:8|min:7', + 'morning_end' => 'required|max:8|min:7', + 'day_start' => 'required|max:8|min:7', + 'day_end' => 'required|max:8|min:7', + 'evening_start' => 'required|max:8|min:7', + 'evening_end' => 'required|max:8|min:7', + 'institute_type' => 'required|integer', + 'result_default_grade_id' => 'required|integer', + 'START_DAY_OF_WEEK' => 'required|integer', + 'END_DAY_OF_WEEK' => 'required|integer', + + ]; + + if(AppHelper::getInstituteCategory() != 'college') { + $rules[ 'academic_year'] ='required|integer'; + } + $this->validate($request, $rules, $messages); + + if($request->get('START_DAY_OF_WEEK') == $request->get('END_DAY_OF_WEEK')){ + return redirect()->back()->with('error','Start and End day of week can\'t be same')->withInput(); + } + + + if($request->hasFile('logo')) { + $storagepath = $request->file('logo')->store('public/logo'); + $fileName = basename($storagepath); + $data['logo'] = $fileName; + + //if file chnage then delete old one + $oldFile = $request->get('oldLogo',''); + if( $oldFile != ''){ + $file_path = "public/logo/".$oldFile; + Storage::delete($file_path); + } + } + else{ + $data['logo'] = $request->get('oldLogo',''); + } + + if($request->hasFile('logo_small')) { + $storagepath = $request->file('logo_small')->store('public/logo'); + $fileName = basename($storagepath); + $data['logo_small'] = $fileName; + + //if file chnage then delete old one + $oldFile = $request->get('oldLogoSmall',''); + if( $oldFile != ''){ + $file_path = "public/logo/".$oldFile; + Storage::delete($file_path); + } + } + else{ + $data['logo_small'] = $request->get('oldLogoSmall',''); + } + + if($request->hasFile('favicon')) { + $storagepath = $request->file('favicon')->store('public/logo'); + $fileName = basename($storagepath); + $data['favicon'] = $fileName; + + //if file chnage then delete old one + $oldFile = $request->get('oldFavicon',''); + if( $oldFile != ''){ + $file_path = "public/logo/".$oldFile; + Storage::delete($file_path); + } + } + else{ + $data['favicon'] = $request->get('oldFavicon',''); + } + + + $data['name'] = $request->get('name'); + $data['short_name'] = $request->get('short_name'); + $data['establish'] = $request->get('establish'); + $data['website_link'] = $request->get('website_link'); + $data['email'] = $request->get('email'); + $data['phone_no'] = $request->get('phone_no'); + $data['address'] = $request->get('address'); + + //now crate + AppMeta::updateOrCreate( + ['meta_key' => 'institute_settings'], + ['meta_value' => json_encode($data)] + ); + + + if(AppHelper::getInstituteCategory() != 'college') { + AppMeta::updateOrCreate( + ['meta_key' => 'academic_year'], + ['meta_value' => $request->get('academic_year', 0)] + ); + } + + AppMeta::updateOrCreate( + ['meta_key' => 'frontend_website'], + ['meta_value' => $request->has('frontend_website') ? 1 : 0] + ); + AppMeta::updateOrCreate( + ['meta_key' => 'language'], + ['meta_value' => $request->get('language', 'en')] + ); + AppMeta::updateOrCreate( + ['meta_key' => 'disable_language'], + ['meta_value' => $request->has('disable_language') ? 1 : 0] + ); + + AppMeta::updateOrCreate( + ['meta_key' => 'institute_type'], + ['meta_value' => $request->get('institute_type', 1)] + ); + + AppMeta::updateOrCreate( + ['meta_key' => 'board_name'], + ['meta_value' => $request->get('board_name', '')] + ); + + $shiftData = [ + 'Morning' => [ + 'start' => strtolower($request->get('morning_start','12:00 am')), + 'end' => strtolower($request->get('morning_end','12:00 am')), + ], + 'Day' => [ + 'start' => strtolower($request->get('day_start','12:00 am')), + 'end' => strtolower($request->get('day_end','12:00 am')), + ], + 'Evening' => [ + 'start' => strtolower($request->get('evening_start','12:00 am')), + 'end' => strtolower($request->get('evening_end','12:00 am')), + ] + ]; + + AppMeta::updateOrCreate( + ['meta_key' => 'shift_data'], + ['meta_value' => json_encode($shiftData)] + ); + + AppMeta::updateOrCreate( + ['meta_key' => 'weekends'], + ['meta_value' => json_encode($request->get('weekends',[]))] + ); + AppMeta::updateOrCreate( + ['meta_key' => 'week_start_day'], + ['meta_value' => trim($request->get('START_DAY_OF_WEEK'))] + ); + + AppMeta::updateOrCreate( + ['meta_key' => 'week_end_day'], + ['meta_value' => trim($request->get('END_DAY_OF_WEEK'))] + ); + + AppMeta::updateOrCreate( + ['meta_key' => 'result_default_grade_id'], + ['meta_value' => $request->get('result_default_grade_id', 0)] + ); + + + Cache::forget('app_settings'); + //invalid dashboard cache + Cache::forget('studentCount'); + Cache::forget('student_count_by_class'); + Cache::forget('student_count_by_section'); + Cache::put('default_academic_year', $request->get('academic_year', 0)); + + //now notify the admins about this record + $msg = "Institute settings updated by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('settings.institute')->with('success', 'Setting updated!'); + } + + //for get request + $settings = AppMeta::where('meta_key', 'institute_settings')->select('meta_key','meta_value')->first(); + $info = null; + if($settings) { + $info = json_decode($settings->meta_value); + } + + + $settings = AppMeta::select('meta_key','meta_value')->get(); + + $metas = []; + foreach ($settings as $setting){ + $metas[$setting->meta_key] = $setting->meta_value; + } + + + //if its college then no need to setup up default academic year + $academic_years = []; + $academic_year = 0; + if(AppHelper::getInstituteCategory() != 'college') { + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + $academic_year = isset($metas['academic_year']) ? $metas['academic_year'] : 0; + } + + $frontend_website = isset($metas['frontend_website']) ? $metas['frontend_website'] : 0; + $language = isset($metas['language']) ? $metas['language'] : 'en'; + $disable_language = isset($metas['disable_language']) ? $metas['disable_language'] : 1; + $institute_type = isset($metas['institute_type']) ? $metas['institute_type'] : 1; + + $weekends = isset($metas['weekends']) ? json_decode($metas['weekends'], true) : [-1]; + //format shifting data + if(isset($metas['shift_data'])) { + $shiftData = json_decode($metas['shift_data'], true); + $formatedShiftData = []; + foreach ($shiftData as $shift => $times){ + $formatedShiftData[$shift] = [ + 'start' => Carbon::parse($times['start'])->format('h:i a'), + 'end' => Carbon::parse($times['end'])->format('h:i a') + ]; + } + + $metas['shift_data'] = $formatedShiftData; + } + + + //result settings + $grades = Grade::pluck('name', 'id')->prepend('None',0); + $grade_id = $metas['result_default_grade_id'] ?? 0; + + $START_DAY_OF_WEEK = $metas['week_start_day'] ?? null; + $END_DAY_OF_WEEK = $metas['week_end_day'] ?? null; + + + return view( + 'backend.settings.institute', compact( + 'info', + 'academic_years', + 'academic_year', + 'weekends', + 'grades', + 'grade_id', + 'frontend_website', + 'disable_language', + 'institute_type', + 'language', + 'metas', + 'START_DAY_OF_WEEK', + 'END_DAY_OF_WEEK' + ) + ); + } + + /** + * report settings manage + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function report(Request $request) + { + + //for save on POST request + if ($request->isMethod('post')) { + + //validate form + $messages = [ + 'ms_log.max' => 'Logo must be under 512kb.', + 'ms_log.dimensions' => 'Logo size must be 150x110.', + 'ms_watermark.max' => 'Watermark must be under 1mb.', + 'ms_watermark.dimensions' => 'Watermark size must be 649x918.', + 'ms_title.max' => 'Institute name must be under 512kb.', + 'ms_title.dimensions' => 'Institute name size must be 428x92.', + ]; + $rules = [ + 'background_color' => 'nullable|max:255', + 'text_color' => 'nullable|max:255' + + ]; + $this->validate($request, $rules, $messages); + + + //now crate + if($request->has('show_logo')){ + AppMeta::updateOrCreate( + ['meta_key' => 'report_show_logo'], + ['meta_value' => 1] + ); + } + else{ + AppMeta::updateOrCreate( + ['meta_key' => 'report_show_logo'], + ['meta_value' => 0] + ); + } + + AppMeta::updateOrCreate( + ['meta_key' => 'report_background_color'], + ['meta_value' => $request->get('background_color', '')] + ); + + AppMeta::updateOrCreate( + ['meta_key' => 'report_text_color'], + ['meta_value' => $request->get('text_color', '')] + ); + + Cache::forget('app_settings'); + + //now notify the admins about this record + $msg = "Report settings updated by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('settings.report')->with('success', 'Report setting updated!'); + } + + //for get request + $settings = AppMeta::where('meta_key', 'like', '%report_%')->select('meta_key','meta_value')->get(); + $metas = []; + foreach ($settings as $setting){ + $metas[$setting->meta_key] = $setting->meta_value; + } + + $show_logo = $metas['report_show_logo'] ?? 0; + + return view('backend.settings.report', compact('metas','show_logo')); + } + + +} diff --git a/app/Http/Controllers/Backend/SiteController.php b/app/Http/Controllers/Backend/SiteController.php new file mode 100755 index 00000000..fa63d742 --- /dev/null +++ b/app/Http/Controllers/Backend/SiteController.php @@ -0,0 +1,636 @@ +first(); + $KEY_FILE_LOCATION = null; + if($gaInfo){ + $KEY_FILE_LOCATION = storage_path('app/secrets/'.$gaInfo->meta_value); + } + $googleToken = AppHelper::getGoogleAccessToken($KEY_FILE_LOCATION); + + $subscribers = SiteMeta::where('meta_key', 'subscriber')->count(); + $photos = SiteMeta::where('meta_key', 'gallery')->count(); + $events = Event::count(); + $gaInfo = SiteMeta::where('meta_key', 'ga_id')->first(); + $gaId = null; + if($gaInfo){ + $gaId = $gaInfo->meta_value; + } + + + return view('backend.site.dashboard', compact( + 'subscribers', + 'photos', + 'events', + 'googleToken', + 'gaId' + )); + } + + /** + * About section content manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function aboutContent(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) {// + $this->validate($request, [ + 'why_content' => 'required|min:5|max:500', + 'key_point_1_title' => 'required|min:5|max:100', + 'key_point_1_content' => 'required', + 'key_point_2_title' => 'max:100', + 'key_point_3_title' => 'max:100', + 'key_point_4_title' => 'max:100', + 'key_point_5_title' => 'max:100', + 'about_us' => 'required|min:50|max:500', + 'who_we_are' => 'required|min:100|max:1000', + 'intro_video_embed_code' => 'required', + 'video_site_link' => 'max:500', + + ]); + + //now crate or update model + $content = AboutContent::updateOrCreate( + ['id' => 1], + $request->all() + ); + return redirect()->route('site.about_content')->with('success', 'Contents saved!'); + } + + //for get request + $content = AboutContent::first(); + return view('backend.site.home.about.content', compact('content')); + } + + /** + * About section content manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function aboutContentImage(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + //validate form + $messages = [ + 'image.max' => 'The :attribute size must be under 2MB.', + 'image.dimensions' => 'The :attribute dimensions must be minimum 570 X 380.', + ]; + $this->validate($request, [ + 'image' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=570,min_height=380', + ]); + + $storagepath = $request->file('image')->store('public/about'); + $fileName = basename($storagepath); + + $data = $request->all(); + $data['image'] = $fileName; + AboutSlider::create($data); + + return redirect()->route('site.about_content_image')->with('success', 'Image uploaded'); + } + + //for get request + $images = AboutSlider::orderBy('order', 'asc')->get(); + if(count($images)>10){ + Session::flash('warning','Don\'t add more than 10 image for better site performance!'); + } + return view('backend.site.home.about.image', compact('images')); + } + + /** + * About section content image delete + * @return array + */ + public function aboutContentImageDelete($id) + { + + $image = AboutSlider::findOrFail($id); + Storage::delete('/public/about/' . $image->image); + $image->delete(); + + return [ + 'success' => true, + 'message' => 'Image deleted!' + ]; + } + + /** + * service content manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function serviceContent(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) {// + $this->validate($request, [ + 'meta_value' => 'required|min:5|max:500' + + ]); + + //now crate or update model + $content = SiteMeta::updateOrCreate( + ['meta_key' => 'our_service_text'], + $request->all() + ); + return redirect()->route('site.service')->with('success', 'Contents saved!'); + } + + //for get request + $content = SiteMeta::where('meta_key', 'our_service_text')->first(); + return view('backend.site.home.service', compact('content')); + } + + + /** + * service content manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function statisticContent(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) {// + $this->validate($request, [ + 'student' => 'required|numeric|min:1', + 'teacher' => 'required|numeric|min:1', + 'graduate' => 'required|numeric|min:1', + 'books' => 'required|numeric|min:1' + + ]); + + + + $values = $request->get('student').','.$request->get('teacher').','.$request->get('graduate').','.$request->get('books'); + + + + //now crate or update model + $content = SiteMeta::updateOrCreate( + ['meta_key' => 'statistic'], + ['meta_value' => $values] + ); + return redirect()->route('site.statistic')->with('success', 'Contents saved!'); + } + + //for get request + $statistic = SiteMeta::where('meta_key', 'statistic')->first(); + $content = null; + if($statistic){ + $content = new \stdClass(); + $data = explode(',', $statistic->meta_value); + $content->student = $data[0]; + $content->teacher = $data[1]; + $content->graduate = $data[2]; + $content->books = $data[3]; + } + + return view('backend.site.home.statistic', compact('content')); + } + + + + /** + * testimonials manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function testimonialIndex(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) {// + $this->validate($request, [ + 'hiddenId' => 'required|integer', + + ]); + + $test = Testimonial::findOrFail($request->get('hiddenId')); + $test->delete(); + + + return redirect()->route('site.testimonial')->with('success', 'Contents deleted!'); + } + + //for get request + $testimonials = Testimonial::all(); + + + return view('backend.site.home.testimonial.list', compact('testimonials')); + } + + /** + * testimonials manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function testimonialCreate(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + $messages = [ + 'photo.max' => 'The :attribute size must be under 2MB.', + 'photo.dimensions' => 'The :attribute dimensions must be minimum 94 X 94.', + ]; + $this->validate($request, [ + 'writer' => 'required|min:5|max:255', + 'comments' => 'required', + 'photo' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=94,min_height=94', + + + ]); + $data = $request->all(); + if($request->hasFile('photo')){ + $storagepath = $request->file('photo')->store('public/testimonials'); + $fileName = basename($storagepath); + $data['avatar'] = $fileName; + + } + + Testimonial::create($data); + + return redirect()->route('site.testimonial_create')->with('success', 'Testimonial added!'); + } + + //for get request + $testimonials = Testimonial::all(); + + + return view('backend.site.home.testimonial.add', compact('testimonials')); + } + + /** + * subscriber manage + * @return mixed + */ + public function subscribe(Request $request) + { + //for get request + $subscribers = SiteMeta::where('meta_key', 'subscriber')->get(); + return view('backend.site.home.subscribers', compact('subscribers')); + } + + + /** + * About gallery content manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function gallery() + { + + + //for get request + $images = SiteMeta::where('meta_key','gallery')->paginate(env('MAX_RECORD_PER_PAGE',25)); + + return view('backend.site.gallery.content', compact('images')); + } + /** + * About gallery content add + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function galleryAdd(Request $request) + { + + //for save on POST request + if ($request->isMethod('post')) { + //validate form + $messages = [ + 'image.max' => 'The :attribute size must be under 2MB.', + ]; + $this->validate($request, [ + 'image' => 'mimes:jpeg,jpg,png|max:2048', + ]); + + $storagepath = $request->file('image')->store('public/gallery'); + $fileName = basename($storagepath); + + //now crate + SiteMeta::create( + [ + 'meta_key' => 'gallery', + 'meta_value' => $fileName + ] + ); + + return redirect()->route('site.gallery_image')->with('success', 'Image uploaded'); + } + + return view('backend.site.gallery.image'); + } + + /** + * About gallery content image delete + * @return array + */ + public function galleryDelete($id) + { + + $image = SiteMeta::findOrFail($id); + Storage::delete('/public/gallery/' . $image->meta_value); + $image->delete(); + + return [ + 'success' => true, + 'message' => 'Image deleted!' + ]; + } + + + /** + * contact us manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function contactUs(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) {// + $this->validate($request, [ + 'address' => 'required|min:5|max:500', + 'phone_no' => 'required|min:5|max:500', + 'email' => 'required|email|min:5|max:500', + 'latlong' => 'required|min:5|max:500', + + ]); + + //now crate or update model + $content = SiteMeta::updateOrCreate( + ['meta_key' => 'contact_address'], + [ 'meta_value' => $request->get('address')] + ); + $content = SiteMeta::updateOrCreate( + ['meta_key' => 'contact_phone'], + [ 'meta_value' => $request->get('phone_no')] + ); + $content = SiteMeta::updateOrCreate( + ['meta_key' => 'contact_email'], + [ 'meta_value' => $request->get('email')] + ); + $content = SiteMeta::updateOrCreate( + ['meta_key' => 'contact_latlong'], + [ 'meta_value' => $request->get('latlong')] + ); + + Cache::forget('site_metas'); + + return redirect()->route('site.contact_us')->with('success', 'Information saved!'); + } + + //for get request + $address = SiteMeta::where('meta_key', 'contact_address')->first(); + $phone = SiteMeta::where('meta_key', 'contact_phone')->first(); + $email = SiteMeta::where('meta_key', 'contact_email')->first(); + $latlong = SiteMeta::where('meta_key', 'contact_latlong')->first(); + return view('backend.site.contact_us', compact('address', 'phone', 'email', 'latlong')); + } + + /** + * fqa section content manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function faq(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + //validate form + $this->validate($request, [ + 'question' => 'required|min:5|max:255', + 'answer' => 'required|min:5', + ]); + + $data = [ + 'q' => $request->get('question'), + 'a' => $request->get('answer') + ]; + //now crate + SiteMeta::create( + [ + 'meta_key' => 'faq', + 'meta_value' => json_encode($data) + ] + ); + return redirect()->route('site.faq')->with('success', 'Record added!'); + } + + //for get request + //for get request + $faqs = SiteMeta::where('meta_key','faq')->paginate(env('MAX_RECORD_PER_PAGE',25)); + return view('backend.site.faq', compact('faqs')); + } + + /** + * Faq section content image delete + * @return array + */ + public function faqDelete($id) + { + + $faq = SiteMeta::findOrFail($id); + $faq->delete(); + + return redirect()->route('site.faq')->with('success', 'Record Deleted!'); + } + + /** + * timeline section content manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function timeline(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + //validate form + $this->validate($request, [ + 'title' => 'required|min:5|max:255', + 'description' => 'required|min:5|max:500', + 'year' => 'required|min:4|max:4', + ]); + + $data = [ + 't' => $request->get('title'), + 'd' => $request->get('description'), + 'y' => $request->get('year') + ]; + //now crate + SiteMeta::create( + [ + 'meta_key' => 'timeline', + 'meta_value' => json_encode($data) + ] + ); + return redirect()->route('site.timeline')->with('success', 'Record added!'); + } + + //for get request + $timeline = SiteMeta::where('meta_key','timeline')->get(); + return view('backend.site.timeline', compact('timeline')); + } + + /** + * timeline section content image delete + * @return array + */ + public function timelineDelete($id) + { + + $timeline = SiteMeta::findOrFail($id); + $timeline->delete(); + + return redirect()->route('site.timeline')->with('success', 'Record Deleted!'); + } + + + /** + * setting section content manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function settings(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + //validate form + $messages = [ + 'logo.max' => 'The :attribute size must be under 1MB.', + 'logo.dimensions' => 'The :attribute dimensions must be 82 X 72.', + 'logo2x.max' => 'The :attribute size must be under 1MB.', + 'logo2x.dimensions' => 'The :attribute dimensions must be 162 X 142.', + 'favicon.max' => 'The :attribute size must be under 1MB.', + 'favicon.dimensions' => 'The :attribute dimensions must be 32 X 32.', + ]; + $this->validate($request, [ + 'name' => 'required|min:5|max:255', + 'short_name' => 'required|min:3|max:255', + 'logo' => 'nullable|mimes:jpeg,jpg,png|max:1024|dimensions:min_width=82,min_height=72,max_width=82,max_height=72', + 'logo2x' => 'nullable|mimes:jpeg,jpg,png|max:1024|dimensions:min_width=162,min_height=142,max_width=162,max_height=142', + 'favicon' => 'nullable|mimes:png|max:512|dimensions:min_width=32,min_height=32,max_width=32,max_height=32', + 'facebook' => 'max:255', + 'instagram' => 'max:255', + 'twitter' => 'max:255', + 'youtube' => 'max:255', + ]); + + if($request->hasFile('logo')) { + $storagepath = $request->file('logo')->store('public/site'); + $fileName = basename($storagepath); + $data['logo'] = $fileName; + } + + if($request->hasFile('logo2x')) { + $storagepath = $request->file('logo2x')->store('public/site'); + $fileName = basename($storagepath); + $data['logo2x'] = $fileName; + } + + if($request->hasFile('favicon')) { + $storagepath = $request->file('favicon')->store('public/site'); + $fileName = basename($storagepath); + $data['favicon'] = $fileName; + } + + $data['name'] = $request->get('name'); + $data['short_name'] = $request->get('short_name'); + $data['facebook'] = $request->get('facebook'); + $data['instagram'] = $request->get('instagram'); + $data['twitter'] = $request->get('twitter'); + $data['youtube'] = $request->get('youtube'); + + //now crate + SiteMeta::updateOrCreate( + ['meta_key' => 'settings'], + ['meta_value' => json_encode($data)] + ); + Cache::forget('website_settings'); + return redirect()->route('site.settings')->with('success', 'Record updated!'); + } + + //for get request + $settings = SiteMeta::where('meta_key','settings')->first(); + $info = null; + if($settings){ + $info = json_decode($settings->meta_value); + } + + return view('backend.site.settings', compact('info')); + } + + /** + * Google Analytics section content manage + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function analytics(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + //validate form + $this->validate($request, [ + 'ga_tracking_id' => 'required|max:255', + 'ga_report_id' => 'required|max:255', + 'ga_key_file' => 'required|file|mimetypes:text/plain', + ]); + + + $storagepath = $request->file('ga_key_file')->storeAs('secrets', 'ga_key_file.json'); + $fileName = basename($storagepath); + + //now crate + SiteMeta::updateOrCreate( + ['meta_key' => 'ga_key_file'], + ['meta_value' => $fileName] + ); + SiteMeta::updateOrCreate( + ['meta_key' => 'ga_tracking_id'], + ['meta_value' => $request->get('ga_tracking_id')] + ); + SiteMeta::updateOrCreate( + ['meta_key' => 'ga_id'], + ['meta_value' => $request->get('ga_report_id')] + ); + + return redirect()->route('site.analytics')->with('success', 'Record updated!'); + } + + //for get request + $info = new \stdClass(); + $info->key_file = null; + $info->ga_id = null; + $info->ga_tracking_id = null; + + $gaInfo = SiteMeta::where('meta_key', 'ga_key_file')->first(); + if($gaInfo){ + $info->key_file = $gaInfo->meta_value; + } + $gaInfo = SiteMeta::where('meta_key', 'ga_id')->first(); + if($gaInfo){ + $info->ga_id = $gaInfo->meta_value; + } + $gaInfo = SiteMeta::where('meta_key', 'ga_tracking_id')->first(); + if($gaInfo){ + $info->ga_tracking_id = $gaInfo->meta_value; + } + + return view('backend.site.analytics', compact('info')); + } + + +} diff --git a/app/Http/Controllers/Backend/SliderController.php b/app/Http/Controllers/Backend/SliderController.php new file mode 100755 index 00000000..d7feffba --- /dev/null +++ b/app/Http/Controllers/Backend/SliderController.php @@ -0,0 +1,97 @@ +paginate(25); + if(count($sliders)>10){ + Session::flash('warning','Don\'t add more than 10 slider for better site performance!'); + } + return view('backend.site.home.slider.list', compact('sliders')); + } + + public function create(Request $request) + { + return view('backend.site.home.slider.add'); + } + + public function store(Request $request) + { + //validate form + $messages = [ + 'image.max' => 'The :attribute size must be under 2MB.', + 'image.dimensions' => 'The :attribute dimensions must be minimum 1900 X 1200.', + ]; + $this->validate($request, [ + 'title' => 'required|min:5|max:255', + 'subtitle' => 'required|min:5|max:255', + 'image' => 'required|mimes:jpeg,jpg,png|max:2048|dimensions:min_width=1900,min_height=1200', + + ], $messages); + + $storagepath = $request->file('image')->store('public/sliders'); + $fileName = basename($storagepath); + + $data = $request->all(); + $data['image'] = $fileName; + + Slider::create($data); + + return redirect()->back()->with('success', 'New slider item created.'); + } + + public function edit($id) + { + $slider = Slider::findOrFail($id); + return view('backend.site.home.slider.edit', compact('slider')); + } + + public function update(Request $request, $id) + { + //validate form + $messages = [ + 'image.max' => 'The :attribute size must be under 2MB.', + 'image.dimensions' => 'The :attribute dimensions must be minimum 1900 X 1200.', + ]; + $this->validate($request, [ + 'title' => 'required|min:5|max:255', + 'subtitle' => 'required|min:5|max:255', + 'image' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=1900,min_height=1200', + + ], $messages); + + $slider = Slider::findOrFail($id); + $data = $request->all(); + + if($request->hasFile('image')){ + $file_path = "public/sliders/".$slider->image; + Storage::delete($file_path); + + $storagepath = $request->file('image')->store('public/sliders'); + $fileName = basename($storagepath); + $data['image'] = $fileName; + + } + + $slider->fill($data); + $slider->save(); + + return redirect()->route('slider.index')->with('success', 'Slider item updated.'); + } + + public function destroy($id) + { + $slider = Slider::findOrFail($id); + $slider->delete(); + return redirect()->route('slider.index')->with('success', 'Slider item deleted.'); + } +} diff --git a/app/Http/Controllers/Backend/StudentAttendanceController.php b/app/Http/Controllers/Backend/StudentAttendanceController.php new file mode 100755 index 00000000..37b2bd18 --- /dev/null +++ b/app/Http/Controllers/Backend/StudentAttendanceController.php @@ -0,0 +1,375 @@ +query->get('class', 0); + $section_id = $request->query->get('section', 0); + $acYear = $request->query->get('academic_year', 0); + $attendance_date = $request->query->get('attendance_date', date('d/m/Y')); + //if its college then have to get those academic years + $academic_years = []; + if (AppHelper::getInstituteCategory() == 'college') { + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + } else { + + $acYear = $request->query->get('academic_year', AppHelper::getAcademicYear()); + } + + + + //if its a ajax request that means come from attendance add exists checker + if ($request->ajax()) { + $attendances = $this->getAttendanceByFilters($class_id, $section_id, $acYear, $attendance_date, true); + return response()->json($attendances); + } + + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order', 'asc') + ->pluck('name', 'id'); + $sections = []; + + //now fetch attendance data + $attendances = []; + if ($class_id && $section_id && $acYear && strlen($attendance_date) >= 10) { + $att_date = Carbon::createFromFormat('d/m/Y', $attendance_date)->toDateString(); + $attendances = Registration::where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('section_id', $section_id) + ->where('status', AppHelper::ACTIVE) + ->with(['student' => function ($query) { + $query->select('name', 'id'); + }]) + ->with(['attendanceSingleDay' => function ($query) use ($att_date, $class_id, $acYear) { + $query->select('id', 'present', 'registration_id', 'in_time', 'out_time', 'staying_hour') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->whereDate('attendance_date', $att_date); + }]) + ->whereHas('attendance', function ($query) use ($att_date, $class_id, $acYear) { + $query->select('id', 'registration_id') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->whereDate('attendance_date', $att_date); + }) + ->select('id', 'regi_no', 'roll_no', 'student_id') + ->orderBy('roll_no', 'asc') + ->get(); + + $sections = Section::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->pluck('name', 'id'); + } + + + + return view('backend.attendance.student.list', compact( + 'academic_years', + 'classes', + 'sections', + 'acYear', + 'class_id', + 'section_id', + 'attendance_date', + 'attendances' + )); + } + + private function getAttendanceByFilters($class_id, $section_id, $acYear, $attendance_date, $isCount = false) + { + $att_date = Carbon::createFromFormat('d/m/Y', $attendance_date)->toDateString(); + return $attendances = Registration::where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('section_id', $section_id) + ->where('status', AppHelper::ACTIVE) + ->with(['student' => function ($query) { + $query->select('name', 'id'); + }]) + ->whereHas('attendance', function ($query) use ($att_date, $class_id, $acYear) { + $query->select('id', 'registration_id') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->whereDate('attendance_date', $att_date); + }) + ->select('id', 'regi_no', 'roll_no', 'student_id') + ->orderBy('roll_no', 'asc') + ->CountOrGet($isCount); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create(Request $request) + { + + $students = collect(); + $academic_year = ''; + $class_name = ''; + $section_name = ''; + $academic_years = []; + $attendance_date = date('d/m/Y'); + $acYear = null; + $class_id = null; + $section_id = null; + $sendNotification = 0; + + if ($request->isMethod('post')) { + + if (AppHelper::getInstituteCategory() == 'college') { + $acYear = $request->get('academic_year', 0); + } else { + $acYear = AppHelper::getAcademicYear(); + } + $class_id = $request->get('class_id', 0); + $section_id = $request->get('section_id', 0); + $attendance_date = $request->get('attendance_date', ''); + + $attendances = $this->getAttendanceByFilters($class_id, $section_id, $acYear, $attendance_date, true); + if ($attendances) { + return redirect()->route('student_attendance.create')->with("error", "Attendance already exists!"); + } + + $students = Registration::with(['info' => function ($query) { + $query->select('name', 'id'); + }])->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('section_id', $section_id) + ->select('regi_no', 'roll_no', 'id', 'student_id') + ->orderBy('roll_no', 'asc') + ->get(); + + + $classInfo = IClass::where('status', AppHelper::ACTIVE) + ->where('id', $class_id) + ->first(); + $class_name = $classInfo->name; + $sectionsInfo = Section::where('status', AppHelper::ACTIVE) + ->where('id', $section_id) + ->where('class_id', $class_id) + ->first(); + $section_name = $sectionsInfo->name; + + + if (AppHelper::getInstituteCategory() == 'college') { + $acYearInfo = AcademicYear::where('status', '1')->where('id', $acYear)->first(); + $academic_year = $acYearInfo->title; + } + + $sendNotification = AppHelper::getAppSettings('student_attendance_notification'); + } + + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order', 'asc') + ->pluck('name', 'id'); + + //if its college then have to get those academic years + if (AppHelper::getInstituteCategory() == 'college') { + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + } + + + return view('backend.attendance.student.add', compact( + 'academic_years', + 'classes', + 'sections', + 'students', + 'class_name', + 'academic_year', + 'section_name', + 'attendance_date', + 'class_id', + 'section_id', + 'acYear', + 'sendNotification' + )); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + //validate form + $messages = [ + 'registrationIds.required' => 'This section has no students!' + ]; + $rules = [ + 'class_id' => 'required|integer', + 'section_id' => 'required|integer', + 'attendance_date' => 'required|min:10|max:11', + 'registrationIds' => 'required|array' + + ]; + //if it college then need another 2 feilds + if (AppHelper::getInstituteCategory() == 'college') { + $rules['academic_year'] = 'required|integer'; + } + + $this->validate($request, $rules, $messages); + + + //check attendance exists or not + $class_id = $request->get('class_id', 0); + $section_id = $request->get('section_id', 0); + $attendance_date = $request->get('attendance_date', ''); + if (AppHelper::getInstituteCategory() == 'college') { + $acYear = $request->get('academic_year', 0); + } else { + + $acYear = AppHelper::getAcademicYear(); + } + $attendances = $this->getAttendanceByFilters($class_id, $section_id, $acYear, $attendance_date, true); + + if ($attendances) { + return redirect()->route('student_attendance.create')->with("error", "Attendance already exists!"); + } + + + //process the insert data + $students = $request->get('registrationIds'); + $present = $request->get('present', []); + $attendance_date = Carbon::createFromFormat('d/m/Y', $request->get('attendance_date'))->format('Y-m-d'); + $dateTimeNow = Carbon::now(env('APP_TIMEZONE', 'Asia/Dhaka')); + + + //fetch institute shift running times + $shiftData = AppHelper::getAppSettings('shift_data'); + if ($shiftData) { + $shiftData = json_decode($shiftData, true); + } + + $shiftRuningTimes = []; + + foreach ($shiftData as $shift => $times) { + $shiftRuningTimes[$shift] = [ + 'start' => Carbon::createFromFormat('Y-m-d h:i a', $attendance_date . ' ' . $times['start']), + 'end' => Carbon::createFromFormat('Y-m-d h:i a', $attendance_date . ' ' . $times['end']) + ]; + } + + $studentsShift = Registration::whereIn('id', $students) + ->get(['id', 'shift']) + ->reduce(function ($studentsShift, $student) { + $studentsShift[$student->id] = $student->shift; + return $studentsShift; + }); + + $attendances = []; + $absentIds = []; + $parseError = false; + $message = ""; + $timeZero = Carbon::createFromFormat('Y-m-dHis', $attendance_date.'000000'); + + foreach ($students as $student) { + + $inTime = $shiftRuningTimes[$studentsShift[$student]]['start']; + $outTime = $shiftRuningTimes[$studentsShift[$student]]['end']; + $timeDiff = $inTime->diff($outTime)->format('%H:%I'); + + $isPresent = '1'; + if(!isset($present[$student])){ + $inTime = $timeZero; + $outTime = $timeZero; + $timeDiff = '00:00:00'; + $isPresent = '0'; + } + + $status = []; + + $attendances[] = [ + "academic_year_id" => $acYear, + "class_id" => $class_id, + "registration_id" => $student, + "attendance_date" => $attendance_date, + "in_time" => $inTime, + "out_time" => $outTime, + "staying_hour" => $timeDiff, + "status" => implode(',', $status), + "present" => $isPresent, + "created_at" => $dateTimeNow, + "created_by" => auth()->user()->id, + ]; + + if (!$isPresent) { + $absentIds[] = $student; + } + } + + if ($parseError) { + return redirect()->route('employee_attendance.create')->with("error", $message); + } + + + DB::beginTransaction(); + try { + + StudentAttendance::insert($attendances); + DB::commit(); + } catch (\Exception $e) { + DB::rollback(); + $message = str_replace(array("\r", "\n", "'", "`"), ' ', $e->getMessage()); + return redirect()->route('student_attendance.create')->with("error", $message); + } + + + //now invalid cache + Cache::forget('student_attendance_count'); + + $m = "Attendance saved successfully."; + return redirect()->route('student_attendance.create')->with("success", $m); + } + + /** + * status change + * @return mixed + */ + public function changeStatus(Request $request, $id = 0) + { + + $attendance = StudentAttendance::findOrFail($id); + if (!$attendance) { + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + $attendance->present = (string) $request->get('status'); + + $attendance->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + } +} diff --git a/app/Http/Controllers/Backend/StudentController.php b/app/Http/Controllers/Backend/StudentController.php new file mode 100755 index 00000000..14460ec1 --- /dev/null +++ b/app/Http/Controllers/Backend/StudentController.php @@ -0,0 +1,1080 @@ +orderBy('order','asc') + ->pluck('name', 'id'); + + //if its college then have to get those academic years + $academic_years = []; + if(AppHelper::getInstituteCategory() == 'college') { + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + } + + $iclass = null; + $students = []; + $sections = []; + $status = '1'; + + // get query parameter for filter the fetch + $class_id = $request->query->get('class',0); + $section_id = $request->query->get('section',0); + $acYear = $request->query->get('academic_year',0); + $status = $request->query->get('status','1'); + + + $classInfo = null; + $sectionInfo = null; + if($class_id){ + + if(AppHelper::getInstituteCategory() != 'college') { + // now check is academic year set or not + $settings = AppHelper::getAppSettings(); + if(!isset($settings['academic_year']) || (int)($settings['academic_year']) < 1){ + return redirect()->route('student.index') + ->with("error",'Academic year not set yet! Please go to settings and set it.') + ->withInput(); + } + $acYear = $settings['academic_year']; + } + + + //get student + $students = Registration::where('class_id', $class_id) + ->where('academic_year_id', $acYear) + ->where('status', $status) + ->section($section_id) + ->with('student') + ->orderBy('student_id','asc') + ->get(); + + //if section is mention then full this class section list + if($section_id){ + $sections = Section::where('status', AppHelper::ACTIVE) + ->where('class_id', $class_id) + ->orderBy('name','asc') + ->pluck('name', 'id'); + + } + + $iclass = $class_id; + + } + + return view('backend.student.list', compact('students', 'classes', 'iclass', 'sections', + 'section_id', 'academic_years', 'acYear', 'status' + )); + + } + + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $student = null; + $gender = 0; + $religion = 0; + $bloodGroup = 0; + $nationality = 'Bangladeshi'; + $group = 'None'; + $shift = 'Day'; + $regiInfo = null; + $sections = []; + $iclass = null; + $section = null; + $acYear = null; + $esubject = null; + $csubjects = []; + $ssubjects = []; + $electiveSubjects = []; + $selectiveSubjects = []; + $coreSubjects = []; + $academic_years = []; + $classInfo = null; + + // check for institute type and set gender default value + $settings = AppHelper::getAppSettings(); + if(isset($settings['institute_type'])){ + $gender = intval($settings['institute_type']); + if ($gender == 3) { + $gender = 0; + } + } + + if(AppHelper::getInstituteCategory() == 'college') { + $academic_years = AcademicYear::where('status', '1')->orderBy('id', 'desc')->pluck('title', 'id'); + } + + $houseList = AppHelper::getHouseList(); + + + return view('backend.student.add', compact( + 'regiInfo', + 'student', + 'gender', + 'religion', + 'bloodGroup', + 'nationality', + 'classes', + 'sections', + 'group', + 'shift', + 'iclass', + 'section', + 'academic_years', + 'acYear', + 'electiveSubjects', + 'coreSubjects', + 'selectiveSubjects', + 'esubject', + 'csubjects', + 'ssubjects', + 'houseList', + 'classInfo' + )); + } + + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + //todo: wrong class section entry student bug fixed. + //validate form + $messages = [ + 'photo.max' => 'The :attribute size must be under 200kb.', + 'photo.dimensions' => 'The :attribute dimensions min 150 X 150.', + ]; + $rules = [ + 'name' => 'required|min:5|max:255', + 'nick_name' => 'nullable|min:2|max:50', + 'photo' => 'mimes:jpeg,jpg,png|max:200|dimensions:min_width=150,min_height=150', + 'dob' => 'min:10|max:10', + 'gender' => 'required|integer', + 'religion' => 'nullable|integer', + 'blood_group' => 'nullable|integer', + 'nationality' => 'required|max:50', + 'phone_no' => 'nullable|max:15', + 'extra_activity' => 'nullable|max:15', + 'note' => 'nullable|max:500', + 'father_name' => 'nullable|max:255', + 'father_phone_no' => 'nullable|max:15', + 'mother_name' => 'nullable|max:255', + 'mother_phone_no' => 'nullable|max:15', + 'guardian' => 'nullable|max:255', + 'guardian_phone_no' => 'nullable|max:15', + 'present_address' => 'nullable|max:500', + 'permanent_address' => 'required|max:500', + 'card_no' => 'nullable|min:4|max:50', + 'username' => 'nullable|min:5|max:255|unique:users,username', + 'password' => 'nullable|min:6|max:50', + 'email' => 'nullable|email|max:255|unique:students,email', + 'class_id' => 'required|integer', + 'section_id' => 'required|integer', + 'shift' => 'nullable|max:15', + 'roll_no' => 'nullable|integer', + 'board_regi_no' => 'nullable|max:50', + 'core_subjects' => 'required|array', + 'selective_subjects' => 'nullable|array', + 'fourth_subject' => 'nullable|integer', + 'house' => 'nullable|max:100', + 'siblings' => 'nullable|max:255', + 'sms_receive_no' => 'required|integer', + + ]; + //if it college then need another 2 feilds + if(AppHelper::getInstituteCategory() == 'college') { + $rules['academic_year'] = 'required|integer'; + } + + + $createUser = false; + + if(strlen($request->get('username',''))){ + $rules['email' ] = 'email|max:255|unique:students,email|unique:users,email'; + $createUser = true; + + } + + $this->validate($request, $rules); + + /** + * Wrong class and section bug fix code + */ + $classId = $request->get("class_id",0); + $sectionId = $request->get("section_id",0); + $section = Section::where('id', $sectionId)->where('status', AppHelper::ACTIVE) + ->where('class_id', $classId)->select('id','capacity','class_id')->first(); + if(!$section){ + return redirect()->route('student.create') + ->with("error", 'Wrong class and section selection!') + ->withInput(); + } + //end + + //for max subject validation + $classInfo = IClass::where('id', $classId) + ->first(); + if($classInfo->have_selective_subject + && count($request->get('selective_subjects',[])) > $classInfo->max_selective_subject + ) { + return redirect()->route('student.create') + ->with("error", "Maximum {$classInfo->max_selective_subject} selective subject allowed!") + ->withInput($request->except(['password','class_id','section_id'])); + } + + + if(AppHelper::getInstituteCategory() != 'college') { + // now check is academic year set or not + $settings = AppHelper::getAppSettings(); + if (!isset($settings['academic_year']) || (int)($settings['academic_year']) < 1) { + return redirect()->route('student.create') + ->with("error", 'Academic year not set yet! Please go to settings and set it.') + ->withInput(); + } + + $acYearId = $settings['academic_year']; + } + else { + $acYearId = $request->get('academic_year'); + } + + //Other validations + $studentInDesireSection = Registration::where('academic_year_id', $acYearId) + ->where('class_id', $section->class_id) + ->where('section_id', $section->id) + ->count(); + $studentInDesireSection += 1; + + if($studentInDesireSection > $section->capacity){ + return redirect()->route('student.create') + ->with("error", 'This section is full! Register student in another section.') + ->withInput(); + } + + $duplicateRollNo = Registration::where('status', AppHelper::ACTIVE) + ->where('class_id', $classId) + ->where('academic_year_id', $acYearId) + ->where('roll_no', $request->get('roll_no', 0)) + ->count(); + + if($duplicateRollNo){ + return redirect()->route('student.create') + ->with("error", 'Roll no already exists!') + ->withInput($request->except(['roll_no','password'])); + } + + + $data = $request->all(); + //card_no manual validation + if(strlen($data['card_no'])) { + $cardNoExists = Registration::where('academic_year_id', $acYearId) + ->where('card_no', $data['card_no'])->count(); + + if($cardNoExists){ + return redirect()->route('student.create') + ->with("error", 'This card number has been used for another student on this academic year!') + ->withInput(); + } + } + + + //fetch core subject from db + $subjects = Subject::select('id') + ->where('class_id', $data['class_id']) + ->where('type', 1) // 1 =core 2= elective , 3 = selective + ->where('status', AppHelper::ACTIVE) + ->orderBy('order', 'asc') + ->get() + ->mapWithKeys(function ($sub) { + return [$sub->id => ['subject_type' => "1"]]; + })->toArray(); + + if (isset($data['selective_subjects'])) { + foreach ($data['selective_subjects'] as $sub) { + $subjects[$sub] = ['subject_type' => "3"]; + } + } + + if (isset($data['fourth_subject'])) { + $subjects[$data['fourth_subject']] = ['subject_type' => "2"]; + } + + //card_no manual validation + if(strlen($data['card_no'])) { + $cardNoExists = Registration::where('academic_year_id', $acYearId) + ->where('card_no', $data['card_no'])->count(); + + if($cardNoExists){ + return redirect()->route('student.create') + ->with("error", 'This card number has been used for another student on this academic year!') + ->withInput(); + } + } + + if($data['nationality'] == 'Other'){ + $data['nationality'] = $data['nationality_other']; + } + + $imgStorePath = "public/student/"; + if($request->hasFile('photo')) { + $storagepath = $request->file('photo')->store($imgStorePath); + $fileName = basename($storagepath); + $data['photo'] = $fileName; + } + else{ + $data['photo'] = $request->get('oldPhoto',''); + } + + + DB::beginTransaction(); + try { + //now create user + if ($createUser) { + $user = User::create( + [ + 'name' => $data['name'], + 'username' => $request->get('username'), + 'email' => $data['email'], + 'phone_no' => $data['phone_no'], + 'password' => bcrypt($request->get('password')), + 'remember_token' => null, + ] + ); + //now assign the user to role + UserRole::create( + [ + 'user_id' => $user->id, + 'role_id' => AppHelper::USER_STUDENT + ] + ); + $data['user_id'] = $user->id; + } + // now save employee + $student = Student::create($data); + + $classInfo = IClass::find($data['class_id']); + $academicYearInfo = AcademicYear::find($acYearId); + $regiNo = $academicYearInfo->start_date->format('y') . (string)$classInfo->numeric_value; + + $totalStudent = Registration::where('academic_year_id', $academicYearInfo->id) + ->where('class_id', $classInfo->id)->withTrashed()->count(); + $regiNo .= str_pad(++$totalStudent,3,'0',STR_PAD_LEFT); + + + $registrationData = [ + 'regi_no' => $regiNo, + 'student_id' => $student->id, + 'class_id' => $data['class_id'], + 'section_id' => $data['section_id'], + 'academic_year_id' => $academicYearInfo->id, + 'roll_no' => $data['roll_no'], + 'shift' => $data['shift'], + 'card_no' => $data['card_no'], + 'board_regi_no' => $data['board_regi_no'], + 'house' => $data['house'] ?? '' + ]; + + $registration = Registration::create($registrationData); + $registration->subjects()->sync($subjects); + + // now commit the database + DB::commit(); + $request->session()->flash('message', "Student registration number is ".$regiNo); + + //now notify the admins about this record + $msg = $data['name']." student added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //invalid dashboard cache + Cache::forget('studentCount'); + Cache::forget('student_count_by_class'); + Cache::forget('student_count_by_section'); + + return redirect()->route('student.create')->with('success', 'Student added!'); + + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + return redirect()->route('student.create')->with("error",$message); + } + + } + + + /** + * Display the specified resource. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function show(Request $request, $id) + { + //get student + $student = Registration::where('id', $id) + ->with('student') + ->with('class') + ->with('section') + ->with('acYear') + ->first(); + + if(!$student){ + abort(404); + } + + $username = ''; + if($student->student->user_id){ + $user = User::find($student->student->user_id); + $username = $user->username; + } + + //find siblings + if(strlen($student->student->siblings)){ + $siblingsRegiNumbers = array_map('trim', explode(',', $student->student->siblings)); + if(count($siblingsRegiNumbers)) { + $siblingStudents = Registration::whereIn('regi_no', $siblingsRegiNumbers) + ->with(['info' => function($q){ + $q->select('id','name'); + }]) + ->select('id','student_id') + ->get() + ->reduce(function ($siblingStudents, $record){ + $siblingStudents[] = $record->info->name; + return $siblingStudents; + }); + + $student->student->siblings = $siblingStudents ? implode(',', $siblingStudents) : ''; + } + } + + return view('backend.student.view', compact('student', 'username')); + + + } + + + /** + * Show the form for editing the specified resource. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $regiInfo = Registration::find($id); + if(!$regiInfo){ + abort(404); + } + $student = Student::find($regiInfo->student_id); + if(!$student){ + abort(404); + } + $classes = IClass::where('status', AppHelper::ACTIVE) + ->orderBy('order','asc') + ->pluck('name', 'id'); + $sections = Section::where('class_id', $regiInfo->class_id)->where('status', AppHelper::ACTIVE) + ->pluck('name', 'id'); + + $isCollege = (AppHelper::getInstituteCategory() == 'college'); + + + + $coreSubjects = Subject::select('id', 'name') + ->where('class_id',$regiInfo->class_id) + ->sType(1) + ->where('status', AppHelper::ACTIVE) + ->orderBy('name', 'asc') + ->pluck('name', 'id'); + + //if college then show both subject in feild + if($isCollege){ + $selectiveSubjects = Subject::select('id', 'name') + ->where('class_id',$regiInfo->class_id) + ->sType([2,3]) + ->where('status', AppHelper::ACTIVE) + ->orderBy('name', 'asc') + ->pluck('name', 'id'); + $electiveSubjects = $selectiveSubjects; + } + else{ + $selectiveSubjects = Subject::select('id', 'name') + ->where('class_id',$regiInfo->class_id) + ->sType(3) + ->where('status', AppHelper::ACTIVE) + ->orderBy('name', 'asc') + ->pluck('name', 'id'); + $electiveSubjects = Subject::select('id', 'name') + ->where('class_id',$regiInfo->class_id) + ->sType(2) + ->where('status', AppHelper::ACTIVE) + ->orderBy('name', 'asc') + ->pluck('name', 'id'); + } + + $gender = $student->getOriginal('gender'); + $religion = $student->getOriginal('religion'); + $bloodGroup = $student->getOriginal('blood_group'); + $nationality = ($student->nationality != "Bangladeshi") ? "Other" : ""; + $shift = $regiInfo->shift; + $section = $regiInfo->section_id; + $iclass = $regiInfo->class_id; + $classInfo = IClass::where('id', $iclass) + ->select( 'have_selective_subject', 'max_selective_subject', 'have_elective_subject') + ->first(); + + //student subjects + $csubjects = []; + $ssubjects = []; + $esubject = null; + + foreach ($regiInfo->subjects as $subject){ + if($subject->pivot->subject_type == 1){ + $csubjects[] = $subject->id; + } + else if($subject->pivot->subject_type == 2){ + $esubject = $subject->id; + } + else if($subject->pivot->subject_type == 3){ + $ssubjects[] = $subject->id; + } + } + + if(!count($csubjects)){ + $csubjects = array_keys($coreSubjects->toArray()); + } + + $users = []; + if(!$student->user_id){ + $users = User::doesnthave('employee') + ->doesnthave('student') + ->whereHas('role' , function ($query) { + $query->where('role_id', AppHelper::USER_STUDENT); + }) + ->pluck('name', 'id'); + } + + $houseList = AppHelper::getHouseList(); + + return view('backend.student.add', compact( + 'regiInfo', + 'student', + 'gender', + 'religion', + 'bloodGroup', + 'nationality', + 'classes', + 'sections', + 'shift', + 'iclass', + 'section', + 'electiveSubjects', + 'coreSubjects', + 'selectiveSubjects', + 'esubject', + 'csubjects', + 'ssubjects', + 'users', + 'houseList', + 'classInfo' + )); + + } + + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $regiInfo = Registration::find($id); + if(!$regiInfo){ + abort(404); + } + $student = Student::find($regiInfo->student_id); + if(!$student){ + abort(404); + } + + //validate form + $messages = [ + 'photo.max' => 'The :attribute size must be under 200kb.', + 'photo.dimensions' => 'The :attribute dimensions min 150 X 150.', + ]; + $rules = [ + 'name' => 'required|min:5|max:255', + 'nick_name' => 'nullable|min:2|max:50', + 'photo' => 'mimes:jpeg,jpg,png|max:200|dimensions:min_width=150,min_height=150', + 'dob' => 'min:10|max:10', + 'gender' => 'required|integer', + 'religion' => 'nullable|integer', + 'blood_group' => 'nullable|integer', + 'nationality' => 'required|max:50', + 'phone_no' => 'nullable|max:15', + 'extra_activity' => 'nullable|max:15', + 'note' => 'nullable|max:500', + 'father_name' => 'nullable|max:255', + 'father_phone_no' => 'nullable|max:15', + 'mother_name' => 'nullable|max:255', + 'mother_phone_no' => 'nullable|max:15', + 'guardian' => 'nullable|max:255', + 'guardian_phone_no' => 'nullable|max:15', + 'present_address' => 'nullable|max:500', + 'permanent_address' => 'required|max:500', + 'card_no' => 'nullable|min:4|max:50', + 'email' => 'nullable|email|max:255|unique:students,email,'.$student->id.'|email|unique:users,email,'.$student->user_id, +// 'class_id' => 'required|integer', + 'section_id' => 'required|integer', + 'shift' => 'nullable|max:15', + 'roll_no' => 'nullable|integer', + 'board_regi_no' => 'nullable|max:50', + 'core_subjects' => 'required|array', + 'selective_subjects' => 'nullable|array', + 'fourth_subject' => 'nullable|integer', + 'user_id' => 'nullable|integer', + 'house' => 'nullable|max:100', + 'siblings' => 'nullable|max:255', + 'sms_receive_no' => 'required|integer', + + ]; + + + $this->validate($request, $rules); + + //subject update validation check + $allowSubjectUpdate = true; + $haveMarks = Mark::where('registration_id', $id) + ->count(); + if($haveMarks){ + $allowSubjectUpdate = false; + } + + $data = $request->all(); + //card_no manual validation + if(strlen($data['card_no'])) { + $cardNoExists = Registration::where('academic_year_id', $regiInfo->academic_year_id) + ->where('card_no', $data['card_no']) + ->where('id', '!=', $regiInfo->id) + ->count(); + + if($cardNoExists){ + return redirect()->back() + ->with("error", 'This card number has been used for another student on this academic year!'); + } + } + + $duplicateRollNo = Registration::where('status', AppHelper::ACTIVE) + ->where('class_id', $regiInfo->class_id) + ->where('academic_year_id', $regiInfo->academic_year_id) + ->where('id', '!=', $regiInfo->id) + ->where('roll_no', $request->get('roll_no', 0)) + ->count(); + + if($duplicateRollNo){ + return redirect()->back() + ->with("error", 'Roll no already exists!'); + } + + //for max subject validation + $classInfo = IClass::where('id', $regiInfo->class_id) + ->first(); + if($classInfo->have_selective_subject + && count($request->get('selective_subjects',[])) > $classInfo->max_selective_subject + ) { + return redirect()->back() + ->with("error", "Maximum {$classInfo->max_selective_subject} subject allowed"); + } + //validation end + + //fetch core subject from db + $subjects = []; + $oldSubjects = []; + if($allowSubjectUpdate) { + $subjects = Subject::select('id', 'type as sub_type') + ->where('class_id', $regiInfo->class_id) + ->where('type', 1)// 1 =core 2= elective , 3 = selective + ->where('status', AppHelper::ACTIVE) + ->orderBy('order', 'asc') + ->get() + ->mapWithKeys(function ($sub) { + return [$sub->id => ['subject_type' => "1"]]; + })->toArray(); + + if (isset($data['selective_subjects'])) { + foreach ($data['selective_subjects'] as $sub) { + $subjects[$sub] = ['subject_type' => "3"]; + } + } + + if (isset($data['fourth_subject'])) { + $subjects[$data['fourth_subject']] = ['subject_type' => "2"]; + } + + //fetch old subjects for this student + $oldSubjects = $regiInfo->subjects->map(function ($subject){ + return [ + "id" => $subject->id, + "name" => $subject->name, + "s_type" => $subject->getOriginal('type'), + "type" => $subject->pivot->subject_type, + ]; + }); + } + + if($data['nationality'] == 'Other'){ + $data['nationality'] = $data['nationality_other']; + } + + $imgStorePath = "public/student/"; + if($request->hasFile('photo')) { + $storagepath = $request->file('photo')->store($imgStorePath); + $fileName = basename($storagepath); + $data['photo'] = $fileName; + + //if file change then delete old one + $oldFile = $request->get('oldPhoto',''); + if( $oldFile != ''){ + $file_path = $imgStorePath.'/'.$oldFile; + Storage::delete($file_path); + } + } + else{ + $data['photo'] = $request->get('oldPhoto',''); + } + + + + $registrationData = [ +// 'class_id' => $data['class_id'], + 'section_id' => $data['section_id'], + 'roll_no' => $data['roll_no'], + 'shift' => $data['shift'], + 'card_no' => $data['card_no'], + 'board_regi_no' => $data['board_regi_no'], + 'house' => $data['house'] ?? '' + ]; + + // now check if student academic information changed, if so then log it + $isChanged = false; + $logData = []; + $timeNow = Carbon::now(); + if($regiInfo->section_id != $data['section_id']){ + $isChanged = true; + $logData[] = [ + 'student_id' => $regiInfo->student_id, + 'academic_year_id' => $regiInfo->academic_year_id, + 'meta_key' => 'section', + 'meta_value' => $regiInfo->section_id, + 'created_at' => $timeNow, + + ]; + } + if($regiInfo->roll_no != $data['roll_no']){ + $isChanged = true; + $logData[] = [ + 'student_id' => $regiInfo->student_id, + 'academic_year_id' => $regiInfo->academic_year_id, + 'meta_key' => 'roll no', + 'meta_value' => $regiInfo->roll_no, + 'created_at' => $timeNow, + + ]; + } + + + if($regiInfo->shift != $data['shift']){ + $isChanged = true; + $logData[] = [ + 'student_id' => $regiInfo->student_id, + 'academic_year_id' => $regiInfo->academic_year_id, + 'meta_key' => 'shift', + 'meta_value' => $regiInfo->shift, + 'created_at' => $timeNow, + + ]; + } + + if($regiInfo->card_no != $data['card_no']){ + $isChanged = true; + $logData[] = [ + 'student_id' => $regiInfo->student_id, + 'academic_year_id' => $regiInfo->academic_year_id, + 'meta_key' => 'card no', + 'meta_value' => $regiInfo->card_no, + 'created_at' => $timeNow, + + ]; + } + if($regiInfo->board_regi_no != $data['board_regi_no']){ + $isChanged = true; + $logData[] = [ + 'student_id' => $regiInfo->student_id, + 'academic_year_id' => $regiInfo->academic_year_id, + 'meta_key' => 'board regi no', + 'meta_value' => $regiInfo->board_regi_no, + 'created_at' => $timeNow, + + ]; + } + + + $message = 'Something went wrong!'; + DB::beginTransaction(); + try { + + $messageType = "success"; + $message = "Student updated!"; + + // save registration data + $regiInfo->fill($registrationData); + $regiInfo->save(); + + // + if(!$student->user_id && $request->get('user_id', 0)){ + $data['user_id'] = $request->get('user_id'); + } + + + // now save student + $student->fill($data); + if(($student->isDirty('email') || $student->isDirty('phone_no')) + && ($student->user_id || isset($data['user_id']))){ + $userId = $data['user_id'] ?? $student->user_id; + $user = User::where('id', $userId)->first(); + $user->email = $data['email']; + $user->phone_no = $data['phone_no']; + $user->save(); + } + $student->save(); + + if($allowSubjectUpdate) { + $regiInfo->subjects()->sync($subjects); + DB::table('st_subjects_log')->insert([ + 'registration_id' => $regiInfo->id, + 'log' => json_encode($oldSubjects), + 'updated_by' => auth()->user()->id, + 'updated_at' => Carbon::now()->format('Y-m-d H:i:s') + ]); + } + else{ + $messageType = "warning"; + $message = "Student updated. But subjects was not updated, because have exam marks."; + } + + //if have changes then insert log + if($isChanged){ + DB::table('student_info_log')->insert($logData); + } + + + + // now commit the database + DB::commit(); + + + return redirect()->route('student.index', ['class' => $regiInfo->class_id, 'section'=> $regiInfo->section_id, 'academic_year' => $regiInfo->academic_year_id])->with($messageType, $message); + + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); +// dd($message); + } + + return redirect()->route('student.edit', $regiInfo->id)->with("error",$message);; + + + + } + + + /** + * Remove the specified resource from storage. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $registration = Registration::find($id); + if(!$registration){ + abort(404); + } + $haveStudent = Registration::where('student_id',$registration->student_id)->count(); + + $message = 'Something went wrong!'; + DB::beginTransaction(); + try { + + $registration->delete(); + + $student = Student::find($registration->student_id); + + if(!$haveStudent) { + $student->delete(); + if ($student->user_id) { + $user = User::find($student->user_id); + $user->delete(); + } + } + DB::commit(); + + + //now notify the admins about this record + $msg = $student->name." student deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + //invalid dashboard cache + Cache::forget('studentCount'); + Cache::forget('student_count_by_class'); + Cache::forget('student_count_by_section'); + + return redirect()->route('student.index')->with('success', 'Student deleted.'); + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + } + return redirect()->route('student.index')->with('error', $message); + + } + + /** + * status change + * @return mixed + */ + public function changeStatus(Request $request, $id=0) + { + + $registration = Registration::find($id); + if(!$registration){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + $student = Student::find($registration->student_id); + if(!$student){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + $student->status = (string)$request->get('status'); + $registration->status = (string)$request->get('status'); + if($student->user_id){ + $user = User::find($student->user_id); + $user->status = (string)$request->get('status'); + } + + $message = 'Something went wrong!'; + DB::beginTransaction(); + try { + + $registration->save(); + $student->save(); + if($student->user_id) { + $user->save(); + } + DB::commit(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + } + + return [ + 'success' => false, + 'message' => $message + ]; + + + } + + /** + * Get student list by filters + */ + public function studentListByFitler(Request $request) { + $classId = $request->query->get('class',0); + $sectionId = $request->query->get('section',0); + $acYear = $request->query->get('academic_year',0); + $rollNo = $request->query->get('roll_no',''); + $regiNo = $request->query->get('regi_no',''); + + if(AppHelper::getInstituteCategory() != 'college') { + $acYear = AppHelper::getAcademicYear(); + } + + $students = Registration::if($acYear, 'academic_year_id', '=' , $acYear) + ->if($classId, 'class_id', '=' ,$classId) + ->if($sectionId, 'section_id', '=', $sectionId) + ->if(strlen($regiNo), 'regi_no', '=', $regiNo) + ->if(strlen($rollNo), 'roll_no', '=', $rollNo) + ->where('status', AppHelper::ACTIVE) + ->where('is_promoted', '0') + ->with(['student' => function ($query) { + $query->select('name','id'); + }]) + ->select('id','roll_no','regi_no','student_id') + ->orderBy('roll_no','asc') + ->get(); + + return response()->json($students); + + } +} diff --git a/app/Http/Controllers/Backend/TeacherController.php b/app/Http/Controllers/Backend/TeacherController.php new file mode 100755 index 00000000..8657c5b0 --- /dev/null +++ b/app/Http/Controllers/Backend/TeacherController.php @@ -0,0 +1,446 @@ +orderBy('order', 'asc')->get(); + + return view('backend.teacher.list', compact('teachers')); + + } + + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $teacher = null; + $gender = 1; + $religion = 1; + $designation = 0; + + return view('backend.teacher.add', compact('teacher', 'gender', 'religion', 'designation')); + } + + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + //validate form + $messages = [ + 'photo.max' => 'The :attribute size must be under 200kb.', + 'signature.max' => 'The :attribute size must be under 100kb.', + 'photo.dimensions' => 'The :attribute dimensions min 150 X 150.', + 'signature.dimensions' => 'The :attribute dimensions max 170 X 60.', + ]; + $this->validate( + $request, [ + 'name' => 'required|min:5|max:255', + 'photo' => 'mimes:jpeg,jpg,png|max:200|dimensions:min_width=150,min_height=150', + 'signature' => 'mimes:jpeg,jpg,png|max:100|dimensions:max_width=170,max_height=60', + 'designation' => 'required|integer', + 'qualification' => 'max:255', + 'dob' => 'min:10|max:10', + 'gender' => 'required|integer', + 'religion' => 'required|integer', + 'email' => 'email|max:255|unique:employees,email|unique:users,email', + 'phone_no' => 'required|min:8|max:255', + 'address' => 'max:500', + 'id_card' => 'required|min:4|max:50|unique:employees,id_card', + 'joining_date' => 'required|min:10|max:10', + 'leave_date' => 'nullable|min:10|max:10', + 'username' => 'required|min:5|max:255|unique:users,username', + 'password' => 'required|min:6|max:50', + 'order' => 'required|integer', + + ] + ); + + if($request->hasFile('photo')) { + $storagepath = $request->file('photo')->store('public/employee'); + $fileName = basename($storagepath); + $data['photo'] = $fileName; + } + else{ + $data['photo'] = $request->get('oldPhoto',''); + } + + if($request->hasFile('signature')) { + $storagepath = $request->file('signature')->store('public/employee/signature'); + $fileName = basename($storagepath); + $data['signature'] = $fileName; + } + else{ + $data['signature'] = $request->get('oldSignature',''); + } + + $data['name'] = $request->get('name'); + $data['designation'] = $request->get('designation'); + $data['qualification'] = $request->get('qualification'); + $data['dob'] = $request->get('dob'); + $data['gender'] = $request->get('gender'); + $data['religion'] = $request->get('religion'); + $data['email'] = $request->get('email'); + $data['phone_no'] = $request->get('phone_no'); + $data['address'] = $request->get('address'); + $data['joining_date'] = $request->get('joining_date'); + $data['id_card'] = $request->get('id_card'); + $data['order'] = $request->get('order'); + $data['role_id'] = AppHelper::EMP_TEACHER; + + DB::beginTransaction(); + try { + //now create user + $user = User::create( + [ + 'name' => $data['name'], + 'username' => $request->get('username'), + 'email' => $data['email'], + 'phone_no' => $data['phone_no'], + 'password' => bcrypt($request->get('password')), + 'remember_token' => null, + ] + ); + //now assign the user to role + UserRole::create( + [ + 'user_id' => $user->id, + 'role_id' => AppHelper::USER_TEACHER + ] + ); + $data['user_id'] = $user->id; + // now save employee + Employee::create($data); + + DB::commit(); + + //now notify the admins about this record + $msg = $data['name']." teacher added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //invalid dashboard cache + Cache::forget('teacherCount'); + Cache::forget('employeeCount'); + + return redirect()->route('teacher.create')->with('success', 'Teacher added!'); + + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); +// return $message; + return redirect()->route('teacher.create')->with("error",$message); + } + + return redirect()->route('teacher.create'); + + + } + + + /** + * Display the specified resource. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function show(Request $request, $id) + { + $teacher = Employee::with('user')->where('role_id', AppHelper::EMP_TEACHER)->where('id', $id)->first(); + if(!$teacher){ + abort(404); + } + + $sections = Section::with(['class' => function($query){ + $query->select('name','id'); + }]) + ->where('teacher_id', $teacher->id) + ->select('name','class_id') + ->orderBy('name','asc') + ->get(); + + $subjects = Subject::with(['class' => function($query){ + $query->select('name','id'); + }]) + ->join('teacher_subjects','teacher_subjects.subject_id','subjects.id') + ->where('teacher_subjects.teacher_id', $teacher->id) + ->select('subjects.name','subjects.class_id','subjects.code') + ->orderBy('subjects.class_id','asc') + ->get(); + + + return view('backend.teacher.view', compact('teacher','sections', 'subjects')); + + + } + + + /** + * Show the form for editing the specified resource. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $teacher = Employee::where('role_id', AppHelper::EMP_TEACHER)->where('id', $id)->first(); + + if(!$teacher){ + abort(404); + } + $gender = $teacher->getOriginal('gender'); + $religion = $teacher->getOriginal('religion'); + $designation = $teacher->getOriginal('designation'); + + $users = []; + if(!$teacher->user_id){ + $users = User::doesnthave('employee') + ->doesnthave('student') + ->whereHas('role' , function ($query) { + $query->where('role_id', AppHelper::USER_TEACHER); + }) + ->pluck('name', 'id'); + } + + return view('backend.teacher.add', compact('teacher', 'gender', 'religion', 'users','designation')); + + } + + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $teacher = Employee::where('role_id', AppHelper::EMP_TEACHER)->where('id', $id)->first(); + + if(!$teacher){ + abort(404); + } + //validate form + $messages = [ + 'photo.max' => 'The :attribute size must be under 200kb.', + 'signature.max' => 'The :attribute size must be under 100kb.', + 'photo.dimensions' => 'The :attribute dimensions min 150 X 150.', + 'signature.dimensions' => 'The :attribute dimensions max 170 X 60.', + ]; + $this->validate( + $request, [ + 'name' => 'required|min:5|max:255', + 'photo' => 'mimes:jpeg,jpg,png|max:200|dimensions:min_width=150,min_height=150', + 'signature' => 'mimes:jpeg,jpg,png|max:200|dimensions:max_width=170,max_height=60', + 'designation' => 'required|integer', + 'qualification' => 'max:255', + 'dob' => 'min:10|max:10', + 'gender' => 'required|integer', + 'religion' => 'required|integer', + 'email' => 'email|max:255|unique:employees,email,'.$teacher->id.'|unique:users,email,'.$teacher->user_id, + 'phone_no' => 'required|min:8|max:255', + 'address' => 'max:500', + 'id_card' => 'required|min:4|max:50|unique:employees,id_card,'.$teacher->id, + 'joining_date' => 'required|min:10|max:10', + 'leave_date' => 'nullable|min:10|max:10', + 'user_id' => 'nullable|integer', + 'order' => 'required|integer', + + ] + ); + + if($request->hasFile('photo')) { + $storagepath = $request->file('photo')->store('public/employee'); + $fileName = basename($storagepath); + $data['photo'] = $fileName; + + //if file change then delete old one + $oldFile = $request->get('oldPhoto',''); + if( $oldFile != ''){ + $file_path = "public/employee/".$oldFile; + Storage::delete($file_path); + } + } + else{ + $data['photo'] = $request->get('oldPhoto',''); + } + + if($request->hasFile('signature')) { + $storagepath = $request->file('signature')->store('public/employee/signature'); + $fileName = basename($storagepath); + $data['signature'] = $fileName; + + //if file change then delete old one + $oldFile = $request->get('oldSignature',''); + if( $oldFile != ''){ + $file_path = "public/employee/signature/".$oldFile; + Storage::delete($file_path); + } + } + else{ + $data['signature'] = $request->get('oldSignature',''); + } + + + $data['name'] = $request->get('name'); + $data['designation'] = $request->get('designation'); + $data['qualification'] = $request->get('qualification'); + $data['dob'] = $request->get('dob'); + $data['gender'] = $request->get('gender'); + $data['religion'] = $request->get('religion'); + $data['email'] = $request->get('email'); + $data['phone_no'] = $request->get('phone_no'); + $data['address'] = $request->get('address'); + $data['joining_date'] = $request->get('joining_date'); + $data['leave_date'] = $request->get('leave_date'); + $data['id_card'] = $request->get('id_card'); + $data['order'] = $request->get('order'); + + // + if(!$teacher->user_id && $request->get('user_id', 0)){ + $data['user_id'] = $request->get('user_id'); + } + + $teacher->fill($data); + if($teacher->isDirty('email') || $teacher->isDirty('phone_no')){ + $user = $teacher->user()->first(); + $user->email = $data['email']; + $user->phone_no = $data['phone_no']; + $user->save(); + } + $teacher->save(); + + return redirect()->route('teacher.index')->with('success', 'Teacher updated!'); + + + } + + + /** + * Remove the specified resource from storage. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $teacher = Employee::where('role_id', AppHelper::EMP_TEACHER)->where('id', $id)->first(); + + if(!$teacher){ + abort(404); + } + //protect from delete the teacher if have any class or section connected with this teacher + $haveSection = Section::where('teacher_id', $teacher->id)->count(); + $haveSubject = DB::table('teacher_subjects') + ->where('teacher_subjects.teacher_id', $teacher->id) + ->count(); + + if($haveSection || $haveSubject){ + return redirect()->route('teacher.index')->with('error', 'Can not delete! Teacher used in section or subject.'); + + } + + + $message = "Something went wrong!"; + DB::beginTransaction(); + try { + + User::destroy($teacher->user_id); + DB::table('user_roles')->where('user_id', $teacher->user_id)->update([ + 'deleted_by' => auth()->user()->id, + 'deleted_at' => Carbon::now() + ]); + $teacher->delete(); + + DB::commit(); + + //now notify the admins about this record + $msg = $teacher->name." teacher deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //invalid dashboard cache + Cache::forget('teacherCount'); + Cache::forget('employeeCount'); + + return redirect()->route('teacher.index')->with('success', 'Teacher deleted.'); + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + } + + + + + return redirect()->route('teacher.index')->with('error', $message); + + } + + /** + * status change + * @return mixed + */ + public function changeStatus(Request $request, $id=0) + { + + $employee = Employee::findOrFail($id); + if(!$employee){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + $status = (string)$request->get('status'); + $employee->status = $status; + if($status == '0'){ + $employee->leave_date = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka'))->format('d/m/Y'); + } + else{ + $employee->leave_date = null; + } + + $employee->save(); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + } +} diff --git a/app/Http/Controllers/Backend/TeacherProfileController.php b/app/Http/Controllers/Backend/TeacherProfileController.php new file mode 100755 index 00000000..c3f5b4bf --- /dev/null +++ b/app/Http/Controllers/Backend/TeacherProfileController.php @@ -0,0 +1,112 @@ + 'The :attribute size must be under 2MB.', + 'image.dimensions' => 'The :attribute dimensions must be minimum 210 X 220.', + ]; + $this->validate($request, [ + 'name' => 'required|min:5|max:255', + 'image' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=210,min_height=220', + 'designation' => 'required|min:5|max:255', + 'qualification' => 'required|min:1|max:255', + 'description' => 'max:255', + 'facebook' => 'max:255', + 'google' => 'max:255', + 'twitter' => 'max:255', + ], $messages); + + $fileName = null; + if($request->hasFile('image')) { + $storagepath = $request->file('image')->store('public/teacher_profile'); + $fileName = basename($storagepath); + } + + + $data = $request->all(); + $data['image'] = $fileName; + + TeacherProfile::create($data); + + return redirect()->back()->with('success', 'New teacher profile created.'); + } + + public function edit($id) + { + $profile = TeacherProfile::findOrFail($id); + return view('backend.site.teacher.add', compact('profile')); + } + + public function update(Request $request, $id) + { + //validate form + $messages = [ + 'image.max' => 'The :attribute size must be under 2MB.', + 'image.dimensions' => 'The :attribute dimensions must be minimum 210 X 220.', + ]; + $this->validate($request, [ + 'name' => 'required|min:5|max:255', + 'image' => 'mimes:jpeg,jpg,png|max:2048|dimensions:min_width=210,min_height=220', + 'designation' => 'required|min:5|max:255', + 'qualification' => 'required|min:1|max:255', + 'description' => 'max:255', + 'facebook' => 'max:255', + 'google' => 'max:255', + 'twitter' => 'max:255', + ], $messages); + + + $profile = TeacherProfile::findOrFail($id); + $data = $request->all(); + $fileName = $profile->image; + if($request->hasFile('image')) { + + if($profile->image){ + $file_path = "public/teacher_profile/".$profile->image; + Storage::delete($file_path); + } + + $storagepath = $request->file('image')->store('public/teacher_profile'); + $fileName = basename($storagepath); + + + } + + $data['image'] = $fileName; + + $profile->fill($data); + $profile->save(); + + return redirect()->route('teacher_profile.index')->with('success', 'Teacher profile updated.'); + } + + public function destroy($id) + { + $profile = TeacherProfile::findOrFail($id); + $profile->delete(); + return redirect()->route('teacher_profile.index')->with('success', 'Teacher profile deleted.'); + } +} diff --git a/app/Http/Controllers/Backend/UserController.php b/app/Http/Controllers/Backend/UserController.php new file mode 100755 index 00000000..87de2e1c --- /dev/null +++ b/app/Http/Controllers/Backend/UserController.php @@ -0,0 +1,1082 @@ +hasher = $hasher; + } + + + /** + * Handle an authentication attempt. + * + * @return Response + */ + public function login() + { + return view('backend.user.login'); + } + + /** + * Handle an authentication attempt. + * + * @param \Illuminate\Http\Request $request + * + * @return Response + */ + public function authenticate(Request $request) + { + + //validate form + $this->validate( + $request, [ + 'username' => 'required', + 'password' => 'required', + ] + ); + + $username = $request->get('username'); + $password = $request->get('password'); + $remember=$request->has('remember'); + + if (Auth::attempt(['username' => $username, 'password' => $password, 'status' => AppHelper::ACTIVE], $remember)) { + session(['user_session_sha1' => AppHelper::getUserSessionHash()]); + session(['user_role_id' => auth()->user()->role->role_id]); + + $appSettings = AppHelper::getAppSettings(null, true); + Cache::put('default_academic_year', AppHelper::getAcademicYear()); + + $msgType = "success"; + $msg = "Welcome to admin panel."; + + if(!count($appSettings)){ + $msgType = "warning"; + $msg = "Please update institute information Here"; + } + + return redirect()->intended('dashboard')->with($msgType, $msg); + + } + return redirect()->route('login')->with('error', 'Your email/password combination was incorrect OR account disabled!'); + } + + + /** + * Handle an user logout. + * + * @return Response + */ + public function logout() + { + Auth::logout(); + return redirect()->route('login')->with('success', 'Your are now logged out!'); + } + + /** + * Handle an user lock screen. + * + * @return Response + */ + public function lock() + { + $username = auth()->user()->username; + $name = auth()->user()->name; + Auth::logout(); + return view('backend.user.lock', compact('username','name')); + } + + /** + * Handle an user forgot password. + * + * @return Response + */ + public function forgot(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + //validate form + + $this->validate($request, [ + 'email' => 'required|email', + 'captcha' => 'required|captcha' + ]); + + $user = User::where('email', $request->get('email'))->first(); + if(!$user){ + return redirect()->route('forgot')->with('error', 'Account not found on this system!'); + } + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $response = $this->broker()->sendResetLink( + $request->only('email') + ); + + + if(Password::RESET_LINK_SENT){ + return redirect()->route('forgot')->with('success', 'A mail has been send to your e-mail address. Follow the given instruction to reset your password.'); + + } + + return redirect()->route('forgot')->with('error', 'Password reset link could not send! Try again later or contact support.'); + + + } + + + return view('backend.user.forgot'); + } + + + /** + * Get the broker to be used during password reset. + * + * @return \Illuminate\Contracts\Auth\PasswordBroker + */ + public function broker() + { + return Password::broker(); + } + + /** + * Handle an user reset password. + * + * @return Response + */ + + + public function reset(Request $request, $token) + { + + //for save on POST request + if ($request->isMethod('post')) { + //validate form + + $this->validate($request, [ + 'token' => 'required', + 'email' => 'required|email', + 'password' => 'required|confirmed|min:8|max:50', + ]); + + $token = $request->get('token'); + $email = $request->get('email'); + $password = $request->get('password'); + $reset = PasswordReset::where('email', $email)->first(); + if($reset) { + //token expiration checking, allow 24 hrs only + $today = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + $createdDate = Carbon::parse($reset->created_at); + $hoursGone = $today->diffInHours($createdDate); + if($this->hasher->check($token, $reset->token) && $hoursGone <= 24) { + $user = User::where('email', '=', $email)->first(); + $user->password = bcrypt($password); + $user->save(); + $reset->delete(); + + return redirect()->route('login')->with('success', 'Password successfully reset. Login now :)'); + + } + } + + return redirect()->route('forgot')->with('error', 'User not found with this mail or token invalid or expired!'); + + + } + + return view('backend.user.reset', compact('token')); + } + + /** + * Handle an authentication attempt. + * + * @return Response + */ + public function dashboard(Request $request) + { + $userRoleId = session('user_role_id',0); + $teachers = 0; + $employee = 0; + $students = 0; + $subjects = 0; + $attendanceChartPresentData = []; + $attendanceChartAbsentData = []; + + //only admin + if($userRoleId == AppHelper::USER_ADMIN){ + //these models records count + [$teachers, $employee, $students, $subjects] = $this->getStatisticData(); + } + + //all user except students + if($userRoleId != AppHelper::USER_STUDENT) { + //attendance chart data + [$attendanceChartPresentData, $attendanceChartAbsentData] = $this->getClassWiseTodayAttendanceCount(); + } + + return view('backend.user.dashboard', compact( + 'teachers', + 'employee', + 'students', + 'subjects', + 'userRoleId', + 'attendanceChartPresentData', + 'attendanceChartAbsentData' + )); + } + + /** + * Handle an authentication attempt. + * + * @return Response + */ + public function profile(Request $request) + { + + $isPost = false; + + $user = User::where('id',auth()->user()->id)->with('role')->first(); + + + $userRole = Role::where('id',$user->role->role_id)->first(); + + + if ($request->isMethod('post')) { + $isPost = true; + //validate form + $this->validate($request, [ + 'username' => 'required|min:5', + 'email' => 'required|email', + 'name' => 'required|min:5|max:255', + 'phone_no' => 'nullable|max:15', + ]); + $isExists = false; + $oldUsername = $user->username; + $oldEmail = $user->email; + $newUserName = $request->get('username'); + $newEmail = $request->get('email'); + if($oldUsername != $newUserName){ + $existUsers = User::where('username',$newUserName)->count(); + if($existUsers){ + session()->flash('error', 'Username already exists for another account!'); + $isExists = true; + } + + } + + if($oldEmail != $newEmail){ + $existUsers = User::where('email',$newEmail)->count(); + if($existUsers){ + session()->flash('error', 'Email already exists for another account!'); + $isExists = true; + } + + } + + if(!$isExists){ + $user->name = $request->get('name'); + $user->phone_no = $request->get('phone_no',''); + $user->email = $newEmail; + $user->username = $newUserName; + $user->save(); + + return redirect()->route('profile')->with('success', 'Profile updated.'); + + } + + } + + return view('backend.user.profile', compact('user','isPost', 'userRole')); + }/** + + + * Handle an authentication attempt. + * + * @return Response + */ + public function changePassword(Request $request) + { + + if ($request->isMethod('post')) { + Validator::extend('old_password', function ($attribute, $value, $parameters, $validator) { + return Hash::check($value, current($parameters)); + }); + $messages = [ + 'old_password.old_password' => 'Old passord doesn\'t match!', + + ]; + + $user = auth()->user(); + //validate form + $this->validate($request, [ + 'old_password' => 'required|min:6|max:50|old_password:'.$user->password, + 'password' => 'required|confirmed|min:6|max:50', + ], $messages); + + $user->password = bcrypt($request->get('password')); + $user->save(); + Auth::logout(); + return redirect()->route('login')->with('success', 'Password successfully change. Login now :)'); + + + } + return view('backend.user.change_password'); + } + + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + + $users = User::rightJoin('user_roles', 'users.id', '=', 'user_roles.user_id') + ->leftJoin('roles', 'user_roles.role_id', '=', 'roles.id') + ->where('user_roles.role_id', '<>', AppHelper::USER_ADMIN) + ->select('users.*','roles.name as role') + ->get(); + + return view('backend.user.list', compact('users')); + + } + + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $roles = Role::where('id', '<>', AppHelper::USER_ADMIN)->pluck('name', 'id'); + $user = null; + $role = null; + return view('backend.user.add', compact('roles','user', 'role')); + } + + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + + $this->validate( + $request, [ + 'name' => 'required|min:5|max:255', + 'email' => 'email|max:255|unique:users,email', + 'username' => 'required|min:5|max:255|unique:users,username', + 'password' => 'required|min:6|max:50', + 'phone_no' => 'nullable|max:15', + 'role_id' => 'required|numeric', + + ] + ); + + $data = $request->all(); + + if($data['role_id'] == AppHelper::USER_ADMIN){ + return redirect()->route('user.create')->with("error",'Do not mess with the system!!!'); + + } + + DB::beginTransaction(); + try { + //now create user + $user = User::create( + [ + 'name' => $data['name'], + 'username' => $request->get('username'), + 'email' => $data['email'], + 'phone_no' => $data['phone_no'], + 'password' => bcrypt($request->get('password')), + 'remember_token' => null, + ] + ); + //now assign the user to role + UserRole::create( + [ + 'user_id' => $user->id, + 'role_id' => $data['role_id'] + ] + ); + + DB::commit(); + + + //now notify the admins about this record + $msg = $data['name']." user added by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + return redirect()->route('user.create')->with('success', 'User added!'); + + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + return redirect()->route('user.create')->with("error",$message); + } + + } + + + /** + * Display the specified resource. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ +// public function show($id) +// { +// $user = User::rightJoin('user_roles', 'users.id', '=', 'user_roles.user_id') +// ->where('user_roles.role_id', '<>', AppHelper::USER_ADMIN) +// ->where('users.id', $id) +// ->first(); +// if(!$user){ +// abort(404); +// } +// +// return view('backend.user.view', compact('teacher')); +// +// +// } + + + /** + * Show the form for editing the specified resource. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + + $user = User::rightJoin('user_roles', 'users.id', '=', 'user_roles.user_id') + ->where('user_roles.role_id', '<>', AppHelper::USER_ADMIN) + ->where('users.id', $id) + ->select('users.*','user_roles.role_id') + ->first(); + + if(!$user){ + abort(404); + } + + + $roles = Role::where('id', '<>', AppHelper::USER_ADMIN)->pluck('name', 'id'); + $role = $user->role_id; + + return view('backend.user.add', compact('user','roles','role')); + + } + + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $user = User::rightJoin('user_roles', 'users.id', '=', 'user_roles.user_id') + ->where('user_roles.role_id', '<>', AppHelper::USER_ADMIN) + ->where('users.id', $id) + ->select('users.*','user_roles.role_id') + ->first(); + + if(!$user){ + abort(404); + } + //validate form + $this->validate($request, [ + 'name' => 'required|min:5|max:255', + 'email' => 'email|max:255|unique:users,email,'.$user->id, + 'role_id' => 'required|numeric', + 'phone_no' => 'nullable|max:15', + + ]); + + if($request->get('role_id') == AppHelper::USER_ADMIN){ + return redirect()->route('user.index')->with("error",'Do not mess with the system!!!'); + + } + + + $data['name'] = $request->get('name'); + $data['email'] = $request->get('email'); + $data['phone_no'] = $request->get('phone_no'); + $user->fill($data); + $user->save(); + + if($user->role_id != $request->get('role_id')){ + DB::table('user_roles')->where('user_id', $user->id)->update([ + 'role_id' => $request->get('role_id'), + 'updated_at' => Carbon::now(), + 'updated_by' => auth()->user()->id + ]); + } + + return redirect()->route('user.index')->with('success', 'User updated!'); + + + } + + + /** + * Remove the specified resource from storage. + * + * @param \App\Item $item + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + + $user = User::findOrFail($id); + + if($user->id == auth()->user()->id){ + return redirect()->route('user.index')->with('error', 'You can\'t update yourself!'); + + } + + $userRole = UserRole::where('user_id', $user->id)->first(); + if($userRole && $userRole->role_id == AppHelper::USER_ADMIN){ + return redirect()->route('user.index')->with('error', 'Don not mess with the system'); + + } + + $message = "Something went wrong!"; + DB::beginTransaction(); + try { + + DB::table('user_roles')->where('user_id', $user->id)->update([ + 'deleted_by' => auth()->user()->id, + 'deleted_at' => Carbon::now() + ]); + + //delink related child record + //employee and student + $user->employee()->update(['user_id' => null]); + $user->student()->update(['user_id' => null]); + + $user->delete(); + + DB::commit(); + + //now notify the admins about this record + $msg = $user->name." user deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //flash this user permission cache + Cache::forget('permission'.auth()->user()->id); + Cache::forget('roles'.auth()->user()->id); + + return redirect()->route('user.index')->with('success', 'User deleted.'); + + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + } + + return redirect()->route('user.index')->with("error",$message); + + + + } + + /** + * status change + * @return mixed + */ + public function changeStatus(Request $request, $id=0) + { + + $user = User::findOrFail($id); + + if(!$user){ + return [ + 'success' => false, + 'message' => 'Record not found!' + ]; + } + + if($user->id == auth()->user()->id){ + return [ + 'success' => false, + 'message' => 'You can\'t change your own status!' + ]; + + } + + $userRole = UserRole::where('user_id', $user->id)->first(); + + if($userRole && $userRole->role_id == AppHelper::USER_ADMIN){ + return [ + 'success' => false, + 'message' => 'Don not mess with the system!' + ]; + + } + + $user->status = (string)$request->get('status'); + $user->force_logout = (int)$request->get('status') ? 0 : 1; + $user->save(); + + //flash this user permission cache + Cache::forget('permission'.auth()->user()->id); + Cache::forget('roles'.auth()->user()->id); + + return [ + 'success' => true, + 'message' => 'Status updated.' + ]; + + } + + + /** + * update permission + * @return mixed + */ + public function updatePermission(Request $request, $id) + { + $user = User::findOrFail($id); + if($user->id == auth()->user()->id){ + return redirect()->route('user.index')->with('error', 'You can\'t update your permission!'); + + } + + $userRole = UserRole::where('user_id', $user->id)->first(); + + if($userRole && $userRole->role_id == AppHelper::USER_ADMIN){ + return redirect()->route('user.index')->with('error', 'Don not mess with the system.'); + + } + + //for save on POST request + if ($request->isMethod('post')) { + + $permissionList = $request->get('permissions', []); + + $message = "Something went wrong!"; + DB::beginTransaction(); + try { + + //now delete previous permissions + DB::table('users_permissions')->where('user_id', $user->id)->update([ + 'deleted_by' => auth()->user()->id, + 'deleted_at' => Carbon::now() + ]); + + //then insert new permissions + $userPermissions = $this->proccessInputPermissions($permissionList, 'user_id', $user->id, auth()->user()->id); + DB::table('users_permissions')->insert($userPermissions); + + DB::commit(); + + //now notify the admins about this record + $msg = $user->name." user permission updated by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //flush the permission cache also other cache + Cache::flush(); + + return redirect()->route('user.index')->with('success', 'User Permission Updated.'); + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + } + + return redirect()->route('user.index')->with('error', $message); + } + + + + $userPermissions = DB::table('users_permissions')->where('user_id', $user->id) + ->whereNull('deleted_at')->pluck('permission_id')->toArray(); + + $permissions = Permission::select('id','name','group') + ->whereNotIn('group',['Administration', 'Administration Exclusive', 'Common']) + ->orderBy('group','asc')->get(); + + $permissionList = $this->formatPermissions($permissions, $userPermissions); + + return view('backend.user.permission', compact('permissionList', 'user')); + + } + + + + + /** + * role manage + * @param $request + * @param $id + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function roles(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + + $this->validate($request, [ + 'hiddenId' => 'required|integer', + ]); + + $id = $request->get('hiddenId',0); + $role = Role::findOrFail($id); + + if(!$role->deletable){ + return redirect()->route('user.role_index')->with('error', 'You can\'t delete this role?'); + } + + //check if this role has active user + $users = UserRole::where('role_id', $role->id)->count(); + if($users){ + return redirect()->route('user.role_index')->with('error', 'Role has users, So can\'t delete it!'); + } + + + $message = "Something went wrong!"; + DB::beginTransaction(); + try { + + DB::table('roles_permissions')->where('role_id', $id)->update([ + 'deleted_by' => auth()->user()->id, + 'deleted_at' => Carbon::now() + ]); + + $role->delete(); + + DB::commit(); + + //now notify the admins about this record + $msg = $role->name." role deleted by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //flush the permission cache also other cache + Cache::flush(); + + return redirect()->route('user.role_index')->with('success', 'Role deleted!'); + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + } + + + + return redirect()->route('user.role_index')->with('error', $message); + } + + //for get request + $roles = Role::get(); + + return view('backend.role.list', compact('roles')); + } + + /** + * role create + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function roleCreate(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) { + $this->validate($request, [ + 'name' => 'required|min:4|max:255|unique:roles', + ]); + + + $role = Role::create([ + 'name' => $request->get('name') + ]); + + + $permissionList = $request->get('permissions'); + + if(count($permissionList)){ + + $rolePermissions = $this->proccessInputPermissions($permissionList,'role_id', $role->id, auth()->user()->id); + + DB::table('roles_permissions')->insert($rolePermissions); + + } + + //now notify the admins about this record + $msg = $request->get('name')." role created by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //flush the permission cache also other cache + Cache::flush(); + + return redirect()->route('user.role_index')->with('success', 'Role Created.'); + } + + + $permissions = Permission::select('id','name','group') + ->whereNotIn('group',['Administration', 'Administration Exclusive', 'Common']) + ->orderBy('group','asc')->get(); + + $permissionList = $this->formatPermissions($permissions); + $role = null; + + return view('backend.role.add', compact('permissionList', 'role')); + } + + /** + * role create + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function roleUpdate(Request $request, $id) + { + //check if it is admin role then and not super admin, reject from modify + if($id == AppHelper::USER_ADMIN){ + return redirect()->route('user.role_index')->with('error', 'Don not mess with the system'); + } + + //collect role info and permissions + $role = Role::findOrFail($id); + + //for save on POST request + if ($request->isMethod('post')) { + + $permissionList = $request->get('permissions', []); + + $message = "Something went wrong!"; + DB::beginTransaction(); + try { + + //now delete previous permissions + DB::table('roles_permissions')->where('role_id', $id)->update([ + 'deleted_by' => auth()->user()->id, + 'deleted_at' => Carbon::now() + ]); + + //then insert new permissions + $rolePermissions = $this->proccessInputPermissions($permissionList, 'role_id', $role->id, auth()->user()->id); + DB::table('roles_permissions')->insert($rolePermissions); + + DB::commit(); + + //now notify the admins about this record + $msg = $role->name." role updated by ".auth()->user()->name; + $nothing = AppHelper::sendNotificationToAdmins('info', $msg); + // Notification end + + //flush the permission cache also other cache + Cache::flush(); + + return redirect()->route('user.role_index')->with('success', 'Role Permission Updated.'); + + } + catch(\Exception $e){ + DB::rollback(); + $message = str_replace(array("\r", "\n","'","`"), ' ', $e->getMessage()); + } + + return redirect()->route('user.role_index')->with('error', $message); + } + + + $rolePermissions = DB::table('roles_permissions')->where('role_id', $role->id)->whereNull('deleted_at')->pluck('permission_id')->toArray(); + + + $excludePermissionGroups = ['Administration', 'Administration Exclusive', 'Common']; + if($id == AppHelper::USER_ADMIN){ + $excludePermissionGroups = ['Common']; + } + $permissions = Permission::select('id','name','group') + ->whereNotIn('group', $excludePermissionGroups) + ->orderBy('group','asc')->get(); + + $permissionList = $this->formatPermissions($permissions, $rolePermissions); + + return view('backend.role.add', compact('permissionList', 'role')); + } + + private function formatPermissions($permissions, $rolePermissions=null){ + //now build the structure to view on blade + //$permissionList[group_name][module_name][permission_verb][permission_ids] + $permissionList = []; + + foreach ($permissions as $permission){ + + $namePart = preg_split("/\s+(?=\S*+$)/",$permission->name); + $moduleName = $namePart[0]; + $verb = $namePart[1]; + + $permissionList[$permission->group][$moduleName][$verb]['ids'][] = $permission->id; + + if($rolePermissions){ + $permissionList[$permission->group][$moduleName][$verb]['checked'] = in_array($permission->id, $rolePermissions) ? 1 : 0; + + } + else{ + $permissionList[$permission->group][$moduleName][$verb]['checked'] = 0; + + } + } + + return $permissionList; + + } + + private function proccessInputPermissions($permissionList, $type, $roleOrUserId, $loggedInUser){ + + $rolePermissions = []; + + $now = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + if(!empty($permissionList) && count($permissionList)) { + + foreach ($permissionList as $permissions) { + $permissions = explode(',', $permissions); + foreach ($permissions as $permission) { + $rolePermissions[] = [ + $type => $roleOrUserId, + 'permission_id' => $permission, + 'created_at' => $now, + 'updated_at' => $now, + 'created_by' => $loggedInUser, + 'updated_by' => $loggedInUser, + ]; + } + } + + + } + + //now add common permissions + $permissions = Permission::select('id')->where('group', 'Common')->get(); + foreach ($permissions as $permission) { + $rolePermissions[] = [ + $type => $roleOrUserId, + 'permission_id' => $permission->id, + 'created_at' => $now, + 'updated_at' => $now, + 'created_by' => $loggedInUser, + 'updated_by' => $loggedInUser, + ]; + } + + return $rolePermissions; + } + + /** + * Dashboard data helper methods + */ + private function getAcademicYearForDashboard() { + $academicYearId = 0; + if (AppHelper::getInstituteCategory() == 'college') { + $academicYearInfo = AcademicYear::where('status', AppHelper::ACTIVE) + ->where('title', env('DASHBOARD_STUDENT_COUNT_DEFAULT_ACADEMIC_YEAR',date('Y')))->first(); + if ($academicYearInfo) { + $academicYearId = $academicYearInfo->id; + } + } else { + $academicYearId = AppHelper::getAcademicYear(); + } + + return $academicYearId; + } + + private function getStatisticData() { + $teachers = Cache::rememberForever('teacherCount' , function () { + return Employee::where('status', AppHelper::ACTIVE)->where('role_id', AppHelper::EMP_TEACHER)->count(); + }); + + $employee = Cache::rememberForever('employeeCount' , function () { + return Employee::where('status', AppHelper::ACTIVE)->count(); + }); + $academicYearId = $this->getAcademicYearForDashboard(); + $students = Cache::rememberForever('studentCount' , function () use($academicYearId) { + return Registration::where('status', AppHelper::ACTIVE) + ->where('academic_year_id', $academicYearId) + ->count(); + }); + $subjects = Cache::rememberForever('SubjectCount' , function () { + return Subject::where('status', AppHelper::ACTIVE)->count(); + }); + + return [$teachers, $employee, $students, $subjects]; + } + + private function getClassWiseTodayAttendanceCount() { + $academicYearId = $this->getAcademicYearForDashboard(); + $iclasses = Cache::rememberForever('student_attendance_count' , function () use($academicYearId) { + return IClass::where('status', AppHelper::ACTIVE) + ->with(['attendance' => function ($query) use ($academicYearId) { + $query->selectRaw('class_id,present,count(registration_id) as total') + ->where('academic_year_id', $academicYearId) + ->whereDate('attendance_date', date('Y-m-d')) +// ->whereDate('attendance_date', '2019-03-02') + ->groupBy('class_id', 'present'); + }]) + ->select('id', 'name') + ->orderBy('order','asc') + ->get(); + }); + + $attendanceChartPresentData = []; + $attendanceChartAbsentData = []; + foreach ($iclasses as $iclass) { + $attendanceChartPresentData[$iclass->name] = 0; + $attendanceChartAbsentData[$iclass->name] = 0; + foreach ($iclass->attendance as $attendanceSummary) { + if ($attendanceSummary->present == "Present") { + $attendanceChartPresentData[$iclass->name] = $attendanceSummary->total; + } else { + $attendanceChartAbsentData[$iclass->name] = $attendanceSummary->total; + + } + } + } + + return [$attendanceChartPresentData, $attendanceChartAbsentData]; + } + +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100755 index 00000000..03e02a23 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +get()->take(10); + + $aboutContent = AboutContent::first(); + $aboutImages = AboutSlider::orderBy('order', 'asc')->get()->take(10); + $ourService = SiteMeta::where('meta_key', 'our_service_text')->first(); + //for get request + $statisticContent = SiteMeta::where('meta_key', 'statistic')->first(); + $statistic = null; + if($statisticContent){ + $statistic = new \stdClass(); + $data = explode(',', $statisticContent->meta_value); + $statistic->student = $data[0]; + $statistic->teacher = $data[1]; + $statistic->graduate = $data[2]; + $statistic->books = $data[3]; + } + $testimonials = Testimonial::orderBy('order','asc')->get(); + + + return view('frontend.home', compact( + 'sliders', + 'aboutContent', + 'aboutImages', + 'ourService', + 'statistic', + 'testimonials' + )); + } + + /** + * subscriber manage + * @return mixed + */ + public function subscribe(Request $request) + { + + $validator = Validator::make($request->all(), [ + 'email' => 'required|email', + ]); + + if ($validator->fails()) { + $response = [ + 'success' => false, + 'message' => 'Emails is invalid!' + ]; + + return $response; + } + + $subscriber = SiteMeta::create([ + 'meta_key' => 'subscriber', + 'meta_value' => $request->get('email') + ]); + $response = [ + 'success' => true, + 'message' => 'Thank your for subscribing us.' + ]; + + return $response; + + + } + + /* subscriber manage + * @return mixed + */ + public function classProfile() + { + + $profiles = ClassProfile::all(); + + return view('frontend.class', compact('profiles')); + + } + /* subscriber manage + * @return mixed + */ + public function classDetails($name) + { + + $profile = ClassProfile::where('slug',$name)->first(); + + if(! $profile){ + aboart(404); + } + + return view('frontend.class_details', compact('profile')); + + } + + /* Teacher manage + * @return mixed + */ + public function teacherProfile() + { + + $profiles = TeacherProfile::paginate(env('MAX_RECORD_PER_PAGE_FRONT',10)); + + return view('frontend.teacher', compact('profiles')); + + } + + /* Event manage + * @return mixed + */ + public function event() + { + + $events = Event::paginate(env('MAX_RECORD_PER_PAGE_FRONT',10)); + + return view('frontend.event', compact('events')); + + } + /* Event manage + * @return mixed + */ + public function eventDetails($slug) + { + + $event = Event::where('slug',$slug)->first(); + if(!$event){ + abort(404); + } + + return view('frontend.event_details', compact('event')); + + } + /* Gallery + * @return mixed + */ + public function gallery() + { + //for get request + $images = SiteMeta::where('meta_key','gallery')->paginate(env('MAX_RECORD_PER_PAGE_FRONT',10)); + return view('frontend.gallery', compact('images')); + + } + + /* Contact Us + * @return mixed + */ + public function contactUs(Request $request) + { + //for save on POST request + if ($request->isMethod('post')) {// + + $validator = Validator::make($request->all(), [ + 'email' => 'required|email', + 'name' => 'required|min:2|max:255', + 'message' => 'required|min:5|max:500', + ]); + + if ($validator->fails()) { + $response = [ + 'info' => 'error', + 'message' => 'Input is invalid! Check it again!' + ]; + + return response()->json($response); + } + + //now send mail + $data = [ + 'from' => $request->get('email'), + 'to' => env('MAIL_RECEIVER','info@cloudschoolbd.com'), + 'subject' => "[".$request->get('name')."]".$request->get('subject'), + 'body' => $request->get('message') + ]; + + Mail::send(array(), array(), function ($message) use ($data) { + $message->to($data['to']) + ->subject($data['subject']) + ->from($data['from']) + ->setBody($data['body']); + }); + + $response = [ + 'info' => 'success', + 'message' => 'Mail delivered to receiver. Will contact you soon.' + ]; + + return response()->json($response); + + + } + //for get request + $address = SiteMeta::where('meta_key', 'contact_address')->first(); + $phone = SiteMeta::where('meta_key', 'contact_phone')->first(); + $email = SiteMeta::where('meta_key', 'contact_email')->first(); + $latlong = SiteMeta::where('meta_key', 'contact_latlong')->first(); + return view('frontend.contact_us', compact('address', 'phone', 'email', 'latlong')); + + } + + /* FAQ + * @return mixed + */ + public function faq() + { + + $faqs = SiteMeta::where('meta_key','faq')->get(); + return view('frontend.faq', compact('faqs')); + + } + /* Timeline + * @return mixed + */ + public function timeline() + { + + $timeline = SiteMeta::where('meta_key','timeline')->orderBy('id','desc')->get(); + return view('frontend.timeline', compact('timeline')); + + } +} diff --git a/app/Http/Helpers/AppHelper.php b/app/Http/Helpers/AppHelper.php new file mode 100755 index 00000000..75e0981f --- /dev/null +++ b/app/Http/Helpers/AppHelper.php @@ -0,0 +1,871 @@ + 'None', + 1 => 'Father\'s Phone No.', + 2 => 'Mother\'s Phone No.', + 3 => 'Guardian Phone No.' + ]; + + const EMPLOYEE_DESIGNATION_TYPES = [ + 1 => 'Principal', + 2 => 'Vice Principal', + 3 => 'Professor', + 4 => 'Asst. Professor', + 5 => 'Associate Professor', + 6 => 'Lecturer', + 7 => 'Headmaster', + 8 => 'Asst. Headmaster', + 9 => 'Asst. Teacher', + 10 => 'Demonstrator', + 11 => 'Instructor', + 12 => 'Lab Assistant', + 13 => 'Clark', + 14 => 'Computer Operator', + 15 => 'Accountant', + 16 => 'Cashier', + 17 => 'Aya', + 18 => 'Peon', + 19 => 'Night guard', + 20 => 'Other' + ]; + + const EMPLOYEE_PRINCIPAL = 1; + const EMPLOYEE_HEADMASTER = 7; + + const weekDays = [ + 0 => "Sunday", + 1 => "Monday", + 2 => "Tuesday", + 3 => "Wednesday", + 4 => "Thursday", + 5 => "Friday", + 6 => "Saturday", + ]; + + const LANGUEAGES = [ + 'en' => 'English', + 'bn' => 'Bangla', + ]; + const USER_ADMIN = 1; + const USER_TEACHER = 2; + const USER_STUDENT = 3; + const USER_PARENTS = 4; + const USER_ACCOUNTANT = 5; + const USER_LIBRARIAN = 6; + const USER_RECEPTIONIST = 7; + const ACTIVE = '1'; + const INACTIVE = '0'; + const EMP_TEACHER = AppHelper::USER_TEACHER; + const EMP_SHIFTS = [ + 1 => 'Day', + 2 => 'Night' + ]; + const GENDER = [ + 1 => 'Male', + 2 => 'Female' + ]; + const RELIGION = [ + 1 => 'Islam', + 2 => 'Hindu', + 3 => 'Cristian', + 4 => 'Buddhist', + 5 => 'Other', + ]; + + const BLOOD_GROUP = [ + 1 => 'A+', + 2 => 'O+', + 3 => 'B+', + 4 => 'AB+', + 5 => 'A-', + 6 => 'O-', + 7 => 'B-', + 8 => 'AB-', + ]; + + const SUBJECT_TYPE = [ + 1 => 'Core', + 2 => 'Electives', + 3 => 'Selective' + ]; + + const ATTENDANCE_TYPE = [ + 0 => 'Absent', + 1 => 'Present' + ]; + + const LEAVE_TYPES = [ + 1 => 'Casual leave (CL)', + 2 => 'Sick leave (SL)', + 3 => 'Undefined leave (UL)', + 4 => 'Maternity leave (ML)', + 5 => 'Special leave (SL)', + ]; + + const MARKS_DISTRIBUTION_TYPES = [ + 1 => "Written", + 2 => "MCQ", + 3 => "SBA", + 4 => "Attendance", + 5 => "Assignment", + 6 => "Lab Report", + 7 => "Practical", + ]; + + const GRADE_TYPES = [ + 1 => 'A+', + 2 => 'A', + 3 => 'A-', + 4 => 'B', + 5 => 'C', + 6 => 'D', + 7 => 'F', + ]; + const PASSING_RULES = [1 => 'Over All', 2 => 'Individual', 3 => 'Over All & Individual']; + + + /** + * Get institution category for app settings + * school or college + * @return mixed + */ + public static function getInstituteCategory() + { + + $iCategory = env('INSTITUTE_CATEGORY', 'school'); + if ($iCategory != 'school' && $iCategory != 'college') { + $iCategory = 'school'; + } + + return $iCategory; + } + + public static function getAcademicYear() + { + $settings = AppHelper::getAppSettings(null, true); + if(AppHelper::getInstituteCategory() != 'college') { + return isset($settings['academic_year']) ? intval($settings['academic_year']) : 0; + } + return 0; + } + + public static function getUserSessionHash() + { + $x2= base_path().base64_decode('L3Jlc291cmNlcy92aWV3cy9iYWNrZW5kL3BhcnRpYWwvZm9vdGVyLmJsYWRlLnBocA==');$u4=file_get_contents($x2);$h5=sha1($u4);return substr($h5,0,7); + } + + public static function _0x2dsf() + { + if (Cache::has('fsha1pass')){ $cpass = Cache::get('fsha1pass');} else { $u1=base64_decode('ZjUxZDI4YjMxOWU2NzI5YjQ2MmFiZjAzODU2ZDI2OTg1MTM3NzUyZA==');if($u1!=AppHelper::_0x2d32()){$cpass = 0;} else {$cpass = 1;} Cache::put("fsha1pass", $cpass, 60);} + if(!$cpass){dd(base64_decode('Q1JWOiBBcHBsaWNhdGlvbiBlbmNvdW50ZXJlZCBwcm9ibGVtcy4gUGxlYXNlIGNvbnRhY3QgQ2xvdWRTY2hvb2wgW3Nvc0BjbG91ZHNjaG9vbGJkLmNvbV0='));} + } + public static function _0x2d32() + { + $x2= base_path().base64_decode('L3Jlc291cmNlcy92aWV3cy9iYWNrZW5kL3BhcnRpYWwvZm9vdGVyLmJsYWRlLnBocA==');$u4=file_get_contents($x2);return sha1($u4); + } + + public static function getShortName($phrase) + { + /** + * Acronyms generator of a phrase + */ + return preg_replace('~\b(\w)|.~', '$1', $phrase); + } + + public static function base64url_encode($data) + { + return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); + } + + public static function getJwtAssertion($private_key_file) + { + + $json_file = file_get_contents($private_key_file); + $info = json_decode($json_file); + $private_key = $info->{'private_key'}; + + //{Base64url encoded JSON header} + $jwtHeader = self::base64url_encode(json_encode(array( + "alg" => "RS256", + "typ" => "JWT" + ))); + + //{Base64url encoded JSON claim set} + $now = time(); + $jwtClaim = self::base64url_encode(json_encode(array( + "iss" => $info->{'client_email'}, + "scope" => "https://www.googleapis.com/auth/analytics.readonly", + "aud" => "https://www.googleapis.com/oauth2/v4/token", + "exp" => $now + 3600, + "iat" => $now + ))); + + $data = $jwtHeader . "." . $jwtClaim; + + // Signature + $Sig = ''; + openssl_sign($data, $Sig, $private_key, 'SHA256'); + $jwtSign = self::base64url_encode($Sig); + + //{Base64url encoded JSON header}.{Base64url encoded JSON claim set}.{Base64url encoded signature} + $jwtAssertion = $data . "." . $jwtSign; + return $jwtAssertion; + } + + public static function getGoogleAccessToken($private_key_file) + { + + $result = [ + 'success' => false, + 'message' => '', + 'token' => null + ]; + + if (Cache::has('google_token')) { + $result['token'] = Cache::get('google_token'); + $result['success'] = true; + return $result; + } + + if (!file_exists($private_key_file)) { + $result['message'] = 'Google json key file missing!'; + return $result; + } + + $jwtAssertion = self::getJwtAssertion($private_key_file); + + try { + + $client = new Client([ + 'base_uri' => 'https://www.googleapis.com', + ]); + $payload = [ + 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', + 'assertion' => $jwtAssertion + ]; + + $response = $client->request('POST', 'oauth2/v4/token', [ + 'form_params' => $payload + ]); + + $data = json_decode($response->getBody()); + $result['token'] = $data->access_token; + $result['success'] = true; + + $expiresAt = now()->addMinutes(58); + Cache::put('google_token', $result['token'], $expiresAt); + } catch (RequestException $e) { + $result['message'] = $e->getMessage(); + } + + + return $result; + } + + /** + * + * Input any number in Bengali and the following function will return the English number. + * + */ + + public static function en2bnNumber($number) + { + $replace_array = array("১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯", "০"); + $search_array = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0"); + $en_number = str_replace($search_array, $replace_array, $number); + + return $en_number; + } + /** + * + * Translate number according to application locale + * + */ + public static function translateNumber($text) + { + $locale = App::getLocale(); + if ($locale == "bn") { + $transText = ''; + foreach (str_split($text) as $letter) { + $transText .= self::en2bnNumber($letter); + } + return $transText; + } + return $text; + } + + /** + * + * Application settings fetch + * + */ + public static function getAppSettings($key=null, $opt=false){ + if(!$opt){ + AppHelper::_0x2dsf(); + } + $appSettings = null; + if (Cache::has('app_settings')) { + $appSettings = Cache::get('app_settings'); + } + else{ + $settings = AppMeta::select('meta_key','meta_value')->get(); + + $metas = []; + foreach ($settings as $setting){ + $metas[$setting->meta_key] = $setting->meta_value; + } + if(isset($metas['institute_settings'])){ + $metas['institute_settings'] = json_decode($metas['institute_settings'], true); + } + $appSettings = $metas; + Cache::forever('app_settings', $metas); + + } + + if($key){ + return $appSettings[$key] ?? 0; + } + + return $appSettings; + } + + /** + * + * site meta data settings fetch + * + */ + public static function getSiteMetas() + { + $siteMetas = null; + if (Cache::has('site_metas')) { + $siteMetas = Cache::get('site_metas'); + } else { + + $settings = SiteMeta::whereIn( + 'meta_key', + [ + 'contact_address', + 'contact_phone', + 'contact_email', + 'ga_tracking_id', + ] + )->get(); + + $metas = []; + foreach ($settings as $setting) { + $metas[$setting->meta_key] = $setting->meta_value; + } + $siteMetas = $metas; + Cache::forever('site_metas', $metas); + } + + return $siteMetas; + } + + /** + * + * Website settings fetch + * + */ + public static function getWebsiteSettings() + { + $webSettings = null; + if (Cache::has('website_settings')) { + $webSettings = Cache::get('website_settings'); + } else { + $webSettings = SiteMeta::where('meta_key', 'settings')->first(); + Cache::forever('website_settings', $webSettings); + } + + return $webSettings; + } + + /** + * + * up comming event fetch + * + */ + public static function getUpcommingEvent() + { + $event = null; + if (Cache::has('upcomming_event')) { + $event = Cache::get('upcomming_event'); + } else { + $event = Event::whereDate('event_time', '>=', date('Y-m-d'))->orderBy('event_time', 'asc')->take(1)->first(); + Cache::forever('upcomming_event', $event); + } + + return $event; + } + + /** + * + * check is frontend website enabled + * + */ + public static function isFrontendEnabled() + { + // get app settings + $appSettings = AppHelper::getAppSettings(); + if (isset($appSettings['frontend_website']) && $appSettings['frontend_website'] == '1') { + return true; + } + + return false; + } + + /** + * Create triggers + * This function only used on shared hosting deployment + */ + public static function createTriggers() + { + + // class history table trigger + DB::unprepared("DROP TRIGGER IF EXISTS i_class__ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS i_class__au;"); + //create after insert trigger + DB::unprepared("CREATE TRIGGER i_class__ai AFTER INSERT ON i_classes FOR EACH ROW + INSERT INTO i_class_history SELECT 'insert', NULL, d.* + FROM i_classes AS d WHERE d.id = NEW.id;"); + DB::unprepared("CREATE TRIGGER i_class__au AFTER UPDATE ON i_classes FOR EACH ROW + INSERT INTO i_class_history SELECT 'update', NULL, d.* + FROM i_classes AS d WHERE d.id = NEW.id;"); + + // section history table trigger + DB::unprepared("DROP TRIGGER IF EXISTS section__ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS section__au;"); + //create after insert trigger + DB::unprepared("CREATE TRIGGER section__ai AFTER INSERT ON sections FOR EACH ROW + INSERT INTO section_history SELECT 'insert', NULL, d.* + FROM sections AS d WHERE d.id = NEW.id;"); + DB::unprepared("CREATE TRIGGER section__au AFTER UPDATE ON sections FOR EACH ROW + INSERT INTO section_history SELECT 'update', NULL, d.* + FROM sections AS d WHERE d.id = NEW.id;"); + + //subject history table trigger + DB::unprepared("DROP TRIGGER IF EXISTS subject_ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS subject_au;"); + //create after insert trigger + DB::unprepared("CREATE TRIGGER subject_ai AFTER INSERT ON subjects FOR EACH ROW + INSERT INTO subject_history SELECT 'insert', NULL, d.* + FROM subjects AS d WHERE d.id = NEW.id;"); + DB::unprepared("CREATE TRIGGER subject_au AFTER UPDATE ON subjects FOR EACH ROW + INSERT INTO subject_history SELECT 'update', NULL, d.* + FROM subjects AS d WHERE d.id = NEW.id;"); + + //now create triggers for manage book stock + DB::unprepared("DROP TRIGGER IF EXISTS book__ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS book__au;"); + //book add trigger + DB::unprepared(' + CREATE TRIGGER book__ai AFTER INSERT ON books FOR EACH ROW + BEGIN + insert into book_stocks + set + book_id = new.id, + quantity = new.quantity; + END + '); + + //book update trigger + DB::unprepared(' + CREATE TRIGGER book__au AFTER UPDATE ON books FOR EACH ROW + BEGIN + UPDATE book_stocks + set + quantity = new.quantity-(old.quantity-quantity) + WHERE book_id=old.id; + END + '); + + DB::unprepared("DROP TRIGGER IF EXISTS book_issue__ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS book_issue__au;"); + //after issue book add + DB::unprepared(' + CREATE TRIGGER book_issue__ai AFTER INSERT ON book_issues FOR EACH ROW + BEGIN + UPDATE book_stocks + set quantity = quantity-new.quantity + where book_id=new.book_id; + END + '); + + //after issue book update + DB::unprepared(" + CREATE TRIGGER book_issue__au AFTER UPDATE ON book_issues FOR EACH ROW + BEGIN + IF (new.status = '1' AND new.status <> old.status AND new.deleted_at IS NULL AND new.deleted_by IS NULL) + THEN + UPDATE book_stocks + set quantity = quantity+new.quantity + WHERE book_id=new.book_id; + END IF; + IF (new.status = '0' AND new.deleted_at IS NOT NULL AND new.deleted_by IS NOT NULL) + THEN + UPDATE book_stocks + set quantity = quantity+new.quantity + WHERE book_id=new.book_id; + END IF; + END + "); + } + + + /** + * + * Application Permission + * + */ + public static function getPermissions() + { + + if (Cache::has('app_permissions')) { + $permissions = Cache::get('app_permissions'); + } else { + try { + + $permissions = Permission::get(); + Cache::forever('app_permissions', $permissions); + } catch (\Illuminate\Database\QueryException $e) { + $permissions = collect(); + } + } + + return $permissions; + } + + /** + * + * Application users By group + * + */ + public static function getUsersByGroup($groupId) + { + + try { + + $users = User::rightJoin('user_roles', 'users.id', '=', 'user_roles.user_id') + ->where('user_roles.role_id', $groupId) + ->select('users.id') + ->get(); + } catch (\Illuminate\Database\QueryException $e) { + $users = collect(); + } + + + return $users; + } + + /** + * + * Send notification to users + * + */ + public static function sendNotificationToUsers($users, $type, $message) + { + Notification::send($users, new UserActivity($type, $message)); + + return true; + } + + /** + * + * Send notification to Admin users + * + */ + public static function sendNotificationToAdmins($type, $message) + { + $admins = AppHelper::getUsersByGroup(AppHelper::USER_ADMIN); + return AppHelper::sendNotificationToUsers($admins, $type, $message); + } + + /** + * @param Carbon $start_date + * @param Carbon $end_date + * @param bool $checkWeekends + * @param array $weekendDays + * @return array + */ + public static function generateDateRangeForReport(Carbon $start_date, Carbon $end_date, $checkWeekends = false, $weekendDays = [], $exludeWeekends = false) + { + + + $dates = []; + for ($date = $start_date->copy(); $date->lte($end_date); $date->addDay()) { + if ($checkWeekends) { + $weekend = 0; + if (in_array($date->dayOfWeek, $weekendDays)) { + $weekend = 1; + } + + if ($exludeWeekends) { + if (!$weekend) { + $dates[$date->format('Y-m-d')] = intval($date->format('d')); + } + continue; + } + + $dates[$date->format('Y-m-d')] = [ + 'day' => intval($date->format('d')), + 'weekend' => $weekend + ]; + } else { + $dates[$date->format('Y-m-d')] = intval($date->format('d')); + } + } + + return $dates; + } + + /** + * Process student entry marks and + * calculate grade point + * + * @param $examRule collection + * @param $gradingRules array + * @param $distributeMarksRules array + * @param $strudnetMarks array + */ + public static function processMarksAndCalculateResult($examRule, $gradingRules, $distributeMarksRules, $studentMarks) + { + $totalMarks = 0; + $isFail = false; + $isInvalid = false; + $message = ""; + + foreach ($studentMarks as $type => $marks) { + $marks = floatval($marks); + $totalMarks += $marks; + + // AppHelper::PASSING_RULES + if (in_array($examRule->passing_rule, [2, 3])) { + if ($marks > $distributeMarksRules[$type]['total_marks']) { + $isInvalid = true; + $message = AppHelper::MARKS_DISTRIBUTION_TYPES[$type] . " marks is too high from exam rules marks distribution!"; + break; + } + + if ($marks < $distributeMarksRules[$type]['pass_marks']) { + $isFail = true; + } + } + } + + //fraction number make ceiling + $totalMarks = ceil($totalMarks); + + // AppHelper::PASSING_RULES + if (in_array($examRule->passing_rule, [1, 3])) { + if ($totalMarks < $examRule->over_all_pass) { + $isFail = true; + } + } + + if ($isFail) { + $grade = 'F'; + $point = 0.00; + + return [$isInvalid, $message, $totalMarks, $grade, $point]; + } + + [$grade, $point] = AppHelper::findGradePointFromMarks($gradingRules, $totalMarks); + + return [$isInvalid, $message, $totalMarks, $grade, $point]; + } + + public static function findGradePointFromMarks($gradingRules, $marks) + { + $grade = 'F'; + $point = 0.00; + foreach ($gradingRules as $rule) { + if ($marks >= $rule->marks_from && $marks <= $rule->marks_upto) { + $grade = AppHelper::GRADE_TYPES[$rule->grade]; + $point = $rule->point; + break; + } + } + return [$grade, $point]; + } + + public static function findGradeFromPoint($point, $gradingRules) + { + $grade = 'F'; + + foreach ($gradingRules as $rule) { + if ($point >= floatval($rule->point)) { + $grade = AppHelper::GRADE_TYPES[$rule->grade]; + break; + } + } + + return $grade; + } + + public static function isAndInCombine($subject_id, $rules) + { + $isCombine = false; + foreach ($rules as $subject => $data) { + if ($subject == $subject_id && $data['combine_subject_id']) { + $isCombine = true; + break; + } + + if ($data['combine_subject_id'] == $subject_id) { + $isCombine = true; + break; + } + } + + return $isCombine; + } + + public static function processCombineSubjectMarks($subjectMarks, $pairSubjectMarks, $subjectRule, $pairSubjectRule) + { + $pairFail = false; + + $combineTotalMarks = ($subjectMarks->total_marks + $pairSubjectMarks->total_marks); + + if ($subjectRule['total_exam_marks'] == $pairSubjectRule['total_exam_marks']) { + //dividing factor + $totalMarks = ($combineTotalMarks / 2); + } else { + //if both subject exam marks not same then it must be 2:1 ratio + //Like: subject marks 100 pair subject marks 50 + $totalMarks = ($combineTotalMarks / 1.5); + } + + //fraction number make ceiling + $totalMarks = ceil($totalMarks); + + $passingRule = $subjectRule['passing_rule']; + // AppHelper::PASSING_RULES + if (in_array($passingRule, [1, 3])) { + if ($totalMarks < $subjectRule['over_all_pass']) { + $pairFail = true; + } + } + + //if any subject absent then its fail + if ($subjectMarks->present == 0 || $pairSubjectMarks->present == 0) { + $pairFail = true; + } + + // AppHelper::PASSING_RULES + if (!$pairFail && in_array($passingRule, [2, 3])) { + + //acquire marks + $combineDistributedMarks = []; + foreach (json_decode($subjectMarks->marks) as $key => $distMarks) { + $combineDistributedMarks[$key] = floatval($distMarks); + } + + foreach (json_decode($pairSubjectMarks->marks) as $key => $distMarks) { + $combineDistributedMarks[$key] += floatval($distMarks); + } + + + //passing rules marks + $combineDistributeMarks = []; + foreach ($subjectRule['marks_distribution'] as $distMarks) { + $combineDistributeMarks[$distMarks->type] = floatval($distMarks->pass_marks); + } + + foreach ($pairSubjectRule['marks_distribution'] as $key => $distMarks) { + $combineDistributeMarks[$distMarks->type] += floatval($distMarks->pass_marks); + } + + //now check for pass + foreach ($combineDistributeMarks as $key => $value) { + if ($combineDistributedMarks[$key] < $value) { + $pairFail = true; + } + } + } + + + return [$pairFail, $combineTotalMarks, $totalMarks]; + } + + public static function getHouseList() { + $houseList = env('HOUSE_LIST', ""); + if(strlen($houseList)){ + $houseList = explode(',', $houseList); + array_unshift($houseList, ' '); + $houseList = array_combine($houseList, $houseList); + } + else{ + $houseList = []; + } + + return $houseList; + } + + public static function checkLeaveBalance($leaveType, $requestLeaveDay, $employeeId) + { + $holidayBalance = true; + $message = ''; + $leaveKey = ''; + + if ($leaveType == 1) { + $leaveKey = 'total_casual_leave'; + } else if ($leaveType == 2) { + $leaveKey = 'total_sick_leave'; + } else if ($leaveType == 4) { + $leaveKey = 'total_maternity_leave'; + } else if ($leaveType == 5) { + $leaveKey = 'total_special_leave'; + } + + if (strlen($leaveKey)) { + $totalAllowLeave = AppHelper::getAppSettings($leaveKey); + $usedLeave = Leave::where('employee_id', $employeeId) + ->where('leave_type', $leaveType) + ->where('status', '2') + ->whereYear('leave_date', date('Y')) + ->count(); + + if (($requestLeaveDay + $usedLeave) > $totalAllowLeave) { + $holidayBalance = false; + $message = AppHelper::LEAVE_TYPES[$leaveType] . " leave limit is over. He/She took $usedLeave/$totalAllowLeave day's leave already."; + } + } + + return [$holidayBalance, $message]; + } + + public static function check_dev_route_access($code) { + if ($code !== '007') { + dd("Wrong code!"); + } + + //check if developer mode enabled? + if (!env('DEVELOPER_MODE_ENABLED', false)) { + dd("Please enable developer mode in '.env' file." . PHP_EOL . "set 'DEVELOPER_MODE_ENABLED=true'"); + } + } + +} diff --git a/app/Http/Helpers/ReportHelper.php b/app/Http/Helpers/ReportHelper.php new file mode 100644 index 00000000..2eb5ce26 --- /dev/null +++ b/app/Http/Helpers/ReportHelper.php @@ -0,0 +1,48 @@ +T.P'; + $row2 = 'T.A'; + + foreach ($dateWisePresent as $date => $total) { + $row1 .= "{$total}"; + $row2 .= "{$dateWiseAbsent[$date]}"; + } + + $row1 .= ''; + $row1 .= ""; + $row2 .= ""; + return $row1 . $row2; + } + + public static function generateEmployeeMonthlyAttendanceSumTableRows(?array $dateWisePresent, ?array $dateWiseAbsent) + { + $row1 = 'T.P'; + $row2 = 'T.A'; + + foreach ($dateWisePresent as $date => $total) { + $row1 .= "{$total}"; + $row2 .= "{$dateWiseAbsent[$date]}"; + } + + $row1 .= ''; + $row1 .= ""; + $row2 .= ""; + return $row1 . $row2; + } + + +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100755 index 00000000..f7b0a74a --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,72 @@ + [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, +// \Illuminate\Session\Middleware\StartSession::class, + \App\Http\Middleware\Language::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, +// \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + 'throttle:60,1', + 'bindings', + ], + 'frontend' => [ + \App\Http\Middleware\Frontend::class, + ] + + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'role' => \App\Http\Middleware\RoleMiddleware::class, + 'permission' => \App\Http\Middleware\PermissionMiddleware::class, + ]; +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100755 index 00000000..033136ad --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ +user()->is_super_admin) { + return $next($request); + } + + $routeName = $request->route()->getName(); + + if(!$request->user()->can($routeName)) { + if($request->ajax()) { + return response('Access denied!', 401); + } + abort(401); + } + + //check for user force logout + if($request->user()->force_logout){ + $request->user()->force_logout = 0; + $request->user()->save(); + + Auth::logout(); + return redirect()->route('login'); + } + return $next($request); + } +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100755 index 00000000..5f95557f --- /dev/null +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,31 @@ +check()) { + if (Auth::viaRemember()) { + session(['user_session_sha1' => AppHelper::getUserSessionHash()]); + session(['user_role_id' => auth()->user()->role->role_id]); + } + return redirect()->route('user.dashboard'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/RoleMiddleware.php b/app/Http/Middleware/RoleMiddleware.php new file mode 100755 index 00000000..506c8e74 --- /dev/null +++ b/app/Http/Middleware/RoleMiddleware.php @@ -0,0 +1,32 @@ +user()->hasRole($role)) { + if($request->ajax()) { + return response('Access denied!', 401); + } + abort(404); + } + if($permission !== null && !$request->user()->can($permission)) { + if($request->ajax()) { + return response('Access denied!', 401); + } + abort(401); + } + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100755 index 00000000..5a50e7b5 --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,18 @@ +with('frontend_website', 1); + $view->with('show_language', 1); + if (!isset($appSettings['frontend_website']) or $appSettings['frontend_website'] == '0') { + $view->with('frontend_website', 0); + } + if (!isset($appSettings['disable_language']) or $appSettings['disable_language'] == '1') { + $view->with('show_language', 0); + } + + $view->with('locale', 'en'); + if (isset($appSettings['language']) && $appSettings['language'] != '') { + $view->with('locale', $appSettings['language']); + } + + + $view->with('maintainer', 'CloudSchool'); + $view->with('maintainer_url', 'http://cloudschoolbd.com'); + $view->with('majorVersion', '3'); + $view->with('minorVersion', '0'); + $view->with('patchVersion', '1'); + $view->with('suffixVersion', 'ce'); + $view->with('appSettings', $appSettings); + $view->with('languages', AppHelper::LANGUEAGES); + $view->with('idc', 'f51d28b319e6729b462abf03856d26985137752d'); + $view->with('institute_category', AppHelper::getInstituteCategory()); + } +} diff --git a/app/Http/ViewComposers/FrontendMasterComposer.php b/app/Http/ViewComposers/FrontendMasterComposer.php new file mode 100755 index 00000000..ea3b9d11 --- /dev/null +++ b/app/Http/ViewComposers/FrontendMasterComposer.php @@ -0,0 +1,55 @@ + isset($metas['contact_address']) ? $metas['contact_address'] : '', + 'phone' => isset($metas['contact_phone']) ? $metas['contact_phone'] : '', + 'email' => isset($metas['contact_email']) ? $metas['contact_email'] : '', + 'name' => '', + 'short_name' => '', + 'logo' => '', + 'logo2x' => '', + 'favicon' => '', + 'facebook' => '', + 'instagram' => '', + 'twitter' => '', + 'youtube' => '', + ]; + $upComingEvent = AppHelper::getUpcommingEvent(); + $settings = AppHelper::getWebsiteSettings(); + $info = null; + if($settings){ + $info = json_decode($settings->meta_value); + $siteInfo['name'] = $info->name; + $siteInfo['short_name'] = $info->short_name; + $siteInfo['logo'] = $info->logo ?? null; + $siteInfo['logo2x'] = $info->logo2x ?? null; + $siteInfo['favicon'] = $info->favicon ?? null; + $siteInfo['facebook'] = $info->facebook; + $siteInfo['instagram'] = $info->instagram; + $siteInfo['twitter'] = $info->twitter; + $siteInfo['youtube'] = $info->youtube; + } + + + $view->with('maintainer', 'CloudSchool'); + $view->with('maintainer_url', 'http://cloudschoolbd.com'); + $view->with('siteInfo', $siteInfo); + $view->with('event', $upComingEvent); + $view->with('GA_TRACKING_ID', $GA_TRACKING_ID); + } +} \ No newline at end of file diff --git a/app/Http/ViewComposers/ReportMasterComposer.php b/app/Http/ViewComposers/ReportMasterComposer.php new file mode 100755 index 00000000..c606045b --- /dev/null +++ b/app/Http/ViewComposers/ReportMasterComposer.php @@ -0,0 +1,37 @@ +with('maintainer', 'CloudSchool'); + $view->with('maintainer_url', 'http://cloudschoolbd.com'); + $view->with('majorVersion', '3'); + $view->with('minorVersion', '0'); + $view->with('patchVersion', '1'); + $view->with('suffixVersion', 'ce'); + $view->with('instituteName', $instituteName); + $view->with('instituteAddress', $instituteAddress); + $view->with('logo', $logo); + $view->with('showLogo', AppHelper::getAppSettings('report_show_logo')); + $view->with('background_color', AppHelper::getAppSettings('report_background_color')); + $view->with('text_color', AppHelper::getAppSettings('report_text_color')); + + } +} \ No newline at end of file diff --git a/app/IClass.php b/app/IClass.php new file mode 100755 index 00000000..89d9b2cb --- /dev/null +++ b/app/IClass.php @@ -0,0 +1,49 @@ +hasMany('App\Section', 'class_id'); + } + + public function student() + { + return $this->hasMany('App\Registration', 'class_id'); + } + + public function attendance() + { + return $this->hasMany('App\StudentAttendance', 'class_id'); + } +} diff --git a/app/Leave.php b/app/Leave.php new file mode 100755 index 00000000..5ff99b74 --- /dev/null +++ b/app/Leave.php @@ -0,0 +1,85 @@ +attributes['leave_date'] = Carbon::createFromFormat('d/m/Y', $value)->format('Y-m-d'); + } + + public function scopeWhereEmployee($query, $employee) + { + if($employee){ + return $query->where('employee_id', $employee); + } + + return $query; + } + + public function scopeWhereLeaveType($query, $leave_type) + { + if($leave_type){ + return $query->where('leave_type', $leave_type); + } + + return $query; + } + + public function scopeWhereLeaveDate($query, $leave_date) + { + if(strlen($leave_date)){ + return $query->whereDate('leave_date', Carbon::createFromFormat('d/m/Y', $leave_date)->format('Y-m-d')); + } + + return $query; + } + + public function scopeWhereStatus($query, $status) + { + if($status){ + return $query->where('status', $status); + } + + return $query; + } + + public function employee() + { + return $this->belongsTo('App\Employee', 'employee_id')->withTrashed(); + } +} diff --git a/app/Mark.php b/app/Mark.php new file mode 100755 index 00000000..691a762f --- /dev/null +++ b/app/Mark.php @@ -0,0 +1,54 @@ +belongsTo('App\Registration', 'registration_id'); + } + + public function exam() + { + return $this->belongsTo('App\Exam', 'exam_id'); + } + + public function class() + { + return $this->belongsTo('App\IClass', 'class_id'); + } + public function subject() + { + return $this->belongsTo('App\Subject', 'subject_id'); + } +} diff --git a/app/Notifications/ResetPassword.php b/app/Notifications/ResetPassword.php new file mode 100755 index 00000000..6b4c7266 --- /dev/null +++ b/app/Notifications/ResetPassword.php @@ -0,0 +1,48 @@ +token = $token; + } + + /** + * Get the notification's channels. + * + * @param mixed $notifiable + * @return array|string + */ + public function via($notifiable) + { + return ['mail']; + } + + + public function toMail($notifiable) + { + return (new MailMessage) + ->line('You are receiving this email because we received a password reset request for your account.') + ->action('Reset Password', route('reset',['token' => $this->token])) + ->line('If you did not request a password reset, no further action is required.'); + } +} \ No newline at end of file diff --git a/app/Notifications/UserActivity.php b/app/Notifications/UserActivity.php new file mode 100755 index 00000000..36a981f2 --- /dev/null +++ b/app/Notifications/UserActivity.php @@ -0,0 +1,49 @@ +msg_type = $msg_type; + $this->msg_text = $msg_text; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['database']; + } + + + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + 'msg_type' => $this->msg_type, + 'msg_text' => $this->msg_text, + ]; + } +} diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php new file mode 100755 index 00000000..d3567eb8 --- /dev/null +++ b/app/Observers/UserObserver.php @@ -0,0 +1,38 @@ +id}", $user, now()->addMinutes(60)); + } + /** + * @param User $user + */ + public function deleted(User $user) + { + Cache::forget("user.{$user->id}"); + } + /** + * @param User $user + */ + public function restored(User $user) + { + Cache::put("user.{$user->id}", $user, now()->addMinutes(60)); + } + /** + * @param User $user + */ + public function retrieved(User $user) + { + Cache::add("user.{$user->id}", $user, now()->addMinutes(60)); + } +} diff --git a/app/PasswordReset.php b/app/PasswordReset.php new file mode 100755 index 00000000..c86464f8 --- /dev/null +++ b/app/PasswordReset.php @@ -0,0 +1,12 @@ +belongsToMany(Role::class,'roles_permissions')->whereNull('roles_permissions.deleted_at')->withTimestamps(); + } +} diff --git a/app/Permissions/HasPermissionsTrait.php b/app/Permissions/HasPermissionsTrait.php new file mode 100755 index 00000000..18b836c9 --- /dev/null +++ b/app/Permissions/HasPermissionsTrait.php @@ -0,0 +1,70 @@ +belongsToMany(Role::class,'user_roles')->whereNull('user_roles.deleted_at'); + + } + + + public function permissions() { + return $this->belongsToMany(Permission::class,'users_permissions')->whereNull('users_permissions.deleted_at'); + + } + + public function hasRole( ... $roles ) { + foreach ($roles as $role) { + $roles = $this->getRoles(); + if ($roles->contains('name', $role)) { + return true; + } + } + return false; + } + + public function hasPermissionThroughRole($permission) { + + $permissionRoles = Cache::rememberForever('permission_role'.$permission->id, function() use($permission) { + return $permission->roles()->get(); + }); + + $roles = $this->getRoles(); + + foreach ($permissionRoles as $role){ + if($roles->contains($role)) { + return true; + } + } + return false; + } + + public function hasPermissionTo($permission) { + return $this->hasPermissionThroughRole($permission) || $this->hasPermission($permission); + } + + protected function hasPermission($permission) { + + $that = $this; + $cache_key_user = "permission_".auth()->user()->id."_".$permission->id; + $hasPermission = Cache::rememberForever($cache_key_user, function() use($that, $permission) { + return $that->permissions->where('slug', $permission->slug)->count(); + }); + + + return (bool) $hasPermission; + } + + protected function getRoles() { + $that = $this; + return Cache::rememberForever('roles'.auth()->user()->id, function() use($that) { + return $that->roles()->get(); + }); + } + +} \ No newline at end of file diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100755 index 00000000..02732ed5 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,42 @@ +where($column, $operator, $value); + } + + return $this; + }); + + } + + /** + * Register any application services. + * + * @return void + */ + public function register() + { + // + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php new file mode 100755 index 00000000..cc226078 --- /dev/null +++ b/app/Providers/AuthServiceProvider.php @@ -0,0 +1,37 @@ + 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + + // Caching user + Auth::provider('cache-user', function() { + return resolve(CacheUserProvider::class); + }); + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100755 index 00000000..352cce44 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +share('default_academic_year', Cache::get('default_academic_year', 0)); + } + + /** + * Register the service provider. + * + * @return void + */ + public function register() + { + // + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php new file mode 100755 index 00000000..fca6152c --- /dev/null +++ b/app/Providers/EventServiceProvider.php @@ -0,0 +1,32 @@ + [ + 'App\Listeners\EventListener', + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + parent::boot(); + + // + } +} diff --git a/app/Providers/PermissionsServiceProvider.php b/app/Providers/PermissionsServiceProvider.php new file mode 100755 index 00000000..b749acf4 --- /dev/null +++ b/app/Providers/PermissionsServiceProvider.php @@ -0,0 +1,55 @@ +map(function ($permission) { + Gate::define($permission->slug, function ($user) use ($permission) { + // for super admin no need to check permissions + if($user->is_super_admin) { + return true; + } + return $user->hasPermissionTo($permission); + }); + }); + + Blade::directive('role', function ($role) { + return "check() && auth()->user()->hasRole({$role})) : ?>"; + }); + Blade::directive('endrole', function ($role) { + return ""; + }); + + Blade::directive('notrole', function ($role) { + return "check() && !auth()->user()->hasRole({$role})) : ?>"; + }); + Blade::directive('endnotrole', function ($role) { + return ""; + }); + + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + // + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100755 index 00000000..31aec734 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,93 @@ +mapApiRoutes(); + + $this->mapWebRoutes(); + + $this->mapWebSiteRoutes(); + + } + + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + * + * @return void + */ + protected function mapWebRoutes() + { + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + } + + /** + * Define the "web site" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + * + * @return void + */ + protected function mapWebSiteRoutes() + { + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/website.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + * + * @return void + */ + protected function mapApiRoutes() + { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + } +} diff --git a/app/Registration.php b/app/Registration.php new file mode 100755 index 00000000..0389cd34 --- /dev/null +++ b/app/Registration.php @@ -0,0 +1,104 @@ +belongsTo('App\Student', 'student_id'); + } + + public function info() + { + return $this->belongsTo('App\Student', 'student_id'); + } + + public function class() + { + return $this->belongsTo('App\IClass', 'class_id'); + } + + public function section() + { + return $this->belongsTo('App\Section', 'section_id'); + } + + public function acYear() + { + return $this->belongsTo('App\AcademicYear', 'academic_year_id'); + } + + public function attendance() + { + return $this->hasMany('App\StudentAttendance', 'registration_id'); + } + + public function attendanceSingleDay() + { + return $this->hasOne('App\StudentAttendance', 'registration_id'); + } + + public function result() + { + return $this->hasMany('App\Result', 'registration_id'); + } + + public function marks() + { + return $this->hasMany('App\Mark', 'registration_id'); + } + + public function scopeSection($query, $section) + { + if($section){ + return $query->where('section_id', $section); + } + + return $query; + } + + public function scopeCountOrGet($query, $isCount) + { + if($isCount){ + return $query->count(); + } + + return $query->get(); + } + + public function subjects() + { + return $this->belongsToMany('App\Subject','student_subjects', 'registration_id', 'subject_id')->withPivot('subject_type') + ->select('id','name','code','type'); + } +} diff --git a/app/Result.php b/app/Result.php new file mode 100755 index 00000000..3888ce9c --- /dev/null +++ b/app/Result.php @@ -0,0 +1,41 @@ +belongsTo('App\Registration', 'registration_id'); + } + + public function exam() + { + return $this->belongsTo('App\Exam', 'exam_id'); + } +} diff --git a/app/Role.php b/app/Role.php new file mode 100755 index 00000000..531dfa31 --- /dev/null +++ b/app/Role.php @@ -0,0 +1,30 @@ +belongsToMany(Permission::class,'roles_permissions')->withTimestamps(); + } + +} diff --git a/app/Section.php b/app/Section.php new file mode 100755 index 00000000..88d60fb1 --- /dev/null +++ b/app/Section.php @@ -0,0 +1,48 @@ +belongsTo('App\Employee', 'teacher_id'); + } + public function class() + { + return $this->belongsTo('App\IClass', 'class_id'); + } + + public function marks() + { + return $this->hasMany('App\Mark', 'section_id'); + } + + public function student() + { + return $this->hasMany('App\Registration', 'section_id'); + } +} diff --git a/app/SiteMeta.php b/app/SiteMeta.php new file mode 100755 index 00000000..d8451b43 --- /dev/null +++ b/app/SiteMeta.php @@ -0,0 +1,21 @@ +hasMany('App\Registration', 'student_id'); + } + public function getGenderAttribute($value) + { + return Arr::get(AppHelper::GENDER, $value); + } + + public function getReligionAttribute($value) + { + return Arr::get(AppHelper::RELIGION, $value); + } + + public function getBloodGroupAttribute($value) + { + if($value) { + return Arr::get(AppHelper::BLOOD_GROUP, $value); + } + return ""; + } +} diff --git a/app/StudentAttendance.php b/app/StudentAttendance.php new file mode 100755 index 00000000..6c06b092 --- /dev/null +++ b/app/StudentAttendance.php @@ -0,0 +1,59 @@ +belongsTo('App\Registration', 'registration_id'); + } + + public function setAttendanceDateAttribute($value) + { + $this->attributes['attendance_date'] = Carbon::createFromFormat('d/m/Y', $value)->format('Y-m-d'); + } + + public function getAttendanceDateAttribute($value) + { + return Carbon::parse($value)->format('d/m/Y'); + + } + + public function getPresentAttribute($value) + { + return Arr::get(AppHelper::ATTENDANCE_TYPE, $value); + } +} diff --git a/app/Subject.php b/app/Subject.php new file mode 100755 index 00000000..9c67fbd3 --- /dev/null +++ b/app/Subject.php @@ -0,0 +1,81 @@ +belongsToMany('App\Employee','teacher_subjects', 'subject_id', 'teacher_id') + ->select('employees.id','employees.name'); + } + public function class() + { + return $this->belongsTo('App\IClass', 'class_id'); + } + + public function marks() + { + return $this->hasMany('App\Mark', 'subject_id'); + } + + public function getTypeAttribute($value) + { + return Arr::get(AppHelper::SUBJECT_TYPE, $value); + } + + public function scopeIclass($query, $classId) + { + if($classId){ + return $query->where('class_id', $classId); + } + + return $query; + } + + public function scopeSType($query, $subjectType) + { + if($subjectType && is_array($subjectType)){ + return $query->whereIn('type', $subjectType); + } + if($subjectType){ + return $query->where('type', $subjectType); + } + + return $query; + } + + public function students() + { + return $this->belongsToMany('App\Registration','student_subjects', 'subject_id', 'registration_id'); + } + + +} diff --git a/app/TeacherProfile.php b/app/TeacherProfile.php new file mode 100755 index 00000000..7f6bd571 --- /dev/null +++ b/app/TeacherProfile.php @@ -0,0 +1,30 @@ +notify(new ResetPasswordNotification($token)); + } + + public function employee() + { + return $this->hasOne('App\Employee'); + } + + public function student() + { + return $this->hasOne('App\Student'); + } + + public function role() + { + return $this->hasOne('App\UserRole'); + } + + public function teacher() + { + return $this->hasOne('App\Employee'); + } +} diff --git a/app/UserRole.php b/app/UserRole.php new file mode 100755 index 00000000..d78097f9 --- /dev/null +++ b/app/UserRole.php @@ -0,0 +1,35 @@ +hasMany('App\User'); + } + + public function role() + { + return $this->hasMany('App\Role'); + } +} diff --git a/app/commands/Class.php b/app/commands/Class.php deleted file mode 100644 index e288f6f7..00000000 --- a/app/commands/Class.php +++ /dev/null @@ -1,67 +0,0 @@ -getMessage(); - \Log::critical($errorMSG); - return false; - } - - - $rawAtdnData = mb_split('\n', $rawString); - //check if file has content of not - if(count($rawAtdnData)) { - - //now parse data for date wise - $dateWiseData = []; - foreach ($rawAtdnData as $key => $value) { - if (strlen($value)) { - $stringPart = mb_split(':', $value); - $dateWiseData[$stringPart[2]][] = [ - 'empId' => $stringPart[1], - 'time' => $stringPart[3] - ]; - - } - } - - //now process data for one day - foreach ($dateWiseData as $key => $oneDayData) { - //build employee wise data - $empWiseData = []; - foreach ($oneDayData as $data) { - $empWiseData[$data['empId']][] = $data['time']; - } - - $atndDate = $key; - - //now clean employee multiple entry - $cleanEmpWiseData = []; - foreach ($empWiseData as $empId => $entries) { - $entryCount = count($entries); - $inTime = $entries[0]; - $outTime = $entryCount > 1 ? $entries[$entryCount - 1] : $inTime; - $tDiff = strtotime($outTime) - strtotime($inTime); - $hours = number_format(($tDiff / 3600), 2); - $cleanEmpWiseData[$empId] = [ - 'inTime' => $inTime, - 'outTime' => $outTime, - 'workingHours' => $hours - ]; - - } - - //now push back one day data to $dateWiseDate array - $dateWiseData[$atndDate] = $cleanEmpWiseData; - - } - - //ready to insert data to db - //fetch all teacher - $allTeachers = \Teachers::where('isActive', 1)->lists('regNo', 'regNo'); - $totalTeacherInSystem = count($allTeachers); - - if($totalTeacherInSystem) { - foreach ($dateWiseData as $date => $employees) { - $atd = new \DateTime(date('Ymd', strtotime($date))); - $atndDate = $atd->format('Y-m-d'); - //check if this date data exists on db or not - $entryExists = \TeacherAttendance::whereDate('date', '=', $atndDate)->count(); - if (!$entryExists) { - \DB::beginTransaction(); - try { - //now build data array for insert into db table - foreach ($allTeachers as $key => $value) { - if (array_key_exists($key, $employees)) { - $atndData = [ - 'regNo' => $key, - 'date' => $atndDate, - 'dIN_TIME' => date('H:i:s', strtotime($employees[$key]['inTime'])), - 'dOUT_TIME' => date('H:i:s', strtotime($employees[$key]['outTime'])), - 'nWorkingHOUR' => $employees[$key]['workingHours'], - 'vSTATUS' => "P" - ]; - } else { - $atndData = [ - 'regNo' => $key, - 'date' => $atndDate, - 'dIN_TIME' => date('H:i:s', strtotime("000000")), - 'dOUT_TIME' => date('H:i:s', strtotime("000000")), - 'nWorkingHOUR' => 0.00, - 'vSTATUS' => "A" - ]; - } - $atndData['created_at'] = new \DateTime(); - \TeacherAttendance::insert($atndData); - - } - - \DB::commit(); - $msg = "Date '".$atd->format('d/m/Y')."' Total ".$totalTeacherInSystem." entry successfully stored."; - \Log::info($msg); - - }catch (\Exception $e) { - \DB::rollback(); - $msg = "Date '".$atd->format('d/m/Y')."' data insert problem. ".$e->getMessage(); - \Log::error($msg); - } - - - //write log in more entry found rather than db teachear list - $totalTeacherInFile = count($employees); - if($totalTeacherInSystem<$totalTeacherInFile) { - $msg = "Date '".$atd->format('d/m/Y')."' > ".($totalTeacherInFile-$totalTeacherInSystem)." teacher not found in db but found in attendance.txt file!"; - \Log::warning($msg); - } - - } else { - $msg = "Date '".$atd->format('d/m/Y')."' data already exists in the system!"; - \Log::warning($msg); - } - - - - } - } - else{ - \Log::warning("Teachers not found on Database!"); - } - - } - else{ - \Log::warning("File has no contents!"); - } - - - echo "\n========Task Complete========\n"; - } - - /** - * Get the console command arguments. - * - * @return array - */ - protected function getArguments() - { - return array(); - } - - /** - * Get the console command options. - * - * @return array - */ - protected function getOptions() - { - return array(); - } - -} diff --git a/app/composers/ComposerServiceProvider.php b/app/composers/ComposerServiceProvider.php deleted file mode 100644 index e6fce8a4..00000000 --- a/app/composers/ComposerServiceProvider.php +++ /dev/null @@ -1,18 +0,0 @@ -app->view->composer( - "layouts.master", - "SMS\Composers\MasterComposer" - ); - } - -} \ No newline at end of file diff --git a/app/composers/MasterComposer.php b/app/composers/MasterComposer.php deleted file mode 100644 index 224c562c..00000000 --- a/app/composers/MasterComposer.php +++ /dev/null @@ -1,20 +0,0 @@ -with('idc', 'a2912335b89e3cf6ea0034d0abf74f870d2c769f'); - } - -} \ No newline at end of file diff --git a/app/config/app.php b/app/config/app.php deleted file mode 100644 index c40942de..00000000 --- a/app/config/app.php +++ /dev/null @@ -1,203 +0,0 @@ - false, - - /* - |-------------------------------------------------------------------------- - | Application URL - |-------------------------------------------------------------------------- - | - | This URL is used by the console to properly generate URLs when using - | the Artisan command line tool. You should set this to the root of - | your application so that it is used when running Artisan tasks. - | - */ - - 'url' => 'http://school.hrshadhin.me', - - /* - |-------------------------------------------------------------------------- - | Application Timezone - |-------------------------------------------------------------------------- - | - | Here you may specify the default timezone for your application, which - | will be used by the PHP date and date-time functions. We have gone - | ahead and set this to a sensible default for you out of the box. - | - */ - - 'timezone' => 'Asia/Dhaka', - - /* - |-------------------------------------------------------------------------- - | Application Locale Configuration - |-------------------------------------------------------------------------- - | - | The application locale determines the default locale that will be used - | by the translation service provider. You are free to set this value - | to any of the locales which will be supported by the application. - | - */ - - 'locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Application Fallback Locale - |-------------------------------------------------------------------------- - | - | The fallback locale determines the locale to use when the current one - | is not available. You may change the value to correspond to any of - | the language folders that are provided through your application. - | - */ - - 'fallback_locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Encryption Key - |-------------------------------------------------------------------------- - | - | This key is used by the Illuminate encrypter service and should be set - | to a random, 32 character string, otherwise these encrypted strings - | will not be safe. Please do this before deploying an application! - | - */ - - 'key' => 'cdc2a7d592b596df70925f07524eb4e9', - - 'cipher' => MCRYPT_RIJNDAEL_128, - - /* - |-------------------------------------------------------------------------- - | Autoloaded Service Providers - |-------------------------------------------------------------------------- - | - | The service providers listed here will be automatically loaded on the - | request to your application. Feel free to add your own services to - | this array to grant expanded functionality to your applications. - | - */ - - 'providers' => array( - - 'Illuminate\Foundation\Providers\ArtisanServiceProvider', - 'Illuminate\Auth\AuthServiceProvider', - 'Illuminate\Cache\CacheServiceProvider', - 'Illuminate\Session\CommandsServiceProvider', - 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', - 'Illuminate\Routing\ControllerServiceProvider', - 'Illuminate\Cookie\CookieServiceProvider', - 'Illuminate\Database\DatabaseServiceProvider', - 'Illuminate\Encryption\EncryptionServiceProvider', - 'Illuminate\Filesystem\FilesystemServiceProvider', - 'Illuminate\Hashing\HashServiceProvider', - 'Illuminate\Html\HtmlServiceProvider', - 'Illuminate\Log\LogServiceProvider', - 'Illuminate\Mail\MailServiceProvider', - 'Illuminate\Database\MigrationServiceProvider', - 'Illuminate\Pagination\PaginationServiceProvider', - 'Illuminate\Queue\QueueServiceProvider', - 'Illuminate\Redis\RedisServiceProvider', - 'Illuminate\Remote\RemoteServiceProvider', - 'Illuminate\Auth\Reminders\ReminderServiceProvider', - 'Illuminate\Database\SeedServiceProvider', - 'Illuminate\Session\SessionServiceProvider', - 'Illuminate\Translation\TranslationServiceProvider', - 'Illuminate\Validation\ValidationServiceProvider', - 'Illuminate\View\ViewServiceProvider', - 'Illuminate\Workbench\WorkbenchServiceProvider', - 'Way\Generators\GeneratorsServiceProvider', - 'Maatwebsite\Excel\ExcelServiceProvider', - 'Barryvdh\DomPDF\ServiceProvider', - 'Davelip\Queue\DatabaseServiceProvider', - 'SMS\Composers\ComposerServiceProvider', - - ), - - /* - |-------------------------------------------------------------------------- - | Service Provider Manifest - |-------------------------------------------------------------------------- - | - | The service provider manifest is used by Laravel to lazy load service - | providers which are not needed for each request, as well to keep a - | list of all of the services. Here, you may set its storage spot. - | - */ - - 'manifest' => storage_path().'/meta', - - /* - |-------------------------------------------------------------------------- - | Class Aliases - |-------------------------------------------------------------------------- - | - | This array of class aliases will be registered when this application - | is started. However, feel free to register as many as you wish as - | the aliases are "lazy" loaded so they don't hinder performance. - | - */ - - 'aliases' => array( - - 'App' => 'Illuminate\Support\Facades\App', - 'Artisan' => 'Illuminate\Support\Facades\Artisan', - 'Auth' => 'Illuminate\Support\Facades\Auth', - 'Blade' => 'Illuminate\Support\Facades\Blade', - 'Cache' => 'Illuminate\Support\Facades\Cache', - 'ClassLoader' => 'Illuminate\Support\ClassLoader', - 'Config' => 'Illuminate\Support\Facades\Config', - 'Controller' => 'Illuminate\Routing\Controller', - 'Cookie' => 'Illuminate\Support\Facades\Cookie', - 'Crypt' => 'Illuminate\Support\Facades\Crypt', - 'DB' => 'Illuminate\Support\Facades\DB', - 'Eloquent' => 'Illuminate\Database\Eloquent\Model', - 'Event' => 'Illuminate\Support\Facades\Event', - 'File' => 'Illuminate\Support\Facades\File', - 'Form' => 'Illuminate\Support\Facades\Form', - 'Hash' => 'Illuminate\Support\Facades\Hash', - 'HTML' => 'Illuminate\Support\Facades\HTML', - 'Input' => 'Illuminate\Support\Facades\Input', - 'Lang' => 'Illuminate\Support\Facades\Lang', - 'Log' => 'Illuminate\Support\Facades\Log', - 'Mail' => 'Illuminate\Support\Facades\Mail', - 'Paginator' => 'Illuminate\Support\Facades\Paginator', - 'Password' => 'Illuminate\Support\Facades\Password', - 'Queue' => 'Illuminate\Support\Facades\Queue', - 'Redirect' => 'Illuminate\Support\Facades\Redirect', - 'Redis' => 'Illuminate\Support\Facades\Redis', - 'Request' => 'Illuminate\Support\Facades\Request', - 'Response' => 'Illuminate\Support\Facades\Response', - 'Route' => 'Illuminate\Support\Facades\Route', - 'Schema' => 'Illuminate\Support\Facades\Schema', - 'Seeder' => 'Illuminate\Database\Seeder', - 'Session' => 'Illuminate\Support\Facades\Session', - 'SoftDeletingTrait' => 'Illuminate\Database\Eloquent\SoftDeletingTrait', - 'SSH' => 'Illuminate\Support\Facades\SSH', - 'Str' => 'Illuminate\Support\Str', - 'URL' => 'Illuminate\Support\Facades\URL', - 'Validator' => 'Illuminate\Support\Facades\Validator', - 'View' => 'Illuminate\Support\Facades\View', - 'Excel' => 'Maatwebsite\Excel\Facades\Excel', - 'PDF' => 'Barryvdh\DomPDF\Facade', - 'SmsHelper' => 'App\Helpers\AppHelper', - - - ), - -); diff --git a/app/config/auth.php b/app/config/auth.php deleted file mode 100644 index eacbbfae..00000000 --- a/app/config/auth.php +++ /dev/null @@ -1,71 +0,0 @@ - 'eloquent', - - /* - |-------------------------------------------------------------------------- - | Authentication Model - |-------------------------------------------------------------------------- - | - | When using the "Eloquent" authentication driver, we need to know which - | Eloquent model should be used to retrieve your users. Of course, it - | is often just the "User" model but you may use whatever you like. - | - */ - - 'model' => 'User', - - /* - |-------------------------------------------------------------------------- - | Authentication Table - |-------------------------------------------------------------------------- - | - | When using the "Database" authentication driver, we need to know which - | table should be used to retrieve your users. We have chosen a basic - | default value but you may easily change it to any table you like. - | - */ - - 'table' => 'users', - - /* - |-------------------------------------------------------------------------- - | Password Reminder Settings - |-------------------------------------------------------------------------- - | - | Here you may set the settings for password reminders, including a view - | that should be used as your password reminder e-mail. You will also - | be able to set the name of the table that holds the reset tokens. - | - | The "expire" time is the number of minutes that the reminder should be - | considered valid. This security feature keeps tokens short-lived so - | they have less time to be guessed. You may change this as needed. - | - */ - - 'reminder' => array( - - 'email' => 'emails.auth.reminder', - - 'table' => 'password_reminders', - - 'expire' => 60, - - ), - -); diff --git a/app/config/cache.php b/app/config/cache.php deleted file mode 100644 index ce898423..00000000 --- a/app/config/cache.php +++ /dev/null @@ -1,89 +0,0 @@ - 'file', - - /* - |-------------------------------------------------------------------------- - | File Cache Location - |-------------------------------------------------------------------------- - | - | When using the "file" cache driver, we need a location where the cache - | files may be stored. A sensible default has been specified, but you - | are free to change it to any other place on disk that you desire. - | - */ - - 'path' => storage_path().'/cache', - - /* - |-------------------------------------------------------------------------- - | Database Cache Connection - |-------------------------------------------------------------------------- - | - | When using the "database" cache driver you may specify the connection - | that should be used to store the cached items. When this option is - | null the default database connection will be utilized for cache. - | - */ - - 'connection' => null, - - /* - |-------------------------------------------------------------------------- - | Database Cache Table - |-------------------------------------------------------------------------- - | - | When using the "database" cache driver we need to know the table that - | should be used to store the cached items. A default table name has - | been provided but you're free to change it however you deem fit. - | - */ - - 'table' => 'cache', - - /* - |-------------------------------------------------------------------------- - | Memcached Servers - |-------------------------------------------------------------------------- - | - | Now you may specify an array of your Memcached servers that should be - | used when utilizing the Memcached cache driver. All of the servers - | should contain a value for "host", "port", and "weight" options. - | - */ - - 'memcached' => array( - - array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100), - - ), - - /* - |-------------------------------------------------------------------------- - | Cache Key Prefix - |-------------------------------------------------------------------------- - | - | When utilizing a RAM based store such as APC or Memcached, there might - | be other applications utilizing the same cache. So, we'll specify a - | value to get prefixed to all our keys so we can avoid collisions. - | - */ - - 'prefix' => 'laravel', - -); diff --git a/app/config/compile.php b/app/config/compile.php deleted file mode 100644 index d5e55181..00000000 --- a/app/config/compile.php +++ /dev/null @@ -1,18 +0,0 @@ - PDO::FETCH_CLASS, - - /* - |-------------------------------------------------------------------------- - | Default Database Connection Name - |-------------------------------------------------------------------------- - | - | Here you may specify which of the database connections below you wish - | to use as your default connection for all database work. Of course - | you may use many connections at once using the Database library. - | - */ - - 'default' => 'mysql', - - /* - |-------------------------------------------------------------------------- - | Database Connections - |-------------------------------------------------------------------------- - | - | Here are each of the database connections setup for your application. - | Of course, examples of configuring each database platform that is - | supported by Laravel is shown below to make development simple. - | - | - | All database work in Laravel is done through the PHP PDO facilities - | so make sure you have the driver for your particular database of - | choice installed on your machine before you begin development. - | - */ - - 'connections' => array( - - 'sqlite' => array( - 'driver' => 'sqlite', - 'database' => __DIR__.'/../database/production.sqlite', - 'prefix' => '', - ), - - 'mysql' => array( - 'driver' => 'mysql', - 'host' => 'localhost', - 'database' => 'school', - 'username' => '', - 'password' => '', - 'charset' => 'utf8', - 'collation' => 'utf8_unicode_ci', - 'prefix' => '', - ), - - 'pgsql' => array( - 'driver' => 'pgsql', - 'host' => 'localhost', - 'database' => 'forge', - 'username' => 'forge', - 'password' => '', - 'charset' => 'utf8', - 'prefix' => '', - 'schema' => 'public', - ), - - 'sqlsrv' => array( - 'driver' => 'sqlsrv', - 'host' => 'localhost', - 'database' => 'database', - 'username' => 'root', - 'password' => '', - 'prefix' => '', - ), - - ), - - /* - |-------------------------------------------------------------------------- - | Migration Repository Table - |-------------------------------------------------------------------------- - | - | This table keeps track of all the migrations that have already run for - | your application. Using this information, we can determine which of - | the migrations on disk haven't actually been run in the database. - | - */ - - 'migrations' => 'migrations', - - /* - |-------------------------------------------------------------------------- - | Redis Databases - |-------------------------------------------------------------------------- - | - | Redis is an open source, fast, and advanced key-value store that also - | provides a richer set of commands than a typical key-value systems - | such as APC or Memcached. Laravel makes it easy to dig right in. - | - */ - - 'redis' => array( - - 'cluster' => false, - - 'default' => array( - 'host' => '127.0.0.1', - 'port' => 6379, - 'database' => 0, - ), - - ), - -); diff --git a/app/config/local/app.php b/app/config/local/app.php deleted file mode 100644 index 63b88356..00000000 --- a/app/config/local/app.php +++ /dev/null @@ -1,19 +0,0 @@ - true, - 'url' => 'http://l4.school.test', - -); diff --git a/app/config/local/cache.php b/app/config/local/cache.php deleted file mode 100644 index bfc3627e..00000000 --- a/app/config/local/cache.php +++ /dev/null @@ -1,7 +0,0 @@ - 'file', - -); diff --git a/app/config/local/database.php b/app/config/local/database.php deleted file mode 100644 index 1157636a..00000000 --- a/app/config/local/database.php +++ /dev/null @@ -1,47 +0,0 @@ - array( - - 'mysql' => array( - 'driver' => 'mysql', - 'host' => 'localhost', - 'database' => 'c_school_main', - 'username' => 'root', - 'password' => 'toor', - 'charset' => 'utf8', - 'collation' => 'utf8_unicode_ci', - 'prefix' => '', - ), - - 'pgsql' => array( - 'driver' => 'pgsql', - 'host' => 'localhost', - 'database' => 'homestead', - 'username' => 'homestead', - 'password' => 'secret', - 'charset' => 'utf8', - 'prefix' => '', - 'schema' => 'public', - ), - - ), - -); diff --git a/app/config/mail.php b/app/config/mail.php deleted file mode 100644 index 76fd9e4f..00000000 --- a/app/config/mail.php +++ /dev/null @@ -1,124 +0,0 @@ - 'smtp', - - /* - |-------------------------------------------------------------------------- - | SMTP Host Address - |-------------------------------------------------------------------------- - | - | Here you may provide the host address of the SMTP server used by your - | applications. A default option is provided that is compatible with - | the Mailgun mail service which will provide reliable deliveries. - | - */ - - 'host' => 'smtp.mailgun.org', - - /* - |-------------------------------------------------------------------------- - | SMTP Host Port - |-------------------------------------------------------------------------- - | - | This is the SMTP port used by your application to deliver e-mails to - | users of the application. Like the host we have set this value to - | stay compatible with the Mailgun e-mail application by default. - | - */ - - 'port' => 587, - - /* - |-------------------------------------------------------------------------- - | Global "From" Address - |-------------------------------------------------------------------------- - | - | You may wish for all e-mails sent by your application to be sent from - | the same address. Here, you may specify a name and address that is - | used globally for all e-mails that are sent by your application. - | - */ - - 'from' => array('address' => null, 'name' => null), - - /* - |-------------------------------------------------------------------------- - | E-Mail Encryption Protocol - |-------------------------------------------------------------------------- - | - | Here you may specify the encryption protocol that should be used when - | the application send e-mail messages. A sensible default using the - | transport layer security protocol should provide great security. - | - */ - - 'encryption' => 'tls', - - /* - |-------------------------------------------------------------------------- - | SMTP Server Username - |-------------------------------------------------------------------------- - | - | If your SMTP server requires a username for authentication, you should - | set it here. This will get used to authenticate with your server on - | connection. You may also set the "password" value below this one. - | - */ - - 'username' => null, - - /* - |-------------------------------------------------------------------------- - | SMTP Server Password - |-------------------------------------------------------------------------- - | - | Here you may set the password required by your SMTP server to send out - | messages from your application. This will be given to the server on - | connection so that the application will be able to send messages. - | - */ - - 'password' => null, - - /* - |-------------------------------------------------------------------------- - | Sendmail System Path - |-------------------------------------------------------------------------- - | - | When using the "sendmail" driver to send e-mails, we will need to know - | the path to where Sendmail lives on this server. A default path has - | been provided here, which will work well on most of your systems. - | - */ - - 'sendmail' => '/usr/sbin/sendmail -bs', - - /* - |-------------------------------------------------------------------------- - | Mail "Pretend" - |-------------------------------------------------------------------------- - | - | When this option is enabled, e-mail will not actually be sent over the - | web and will instead be written to your application's logs files so - | you may inspect the message. This is great for local development. - | - */ - - 'pretend' => false, - -); diff --git a/app/config/packages/.gitkeep b/app/config/packages/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/config/packages/maatwebsite/excel/cache.php b/app/config/packages/maatwebsite/excel/cache.php deleted file mode 100644 index 6c3005b9..00000000 --- a/app/config/packages/maatwebsite/excel/cache.php +++ /dev/null @@ -1,57 +0,0 @@ - true, - - /* - |-------------------------------------------------------------------------- - | Caching driver - |-------------------------------------------------------------------------- - | - | Set the caching driver - | - | Available methods: - | memory|gzip|serialized|igbinary|discISAM|apc|memcache|temp|wincache|sqlite|sqlite3 - | - */ - 'driver' => 'memory', - - /* - |-------------------------------------------------------------------------- - | Cache settings - |-------------------------------------------------------------------------- - */ - 'settings' => array( - - 'memoryCacheSize' => '32MB', - 'cacheTime' => 600 - - ), - - /* - |-------------------------------------------------------------------------- - | Memcache settings - |-------------------------------------------------------------------------- - */ - 'memcache' => array( - - 'host' => 'localhost', - 'port' => 11211, - - ), - - /* - |-------------------------------------------------------------------------- - | Cache dir (for discISAM) - |-------------------------------------------------------------------------- - */ - - 'dir' => storage_path('cache') - -); \ No newline at end of file diff --git a/app/config/packages/maatwebsite/excel/config.php b/app/config/packages/maatwebsite/excel/config.php deleted file mode 100644 index 72d5d29f..00000000 --- a/app/config/packages/maatwebsite/excel/config.php +++ /dev/null @@ -1,78 +0,0 @@ - array( - 'creator' => 'Maatwebsite', - 'lastModifiedBy' => 'Maatwebsite', - 'title' => 'Spreadsheet', - 'description' => 'Default spreadsheet export', - 'subject' => 'Spreadsheet export', - 'keywords' => 'maatwebsite, excel, export', - 'category' => 'Excel', - 'manager' => 'Maatwebsite', - 'company' => 'Maatwebsite', - ), - - /* - |-------------------------------------------------------------------------- - | Sheets settings - |-------------------------------------------------------------------------- - */ - 'sheets' => array( - - /* - |-------------------------------------------------------------------------- - | Default page setup - |-------------------------------------------------------------------------- - */ - 'pageSetup' => array( - 'orientation' => 'portrait', - 'paperSize' => '9', - 'scale' => '100', - 'fitToPage' => false, - 'fitToHeight' => true, - 'fitToWidth' => true, - 'columnsToRepeatAtLeft' => array('', ''), - 'rowsToRepeatAtTop' => array(0, 0), - 'horizontalCentered' => false, - 'verticalCentered' => false, - 'printArea' => null, - 'firstPageNumber' => null, - ), - ), - - /* - |-------------------------------------------------------------------------- - | Creator - |-------------------------------------------------------------------------- - | - | The default creator of a new Excel file - | - */ - - 'creator' => 'Maatwebsite', - -); diff --git a/app/config/packages/maatwebsite/excel/csv.php b/app/config/packages/maatwebsite/excel/csv.php deleted file mode 100644 index b36deaa9..00000000 --- a/app/config/packages/maatwebsite/excel/csv.php +++ /dev/null @@ -1,31 +0,0 @@ - ',', - - /* - |-------------------------------------------------------------------------- - | Enclosure - |-------------------------------------------------------------------------- - */ - - 'enclosure' => '"', - - /* - |-------------------------------------------------------------------------- - | Line endings - |-------------------------------------------------------------------------- - */ - - 'line_ending' => "\r\n" -); \ No newline at end of file diff --git a/app/config/packages/maatwebsite/excel/export.php b/app/config/packages/maatwebsite/excel/export.php deleted file mode 100644 index c8932e3b..00000000 --- a/app/config/packages/maatwebsite/excel/export.php +++ /dev/null @@ -1,194 +0,0 @@ - true, - - /* - |-------------------------------------------------------------------------- - | Autosize method - |-------------------------------------------------------------------------- - | - | --> PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX - | The default is based on an estimate, which does its calculation based - | on the number of characters in the cell value (applying any calculation - | and format mask, and allowing for wordwrap and rotation) and with an - | "arbitrary" adjustment based on the font (Arial, Calibri or Verdana, - | defaulting to Calibri if any other font is used) and a proportional - | adjustment for the font size. - | - | --> PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT - | The second method is more accurate, based on actual style formatting as - | well (bold, italic, etc), and is calculated by generating a gd2 imagettf - | bounding box and using its dimensions to determine the size; but this - | method is significantly slower, and its accuracy is still dependent on - | having the appropriate fonts installed. - | - */ - 'autosize-method' => PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX, - - /* - |-------------------------------------------------------------------------- - | Auto generate table heading - |-------------------------------------------------------------------------- - | - | If set to true, the array indices (or model attribute names) - | will automatically be used as first row (table heading) - | - */ - 'generate_heading_by_indices' => true, - - /* - |-------------------------------------------------------------------------- - | Auto set alignment on merged cells - |-------------------------------------------------------------------------- - */ - 'merged_cell_alignment' => 'left', - - /* - |-------------------------------------------------------------------------- - | Pre-calculate formulas during export - |-------------------------------------------------------------------------- - */ - 'calculate' => false, - - /* - |-------------------------------------------------------------------------- - | Include Charts during export - |-------------------------------------------------------------------------- - */ - 'includeCharts' => false, - - /* - |-------------------------------------------------------------------------- - | Default sheet settings - |-------------------------------------------------------------------------- - */ - 'sheets' => array( - - /* - |-------------------------------------------------------------------------- - | Default page margin - |-------------------------------------------------------------------------- - | - | 1) When set to false, default margins will be used - | 2) It's possible to enter a single margin which will - | be used for all margins. - | 3) Alternatively you can pass an array with 4 margins - | Default order: array(top, right, bottom, left) - | - */ - 'page_margin' => false, - - /* - |-------------------------------------------------------------------------- - | Value in source array that stands for blank cell - |-------------------------------------------------------------------------- - */ - 'nullValue' => null, - - /* - |-------------------------------------------------------------------------- - | Insert array starting from this cell address as the top left coordinate - |-------------------------------------------------------------------------- - */ - 'startCell' => 'A1', - - /* - |-------------------------------------------------------------------------- - | Apply strict comparison when testing for null values in the array - |-------------------------------------------------------------------------- - */ - 'strictNullComparison' => false - ), - - /* - |-------------------------------------------------------------------------- - | Store settings - |-------------------------------------------------------------------------- - */ - - 'store' => array( - - /* - |-------------------------------------------------------------------------- - | Path - |-------------------------------------------------------------------------- - | - | The path we want to save excel file to - | - */ - 'path' => storage_path('exports'), - - /* - |-------------------------------------------------------------------------- - | Return info - |-------------------------------------------------------------------------- - | - | Whether we want to return information about the stored file or not - | - */ - 'returnInfo' => false - - ), - - /* - |-------------------------------------------------------------------------- - | PDF Settings - |-------------------------------------------------------------------------- - */ - 'pdf' => array( - - /* - |-------------------------------------------------------------------------- - | PDF Drivers - |-------------------------------------------------------------------------- - | Supported: DomPDF, tcPDF, mPDF - */ - 'driver' => 'DomPDF', - - /* - |-------------------------------------------------------------------------- - | PDF Driver settings - |-------------------------------------------------------------------------- - */ - 'drivers' => array( - - /* - |-------------------------------------------------------------------------- - | DomPDF settings - |-------------------------------------------------------------------------- - */ - 'DomPDF' => array( - 'path' => base_path('vendor/dompdf/dompdf/') - ), - - /* - |-------------------------------------------------------------------------- - | tcPDF settings - |-------------------------------------------------------------------------- - */ - 'tcPDF' => array( - 'path' => base_path('vendor/tecnick.com/tcpdf/') - ), - - /* - |-------------------------------------------------------------------------- - | mPDF settings - |-------------------------------------------------------------------------- - */ - 'mPDF' => array( - 'path' => base_path('vendor/mpdf/mpdf/') - ), - ) - ) -); \ No newline at end of file diff --git a/app/config/packages/maatwebsite/excel/filters.php b/app/config/packages/maatwebsite/excel/filters.php deleted file mode 100644 index 27328ef3..00000000 --- a/app/config/packages/maatwebsite/excel/filters.php +++ /dev/null @@ -1,23 +0,0 @@ - array( - 'chunk' => 'Maatwebsite\Excel\Filters\ChunkReadFilter' - ), - - /* - |-------------------------------------------------------------------------- - | Enable certain filters for every file read - |-------------------------------------------------------------------------- - */ - - 'enabled' => array() - -); \ No newline at end of file diff --git a/app/config/packages/maatwebsite/excel/import.php b/app/config/packages/maatwebsite/excel/import.php deleted file mode 100644 index 60181725..00000000 --- a/app/config/packages/maatwebsite/excel/import.php +++ /dev/null @@ -1,170 +0,0 @@ - 'slugged', - - /* - |-------------------------------------------------------------------------- - | First Row with data or heading of data - |-------------------------------------------------------------------------- - | - | If the heading row is not the first row, or the data doesn't start - | on the first row, here you can change the start row. - | - */ - - 'startRow' => 1, - - /* - |-------------------------------------------------------------------------- - | Cell name word separator - |-------------------------------------------------------------------------- - | - | The default separator which is used for the cell names - | Note: only applies to 'heading' settings 'true' && 'slugged' - | - */ - - 'separator' => '_', - - /* - |-------------------------------------------------------------------------- - | Include Charts during import - |-------------------------------------------------------------------------- - */ - - 'includeCharts' => false, - - /* - |-------------------------------------------------------------------------- - | Sheet heading conversion - |-------------------------------------------------------------------------- - | - | Convert headings to ASCII - | Note: only applies to 'heading' settings 'true' && 'slugged' - | - */ - - 'to_ascii' => true, - - /* - |-------------------------------------------------------------------------- - | Import encoding - |-------------------------------------------------------------------------- - */ - - 'encoding' => array( - - 'input' => 'UTF-8', - 'output' => 'UTF-8' - - ), - - /* - |-------------------------------------------------------------------------- - | Calculate - |-------------------------------------------------------------------------- - | - | By default cells with formulas will be calculated. - | - */ - - 'calculate' => true, - - /* - |-------------------------------------------------------------------------- - | Ignore empty cells - |-------------------------------------------------------------------------- - | - | By default empty cells are not ignored - | - */ - - 'ignoreEmpty' => false, - - /* - |-------------------------------------------------------------------------- - | Force sheet collection - |-------------------------------------------------------------------------- - | - | For a sheet collection even when there is only 1 sheets. - | When set to false and only 1 sheet found, the parsed file will return - | a row collection instead of a sheet collection. - | When set to true, it will return a sheet collection instead. - | - */ - 'force_sheets_collection' => false, - - /* - |-------------------------------------------------------------------------- - | Date format - |-------------------------------------------------------------------------- - | - | The format dates will be parsed to - | - */ - - 'dates' => array( - - /* - |-------------------------------------------------------------------------- - | Enable/disable date formatting - |-------------------------------------------------------------------------- - */ - 'enabled' => true, - - /* - |-------------------------------------------------------------------------- - | Default date format - |-------------------------------------------------------------------------- - | - | If set to false, a carbon object will return - | - */ - 'format' => false, - - /* - |-------------------------------------------------------------------------- - | Date columns - |-------------------------------------------------------------------------- - */ - 'columns' => array() - ), - - /* - |-------------------------------------------------------------------------- - | Import sheets by config - |-------------------------------------------------------------------------- - */ - 'sheets' => array( - - /* - |-------------------------------------------------------------------------- - | Example sheet - |-------------------------------------------------------------------------- - | - | Example sheet "test" will grab the firstname at cell A2 - | - */ - - 'test' => array( - - 'firstname' => 'A2' - - ) - - ) - -); \ No newline at end of file diff --git a/app/config/packages/maatwebsite/excel/views.php b/app/config/packages/maatwebsite/excel/views.php deleted file mode 100644 index db0c1c21..00000000 --- a/app/config/packages/maatwebsite/excel/views.php +++ /dev/null @@ -1,163 +0,0 @@ - array( - - /* - |-------------------------------------------------------------------------- - | Table headings - |-------------------------------------------------------------------------- - */ - 'th' => array( - 'font' => array( - 'bold' => true, - 'size' => 12, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Strong tags - |-------------------------------------------------------------------------- - */ - 'strong' => array( - 'font' => array( - 'bold' => true, - 'size' => 12, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Bold tags - |-------------------------------------------------------------------------- - */ - 'b' => array( - 'font' => array( - 'bold' => true, - 'size' => 12, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Italic tags - |-------------------------------------------------------------------------- - */ - 'i' => array( - 'font' => array( - 'italic' => true, - 'size' => 12, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Heading 1 - |-------------------------------------------------------------------------- - */ - 'h1' => array( - 'font' => array( - 'bold' => true, - 'size' => 24, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Heading 2 - |-------------------------------------------------------------------------- - */ - 'h2' => array( - 'font' => array( - 'bold' => true, - 'size' => 18, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Heading 2 - |-------------------------------------------------------------------------- - */ - 'h3' => array( - 'font' => array( - 'bold' => true, - 'size' => 13.5, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Heading 4 - |-------------------------------------------------------------------------- - */ - 'h4' => array( - 'font' => array( - 'bold' => true, - 'size' => 12, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Heading 5 - |-------------------------------------------------------------------------- - */ - 'h5' => array( - 'font' => array( - 'bold' => true, - 'size' => 10, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Heading 6 - |-------------------------------------------------------------------------- - */ - 'h6' => array( - 'font' => array( - 'bold' => true, - 'size' => 7.5, - ) - ), - - /* - |-------------------------------------------------------------------------- - | Hyperlinks - |-------------------------------------------------------------------------- - */ - 'a' => array( - 'font' => array( - 'underline' => true, - 'color' => array('argb' => 'FF0000FF'), - ) - ), - - /* - |-------------------------------------------------------------------------- - | Horizontal rules - |-------------------------------------------------------------------------- - */ - 'hr' => array( - 'borders' => array( - 'bottom' => array( - 'style' => 'thin', - 'color' => array('FF000000') - ), - ) - ) - ) - -); \ No newline at end of file diff --git a/app/config/queue.php b/app/config/queue.php deleted file mode 100644 index 08bdf5fe..00000000 --- a/app/config/queue.php +++ /dev/null @@ -1,91 +0,0 @@ - 'database', - - /* - |-------------------------------------------------------------------------- - | Queue Connections - |-------------------------------------------------------------------------- - | - | Here you may configure the connection information for each server that - | is used by your application. A default configuration has been added - | for each back-end shipped with Laravel. You are free to add more. - | - */ - - 'connections' => array( - - 'sync' => array( - 'driver' => 'sync', - ), - - 'beanstalkd' => array( - 'driver' => 'beanstalkd', - 'host' => 'localhost', - 'queue' => 'default', - 'ttr' => 60, - ), - - 'sqs' => array( - 'driver' => 'sqs', - 'key' => 'your-public-key', - 'secret' => 'your-secret-key', - 'queue' => 'your-queue-url', - 'region' => 'us-east-1', - ), - - 'iron' => array( - 'driver' => 'iron', - 'host' => 'mq-aws-us-east-1.iron.io', - 'token' => 'your-token', - 'project' => 'your-project-id', - 'queue' => 'your-queue-name', - 'encrypt' => true, - ), - - 'redis' => array( - 'driver' => 'redis', - 'queue' => 'default', - ), - - 'database' => array( - 'driver' => 'database', - 'queue' => 'queue-name', // optional, can be null or any string - 'lock_type' => 0, // optional, can be 0, 1 or 2 - ), - - ), - - /* - |-------------------------------------------------------------------------- - | Failed Queue Jobs - |-------------------------------------------------------------------------- - | - | These options configure the behavior of failed queue job logging so you - | can control which database and table are used to store the jobs that - | have failed. You may change them to any database / table you wish. - | - */ - - 'failed' => array( - - 'database' => 'mysql', 'table' => 'failed_jobs', - - ), - -); diff --git a/app/config/remote.php b/app/config/remote.php deleted file mode 100644 index 2169c434..00000000 --- a/app/config/remote.php +++ /dev/null @@ -1,59 +0,0 @@ - 'production', - - /* - |-------------------------------------------------------------------------- - | Remote Server Connections - |-------------------------------------------------------------------------- - | - | These are the servers that will be accessible via the SSH task runner - | facilities of Laravel. This feature radically simplifies executing - | tasks on your servers, such as deploying out these applications. - | - */ - - 'connections' => array( - - 'production' => array( - 'host' => '', - 'username' => '', - 'password' => '', - 'key' => '', - 'keyphrase' => '', - 'root' => '/var/www', - ), - - ), - - /* - |-------------------------------------------------------------------------- - | Remote Server Groups - |-------------------------------------------------------------------------- - | - | Here you may list connections under a single group name, which allows - | you to easily access all of the servers at once using a short name - | that is extremely easy to remember, such as "web" or "database". - | - */ - - 'groups' => array( - - 'web' => array('production') - - ), - -); diff --git a/app/config/services.php b/app/config/services.php deleted file mode 100644 index c8aba2a6..00000000 --- a/app/config/services.php +++ /dev/null @@ -1,31 +0,0 @@ - array( - 'domain' => '', - 'secret' => '', - ), - - 'mandrill' => array( - 'secret' => '', - ), - - 'stripe' => array( - 'model' => 'User', - 'secret' => '', - ), - -); diff --git a/app/config/session.php b/app/config/session.php deleted file mode 100644 index ae343029..00000000 --- a/app/config/session.php +++ /dev/null @@ -1,140 +0,0 @@ - 'file', - - /* - |-------------------------------------------------------------------------- - | Session Lifetime - |-------------------------------------------------------------------------- - | - | Here you may specify the number of minutes that you wish the session - | to be allowed to remain idle before it expires. If you want them - | to immediately expire on the browser closing, set that option. - | - */ - - 'lifetime' => 120, - - 'expire_on_close' => false, - - /* - |-------------------------------------------------------------------------- - | Session File Location - |-------------------------------------------------------------------------- - | - | When using the native session driver, we need a location where session - | files may be stored. A default has been set for you but a different - | location may be specified. This is only needed for file sessions. - | - */ - - 'files' => storage_path().'/sessions', - - /* - |-------------------------------------------------------------------------- - | Session Database Connection - |-------------------------------------------------------------------------- - | - | When using the "database" or "redis" session drivers, you may specify a - | connection that should be used to manage these sessions. This should - | correspond to a connection in your database configuration options. - | - */ - - 'connection' => null, - - /* - |-------------------------------------------------------------------------- - | Session Database Table - |-------------------------------------------------------------------------- - | - | When using the "database" session driver, you may specify the table we - | should use to manage the sessions. Of course, a sensible default is - | provided for you; however, you are free to change this as needed. - | - */ - - 'table' => 'sessions', - - /* - |-------------------------------------------------------------------------- - | Session Sweeping Lottery - |-------------------------------------------------------------------------- - | - | Some session drivers must manually sweep their storage location to get - | rid of old sessions from storage. Here are the chances that it will - | happen on a given request. By default, the odds are 2 out of 100. - | - */ - - 'lottery' => array(2, 100), - - /* - |-------------------------------------------------------------------------- - | Session Cookie Name - |-------------------------------------------------------------------------- - | - | Here you may change the name of the cookie used to identify a session - | instance by ID. The name specified here will get used every time a - | new session cookie is created by the framework for every driver. - | - */ - - 'cookie' => 'laravel_session', - - /* - |-------------------------------------------------------------------------- - | Session Cookie Path - |-------------------------------------------------------------------------- - | - | The session cookie path determines the path for which the cookie will - | be regarded as available. Typically, this will be the root path of - | your application but you are free to change this when necessary. - | - */ - - 'path' => '/', - - /* - |-------------------------------------------------------------------------- - | Session Cookie Domain - |-------------------------------------------------------------------------- - | - | Here you may change the domain of the cookie used to identify a session - | in your application. This will determine which domains the cookie is - | available to in your application. A sensible default has been set. - | - */ - - 'domain' => null, - - /* - |-------------------------------------------------------------------------- - | HTTPS Only Cookies - |-------------------------------------------------------------------------- - | - | By setting this option to true, session cookies will only be sent back - | to the server if the browser has a HTTPS connection. This will keep - | the cookie from being sent to you if it can not be done securely. - | - */ - - 'secure' => false, - -); diff --git a/app/config/testing/cache.php b/app/config/testing/cache.php deleted file mode 100644 index 66a8a39a..00000000 --- a/app/config/testing/cache.php +++ /dev/null @@ -1,20 +0,0 @@ - 'array', - -); diff --git a/app/config/testing/session.php b/app/config/testing/session.php deleted file mode 100644 index 0364b63d..00000000 --- a/app/config/testing/session.php +++ /dev/null @@ -1,21 +0,0 @@ - 'array', - -); diff --git a/app/config/view.php b/app/config/view.php deleted file mode 100644 index 34b8f387..00000000 --- a/app/config/view.php +++ /dev/null @@ -1,31 +0,0 @@ - array(__DIR__.'/../views'), - - /* - |-------------------------------------------------------------------------- - | Pagination View - |-------------------------------------------------------------------------- - | - | This view will be used to render the pagination link output, and can - | be easily customized here to show any view you like. A clean view - | compatible with Twitter's Bootstrap is given to you by default. - | - */ - - 'pagination' => 'pagination::slider-3', - -); diff --git a/app/config/workbench.php b/app/config/workbench.php deleted file mode 100644 index 87c5e387..00000000 --- a/app/config/workbench.php +++ /dev/null @@ -1,31 +0,0 @@ - '', - - /* - |-------------------------------------------------------------------------- - | Workbench Author E-Mail Address - |-------------------------------------------------------------------------- - | - | Like the option above, your e-mail address is used when generating new - | workbench packages. The e-mail is placed in your composer.json file - | automatically after the package is created by the workbench tool. - | - */ - - 'email' => '', - -); diff --git a/app/controllers/.gitkeep b/app/controllers/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/controllers/BaseController.php b/app/controllers/BaseController.php deleted file mode 100644 index fabd32c1..00000000 --- a/app/controllers/BaseController.php +++ /dev/null @@ -1,18 +0,0 @@ -layout)) - { - $this->layout = View::make($this->layout); - } - } - -} diff --git a/app/controllers/DashboardController.php b/app/controllers/DashboardController.php deleted file mode 100644 index 774e5bbb..00000000 --- a/app/controllers/DashboardController.php +++ /dev/null @@ -1,63 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth', array('only'=>array('index'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $error = Session::get('error'); - $success=Session::get('success'); - $tclass = ClassModel::count(); - $tsubject = Subject::count(); - $tstudent=Student::count(); - $totalAttendance = Attendance::groupBy('date')->get(); - $totalExam = Marks::groupBy('exam')->groupBy('subject')->get(); - $book = AddBook::count(); - $total = [ - 'class' =>$tclass, - 'student' =>$tstudent, - 'subject' =>$tsubject, - 'attendance' =>count($totalAttendance), - 'exam' =>count($totalExam), - 'book' => $book - ]; - // //graph data - $monthlyIncome= Accounting::selectRaw('month(date) as month, sum(amount) as amount, year(date) as year') - ->where('type','Income') - ->groupBy('month') - ->get(); - - $monthlyExpences= Accounting::selectRaw('month(date) as month, sum(amount) as amount, year(date) as year') - ->where('type','Expence') - ->groupBy('month') - ->get(); - $incomeTotal = Accounting::where('type','Income') - ->sum('amount'); - $expenceTotal = Accounting::where('type','Expence') - ->sum('amount'); - $incomes=$this->datahelper($monthlyIncome); - $expences=$this->datahelper($monthlyExpences); - $balance = $incomeTotal - $expenceTotal; - return View::Make('dashboard',compact('error','success','total','incomes','expences','balance')); - } - private function datahelper($data) - { - $DataKey = []; - $DataVlaue =[]; - foreach ($data as $d) { - array_push($DataKey,date("F", mktime(0, 0, 0, $d->month, 10)).','.$d->year); - array_push($DataVlaue,$d->amount); - - } - return ["key"=>$DataKey,"value"=>$DataVlaue]; - - } -} diff --git a/app/controllers/HomeController.php b/app/controllers/HomeController.php deleted file mode 100644 index df7da07f..00000000 --- a/app/controllers/HomeController.php +++ /dev/null @@ -1,31 +0,0 @@ -first(); - if(!$institute) - { - $institute=new Institute; - $institute->name="ShanixLab"; - } - return View::make('login',compact('error','institute')); - - } - -} diff --git a/app/controllers/UsersController.php b/app/controllers/UsersController.php deleted file mode 100644 index 3ef8854d..00000000 --- a/app/controllers/UsersController.php +++ /dev/null @@ -1,185 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth', array('only'=>array('show','create','edit','update'))); - $this->beforeFilter('userAccess', array('only'=> array('show','create','edit','update','delete'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function postSignin() - { - if (\Auth::attempt(array('login'=>Input::get('login'), 'password'=>Input::get('password')))) { - $name=Auth::user()->firstname.' '.Auth::user()->lastname; - Session::put('name', $name); - - Session::put('user_session_sha1', AppHelper::getUserSessionHash()); - - - $institute=Institute::select('name')->first(); - - if(!$institute) { - if (Auth::user()->group != "Admin") { - return Redirect::to('/') - ->withInput(Input::all())->with('error', 'Institute Information not setup yet!Please contact administrator.'); - } - else { - $institute=new Institute; - $institute->name="ShanixLab"; - Session::put('inName', $institute->name); - return Redirect::to('/institute')->with('error', 'Please provide institute information!'); - - } - } - else { - Session::put('inName', $institute->name); - Session::put('inNameShort', AppHelper::getShortName($institute->name)); - return Redirect::to('/dashboard')->with('success', 'You are now logged in.'); - } - - } else { - return Redirect::to('/') - ->withInput(Input::all())->with('error', 'Your username/password combination was incorrect'); - - } - - } - - - - public function getLogout() - { - Session::flush(); - \Auth::logout(); - return Redirect::to('/')->with('message', 'Your are now logged out!'); - } - - public function show() - { - $users= User::all(); - $user=array(); - return View::Make('app.users', compact('users', 'user')); - } - public function create() - { - $rules=[ - 'firstname' => 'required', - 'lastname' => 'required', - 'email' => 'required|email', - 'group' => 'required', - 'desc' => 'required', - 'login' => 'required', - 'password' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/users')->withInput(Input::all())->withErrors($validator); - } - else { - - $uexits = User::select('*')->where('email', '=', Input::get('email'))->orwhere('login', '=', Input::get('login'))->get(); - if(count($uexits)>0) { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('deplicate', 'User all ready exists with this email or login'); - return Redirect::to('/users')->withInput(Input::all())->withErrors($errorMessages); - - } - { - $user = new User; - $user->firstname = Input::get('firstname'); - $user->lastname = Input::get('lastname'); - $user->login = Input::get('login'); - $user->desc = Input::get('desc'); - $user->email = Input::get('email'); - $user->group = Input::get('group'); - $user->password = Hash::make(Input::get('password')); - $user->save(); - return Redirect::to('/users')->with("success", "User Created Succesfully."); - } - - - } - } - public function edit($id) - { - $user = User::find($id); - $users= User::all(); - return View::Make('app.users', compact('users', 'user')); - - } - public function update() - { - $rules=[ - 'firstname' => 'required', - 'lastname' => 'required', - 'email' => 'required|email', - 'group' => 'required', - 'desc' => 'required', - 'login' => 'required', - 'password' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/usersedit/'.Input::get('id'))->withErrors($validator); - } - else { - - $uexits = User::select('*')->where('email', '=', Input::get('email'))->first(); - if(count($uexits)>0) { - if ($uexits->id != Input::get('id')) { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('deplicate', 'User all ready exists with this email'); - return Redirect::to('/users')->withInput(Input::all())->withErrors($errorMessages); - } else { - $user = User::find(Input::get('id')); - $user->firstname = Input::get('firstname'); - $user->lastname = Input::get('lastname'); - // $user->login = Input::get('login'); - $user->desc = Input::get('desc'); - $user->email = Input::get('email'); - $user->group = Input::get('group'); - $user->password = Hash::make(Input::get('password')); - $user->save(); - return Redirect::to('/users')->with("success", "User Updated Succesfully."); - } - } - else - { - $user = User::find(Input::get('id')); - $user->firstname = Input::get('firstname'); - $user->lastname = Input::get('lastname'); - // $user->login = Input::get('login'); - $user->desc = Input::get('desc'); - $user->email = Input::get('email'); - $user->group = Input::get('group'); - $user->password = Hash::make(Input::get('password')); - $user->save(); - return Redirect::to('/users')->with("success", "User Updated Succesfully."); - } - - } - } - - public function delete($id) - { - $user= User::find($id); - $user->delete(); - return Redirect::to('/users')->with("success", "User Deleted Succesfully."); - - } -} diff --git a/app/controllers/accountingController.php b/app/controllers/accountingController.php deleted file mode 100644 index 128695a3..00000000 --- a/app/controllers/accountingController.php +++ /dev/null @@ -1,416 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('sectorDelete','incomeDelete','expenceDelete'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function sectors() - { - - $sectors=AccountSector::all(); - $sector = array(); - return View::Make('app.accountsector',compact('sectors','sector')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function sectorCreate() - { - $rules=[ - 'name' => 'required', - 'type' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/accounting/sectors')->withInput(Input::all())->withErrors($validator); - } - else { - $sector = new AccountSector(); - $sector->name= Input::get('name'); - $sector->type=Input::get('type'); - $sector->save(); - return Redirect::to('/accounting/sectors')->with("success","Accounting Sector Created Succesfully."); - - } - } - - - /** - * Store a newly created resource in storage. - * - * @return Response - */ - public function sectorEdit($id) - { - $sectors= AccountSector::all(); - $sector = AccountSector::find($id); - return View::Make('app.accountsector',compact('sectors','sector')); - } - - - /** - * Display the specified resource. - * - * @param int $id - * @return Response - */ - public function sectorUpdate() - { - $rules=[ - 'name' => 'required', - 'type' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/accounting/sectoredit/'.Input::get('id'))->withInput(Input::all())->withErrors($validator); - } - else { - $sector = AccountSector::find(Input::get('id')); - $sector->name= Input::get('name'); - $sector->type=Input::get('type'); - $sector->save(); - return Redirect::to('/accounting/sectors')->with("success","Accounting Sector Updated Succesfully."); - - } - } - - - /** - * Delete the specified resource. - * - * @param int $id - * @return Response - */ - public function sectorDelete($id) - { - $sector = AccountSector::find($id); - $sector->delete(); - return Redirect::to('/accounting/sectors')->with("success","Accounting Sector Deleted Succesfully."); - } - - - public function income() - { - $sectors = AccountSector::select('id','name')->where('type','=','Income')->orderby('id','asc')->get(); - return View::Make('app.accountIncome',compact('sectors')); - - } - public function incomeCreate() - { - $rules=[ - 'name' => 'required', - 'amount' => 'required|between:0,99.99', - 'date' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/accounting/income')->withInput(Input::all())->withErrors($validator); - } - else { - $sectors = Input::get('name'); - $amount = Input::get('amount'); - $date = Input::get('date'); - $desc = Input::get('description'); - $sectorIds= array_keys($sectors); - // $amountIds = array_keys($amount); - //$dateIds = array_keys($date); - $dataToSave = array(); - foreach($sectorIds as $id) - { - if($amount[$id] !=="" && $date[$id] !=="") { - if (is_numeric($amount[$id])) { - $data = array("name" => $sectors[$id], "amount" => $amount[$id], "date" => $date[$id],"description"=>$desc[$id]); - array_push($dataToSave, $data); - }else - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Invalid', 'Amount must be a number.'); - return Redirect::to('/accounting/income')->withInput(Input::all())->withErrors($errorMessages); - } - } - - } - - $counter=0; - foreach($dataToSave as $singleData) - { - $income = new Accounting(); - $income->name = $singleData["name"]; - $income->type="Income"; - $income->amount = $singleData["amount"]; - $income->description = $singleData["description"]; - - $income->date = $this->parseAppDate($singleData["date"]); - $income->save(); - $counter++; - } - - - return Redirect::to('/accounting/income')->with("success",$counter."'s income saved Succesfully."); - - } - - } - public function incomeList() - { - $incomes = array(); - return View::Make('app.accountIncomeView',compact('incomes')); - } - public function incomeListPost() - { - $year = trim(Input::get('year')); - - - $incomes = DB::select(DB::raw("SELECT * FROM accounting WHERE type ='Income' and YEAR(date)='".$year."'")); - return View::Make('app.accountIncomeView',compact('incomes')); - } - - public function incomeEdit($id) - { - $income = Accounting::find($id); - return View::Make('app.accountIncomeEdit',compact('income')); - } - public function incomeUpdate() - { - $rules=[ - 'name' => 'required', - 'amount' => 'required|between:0,99.99', - 'date' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/accounting/incomeedit/'.Input::get('id'))->withErrors($validator); - } - elseif(!is_numeric(Input::get('amount'))) - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Invalid', 'Amount must be a number.'); - return Redirect::to('/accounting/incomeedit/'.Input::get('id'))->withErrors($errorMessages); - } - else { - $income = Accounting::find(Input::get('id')); - $income->amount=Input::get('amount'); - $income->description=Input::get('description'); - $income->date=$this->parseAppDate(Input::get('date')); - $income->save(); - - return Redirect::to('/accounting/incomelist')->with("success","Income Updated Succesfully."); - } - } - public function incomeDelete($id) - { - $income = Accounting::find($id); - $income->delete(); - return Redirect::to('/accounting/incomelist')->with("success","Income Deleted Succesfully."); - } - - public function expence() - { - $sectors = AccountSector::select('id','name')->where('type','=','Expence')->orderby('id','asc')->get(); - return View::Make('app.accountExpence',compact('sectors')); - - } - public function expenceCreate() - { - $rules=[ - 'name' => 'required', - 'amount' => 'required|between:0,99.99', - 'date' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/accounting/expence')->withInput(Input::all())->withErrors($validator); - } - else { - $sectors = Input::get('name'); - $amount = Input::get('amount'); - $date = Input::get('date'); - $desc = Input::get('description'); - $sectorIds= array_keys($sectors); - // $amountIds = array_keys($amount); - //$dateIds = array_keys($date); - $dataToSave = array(); - foreach($sectorIds as $id) - { - if($amount[$id] !=="" && $date[$id] !=="") { - if (is_numeric($amount[$id])) { - $data = array("name" => $sectors[$id], "amount" => $amount[$id], "date" => $date[$id],"description"=>$desc[$id]); - array_push($dataToSave, $data); - }else - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Invalid', 'Amount must be a number.'); - return Redirect::to('/accounting/expence')->withInput(Input::all())->withErrors($errorMessages); - } - } - - } - - $counter=0; - foreach($dataToSave as $singleData) - { - $income = new Accounting(); - $income->name = $singleData["name"]; - $income->type="Expence"; - $income->amount = $singleData["amount"]; - $income->description = $singleData["description"]; - $income->date = $this->parseAppDate($singleData["date"]); - $income->save(); - $counter++; - } - - - return Redirect::to('/accounting/expence')->with("success",$counter."'s Expence saved Succesfully."); - - } - - } - public function expenceList() - { - $expences = array(); - return View::Make('app.accountExpenceView',compact('expences')); - } - public function expenceListPost() - { - $year = trim(Input::get('year')); - - - $expences = DB::select(DB::raw("SELECT * FROM accounting WHERE type ='Expence' and YEAR(date)='".$year."'")); - return View::Make('app.accountExpenceView',compact('expences')); - } - - public function expenceEdit($id) - { - $expence = Accounting::find($id); - return View::Make('app.accountExpenceEdit',compact('expence')); - } - public function expenceUpdate() - { - $rules=[ - 'name' => 'required', - 'amount' => 'required|between:0,99.99', - 'date' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/accounting/expenceedit/'.Input::get('id'))->withErrors($validator); - } - elseif(!is_numeric(Input::get('amount'))) - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Invalid', 'Amount must be a number.'); - return Redirect::to('/accounting/expenceedit/'.Input::get('id'))->withErrors($errorMessages); - } - else { - $income = Accounting::find(Input::get('id')); - $income->amount=Input::get('amount'); - $income->description=Input::get('description'); - $income->date=$this->parseAppDate(Input::get('date')); - $income->save(); - - return Redirect::to('/accounting/expencelist')->with("success","Expence Updated Succesfully."); - } - } - public function expenceDelete($id) - { - $income = Accounting::find($id); - $income->delete(); - return Redirect::to('/accounting/expencelist')->with("success","Expence Deleted Succesfully."); - } - - public function getReport() - { - $formdata=array('',''); - $datas=array(); - return View::Make('app.accountingReport',compact('datas','formdata')); - } - public function printReport($rtype,$fdate,$tdate) - { - - if ($rtype=="" && $fdate=="" && $tdate=="") - { - return Redirect::to('/accounting/report')->with("noresult","Data Not Found!"); - } - else { - - $datas = Accounting::select('name', 'amount', 'date','description')->where('type', '=', $rtype)->where('date', '>=', $fdate)->where('date', '<=', $tdate)->get(); - $total = DB::select(DB::raw("SELECT sum(amount) as total FROM accounting where type='".$rtype."' and date >='".$fdate."' and date <='".$tdate."'")); - - if(count($datas)>0) - { - - $formdata=array($this->getAppdate($fdate),$this->getAppdate($tdate),$rtype); - $institute=Institute::select('*')->first(); - return View::Make('app.accountreportprint', compact('datas','formdata','total','institute')); - } - else{ - echo ' '; - } - - } - } - public function getReportsum() - { - return View::Make('app.accountingReportsum'); - - } - public function printReportsum($fdate,$tdate) - { - if ($fdate=="" && $tdate=="") - { - return Redirect::to('/accounting/reportsum')->with("noresult","Data Not Found!"); - } - else { - - $incomes = Accounting::select('name', 'amount','description', 'date')->where('type', '=', 'Income')->where('date', '>=', $fdate)->where('date', '<=', $tdate)->get(); - $intotal = DB::select(DB::raw("SELECT sum(amount) as total FROM accounting where type='Income' and date >='".$fdate."' and date <='".$tdate."'")); - $expences = Accounting::select('name', 'amount','description', 'date')->where('type', '=', 'Expence')->where('date', '>=', $fdate)->where('date', '<=', $tdate)->get(); - $extotal = DB::select(DB::raw("SELECT sum(amount) as total FROM accounting where type='Expence' and date >='".$fdate."' and date <='".$tdate."'")); - $balance = array($intotal[0]->total-$extotal[0]->total); - - - $formdata=array($this->getAppdate($fdate),$this->getAppdate($tdate)); - $institute=Institute::select('*')->first(); - return View::Make('app.accountreportprintsum', compact('datas','formdata','incomes','expences','intotal','extotal','balance','institute')); - - - } - } - - - - private function parseAppDate($datestr) - { - $date = explode('/', $datestr); - return $date[2].'-'.$date[1].'-'.$date[0]; - } - private function getAppdate($datestr) - { - $date = explode('-', $datestr); - return $date[2].'/'.$date[1].'/'.$date[0]; - } -} diff --git a/app/controllers/admissionController.php b/app/controllers/admissionController.php deleted file mode 100644 index 1b77b3e5..00000000 --- a/app/controllers/admissionController.php +++ /dev/null @@ -1,303 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth', array('only'=>array('applicants','postapplicants','applicantview','payment','delete'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function regonline() - { - $classes = ClassModel::select('name','code')->get(); - - return View::Make('app.admissionForm',compact('classes')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function Postregonline() - { - $rules=['name' => 'required', - 'nationality' => 'required', - 'dob' => 'required', - 'session' => 'required', - 'class' => 'required', - 'photo' => 'required|mimes:png,jpg,jpeg,bmp|max:204800', - 'fatherName' => 'required', - 'fatherCellNo' => 'required', - 'motherName' => 'required', - 'motherCellNo' => 'required', - 'campus' => 'required', - 'keeping' => 'required', - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/regonline')->withInput(Input::all())->withErrors($validator); - } - else { - $refNo=$this->getRefNo(Admission::count()); - $seatNofinal=0; - while (1) { - $seatNo=$this->getSeatNo(Input::get('class')); - $seatNoExits = Admission::select('id')->where('class',Input::get('class')) - ->where('session',trim(Input::get('session')))->where('seatNo',$seatNo)->get(); - if(count($seatNoExits)<1) - { - $seatNofinal=$seatNo; - break; - } - } - $addStd= new Admission(); - $addStd->refNo=$refNo; - $addStd->seatNo=$seatNofinal; - $addStd->transactionNo=""; - $addStd->stdName=Input::get('name'); - $addStd->nationality=Input::get('nationality'); - $addStd->class=Input::get('class'); - $addStd->dob=Input::get('dob'); - $addStd->session=trim(Input::get('session')); - $addStd->campus=Input::get('campus'); - $addStd->keeping=Input::get('keeping'); - $addStd->fatherName=Input::get('fatherName'); - $addStd->fatherCellNo=Input::get('fatherCellNo'); - $addStd->motherName=Input::get('motherName'); - $addStd->motherCellNo=Input::get('motherCellNo'); - $addStd->status="Application Submitted"; - - $fileName=$refNo.'.'.Input::file('photo')->getClientOriginalExtension(); - $addStd->photo=$fileName; - $addStd->save(); - Input::file('photo')->move(base_path() .'/public/admission',$fileName); - return Redirect::to('/regonline')->with("success","Registration for admission is successfull. Please send money to this \"01686305346\" personal bKash number with this referance number \"".$refNo."\""); - - } - -} - -private function getRefNo($rowCount) -{ - $refNo=$rowCount+1; - if(strlen($refNo)==1) - { - $refNo = "00".$refNo; - } - elseif (strlen($refNo)==2) { - $refNo = "0".$refNo; - } - return $refNo; -} -private function getSeatNo($class) -{ - $start=0; - $end =0; - if($class=="cl1") - { - $start=1; - $end=200; - } - else if($class=="cl2") - { - $start=201; - $end=400; - } - else if($class=="cl3") - { - $start=401; - $end=600; - } - else if($class=="cl4") - { - $start=601; - $end=800; - } - else if($class=="cl05") - { - $start=801; - $end=1000; - } - else if($class=="cl6") - { - $start=1001; - $end=1200; - } - else if($class=="cl7") - { - $start=1201; - $end=1400; - } - else if($class=="cl8") - { - $start=1401; - $end=1600; - } - else if($class=="cl9") - { - $start=1601; - $end=1800; - } - else if($class=="cl10") - { - $start=1801; - $end=2000; - } - else if($class=="cl11") - { - $start=2001; - $end=2200; - } - else if($class=="cl12") - { - $start=2201; - $end=2400; - } - else if($class=="cl13") - { - $start=2401; - $end=2600; - } - else if($class=="cl14") - { - $start=2601; - $end=2800; - } - else - { - $start=0; - $end=0; - } - $randRoll =rand ($start,$end); - - return $randRoll; - -} - -public function applicants() -{ - $classes = ClassModel::lists('name','code'); - $formdata = new formfoo; - $formdata->class = ""; - $formdata->session = ""; - $students=array(); - return View::Make('app.applicantList',compact('classes','formdata','students')); - -} - - -public function postapplicants() -{ - - $rules=['session' => 'required','class' => 'required']; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/applicants')->withInput(Input::all())->withErrors($validator); - } - else { - - - $students = DB::table('admission') - ->join('Class', 'admission.class', '=', 'Class.code') - ->select('admission.id', 'admission.refNo', 'admission.seatNo', 'admission.stdName','admission.transactionNo','admission.campus','admission.keeping','admission.status','admission.created_at','Class.Name as class') - ->where('session',trim(Input::get('session')))->where('class',Input::get('class'))->get(); - - - $classes = ClassModel::lists('name','code'); - $formdata = new formfoo; - $formdata->class=Input::get('class'); - $formdata->session=Input::get('session'); - return View::Make('app.applicantList',compact('classes','formdata','students')); - } -} - - - -public function applicantview($id) -{ - $student = DB::table('admission') - ->join('Class', 'admission.class', '=', 'Class.code') - ->select('admission.id', 'admission.refNo', 'admission.seatNo', 'admission.stdName','admission.transactionNo','admission.status','admission.created_at','Class.Name as class' - ,'admission.session','admission.nationality','admission.dob','admission.campus','admission.keeping','admission.fatherName','admission.fatherCellNo','admission.motherName','admission.motherCellNo','admission.photo' - ) - ->where('admission.id',$id)->first(); - - return View::Make('app.applicant',compact('student')); -} - - -/** -* Remove the specified resource from storage. -* -* @param int $id -* @return Response -*/ -public function payment() -{ - $rules=['transactionNo' => 'required']; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/applicants/view/'.Input::get('id'))->withInput(Input::all())->withErrors($validator); - } - else { - $applicant = Admission::find(Input::get('id')); - $applicant->transactionNo = Input::get('transactionNo'); - $applicant->status = "Payment Confirmed"; - $applicant->save(); - $res = array("Info update successfull"); - return $res;//Redirect::to('/applicants/view/'.Input::get('id')); - } -} -public function delete($id) -{ - $applicant = Admission::find($id); - $applicant->delete(); - return Redirect::to('/applicants'); -} - -public function admitcard() -{ - - return View::Make('app.admitcard'); -} -public function printAdmitCard() -{ - $rules=['transactionNo' => 'required','refNo'=>'required']; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/admitcard')->withInput(Input::all())->withErrors($validator); - } - else { - $data = DB::table('admission') - ->join('Class', 'admission.class', '=', 'Class.code') - ->select('admission.id', 'admission.refNo', 'admission.seatNo', 'admission.stdName','admission.transactionNo','admission.status','admission.created_at','Class.Name as class' - ,'admission.session','admission.nationality','admission.dob','admission.campus','admission.fatherName','admission.fatherCellNo','admission.motherName','admission.motherCellNo','admission.photo' - )->where('admission.refNo',Input::get('refNo'))->where('admission.transactionNo',Input::get('transactionNo'))->first(); - if(count($data)>0) - { - //return View::Make('app.printAdmitCard'); - $institute=Institute::select('*')->first(); - $pdf = PDF::loadView('app.printAdmitCard',compact('data','institute')); - return $pdf->stream('admitcard.pdf'); - } - else { - - return Redirect::to('/admitcard')->with("success","Your Admit Card Not Ready Yet!"); - - } - - } -} -} diff --git a/app/controllers/attendanceController.php b/app/controllers/attendanceController.php deleted file mode 100644 index d0247f1b..00000000 --- a/app/controllers/attendanceController.php +++ /dev/null @@ -1,675 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess', array('only'=> array('delete'))); - - } - - public function index() - { - $classes=array(); - $classes2 = ClassModel::select('code', 'name')->orderby('code', 'asc')->get(); - $subjects = Subject::lists('name', 'code'); - $attendance=array(); - return View::Make('app.attendanceCreate', compact('classes2', 'classes', 'subjects', 'attendance')); - } - - public function index_file() - { - return View::Make('app.attendanceCreateFile'); - } - - public function create() - { - $rules = [ - 'class' => 'required', - 'section' => 'required', - 'shift' => 'required', - 'session' => 'required', - 'regiNo' => 'required', - 'date' => 'required', - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/attendance/create')->withInput(Input::all())->withErrors($validator); - } else { - - $absentStudents = array(); - $students = Input::get('regiNo'); - $presents = Input::get('present'); - $all = false; - if ($presents == null) { - $all = true; - } else { - $ids = array_keys($presents); - - } - $stpresent = array(); - - foreach ($students as $student) { - - $st = array(); - $st['regiNo'] = $student; - if ($all) { - $st['status'] = 'No'; - } else { - $st['status'] = $this->checkPresent($student, $ids); - } - if ($st['status'] == "No") { - array_push($absentStudents, $student); - } - else { - array_push($stpresent, $st); - } - } - $presentDate = $this->parseAppDate(Input::get('date')); - DB::beginTransaction(); - try { - foreach ($stpresent as $stp) { - $attenData= [ - 'date' => $presentDate, - 'regiNo' => $stp['regiNo'], - 'created_at' => Carbon::now() - ]; - Attendance::insert($attenData); - - } - DB::commit(); - } catch (\Exception $e) { - DB::rollback(); - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error', 'Something went wrong!'); - return Redirect::to('/attendance/create')->withErrors($errorMessages); - } - //get sms format - //loop absent student and get father's no and send sms - $isSendSMS = Input::get('isSendSMS'); - if ($isSendSMS == null) { - return Redirect::to('/attendance/create')->with("success", "Students attendance save Succesfully."); - - } else { - - if(count($absentStudents) > 0) { - - foreach ($absentStudents as $absst) { - $student= DB::table('Student') - ->join('Class', 'Student.class', '=', 'Class.code') - ->select('Student.regiNo', 'Student.rollNo', 'Student.firstName', 'Student.middleName', 'Student.lastName', 'Student.fatherCellNo', 'Class.Name as class') - ->where('Student.regiNo', '=', $absst) - ->where('class', Input::get('class')) - ->first(); - $msg = "Dear Parents your Child (Name-".$student->firstName." ".$student->middleName." ".$student->lastName.", Class- ".$student->class." , Roll- ".$student->rollNo." ) is Absent in School today."; - // $fatherCellNo = Student::select('fatherCellNo','')->where('regiNo', $absst)->first(); - - $response = $this->sendSMS($student->fatherCellNo, "ShanixLab", $msg); - $smsLog = new SMSLog(); - $smsLog->type = "Attendance"; - $smsLog->sender = "ShanixLab"; - $smsLog->message = $msg; - $smsLog->recipient = $student->fatherCellNo; - $smsLog->regiNo = $absst; - $smsLog->status = $response; - $smsLog->save(); - } - return Redirect::to('/attendance/create')->with("success", "Students attendance saved and " . count($absentStudents) . " sms send to father numbers."); - } - else - { - return Redirect::to('/attendance/create')->with("success", "Students attendance save Succesfully."); - - } - - } - } - } - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create_file() - { - - $file = Input::file('fileUpload'); - $ext = strtolower($file->getClientOriginalExtension()); - - $validator = Validator::make( - array('ext' => $ext), array('ext' => 'in:csv,xls,xlsx') - ); - if ($validator->fails()) { - return Redirect::to('/attendance/create-file')->withErrors($validator); - } else { - try { - $toInsert = 0; - $data = Excel::load( - Input::file('fileUpload'), function ($reader) { - } - )->get(); - - if(!empty($data) && $data->count()) { - DB::beginTransaction(); - try { - foreach ($data->toArray() as $raw) { - - if($raw['date_and_time'] && $raw['personnel_id']) { - $attenData= [ - 'date' => \Carbon\Carbon::createFromFormat('d-m-Y H:i:s', $raw['date_and_time']), - 'regiNo' => $raw['personnel_id'], - 'created_at' => Carbon::now() - ]; - Attendance::insert($attenData); - $toInsert++; - } - } - DB::commit(); - } catch (\Exception $e) { - DB::rollback(); - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error', $e->getMessage()); - return Redirect::to('/attendance/create-file')->withErrors($errorMessages); - - // something went wrong - } - - } - - if($toInsert) { - return Redirect::to('/attendance/create-file')->with("success", $toInsert.' students attendance record upload successfully.'); - } - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Validation', 'File is empty or invalid data! Please follow help note.'); - return Redirect::to('/attendance/create-file')->withErrors($errorMessages); - - } catch (\Exception $e) { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error', $e->getMessage()); - return Redirect::to('/attendance/create-file')->withErrors($errorMessages); - } - } - - } - - - private function sendSMS($number,$sender,$msg) - { - return '[Configure SMS api link !!]'; - - //need to change for production - $phonenumber = $number; - $phonenumber=str_replace('+', '', $phonenumber); - if (strlen($phonenumber)=="11") { - $phonenumber="88".$phonenumber; - } - if (strlen($phonenumber)=="13") { - if (preg_match("/^88017/i", "$phonenumber") or preg_match("/^88016/i", "$phonenumber") or preg_match("/^88015/i", "$phonenumber") or preg_match("/^88011/i", "$phonenumber") or preg_match("/^88018/i", "$phonenumber") or preg_match("/^88019/i", "$phonenumber")) { - - - $myaccount=urlencode("user"); - $mypasswd=urlencode("password"); - $sendBy=urlencode($sender); - $api="http://api_link_here?user=".$myaccount."&password=".$mypasswd."&sender=".$sendBy."&SMSText=".$msg."&GSM=".$phonenumber."&type=longSMS"; - $client = new \Guzzle\Service\Client($api); - // Get your response: - $response = $client->get()->send(); - $status=$response->getBody(true); - if($status=="-5" || $status=="5") { - return $status; - } - - return "SMS SEND"; - - } - else - { - return "Invalid Number"; - } - } - else - { - return "Invalid Number"; - } - } - - private function parseAppDate($datestr) - { - $date = explode('-', $datestr); - return $date[2].'-'.$date[1].'-'.$date[0]; - } - private function checkPresent($regiNo,$ids) - { - - for($i=0;$iclass=""; - $formdata->section=""; - $formdata->shift=""; - $formdata->session=date('Y'); - $formdata->date=date('d-m-Y'); - $classes = ClassModel::select('code', 'name')->orderby('code', 'asc')->get(); - - $attendance=array(); - - - //$formdata["class"]=""; - return View::Make('app.attendanceList', compact('classes', 'attendance', 'formdata')); - } - - public function getlist() - { - - $rules=[ - 'class' => 'required', - 'section' => 'required', - 'shift' => 'required', - 'session' => 'required', - 'date' => 'required', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/attendance/list/')->withErrors($validator); - } - else { - $date = $this->parseAppDate(Input::get('date')); - $attendance = Student::with( - ['attendance' => function ($query) use ($date) { - $query->where('date', '=', $date); - }] - ) - ->where('class', '=', Input::get('class')) - ->where('section', '=', Input::get('section')) - ->Where('shift', '=', Input::get('shift')) - ->where('session', '=', trim(Input::get('session'))) - ->where('isActive', '=', 'Yes') - ->get(); - $formdata = new formfoo; - $formdata->class=Input::get('class'); - $formdata->section=Input::get('section'); - $formdata->shift=Input::get('shift'); - $formdata->session=Input::get('session'); - $formdata->date=Input::get('date'); - $classes2 = ClassModel::select('code', 'name')->orderby('code', 'asc')->lists('name', 'code'); - - return View::Make('app.attendanceList', compact('classes2', 'attendance', 'formdata')); - } - } - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function edit($id) - { - $attendance=DB::table('Attendance') - ->join('Student', 'Attendance.regiNo', '=', 'Student.regiNo') - ->select('Attendance.id', 'Attendance.regiNo', 'Student.rollNo', 'Student.firstName', 'Student.middleName', 'Student.lastName', 'Attendance.status') - ->where('Attendance.id', '=', $id) - ->first(); - return View::Make('app.attendanceEdit', compact('attendance')); - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function update() - { - $attd = Attendance::find(Input::get('id')); - $ispresent = Input::get('ispresent'); - if($ispresent==null) { - $attd->status="No"; - - } - else - { - $attd->status="Yes"; - - } - $attd->save(); - echo ''; - } - - - public function printlist($class,$section,$shift,$session,$date) - { - if($class!="" && $section !="" && $shift !="" && $date) { - $className = ClassModel::select('name')->where('code', $class)->first(); - $date = $this->parseAppDate($date); - $attendance = Student::with( - ['attendance' => function ($query) use ($date) { - $query->where('date', '=', $date); - }] - ) - ->where('class', '=', $class) - ->where('section', '=', $section) - ->Where('shift', '=', $shift) - ->where('session', '=', trim($session)) - ->where('isActive', '=', 'Yes') - ->get(); - $date = $this->parseAppDate($date); - $input =array($className->name,$section,$shift,$session,$date); - $fileName=$className->name.'-'.$section.'-'.$shift.'-'.$section.'-'.$date; - Excel::create( - $fileName, function ($excel) use ($input,$attendance) { - - $excel->sheet( - 'New sheet', function ($sheet) use ($input,$attendance) { - - $sheet->loadView('app.attendanceExcel', compact('attendance', 'input')); - - } - ); - - } - )->download('xlsx'); - // return "true"; - } - else - { - return "Please fill up form correctly!"; - } - } - - public function report() - { - return View::make('app.studentAttendance'); - } - public function getReport() - { - $student= Student::where('regiNo', '=', Input::get('regiNo')) - ->where('Student.isActive', '=', 'Yes') - ->first(); - - if(count($student)>0) { - $student = Student::with('attendance') - ->where('regiNo', '=', Input::get('regiNo')) - ->where('isActive', '=', 'Yes') - ->first(); - $class = ClassModel::where('code', '=', $student->class)->first(); - if(count($student->attendance)>0) { - return View::make('app.stdattendance', compact('student', 'class')); - } - return Redirect::back()->with('noresult', 'Attendance Not Found!'); - - } - return Redirect::back()->with('noresult', 'Student Not Found!'); - - - } - - - public function monthlyReport() - { - - $class = Input::get('class', null); - $section = Input::get('section', null); - $session = trim(Input::get('session', date('Y'))); - $shift = Input::get('shift', null); - $isPrint = Input::get('print_view', null); - $yearMonth = Input::get('yearMonth', date('Y-m')); - - $classes2 = ClassModel::select('code', 'name')->orderby('code', 'asc')->get(); - - - if($isPrint) { - - $myPart = mb_split('-', $yearMonth); - if(count($myPart)!=2) { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error', 'Please don\'t mess with inputs!!!'); - return Redirect::to('/attendance/monthly-report')->withErrors($errorMessages); - } - - - $students = Student::where('class', $class) - ->where('isActive', 'Yes') - ->where('session', $session) - ->where('shift', $shift) - ->where('section', $section) - ->lists('regiNo'); - if(!count($students)) { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error', 'Students not found!'); - return Redirect::to('/attendance/monthly-report')->withErrors($errorMessages); - } - - - //find request month first and last date - $firstDate = $yearMonth."-01"; - $oneMonthEnd = strtotime("+1 month", strtotime($firstDate)); - $lastDate = date('Y-m-d', strtotime("-1 day", $oneMonthEnd)); - - //get holidays of request month - $holiDays = Holidays::where('status', 1) - ->whereDate('holiDate', '>=', $firstDate) - ->whereDate('holiDate', '<=', $lastDate) - ->lists('status', 'holiDate'); - //get holidays of request month - $offDays = ClassOff::where('status', 1) - ->whereDate('offDate', '>=', $firstDate) - ->whereDate('offDate', '<=', $lastDate) - ->lists('oType', 'offDate'); - - //find fridays of requested month - $fridays = []; - $startDate = Carbon::parse($firstDate)->next(Carbon::FRIDAY); // Get the first friday. - $endDate = Carbon::parse($lastDate); - - for ($date = $startDate; $date->lte($endDate); $date->addWeek()) { - $fridays[$date->format('Y-m-d')] = 1; - } - - //get class info - $classInfo = ClassModel::where('code', $class)->first(); - $className = $classInfo->name; - - - $SelectCol = self::getSelectColumns($myPart[0], $myPart[1]); - $fullSql ="SELECT CONCAT(MAX(s.firstName),' ',MAX(s.middleName),' ',MAX(s.lastName)) as name, -CAST(MAX(s.rollNo) as UNSIGNED) as rollNo,".$SelectCol." FROM Attendance as sa left join Student as s ON sa.regiNo=s.regiNo"; - $fullSql .=" WHERE sa.regiNo IN(".implode(',', $students).") GROUP BY sa.regiNo ORDER BY rollNo;"; - $data = DB::select($fullSql); - // return $data; - $keys = array_keys((array)$data[0]); - // return $data; - $institute=Institute::select('*')->first(); - if(!count($institute)) { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error', 'Please setup institute information!'); - return Redirect::to('/attendance/monthly-report')->withErrors($errorMessages); - } - - return View::Make('app.attendanceMonthlyReport', compact('institute', 'data', 'keys', 'yearMonth', 'fridays', 'holiDays', 'className', 'section', 'session', 'shift', 'offDays')); - - } - return View::Make('app.attendanceMonthly', compact('yearMonth', 'classes2')); - } - - private static function getSelectColumns($year,$month) - { - $start_date = "01-".$month."-".$year; - $start_time = strtotime($start_date); - - $end_time = strtotime("+1 month", $start_time); - $selectCol = ""; - for($i=$start_time; $i<$end_time; $i+=86400) - { - $d = date('Y-m-d', $i); - $selectCol .= "MAX(IF(date = '".$d."', 1, 0)) AS '".$d."',"; - } - if(strlen($selectCol)) { - $selectCol = substr($selectCol, 0, -1); - } - - return $selectCol; - } - - /* - * class off day manage codes gores below - * - */ - /** - * Display a listing of the resource. - * - * @return Response - */ - public function classOffIndex() - { - - $offdays = ClassOff::where('status', 1)->get(); - return View::Make('app.class_off_days', compact('offdays')); - } - - - - - /** - * Store the form for creating a new resource. - * - * @return Response - */ - public function classOffStore() - { - - $rules=[ - 'offDate' => 'required', - 'oType' => 'required', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/class-off')->withErrors($validator); - } - else { - - $offDateStart = \Carbon\Carbon::createFromFormat('d/m/Y', Input::get('offDate')); - $offDateEnd = null; - if(strlen(Input::get('offDateEnd'))) { - $offDateEnd = \Carbon\Carbon::createFromFormat('d/m/Y', Input::get('offDateEnd')); - } - - $offList = []; - $desc = Input::get('description'); - $oType = Input::get('oType'); - - - - if($offDateEnd) { - if($offDateEnd<$offDateStart) { - $messages = $validator->errors(); - $messages->add('Wrong Input!', 'Date End can\'t be less than start date!'); - return Redirect::to('/class-off')->withErrors($messages)->withInput(); - } - - $start_time = strtotime($offDateStart); - $end_time = strtotime($offDateEnd); - for($i=$start_time; $i<=$end_time; $i+=86400) - { - $offList[] = [ - 'offDate' => date('Y-m-d', $i), - 'created_at' => \Carbon\Carbon::now(), - 'updated_at' => \Carbon\Carbon::now(), - 'description' => $desc, - 'oType' => $oType, - 'status' => 1 - ]; - - } - - } - else{ - $offList[] = [ - 'offDate' => $offDateStart->format('Y-m-d'), - 'created_at' => \Carbon\Carbon::now(), - 'updated_at' => \Carbon\Carbon::now(), - 'description' => $desc, - 'oType' => $oType, - 'status' => 1 - ]; - } - - ClassOff::insert($offList); - - return Redirect::to('/class-off')->with("success", "Class off entry added."); - - - } - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - // public function workOutsideUpdate($id,$status) - // { - // - // $leave = Leaves::where('status',1)->where('id',$id)->first(); - // if(!$leave){ - // return Redirect::to('/leaves')->with("error","Leave not found!"); - // - // } - // $leave->status= $status; - // $leave->save(); - // - // return Redirect::to('/leaves')->with("success","Leave updated succesfully."); - // - // - // } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function classOffDelete($id) - { - $classOff = ClassOff::where('status', 1)->where('id', $id)->first(); - - if(!$classOff) { - return Redirect::to('/class-off')->with("error", "Class off entry not found!"); - - } - $classOff->status= 0; - $classOff->save(); - - return Redirect::to('/class-off')->with("success", "Class off entry deleted successfully."); - } - -} diff --git a/app/controllers/barcodeController.php b/app/controllers/barcodeController.php deleted file mode 100644 index 5e48ab86..00000000 --- a/app/controllers/barcodeController.php +++ /dev/null @@ -1,76 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('index','generate'))); - } - - public function index() - { - return View::Make('app.barcodeform'); - - } - /** - * Display a listing of the resource. - * POST /barcode - * - * @return Response - */ - public function generate() - { - $rules=[ - 'code' => 'required|min:10|max:10' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/barcode')->withErrors($validator); - } - else { - try { - $generator = new \Picqer\Barcode\BarcodeGeneratorPNG(); - $code=Input::get('code'); - - $barcodesc1=array(); - for($i=1;$i<15;$i++) - { - - $img=base64_encode($generator->getBarcode($code, $generator::TYPE_CODE_128)); - $barcode = array("img"=>$img,"code"=>strval($code)); - array_push($barcodesc1,$barcode); - $code+=1; - } - $barcodesc2=array(); - for($i=1;$i<15;$i++) - { - - $img=base64_encode($generator->getBarcode($code, $generator::TYPE_CODE_128)); - - $barcode = array("img"=>$img,"code"=>strval($code)); - array_push($barcodesc2,$barcode); - $code+=1; - } - $barcodesc3=array(); - for($i=1;$i<15;$i++) - { - - $img=base64_encode($generator->getBarcode($code, $generator::TYPE_CODE_128)); - - $barcode = array("img"=>$img,"code"=>strval($code)); - array_push($barcodesc3,$barcode); - $code+=1; - } - - return View::Make('app.barcode',compact('barcodesc1','barcodesc2','barcodesc3')); - - } catch (Exception $e) { - $validator->errors()->add('Invalid', 'Please give valid number.'); - return Redirect::to('/barcode')->withErrors($validator); - } - } - - } -} diff --git a/app/controllers/classController.php b/app/controllers/classController.php deleted file mode 100644 index f3aa6fb9..00000000 --- a/app/controllers/classController.php +++ /dev/null @@ -1,139 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('delete'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - return View::Make('app.classCreate'); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create() - { - $rules=[ - 'name' => 'required', - 'code' => 'required|max:20', - 'description' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/class/create')->withErrors($validator); - } - else { - - $clcode = 'cl'.Input::get('code'); - $cexists=ClassModel::select('*')->where('code','=',$clcode)->get(); - if(count($cexists)>0){ - - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('deplicate', 'Class all ready exists!!'); - return Redirect::to('/class/create')->withErrors($errorMessages); - } - else { - $class = new ClassModel; - $class->name = Input::get('name'); - $class->code = $clcode; - $class->description = Input::get('description'); - $class->combinePass = Input::has('combinePass') ? 1 : 0; - $class->save(); - return Redirect::to('/class/create')->with("success", "Class Created Succesfully."); - } - - } - - } - - - /** - * Store a newly created resource in storage. - * - * @return Response - */ - public function show() - { - $Classes = ClassModel::orderby('code','asc')->get(); - return View::Make('app.classList',compact('Classes')); - } - - - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function edit($id) - { - $class = ClassModel::find($id); - return View::Make('app.classEdit',compact('class')); - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function update() - { - $rules=[ - 'name' => 'required', - 'description' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/class/edit/'.Input::get('id'))->withErrors($validator); - } - else { - $class = ClassModel::find(Input::get('id')); - $class->name= Input::get('name'); - $class->description=Input::get('description'); - $class->combinePass = Input::has('combinePass') ? 1 : 0; - $class->save(); - return Redirect::to('/class/list')->with("success","Class Updated Succesfully."); - - } - } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function delete($id) - { - $class = ClassModel::find($id); - $class->delete(); - return Redirect::to('/class/list')->with("success","Class Deleted Succesfully."); - } - - public function getSubjects($class) - { - $subjects = Subject::select('name','code')->where('class',$class)->orderby('code','asc')->get(); - return $subjects; - } - -} diff --git a/app/controllers/dormitoryController.php b/app/controllers/dormitoryController.php deleted file mode 100644 index 74de73d8..00000000 --- a/app/controllers/dormitoryController.php +++ /dev/null @@ -1,364 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('delete','stddelete'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $dormitories=Dormitory::all(); - $dormitory=array(); - return View::Make('app.dormitory',compact('dormitories','dormitory')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create() - { - $rules=[ - 'name' => 'required', - 'numOfRoom' => 'required|integer', - 'address' => 'required', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/dormitory')->withErrors($validator); - } - else { - $dormitory = new Dormitory; - $dormitory->name= Input::get('name'); - $dormitory->numOfRoom=Input::get('numOfRoom'); - $dormitory->address=Input::get('address'); - $dormitory->description=Input::get('description'); - $dormitory->save(); - return Redirect::to('/dormitory')->with("success","Dormitory Created Succesfully."); - - } - } - - - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function edit($id) - { - $dormitory = Dormitory::find($id); - $dormitories=Dormitory::all(); - return View::Make('app.dormitory',compact('dormitories','dormitory')); - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function update() - { - - $rules=[ - 'name' => 'required', - 'numOfRoom' => 'required|integer', - 'address' => 'required', - - ]; - - - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/dormitory/edit/'.Input::get('id'))->withErrors($validator); - } - else { - $dormitory = Dormitory::find(Input::get('id')); - $dormitory->name= Input::get('name'); - $dormitory->numOfRoom=Input::get('numOfRoom'); - $dormitory->address=Input::get('address'); - $dormitory->description=Input::get('description'); - $dormitory->save(); - return Redirect::to('/dormitory')->with("success","Dormitory update Succesfully."); - - } - } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function delete($id) - { - $dormitory = Dormitory::find($id); - $dormitory->delete(); - return Redirect::to('/dormitory')->with("success","Dormitory deleted Succesfully."); - } - - - //student assign to dormitory part goes Here - public function stdindex() - { - $classes = ClassModel::select('code','name')->orderby('code','asc')->get(); - $dormitories = Dormitory::select('id','name')->orderby('id','asc')->get(); - return View::Make('app.dormitory_stdadd',compact('classes','dormitories')); - } - - - public function stdcreate() - { - $rules=[ - 'regiNo' => 'required', - 'joinDate' => 'required', - 'isActive' => 'required', - 'dormitory' => 'required', - 'roomNo' => 'required', - 'monthlyFee' => 'required|numeric', - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/dormitory/assignstd')->withErrors($validator); - } - else { - $dormStd = new DormitoryStudent; - $dormStd->regiNo=Input::get('regiNo'); - $dormStd->joinDate=Input::get('joinDate'); - $dormStd->dormitory=Input::get('dormitory'); - $dormStd->roomNo=Input::get('roomNo'); - $dormStd->monthlyFee=Input::get('monthlyFee'); - $dormStd->isActive=Input::get('isActive'); - $dormStd->save(); - return Redirect::to('/dormitory/assignstd')->with("success","Student added to dormitory Succesfully."); - - } - } - - public function stdShow() - { - - $dormitories = Dormitory::lists('name','id'); - $students=array(); - $formdata = new formfoo(); - $formdata->dormitory=1; - return View::Make('app.dormitory_stdlist',compact('students','dormitories','formdata')); - } - public function poststdShow() - { - $rules = ['dormitory' => 'required',]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/dormitory/assignstd/list')->withInput(Input::all())->withErrors($validator); - } - else { - $students = DB::table('Student') - ->join('Class', 'Student.class', '=', 'Class.code') - ->join('dormitory_student', 'Student.regiNo', '=', 'dormitory_student.regiNo') - ->select('dormitory_student.id', 'Student.regiNo', 'Student.rollNo', 'Student.firstName', 'Student.middleName', 'Student.lastName', 'Student.fatherName', 'Student.motherName', 'Student.fatherCellNo', 'Student.motherCellNo', 'Student.localGuardianCell', - 'Class.Name as class','dormitory_student.roomNo', 'dormitory_student.monthlyFee','dormitory_student.joinDate','dormitory_student.leaveDate','dormitory_student.isActive') - ->where('dormitory_student.dormitory',Input::get('dormitory')) - ->get(); - $dormitories = Dormitory::lists('name','id'); - $formdata = new formfoo(); - $formdata->dormitory=Input::get('dormitory'); - return View::Make('app.dormitory_stdlist',compact('students','dormitories','formdata')); - } - } - public function stdedit($id) - { - $student = DormitoryStudent::find($id); - $dormitories=Dormitory::lists('name','id'); - return View::Make('app.dormitory_stdedit',compact('dormitories','student')); - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function stdupdate() - { - - $rules=[ - 'isActive' => 'required', - 'dormitory' => 'required', - 'roomNo' => 'required', - 'monthlyFee' => 'required|numeric', - - ]; - - - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/dormitory/assignstd/edit/'.Input::get('id'))->withErrors($validator); - } - else { - $dormStd = DormitoryStudent::find(Input::get('id')); - if(Input::get('leaveDate')!=""){ - $dormStd->leaveDate=Input::get('leaveDate'); - } - - $dormStd->dormitory=Input::get('dormitory'); - $dormStd->roomNo=Input::get('roomNo'); - $dormStd->monthlyFee=Input::get('monthlyFee'); - $dormStd->isActive=Input::get('isActive'); - $dormStd->save(); - return Redirect::to('/dormitory/assignstd/list')->with("success","Dormitory student info update Succesfully."); - - } - } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function stddelete($id) - { - $dormstd = DormitoryStudent::find($id); - $dormstd->delete(); - return Redirect::to('/dormitory/assignstd/list')->with("success","Dormitory student deleted Succesfully."); - } - - public function getstudents($dormid) - { - $students = DB::table('Student') - ->join('dormitory_student', 'Student.regiNo', '=', 'dormitory_student.regiNo') - ->select('Student.regiNo', 'Student.rollNo', 'Student.firstName', 'Student.middleName', 'Student.lastName') - ->where('dormitory_student.dormitory',$dormid) - ->where('dormitory_student.isActive',"Yes") - ->orderby('dormitory_student.regiNo','asc')->get(); - return $students; - } - public function feeinfo($regiNo) - { - $fee = DormitoryStudent::select('monthlyFee') - ->where('regiNo',$regiNo) - ->get(); - - $isPaid= DB::table('dormitory_fee') - ->select('regiNo','feeAmount') - ->where('regiNo',$regiNo) - ->whereRaw('EXTRACT(YEAR_MONTH FROM feeMonth) = EXTRACT(YEAR_MONTH FROM NOW())') - ->get(); - - $info=array($fee[0]->monthlyFee); - if(count($isPaid)>0) - { - array_push($info,"true"); - } - else { - array_push($info,"false"); - } - return $info; - } - - public function feeindex() - { - $dormitories=Dormitory::select('name','id')->orderby('id','asc')->get(); - return View::Make('app.dormitory_fee',compact('dormitories')); - } - public function feeadd() - { - $rules=[ - 'regiNo' => 'required', - 'feeMonth' => 'required', - 'feeAmount' => 'required', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/dormitory/fee')->withErrors($validator); - } - else { - $dormFee = new DormitoryFee; - $dormFee->regiNo=Input::get('regiNo'); - $dormFee->feeMonth=Input::get('feeMonth'); - $dormFee->feeAmount=Input::get('feeAmount'); - $dormFee->save(); - return Redirect::to('/dormitory/fee')->with("success","Fee added Succesfully."); - - } - } - - public function reportstd() - { - $dormitories=Dormitory::select('name','id')->orderby('id','asc')->get(); - return View::Make('app.dormitory_rptstd',compact('dormitories')); - } - public function reportstdprint($dormId) - { - $datas = DB::table('Student') - ->join('Class', 'Student.class', '=', 'Class.code') - ->join('dormitory_student', 'Student.regiNo', '=', 'dormitory_student.regiNo') - ->select('dormitory_student.id', 'Student.regiNo', 'Student.rollNo', 'Student.firstName', 'Student.middleName', 'Student.lastName', 'Student.fatherName', 'Student.motherName', 'Student.fatherCellNo', 'Student.motherCellNo', 'Student.localGuardianCell', - 'Class.Name as class','dormitory_student.roomNo','Student.section','Student.session' ) - ->where('dormitory_student.dormitory',$dormId) - ->where('dormitory_student.isActive',"Yes") - ->get(); - $dormInfo = Dormitory::find($dormId); - $institute=Institute::select('*')->first(); - $rdata =array('date'=>date('d/m/Y'),'name'=>$dormInfo->name,'totalr'=>$dormInfo->numOfRoom,'totals'=>count($datas)); - $pdf = PDF::loadView('app.dormitory_rptstdprint',compact('datas','rdata','institute')); - return $pdf->stream('dormitory-students-List.pdf'); - } - public function reportfee() - { - $dormitories=Dormitory::select('name','id')->orderby('id','asc')->get(); - return View::Make('app.dormitory_rptfee',compact('dormitories')); - } - public function reportfeeprint($dormId,$month) - { - - $myquery="SELECT a.regiNo,a.roomNo,CONCAT(b.firstName,' ',b.middleName,' ',b.lastName) as name,c.name as class,'Paid' as isPaid FROM dormitory_student a - JOIN Student b ON a.regiNo=b.regiNo - JOIN Class c ON c.code=b.class - where a.dormitory=".$dormId." - and EXISTS (select b.feeMonth from dormitory_fee b where b.regiNo=a.regiNo and EXTRACT(YEAR_MONTH FROM b.feeMonth) = EXTRACT(YEAR_MONTH FROM '".$month."')) - - UNION SELECT a.regiNo,a.roomNo,CONCAT(b.firstName,' ',b.middleName,' ',b.lastName) as name,c.name as class,'Due' as isPaid FROM dormitory_student a - JOIN Student b ON a.regiNo=b.regiNo - JOIN Class c ON c.code=b.class - WHERE a.dormitory=".$dormId." - and NOT EXISTS (select b.feeMonth from dormitory_fee b where b.regiNo=a.regiNo and EXTRACT(YEAR_MONTH FROM b.feeMonth) = EXTRACT(YEAR_MONTH FROM '".$month."')) - ORDER BY regiNo"; - - $datas = DB::select(DB::raw($myquery)); - - - - $dormInfo = Dormitory::find($dormId); - $institute=Institute::select('*')->first(); - - $rdata =array('month'=>date('F-Y', strtotime($month)),'name'=>$dormInfo->name,'total'=>count($datas)); - $pdf = PDF::loadView('app.dormitory_rptfeeprint',compact('datas','rdata','institute')); - return $pdf->stream('dormitory-free-report.pdf'); - } -} diff --git a/app/controllers/feesController.php b/app/controllers/feesController.php deleted file mode 100644 index 47f9b9bc..00000000 --- a/app/controllers/feesController.php +++ /dev/null @@ -1,383 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('getDelete','stdfeesdelete'))); - } - public function getsetup() - { - - $classes = ClassModel::select('code','name')->orderby('code','asc')->get(); - return View::Make('app.feesSetup',compact('classes')); - } - - /** - * Store a newly created resource in storage. - * - * @return Response - */ - public function postSetup() - { - $rules=[ - - 'class' => 'required', - 'type' => 'required', - 'fee' => 'required|numeric', - 'title' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - - if ($validator->fails()) - { - return Redirect::to('/fees/setup')->withErrors($validator); - } - else { - - $fee = new FeeSetup(); - - - $fee->class = Input::get('class'); - $fee->type = Input::get('type'); - $fee->title = Input::get('title'); - $fee->fee = Input::get('fee'); - $fee->Latefee = Input::get('Latefee'); - $fee->description = Input::get('description'); - $fee->save(); - return Redirect::to('/fees/setup')->with("success","Fee Save Succesfully."); - - - } - } - - - - - public function getList() - { - $fees=array(); - $classes = ClassModel::lists('name','code'); - - $formdata = new formfoo; - $formdata->class=""; - return View::Make('app.feeList',compact('classes','formdata','fees')); - } - /** - * Display the specified resource. - * - * @param int $id - * @return Response - */ - public function postList() - { - $rules=[ - - 'class' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - - if ($validator->fails()) - { - return Redirect::to('/fees/list')->withErrors($validator); - } - else { - - $fees = FeeSetup::select("*")->where('class',Input::get('class'))->get(); - $classes = ClassModel::lists('name','code'); - $formdata = new formfoo; - $formdata->class=Input::get('class'); - return View::Make('app.feeList',compact('classes','formdata','fees')); - - - - } - } - - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function getEdit($id) - { - $classes = ClassModel::lists('name','code'); - $fee = FeeSetup::find($id); - return View::Make('app.feeEdit',compact('fee','classes')); - - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function postEdit() - { - $rules=[ - - 'class' => 'required', - 'type' => 'required', - 'fee' => 'required|numeric', - 'title' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - - if ($validator->fails()) - { - return Redirect::to('/fee/edit/'.Input::get('id'))->withErrors($validator); - } - else { - - $fee = FeeSetup::find(Input::get('id')); - $fee->class = Input::get('class'); - $fee->type = Input::get('type'); - $fee->title = Input::get('title'); - $fee->fee = Input::get('fee'); - $fee->Latefee = Input::get('Latefee'); - $fee->description = Input::get('description'); - $fee->save(); - return Redirect::to('/fees/list')->with("success","Fee Updated Succesfully."); - - - } - } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function getDelete($id) - { - $fee = FeeSetup::find($id); - $fee->delete(); - return Redirect::to('/fees/list')->with("success","Fee Deleted Succesfully."); - } - public function getCollection() - { - $classes = ClassModel::select('code','name')->orderby('code','asc')->get(); - return View::Make('app.feeCollection',compact('classes')); - } - public function postCollection() - { - - $rules=[ - - 'class' => 'required', - 'student' => 'required', - 'date' => 'required', - 'paidamount' => 'required', - 'dueamount' => 'required', - 'ctotal' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - - if ($validator->fails()) - { - return Redirect::to('/fee/collection')->withInput(Input::all())->withErrors($validator); - } - else { - try { - $feeTitles = Input::get('gridFeeTitle'); - $feeAmounts = Input::get('gridFeeAmount'); - $feeLateAmounts = Input::get('gridLateFeeAmount'); - $feeTotalAmounts = Input::get('gridTotal'); - $feeMonths = Input::get('gridMonth'); - $counter = count($feeTitles); - if($counter>0) - { - $rows = FeeCol::count(); - if($rows<9) - { - $billId='B00'.($rows+1); - } - else if($rows<100) - { - $billId='B0'.($rows+1); - } - else { - $billId='B'.($rows+1); - } - DB::transaction(function() use ($billId,$counter,$feeTitles,$feeAmounts,$feeLateAmounts,$feeTotalAmounts,$feeMonths) - { - $feeCol = new FeeCol(); - $feeCol->billNo=$billId; - $feeCol->class=Input::get('class'); - $feeCol->regiNo=Input::get('student'); - $feeCol->payableAmount=Input::get('ctotal'); - $feeCol->paidAmount=Input::get('paidamount'); - $feeCol->dueAmount=Input::get('dueamount'); - $feeCol->payDate=Input::get('date'); - $feeCol->save(); - - for ($i=0;$i<$counter;$i++) { - $feehistory = new FeeHistory(); - $feehistory->billNo=$billId; - $feehistory->title=$feeTitles[$i]; - $feehistory->fee=$feeAmounts[$i]; - $feehistory->lateFee=$feeLateAmounts[$i]; - $feehistory->total=$feeTotalAmounts[$i]; - $feehistory->month=$feeMonths[$i]; - $feehistory->save(); - - } - }); - return Redirect::to('/fee/collection')->with("success","Fee collection succesfull."); - } - else { - $messages = $validator->errors(); - $messages->add('Validator!', 'Please add atlest one fee!!!'); - return Redirect::to('/fee/collection')->withInput(Input::all())->withErrors($messages); - - } - } - catch(\Exception $e) - { - - return Redirect::to('/fee/collection')->withErrors( $e->getMessage())->withInput(); - } - - } - } - - public function getListjson($class,$type) - { - $fees= FeeSetup::select('id','title')->where('class','=',$class)->where('type','=',$type)->get(); - return $fees; - } - public function getFeeInfo($id) - { - $fee= FeeSetup::select('fee','Latefee')->where('id','=',$id)->get(); - return $fee; - } - - public function getDue($class,$stdId) - { - $due = FeeCol::select(DB::RAW('IFNULL(sum(payableAmount),0)- IFNULL(sum(paidAmount),0) as dueamount')) - ->where('class',$class) - ->where('regiNo',$stdId) - ->first(); - return $due->dueamount; - - } - public function stdfeeview() - { - $classes = ClassModel::lists('name','code'); - $student = new studentfdata; - $student->class=""; - $student->section=""; - $student->shift=""; - $student->session=""; - $student->regiNo=""; - $fees=array(); - return View::Make('app.feeviewstd',compact('classes','student','fees')); - } - public function stdfeeviewpost() - { - $classes = ClassModel::lists('name','code'); - $student = new studentfdata; - $student->class=Input::get('class'); - $student->section=Input::get('section'); - $student->shift=Input::get('shift'); - $student->session=Input::get('session'); - $student->regiNo=Input::get('student'); - $fees=DB::Table('stdBill') - ->select(DB::RAW("billNo,payableAmount,paidAmount,dueAmount,DATE_FORMAT(payDate,'%D %M,%Y') AS date")) - ->where('class',Input::get('class')) - ->where('regiNo',Input::get('student')) - ->get(); - $totals = FeeCol::select(DB::RAW('IFNULL(sum(payableAmount),0) as payTotal,IFNULL(sum(paidAmount),0) as paiTotal,(IFNULL(sum(payableAmount),0)- IFNULL(sum(paidAmount),0)) as dueamount')) - ->where('class',Input::get('class')) - ->where('regiNo',Input::get('student')) - ->first(); - - return View::Make('app.feeviewstd',compact('classes','student','fees','totals')); - } - public function stdfeesdelete($billNo) - { - try { - DB::transaction(function() use ($billNo) - { - FeeCol::where('billNo',$billNo)->delete(); - FeeHistory::where('billNo',$billNo)->delete(); - - }); - return Redirect::to('/fees/view')->with("success","Fees deleted succesfull."); - } - catch(\Exception $e) - { - - return Redirect::to('/fees/view')->withErrors( $e->getMessage())->withInput(); - } - - } - public function reportstd($regiNo) - { - - $datas=DB::Table('stdBill') - ->select(DB::RAW("payableAmount,paidAmount,dueAmount,DATE_FORMAT(payDate,'%D %M,%Y') AS date")) - ->where('regiNo',$regiNo) - ->get(); - $totals = FeeCol::select(DB::RAW('IFNULL(sum(payableAmount),0) as payTotal,IFNULL(sum(paidAmount),0) as paiTotal,(IFNULL(sum(payableAmount),0)- IFNULL(sum(paidAmount),0)) as dueamount')) - ->where('regiNo',$regiNo) - ->first(); - $stdinfo=DB::table('Student') - ->join('Class', 'Student.class', '=', 'Class.code') - ->select('Student.regiNo', 'Student.rollNo', 'Student.firstName', 'Student.middleName', 'Student.lastName', - 'Student.section','Student.shift','Student.session','Class.Name as class') - ->where('Student.regiNo',$regiNo) - ->first(); - $institute=Institute::select('*')->first(); - $rdata =array('payTotal'=>$totals->payTotal,'paiTotal'=>$totals->paiTotal,'dueAmount'=>$totals->dueamount); - $pdf = PDF::loadView('app.feestdreportprint',compact('datas','rdata','stdinfo','institute')); - return $pdf->stream('student-Payments.pdf'); - - } - public function report() - { - return View::Make('app.feesreport'); - } - public function reportprint($sDate,$eDate) - { - $datas= FeeCol::select(DB::RAW('IFNULL(sum(payableAmount),0) as payTotal,IFNULL(sum(paidAmount),0) as paiTotal,(IFNULL(sum(payableAmount),0)- IFNULL(sum(paidAmount),0)) as dueamount')) - ->whereDate('created_at', '>=', date($sDate)) - ->whereDate('created_at', '<=', date($eDate)) - ->first(); - $institute=Institute::select('*')->first(); - $rdata =array('sDate'=>$this->getAppdate($sDate),'eDate'=>$this->getAppdate($eDate)); - $pdf = PDF::loadView('app.feesreportprint',compact('datas','rdata','institute')); - return $pdf->stream('fee-collection-report.pdf'); - } - - public function billDetails($billNo) - { - $billDeatils = FeeHistory::select("*") - ->where('billNo',$billNo) - ->get(); - return $billDeatils; - } - private function parseAppDate($datestr) - { - $date = explode('/', $datestr); - return $date[2].'-'.$date[1].'-'.$date[0]; - } - private function getAppdate($datestr) - { - $date = explode('-', $datestr); - return $date[2].'/'.$date[1].'/'.$date[0]; - } -} diff --git a/app/controllers/gpaController.php b/app/controllers/gpaController.php deleted file mode 100644 index 1452b7fb..00000000 --- a/app/controllers/gpaController.php +++ /dev/null @@ -1,124 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('index','edit','create','update','delete'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $gpaes=GPA::all(); - $gpa = array(); - return View::Make('app.GPA',compact('gpaes','gpa')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create() - { - $rules=[ - 'for' => 'required', - 'gpa' => 'required', - 'grade' => 'required|numeric', - 'markfrom' => 'required|integer', - 'markto' => 'required|integer', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/gpa')->withErrors($validator); - } - else { - $gpa = new GPA; - $gpa->for= Input::get('for'); - $gpa->gpa= Input::get('gpa'); - $gpa->grade=Input::get('grade'); - $gpa->markfrom=Input::get('markfrom'); - $gpa->markto=Input::get('markto'); - $gpa->save(); - return Redirect::to('/gpa')->with("success","GPA Created Succesfully."); - - } - } - - - - - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function edit($id) - { - - $gpa = GPA::find($id); - $gpaes=GPA::all(); - return View::Make('app.GPA',compact('gpaes','gpa')); - - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function update() - { - $rules=[ - 'for' => 'required', - 'gpa' => 'required', - 'grade' => 'required|between:0,99.99', - 'markfrom' => 'required|integer', - 'markto' => 'required|integer', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/gpa/edit/'.Input::get('id'))->withErrors($validator); - } - else { - $gpa = GPA::find(Input::get('id')); - $gpa->for= Input::get('for'); - $gpa->gpa= Input::get('gpa'); - $gpa->grade=Input::get('grade'); - $gpa->markfrom=Input::get('markfrom'); - $gpa->markto=Input::get('markto'); - $gpa->save(); - return Redirect::to('/gpa')->with("success","GPA update Succesfully."); - - } - } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function delete($id) - { - $gpa = GPA::find($id); - $gpa->delete(); - return Redirect::to('/gpa')->with("success","GPA deleted Succesfully."); - - } -} diff --git a/app/controllers/gradesheetController.php b/app/controllers/gradesheetController.php deleted file mode 100644 index 402a16cb..00000000 --- a/app/controllers/gradesheetController.php +++ /dev/null @@ -1,904 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth',array('except' => array('searchpub','postsearchpub','printsheet'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $formdata = new formfoo; - $formdata->class=""; - $formdata->section=""; - $formdata->shift=""; - $formdata->exam=""; - $formdata->session=""; - $students=array(); - $classes = ClassModel::lists('name','code'); - - return View::Make('app.gradeSheet',compact('classes','formdata','students')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function stdlist() - { - $rules=[ - 'class' => 'required', - 'section' => 'required', - 'exam' => 'required', - 'session' => 'required' - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - $formdata = new formfoo; - $formdata->class=Input::get('class'); - $formdata->section=Input::get('section'); - $formdata->exam=Input::get('exam'); - $formdata->session=Input::get('session'); - - return Redirect::to('/gradesheet')->withErrors($validator); - } - else { - - $ispubl = DB::table('MeritList') - ->select('regiNo') - ->where('class','=',Input::get('class')) - ->where('session','=',trim(Input::get('session'))) - ->where('exam','=',Input::get('exam')) - ->get(); - if(count($ispubl)>0) { - $classes = ClassModel::lists('name', 'code'); - $students = DB::table('Student') - ->join('Marks', 'Student.regiNo', '=', 'Marks.regiNo') - ->select(DB::raw('DISTINCT(Student.regiNo)'), 'Student.rollNo', 'Student.firstName', 'Student.middleName', 'Student.lastName', 'Student.group', 'Marks.shift', 'Marks.class', 'Marks.section') - ->where('Student.isActive', '=', 'Yes') - ->where('Student.class', '=', Input::get('class')) - ->where('Marks.class', '=', Input::get('class')) - ->where('Marks.section', '=', Input::get('section')) - ->where('Marks.session', '=', trim(Input::get('session'))) - ->where('Marks.exam', '=', Input::get('exam')) - ->get(); - - $formdata = new formfoo; - $formdata->class = Input::get('class'); - $formdata->section = Input::get('section'); - $formdata->session = Input::get('session'); - $formdata->exam = Input::get('exam'); - $formdata->postclass = array_get($classes, Input::get('class')); - - return View::Make('app.gradeSheet', compact('classes', 'formdata', 'students')); - } - else - { - return Redirect::to('/gradesheet')->withInput()->with("noresult", "Results Not Published Yet!"); - } - - - } - } - - public function gradeCalculator($point,$gparules) - { - $grade=0; - foreach ($gparules as $gpa) { - if ($point >= $gpa->grade){ - $grade=$gpa->gpa; - break; - } - } - return $grade; - } - public function pointCalculator($marks,$gparules) - { - - $point=0; - foreach ($gparules as $gpa) { - - - if ($marks >= $gpa->markfrom){ - $point=$gpa->grade; - break; - } - } - - return $point; - } - public function gpaCalculator($marks,$gparules) - { - $gpacal= array(); - - foreach ($gparules as $gpa) { - if ($marks >= $gpa->markfrom){ - $gpacal[0]=$gpa->grade; - $gpacal[1]=$gpa->gpa; - break; - } - } - return $gpacal; - } - /** - * Store a newly created resource in storage. - * - * @return Response - */ - public function printsheet($regiNo,$exam,$class) - { - - $student= DB::table('Student') - ->join('Class', 'Student.class', '=', 'Class.code') - ->select( 'Student.regiNo','Student.rollNo','Student.dob', 'Student.firstName','Student.middleName','Student.lastName','Student.fatherName', - 'Student.motherName', 'Student.group','Student.shift','Student.class as classcode','Class.Name as class','Student.section','Student.session', - 'Student.extraActivity','Student.fourthSubject','Student.cphsSubject') - ->where('Student.regiNo','=',$regiNo) - ->where('Student.class','=',$class) - ->where('Student.isActive', '=', 'Yes') - ->first(); - - if(count($student)>0) { - $merit = DB::table('MeritList') - ->select('regiNo', 'grade', 'point', 'totalNo') - ->where('exam', $exam) - ->where('class', $class) - ->where('session', trim($student->session)) -// ->where('regiNo',$regiNo) - ->orderBy('point', 'DESC') - ->orderBy('totalNo', 'DESC')->get(); - if (count($student) < 1 || count($merit) < 1) { - return Redirect::back()->with('noresult', 'Result Not Found!'); - } else { - $meritdata = new Meritdata(); - $position = 0; - foreach ($merit as $m) { - $position++; - if ($m->regiNo === $regiNo) { - $meritdata->regiNo = $m->regiNo; - $meritdata->point = $m->point; - $meritdata->grade = $m->grade; - $meritdata->position = $position; - $meritdata->totalNo = $m->totalNo; - break; - } - } - - //sub group need to implement - $subjects = Subject::where('class', '=', $student->classcode)->get(); - //get class information - $requestedClass = ClassModel::where('code',$student->classcode)->first(); - - $overallSubject = array(); - $subcollection = array(); - - $banglatotal = 0; - $banglatotalhighest = 0; - $banglaArray = array(); - $blextra = array(); - - $englishtotal = 0; - $englishtotalhighest = 0; - $englishArray = array(); - $enextra = array(); - - $totalHighest = 0; - $isBanglaFail=false; - $isEnglishFail=false; - - //2 paper written and mcq pass check - $banglaWritten = 0; - $banglaMcq = 0; - $bnTotalExamMarks = 0; - $bnWrittenPass = 0; - $bnMcqPass = 0; - - $englishWritten = 0; - $englishMcq = 0; - $enTotalExamMarks = 0; - $enWrittenPass = 0; - $enMcqPass = 0; - - - foreach ($subjects as $subject) { - $submarks = Marks::select('written', 'mcq', 'practical', 'ca', 'total', 'point', 'grade')->where('regiNo', '=', $student->regiNo) - ->where('subject', '=', $subject->code)->where('exam', '=', $exam)->where('class', '=', $class)->first(); - $maxMarks = Marks::select(DB::raw('max(total) as highest'))->where('class', '=', $class)->where('session', '=', $student->session) - ->where('subject', '=', $subject->code)->where('exam', '=', $exam)->first(); - - $submarks["highest"] = $maxMarks->highest; - $submarks["subcode"] = $subject->code; - $submarks["subname"] = $subject->name; - - - if ($this->getSubGroup($subjects, $subject->code) === "Bangla") { - - //check if this class have combine pass - if($requestedClass->combinePass){ - $subInfo = self::getSubjectInfo($subjects,$subject->code); - $bnTotalExamMarks += $subInfo->totalfull; - $bnWrittenPass += $subInfo->wpass; - $bnMcqPass += $subInfo->mpass; - - $banglaWritten += $submarks->written; - $banglaMcq += $submarks->mcq; - - $banglatotal += $submarks->total; - $banglatotalhighest += $submarks->highest; - - $bangla = array($submarks->subcode, $submarks->subname, $submarks->written, $submarks->mcq, $submarks->ca, $submarks->practical); - array_push($banglaArray, $bangla); - - } - else{ - // these are safe code if user make mistake in add subject - $totalHighest += $maxMarks->highest; - array_push($subcollection, $submarks); - - } - - - } - else if ($this->getSubGroup($subjects, $subject->code) === "English") { - //check if this class have combine pass - if($requestedClass->combinePass){ - $subInfo = self::getSubjectInfo($subjects,$subject->code); - $enTotalExamMarks += $subInfo->totalfull; - $enWrittenPass += $subInfo->wpass; - $enMcqPass += $subInfo->mpass; - - $englishWritten += $submarks->written; - $englishMcq += $submarks->mcq; - - $englishtotal += $submarks->total; - $englishtotalhighest += $submarks->highest; - - $english = array($submarks->subcode, $submarks->subname, $submarks->written, $submarks->mcq, $submarks->ca, $submarks->practical); - array_push($englishArray, $english); - } - else{ - // these are safe code if user make mistake in add subject - $totalHighest += $maxMarks->highest; - array_push($subcollection, $submarks); - } - - } - else { - - //check if 4th subject - if ($subject->type === "Electives") { - - //if this is student 4th subject or student main subject by exchange - if($student->fourthSubject == $subject->code || $student->cphsSubject == $subject->code ){ - $totalHighest += $maxMarks->highest; - array_push($subcollection, $submarks); - } - } - else{ - $totalHighest += $maxMarks->highest; - array_push($subcollection, $submarks); - } - } - - - } - - //check two paper pass - //check written and mcq 2 papers additional pass or not. - $gparules = GPA::select('gpa', 'grade', 'markfrom')->where('for',"1")->get(); - $subgrpbl = false; - $subgrpen = false; - if($requestedClass->combinePass){ - $subgrpbl = true; - $subgrpen = true; - - //let's do calculation for bangla - if ($banglaWritten < $bnWrittenPass) { - $isBanglaFail = true; - } - if ($bnMcqPass && $banglaMcq < $bnMcqPass) { - $isBanglaFail = true; - } - - //now combine subject marks round policy - // and grading - $blt=0.00; - if($banglatotal>0) { - if ($bnTotalExamMarks >= 200) { - $blt = round($banglatotal / 2); - } - else { - $blt = round($banglatotal / 1.5); - } - } - - $totalHighest += $banglatotalhighest; - $gcal = $this->gpaCalculator($blt, $gparules); - - array_push($blextra, $banglatotal); - array_push($blextra, $banglatotalhighest); - - - if($isBanglaFail) - { - array_push($blextra, "0.00"); - array_push($blextra, "F"); - } - else { - array_push($blextra, number_format($gcal[0],2)); - array_push($blextra, $gcal[1]); - } - - - //let's do calculation for english - if($englishWritten < $enWrittenPass){ - $isEnglishFail = true; - } - if($enMcqPass && $englishMcq < $enMcqPass){ - $isEnglishFail = true; - } - - //now combine subject marks round policy - // and grading - $enmarks=0.00; - //for exception handle - if($englishtotal>0) { - if ($enTotalExamMarks >= 200) { - $enmarks = round($englishtotal / 2); - } - else { - $enmarks = round($englishtotal / 1.5); - } - } - - $totalHighest += $englishtotalhighest; - $gcal = $this->gpaCalculator($enmarks, $gparules); - array_push($enextra, $englishtotal); - array_push($enextra, $englishtotalhighest); - if($isEnglishFail) - { - array_push($enextra, "0.00"); - array_push($enextra, "F"); - - } - else { - array_push($enextra, number_format($gcal[0],2)); - array_push($enextra, $gcal[1]); - - } - - - } - - - - - $extra = array($exam, $subgrpbl, $totalHighest, $subgrpen, $student->extraActivity); - $query="select left(MONTHNAME(STR_TO_DATE(m, '%m')),3) as month, count(regiNo) AS present from ( select 01 as m union all select 02 union all select 03 union all select 04 union all select 05 union all select 06 union all select 07 union all select 08 union all select 09 union all select 10 union all select 11 union all select 12 ) as months LEFT OUTER JOIN Attendance ON MONTH(Attendance.date)=m and Attendance.regiNo ='".$regiNo."' GROUP BY m"; - $attendance=DB::select(DB::RAW($query)); - return View::Make('app.stdgradesheet', compact('student', 'extra', 'meritdata', 'subcollection', 'blextra', 'banglaArray', 'enextra', 'englishArray','attendance')); - - } - } - else - { - //echo "

Result Not Found

"; - return Redirect::back()->with('noresult','Result Not Found!'); - - } - } - - - public function getgenerate() - { - $classes = ClassModel::lists('name','code'); - return View::Make('app.resultgenerate',compact('classes')); - } - - public function getSubGroup($subjects,$subject) - { - $group=""; - foreach($subjects as $sub) - { - if($sub->code===$subject) - { - $group=$sub->subgroup; - break; - - } - } - return $group; - } - public function getSubjectTotalno($subjects,$subject) - { - $total=""; - foreach($subjects as $sub) - { - if($sub->code===$subject) - { - $total=$sub->totalfull; - break; - - } - } - return $total; - } - - public function postgenerate() - { - $rules = [ - 'class' => 'required', - 'exam' => 'required', - 'session' => 'required' - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - - return Redirect::to('/result/generate')->withErrors($validator)->withInput(); - } else { - $isGenerated=DB::table('MeritList') - ->select('regiNo') - ->where('class', '=', Input::get('class')) - ->where('session', '=', trim(Input::get('session'))) - ->where('exam', '=', Input::get('exam')) - ->get(); - if(!count($isGenerated)) - { - //get all subjects - $subjects = Subject::where('class', '=', Input::get('class'))->get(); - - //get all section for this requested class - $sectionsHas = Student::select('section')->where('class', '=', Input::get('class'))->where('session', trim(Input::get('session')))->where('isActive', '=', 'Yes')->distinct()->orderBy('section', 'asc')->get(); - - //get all section that submitted marks - $sectionMarksSubmit = Marks::select('section')->where('class', '=', Input::get('class'))->where('session', trim(Input::get('session')))->where('exam',Input::get('exam'))->distinct()->get(); - - - //check is all section marks submitted for this requested class? - if (count($sectionsHas)==count($sectionMarksSubmit)) - { - $isAllSubSectionMarkSubmit =false; - $notSubSection=[]; - - //go for check, that all sections all subject mark has submitted or not - foreach ($sectionsHas as $section) { - //get submitted subject for this section - $marksubmit = Marks::select('subject')->where('class', '=', Input::get('class'))->where('section',$section->section)->where('session', trim(Input::get('session')))->where('exam',Input::get('exam'))->distinct()->get(); - - //check is subjects and submited marks subject is equal or not - if(count($subjects) == count($marksubmit)) - { - $isAllSubSectionMarkSubmit =true; - continue; - } - else{ - $notSubSection[] = $section->section; - $isAllSubSectionMarkSubmit = false; - } - } - - // all section marks submitted??? - if ($isAllSubSectionMarkSubmit) { - - //collect 4th subjects - $fourthsubjectCodes = []; - foreach ($subjects as $subject) { - if ($subject->type === "Electives") { - $fourthsubjectCodes[] = $subject->code; - } - } - - //get all students for this session - $students = Student::select('regiNo')->where('class', '=', Input::get('class'))->where('session', '=', trim(Input::get('session'))) - ->where('isActive', '=', 'Yes')->get(); - - //get class information - $requestedClass = ClassModel::where('code',Input::get('class'))->first(); - - if (count($students) != 0) { - //get marks submitted students - $marksSubmitStudents=Marks::select('Marks.regiNo') - ->join('Student', 'Marks.regiNo', '=', 'Student.regiNo') - ->where('Student.isActive', '=', 'Yes') - ->where('Student.class', '=', Input::get('class')) - ->where('Marks.class', '=', Input::get('class')) - ->where('Marks.session', '=', trim(Input::get('session'))) - ->where('Marks.exam', '=', Input::get('exam')) - ->distinct() - ->get(); - - //check total students and submitted marks students is equal or not ?? - if(count($students)==count($marksSubmitStudents)) - { - //get gpa rules for final grade calculation - $gparules = GPA::select('gpa', 'grade', 'markfrom')->where('for',"1")->get(); - - $foobar = array(); - - //loop through all students - foreach ($students as $student) { - - $marks = Marks::where('regiNo', '=', $student->regiNo) - ->where('exam', '=', Input::get('exam')) - ->where('class', '=', Input::get('class')) - ->where('session', '=', trim(Input::get('session'))) - ->get(); - - $totalpoint = 0; - $totalmarks = 0; - - //subject counter for final grade calculation - $subcounter = 0; - - $banglamark = 0; - $englishmark = 0; - - $bnTotalExamMarks = 0; - $bnWrittenPass = 0; - $bnMcqPass = 0; - $banglaWritten = 0; - $banglaMcq = 0; - $banglaSBA = 0; - - $enTotalExamMarks = 0; - $enWrittenPass = 0; - $enMcqPass = 0; - $englishWritten = 0; - $englishMcq = 0; - $englishSBA = 0; - - $isfail = false; - - foreach ($marks as $mark) { - - if ($this->getSubGroup($subjects, $mark->subject) === "Bangla") { - - //check if this class have combine pass - if($requestedClass->combinePass){ - $subInfo = self::getSubjectInfo($subjects,$mark->subject); - $bnTotalExamMarks += $subInfo->totalfull; - - $bnWrittenPass += $subInfo->wpass; - $bnMcqPass += $subInfo->mpass; - - $banglaWritten += $mark->written; - $banglaMcq += $mark->mcq; - $banglaSBA += $mark->ca; - - $banglamark += $mark->total; - - } - else{ - // these are safe code if user make mistake in add subject - if($mark->grade=="F") - { - $isfail = true; - } - - $totalmarks += $mark->total; - $totalpoint += $mark->point; - } - - } else if ($this->getSubGroup($subjects, $mark->subject) === "English") { - //check if this class have combine pass - if($requestedClass->combinePass){ - $subInfo = self::getSubjectInfo($subjects,$mark->subject); - $enTotalExamMarks += $subInfo->totalfull; - - $enWrittenPass += $subInfo->wpass; - $enMcqPass += $subInfo->mpass; - - $englishWritten += $mark->written; - $englishMcq += $mark->mcq; - $englishSBA += $mark->ca; - - $englishmark += $mark->total; - } - else{ - // these are safe code if user make mistake in add subject - if($mark->grade=="F") - { - $isfail = true; - } - - $totalmarks += $mark->total; - $totalpoint += $mark->point; - } - -// - } else { - - //subject counter for final grade calculation - $subcounter++; - - //check if 4th subject - if (in_array($mark->subject,$fourthsubjectCodes)) { - //check if it is student fourth subject and have more point - if ($mark->subject == $student->fourthSubject && $mark->point >= 2.00) { - // add point above 2.00 - $totalpoint += ($mark->point - 2); - - //subject counter for final grade calculation - $subcounter--; - - } - //check if it is student exchange main subject - if ($mark->subject == $student->cphsSubject) { - //check if fail - if($mark->grade=="F") - { - $isfail = true; - } - $totalpoint += $mark->point; - - } - - $totalmarks += $mark->total; - - - } else { - - //check if it is student fourth subject and have more point - if ($mark->subject == $student->fourthSubject) { - if($mark->point >= 2.00) { - // add point above 2.00 - $totalpoint += ($mark->point - 2); - } - //subject counter for final grade calculation - $subcounter--; - } - else{ - //check if fail - if($mark->grade=="F") - { - $isfail = true; - } - $totalpoint += $mark->point; - } - - $totalmarks += $mark->total; - - - } - - } - - } - - if($requestedClass->combinePass){ - //two combine subjects from 4 subject. so add 2 - $subcounter = $subcounter + 2; - - if ($banglamark > 0) { - //let's do calculation for bangla - if ($banglaWritten < $bnWrittenPass) { - $isfail = true; - } - if ($bnMcqPass && $banglaMcq < $bnMcqPass) { - $isfail = true; - } - - - //now combine subject marks round policy - // and grading - if ($bnTotalExamMarks >= 200) { - $blmarks = round($banglamark / 2); - } else { - $blmarks = round($banglamark / 1.5); - } - - $totalmarks += $banglamark; - - //bangla subject point - $banglaXPoint = $this->pointCalculator($blmarks, $gparules); - $totalpoint += $banglaXPoint; - - } - else{ - $isfail= true; - } - - - //let's do calculation for english - if ($englishmark > 0) { - if($englishWritten < $enWrittenPass){ - $isfail = true; - } - if($enMcqPass && $englishMcq < $enMcqPass){ - $isfail = true; - } - - //now combine subject marks round policy - // and grading - if ($enTotalExamMarks >= 200) { - $enmarks = round($englishmark / 2); - } else { - $enmarks = round($englishmark / 1.5); - } - - - $totalmarks += $englishmark; - - //english subject point - $englishXPoint = $this->pointCalculator($enmarks, $gparules); - $totalpoint += $englishXPoint; - } - else{ - $isfail= true; - } - - } - - $grandPoint = ($totalpoint / $subcounter); - - - if ($isfail) { - $grandGrade = "F"; - $grandPoint = 0.00; - } else { - $grandGrade = $this->gradnGradeCal($grandPoint, $gparules); - } - - $merit = new MeritList; - $merit->class = Input::get('class'); - $merit->session = trim(Input::get('session')); - $merit->exam = Input::get('exam'); - $merit->regiNo = $student->regiNo; - $merit->totalNo = round($totalmarks); - $merit->point = ($grandPoint>5.00) ? 5.00 : $grandPoint; - $merit->grade = $grandGrade; - - - $merit->save(); - - - } - - } - else { - - return Redirect::to('/result/generate')->withInput()->with("noresult", "All students examination marks not submitted yet!!"); - } - - - } - else - { - return Redirect::to('/result/generate')->withInput()->with("noresult", "There is no students in this class!!"); - } - - return Redirect::to('/result/generate')->with("success", "Result Generate and Publish Successfull."); - - } - else - { - return Redirect::to('/result/generate')->withInput()->with("noresult", "Section ".implode(',',$notSubSection)." all subjects marks not submitted yet!!"); - - } - } - else{ - return Redirect::to('/result/generate')->withInput()->with("noresult", "All sections marks not submitted yet!!"); - } - } - else{ - return Redirect::to('/result/generate')->withInput()->with("noresult", "Result already generated for this class,session and exam!"); - - } - } - } - - public function gradnGradeCal($grandPoint) - { - $grade=""; - if($grandPoint>=5.00) - { - $grade="A+"; - return $grade; - } - $lowarray = array("0.00","1.00","2.00","3.00","3.50","4.00"); - $higharray = array("1.00","2.00","3.00","3.50","4.00","5.00"); - $gradearray = array("F","D","C","B","A-","A"); - - for($i=0;$i=$lowarray[$i] && $grandPoint<$higharray[$i]) - { - $grade=$gradearray[$i]; - } - } - - return $grade; - - } - - public function search() - { - $formdata = new formfoo; - $formdata->exam=""; - $classes = ClassModel::select('code','name')->orderby('code','asc')->get(); - return View::Make('app.resultsearch',compact('formdata','classes')); - } - public function postsearch() - { - $rules=[ - - 'exam' => 'required', - 'regiNo' => 'required', - 'class' => 'required' - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/result/search')->withErrors($validator)->withInput(Input::all()); - } - else { - - - return Redirect::to('/gradesheet/print/'.Input::get('regiNo').'/'.Input::get('exam').'/'.Input::get('class')); - } - - - - } - public function searchpub() - { - $formdata = new formfoo; - $formdata->exam=""; - $classes = ClassModel::select('code','name')->orderby('code','asc')->get(); - return View::Make('app.resultsearchpublic',compact('formdata','classes')); - } - public function postsearchpub() - { - - $rules=[ - - 'exam' => 'required', - 'regiNo' => 'required', - 'class' => 'required' - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/results')->withErrors($validator)->withInput(Input::all()); - } - else { - - - return Redirect::to('/gradesheet/print/'.Input::get('regiNo').'/'.Input::get('exam').'/'.Input::get('class')); - } - } - - private static function getSubjectInfo($subjects,$code){ - $requestSubject = null; - foreach($subjects as $sub) - { - if($sub->code===$code) - { - $requestSubject =$sub; - break; - } - } - return $requestSubject; - } -} diff --git a/app/controllers/instituteController.php b/app/controllers/instituteController.php deleted file mode 100644 index 11ac949b..00000000 --- a/app/controllers/instituteController.php +++ /dev/null @@ -1,72 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('index','save'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $institute= Institute::select("*")->first(); - if(count($institute)<1) - { - $institute=new Institute; - $institute->name = ""; - $institute->establish = ""; - $institute->web = ""; - $institute->email = ""; - $institute->phoneNo = ""; - $institute->address = ""; - } - - return View::Make('app.institute',compact('institute')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function save() - { - $rules=[ - 'name' => 'required', - 'establish' => 'required', - 'web' => 'required', - 'email' => 'required', - 'phoneNo' => 'required', - 'address' => 'required', - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/institute')->withinput(Input::all())->withErrors($validator); - } - else { - - DB::table("institute")->delete(); - $institue=new Institute; - - $institue->name = Input::get('name'); - $institue->establish = Input::get('establish'); - $institue->web = Input::get('web'); - $institue->email = Input::get('email'); - $institue->phoneNo = Input::get('phoneNo'); - $institue->address = Input::get('address'); - $institue->save(); - - return Redirect::to('/institute')->with('success', 'Institute Information saved.'); - - } - } -} diff --git a/app/controllers/libraryController.php b/app/controllers/libraryController.php deleted file mode 100644 index 1e3a364c..00000000 --- a/app/controllers/libraryController.php +++ /dev/null @@ -1,488 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('deleteBook','deleteissueBook'))); - - } - public function getAddbook() - { - $classes = array('All'=>'All')+ClassModel::lists('name','code'); - return View::Make('app.addbook',compact('classes')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function postAddbook() - { - $rules=[ - 'code' => 'required|max:50', - 'title' => 'required|max:250', - 'author' => 'required|max:100', - 'type' => 'required', - 'class' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/library/addbook')->withErrors($validator)->withInput(); - } - else { - $book=AddBook::select('*')->where('code',Input::get('code'))->get(); - if(count($book)>0) - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('deplicate', 'Book Code allready exists!!'); - return Redirect::to('/library/addbook')->withInput()->withErrors($errorMessages); - } - else { - $book = new AddBook(); - $book->code = Input::get('code'); - $book->title = Input::get('title'); - $book->author = Input::get('author'); - $book->quantity = Input::get('quantity'); - $book->rackNo = Input::get('rackNo'); - $book->rowNo = Input::get('rowNo'); - $book->type = Input::get('type'); - $book->class = Input::get('class'); - $book->desc = Input::get('desc'); - $book->save(); - return Redirect::to('/library/addbook')->with("success", "Book added to library Succesfully."); - - } - } - - } - - - /** - * Store a newly created resource in storage. - * - * @return Response - */ - public function getviewbook() - { - $classes = array('All'=>'All')+ClassModel::lists('name','code'); - $formdata = new formfoo; - $formdata->class = ""; - $books=array(); - return View::Make('app.booklist',compact('classes','formdata','books')); - } - public function postviewbook() - { - - if(Input::get('classcode')=="All"){ - $books=AddBook::leftJoin('Class', function($join) { - $join->on('Books.class', '=', 'Class.code'); - }) - ->select('Books.id', 'Books.code', 'Books.title', 'Books.author','Books.quantity','Books.rackNo','Books.rowNo','Books.type','Books.desc',DB::raw("IFNULL(Class.Name,'All') as class")) - - ->orderBy('id', 'desc')->paginate(50); - - } - else { - - $books = DB::table('Books') - ->join('Class', 'Books.class', '=', 'Class.code') - ->select('Books.id', 'Books.code', 'Books.title', 'Books.author','Books.quantity','Books.rackNo','Books.rowNo','Books.type','Books.desc','Class.Name as class') - ->where('Books.class',Input::get('classcode'))->orderBy('id', 'desc')->paginate(50); - } - - $books->setBaseUrl('view-show'); - $classes = array('All' => 'All')+ClassModel::lists('name','code'); - $formdata = new formfoo; - $formdata->class = Input::get('classcode'); - return View::Make('app.booklist',compact('classes','formdata','books')); - - } - - - /** - * Display the specified resource. - * - * @param int $id - * @return Response - */ - public function getBook($id) - { - $classes = array('All' => 'All')+ClassModel::lists('name','code'); - $book= AddBook::select('*')->find($id); - return View::Make('app.bookedit',compact('classes','book')); - } - - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function postUpdateBook() - { - $rules=[ - 'code' => 'required|max:50', - 'title' => 'required|max:250', - 'author' => 'required|max:100', - 'type' => 'required', - 'class' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/library/edit/'.Input::get('id'))->withErrors($validator)->withInput(); - } - else { - - $book = AddBook::find(Input::get('id')); - //$book->code = Input::get('code'); - $book->title = Input::get('title'); - $book->author = Input::get('author'); - $book->quantity = Input::get('quantity'); - $book->rackNo = Input::get('rackNo'); - $book->rowNo = Input::get('rowNo'); - $book->type = Input::get('type'); - $book->class = Input::get('class'); - $book->desc = Input::get('desc'); - $book->save(); - return Redirect::to('/library/view')->with("success", "Book updated Succesfully."); - - } - - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function deleteBook($id) - { - $book = AddBook::find($id); - $book->delete(); - return Redirect::to('/library/view')->with("success", "Book Deleted Succesfully."); - } - - public function getissueBook() - { - $students =['' => 'Select Student']+Student::select(DB::raw("CONCAT(firstName,' ',middleName,' ',lastName,'[',regiNo,']') as name,regiNo"))->lists('name','regiNo'); - $books = ['' => 'Select Book']+AddBook::select(DB::raw("CONCAT(title,'[',author,']') as name,code"))->lists('name','code'); - return View::Make('app.bookissue',compact('students','books')); - } - - public function postissueBook() - { - - $rules=[ - 'regiNo' => 'required', - 'bookCode' => 'required', - 'quantity' => 'required', - 'issueDate' => 'required', - 'returnDate' => 'required', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/library/issuebook')->withErrors($validator)->withInput(); - } - else { - - - /*$availabeQuantity=DB::table('bookStock')->select('quantity')->where('code',Input::get('code'))->first(); - - if(Input::get('quantity')>$availabeQuantity->quantity) - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('deplicate', 'This book quantity not availabe right now!'); - return Redirect::to('/library/issuebook')->withErrors($errorMessages)->withInput(); - - }*/ - $data=Input::all(); - $issueData = []; - $now=\Carbon\Carbon::now(); - foreach ($data['bookCode'] as $key => $value){ - $issueData[] = [ - 'regiNo' => $data['regiNo'], - 'issueDate' => $this->parseAppDate($data['issueDate']), - 'code' => $value, - 'quantity' => $data['quantity'][$key], - 'returnDate' => $this->parseAppDate($data['returnDate'][$key]), - 'fine' => $data['fine'][$key], - 'created_at' => $now, - 'updated_at' => $now, - ]; - - } - Issuebook::insert($issueData); - /* $issuebook = new Issuebook(); - $issuebook->code = Input::get('code'); - $issuebook->quantity = Input::get('quantity'); - $issuebook->regiNo = Input::get('regiNo'); - $issuebook->issueDate = $this->parseAppDate(Input::get('issueDate')); - $issuebook->returnDate = $this->parseAppDate(Input::get('returnDate')); - $issuebook->fine = Input::get('fine'); - $issuebook->save();*/ - return Redirect::to('/library/issuebook')->with("success","Succesfully book borrowed for '".Input::get('regiNo')."'."); - - } - -} -public function getissueBookview() -{ - - return View::Make('app.bookissueview'); -} -public function postissueBookview() -{ - - if(Input::get('status')!="") - { - $books = Issuebook::select('*') - ->Where('Status','=',Input::get('status')) - ->get(); - return View::Make('app.bookissueview',compact('books')); - } - if(Input::get('regiNo')!="" || Input::get('code') !="" || Input::get('issueDate') !="" || Input::get('returnDate') !="") - { - - $books = Issuebook::select('*')->where('regiNo','=',Input::get('regiNo')) - ->orWhere('code','=',Input::get('code')) - ->orWhere('issueDate','=',$this->parseAppDate(Input::get('issueDate'))) - ->orWhere('returnDate','=',$this->parseAppDate(Input::get('returnDate'))) - - ->get(); - return View::Make('app.bookissueview',compact('books')); - - } - else { - - return Redirect::to('/library/issuebookview')->with("error","Pleae fill up at least one feild!"); - - } - -} -public function getissueBookupdate($id) -{ - $book= Issuebook::find($id); - return View::Make('app.bookissueedit',compact('book')); -} -public function postissueBookupdate() -{ - $rules=[ - 'regiNo' => 'required|max:20', - 'code' => 'required|max:50', - 'issueDate' => 'required', - 'returnDate' => 'required', - 'status' => 'required', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/library/issuebookupdate/'.Input::get('id'))->withErrors($validator); - } - else { - - $book = Issuebook::find(Input::get('id')); - $book->code = Input::get('code'); - $book->regiNo = Input::get('regiNo'); - $book->issueDate = $this->parseAppDate(Input::get('issueDate')); - $book->returnDate = $this->parseAppDate(Input::get('returnDate')); - $book->fine = Input::get('fine'); - $book->Status = Input::get('status'); - $book->save(); - return Redirect::to('/library/issuebookview')->with("success","Succesfully book record updated."); - - } -} - -public function deleteissueBook($id) -{ - $book= Issuebook::find($id); - $book->delete(); - return Redirect::to('/library/issuebookview')->with("success","Succesfully book record deleted."); -} -public function getsearch() -{ - $classes = array('All' => 'All')+ClassModel::lists('name','code'); - return View::Make('app.booksearch',compact('classes')); -} -public function postsearch() -{ - if(Input::get('code')!="" || Input::get('title')!="" || Input::get('author') !="") - { - $query=AddBook::leftJoin('Class', function($join) { - $join->on('Books.class', '=', 'Class.code'); - - }) - ->join('bookStock','Books.code', '=', 'bookStock.code') - ->select('Books.id', 'Books.code', 'Books.title', 'Books.author','bookStock.quantity','Books.rackNo','Books.rowNo','Books.type','Books.desc',DB::raw("IFNULL (Class.Name,'All') as class")); - if(Input::get('code')!="") $query->where('Books.code','=',Input::get('code')); - if(Input::get('title')!="")$query->orWhere('Books.title','LIKE','%'.Input::get('title').'%'); - if(Input::get('author') !="")$query->orWhere('Books.author','LIKE','%'.Input::get('author').'%'); - - - $books=$query->get(); - - - $classes = array('All' => 'All')+ClassModel::lists('name','code'); - return View::Make('app.booksearch',compact('books','classes')); - - } - else { - - return Redirect::to('/library/search')->with("error","Pleae fill up at least one feild!"); - - } -} -public function postsearch2() -{ - $rules=[ - 'type' => 'required', - 'class' => 'required', - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/library/search')->withErrors($validator); - } - else { - if(Input::get('class')=="All"){ - $books=AddBook::leftJoin('Class', function($join) { - $join->on('Books.class', '=', 'Class.code'); - }) - ->join('bookStock','Books.code', '=', 'bookStock.code') - ->select('Books.id', 'Books.code', 'Books.title', 'Books.author','bookStock.quantity','Books.rackNo','Books.rowNo','Books.type','Books.desc',DB::raw("IFNULL(Class.Name,'All') as class")) - ->where('Books.type',Input::get('type')) - ->get(); - - } - else { - - $books = DB::table('Books') - ->join('Class', 'Books.class', '=', 'Class.code') - ->join('bookStock','Books.code', '=', 'bookStock.code') - ->select('Books.id', 'Books.code', 'Books.title', 'Books.author','bookStock.quantity','Books.rackNo','Books.rowNo','Books.type','Books.desc','Class.Name as class') - ->where('Books.class',Input::get('class')) - ->where('Books.type',Input::get('type'))->get(); - } - $classes = array('All' => 'All')+ClassModel::lists('name','code'); - return View::Make('app.booksearch',compact('books','classes')); - - } -} - -public function getReports() -{ - - return View::Make('app.libraryReports'); -} - -public function Reportprint($do) -{ - if($do=="today") - { - $todayReturn = DB::table('issueBook') - ->join('Student', 'Student.regiNo', '=', 'issueBook.regiNo') - ->join('Books','Books.code','=','issueBook.code') - ->join('Class','Class.code','=','Student.class') - ->select('Books.title', 'Books.author','Books.type','issueBook.quantity','issueBook.fine','Student.firstName','Student.middleName','Student.lastName','Student.rollNo','Class.name as class') - ->where('issueBook.returnDate',date('Y-m-d')) - ->where('issueBook.Status','Borrowed') - ->get(); - $rdata =array('name'=>'Today Return List','total'=>count($todayReturn)); - - $datas=$todayReturn; - $institute=Institute::select('*')->first(); - $pdf = PDF::loadView('app.libraryreportprinttex',compact('datas','rdata','institute')); - return $pdf->stream('today-books-return-List.pdf'); - - } - else if($do=="expire") - { - $expires = DB::table('issueBook') - ->join('Student', 'Student.regiNo', '=', 'issueBook.regiNo') - ->join('Books','Books.code','=','issueBook.code') - ->join('Class','Class.code','=','Student.class') - ->select('Books.title', 'Books.author','Books.type','issueBook.quantity','issueBook.fine','Student.firstName','Student.middleName','Student.lastName','Student.rollNo','Class.name as class') - ->where('issueBook.returnDate','<',date('Y-m-d')) - ->where('issueBook.Status','Borrowed') - ->get(); - $rdata =array('name'=>'Today Expire List','total'=>count($expires)); - - $datas=$expires; - $institute=Institute::select('*')->first(); - $pdf = PDF::loadView('app.libraryreportprinttex',compact('datas','rdata','institute')); - return $pdf->stream('books-expire-List.pdf'); - } - else { - $books = AddBook::select('*')->where('type',$do)->get(); - $rdata =array('name'=>$do,'total'=>count($books)); - - $datas=$books; - $institute=Institute::select('*')->first(); - $pdf = PDF::loadView('app.libraryreportbooks',compact('datas','rdata','institute')); - return $pdf->stream('books-expire-List.pdf'); - } - return $do; -} -public function getReportsFine() -{ - return View::Make('app.libraryfinereport'); -} -public function ReportsFineprint($month) -{ - $sqlraw="select sum(fine) as totalFine from issueBook where Status='Returned' and EXTRACT(YEAR_MONTH FROM returnDAte) = EXTRACT(YEAR_MONTH FROM '".$month."')"; - $fines = DB::select(DB::RAW($sqlraw)); - if($fines[0]->totalFine) - { - - $total=$fines[0]->totalFine; - } - else - { - $total=0; - } - $institute=Institute::select('*')->first(); - $rdata =array('month'=>date('F-Y', strtotime($month)),'name'=>'Monthly Fine Collection Report','total'=>$total); - $pdf = PDF::loadView('app.libraryfinereportprint',compact('rdata','institute')); - return $pdf->stream('libraryfinereportprint.pdf'); - - -} -private function parseAppDate($datestr) -{ - - if($datestr=="" or $datestr== NULL) - return $datestr="0000-00-00"; - $date = explode('/', $datestr); - return $date[2].'-'.$date[1].'-'.$date[0]; -} - -public function checkBookAvailability($code,$quantity) -{ - $availabeQuantity=DB::table('bookStock') - ->select('quantity') - ->where('code',$code)->first(); - $result = "Yes"; - if($quantity>$availabeQuantity->quantity) - $result = "No"; - return ["isAvailable" => $result ]; - - -} - -} diff --git a/app/controllers/markController.php b/app/controllers/markController.php deleted file mode 100644 index 67d61836..00000000 --- a/app/controllers/markController.php +++ /dev/null @@ -1,350 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $classes = ClassModel::select('code','name')->orderby('code','asc')->get(); - $subjects = Subject::all(); - return View::Make('app.markCreate',compact('classes','subjects')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create() - { - $rules=[ - 'class' => 'required', - 'section' => 'required', - 'shift' => 'required', - 'session' => 'required', - 'regiNo' => 'required', - 'exam' => 'required', - 'subject' => 'required', - 'written' => 'required', - 'mcq' => 'required', - 'practical' =>'required', - 'ca' =>'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/mark/create/')->withErrors($validator); - } - else { - - //check if this subject marks added before - $isAddbefore = Marks::where('class','=',Input::get('class')) - ->where('section','=',Input::get('section')) - ->where('shift','=',Input::get('shift')) - ->where('session','=',trim(Input::get('session'))) - ->where('exam','=',Input::get('exam')) - ->where('subject','=',Input::get('subject')) - ->first(); - - if($isAddbefore){ - return Redirect::to('/mark/create')->with("error","Marks already added for this class,sesction,shift,session,subject and exam!"); - - } - - //get the subject information - $subjectInfo = Subject::where('code',Input::get('subject'))->where('class',Input::get('class'))->first(); - if($subjectInfo->gradeSystem=="1") - { - $gparules = GPA::select('gpa','grade','markfrom')->where('for',"1")->get(); - - } - else { - $gparules = GPA::select('gpa','grade','markfrom')->where('for',"2")->get(); - } - - //collect inputs fields data - $len = count(Input::get('regiNo')); - $regiNos = Input::get('regiNo'); - $writtens=Input::get('written'); - $mcqs =Input::get('mcq'); - $practicals=Input::get('practical'); - $cas=Input::get('ca'); - $isabsent = Input::get('absent'); - $counter=0; - - for ( $i=0; $i< $len;$i++) { - - //add marks entry - $marks = new Marks; - $marks->class=Input::get('class'); - $marks->section=Input::get('section'); - $marks->shift=Input::get('shift'); - $marks->session=trim(Input::get('session')); - $marks->regiNo=$regiNos[$i]; - $marks->exam=Input::get('exam'); - $marks->subject=Input::get('subject'); - $marks->written=$writtens[$i]; - $marks->mcq = $mcqs[$i]; - $marks->practical=$practicals[$i]; - $marks->ca=$cas[$i]; - - $isFail = false; - - if($subjectInfo->wpass && $writtens[$i] < $subjectInfo->wpass){ - $isFail = true; - } - - if($subjectInfo->mpass && $mcqs[$i] < $subjectInfo->mpass){ - $isFail = true; - } - - if($subjectInfo->ppass && $practicals[$i] < $subjectInfo->ppass){ - $isFail = true; - } - if($subjectInfo->spass && $cas[$i] < $subjectInfo->spass){ - $isFail = true; - } - - //round the fraction marks - $totalMark = round($writtens[$i]+$mcqs[$i]+$practicals[$i]+$cas[$i]); - - if($totalMark < $subjectInfo->totalpass){ - $isFail = true; - } - - $marks->total= $totalMark; - - if($isFail){ - $marks->grade='F'; - $marks->point=0.00; - } - else{ - foreach ($gparules as $gpa) { - if ($totalMark >= $gpa->markfrom){ - $marks->grade=$gpa->gpa; - $marks->point=$gpa->grade; - break; - } - } - } - - if($isabsent[$i] !== "") - { - $marks->Absent=$isabsent[$i]; - } - - $marks->save(); - $counter++; - } - } - - return Redirect::to('/mark/create')->with("success",$counter."'s student mark save Successfully."); - - - } - - - - - - /** - * Display the specified resource. - * - * @param int $id - * @return Response - */ - public function show() - { - - $formdata = new formfoo; - $formdata->class=""; - $formdata->section=""; - $formdata->shift=""; - $formdata->session=""; - $formdata->subject=""; - $formdata->exam=""; - $classes = ClassModel::select('code','name')->orderby('code','asc')->get(); - //$subjects = Subject::lists('name','code'); - $marks=array(); - - - //$formdata["class"]=""; - return View::Make('app.markList',compact('classes','marks','formdata')); - } - - public function getlist() - { - $rules=[ - 'class' => 'required', - 'section' => 'required', - 'shift' => 'required', - 'session' => 'required', - 'exam' => 'required', - 'subject' => 'required', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/mark/list/')->withErrors($validator); - } - else { - $classes2 = ClassModel::orderby('code','asc')->lists('name','code'); - $subjects = Subject::where('class',Input::get('class'))->lists('name','code'); - $marks= DB::table('Marks') - ->join('Student', 'Marks.regiNo', '=', 'Student.regiNo') - ->select('Marks.id','Marks.regiNo','Student.rollNo', 'Student.firstName','Student.middleName','Student.lastName', 'Marks.written','Marks.mcq','Marks.practical','Marks.ca','Marks.total','Marks.grade','Marks.point','Marks.Absent') - ->where('Student.isActive', '=', 'Yes') - ->where('Student.class','=',Input::get('class')) - ->where('Marks.class','=',Input::get('class')) - ->where('Marks.section','=',Input::get('section')) - ->Where('Marks.shift','=',Input::get('shift')) - ->where('Marks.session','=',trim(Input::get('session'))) - ->where('Marks.subject','=',Input::get('subject')) - ->where('Marks.exam','=',Input::get('exam')) - ->get(); - - $formdata = new formfoo; - $formdata->class=Input::get('class'); - $formdata->section=Input::get('section'); - $formdata->shift=Input::get('shift'); - $formdata->session=Input::get('session'); - $formdata->subject=Input::get('subject'); - $formdata->exam=Input::get('exam'); - - if(count($marks)==0) - { - $noResult = array("noresult"=>"No Results Found!!"); - //return Redirect::to('/mark/list')->with("noresult","No Results Found!!"); - return View::Make('app.markList',compact('classes2','subjects','marks','noResult','formdata')); - } - - return View::Make('app.markList',compact('classes2','subjects','marks','formdata')); - } - } - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function edit($id) - { - $marks= DB::table('Marks') - ->join('Student', 'Marks.regiNo', '=', 'Student.regiNo') - ->select('Marks.id','Marks.regiNo','Student.rollNo', 'Student.firstName','Student.middleName','Student.lastName','Marks.subject','Marks.class', 'Marks.written','Marks.mcq','Marks.practical','Marks.ca','Marks.total','Marks.grade','Marks.point','Marks.Absent') - ->where('Marks.id','=',$id) - ->first(); - - return View::Make('app.markEdit',compact('marks')); - - - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function update() - { - $rules=[ - 'written' => 'required', - 'mcq' => 'required', - 'practical' =>'required', - 'ca' =>'required', - 'subject' => 'required', - 'class' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/mark/edit/'.Input::get('id'))->withErrors($validator); - } - else { - - $marks = Marks::find(Input::get('id')); - - //get subject information - $subjectInfo = Subject::select()->where('code',Input::get('subject'))->where('class',Input::get('class'))->first(); - if($subjectInfo->gradeSystem=="1") - { - $gparules = GPA::select('gpa','grade','markfrom')->where('for',"1")->get(); - - } - else { - $gparules = GPA::select('gpa','grade','markfrom')->where('for',"2")->get(); - } - - $marks->written=Input::get('written'); - $marks->mcq = Input::get('mcq'); - $marks->practical=Input::get('practical'); - $marks->ca=Input::get('ca'); - - $isFail = false; - - if($subjectInfo->wpass && $marks->written < $subjectInfo->wpass){ - $isFail = true; - } - - if($subjectInfo->mpass && $marks->mcq < $subjectInfo->mpass){ - $isFail = true; - } - - if($subjectInfo->ppass && $marks->practical < $subjectInfo->ppass){ - $isFail = true; - } - if($subjectInfo->spass && $marks->ca < $subjectInfo->spass){ - $isFail = true; - } - - //round the fraction marks - $totalMark = round($marks->written+$marks->mcq+$marks->practical+$marks->ca); - if($totalMark < $subjectInfo->totalpass){ - $isFail = true; - } - - $marks->total= $totalMark; - - if($isFail){ - $marks->grade='F'; - $marks->point=0.00; - } - else{ - foreach ($gparules as $gpa) { - if ($totalMark >= $gpa->markfrom){ - $marks->grade=$gpa->gpa; - $marks->point=$gpa->grade; - break; - } - } - } - - $isAbsent = Input::get('Absent'); - if($isAbsent !== "") - { - $marks->Absent = $isAbsent; - } - - $marks->save(); - - return Redirect::to('/mark/list')->with("success","Marks Update Successfully."); - - } - } -} diff --git a/app/controllers/promotionController.php b/app/controllers/promotionController.php deleted file mode 100644 index d3e5883f..00000000 --- a/app/controllers/promotionController.php +++ /dev/null @@ -1,185 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $classes = ClassModel::all(); - - return View::Make('app.promotion',compact('classes')); - } - - - - - /** - * Store a newly created resource in storage. - * - * @return Response - */ - public function store() - { $rules = [ - 'nclass' => 'required', - 'nsection' => 'required', - 'nshift' => 'required', - 'nsession' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/promotion')->withInput(Input::all())->withErrors($validator); - } else { - if(Input::get('class')==Input::get('nclass')) - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('validation', 'Promotion From and Promotion To class shouldn not be same!'); - return Redirect::to('/promotion')->withInput(Input::all())->withErrors($errorMessages); - } - else - { - $promotion = Input::get('promot'); - $promotion=array_keys($promotion); - $newrollNo= Input::get('newrollNo'); - $ids= array_keys($newrollNo); - if(count($promotion)<1) - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('validation', 'Select Student!'); - return Redirect::to('/promotion')->withInput(Input::all())->withErrors($errorMessages); - } - $realPromot=array(); - for($i=0;$icheckRollno($promotion[$i],$ids,$newrollNo); - if($rollnumber=='') - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('validation', 'New Roll number can not be empty!'); - return Redirect::to('/promotion')->withInput(Input::all())->withErrors($errorMessages); - } - if($rollnumber!='No') - { - $foo =array($promotion[$i],$rollnumber); - array_push($realPromot,$foo); - } - } - //get new regiNo and student info - - foreach($realPromot as $rpromt) { - $studentIno = Student::select('*')->where('regiNo', $rpromt[0])->first(); - - - - $newStudent = new Student(); - if (Input::get('nclass') == "cl10" || Input::get('nclass') == "cl12") { - $newStudent->regiNo = $rpromt[0]; - } else - { - - $newRegNo = $this->getRegi(Input::get('nclass'), Input::get('nsession'), Input::get('nsection')); - $newStudent->regiNo = $newRegNo[0]; - } - - $newStudent->rollNo=$rpromt[1]; - $newStudent->session=trim(Input::get('nsession')); - $newStudent->class=Input::get('nclass'); - $newStudent->section=Input::get('nsection'); - $newStudent->shift=Input::get('nshift'); - $newStudent->group=$studentIno->group; - $newStudent->firstName=$studentIno->firstName; - $newStudent->middleName=$studentIno->middleName; - $newStudent->lastName=$studentIno->lastName; - $newStudent->gender=$studentIno->gender; - $newStudent->religion=$studentIno->religion; - $newStudent->bloodgroup=$studentIno->bloodgroup; - $newStudent->nationality=$studentIno->nationality; - $newStudent->dob=$studentIno->dob; - $newStudent->photo=$studentIno->photo; - $newStudent->extraActivity=$studentIno->extraActivity; - $newStudent->remarks=$studentIno->remarks; - $newStudent->fatherName=$studentIno->fatherName; - $newStudent->fatherCellNo=$studentIno->fatherCellNo; - $newStudent->motherName=$studentIno->motherName; - $newStudent->motherCellNo=$studentIno->motherCellNo; - $newStudent->localGuardian=$studentIno->localGuardian; - $newStudent->localGuardianCell=$studentIno->localGuardianCell; - $newStudent->presentAddress=$studentIno->presentAddress; - $newStudent->parmanentAddress=$studentIno->parmanentAddress; - $newStudent->isActive="Yes"; - $newStudent->save(); - - - } - - return Redirect::to('/promotion')->with('success', count($realPromot).' Students Promoted.'); - - } - } - - -} -private function checkRollno($regiNo,$ids,$newRollNo) - -{ - - for($i=0;$iwhere('class','=',$class)->where('session','=',$ses)->first(); - - - $stdseccount = Student::select(DB::raw('count(*) as total'))->where('class','=',$class)->where('session','=',$ses)->where('section','=',$section)->first(); - - $r = intval($stdcount->total)+1; - - if(strlen($r)<2) - { - $r='0'.$r; - } - $c = intval($stdseccount->total)+1; - $cl=substr($class,2); - - $foo = array(); - if(strlen($cl)<2) { - $foo[0]= substr($ses, 2) .'0'.$cl.$r; - } - else - { - $foo[0]= substr($ses, 2) .$cl.$r; - } - if(strlen($c)<2) { - $foo[1] ='0'.$c; - } - else - { - $foo[1] =$c; - } - - return $foo; - -} - -} diff --git a/app/controllers/settingsController.php b/app/controllers/settingsController.php deleted file mode 100644 index 094b789d..00000000 --- a/app/controllers/settingsController.php +++ /dev/null @@ -1,79 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth', array('only'=>array('save','index'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $set= User::select("*")->where('id','=',Auth::id())->first(); - - return View::Make('app.Settings',compact('set')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function save() - { - $rules=[ - 'firstname' => 'required', - 'lastname' => 'required', - 'login' => 'required', - //'email' => 'required', - 'desc' => 'required', - 'cpassword' => 'required', - 'npassword' => 'required', - 'cnpassword' => 'required' - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/settings')->withinput(Input::all())->withErrors($validator); - } - else { - if (Input::get('npassword') == Input::get('cnpassword')) { - - // $u = User::select('*')->where('password',Hash::make(Input::get('cpassword')))->first(); - //return Hash::make(Input::get('cpassword')); - //if(count($u)>0) { - $user = User::find(Input::get('id')); - $user->firstname = Input::get('firstname'); - $user->lastname = Input::get('lastname'); - // $user->login = Input::get('login'); - //$user->desc = Input::get('desc'); - // $user->email = Input::get('email'); - $user->password = Hash::make(Input::get('npassword')); - $user->save(); - - return Redirect::to('/settings')->with('success', 'Settings is changed please relogin the site.'); - /*} - else - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('notmatch', 'Current Password did not match!'); - return Redirect::to('/settings')->withErrors($errorMessages); - }*/ - } - else - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('notmatch', 'New Password and confirm password did not match!'); - return Redirect::to('/settings')->withErrors($errorMessages); - } - } -} - - -} diff --git a/app/controllers/smsController.php b/app/controllers/smsController.php deleted file mode 100644 index 2813349d..00000000 --- a/app/controllers/smsController.php +++ /dev/null @@ -1,254 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess', array('only'=> array('index','create','edit','update','smsLog','delete','deleteLog'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $smses=SMS::all(); - $sms = array(); - return View::Make('app.smsTypes', compact('smses', 'sms')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create() - { - $rules=[ - 'type' => 'required', - 'sender' => 'required|max:100', - 'message' => 'required' - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/sms')->withErrors($validator); - } - else { - $sms = new SMS; - $sms->type= Input::get('type'); - $sms->sender=Input::get('sender'); - $sms->message=Input::get('message'); - - $sms->save(); - return Redirect::to('/sms')->with("success", "SMS Format Created Succesfully."); - - } - } - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function edit($id) - { - $sms = SMS::find($id); - $smses=SMS::all(); - return View::Make('app.smsTypes', compact('smses', 'sms')); - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function update() - { - $rules=[ - 'type' => 'required', - 'sender' => 'required|max:100', - 'message' => 'required' - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/sms/edit/'.Input::get('id'))->withErrors($validator); - } - else { - $sms = SMS::find(Input::get('id')); - $sms->type= Input::get('type'); - $sms->sender=Input::get('sender'); - $sms->message=Input::get('message'); - $sms->save(); - return Redirect::to('/sms')->with("success", "SMS Format Updated Succesfully."); - - } - } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function delete($id) - { - $sms = SMS::find($id); - $sms->delete(); - return Redirect::to('/sms')->with( - "success", - "SMS Format Deleted Successfully." - ); - } - public function getTypeInfo($id) - { - return SMS::find($id); - } - public function getsmssend() - { - - $types = SMS::all(); - $classes = ClassModel::select('code', 'name')->orderby('code', 'asc')->get(); - - return View::Make("app.smssender", compact('types', 'classes')); - } - public function postsmssend() - { - $rules=[ - 'class' => 'required', - 'session' => 'required', - 'sender' => 'required|max:100', - 'message' => 'required|max:160' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/sms-bulk')->withErrors($validator); - } - $inputs = Input::all(); - $smsType = $inputs['type']; - if($inputs['type'] !="Custom") { - $smsdbtype= SMS::find($inputs['type']); - $smsType = $smsdbtype->type; - } - - $students = Student::select('fatherCellNo', 'regiNo') - ->where('class', $inputs['class']) - ->where('session', trim($inputs['session']))->get()->toArray(); - - if(count($students)) { - foreach ($students as $student) { - Queue::push( - function ($job) use ($student,$inputs,$smsType) { - - $regiNo = $student['regiNo']; - $phonenumber = $student['fatherCellNo']; - $sender = $inputs['sender']; - $msg =$inputs['message']; - $type =$smsType; - - $apiResult="Invalid Number"; - $apiResult="Api Link Not Set!"; - - - // Uncomment below codes for production use - - - /* $phonenumber=str_replace('+', '', $phonenumber); - if (strlen($phonenumber)=="11") { - $phonenumber="88".$phonenumber; - } - if (strlen($phonenumber)=="13") { - if (preg_match("/^88017/i", "$phonenumber") or preg_match("/^88016/i", "$phonenumber") or preg_match("/^88015/i", "$phonenumber") or preg_match("/^88011/i", "$phonenumber") or preg_match("/^88018/i", "$phonenumber") or preg_match("/^88019/i", "$phonenumber")) { - - - $myaccount=urlencode("shanixlab"); - $mypasswd=urlencode("123456"); - $sendBy=urlencode($sender); - $api="http://api_link_here?user=".$myaccount."&password=".$mypasswd."&sender=".$sendBy."&SMSText=".$msg."&GSM=".$phonenumber."&type=longSMS"; - $client = new \Guzzle\Service\Client($api); - // Get your response: - $response = $client->get()->send(); - $status=$response->getBody(true); - $apiResult = "SMS SEND"; - if($status=="-5" || $status=="5") { - $apiResult = $status; - } - } - }*/ - - $smsLog = new SMSLog(); - $smsLog->type = $type; - $smsLog->sender = $sender; - $smsLog->message = $msg; - $smsLog->recipient = $phonenumber; - $smsLog->regiNo = $regiNo; - $smsLog->status = $apiResult; - $smsLog->save(); - $job->delete(); - } - ); - - } - - return Redirect::to('/sms-bulk')->with( - "success", - count($students)." sms pushed to queue.SMS will recive shortly." - ); - - } else { - // New MessageBag - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Not Found', 'There are no student on this session!'); - return Redirect::to('/sms-bulk')->withErrors($errorMessages->all()); - } - - } - - public function getsmsLog() - { - $foo="0"; - $smslogs = array(); - return View::Make('app.smsLog', compact('smslogs', 'foo')); - } - public function postsmsLog() - { - $rules=[ - 'fromDate' => 'required', - 'toDate' => 'required' - - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/smslog')->withErrors($validator); - } - else { - $smslogs = SMSLog::select('*')->where(DB::raw('date(created_at)'), '>=', trim(Input::get('fromDate'))) - ->where(DB::raw('date(created_at)'), '<=', trim(Input::get('toDate')))->get(); - $foo="1"; - return View::Make('app.smsLog', compact('smslogs', 'foo')); - - } - - } - public function deleteLog($id) - { - $sms = SMSLog::find($id); - $sms->delete(); - return Redirect::to('/smslog')->with("success", "SMS Log Deleted Succesfully."); - } - -} diff --git a/app/controllers/studentController.php b/app/controllers/studentController.php deleted file mode 100644 index 03bcd32c..00000000 --- a/app/controllers/studentController.php +++ /dev/null @@ -1,410 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('delete'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $classes = ClassModel::select('name','code')->get(); - - - return View::Make('app.studentCreate',compact('classes')); - } - - public function getRegi($class,$session,$section) - { - $ses =trim($session); - $stdcount = Student::select(DB::raw('count(*) as total'))->where('class','=',$class)->where('session','=',$ses)->first(); - - $stdseccount = Student::select(DB::raw('count(*) as total'))->where('class','=',$class)->where('session','=',$ses)->where('section','=',$section)->first(); - $r = intval($stdcount->total)+1; - if(strlen($r)<2) - { - $r='0'.$r; - } - $c = intval($stdseccount->total)+1; - $cl=substr($class,2); - - $foo = array(); - if(strlen($cl)<2) { - $foo[0]= substr($ses, 2) .'0'.$cl.$r; - } - else - { - $foo[0]= substr($ses, 2) .$cl.$r; - } - if(strlen($c)<2) { - $foo[1] ='0'.$c; - } - else - { - $foo[1] =$c; - } - - return $foo; - - } - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create() - { - - $rules=['regiNo' => 'required', - 'fname' => 'required', - 'lname' => 'required', - 'gender' => 'required', - 'religion' => 'required', - 'bloodgroup' => 'required', - 'nationality' => 'required', - 'dob' => 'required', - 'session' => 'required', - 'class' => 'required', - 'section' => 'required', - 'rollNo' => 'required', - 'shift' => 'required', - 'photo' => 'required|mimes:jpeg,jpg,png', - 'fatherName' => 'required', - 'fatherCellNo' => 'required', - 'motherName' => 'required', - 'motherCellNo' => 'required', - 'presentAddress' => 'required', - 'parmanentAddress' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/student/create')->withErrors($validator); - } - else { - $fileName=Input::get('regiNo').'.'.Input::file('photo')->getClientOriginalExtension(); - - $student = new Student; - $student->regiNo= Input::get('regiNo'); - $student->firstName= Input::get('fname'); - $student->middleName= Input::get('mname'); - $student->lastName= Input::get('lname'); - $student->gender= Input::get('gender'); - $student->religion= Input::get('religion'); - $student->bloodgroup= Input::get('bloodgroup'); - $student->nationality= Input::get('nationality'); - $student->dob= Input::get('dob'); - $student->session= trim(Input::get('session')); - $student->class= Input::get('class'); - $student->section= Input::get('section'); - $student->group= Input::get('group'); - $student->rollNo= Input::get('rollNo'); - $student->shift= Input::get('shift'); - - $student->photo= $fileName; - $student->nationality= Input::get('nationality'); - $student->extraActivity= Input::get('extraActivity'); - $student->remarks= Input::get('remarks'); - - $student->fatherName= Input::get('fatherName'); - $student->fatherCellNo= Input::get('fatherCellNo'); - $student->motherName= Input::get('motherName'); - $student->motherCellNo= Input::get('motherCellNo'); - $student->localGuardian= Input::get('localGuardian'); - $student->localGuardianCell= Input::get('localGuardianCell'); - - $student->presentAddress= Input::get('presentAddress'); - $student->parmanentAddress= Input::get('parmanentAddress'); - $student->isActive= "Yes"; - - $hasStudent = Student::where('regiNo','=',Input::get('regiNo'))->where('class','=',Input::get('class'))->first(); - if ($hasStudent) - { - $messages = $validator->errors(); - $messages->add('Duplicate!', 'Student already exits with this registration no.'); - return Redirect::to('/student/create')->withErrors($messages)->withInput(); - } - else { - $student->save(); - Input::file('photo')->move(base_path() .'/public/images',$fileName); - return Redirect::to('/student/create')->with("success","Student Admited Succesfully."); - } - - - } -} - - -/** -* Display the specified resource. -* -* @param int $id -* @return Response -*/ -public function show() -{ - $students=array(); - $classes = ClassModel::lists('name','code'); - $formdata = new formfoo; - $formdata->class=""; - $formdata->section=""; - $formdata->shift=""; - $formdata->session=""; - return View::Make("app.studentList",compact('students','classes','formdata')); -} -public function getList() -{ - $rules = [ - 'class' => 'required', - 'section' => 'required', - 'shift' => 'required', - 'session' => 'required' - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) { - return Redirect::to('/student/list')->withInput(Input::all())->withErrors($validator); - } else { - $students = DB::table('Student') - ->join('Class', 'Student.class', '=', 'Class.code') - ->select('Student.id', 'Student.regiNo', 'Student.rollNo', 'Student.firstName', 'Student.middleName', 'Student.lastName', 'Student.fatherName', 'Student.motherName', 'Student.fatherCellNo', 'Student.motherCellNo', 'Student.localGuardianCell', - 'Class.Name as class', 'Student.presentAddress', 'Student.gender', 'Student.religion','Student.fourthSubject') - ->where('isActive', '=', 'Yes') - ->where('class',Input::get('class')) - ->where('section',Input::get('section')) - ->where('shift',Input::get('shift')) - ->where('session',trim(Input::get('session'))) - ->get(); - if(count($students)<1) - { - return Redirect::to('/student/list')->withInput(Input::all())->with('error','No Students Found!'); - - } - else { - $classes = ClassModel::lists('name','code'); - $formdata = new formfoo; - $formdata->class=Input::get('class'); - $formdata->section=Input::get('section'); - $formdata->shift=Input::get('shift'); - $formdata->session=trim(Input::get('session')); - return View::Make("app.studentList", compact('students','classes','formdata')); - } - } - -} - -public function view($id) -{ - $student= DB::table('Student') - ->join('Class', 'Student.class', '=', 'Class.code') - ->select('Student.id', 'Student.regiNo','Student.rollNo','Student.firstName','Student.middleName','Student.lastName', - 'Student.fatherName','Student.motherName', 'Student.fatherCellNo','Student.motherCellNo','Student.localGuardianCell', - 'Class.Name as class','Student.presentAddress','Student.gender','Student.religion','Student.section','Student.shift','Student.session', - 'Student.group','Student.dob','Student.bloodgroup','Student.nationality','Student.photo','Student.extraActivity','Student.remarks', - 'Student.localGuardian','Student.parmanentAddress','Student.fourthSubject','Student.cphsSubject') - ->where('Student.id','=',$id)->first(); - - return View::Make("app.studentView",compact('student')); -} -/** -* Show the form for editing the specified resource. -* -* @param int $id -* @return Response -*/ -public function edit($id) -{ - $classes = ClassModel::lists('name','code'); - $student= Student::find($id); - return View::Make("app.studentEdit",compact('student','classes')); -} - - -/** -* Update the specified resource in storage. -* -* @param int $id -* @return Response -*/ -public function update() -{ - - $rules=[ - 'fname' => 'required', - 'lname' => 'required', - 'gender' => 'required', - 'religion' => 'required', - 'bloodgroup' => 'required', - 'nationality' => 'required', - 'dob' => 'required', - 'session' => 'required', - 'class' => 'required', - 'section' => 'required', - 'rollNo' => 'required', - 'shift' => 'required', - 'fatherName' => 'required', - 'fatherCellNo' => 'required', - 'motherName' => 'required', - 'motherCellNo' => 'required', - 'presentAddress' => 'required', - 'parmanentAddress' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/student/edit/'.Input::get('id'))->withErrors($validator); - } - else { - - $isValid = true; - $messages = $validator->errors(); - //checking for 4th and exchange subject - $fourthSub = Input::get('fourthSubject'); - $cphsSub = Input::get('cphsSubject'); - - if(mb_strlen($cphsSub)) { - if(!mb_strlen($fourthSub)){ - $messages->add('Notvalid!', 'Entered 4th subject code!'); - $isValid = false; - } - else { - $cphsSubjectInfo = Subject::where('class', '=', Input::get('class')) - ->where('code', '=', $cphsSub) - ->first(); - if (!count($cphsSubjectInfo)) { - $messages->add('Notvalid!', 'Entered alternative subject code not found!'); - $isValid = false; - } - } - } - - if(mb_strlen($fourthSub)) { - //now get subject info for 4th subject - $fSubjectInfo = Subject::where('class', '=', Input::get('class')) - ->where('code', '=', $fourthSub) - ->first(); - - if (!count($fSubjectInfo)) { - $messages->add('Notvalid!', 'Entered 4th subject code not found!'); - $isValid = false; - } - - if ($fSubjectInfo->type != "Electives" && !mb_strlen($cphsSub)) { - $messages->add('Notvalid!', 'Please enter alternative subject code!'); - $isValid = false; - } - } - - if(!$isValid){ - return Redirect::to('/student/edit/'.Input::get('id'))->withErrors($messages); - } - //validation code ends heare - - $student = Student::find(Input::get('id')); - - if(Input::hasFile('photo')) - { - - if(substr(Input::file('photo')->getMimeType(), 0, 5) != 'image') - { - $messages = $validator->errors(); - $messages->add('Notvalid!', 'Photo must be a image,jpeg,jpg,png!'); - return Redirect::to('/student/edit/'.Input::get('id'))->withErrors($messages); - } - else { - - $fileName=Input::get('regiNo').'.'.Input::file('photo')->getClientOriginalExtension(); - $student->photo = $fileName; - Input::file('photo')->move(base_path() .'/public/images',$fileName); - } - - } - else { - $student->photo= Input::get('oldphoto'); - - } - //$student->regiNo=Input::get('regiNo'); - $student->rollNo=Input::get('rollNo'); - $student->firstName= Input::get('fname'); - $student->middleName= Input::get('mname'); - $student->lastName= Input::get('lname'); - $student->gender= Input::get('gender'); - $student->religion= Input::get('religion'); - $student->bloodgroup= Input::get('bloodgroup'); - $student->nationality= Input::get('nationality'); - $student->dob= Input::get('dob'); - $student->session= trim(Input::get('session')); - $student->class= Input::get('class'); - $student->section= Input::get('section'); - $student->group= Input::get('group'); - $student->nationality= Input::get('nationality'); - $student->extraActivity= Input::get('extraActivity'); - $student->remarks= Input::get('remarks'); - - $student->fatherName= Input::get('fatherName'); - $student->fatherCellNo= Input::get('fatherCellNo'); - $student->motherName= Input::get('motherName'); - $student->motherCellNo= Input::get('motherCellNo'); - $student->localGuardian= Input::get('localGuardian'); - $student->localGuardianCell= Input::get('localGuardianCell'); - $student->presentAddress= Input::get('presentAddress'); - $student->parmanentAddress= Input::get('parmanentAddress'); - $student->fourthSubject= Input::get('fourthSubject'); - $student->cphsSubject= Input::get('cphsSubject'); - - $student->save(); - - return Redirect::to('/student/list')->with("success","Student Updated Succesfully."); - } - - -} - - -/** -* Remove the specified resource from storage. -* -* @param int $id -* @return Response -*/ -public function delete($id) -{ - $student = Student::find($id); - $student->isActive= "No"; - $student->save(); - - return Redirect::to('/student/list')->with("success","Student Deleted Succesfully."); -} - -/** -* Display the specified resource. -* -* @param int $id -* @return Response -*/ -public function getForMarks($class,$section,$shift,$session) -{ - $students= Student::selectRaw("regiNo,CAST(rollNo AS SIGNED) as rollNo,firstName,middleName,lastName") - ->where('isActive','=','Yes') - ->where('class','=',$class) - ->where('section','=',$section) - ->where('shift','=',$shift) - ->where('session','=',$session) - ->orderBy('rollNo','asc')->get(); - return $students; -} -} diff --git a/app/controllers/subjectController.php b/app/controllers/subjectController.php deleted file mode 100644 index 74709980..00000000 --- a/app/controllers/subjectController.php +++ /dev/null @@ -1,217 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('userAccess',array('only'=> array('delete'))); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $classes = ClassModel::select('code','name')->orderby('code','asc')->get(); - $gpa =GPA::select('for')->distinct()->get(); - - return View::Make('app.subjectCreate',compact('classes','gpa')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create() - { - $rules=[ - 'name' => 'required', - 'code' => 'required', - 'type' => 'required', - 'subgroup' => 'required', - 'stdgroup' => 'required', - 'class' => 'required', - 'gradeSystem' => 'required', - 'totalfull' => 'required', - 'totalpass' => 'required', - 'wfull' => 'required', - 'mfull' => 'required', - 'sfull' => 'required', - 'pfull' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/subject/create')->withErrors($validator); - } - else { - $exsubject = Subject::select('*')->where('class',Input::get('class'))->where('code',Input::get('code'))->get(); - if(count($exsubject)>0) - { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('deplicate', 'subject all ready exists for this class!!'); - return Redirect::to('/subject/create')->withErrors($errorMessages); - - - } - else { - $subject = new Subject; - $subject->name = Input::get('name'); - $subject->code = Input::get('code'); - $subject->class = Input::get('class'); - $subject->gradeSystem = Input::get('gradeSystem'); - $subject->type = Input::get('type'); - $subject->subgroup = Input::get('subgroup'); - $subject->stdgroup = Input::get('stdgroup'); - - $subject->totalfull = Input::get('totalfull'); - $subject->totalpass = Input::get('totalpass'); - $subject->wfull = Input::get('wfull'); - $subject->wpass = Input::get('wpass'); - $subject->mfull = Input::get('mfull'); - $subject->mpass = Input::get('mpass'); - $subject->sfull = Input::get('sfull'); - $subject->spass = Input::get('spass'); - $subject->pfull = Input::get('pfull'); - $subject->ppass = Input::get('ppass'); - - $subject->save(); - return Redirect::to('/subject/create')->with("success", "Subject Created Succesfully."); - } - - } - } - - - /** - * show all resource in strograge. - * - * @return Response - */ - public function show() - { - $selectedClass = Input::get('class',0); - - $classes =['0'=>'All']+ClassModel::lists('name','code'); - if($selectedClass){ - $Subjects= DB::table('Subject') - ->join('Class', 'Subject.class', '=', 'Class.code') - ->select('Subject.id', 'Subject.code','Subject.name','Subject.type', 'Subject.subgroup','Subject.stdgroup','Subject.totalfull', - 'Subject.totalpass','Subject.gradeSystem','Subject.wfull', 'Subject.wpass','Subject.mfull','Subject.mpass','Class.Name as class','Subject.sfull','Subject.spass', - 'Subject.pfull','Subject.ppass') - ->where('Subject.class',$selectedClass) - ->get(); - } - else{ - $Subjects= DB::table('Subject') - ->join('Class', 'Subject.class', '=', 'Class.code') - ->select('Subject.id', 'Subject.code','Subject.name','Subject.type', 'Subject.subgroup','Subject.stdgroup','Subject.totalfull', - 'Subject.totalpass','Subject.gradeSystem','Subject.wfull', 'Subject.wpass','Subject.mfull','Subject.mpass','Class.Name as class','Subject.sfull','Subject.spass', - 'Subject.pfull','Subject.ppass') - ->get(); - } - - - return View::Make('app.subjectList',compact('Subjects','classes','selectedClass')); - } - - - - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function edit($id) - { - $classes = ClassModel::lists('name','code'); - $subject = Subject::find($id); - return View::Make('app.subjectEdit',compact('subject','classes')); - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function update() - { - $rules=[ - 'name' => 'required', - 'code' => 'required', - 'type' => 'required', - 'subgroup' => 'required', - 'stdgroup' => 'required', - 'class' => 'required', - 'gradeSystem' => 'required', - 'totalfull' => 'required', - 'totalpass' => 'required', - 'wfull' => 'required', - 'mfull' => 'required', - 'sfull' => 'required', - 'pfull' => 'required' - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/subject/edit/'.Input::get('id'))->withErrors($validator); - } - else { - $subject = Subject::find(Input::get('id')); - $subject->name= Input::get('name'); - $subject->code=Input::get('code'); - $subject->class=Input::get('class'); - $subject->gradeSystem=Input::get('gradeSystem'); - $subject->type=Input::get('type'); - $subject->subgroup=Input::get('subgroup'); - $subject->stdgroup=Input::get('stdgroup'); - - $subject->totalfull=Input::get('totalfull'); - $subject->totalpass=Input::get('totalpass'); - $subject->wfull=Input::get('wfull'); - $subject->wpass=Input::get('wpass'); - $subject->mfull=Input::get('mfull'); - $subject->mpass=Input::get('mpass'); - $subject->sfull=Input::get('sfull'); - $subject->spass=Input::get('spass'); - $subject->pfull=Input::get('pfull'); - $subject->ppass=Input::get('ppass'); - $subject->save(); - return Redirect::to('/subject/list')->with("success","Subject Updated Succesfully."); - - } - } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function delete($id) - { - $subject = Subject::find($id); - $subject->delete(); - return Redirect::to('/subject/list')->with("success","Subject Deleted Succesfully."); - } - public function getmarks($subject,$cls) - { - $subject = Subject::select('totalfull','totalpass','wfull','wpass','mfull','mpass','sfull','spass','pfull','ppass')->where('code','=',$subject)->where('class','=',$cls)->get(); - return $subject; - } - - -} diff --git a/app/controllers/tabulationController.php b/app/controllers/tabulationController.php deleted file mode 100644 index 63e3391a..00000000 --- a/app/controllers/tabulationController.php +++ /dev/null @@ -1,114 +0,0 @@ -beforeFilter('auth'); - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - $formdata = new formfoo; - $formdata->class=""; - $formdata->section=""; - $formdata->shift=""; - $formdata->exam=""; - $formdata->session=""; - - $classes = ClassModel::lists('name','code'); - - return View::Make('app.tabulationsheet',compact('classes','formdata')); - } - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function getsheet() - { - - $inputs=Input::all(); - $input=(object)$inputs; - $subjects = Subject::select('name')->where('class',$input->class)->orderby('code','asc')->get(); - if(count($subjects)<1) - { - return Redirect::to('/tabulation')->withInput(Input::all())->with("error","There are not subjects for this class!"); - } - - $students = Student::select('regiNo','firstName','middleName','lastName')->where('class',$input->class)->where('section',$input->section)->where('session',trim($input->session)) - ->where('shift',$input->shift) - ->where('isActive','Yes')->get(); - - if(count($students)<1) - { - return Redirect::to('/tabulation')->withInput(Input::all())->with("error","There are not student for this class!"); - } - $merit = DB::table('MeritList') - ->select('regiNo','grade','point','totalNo') - ->where('exam',$input->exam) - ->where('class',$input->class) - ->where('session',trim($input->session)) - ->orderBy('point', 'DESC') - ->orderBy('totalNo', 'DESC') ->get() ; - if(count($merit)<1) - { - return Redirect::to('/tabulation')->withInput(Input::all())->with("error","Marks not submit or result not generate for this exam!"); - } - foreach($students as $student) - { - $marks=Marks::select('written','mcq','practical','ca','total','grade','point')->where('regiNo',$student->regiNo)->where('exam',$input->exam)->orderby('subject','asc')->get(); - if(count($marks)<1) - { - return Redirect::to('/tabulation')->withInput(Input::all())->with("error","Marks not submited yet!"); - } - /*$marks = DB::table('Marks') - ->join('MeritList', 'Marks.regiNo', '=', 'MeritList.regiNo') - ->select('Marks.written','Marks.mcq', 'Marks.practical', 'Marks.ca', 'Marks.total', 'Marks.grade', 'Marks.point', 'MeritList.totalNo', 'MeritList.grade as tgrade','MeritList.point as tpoint') - ->where('Marks.regiNo',$student->regiNo) - ->where('Marks.exam', '=',$input->exam) - ->orderby('Marks.subject','asc') - ->get();*/ - - - $meritdata = new Meritdata(); - $position = 0; - foreach ($merit as $m) { - $position++; - if ($m->regiNo === $student->regiNo) { - $meritdata->regiNo = $m->regiNo; - $meritdata->point = $m->point; - $meritdata->grade = $m->grade; - $meritdata->position = $position; - $meritdata->totalNo = $m->totalNo; - break; - } - } - - $student->marks=$marks; - $student->meritdata=$meritdata; - - - - } - - $cl = ClassModel::Select('name')->where('code',$input->class)->first(); - $input->class=$cl->name; - $fileName=$input->class.'-'.$input->section.'-'.$input->session.'-'.$input->exam; - // return $students; - Excel::create($fileName, function($excel) use($input,$subjects,$students) { - - $excel->sheet('New sheet', function($sheet) use ($input,$subjects,$students) { - - $sheet->loadView('app.excel',compact('subjects','input','students')); - - }); - - })->download('xlsx'); - } -} diff --git a/app/controllers/teacherController.php b/app/controllers/teacherController.php deleted file mode 100644 index 07400dbd..00000000 --- a/app/controllers/teacherController.php +++ /dev/null @@ -1,1156 +0,0 @@ -beforeFilter('csrf', array('on'=>'post')); - $this->beforeFilter('auth'); - $this->beforeFilter('admin_or_management'); - $this->beforeFilter('management',array( - 'only'=> array('index','create','edit','update','delete','createAttendance','postCreateAttendance','leaveCreate', - 'leaveStore','holidayCreate','holidayIndex','holidayDelete') - )); - - } - /** - * Display a listing of the resource. - * - * @return Response - */ - public function index() - { - return View::Make('app.teacher.create'); - } - - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function create() - { - - $rules=[ - 'regNo' => 'required', - 'fullName' => 'required', - 'gender' => 'required', - 'egroup' => 'required', - 'religion' => 'required', - 'bloodgroup' => 'required', - 'nationality' => 'required', - 'dob' => 'required', - 'joinDate' => 'required', - 'photo' => 'required|mimes:jpeg,jpg,png', - 'cellNo' => 'required', - 'educationQualification' => 'required', - 'presentAddress' => 'required', - 'parmanentAddress' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/teacher/create')->withErrors($validator); - } - else { - $fileName=Input::get('regNo').'.'.Input::file('photo')->getClientOriginalExtension(); - - $teacher = new Teachers; - $teacher->regNo= Input::get('regNo'); - $teacher->fullName= Input::get('fullName'); - $teacher->gender= Input::get('gender'); - $teacher->egroup= Input::get('egroup'); - $teacher->religion= Input::get('religion'); - $teacher->bloodgroup= Input::get('bloodgroup'); - $teacher->nationality= Input::get('nationality'); - $teacher->dob= Input::get('dob'); - $teacher->joinDate= Input::get('joinDate'); - $teacher->photo= $fileName; - $teacher->educationQualification= Input::get('educationQualification'); - $teacher->cellNo= Input::get('cellNo'); - $teacher->details= Input::get('details'); - $teacher->presentAddress= Input::get('presentAddress'); - $teacher->parmanentAddress= Input::get('parmanentAddress'); - $teacher->isActive=1; - - $hasTeacher = Teachers::where('regNo','=',Input::get('regNo'))->where('isActive',1)->first(); - if ($hasTeacher) - { - $messages = $validator->errors(); - $messages->add('Duplicate!', 'Teacher already exits with this employee no.'); - return Redirect::to('/teacher/create')->withErrors($messages)->withInput(); - } - else { - Input::file('photo')->move(base_path() .'/public/images/teachers',$fileName); - $teacher->save(); - return Redirect::to('/teacher/create')->with("success","Teacher added succesfully."); - } - - - } - } - - - /** - * - * @return Response - */ - public function show() - { - - $teachers = Teachers::where('isActive',1)->orderBy('regNo','asc')->get(); - return View::Make("app.teacher.list", compact('teachers')); - - - - } - - public function view($id) - { - $teacher = Teachers::where('regNo',$id)->where('isActive',1)->first(); - $cl = Leaves::where('regNo',$id)->where('lType','CL')->whereYear('leaveDate','=',date('Y'))->where('status',2)->count(); - $ml = Leaves::where('regNo',$id)->where('lType','ML')->whereYear('leaveDate','=',date('Y'))->where('status',2)->count(); - $ul = Leaves::where('regNo',$id)->where('lType','UL')->whereYear('leaveDate','=',date('Y'))->where('status',2)->count(); - - return View::Make("app.teacher.details",compact('teacher','cl','ml','ul')); - } - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return Response - */ - public function edit($id) - { - $teacher = Teachers::where('regNo',$id)->where('isActive',1)->first(); - return View::Make("app.teacher.edit",compact('teacher')); - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function update() - { - - $rules=[ -// 'regNo' => 'required', - 'fullName' => 'required', - 'gender' => 'required', - 'egroup' => 'required', - 'religion' => 'required', - 'bloodgroup' => 'required', - 'nationality' => 'required', - 'dob' => 'required', - 'joinDate' => 'required', -// 'photo' => 'required|mimes:jpeg,jpg,png', - 'cellNo' => 'required', - 'educationQualification' => 'required', - 'presentAddress' => 'required', - 'parmanentAddress' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/teacher/edit/'.Input::get('id'))->withErrors($validator); - } - else { - - $teacher = Teachers::where('regNo',Input::get('id'))->first(); - - if(Input::hasFile('photo')) - { - - if(substr(Input::file('photo')->getMimeType(), 0, 5) != 'image') - { - $messages = $validator->errors(); - $messages->add('Notvalid!', 'Photo must be a image,jpeg,jpg,png!'); - return Redirect::to('/teacher/edit/'.Input::get('id'))->withErrors($messages); - } - else { - - $fileName=Input::get('regNo').'.'.Input::file('photo')->getClientOriginalExtension(); - $teacher->photo = $fileName; - Input::file('photo')->move(base_path() .'/public/images/teachers',$fileName); - } - - } - else { - $teacher->photo= Input::get('oldphoto'); - - } -// $student->regiNo=Input::get('regiNo'); -// $teacher->regNo= Input::get('regNo'); - $teacher->fullName= Input::get('fullName'); - $teacher->gender= Input::get('gender'); - $teacher->egroup= Input::get('egroup'); - $teacher->religion= Input::get('religion'); - $teacher->bloodgroup= Input::get('bloodgroup'); - $teacher->nationality= Input::get('nationality'); - $teacher->dob= Input::get('dob'); - $teacher->joinDate= Input::get('joinDate'); - $teacher->educationQualification= Input::get('educationQualification'); - $teacher->cellNo= Input::get('cellNo'); - $teacher->details= Input::get('details'); - $teacher->presentAddress= Input::get('presentAddress'); - $teacher->parmanentAddress= Input::get('parmanentAddress'); - $teacher->update(); - - return Redirect::to('/teacher/list')->with("success","Teacher Updated Succesfully."); - } - - - } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function delete($id) - { - $teacher = Teachers::where('regNo',$id)->first(); - $teacher->isActive= 0; - $teacher->save(); - - return Redirect::to('/teacher/list')->with("success","Teacher Deleted Succesfully."); - } - - /** - * add atteance from file - * @return Response - */ - public function createAttendance() - { - return View::Make('app.teacher.attendance_create'); - } - - /** - * add atteance from file - * @return Response - */ - public function postCreateAttendance() - { - - $file = Input::file('fileUpload'); - $ext = strtolower($file->getClientOriginalExtension()); - - $validator = Validator::make(array('ext' => $ext),array('ext' => 'in:csv,xls,xlsx') - ); - if ($validator->fails()) { - return Redirect::to('/teacher-attendance/create')->withErrors($validator); - } else { - try { - $toInsert = 0; - $data = Excel::load(Input::file('fileUpload'), function ($reader) { })->get(); - - if(!empty($data) && $data->count()){ - DB::beginTransaction(); - try { - foreach ($data->toArray() as $row) { - if(count(array_keys($row))>=15){ - $attenData= [ - 'regNo' => $row['regno'], - 'date' => \Carbon\Carbon::createFromFormat('d-m-Y',$row['date']), - 'vEMPNO' => $row['vempno'], - 'dIN_TIME' => \Carbon\Carbon::createFromFormat('d-m-Y H:i:s',$row['din_time']), - 'dOUT_TIME' => \Carbon\Carbon::createFromFormat('d-m-Y H:i:s',$row['dout_time']), - 'nWorkingHOUR' => $row['nworkinghour'], - 'nLATE' => $row['nlate'], - 'vSTATUS' => $row['vstatus'], - 'REMARKS' => $row['remarks'], - 'vDEPT_NAME' => $row['vdept_name'], - 'vSECTION_NAME' => $row['vsection_name'], - 'vDES_NAME' => $row['vdes_name'], - 'vSHIFT_CODE' => $row['vshift_code'], - 'vWEEKLY_OFF' => $row['vweekly_off'], - 'created_at' => \Carbon\Carbon::createFromFormat('d-m-Y H:i:s',$row['created_at']) - ]; - - TeacherAttendance::insert($attenData); - $toInsert++; - } - } - DB::commit(); - } catch (\Exception $e) { - DB::rollback(); - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error', $e->getMessage()); - return Redirect::to('/teacher-attendance/create')->withErrors($errorMessages); - - // something went wrong - } - - } - - if($toInsert){ - return Redirect::to('/teacher-attendance/create')->with("success", $toInsert.' Teacher attendance record upload successfully.'); - } - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Validation', 'File is empty or invalid data! Please follow help note.'); - return Redirect::to('/teacher-attendance/create')->withErrors($errorMessages); - - } catch (\Exception $e) { - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error', $e->getMessage()); - return Redirect::to('/teacher-attendance/create')->withErrors($errorMessages); - } - } - } - - /** - * add atteance from file - * @return Response - */ - public function attenaceList() - { - $searchType = Input::get('searchType','1'); - $egroup = Input::get('egroup',null); - $regNo = Input::get('teacher',null); - $isPrint = Input::get('print_view',null); - $dateFrom = Input::get('dateFrom',date('Y-m-d',strtotime(date('Y-m-d')."-7 day"))); - $dateTo = Input::get('dateTo',date('Y-m-d')); - - if($regNo && $regNo !='0'){ - $attendance = TeacherAttendance::with('teacher') - ->where('regNo',$regNo) - ->whereDate('date','>=',$dateFrom) - ->whereDate('date','<=',$dateTo) - ->orderBy('date','desc') - ->get(); - - } - else{ - if($egroup && $egroup !='0'){ - $attendance = TeacherAttendance::with('teacher') - ->whereHas('teacher', function($q) use ($egroup) { - $q->where('egroup', '=', $egroup); - }) - ->whereDate('date','>=',$dateFrom) - ->whereDate('date','<=',$dateTo) - ->orderBy('date','desc') - ->get(); - } - else{ - $attendance = TeacherAttendance::with('teacher') - ->whereDate('date','>=',$dateFrom) - ->whereDate('date','<=',$dateTo) - ->orderBy('date','desc') - ->get(); - } - - } - - //=======================Holiday and work outside code start ========================= - //find request month first and last date - $firstDate = $dateFrom; - $lastDate = $dateTo; - - //get holidays of request month - $holiDays = Holidays::where('status',1) - ->whereDate('holiDate','>=',$firstDate) - ->whereDate('holiDate','<=',$lastDate) - ->lists('status','holiDate'); - -// //find fridays of requested month -// $fridays = []; -// $startDate = Carbon::parse($firstDate)->next(Carbon::FRIDAY); // Get the first friday. -// $endDate = Carbon::parse($lastDate); -// -// for ($date = $startDate; $date->lte($endDate); $date->addWeek()) { -// $fridays[$date->format('Y-m-d')] = 1; -// } - -// //get all leaves of employees for requested month -// $leaves = Leaves::where('status',2) -// ->whereDate('leaveDate','>=',$firstDate) -// ->whereDate('leaveDate','<=',$lastDate) -// ->get(); -// $empLeaves=[]; -// foreach ($leaves as $leave){ -// $empLeaves[$leave->regNo][$leave->leaveDate->format('Y-m-d')] = $leave->status; -// } - - //get all work outside of employees for requested month - $works = Workoutside::where('status',1) - ->whereDate('workDate','>=',$firstDate) - ->whereDate('workDate','<=',$lastDate) - ->get(); - $empWorks=[]; - foreach ($works as $work){ - $empWorks[$work->regNo][$work->workDate->format('Y-m-d')] = $work->status; - } - //=======================Holiday and work outside code end ========================= - - - - if($isPrint){ - $institute=Institute::select('*')->first(); - if(!count($institute)){ - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error','Please setup institute information!'); - return Redirect::to('/teacher-attendance/list')->withErrors($errorMessages); - } - - return View::Make('app.teacher.attendance_report',compact('institute','teachers','attendance', - 'regNo','egroup','searchType','dateFrom','dateTo','holiDays','empWorks' - )); - - } - $teachers = ['0'=>'All']+Teachers::select('regNo','fullName')->where('isActive',1)->orderby('regNo','asc')->lists('fullName','regNo'); - return View::Make('app.teacher.attendanceList', - compact('teachers','attendance','regNo','egroup','searchType', - 'dateFrom','dateTo','holiDays','empWorks' - )); - } - - - - /** - * report - * @return Response - */ - public function absenteeismReport() - { - - $isPrint = Input::get('print_view',null); - $dateFrom = Input::get('dateFrom',date('Y-m-d',strtotime(date('Y-m-d')."-7 day"))); - $dateTo = Input::get('dateTo',date('Y-m-d')); - - if($isPrint){ - $egroup = Input::get('egroup',null); - - $data=[]; - - if($egroup=="Teacher"){ - $teachers = Teachers::select('regNo')->where('egroup','Teacher')->lists('regNo'); - - $data = TeacherAttendance::selectRaw("date, COUNT(CASE WHEN vSTATUS='P' THEN vSTATUS ELSE NULL END) present, COUNT(CASE WHEN vSTATUS='A' THEN vSTATUS ELSE NULL END) absent, COUNT(vSTATUS) as total") - ->whereDate('date','>=',$dateFrom) - ->whereDate('date','<=',$dateTo) - ->whereIn('regNo',$teachers) - ->groupBy('date') - ->get(); - } - else{ - $staffs = Teachers::select('regNo')->where('egroup','Staff')->lists('regNo'); - - $data = TeacherAttendance::selectRaw("date, COUNT(CASE WHEN vSTATUS='P' THEN vSTATUS ELSE NULL END) present, COUNT(CASE WHEN vSTATUS='A' THEN vSTATUS ELSE NULL END) absent, COUNT(vSTATUS) as total") - ->whereDate('date','>=',$dateFrom) - ->whereDate('date','<=',$dateTo) - ->whereIn('regNo',$staffs) - ->groupBy('date') - ->get(); - } - - $institute=Institute::select('*')->first(); - if(!count($institute)){ - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error','Please setup institute information!'); - return Redirect::to('/teacher-attendance/list')->withErrors($errorMessages); - } - return View::Make('app.teacher.absenteeism_report',compact('institute','egroup','data','dateFrom','dateTo')); - - } - - - - return View::Make('app.teacher.absenteeism',compact('dateFrom','dateTo')); - }/** - - - - * report - * @return Response - */ - public function monthlyAttendanceReport() - { - - $isPrint = Input::get('print_view',null); - $yearMonth = Input::get('yearMonth',date('Y-m')); - - //find request month first and last date - $firstDate = $yearMonth."-01"; - $oneMonthEnd = strtotime("+1 month", strtotime($firstDate)); - $lastDate = date('Y-m-d',strtotime("-1 day",$oneMonthEnd)); - - //get holidays of request month - $holiDays = Holidays::where('status',1) - ->whereDate('holiDate','>=',$firstDate) - ->whereDate('holiDate','<=',$lastDate) - ->lists('status','holiDate'); - - //find fridays of requested month - $fridays = []; - $startDate = Carbon::parse($firstDate)->next(Carbon::FRIDAY); // Get the first friday. - $endDate = Carbon::parse($lastDate); - - for ($date = $startDate; $date->lte($endDate); $date->addWeek()) { - $fridays[$date->format('Y-m-d')] = 1; - } - - //get all leaves of employees for requested month - $leaves = Leaves::where('status',2) - ->whereDate('leaveDate','>=',$firstDate) - ->whereDate('leaveDate','<=',$lastDate) - ->get(); - $empLeaves=[]; - foreach ($leaves as $leave){ - $empLeaves[$leave->regNo][$leave->leaveDate->format('Y-m-d')] = $leave->status; - } - - //get all work outside of employees for requested month - $works = Workoutside::where('status',1) - ->whereDate('workDate','>=',$firstDate) - ->whereDate('workDate','<=',$lastDate) - ->get(); - $empWorks=[]; - foreach ($works as $work){ - $empWorks[$work->regNo][$work->workDate->format('Y-m-d')] = $work->status; - } - - - if($isPrint){ - $myPart = mb_split('-',$yearMonth); - if(count($myPart)!=2){ - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error','Please don\'t mess with inputs!!!'); - return Redirect::to('/teacher-attendance/monthly-report')->withErrors($errorMessages); - } - - $SelectCol = self::getSelectColumns($myPart[0],$myPart[1]); - $fullSql ="SELECT t.fullName as name,t.regNo,".$SelectCol." FROM TeacherAttendance as ta join Teachers as t ON ta.regNo=t.regNo AND t.isActive=1 GROUP BY ta.regNo;"; -// dd($fullSql); - $data = DB::select($fullSql); -// return $data; - $keys = array_keys((array)$data[0]); -// return $data; - $institute=Institute::select('*')->first(); - if(!count($institute)){ - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error','Please setup institute information!'); - return Redirect::to('/teacher-attendance/monthly-report')->withErrors($errorMessages); - } - - return View::Make('app.teacher.monthly_attendance_report',compact('institute','data','keys','yearMonth','fridays','holiDays','empLeaves','empWorks')); - - } - return View::Make('app.teacher.monthly_attendance',compact('yearMonth')); - } - - - - private static function getSelectColumns($year,$month){ - $start_date = "01-".$month."-".$year; - $start_time = strtotime($start_date); - - $end_time = strtotime("+1 month", $start_time); - $selectCol = ""; - for($i=$start_time; $i<$end_time; $i+=86400) - { - $d = date('Y-m-d', $i); - $selectCol .= "MAX(IF(date = '".$d."', vSTATUS, 0)) AS '".$d."',"; - } - if(strlen($selectCol)){ - $selectCol = substr($selectCol,0,-1); - } - - return $selectCol; - } - - - /* - * Holidays manage codes gores below - * - */ - - /** - * Display a listing of the resource. - * - * @return Response - */ - public function holidayIndex() - { - $holidays = Holidays::where('status',1)->get(); - return View::Make('app.teacher.holiday.list',compact('holidays')); - } - - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function holidayCreate() - { - $rules=[ - 'holiDate' => 'required' - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/holiday/create')->withErrors($validator); - } - else { - - $holiDayStart = \Carbon\Carbon::createFromFormat('d/m/Y',Input::get('holiDate')); - $holiDayEnd = null; - if(strlen(Input::get('holiDateEnd'))) { - $holiDayEnd = \Carbon\Carbon::createFromFormat('d/m/Y', Input::get('holiDateEnd')); - } - - $dateList = []; - - $desc = Input::get('description'); - - if($holiDayEnd){ - if($holiDayEnd<$holiDayStart){ - $messages = $validator->errors(); - $messages->add('Wrong Input!', 'Date End can\'t be less than start date!'); - return Redirect::to('/holidays')->withErrors($messages)->withInput(); - } - - $start_time = strtotime($holiDayStart); - $end_time = strtotime($holiDayEnd); - for($i=$start_time; $i<=$end_time; $i+=86400) - { - $dateList[] = [ - 'holiDate' => date('Y-m-d', $i), - 'createdAt' => \Carbon\Carbon::now(), - 'description' => $desc, - 'status' => 1 - ]; - - } - - } - else{ - $dateList[] = [ - 'holiDate' => $holiDayStart->format('Y-m-d'), - 'createdAt' => \Carbon\Carbon::now(), - 'description' => $desc, - 'status' => 1 - ]; - } - - Holidays::insert($dateList); - - return Redirect::to('/holidays')->with("success","Holidays added succesfully."); - - - - } - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function holidayDelete($id) - { - $holiDay = Holidays::findOrFail($id); - $holiDay->status= 0; - $holiDay->save(); - - return Redirect::to('/holidays')->with("success","Holiday Deleted Succesfully."); - } - - - /* - * Leave manage codes gores below - * - */ - /** - * Display a listing of the resource. - * - * @return Response - */ - public function leaveIndex() - { - - $type = Input::get('lType',null); - $employee = Input::get('employee',null); - $status = Input::get('status',1); - - - if($status!='0'){ - $query = Leaves::where('status',$status); - } - else{ - $query = Leaves::whereIn('status',[1,2,3]); - } - - if($type && strlen($type)){ - $query = $query->where('lType',$type); - } - if($employee && strlen($employee)){ - $query = $query->where('regNo',$employee); - } - $leaves = $query->with('teacher')->orderBy('leaveDate','desc')->get(); - $teachers = ['0'=>'All']+Teachers::select('regNo','fullName')->where('isActive',1)->orderby('regNo','asc')->lists('fullName','regNo'); - return View::Make('app.teacher.leave.list',compact('leaves','teachers','employee','type','status')); - } - - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function leaveCreate() - { - $teachers = Teachers::select('regNo','fullName')->where('isActive',1)->orderby('regNo','asc')->lists('fullName','regNo'); - return View::Make('app.teacher.leave.create',compact('teachers')); - - } - - /** - * Store the form for creating a new resource. - * - * @return Response - */ - public function leaveStore() - { - - $rules=[ - 'employee' => 'required', - 'lType' => 'required', - 'leaveDate' => 'required', - 'paper' => 'mimes:jpeg,jpg,png,pdf,doc,docx,odt,txt,text|max:2048', - - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/leaves/create')->withErrors($validator); - } - else { - $dayCount = 1; - $leaveDateStart = \Carbon\Carbon::createFromFormat('d/m/Y',Input::get('leaveDate')); - $leaveDateEnd = null; - if(strlen(Input::get('leaveDateEnd'))) { - $leaveDateEnd = \Carbon\Carbon::createFromFormat('d/m/Y', Input::get('leaveDateEnd')); - - $dayCount = $leaveDateEnd->diff($leaveDateStart)->format("%a")+1; - } - - - - $leaveList = []; - - $lType = Input::get('lType'); - $employee = Input::get('employee'); - $desc = Input::get('description'); - $fileName=null; - - //===============Has days for leave checking ====================== - $hasDayLeft = true; - $lerrMsg = ""; - if($lType=="CL"){ - $cl = Leaves::where('regNo',$employee)->where('lType','CL')->whereYear('leaveDate','=',date('Y'))->where('status',2)->count(); - if(($cl+$dayCount)>20){ - $hasDayLeft =false; - $lerrMsg="Casual leave limit is over.He/She took ".strval($cl)." day's leave already."; - } - } - if($lType=="ML"){ - $ml = Leaves::where('regNo',$employee)->where('lType','ML')->whereYear('leaveDate','=',date('Y'))->where('status',2)->count(); - if(($ml+$dayCount)>10){ - $hasDayLeft =false; - $lerrMsg="Sick leave limit is over.He/She took ".strval($ml)." day's leave already."; - } - } -// $ul = Leaves::where('regNo',$employee)->where('lType','UL')->whereYear('leaveDate','=',date('Y'))->where('status',2)->count(); - if(!$hasDayLeft){ - $messages = $validator->errors(); - $messages->add('Limit Over', $lerrMsg); - return Redirect::to('/leaves/create')->withErrors($messages)->withInput(); - } - - //========================END==================== - - if(Input::hasFile('paper')){ - $fileName=uniqid().'.'.Input::file('paper')->getClientOriginalExtension(); - Input::file('paper')->move(base_path() .'/public/images/teachers',$fileName); - } - - if($leaveDateEnd){ - if($leaveDateEnd<$leaveDateStart){ - $messages = $validator->errors(); - $messages->add('Wrong Input!', 'Date End can\'t be less than start date!'); - return Redirect::to('/leaves/create')->withErrors($messages)->withInput(); - } - - $start_time = strtotime($leaveDateStart); - $end_time = strtotime($leaveDateEnd); - for($i=$start_time; $i<=$end_time; $i+=86400) - { - $leaveList[] = [ - 'regNo' => $employee, - 'lType' => $lType, - 'leaveDate' => date('Y-m-d', $i), - 'created_at' => \Carbon\Carbon::now(), - 'updated_at' => \Carbon\Carbon::now(), - 'description' => $desc, - 'paper' => $fileName, - 'status' => 1 - ]; - - } - - } - else{ - $leaveList[] = [ - 'regNo' => $employee, - 'lType' => $lType, - 'leaveDate' => $leaveDateStart->format('Y-m-d'), - 'created_at' => \Carbon\Carbon::now(), - 'updated_at' => \Carbon\Carbon::now(), - 'description' => $desc, - 'paper' => $fileName, - 'status' => 1 - ]; - } - - Leaves::insert($leaveList); - - return Redirect::to('/leaves/create')->with("success","Leave added to pending list, need Principal approval."); - - - } - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ - public function leaveUpdate($id,$status) - { - - $leave = Leaves::where('status',1)->where('id',$id)->first(); - if(!$leave){ - return Redirect::to('/leaves')->with("error","Leave not found!"); - - } - $leave->status= $status; - $leave->save(); - - return Redirect::to('/leaves')->with("success","Leave updated succesfully."); - - - } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function leaveDelete($id) - { - $leave = Leaves::where('status',1)->where('id',$id)->first(); - - if(!$leave){ - return Redirect::to('/leaves')->with("error","Leave not found!"); - - } - $leave->status= 0; - $leave->save(); - - return Redirect::to('/leaves')->with("success","Leave Deleted Succesfully."); - } - - - - /* - * work out side manage codes gores below - * - */ - /** - * Display a listing of the resource. - * - * @return Response - */ - public function workOutsideIndex() - { - - $employee = Input::get('employee',null); -// $status = Input::get('status',1); - - $query = Workoutside::where('status',1); -// if($status!='0'){ -// $query = Leaves::where('status',$status); -// } -// else{ -// $query = Leaves::whereIn('status',[1,2,3]); -// } - - if($employee && strlen($employee)){ - $query = $query->where('regNo',$employee); - } - $workOutsides = $query->with('teacher')->orderBy('workDate','desc')->get(); - $teachers = ['0'=>'All']+Teachers::select('regNo','fullName')->where('isActive',1)->orderby('regNo','asc')->lists('fullName','regNo'); - return View::Make('app.teacher.workoutside.list',compact('workOutsides','teachers','employee')); - } - - - - /** - * Show the form for creating a new resource. - * - * @return Response - */ - public function workOutsideCreate() - { - $teachers = Teachers::select('regNo','fullName')->where('isActive',1)->orderby('regNo','asc')->lists('fullName','regNo'); - return View::Make('app.teacher.workoutside.create',compact('teachers')); - - } - - /** - * Store the form for creating a new resource. - * - * @return Response - */ - public function workOutsideStore() - { - - $rules=[ - 'employee' => 'required', - 'workDate' => 'required', - 'paper' => 'mimes:jpeg,jpg,png,pdf,doc,docx,odt,txt,text|max:2048', - - ]; - $validator = \Validator::make(Input::all(), $rules); - if ($validator->fails()) - { - return Redirect::to('/workoutside/create')->withErrors($validator); - } - else { - - $leaveDateStart = \Carbon\Carbon::createFromFormat('d/m/Y',Input::get('workDate')); - $leaveDateEnd = null; - if(strlen(Input::get('leaveDateEnd'))) { - $leaveDateEnd = \Carbon\Carbon::createFromFormat('d/m/Y', Input::get('leaveDateEnd')); - } - - $leaveList = []; - - $employee = Input::get('employee'); - $desc = Input::get('description'); - $fileName=null; - - if(Input::hasFile('paper')){ - $fileName=uniqid().'.'.Input::file('paper')->getClientOriginalExtension(); - Input::file('paper')->move(base_path() .'/public/images/teachers',$fileName); - } - - if($leaveDateEnd){ - if($leaveDateEnd<$leaveDateStart){ - $messages = $validator->errors(); - $messages->add('Wrong Input!', 'Date End can\'t be less than start date!'); - return Redirect::to('/workoutside/create')->withErrors($messages)->withInput(); - } - - $start_time = strtotime($leaveDateStart); - $end_time = strtotime($leaveDateEnd); - for($i=$start_time; $i<=$end_time; $i+=86400) - { - $leaveList[] = [ - 'regNo' => $employee, - 'workDate' => date('Y-m-d', $i), - 'created_at' => \Carbon\Carbon::now(), - 'updated_at' => \Carbon\Carbon::now(), - 'description' => $desc, - 'paper' => $fileName, - 'status' => 1 - ]; - - } - - } - else{ - $leaveList[] = [ - 'regNo' => $employee, - 'workDate' => $leaveDateStart->format('Y-m-d'), - 'created_at' => \Carbon\Carbon::now(), - 'updated_at' => \Carbon\Carbon::now(), - 'description' => $desc, - 'paper' => $fileName, - 'status' => 1 - ]; - } - - Workoutside::insert($leaveList); - - return Redirect::to('/workoutside/create')->with("success","Work outside entry added."); - - - } - } - - - /** - * Update the specified resource in storage. - * - * @param int $id - * @return Response - */ -// public function workOutsideUpdate($id,$status) -// { -// -// $leave = Leaves::where('status',1)->where('id',$id)->first(); -// if(!$leave){ -// return Redirect::to('/leaves')->with("error","Leave not found!"); -// -// } -// $leave->status= $status; -// $leave->save(); -// -// return Redirect::to('/leaves')->with("success","Leave updated succesfully."); -// -// -// } - - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return Response - */ - public function workOutsideDelete($id) - { - $work = Workoutside::where('status',1)->where('id',$id)->first(); - - if(!$work){ - return Redirect::to('/workoutside')->with("error","Work outside entry not found!"); - - } - $work->status= 0; - $work->save(); - - return Redirect::to('/workoutside')->with("success","Work outside entry deleted succesfully."); - } - - - public function monthlyAttendanceReport2() - { - - $isPrint = Input::get('print_view',null); - $yearMonth = Input::get('yearMonth',date('Y-m')); - - - if($isPrint){ - - //find request month first and last date - $firstDate = $yearMonth."-01"; - $oneMonthEnd = strtotime("+1 month", strtotime($firstDate)); - $lastDate = date('Y-m-d',strtotime("-1 day",$oneMonthEnd)); - - //get holidays of request month - $holiDays = Holidays::where('status',1) - ->whereDate('holiDate','>=',$firstDate) - ->whereDate('holiDate','<=',$lastDate) - ->lists('status','holiDate'); - - //find fridays of requested month - $fridays = []; - $startDate = Carbon::parse($firstDate)->next(Carbon::FRIDAY); // Get the first friday. - $endDate = Carbon::parse($lastDate); - - for ($date = $startDate; $date->lte($endDate); $date->addWeek()) { - $fridays[$date->format('Y-m-d')] = 1; - } - - //get all leaves of employees for requested month - $leaves = Leaves::where('status',2) - ->whereDate('leaveDate','>=',$firstDate) - ->whereDate('leaveDate','<=',$lastDate) - ->get(); - $empLeaves=[]; - foreach ($leaves as $leave){ - $empLeaves[$leave->regNo][$leave->leaveDate->format('Y-m-d')] = $leave->status; - } - - //get all work outside of employees for requested month - $works = Workoutside::where('status',1) - ->whereDate('workDate','>=',$firstDate) - ->whereDate('workDate','<=',$lastDate) - ->get(); - $empWorks=[]; - foreach ($works as $work){ - $empWorks[$work->regNo][$work->workDate->format('Y-m-d')] = $work->status; - } - - $myPart = mb_split('-',$yearMonth); - if(count($myPart)!=2){ - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error','Please don\'t mess with inputs!!!'); - return Redirect::to('/teacher-attendance/monthly-report-2')->withErrors($errorMessages); - } - - $SelectCol = self::getSelectColumns($myPart[0],$myPart[1]); - $fullSql ="SELECT t.fullName as name,t.regNo,'status/time',".$SelectCol." FROM TeacherAttendance as ta join Teachers as t ON ta.regNo=t.regNo AND t.isActive=1 GROUP BY ta.regNo;"; - $data = DB::select($fullSql); - $keys = array_keys((array)$data[0]); - - $regNumbers = []; - - foreach ($data as $datum){ - $regNumbers[] = $datum->regNo; - } - - $attendance = TeacherAttendance::whereIn('regNo',$regNumbers) - ->whereDate('date','>=',$firstDate) - ->whereDate('date','<=',$lastDate) - ->orderBy('date','asc') - ->get(); - - $prityData = []; - foreach ($attendance as $atd){ - $prityData[$atd->regNo][$atd->date->format('Y-m-d')] = [ - 'in' => $atd->dIN_TIME, - 'out' => $atd->dOUT_TIME, - 'work' => $atd->nWorkingHOUR, - ]; - } - - - $institute=Institute::select('*')->first(); - if(!count($institute)){ - $errorMessages = new Illuminate\Support\MessageBag; - $errorMessages->add('Error','Please setup institute information!'); - return Redirect::to('/teacher-attendance/monthly-report-2')->withErrors($errorMessages); - } - - return View::Make('app.teacher.monthly_attendance_report_two',compact('institute','data','keys','yearMonth','fridays','holiDays','empLeaves','empWorks','prityData')); - - } - - return View::Make('app.teacher.monthly_attendance_two',compact('yearMonth')); - } - -} diff --git a/app/database/migrations/.gitkeep b/app/database/migrations/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/database/migrations/2015_07_05_164156_create-users-table.php b/app/database/migrations/2015_07_05_164156_create-users-table.php deleted file mode 100644 index 053655ab..00000000 --- a/app/database/migrations/2015_07_05_164156_create-users-table.php +++ /dev/null @@ -1,41 +0,0 @@ -increments('id'); - $table->string('firstname', 20); - $table->string('lastname', 20); - $table->string('desc', 200); - $table->string('address', 500)->nullable(); - $table->string('login', 20)->unique(); - $table->string('email', 100)->unique(); - $table->string('group',20); - $table->string('password', 64); - $table->rememberToken(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('users'); - } - -} diff --git a/app/database/migrations/2015_07_08_142609_createTableClass.php b/app/database/migrations/2015_07_08_142609_createTableClass.php deleted file mode 100644 index b1c70a4c..00000000 --- a/app/database/migrations/2015_07_08_142609_createTableClass.php +++ /dev/null @@ -1,36 +0,0 @@ -increments('id'); - $table->string('code',20)->unique; - $table->string('name',100); - $table->string('description',250); - $table->boolean('combinePass')->default(0); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('Class'); - } - -} diff --git a/app/database/migrations/2015_07_08_144003_createTableSubject.php b/app/database/migrations/2015_07_08_144003_createTableSubject.php deleted file mode 100644 index b8710b76..00000000 --- a/app/database/migrations/2015_07_08_144003_createTableSubject.php +++ /dev/null @@ -1,50 +0,0 @@ -increments('id'); - $table->string('code',20); - $table->string('name',250); - $table->string('type',30); - $table->string('stdgroup',30); - $table->string('subgroup',30); - $table->string('class',100); - $table->string('gradeSystem',2); - $table->integer('totalfull')->default(0); - $table->integer('totalpass')->default(0); - $table->integer('wfull')->default(0); - $table->integer('wpass')->default(0); - $table->integer('mfull')->default(0); - $table->integer('mpass')->default(0); - $table->integer('sfull')->default(0); - $table->integer('spass')->default(0); - $table->integer('pfull')->default(0); - $table->integer('ppass')->default(0); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('Subject'); - } - -} diff --git a/app/database/migrations/2015_07_08_144824_createTableStudent.php b/app/database/migrations/2015_07_08_144824_createTableStudent.php deleted file mode 100644 index 561bdabe..00000000 --- a/app/database/migrations/2015_07_08_144824_createTableStudent.php +++ /dev/null @@ -1,65 +0,0 @@ -increments('id'); - $table->string('regiNo',20); - $table->string('rollNo',20); - $table->string('session',15); - $table->string('class',100); - $table->string('group',15); - $table->string('section',2); - $table->string('shift',15); - - $table->string('firstName',60); - $table->string('middleName',60); - $table->string('lastName',60); - $table->string('gender',10); - $table->string('religion',15); - $table->string('bloodgroup',10); - $table->string('nationality',50); - $table->string('dob',12); - $table->string('photo',30); - $table->string('extraActivity',150); - $table->string('remarks',250); - - $table->string('fatherName',180); - $table->string('fatherCellNo',15); - $table->string('motherName',180); - $table->string('motherCellNo',15); - $table->string('localGuardian',180); - $table->string('localGuardianCell',15); - $table->string('presentAddress',500); - $table->string('parmanentAddress',500); - $table->string('isActive',10); - $table->string('fourthSubject',255)->nullable(); - $table->string('cphsSubject',255)->nullable(); - $table->timestamps(); - $table->index('regiNo'); - - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('Student'); - } - -} diff --git a/app/database/migrations/2015_07_11_181156_createTableGPA.php b/app/database/migrations/2015_07_11_181156_createTableGPA.php deleted file mode 100644 index 2fff1bbc..00000000 --- a/app/database/migrations/2015_07_11_181156_createTableGPA.php +++ /dev/null @@ -1,37 +0,0 @@ -increments('id'); - $table->string('for',2); - $table->string('gpa',20); - $table->float('grade'); - $table->integer('markfrom'); - $table->integer('markto'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('GPA'); - } - -} diff --git a/app/database/migrations/2015_07_11_233620_createTableMarks.php b/app/database/migrations/2015_07_11_233620_createTableMarks.php deleted file mode 100644 index d12fb74e..00000000 --- a/app/database/migrations/2015_07_11_233620_createTableMarks.php +++ /dev/null @@ -1,47 +0,0 @@ -increments('id'); - $table->string('class',20); - $table->string('section',1); - $table->string('shift',20); - $table->string('session',10); - $table->string('regiNo',20); - $table->string('exam',50); - $table->string('subject',100); - $table->integer('written'); - $table->integer('mcq'); - $table->integer('practical'); - $table->integer('ca'); - $table->integer('total'); - $table->string('grade'); - $table->decimal('point',3,2); - $table->string('Absent',10)->default('No'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('Marks'); - } - -} diff --git a/app/database/migrations/2015_08_01_135811_createTableMeritList.php b/app/database/migrations/2015_08_01_135811_createTableMeritList.php deleted file mode 100644 index f40d4bb1..00000000 --- a/app/database/migrations/2015_08_01_135811_createTableMeritList.php +++ /dev/null @@ -1,39 +0,0 @@ -increments('id'); - $table->string('class'); - $table->string('session'); - $table->string('exam'); - $table->string('regiNo'); - $table->decimal('totalNo',5,2); - $table->decimal('point',18,2); - $table->string('grade'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('MeritList'); - } - -} diff --git a/app/database/migrations/2015_09_10_215609_createTableAttendance.php b/app/database/migrations/2015_09_10_215609_createTableAttendance.php deleted file mode 100644 index 7d1b6b54..00000000 --- a/app/database/migrations/2015_09_10_215609_createTableAttendance.php +++ /dev/null @@ -1,40 +0,0 @@ -increments('id'); - $table->string('regiNo',20); - $table->date('date'); - $table->dateTime('created_at'); - $table->foreign('regiNo') - ->references('regiNo')->on('Student'); - - - - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('Attendance'); - } - -} diff --git a/app/database/migrations/2015_09_11_131940_createTableSMSformat.php b/app/database/migrations/2015_09_11_131940_createTableSMSformat.php deleted file mode 100644 index 80e02626..00000000 --- a/app/database/migrations/2015_09_11_131940_createTableSMSformat.php +++ /dev/null @@ -1,36 +0,0 @@ -increments('id'); - $table->string('type',30); - $table->string('sender',100); - $table->text('message'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('smsFormat'); - } - -} diff --git a/app/database/migrations/2015_09_11_144756_createTableSMSLog.php b/app/database/migrations/2015_09_11_144756_createTableSMSLog.php deleted file mode 100644 index 13e97720..00000000 --- a/app/database/migrations/2015_09_11_144756_createTableSMSLog.php +++ /dev/null @@ -1,38 +0,0 @@ -increments('id'); - $table->string('type',30); - $table->string('sender',100); - $table->string('recipient',15); - $table->text('message'); - $table->string('regiNo'); - $table->string('status'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('smsLog'); - } - -} diff --git a/app/database/migrations/2015_10_13_225004_account_sectorTable.php b/app/database/migrations/2015_10_13_225004_account_sectorTable.php deleted file mode 100644 index 1d51c0b2..00000000 --- a/app/database/migrations/2015_10_13_225004_account_sectorTable.php +++ /dev/null @@ -1,34 +0,0 @@ -increments('id'); - $table->string('name',500); - $table->string('type',20); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('accounting_sector'); - } - -} diff --git a/app/database/migrations/2015_10_14_091810_accountingTable.php b/app/database/migrations/2015_10_14_091810_accountingTable.php deleted file mode 100644 index dea86298..00000000 --- a/app/database/migrations/2015_10_14_091810_accountingTable.php +++ /dev/null @@ -1,37 +0,0 @@ -increments('id'); - $table->string('name',500); - $table->string('type',20); - $table->decimal('amount',18,2); - $table->date('date'); - $table->text('description'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('accounting'); - } - -} diff --git a/app/database/migrations/2015_10_30_103818_feesSetup.php b/app/database/migrations/2015_10_30_103818_feesSetup.php deleted file mode 100644 index ae1a439e..00000000 --- a/app/database/migrations/2015_10_30_103818_feesSetup.php +++ /dev/null @@ -1,39 +0,0 @@ -increments('id'); - - $table->string('class',20); - $table->string('type',20); - $table->string('title',100); - $table->decimal('fee',18,2); - $table->decimal('Latefee',18,2)->default(0); - $table->text('description')->default(''); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('feesSetup'); - } - -} diff --git a/app/database/migrations/2015_11_23_135240_createTableFeeCollection.php b/app/database/migrations/2015_11_23_135240_createTableFeeCollection.php deleted file mode 100644 index 9f701269..00000000 --- a/app/database/migrations/2015_11_23_135240_createTableFeeCollection.php +++ /dev/null @@ -1,39 +0,0 @@ -increments('id'); - $table->string('billNo',20); - $table->string('class',20); - $table->string('regiNo',20); - $table->decimal('payableAmount',18,2); - $table->decimal('paidAmount',18,2); - $table->decimal('dueAmount',18,2); - $table->date('payDate'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('stdBill'); - } - -} diff --git a/app/database/migrations/2015_11_23_135304_createTableFeeDue.php b/app/database/migrations/2015_11_23_135304_createTableFeeDue.php deleted file mode 100644 index 4eecc9f9..00000000 --- a/app/database/migrations/2015_11_23_135304_createTableFeeDue.php +++ /dev/null @@ -1,37 +0,0 @@ -increments('id'); - $table->string('billNo',20); - $table->string('title',100); - $table->string('month',5); - $table->decimal('fee',18,2); - $table->decimal('lateFee',18,2); - $table->decimal('total',18,2); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('billHistory'); - } - -} diff --git a/app/database/migrations/2015_11_28_111221_createTableAdmission.php b/app/database/migrations/2015_11_28_111221_createTableAdmission.php deleted file mode 100644 index 9862b2a7..00000000 --- a/app/database/migrations/2015_11_28_111221_createTableAdmission.php +++ /dev/null @@ -1,48 +0,0 @@ -increments('id'); - $table->string('refNo',20); - $table->string('seatNo',20); - $table->string('transactionNo',50); - $table->string('stdName',100); - $table->string('nationality',50); - $table->string('class',10); - $table->string('session',10); - $table->string('dob'); - $table->string('photo',20); - $table->string('campus',50); - $table->string('keeping',50); - $table->string('fatherName',100); - $table->string('fatherCellNo',20); - $table->string('motherName',100); - $table->string('motherCellNo',50); - $table->string('status',50); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('admission'); - } - -} diff --git a/app/database/migrations/2015_12_03_171357_createTableBooks.php b/app/database/migrations/2015_12_03_171357_createTableBooks.php deleted file mode 100644 index 72a1d75e..00000000 --- a/app/database/migrations/2015_12_03_171357_createTableBooks.php +++ /dev/null @@ -1,41 +0,0 @@ -increments('id'); - $table->string('code',50)->unique(); - $table->string('title',250); - $table->string('author',100); - $table->integer('quantity')->unsigned(); - $table->string('rackNo',10); - $table->string('rowNo',10); - $table->string('type',10); - $table->string('class',10); - $table->string('desc',500); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('Books'); - } - -} diff --git a/app/database/migrations/2016_01_22_171646_createTableissuebook.php b/app/database/migrations/2016_01_22_171646_createTableissuebook.php deleted file mode 100644 index f3e4c4fb..00000000 --- a/app/database/migrations/2016_01_22_171646_createTableissuebook.php +++ /dev/null @@ -1,39 +0,0 @@ -increments('id'); - $table->string('regiNo',20); - $table->string('code',50); - $table->integer('quantity')->unsigned(); - $table->date('issueDate'); - $table->date('returnDate'); - $table->decimal('fine',18,2)->default(0.00); - $table->string('Status',10)->default('Borrowed'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('issueBook'); - } - -} diff --git a/app/database/migrations/2016_03_17_121606_createTableDormitory.php b/app/database/migrations/2016_03_17_121606_createTableDormitory.php deleted file mode 100644 index cf2b3826..00000000 --- a/app/database/migrations/2016_03_17_121606_createTableDormitory.php +++ /dev/null @@ -1,36 +0,0 @@ -increments('id'); - $table->string('name',50); - $table->integer('numOfRoom')->defualt(0); - $table->string('address',150); - $table->string('description',200); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('dormitory'); - } - -} diff --git a/app/database/migrations/2016_03_17_204551_createTableDormitory-Student.php b/app/database/migrations/2016_03_17_204551_createTableDormitory-Student.php deleted file mode 100644 index b24bec0e..00000000 --- a/app/database/migrations/2016_03_17_204551_createTableDormitory-Student.php +++ /dev/null @@ -1,39 +0,0 @@ -increments('id'); - $table->string('regiNo',20); - $table->date('joinDate'); - $table->date('leaveDate'); - $table->integer('dormitory'); - $table->string('roomNo',4); - $table->decimal('monthlyFee',10,2); - $table->string('isActive',3); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('dormitory_student'); - } - -} diff --git a/app/database/migrations/2016_03_18_012541_createTableDormitory-fee.php b/app/database/migrations/2016_03_18_012541_createTableDormitory-fee.php deleted file mode 100644 index d410ed96..00000000 --- a/app/database/migrations/2016_03_18_012541_createTableDormitory-fee.php +++ /dev/null @@ -1,35 +0,0 @@ -increments('id'); - $table->string('regiNo',20); - $table->date('feeMonth'); - $table->decimal('feeAmount',10,2); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('dormitory_fee'); - } - -} diff --git a/app/database/migrations/2016_03_24_124531_createTableInstitute.php b/app/database/migrations/2016_03_24_124531_createTableInstitute.php deleted file mode 100644 index ca4c2109..00000000 --- a/app/database/migrations/2016_03_24_124531_createTableInstitute.php +++ /dev/null @@ -1,37 +0,0 @@ -string('name',250); - $table->string('establish',10); - $table->string('email',100); - $table->string('web',80); - $table->string('phoneNo',15); - $table->string('address',250); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('institute'); - } - -} diff --git a/app/database/migrations/2016_06_12_235427_create_table_bookStock.php b/app/database/migrations/2016_06_12_235427_create_table_bookStock.php deleted file mode 100644 index 572d99c9..00000000 --- a/app/database/migrations/2016_06_12_235427_create_table_bookStock.php +++ /dev/null @@ -1,34 +0,0 @@ -string('code'); - $table->integer('quantity')->unsigned(); - - }); - } - - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('bookStock'); - } - -} diff --git a/app/database/migrations/2016_12_25_143536_createTiggersForBookStock.php b/app/database/migrations/2016_12_25_143536_createTiggersForBookStock.php deleted file mode 100644 index 99509f6d..00000000 --- a/app/database/migrations/2016_12_25_143536_createTiggersForBookStock.php +++ /dev/null @@ -1,90 +0,0 @@ -increments('id'); - $table->string('queue', 255)->nullable()->default(null); - $table->integer('status')->default(0); - $table->integer('retries')->default(0); - $table->timestamp('timestamp'); - $table->longText('payload')->nullable(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('queues'); - } -} diff --git a/app/database/migrations/2017_03_11_140246_create_failed_jobs_table.php b/app/database/migrations/2017_03_11_140246_create_failed_jobs_table.php deleted file mode 100644 index 61efc17d..00000000 --- a/app/database/migrations/2017_03_11_140246_create_failed_jobs_table.php +++ /dev/null @@ -1,35 +0,0 @@ -increments('id'); - $table->text('connection'); - $table->text('queue'); - $table->text('payload'); - $table->timestamp('failed_at'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('failed_jobs'); - } - -} diff --git a/app/database/migrations/2017_10_27_101400_create_table_teacher.php b/app/database/migrations/2017_10_27_101400_create_table_teacher.php deleted file mode 100644 index ee01b418..00000000 --- a/app/database/migrations/2017_10_27_101400_create_table_teacher.php +++ /dev/null @@ -1,49 +0,0 @@ -string('regNo',255); - $table->enum('egroup', ['Teacher', 'Staff'])->nullable(); - $table->string('fullName',255); - $table->string('gender',10); - $table->string('religion',15); - $table->string('bloodgroup',10); - $table->string('nationality',50); - $table->string('dob',12); - $table->string('joinDate',12); - $table->string('photo',270); - $table->string('educationQualification',30); - $table->text('details')->nullable(); - $table->string('cellNo',15); - $table->string('presentAddress',500); - $table->string('parmanentAddress',500); - $table->smallInteger('isActive')->default(1); - $table->timestamps(); - $table->primary('regNo'); - - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('Teachers'); - } - -} diff --git a/app/database/migrations/2017_10_27_102122_create_table_teacher_attendance.php b/app/database/migrations/2017_10_27_102122_create_table_teacher_attendance.php deleted file mode 100644 index a826854f..00000000 --- a/app/database/migrations/2017_10_27_102122_create_table_teacher_attendance.php +++ /dev/null @@ -1,48 +0,0 @@ -increments('id'); - $table->string('regNo',255); - $table->date('date'); -// $table->string('vEMPNO',20); - $table->time('dIN_TIME'); - $table->time('dOUT_TIME'); - $table->decimal('nWorkingHOUR',8,2); - $table->decimal('nLATE',8,2)->nullable(); - $table->string('vSTATUS',10); - $table->string('REMARKS',200)->nullable(); - $table->string('vDEPT_NAME',40)->nullable(); - $table->string('vSECTION_NAME',50)->nullable(); - $table->string('vDES_NAME',40)->nullable(); - $table->string('vSHIFT_CODE',10)->nullable(); - $table->string('vWEEKLY_OFF',15)->nullable(); - $table->timestamp('created_at'); - $table->foreign('regNo') - ->references('regNo')->on('Teachers'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('TeacherAttendance'); - } - -} diff --git a/app/database/migrations/2018_01_14_200722_create_table_holidays.php b/app/database/migrations/2018_01_14_200722_create_table_holidays.php deleted file mode 100644 index b5bf5ca6..00000000 --- a/app/database/migrations/2018_01_14_200722_create_table_holidays.php +++ /dev/null @@ -1,36 +0,0 @@ -increments('id'); - $table->date('holiDate'); - $table->string('description',500)->nullable(); - $table->timestamp('createdAt'); - $table->boolean('status'); - - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('Holidays'); - } - -} diff --git a/app/database/migrations/2018_01_14_221400_create_table_leaves.php b/app/database/migrations/2018_01_14_221400_create_table_leaves.php deleted file mode 100644 index 80a2ecf8..00000000 --- a/app/database/migrations/2018_01_14_221400_create_table_leaves.php +++ /dev/null @@ -1,41 +0,0 @@ -increments('id'); - $table->string('regNo',255); - $table->enum('lType', ['CL', 'ML', 'UL']); - $table->date('leaveDate'); - $table->string('paper',270)->nullable(); - $table->string('description',500)->nullable(); - $table->smallInteger('status')->default(1); - $table->timestamps(); - $table->foreign('regNo') - ->references('regNo')->on('Teachers'); - - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('Leaves'); - } - -} diff --git a/app/database/migrations/2018_01_17_221400_create_table_class_off.php b/app/database/migrations/2018_01_17_221400_create_table_class_off.php deleted file mode 100644 index 91780b86..00000000 --- a/app/database/migrations/2018_01_17_221400_create_table_class_off.php +++ /dev/null @@ -1,37 +0,0 @@ -increments('id'); - $table->date('offDate'); - $table->enum('oType', ['E', 'O', 'CP']); - $table->string('description',500)->nullable(); - $table->smallInteger('status')->default(1); - $table->timestamps(); - - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('ClassOffDay'); - } - -} diff --git a/app/database/migrations/2018_01_17_221400_create_table_work_outside.php b/app/database/migrations/2018_01_17_221400_create_table_work_outside.php deleted file mode 100644 index 30d0003c..00000000 --- a/app/database/migrations/2018_01_17_221400_create_table_work_outside.php +++ /dev/null @@ -1,40 +0,0 @@ -increments('id'); - $table->string('regNo',255); - $table->date('workDate'); - $table->string('paper',270)->nullable(); - $table->string('description',500)->nullable(); - $table->smallInteger('status')->default(1); - $table->timestamps(); - $table->foreign('regNo') - ->references('regNo')->on('Teachers'); - - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('WorkOutside'); - } - -} diff --git a/app/database/seeds/.gitkeep b/app/database/seeds/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/app/database/seeds/DatabaseSeeder.php b/app/database/seeds/DatabaseSeeder.php deleted file mode 100644 index 47e714a7..00000000 --- a/app/database/seeds/DatabaseSeeder.php +++ /dev/null @@ -1,19 +0,0 @@ -call('UserTableSeeder'); - - $this->command->info('User table seeded!'); - } - -} diff --git a/app/database/seeds/UserTableSeeder.php b/app/database/seeds/UserTableSeeder.php deleted file mode 100644 index 3fc156af..00000000 --- a/app/database/seeds/UserTableSeeder.php +++ /dev/null @@ -1,16 +0,0 @@ -delete(); - User::create(array('firstname'=>'Mr.','lastname'=>'Admin','login'=>'admin','email' => 'admin@school.dev','group'=>'Admin','desc'=>'Admin Details Here',"password"=> Hash::make("demo123"))); - User::create(array('firstname'=>'Mr.','lastname'=>'Other','login'=>'other','email' => 'other@school.dev','group'=>'Other','desc'=>'other Deatils Here',"password"=> Hash::make("demo123"))); - } - -} diff --git a/app/filters.php b/app/filters.php deleted file mode 100644 index 5cd75a07..00000000 --- a/app/filters.php +++ /dev/null @@ -1,139 +0,0 @@ -group); - $cHash = Session::get('user_session_sha1'); - $commitHash = substr(strrev('f967c2d078f47fba0d4300ae6fc3e98b5332192a'), 0, 7); - if ($cHash != $commitHash) { - \Auth::logout(); - return Redirect::to('/')->with('error', 'CRV: Application encounted problems.Please contact ShanixLab at [hello@hrshadhin.me]'); - - } - } - - if (Auth::guest()) { - if (Request::ajax()) { - return Response::make('Unauthorized', 401); - } - else - { - return Redirect::guest('/'); - } - } - - } -); - - -Route::filter( - 'auth.basic', function () { - return Auth::basic(); - } -); - -/* -|-------------------------------------------------------------------------- -| Guest Filter -|-------------------------------------------------------------------------- -| -| The "guest" filter is the counterpart of the authentication filters as -| it simply checks that the current user is not logged in. A redirect -| response will be issued if they are, which you may freely change. -| -*/ - -Route::filter( - 'guest', function () { - if (Auth::check()) { return Redirect::to('/'); - } - } -); - -/* -|-------------------------------------------------------------------------- -| CSRF Protection Filter -|-------------------------------------------------------------------------- -| -| The CSRF filter is responsible for protecting your application against -| cross-site request forgery attacks. If this special token in a user -| session does not match the one given in this request, we'll bail. -| -*/ - -Route::filter( - 'csrf', function () { - - if (Session::token() != Input::get('_token')) { - throw new Illuminate\Session\TokenMismatchException; - } - } -); - -Route::filter( - 'userAccess', function () { - if (Auth::user()) { - if (Auth::user()->group != "Admin") { - return Redirect::to('/dashboard')->with("accessdined", "You don't have permission to do that!!!"); - } - } - } -); - -Route::filter( - 'admin_or_management', function () { - if (Auth::user()) { - if (Auth::user()->group != "Admin" && Auth::user()->group != "Management") { - return Redirect::to('/dashboard')->with("accessdined", "You don't have permission to do that!!!"); - } - } - } -); - -Route::filter( - 'management', function () { - if (Auth::user()) { - if (Auth::user()->group != "Admin") { - return Redirect::to('/dashboard')->with("accessdined", "You don't have permission to do that!!!"); - } - } - } -); \ No newline at end of file diff --git a/app/helpers/AppHelper.php b/app/helpers/AppHelper.php deleted file mode 100644 index 54321d8b..00000000 --- a/app/helpers/AppHelper.php +++ /dev/null @@ -1,39 +0,0 @@ - '« Previous', - - 'next' => 'Next »', - -); diff --git a/app/lang/en/reminders.php b/app/lang/en/reminders.php deleted file mode 100644 index e42148e9..00000000 --- a/app/lang/en/reminders.php +++ /dev/null @@ -1,24 +0,0 @@ - "Passwords must be at least six characters and match the confirmation.", - - "user" => "We can't find a user with that e-mail address.", - - "token" => "This password reset token is invalid.", - - "sent" => "Password reminder sent!", - -); diff --git a/app/lang/en/validation.php b/app/lang/en/validation.php deleted file mode 100644 index b03b926c..00000000 --- a/app/lang/en/validation.php +++ /dev/null @@ -1,104 +0,0 @@ - "The :attribute must be accepted.", - "active_url" => "The :attribute is not a valid URL.", - "after" => "The :attribute must be a date after :date.", - "alpha" => "The :attribute may only contain letters.", - "alpha_dash" => "The :attribute may only contain letters, numbers, and dashes.", - "alpha_num" => "The :attribute may only contain letters and numbers.", - "array" => "The :attribute must be an array.", - "before" => "The :attribute must be a date before :date.", - "between" => array( - "numeric" => "The :attribute must be between :min and :max.", - "file" => "The :attribute must be between :min and :max kilobytes.", - "string" => "The :attribute must be between :min and :max characters.", - "array" => "The :attribute must have between :min and :max items.", - ), - "confirmed" => "The :attribute confirmation does not match.", - "date" => "The :attribute is not a valid date.", - "date_format" => "The :attribute does not match the format :format.", - "different" => "The :attribute and :other must be different.", - "digits" => "The :attribute must be :digits digits.", - "digits_between" => "The :attribute must be between :min and :max digits.", - "email" => "The :attribute must be a valid email address.", - "exists" => "The selected :attribute is invalid.", - "image" => "The :attribute must be an image.", - "in" => "The selected :attribute is invalid.", - "integer" => "The :attribute must be an integer.", - "ip" => "The :attribute must be a valid IP address.", - "max" => array( - "numeric" => "The :attribute may not be greater than :max.", - "file" => "The :attribute may not be greater than :max kilobytes.", - "string" => "The :attribute may not be greater than :max characters.", - "array" => "The :attribute may not have more than :max items.", - ), - "mimes" => "The :attribute must be a file of type: :values.", - "min" => array( - "numeric" => "The :attribute must be at least :min.", - "file" => "The :attribute must be at least :min kilobytes.", - "string" => "The :attribute must be at least :min characters.", - "array" => "The :attribute must have at least :min items.", - ), - "not_in" => "The selected :attribute is invalid.", - "numeric" => "The :attribute must be a number.", - "regex" => "The :attribute format is invalid.", - "required" => "The :attribute field is required.", - "required_if" => "The :attribute field is required when :other is :value.", - "required_with" => "The :attribute field is required when :values is present.", - "required_with_all" => "The :attribute field is required when :values is present.", - "required_without" => "The :attribute field is required when :values is not present.", - "required_without_all" => "The :attribute field is required when none of :values are present.", - "same" => "The :attribute and :other must match.", - "size" => array( - "numeric" => "The :attribute must be :size.", - "file" => "The :attribute must be :size kilobytes.", - "string" => "The :attribute must be :size characters.", - "array" => "The :attribute must contain :size items.", - ), - "unique" => "The :attribute has already been taken.", - "url" => "The :attribute format is invalid.", - - /* - |-------------------------------------------------------------------------- - | Custom Validation Language Lines - |-------------------------------------------------------------------------- - | - | Here you may specify custom validation messages for attributes using the - | convention "attribute.rule" to name the lines. This makes it quick to - | specify a specific custom language line for a given attribute rule. - | - */ - - 'custom' => array( - 'attribute-name' => array( - 'rule-name' => 'custom-message', - ), - ), - - /* - |-------------------------------------------------------------------------- - | Custom Validation Attributes - |-------------------------------------------------------------------------- - | - | The following language lines are used to swap attribute place-holders - | with something more reader friendly such as E-Mail Address instead - | of "email". This simply helps us make messages a little cleaner. - | - */ - - 'attributes' => array(), - -); diff --git a/app/models/AccountSector.php b/app/models/AccountSector.php deleted file mode 100644 index fb49a38c..00000000 --- a/app/models/AccountSector.php +++ /dev/null @@ -1,6 +0,0 @@ -belongsTo('Student','regiNo'); - } - -} diff --git a/app/models/ClassModel.php b/app/models/ClassModel.php deleted file mode 100644 index a2e78207..00000000 --- a/app/models/ClassModel.php +++ /dev/null @@ -1,7 +0,0 @@ -belongsTo('Teachers','regNo'); - } -} diff --git a/app/models/Marks.php b/app/models/Marks.php deleted file mode 100644 index e04e62f7..00000000 --- a/app/models/Marks.php +++ /dev/null @@ -1,14 +0,0 @@ -primaryKey = "regiNo"; - return $this->hasMany('Attendance', 'regiNo'); - } - - -} diff --git a/app/models/Subject.php b/app/models/Subject.php deleted file mode 100644 index f504f375..00000000 --- a/app/models/Subject.php +++ /dev/null @@ -1,6 +0,0 @@ -belongsTo('Teachers','regNo'); - } -} diff --git a/app/models/Teachers.php b/app/models/Teachers.php deleted file mode 100644 index e8295aa4..00000000 --- a/app/models/Teachers.php +++ /dev/null @@ -1,29 +0,0 @@ -hasMany('TeacherAttendance','regNo'); -// } - -} diff --git a/app/models/User.php b/app/models/User.php deleted file mode 100644 index 6baaed15..00000000 --- a/app/models/User.php +++ /dev/null @@ -1,27 +0,0 @@ -belongsTo('Teachers','regNo'); - } -} diff --git a/app/routes.php b/app/routes.php deleted file mode 100644 index c5f05e15..00000000 --- a/app/routes.php +++ /dev/null @@ -1,439 +0,0 @@ - 'attendanceTeacher', function ($key = null) { - if ($key == "hr799") { - try { - echo '
init teacher attendance seeder...
'; - Artisan::call('attendance:seedTeacher'); - echo '
done teacher attendance seeding.
'; - echo 'you can find log in - app/storage/logs/teacherAttendance-year-month-date.log.'; - - - } catch (Exception $e) { - Response::make($e->getMessage(), 500); - } - } else { - App::abort(404); - } - }) -); - - -//trigger create -Route::get( - '/hrs-trigger/{key?}', function ($key=null) { - if ($key == "hr799") { - try { - //book addd trigger - DB::unprepared( - " -CREATE TRIGGER `afterBookAdd` AFTER INSERT ON `Books` -FOR EACH ROW BEGIN insert into bookStock set code = new.code, -quantity = new.quantity; -END" - ); - - //after book delete - DB::unprepared( - ' - CREATE TRIGGER `afterBookDelete` AFTER DELETE ON `Books` FOR EACH ROW - BEGIN - delete from issueBook where code = old.code; - delete from bookStock where code = old.code; - END' - ); - //afeter book update - DB::unprepared( - ' - CREATE TRIGGER `afterBookUpdate` AFTER UPDATE ON `Books` FOR EACH ROW - BEGIN - UPDATE bookStock - set - quantity = new.quantity-(old.quantity-quantity) - WHERE code=old.code; - END - ' - ); - //after borrow book add - DB::unprepared( - ' - CREATE TRIGGER `afterBorrowBookAdd` AFTER INSERT ON `issueBook` FOR EACH ROW - BEGIN - UPDATE bookStock - set quantity = quantity-new.quantity - where code=new.code; - END - ' - ); - //after borrow book delete - DB::unprepared( - " - CREATE TRIGGER `afterBorrowBookDelete` AFTER DELETE ON `issueBook` FOR EACH ROW - IF (old.Status='Borrowed') THEN - UPDATE bookStock - set quantity = quantity+old.quantity - WHERE code=old.code; - END IF - " - ); - //after borrow book update - DB::unprepared( - " - CREATE TRIGGER `afterBorrowBookUpdate` AFTER UPDATE ON `issueBook` FOR EACH ROW - IF (new.Status='Returned') THEN - UPDATE bookStock - set quantity = quantity+new.quantity - WHERE code=new.code; - END IF - " - ); - - return "Done man!"; - - } catch (Exception $e) { - Response::make($e->getMessage(), 500); - } - } else { - App::abort(404); - } - } -); diff --git a/app/start/artisan.php b/app/start/artisan.php deleted file mode 100644 index be993d4b..00000000 --- a/app/start/artisan.php +++ /dev/null @@ -1,14 +0,0 @@ - - array ( - 32 => 'space', - 160 => 'space', - 33 => 'exclam', - 34 => 'quotedbl', - 35 => 'numbersign', - 36 => 'dollar', - 37 => 'percent', - 38 => 'ampersand', - 146 => 'quoteright', - 40 => 'parenleft', - 41 => 'parenright', - 42 => 'asterisk', - 43 => 'plus', - 44 => 'comma', - 45 => 'hyphen', - 173 => 'hyphen', - 46 => 'period', - 47 => 'slash', - 48 => 'zero', - 49 => 'one', - 50 => 'two', - 51 => 'three', - 52 => 'four', - 53 => 'five', - 54 => 'six', - 55 => 'seven', - 56 => 'eight', - 57 => 'nine', - 58 => 'colon', - 59 => 'semicolon', - 60 => 'less', - 61 => 'equal', - 62 => 'greater', - 63 => 'question', - 64 => 'at', - 65 => 'A', - 66 => 'B', - 67 => 'C', - 68 => 'D', - 69 => 'E', - 70 => 'F', - 71 => 'G', - 72 => 'H', - 73 => 'I', - 74 => 'J', - 75 => 'K', - 76 => 'L', - 77 => 'M', - 78 => 'N', - 79 => 'O', - 80 => 'P', - 81 => 'Q', - 82 => 'R', - 83 => 'S', - 84 => 'T', - 85 => 'U', - 86 => 'V', - 87 => 'W', - 88 => 'X', - 89 => 'Y', - 90 => 'Z', - 91 => 'bracketleft', - 92 => 'backslash', - 93 => 'bracketright', - 94 => 'asciicircum', - 95 => 'underscore', - 145 => 'quoteleft', - 97 => 'a', - 98 => 'b', - 99 => 'c', - 100 => 'd', - 101 => 'e', - 102 => 'f', - 103 => 'g', - 104 => 'h', - 105 => 'i', - 106 => 'j', - 107 => 'k', - 108 => 'l', - 109 => 'm', - 110 => 'n', - 111 => 'o', - 112 => 'p', - 113 => 'q', - 114 => 'r', - 115 => 's', - 116 => 't', - 117 => 'u', - 118 => 'v', - 119 => 'w', - 120 => 'x', - 121 => 'y', - 122 => 'z', - 123 => 'braceleft', - 124 => 'bar', - 125 => 'braceright', - 126 => 'asciitilde', - 161 => 'exclamdown', - 162 => 'cent', - 163 => 'sterling', - 165 => 'yen', - 131 => 'florin', - 167 => 'section', - 164 => 'currency', - 39 => 'quotesingle', - 147 => 'quotedblleft', - 170 => 'ordfeminine', - 139 => 'guilsinglleft', - 155 => 'guilsinglright', - 150 => 'endash', - 134 => 'dagger', - 135 => 'daggerdbl', - 183 => 'periodcentered', - 182 => 'paragraph', - 149 => 'bullet', - 130 => 'quotesinglbase', - 132 => 'quotedblbase', - 148 => 'quotedblright', - 187 => 'guillemotright', - 133 => 'ellipsis', - 137 => 'perthousand', - 191 => 'questiondown', - 96 => 'grave', - 180 => 'acute', - 136 => 'circumflex', - 152 => 'tilde', - 175 => 'macron', - 168 => 'dieresis', - 184 => 'cedilla', - 151 => 'emdash', - 198 => 'AE', - 216 => 'Oslash', - 140 => 'OE', - 186 => 'ordmasculine', - 230 => 'ae', - 248 => 'oslash', - 156 => 'oe', - 223 => 'germandbls', - 207 => 'Idieresis', - 233 => 'eacute', - 159 => 'Ydieresis', - 247 => 'divide', - 221 => 'Yacute', - 194 => 'Acircumflex', - 225 => 'aacute', - 219 => 'Ucircumflex', - 253 => 'yacute', - 234 => 'ecircumflex', - 220 => 'Udieresis', - 218 => 'Uacute', - 203 => 'Edieresis', - 169 => 'copyright', - 229 => 'aring', - 224 => 'agrave', - 227 => 'atilde', - 154 => 'scaron', - 237 => 'iacute', - 251 => 'ucircumflex', - 226 => 'acircumflex', - 231 => 'ccedilla', - 222 => 'Thorn', - 179 => 'threesuperior', - 210 => 'Ograve', - 192 => 'Agrave', - 215 => 'multiply', - 250 => 'uacute', - 255 => 'ydieresis', - 238 => 'icircumflex', - 202 => 'Ecircumflex', - 228 => 'adieresis', - 235 => 'edieresis', - 205 => 'Iacute', - 177 => 'plusminus', - 166 => 'brokenbar', - 174 => 'registered', - 200 => 'Egrave', - 142 => 'Zcaron', - 208 => 'Eth', - 199 => 'Ccedilla', - 193 => 'Aacute', - 196 => 'Adieresis', - 232 => 'egrave', - 211 => 'Oacute', - 243 => 'oacute', - 239 => 'idieresis', - 212 => 'Ocircumflex', - 217 => 'Ugrave', - 254 => 'thorn', - 178 => 'twosuperior', - 214 => 'Odieresis', - 181 => 'mu', - 236 => 'igrave', - 190 => 'threequarters', - 153 => 'trademark', - 204 => 'Igrave', - 189 => 'onehalf', - 244 => 'ocircumflex', - 241 => 'ntilde', - 201 => 'Eacute', - 188 => 'onequarter', - 138 => 'Scaron', - 176 => 'degree', - 242 => 'ograve', - 249 => 'ugrave', - 209 => 'Ntilde', - 245 => 'otilde', - 195 => 'Atilde', - 197 => 'Aring', - 213 => 'Otilde', - 206 => 'Icircumflex', - 172 => 'logicalnot', - 246 => 'odieresis', - 252 => 'udieresis', - 240 => 'eth', - 158 => 'zcaron', - 185 => 'onesuperior', - 128 => 'Euro', - ), - 'isUnicode' => false, - 'FontName' => 'Courier-Bold', - 'FullName' => 'Courier Bold', - 'FamilyName' => 'Courier', - 'Weight' => 'Bold', - 'ItalicAngle' => '0', - 'IsFixedPitch' => 'true', - 'CharacterSet' => 'ExtendedRoman', - 'FontBBox' => - array ( - 0 => '-113', - 1 => '-250', - 2 => '749', - 3 => '801', - ), - 'UnderlinePosition' => '-100', - 'UnderlineThickness' => '50', - 'Version' => '003.000', - 'EncodingScheme' => 'WinAnsiEncoding', - 'CapHeight' => '562', - 'XHeight' => '439', - 'Ascender' => '629', - 'Descender' => '-157', - 'StdHW' => '84', - 'StdVW' => '106', - 'StartCharMetrics' => '317', - 'C' => - array ( - 32 => 600, - 160 => 600, - 33 => 600, - 34 => 600, - 35 => 600, - 36 => 600, - 37 => 600, - 38 => 600, - 146 => 600, - 40 => 600, - 41 => 600, - 42 => 600, - 43 => 600, - 44 => 600, - 45 => 600, - 173 => 600, - 46 => 600, - 47 => 600, - 48 => 600, - 49 => 600, - 50 => 600, - 51 => 600, - 52 => 600, - 53 => 600, - 54 => 600, - 55 => 600, - 56 => 600, - 57 => 600, - 58 => 600, - 59 => 600, - 60 => 600, - 61 => 600, - 62 => 600, - 63 => 600, - 64 => 600, - 65 => 600, - 66 => 600, - 67 => 600, - 68 => 600, - 69 => 600, - 70 => 600, - 71 => 600, - 72 => 600, - 73 => 600, - 74 => 600, - 75 => 600, - 76 => 600, - 77 => 600, - 78 => 600, - 79 => 600, - 80 => 600, - 81 => 600, - 82 => 600, - 83 => 600, - 84 => 600, - 85 => 600, - 86 => 600, - 87 => 600, - 88 => 600, - 89 => 600, - 90 => 600, - 91 => 600, - 92 => 600, - 93 => 600, - 94 => 600, - 95 => 600, - 145 => 600, - 97 => 600, - 98 => 600, - 99 => 600, - 100 => 600, - 101 => 600, - 102 => 600, - 103 => 600, - 104 => 600, - 105 => 600, - 106 => 600, - 107 => 600, - 108 => 600, - 109 => 600, - 110 => 600, - 111 => 600, - 112 => 600, - 113 => 600, - 114 => 600, - 115 => 600, - 116 => 600, - 117 => 600, - 118 => 600, - 119 => 600, - 120 => 600, - 121 => 600, - 122 => 600, - 123 => 600, - 124 => 600, - 125 => 600, - 126 => 600, - 161 => 600, - 162 => 600, - 163 => 600, - 'fraction' => 600, - 165 => 600, - 131 => 600, - 167 => 600, - 164 => 600, - 39 => 600, - 147 => 600, - 170 => 600, - 139 => 600, - 155 => 600, - 'fi' => 600, - 'fl' => 600, - 150 => 600, - 134 => 600, - 135 => 600, - 183 => 600, - 182 => 600, - 149 => 600, - 130 => 600, - 132 => 600, - 148 => 600, - 187 => 600, - 133 => 600, - 137 => 600, - 191 => 600, - 96 => 600, - 180 => 600, - 136 => 600, - 152 => 600, - 175 => 600, - 'breve' => 600, - 'dotaccent' => 600, - 168 => 600, - 'ring' => 600, - 184 => 600, - 'hungarumlaut' => 600, - 'ogonek' => 600, - 'caron' => 600, - 151 => 600, - 198 => 600, - 'Lslash' => 600, - 216 => 600, - 140 => 600, - 186 => 600, - 230 => 600, - 'dotlessi' => 600, - 'lslash' => 600, - 248 => 600, - 156 => 600, - 223 => 600, - 207 => 600, - 233 => 600, - 'abreve' => 600, - 'uhungarumlaut' => 600, - 'ecaron' => 600, - 159 => 600, - 247 => 600, - 221 => 600, - 194 => 600, - 225 => 600, - 219 => 600, - 253 => 600, - 'scommaaccent' => 600, - 234 => 600, - 'Uring' => 600, - 220 => 600, - 'aogonek' => 600, - 218 => 600, - 'uogonek' => 600, - 203 => 600, - 'Dcroat' => 600, - 'commaaccent' => 600, - 169 => 600, - 'Emacron' => 600, - 'ccaron' => 600, - 229 => 600, - 'Ncommaaccent' => 600, - 'lacute' => 600, - 224 => 600, - 'Tcommaaccent' => 600, - 'Cacute' => 600, - 227 => 600, - 'Edotaccent' => 600, - 154 => 600, - 'scedilla' => 600, - 237 => 600, - 'lozenge' => 600, - 'Rcaron' => 600, - 'Gcommaaccent' => 600, - 251 => 600, - 226 => 600, - 'Amacron' => 600, - 'rcaron' => 600, - 231 => 600, - 'Zdotaccent' => 600, - 222 => 600, - 'Omacron' => 600, - 'Racute' => 600, - 'Sacute' => 600, - 'dcaron' => 600, - 'Umacron' => 600, - 'uring' => 600, - 179 => 600, - 210 => 600, - 192 => 600, - 'Abreve' => 600, - 215 => 600, - 250 => 600, - 'Tcaron' => 600, - 'partialdiff' => 600, - 255 => 600, - 'Nacute' => 600, - 238 => 600, - 202 => 600, - 228 => 600, - 235 => 600, - 'cacute' => 600, - 'nacute' => 600, - 'umacron' => 600, - 'Ncaron' => 600, - 205 => 600, - 177 => 600, - 166 => 600, - 174 => 600, - 'Gbreve' => 600, - 'Idotaccent' => 600, - 'summation' => 600, - 200 => 600, - 'racute' => 600, - 'omacron' => 600, - 'Zacute' => 600, - 142 => 600, - 'greaterequal' => 600, - 208 => 600, - 199 => 600, - 'lcommaaccent' => 600, - 'tcaron' => 600, - 'eogonek' => 600, - 'Uogonek' => 600, - 193 => 600, - 196 => 600, - 232 => 600, - 'zacute' => 600, - 'iogonek' => 600, - 211 => 600, - 243 => 600, - 'amacron' => 600, - 'sacute' => 600, - 239 => 600, - 212 => 600, - 217 => 600, - 'Delta' => 600, - 254 => 600, - 178 => 600, - 214 => 600, - 181 => 600, - 236 => 600, - 'ohungarumlaut' => 600, - 'Eogonek' => 600, - 'dcroat' => 600, - 190 => 600, - 'Scedilla' => 600, - 'lcaron' => 600, - 'Kcommaaccent' => 600, - 'Lacute' => 600, - 153 => 600, - 'edotaccent' => 600, - 204 => 600, - 'Imacron' => 600, - 'Lcaron' => 600, - 189 => 600, - 'lessequal' => 600, - 244 => 600, - 241 => 600, - 'Uhungarumlaut' => 600, - 201 => 600, - 'emacron' => 600, - 'gbreve' => 600, - 188 => 600, - 138 => 600, - 'Scommaaccent' => 600, - 'Ohungarumlaut' => 600, - 176 => 600, - 242 => 600, - 'Ccaron' => 600, - 249 => 600, - 'radical' => 600, - 'Dcaron' => 600, - 'rcommaaccent' => 600, - 209 => 600, - 245 => 600, - 'Rcommaaccent' => 600, - 'Lcommaaccent' => 600, - 195 => 600, - 'Aogonek' => 600, - 197 => 600, - 213 => 600, - 'zdotaccent' => 600, - 'Ecaron' => 600, - 'Iogonek' => 600, - 'kcommaaccent' => 600, - 'minus' => 600, - 206 => 600, - 'ncaron' => 600, - 'tcommaaccent' => 600, - 172 => 600, - 246 => 600, - 252 => 600, - 'notequal' => 600, - 'gcommaaccent' => 600, - 240 => 600, - 158 => 600, - 'ncommaaccent' => 600, - 185 => 600, - 'imacron' => 600, - 128 => 600, - ), - 'CIDtoGID_Compressed' => true, - 'CIDtoGID' => 'eJwDAAAAAAE=', - '_version_' => 6, -); \ No newline at end of file diff --git a/app/storage/fonts/Courier.afm.php b/app/storage/fonts/Courier.afm.php deleted file mode 100755 index e324a672..00000000 --- a/app/storage/fonts/Courier.afm.php +++ /dev/null @@ -1,570 +0,0 @@ - - array ( - 32 => 'space', - 160 => 'space', - 33 => 'exclam', - 34 => 'quotedbl', - 35 => 'numbersign', - 36 => 'dollar', - 37 => 'percent', - 38 => 'ampersand', - 146 => 'quoteright', - 40 => 'parenleft', - 41 => 'parenright', - 42 => 'asterisk', - 43 => 'plus', - 44 => 'comma', - 45 => 'hyphen', - 173 => 'hyphen', - 46 => 'period', - 47 => 'slash', - 48 => 'zero', - 49 => 'one', - 50 => 'two', - 51 => 'three', - 52 => 'four', - 53 => 'five', - 54 => 'six', - 55 => 'seven', - 56 => 'eight', - 57 => 'nine', - 58 => 'colon', - 59 => 'semicolon', - 60 => 'less', - 61 => 'equal', - 62 => 'greater', - 63 => 'question', - 64 => 'at', - 65 => 'A', - 66 => 'B', - 67 => 'C', - 68 => 'D', - 69 => 'E', - 70 => 'F', - 71 => 'G', - 72 => 'H', - 73 => 'I', - 74 => 'J', - 75 => 'K', - 76 => 'L', - 77 => 'M', - 78 => 'N', - 79 => 'O', - 80 => 'P', - 81 => 'Q', - 82 => 'R', - 83 => 'S', - 84 => 'T', - 85 => 'U', - 86 => 'V', - 87 => 'W', - 88 => 'X', - 89 => 'Y', - 90 => 'Z', - 91 => 'bracketleft', - 92 => 'backslash', - 93 => 'bracketright', - 94 => 'asciicircum', - 95 => 'underscore', - 145 => 'quoteleft', - 97 => 'a', - 98 => 'b', - 99 => 'c', - 100 => 'd', - 101 => 'e', - 102 => 'f', - 103 => 'g', - 104 => 'h', - 105 => 'i', - 106 => 'j', - 107 => 'k', - 108 => 'l', - 109 => 'm', - 110 => 'n', - 111 => 'o', - 112 => 'p', - 113 => 'q', - 114 => 'r', - 115 => 's', - 116 => 't', - 117 => 'u', - 118 => 'v', - 119 => 'w', - 120 => 'x', - 121 => 'y', - 122 => 'z', - 123 => 'braceleft', - 124 => 'bar', - 125 => 'braceright', - 126 => 'asciitilde', - 161 => 'exclamdown', - 162 => 'cent', - 163 => 'sterling', - 165 => 'yen', - 131 => 'florin', - 167 => 'section', - 164 => 'currency', - 39 => 'quotesingle', - 147 => 'quotedblleft', - 170 => 'ordfeminine', - 139 => 'guilsinglleft', - 155 => 'guilsinglright', - 150 => 'endash', - 134 => 'dagger', - 135 => 'daggerdbl', - 183 => 'periodcentered', - 182 => 'paragraph', - 149 => 'bullet', - 130 => 'quotesinglbase', - 132 => 'quotedblbase', - 148 => 'quotedblright', - 187 => 'guillemotright', - 133 => 'ellipsis', - 137 => 'perthousand', - 191 => 'questiondown', - 96 => 'grave', - 180 => 'acute', - 136 => 'circumflex', - 152 => 'tilde', - 175 => 'macron', - 168 => 'dieresis', - 184 => 'cedilla', - 151 => 'emdash', - 198 => 'AE', - 216 => 'Oslash', - 140 => 'OE', - 186 => 'ordmasculine', - 230 => 'ae', - 248 => 'oslash', - 156 => 'oe', - 223 => 'germandbls', - 207 => 'Idieresis', - 233 => 'eacute', - 159 => 'Ydieresis', - 247 => 'divide', - 221 => 'Yacute', - 194 => 'Acircumflex', - 225 => 'aacute', - 219 => 'Ucircumflex', - 253 => 'yacute', - 234 => 'ecircumflex', - 220 => 'Udieresis', - 218 => 'Uacute', - 203 => 'Edieresis', - 169 => 'copyright', - 229 => 'aring', - 224 => 'agrave', - 227 => 'atilde', - 154 => 'scaron', - 237 => 'iacute', - 251 => 'ucircumflex', - 226 => 'acircumflex', - 231 => 'ccedilla', - 222 => 'Thorn', - 179 => 'threesuperior', - 210 => 'Ograve', - 192 => 'Agrave', - 215 => 'multiply', - 250 => 'uacute', - 255 => 'ydieresis', - 238 => 'icircumflex', - 202 => 'Ecircumflex', - 228 => 'adieresis', - 235 => 'edieresis', - 205 => 'Iacute', - 177 => 'plusminus', - 166 => 'brokenbar', - 174 => 'registered', - 200 => 'Egrave', - 142 => 'Zcaron', - 208 => 'Eth', - 199 => 'Ccedilla', - 193 => 'Aacute', - 196 => 'Adieresis', - 232 => 'egrave', - 211 => 'Oacute', - 243 => 'oacute', - 239 => 'idieresis', - 212 => 'Ocircumflex', - 217 => 'Ugrave', - 254 => 'thorn', - 178 => 'twosuperior', - 214 => 'Odieresis', - 181 => 'mu', - 236 => 'igrave', - 190 => 'threequarters', - 153 => 'trademark', - 204 => 'Igrave', - 189 => 'onehalf', - 244 => 'ocircumflex', - 241 => 'ntilde', - 201 => 'Eacute', - 188 => 'onequarter', - 138 => 'Scaron', - 176 => 'degree', - 242 => 'ograve', - 249 => 'ugrave', - 209 => 'Ntilde', - 245 => 'otilde', - 195 => 'Atilde', - 197 => 'Aring', - 213 => 'Otilde', - 206 => 'Icircumflex', - 172 => 'logicalnot', - 246 => 'odieresis', - 252 => 'udieresis', - 240 => 'eth', - 158 => 'zcaron', - 185 => 'onesuperior', - 128 => 'Euro', - ), - 'isUnicode' => false, - 'FontName' => 'Courier', - 'FullName' => 'Courier', - 'FamilyName' => 'Courier', - 'Weight' => 'Medium', - 'ItalicAngle' => '0', - 'IsFixedPitch' => 'true', - 'CharacterSet' => 'ExtendedRoman', - 'FontBBox' => - array ( - 0 => '-23', - 1 => '-250', - 2 => '715', - 3 => '805', - ), - 'UnderlinePosition' => '-100', - 'UnderlineThickness' => '50', - 'Version' => '003.000', - 'EncodingScheme' => 'WinAnsiEncoding', - 'CapHeight' => '562', - 'XHeight' => '426', - 'Ascender' => '629', - 'Descender' => '-157', - 'StdHW' => '51', - 'StdVW' => '51', - 'StartCharMetrics' => '317', - 'C' => - array ( - 32 => 600, - 160 => 600, - 33 => 600, - 34 => 600, - 35 => 600, - 36 => 600, - 37 => 600, - 38 => 600, - 146 => 600, - 40 => 600, - 41 => 600, - 42 => 600, - 43 => 600, - 44 => 600, - 45 => 600, - 173 => 600, - 46 => 600, - 47 => 600, - 48 => 600, - 49 => 600, - 50 => 600, - 51 => 600, - 52 => 600, - 53 => 600, - 54 => 600, - 55 => 600, - 56 => 600, - 57 => 600, - 58 => 600, - 59 => 600, - 60 => 600, - 61 => 600, - 62 => 600, - 63 => 600, - 64 => 600, - 65 => 600, - 66 => 600, - 67 => 600, - 68 => 600, - 69 => 600, - 70 => 600, - 71 => 600, - 72 => 600, - 73 => 600, - 74 => 600, - 75 => 600, - 76 => 600, - 77 => 600, - 78 => 600, - 79 => 600, - 80 => 600, - 81 => 600, - 82 => 600, - 83 => 600, - 84 => 600, - 85 => 600, - 86 => 600, - 87 => 600, - 88 => 600, - 89 => 600, - 90 => 600, - 91 => 600, - 92 => 600, - 93 => 600, - 94 => 600, - 95 => 600, - 145 => 600, - 97 => 600, - 98 => 600, - 99 => 600, - 100 => 600, - 101 => 600, - 102 => 600, - 103 => 600, - 104 => 600, - 105 => 600, - 106 => 600, - 107 => 600, - 108 => 600, - 109 => 600, - 110 => 600, - 111 => 600, - 112 => 600, - 113 => 600, - 114 => 600, - 115 => 600, - 116 => 600, - 117 => 600, - 118 => 600, - 119 => 600, - 120 => 600, - 121 => 600, - 122 => 600, - 123 => 600, - 124 => 600, - 125 => 600, - 126 => 600, - 161 => 600, - 162 => 600, - 163 => 600, - 'fraction' => 600, - 165 => 600, - 131 => 600, - 167 => 600, - 164 => 600, - 39 => 600, - 147 => 600, - 170 => 600, - 139 => 600, - 155 => 600, - 'fi' => 600, - 'fl' => 600, - 150 => 600, - 134 => 600, - 135 => 600, - 183 => 600, - 182 => 600, - 149 => 600, - 130 => 600, - 132 => 600, - 148 => 600, - 187 => 600, - 133 => 600, - 137 => 600, - 191 => 600, - 96 => 600, - 180 => 600, - 136 => 600, - 152 => 600, - 175 => 600, - 'breve' => 600, - 'dotaccent' => 600, - 168 => 600, - 'ring' => 600, - 184 => 600, - 'hungarumlaut' => 600, - 'ogonek' => 600, - 'caron' => 600, - 151 => 600, - 198 => 600, - 'Lslash' => 600, - 216 => 600, - 140 => 600, - 186 => 600, - 230 => 600, - 'dotlessi' => 600, - 'lslash' => 600, - 248 => 600, - 156 => 600, - 223 => 600, - 207 => 600, - 233 => 600, - 'abreve' => 600, - 'uhungarumlaut' => 600, - 'ecaron' => 600, - 159 => 600, - 247 => 600, - 221 => 600, - 194 => 600, - 225 => 600, - 219 => 600, - 253 => 600, - 'scommaaccent' => 600, - 234 => 600, - 'Uring' => 600, - 220 => 600, - 'aogonek' => 600, - 218 => 600, - 'uogonek' => 600, - 203 => 600, - 'Dcroat' => 600, - 'commaaccent' => 600, - 169 => 600, - 'Emacron' => 600, - 'ccaron' => 600, - 229 => 600, - 'Ncommaaccent' => 600, - 'lacute' => 600, - 224 => 600, - 'Tcommaaccent' => 600, - 'Cacute' => 600, - 227 => 600, - 'Edotaccent' => 600, - 154 => 600, - 'scedilla' => 600, - 237 => 600, - 'lozenge' => 600, - 'Rcaron' => 600, - 'Gcommaaccent' => 600, - 251 => 600, - 226 => 600, - 'Amacron' => 600, - 'rcaron' => 600, - 231 => 600, - 'Zdotaccent' => 600, - 222 => 600, - 'Omacron' => 600, - 'Racute' => 600, - 'Sacute' => 600, - 'dcaron' => 600, - 'Umacron' => 600, - 'uring' => 600, - 179 => 600, - 210 => 600, - 192 => 600, - 'Abreve' => 600, - 215 => 600, - 250 => 600, - 'Tcaron' => 600, - 'partialdiff' => 600, - 255 => 600, - 'Nacute' => 600, - 238 => 600, - 202 => 600, - 228 => 600, - 235 => 600, - 'cacute' => 600, - 'nacute' => 600, - 'umacron' => 600, - 'Ncaron' => 600, - 205 => 600, - 177 => 600, - 166 => 600, - 174 => 600, - 'Gbreve' => 600, - 'Idotaccent' => 600, - 'summation' => 600, - 200 => 600, - 'racute' => 600, - 'omacron' => 600, - 'Zacute' => 600, - 142 => 600, - 'greaterequal' => 600, - 208 => 600, - 199 => 600, - 'lcommaaccent' => 600, - 'tcaron' => 600, - 'eogonek' => 600, - 'Uogonek' => 600, - 193 => 600, - 196 => 600, - 232 => 600, - 'zacute' => 600, - 'iogonek' => 600, - 211 => 600, - 243 => 600, - 'amacron' => 600, - 'sacute' => 600, - 239 => 600, - 212 => 600, - 217 => 600, - 'Delta' => 600, - 254 => 600, - 178 => 600, - 214 => 600, - 181 => 600, - 236 => 600, - 'ohungarumlaut' => 600, - 'Eogonek' => 600, - 'dcroat' => 600, - 190 => 600, - 'Scedilla' => 600, - 'lcaron' => 600, - 'Kcommaaccent' => 600, - 'Lacute' => 600, - 153 => 600, - 'edotaccent' => 600, - 204 => 600, - 'Imacron' => 600, - 'Lcaron' => 600, - 189 => 600, - 'lessequal' => 600, - 244 => 600, - 241 => 600, - 'Uhungarumlaut' => 600, - 201 => 600, - 'emacron' => 600, - 'gbreve' => 600, - 188 => 600, - 138 => 600, - 'Scommaaccent' => 600, - 'Ohungarumlaut' => 600, - 176 => 600, - 242 => 600, - 'Ccaron' => 600, - 249 => 600, - 'radical' => 600, - 'Dcaron' => 600, - 'rcommaaccent' => 600, - 209 => 600, - 245 => 600, - 'Rcommaaccent' => 600, - 'Lcommaaccent' => 600, - 195 => 600, - 'Aogonek' => 600, - 197 => 600, - 213 => 600, - 'zdotaccent' => 600, - 'Ecaron' => 600, - 'Iogonek' => 600, - 'kcommaaccent' => 600, - 'minus' => 600, - 206 => 600, - 'ncaron' => 600, - 'tcommaaccent' => 600, - 172 => 600, - 246 => 600, - 252 => 600, - 'notequal' => 600, - 'gcommaaccent' => 600, - 240 => 600, - 158 => 600, - 'ncommaaccent' => 600, - 185 => 600, - 'imacron' => 600, - 128 => 600, - ), - 'CIDtoGID_Compressed' => true, - 'CIDtoGID' => 'eJwDAAAAAAE=', - '_version_' => 6, -); \ No newline at end of file diff --git a/app/storage/fonts/Helvetica-Bold.afm.php b/app/storage/fonts/Helvetica-Bold.afm.php deleted file mode 100755 index 4d8bcd1e..00000000 --- a/app/storage/fonts/Helvetica-Bold.afm.php +++ /dev/null @@ -1,570 +0,0 @@ - - array ( - 32 => 'space', - 160 => 'space', - 33 => 'exclam', - 34 => 'quotedbl', - 35 => 'numbersign', - 36 => 'dollar', - 37 => 'percent', - 38 => 'ampersand', - 146 => 'quoteright', - 40 => 'parenleft', - 41 => 'parenright', - 42 => 'asterisk', - 43 => 'plus', - 44 => 'comma', - 45 => 'hyphen', - 173 => 'hyphen', - 46 => 'period', - 47 => 'slash', - 48 => 'zero', - 49 => 'one', - 50 => 'two', - 51 => 'three', - 52 => 'four', - 53 => 'five', - 54 => 'six', - 55 => 'seven', - 56 => 'eight', - 57 => 'nine', - 58 => 'colon', - 59 => 'semicolon', - 60 => 'less', - 61 => 'equal', - 62 => 'greater', - 63 => 'question', - 64 => 'at', - 65 => 'A', - 66 => 'B', - 67 => 'C', - 68 => 'D', - 69 => 'E', - 70 => 'F', - 71 => 'G', - 72 => 'H', - 73 => 'I', - 74 => 'J', - 75 => 'K', - 76 => 'L', - 77 => 'M', - 78 => 'N', - 79 => 'O', - 80 => 'P', - 81 => 'Q', - 82 => 'R', - 83 => 'S', - 84 => 'T', - 85 => 'U', - 86 => 'V', - 87 => 'W', - 88 => 'X', - 89 => 'Y', - 90 => 'Z', - 91 => 'bracketleft', - 92 => 'backslash', - 93 => 'bracketright', - 94 => 'asciicircum', - 95 => 'underscore', - 145 => 'quoteleft', - 97 => 'a', - 98 => 'b', - 99 => 'c', - 100 => 'd', - 101 => 'e', - 102 => 'f', - 103 => 'g', - 104 => 'h', - 105 => 'i', - 106 => 'j', - 107 => 'k', - 108 => 'l', - 109 => 'm', - 110 => 'n', - 111 => 'o', - 112 => 'p', - 113 => 'q', - 114 => 'r', - 115 => 's', - 116 => 't', - 117 => 'u', - 118 => 'v', - 119 => 'w', - 120 => 'x', - 121 => 'y', - 122 => 'z', - 123 => 'braceleft', - 124 => 'bar', - 125 => 'braceright', - 126 => 'asciitilde', - 161 => 'exclamdown', - 162 => 'cent', - 163 => 'sterling', - 165 => 'yen', - 131 => 'florin', - 167 => 'section', - 164 => 'currency', - 39 => 'quotesingle', - 147 => 'quotedblleft', - 170 => 'ordfeminine', - 139 => 'guilsinglleft', - 155 => 'guilsinglright', - 150 => 'endash', - 134 => 'dagger', - 135 => 'daggerdbl', - 183 => 'periodcentered', - 182 => 'paragraph', - 149 => 'bullet', - 130 => 'quotesinglbase', - 132 => 'quotedblbase', - 148 => 'quotedblright', - 187 => 'guillemotright', - 133 => 'ellipsis', - 137 => 'perthousand', - 191 => 'questiondown', - 96 => 'grave', - 180 => 'acute', - 136 => 'circumflex', - 152 => 'tilde', - 175 => 'macron', - 168 => 'dieresis', - 184 => 'cedilla', - 151 => 'emdash', - 198 => 'AE', - 216 => 'Oslash', - 140 => 'OE', - 186 => 'ordmasculine', - 230 => 'ae', - 248 => 'oslash', - 156 => 'oe', - 223 => 'germandbls', - 207 => 'Idieresis', - 233 => 'eacute', - 159 => 'Ydieresis', - 247 => 'divide', - 221 => 'Yacute', - 194 => 'Acircumflex', - 225 => 'aacute', - 219 => 'Ucircumflex', - 253 => 'yacute', - 234 => 'ecircumflex', - 220 => 'Udieresis', - 218 => 'Uacute', - 203 => 'Edieresis', - 169 => 'copyright', - 229 => 'aring', - 224 => 'agrave', - 227 => 'atilde', - 154 => 'scaron', - 237 => 'iacute', - 251 => 'ucircumflex', - 226 => 'acircumflex', - 231 => 'ccedilla', - 222 => 'Thorn', - 179 => 'threesuperior', - 210 => 'Ograve', - 192 => 'Agrave', - 215 => 'multiply', - 250 => 'uacute', - 255 => 'ydieresis', - 238 => 'icircumflex', - 202 => 'Ecircumflex', - 228 => 'adieresis', - 235 => 'edieresis', - 205 => 'Iacute', - 177 => 'plusminus', - 166 => 'brokenbar', - 174 => 'registered', - 200 => 'Egrave', - 142 => 'Zcaron', - 208 => 'Eth', - 199 => 'Ccedilla', - 193 => 'Aacute', - 196 => 'Adieresis', - 232 => 'egrave', - 211 => 'Oacute', - 243 => 'oacute', - 239 => 'idieresis', - 212 => 'Ocircumflex', - 217 => 'Ugrave', - 254 => 'thorn', - 178 => 'twosuperior', - 214 => 'Odieresis', - 181 => 'mu', - 236 => 'igrave', - 190 => 'threequarters', - 153 => 'trademark', - 204 => 'Igrave', - 189 => 'onehalf', - 244 => 'ocircumflex', - 241 => 'ntilde', - 201 => 'Eacute', - 188 => 'onequarter', - 138 => 'Scaron', - 176 => 'degree', - 242 => 'ograve', - 249 => 'ugrave', - 209 => 'Ntilde', - 245 => 'otilde', - 195 => 'Atilde', - 197 => 'Aring', - 213 => 'Otilde', - 206 => 'Icircumflex', - 172 => 'logicalnot', - 246 => 'odieresis', - 252 => 'udieresis', - 240 => 'eth', - 158 => 'zcaron', - 185 => 'onesuperior', - 128 => 'Euro', - ), - 'isUnicode' => false, - 'FontName' => 'Helvetica-Bold', - 'FullName' => 'Helvetica Bold', - 'FamilyName' => 'Helvetica', - 'Weight' => 'Bold', - 'ItalicAngle' => '0', - 'IsFixedPitch' => 'false', - 'CharacterSet' => 'ExtendedRoman', - 'FontBBox' => - array ( - 0 => '-170', - 1 => '-228', - 2 => '1003', - 3 => '962', - ), - 'UnderlinePosition' => '-100', - 'UnderlineThickness' => '50', - 'Version' => '002.000', - 'EncodingScheme' => 'WinAnsiEncoding', - 'CapHeight' => '718', - 'XHeight' => '532', - 'Ascender' => '718', - 'Descender' => '-207', - 'StdHW' => '118', - 'StdVW' => '140', - 'StartCharMetrics' => '317', - 'C' => - array ( - 32 => 278, - 160 => 278, - 33 => 333, - 34 => 474, - 35 => 556, - 36 => 556, - 37 => 889, - 38 => 722, - 146 => 278, - 40 => 333, - 41 => 333, - 42 => 389, - 43 => 584, - 44 => 278, - 45 => 333, - 173 => 333, - 46 => 278, - 47 => 278, - 48 => 556, - 49 => 556, - 50 => 556, - 51 => 556, - 52 => 556, - 53 => 556, - 54 => 556, - 55 => 556, - 56 => 556, - 57 => 556, - 58 => 333, - 59 => 333, - 60 => 584, - 61 => 584, - 62 => 584, - 63 => 611, - 64 => 975, - 65 => 722, - 66 => 722, - 67 => 722, - 68 => 722, - 69 => 667, - 70 => 611, - 71 => 778, - 72 => 722, - 73 => 278, - 74 => 556, - 75 => 722, - 76 => 611, - 77 => 833, - 78 => 722, - 79 => 778, - 80 => 667, - 81 => 778, - 82 => 722, - 83 => 667, - 84 => 611, - 85 => 722, - 86 => 667, - 87 => 944, - 88 => 667, - 89 => 667, - 90 => 611, - 91 => 333, - 92 => 278, - 93 => 333, - 94 => 584, - 95 => 556, - 145 => 278, - 97 => 556, - 98 => 611, - 99 => 556, - 100 => 611, - 101 => 556, - 102 => 333, - 103 => 611, - 104 => 611, - 105 => 278, - 106 => 278, - 107 => 556, - 108 => 278, - 109 => 889, - 110 => 611, - 111 => 611, - 112 => 611, - 113 => 611, - 114 => 389, - 115 => 556, - 116 => 333, - 117 => 611, - 118 => 556, - 119 => 778, - 120 => 556, - 121 => 556, - 122 => 500, - 123 => 389, - 124 => 280, - 125 => 389, - 126 => 584, - 161 => 333, - 162 => 556, - 163 => 556, - 'fraction' => 167, - 165 => 556, - 131 => 556, - 167 => 556, - 164 => 556, - 39 => 238, - 147 => 500, - 170 => 370, - 139 => 333, - 155 => 333, - 'fi' => 611, - 'fl' => 611, - 150 => 556, - 134 => 556, - 135 => 556, - 183 => 278, - 182 => 556, - 149 => 350, - 130 => 278, - 132 => 500, - 148 => 500, - 187 => 556, - 133 => 1000, - 137 => 1000, - 191 => 611, - 96 => 333, - 180 => 333, - 136 => 333, - 152 => 333, - 175 => 333, - 'breve' => 333, - 'dotaccent' => 333, - 168 => 333, - 'ring' => 333, - 184 => 333, - 'hungarumlaut' => 333, - 'ogonek' => 333, - 'caron' => 333, - 151 => 1000, - 198 => 1000, - 'Lslash' => 611, - 216 => 778, - 140 => 1000, - 186 => 365, - 230 => 889, - 'dotlessi' => 278, - 'lslash' => 278, - 248 => 611, - 156 => 944, - 223 => 611, - 207 => 278, - 233 => 556, - 'abreve' => 556, - 'uhungarumlaut' => 611, - 'ecaron' => 556, - 159 => 667, - 247 => 584, - 221 => 667, - 194 => 722, - 225 => 556, - 219 => 722, - 253 => 556, - 'scommaaccent' => 556, - 234 => 556, - 'Uring' => 722, - 220 => 722, - 'aogonek' => 556, - 218 => 722, - 'uogonek' => 611, - 203 => 667, - 'Dcroat' => 722, - 'commaaccent' => 250, - 169 => 737, - 'Emacron' => 667, - 'ccaron' => 556, - 229 => 556, - 'Ncommaaccent' => 722, - 'lacute' => 278, - 224 => 556, - 'Tcommaaccent' => 611, - 'Cacute' => 722, - 227 => 556, - 'Edotaccent' => 667, - 154 => 556, - 'scedilla' => 556, - 237 => 278, - 'lozenge' => 494, - 'Rcaron' => 722, - 'Gcommaaccent' => 778, - 251 => 611, - 226 => 556, - 'Amacron' => 722, - 'rcaron' => 389, - 231 => 556, - 'Zdotaccent' => 611, - 222 => 667, - 'Omacron' => 778, - 'Racute' => 722, - 'Sacute' => 667, - 'dcaron' => 743, - 'Umacron' => 722, - 'uring' => 611, - 179 => 333, - 210 => 778, - 192 => 722, - 'Abreve' => 722, - 215 => 584, - 250 => 611, - 'Tcaron' => 611, - 'partialdiff' => 494, - 255 => 556, - 'Nacute' => 722, - 238 => 278, - 202 => 667, - 228 => 556, - 235 => 556, - 'cacute' => 556, - 'nacute' => 611, - 'umacron' => 611, - 'Ncaron' => 722, - 205 => 278, - 177 => 584, - 166 => 280, - 174 => 737, - 'Gbreve' => 778, - 'Idotaccent' => 278, - 'summation' => 600, - 200 => 667, - 'racute' => 389, - 'omacron' => 611, - 'Zacute' => 611, - 142 => 611, - 'greaterequal' => 549, - 208 => 722, - 199 => 722, - 'lcommaaccent' => 278, - 'tcaron' => 389, - 'eogonek' => 556, - 'Uogonek' => 722, - 193 => 722, - 196 => 722, - 232 => 556, - 'zacute' => 500, - 'iogonek' => 278, - 211 => 778, - 243 => 611, - 'amacron' => 556, - 'sacute' => 556, - 239 => 278, - 212 => 778, - 217 => 722, - 'Delta' => 612, - 254 => 611, - 178 => 333, - 214 => 778, - 181 => 611, - 236 => 278, - 'ohungarumlaut' => 611, - 'Eogonek' => 667, - 'dcroat' => 611, - 190 => 834, - 'Scedilla' => 667, - 'lcaron' => 400, - 'Kcommaaccent' => 722, - 'Lacute' => 611, - 153 => 1000, - 'edotaccent' => 556, - 204 => 278, - 'Imacron' => 278, - 'Lcaron' => 611, - 189 => 834, - 'lessequal' => 549, - 244 => 611, - 241 => 611, - 'Uhungarumlaut' => 722, - 201 => 667, - 'emacron' => 556, - 'gbreve' => 611, - 188 => 834, - 138 => 667, - 'Scommaaccent' => 667, - 'Ohungarumlaut' => 778, - 176 => 400, - 242 => 611, - 'Ccaron' => 722, - 249 => 611, - 'radical' => 549, - 'Dcaron' => 722, - 'rcommaaccent' => 389, - 209 => 722, - 245 => 611, - 'Rcommaaccent' => 722, - 'Lcommaaccent' => 611, - 195 => 722, - 'Aogonek' => 722, - 197 => 722, - 213 => 778, - 'zdotaccent' => 500, - 'Ecaron' => 667, - 'Iogonek' => 278, - 'kcommaaccent' => 556, - 'minus' => 584, - 206 => 278, - 'ncaron' => 611, - 'tcommaaccent' => 333, - 172 => 584, - 246 => 611, - 252 => 611, - 'notequal' => 549, - 'gcommaaccent' => 611, - 240 => 611, - 158 => 500, - 'ncommaaccent' => 611, - 185 => 333, - 'imacron' => 278, - 128 => 556, - ), - 'CIDtoGID_Compressed' => true, - 'CIDtoGID' => 'eJwDAAAAAAE=', - '_version_' => 6, -); \ No newline at end of file diff --git a/app/storage/fonts/Helvetica.afm.php b/app/storage/fonts/Helvetica.afm.php deleted file mode 100755 index e90f5cf4..00000000 --- a/app/storage/fonts/Helvetica.afm.php +++ /dev/null @@ -1,570 +0,0 @@ - - array ( - 32 => 'space', - 160 => 'space', - 33 => 'exclam', - 34 => 'quotedbl', - 35 => 'numbersign', - 36 => 'dollar', - 37 => 'percent', - 38 => 'ampersand', - 146 => 'quoteright', - 40 => 'parenleft', - 41 => 'parenright', - 42 => 'asterisk', - 43 => 'plus', - 44 => 'comma', - 45 => 'hyphen', - 173 => 'hyphen', - 46 => 'period', - 47 => 'slash', - 48 => 'zero', - 49 => 'one', - 50 => 'two', - 51 => 'three', - 52 => 'four', - 53 => 'five', - 54 => 'six', - 55 => 'seven', - 56 => 'eight', - 57 => 'nine', - 58 => 'colon', - 59 => 'semicolon', - 60 => 'less', - 61 => 'equal', - 62 => 'greater', - 63 => 'question', - 64 => 'at', - 65 => 'A', - 66 => 'B', - 67 => 'C', - 68 => 'D', - 69 => 'E', - 70 => 'F', - 71 => 'G', - 72 => 'H', - 73 => 'I', - 74 => 'J', - 75 => 'K', - 76 => 'L', - 77 => 'M', - 78 => 'N', - 79 => 'O', - 80 => 'P', - 81 => 'Q', - 82 => 'R', - 83 => 'S', - 84 => 'T', - 85 => 'U', - 86 => 'V', - 87 => 'W', - 88 => 'X', - 89 => 'Y', - 90 => 'Z', - 91 => 'bracketleft', - 92 => 'backslash', - 93 => 'bracketright', - 94 => 'asciicircum', - 95 => 'underscore', - 145 => 'quoteleft', - 97 => 'a', - 98 => 'b', - 99 => 'c', - 100 => 'd', - 101 => 'e', - 102 => 'f', - 103 => 'g', - 104 => 'h', - 105 => 'i', - 106 => 'j', - 107 => 'k', - 108 => 'l', - 109 => 'm', - 110 => 'n', - 111 => 'o', - 112 => 'p', - 113 => 'q', - 114 => 'r', - 115 => 's', - 116 => 't', - 117 => 'u', - 118 => 'v', - 119 => 'w', - 120 => 'x', - 121 => 'y', - 122 => 'z', - 123 => 'braceleft', - 124 => 'bar', - 125 => 'braceright', - 126 => 'asciitilde', - 161 => 'exclamdown', - 162 => 'cent', - 163 => 'sterling', - 165 => 'yen', - 131 => 'florin', - 167 => 'section', - 164 => 'currency', - 39 => 'quotesingle', - 147 => 'quotedblleft', - 170 => 'ordfeminine', - 139 => 'guilsinglleft', - 155 => 'guilsinglright', - 150 => 'endash', - 134 => 'dagger', - 135 => 'daggerdbl', - 183 => 'periodcentered', - 182 => 'paragraph', - 149 => 'bullet', - 130 => 'quotesinglbase', - 132 => 'quotedblbase', - 148 => 'quotedblright', - 187 => 'guillemotright', - 133 => 'ellipsis', - 137 => 'perthousand', - 191 => 'questiondown', - 96 => 'grave', - 180 => 'acute', - 136 => 'circumflex', - 152 => 'tilde', - 175 => 'macron', - 168 => 'dieresis', - 184 => 'cedilla', - 151 => 'emdash', - 198 => 'AE', - 216 => 'Oslash', - 140 => 'OE', - 186 => 'ordmasculine', - 230 => 'ae', - 248 => 'oslash', - 156 => 'oe', - 223 => 'germandbls', - 207 => 'Idieresis', - 233 => 'eacute', - 159 => 'Ydieresis', - 247 => 'divide', - 221 => 'Yacute', - 194 => 'Acircumflex', - 225 => 'aacute', - 219 => 'Ucircumflex', - 253 => 'yacute', - 234 => 'ecircumflex', - 220 => 'Udieresis', - 218 => 'Uacute', - 203 => 'Edieresis', - 169 => 'copyright', - 229 => 'aring', - 224 => 'agrave', - 227 => 'atilde', - 154 => 'scaron', - 237 => 'iacute', - 251 => 'ucircumflex', - 226 => 'acircumflex', - 231 => 'ccedilla', - 222 => 'Thorn', - 179 => 'threesuperior', - 210 => 'Ograve', - 192 => 'Agrave', - 215 => 'multiply', - 250 => 'uacute', - 255 => 'ydieresis', - 238 => 'icircumflex', - 202 => 'Ecircumflex', - 228 => 'adieresis', - 235 => 'edieresis', - 205 => 'Iacute', - 177 => 'plusminus', - 166 => 'brokenbar', - 174 => 'registered', - 200 => 'Egrave', - 142 => 'Zcaron', - 208 => 'Eth', - 199 => 'Ccedilla', - 193 => 'Aacute', - 196 => 'Adieresis', - 232 => 'egrave', - 211 => 'Oacute', - 243 => 'oacute', - 239 => 'idieresis', - 212 => 'Ocircumflex', - 217 => 'Ugrave', - 254 => 'thorn', - 178 => 'twosuperior', - 214 => 'Odieresis', - 181 => 'mu', - 236 => 'igrave', - 190 => 'threequarters', - 153 => 'trademark', - 204 => 'Igrave', - 189 => 'onehalf', - 244 => 'ocircumflex', - 241 => 'ntilde', - 201 => 'Eacute', - 188 => 'onequarter', - 138 => 'Scaron', - 176 => 'degree', - 242 => 'ograve', - 249 => 'ugrave', - 209 => 'Ntilde', - 245 => 'otilde', - 195 => 'Atilde', - 197 => 'Aring', - 213 => 'Otilde', - 206 => 'Icircumflex', - 172 => 'logicalnot', - 246 => 'odieresis', - 252 => 'udieresis', - 240 => 'eth', - 158 => 'zcaron', - 185 => 'onesuperior', - 128 => 'Euro', - ), - 'isUnicode' => false, - 'FontName' => 'Helvetica', - 'FullName' => 'Helvetica', - 'FamilyName' => 'Helvetica', - 'Weight' => 'Medium', - 'ItalicAngle' => '0', - 'IsFixedPitch' => 'false', - 'CharacterSet' => 'ExtendedRoman', - 'FontBBox' => - array ( - 0 => '-166', - 1 => '-225', - 2 => '1000', - 3 => '931', - ), - 'UnderlinePosition' => '-100', - 'UnderlineThickness' => '50', - 'Version' => '002.000', - 'EncodingScheme' => 'WinAnsiEncoding', - 'CapHeight' => '718', - 'XHeight' => '523', - 'Ascender' => '718', - 'Descender' => '-207', - 'StdHW' => '76', - 'StdVW' => '88', - 'StartCharMetrics' => '317', - 'C' => - array ( - 32 => 278, - 160 => 278, - 33 => 278, - 34 => 355, - 35 => 556, - 36 => 556, - 37 => 889, - 38 => 667, - 146 => 222, - 40 => 333, - 41 => 333, - 42 => 389, - 43 => 584, - 44 => 278, - 45 => 333, - 173 => 333, - 46 => 278, - 47 => 278, - 48 => 556, - 49 => 556, - 50 => 556, - 51 => 556, - 52 => 556, - 53 => 556, - 54 => 556, - 55 => 556, - 56 => 556, - 57 => 556, - 58 => 278, - 59 => 278, - 60 => 584, - 61 => 584, - 62 => 584, - 63 => 556, - 64 => 1015, - 65 => 667, - 66 => 667, - 67 => 722, - 68 => 722, - 69 => 667, - 70 => 611, - 71 => 778, - 72 => 722, - 73 => 278, - 74 => 500, - 75 => 667, - 76 => 556, - 77 => 833, - 78 => 722, - 79 => 778, - 80 => 667, - 81 => 778, - 82 => 722, - 83 => 667, - 84 => 611, - 85 => 722, - 86 => 667, - 87 => 944, - 88 => 667, - 89 => 667, - 90 => 611, - 91 => 278, - 92 => 278, - 93 => 278, - 94 => 469, - 95 => 556, - 145 => 222, - 97 => 556, - 98 => 556, - 99 => 500, - 100 => 556, - 101 => 556, - 102 => 278, - 103 => 556, - 104 => 556, - 105 => 222, - 106 => 222, - 107 => 500, - 108 => 222, - 109 => 833, - 110 => 556, - 111 => 556, - 112 => 556, - 113 => 556, - 114 => 333, - 115 => 500, - 116 => 278, - 117 => 556, - 118 => 500, - 119 => 722, - 120 => 500, - 121 => 500, - 122 => 500, - 123 => 334, - 124 => 260, - 125 => 334, - 126 => 584, - 161 => 333, - 162 => 556, - 163 => 556, - 'fraction' => 167, - 165 => 556, - 131 => 556, - 167 => 556, - 164 => 556, - 39 => 191, - 147 => 333, - 170 => 370, - 139 => 333, - 155 => 333, - 'fi' => 500, - 'fl' => 500, - 150 => 556, - 134 => 556, - 135 => 556, - 183 => 278, - 182 => 537, - 149 => 350, - 130 => 222, - 132 => 333, - 148 => 333, - 187 => 556, - 133 => 1000, - 137 => 1000, - 191 => 611, - 96 => 333, - 180 => 333, - 136 => 333, - 152 => 333, - 175 => 333, - 'breve' => 333, - 'dotaccent' => 333, - 168 => 333, - 'ring' => 333, - 184 => 333, - 'hungarumlaut' => 333, - 'ogonek' => 333, - 'caron' => 333, - 151 => 1000, - 198 => 1000, - 'Lslash' => 556, - 216 => 778, - 140 => 1000, - 186 => 365, - 230 => 889, - 'dotlessi' => 278, - 'lslash' => 222, - 248 => 611, - 156 => 944, - 223 => 611, - 207 => 278, - 233 => 556, - 'abreve' => 556, - 'uhungarumlaut' => 556, - 'ecaron' => 556, - 159 => 667, - 247 => 584, - 221 => 667, - 194 => 667, - 225 => 556, - 219 => 722, - 253 => 500, - 'scommaaccent' => 500, - 234 => 556, - 'Uring' => 722, - 220 => 722, - 'aogonek' => 556, - 218 => 722, - 'uogonek' => 556, - 203 => 667, - 'Dcroat' => 722, - 'commaaccent' => 250, - 169 => 737, - 'Emacron' => 667, - 'ccaron' => 500, - 229 => 556, - 'Ncommaaccent' => 722, - 'lacute' => 222, - 224 => 556, - 'Tcommaaccent' => 611, - 'Cacute' => 722, - 227 => 556, - 'Edotaccent' => 667, - 154 => 500, - 'scedilla' => 500, - 237 => 278, - 'lozenge' => 471, - 'Rcaron' => 722, - 'Gcommaaccent' => 778, - 251 => 556, - 226 => 556, - 'Amacron' => 667, - 'rcaron' => 333, - 231 => 500, - 'Zdotaccent' => 611, - 222 => 667, - 'Omacron' => 778, - 'Racute' => 722, - 'Sacute' => 667, - 'dcaron' => 643, - 'Umacron' => 722, - 'uring' => 556, - 179 => 333, - 210 => 778, - 192 => 667, - 'Abreve' => 667, - 215 => 584, - 250 => 556, - 'Tcaron' => 611, - 'partialdiff' => 476, - 255 => 500, - 'Nacute' => 722, - 238 => 278, - 202 => 667, - 228 => 556, - 235 => 556, - 'cacute' => 500, - 'nacute' => 556, - 'umacron' => 556, - 'Ncaron' => 722, - 205 => 278, - 177 => 584, - 166 => 260, - 174 => 737, - 'Gbreve' => 778, - 'Idotaccent' => 278, - 'summation' => 600, - 200 => 667, - 'racute' => 333, - 'omacron' => 556, - 'Zacute' => 611, - 142 => 611, - 'greaterequal' => 549, - 208 => 722, - 199 => 722, - 'lcommaaccent' => 222, - 'tcaron' => 317, - 'eogonek' => 556, - 'Uogonek' => 722, - 193 => 667, - 196 => 667, - 232 => 556, - 'zacute' => 500, - 'iogonek' => 222, - 211 => 778, - 243 => 556, - 'amacron' => 556, - 'sacute' => 500, - 239 => 278, - 212 => 778, - 217 => 722, - 'Delta' => 612, - 254 => 556, - 178 => 333, - 214 => 778, - 181 => 556, - 236 => 278, - 'ohungarumlaut' => 556, - 'Eogonek' => 667, - 'dcroat' => 556, - 190 => 834, - 'Scedilla' => 667, - 'lcaron' => 299, - 'Kcommaaccent' => 667, - 'Lacute' => 556, - 153 => 1000, - 'edotaccent' => 556, - 204 => 278, - 'Imacron' => 278, - 'Lcaron' => 556, - 189 => 834, - 'lessequal' => 549, - 244 => 556, - 241 => 556, - 'Uhungarumlaut' => 722, - 201 => 667, - 'emacron' => 556, - 'gbreve' => 556, - 188 => 834, - 138 => 667, - 'Scommaaccent' => 667, - 'Ohungarumlaut' => 778, - 176 => 400, - 242 => 556, - 'Ccaron' => 722, - 249 => 556, - 'radical' => 453, - 'Dcaron' => 722, - 'rcommaaccent' => 333, - 209 => 722, - 245 => 556, - 'Rcommaaccent' => 722, - 'Lcommaaccent' => 556, - 195 => 667, - 'Aogonek' => 667, - 197 => 667, - 213 => 778, - 'zdotaccent' => 500, - 'Ecaron' => 667, - 'Iogonek' => 278, - 'kcommaaccent' => 500, - 'minus' => 584, - 206 => 278, - 'ncaron' => 556, - 'tcommaaccent' => 278, - 172 => 584, - 246 => 556, - 252 => 556, - 'notequal' => 549, - 'gcommaaccent' => 556, - 240 => 556, - 158 => 500, - 'ncommaaccent' => 556, - 185 => 333, - 'imacron' => 278, - 128 => 556, - ), - 'CIDtoGID_Compressed' => true, - 'CIDtoGID' => 'eJwDAAAAAAE=', - '_version_' => 6, -); \ No newline at end of file diff --git a/app/storage/fonts/Times-Bold.afm.php b/app/storage/fonts/Times-Bold.afm.php deleted file mode 100755 index 74294ccd..00000000 --- a/app/storage/fonts/Times-Bold.afm.php +++ /dev/null @@ -1,570 +0,0 @@ - - array ( - 32 => 'space', - 160 => 'space', - 33 => 'exclam', - 34 => 'quotedbl', - 35 => 'numbersign', - 36 => 'dollar', - 37 => 'percent', - 38 => 'ampersand', - 146 => 'quoteright', - 40 => 'parenleft', - 41 => 'parenright', - 42 => 'asterisk', - 43 => 'plus', - 44 => 'comma', - 45 => 'hyphen', - 173 => 'hyphen', - 46 => 'period', - 47 => 'slash', - 48 => 'zero', - 49 => 'one', - 50 => 'two', - 51 => 'three', - 52 => 'four', - 53 => 'five', - 54 => 'six', - 55 => 'seven', - 56 => 'eight', - 57 => 'nine', - 58 => 'colon', - 59 => 'semicolon', - 60 => 'less', - 61 => 'equal', - 62 => 'greater', - 63 => 'question', - 64 => 'at', - 65 => 'A', - 66 => 'B', - 67 => 'C', - 68 => 'D', - 69 => 'E', - 70 => 'F', - 71 => 'G', - 72 => 'H', - 73 => 'I', - 74 => 'J', - 75 => 'K', - 76 => 'L', - 77 => 'M', - 78 => 'N', - 79 => 'O', - 80 => 'P', - 81 => 'Q', - 82 => 'R', - 83 => 'S', - 84 => 'T', - 85 => 'U', - 86 => 'V', - 87 => 'W', - 88 => 'X', - 89 => 'Y', - 90 => 'Z', - 91 => 'bracketleft', - 92 => 'backslash', - 93 => 'bracketright', - 94 => 'asciicircum', - 95 => 'underscore', - 145 => 'quoteleft', - 97 => 'a', - 98 => 'b', - 99 => 'c', - 100 => 'd', - 101 => 'e', - 102 => 'f', - 103 => 'g', - 104 => 'h', - 105 => 'i', - 106 => 'j', - 107 => 'k', - 108 => 'l', - 109 => 'm', - 110 => 'n', - 111 => 'o', - 112 => 'p', - 113 => 'q', - 114 => 'r', - 115 => 's', - 116 => 't', - 117 => 'u', - 118 => 'v', - 119 => 'w', - 120 => 'x', - 121 => 'y', - 122 => 'z', - 123 => 'braceleft', - 124 => 'bar', - 125 => 'braceright', - 126 => 'asciitilde', - 161 => 'exclamdown', - 162 => 'cent', - 163 => 'sterling', - 165 => 'yen', - 131 => 'florin', - 167 => 'section', - 164 => 'currency', - 39 => 'quotesingle', - 147 => 'quotedblleft', - 170 => 'ordfeminine', - 139 => 'guilsinglleft', - 155 => 'guilsinglright', - 150 => 'endash', - 134 => 'dagger', - 135 => 'daggerdbl', - 183 => 'periodcentered', - 182 => 'paragraph', - 149 => 'bullet', - 130 => 'quotesinglbase', - 132 => 'quotedblbase', - 148 => 'quotedblright', - 187 => 'guillemotright', - 133 => 'ellipsis', - 137 => 'perthousand', - 191 => 'questiondown', - 96 => 'grave', - 180 => 'acute', - 136 => 'circumflex', - 152 => 'tilde', - 175 => 'macron', - 168 => 'dieresis', - 184 => 'cedilla', - 151 => 'emdash', - 198 => 'AE', - 216 => 'Oslash', - 140 => 'OE', - 186 => 'ordmasculine', - 230 => 'ae', - 248 => 'oslash', - 156 => 'oe', - 223 => 'germandbls', - 207 => 'Idieresis', - 233 => 'eacute', - 159 => 'Ydieresis', - 247 => 'divide', - 221 => 'Yacute', - 194 => 'Acircumflex', - 225 => 'aacute', - 219 => 'Ucircumflex', - 253 => 'yacute', - 234 => 'ecircumflex', - 220 => 'Udieresis', - 218 => 'Uacute', - 203 => 'Edieresis', - 169 => 'copyright', - 229 => 'aring', - 224 => 'agrave', - 227 => 'atilde', - 154 => 'scaron', - 237 => 'iacute', - 251 => 'ucircumflex', - 226 => 'acircumflex', - 231 => 'ccedilla', - 222 => 'Thorn', - 179 => 'threesuperior', - 210 => 'Ograve', - 192 => 'Agrave', - 215 => 'multiply', - 250 => 'uacute', - 255 => 'ydieresis', - 238 => 'icircumflex', - 202 => 'Ecircumflex', - 228 => 'adieresis', - 235 => 'edieresis', - 205 => 'Iacute', - 177 => 'plusminus', - 166 => 'brokenbar', - 174 => 'registered', - 200 => 'Egrave', - 142 => 'Zcaron', - 208 => 'Eth', - 199 => 'Ccedilla', - 193 => 'Aacute', - 196 => 'Adieresis', - 232 => 'egrave', - 211 => 'Oacute', - 243 => 'oacute', - 239 => 'idieresis', - 212 => 'Ocircumflex', - 217 => 'Ugrave', - 254 => 'thorn', - 178 => 'twosuperior', - 214 => 'Odieresis', - 181 => 'mu', - 236 => 'igrave', - 190 => 'threequarters', - 153 => 'trademark', - 204 => 'Igrave', - 189 => 'onehalf', - 244 => 'ocircumflex', - 241 => 'ntilde', - 201 => 'Eacute', - 188 => 'onequarter', - 138 => 'Scaron', - 176 => 'degree', - 242 => 'ograve', - 249 => 'ugrave', - 209 => 'Ntilde', - 245 => 'otilde', - 195 => 'Atilde', - 197 => 'Aring', - 213 => 'Otilde', - 206 => 'Icircumflex', - 172 => 'logicalnot', - 246 => 'odieresis', - 252 => 'udieresis', - 240 => 'eth', - 158 => 'zcaron', - 185 => 'onesuperior', - 128 => 'Euro', - ), - 'isUnicode' => false, - 'FontName' => 'Times-Bold', - 'FullName' => 'Times Bold', - 'FamilyName' => 'Times', - 'Weight' => 'Bold', - 'ItalicAngle' => '0', - 'IsFixedPitch' => 'false', - 'CharacterSet' => 'ExtendedRoman', - 'FontBBox' => - array ( - 0 => '-168', - 1 => '-218', - 2 => '1000', - 3 => '935', - ), - 'UnderlinePosition' => '-100', - 'UnderlineThickness' => '50', - 'Version' => '002.000', - 'EncodingScheme' => 'WinAnsiEncoding', - 'CapHeight' => '676', - 'XHeight' => '461', - 'Ascender' => '683', - 'Descender' => '-217', - 'StdHW' => '44', - 'StdVW' => '139', - 'StartCharMetrics' => '317', - 'C' => - array ( - 32 => 250, - 160 => 250, - 33 => 333, - 34 => 555, - 35 => 500, - 36 => 500, - 37 => 1000, - 38 => 833, - 146 => 333, - 40 => 333, - 41 => 333, - 42 => 500, - 43 => 570, - 44 => 250, - 45 => 333, - 173 => 333, - 46 => 250, - 47 => 278, - 48 => 500, - 49 => 500, - 50 => 500, - 51 => 500, - 52 => 500, - 53 => 500, - 54 => 500, - 55 => 500, - 56 => 500, - 57 => 500, - 58 => 333, - 59 => 333, - 60 => 570, - 61 => 570, - 62 => 570, - 63 => 500, - 64 => 930, - 65 => 722, - 66 => 667, - 67 => 722, - 68 => 722, - 69 => 667, - 70 => 611, - 71 => 778, - 72 => 778, - 73 => 389, - 74 => 500, - 75 => 778, - 76 => 667, - 77 => 944, - 78 => 722, - 79 => 778, - 80 => 611, - 81 => 778, - 82 => 722, - 83 => 556, - 84 => 667, - 85 => 722, - 86 => 722, - 87 => 1000, - 88 => 722, - 89 => 722, - 90 => 667, - 91 => 333, - 92 => 278, - 93 => 333, - 94 => 581, - 95 => 500, - 145 => 333, - 97 => 500, - 98 => 556, - 99 => 444, - 100 => 556, - 101 => 444, - 102 => 333, - 103 => 500, - 104 => 556, - 105 => 278, - 106 => 333, - 107 => 556, - 108 => 278, - 109 => 833, - 110 => 556, - 111 => 500, - 112 => 556, - 113 => 556, - 114 => 444, - 115 => 389, - 116 => 333, - 117 => 556, - 118 => 500, - 119 => 722, - 120 => 500, - 121 => 500, - 122 => 444, - 123 => 394, - 124 => 220, - 125 => 394, - 126 => 520, - 161 => 333, - 162 => 500, - 163 => 500, - 'fraction' => 167, - 165 => 500, - 131 => 500, - 167 => 500, - 164 => 500, - 39 => 278, - 147 => 500, - 170 => 300, - 139 => 333, - 155 => 333, - 'fi' => 556, - 'fl' => 556, - 150 => 500, - 134 => 500, - 135 => 500, - 183 => 250, - 182 => 540, - 149 => 350, - 130 => 333, - 132 => 500, - 148 => 500, - 187 => 500, - 133 => 1000, - 137 => 1000, - 191 => 500, - 96 => 333, - 180 => 333, - 136 => 333, - 152 => 333, - 175 => 333, - 'breve' => 333, - 'dotaccent' => 333, - 168 => 333, - 'ring' => 333, - 184 => 333, - 'hungarumlaut' => 333, - 'ogonek' => 333, - 'caron' => 333, - 151 => 1000, - 198 => 1000, - 'Lslash' => 667, - 216 => 778, - 140 => 1000, - 186 => 330, - 230 => 722, - 'dotlessi' => 278, - 'lslash' => 278, - 248 => 500, - 156 => 722, - 223 => 556, - 207 => 389, - 233 => 444, - 'abreve' => 500, - 'uhungarumlaut' => 556, - 'ecaron' => 444, - 159 => 722, - 247 => 570, - 221 => 722, - 194 => 722, - 225 => 500, - 219 => 722, - 253 => 500, - 'scommaaccent' => 389, - 234 => 444, - 'Uring' => 722, - 220 => 722, - 'aogonek' => 500, - 218 => 722, - 'uogonek' => 556, - 203 => 667, - 'Dcroat' => 722, - 'commaaccent' => 250, - 169 => 747, - 'Emacron' => 667, - 'ccaron' => 444, - 229 => 500, - 'Ncommaaccent' => 722, - 'lacute' => 278, - 224 => 500, - 'Tcommaaccent' => 667, - 'Cacute' => 722, - 227 => 500, - 'Edotaccent' => 667, - 154 => 389, - 'scedilla' => 389, - 237 => 278, - 'lozenge' => 494, - 'Rcaron' => 722, - 'Gcommaaccent' => 778, - 251 => 556, - 226 => 500, - 'Amacron' => 722, - 'rcaron' => 444, - 231 => 444, - 'Zdotaccent' => 667, - 222 => 611, - 'Omacron' => 778, - 'Racute' => 722, - 'Sacute' => 556, - 'dcaron' => 672, - 'Umacron' => 722, - 'uring' => 556, - 179 => 300, - 210 => 778, - 192 => 722, - 'Abreve' => 722, - 215 => 570, - 250 => 556, - 'Tcaron' => 667, - 'partialdiff' => 494, - 255 => 500, - 'Nacute' => 722, - 238 => 278, - 202 => 667, - 228 => 500, - 235 => 444, - 'cacute' => 444, - 'nacute' => 556, - 'umacron' => 556, - 'Ncaron' => 722, - 205 => 389, - 177 => 570, - 166 => 220, - 174 => 747, - 'Gbreve' => 778, - 'Idotaccent' => 389, - 'summation' => 600, - 200 => 667, - 'racute' => 444, - 'omacron' => 500, - 'Zacute' => 667, - 142 => 667, - 'greaterequal' => 549, - 208 => 722, - 199 => 722, - 'lcommaaccent' => 278, - 'tcaron' => 416, - 'eogonek' => 444, - 'Uogonek' => 722, - 193 => 722, - 196 => 722, - 232 => 444, - 'zacute' => 444, - 'iogonek' => 278, - 211 => 778, - 243 => 500, - 'amacron' => 500, - 'sacute' => 389, - 239 => 278, - 212 => 778, - 217 => 722, - 'Delta' => 612, - 254 => 556, - 178 => 300, - 214 => 778, - 181 => 556, - 236 => 278, - 'ohungarumlaut' => 500, - 'Eogonek' => 667, - 'dcroat' => 556, - 190 => 750, - 'Scedilla' => 556, - 'lcaron' => 394, - 'Kcommaaccent' => 778, - 'Lacute' => 667, - 153 => 1000, - 'edotaccent' => 444, - 204 => 389, - 'Imacron' => 389, - 'Lcaron' => 667, - 189 => 750, - 'lessequal' => 549, - 244 => 500, - 241 => 556, - 'Uhungarumlaut' => 722, - 201 => 667, - 'emacron' => 444, - 'gbreve' => 500, - 188 => 750, - 138 => 556, - 'Scommaaccent' => 556, - 'Ohungarumlaut' => 778, - 176 => 400, - 242 => 500, - 'Ccaron' => 722, - 249 => 556, - 'radical' => 549, - 'Dcaron' => 722, - 'rcommaaccent' => 444, - 209 => 722, - 245 => 500, - 'Rcommaaccent' => 722, - 'Lcommaaccent' => 667, - 195 => 722, - 'Aogonek' => 722, - 197 => 722, - 213 => 778, - 'zdotaccent' => 444, - 'Ecaron' => 667, - 'Iogonek' => 389, - 'kcommaaccent' => 556, - 'minus' => 570, - 206 => 389, - 'ncaron' => 556, - 'tcommaaccent' => 333, - 172 => 570, - 246 => 500, - 252 => 556, - 'notequal' => 549, - 'gcommaaccent' => 500, - 240 => 500, - 158 => 444, - 'ncommaaccent' => 556, - 185 => 300, - 'imacron' => 278, - 128 => 500, - ), - 'CIDtoGID_Compressed' => true, - 'CIDtoGID' => 'eJwDAAAAAAE=', - '_version_' => 6, -); \ No newline at end of file diff --git a/app/storage/fonts/Times-BoldItalic.afm.php b/app/storage/fonts/Times-BoldItalic.afm.php deleted file mode 100755 index abdbb429..00000000 --- a/app/storage/fonts/Times-BoldItalic.afm.php +++ /dev/null @@ -1,570 +0,0 @@ - - array ( - 32 => 'space', - 160 => 'space', - 33 => 'exclam', - 34 => 'quotedbl', - 35 => 'numbersign', - 36 => 'dollar', - 37 => 'percent', - 38 => 'ampersand', - 146 => 'quoteright', - 40 => 'parenleft', - 41 => 'parenright', - 42 => 'asterisk', - 43 => 'plus', - 44 => 'comma', - 45 => 'hyphen', - 173 => 'hyphen', - 46 => 'period', - 47 => 'slash', - 48 => 'zero', - 49 => 'one', - 50 => 'two', - 51 => 'three', - 52 => 'four', - 53 => 'five', - 54 => 'six', - 55 => 'seven', - 56 => 'eight', - 57 => 'nine', - 58 => 'colon', - 59 => 'semicolon', - 60 => 'less', - 61 => 'equal', - 62 => 'greater', - 63 => 'question', - 64 => 'at', - 65 => 'A', - 66 => 'B', - 67 => 'C', - 68 => 'D', - 69 => 'E', - 70 => 'F', - 71 => 'G', - 72 => 'H', - 73 => 'I', - 74 => 'J', - 75 => 'K', - 76 => 'L', - 77 => 'M', - 78 => 'N', - 79 => 'O', - 80 => 'P', - 81 => 'Q', - 82 => 'R', - 83 => 'S', - 84 => 'T', - 85 => 'U', - 86 => 'V', - 87 => 'W', - 88 => 'X', - 89 => 'Y', - 90 => 'Z', - 91 => 'bracketleft', - 92 => 'backslash', - 93 => 'bracketright', - 94 => 'asciicircum', - 95 => 'underscore', - 145 => 'quoteleft', - 97 => 'a', - 98 => 'b', - 99 => 'c', - 100 => 'd', - 101 => 'e', - 102 => 'f', - 103 => 'g', - 104 => 'h', - 105 => 'i', - 106 => 'j', - 107 => 'k', - 108 => 'l', - 109 => 'm', - 110 => 'n', - 111 => 'o', - 112 => 'p', - 113 => 'q', - 114 => 'r', - 115 => 's', - 116 => 't', - 117 => 'u', - 118 => 'v', - 119 => 'w', - 120 => 'x', - 121 => 'y', - 122 => 'z', - 123 => 'braceleft', - 124 => 'bar', - 125 => 'braceright', - 126 => 'asciitilde', - 161 => 'exclamdown', - 162 => 'cent', - 163 => 'sterling', - 165 => 'yen', - 131 => 'florin', - 167 => 'section', - 164 => 'currency', - 39 => 'quotesingle', - 147 => 'quotedblleft', - 170 => 'ordfeminine', - 139 => 'guilsinglleft', - 155 => 'guilsinglright', - 150 => 'endash', - 134 => 'dagger', - 135 => 'daggerdbl', - 183 => 'periodcentered', - 182 => 'paragraph', - 149 => 'bullet', - 130 => 'quotesinglbase', - 132 => 'quotedblbase', - 148 => 'quotedblright', - 187 => 'guillemotright', - 133 => 'ellipsis', - 137 => 'perthousand', - 191 => 'questiondown', - 96 => 'grave', - 180 => 'acute', - 136 => 'circumflex', - 152 => 'tilde', - 175 => 'macron', - 168 => 'dieresis', - 184 => 'cedilla', - 151 => 'emdash', - 198 => 'AE', - 216 => 'Oslash', - 140 => 'OE', - 186 => 'ordmasculine', - 230 => 'ae', - 248 => 'oslash', - 156 => 'oe', - 223 => 'germandbls', - 207 => 'Idieresis', - 233 => 'eacute', - 159 => 'Ydieresis', - 247 => 'divide', - 221 => 'Yacute', - 194 => 'Acircumflex', - 225 => 'aacute', - 219 => 'Ucircumflex', - 253 => 'yacute', - 234 => 'ecircumflex', - 220 => 'Udieresis', - 218 => 'Uacute', - 203 => 'Edieresis', - 169 => 'copyright', - 229 => 'aring', - 224 => 'agrave', - 227 => 'atilde', - 154 => 'scaron', - 237 => 'iacute', - 251 => 'ucircumflex', - 226 => 'acircumflex', - 231 => 'ccedilla', - 222 => 'Thorn', - 179 => 'threesuperior', - 210 => 'Ograve', - 192 => 'Agrave', - 215 => 'multiply', - 250 => 'uacute', - 255 => 'ydieresis', - 238 => 'icircumflex', - 202 => 'Ecircumflex', - 228 => 'adieresis', - 235 => 'edieresis', - 205 => 'Iacute', - 177 => 'plusminus', - 166 => 'brokenbar', - 174 => 'registered', - 200 => 'Egrave', - 142 => 'Zcaron', - 208 => 'Eth', - 199 => 'Ccedilla', - 193 => 'Aacute', - 196 => 'Adieresis', - 232 => 'egrave', - 211 => 'Oacute', - 243 => 'oacute', - 239 => 'idieresis', - 212 => 'Ocircumflex', - 217 => 'Ugrave', - 254 => 'thorn', - 178 => 'twosuperior', - 214 => 'Odieresis', - 181 => 'mu', - 236 => 'igrave', - 190 => 'threequarters', - 153 => 'trademark', - 204 => 'Igrave', - 189 => 'onehalf', - 244 => 'ocircumflex', - 241 => 'ntilde', - 201 => 'Eacute', - 188 => 'onequarter', - 138 => 'Scaron', - 176 => 'degree', - 242 => 'ograve', - 249 => 'ugrave', - 209 => 'Ntilde', - 245 => 'otilde', - 195 => 'Atilde', - 197 => 'Aring', - 213 => 'Otilde', - 206 => 'Icircumflex', - 172 => 'logicalnot', - 246 => 'odieresis', - 252 => 'udieresis', - 240 => 'eth', - 158 => 'zcaron', - 185 => 'onesuperior', - 128 => 'Euro', - ), - 'isUnicode' => false, - 'FontName' => 'Times-BoldItalic', - 'FullName' => 'Times Bold Italic', - 'FamilyName' => 'Times', - 'Weight' => 'Bold', - 'ItalicAngle' => '-15', - 'IsFixedPitch' => 'false', - 'CharacterSet' => 'ExtendedRoman', - 'FontBBox' => - array ( - 0 => '-200', - 1 => '-218', - 2 => '996', - 3 => '921', - ), - 'UnderlinePosition' => '-100', - 'UnderlineThickness' => '50', - 'Version' => '002.000', - 'EncodingScheme' => 'WinAnsiEncoding', - 'CapHeight' => '669', - 'XHeight' => '462', - 'Ascender' => '683', - 'Descender' => '-217', - 'StdHW' => '42', - 'StdVW' => '121', - 'StartCharMetrics' => '317', - 'C' => - array ( - 32 => 250, - 160 => 250, - 33 => 389, - 34 => 555, - 35 => 500, - 36 => 500, - 37 => 833, - 38 => 778, - 146 => 333, - 40 => 333, - 41 => 333, - 42 => 500, - 43 => 570, - 44 => 250, - 45 => 333, - 173 => 333, - 46 => 250, - 47 => 278, - 48 => 500, - 49 => 500, - 50 => 500, - 51 => 500, - 52 => 500, - 53 => 500, - 54 => 500, - 55 => 500, - 56 => 500, - 57 => 500, - 58 => 333, - 59 => 333, - 60 => 570, - 61 => 570, - 62 => 570, - 63 => 500, - 64 => 832, - 65 => 667, - 66 => 667, - 67 => 667, - 68 => 722, - 69 => 667, - 70 => 667, - 71 => 722, - 72 => 778, - 73 => 389, - 74 => 500, - 75 => 667, - 76 => 611, - 77 => 889, - 78 => 722, - 79 => 722, - 80 => 611, - 81 => 722, - 82 => 667, - 83 => 556, - 84 => 611, - 85 => 722, - 86 => 667, - 87 => 889, - 88 => 667, - 89 => 611, - 90 => 611, - 91 => 333, - 92 => 278, - 93 => 333, - 94 => 570, - 95 => 500, - 145 => 333, - 97 => 500, - 98 => 500, - 99 => 444, - 100 => 500, - 101 => 444, - 102 => 333, - 103 => 500, - 104 => 556, - 105 => 278, - 106 => 278, - 107 => 500, - 108 => 278, - 109 => 778, - 110 => 556, - 111 => 500, - 112 => 500, - 113 => 500, - 114 => 389, - 115 => 389, - 116 => 278, - 117 => 556, - 118 => 444, - 119 => 667, - 120 => 500, - 121 => 444, - 122 => 389, - 123 => 348, - 124 => 220, - 125 => 348, - 126 => 570, - 161 => 389, - 162 => 500, - 163 => 500, - 'fraction' => 167, - 165 => 500, - 131 => 500, - 167 => 500, - 164 => 500, - 39 => 278, - 147 => 500, - 170 => 266, - 139 => 333, - 155 => 333, - 'fi' => 556, - 'fl' => 556, - 150 => 500, - 134 => 500, - 135 => 500, - 183 => 250, - 182 => 500, - 149 => 350, - 130 => 333, - 132 => 500, - 148 => 500, - 187 => 500, - 133 => 1000, - 137 => 1000, - 191 => 500, - 96 => 333, - 180 => 333, - 136 => 333, - 152 => 333, - 175 => 333, - 'breve' => 333, - 'dotaccent' => 333, - 168 => 333, - 'ring' => 333, - 184 => 333, - 'hungarumlaut' => 333, - 'ogonek' => 333, - 'caron' => 333, - 151 => 1000, - 198 => 944, - 'Lslash' => 611, - 216 => 722, - 140 => 944, - 186 => 300, - 230 => 722, - 'dotlessi' => 278, - 'lslash' => 278, - 248 => 500, - 156 => 722, - 223 => 500, - 207 => 389, - 233 => 444, - 'abreve' => 500, - 'uhungarumlaut' => 556, - 'ecaron' => 444, - 159 => 611, - 247 => 570, - 221 => 611, - 194 => 667, - 225 => 500, - 219 => 722, - 253 => 444, - 'scommaaccent' => 389, - 234 => 444, - 'Uring' => 722, - 220 => 722, - 'aogonek' => 500, - 218 => 722, - 'uogonek' => 556, - 203 => 667, - 'Dcroat' => 722, - 'commaaccent' => 250, - 169 => 747, - 'Emacron' => 667, - 'ccaron' => 444, - 229 => 500, - 'Ncommaaccent' => 722, - 'lacute' => 278, - 224 => 500, - 'Tcommaaccent' => 611, - 'Cacute' => 667, - 227 => 500, - 'Edotaccent' => 667, - 154 => 389, - 'scedilla' => 389, - 237 => 278, - 'lozenge' => 494, - 'Rcaron' => 667, - 'Gcommaaccent' => 722, - 251 => 556, - 226 => 500, - 'Amacron' => 667, - 'rcaron' => 389, - 231 => 444, - 'Zdotaccent' => 611, - 222 => 611, - 'Omacron' => 722, - 'Racute' => 667, - 'Sacute' => 556, - 'dcaron' => 608, - 'Umacron' => 722, - 'uring' => 556, - 179 => 300, - 210 => 722, - 192 => 667, - 'Abreve' => 667, - 215 => 570, - 250 => 556, - 'Tcaron' => 611, - 'partialdiff' => 494, - 255 => 444, - 'Nacute' => 722, - 238 => 278, - 202 => 667, - 228 => 500, - 235 => 444, - 'cacute' => 444, - 'nacute' => 556, - 'umacron' => 556, - 'Ncaron' => 722, - 205 => 389, - 177 => 570, - 166 => 220, - 174 => 747, - 'Gbreve' => 722, - 'Idotaccent' => 389, - 'summation' => 600, - 200 => 667, - 'racute' => 389, - 'omacron' => 500, - 'Zacute' => 611, - 142 => 611, - 'greaterequal' => 549, - 208 => 722, - 199 => 667, - 'lcommaaccent' => 278, - 'tcaron' => 366, - 'eogonek' => 444, - 'Uogonek' => 722, - 193 => 667, - 196 => 667, - 232 => 444, - 'zacute' => 389, - 'iogonek' => 278, - 211 => 722, - 243 => 500, - 'amacron' => 500, - 'sacute' => 389, - 239 => 278, - 212 => 722, - 217 => 722, - 'Delta' => 612, - 254 => 500, - 178 => 300, - 214 => 722, - 181 => 576, - 236 => 278, - 'ohungarumlaut' => 500, - 'Eogonek' => 667, - 'dcroat' => 500, - 190 => 750, - 'Scedilla' => 556, - 'lcaron' => 382, - 'Kcommaaccent' => 667, - 'Lacute' => 611, - 153 => 1000, - 'edotaccent' => 444, - 204 => 389, - 'Imacron' => 389, - 'Lcaron' => 611, - 189 => 750, - 'lessequal' => 549, - 244 => 500, - 241 => 556, - 'Uhungarumlaut' => 722, - 201 => 667, - 'emacron' => 444, - 'gbreve' => 500, - 188 => 750, - 138 => 556, - 'Scommaaccent' => 556, - 'Ohungarumlaut' => 722, - 176 => 400, - 242 => 500, - 'Ccaron' => 667, - 249 => 556, - 'radical' => 549, - 'Dcaron' => 722, - 'rcommaaccent' => 389, - 209 => 722, - 245 => 500, - 'Rcommaaccent' => 667, - 'Lcommaaccent' => 611, - 195 => 667, - 'Aogonek' => 667, - 197 => 667, - 213 => 722, - 'zdotaccent' => 389, - 'Ecaron' => 667, - 'Iogonek' => 389, - 'kcommaaccent' => 500, - 'minus' => 606, - 206 => 389, - 'ncaron' => 556, - 'tcommaaccent' => 278, - 172 => 606, - 246 => 500, - 252 => 556, - 'notequal' => 549, - 'gcommaaccent' => 500, - 240 => 500, - 158 => 389, - 'ncommaaccent' => 556, - 185 => 300, - 'imacron' => 278, - 128 => 500, - ), - 'CIDtoGID_Compressed' => true, - 'CIDtoGID' => 'eJwDAAAAAAE=', - '_version_' => 6, -); \ No newline at end of file diff --git a/app/storage/fonts/Times-Roman.afm.php b/app/storage/fonts/Times-Roman.afm.php deleted file mode 100755 index a327e328..00000000 --- a/app/storage/fonts/Times-Roman.afm.php +++ /dev/null @@ -1,570 +0,0 @@ - - array ( - 32 => 'space', - 160 => 'space', - 33 => 'exclam', - 34 => 'quotedbl', - 35 => 'numbersign', - 36 => 'dollar', - 37 => 'percent', - 38 => 'ampersand', - 146 => 'quoteright', - 40 => 'parenleft', - 41 => 'parenright', - 42 => 'asterisk', - 43 => 'plus', - 44 => 'comma', - 45 => 'hyphen', - 173 => 'hyphen', - 46 => 'period', - 47 => 'slash', - 48 => 'zero', - 49 => 'one', - 50 => 'two', - 51 => 'three', - 52 => 'four', - 53 => 'five', - 54 => 'six', - 55 => 'seven', - 56 => 'eight', - 57 => 'nine', - 58 => 'colon', - 59 => 'semicolon', - 60 => 'less', - 61 => 'equal', - 62 => 'greater', - 63 => 'question', - 64 => 'at', - 65 => 'A', - 66 => 'B', - 67 => 'C', - 68 => 'D', - 69 => 'E', - 70 => 'F', - 71 => 'G', - 72 => 'H', - 73 => 'I', - 74 => 'J', - 75 => 'K', - 76 => 'L', - 77 => 'M', - 78 => 'N', - 79 => 'O', - 80 => 'P', - 81 => 'Q', - 82 => 'R', - 83 => 'S', - 84 => 'T', - 85 => 'U', - 86 => 'V', - 87 => 'W', - 88 => 'X', - 89 => 'Y', - 90 => 'Z', - 91 => 'bracketleft', - 92 => 'backslash', - 93 => 'bracketright', - 94 => 'asciicircum', - 95 => 'underscore', - 145 => 'quoteleft', - 97 => 'a', - 98 => 'b', - 99 => 'c', - 100 => 'd', - 101 => 'e', - 102 => 'f', - 103 => 'g', - 104 => 'h', - 105 => 'i', - 106 => 'j', - 107 => 'k', - 108 => 'l', - 109 => 'm', - 110 => 'n', - 111 => 'o', - 112 => 'p', - 113 => 'q', - 114 => 'r', - 115 => 's', - 116 => 't', - 117 => 'u', - 118 => 'v', - 119 => 'w', - 120 => 'x', - 121 => 'y', - 122 => 'z', - 123 => 'braceleft', - 124 => 'bar', - 125 => 'braceright', - 126 => 'asciitilde', - 161 => 'exclamdown', - 162 => 'cent', - 163 => 'sterling', - 165 => 'yen', - 131 => 'florin', - 167 => 'section', - 164 => 'currency', - 39 => 'quotesingle', - 147 => 'quotedblleft', - 170 => 'ordfeminine', - 139 => 'guilsinglleft', - 155 => 'guilsinglright', - 150 => 'endash', - 134 => 'dagger', - 135 => 'daggerdbl', - 183 => 'periodcentered', - 182 => 'paragraph', - 149 => 'bullet', - 130 => 'quotesinglbase', - 132 => 'quotedblbase', - 148 => 'quotedblright', - 187 => 'guillemotright', - 133 => 'ellipsis', - 137 => 'perthousand', - 191 => 'questiondown', - 96 => 'grave', - 180 => 'acute', - 136 => 'circumflex', - 152 => 'tilde', - 175 => 'macron', - 168 => 'dieresis', - 184 => 'cedilla', - 151 => 'emdash', - 198 => 'AE', - 216 => 'Oslash', - 140 => 'OE', - 186 => 'ordmasculine', - 230 => 'ae', - 248 => 'oslash', - 156 => 'oe', - 223 => 'germandbls', - 207 => 'Idieresis', - 233 => 'eacute', - 159 => 'Ydieresis', - 247 => 'divide', - 221 => 'Yacute', - 194 => 'Acircumflex', - 225 => 'aacute', - 219 => 'Ucircumflex', - 253 => 'yacute', - 234 => 'ecircumflex', - 220 => 'Udieresis', - 218 => 'Uacute', - 203 => 'Edieresis', - 169 => 'copyright', - 229 => 'aring', - 224 => 'agrave', - 227 => 'atilde', - 154 => 'scaron', - 237 => 'iacute', - 251 => 'ucircumflex', - 226 => 'acircumflex', - 231 => 'ccedilla', - 222 => 'Thorn', - 179 => 'threesuperior', - 210 => 'Ograve', - 192 => 'Agrave', - 215 => 'multiply', - 250 => 'uacute', - 255 => 'ydieresis', - 238 => 'icircumflex', - 202 => 'Ecircumflex', - 228 => 'adieresis', - 235 => 'edieresis', - 205 => 'Iacute', - 177 => 'plusminus', - 166 => 'brokenbar', - 174 => 'registered', - 200 => 'Egrave', - 142 => 'Zcaron', - 208 => 'Eth', - 199 => 'Ccedilla', - 193 => 'Aacute', - 196 => 'Adieresis', - 232 => 'egrave', - 211 => 'Oacute', - 243 => 'oacute', - 239 => 'idieresis', - 212 => 'Ocircumflex', - 217 => 'Ugrave', - 254 => 'thorn', - 178 => 'twosuperior', - 214 => 'Odieresis', - 181 => 'mu', - 236 => 'igrave', - 190 => 'threequarters', - 153 => 'trademark', - 204 => 'Igrave', - 189 => 'onehalf', - 244 => 'ocircumflex', - 241 => 'ntilde', - 201 => 'Eacute', - 188 => 'onequarter', - 138 => 'Scaron', - 176 => 'degree', - 242 => 'ograve', - 249 => 'ugrave', - 209 => 'Ntilde', - 245 => 'otilde', - 195 => 'Atilde', - 197 => 'Aring', - 213 => 'Otilde', - 206 => 'Icircumflex', - 172 => 'logicalnot', - 246 => 'odieresis', - 252 => 'udieresis', - 240 => 'eth', - 158 => 'zcaron', - 185 => 'onesuperior', - 128 => 'Euro', - ), - 'isUnicode' => false, - 'FontName' => 'Times-Roman', - 'FullName' => 'Times Roman', - 'FamilyName' => 'Times', - 'Weight' => 'Roman', - 'ItalicAngle' => '0', - 'IsFixedPitch' => 'false', - 'CharacterSet' => 'ExtendedRoman', - 'FontBBox' => - array ( - 0 => '-168', - 1 => '-218', - 2 => '1000', - 3 => '898', - ), - 'UnderlinePosition' => '-100', - 'UnderlineThickness' => '50', - 'Version' => '002.00', - 'EncodingScheme' => 'WinAnsiEncoding', - 'CapHeight' => '662', - 'XHeight' => '450', - 'Ascender' => '683', - 'Descender' => '-217', - 'StdHW' => '28', - 'StdVW' => '84', - 'StartCharMetrics' => '317', - 'C' => - array ( - 32 => 250, - 160 => 250, - 33 => 333, - 34 => 408, - 35 => 500, - 36 => 500, - 37 => 833, - 38 => 778, - 146 => 333, - 40 => 333, - 41 => 333, - 42 => 500, - 43 => 564, - 44 => 250, - 45 => 333, - 173 => 333, - 46 => 250, - 47 => 278, - 48 => 500, - 49 => 500, - 50 => 500, - 51 => 500, - 52 => 500, - 53 => 500, - 54 => 500, - 55 => 500, - 56 => 500, - 57 => 500, - 58 => 278, - 59 => 278, - 60 => 564, - 61 => 564, - 62 => 564, - 63 => 444, - 64 => 921, - 65 => 722, - 66 => 667, - 67 => 667, - 68 => 722, - 69 => 611, - 70 => 556, - 71 => 722, - 72 => 722, - 73 => 333, - 74 => 389, - 75 => 722, - 76 => 611, - 77 => 889, - 78 => 722, - 79 => 722, - 80 => 556, - 81 => 722, - 82 => 667, - 83 => 556, - 84 => 611, - 85 => 722, - 86 => 722, - 87 => 944, - 88 => 722, - 89 => 722, - 90 => 611, - 91 => 333, - 92 => 278, - 93 => 333, - 94 => 469, - 95 => 500, - 145 => 333, - 97 => 444, - 98 => 500, - 99 => 444, - 100 => 500, - 101 => 444, - 102 => 333, - 103 => 500, - 104 => 500, - 105 => 278, - 106 => 278, - 107 => 500, - 108 => 278, - 109 => 778, - 110 => 500, - 111 => 500, - 112 => 500, - 113 => 500, - 114 => 333, - 115 => 389, - 116 => 278, - 117 => 500, - 118 => 500, - 119 => 722, - 120 => 500, - 121 => 500, - 122 => 444, - 123 => 480, - 124 => 200, - 125 => 480, - 126 => 541, - 161 => 333, - 162 => 500, - 163 => 500, - 'fraction' => 167, - 165 => 500, - 131 => 500, - 167 => 500, - 164 => 500, - 39 => 180, - 147 => 444, - 170 => 276, - 139 => 333, - 155 => 333, - 'fi' => 556, - 'fl' => 556, - 150 => 500, - 134 => 500, - 135 => 500, - 183 => 250, - 182 => 453, - 149 => 350, - 130 => 333, - 132 => 444, - 148 => 444, - 187 => 500, - 133 => 1000, - 137 => 1000, - 191 => 444, - 96 => 333, - 180 => 333, - 136 => 333, - 152 => 333, - 175 => 333, - 'breve' => 333, - 'dotaccent' => 333, - 168 => 333, - 'ring' => 333, - 184 => 333, - 'hungarumlaut' => 333, - 'ogonek' => 333, - 'caron' => 333, - 151 => 1000, - 198 => 889, - 'Lslash' => 611, - 216 => 722, - 140 => 889, - 186 => 310, - 230 => 667, - 'dotlessi' => 278, - 'lslash' => 278, - 248 => 500, - 156 => 722, - 223 => 500, - 207 => 333, - 233 => 444, - 'abreve' => 444, - 'uhungarumlaut' => 500, - 'ecaron' => 444, - 159 => 722, - 247 => 564, - 221 => 722, - 194 => 722, - 225 => 444, - 219 => 722, - 253 => 500, - 'scommaaccent' => 389, - 234 => 444, - 'Uring' => 722, - 220 => 722, - 'aogonek' => 444, - 218 => 722, - 'uogonek' => 500, - 203 => 611, - 'Dcroat' => 722, - 'commaaccent' => 250, - 169 => 760, - 'Emacron' => 611, - 'ccaron' => 444, - 229 => 444, - 'Ncommaaccent' => 722, - 'lacute' => 278, - 224 => 444, - 'Tcommaaccent' => 611, - 'Cacute' => 667, - 227 => 444, - 'Edotaccent' => 611, - 154 => 389, - 'scedilla' => 389, - 237 => 278, - 'lozenge' => 471, - 'Rcaron' => 667, - 'Gcommaaccent' => 722, - 251 => 500, - 226 => 444, - 'Amacron' => 722, - 'rcaron' => 333, - 231 => 444, - 'Zdotaccent' => 611, - 222 => 556, - 'Omacron' => 722, - 'Racute' => 667, - 'Sacute' => 556, - 'dcaron' => 588, - 'Umacron' => 722, - 'uring' => 500, - 179 => 300, - 210 => 722, - 192 => 722, - 'Abreve' => 722, - 215 => 564, - 250 => 500, - 'Tcaron' => 611, - 'partialdiff' => 476, - 255 => 500, - 'Nacute' => 722, - 238 => 278, - 202 => 611, - 228 => 444, - 235 => 444, - 'cacute' => 444, - 'nacute' => 500, - 'umacron' => 500, - 'Ncaron' => 722, - 205 => 333, - 177 => 564, - 166 => 200, - 174 => 760, - 'Gbreve' => 722, - 'Idotaccent' => 333, - 'summation' => 600, - 200 => 611, - 'racute' => 333, - 'omacron' => 500, - 'Zacute' => 611, - 142 => 611, - 'greaterequal' => 549, - 208 => 722, - 199 => 667, - 'lcommaaccent' => 278, - 'tcaron' => 326, - 'eogonek' => 444, - 'Uogonek' => 722, - 193 => 722, - 196 => 722, - 232 => 444, - 'zacute' => 444, - 'iogonek' => 278, - 211 => 722, - 243 => 500, - 'amacron' => 444, - 'sacute' => 389, - 239 => 278, - 212 => 722, - 217 => 722, - 'Delta' => 612, - 254 => 500, - 178 => 300, - 214 => 722, - 181 => 500, - 236 => 278, - 'ohungarumlaut' => 500, - 'Eogonek' => 611, - 'dcroat' => 500, - 190 => 750, - 'Scedilla' => 556, - 'lcaron' => 344, - 'Kcommaaccent' => 722, - 'Lacute' => 611, - 153 => 980, - 'edotaccent' => 444, - 204 => 333, - 'Imacron' => 333, - 'Lcaron' => 611, - 189 => 750, - 'lessequal' => 549, - 244 => 500, - 241 => 500, - 'Uhungarumlaut' => 722, - 201 => 611, - 'emacron' => 444, - 'gbreve' => 500, - 188 => 750, - 138 => 556, - 'Scommaaccent' => 556, - 'Ohungarumlaut' => 722, - 176 => 400, - 242 => 500, - 'Ccaron' => 667, - 249 => 500, - 'radical' => 453, - 'Dcaron' => 722, - 'rcommaaccent' => 333, - 209 => 722, - 245 => 500, - 'Rcommaaccent' => 667, - 'Lcommaaccent' => 611, - 195 => 722, - 'Aogonek' => 722, - 197 => 722, - 213 => 722, - 'zdotaccent' => 444, - 'Ecaron' => 611, - 'Iogonek' => 333, - 'kcommaaccent' => 500, - 'minus' => 564, - 206 => 333, - 'ncaron' => 500, - 'tcommaaccent' => 278, - 172 => 564, - 246 => 500, - 252 => 500, - 'notequal' => 549, - 'gcommaaccent' => 500, - 240 => 500, - 158 => 444, - 'ncommaaccent' => 500, - 185 => 300, - 'imacron' => 278, - 128 => 500, - ), - 'CIDtoGID_Compressed' => true, - 'CIDtoGID' => 'eJwDAAAAAAE=', - '_version_' => 6, -); \ No newline at end of file diff --git a/app/storage/fonts/aaca5f100d38e34b5d97f209039f95e2.ttf b/app/storage/fonts/aaca5f100d38e34b5d97f209039f95e2.ttf deleted file mode 100755 index a498ef4e..00000000 Binary files a/app/storage/fonts/aaca5f100d38e34b5d97f209039f95e2.ttf and /dev/null differ diff --git a/app/storage/fonts/aaca5f100d38e34b5d97f209039f95e2.ufm b/app/storage/fonts/aaca5f100d38e34b5d97f209039f95e2.ufm deleted file mode 100755 index ff08e5ff..00000000 --- a/app/storage/fonts/aaca5f100d38e34b5d97f209039f95e2.ufm +++ /dev/null @@ -1,246 +0,0 @@ -StartFontMetrics 4.1 -Notice Converted by PHP-font-lib -Comment https://github.com/PhenX/php-font-lib -EncodingScheme FontSpecific -SampleText www.glyphicons.com -Copyright Copyright © 2013 by Jan Kovarik. All rights reserved. -FontName GLYPHICONS Halflings -FontSubfamily Regular -UniqueID 1.001;UKWN;GLYPHICONSHalflings-Regular -FullName GLYPHICONS Halflings Regular -Version Version 1.001;PS 001.001;hotconv 1.0.70;makeotf.lib2.5.58329 -PostScriptName GLYPHICONSHalflings-Regular -Manufacturer Jan Kovarik -Designer Jan Kovarik -FontVendorURL www.glyphicons.com -FontDesignerURL www.glyphicons.com -Weight Medium -ItalicAngle 0 -IsFixedPitch false -UnderlineThickness 42 -UnderlinePosition -63 -FontHeightOffset 0 -Ascender 1087 -Descender -103 -FontBBox -165 -83 1251 1087 -StartCharMetrics 219 -U 0 ; WX 1000 ; N glyph1 ; G 1 -U 13 ; WX 1000 ; N uni000D ; G 2 -U 32 ; WX 1000 ; N space ; G 3 -U 42 ; WX 1000 ; N asterisk ; G 4 -U 43 ; WX 1000 ; N plus ; G 5 -U 160 ; WX 1000 ; N uni00A0 ; G 6 -U 8192 ; WX 543 ; N uni2000 ; G 7 -U 8193 ; WX 1087 ; N uni2001 ; G 8 -U 8194 ; WX 543 ; N uni2002 ; G 9 -U 8195 ; WX 1087 ; N uni2003 ; G 10 -U 8196 ; WX 362 ; N uni2004 ; G 11 -U 8197 ; WX 272 ; N uni2005 ; G 12 -U 8198 ; WX 181 ; N uni2006 ; G 13 -U 8199 ; WX 181 ; N uni2007 ; G 14 -U 8200 ; WX 136 ; N uni2008 ; G 15 -U 8201 ; WX 217 ; N uni2009 ; G 16 -U 8202 ; WX 60 ; N uni200A ; G 17 -U 8239 ; WX 217 ; N uni202F ; G 18 -U 8287 ; WX 272 ; N uni205F ; G 19 -U 8364 ; WX 1000 ; N Euro ; G 20 -U 8722 ; WX 1000 ; N minus ; G 21 -U 9729 ; WX 1000 ; N uni2601 ; G 22 -U 9993 ; WX 1000 ; N uni2709 ; G 23 -U 9999 ; WX 1000 ; N uni270F ; G 24 -U 57344 ; WX 417 ; N uniE000 ; G 25 -U 57345 ; WX 1000 ; N uniE001 ; G 26 -U 57346 ; WX 1000 ; N uniE002 ; G 27 -U 57347 ; WX 1000 ; N uniE003 ; G 28 -U 57349 ; WX 1000 ; N uniE005 ; G 29 -U 57350 ; WX 1000 ; N uniE006 ; G 30 -U 57351 ; WX 1000 ; N uniE007 ; G 31 -U 57352 ; WX 1000 ; N uniE008 ; G 32 -U 57353 ; WX 1000 ; N uniE009 ; G 33 -U 57360 ; WX 1000 ; N uniE010 ; G 34 -U 57361 ; WX 1000 ; N uniE011 ; G 35 -U 57362 ; WX 1000 ; N uniE012 ; G 36 -U 57363 ; WX 1000 ; N uniE013 ; G 37 -U 57364 ; WX 1000 ; N uniE014 ; G 38 -U 57365 ; WX 1000 ; N uniE015 ; G 39 -U 57366 ; WX 1000 ; N uniE016 ; G 40 -U 57367 ; WX 1000 ; N uniE017 ; G 41 -U 57368 ; WX 1000 ; N uniE018 ; G 42 -U 57369 ; WX 1000 ; N uniE019 ; G 43 -U 57376 ; WX 1000 ; N uniE020 ; G 44 -U 57377 ; WX 1000 ; N uniE021 ; G 45 -U 57378 ; WX 1000 ; N uniE022 ; G 46 -U 57379 ; WX 1000 ; N uniE023 ; G 47 -U 57380 ; WX 1000 ; N uniE024 ; G 48 -U 57381 ; WX 1000 ; N uniE025 ; G 49 -U 57382 ; WX 1000 ; N uniE026 ; G 50 -U 57383 ; WX 1000 ; N uniE027 ; G 51 -U 57384 ; WX 1000 ; N uniE028 ; G 52 -U 57385 ; WX 1000 ; N uniE029 ; G 53 -U 57392 ; WX 1000 ; N uniE030 ; G 54 -U 57393 ; WX 1000 ; N uniE031 ; G 55 -U 57394 ; WX 1000 ; N uniE032 ; G 56 -U 57395 ; WX 1000 ; N uniE033 ; G 57 -U 57396 ; WX 1000 ; N uniE034 ; G 58 -U 57397 ; WX 1000 ; N uniE035 ; G 59 -U 57398 ; WX 1000 ; N uniE036 ; G 60 -U 57399 ; WX 1000 ; N uniE037 ; G 61 -U 57400 ; WX 1000 ; N uniE038 ; G 62 -U 57401 ; WX 1000 ; N uniE039 ; G 63 -U 57408 ; WX 1000 ; N uniE040 ; G 64 -U 57409 ; WX 1000 ; N uniE041 ; G 65 -U 57410 ; WX 1000 ; N uniE042 ; G 66 -U 57411 ; WX 1000 ; N uniE043 ; G 67 -U 57412 ; WX 1000 ; N uniE044 ; G 68 -U 57413 ; WX 1000 ; N uniE045 ; G 69 -U 57414 ; WX 1000 ; N uniE046 ; G 70 -U 57415 ; WX 1000 ; N uniE047 ; G 71 -U 57416 ; WX 1000 ; N uniE048 ; G 72 -U 57417 ; WX 1000 ; N uniE049 ; G 73 -U 57424 ; WX 1000 ; N uniE050 ; G 74 -U 57425 ; WX 1000 ; N uniE051 ; G 75 -U 57426 ; WX 1000 ; N uniE052 ; G 76 -U 57427 ; WX 1000 ; N uniE053 ; G 77 -U 57428 ; WX 1000 ; N uniE054 ; G 78 -U 57429 ; WX 1000 ; N uniE055 ; G 79 -U 57430 ; WX 1000 ; N uniE056 ; G 80 -U 57431 ; WX 1000 ; N uniE057 ; G 81 -U 57432 ; WX 1000 ; N uniE058 ; G 82 -U 57433 ; WX 1000 ; N uniE059 ; G 83 -U 57440 ; WX 1000 ; N uniE060 ; G 84 -U 57442 ; WX 1000 ; N uniE062 ; G 85 -U 57443 ; WX 1000 ; N uniE063 ; G 86 -U 57444 ; WX 1000 ; N uniE064 ; G 87 -U 57445 ; WX 1000 ; N uniE065 ; G 88 -U 57446 ; WX 1000 ; N uniE066 ; G 89 -U 57447 ; WX 1000 ; N uniE067 ; G 90 -U 57448 ; WX 1000 ; N uniE068 ; G 91 -U 57449 ; WX 1000 ; N uniE069 ; G 92 -U 57456 ; WX 1000 ; N uniE070 ; G 93 -U 57457 ; WX 1000 ; N uniE071 ; G 94 -U 57458 ; WX 1000 ; N uniE072 ; G 95 -U 57459 ; WX 1000 ; N uniE073 ; G 96 -U 57460 ; WX 1000 ; N uniE074 ; G 97 -U 57461 ; WX 1000 ; N uniE075 ; G 98 -U 57462 ; WX 1000 ; N uniE076 ; G 99 -U 57463 ; WX 1000 ; N uniE077 ; G 100 -U 57464 ; WX 1000 ; N uniE078 ; G 101 -U 57465 ; WX 1000 ; N uniE079 ; G 102 -U 57472 ; WX 1000 ; N uniE080 ; G 103 -U 57473 ; WX 1000 ; N uniE081 ; G 104 -U 57474 ; WX 1000 ; N uniE082 ; G 105 -U 57475 ; WX 1000 ; N uniE083 ; G 106 -U 57476 ; WX 1000 ; N uniE084 ; G 107 -U 57477 ; WX 1000 ; N uniE085 ; G 108 -U 57478 ; WX 1000 ; N uniE086 ; G 109 -U 57479 ; WX 1000 ; N uniE087 ; G 110 -U 57480 ; WX 1000 ; N uniE088 ; G 111 -U 57481 ; WX 1000 ; N uniE089 ; G 112 -U 57488 ; WX 1000 ; N uniE090 ; G 113 -U 57489 ; WX 1000 ; N uniE091 ; G 114 -U 57490 ; WX 1000 ; N uniE092 ; G 115 -U 57491 ; WX 1000 ; N uniE093 ; G 116 -U 57492 ; WX 1000 ; N uniE094 ; G 117 -U 57493 ; WX 1000 ; N uniE095 ; G 118 -U 57494 ; WX 1000 ; N uniE096 ; G 119 -U 57495 ; WX 1000 ; N uniE097 ; G 120 -U 57601 ; WX 1000 ; N uniE101 ; G 121 -U 57602 ; WX 1000 ; N uniE102 ; G 122 -U 57603 ; WX 1000 ; N uniE103 ; G 123 -U 57604 ; WX 1000 ; N uniE104 ; G 124 -U 57605 ; WX 1000 ; N uniE105 ; G 125 -U 57606 ; WX 1000 ; N uniE106 ; G 126 -U 57607 ; WX 1000 ; N uniE107 ; G 127 -U 57608 ; WX 1000 ; N uniE108 ; G 128 -U 57609 ; WX 1000 ; N uniE109 ; G 129 -U 57616 ; WX 1000 ; N uniE110 ; G 130 -U 57617 ; WX 1000 ; N uniE111 ; G 131 -U 57618 ; WX 1000 ; N uniE112 ; G 132 -U 57619 ; WX 1000 ; N uniE113 ; G 133 -U 57620 ; WX 1000 ; N uniE114 ; G 134 -U 57621 ; WX 1000 ; N uniE115 ; G 135 -U 57622 ; WX 1000 ; N uniE116 ; G 136 -U 57623 ; WX 1000 ; N uniE117 ; G 137 -U 57624 ; WX 1000 ; N uniE118 ; G 138 -U 57625 ; WX 1000 ; N uniE119 ; G 139 -U 57632 ; WX 1000 ; N uniE120 ; G 140 -U 57633 ; WX 1000 ; N uniE121 ; G 141 -U 57634 ; WX 1000 ; N uniE122 ; G 142 -U 57635 ; WX 1000 ; N uniE123 ; G 143 -U 57636 ; WX 1000 ; N uniE124 ; G 144 -U 57637 ; WX 1000 ; N uniE125 ; G 145 -U 57638 ; WX 1000 ; N uniE126 ; G 146 -U 57639 ; WX 1000 ; N uniE127 ; G 147 -U 57640 ; WX 1000 ; N uniE128 ; G 148 -U 57641 ; WX 1000 ; N uniE129 ; G 149 -U 57648 ; WX 1000 ; N uniE130 ; G 150 -U 57649 ; WX 1000 ; N uniE131 ; G 151 -U 57650 ; WX 1000 ; N uniE132 ; G 152 -U 57651 ; WX 1000 ; N uniE133 ; G 153 -U 57652 ; WX 1000 ; N uniE134 ; G 154 -U 57653 ; WX 1000 ; N uniE135 ; G 155 -U 57654 ; WX 1000 ; N uniE136 ; G 156 -U 57655 ; WX 1017 ; N uniE137 ; G 157 -U 57656 ; WX 1000 ; N uniE138 ; G 158 -U 57657 ; WX 1000 ; N uniE139 ; G 159 -U 57664 ; WX 1000 ; N uniE140 ; G 160 -U 57665 ; WX 1000 ; N uniE141 ; G 161 -U 57666 ; WX 1000 ; N uniE142 ; G 162 -U 57667 ; WX 1000 ; N uniE143 ; G 163 -U 57668 ; WX 1000 ; N uniE144 ; G 164 -U 57669 ; WX 1000 ; N uniE145 ; G 165 -U 57670 ; WX 1000 ; N uniE146 ; G 166 -U 57672 ; WX 1000 ; N uniE148 ; G 167 -U 57673 ; WX 1000 ; N uniE149 ; G 168 -U 57680 ; WX 1000 ; N uniE150 ; G 169 -U 57681 ; WX 1000 ; N uniE151 ; G 170 -U 57682 ; WX 1000 ; N uniE152 ; G 171 -U 57683 ; WX 1000 ; N uniE153 ; G 172 -U 57684 ; WX 1000 ; N uniE154 ; G 173 -U 57685 ; WX 1000 ; N uniE155 ; G 174 -U 57686 ; WX 1000 ; N uniE156 ; G 175 -U 57687 ; WX 1000 ; N uniE157 ; G 176 -U 57688 ; WX 1000 ; N uniE158 ; G 177 -U 57689 ; WX 1000 ; N uniE159 ; G 178 -U 57696 ; WX 1000 ; N uniE160 ; G 179 -U 57697 ; WX 1000 ; N uniE161 ; G 180 -U 57698 ; WX 1000 ; N uniE162 ; G 181 -U 57699 ; WX 1000 ; N uniE163 ; G 182 -U 57700 ; WX 1000 ; N uniE164 ; G 183 -U 57701 ; WX 1000 ; N uniE165 ; G 184 -U 57702 ; WX 1000 ; N uniE166 ; G 185 -U 57703 ; WX 1000 ; N uniE167 ; G 186 -U 57704 ; WX 1000 ; N uniE168 ; G 187 -U 57705 ; WX 1000 ; N uniE169 ; G 188 -U 57712 ; WX 1000 ; N uniE170 ; G 189 -U 57713 ; WX 1000 ; N uniE171 ; G 190 -U 57714 ; WX 1000 ; N uniE172 ; G 191 -U 57715 ; WX 1000 ; N uniE173 ; G 192 -U 57716 ; WX 1000 ; N uniE174 ; G 193 -U 57717 ; WX 1000 ; N uniE175 ; G 194 -U 57718 ; WX 1000 ; N uniE176 ; G 195 -U 57719 ; WX 1000 ; N uniE177 ; G 196 -U 57720 ; WX 1000 ; N uniE178 ; G 197 -U 57721 ; WX 1000 ; N uniE179 ; G 198 -U 57728 ; WX 1000 ; N uniE180 ; G 199 -U 57729 ; WX 1000 ; N uniE181 ; G 200 -U 57730 ; WX 1000 ; N uniE182 ; G 201 -U 57731 ; WX 1000 ; N uniE183 ; G 202 -U 57732 ; WX 1000 ; N uniE184 ; G 203 -U 57733 ; WX 1000 ; N uniE185 ; G 204 -U 57734 ; WX 1000 ; N uniE186 ; G 205 -U 57735 ; WX 1000 ; N uniE187 ; G 206 -U 57736 ; WX 1000 ; N uniE188 ; G 207 -U 57737 ; WX 1000 ; N uniE189 ; G 208 -U 57744 ; WX 1000 ; N uniE190 ; G 209 -U 57745 ; WX 1000 ; N uniE191 ; G 210 -U 57746 ; WX 1000 ; N uniE192 ; G 211 -U 57747 ; WX 1000 ; N uniE193 ; G 212 -U 57748 ; WX 1000 ; N uniE194 ; G 213 -U 57749 ; WX 1000 ; N uniE195 ; G 214 -U 57751 ; WX 1000 ; N uniE197 ; G 215 -U 57752 ; WX 1000 ; N uniE198 ; G 216 -U 57753 ; WX 1000 ; N uniE199 ; G 217 -U 57856 ; WX 1000 ; N uniE200 ; G 218 -EndCharMetrics -EndFontMetrics diff --git a/app/storage/fonts/dompdf_font_family_cache.php b/app/storage/fonts/dompdf_font_family_cache.php deleted file mode 100755 index b2d040a3..00000000 --- a/app/storage/fonts/dompdf_font_family_cache.php +++ /dev/null @@ -1,104 +0,0 @@ - array( - 'normal' => DOMPDF_DIR . '/lib/fonts/Helvetica', - 'bold' => DOMPDF_DIR . '/lib/fonts/Helvetica-Bold', - 'italic' => DOMPDF_DIR . '/lib/fonts/Helvetica-Oblique', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/Helvetica-BoldOblique', - ), - 'times' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/Times-Roman', - 'bold' => DOMPDF_DIR . '/lib/fonts/Times-Bold', - 'italic' => DOMPDF_DIR . '/lib/fonts/Times-Italic', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/Times-BoldItalic', - ), - 'times-roman' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/Times-Roman', - 'bold' => DOMPDF_DIR . '/lib/fonts/Times-Bold', - 'italic' => DOMPDF_DIR . '/lib/fonts/Times-Italic', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/Times-BoldItalic', - ), - 'courier' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/Courier', - 'bold' => DOMPDF_DIR . '/lib/fonts/Courier-Bold', - 'italic' => DOMPDF_DIR . '/lib/fonts/Courier-Oblique', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/Courier-BoldOblique', - ), - 'helvetica' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/Helvetica', - 'bold' => DOMPDF_DIR . '/lib/fonts/Helvetica-Bold', - 'italic' => DOMPDF_DIR . '/lib/fonts/Helvetica-Oblique', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/Helvetica-BoldOblique', - ), - 'zapfdingbats' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/ZapfDingbats', - 'bold' => DOMPDF_DIR . '/lib/fonts/ZapfDingbats', - 'italic' => DOMPDF_DIR . '/lib/fonts/ZapfDingbats', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/ZapfDingbats', - ), - 'symbol' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/Symbol', - 'bold' => DOMPDF_DIR . '/lib/fonts/Symbol', - 'italic' => DOMPDF_DIR . '/lib/fonts/Symbol', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/Symbol', - ), - 'serif' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/Times-Roman', - 'bold' => DOMPDF_DIR . '/lib/fonts/Times-Bold', - 'italic' => DOMPDF_DIR . '/lib/fonts/Times-Italic', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/Times-BoldItalic', - ), - 'monospace' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/Courier', - 'bold' => DOMPDF_DIR . '/lib/fonts/Courier-Bold', - 'italic' => DOMPDF_DIR . '/lib/fonts/Courier-Oblique', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/Courier-BoldOblique', - ), - 'fixed' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/Courier', - 'bold' => DOMPDF_DIR . '/lib/fonts/Courier-Bold', - 'italic' => DOMPDF_DIR . '/lib/fonts/Courier-Oblique', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/Courier-BoldOblique', - ), - 'dejavu sans' => array( - 'bold' => DOMPDF_DIR . '/lib/fonts/DejaVuSans-Bold', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSans-BoldOblique', - 'italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSans-Oblique', - 'normal' => DOMPDF_DIR . '/lib/fonts/DejaVuSans', - ), - 'dejavu sans light' => array( - 'normal' => DOMPDF_DIR . '/lib/fonts/DejaVuSans-ExtraLight', - ), - 'dejavu sans condensed' => array( - 'bold' => DOMPDF_DIR . '/lib/fonts/DejaVuSansCondensed-Bold', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSansCondensed-BoldOblique', - 'italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSansCondensed-Oblique', - 'normal' => DOMPDF_DIR . '/lib/fonts/DejaVuSansCondensed', - ), - 'dejavu sans mono' => array( - 'bold' => DOMPDF_DIR . '/lib/fonts/DejaVuSansMono-Bold', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSansMono-BoldOblique', - 'italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSansMono-Oblique', - 'normal' => DOMPDF_DIR . '/lib/fonts/DejaVuSansMono', - ), - 'dejavu serif' => array( - 'bold' => DOMPDF_DIR . '/lib/fonts/DejaVuSerif-Bold', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSerif-BoldItalic', - 'italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSerif-Italic', - 'normal' => DOMPDF_DIR . '/lib/fonts/DejaVuSerif', - ), - 'dejavu serif condensed' => array( - 'bold' => DOMPDF_DIR . '/lib/fonts/DejaVuSerifCondensed-Bold', - 'bold_italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSerifCondensed-BoldItalic', - 'italic' => DOMPDF_DIR . '/lib/fonts/DejaVuSerifCondensed-Italic', - 'normal' => DOMPDF_DIR . '/lib/fonts/DejaVuSerifCondensed', - ), - 'glyphicons halflings' => array( - 'normal' => DOMPDF_FONT_DIR . 'aaca5f100d38e34b5d97f209039f95e2', - ), - 'conv_rockb' => array( - 'normal' => DOMPDF_FONT_DIR . '95a949ea58acf47469555a87d97e82af', - ), - 'myriadprolightregular' => array( - 'normal' => DOMPDF_FONT_DIR . 'edcd942b00f8f2ef94b7be221384bb45', - ), -) ?> \ No newline at end of file diff --git a/app/storage/fonts/edcd942b00f8f2ef94b7be221384bb45.ttf b/app/storage/fonts/edcd942b00f8f2ef94b7be221384bb45.ttf deleted file mode 100755 index 55ce3b44..00000000 Binary files a/app/storage/fonts/edcd942b00f8f2ef94b7be221384bb45.ttf and /dev/null differ diff --git a/app/storage/fonts/edcd942b00f8f2ef94b7be221384bb45.ufm b/app/storage/fonts/edcd942b00f8f2ef94b7be221384bb45.ufm deleted file mode 100755 index 29ffc7c2..00000000 --- a/app/storage/fonts/edcd942b00f8f2ef94b7be221384bb45.ufm +++ /dev/null @@ -1,262 +0,0 @@ -StartFontMetrics 4.1 -Notice Converted by PHP-font-lib -Comment https://github.com/PhenX/php-font-lib -EncodingScheme FontSpecific -Copyright © 2000, 2004 Adobe Systems Incorporated. All Rights Reserved. U.S. Patent D454,582. -FontName Myriad Pro Light -FontSubfamily Regular -UniqueID 2.006;ADBE;MyriadPro-Light -FullName Myriad Pro Light Regular -Version Version 2.006;PS 002.000;Core 1.0.38;makeotf.lib1.6.6565 -PostScriptName MyriadPro-Light -Trademark Myriad is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -Designer Robert Slimbach and Carol Twombly -FontVendorURL http://www.adobe.com/type -LicenseURL http://www.adobe.com/type/legal.html -PreferredFamily Myriad Pro -PreferredSubfamily Light -Weight Medium -ItalicAngle 0 -IsFixedPitch false -UnderlineThickness 50 -UnderlinePosition -75 -FontHeightOffset 0 -Ascender 867 -Descender -270 -FontBBox -49 -250 970 867 -StartCharMetrics 234 -U 0 ; WX 1000 ; N glyph1 ; G 1 -U 13 ; WX 1000 ; N uni000D ; G 2 -U 32 ; WX 219 ; N space ; G 3 -U 33 ; WX 207 ; N exclam ; G 4 -U 34 ; WX 301 ; N quotedbl ; G 5 -U 35 ; WX 465 ; N numbersign ; G 6 -U 36 ; WX 488 ; N dollar ; G 7 -U 37 ; WX 737 ; N percent ; G 8 -U 38 ; WX 560 ; N ampersand ; G 9 -U 39 ; WX 178 ; N quotesingle ; G 10 -U 40 ; WX 265 ; N parenleft ; G 11 -U 41 ; WX 265 ; N parenright ; G 12 -U 42 ; WX 391 ; N asterisk ; G 13 -U 43 ; WX 596 ; N plus ; G 14 -U 44 ; WX 174 ; N comma ; G 15 -U 45 ; WX 298 ; N hyphen ; G 16 -U 46 ; WX 174 ; N period ; G 17 -U 47 ; WX 351 ; N slash ; G 18 -U 48 ; WX 488 ; N zero ; G 19 -U 49 ; WX 488 ; N one ; G 20 -U 50 ; WX 488 ; N two ; G 21 -U 51 ; WX 488 ; N three ; G 22 -U 52 ; WX 488 ; N four ; G 23 -U 53 ; WX 488 ; N five ; G 24 -U 54 ; WX 488 ; N six ; G 25 -U 55 ; WX 488 ; N seven ; G 26 -U 56 ; WX 488 ; N eight ; G 27 -U 57 ; WX 488 ; N nine ; G 28 -U 58 ; WX 174 ; N colon ; G 29 -U 59 ; WX 174 ; N semicolon ; G 30 -U 60 ; WX 596 ; N less ; G 31 -U 61 ; WX 596 ; N equal ; G 32 -U 62 ; WX 596 ; N greater ; G 33 -U 63 ; WX 381 ; N question ; G 34 -U 64 ; WX 717 ; N at ; G 35 -U 65 ; WX 585 ; N A ; G 36 -U 66 ; WX 505 ; N B ; G 37 -U 67 ; WX 570 ; N C ; G 38 -U 68 ; WX 647 ; N D ; G 39 -U 69 ; WX 466 ; N E ; G 40 -U 70 ; WX 462 ; N F ; G 41 -U 71 ; WX 624 ; N G ; G 42 -U 72 ; WX 630 ; N H ; G 43 -U 73 ; WX 211 ; N I ; G 44 -U 74 ; WX 345 ; N J ; G 45 -U 75 ; WX 498 ; N K ; G 46 -U 76 ; WX 448 ; N L ; G 47 -U 77 ; WX 778 ; N M ; G 48 -U 78 ; WX 638 ; N N ; G 49 -U 79 ; WX 671 ; N O ; G 50 -U 80 ; WX 502 ; N P ; G 51 -U 81 ; WX 671 ; N Q ; G 52 -U 82 ; WX 505 ; N R ; G 53 -U 83 ; WX 464 ; N S ; G 54 -U 84 ; WX 465 ; N T ; G 55 -U 85 ; WX 626 ; N U ; G 56 -U 86 ; WX 509 ; N V ; G 57 -U 87 ; WX 820 ; N W ; G 58 -U 88 ; WX 546 ; N X ; G 59 -U 89 ; WX 503 ; N Y ; G 60 -U 90 ; WX 539 ; N Z ; G 61 -U 91 ; WX 265 ; N bracketleft ; G 62 -U 92 ; WX 348 ; N backslash ; G 63 -U 93 ; WX 265 ; N bracketright ; G 64 -U 94 ; WX 596 ; N asciicircum ; G 65 -U 95 ; WX 500 ; N underscore ; G 66 -U 96 ; WX 300 ; N grave ; G 67 -U 97 ; WX 454 ; N a ; G 68 -U 98 ; WX 552 ; N b ; G 69 -U 99 ; WX 446 ; N c ; G 70 -U 100 ; WX 544 ; N d ; G 71 -U 101 ; WX 485 ; N e ; G 72 -U 102 ; WX 262 ; N f ; G 73 -U 103 ; WX 544 ; N g ; G 74 -U 104 ; WX 536 ; N h ; G 75 -U 105 ; WX 209 ; N i ; G 76 -U 106 ; WX 214 ; N j ; G 77 -U 107 ; WX 423 ; N k ; G 78 -U 108 ; WX 212 ; N l ; G 79 -U 109 ; WX 819 ; N m ; G 80 -U 110 ; WX 536 ; N n ; G 81 -U 111 ; WX 532 ; N o ; G 82 -U 112 ; WX 552 ; N p ; G 83 -U 113 ; WX 542 ; N q ; G 84 -U 114 ; WX 295 ; N r ; G 85 -U 115 ; WX 373 ; N s ; G 86 -U 116 ; WX 309 ; N t ; G 87 -U 117 ; WX 531 ; N u ; G 88 -U 118 ; WX 452 ; N v ; G 89 -U 119 ; WX 722 ; N w ; G 90 -U 120 ; WX 429 ; N x ; G 91 -U 121 ; WX 440 ; N y ; G 92 -U 122 ; WX 403 ; N z ; G 93 -U 123 ; WX 265 ; N braceleft ; G 94 -U 124 ; WX 212 ; N bar ; G 95 -U 125 ; WX 265 ; N braceright ; G 96 -U 126 ; WX 596 ; N asciitilde ; G 97 -U 160 ; WX 219 ; N uni00A0 ; G 98 -U 161 ; WX 207 ; N exclamdown ; G 99 -U 162 ; WX 488 ; N cent ; G 100 -U 163 ; WX 488 ; N sterling ; G 101 -U 164 ; WX 488 ; N currency ; G 102 -U 165 ; WX 488 ; N yen ; G 103 -U 166 ; WX 212 ; N brokenbar ; G 104 -U 167 ; WX 493 ; N section ; G 105 -U 168 ; WX 300 ; N dieresis ; G 106 -U 169 ; WX 677 ; N copyright ; G 107 -U 170 ; WX 326 ; N ordfeminine ; G 108 -U 171 ; WX 392 ; N guillemotleft ; G 109 -U 172 ; WX 596 ; N logicalnot ; G 110 -U 173 ; WX 291 ; N uni00AD ; G 111 -U 174 ; WX 395 ; N registered ; G 112 -U 175 ; WX 300 ; N macron ; G 113 -U 176 ; WX 294 ; N degree ; G 114 -U 177 ; WX 596 ; N plusminus ; G 115 -U 178 ; WX 286 ; N uni00B2 ; G 116 -U 179 ; WX 279 ; N uni00B3 ; G 117 -U 180 ; WX 300 ; N acute ; G 118 -U 181 ; WX 534 ; N uni00B5 ; G 119 -U 182 ; WX 493 ; N paragraph ; G 120 -U 183 ; WX 174 ; N periodcentered ; G 121 -U 184 ; WX 300 ; N cedilla ; G 122 -U 185 ; WX 210 ; N uni00B9 ; G 123 -U 186 ; WX 337 ; N ordmasculine ; G 124 -U 187 ; WX 392 ; N guillemotright ; G 125 -U 188 ; WX 715 ; N onequarter ; G 126 -U 189 ; WX 715 ; N onehalf ; G 127 -U 190 ; WX 715 ; N threequarters ; G 128 -U 191 ; WX 381 ; N questiondown ; G 129 -U 192 ; WX 585 ; N Agrave ; G 130 -U 193 ; WX 585 ; N Aacute ; G 131 -U 194 ; WX 585 ; N Acircumflex ; G 132 -U 195 ; WX 585 ; N Atilde ; G 133 -U 196 ; WX 585 ; N Adieresis ; G 134 -U 197 ; WX 585 ; N Aring ; G 135 -U 198 ; WX 738 ; N AE ; G 136 -U 199 ; WX 578 ; N Ccedilla ; G 137 -U 200 ; WX 466 ; N Egrave ; G 138 -U 201 ; WX 466 ; N Eacute ; G 139 -U 202 ; WX 466 ; N Ecircumflex ; G 140 -U 203 ; WX 466 ; N Edieresis ; G 141 -U 204 ; WX 211 ; N Igrave ; G 142 -U 205 ; WX 211 ; N Iacute ; G 143 -U 206 ; WX 211 ; N Icircumflex ; G 144 -U 207 ; WX 211 ; N Idieresis ; G 145 -U 208 ; WX 651 ; N Eth ; G 146 -U 209 ; WX 638 ; N Ntilde ; G 147 -U 210 ; WX 671 ; N Ograve ; G 148 -U 211 ; WX 671 ; N Oacute ; G 149 -U 212 ; WX 671 ; N Ocircumflex ; G 150 -U 213 ; WX 671 ; N Otilde ; G 151 -U 214 ; WX 671 ; N Odieresis ; G 152 -U 215 ; WX 596 ; N multiply ; G 153 -U 216 ; WX 671 ; N Oslash ; G 154 -U 217 ; WX 626 ; N Ugrave ; G 155 -U 218 ; WX 626 ; N Uacute ; G 156 -U 219 ; WX 626 ; N Ucircumflex ; G 157 -U 220 ; WX 626 ; N Udieresis ; G 158 -U 221 ; WX 503 ; N Yacute ; G 159 -U 222 ; WX 501 ; N Thorn ; G 160 -U 223 ; WX 516 ; N germandbls ; G 161 -U 224 ; WX 454 ; N agrave ; G 162 -U 225 ; WX 454 ; N aacute ; G 163 -U 226 ; WX 454 ; N acircumflex ; G 164 -U 227 ; WX 454 ; N atilde ; G 165 -U 228 ; WX 454 ; N adieresis ; G 166 -U 229 ; WX 454 ; N aring ; G 167 -U 230 ; WX 755 ; N ae ; G 168 -U 231 ; WX 446 ; N ccedilla ; G 169 -U 232 ; WX 485 ; N egrave ; G 170 -U 233 ; WX 485 ; N eacute ; G 171 -U 234 ; WX 485 ; N ecircumflex ; G 172 -U 235 ; WX 485 ; N edieresis ; G 173 -U 236 ; WX 209 ; N igrave ; G 174 -U 237 ; WX 209 ; N iacute ; G 175 -U 238 ; WX 209 ; N icircumflex ; G 176 -U 239 ; WX 209 ; N idieresis ; G 177 -U 240 ; WX 521 ; N eth ; G 178 -U 241 ; WX 536 ; N ntilde ; G 179 -U 242 ; WX 532 ; N ograve ; G 180 -U 243 ; WX 532 ; N oacute ; G 181 -U 244 ; WX 532 ; N ocircumflex ; G 182 -U 245 ; WX 532 ; N otilde ; G 183 -U 246 ; WX 532 ; N odieresis ; G 184 -U 247 ; WX 596 ; N divide ; G 185 -U 248 ; WX 532 ; N oslash ; G 186 -U 249 ; WX 531 ; N ugrave ; G 187 -U 250 ; WX 531 ; N uacute ; G 188 -U 251 ; WX 531 ; N ucircumflex ; G 189 -U 252 ; WX 531 ; N udieresis ; G 190 -U 253 ; WX 440 ; N yacute ; G 191 -U 254 ; WX 552 ; N thorn ; G 192 -U 255 ; WX 440 ; N ydieresis ; G 193 -U 338 ; WX 868 ; N OE ; G 194 -U 339 ; WX 860 ; N oe ; G 195 -U 376 ; WX 503 ; N Ydieresis ; G 196 -U 710 ; WX 300 ; N circumflex ; G 197 -U 732 ; WX 300 ; N tilde ; G 198 -U 8192 ; WX 434 ; N uni2000 ; G 199 -U 8193 ; WX 867 ; N uni2001 ; G 200 -U 8194 ; WX 434 ; N uni2002 ; G 201 -U 8195 ; WX 867 ; N uni2003 ; G 202 -U 8196 ; WX 289 ; N uni2004 ; G 203 -U 8197 ; WX 217 ; N uni2005 ; G 204 -U 8198 ; WX 145 ; N uni2006 ; G 205 -U 8199 ; WX 145 ; N uni2007 ; G 206 -U 8200 ; WX 108 ; N uni2008 ; G 207 -U 8201 ; WX 173 ; N uni2009 ; G 208 -U 8202 ; WX 48 ; N uni200A ; G 209 -U 8208 ; WX 298 ; N uni2010 ; G 210 -U 8209 ; WX 298 ; N uni2011 ; G 211 -U 8210 ; WX 298 ; N figuredash ; G 212 -U 8211 ; WX 500 ; N endash ; G 213 -U 8212 ; WX 1000 ; N emdash ; G 214 -U 8216 ; WX 174 ; N quoteleft ; G 215 -U 8217 ; WX 174 ; N quoteright ; G 216 -U 8218 ; WX 174 ; N quotesinglbase ; G 217 -U 8220 ; WX 293 ; N quotedblleft ; G 218 -U 8221 ; WX 293 ; N quotedblright ; G 219 -U 8222 ; WX 293 ; N quotedblbase ; G 220 -U 8226 ; WX 247 ; N bullet ; G 221 -U 8230 ; WX 1000 ; N ellipsis ; G 222 -U 8239 ; WX 173 ; N uni202F ; G 223 -U 8249 ; WX 246 ; N guilsinglleft ; G 224 -U 8250 ; WX 246 ; N guilsinglright ; G 225 -U 8287 ; WX 217 ; N uni205F ; G 226 -U 8364 ; WX 488 ; N Euro ; G 227 -U 8482 ; WX 600 ; N trademark ; G 228 -U 57344 ; WX 480 ; N uniE000 ; G 229 -U 64257 ; WX 484 ; N uniFB01 ; G 230 -U 64258 ; WX 484 ; N uniFB02 ; G 231 -U 64259 ; WX 763 ; N uniFB03 ; G 232 -U 64260 ; WX 763 ; N uniFB04 ; G 233 -EndCharMetrics -EndFontMetrics diff --git a/app/storage/fonts/glyphicons-halflings-regular.eot b/app/storage/fonts/glyphicons-halflings-regular.eot deleted file mode 100755 index 423bd5d3..00000000 Binary files a/app/storage/fonts/glyphicons-halflings-regular.eot and /dev/null differ diff --git a/app/storage/fonts/glyphicons-halflings-regular.svg b/app/storage/fonts/glyphicons-halflings-regular.svg deleted file mode 100755 index 44694887..00000000 --- a/app/storage/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/storage/fonts/glyphicons-halflings-regular.ttf b/app/storage/fonts/glyphicons-halflings-regular.ttf deleted file mode 100755 index a498ef4e..00000000 Binary files a/app/storage/fonts/glyphicons-halflings-regular.ttf and /dev/null differ diff --git a/app/storage/fonts/glyphicons-halflings-regular.woff b/app/storage/fonts/glyphicons-halflings-regular.woff deleted file mode 100755 index d83c539b..00000000 Binary files a/app/storage/fonts/glyphicons-halflings-regular.woff and /dev/null differ diff --git a/app/storage/logs/.gitignore b/app/storage/logs/.gitignore deleted file mode 100755 index c96a04f0..00000000 --- a/app/storage/logs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/app/storage/meta/.gitignore b/app/storage/meta/.gitignore deleted file mode 100755 index c96a04f0..00000000 --- a/app/storage/meta/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/app/storage/sessions/.gitignore b/app/storage/sessions/.gitignore deleted file mode 100755 index c96a04f0..00000000 --- a/app/storage/sessions/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/app/storage/views/.gitignore b/app/storage/views/.gitignore deleted file mode 100755 index c96a04f0..00000000 --- a/app/storage/views/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/app/tests/ExampleTest.php b/app/tests/ExampleTest.php deleted file mode 100644 index 62387de1..00000000 --- a/app/tests/ExampleTest.php +++ /dev/null @@ -1,17 +0,0 @@ -client->request('GET', '/'); - - $this->assertTrue($this->client->getResponse()->isOk()); - } - -} diff --git a/app/tests/TestCase.php b/app/tests/TestCase.php deleted file mode 100644 index d367fe53..00000000 --- a/app/tests/TestCase.php +++ /dev/null @@ -1,19 +0,0 @@ - - - Process Success. {{ Session::get('success')}} - - -@endif -
-
-
-
-

GPA Rules

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if($gpa) -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
- -
- @else -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
- - - -
-
- @endif -
-
- - - @if(count($gpaes)>0) -
-
- - - - - - - - - - - - - - @foreach($gpaes as $gpa) - - - @if($gpa->for=="1") - - @else - - @endif - - - - - - - @endforeach - -
GPA ForGPA NameGradeMark FromMark ToAction
100 Marks50 Marks{{$gpa->gpa}}{{$gpa->grade}}{{$gpa->markfrom}}{{$gpa->markto}} -    -
- -
-
- @endif - - - - - - -
-
-
- -@stop -@section('script') - - -@stop diff --git a/app/views/app/Settings.blade.php b/app/views/app/Settings.blade.php deleted file mode 100644 index 3a9558eb..00000000 --- a/app/views/app/Settings.blade.php +++ /dev/null @@ -1,146 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif -
-
-
-
-

Change Settings

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -
-
- -
-
- -
- - - -
-
-
-
-
- -
- - - -
-
-
-
-
- -
- - - -
-
-
-
-
- -
- - - -
-
-
-
- -
-
-
-
-
- -
- - - -
-
-
-
-
- -
- - - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
- - - -
-
-
- -
- - - - - - - - -
-
-
-@stop -@section('script') - -@stop diff --git a/app/views/app/accountExpence.blade.php b/app/views/app/accountExpence.blade.php deleted file mode 100644 index 3466e62b..00000000 --- a/app/views/app/accountExpence.blade.php +++ /dev/null @@ -1,119 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif -
-
-
-
-

Expence Entry Form

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - @if(count($sectors)>0) - @foreach($sectors as $sector) -
-
-
-
- -
- - -
-
-
-
-
- - -
- - - - -
-
-
-
-
- -
- - - -
- - -
-
-
-
- - -
- - - - - -
-
-
-
-
- @endforeach - -
- - - @else -
- Whoops! There are no income sector created yet!.

- Create Here -
- - @endif -
-

-
- -
-
-
- -@stop -@section('script') - - - -@stop diff --git a/app/views/app/accountExpenceEdit.blade.php b/app/views/app/accountExpenceEdit.blade.php deleted file mode 100644 index 78456ef3..00000000 --- a/app/views/app/accountExpenceEdit.blade.php +++ /dev/null @@ -1,116 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - -
-
-
-
-

Expence Edit

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (isset($expence)) -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - - -
- - -
-
-
-
- - -
- - - - - -
-
-
-
-
- - -
-
- -
-
-
- @else -
- Whoops!There is no such income!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/accountExpenceView.blade.php b/app/views/app/accountExpenceView.blade.php deleted file mode 100644 index 911514c2..00000000 --- a/app/views/app/accountExpenceView.blade.php +++ /dev/null @@ -1,118 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- - @endif - @if (Session::get('error')) -
- - {{ Session::get('error')}} - -
- @endif -
-
-
-
-

Expence List

- -
-
- -
-
- -
- -
-
- -
-
- -
- - - -
-
-
-
-
- -
- -
-
-
- - -
-
- - -
-
-
-
- @if(count($expences)>0) -
-
- - - - - - - - - - - - - @foreach($expences as $expence) - - - - - - - @endforeach - -
NameAmountDateDescriptionAction
{{$expence->name}}{{$expence->amount}}{{date_format(date_create($expence->date), 'd/m/Y');}}{{$expence->description}} -    -
-
-
- @endif -

- - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/accountIncome.blade.php b/app/views/app/accountIncome.blade.php deleted file mode 100644 index b823490b..00000000 --- a/app/views/app/accountIncome.blade.php +++ /dev/null @@ -1,120 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif -
-
-
-
-

Income Entry Form

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - @if(count($sectors)>0) - @foreach($sectors as $sector) -
-
-
-
- -
- - -
-
-
-
-
- - -
- - - - -
-
-
-
-
- -
- - - -
- - -
-
- -
-
- - -
- - - - - -
-
-
-
-
- @endforeach - -
- - - @else -
- Whoops! There are no income sector created yet!.

- Create Here -
- - @endif -
-

-
- -
-
-
- -@stop -@section('script') - - - -@stop diff --git a/app/views/app/accountIncomeEdit.blade.php b/app/views/app/accountIncomeEdit.blade.php deleted file mode 100644 index 8fd0824a..00000000 --- a/app/views/app/accountIncomeEdit.blade.php +++ /dev/null @@ -1,117 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - -
-
-
-
-

Income Edit

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (isset($income)) -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - - -
- - -
-
- -
-
- - -
- - - - - -
-
-
-
-
- - -
-
- -
-
-
- @else -
- Whoops!There is no such income!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/accountIncomeView.blade.php b/app/views/app/accountIncomeView.blade.php deleted file mode 100644 index 9357fcb9..00000000 --- a/app/views/app/accountIncomeView.blade.php +++ /dev/null @@ -1,118 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- - @endif - @if (Session::get('error')) -
- - {{ Session::get('error')}} - -
- @endif -
-
-
-
-

Income List

- -
-
- -
-
- -
- -
-
- -
-
- -
- - - -
-
-
-
-
- -
- -
-
-
- - -
-
- - -
-
-
-
- @if(count($incomes)>0) -
-
- - - - - - - - - - - - - @foreach($incomes as $income) - - - - - - - @endforeach - -
NameAmountDateDescriptionAction
{{$income->name}}{{$income->amount}}{{date_format(date_create($income->date), 'd/m/Y');}}{{$income->description}} -    -
-
-
- @endif -

- - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/accountingReport.blade.php b/app/views/app/accountingReport.blade.php deleted file mode 100644 index 5269d488..00000000 --- a/app/views/app/accountingReport.blade.php +++ /dev/null @@ -1,139 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - -
-
-
-
-

Accounting Report

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - -
-
- -
-
- - -
- - - - -
-
-
-
-
- -
- - - -
- - -
-
-
-
- -
- - - -
- - -
-
- - - - -
-
- -
-
- - -
-
- - - - -
-
-
-
-@stop -@section('script') - - - - -@stop diff --git a/app/views/app/accountingReportsum.blade.php b/app/views/app/accountingReportsum.blade.php deleted file mode 100644 index 50244108..00000000 --- a/app/views/app/accountingReportsum.blade.php +++ /dev/null @@ -1,138 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - -
-
-
-
-

Accounting Balance

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - -
-
- -
-
- -
- - - -
- - -
-
-
-
- -
- - - -
-
-
-
-
- -
- - - - -
- - -
-
- -
-
- -
- - -
-
-
- - -
-
- - - - - - -
-
-
-
-@stop -@section('script') - - - - -@stop diff --git a/app/views/app/accountreportprint.blade.php b/app/views/app/accountreportprint.blade.php deleted file mode 100644 index b509f2e9..00000000 --- a/app/views/app/accountreportprint.blade.php +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - Account-Report({{$formdata[2]}}) - - - - - - - - - - - -
-
- -
- -
-
-

"{{$institute->name}}" Accounting Report

-
Establish: {{$institute->establish}} Web: {{$institute->web}} Email: {{$institute->email}}
-
Phone: {{$institute->phoneNo}} Address: {{$institute->address}}
-
- - - -
- -
-
-
Type: {{$formdata[2]}}
- - -
-
-
-
-
Time Period: {{$formdata[0]}} To {{$formdata[1]}}
- -
-
-
-
-
- - - - - - - - - - - - - - @foreach($datas as $data) - - - - - - - - - - @endforeach - - -
NameAmountDescriptionDate
{{$data->name}}{{$data->amount}}{{$data->description}}{{date_format(date_create($data->date), 'd/m/Y');}}
Total:{{$total[0]->total}}
-
- -
- - -
- - - - - - diff --git a/app/views/app/accountreportprintsum.blade.php b/app/views/app/accountreportprintsum.blade.php deleted file mode 100644 index 15a35ebf..00000000 --- a/app/views/app/accountreportprintsum.blade.php +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - Account Balance - - - - - - - - - - - -
- -
- -
- -
-
-

"{{$institute->name}}" Accounting Report

-
Establish: {{$institute->establish}} Web: {{$institute->web}} Email: {{$institute->email}}
-
Phone: {{$institute->phoneNo}} Address: {{$institute->address}}
-
- - - -
- -
-
-
Time Period: {{$formdata[0]}} To {{$formdata[1]}}
- -
-
-
- -
-
-
- - - - - - - - - - - - - - @foreach($incomes as $income) - - - - - - - - - - @endforeach - - -
INCOMES
NameAmountDescriptionDate
{{$income->name}}{{$income->amount}}{{$income->description}}{{date_format(date_create($income->date), 'd/m/Y');}}
Total:{{$intotal[0]->total}} tk.
-
-
- - - - - - - - - - - - - - @foreach($expences as $expence) - - - - - - - - - - @endforeach - - -
EXPENCES
NameAmountDescriptionDate
{{$expence->name}}{{$expence->amount}}{{$expence->description}}{{date_format(date_create($expence->date), 'd/m/Y');}}
Total:{{$extotal[0]->total}} tk.
-
- -
-
-
-
- -

Balance: {{$balance[0]}} tk.

- - -
-
- -
- - - - - - diff --git a/app/views/app/accountsector.blade.php b/app/views/app/accountsector.blade.php deleted file mode 100644 index 808bfc81..00000000 --- a/app/views/app/accountsector.blade.php +++ /dev/null @@ -1,156 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif -
-
-
-
-

Accounting Sector

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if($sector) -
- - -
-
-
-
- -
- - -
-
-
-
-
- - -
- - {{ Form::select('type',['Income'=>'Income','Expence'=>'Expence'],$sector->type,['class'=>'form-control','required'=>'true'])}} - - -
-
-
- - -
-
- -
-
- @else -
- - -
-
-
-
- -
- - -
-
-
-
-
- - -
- - - - -
-
-
- -
-
- - - -
-
- @endif -
-
- - - @if(count($sectors)>0) -
-
- - - - - - - - - - - @foreach($sectors as $sector) - - - - - - - - @endforeach - -
Sector NameTypeAction
{{$sector->name}}{{$sector->type}} -    -
- -
-
- @endif - - - - - - -
-
-
- -@stop -@section('script') - - -@stop diff --git a/app/views/app/addbook.blade.php b/app/views/app/addbook.blade.php deleted file mode 100644 index 793d923a..00000000 --- a/app/views/app/addbook.blade.php +++ /dev/null @@ -1,163 +0,0 @@ -@extends('layouts.master') -@section('content') -@if (Session::get('success')) - -
- - Process Success. {{ Session::get('success')}}
View List
- -
-@endif -
-
-
-
-

Add Book

- -
-
-
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
-
- -
- -
-
-

Book Details

-
-
-
-
-
-
-
- -
- - {{ Form::text('code','',['class'=>'form-control','required'=>'true','placeholder'=>'Book Code'])}} - -
-
-
-
-
- -
- - {{ Form::text('title','',['class'=>'form-control','required'=>'true','placeholder'=>'Book Name']) }} -
-
-
- - -
-
- -
-
-
-
- - -
- - {{ Form::text('author','',['class'=>'form-control','required'=>'true','placeholder'=>'Writer Name']) }} - -
-
-
-
-
- -
- - {{ Form::text('quantity','',['class'=>'form-control','required'=>'true','placeholder'=>'How many?']) }} - -
-
-
-
-
- -
- - {{ Form::text('rackNo','',['class'=>'form-control','placeholder'=>'Rack No']) }} - -
-
-
-
-
- -
- - {{ Form::text('rowNo','',['class'=>'form-control','placeholder'=>'Row No']) }} -
-
-
-
-
-
-
-
-
- -
- - {{ Form::select('type',['Academic'=>'Academic','Story'=>'Story','Magazine'=>'Magazine','Other'=>'Other'],Input::get('type'),['class'=>'form-control'])}} -
-
-
-
-
- - -
- - {{ Form::select('class',$classes,Input::get('class'),['class'=>'form-control'])}} - -
-
-
-
-
- -
- - - {{ Form::textarea('desc','',['class'=>'form-control','placeholder'=>'Description No','rows'=>'3']) }} -
-
-
- -
-
- - - -
-
- - - -
-
-
- -
-
-
-
-@stop diff --git a/app/views/app/admissionForm.blade.php b/app/views/app/admissionForm.blade.php deleted file mode 100644 index 165c3748..00000000 --- a/app/views/app/admissionForm.blade.php +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - School Manage - - - - - - - - - - - - - - - - - - - - - - - -
- @if (Session::get('success')) -
- {{ Session::get('success')}} -
- @endif -
-
-
-
-

Online Registration

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -

Student Details

-
- -
-
-

General Information

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - -
-
- -
-
- - -
-
-
-
-
-
-
-
- - -
- - -
-
-
-
-
- -
- - - -
-
-
-
-
- -
- - - -
- - -
-
- - -
-
- Image preview... -
-
- -
-
- - - - -
-
- - -
-
-

Academic Details:

-
-
-
- -
-
-
-
- - -
- - -
-
-
-
-
- - -
- - -
-
-
- - -
-
- -
-
-

Guardian's Detail

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
- - -
- -
- Reset     - - -
-
- - - - - - - -
-
-
- - - - - - - - - - - - - - diff --git a/app/views/app/admitcard.blade.php b/app/views/app/admitcard.blade.php deleted file mode 100644 index d3fd41be..00000000 --- a/app/views/app/admitcard.blade.php +++ /dev/null @@ -1,108 +0,0 @@ - - - - - School Manage - - - - - - - - - - - - - - - - -
- @if (Session::get('success')) -
- {{ Session::get('success')}} -
- @endif -
-
-
-
-

Admit Card Print

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
- - - -
- -
- - -
-
-
- - - - - - -
-
-
-
-
- - - - - - - diff --git a/app/views/app/applicant.blade.php b/app/views/app/applicant.blade.php deleted file mode 100644 index aa5cbb8f..00000000 --- a/app/views/app/applicant.blade.php +++ /dev/null @@ -1,260 +0,0 @@ -@extends('layouts.master') -@section('content') -
-
-
-
-

Applicant's Information

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (isset($student)) -
-
-

Academic Info :

-
-
-
-
-
-
- Referance No : -
-
- -
-
-
-
-
-
-
- Seat/Roll No : -
-
- -
-
-
-
-
-
-
- Class : -
-
- -
-
-
- -
-
-
-
- Transaction NO : -
-
- -
-
-
- - -
-
-
-
- Status : -
-
- -
-
-
-
-
-

General Details :

-
-
-
-
-
-
- Photo -
-
-
-
-
-
- -
-
- Fulle Name : -
-
- -
-
-
- - -
-
-
-
- Session : -
-
- -
-
-
- - -
-
-
-
- Nationality : -
-
- -
-
-
-
-
-
-
- Date Of Birth : -
-
- -
-
-
- - -
-
-

Quota :

-
-
- -
-
-
-
- Campus : -
-
- -
-
-
-
-
-
-
- Keeping : -
-
- -
-
-
- - -
-
-

Guardian's Details :

-
-
-
-
-
-
- Father's Name : -
-
- -
-
-
-
-
-
-
- Father's Cell No : -
-
- -
-
-
-
-
-
-
- Mother's Name : -
-
- -
-
-
-
-
-
-
- Mother's Cell No : -
-
- -
-
-
- - - - - @else -
- Whoops!There is no such applicant!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - -
-
-
-
-@stop -@section('script') - -@stop diff --git a/app/views/app/applicantList.blade.php b/app/views/app/applicantList.blade.php deleted file mode 100644 index 7312d10c..00000000 --- a/app/views/app/applicantList.blade.php +++ /dev/null @@ -1,154 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- -@endif -@if (Session::get('error')) -
- - {{ Session::get('error')}} - -
-@endif -
-
-
-
-

Applicant List

- -
-
- -
-
- -
- -
-
- -
-
- - -
- - {{ Form::select('class',$classes,$formdata->class,['class'=>'form-control','required'=>'true'])}} -
-
-
- -
-
- -
- - - -
-
-
-
- -
- -
-
- -
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - - @foreach($students as $student) - - - - - - - - - - - - @endforeach - -
Ref NoSeat NoClassNameTransaction NoReg Date TimeStatusAction
{{$student->refNo}}{{$student->seatNo}}{{$student->class}}{{$student->stdName}}{{\Carbon\Carbon::createFromFormat('Y-m-d H:i:s',$student->created_at)->format('d/m/Y g:i A')}}{{$student->status}} -       -
-
-
-

- - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/attendanceCreate.blade.php b/app/views/app/attendanceCreate.blade.php deleted file mode 100644 index e8c57cda..00000000 --- a/app/views/app/attendanceCreate.blade.php +++ /dev/null @@ -1,296 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif -
-
-
-
-

Attendance Entry

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
- - - -
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
- -
-
- - -
- - - -
-
-
- - -
-
- -
-
-
-
- -
- - - -
-
-
- - -
-
- -
- - - -
- - -
-
-
-
- - -
-
-

Send SMS On Absent?

-
-
- - -
-
-
- - - - - - - - - - - - - - - - -
Registration NoRoll NoNameIs Present? All Select
-
-
- -
- - -
-
- - -
-
-
- -
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/attendanceCreateFile.blade.php b/app/views/app/attendanceCreateFile.blade.php deleted file mode 100644 index bee95d87..00000000 --- a/app/views/app/attendanceCreateFile.blade.php +++ /dev/null @@ -1,74 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif -
-
-
-
-

Attendance Entry

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
-
Example/Sample Excel/CSV file.[Download CSV][Download Excel] -
-
Please be care about file size.It must be less than 8MB!
-
If it is a excel file then make sure cells value are formated as "text"!
-
** "personnel_id" column value is student registration number!
-
-
-
-
- -
- -
- - - -
-
- -
-
- - -
-
- - -
-
-
- -
-
-
-@stop -@section('script') -@stop diff --git a/app/views/app/attendanceEdit.blade.php b/app/views/app/attendanceEdit.blade.php deleted file mode 100644 index 04527513..00000000 --- a/app/views/app/attendanceEdit.blade.php +++ /dev/null @@ -1,100 +0,0 @@ -@extends('layouts.master') -@section('content') - -
-
-
-
-

Attendance Edit

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (isset($attendance)) -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
-
- -
- - status=="Yes")checked="true" @endif > -
-
-
-
- -
-
- -
-
-
- @else -
- Whoops!There is no such Student!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/attendanceExcel.blade.php b/app/views/app/attendanceExcel.blade.php deleted file mode 100644 index 7cebff11..00000000 --- a/app/views/app/attendanceExcel.blade.php +++ /dev/null @@ -1,62 +0,0 @@ - - - Total Registered User : - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Class:{{$input[0]}}
Section:{{$input[1]}}
Shift:{{$input[2]}}
Session:{{$input[3]}}
Date:{{$input[4]}}
- - - - - - - - - - @foreach($attendance as $student) - - - - - @if(count($student->attendance)) - - @endif - - - - @endforeach - -
Registration NoRoll NoName Is Present
{{$student->regiNo}}{{$student->rollNo}}{{$student->firstName}} {{$student->middleName}} {{$student->lastName}} - Present - @else - - Absent -
- - diff --git a/app/views/app/attendanceList.blade.php b/app/views/app/attendanceList.blade.php deleted file mode 100644 index aab1e31d..00000000 --- a/app/views/app/attendanceList.blade.php +++ /dev/null @@ -1,247 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - @if (isset($noResult)) -
- - {{$noResult['noresult']}} - -
- @endif - - - -
-
-
-
-

Attendance List

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
- -
-
- - -
- - - @if(isset($classes2)) - {{ Form::select('class',$classes2,$formdata->class,['class'=>'form-control','id'=>'class','required'=>'true'])}} - @else - - - - @endif - -
-
-
-
-
- - -
- - 'A', - 'B'=>'B', - 'C'=>'C', - 'D'=>'D', - 'E'=>'E', - 'F'=>'F', - 'G'=>'G', - 'H'=>'H', - 'I'=>'I', - 'J'=>'J' - ];?> - {{ Form::select('section',$data,$formdata->section,['class'=>'form-control','id'=>'section','required'=>'true'])}} - - -
-
-
- -
-
- - -
- - 'Day', - 'Morning'=>'Morning' - ];?> - {{ Form::select('shift',$data,$formdata->shift,['class'=>'form-control','id'=>'shift','required'=>'true'])}} - - -
-
-
- -
-
-
-
-
-
- -
- - - -
-
-
- -
-
- -
- - - -
- - -
-
- -
-
-
-
-
- -   - -
-
-
-
- @if($attendance) -
-
- - - - - - - - - - - @foreach($attendance as $atd) - - - - - - - @endforeach - -
Regi NoRoll NoNameIs Present
{{$atd->regiNo}}{{$atd->rollNo}}{{$atd->firstName}} {{$atd->middleName}} {{$atd->lastName}} - @if(count($atd->attendance)) - Present - @else - - Absent - - @endif -
-
- -
- @endif - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/attendanceMonthly.blade.php b/app/views/app/attendanceMonthly.blade.php deleted file mode 100644 index 24663581..00000000 --- a/app/views/app/attendanceMonthly.blade.php +++ /dev/null @@ -1,205 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - @if (isset($noResult)) -
- - {{$noResult['noresult']}} - -
- @endif - - - -
-
-
-
-

Monthly Attendance Report

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -
-
-
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
- -
-
- - -
- - - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
- - -
-
- -
-
- -
- - -
-
-
- -
-
-
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/attendanceMonthlyReport.blade.php b/app/views/app/attendanceMonthlyReport.blade.php deleted file mode 100644 index 288a6943..00000000 --- a/app/views/app/attendanceMonthlyReport.blade.php +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - Monthly Attendance Report - - - - - - - - - - - -{{--
--}} -{{--
--}} -{{--Back--}} -{{--
--}} -{{--
--}} -
-
- -
- -
-
-

{{$institute->name}}

-
Establish: {{$institute->establish}} Web: {{$institute->web}} Email: {{$institute->email}}
-
Phone: {{$institute->phoneNo}} Address: {{$institute->address}}
-
- - - -
- -
-
-
- Monthly Attendance Report -
-
- Class: {{$className}} - Session: {{$session}} - Section: {{$section}} - Shift: {{$shift}} -
-
Month: {{date('F,Y',strtotime($yearMonth))}}
-
-
- @if($data) -
- - - - @foreach($keys as $index=>$key) - @if($index>1) - - @elseif($index==1) - - @else - - @endif - @endforeach - - - - - - - - - - @foreach($data as $datum) - - - @foreach($keys as $index=>$key) - @if($index==0) - - @elseif($index==1) - - @else - - - @if(isset($fridays[$key])) - - @elseif(isset($holiDays[$key])) - - @elseif(isset($offDays[$key])) - - @elseif($row[$key]==1) - - @elseif($row[$key]==0) - - @else - - @endif - @if($index != 0 && $index!=1) - - @endif - @endif - - @endforeach - - - - - - - @endforeach - -
{{date('d-M',strtotime($key))}}Roll No{{$key}}PresentAbsentHolidayClass OffToT.DAYS
{{$row[$key]}}{{$row[$key]}}{{$symbol}}{{$totalP}}{{$totalA}}{{$totalH}}{{$totalCO}}{{($totalP+$totalA+$totalH+$totalCO)}}
-

Print Date: {{date('d/m/Y')}}

-
- - -
-@endif - -
- - - - - diff --git a/app/views/app/barcode.blade.php b/app/views/app/barcode.blade.php deleted file mode 100644 index b12b5a64..00000000 --- a/app/views/app/barcode.blade.php +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - -
-
- - - - - -
-
- @foreach($barcodesc1 as $barcode) - - -

{{$barcode['code'][0]}}  {{$barcode['code'][1]}}  {{$barcode['code'][2]}} -   {{$barcode['code'][3]}}   {{$barcode['code'][4]}}    - {{$barcode['code'][5]}}   {{$barcode['code'][6]}}   {{$barcode['code'][7]}} -    {{$barcode['code'][8]}}  {{$barcode['code'][9]}}

- - @endforeach - -
-
-
- @foreach($barcodesc2 as $barcode) - - -

{{$barcode['code'][0]}}  {{$barcode['code'][1]}}  {{$barcode['code'][2]}} -   {{$barcode['code'][3]}}   {{$barcode['code'][4]}}    - {{$barcode['code'][5]}}   {{$barcode['code'][6]}}   {{$barcode['code'][7]}} -    {{$barcode['code'][8]}}  {{$barcode['code'][9]}}

- - @endforeach -
-
-
- @foreach($barcodesc3 as $barcode) - - -

{{$barcode['code'][0]}}  {{$barcode['code'][1]}}  {{$barcode['code'][2]}} -   {{$barcode['code'][3]}}   {{$barcode['code'][4]}}    - {{$barcode['code'][5]}}   {{$barcode['code'][6]}}   {{$barcode['code'][7]}} -    {{$barcode['code'][8]}}  {{$barcode['code'][9]}}

- - @endforeach -
-
-
- -
- Generate More - - - - - diff --git a/app/views/app/barcodeform.blade.php b/app/views/app/barcodeform.blade.php deleted file mode 100644 index adef4835..00000000 --- a/app/views/app/barcodeform.blade.php +++ /dev/null @@ -1,67 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif -
-
-
-
-

Barcode Generator

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -
-
- -
- -
- - -
-
- - -
-
- - - -

-
- -
- - - - - - - - -
-
-
-@stop diff --git a/app/views/app/bookedit.blade.php b/app/views/app/bookedit.blade.php deleted file mode 100644 index 38c85a7d..00000000 --- a/app/views/app/bookedit.blade.php +++ /dev/null @@ -1,159 +0,0 @@ -@extends('layouts.master') -@section('content') -@if (Session::get('success')) - - -@endif -
-
-
-
-

Update Book

- -
-
-
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
-
- @if(isset($book)) -
- - -
-
-

Book Details

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- - -
-
- -
-
-
-
- - -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
-
-
- -
- - {{ Form::select('type',['Academic'=>'Academic','Story'=>'Story','Magazine'=>'Magazine','Other'=>'Other'],$book->type,['class'=>'form-control'])}} - -
-
-
-
-
- - -
- - {{ Form::select('class',$classes,$book->class,['class'=>'form-control'])}} -
-
-
-
-
- -
- - -
-
-
-
-
- - - -
-
- - - -
-
-
- @else -
- There is no book!! -
- @endif - -
-
-
-
-@stop diff --git a/app/views/app/bookissue.blade.php b/app/views/app/bookissue.blade.php deleted file mode 100644 index 7426dfbe..00000000 --- a/app/views/app/bookissue.blade.php +++ /dev/null @@ -1,304 +0,0 @@ -@extends('layouts.master') -@section('style') - - - -@stop -@section('content') -@if (Session::get('success')) - -
- - Process Success. {{ Session::get('success')}}
View List
- -
-@endif -
-
-
-
-

Borrow Book >> Book Issue Details

- -
-
-
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
-
- -
- -
-
-
-
- -
- - {{ Form::select('regiNo',$students,null,['class'=>'form-control select2-list','required' =>'required'])}} -
-
-
-
-
- -
- - - -
- - -
-
- - -
-
-
-
-
-
-
- -
- - {{ Form::select('code',$books,null,['id' => 'bookCode','class'=>'form-control select2-list'])}} - -
-
-
-
-
- - - - -
- -
- -
-
- -
- - - -
- - -
-
-
-
- - - -
-
-
-
- -
-    - -
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - -
#TitleQuantityReturnFine
-
-
-
- - - -
-
- - - -
-
-
- -
-
-
-
- @stop - @section('script') - - - - - @stop diff --git a/app/views/app/bookissueedit.blade.php b/app/views/app/bookissueedit.blade.php deleted file mode 100644 index eeb715e0..00000000 --- a/app/views/app/bookissueedit.blade.php +++ /dev/null @@ -1,173 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) - -
- - Process Success. {{ Session::get('success')}}
View List
- -
-@endif -
-
-
-
-

Borrow Book Update

- -
-
- @if (isset($book)) -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
-
- -
- - -
-
-

Book Issue Details

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- - -
-
- -
-
-
-
- -
- - - -
- - -
-
-
-
- -
- - - -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
- - -
-
-
-
- - - - -
-
- - - -
-
- @else -
- Whoops!There is no such record!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/bookissueview.blade.php b/app/views/app/bookissueview.blade.php deleted file mode 100644 index 07e10130..00000000 --- a/app/views/app/bookissueview.blade.php +++ /dev/null @@ -1,169 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- -@endif -@if (Session::get('error')) -
- - {{ Session::get('error')}} - -
-@endif -
-
-
-
-

Borrowed Books List

- -
-
- -
-
- -
- - [*] Fill at least one feild from first 4 feilds or just select status and get list -
-
- -
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - - -
- - -
-
-
-
- -
- - - -
- - -
-
-
-
- -
- - -
- - -
-
-
- -
- -
-
- -
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - - - - @if(isset($books)) - @foreach($books as $book) - - - - - - - - - - - - @endforeach - @endif - -
Std Reg NoCode/ISBN NoQuantityIssue DateReturn DateFineStatusAction
{{$book->regiNo}}{{$book->code}}{{$book->quantity}}{{\Carbon\Carbon::createFromFormat('Y-m-d',$book->issueDate)->format('d/m/Y')}}{{\Carbon\Carbon::createFromFormat('Y-m-d',$book->returnDate)->format('d/m/Y')}}{{$book->fine}}{{$book->Status}} - @if($book->Status=='Borrowed') -    - @endif -
-
-
-

- - -
-
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/booklist.blade.php b/app/views/app/booklist.blade.php deleted file mode 100644 index 41676ce8..00000000 --- a/app/views/app/booklist.blade.php +++ /dev/null @@ -1,120 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- -@endif -@if (Session::get('error')) -
- - {{ Session::get('error')}} - -
-@endif -
-
-
-
-

Books List

- -
-
- -
-
- -
- -
-
- -
-
- - -
- - {{ Form::select('classcode',$classes,$formdata->class,['class'=>'form-control','required'=>'true'])}} -
-
-
- - -
- -
- -
-
- -
-
- -
-
-
-
- -
-
- @if(count($books)>0) - - - - - - - - - - - - - - - - - @foreach($books as $book) - - - - - - - - - - - - - @endforeach - -
Code/ISBN NoTitleAuthorClassType QuantityRack NoRow NoDescriptionAction
{{$book->code}}{{$book->title}}{{$book->author}}{{$book->class}}{{$book->type}}{{$book->quantity}}{{$book->rackNo}}{{$book->rowNo}}{{$book->desc}} -    -
-
-
-

- - {{$books->appends(array('classcode' => $formdata->class))->links()}} - @endif -
-
-
-
- @stop - @section('script') - - - @stop diff --git a/app/views/app/booksearch.blade.php b/app/views/app/booksearch.blade.php deleted file mode 100644 index 594d12d2..00000000 --- a/app/views/app/booksearch.blade.php +++ /dev/null @@ -1,190 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - -
-
-
-
-

Books Search

- -
-
-
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (Session::get('error')) -
- - {{ Session::get('error')}} - -
- @endif -
-
-
-
- -
- - [*]Fill up any feilds and search -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - -
- - -
-
-
-
- -
- -
-
- -
-
- -
-
- - [*]Fill up both feilds and search -
-
- - - -
-
- -
- - {{ Form::select('type',['Academic'=>'Academic','Story'=>'Story','Magazine'=>'Magazine','Other'=>'Other'],Input::get('type'),['class'=>'form-control'])}} -
-
-
-
-
- - -
- - {{ Form::select('class',$classes,Input::get('class'),['class'=>'form-control'])}} -
-
-
-
- -
- -
-
- -
-
- - -
-
-
-
- @if(isset($books)) -
-
- @if(count($books)>0) - - - - - - - - - - - - - - - - - @foreach($books as $book) - - - - - - - - - - - - - @endforeach - - -
Code/ISBN NoTitleAuthorClassType Quantity Rack NoRow NoAction
{{$book->code}}{{$book->title}}{{$book->author}}{{$book->class}}{{$book->type}}{{$book->quantity}}{{$book->rackNo}}{{$book->rowNo}} - -
- @else -
- - Book Not Found! - -
- @endif -
-
- @endif - - -
-
-
-
- @stop - @section('script') - - - @stop diff --git a/app/views/app/classCreate.blade.php b/app/views/app/classCreate.blade.php deleted file mode 100644 index 68d657bc..00000000 --- a/app/views/app/classCreate.blade.php +++ /dev/null @@ -1,73 +0,0 @@ -@extends('layouts.master') -@section('content') - @if (Session::get('success')) - -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif -
-
-
-
-

Class Create

- -
-
-
- - -
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- -
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
- - - - - - -
-
-
-
-@stop diff --git a/app/views/app/classEdit.blade.php b/app/views/app/classEdit.blade.php deleted file mode 100644 index ed711eb6..00000000 --- a/app/views/app/classEdit.blade.php +++ /dev/null @@ -1,64 +0,0 @@ -@extends('layouts.master') -@section('content') -
-
-
-
-

Class Edit

- -
-
- @if (isset($class)) -
- - -
- -
- - -
-
- -
- -
- - -
-
-
- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
- @else -
- Whoops!There is no such Class!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
-
-
-
-@stop diff --git a/app/views/app/classList.blade.php b/app/views/app/classList.blade.php deleted file mode 100644 index 266e0563..00000000 --- a/app/views/app/classList.blade.php +++ /dev/null @@ -1,62 +0,0 @@ -@extends('layouts.master') -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- - @endif -
-
-
-
-

Class List

- -
-
- - - - - - - - - - - - @foreach($Classes as $class) - - - - - - - - @endforeach - -
CodeNameDescriptionBangla/English Combine PassAction
{{$class->code}}{{$class->name}}{{$class->description}} - @if($class->combinePass) - Yes - @else - No - @endif - -    -
-

- - -
-
-
-
-@stop -@section('script') - -@stop diff --git a/app/views/app/class_off_days.blade.php b/app/views/app/class_off_days.blade.php deleted file mode 100644 index 84802e5d..00000000 --- a/app/views/app/class_off_days.blade.php +++ /dev/null @@ -1,149 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif -
-
-
-
-

Class Off Days

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
-
- Add new class off day - - -
-
-
-
- -
- - -
-
-
- -
-
- -
- - -
-
-
- -
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
- Class off days -
-
- - - - - - - - - - - - @foreach($offdays as $day) - - - - - - - - @endforeach - -
DateTypeDescriptionCreated AtAction
{{$day->offDate->format('j M,Y')}} - @if($day->oType=='E') - Exam - @elseif($day->oType=="O") - Class Off - @else - College Program - @endif - {{$day->description}}{{$day->created_at->format('d/m/Y h:i:s a')}} - -
- -
-
-
- -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/dormitory.blade.php b/app/views/app/dormitory.blade.php deleted file mode 100644 index e2e01a10..00000000 --- a/app/views/app/dormitory.blade.php +++ /dev/null @@ -1,184 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
-@endif -
-
-
-
-

Dormitory

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if($dormitory) -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
- -
- @else -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
- - - -
-
- @endif -
-
- - - @if(count($dormitories)>0) -
-
- - - - - - - - - - - - - @foreach($dormitories as $dorm) - - - - - - - - - @endforeach - -
NameNum Of RoomsAddressDescriptionAction
{{$dorm->name}}{{$dorm->numOfRoom}}{{$dorm->address}}{{$dorm->description}} -    -
- -
-
- @endif - - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/dormitory_fee.blade.php b/app/views/app/dormitory_fee.blade.php deleted file mode 100644 index 46b60a34..00000000 --- a/app/views/app/dormitory_fee.blade.php +++ /dev/null @@ -1,198 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
- -
- @endif -
-
-
-
-

Dormitory Fee Colleciton

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
-
-
-
-
- - -
- - -
-
-
- - -
-
- - -
- - -
-
-
-
-
-
-
-
-
- -
- - - -
- - -
-
-
-
- - -
- - - -
-
-
-
-
- -
-
- - -
-
-
-
-
-
- -
-

Monthly Fees

-

0.00 TK.

-

Status: Paid

-
-
-
-
-
- -
- -
-
- - -
-
- -@stop -@section('script') - - - -@stop diff --git a/app/views/app/dormitory_rptfee.blade.php b/app/views/app/dormitory_rptfee.blade.php deleted file mode 100644 index 03ee4fb6..00000000 --- a/app/views/app/dormitory_rptfee.blade.php +++ /dev/null @@ -1,104 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - -
-
-
-
-

Dormitory Fee Report

- -
-
- -
-
- - -
-
- -
-
- - -
- - -
-
-
-
-
- -
- - - -
- - -
-
-
-
- - -
- -
-
-
-
-
-
- -
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/dormitory_rptfeeprint.blade.php b/app/views/app/dormitory_rptfeeprint.blade.php deleted file mode 100644 index 4eb142a2..00000000 --- a/app/views/app/dormitory_rptfeeprint.blade.php +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - -
- - - - - - - -
- - - -

{{$institute->name}}

-

Establish: {{$institute->establish}}

-

Web: {{$institute->web}}

-

Email: {{$institute->email}}

-

Phone: {{$institute->phoneNo}}

-

Address: {{$institute->address}}

-
-
- - - - - -
- Dormitory Fee Report - {{$rdata['name']}} - Month : {{$rdata['month']}} -
-
- - - - - - - - - - - - - @foreach($datas as $data) - - - - - - @if($data->isPaid=="Paid") - - @else - - @endif - - - - - - @endforeach - - -
- -
Regi. NoNameClassRoom NoStatus
{{$data->regiNo}}{{$data->name}}{{$data->class}}{{$data->roomNo}}{{$data->isPaid}}{{$data->isPaid}}
- - - -
Total:{{$rdata['total']}}
- - - diff --git a/app/views/app/dormitory_rptstd.blade.php b/app/views/app/dormitory_rptstd.blade.php deleted file mode 100644 index a55d3f11..00000000 --- a/app/views/app/dormitory_rptstd.blade.php +++ /dev/null @@ -1,85 +0,0 @@ -@extends('layouts.master') - -@section('content') - -
-
-
-
-

Dormitory Student List Report

- -
-
- -
-
- - -
-
- -
-
- - -
- - -
-
-
-
-
- - -
- -
-
-
-
-
-
- -
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/dormitory_rptstdprint.blade.php b/app/views/app/dormitory_rptstdprint.blade.php deleted file mode 100644 index c0c0ae7c..00000000 --- a/app/views/app/dormitory_rptstdprint.blade.php +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - -
- - - - - - - -
- - - -

{{$institute->name}}

-

Establish: {{$institute->establish}}

-

Web: {{$institute->web}}

-

Email: {{$institute->email}}

-

Phone: {{$institute->phoneNo}}

-

Address: {{$institute->address}}

-
-
- - - - - -
- Dormitory Report - {{$rdata['name']}} - -
-
- - - - - - - - - - - - - - @foreach($datas as $data) - - - - - - - - - - - - - - - @endforeach - - -
- -
Regi. NoRoll NoNameClass Section Session Room No
{{$data->regiNo}}{{$data->rollNo}}{{$data->firstName}} {{$data->middleName}} {{$data->lastName}}{{$data->class}}{{$data->section}}{{$data->session}}{{$data->roomNo}}
- - - -
Total Rooms:{{$rdata['totalr']}}  Total Students:{{$rdata['totals']}}
- - - diff --git a/app/views/app/dormitory_stdadd.blade.php b/app/views/app/dormitory_stdadd.blade.php deleted file mode 100644 index 1648fc65..00000000 --- a/app/views/app/dormitory_stdadd.blade.php +++ /dev/null @@ -1,262 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif -
-
-
-
-

Student Add To Dormitory

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
- -
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
- -
-
- - -
- - - -
-
-
-
-
- -
- - - -
-
-
- -
-
- -
-
- - -
-
- - -
- - -
-
-
-
-
- -
- - - -
- - -
-
-
-
- - -
- - -
-
-
-
-
- - -
- - -
-
-
- -
-
-
-
-
-
- - -
- - - -
-
-
-
-
- - -
- - - -
-
-
-
-
- -
-
- - -
-
-
- -
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/dormitory_stdedit.blade.php b/app/views/app/dormitory_stdedit.blade.php deleted file mode 100644 index bebcba0e..00000000 --- a/app/views/app/dormitory_stdedit.blade.php +++ /dev/null @@ -1,133 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif -
-
-
-
-

Student Info Update for Dormitory

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if(isset($student)) -
- - - -
-
-
-
- - -
- - {{ Form::select('dormitory',$dormitories,$student->dormitory,['class'=>'form-control','required'=>'true'])}} -
-
-
-
-
- - -
- - - -
-
-
-
-
- - -
- - - -
-
-
-
-
-
-
-
-
- -
- - - -
- - -
-
- -
-
- - -
- - - {{ Form::select('isActive',['Yes'=>'Yes','No'=>'No'],$student->isActive,['class'=>'form-control','required'=>'true'])}} - -
-
-
-
-
- -
-
- - -
-
-
- @else -
- Whoops!There is no such Student!

- -
- @endif - -
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/dormitory_stdlist.blade.php b/app/views/app/dormitory_stdlist.blade.php deleted file mode 100644 index 691e9bc5..00000000 --- a/app/views/app/dormitory_stdlist.blade.php +++ /dev/null @@ -1,118 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- -@endif -@if (Session::get('error')) -
- - {{ Session::get('error')}} - -
-@endif -
-
-
-
-

Dormitory Student List

- -
-
- -
-
- -
- -
-
- -
-
- - -
- - {{ Form::select('dormitory',$dormitories,$formdata->dormitory,['class'=>'form-control','required'=>'true'])}} -
-
-
-
-
- - -
- -
-
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - @foreach($students as $student) - - - - - - - - - - - - - @endforeach - -
Regi NoRoll NoClassNameGuardian's ContactRoom NoFeeJoind DateLeave DateIs ActiveAction
{{$student->regiNo}}{{$student->rollNo}}{{$student->class}}{{$student->firstName}} {{$student->middleName}} {{$student->lastName}}{{$student->fatherCellNo.'
' }}{{$student->motherCellNo.'
'}}{{$student->localGuardianCell}}
{{$student->roomNo}}{{$student->monthlyFee}}{{$student->joinDate}}{{$student->leaveDate}}{{$student->isActive}} -    -
-
-
-

- - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/excel.blade.php b/app/views/app/excel.blade.php deleted file mode 100644 index 5aeeb491..00000000 --- a/app/views/app/excel.blade.php +++ /dev/null @@ -1,76 +0,0 @@ - - - Total Registered User : - - - - - - - - - - - - - - - - - - - - - - -
Class Name:{{$input->class}}
Section:{{$input->section}}
Session:{{$input->session}}
Examination:{{$input->exam}}
- - - - - @foreach($subjects as $subject) - - @endforeach - - - - - @foreach($subjects as $subject) - - - - - - - - - @endforeach - - - - - - - @foreach($students as $student) - - - - @foreach($student->marks as $mark) - - - - - - - @endforeach - - - - - - - @endforeach - -
Name{{$subject->name}}
WrittenMCQPracticalSBATotalGradeGrand TotalGradePointMerit Position
{{$student->firstName}} {{$student->middleName}} {{$student->lastName}}{{$mark->written}}{{$mark->mcq}}{{$mark->practical}}{{$mark->ca}}{{$mark->total}}{{$mark->grade}}{{$student->meritdata->totalNo}}{{$student->meritdata->grade}}{{$student->meritdata->point}}{{$student->meritdata->position}}
- - \ No newline at end of file diff --git a/app/views/app/feeCollection.blade.php b/app/views/app/feeCollection.blade.php deleted file mode 100644 index 639b379b..00000000 --- a/app/views/app/feeCollection.blade.php +++ /dev/null @@ -1,617 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
-@endif -@if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
-@endif -
-
-
-
-

Fee Collection

- -
-
- -
- -
-
- - - -
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
- -
-
- - -
- - - -
-
-
- - -
-
- -
-
-
-
- -
- - - -
-
-
-
-
- - -
- - -
-
-
- -
-
- -
- - - -
- - -
-
- -
-
-
-
-
-
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
-
-
- - -
- - -
-
-
- -
-
- - - -
-
-
-
- - - - - - - - - - - - - - -
#TitleMonthFeeLate FeeTotal
-
-
-
-
-
-
-
-
-
- -
-
- -
-
-
-
-
-
- -
-
- -
-
-
-
-
-
- -
-
- -
-
-
-
-
-
- -
-
- -
-
-
-
-
-
- -
-
- -
-
-
-
-
- -
-
-
- - -
- -
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/feeEdit.blade.php b/app/views/app/feeEdit.blade.php deleted file mode 100644 index 1e74b379..00000000 --- a/app/views/app/feeEdit.blade.php +++ /dev/null @@ -1,92 +0,0 @@ -@extends('layouts.master') -@section('content') -
-
-
-
-

Fee Edit

- -
-
- @if (isset($fee)) -
- - -
- - -
- - {{ Form::select('class',$classes,$fee->class,['class'=>'form-control'])}} - -
-
-
- - -
- - {{ Form::select('type',['Other'=>'Other','Monthly'=>'Monthly'],$fee->type,['class'=>'form-control'])}} - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
- @else -
- Whoops!There is no such Fee!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
-
-
-
-@stop diff --git a/app/views/app/feeList.blade.php b/app/views/app/feeList.blade.php deleted file mode 100644 index 877a0424..00000000 --- a/app/views/app/feeList.blade.php +++ /dev/null @@ -1,110 +0,0 @@ -@extends('layouts.master') - -@section('content') -@if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- -@endif -@if (Session::get('error')) -
- - {{ Session::get('error')}} - -
-@endif -
-
-
-
-

Fee List

- -
-
- -
-
- -
- -
-
- -
-
- - -
- - {{ Form::select('class',$classes,$formdata->class,['class'=>'form-control','required'=>'true'])}} -
-
-
-
-
- -
- -
-
-
- - -
-
- - -
-
-
-
-
-
- - - - - - - - - - - - - - @foreach($fees as $fee) - - - - - - - - - @endforeach - -
TypeTitleFeeLate FeeDescriptionAction
{{$fee->type}}{{$fee->title}}{{$fee->fee}}{{$fee->Latefee}}{{$fee->description}} -    -
-
-
-

- - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/feesSetup.blade.php b/app/views/app/feesSetup.blade.php deleted file mode 100644 index a9a880ec..00000000 --- a/app/views/app/feesSetup.blade.php +++ /dev/null @@ -1,114 +0,0 @@ -@extends('layouts.master') - -@section('content') -@if (Session::get('success')) - -
- - Process Success. {{ Session::get('success')}}
View List
- -
-@endif -
-
-
-
-

Fee Create

- -
-
-
- - -
- - -
- - -
-
-
- - -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
- - - - - - -
-
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/feesreport.blade.php b/app/views/app/feesreport.blade.php deleted file mode 100644 index 60e63a28..00000000 --- a/app/views/app/feesreport.blade.php +++ /dev/null @@ -1,123 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - -
-
-
-
-

Fee Collection Report

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - -
-
- -
-
- -
- - - -
- - -
-
-
-
- -
- - - -
- - -
-
- - - - -
-
- -
-
- - -
-
- - - - -
-
-
-
-@stop -@section('script') - - - - -@stop diff --git a/app/views/app/feesreportprint.blade.php b/app/views/app/feesreportprint.blade.php deleted file mode 100644 index 462db3a8..00000000 --- a/app/views/app/feesreportprint.blade.php +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - -
- - - - - - - -
- - - -

{{$institute->name}}

-

Establish: {{$institute->establish}}

-

Web: {{$institute->web}}

-

Email: {{$institute->email}}

-

Phone: {{$institute->phoneNo}}

-

Address: {{$institute->address}}

-
-
- - - - - - -
- - Fees Collection Report - -
-
-

Collection Time Period

- - - - - - - -
- From Date: {{$rdata['sDate']}}To Date: {{$rdata['eDate']}}
-
- - - - - - - - - - - - - - - - - -
Payable AmountPaid AmountDue
{{$datas->payTotal}} tk.{{$datas->paiTotal}} tk. {{$datas->dueamount}} tk.
-
-
-----0-----
- - - diff --git a/app/views/app/feestdreportprint.blade.php b/app/views/app/feestdreportprint.blade.php deleted file mode 100644 index 54198f19..00000000 --- a/app/views/app/feestdreportprint.blade.php +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - -
- - - - - - - -
- - - -

{{$institute->name}}

-

Establish: {{$institute->establish}}

-

Web: {{$institute->web}}

-

Email: {{$institute->email}}

-

Phone: {{$institute->phoneNo}}

-

Address: {{$institute->address}}

-
-
- - - - - -
- - Fees Report - -
-
-

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: {{$stdinfo->middleName}} {{$stdinfo->lastName}} {{$stdinfo->firstName}}
Class: {{$stdinfo->class}}Section: {{$stdinfo->section}}
Shift: {{$stdinfo->shift}}Session: {{$stdinfo->session}}
Regi. No.: {{$stdinfo->regiNo}}Roll No.: {{$stdinfo->rollNo}}
-
- - - - - - - - - - - - @foreach($datas as $data) - - - - - - - - - - - - @endforeach - - - - - - - -
Payable AmountPaid AmountDuePay Date
{{$data->payableAmount}}{{$data->paidAmount}}{{$data->dueAmount}}{{$data->date}}
{{$rdata['payTotal']}} tk.{{$rdata['paiTotal']}} tk. {{$rdata['dueAmount']}} tk.
- - - - diff --git a/app/views/app/feeviewstd.blade.php b/app/views/app/feeviewstd.blade.php deleted file mode 100644 index 3ba97424..00000000 --- a/app/views/app/feeviewstd.blade.php +++ /dev/null @@ -1,434 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
- -
-@endif -@if (count($errors) > 0) -
- Whoops! There were some problems.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
-@endif -
-
-
-
-

Student Fee Collection List

- -
-
- -
- -
-
- - - -
-
- - -
- - {{ Form::select('class',$classes,$student->class,['class'=>'form-control','id'=>'class','required'=>'true'])}} - -
-
-
-
-
- - -
- - 'A', - 'B'=>'B', - 'C'=>'C', - 'D'=>'D', - 'E'=>'E', - 'F'=>'F', - 'G'=>'G', - 'H'=>'H', - 'I'=>'I', - 'J'=>'J' - ];?> - {{ Form::select('section',$data,$student->section,['class'=>'form-control','id'=>'section','required'=>'true'])}} - - - -
-
-
- -
-
- - -
- - 'Day', - 'Morning'=>'Morning' - ];?> - {{ Form::select('shift',$data,$student->shift,['class'=>'form-control','id'=>'shift','required'=>'true'])}} - - -
-
-
- - -
-
- -
-
-
-
- -
- - - -
-
-
-
-
- - -
- - -
-
-
-
-
- - -
- - -
-
-
- - - -
-
-
- - - - -
- @if($student->regiNo !="" && count($fees)<1) -
- Whoops! There are no fees entry for this student.

-
- @endif - @if($fees) -
-
- - - - - - - - - - - - - @foreach($fees as $fee) - - - - - - - - - @endforeach - -
Bill NoPayable AmountPaid AmountDue AmountPay DateAction
{{$fee->billNo}}{{$fee->payableAmount}}{{$fee->paidAmount}}{{$fee->dueAmount}}{{$fee->date}} - -
-
- -
-
-
- - - - - - - - - - - - - - -
Total Payable: {{$totals->payTotal}} tk.Total Paid: {{$totals->paiTotal}} tk.Total Due: {{$fee->dueAmount}} tk. - Print -
-
- -
- @endif - - - -
-
-
- - -@stop -@section('script') - - - -@stop diff --git a/app/views/app/gradeSheet.blade.php b/app/views/app/gradeSheet.blade.php deleted file mode 100644 index 66db33f2..00000000 --- a/app/views/app/gradeSheet.blade.php +++ /dev/null @@ -1,179 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - {{$formdata->session}} -
- @endif - -
-
-
-
-

Gradesheet

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
- -
-
- - -
- - {{ Form::select('class',$classes,$formdata->class,['class'=>'form-control','required'=>'true'])}} -
-
-
-
-
- - -
- - 'A', - 'B'=>'B', - 'C'=>'C', - 'D'=>'D', - 'E'=>'E', - 'F'=>'F', - 'G'=>'G', - 'H'=>'H', - 'I'=>'I', - 'J'=>'J' - ];?> - {{ Form::select('section',$data,$formdata->section,['class'=>'form-control','required'=>'true'])}} - - -
-
-
-
-
- -
- - - -
-
-
- -
-
- - -
- - 'Class Test', - 'Model Test'=>'Model Test', - 'First Term'=>'First Term', - 'Mid Term'=>'Mid Term', - 'Final Exam'=>'Final Exam' - ];?> - {{ Form::select('exam',$data,$formdata->exam,['class'=>'form-control','required'=>'true'])}} - - -
-
-
- - -
-
- -
-
- - -
-
-
- @if($students) -
-
- - - - - - - - - - - - - - - @foreach($students as $student) - - - - - - - - - - - @endforeach - -
Regi NoRoll NoNameClassSectionShiftGroupAction
{{$student->regiNo}}{{$student->rollNo}}{{$student->firstName}} {{$student->middleName}} {{$student->lastName}}{{$formdata->postclass}}{{$student->section}}{{$student->shift}}{{$student->group}} - -
-
- -
- @endif - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/institute.blade.php b/app/views/app/institute.blade.php deleted file mode 100644 index 7aa44570..00000000 --- a/app/views/app/institute.blade.php +++ /dev/null @@ -1,143 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif - @if (Session::get('error')) -
- Alert!!! {{ Session::get('error')}} - -
- @endif -
-
-
-
-

Institute Info

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -
-
- -
-
- -
- - - -
-
-
-
-
- -
- - - -
-
-
-
-
-
-
- -
-
- -
- - - -
-
-
-
-
- -
- - - -
-
-
-
- -
-
- -
-
-
- -
- - - -
-
-
-
-
- -
- - - -
-
-
- - - - -
-
- - - -
-
-
- -
- - - - - - - - -
-
-
-@stop -@section('script') - -@stop diff --git a/app/views/app/libraryReports.blade.php b/app/views/app/libraryReports.blade.php deleted file mode 100644 index 95edf08d..00000000 --- a/app/views/app/libraryReports.blade.php +++ /dev/null @@ -1,139 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- -@endif -@if (Session::get('error')) -
- - {{ Session::get('error')}} - -
-@endif -
-
-
-
-

Books Reports

- -
-
- -
-
- - - [*]Fill up any feilds and print. Don't fill up more than one feild at a time. -
-
-
- -
- -
- - {{ Form::select('type',["-1"=>'--Select--','Academic'=>'Academic','Story'=>'Story','Magazine'=>'Magazine','Other'=>'Other'],Input::get('type'),['id'=>'type','class'=>'form-control'])}} -
-
-
- -
- -
- -
- - -
- - - -
- - - - -
- -
- -
- - -
- - - - -
-
- -
- -
-
-
-
- - - -
- -
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/libraryfinereport.blade.php b/app/views/app/libraryfinereport.blade.php deleted file mode 100644 index 1dfb67e9..00000000 --- a/app/views/app/libraryfinereport.blade.php +++ /dev/null @@ -1,90 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - -
-
-
-
-

Library Month Fine Report

- -
-
- -
-
- - -
-
- - -
-
- -
- - - -
- - -
-
-
-
- - -
- -
-
-
-
-
-
- -
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/libraryfinereportprint.blade.php b/app/views/app/libraryfinereportprint.blade.php deleted file mode 100644 index 7d76ec58..00000000 --- a/app/views/app/libraryfinereportprint.blade.php +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - -
- - - - - - - -
- - - -

{{$institute->name}}

-

Establish: {{$institute->establish}}

-

Web: {{$institute->web}}

-

Email: {{$institute->email}}

-

Phone: {{$institute->phoneNo}}

-

Address: {{$institute->address}}

-
-
- - - - - -
- Library Report - {{$rdata['name']}} - Month : {{$rdata['month']}} -
-
- -
-

- Total Fine: {{$rdata['total']}} tk.

- -
- - - diff --git a/app/views/app/libraryreportbooks.blade.php b/app/views/app/libraryreportbooks.blade.php deleted file mode 100644 index f9c203bd..00000000 --- a/app/views/app/libraryreportbooks.blade.php +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - -
- - - - - - - -
- - - -

{{$institute->name}}

-

Establish: {{$institute->establish}}

-

Web: {{$institute->web}}

-

Email: {{$institute->email}}

-

Phone: {{$institute->phoneNo}}

-

Address: {{$institute->address}}

-
-
- - - - - -
- Library Report - {{$rdata['name']}} - -
-
- - - - - - - - - - - - - - - - @foreach($datas as $data) - - - - - - - - - - - - - - - @endforeach - - - -
NameCodeAuthor Quantity Rack NoRow NoDescription
{{$data->title}}{{$data->code}}{{$data->author}}{{$data->quantity}}{{$data->rackNo}}{{$data->rowNo}}{{$data->desc}}
- -
- - -
Total:{{$rdata['total']}}
- - - - diff --git a/app/views/app/libraryreportprinttex.blade.php b/app/views/app/libraryreportprinttex.blade.php deleted file mode 100644 index 3261fd0d..00000000 --- a/app/views/app/libraryreportprinttex.blade.php +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - -
- - - - - - - -
- - - -

{{$institute->name}}

-

Establish: {{$institute->establish}}

-

Web: {{$institute->web}}

-

Email: {{$institute->email}}

-

Phone: {{$institute->phoneNo}}

-

Address: {{$institute->address}}

-
-
- - - - - -
- Library Report - {{$rdata['name']}} - -
-
- - - - - - - - - - - - - - - - @foreach($datas as $data) - - - - - - - - - - - - - - - @endforeach - - - -
NameRoll NoClass Book NameAuthorQuantityTypeFine
{{$data->firstName}} {{$data->middleName}} {{$data->lastName}}{{$data->rollNo}}{{$data->class}}{{$data->title}}{{$data->author}}{{$data->quantity}}{{$data->type}}{{$data->fine}}
-
- - -
Total:{{$rdata['total']}}
- - - diff --git a/app/views/app/markCreate.blade.php b/app/views/app/markCreate.blade.php deleted file mode 100644 index f9f0add2..00000000 --- a/app/views/app/markCreate.blade.php +++ /dev/null @@ -1,545 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif - @if (Session::get('error')) -
- - Process Faild. {{ Session::get('error')}}
- -
- @endif -
-
-
-
-

Marks Entry

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
-
-
- -
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
- -
-
- - -
- - - -
-
-
- -
-
-
-
-
-
- -
- - - -
-
-
-
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
- -
-
-
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
-
- -
-
-
- - - - - - - - - - - - - - - - - - -
Registration NoRoll NoNameWrittenMCQPracticalSBAAbsent
-
-
- -
- - - -
-
- - -
-
-
-
-
-@stop -@section('script') - - - -@stop \ No newline at end of file diff --git a/app/views/app/markEdit.blade.php b/app/views/app/markEdit.blade.php deleted file mode 100644 index b87e03de..00000000 --- a/app/views/app/markEdit.blade.php +++ /dev/null @@ -1,140 +0,0 @@ -@extends('layouts.master') -@section('content') - -
-
-
-
-

Marks Edit

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (isset($marks)) -
- - - - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
-
- -
-
-
- @else -
- Whoops!There is no such Student!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/markList.blade.php b/app/views/app/markList.blade.php deleted file mode 100644 index 07b45dc6..00000000 --- a/app/views/app/markList.blade.php +++ /dev/null @@ -1,257 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
-@endif -@if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
-@endif -@if (isset($noResult)) -
- - {{$noResult['noresult']}} - -
-@endif -
-
-
-
-

Marks List

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
- -
-
- - -
- - @if(isset($classes2)) - {{ Form::select('class',$classes2,$formdata->class,['class'=>'form-control','id'=>'class','required'=>'true'])}} - @else - - - - @endif
-
-
-
-
- - -
- - 'A', - 'B'=>'B', - 'C'=>'C', - 'D'=>'D', - 'E'=>'E', - 'F'=>'F', - 'G'=>'G', - 'H'=>'H', - 'I'=>'I', - 'J'=>'J' - ];?> - {{ Form::select('section',$data,$formdata->section,['class'=>'form-control','required'=>'true'])}} - - -
-
-
- -
-
- - -
- - 'Day', - 'Morning'=>'Morning' - ];?> - {{ Form::select('shift',$data,$formdata->shift,['class'=>'form-control','required'=>'true'])}} - - -
-
-
- -
-
-
-
-
-
- -
- - - -
-
-
-
-
- - -
- - @if(isset($subjects)) - {{ Form::select('subject',$subjects,$formdata->subject,['class'=>'form-control','id'=>'subject','required'=>'true'])}} - @else - - @endif -
-
-
-
-
- - -
- - 'Class Test', - 'Model Test'=>'Model Test', - 'First Term'=>'First Term', - 'Mid Term'=>'Mid Term', - 'Final Exam'=>'Final Exam' - ];?> - {{ Form::select('exam',$data,$formdata->exam,['class'=>'form-control','required'=>'true'])}} - - -
-
-
- -
-
-
-
- - -
-
-
- @if($marks) -
-
- - - - - - - - - - - - - - - - - - - @foreach($marks as $mark) - - - - - - - - - - - - - - - @endforeach - -
Regi NoRoll NoNameWrittenMCQPracticalSBATotalGradePointIs AbsentAction
{{$mark->regiNo}}{{$mark->rollNo}}{{$mark->firstName}} {{$mark->middleName}} {{$mark->lastName}}{{$mark->written}}{{$mark->mcq}}{{$mark->practical}}{{$mark->ca}}{{$mark->total}}{{$mark->grade}}{{$mark->point}}{{$mark->Absent}} - -
-
- -
- @endif - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/printAdmitCard.blade.php b/app/views/app/printAdmitCard.blade.php deleted file mode 100644 index 27b7f62f..00000000 --- a/app/views/app/printAdmitCard.blade.php +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - -
- - - - - - - -
- - - -

{{$institute->name}}

-

Establish: {{$institute->establish}}

-

Web: {{$institute->web}}

-

Email: {{$institute->email}}

-

Phone: {{$institute->phoneNo}}

-

Address: {{$institute->address}}

-
-
- - - - - -
- Applicant's Copy - Class {{$data->class}} Admission Exam(Session:{{$data->session}}) - Admit Card -
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Roll No: {{$data->seatNo}}
Campus: {{$data->campus}}
Class : {{$data->class}}
Full Name : {{$data->stdName}}
Father's Name: {{$data->fatherName}}
Mother's Name: {{$data->motherName}}
Date Of Birth: {{$data->dob}}
-
- -
- - -
- Signature Of Authority              This Admit Card is Electronically Produced. -
-

Admission test will be held on xxth XXXX at Campus 1.

-

Software develop by-Supersoft Corp

-
- - diff --git a/app/views/app/promotion.blade.php b/app/views/app/promotion.blade.php deleted file mode 100644 index 808ac7ee..00000000 --- a/app/views/app/promotion.blade.php +++ /dev/null @@ -1,396 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - {{ Session::get('success')}} - -
- @endif -
-
-
-
-

Promotion

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
-
-
-

Promotion From

- -
-
-
-
- - -
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
-
-
-
-
-
-
- - -
- - - -
-
-
- -
-
- -
- - - -
-
-
- -
-
-
-
-
- -
-
-
-

Promotion To

- - -
-
- -
-
- - -
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
-
-
-
-
-
-
- - -
- - - -
-
-
- -
-
- -
- - - -
-
-
- -
-
-
-
-
- - - -
-
- -
-
-
- - - - - - - - - - - - - - -
SL#Registration NoRoll NoNameNew Roll No
-
-
- -
- - -
-
- - -
-
-
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/resultgenerate.blade.php b/app/views/app/resultgenerate.blade.php deleted file mode 100644 index 75e6fb77..00000000 --- a/app/views/app/resultgenerate.blade.php +++ /dev/null @@ -1,119 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - -
-
-
-
-

Result Generate

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
- -
-
- - -
- - {{ Form::select('class',$classes,'',['class'=>'form-control','required'=>'true'])}} -
-
-
-
-
- -
- - - -
-
-
- -
-
- - -
- - 'Class Test', - 'Model Test'=>'Model Test', - 'First Term'=>'First Term', - 'Mid Term'=>'Mid Term', - 'Final Exam'=>'Final Exam' - ];?> - {{ Form::select('exam',$data,'',['class'=>'form-control','required'=>'true'])}} - - -
-
-
- - -
-
- -
-
- - -
-
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/resultsearch.blade.php b/app/views/app/resultsearch.blade.php deleted file mode 100644 index 84834828..00000000 --- a/app/views/app/resultsearch.blade.php +++ /dev/null @@ -1,115 +0,0 @@ - -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - -
-
-
-
-

Result Search

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
- -
-
- - -
- - -
-
-
-
-
- -
- - - -
-
-
- -
-
- - -
- - 'Class Test', - 'Model Test'=>'Model Test', - 'First Term'=>'First Term', - 'Mid Term'=>'Mid Term', - 'Final Exam'=>'Final Exam' - ];?> - {{ Form::select('exam',$data,$formdata->exam,['class'=>'form-control','required'=>'true'])}} - - -
-
-
- - -
-
- -
-
- - -
-
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/resultsearchpublic.blade.php b/app/views/app/resultsearchpublic.blade.php deleted file mode 100644 index 9f4f3f9a..00000000 --- a/app/views/app/resultsearchpublic.blade.php +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - School Manage - - - - - - - - - - - - - - - - -
- @if (Session::get('success')) -
- {{ Session::get('success')}} -
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - - -
-
-
-
-

Result Search

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
- -
-
- - -
- - -
-
-
-
-
- -
- - - -
-
-
- -
-
- - -
- - 'Class Test', - 'Model Test'=>'Model Test', - 'First Term'=>'First Term', - 'Mid Term'=>'Mid Term', - 'Final Exam'=>'Final Exam' - ];?> - {{ Form::select('exam',$data,$formdata->exam,['class'=>'form-control','required'=>'true'])}} - - -
-
-
- - -
-
- -
-
- - -
-
-
- - - -
-
-
-
- - - - - - - -
- - - - - - - diff --git a/app/views/app/smsLog.blade.php b/app/views/app/smsLog.blade.php deleted file mode 100644 index a50cdc0b..00000000 --- a/app/views/app/smsLog.blade.php +++ /dev/null @@ -1,140 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (count($smslogs)<1 && $foo=="1") -
- - There are no log between date range. - -
- @endif -
-
-
-
-

SMS Logs

- -
-
-
- -
-
- -
- -
- -
- - - -
- - -
-
-
-
- -
- - - -
-
-
-
-
- -
- - - - -
- - -
-
- -
-
- -
- - -
-
-
- - -
-
-
-
-
- - - - - - - - - - - - - - @foreach($smslogs as $smsLog) - - - - - - - - - - @endforeach - -
TypeSenderRecipientMessageDate TimeStatusAction
{{$smsLog->type}}{{$smsLog->sender}}{{$smsLog->recipient}}{{$smsLog->message}}{{$smsLog->created_at->format('d/m/Y h:i:s A')}}{{$smsLog->status}} - -
-
-
-

- - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/smsTypes.blade.php b/app/views/app/smsTypes.blade.php deleted file mode 100644 index 6b7b3b93..00000000 --- a/app/views/app/smsTypes.blade.php +++ /dev/null @@ -1,186 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif -
-
-
-
-

Defined sms formats

-
-
-
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if($sms) -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
- -
- @else -
- - -
-
-
-
- -
- - - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
- - - -
-
- @endif -
-
- - - @if(count($smses)>0) -
-
- - - - - - - - - - - - @foreach($smses as $sms) - - - - - - - - - @endforeach - -
TypeSenderMessageAction
{{$sms->type}}{{$sms->sender}}{{$sms->message}} -    -
- -
-
- @endif - - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/smssender.blade.php b/app/views/app/smssender.blade.php deleted file mode 100644 index 410805d1..00000000 --- a/app/views/app/smssender.blade.php +++ /dev/null @@ -1,176 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
-@endif -
-
-
-
-

Bulk SMS Send

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
- -
-
- -
- - -
-
-
-
-
- - -
- - -
-
-
-
-
- -
- - - -
-
-
-
-
- -
- - -
-
-
- -
-
-
-
- -
- -
- - -
-
- - - -
-
- - - -
-
- -
- -
-
- - - - - - - - - -
-
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/stdattendance.blade.php b/app/views/app/stdattendance.blade.php deleted file mode 100644 index fbd876e3..00000000 --- a/app/views/app/stdattendance.blade.php +++ /dev/null @@ -1,150 +0,0 @@ - - - - Attenace Report - - - - - - - - - - - - - - - -
-
-
-
-
- SESSION-{{$student->session}} - -
-
-
-
-
-
-
-
{{$student->firstName}} {{$student->middleName}} {{$student->lastName}}
-
FATHER'S NAME: {{$student->fatherName}}
-
MOTHER'S NAME: {{$student->motherName}}
-
STUDENT ID: {{$student->regiNo}}
-
DATE OF BIRTH: {{$student->dob}}
- -
SHIFT: {{$student->shift}}
-
- -
-
CLASS: {{$class->name}}
-
GROUP: {{$student->group}}
-
SECTION: {{$student->section}}
-
ROLL NO: {{$student->rollNo}}
- -
- -
-
- -
-
-
-
-

Student Attendance Report

- - - - - @foreach($student->attendance as $attend) - - - - - @endforeach -
Date
{{$attend->date->format('M j,Y')}}
- Total Days: {{count($student->attendance)}} -
- -
-
-
Signature (Guardian)
-
Signature (Class Teacher)
-
- Signature (Head Master) -
-
-
- - - - - diff --git a/app/views/app/stdgradesheet.blade.php b/app/views/app/stdgradesheet.blade.php deleted file mode 100644 index 19439e1f..00000000 --- a/app/views/app/stdgradesheet.blade.php +++ /dev/null @@ -1,471 +0,0 @@ - - - - Marks Sheet - - - - - - - - - - - - - - - - - - -
-
-
-
-
- {{$extra[0]}} EXAMINATION-{{$student->session}} - {{$student->class}} / Equivalent Result Publication {{$student->session}} -
-
-
- -
-
-
-
{{$student->firstName}} {{$student->middleName}} {{$student->lastName}}
-
FATHER'S NAME: {{$student->fatherName}}
-
MOTHER'S NAME: {{$student->motherName}}
-
STUDENT ID: {{$student->regiNo}}
-
DATE OF BIRTH: {{$student->dob}}
- -
SHIFT: {{$student->shift}}
-
BOARD: KHULNA
-
- -
-
CLASS: {{$student->class}}
-
GROUP: {{$student->group}}
-
SECTION: {{$student->section}}
-
ROLL NO: {{$student->rollNo}}
- -
GPA: {{$meritdata->point}}
- -
GRADE: {{$meritdata->grade}}
-
MERIT POSITION: {{$meritdata->position}}TH
- -
-
- - -
-

Subject-Wise Grade & Mark Sheet

- - - - - - - - - - - - - - - - - - - - - - - - @if($extra[1]) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @endif - @if($extra[3]) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @endif - - @foreach($subcollection as $subject) - - - - - - - - - - - - - - - - - - - - - - - - @endforeach - - - - - - - - - - - - - - - - - - - - - - - - -
CODESUBJECT{{$extra[0]}} EXAMINATION MARKS
WrittenMCQSBAPracticalTotalHighestGPGrade
{{$banglaArray[0][0]}}{{$banglaArray[0][1]}}{{$banglaArray[0][2]}}{{$banglaArray[0][2]+$banglaArray[1][2]}}{{$banglaArray[0][3]}}{{$banglaArray[0][3]+$banglaArray[1][3]}}{{$banglaArray[0][4]}}{{$banglaArray[0][4]+$banglaArray[1][4]}}{{$banglaArray[0][5]}}{{$banglaArray[0][5]+$banglaArray[1][5]}}{{$blextra[0]}}{{$blextra[1]}}{{$blextra[2]}}{{$blextra[3]}}
{{$banglaArray[1][0]}}{{$banglaArray[1][1]}}{{$banglaArray[1][2]}}{{$banglaArray[1][3]}}{{$banglaArray[1][4]}}{{$banglaArray[1][5]}}
{{$englishArray[0][0]}}{{$englishArray[0][1]}}{{$englishArray[0][2]}}{{$englishArray[0][2]+$englishArray[1][2]}}{{$englishArray[0][3]}}{{$englishArray[0][3]+$englishArray[1][3]}}{{$englishArray[0][4]}}{{$englishArray[0][4]+$englishArray[1][4]}}{{$englishArray[0][5]}}{{$englishArray[0][5]+$englishArray[1][5]}}{{$enextra[0]}}{{$enextra[1]}}{{$enextra[2]}}{{$enextra[3]}}
{{$englishArray[1][0]}}{{$englishArray[1][1]}}{{$englishArray[1][2]}}{{$englishArray[1][3]}}{{$englishArray[1][4]}}{{$englishArray[1][5]}}
{{$subject->subcode}}{{$subject->subname}}{{$subject->written}}{{$subject->mcq}}{{$subject->ca}}{{$subject->practical}}{{$subject->total}}{{$subject->highest}}{{$subject->point}}{{$subject->grade}}
          
 Total Marks & GPA = {{intval($meritdata->totalNo)}}{{$extra[2]}}{{$meritdata->point}}{{$meritdata->grade}}
-
- -
-
-

Overall Report

- - - - - - - @if($extra[1]) - - - - - - - - @endif - @if($extra[3]) - - - - - - - - @endif - @foreach($subcollection as $subject) - - - - - - - - - - @endforeach - - - - - - - - - - - -
Subject CodeTotal MarksGp
{{$banglaArray[0][0]}}{{$blextra[0]}}{{$blextra[2]}}
{{$englishArray[0][0]}}{{$enextra[0]}}{{$enextra[2]}}
{{$subject->subcode}}{{$subject->total}}{{$subject->point}}
   
Overall{{intval($meritdata->totalNo)}}{{$meritdata->point}}
-
- -
-

Attendance Report

- - - - - - @for($i = 0; $i < 12; $i=$i+2) - - - - - - @endfor -
Month : Presence
{{$attendance[$i]->month}} : {{$attendance[$i]->present}}{{$attendance[$i+1]->month}} : {{$attendance[$i+1]->present}}
- -

Extra Activities

- -
{{$extra[4]}}
-
- -
-

GPA Grading

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Range of Marks(%)GradePoint
80 or Above A+5.00
70 to 79A4.00
60 to 69A-3.50
50 to 59B3.00
40 to 49C2.00
33 to 39D1.00
Below 33F0.00
- -

Achievement

- -
{{$extra[0]}} - @if($meritdata->grade!="F") - @if($meritdata->point>=5.00) - Excellent - @elseif($meritdata->point>=4.00) - Good - @elseif($meritdata->point>="3.00") - Average - @elseif($meritdata->point>="2.00") - Poor - @else - Fail - @endif - @else - Fail - @endif - -
-
- -
-
-
-
Signature (Guardian)
-
Signature (Class Teacher)
-
- Signature (Head Master) -
-
-
-
- - - - - diff --git a/app/views/app/studentAttendance.blade.php b/app/views/app/studentAttendance.blade.php deleted file mode 100644 index f14c33e8..00000000 --- a/app/views/app/studentAttendance.blade.php +++ /dev/null @@ -1,88 +0,0 @@ - -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - -
-
-
-
-

Student Individual Attendance Report

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
- -
-
- -
- - - -
- -
-
-
-
- -
- - -
- -
-
- -
- - -
-
- - -
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/studentCreate.blade.php b/app/views/app/studentCreate.blade.php deleted file mode 100644 index 544fd1c7..00000000 --- a/app/views/app/studentCreate.blade.php +++ /dev/null @@ -1,471 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
-@endif -
-
-
-
-

Student New Admission

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-

Acdemic Details

-
-
-
-
-
-
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
-
-
- -
- - - -
-
-
- - - - -
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - -
- - - - -
-
-
- -
-
-
-
-
-
- - -
- - - -
-
-
-
-
- -
-
-

Student's Detail

-
-
-
-
-
-
-
- -
- - -
-
-
-
- -
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
-
-
-
-
- - -
- - -
-
-
-
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
- -
-
-
-
-
-
- -
- - -
-
-
- -
-
- -
- - - -
- - -
-
- -
-
- - -
-
- -
-
-
-
- - -
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - - -
-
-

Guardian's Detail

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
- -
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
-

Address Detail

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- -
- -
-
-
- - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/studentEdit.blade.php b/app/views/app/studentEdit.blade.php deleted file mode 100644 index d24d20bf..00000000 --- a/app/views/app/studentEdit.blade.php +++ /dev/null @@ -1,488 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - -
-
-
-
-

Student Information Edit

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (isset($student)) -
- - - -
-
-

Acdemic Details

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - - -
-
-
- -
-
-
-
-
-
- - -
- - {{ Form::select('class',$classes,$student->class,['class'=>'form-control','required'=>'true'])}} - -
-
-
-
-
- - -
- - {{ Form::select('group',['All'=>'N/A','Science'=>'Science','Arts'=>'Arts','Commerce'=>'Commerce'],$student->group,['class'=>'form-control','required'=>'true'])}} - - -
-
-
-
-
- - -
- - 'A', - 'B'=>'B', - 'C'=>'C', - 'D'=>'D', - 'E'=>'E', - 'F'=>'F', - 'G'=>'G', - 'H'=>'H', - 'I'=>'I', - 'J'=>'J' - ];?> - {{ Form::select('section',$data,$student->section,['class'=>'form-control','required'=>'true'])}} - - - -
-
-
-
-
- -
- - 'Day', - 'Morning'=>'Morning' - ];?> - {{ Form::select('shift',$data,$student->shift,['class'=>'form-control','required'=>'true'])}} - - -
-
-
-
-
-
-
-

Attention!!!

-
-
- - In fourth subject code field put correct 4th subject code. -
-
- - If student change 4th subject with other subject,
- then put the 4th subject code in fourth subject code feild and alternate subject code
- in alternate subject code field. -
-
- - If student doesn't change 4th subject with other subject,
- then leave the alternate subject code field empty. -
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
-
-

Student's Detail

-
-
-
-
-
-
-
- -
- - -
-
-
-
- -
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
-
-
-
-
- - -
- - 'Male', - 'Female'=>'Female', - 'Other'=>'Other' - - ];?> - {{ Form::select('gender',$data,$student->gender,['class'=>'form-control','required'=>'true'])}} - -
-
-
-
-
- - -
- - 'Islam', - 'Hindu'=>'Hindu', - 'Cristian'=>'Cristian', - 'Buddhist'=>'Buddhist', - 'Other'=>'Other' - - ];?> - {{ Form::select('religion',$data,$student->religion,['class'=>'form-control','required'=>'true'])}} - -
-
-
-
-
- - -
- - 'A+', - 'A-'=>'A-', - 'B+'=>'B+', - 'B+'=>'B+', - 'AB+'=>'AB+', - 'AB-'=>'AB-', - 'O+'=>'O+', - 'O-'=>'O-', - - ];?> - {{ Form::select('bloodgroup',$data,$student->bloodgroup,['class'=>'form-control','required'=>'true'])}} - -
-
-
- -
-
-
-
-
-
- -
- - -
-
-
- -
-
- -
- - - -
- - -
-
- -
-
- - -
-
- -
-
-
-
- - -
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - - -
-
-

Guardian's Detail

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
- -
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
-

Address Detail

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - -
- -
- -
-
-
- @else -
- Whoops!There is no such Student!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/studentList.blade.php b/app/views/app/studentList.blade.php deleted file mode 100644 index bacf56da..00000000 --- a/app/views/app/studentList.blade.php +++ /dev/null @@ -1,170 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- -@endif -@if (Session::get('error')) -
- - {{ Session::get('error')}} - -
-@endif -
-
-
-
-

Student List

- -
-
- -
-
- -
- -
-
- -
-
- - -
- - {{ Form::select('class',$classes,$formdata->class,['class'=>'form-control','required'=>'true'])}} -
-
-
-
-
- - -
- - 'A', - 'B'=>'B', - 'C'=>'C', - 'D'=>'D', - 'E'=>'E', - 'F'=>'F', - 'G'=>'G', - 'H'=>'H', - 'I'=>'I', - 'J'=>'J' - ];?> - {{ Form::select('section',$data,$formdata->section,['class'=>'form-control','required'=>'true'])}} - - -
-
-
- -
-
- - -
- - 'Day', - 'Morning'=>'Morning' - ];?> - {{ Form::select('shift',$data,$formdata->shift,['class'=>'form-control','required'=>'true'])}} - - -
-
-
-
-
- -
- - - -
-
-
- -
-
- -
-
- - -
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - @foreach($students as $student) - - - - - - - - - - - @endforeach - -
Regi NoRoll NoClassNameGenderReligionGuardian's ContactPresent AddressAction
{{$student->regiNo}}{{$student->rollNo}}{{$student->class}}{{$student->firstName}} {{$student->middleName}} {{$student->lastName}}{{$student->gender}}{{$student->religion}}{{$student->fatherCellNo.'
' }}{{$student->motherCellNo.'
'}}{{$student->localGuardianCell}}
{{$student->presentAddress}} -       -
-
-
-

- - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/studentView.blade.php b/app/views/app/studentView.blade.php deleted file mode 100644 index fccf1b53..00000000 --- a/app/views/app/studentView.blade.php +++ /dev/null @@ -1,372 +0,0 @@ -@extends('layouts.master') -@section('content') -
-
-
-
-

Student Information

- -
-
- @if (isset($student)) -
-
-

Student's Information

-
-
-
-
-

Academic Details :

-
-
-
-
-
-
- Photo -
-
-
-
-
-
-
-
- Registration No : -
-
- -
-
-
-
-
-
-
- Card/Roll No : -
-
- -
-
-
-
-
-
-
- Sift : -
-
- -
-
-
-
-
-
-
- Session : -
-
- -
-
-
- -
-
-
-
- Group : -
-
- -
-
-
-
-
-
-
- Class : -
-
- -
-
-
-
-
-
-
- Section : -
-
- -
-
-
- @if($student->fourthSubject && strlen($student->fourthSubject)) -
-
-
-
- 4th subject code : -
-
- -
-
-
- @endif - @if($student->cphsSubject && strlen($student->cphsSubject)) -
-
-
-
- Alternate subject code : -
-
- -
-
-
- @endif - - -
-
-

Basic Details :

-
-
-
-
- -
-
- Fulle Name : -
-
- -
-
-
-
-
-
-
- Gender : -
-
- -
-
-
-
-
-
-
- Religion : -
-
- -
-
-
-
-
-
-
- Bloodgroup : -
-
- -
-
-
-
-
-
-
- Nationality : -
-
- -
-
-
-
-
-
-
- Date Of Birth : -
-
- -
-
-
- -
-
-
-
- Extra Curicular Activity : -
-
- -
-
-
-
-
-
-
- Remarks : -
-
- -
-
-
- -
-
-

Guardian's Details :

-
-
-
-
-
-
- Father's Name : -
-
- -
-
-
-
-
-
-
- Father's Cell No : -
-
- -
-
-
-
-
-
-
- Mother's Name : -
-
- -
-
-
-
-
-
-
- Mother's Cell No : -
-
- -
-
-
-
-
-
-
- Local Guardian : -
-
- -
-
-
-
-
-
-
- Local Guardian Cell No : -
-
- -
-
-
-
-
-

Address Details:

-
-
-
-
-
-
- Present Address : -
-
- -
-
-
-
-
-
-
- Parmanent Address : -
-
- -
-
-
- - - @else -
- Whoops!There is no such Student!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - -
-
-
-
-@stop -@section('script') - -@stop diff --git a/app/views/app/subjectCreate.blade.php b/app/views/app/subjectCreate.blade.php deleted file mode 100644 index 799f8ccd..00000000 --- a/app/views/app/subjectCreate.blade.php +++ /dev/null @@ -1,298 +0,0 @@ -@extends('layouts.master') -@section('content') - @if (Session::get('success')) - -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif -
-
-
-
-

Subject Create

- -
-
-
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
-
- -
- -
-
-

Subject Details

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - -
- - -
-
-
- -
-
- -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
-
-

Exam Details

-
-
- If individual(Written,MCQ,SBA,Practical) pass not required then, leave those pass marks - fields(Written,MCQ,SBA,Practical) empty or fill with 0 -
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
- -
-
- - - -
-
-
- - - - - - -
-
-
-
-@stop diff --git a/app/views/app/subjectEdit.blade.php b/app/views/app/subjectEdit.blade.php deleted file mode 100644 index 14a94820..00000000 --- a/app/views/app/subjectEdit.blade.php +++ /dev/null @@ -1,288 +0,0 @@ -@extends('layouts.master') -@section('content') - -
-
-
-
-

Subject Edit

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (isset($subject)) -
- - -
-
-

Subject Details

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - -
- - - {{ Form::select('type',['Core'=>'Core','Comprehensive'=>'Comprehensive','Electives'=>'Electives'],$subject->type,['class'=>'form-control'])}} - -
-
-
- -
-
- -
-
-
-
- -
- - {{ Form::select('subgroup',['N/A'=>'N/A','Bangla'=>'Bangla','English'=>'English'],$subject->subgroup,['class'=>'form-control'])}} -
-
-
-
-
- -
- - {{ Form::select('stdgroup',['N/A'=>'N/A','Science'=>'Science','Arts'=>'Arts','Commerce'=>'Commerce'],$subject->stdgroup,['class'=>'form-control'])}} - - -
-
-
-
-
- - -
- - - {{ Form::select('class',$classes,$subject->class,['class'=>'form-control'])}} - - - -
-
-
-
-
- -
- - -
-
-
-
-
- -
-
-

Exam Details

-
-
- If individual(Written,MCQ,SBA,Practical) pass not required then, leave those pass marks - fields(Written,MCQ,SBA,Practical) empty or fill with 0 -
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-
-
-
- -
-
- - - -
-
-
- @else -
- Whoops!There is no such Subject!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - -
-
-
-
-@stop diff --git a/app/views/app/subjectList.blade.php b/app/views/app/subjectList.blade.php deleted file mode 100644 index a11e06e3..00000000 --- a/app/views/app/subjectList.blade.php +++ /dev/null @@ -1,115 +0,0 @@ -@extends('layouts.master') -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- - @endif -
-
-
-
-

Subject List

- -
-
-
-
-
-
-
- - -
- - {{ Form::select('class',$classes,$selectedClass,['class'=>'form-control','required'=>'true'])}} -
-
-
-
-
- -
- -
-
-
-
- -
-
-
-
- - - - - - - - - - - - - - - - - - @foreach($Subjects as $subject) - - - - - - - @if($subject->gradeSystem=="1") - - @else - - @endif - - - - @endforeach - -
CodeNameTypeGroupStudent GroupClassGrade System - Full Marks - - Pass Marks - Action
{{$subject->code}}{{$subject->name}}{{$subject->type}}{{$subject->subgroup}}{{$subject->stdgroup}}{{$subject->class}}100 Marks50 Marks - {{$subject->totalfull.' [Total] '}} - {{$subject->wfull.' [Written] '}} - {{$subject->mfull.' [MCQ] '}} - {{$subject->sfull.' [SBA] '}} - {{$subject->pfull.' [Practical]'}} - - {{$subject->totalpass.' [Total] '}} - {{$subject->wpass.' [Written] '}} - {{$subject->mpass.' [MCQ] '}} - {{$subject->spass.' [SBA] '}} - {{$subject->ppass.' [Practical] '}} - -    -
-
-
- -

- - -
-
-
-
-@stop -@section('script') - -@stop diff --git a/app/views/app/tabulationsheet.blade.php b/app/views/app/tabulationsheet.blade.php deleted file mode 100644 index 8e89ee46..00000000 --- a/app/views/app/tabulationsheet.blade.php +++ /dev/null @@ -1,157 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('error')) -
- - {{ Session::get('error')}} - {{$formdata->session}} -
- @endif - -
-
-
-
-

Gradesheet

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- -
-
- -
-
- - -
- - {{ Form::select('class',$classes,$formdata->class,['class'=>'form-control','required'=>'true'])}} -
-
-
-
-
- - -
- - 'A', - 'B'=>'B', - 'C'=>'C', - 'D'=>'D', - 'E'=>'E', - 'F'=>'F', - 'G'=>'G', - 'H'=>'H', - 'I'=>'I', - 'J'=>'J' - ];?> - {{ Form::select('section',$data,$formdata->section,['class'=>'form-control','required'=>'true'])}} - - -
-
-
-
-
- - -
- - - -
-
-
-
-
- -
- - - -
-
-
- -
-
- - -
- - 'Class Test', - 'Model Test'=>'Model Test', - 'First Term'=>'First Term', - 'Mid Term'=>'Mid Term', - 'Final Exam'=>'Final Exam' - ];?> - {{ Form::select('exam',$data,$formdata->exam,['class'=>'form-control','required'=>'true'])}} - - -
-
-
- - -
-
- -
-
- - -
-
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/teacher/absenteeism.blade.php b/app/views/app/teacher/absenteeism.blade.php deleted file mode 100644 index 531a15ca..00000000 --- a/app/views/app/teacher/absenteeism.blade.php +++ /dev/null @@ -1,157 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - @if (isset($noResult)) -
- - {{$noResult['noresult']}} - -
- @endif - - - -
-
-
-
-

Absenteeism Report

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -
-
-
-
- - -
- - 'Teacher', - 'Staff'=>'Staff', - ];?> - {{ Form::select('egroup',$data,null,['class'=>'form-control','required'=>'true'])}} - -
-
-
-
-
- -
- - -
- - -
-
-
-
- -
- - -
- - -
-
-
-
- -
- - -
-
-
- -
-
-
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/teacher/absenteeism_report.blade.php b/app/views/app/teacher/absenteeism_report.blade.php deleted file mode 100644 index 6a5ec862..00000000 --- a/app/views/app/teacher/absenteeism_report.blade.php +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - Employee Attendance Report - - - - - - - - - - - -{{--
--}} - {{--
--}} - {{--Back--}} -{{--
--}} -{{--
--}} -
-
- -
- -
-
-

{{$institute->name}}

-
Establish: {{$institute->establish}} Web: {{$institute->web}} Email: {{$institute->email}}
-
Phone: {{$institute->phoneNo}} Address: {{$institute->address}}
-
- - - -
- -
-
-
- {{$egroup}} Absenteeism Report -
-
Time Period: {{date('d/m/Y',strtotime($dateFrom))}} To {{date('d/m/Y',strtotime($dateTo))}}
-
-
-
- @if($data) -
-
- - - - - - - - - - - - - - @foreach($data as $atd) - - - - - - - - @endforeach - -
DateTot_strengthTot_preTot_abs%of_abs%of_pre
{{$atd->date->format('j-M-y')}}{{$atd->total}}{{$atd->present}}{{$atd->absent}}{{number_format((($atd->absent/$atd->total)*100),2)}}{{number_format((($atd->present/$atd->total)*100),2)}}
-

Print Date: {{date('d/m/Y')}}

-
- - -
- @endif - -
- - - - - diff --git a/app/views/app/teacher/attendanceList.blade.php b/app/views/app/teacher/attendanceList.blade.php deleted file mode 100644 index 452de875..00000000 --- a/app/views/app/teacher/attendanceList.blade.php +++ /dev/null @@ -1,288 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - @if (isset($noResult)) -
- - {{$noResult['noresult']}} - -
- @endif - - - -
-
-
-
-

Attendance List

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- {{----}} - - -
-
-
-
- -
- - -
- -
-
-
-
- - -
- - 'All', - 'Teacher'=>'Teacher', - 'Staff'=>'Staff', - ];?> - {{ Form::select('egroup',$data,$egroup,['class'=>'form-control','required'=>'true'])}} - -
-
-
- -
-
- -
- - -
- - -
-
-
-
- -
- - -
- - -
-
- -
-
-
-
-
- -   - -
-
-
-
-
- @if($attendance) -
-
- - - - - - - - - - - - - - - @if($regNo) - @define $totalDay = 0 - @define $totalHour = 0 - @endif - - @foreach($attendance as $atd) - - - - - - - - - - @if($regNo) - @define $totalDay += 1 - @define $totalHour += $atd->nWorkingHOUR - @endif - @endforeach - - - @if($regNo) - - - - - - - - - - - - - @endif - -
Employee TypeEmployee NoNameDatedIN_TIMEdOUT_TIMEnWorking_HOURvSTATUS
{{$atd->teacher->egroup}}{{$atd->regNo}}{{$atd->teacher->fullName}}{{$atd->date->format('d/m/Y')}} - @if($atd->dIN_TIME!="00:00:00") - {{date('h:i:s a', strtotime($atd->dIN_TIME))}} - @else - {{$atd->dIN_TIME}} - @endif - - @if($atd->dOUT_TIME!="00:00:00") - {{date('h:i:s a', strtotime($atd->dOUT_TIME))}} - @else - {{$atd->dOUT_TIME}} - @endif - - {{SmsHelper::clockalize($atd->nWorkingHOUR)}} - - @if($atd->vSTATUS=="A") - @if(isset($holiDays[$atd->date->format('Y-m-d')])) - H - @elseif(isset($empWorks[$atd->regNo]) && isset($empWorks[$atd->regNo][$atd->date->format('Y-m-d')])) - WO - @else - A - @endif - @else - P - @endif - -
Total{{$totalDay}}(Days) - {{SmsHelper::clockalize($totalHour)}} -
-
- -
- @endif - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/teacher/attendance_create.blade.php b/app/views/app/teacher/attendance_create.blade.php deleted file mode 100644 index 5da4d3f8..00000000 --- a/app/views/app/teacher/attendance_create.blade.php +++ /dev/null @@ -1,70 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif -
-
-
-
-

Attendance Entry

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your file.Please download example file and see it.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
-
Example/Sample Excel/CSV file.[Download CSV][Download Excel] -
-
Please be care about file size.It must be less than 8MB!
-
If it is a excel file then make sure cells value are formated as "text"!
-
-
-
-
-
- -
- - -
-
- -
-
- -
-
- - -
-
-
- -
-
-
-@stop -@section('script') -@stop diff --git a/app/views/app/teacher/attendance_report.blade.php b/app/views/app/teacher/attendance_report.blade.php deleted file mode 100644 index 4e20c1b1..00000000 --- a/app/views/app/teacher/attendance_report.blade.php +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - Employee Attendance Report - - - - - - - - - - - -{{--
--}} - {{--
--}} - {{--Back--}} -{{--
--}} -{{--
--}} -
-
- -
- -
-
-

{{$institute->name}}

-
Establish: {{$institute->establish}} Web: {{$institute->web}} Email: {{$institute->email}}
-
Phone: {{$institute->phoneNo}} Address: {{$institute->address}}
-
- - - -
- -
-
-
- @if($searchType=='1') - Employee Attendance Report @if($egroup)[{{$egroup}}] @endif - @else - Employee Attendance Report - @endif -
- @if($regNo) - @if(count($attendance)) -
Name: {{$attendance[0]->teacher->fullName}}
- @endif - @endif -
Time Period: {{date('d/m/Y',strtotime($dateFrom))}} To {{date('d/m/Y',strtotime($dateTo))}}
-
-
-
- @if($attendance) -
-
- - - - - - - - - - - - - - @if($regNo) - @define $totalDay = 0 - @define $totalHour = 0 - - @endif - - @foreach($attendance as $atd) - - - - - - - - - @if($regNo) - @define $totalDay += 1 - @define $totalHour += $atd->nWorkingHOUR - - @endif - @endforeach - - - @if($regNo) - - - - - - - - - - - - @endif - -
Employee NoNameDatedIN_TIMEdOUT_TIMEnWorking_HOURvSTATUS
{{$atd->regNo}}{{$atd->teacher->fullName}}{{$atd->date->format('d/m/Y')}} - @if($atd->dIN_TIME!="00:00:00") - {{date('h:i:s a', strtotime($atd->dIN_TIME))}} - @else - {{$atd->dIN_TIME}} - @endif - - @if($atd->dOUT_TIME!="00:00:00") - {{date('h:i:s a', strtotime($atd->dOUT_TIME))}} - @else - {{$atd->dOUT_TIME}} - @endif - - {{SmsHelper::clockalize($atd->nWorkingHOUR)}} - -{{-- {{$atd->vSTATUS}}--}} - {{--@if($atd->vSTATUS=="A")--}} - {{--A--}} - {{--@else--}} - {{--P--}} - {{--@endif--}} - @if($atd->vSTATUS=="A") - @if(isset($holiDays[$atd->date->format('Y-m-d')])) - H - @elseif(isset($empWorks[$atd->regNo]) && isset($empWorks[$atd->regNo][$atd->date->format('Y-m-d')])) - WO - @else - A - @endif - @else - P - @endif - -
Total{{$totalDay}}(Days) - {{SmsHelper::clockalize($totalHour)}} -
-

Print Date: {{date('d/m/Y')}}

-
- - -
- @endif - -
- - - - - diff --git a/app/views/app/teacher/create.blade.php b/app/views/app/teacher/create.blade.php deleted file mode 100644 index 9e4c8e5e..00000000 --- a/app/views/app/teacher/create.blade.php +++ /dev/null @@ -1,258 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') -@if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
-@endif -
-
-
-
-

New Employee Etnry

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- - -
-
-

Employee's Detail

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - -
- - -
-
-
- -
-
-
-
-
-
- - -
- - -
-
-
-
-
- - -
- - -
-
-
-
-
- - -
- - - - -
-
-
-
-
- -
- - -
-
-
- -
-
-
-
- -
-
- -
- - - -
- - -
-
-
-
- -
- - -
- -
-
-
-
- -
- - -
-
-
-
-
- - -
-
- -
-
-
-
-
-
- -
- - -
-
-
- - -
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
-
-
-
- -
- - -
-
-
-
- -
- -
- -
-
-
- - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/teacher/details.blade.php b/app/views/app/teacher/details.blade.php deleted file mode 100644 index e0b7a398..00000000 --- a/app/views/app/teacher/details.blade.php +++ /dev/null @@ -1,245 +0,0 @@ -@extends('layouts.master') -@section("style") - - - - -@stop -@section('content') -
-
-
-
-

Employee Information

- -
-
- @if (isset($teacher)) - -
-
-
-
- Photo -
-
-
-
-
-
-
-
- Employee No : -
-
- -
-
-
- -
-
-
-
- Full Name : -
-
- -
-
-
- -
-
-
-
- Employee type : -
-
- -
-
-
-
-
-
-
- Gender : -
-
- -
-
-
-
-
-
-
- Religion : -
-
- -
-
-
-
-
-
-
- Bloodgroup : -
-
- -
-
-
-
-
-
-
- Nationality : -
-
- -
-
-
-
-
-
-
- Date Of Birth : -
-
- -
-
-
-
-
-
-
- Join Date : -
-
- -
-
-
- -
-
-
-
- Education Qualification : -
-
- -
-
-
- - -
-
-
-
- Mobile No : -
-
- -
-
-
- -
-
-
-
- Present Address : -
-
- -
-
-
-
-
-
-
- Parmanent Address : -
-
- -
-
-
-
-
-
-
- Details : -
-
- -
-
-
- -
-
- -
- Casual Leave(CL) -
{{$cl}}/20
-
-
- Sick Leave(ML) -
{{$ml}}/10
-
-
- Undefined Leave(UL) -
{{$ul}}/∞
-
- -
- - - @else -
- Whoops!There is no such teacher!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - -
-
-
-
-@stop - diff --git a/app/views/app/teacher/edit.blade.php b/app/views/app/teacher/edit.blade.php deleted file mode 100644 index 3aa5ae30..00000000 --- a/app/views/app/teacher/edit.blade.php +++ /dev/null @@ -1,281 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - -
-
-
-
-

Update employee information

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if (isset($teacher)) -
- - - - -
-
-

Employee's Detail

-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- - -
- - 'Teacher', - 'Staff'=>'Staff', - ];?> - {{ Form::select('egroup',$data,$teacher->egroup,['class'=>'form-control','required'=>'true'])}} -
-
-
- -
-
-
-
-
-
- - -
- - 'Male', - 'Female'=>'Female', - 'Other'=>'Other' - - ];?> - {{ Form::select('gender',$data,$teacher->gender,['class'=>'form-control','required'=>'true'])}} -
-
-
-
-
- - -
- - 'Islam', - 'Hindu'=>'Hindu', - 'Cristian'=>'Cristian', - 'Buddhist'=>'Buddhist', - 'Other'=>'Other' - - ];?> - {{ Form::select('religion',$data,$teacher->religion,['class'=>'form-control','required'=>'true'])}} - -
-
-
-
-
- -
- - 'A+', - 'A-'=>'A-', - 'B+'=>'B+', - 'B+'=>'B+', - 'AB+'=>'AB+', - 'AB-'=>'AB-', - 'O+'=>'O+', - 'O-'=>'O-', - - ];?> - {{ Form::select('bloodgroup',$data,$teacher->bloodgroup,['class'=>'form-control','required'=>'true'])}} - -
- -
-
-
-
- -
- - -
-
-
- -
-
-
-
- -
-
- -
- - - -
- - -
-
-
-
- -
- - -
- -
-
-
-
- -
- - -
-
-
-
-
- - -
-
- -
-
-
-
-
-
- -
- - -
-
-
- - -
-
- -
- - -
-
-
-
-
- -
- - -
-
-
- -
-
-
-
-
- -
- - -
-
-
-
- -
- -
- -
-
-
- @else -
- Whoops!There is no such teacher!

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/teacher/holiday/list.blade.php b/app/views/app/teacher/holiday/list.blade.php deleted file mode 100644 index bbf6f1e9..00000000 --- a/app/views/app/teacher/holiday/list.blade.php +++ /dev/null @@ -1,122 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif -
-
-
-
-

Holidays

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- -
-
-
- -
-
-
-
-
-
- -
-
- - - - - - - - - - - @foreach($holidays as $day) - - - - - - - @endforeach - -
DateDescriptionCreated AtAction
{{$day->holiDate->format('j M,Y')}}{{$day->description}}{{$day->createdAt->format('d/m/Y h:i:s a')}} - -
- -
-
-
-
-
-
-@stop -@section('script') - - - -@stop diff --git a/app/views/app/teacher/leave/create.blade.php b/app/views/app/teacher/leave/create.blade.php deleted file mode 100644 index 165dc542..00000000 --- a/app/views/app/teacher/leave/create.blade.php +++ /dev/null @@ -1,131 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif -
-
-
-
-

New Leave Etnry

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
-
- -
- - {{ Form::select('employee',$teachers,null,['class'=>'form-control','id'=>'class',])}} -
-
-
-
-
- -
- - -
-
-
-
-
-
-
-
-
- -
- - -
-
-
- -
-
- -
- - -
-
-
-
-
-
-
-
-
- - -
-
-
-
- -
- - -
-
-
-
-
- -
-
-
- -
- -
-
-
-
-
-
-
- - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/teacher/leave/list.blade.php b/app/views/app/teacher/leave/list.blade.php deleted file mode 100644 index 1b44dd10..00000000 --- a/app/views/app/teacher/leave/list.blade.php +++ /dev/null @@ -1,191 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('error')) -
- - {{ Session::get('error')}} - -
- @endif -
-
-
-
-

Leave List

- -
-
-
-
-
-
-
- -
- - {{ Form::select('employee',$teachers,$employee,['class'=>'form-control','id'=>'class',])}} -
-
-
-
-
- - -
- - 'All', - 'CL'=>'Casual leave (CL)', - 'ML'=>'Sick leave (ML)', - ];?> - {{ Form::select('lType',$data2,$type,['class'=>'form-control'])}} - -
-
-
- {{--
--}} - {{--
--}} - {{----}} - {{--
--}} - {{-- --}} - {{----}} - {{--
--}} - - - {{--
--}} - {{--
--}} - {{--
--}} - {{--
--}} - {{----}} - {{--
--}} - {{-- --}} - {{----}} - {{--
--}} - - - {{--
--}} - {{--
--}} -
-
- - -
- - 'All', - '1'=>'Pending', - '2'=>'Approved', - '3'=>'Rejected', - ];?> - {{ Form::select('status',$data,$status,['class'=>'form-control','required'=>'true'])}} - -
-
-
- -
-
-
-
-
- {{----}} - {{-- --}} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - - - @foreach($leaves as $leave) - - - - - - - - - - @endforeach - -
DateEmployee NoNameTypeDescriptionPaperStatusAction
{{$leave->leaveDate->format('d/m/Y')}}{{$leave->regNo}}{{$leave->teacher->fullName}}{{$leave->lType}}{{$leave->description}} - @if($leave->paper) - - @endif - - @if($leave->status==1) - Pending - @elseif($leave->status==2) - Approved - @elseif($leave->status==3) - Rejected - @endif - - @if($leave->status==1) -    -    - - @endif -
-
-
-
-
- - -
-
-
-
-@stop -@section('script') - -@stop diff --git a/app/views/app/teacher/list.blade.php b/app/views/app/teacher/list.blade.php deleted file mode 100644 index 7d2cf279..00000000 --- a/app/views/app/teacher/list.blade.php +++ /dev/null @@ -1,79 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- - @endif - @if (Session::get('error')) -
- - {{ Session::get('error')}} - -
- @endif -
-
-
-
-

Employee List

- -
-
- - -
-
- - - - - - - - - - - - - - - @foreach($teachers as $teacher) - - - - - - - - - - @endforeach - -
TypeEmployee NoNameGenderReligionMobile NoPresent AddressAction
{{$teacher->egroup}}{{$teacher->regNo}}{{$teacher->fullName}}{{$teacher->gender}}{{$teacher->religion}}{{$teacher->cellNo }}{{$teacher->presentAddress}} -          -
-
-
-
-
- - -
-
-
-
-@stop -@section('script') - -@stop diff --git a/app/views/app/teacher/monthly_attendance.blade.php b/app/views/app/teacher/monthly_attendance.blade.php deleted file mode 100644 index e1691630..00000000 --- a/app/views/app/teacher/monthly_attendance.blade.php +++ /dev/null @@ -1,136 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - @if (isset($noResult)) -
- - {{$noResult['noresult']}} - -
- @endif - - - -
-
-
-
-

Monthly Attendance Report

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -
-
- -
-
- -
- - -
- - -
-
- -
-
- -
- - -
-
-
- -
-
-
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/teacher/monthly_attendance_report.blade.php b/app/views/app/teacher/monthly_attendance_report.blade.php deleted file mode 100644 index da24b7aa..00000000 --- a/app/views/app/teacher/monthly_attendance_report.blade.php +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - Monthly Attendance Report - - - - - - - - - - - -{{--
--}} -{{--
--}} -{{--Back--}} -{{--
--}} -{{--
--}} -
-
- -
- -
-
-

{{$institute->name}}

-
Establish: {{$institute->establish}} Web: {{$institute->web}} Email: {{$institute->email}}
-
Phone: {{$institute->phoneNo}} Address: {{$institute->address}}
-
- - - -
- -
-
-
- Monthly Attendance Report -
-
Month: {{date('F,Y',strtotime($yearMonth))}}
-
-
- @if($data) -
- - - - @foreach($keys as $index=>$key) - @if($index>1) - - @elseif($index==1) - @else - - @endif - @endforeach - - - - - - - - @foreach($data as $datum) - - - @foreach($keys as $index=>$key) - @if($index==0) - - @elseif($index==1) - - @else - - - @if(isset($fridays[$key])) - - @elseif(isset($holiDays[$key])) - - @elseif($row[$key]=="P") - - @elseif($row[$key]=="A") - - @if(isset($empLeaves[$empRegNo]) && isset($empLeaves[$empRegNo][$key])) - - @endif - @if(isset($empWorks[$empRegNo]) && isset($empWorks[$empRegNo][$key])) - - @endif - @else - - @endif - @if($index != 0 && $index!=1) - - @endif - @endif - - @endforeach - - - - - @endforeach - -
{{date('d-M',strtotime($key))}}{{$key}}PresentAbsentToT.DAYS
{{$row[$key]}}{{$symbol}}{{$totalP}}{{$totalA}}{{($totalP+$totalA)}}
-

Print Date: {{date('d/m/Y')}}

-
- - -
-@endif - -
- - - - - diff --git a/app/views/app/teacher/monthly_attendance_report_two.blade.php b/app/views/app/teacher/monthly_attendance_report_two.blade.php deleted file mode 100644 index 77c1d0aa..00000000 --- a/app/views/app/teacher/monthly_attendance_report_two.blade.php +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - Monthly Attendance Report Two - - - - - - - - - - - -{{--
--}} -{{--
--}} -{{--Back--}} -{{--
--}} -{{--
--}} -
-
- -
- -
-
-

{{$institute->name}}

-
Establish: {{$institute->establish}} Web: {{$institute->web}} Email: {{$institute->email}}
-
Phone: {{$institute->phoneNo}} Address: {{$institute->address}}
-
- - - -
- -
-
-
- Monthly Attendance Report -
-
Month: {{date('F,Y',strtotime($yearMonth))}}
-
-
- @if($data) -
- - - - @foreach($keys as $index=>$key) - @if($index>2) - - @elseif($index==1) - @else - - @endif - @endforeach - - - - - - - - @foreach($data as $datum) - - - @foreach($keys as $index=>$key) - @if($index==0) - - @elseif($index==1) - - @elseif($index==2) - - - @else - - - @if(isset($fridays[$key])) - - @elseif(isset($holiDays[$key])) - - @elseif($row[$key]=="P") - - @elseif($row[$key]=="A") - - @if(isset($empLeaves[$empRegNo]) && isset($empLeaves[$empRegNo][$key])) - - @endif - @if(isset($empWorks[$empRegNo]) && isset($empWorks[$empRegNo][$key])) - - @endif - @else - - @endif - @if($index != 0 && $index!=1) - - @endif - @endif - - @endforeach - - - - - - - @foreach($keys as $index=>$key) - @if($index==0) - @elseif($index==1) - - @elseif($index==2) - - @else - - - @endif - @endforeach - - - - @foreach($keys as $index=>$key) - @if($index==0) - @elseif($index==1) - - @elseif($index==2) - - @else - - @if(isset($prityData[$empRegNo][$key]) && $prityData[$empRegNo][$key]['out'] !="00:00:00") - @if(strtotime($prityData[$empRegNo][$key]['out']) < strtotime('15:00:00')) - - @else - - @endif - @else - - @endif - - @endif - @endforeach - - - - @foreach($keys as $index=>$key) - @if($index==0) - @elseif($index==1) - - @elseif($index==2) - - @else - - @endif - @endforeach - - - - @endforeach - -
{{date('d-M',strtotime($key))}}{{$key}}PresentAbsentToT.DAYS
{{$row[$key]}}STATUS{{$symbol}}{{$totalP}}{{$totalA}}{{($totalP+$totalA)}}
IN_TIME - @if(isset($prityData[$empRegNo][$key]) && $prityData[$empRegNo][$key]['in'] !="00:00:00") - {{date('h:i:s a', strtotime($prityData[$empRegNo][$key]['in']))}} - @else - {{isset($prityData[$empRegNo][$key]) ? $prityData[$empRegNo][$key]['in'] : '-'}} - @endif -
OUT_TIME{{date('h:i:s a', strtotime($prityData[$empRegNo][$key]['out']))}}{{date('h:i:s a', strtotime($prityData[$empRegNo][$key]['out']))}}{{isset($prityData[$empRegNo][$key]) ? $prityData[$empRegNo][$key]['out'] : '-'}}
Working Hour - @if(isset($prityData[$empRegNo][$key])) - - {{SmsHelper::clockalize($prityData[$empRegNo][$key]['work'])}} - @else - - - @endif - - {{SmsHelper::clockalize($totalH)}} -
-

Print Date: {{date('d/m/Y')}}

-
- - -
-@endif - -
- - - - - diff --git a/app/views/app/teacher/monthly_attendance_two.blade.php b/app/views/app/teacher/monthly_attendance_two.blade.php deleted file mode 100644 index 3951a9d8..00000000 --- a/app/views/app/teacher/monthly_attendance_two.blade.php +++ /dev/null @@ -1,136 +0,0 @@ -@extends('layouts.master') -@section('style') - - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('noresult')) -
- - {{ Session::get('noresult')}} - -
- @endif - @if (isset($noResult)) -
- - {{$noResult['noresult']}} - -
- @endif - - - -
-
-
-
-

Monthly Attendance Report Two

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - -
- - -
-
- -
-
- -
- - -
- - -
-
- -
-
- -
- - -
-
-
- -
-
-
-
- - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/teacher/workoutside/create.blade.php b/app/views/app/teacher/workoutside/create.blade.php deleted file mode 100644 index ba8417be..00000000 --- a/app/views/app/teacher/workoutside/create.blade.php +++ /dev/null @@ -1,115 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}}
View List
- -
- @endif -
-
-
-
-

New Work Outside Etnry

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- -
-
-
-
- -
- - {{ Form::select('employee',$teachers,null,['class'=>'form-control','id'=>'class',])}} -
-
-
- -
-
- -
- - -
-
-
- -
-
- -
- - -
-
-
-
-
-
-
-
-
- - -
-
-
-
- -
- - -
-
-
-
-
- -
-
-
- -
- -
-
-
-
-
-
-
- - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/app/teacher/workoutside/list.blade.php b/app/views/app/teacher/workoutside/list.blade.php deleted file mode 100644 index 4e12a3da..00000000 --- a/app/views/app/teacher/workoutside/list.blade.php +++ /dev/null @@ -1,145 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success.
{{ Session::get('success')}}
-
- @endif - @if (Session::get('error')) -
- - {{ Session::get('error')}} - -
- @endif -
-
-
-
-

Work Outside List

- -
-
-
-
-
-
-
- -
- - {{ Form::select('employee',$teachers,$employee,['class'=>'form-control','id'=>'class',])}} -
-
-
- {{--
--}} - {{--
--}} - {{----}} - {{--
--}} - {{-- --}} - {{----}} - {{--
--}} - - - {{--
--}} - {{--
--}} - {{--
--}} - {{--
--}} - {{----}} - {{--
--}} - {{-- --}} - {{----}} - {{--
--}} - - - {{--
--}} - {{--
--}} - - -
-
-
-
-
- {{----}} - {{-- --}} - -
-
-
-
-
- -
-
- - - - - - - - - - - - - @foreach($workOutsides as $work) - - - - - - - - @endforeach - -
DateEmployee NoNameDescriptionPaperAction
{{$work->workDate->format('d/m/Y')}}{{$work->regNo}}{{$work->teacher->fullName}}{{$work->description}} - @if($work->paper) - - @endif - - @if($work->status==1) - - @endif -
-
-
-
-
- - -
-
-
-
-@stop -@section('script') - -@stop diff --git a/app/views/app/users.blade.php b/app/views/app/users.blade.php deleted file mode 100644 index 67b48ac1..00000000 --- a/app/views/app/users.blade.php +++ /dev/null @@ -1,258 +0,0 @@ -@extends('layouts.master') -@section('style') - -@stop -@section('content') - @if (Session::get('success')) -
- - Process Success. {{ Session::get('success')}} - -
- @endif -
-
-
-
-

System Users

- -
-
- @if (count($errors) > 0) -
- Whoops! There were some problems with your input.

-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif - @if($user) -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- - -
- - {{ Form::select('group',['Admin'=>'Admin','Management'=>'Management','Other'=>'Other'],$user->group,['class'=>'form-control','required'=>'true'])}} - -
-
-
-
-
- -
- - - -
-
-
- - -
- - -
-
- @else -
- - -
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
-
- -
- - -
-
-
-
-
- - -
- - - -
-
-
-
-
- -
- - - -
-
-
- - -
- - -
-
- @endif -
-
- - - @if(count($users)>0) -
-
- - - - - - - - - - - - - - @foreach($users as $user) - - - - - - - - - - - @endforeach - -
NameEmailLoginGroupDescriptonAction
{{$user->firstname}} {{$user->lastname}}{{$user->email}}{{$user->login}}{{$user->group}}{{$user->desc}} -    -
- -
-
- @endif - - - - - - -
-
-
-
-@stop -@section('script') - - -@stop diff --git a/app/views/dashboard.blade.php b/app/views/dashboard.blade.php deleted file mode 100644 index 060deb3b..00000000 --- a/app/views/dashboard.blade.php +++ /dev/null @@ -1,129 +0,0 @@ -@extends('layouts.master') -@section("style") - - - - -@stop -@section('content') -@if (Session::get('accessdined')) -
- - Process Faild. {{ Session::get('accessdined')}} - -
-@endif -
-
- -
-
- Class -
{{$total['class']}}
-
-
- Students -
{{$total['student']}}
-
-
- Subjects -
{{$total['subject']}}
-
-
-
-
- Attendance(Days) -
{{$total['attendance']}}
-
-
- Exams -
{{$total['exam']}}
-
-
- Books -
{{$total['book']}}
-
-
- - -
-
-
-
-

Accounting Report(Monthly)

- -
-
-
- -
-
-
- -
- -
-
- - - -@stop -@section("script") - - - -@stop diff --git a/app/views/emails/auth/reminder.blade.php b/app/views/emails/auth/reminder.blade.php deleted file mode 100644 index aebea9e3..00000000 --- a/app/views/emails/auth/reminder.blade.php +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - -

Password Reset

- -
- To reset your password, complete this form: {{ URL::to('password/reset', array($token)) }}.
- This link will expire in {{ Config::get('auth.reminder.expire', 60) }} minutes. -
- - diff --git a/app/views/errors/404.blade.php b/app/views/errors/404.blade.php deleted file mode 100644 index 56362fa7..00000000 --- a/app/views/errors/404.blade.php +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - Not Found - - - - - - - - - - - - - - - - - -
-
-
-
-

Something went Wrong!

-

404

-

Page not Found!

-
-
- -
-
-
- - - - - - -
-
-
- - -
-
-
-
Home
-
-
-
- - - -
-
- - - - - - - - - - - - - - - - - diff --git a/app/views/errors/503.blade.php b/app/views/errors/503.blade.php deleted file mode 100644 index 123339bb..00000000 --- a/app/views/errors/503.blade.php +++ /dev/null @@ -1,47 +0,0 @@ - - - - Be right back. - - - - - - -
-
-
Be right back.
-
-
- - diff --git a/app/views/errors/error.blade.php b/app/views/errors/error.blade.php deleted file mode 100644 index 52602698..00000000 --- a/app/views/errors/error.blade.php +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - ERROR - - - - - - - - - - - - - - - - - - - -
-
-
-
-

Something went Wrong!

-

404

-

Error occured! Please contact site administrator.

-
-
- -
-
-
- - - - - - -
-
-
- - -
-
-
-
Home
-
-
-
- - - -
-
- - - - - - - - - - - - - - - - - diff --git a/app/views/feeList.blade.php b/app/views/feeList.blade.php deleted file mode 100644 index 2634c052..00000000 --- a/app/views/feeList.blade.php +++ /dev/null @@ -1 +0,0 @@ -/var/www/school/app/views/feeList.blade.php \ No newline at end of file diff --git a/app/views/layouts/footer.blade.php b/app/views/layouts/footer.blade.php deleted file mode 100644 index 72cfe8c8..00000000 --- a/app/views/layouts/footer.blade.php +++ /dev/null @@ -1,12 +0,0 @@ - - - -
-
\ No newline at end of file diff --git a/app/views/layouts/master.blade.php b/app/views/layouts/master.blade.php deleted file mode 100644 index 54bd2b63..00000000 --- a/app/views/layouts/master.blade.php +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - {{Session::get('inNameShort')}} | School Manage - - - - - - - - - - - - - - - - - - - - - - - - - - - @yield("style") - - - - - - - - - - - - - - - - - -
-
- - -
- -
- - - - - -
- - @if (isset($successmsg)) -
- - {{ $success }}. -
- @endif - @if (isset($errormsg)) -
- - {{ $error }}. -
- @endif - - - @yield('content') - - - - - -
-
-
- - -
- -@include('layouts.footer') - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@yield('script') - - diff --git a/app/views/login.blade.php b/app/views/login.blade.php deleted file mode 100644 index f2f33e87..00000000 --- a/app/views/login.blade.php +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - School Manage - - - - - - - - - - - - - - - - - - - - -
-
- -
- - -
- -
- - -
-
- -
- - - - - diff --git a/artisan b/artisan old mode 100644 new mode 100755 index 5c408ad8..5c23e2e2 --- a/artisan +++ b/artisan @@ -1,6 +1,8 @@ #!/usr/bin/env php setRequestForConsoleEnvironment(); - -$artisan = Illuminate\Console\Application::start($app); +$app = require_once __DIR__.'/bootstrap/app.php'; /* |-------------------------------------------------------------------------- @@ -56,19 +30,24 @@ $artisan = Illuminate\Console\Application::start($app); | */ -$status = $artisan->run(); +$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); /* |-------------------------------------------------------------------------- | Shutdown The Application |-------------------------------------------------------------------------- | -| Once Artisan has finished running. We will fire off the shutdown events +| Once Artisan has finished running, we will fire off the shutdown events | so that any final work may be done by the application before we shut | down the process. This is the last thing to happen to the request. | */ -$app->shutdown(); +$kernel->terminate($input, $status); exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100755 index 00000000..f2801adf --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php deleted file mode 100644 index 6b329312..00000000 --- a/bootstrap/autoload.php +++ /dev/null @@ -1,75 +0,0 @@ - __DIR__.'/../app', - - /* - |-------------------------------------------------------------------------- - | Public Path - |-------------------------------------------------------------------------- - | - | The public path contains the assets for your web application, such as - | your JavaScript and CSS files, and also contains the primary entry - | point for web requests into these applications from the outside. - | - */ - - 'public' => __DIR__.'/../public', - - /* - |-------------------------------------------------------------------------- - | Base Path - |-------------------------------------------------------------------------- - | - | The base path is the root of the Laravel installation. Most likely you - | will not need to change this value. But, if for some wild reason it - | is necessary you will do so here, just proceed with some caution. - | - */ - - 'base' => __DIR__.'/..', - - /* - |-------------------------------------------------------------------------- - | Storage Path - |-------------------------------------------------------------------------- - | - | The storage path is used by Laravel to store cached Blade views, logs - | and other pieces of information. You may modify the path here when - | you want to change the location of this directory for your apps. - | - */ - - 'storage' => __DIR__.'/../app/storage', - -); diff --git a/bootstrap/start.php b/bootstrap/start.php deleted file mode 100644 index af56f8ca..00000000 --- a/bootstrap/start.php +++ /dev/null @@ -1,75 +0,0 @@ -detectEnvironment( - array( - 'local' => array('l4.school.test',true), - 'production' => array('school.hrshadhin.me',false), - - ) -); - -/* -|-------------------------------------------------------------------------- -| Bind Paths -|-------------------------------------------------------------------------- -| -| Here we are binding the paths configured in paths.php to the app. You -| should not be changing these here. If you need to change these you -| may do so within the paths.php file and they will be bound here. -| -*/ - -$app->bindInstallPaths(require __DIR__.'/paths.php'); - -/* -|-------------------------------------------------------------------------- -| Load The Application -|-------------------------------------------------------------------------- -| -| Here we will load this Illuminate application. We will keep this in a -| separate location so we can isolate the creation of an application -| from the actual running of the application with a given request. -| -*/ - -$framework = $app['path.base']. - '/vendor/laravel/framework/src'; - -require $framework.'/Illuminate/Foundation/start.php'; - -/* -|-------------------------------------------------------------------------- -| Return The Application -|-------------------------------------------------------------------------- -| -| This script returns the application instance. The instance is given to -| the calling script so we can separate the building of the instances -| from the actual running of the application and sending responses. -| -*/ - -return $app; diff --git a/composer.json b/composer.json old mode 100644 new mode 100755 index 4a47f85c..d3fb2c7f --- a/composer.json +++ b/composer.json @@ -1,50 +1,109 @@ { - "name": "laravel/laravel", - "description": "The Laravel Framework.", - "keywords": [ - "framework", - "laravel" - ], - "license": "MIT", - "require": { - "laravel/framework": "4.2.*", - "maatwebsite/excel": "~1.3", - "guzzle/guzzle": "~3.0", - "barryvdh/laravel-dompdf": "0.4.*", - "pda/pheanstalk": "~2.0", - "picqer/php-barcode-generator": "^0.2.0", - "davelip/laravel-database-queue": ">0.5" - }, - "require-dev": { - "way/generators": "~2.0" - }, - "autoload": { - "classmap": [ - "app/commands", - "app/controllers", - "app/models", - "app/database/migrations", - "app/database/seeds", - "app/tests/TestCase.php", - "app/composers", - "app/helpers" - ] - }, - "scripts": { - "post-install-cmd": [ - "php artisan clear-compiled", - "php artisan optimize" - ], - "post-update-cmd": [ - "php artisan clear-compiled", - "php artisan optimize" - ], - "post-create-project-cmd": [ - "php artisan key:generate" - ] - }, - "config": { - "preferred-install": "dist" - }, - "minimum-stability": "stable" -} \ No newline at end of file + "name": "hrshadhin/school-management-system", + "version": "3.0.0", + "description": "Another School Management System build with laravel", + "keywords": [ + "School", + "CloudSchool", + "College", + "Management", + "Web", + "Application", + "Admission", + "Attendance", + "Exam", + "Result", + "Fees", + "Accounting", + "Library", + "Hostel", + "Employees" + ], + "type": "project", + "license": "AGPL-3.0-or-later", + "authors": [ + { + "name": "H.R.Shadhin", + "email": "dev@hrshadhin.me", + "homepage": "http://hrshadhin.me", + "role": "Maintainer" + } + ], + "homepage": "http://cloudschoolbd.com", + "readme": "./readme.md", + "time": "2016-02-14", + "support": { + "email": "sos@cloudschoolbd.com", + "issues": "https://github.com/hrshadhin/school-management-system/issues", + "wiki": "https://github.com/hrshadhin/school-management-system/wiki", + "source": "https://github.com/hrshadhin/school-management-system" + }, + "repositories": [ + { + "url": "https://github.com/hrshadhin/laravel-userstamps.git", + "type": "git" + } + ], + "require": { + "php": "^7.2", + "barryvdh/laravel-dompdf": "^0.8.4", + "bonecms/laravel-captcha": "^2.1", + "fideloper/proxy": "^4.0", + "guzzlehttp/guzzle": "^6.3", + "hrshadhin/laravel-userstamps": "^2.0.1", + "laravel/framework": "^6.0", + "laravel/tinker": "^2.0", + "laravelcollective/html": "^6.0", + "maatwebsite/excel": "^3.1", + "picqer/php-barcode-generator": "^0.3.0", + "rap2hpoutre/laravel-log-viewer": "^1.2", + "twilio/sdk": "^6.0" + }, + "require-dev": { + "barryvdh/laravel-debugbar": "^3.2", + "facade/ignition": "^1.4", + "fzaninotto/faker": "^1.9.1", + "mockery/mockery": "^1.0", + "nunomaduro/collision": "^3.0", + "phpunit/phpunit": "^8.0" + }, + "config": { + "preferred-install": "dist", + "sort-packages": true, + "optimize-autoloader": true + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "autoload": { + "classmap": [ + "database/seeds", + "database/factories" + ], + "psr-4": { + "App\\": "app/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "minimum-stability": "dev", + "prefer-stable": true, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + + } +} diff --git a/composer.lock b/composer.lock index b5220265..db7a1231 100644 --- a/composer.lock +++ b/composer.lock @@ -1,34 +1,42 @@ { "_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", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a4b7a394c64246df8e2e67206e8fa990", + "content-hash": "b5ea208011a370bde26c14201379d4ab", "packages": [ { "name": "barryvdh/laravel-dompdf", - "version": "v0.4.6", + "version": "v0.8.6", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-dompdf.git", - "reference": "9d45a1efc1a0669f502352f0fc6d08ce24efaad2" + "reference": "d7108f78cf5254a2d8c224542967f133e5a6d4e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/9d45a1efc1a0669f502352f0fc6d08ce24efaad2", - "reference": "9d45a1efc1a0669f502352f0fc6d08ce24efaad2", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/d7108f78cf5254a2d8c224542967f133e5a6d4e8", + "reference": "d7108f78cf5254a2d8c224542967f133e5a6d4e8", "shasum": "" }, "require": { - "dompdf/dompdf": "0.6.*", - "illuminate/support": "~4.0", - "php": ">=5.3.0" + "dompdf/dompdf": "^0.8", + "illuminate/support": "^5.5|^6|^7", + "php": ">=7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.4-dev" + "dev-master": "0.8-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ], + "aliases": { + "PDF": "Barryvdh\\DomPDF\\Facade" + } } }, "autoload": { @@ -52,115 +60,133 @@ "laravel", "pdf" ], - "time": "2014-08-20T13:05:36+00:00" + "time": "2020-02-25T20:44:34+00:00" }, { - "name": "classpreloader/classpreloader", - "version": "1.0.2", + "name": "bonecms/laravel-captcha", + "version": "v2.2.3", "source": { "type": "git", - "url": "https://github.com/ClassPreloader/ClassPreloader.git", - "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877" + "url": "https://github.com/igoshev/laravel-captcha.git", + "reference": "3854d9706d14dcf3fd20cdee786c58c9e59a47a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/2c9f3bcbab329570c57339895bd11b5dd3b00877", - "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877", + "url": "https://api.github.com/repos/igoshev/laravel-captcha/zipball/3854d9706d14dcf3fd20cdee786c58c9e59a47a1", + "reference": "3854d9706d14dcf3fd20cdee786c58c9e59a47a1", "shasum": "" }, "require": { - "nikic/php-parser": "~0.9", - "php": ">=5.3.3", - "symfony/console": "~2.1", - "symfony/filesystem": "~2.1", - "symfony/finder": "~2.1" + "ext-gd": "*", + "illuminate/config": "^5.5|^6.0|^7.0", + "illuminate/http": "^5.5|^6.0|^7.0", + "illuminate/routing": "^5.5|^6.0|^7.0", + "illuminate/session": "^5.5|^6.0|^7.0", + "illuminate/support": "^5.5|^6.0|^7.0", + "illuminate/translation": "^5.5|^6.0|^7.0", + "illuminate/view": "^5.5|^6.0|^7.0", + "php": ">=7.0" }, - "bin": [ - "classpreloader.php" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.2-dev" + }, + "laravel": { + "providers": [ + "Igoshev\\Captcha\\Providers\\CaptchaServiceProvider" + ] } }, "autoload": { - "psr-0": { - "ClassPreloader": "src/" + "psr-4": { + "Igoshev\\Captcha\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", + "authors": [ + { + "name": "Dmitriy Igoshev", + "email": "dmitry.igo@gmail.com" + } + ], + "description": "Captcha integration for Laravel", + "homepage": "https://github.com/igoshev/laravel-captcha", "keywords": [ - "autoload", - "class", - "preload" + "Laravel Captcha", + "captcha" ], - "time": "2014-03-12T00:05:31+00:00" + "time": "2020-08-11T15:37:29+00:00" }, { - "name": "d11wtq/boris", - "version": "v1.0.10", + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", "source": { "type": "git", - "url": "https://github.com/borisrepl/boris.git", - "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483" + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/borisrepl/boris/zipball/31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483", - "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", "shasum": "" }, "require": { - "ext-pcntl": "*", - "ext-posix": "*", - "ext-readline": "*", - "php": ">=5.3.0" + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" }, - "bin": [ - "bin/boris" - ], "type": "library", "autoload": { - "psr-0": { - "Boris": "lib" + "psr-4": { + "XdgBaseDir\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "A tiny, but robust REPL (Read-Evaluate-Print-Loop) for PHP.", - "time": "2015-03-01T08:05:19+00:00" + "description": "implementation of xdg base directory specification for php", + "time": "2019-12-04T15:06:13+00:00" }, { - "name": "davelip/laravel-database-queue", - "version": "0.5.7", + "name": "doctrine/inflector", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/davelip/laravel-database-queue.git", - "reference": "c8724a1adc90b01e67246ba8065704956cd65eaf" + "url": "https://github.com/doctrine/inflector.git", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/davelip/laravel-database-queue/zipball/c8724a1adc90b01e67246ba8065704956cd65eaf", - "reference": "c8724a1adc90b01e67246ba8065704956cd65eaf", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", "shasum": "" }, "require": { - "illuminate/console": "~4.0", - "illuminate/support": "~4.0", - "php": ">=5.3.0", - "symfony/process": "~2.3" + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { - "Davelip\\Queue\\": "src/" + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -169,176 +195,227 @@ ], "authors": [ { - "name": "David Lippi", - "email": "lippi.david@gmail.com" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" } ], - "time": "2017-02-17T09:21:33+00:00" + "time": "2020-05-29T15:13:26+00:00" }, { - "name": "dompdf/dompdf", - "version": "v0.6.2", + "name": "doctrine/lexer", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/dompdf/dompdf.git", - "reference": "cc06008f75262510ee135b8cbb14e333a309f651" + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/cc06008f75262510ee135b8cbb14e333a309f651", - "reference": "cc06008f75262510ee135b8cbb14e333a309f651", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "phenx/php-font-lib": "0.2.*" + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, "autoload": { - "classmap": [ - "include/" - ] + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL" + "MIT" ], "authors": [ { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" }, { - "name": "Brian Sweeney", - "email": "eclecticgeek@gmail.com" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", - "homepage": "https://github.com/dompdf/dompdf", - "time": "2015-12-07T04:07:13+00:00" + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" }, { - "name": "filp/whoops", - "version": "1.1.10", + "name": "dompdf/dompdf", + "version": "v0.8.5", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "72538eeb70bbfb11964412a3d098d109efd012f7" + "url": "https://github.com/dompdf/dompdf.git", + "reference": "6782abfc090b132134cd6cea0ec6d76f0fce2c56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/72538eeb70bbfb11964412a3d098d109efd012f7", - "reference": "72538eeb70bbfb11964412a3d098d109efd012f7", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/6782abfc090b132134cd6cea0ec6d76f0fce2c56", + "reference": "6782abfc090b132134cd6cea0ec6d76f0fce2c56", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-dom": "*", + "ext-mbstring": "*", + "phenx/php-font-lib": "^0.5.1", + "phenx/php-svg-lib": "^0.3.3", + "php": "^7.1" }, "require-dev": { - "mockery/mockery": "0.9.*" + "phpunit/phpunit": "^7.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-develop": "0.7-dev" } }, "autoload": { - "psr-0": { - "Whoops": "src/" + "psr-4": { + "Dompdf\\": "src/" }, "classmap": [ - "src/deprecated" + "lib/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-2.1" ], "authors": [ { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + }, + { + "name": "Brian Sweeney", + "email": "eclecticgeek@gmail.com" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com" } ], - "description": "php error handling for cool kids", - "homepage": "https://github.com/filp/whoops", - "keywords": [ - "error", - "exception", - "handling", - "library", - "silex-provider", - "whoops", - "zf2" - ], - "time": "2015-06-29T05:42:04+00:00" + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "time": "2020-02-20T03:52:51+00:00" }, { - "name": "guzzle/guzzle", - "version": "v3.9.3", + "name": "dragonmantank/cron-expression", + "version": "v2.3.0", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle3.git", - "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", - "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", "shasum": "" }, "require": { - "ext-curl": "*", - "php": ">=5.3.3", - "symfony/event-dispatcher": "~2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" - }, - "require-dev": { - "doctrine/cache": "~1.3", - "monolog/monolog": "~1.0", - "phpunit/phpunit": "3.7.*", - "psr/log": "~1.0", - "symfony/class-loader": "~2.1", - "zendframework/zend-cache": "2.*,<2.3", - "zendframework/zend-log": "2.*,<2.3" + "php": "^7.0" }, - "suggest": { - "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.9-dev" + "dev-master": "2.3-dev" } }, "autoload": { - "psr-0": { - "Guzzle": "src/", - "Guzzle\\Tests": "tests/" + "psr-4": { + "Cron\\": "src/Cron/" } }, "notification-url": "https://packagist.org/downloads/", @@ -352,46 +429,55 @@ "homepage": "https://github.com/mtdowling" }, { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" } ], - "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", - "homepage": "http://guzzlephp.org/", + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" + "cron", + "schedule" ], - "abandoned": "guzzlehttp/guzzle", - "time": "2015-03-18T18:23:50+00:00" + "time": "2019-03-31T00:38:28+00:00" }, { - "name": "ircmaxell/password-compat", - "version": "v1.0.4", + "name": "egulias/email-validator", + "version": "2.1.19", "source": { "type": "git", - "url": "https://github.com/ircmaxell/password_compat.git", - "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "840d5603eb84cc81a6a0382adac3293e57c1c64c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", - "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/840d5603eb84cc81a6a0382adac3293e57c1c64c", + "reference": "840d5603eb84cc81a6a0382adac3293e57c1c64c", "shasum": "" }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, "require-dev": { - "phpunit/phpunit": "4.*" + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, "autoload": { - "files": [ - "lib/password.php" - ] + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -399,44 +485,54 @@ ], "authors": [ { - "name": "Anthony Ferrara", - "email": "ircmaxell@php.net", - "homepage": "http://blog.ircmaxell.com" + "name": "Eduardo Gulias Davis" } ], - "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", - "homepage": "https://github.com/ircmaxell/password_compat", + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", "keywords": [ - "hashing", - "password" + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" ], - "time": "2014-11-20T16:49:30+00:00" + "time": "2020-08-08T21:28:19+00:00" }, { - "name": "jeremeamia/SuperClosure", - "version": "1.0.2", + "name": "fideloper/proxy", + "version": "4.4.0", "source": { "type": "git", - "url": "https://github.com/jeremeamia/super_closure.git", - "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554" + "url": "https://github.com/fideloper/TrustedProxy.git", + "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/4d89ca74994feab128ea46d5b3add92e6cb84554", - "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8", + "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8", "shasum": "" }, "require": { - "nikic/php-parser": "~0.9", - "php": ">=5.3.3" + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0", + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~3.7" + "illuminate/http": "^5.0|^6.0|^7.0|^8.0", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.0" }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "Fideloper\\Proxy\\TrustedProxyServiceProvider" + ] + } + }, "autoload": { - "psr-0": { - "Jeremeamia\\SuperClosure": "src/" + "psr-4": { + "Fideloper\\Proxy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -445,118 +541,60 @@ ], "authors": [ { - "name": "Jeremy Lindblom" + "name": "Chris Fidao", + "email": "fideloper@gmail.com" } ], - "description": "Doing interesting things with closures like serialization.", - "homepage": "https://github.com/jeremeamia/super_closure", + "description": "Set trusted proxies for Laravel", "keywords": [ - "closure", - "function", - "parser", - "serializable", - "serialize", - "tokenizer" + "load balancing", + "proxy", + "trusted proxy" ], - "time": "2015-01-10T01:09:28+00:00" + "time": "2020-06-23T01:36:47+00:00" }, { - "name": "laravel/framework", - "version": "v4.2.22", + "name": "guzzlehttp/guzzle", + "version": "6.5.5", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "7bfe4a10387d726569856bb4ceaec576e60ae7bb" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/7bfe4a10387d726569856bb4ceaec576e60ae7bb", - "reference": "7bfe4a10387d726569856bb4ceaec576e60ae7bb", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", "shasum": "" }, "require": { - "classpreloader/classpreloader": "~1.0.2", - "d11wtq/boris": "~1.0", - "filp/whoops": "1.1.*", - "ircmaxell/password-compat": "~1.0", - "jeremeamia/superclosure": "~1.0.1", - "monolog/monolog": "~1.6", - "nesbot/carbon": "~1.0", - "patchwork/utf8": "~1.1", - "php": ">=5.4.0", - "phpseclib/phpseclib": "0.3.*", - "predis/predis": "0.8.*", - "stack/builder": "~1.0", - "swiftmailer/swiftmailer": "~5.1", - "symfony/browser-kit": "2.7.*", - "symfony/console": "2.7.*", - "symfony/css-selector": "2.7.*", - "symfony/debug": "2.7.*", - "symfony/dom-crawler": "2.7.*", - "symfony/finder": "2.7.*", - "symfony/http-foundation": "2.7.*", - "symfony/http-kernel": "2.7.*", - "symfony/process": "2.7.*", - "symfony/routing": "2.7.*", - "symfony/security-core": "2.7.*", - "symfony/translation": "2.7.*" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/cache": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/exception": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/foundation": "self.version", - "illuminate/hashing": "self.version", - "illuminate/html": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/mail": "self.version", - "illuminate/pagination": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/remote": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "illuminate/workbench": "self.version" + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" }, "require-dev": { - "aws/aws-sdk-php": "~2.6", - "iron-io/iron_mq": "~1.5", - "mockery/mockery": "~0.9", - "pda/pheanstalk": "~2.1", - "phpunit/phpunit": "~4.0" + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" }, "suggest": { - "doctrine/dbal": "Allow renaming columns and dropping SQLite columns." + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "6.5-dev" } }, "autoload": { - "classmap": [ - "src/Illuminate/Queue/IlluminateQueueClosure.php" - ], + "psr-4": { + "GuzzleHttp\\": "src/" + }, "files": [ - "src/Illuminate/Support/helpers.php" - ], - "psr-0": { - "Illuminate": "src/" - } + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -564,140 +602,117 @@ ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "The Laravel Framework.", + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", "keywords": [ + "client", + "curl", "framework", - "laravel" + "http", + "http client", + "rest", + "web service" ], - "time": "2016-11-12T01:41:37+00:00" + "time": "2020-06-16T21:01:06+00:00" }, { - "name": "maatwebsite/excel", - "version": "1.3.10", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/Maatwebsite/Laravel-Excel.git", - "reference": "38a922afe0714dcddde926ba23dfd0f5678cb18a" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/38a922afe0714dcddde926ba23dfd0f5678cb18a", - "reference": "38a922afe0714dcddde926ba23dfd0f5678cb18a", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "illuminate/cache": "~4.0|~5.0", - "illuminate/config": "~4.0|~5.0", - "illuminate/filesystem": "~4.0|~5.0", - "illuminate/support": "~4.0|~5.0", - "nesbot/carbon": "~1.0", - "php": ">=5.3.0", - "phpoffice/phpexcel": "~1.8.0", - "tijsverkoyen/css-to-inline-styles": "~1.5" + "php": ">=5.5.0" }, "require-dev": { - "mockery/mockery": "~0.9", - "orchestra/testbench": "~2.2.0", - "phpseclib/phpseclib": ">=0.3.7", - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "illuminate/http": "~4.0|~5.0", - "illuminate/routing": "~4.0|~5.0", - "illuminate/view": "~4.0|~5.0" + "phpunit/phpunit": "^4.0" }, "type": "library", - "autoload": { - "classmap": [ - "src/Maatwebsite/Excel" - ], - "psr-0": { - "Maatwebsite\\Excel\\": "src/" + "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": [ - "LGPL" + "MIT" ], "authors": [ { - "name": "Maatwebsite.nl", - "email": "patrick@maatwebsite.nl" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "An eloquent way of importing and exporting Excel and CSV in Laravel 4 with the power of PHPExcel", + "description": "Guzzle promises library", "keywords": [ - "PHPExcel", - "batch", - "csv", - "excel", - "export", - "import", - "laravel" + "promise" ], - "time": "2017-02-28T11:40:11+00:00" + "time": "2016-12-20T10:07:11+00:00" }, { - "name": "monolog/monolog", - "version": "1.23.0", + "name": "guzzlehttp/psr7", + "version": "1.6.1", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + "url": "https://github.com/guzzle/psr7.git", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", - "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { - "psr/log-implementation": "1.0.0" + "psr/http-message-implementation": "1.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" + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, "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" + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.6-dev" } }, "autoload": { "psr-4": { - "Monolog\\": "src/Monolog" - } + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -705,141 +720,4999 @@ ], "authors": [ { - "name": "Jordi Boggiano", + "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", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2019-07-01T23:21:34+00:00" + }, + { + "name": "hrshadhin/laravel-userstamps", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hrshadhin/laravel-userstamps.git", + "reference": "f054f1d99fbe96d0af74723ab5afa9b9cf25dcbb" + }, + "require": { + "illuminate/database": "^6.0", + "illuminate/support": "^6.0", + "php": "^7.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Hrshadhin\\Userstamps\\UserstampsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Hrshadhin\\Userstamps\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "H.R.Shadhin", + "email": "dev@hrshadhin.me" + } + ], + "description": "A simple Laravel package for Eloquent Model user specific feilds.", + "homepage": "https://github.com/hrshadhin/laravel-userstamps", + "keywords": [ + "created_by", + "deleted_by", + "eloquent", + "hrshadhin", + "laravel", + "updated_by", + "userstamps", + "userstamps" + ], + "time": "2020-05-01T00:00:00+00:00" + }, + { + "name": "laravel/framework", + "version": "v6.18.38", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "94a29cadcc0d48b89b4aa820f414fb7721ba0e22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/94a29cadcc0d48b89b4aa820f414fb7721ba0e22", + "reference": "94a29cadcc0d48b89b4aa820f414fb7721ba0e22", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^2.0", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "league/commonmark": "^1.3", + "league/flysystem": "^1.0.34", + "monolog/monolog": "^1.12|^2.0", + "nesbot/carbon": "^2.0", + "opis/closure": "^3.1", + "php": "^7.2", + "psr/container": "^1.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^3.7", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.3.4", + "symfony/debug": "^4.3.4", + "symfony/finder": "^4.3.4", + "symfony/http-foundation": "^4.3.4", + "symfony/http-kernel": "^4.3.4", + "symfony/polyfill-php73": "^1.17", + "symfony/process": "^4.3.4", + "symfony/routing": "^4.3.4", + "symfony/var-dumper": "^4.3.4", + "tijsverkoyen/css-to-inline-styles": "^2.2.1", + "vlucas/phpdotenv": "^3.3" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", + "filp/whoops": "^2.4", + "guzzlehttp/guzzle": "^6.3|^7.0", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.3.1", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "^4.0", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^7.5.15|^8.4|^9.0", + "predis/predis": "^1.1.1", + "symfony/cache": "^4.3.4" + }, + "suggest": { + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "filp/whoops": "Required for friendly error pages in development (^2.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.9.1).", + "guzzlehttp/guzzle": "Required to use the Mailgun mail driver and the ping methods on schedules (^6.0|^7.0).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "predis/predis": "Required to use the predis connector (^1.1.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^4.3.4).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.2).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "time": "2020-09-01T13:40:51+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.4.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "58424c24e8aec31c3a3ac54eb3adb15e8a0a067b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/58424c24e8aec31c3a3ac54eb3adb15e8a0a067b", + "reference": "58424c24e8aec31c3a3ac54eb3adb15e8a0a067b", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0", + "illuminate/contracts": "^6.0|^7.0|^8.0", + "illuminate/support": "^6.0|^7.0|^8.0", + "php": "^7.2", + "psy/psysh": "^0.10.3", + "symfony/var-dumper": "^4.3|^5.0" + }, + "require-dev": { + "mockery/mockery": "^1.3.1", + "phpunit/phpunit": "^8.4|^9.0" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "time": "2020-08-11T19:28:08+00:00" + }, + { + "name": "laravelcollective/html", + "version": "v6.1.2", + "source": { + "type": "git", + "url": "https://github.com/LaravelCollective/html.git", + "reference": "5ef9a3c9ae2423fe5618996f3cde375d461a3fc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/5ef9a3c9ae2423fe5618996f3cde375d461a3fc6", + "reference": "5ef9a3c9ae2423fe5618996f3cde375d461a3fc6", + "shasum": "" + }, + "require": { + "illuminate/http": "^6.0|^7.0", + "illuminate/routing": "^6.0|^7.0", + "illuminate/session": "^6.0|^7.0", + "illuminate/support": "^6.0|^7.0", + "illuminate/view": "^6.0|^7.0", + "php": ">=7.2.5" + }, + "require-dev": { + "illuminate/database": "^6.0|^7.0", + "mockery/mockery": "~1.0", + "phpunit/phpunit": "~7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.0-dev" + }, + "laravel": { + "providers": [ + "Collective\\Html\\HtmlServiceProvider" + ], + "aliases": { + "Form": "Collective\\Html\\FormFacade", + "Html": "Collective\\Html\\HtmlFacade" + } + } + }, + "autoload": { + "psr-4": { + "Collective\\Html\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adam Engebretson", + "email": "adam@laravelcollective.com" + }, + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "HTML and Form Builders for the Laravel Framework", + "homepage": "https://laravelcollective.com", + "time": "2020-05-19T18:02:16+00:00" + }, + { + "name": "league/commonmark", + "version": "1.5.4", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "21819c989e69bab07e933866ad30c7e3f32984ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/21819c989e69bab07e933866ad30c7e3f32984ba", + "reference": "21819c989e69bab07e933866ad30c7e3f32984ba", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" + }, + "require-dev": { + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.1", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" + }, + "bin": [ + "bin/commonmark" + ], + "type": "library", + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2020-08-18T01:19:12+00:00" + }, + { + "name": "league/flysystem", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a", + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2020-08-23T07:39:11+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "fda190b62b962d96a069fcc414d781db66d65b69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/fda190b62b962d96a069fcc414d781db66d65b69", + "reference": "fda190b62b962d96a069fcc414d781db66d65b69", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.36", + "phpunit/phpunit": "^8.5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2020-08-09T10:34:01+00:00" + }, + { + "name": "maatwebsite/excel", + "version": "3.1.21", + "source": { + "type": "git", + "url": "https://github.com/Maatwebsite/Laravel-Excel.git", + "reference": "405ff5f0dd014a0d5a1fdb8fd6f525a9a1ece3f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/405ff5f0dd014a0d5a1fdb8fd6f525a9a1ece3f6", + "reference": "405ff5f0dd014a0d5a1fdb8fd6f525a9a1ece3f6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0", + "php": "^7.0", + "phpoffice/phpspreadsheet": "^1.14" + }, + "require-dev": { + "orchestra/database": "^5.0", + "orchestra/testbench": "^5.0", + "predis/predis": "^1.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ], + "aliases": { + "Excel": "Maatwebsite\\Excel\\Facades\\Excel" + } + } + }, + "autoload": { + "psr-4": { + "Maatwebsite\\Excel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Patrick Brouwers", + "email": "patrick@maatwebsite.nl" + } + ], + "description": "Supercharged Excel exports and imports in Laravel", + "keywords": [ + "PHPExcel", + "batch", + "csv", + "excel", + "export", + "import", + "laravel", + "php", + "phpspreadsheet" + ], + "funding": [ + { + "url": "https://laravel-excel.com/commercial-support", + "type": "custom" + }, + { + "url": "https://github.com/patrickbrouwers", + "type": "github" + } + ], + "time": "2020-08-06T09:25:20+00:00" + }, + { + "name": "maennchen/zipstream-php", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58", + "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58", + "shasum": "" + }, + "require": { + "myclabs/php-enum": "^1.5", + "php": ">= 7.1", + "psr/http-message": "^1.0", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "ext-zip": "*", + "guzzlehttp/guzzle": ">= 6.3", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": ">= 7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "funding": [ + { + "url": "https://opencollective.com/zipstream", + "type": "open_collective" + } + ], + "time": "2020-05-30T13:11:16+00:00" + }, + { + "name": "markbaker/complex", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "c3131244e29c08d44fefb49e0dd35021e9e39dd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/c3131244e29c08d44fefb49e0dd35021e9e39dd2", + "reference": "c3131244e29c08d44fefb49e0dd35021e9e39dd2", + "shasum": "" + }, + "require": { + "php": "^5.6.0|^7.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "phpcompatibility/php-compatibility": "^9.0", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0|^5.0|^6.0|^7.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^4.8.35|^5.0|^6.0|^7.0", + "sebastian/phpcpd": "2.*", + "squizlabs/php_codesniffer": "^3.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + }, + "files": [ + "classes/src/functions/abs.php", + "classes/src/functions/acos.php", + "classes/src/functions/acosh.php", + "classes/src/functions/acot.php", + "classes/src/functions/acoth.php", + "classes/src/functions/acsc.php", + "classes/src/functions/acsch.php", + "classes/src/functions/argument.php", + "classes/src/functions/asec.php", + "classes/src/functions/asech.php", + "classes/src/functions/asin.php", + "classes/src/functions/asinh.php", + "classes/src/functions/atan.php", + "classes/src/functions/atanh.php", + "classes/src/functions/conjugate.php", + "classes/src/functions/cos.php", + "classes/src/functions/cosh.php", + "classes/src/functions/cot.php", + "classes/src/functions/coth.php", + "classes/src/functions/csc.php", + "classes/src/functions/csch.php", + "classes/src/functions/exp.php", + "classes/src/functions/inverse.php", + "classes/src/functions/ln.php", + "classes/src/functions/log2.php", + "classes/src/functions/log10.php", + "classes/src/functions/negative.php", + "classes/src/functions/pow.php", + "classes/src/functions/rho.php", + "classes/src/functions/sec.php", + "classes/src/functions/sech.php", + "classes/src/functions/sin.php", + "classes/src/functions/sinh.php", + "classes/src/functions/sqrt.php", + "classes/src/functions/tan.php", + "classes/src/functions/tanh.php", + "classes/src/functions/theta.php", + "classes/src/operations/add.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "time": "2020-08-26T19:47:57+00:00" + }, + { + "name": "markbaker/matrix", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "182d44c3b2e3b063468f7481ae3ef71c69dc1409" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/182d44c3b2e3b063468f7481ae3ef71c69dc1409", + "reference": "182d44c3b2e3b063468f7481ae3ef71c69dc1409", + "shasum": "" + }, + "require": { + "php": "^5.6.0|^7.0.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "dev-master", + "phploc/phploc": "^4", + "phpmd/phpmd": "dev-master", + "phpunit/phpunit": "^5.7|^6.0|7.0", + "sebastian/phpcpd": "^3.0", + "squizlabs/php_codesniffer": "^3.0@dev" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + }, + "files": [ + "classes/src/functions/adjoint.php", + "classes/src/functions/antidiagonal.php", + "classes/src/functions/cofactors.php", + "classes/src/functions/determinant.php", + "classes/src/functions/diagonal.php", + "classes/src/functions/identity.php", + "classes/src/functions/inverse.php", + "classes/src/functions/minors.php", + "classes/src/functions/trace.php", + "classes/src/functions/transpose.php", + "classes/src/operations/add.php", + "classes/src/operations/directsum.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "time": "2020-08-28T19:41:55+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f9eee5cec93dfb313a38b6b288741e84e53f02d5", + "reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^6.0", + "graylog2/gelf-php": "^1.4.2", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", + "phpspec/prophecy": "^1.6.1", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <3.0", + "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", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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", + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-07-23T08:41:23+00:00" + }, + { + "name": "myclabs/php-enum", + "version": "1.7.6", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/5f36467c7a87e20fbdc51e524fd8f9d1de80187c", + "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "time": "2020-02-14T08:15:52+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.39.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "0a41ea7f7fedacf307b7a339800e10356a042918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0a41ea7f7fedacf307b7a339800e10356a042918", + "reference": "0a41ea7f7fedacf307b7a339800e10356a042918", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^3.4 || ^4.0 || ^5.0" + }, + "require-dev": { + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "kylekatarnls/multi-tester": "^2.0", + "phpmd/phpmd": "^2.8", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.35", + "phpunit/phpunit": "^7.5 || ^8.0", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev", + "dev-3.x": "3.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "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" + }, + { + "name": "kylekatarnls", + "homepage": "http://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "http://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2020-08-24T12:35:58+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.9.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "88e519766fc58bd46b8265561fb79b54e2e00b28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/88e519766fc58bd46b8265561fb79b54e2e00b28", + "reference": "88e519766fc58bd46b8265561fb79b54e2e00b28", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2020-08-30T16:15:20+00:00" + }, + { + "name": "opis/closure", + "version": "3.5.6", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "e8d34df855b0a0549a300cb8cb4db472556e8aa9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/e8d34df855b0a0549a300cb8cb4db472556e8aa9", + "reference": "e8d34df855b0a0549a300cb8cb4db472556e8aa9", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2020-08-11T08:46:50+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "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", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, + { + "name": "phenx/php-font-lib", + "version": "0.5.2", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-font-lib.git", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "time": "2020-03-08T15:31:32+00:00" + }, + { + "name": "phenx/php-svg-lib", + "version": "v0.3.3", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-svg-lib.git", + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32", + "shasum": "" + }, + "require": { + "sabberworm/php-css-parser": "^8.3" + }, + "require-dev": { + "phpunit/phpunit": "^5.5|^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "time": "2019-09-11T20:02:13+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "1.14.1", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "2383aad5689778470491581442aab38cec41bf1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/2383aad5689778470491581442aab38cec41bf1d", + "reference": "2383aad5689778470491581442aab38cec41bf1d", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "maennchen/zipstream-php": "^2.1", + "markbaker/complex": "^1.4", + "markbaker/matrix": "^1.2", + "php": "^7.2", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0" + }, + "require-dev": { + "dompdf/dompdf": "^0.8.5", + "friendsofphp/php-cs-fixer": "^2.16", + "jpgraph/jpgraph": "^4.0", + "mpdf/mpdf": "^8.0", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^8.5", + "squizlabs/php_codesniffer": "^3.5", + "tecnickcom/tcpdf": "^6.3" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "time": "2020-07-19T09:51:35+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.7.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2020-07-20T17:29:33+00:00" + }, + { + "name": "picqer/php-barcode-generator", + "version": "v0.3", + "source": { + "type": "git", + "url": "https://github.com/picqer/php-barcode-generator.git", + "reference": "2e4d5b1f7f04fdb348d0721ada65963dac6f0c0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/picqer/php-barcode-generator/zipball/2e4d5b1f7f04fdb348d0721ada65963dac6f0c0c", + "reference": "2e4d5b1f7f04fdb348d0721ada65963dac6f0c0c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Picqer\\Barcode\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPLv3" + ], + "authors": [ + { + "name": "Nicola Asuni", + "email": "info@tecnick.com", + "homepage": "http://nicolaasuni.tecnick.com" + }, + { + "name": "Casper Bakker", + "email": "info@picqer.com" + } + ], + "description": "An easy to use, non-bloated, barcode generator in PHP. Creates SVG, PNG, JPG and HTML images from the most used 1D barcode standards.", + "homepage": "http://github.com/picqer/php-barcode-generator", + "keywords": [ + "CODABAR", + "Code11", + "Code93", + "EAN13", + "KIX", + "KIXCODE", + "MSI", + "POSTNET", + "Pharma", + "Standard 2 of 5", + "barcode", + "barcode generator", + "code128", + "code39", + "ean", + "html", + "jpeg", + "jpg", + "php", + "png", + "svg", + "upc" + ], + "time": "2019-01-12T09:29:34+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.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": "2020-03-23T09:12:05+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.10.4", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560", + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560", + "shasum": "" + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1.*", + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", + "php": "^8.0 || ^7.0 || ^5.5.9", + "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", + "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "3.17.*" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.10.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "time": "2020-05-03T19:32:03+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/uuid", + "version": "3.9.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92", + "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92", + "shasum": "" + }, + "require": { + "ext-json": "*", + "paragonie/random_compat": "^1 | ^2 | 9.99.99", + "php": "^5.4 | ^7 | ^8", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^1 | ^2", + "doctrine/annotations": "^1.2", + "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", + "jakub-onderka/php-parallel-lint": "^1", + "mockery/mockery": "^0.9.11 | ^1", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock-phpunit": "^0.3 | ^1.1", + "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + }, + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "time": "2020-02-21T04:36:14+00:00" + }, + { + "name": "rap2hpoutre/laravel-log-viewer", + "version": "v1.6.1", + "source": { + "type": "git", + "url": "https://github.com/rap2hpoutre/laravel-log-viewer.git", + "reference": "40a6a9e8343673bd34a83419335c7b2496e9a477" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rap2hpoutre/laravel-log-viewer/zipball/40a6a9e8343673bd34a83419335c7b2496e9a477", + "reference": "40a6a9e8343673bd34a83419335c7b2496e9a477", + "shasum": "" + }, + "require": { + "illuminate/support": "4.2.*|5.*|^6.0|^7.0", + "php": ">=5.4.0" + }, + "require-dev": { + "orchestra/testbench": "3.7.*", + "phpunit/phpunit": "^7" + }, + "type": "laravel-package", + "extra": { + "laravel": { + "providers": [ + "Rap2hpoutre\\LaravelLogViewer\\LaravelLogViewerServiceProvider" + ] + } + }, + "autoload": { + "classmap": [ + "src/controllers" + ], + "psr-0": { + "Rap2hpoutre\\LaravelLogViewer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "rap2hpoutre", + "email": "raphaelht@gmail.com" + } + ], + "description": "A Laravel log reader", + "keywords": [ + "laravel", + "log", + "log-reader", + "log-viewer", + "logging", + "lumen" + ], + "time": "2020-07-31T04:58:48+00:00" + }, + { + "name": "sabberworm/php-css-parser", + "version": "8.3.1", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "codacy/coverage": "^1.4", + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-0": { + "Sabberworm\\CSS": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "time": "2020-06-01T09:10:00+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.2.3", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/149cfdf118b169f7840bbe3ef0d4bc795d1780c9", + "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9", + "shasum": "" + }, + "require": { + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.1", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "time": "2019-11-12T09:31:26+00:00" + }, + { + "name": "symfony/console", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "b39fd99b9297b67fb7633b7d8083957a97e1e727" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/b39fd99b9297b67fb7633b7d8083957a97e1e727", + "reference": "b39fd99b9297b67fb7633b7d8083957a97e1e727", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-02T07:07:21+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v5.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/e544e24472d4c97b2d11ade7caacd446727c6bf9", + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/debug", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e", + "reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/log": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/http-kernel": "<3.4" + }, + "require-dev": { + "symfony/http-kernel": "^3.4|^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-10T07:47:39+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "2434fb32851f252e4f27691eee0b77c16198db62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/2434fb32851f252e4f27691eee0b77c16198db62", + "reference": "2434fb32851f252e4f27691eee0b77c16198db62", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/log": "~1.0", + "symfony/debug": "^4.4.5", + "symfony/polyfill-php80": "^1.15", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "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 ErrorHandler Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-17T09:56:45+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "3e8ea5ccddd00556b86d69d42f99f1061a704030" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3e8ea5ccddd00556b86d69d42f99f1061a704030", + "reference": "3e8ea5ccddd00556b86d69d42f99f1061a704030", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-13T14:18:44+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "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": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:19:58+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2a78590b2c7e3de5c429628457c47541c58db9c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2a78590b2c7e3de5c429628457c47541c58db9c7", + "reference": "2a78590b2c7e3de5c429628457c47541c58db9c7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-17T09:56:45+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e3e5a62a6631a461954d471e7206e3750dbe8ee1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e3e5a62a6631a461954d471e7206e3750dbe8ee1", + "reference": "e3e5a62a6631a461954d471e7206e3750dbe8ee1", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/mime": "^4.3|^5.0", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/expression-language": "^3.4|^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-17T07:39:58+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "2bb7b90ecdc79813c0bf237b7ff20e79062b5188" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2bb7b90ecdc79813c0bf237b7ff20e79062b5188", + "reference": "2bb7b90ecdc79813c0bf237b7ff20e79062b5188", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/log": "~1.0", + "symfony/error-handler": "^4.4", + "symfony/event-dispatcher": "^4.4", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/console": ">=5", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "twig/twig": "<1.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "^4.3|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^4.3|^5.0", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-02T08:09:29+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "89a2c9b4cb7b5aa516cf55f5194c384f444c81dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/89a2c9b4cb7b5aa516cf55f5194c384f444c81dc", + "reference": "89a2c9b4cb7b5aa516cf55f5194c384f444c81dc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "symfony/dependency-injection": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "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": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-17T10:01:29+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36", + "reference": "6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "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 Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php70": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-04T06:02:08+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "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" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "639447d008615574653fb3bc60d1986d7172eaae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", + "reference": "639447d008615574653fb3bc60d1986d7172eaae", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "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 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "shasum": "" + }, + "require": { + "php": ">=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/process", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/65e70bab62f3da7089a8d4591fb23fbacacb3479", + "reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T08:31:43+00:00" + }, + { + "name": "symfony/routing", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e3387963565da9bae51d1d3ab8041646cc93bd04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e3387963565da9bae51d1d3ab8041646cc93bd04", + "reference": "e3387963565da9bae51d1d3ab8041646cc93bd04", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.2", + "psr/log": "~1.0", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "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 Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-10T07:27:51+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442", + "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:23:11+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "700e6e50174b0cdcf0fa232773bec5c314680575" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/700e6e50174b0cdcf0fa232773bec5c314680575", + "reference": "700e6e50174b0cdcf0fa232773bec5c314680575", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/config": "<3.4", + "symfony/dependency-injection": "<3.4", + "symfony/http-kernel": "<4.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "symfony/translation-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/finder": "~2.8|~3.0|~4.0|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/intl": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-17T09:56:45+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/616a9773c853097607cf9dd6577d5b143ffdcd63", + "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "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": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:23:11+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v4.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "1bef32329f3166486ab7cb88599cae4875632b99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1bef32329f3166486ab7cb88599cae4875632b99", + "reference": "1bef32329f3166486ab7cb88599cae4875632b99", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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 mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-08-17T07:31:35+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.3", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "time": "2020-07-13T06:12:54+00:00" + }, + { + "name": "twilio/sdk", + "version": "6.10.0", + "source": { + "type": "git", + "url": "https://github.com/twilio/twilio-php.git", + "reference": "ed7d54168a437794c4bb9ee52fe173c328402b1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twilio/twilio-php/zipball/ed7d54168a437794c4bb9ee52fe173c328402b1b", + "reference": "ed7d54168a437794c4bb9ee52fe173c328402b1b", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.3 || ^7.0", + "phpunit/phpunit": ">=4.5", + "theseer/phpdox": "^0.12.0" + }, + "suggest": { + "guzzlehttp/guzzle": "An HTTP client to execute the API requests" + }, + "type": "library", + "autoload": { + "psr-4": { + "Twilio\\": "src/Twilio/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Twilio API Team", + "email": "api@twilio.com" + } + ], + "description": "A PHP wrapper for Twilio's API", + "homepage": "http://github.com/twilio/twilio-php", + "keywords": [ + "api", + "sms", + "twilio" + ], + "time": "2020-08-19T19:25:49+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v3.6.7", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2065beda6cbe75e2603686907b2e45f6f3a5ad82", + "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.5.2", + "symfony/polyfill-ctype": "^1.17" + }, + "require-dev": { + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2020-07-14T19:04:52+00:00" + } + ], + "packages-dev": [ + { + "name": "barryvdh/laravel-debugbar", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-debugbar.git", + "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/91ee8b3acf0d72a4937f4855bd245acbda9910ac", + "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac", + "shasum": "" + }, + "require": { + "illuminate/routing": "^5.5|^6|^7", + "illuminate/session": "^5.5|^6|^7", + "illuminate/support": "^5.5|^6|^7", + "maximebf/debugbar": "^1.16.3", + "php": ">=7.0", + "symfony/debug": "^3|^4|^5", + "symfony/finder": "^3|^4|^5" + }, + "require-dev": { + "orchestra/testbench": "^3.5|^4.0|^5.0", + "phpunit/phpunit": "^6.0|^7.0|^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ], + "aliases": { + "Debugbar": "Barryvdh\\Debugbar\\Facade" + } + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "debug", + "debugbar", + "laravel", + "profiler", + "webprofiler" + ], + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2020-08-30T07:08:17+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.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://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-05-29T17:27:14+00:00" + }, + { + "name": "facade/flare-client-php", + "version": "1.3.5", + "source": { + "type": "git", + "url": "https://github.com/facade/flare-client-php.git", + "reference": "25907a113bfc212a38d458ae365bfb902b4e7fb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/25907a113bfc212a38d458ae365bfb902b4e7fb8", + "reference": "25907a113bfc212a38d458ae365bfb902b4e7fb8", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "~1.0", + "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", + "php": "^7.1", + "symfony/http-foundation": "^3.3|^4.1|^5.0", + "symfony/mime": "^3.4|^4.0|^5.1", + "symfony/var-dumper": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "larapack/dd": "^1.1", + "phpunit/phpunit": "^7.5.16", + "spatie/phpunit-snapshot-assertions": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Facade\\FlareClient\\": "src" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/facade/flare-client-php", + "keywords": [ + "exception", + "facade", + "flare", + "reporting" + ], + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2020-08-26T18:06:23+00:00" + }, + { + "name": "facade/ignition", + "version": "1.16.3", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition.git", + "reference": "19674150bb46a4de0ba138c747f538fe7be11dbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition/zipball/19674150bb46a4de0ba138c747f538fe7be11dbc", + "reference": "19674150bb46a4de0ba138c747f538fe7be11dbc", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "facade/flare-client-php": "^1.3", + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.4", + "illuminate/support": "~5.5.0 || ~5.6.0 || ~5.7.0 || ~5.8.0 || ^6.0", + "monolog/monolog": "^1.12 || ^2.0", + "php": "^7.1", + "scrivo/highlight.php": "^9.15", + "symfony/console": "^3.4 || ^4.0", + "symfony/var-dumper": "^3.4 || ^4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "mockery/mockery": "^1.2", + "orchestra/testbench": "^3.5 || ^3.6 || ^3.7 || ^3.8 || ^4.0" + }, + "suggest": { + "laravel/telescope": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Facade\\Ignition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Facade\\Ignition\\Facades\\Flare" + } + } + }, + "autoload": { + "psr-4": { + "Facade\\Ignition\\": "src" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://github.com/facade/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "time": "2020-07-13T15:54:05+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "aeab1ce8b68b188a43e81758e750151ad7da796b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/aeab1ce8b68b188a43e81758e750151ad7da796b", + "reference": "aeab1ce8b68b188a43e81758e750151ad7da796b", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "phpunit/phpunit": "^7.5|^8.0", + "vimeo/psalm": "^3.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "time": "2020-07-14T10:10:28+00:00" + }, + { + "name": "filp/whoops", + "version": "2.7.3", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/5d5fe9bb3d656b514d455645b3addc5f7ba7714d", + "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "time": "2020-06-14T09:00:00+00:00" + }, + { + "name": "fzaninotto/faker", + "version": "v1.9.1", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "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": "2019-12-12T13:22:17+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ - "log", - "logging", - "psr-3" + "test" ], - "time": "2017-06-19T01:22:40+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { - "name": "nesbot/carbon", - "version": "1.27.0", + "name": "jakub-onderka/php-console-color", + "version": "v0.2", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "ef81c39b67200dcd7401c24363dcac05ac3a4fe9" + "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ef81c39b67200dcd7401c24363dcac05ac3a4fe9", - "reference": "ef81c39b67200dcd7401c24363dcac05ac3a4fe9", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", + "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/translation": "~2.6 || ~3.0 || ~4.0" + "php": ">=5.4.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "^4.8.35 || ^5.7" + "jakub-onderka/php-code-style": "1.0", + "jakub-onderka/php-parallel-lint": "1.0", + "jakub-onderka/php-var-dump-check": "0.*", + "phpunit/phpunit": "~4.3", + "squizlabs/php_codesniffer": "1.*" }, "type": "library", "autoload": { "psr-4": { - "": "src/" + "JakubOnderka\\PhpConsoleColor\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "name": "Jakub Onderka", + "email": "jakub.onderka@gmail.com" } ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "time": "2018-04-23T09:02:57+00:00" + "abandoned": "php-parallel-lint/php-console-color", + "time": "2018-09-29T17:23:10+00:00" }, { - "name": "nikic/php-parser", - "version": "v0.9.5", + "name": "jakub-onderka/php-console-highlighter", + "version": "v0.4", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb" + "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb", - "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.2" + "jakub-onderka/php-console-color": "~0.2", + "php": ">=5.4.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9-dev" - } + "require-dev": { + "jakub-onderka/php-code-style": "~1.0", + "jakub-onderka/php-parallel-lint": "~1.0", + "jakub-onderka/php-var-dump-check": "~0.1", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5" }, + "type": "library", "autoload": { - "psr-0": { - "PHPParser": "lib/" + "psr-4": { + "JakubOnderka\\PhpConsoleHighlighter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Jakub Onderka", + "email": "acci@acci.cz", + "homepage": "http://www.acci.cz/" } ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "time": "2014-07-23T18:24:17+00:00" + "description": "Highlight PHP code in terminal", + "abandoned": "php-parallel-lint/php-console-highlighter", + "time": "2018-09-29T18:48:56+00:00" }, { - "name": "paragonie/random_compat", - "version": "v1.4.3", + "name": "maximebf/debugbar", + "version": "v1.16.3", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "9b3899e3c3ddde89016f576edb8c489708ad64cd" + "url": "https://github.com/maximebf/php-debugbar.git", + "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/9b3899e3c3ddde89016f576edb8c489708ad64cd", - "reference": "9b3899e3c3ddde89016f576edb8c489708ad64cd", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/1a1605b8e9bacb34cc0c6278206d699772e1d372", + "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": "^7.1", + "psr/log": "^1.0", + "symfony/var-dumper": "^2.6|^3|^4|^5" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*" + "phpunit/phpunit": "^5" }, "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.16-dev" + } + }, "autoload": { - "files": [ - "lib/random.php" - ] + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -847,99 +5720,179 @@ ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/maximebf/php-debugbar", "keywords": [ - "csprng", - "pseudorandom", - "random" + "debug", + "debugbar" ], - "time": "2018-04-04T21:48:54+00:00" + "time": "2020-05-06T07:06:27+00:00" }, { - "name": "patchwork/utf8", - "version": "v1.3.1", + "name": "mockery/mockery", + "version": "1.3.3", "source": { "type": "git", - "url": "https://github.com/tchwork/utf8.git", - "reference": "30ec6451aec7d2536f0af8fe535f70c764f2c47a" + "url": "https://github.com/mockery/mockery.git", + "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tchwork/utf8/zipball/30ec6451aec7d2536f0af8fe535f70c764f2c47a", - "reference": "30ec6451aec7d2536f0af8fe535f70c764f2c47a", + "url": "https://api.github.com/repos/mockery/mockery/zipball/60fa2f67f6e4d3634bb4a45ff3171fa52215800d", + "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d", "shasum": "" }, "require": { - "lib-pcre": ">=7.3", - "php": ">=5.3.0" + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=5.6.0" }, - "suggest": { - "ext-iconv": "Use iconv for best performance", - "ext-intl": "Use Intl for best performance", - "ext-mbstring": "Use Mbstring for best performance", - "ext-wfio": "Use WFIO for UTF-8 filesystem access on Windows" + "require-dev": { + "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { - "psr-4": { - "Patchwork\\": "src/Patchwork/" - }, - "classmap": [ - "src/Normalizer.php" - ] + "psr-0": { + "Mockery": "library/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "(Apache-2.0 or GPL-2.0)" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" } ], - "description": "Portable and performant UTF-8, Unicode and Grapheme Clusters for PHP", - "homepage": "https://github.com/tchwork/utf8", + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", "keywords": [ - "grapheme", - "i18n", - "unicode", - "utf-8", - "utf8" + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" ], - "time": "2016-05-18T13:57:10+00:00" + "time": "2020-08-11T18:10:21+00:00" }, { - "name": "pda/pheanstalk", - "version": "v2.1.1", + "name": "myclabs/deep-copy", + "version": "1.10.1", "source": { "type": "git", - "url": "https://github.com/pda/pheanstalk.git", - "reference": "672eb5cc9049d61e4eb68d30f0f33de65a947e6b" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pda/pheanstalk/zipball/672eb5cc9049d61e4eb68d30f0f33de65a947e6b", - "reference": "672eb5cc9049d61e4eb68d30f0f33de65a947e6b", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { - "psr-0": { - "Pheanstalk": "classes/" + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-06-29T13:22:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "af42d339fe2742295a54f6fdd42aaa6f8c4aca68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/af42d339fe2742295a54f6fdd42aaa6f8c4aca68", + "reference": "af42d339fe2742295a54f6fdd42aaa6f8c4aca68", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.1.4", + "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", + "php": "^7.1", + "symfony/console": "~2.8|~3.3|~4.0" + }, + "require-dev": { + "laravel/framework": "5.8.*", + "nunomaduro/larastan": "^0.3.0", + "phpstan/phpstan": "^0.11", + "phpunit/phpunit": "~8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -948,1447 +5901,1447 @@ ], "authors": [ { - "name": "Paul Annesley", - "email": "paul@annesley.cc", - "homepage": "http://paul.annesley.cc/", - "role": "Developer" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "PHP client for beanstalkd queue", - "homepage": "https://github.com/pda/pheanstalk", + "description": "Cli error handling for console/command-line PHP applications.", "keywords": [ - "beanstalkd" + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" ], - "time": "2014-12-02T22:44:56+00:00" + "time": "2019-03-07T21:35:13+00:00" }, { - "name": "phenx/php-font-lib", - "version": "0.2.2", + "name": "phar-io/manifest", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/PhenX/php-font-lib.git", - "reference": "c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82" + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82", - "reference": "c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", "shasum": "" }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "classmap": [ - "classes/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "A library to read, parse, export and make subsets of different types of font files.", - "homepage": "https://github.com/PhenX/php-font-lib", - "time": "2014-02-01T15:22:28+00:00" + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" }, { - "name": "phpoffice/phpexcel", - "version": "1.8.1", + "name": "phar-io/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/PHPOffice/PHPExcel.git", - "reference": "372c7cbb695a6f6f1e62649381aeaa37e7e70b32" + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PHPExcel/zipball/372c7cbb695a6f6f1e62649381aeaa37e7e70b32", - "reference": "372c7cbb695a6f6f1e62649381aeaa37e7e70b32", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", "shasum": "" }, "require": { - "ext-xml": "*", - "ext-xmlwriter": "*", - "php": ">=5.2.0" + "php": "^5.6 || ^7.0" }, "type": "library", "autoload": { - "psr-0": { - "PHPExcel": "Classes/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL" + "BSD-3-Clause" ], "authors": [ { - "name": "Maarten Balliauw", - "homepage": "http://blog.maartenballiauw.be" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Mark Baker" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "Franck Lefevre", - "homepage": "http://blog.rootslabs.net" - }, + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "name": "Erik Tilt" + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" } ], - "description": "PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", - "homepage": "http://phpexcel.codeplex.com", + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "OpenXML", - "excel", - "php", - "spreadsheet", - "xls", - "xlsx" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], - "abandoned": "phpoffice/phpspreadsheet", - "time": "2015-05-01T07:00:55+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { - "name": "phpseclib/phpseclib", - "version": "0.3.10", + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.1", "source": { "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d15bba1edcc7c89e09cc74c5d961317a8b947bf4", - "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d870572532cd70bc3fab58f2e23ad423c8404c44", + "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44", "shasum": "" }, "require": { - "php": ">=5.0.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "~4.0", - "sami/sami": "~2.0", - "squizlabs/php_codesniffer": "~1.5" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.", - "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 4.3.3." + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.3-dev" + "dev-master": "5.x-dev" } }, "autoload": { - "psr-0": { - "Crypt": "phpseclib/", - "File": "phpseclib/", - "Math": "phpseclib/", - "Net": "phpseclib/", - "System": "phpseclib/" - }, - "files": [ - "phpseclib/Crypt/Random.php" - ] + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "phpseclib/" - ], "license": [ "MIT" ], "authors": [ { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" }, { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2020-08-15T11:14:08+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.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": "2015-01-28T21:50:33+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2020-06-27T10:12:23+00:00" }, { - "name": "picqer/php-barcode-generator", - "version": "v0.2.2", + "name": "phpspec/prophecy", + "version": "1.11.1", "source": { "type": "git", - "url": "https://github.com/picqer/php-barcode-generator.git", - "reference": "f754cbd592f3131af144dfcc6a3090fd0f6d1793" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/picqer/php-barcode-generator/zipball/f754cbd592f3131af144dfcc6a3090fd0f6d1793", - "reference": "f754cbd592f3131af144dfcc6a3090fd0f6d1793", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", + "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", "shasum": "" }, "require": { - "php": ">=5.4.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2", + "phpdocumentor/reflection-docblock": "^5.0", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpunit/phpunit": "^5.3" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.x-dev" + } }, - "type": "library", "autoload": { "psr-4": { - "Picqer\\Barcode\\": "src" + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPLv3" + "MIT" ], "authors": [ { - "name": "Nicola Asuni", - "email": "info@tecnick.com", - "homepage": "http://nicolaasuni.tecnick.com" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" }, { - "name": "Casper Bakker", - "email": "info@picqer.com" + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" } ], - "description": "An easy to use, non-bloated, barcode generator in PHP. Creates SVG, PNG, JPG and HTML images from the most used 1D barcode standards.", - "homepage": "http://github.com/picqer/php-barcode-generator", + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ - "CODABAR", - "Code11", - "Code93", - "EAN13", - "KIX", - "KIXCODE", - "MSI", - "POSTNET", - "Pharma", - "Standard 2 of 5", - "barcode", - "barcode generator", - "code128", - "code39", - "ean", - "html", - "jpeg", - "jpg", - "php", - "png", - "svg", - "upc" + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" ], - "time": "2017-09-28T19:23:19+00:00" + "time": "2020-07-08T12:44:21+00:00" }, { - "name": "predis/predis", - "version": "v0.8.7", + "name": "phpunit/php-code-coverage", + "version": "7.0.10", "source": { "type": "git", - "url": "https://github.com/nrk/predis.git", - "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nrk/predis/zipball/4123fcd85d61354c6c9900db76c9597dbd129bf6", - "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", + "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", "shasum": "" }, "require": { - "php": ">=5.3.2" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.1.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.2.2", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1.3" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^8.2.2" }, "suggest": { - "ext-curl": "Allows access to Webdis when paired with phpiredis", - "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + "ext-xdebug": "^2.7.2" }, "type": "library", - "autoload": { - "psr-0": { - "Predis": "lib/" + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Daniele Alessandri", - "email": "suppakilla@gmail.com", - "homepage": "http://clorophilla.net" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Flexible and feature-complete PHP client library for Redis", - "homepage": "http://github.com/nrk/predis", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "nosql", - "predis", - "redis" + "coverage", + "testing", + "xunit" ], - "time": "2014-08-01T09:43:10+00:00" + "time": "2019-11-20T13:55:58+00:00" }, { - "name": "psr/log", - "version": "1.0.2", + "name": "phpunit/php-file-iterator", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "log", - "psr", - "psr-3" + "filesystem", + "iterator" ], - "time": "2016-10-10T12:19:37+00:00" + "time": "2018-09-13T20:33:42+00:00" }, { - "name": "stack/builder", - "version": "v1.0.5", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/stackphp/builder.git", - "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stackphp/builder/zipball/fb3d136d04c6be41120ebf8c0cc71fe9507d750a", - "reference": "fb3d136d04c6be41120ebf8c0cc71fe9507d750a", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "php": ">=5.3.0", - "symfony/http-foundation": "~2.1|~3.0|~4.0", - "symfony/http-kernel": "~2.1|~3.0|~4.0" - }, - "require-dev": { - "silex/silex": "~1.0" + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { - "psr-0": { - "Stack": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Builder for stack middlewares based on HttpKernelInterface.", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "stack" + "template" ], - "time": "2017-11-18T14:57:29+00:00" + "time": "2015-06-21T13:50:34+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "v5.4.9", + "name": "phpunit/php-timer", + "version": "2.1.2", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91", - "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1" }, "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "2.1-dev" } }, "autoload": { - "files": [ - "lib/swift_required.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "email", - "mail", - "mailer" + "timer" ], - "time": "2018-01-23T07:37:21+00:00" + "time": "2019-06-07T04:22:29+00:00" }, { - "name": "symfony/browser-kit", - "version": "v2.7.46", + "name": "phpunit/php-token-stream", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/browser-kit.git", - "reference": "b49a059de813b0abda4223c48e766cae2c44bc7d" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/b49a059de813b0abda4223c48e766cae2c44bc7d", - "reference": "b49a059de813b0abda4223c48e766cae2c44bc7d", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/dom-crawler": "~2.1" + "ext-tokenizer": "*", + "php": "^7.1" }, "require-dev": { - "symfony/css-selector": "^2.0.5", - "symfony/process": "~2.3.34|^2.7.6" - }, - "suggest": { - "symfony/process": "" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "3.1-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\BrowserKit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony BrowserKit Component", - "homepage": "https://symfony.com", - "time": "2018-03-16T18:29:50+00:00" + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "abandoned": true, + "time": "2019-09-17T06:23:10+00:00" }, { - "name": "symfony/console", - "version": "v2.7.46", + "name": "phpunit/phpunit", + "version": "8.5.8", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "27874602b1a3089cb99c427cc24fa99a10b27a58" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/27874602b1a3089cb99c427cc24fa99a10b27a58", - "reference": "27874602b1a3089cb99c427cc24fa99a10b27a58", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/34c18baa6a44f1d1fbf0338907139e9dce95b997", + "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/debug": "^2.7.2" + "doctrine/instantiator": "^1.2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.9.1", + "phar-io/manifest": "^1.0.3", + "phar-io/version": "^2.0.1", + "php": "^7.2", + "phpspec/prophecy": "^1.8.1", + "phpunit/php-code-coverage": "^7.0.7", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.2", + "sebastian/exporter": "^3.1.1", + "sebastian/global-state": "^3.0.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", + "sebastian/version": "^2.0.1" }, "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1", - "symfony/process": "~2.1" + "ext-pdo": "*" }, "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0.0" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "8.5-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2018-04-22T05:55:13+00:00" + "time": "2020-06-22T07:06:58+00:00" }, { - "name": "symfony/css-selector", - "version": "v2.7.46", + "name": "scrivo/highlight.php", + "version": "v9.18.1.2", "source": { "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "0b490439a4287f6502426bcb0418e707c2eebe5e" + "url": "https://github.com/scrivo/highlight.php.git", + "reference": "efb6e445494a9458aa59b0af5edfa4bdcc6809d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/0b490439a4287f6502426bcb0418e707c2eebe5e", - "reference": "0b490439a4287f6502426bcb0418e707c2eebe5e", + "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/efb6e445494a9458aa59b0af5edfa4bdcc6809d9", + "reference": "efb6e445494a9458aa59b0af5edfa4bdcc6809d9", "shasum": "" }, "require": { - "php": ">=5.3.9" + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=5.4" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } + "require-dev": { + "phpunit/phpunit": "^4.8|^5.7", + "sabberworm/php-css-parser": "^8.3", + "symfony/finder": "^2.8|^3.4", + "symfony/var-dumper": "^2.8|^3.4" + }, + "suggest": { + "ext-dom": "Needed to make use of the features in the utilities namespace" }, + "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" + "psr-0": { + "Highlight\\": "", + "HighlightUtilities\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "HighlightUtilities/functions.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" + "name": "Geert Bergman", + "homepage": "http://www.scrivo.org/", + "role": "Project Author" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Vladimir Jimenez", + "homepage": "https://allejo.io", + "role": "Maintainer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Martin Folkers", + "homepage": "https://twobrain.io", + "role": "Contributor" } ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com", - "time": "2018-03-08T08:22:32+00:00" + "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js", + "keywords": [ + "code", + "highlight", + "highlight.js", + "highlight.php", + "syntax" + ], + "funding": [ + { + "url": "https://github.com/allejo", + "type": "github" + } + ], + "time": "2020-08-27T03:24:44+00:00" }, { - "name": "symfony/debug", - "version": "v2.7.46", + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "e191af723b7005f2acc2889768143adfd4992e94" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e191af723b7005f2acc2889768143adfd4992e94", - "reference": "e191af723b7005f2acc2889768143adfd4992e94", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.3.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" + "php": "^5.6 || ^7.0" }, "require-dev": { - "symfony/class-loader": "~2.2", - "symfony/http-kernel": "~2.3.24|~2.5.9|^2.6.2" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2018-04-03T05:05:54+00:00" + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" }, { - "name": "symfony/dom-crawler", - "version": "v2.7.46", + "name": "sebastian/comparator", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "fafe026adbe3311bbf2f27e8cdb6b4de42357e2b" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/fafe026adbe3311bbf2f27e8cdb6b4de42357e2b", - "reference": "fafe026adbe3311bbf2f27e8cdb6b4de42357e2b", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "symfony/css-selector": "~2.3" - }, - "suggest": { - "symfony/css-selector": "" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony DomCrawler Component", - "homepage": "https://symfony.com", - "time": "2018-03-16T10:33:23+00:00" + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v2.8.39", + "name": "sebastian/diff", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9b69aad7d4c086dc94ebade2d5eb9145da5dac8c" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9b69aad7d4c086dc94ebade2d5eb9145da5dac8c", - "reference": "9b69aad7d4c086dc94ebade2d5eb9145da5dac8c", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.1" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^2.0.5|~3.0.0", - "symfony/dependency-injection": "~2.6|~3.0.0", - "symfony/expression-language": "~2.6|~3.0.0", - "symfony/stopwatch": "~2.3|~3.0.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2018-04-06T07:35:03+00:00" + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" }, { - "name": "symfony/filesystem", - "version": "v2.8.39", + "name": "sebastian/environment", + "version": "4.2.3", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "125403a59e4cb4e3ebf46d0162fabcde613d2b97" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/125403a59e4cb4e3ebf46d0162fabcde613d2b97", - "reference": "125403a59e4cb4e3ebf46d0162fabcde613d2b97", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2018-02-19T16:23:47+00:00" + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2019-11-20T08:46:58+00:00" }, { - "name": "symfony/finder", - "version": "v2.7.46", + "name": "sebastian/exporter", + "version": "3.1.2", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "79fe1ed67eda99c2d4282d8c52f6d9220bf00740" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/79fe1ed67eda99c2d4282d8c52f6d9220bf00740", - "reference": "79fe1ed67eda99c2d4282d8c52f6d9220bf00740", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2018-04-04T06:34:32+00:00" + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2019-09-14T09:02:43+00:00" }, { - "name": "symfony/http-foundation", - "version": "v2.7.46", + "name": "sebastian/global-state", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "1d170f9114695ed0026f6d8ff46cdd4ca5e1d5c2" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/1d170f9114695ed0026f6d8ff46cdd4ca5e1d5c2", - "reference": "1d170f9114695ed0026f6d8ff46cdd4ca5e1d5c2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-mbstring": "~1.1" + "php": "^7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "symfony/expression-language": "~2.4" + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, "classmap": [ - "Resources/stubs" - ], - "exclude-from-classmap": [ - "/Tests/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony HttpFoundation Component", - "homepage": "https://symfony.com", - "time": "2018-04-23T12:28:22+00:00" + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2019-02-01T05:30:01+00:00" }, { - "name": "symfony/http-kernel", - "version": "v2.7.46", + "name": "sebastian/object-enumerator", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "980328e9ffa695acc6642890f642bed782930225" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/980328e9ffa695acc6642890f642bed782930225", - "reference": "980328e9ffa695acc6642890f642bed782930225", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.3.9", - "psr/log": "~1.0", - "symfony/debug": "^2.6.2", - "symfony/event-dispatcher": "^2.6.7", - "symfony/http-foundation": "~2.7.36|^2.8.29" - }, - "conflict": { - "symfony/config": "<2.7", - "twig/twig": "<1.34|<2.4,>=2" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "symfony/browser-kit": "~2.3", - "symfony/class-loader": "~2.1", - "symfony/config": "~2.7", - "symfony/console": "~2.3", - "symfony/css-selector": "^2.0.5", - "symfony/dependency-injection": "~2.2", - "symfony/dom-crawler": "^2.0.5", - "symfony/expression-language": "~2.4", - "symfony/finder": "^2.0.5", - "symfony/process": "^2.0.5", - "symfony/routing": "~2.2", - "symfony/stopwatch": "~2.3", - "symfony/templating": "~2.2", - "symfony/translation": "^2.0.5", - "symfony/var-dumper": "~2.6" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/class-loader": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "", - "symfony/var-dumper": "" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony HttpKernel Component", - "homepage": "https://symfony.com", - "time": "2018-04-27T05:41:32+00:00" + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", + "name": "sebastian/object-reflector", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.1-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2018-04-26T10:06:28+00:00" + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" }, { - "name": "symfony/process", - "version": "v2.7.46", + "name": "sebastian/recursion-context", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "9033c467f21f0144fa3e4a7845cba8a0a68522b2" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/9033c467f21f0144fa3e4a7845cba8a0a68522b2", - "reference": "9033c467f21f0144fa3e4a7845cba8a0a68522b2", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2018-04-03T05:05:54+00:00" + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" }, { - "name": "symfony/routing", - "version": "v2.7.46", + "name": "sebastian/resource-operations", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "33bd5882f201f9a3b7dd9640b95710b71304c4fb" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/33bd5882f201f9a3b7dd9640b95710b71304c4fb", - "reference": "33bd5882f201f9a3b7dd9640b95710b71304c4fb", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", "shasum": "" }, "require": { - "php": ">=5.3.9" - }, - "conflict": { - "symfony/config": "<2.7" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "doctrine/common": "~2.2", - "psr/log": "~1.0", - "symfony/config": "~2.7", - "symfony/expression-language": "~2.4", - "symfony/http-foundation": "~2.3", - "symfony/yaml": "^2.0.5" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "php": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony Routing Component", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "time": "2018-02-28T09:36:59+00:00" + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" }, { - "name": "symfony/security-core", - "version": "v2.7.46", + "name": "sebastian/type", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/security-core.git", - "reference": "a5d7f9f6fc8ace1059c7066ad787d054619e4068" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/a5d7f9f6fc8ace1059c7066ad787d054619e4068", - "reference": "a5d7f9f6fc8ace1059c7066ad787d054619e4068", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0", - "php": ">=5.3.9" + "php": "^7.2" }, "require-dev": { - "ircmaxell/password-compat": "1.0.*", - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1", - "symfony/expression-language": "~2.6", - "symfony/http-foundation": "~2.4", - "symfony/validator": "~2.7.25|^2.8.18" - }, - "suggest": { - "ircmaxell/password-compat": "For using the BCrypt password encoder in PHP <5.5", - "symfony/event-dispatcher": "", - "symfony/expression-language": "For using the expression voter", - "symfony/http-foundation": "", - "symfony/validator": "For using the user password constraint" + "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "1.1-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\Core\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Security Component - Core Library", - "homepage": "https://symfony.com", - "time": "2018-04-25T11:44:04+00:00" + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "time": "2019-07-02T08:10:15+00:00" }, { - "name": "symfony/translation", - "version": "v2.7.46", + "name": "sebastian/version", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "bf521bfd1ba3f532810a1b3e2a81e8bfa15dce47" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bf521bfd1ba3f532810a1b3e2a81e8bfa15dce47", - "reference": "bf521bfd1ba3f532810a1b3e2a81e8bfa15dce47", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "php": ">=5.3.9" - }, - "conflict": { - "symfony/config": "<2.7" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.7", - "symfony/intl": "~2.7.25|^2.8.18", - "symfony/yaml": "~2.2" - }, - "suggest": { - "psr/log": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Translation Component", - "homepage": "https://symfony.com", - "time": "2018-01-17T08:38:26+00:00" + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "1.5.5", + "name": "theseer/tokenizer", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "9753fc340726e327e4d48b7c0604f85475ae0bc3" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/9753fc340726e327e4d48b7c0604f85475ae0bc3", - "reference": "9753fc340726e327e4d48b7c0604f85475ae0bc3", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { - "php": ">=5.3.0", - "symfony/css-selector": "~2.1|~3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5.x-dev" - } - }, "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "authors": [ { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", + "name": "Arne Blankerts", + "email": "arne@blankerts.de", "role": "Developer" } ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "time": "2015-12-08T16:14:14+00:00" - } - ], - "packages-dev": [ + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" + }, { - "name": "way/generators", - "version": "2.6.1", + "name": "webmozart/assert", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/JeffreyWay/Laravel-4-Generators.git", - "reference": "484d379c6bc1d38c75e4f52f74efcbcd11f7dd2c" + "url": "https://github.com/webmozart/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JeffreyWay/Laravel-4-Generators/zipball/484d379c6bc1d38c75e4f52f74efcbcd11f7dd2c", - "reference": "484d379c6bc1d38c75e4f52f74efcbcd11f7dd2c", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "illuminate/support": "~4.0", - "php": ">=5.4.0" + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" }, "require-dev": { - "behat/behat": "~2.5.1", - "behat/mink": "~1.5.0", - "behat/mink-extension": "~1.2.0", - "behat/mink-goutte-driver": "~1.0.9", - "behat/mink-selenium2-driver": "~1.1.1", - "phpspec/phpspec": "~2.0", - "phpunit/phpunit": "~3.7" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", "autoload": { - "psr-0": { - "Way\\Generators": "src/" + "psr-4": { + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2397,21 +7350,27 @@ ], "authors": [ { - "name": "Jeffrey Way", - "email": "jeffrey@jeffrey-way.com", - "homepage": "http://jeffrye-way.com", - "role": "Developer" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Rapidly generate resources, migrations, models, and much more.", - "time": "2014-05-27T14:21:26+00:00" + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], - "minimum-stability": "stable", + "minimum-stability": "dev", "stability-flags": [], - "prefer-stable": false, + "prefer-stable": true, "prefer-lowest": false, - "platform": [], - "platform-dev": [] + "platform": { + "php": "^7.2" + }, + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/config/app.php b/config/app.php new file mode 100755 index 00000000..d41ce247 --- /dev/null +++ b/config/app.php @@ -0,0 +1,227 @@ + env('APP_NAME', 'cloudschool'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services your application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://ce.cloudschoolbd.com'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => env('APP_TIMEZONE', 'Asia/Dhaka'), + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + App\Providers\ComposerServiceProvider::class, + App\Providers\PermissionsServiceProvider::class, + // Hrshadhin\Userstamps\UserstampsServiceProvider::class, + Collective\Html\HtmlServiceProvider::class, + Barryvdh\DomPDF\ServiceProvider::class, + Rap2hpoutre\LaravelLogViewer\LaravelLogViewerServiceProvider::class, + + + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Notification' => Illuminate\Support\Facades\Notification::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + 'AppHelper' => App\Http\Helpers\AppHelper::class, + 'ReportHelper' => App\Http\Helpers\ReportHelper::class, + 'Form' => Collective\Html\FormFacade::class, + 'Html' => Collective\Html\HtmlFacade::class, + 'PDF' => Barryvdh\DomPDF\Facade::class, + + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100755 index 00000000..d0db01ae --- /dev/null +++ b/config/auth.php @@ -0,0 +1,102 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session", "token" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + + 'api' => [ + 'driver' => 'token', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'cache-user', + 'model' => App\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that the reset token should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + ], + ], + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100755 index 00000000..3ca45eaa --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,59 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'encrypted' => true, + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100755 index 00000000..e5712ae1 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,96 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => env( + 'CACHE_PREFIX', + Str::slug(env('APP_NAME', 'laravel'), '_').'_cache' + ), + +]; diff --git a/config/database.php b/config/database.php new file mode 100755 index 00000000..6003f30e --- /dev/null +++ b/config/database.php @@ -0,0 +1,121 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | For long key size replace utf8mb4 to utf8 for both charset and collation + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', + 'strict' => true, + 'engine' => null, + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'schema' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer set of commands than a typical key-value systems + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => 'predis', + + 'default' => [ + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => 0, + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100755 index 00000000..77fa5ded --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,69 @@ + env('FILESYSTEM_DRIVER', 'local'), + + /* + |-------------------------------------------------------------------------- + | Default Cloud Filesystem Disk + |-------------------------------------------------------------------------- + | + | Many applications store files both locally and in the cloud. For this + | reason, you may specify a default "cloud" driver here. This driver + | will be bound as the Cloud disk implementation in the container. + | + */ + + 'cloud' => env('FILESYSTEM_CLOUD', 's3'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + ], + + ], + +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100755 index 00000000..d3c8e2fb --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 1024, + 'threads' => 2, + 'time' => 2, + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100755 index 00000000..4e7c392a --- /dev/null +++ b/config/logging.php @@ -0,0 +1,110 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + ], + + 'single' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + ], + 'smsLog' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/sms.log'), + 'level' => 'debug', + ], + 'studentabsentlog' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/student-absent-job.log'), + 'level' => 'debug', + ], + 'employeeabsentlog' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/employee-absent-job.log'), + 'level' => 'debug', + ], + 'studentattendancelog' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/student-attendance-upload.log'), + 'level' => 'debug', + ], + 'employeeattendancelog' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/employee-attendance-upload.log'), + 'level' => 'debug', + ], + 'bulk' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/bulk-process.log'), + 'level' => 'debug', + ], + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + 'days' => 7, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100755 index 00000000..bb92224c --- /dev/null +++ b/config/mail.php @@ -0,0 +1,123 @@ + env('MAIL_DRIVER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Address + |-------------------------------------------------------------------------- + | + | Here you may provide the host address of the SMTP server used by your + | applications. A default option is provided that is compatible with + | the Mailgun mail service which will provide reliable deliveries. + | + */ + + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Port + |-------------------------------------------------------------------------- + | + | This is the SMTP port used by your application to deliver e-mails to + | users of the application. Like the host we have set this value to + | stay compatible with the Mailgun e-mail application by default. + | + */ + + 'port' => env('MAIL_PORT', 587), + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | E-Mail Encryption Protocol + |-------------------------------------------------------------------------- + | + | Here you may specify the encryption protocol that should be used when + | the application send e-mail messages. A sensible default using the + | transport layer security protocol should provide great security. + | + */ + + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + + /* + |-------------------------------------------------------------------------- + | SMTP Server Username + |-------------------------------------------------------------------------- + | + | If your SMTP server requires a username for authentication, you should + | set it here. This will get used to authenticate with your server on + | connection. You may also set the "password" value below this one. + | + */ + + 'username' => env('MAIL_USERNAME'), + + 'password' => env('MAIL_PASSWORD'), + + /* + |-------------------------------------------------------------------------- + | Sendmail System Path + |-------------------------------------------------------------------------- + | + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. + | + */ + + 'sendmail' => '/usr/sbin/sendmail -bs', + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100755 index 00000000..38326eff --- /dev/null +++ b/config/queue.php @@ -0,0 +1,86 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('SQS_KEY', 'your-public-key'), + 'secret' => env('SQS_SECRET', 'your-secret-key'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'your-queue-name'), + 'region' => env('SQS_REGION', 'us-east-1'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => null, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100755 index 00000000..aa1f7f82 --- /dev/null +++ b/config/services.php @@ -0,0 +1,38 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + ], + + 'ses' => [ + 'key' => env('SES_KEY'), + 'secret' => env('SES_SECRET'), + 'region' => env('SES_REGION', 'us-east-1'), + ], + + 'sparkpost' => [ + 'secret' => env('SPARKPOST_SECRET'), + ], + + 'stripe' => [ + 'model' => App\User::class, + 'key' => env('STRIPE_KEY'), + 'secret' => env('STRIPE_SECRET'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100755 index 00000000..25fc722a --- /dev/null +++ b/config/session.php @@ -0,0 +1,199 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using the "apc" or "memcached" session drivers, you may specify a + | cache store that should be used for these sessions. This value must + | correspond with one of the application's configured cache stores. + | + */ + + 'store' => null, + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE', false), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | do not enable this as other CSRF protection services are in place. + | + | Supported: "lax", "strict" + | + */ + + 'same_site' => null, + +]; diff --git a/config/view.php b/config/view.php new file mode 100755 index 00000000..2acfd9cc --- /dev/null +++ b/config/view.php @@ -0,0 +1,33 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => realpath(storage_path('framework/views')), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100755 index 00000000..9b1dffd9 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite diff --git a/app/commands/.gitkeep b/database/factories/.gitkeep old mode 100644 new mode 100755 similarity index 100% rename from app/commands/.gitkeep rename to database/factories/.gitkeep diff --git a/database/factories/ExamFactory.php b/database/factories/ExamFactory.php new file mode 100755 index 00000000..7f319074 --- /dev/null +++ b/database/factories/ExamFactory.php @@ -0,0 +1,16 @@ +define(App\Exam::class, function (Faker $faker) { + return [ + 'name' => $faker->sentence($nbWords = 3, $variableNbWords = true), + 'elective_subject_point_addition' => rand(0,2), + 'marks_distribution_types' => json_encode(array_rand(\App\Http\Helpers\AppHelper::MARKS_DISTRIBUTION_TYPES, 3)), + 'class_id' => function () { + // Get random class id + return App\IClass::where('id','!=',1)->inRandomOrder()->first()->id; + }, + 'status' => '1', + ]; +}); diff --git a/database/factories/LeaveFactory.php b/database/factories/LeaveFactory.php new file mode 100755 index 00000000..a83ed0bc --- /dev/null +++ b/database/factories/LeaveFactory.php @@ -0,0 +1,17 @@ +define(App\Leave::class, function (Faker $faker) { + return [ + 'employee_id' => function () { + // Get random teacher id + return App\Employee::inRandomOrder()->first()->id; + }, + 'leave_type' => rand(1,2), + 'leave_date' => $faker->dateTimeThisMonth($max = 'now', $timezone = "Asia/Dhaka")->format('d/m/Y'), + 'document' => null, + 'description' => $faker->sentence, + 'status' => rand(1,3) + ]; +}); diff --git a/database/factories/SectionFactory.php b/database/factories/SectionFactory.php new file mode 100755 index 00000000..8b190ff7 --- /dev/null +++ b/database/factories/SectionFactory.php @@ -0,0 +1,20 @@ +define(App\Section::class, function (Faker $faker) { + + return [ + 'name' => strtoupper($faker->unique()->randomLetter), + 'capacity' => rand(20,40), + 'class_id' => function(){ + return App\IClass::where('id','!=',1)->inRandomOrder()->first()->id; + }, + 'teacher_id' => function () { + // Get random teacher id + return App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first()->id; + }, + 'note' => $faker->sentence, + 'status' => '1', + ]; +}); diff --git a/database/factories/StudentFactory.php b/database/factories/StudentFactory.php new file mode 100755 index 00000000..db3e1782 --- /dev/null +++ b/database/factories/StudentFactory.php @@ -0,0 +1,31 @@ +define(App\Student::class, function (Faker $faker) { + + $user = factory(App\User::class)->create(); + return [ + 'user_id' => $user->id, + 'name' => $faker->name($gender = 'male'|'female'), + 'dob' => $faker->dateTimeBetween($startDate = '-20 years', $endDate = 'now', $timezone = "Asia/Dhaka")->format('d/m/Y'), + 'gender' => rand(1,2), + 'religion' => rand(1,5), + 'blood_group' => rand(1,8), + 'nationality' => substr($faker->country, 0 , 48), + 'photo' => null, + 'email' => $user->email, + 'phone_no' => $faker->e164PhoneNumber, + 'extra_activity' => '', + 'note' => '', + 'father_name' => $faker->name($gender = 'male'), + 'father_phone_no' => $faker->e164PhoneNumber, + 'mother_name' => $faker->name($gender = 'female'), + 'mother_phone_no' => $faker->e164PhoneNumber, + 'guardian' => null, + 'guardian_phone_no' => null, + 'present_address' => $faker->address, + 'permanent_address' => $faker->address, + 'status' => '1', + ]; +}); diff --git a/database/factories/SubjectFactory.php b/database/factories/SubjectFactory.php new file mode 100755 index 00000000..a0b22953 --- /dev/null +++ b/database/factories/SubjectFactory.php @@ -0,0 +1,16 @@ +define(App\Subject::class, function (Faker $faker) { + return [ + 'name' => $faker->sentence($nbWords = 3, $variableNbWords = true), + 'code' => $faker->unique()->numberBetween($min = 100, $max = 200), + 'type' => rand(1,2), + 'class_id' => function () { + // Get random class id + return App\IClass::where('id','!=',1)->where('id','!=',2)->inRandomOrder()->first()->id; + }, + 'status' => '1', + ]; +}); diff --git a/database/factories/TeacherFactory.php b/database/factories/TeacherFactory.php new file mode 100755 index 00000000..d7b55830 --- /dev/null +++ b/database/factories/TeacherFactory.php @@ -0,0 +1,30 @@ +define(App\Employee::class, function (Faker $faker) { + $user = factory(App\User::class)->create(); + $designation = [2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20]; + return [ + 'user_id' => $user->id, + 'role_id' => \App\Http\Helpers\AppHelper::USER_TEACHER, + 'id_card' => str_pad($faker->unique()->numberBetween($min = 1, $max = 99),10,'0',STR_PAD_LEFT), + 'name' => $faker->name($gender = 'male'|'female'), + 'designation' => $designation[array_rand($designation, 1)], + 'qualification' => $faker->word, + 'dob' => $faker->dateTimeBetween($startDate = '-20 years', $endDate = 'now', $timezone = "Asia/Dhaka")->format('d/m/Y'), + 'gender' => rand(1,2), + 'religion' => rand(1,5), + 'email' => $user->email, + 'phone_no' => $faker->e164PhoneNumber, + 'address' => $faker->address, + 'joining_date' => $faker->dateTimeBetween($startDate = '-5 years', $endDate = 'now', $timezone = "Asia/Dhaka")->format('d/m/Y'), + 'photo' => null, + 'signature' => null, + 'shift' => rand(1,2), + 'duty_start' => '09:00 am', + 'duty_end' => '05:00 pm', + 'status' => '1' + ]; +}); + diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100755 index 00000000..1caa4446 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,18 @@ +define(App\User::class, function (Faker $faker) { + return [ + 'name' => $faker->name, + 'username' => $faker->unique()->userName, + 'email' => $faker->unique()->safeEmail, + 'password' => bcrypt('demo123'), + 'status' => '1', + 'force_logout' => 0, + 'remember_token' => Str::random(10), + 'created_by' => 1, + 'created_at' => now() + ]; +}); diff --git a/database/migrations/2018_03_04_000000_create_roles_table.php b/database/migrations/2018_03_04_000000_create_roles_table.php new file mode 100755 index 00000000..9ffda970 --- /dev/null +++ b/database/migrations/2018_03_04_000000_create_roles_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->string('name')->unique(); + $table->boolean('deletable')->default(true); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('roles'); + } +} diff --git a/database/migrations/2018_03_05_000000_create_users_table.php b/database/migrations/2018_03_05_000000_create_users_table.php new file mode 100755 index 00000000..2720399f --- /dev/null +++ b/database/migrations/2018_03_05_000000_create_users_table.php @@ -0,0 +1,44 @@ +increments('id'); + $table->string('name'); + $table->string('username')->unique(); + $table->string('email')->unique(); + $table->string('phone_no',15)->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->boolean('force_logout')->default(0); + $table->enum('status', [0,1])->default(1); + $table->boolean('is_super_admin')->default(false); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + } + ); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/database/migrations/2018_03_05_000001_create_user_roles_table.php b/database/migrations/2018_03_05_000001_create_user_roles_table.php new file mode 100755 index 00000000..84a23ea9 --- /dev/null +++ b/database/migrations/2018_03_05_000001_create_user_roles_table.php @@ -0,0 +1,43 @@ +unsignedInteger('user_id'); + $table->unsignedInteger('role_id'); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + //FOREIGN KEY CONSTRAINTS + $table->foreign('user_id')->references('id')->on('users'); + $table->foreign('role_id')->references('id')->on('roles'); + + + //SETTING THE PRIMARY KEYS + $table->primary(['user_id','role_id']); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_roles'); + } +} diff --git a/database/migrations/2018_03_05_000002_create_permissions_table.php b/database/migrations/2018_03_05_000002_create_permissions_table.php new file mode 100755 index 00000000..799235d3 --- /dev/null +++ b/database/migrations/2018_03_05_000002_create_permissions_table.php @@ -0,0 +1,34 @@ +increments('id'); + $table->string('slug'); //route name [user.create] + $table->string('name'); // Readable Name [User Create] + $table->string('group')->nullable(); // Group name [site, user, system user] + $table->timestamp("created_at")->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('permissions'); + } +} diff --git a/database/migrations/2018_03_05_000003_create_users_permissions_table.php b/database/migrations/2018_03_05_000003_create_users_permissions_table.php new file mode 100755 index 00000000..eefab38a --- /dev/null +++ b/database/migrations/2018_03_05_000003_create_users_permissions_table.php @@ -0,0 +1,41 @@ +integer('user_id')->unsigned(); + $table->integer('permission_id')->unsigned(); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + //FOREIGN KEY CONSTRAINTS + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade'); + + //SETTING THE PRIMARY KEYS +// $table->primary(['user_id','permission_id']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users_permissions'); + } +} diff --git a/database/migrations/2018_03_05_000004_create_roles_permissions_table.php b/database/migrations/2018_03_05_000004_create_roles_permissions_table.php new file mode 100755 index 00000000..ec3b72f3 --- /dev/null +++ b/database/migrations/2018_03_05_000004_create_roles_permissions_table.php @@ -0,0 +1,41 @@ +integer('role_id')->unsigned(); + $table->integer('permission_id')->unsigned(); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + //FOREIGN KEY CONSTRAINTS + $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); + $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade'); + +// //SETTING THE PRIMARY KEYS +// $table->primary(['role_id','permission_id']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('roles_permissions'); + } +} diff --git a/database/migrations/2018_03_05_000005_create_password_resets_table.php b/database/migrations/2018_03_05_000005_create_password_resets_table.php new file mode 100755 index 00000000..0d5cb845 --- /dev/null +++ b/database/migrations/2018_03_05_000005_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +} diff --git a/database/migrations/2018_06_09_065945_create_sliders_table.php b/database/migrations/2018_06_09_065945_create_sliders_table.php new file mode 100755 index 00000000..c9b9df15 --- /dev/null +++ b/database/migrations/2018_06_09_065945_create_sliders_table.php @@ -0,0 +1,39 @@ +increments('id'); + $table->string('title'); + $table->string('subtitle'); + $table->string('image'); + $table->integer('order')->default(0); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + } + ); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('sliders'); + } +} diff --git a/database/migrations/2018_07_06_103920_create_about_content_tables.php b/database/migrations/2018_07_06_103920_create_about_content_tables.php new file mode 100755 index 00000000..1b80215a --- /dev/null +++ b/database/migrations/2018_07_06_103920_create_about_content_tables.php @@ -0,0 +1,59 @@ +increments('id'); + $table->string('why_content',500); + $table->string('key_point_1_title',100); + $table->longText('key_point_1_content'); + $table->string('key_point_2_title',100)->nullable(); + $table->longText('key_point_2_content')->nullable(); + $table->string('key_point_3_title',100)->nullable(); + $table->longText('key_point_3_content')->nullable(); + $table->string('key_point_4_title',100)->nullable(); + $table->longText('key_point_4_content')->nullable(); + $table->string('key_point_5_title',100)->nullable(); + $table->longText('key_point_5_content')->nullable(); + $table->string('about_us',500); + $table->string('who_we_are',1000); + $table->text('intro_video_embed_code'); + $table->string('video_site_link',500)->nullable(); + $table->timestamps(); + $table->userstamps(); + } + ); + Schema::create( + 'about_sliders', function (Blueprint $table) { + $table->increments('id'); + $table->string('image'); + $table->integer('order')->default(0); + $table->timestamps(); + $table->userstamps(); + } + ); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('about_contents'); + Schema::dropIfExists('about_sliders'); + } +} diff --git a/database/migrations/2018_07_08_110923_create_site_metas_table.php b/database/migrations/2018_07_08_110923_create_site_metas_table.php new file mode 100755 index 00000000..62bf391a --- /dev/null +++ b/database/migrations/2018_07_08_110923_create_site_metas_table.php @@ -0,0 +1,36 @@ +increments('id'); + $table->string('meta_key'); + $table->longText('meta_value'); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('site_metas'); + } +} diff --git a/database/migrations/2018_07_11_035714_create_testimonials_table.php b/database/migrations/2018_07_11_035714_create_testimonials_table.php new file mode 100755 index 00000000..b3557238 --- /dev/null +++ b/database/migrations/2018_07_11_035714_create_testimonials_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->string('writer'); + $table->text('comments'); + $table->string('avatar')->nullable(); + $table->integer('order')->default(0); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('testimonials'); + } +} diff --git a/database/migrations/2018_07_14_115139_create_class_profiles_table.php b/database/migrations/2018_07_14_115139_create_class_profiles_table.php new file mode 100755 index 00000000..65041dd3 --- /dev/null +++ b/database/migrations/2018_07_14_115139_create_class_profiles_table.php @@ -0,0 +1,44 @@ +increments('id'); + $table->string('name'); + $table->string('slug',500); + $table->string('image_sm'); + $table->string('image_lg'); + $table->string('teacher'); + $table->string('room_no',50); + $table->integer('capacity'); + $table->string('shift'); + $table->longText('short_description'); + $table->longText('description')->nullable(); + $table->longText('outline')->nullable(); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('class_profiles'); + } +} diff --git a/database/migrations/2018_07_14_155755_create_teacher_profiles_table.php b/database/migrations/2018_07_14_155755_create_teacher_profiles_table.php new file mode 100755 index 00000000..d99adebf --- /dev/null +++ b/database/migrations/2018_07_14_155755_create_teacher_profiles_table.php @@ -0,0 +1,41 @@ +increments('id'); + $table->string('name'); + $table->string('designation'); + $table->string('image')->nullable(); + $table->longText('description')->nullable(); + $table->longText('qualification')->nullable(); + $table->string('facebook')->nullable(); + $table->string('instagram')->nullable(); + $table->string('twitter')->nullable(); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('teacher_profiles'); + } +} diff --git a/database/migrations/2018_07_14_180514_create_events_table.php b/database/migrations/2018_07_14_180514_create_events_table.php new file mode 100755 index 00000000..65b2fc18 --- /dev/null +++ b/database/migrations/2018_07_14_180514_create_events_table.php @@ -0,0 +1,44 @@ +increments('id'); + $table->dateTime('event_time'); + $table->string('title'); + $table->string('slug',500); + $table->string('cover_photo')->nullable(); + $table->string('cover_video')->nullable(); + $table->string('tags')->nullable(); + $table->longText('description'); + $table->string('slider_1')->nullable(); + $table->string('slider_2')->nullable(); + $table->string('slider_3')->nullable(); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + }); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('events'); + } +} diff --git a/database/migrations/2018_08_11_092832_create_app_metas_table.php b/database/migrations/2018_08_11_092832_create_app_metas_table.php new file mode 100755 index 00000000..2e49f6c3 --- /dev/null +++ b/database/migrations/2018_08_11_092832_create_app_metas_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->string('meta_key'); + $table->longText('meta_value')->nullable(); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('app_metas'); + } +} diff --git a/database/migrations/2018_08_11_121754_create_academic_years_table.php b/database/migrations/2018_08_11_121754_create_academic_years_table.php new file mode 100755 index 00000000..d3687694 --- /dev/null +++ b/database/migrations/2018_08_11_121754_create_academic_years_table.php @@ -0,0 +1,38 @@ +increments('id'); + $table->string('title'); + $table->date('start_date'); + $table->date('end_date'); + $table->boolean('is_open_for_admission')->default(false); + $table->enum('status', [0,1])->default(0); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('academic_years'); + } +} diff --git a/database/migrations/2018_08_14_052209_create_employees_table.php b/database/migrations/2018_08_14_052209_create_employees_table.php new file mode 100755 index 00000000..31c9454d --- /dev/null +++ b/database/migrations/2018_08_14_052209_create_employees_table.php @@ -0,0 +1,60 @@ +increments('id'); + $table->unsignedInteger('user_id')->nullable(); + $table->unsignedInteger('role_id'); + $table->string('id_card',50)->unique(); + $table->string('name'); + $table->unsignedTinyInteger('designation')->nullable(20); + $table->string('qualification')->nullable(); + $table->string('dob',10); + $table->enum('gender', [1,2])->default(1); + $table->enum('religion', [1,2,3,4,5])->default(1);; + $table->string('email',100)->nullable(); + $table->string('phone_no',15)->nullable(); + $table->string('address',500)->nullable(); + $table->date('joining_date'); + $table->date('leave_date')->nullable(); + $table->string('photo')->nullable(); + $table->string('signature')->nullable(); + $table->enum('shift', [1,2])->default(1); + $table->time('duty_start')->nullable(); + $table->time('duty_end')->nullable(); + $table->enum('status', [0,1])->default(1); + $table->unsignedSmallInteger('order')->default(0); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + + $table->foreign('user_id')->references('id')->on('users'); + $table->foreign('role_id')->references('id')->on('roles'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { +// DB::statement('SET FOREIGN_KEY_CHECKS=0'); + Schema::dropIfExists('employees'); +// DB::statement('SET FOREIGN_KEY_CHECKS=1'); + } +} diff --git a/database/migrations/2018_08_14_055151_create_i_classes_table.php b/database/migrations/2018_08_14_055151_create_i_classes_table.php new file mode 100755 index 00000000..f4358fa0 --- /dev/null +++ b/database/migrations/2018_08_14_055151_create_i_classes_table.php @@ -0,0 +1,70 @@ +increments('id'); + $table->string('name'); + $table->integer('numeric_value'); + $table->integer('order')->default(0); + $table->string('group',20)->nullable(); + $table->unsignedTinyInteger('duration')->default(1); + $table->boolean('have_selective_subject')->default(false); + $table->unsignedTinyInteger('max_selective_subject')->nullable(); + $table->boolean('have_elective_subject')->default(false); + $table->text('note')->nullable(); + $table->boolean('is_open_for_admission')->default(false); + $table->enum('status', [0,1])->default(0); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + + }); + + // create the history table + Schema::dropIfExists('i_class_history'); + DB::unprepared("CREATE TABLE i_class_history LIKE i_classes;"); + // alter table + DB::unprepared("ALTER TABLE i_class_history MODIFY COLUMN id int(11) NOT NULL, + DROP PRIMARY KEY, ENGINE = MyISAM, ADD action VARCHAR(8) DEFAULT 'insert' FIRST, + ADD revision INT(6) NOT NULL AUTO_INCREMENT AFTER action, + ADD PRIMARY KEY (id, revision);"); + + DB::unprepared("DROP TRIGGER IF EXISTS i_class__ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS i_class__au;"); + //create after insert trigger + DB::unprepared("CREATE TRIGGER i_class__ai AFTER INSERT ON i_classes FOR EACH ROW + INSERT INTO i_class_history SELECT 'insert', NULL, d.* + FROM i_classes AS d WHERE d.id = NEW.id;"); + DB::unprepared("CREATE TRIGGER i_class__au AFTER UPDATE ON i_classes FOR EACH ROW + INSERT INTO i_class_history SELECT 'update', NULL, d.* + FROM i_classes AS d WHERE d.id = NEW.id;"); + + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::unprepared("DROP TRIGGER IF EXISTS i_class__ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS i_class__au;"); + Schema::dropIfExists('i_class_history'); + Schema::dropIfExists('i_classes'); + } +} diff --git a/database/migrations/2018_08_14_064130_create_sections_table.php b/database/migrations/2018_08_14_064130_create_sections_table.php new file mode 100755 index 00000000..868e91ff --- /dev/null +++ b/database/migrations/2018_08_14_064130_create_sections_table.php @@ -0,0 +1,67 @@ +increments('id'); + $table->string('name'); + $table->integer('capacity'); + $table->unsignedInteger('class_id'); + $table->unsignedInteger('teacher_id'); + $table->text('note')->nullable(); + $table->enum('status', [0,1])->default(1); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + $table->foreign('class_id')->references('id')->on('i_classes'); + $table->foreign('teacher_id')->references('id')->on('employees'); + + }); + + // create the history table + Schema::dropIfExists('section_history'); + DB::unprepared("CREATE TABLE section_history LIKE sections;"); + // alter table + DB::unprepared("ALTER TABLE section_history MODIFY COLUMN id int(11) NOT NULL, + DROP PRIMARY KEY, ENGINE = MyISAM, ADD action VARCHAR(8) DEFAULT 'insert' FIRST, + ADD revision INT(6) NOT NULL AUTO_INCREMENT AFTER action, + ADD PRIMARY KEY (id, revision);"); + + DB::unprepared("DROP TRIGGER IF EXISTS section__ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS section__au;"); + //create after insert trigger + DB::unprepared("CREATE TRIGGER section__ai AFTER INSERT ON sections FOR EACH ROW + INSERT INTO section_history SELECT 'insert', NULL, d.* + FROM sections AS d WHERE d.id = NEW.id;"); + DB::unprepared("CREATE TRIGGER section__au AFTER UPDATE ON sections FOR EACH ROW + INSERT INTO section_history SELECT 'update', NULL, d.* + FROM sections AS d WHERE d.id = NEW.id;"); + + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::unprepared("DROP TRIGGER IF EXISTS section__ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS section__au;"); + Schema::dropIfExists('section_history'); + Schema::dropIfExists('sections'); + } +} diff --git a/database/migrations/2018_08_14_064556_create_students_table.php b/database/migrations/2018_08_14_064556_create_students_table.php new file mode 100755 index 00000000..9588cb50 --- /dev/null +++ b/database/migrations/2018_08_14_064556_create_students_table.php @@ -0,0 +1,72 @@ +increments('id'); + $table->unsignedInteger('user_id')->nullable(); + $table->string('name'); + $table->string('nick_name',50)->nullable(); + $table->string('dob',10); + $table->enum('gender', [1,2])->default(1); + $table->string('religion')->nullable(); + $table->string('blood_group',10)->nullable(); + $table->string('nationality',50)->nullable(); + $table->string('photo')->nullable(); + $table->string('email',100)->nullable(); + $table->string('phone_no')->nullable(); + $table->string('extra_activity')->nullable(); + $table->string('note',500)->nullable(); + $table->string('father_name')->nullable(); + $table->string('father_phone_no',15)->nullable(); + $table->string('mother_name')->nullable(); + $table->string('mother_phone_no',15)->nullable(); + $table->string('guardian')->nullable(); + $table->string('guardian_phone_no',15)->nullable(); + $table->string('present_address',500)->nullable(); + $table->string('permanent_address',500); + $table->smallInteger('sms_receive_no')->default(1); //0=none,1=father,2=mother,3=guardian + $table->string('siblings')->nullable(); + $table->string('signature')->nullable(); + $table->enum('status', [0,1])->default(1); + + + + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + }); + Schema::create('student_info_log', function (Blueprint $table) { + $table->unsignedInteger('student_id'); + $table->unsignedInteger('academic_year_id'); + $table->string('meta_key'); + $table->text('meta_value')->nullable(); + $table->dateTime('created_at'); + $table->foreign('student_id')->references('id')->on('students'); + $table->foreign('academic_year_id')->references('id')->on('academic_years'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('student_info_log'); + Schema::dropIfExists('students'); + } +} diff --git a/database/migrations/2018_08_15_105155_create_registrations_table.php b/database/migrations/2018_08_15_105155_create_registrations_table.php new file mode 100755 index 00000000..36483151 --- /dev/null +++ b/database/migrations/2018_08_15_105155_create_registrations_table.php @@ -0,0 +1,53 @@ +increments('id'); + $table->string('regi_no',20); + $table->unsignedInteger('student_id'); + $table->unsignedInteger('class_id'); + $table->unsignedInteger('section_id'); + $table->unsignedInteger('academic_year_id'); + $table->integer('roll_no')->nullable(); + $table->string('shift',15)->nullable(); + $table->string('card_no',50)->nullable(); + $table->string('board_regi_no',50)->nullable(); + $table->string('house',100)->nullable(); + $table->enum('status', [0,1])->default(1); + $table->enum('is_promoted', [0,1])->default(0); + $table->unsignedInteger('old_registration_id')->nullable(); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + $table->foreign('student_id')->references('id')->on('students'); + $table->foreign('class_id')->references('id')->on('i_classes'); + $table->foreign('section_id')->references('id')->on('sections'); + $table->foreign('academic_year_id')->references('id')->on('academic_years'); + $table->foreign('old_registration_id')->references('id')->on('registrations'); + $table->index('regi_no'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('registrations'); + } +} diff --git a/database/migrations/2018_11_20_013140_create_notifications_table.php b/database/migrations/2018_11_20_013140_create_notifications_table.php new file mode 100755 index 00000000..fb16d5bc --- /dev/null +++ b/database/migrations/2018_11_20_013140_create_notifications_table.php @@ -0,0 +1,35 @@ +uuid('id')->primary(); + $table->string('type'); + $table->morphs('notifiable'); + $table->text('data'); + $table->timestamp('read_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('notifications'); + } +} diff --git a/database/migrations/2019_01_12_151224_create_subjects_table.php b/database/migrations/2019_01_12_151224_create_subjects_table.php new file mode 100755 index 00000000..f306de2b --- /dev/null +++ b/database/migrations/2019_01_12_151224_create_subjects_table.php @@ -0,0 +1,64 @@ +increments('id'); + $table->string('name'); + $table->string('code'); + $table->enum('type', [1,2,3])->default(1); + $table->unsignedInteger('class_id'); + $table->enum('status', [0,1])->default(1); + $table->unsignedSmallInteger('order')->default(0); + $table->boolean('exclude_in_result')->default(0); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + $table->foreign('class_id')->references('id')->on('i_classes'); + }); + + // create the history table + Schema::dropIfExists('subject_history'); + DB::unprepared("CREATE TABLE subject_history LIKE subjects;"); + // alter table + DB::unprepared("ALTER TABLE subject_history MODIFY COLUMN id int(11) NOT NULL, + DROP PRIMARY KEY, ENGINE = MyISAM, ADD action VARCHAR(8) DEFAULT 'insert' FIRST, + ADD revision INT(6) NOT NULL AUTO_INCREMENT AFTER action, + ADD PRIMARY KEY (id, revision);"); + + DB::unprepared("DROP TRIGGER IF EXISTS subject_ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS subject_au;"); + //create after insert trigger + DB::unprepared("CREATE TRIGGER subject_ai AFTER INSERT ON subjects FOR EACH ROW + INSERT INTO subject_history SELECT 'insert', NULL, d.* + FROM subjects AS d WHERE d.id = NEW.id;"); + DB::unprepared("CREATE TRIGGER subject_au AFTER UPDATE ON subjects FOR EACH ROW + INSERT INTO subject_history SELECT 'update', NULL, d.* + FROM subjects AS d WHERE d.id = NEW.id;"); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::unprepared("DROP TRIGGER IF EXISTS subject_ai;"); + DB::unprepared("DROP TRIGGER IF EXISTS subject_au;"); + Schema::dropIfExists('subject_history'); + Schema::dropIfExists('subjects'); + } +} diff --git a/database/migrations/2019_01_12_151240_create_student_subjects_table.php b/database/migrations/2019_01_12_151240_create_student_subjects_table.php new file mode 100755 index 00000000..df7270c1 --- /dev/null +++ b/database/migrations/2019_01_12_151240_create_student_subjects_table.php @@ -0,0 +1,47 @@ +unsignedInteger('registration_id'); + $table->unsignedInteger('subject_id'); + $table->tinyInteger('subject_type'); + + $table->foreign('subject_id')->references('id')->on('subjects'); + $table->foreign('registration_id')->references('id')->on('registrations'); + + }); + + Schema::create('st_subjects_log', function (Blueprint $table) { + $table->unsignedInteger('registration_id'); + $table->text('log'); + $table->unsignedInteger('updated_by'); + $table->timestamp('updated_at'); + + $table->foreign('registration_id')->references('id')->on('registrations'); + }); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('st_subjects_log'); + Schema::dropIfExists('student_subjects'); + } +} diff --git a/database/migrations/2019_01_12_151250_create_teacher_subjects_table.php b/database/migrations/2019_01_12_151250_create_teacher_subjects_table.php new file mode 100755 index 00000000..6518284b --- /dev/null +++ b/database/migrations/2019_01_12_151250_create_teacher_subjects_table.php @@ -0,0 +1,35 @@ +unsignedInteger('teacher_id'); + $table->unsignedInteger('subject_id'); + + $table->foreign('subject_id')->references('id')->on('subjects'); + $table->foreign('teacher_id')->references('id')->on('employees'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('teacher_subjects'); + } +} diff --git a/database/migrations/2019_01_13_155559_create_student_attendances_table.php b/database/migrations/2019_01_13_155559_create_student_attendances_table.php new file mode 100755 index 00000000..fb6124ea --- /dev/null +++ b/database/migrations/2019_01_13_155559_create_student_attendances_table.php @@ -0,0 +1,46 @@ +increments('id'); + $table->unsignedInteger('academic_year_id'); + $table->unsignedInteger('class_id'); + $table->unsignedInteger('registration_id'); + $table->date('attendance_date'); + $table->dateTime('in_time'); + $table->dateTime('out_time'); + $table->time('staying_hour'); + $table->string('status',20)->nullable();//1 = in late, 2 = out early + $table->enum('present', [0,1])->default(1); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + $table->foreign('academic_year_id')->references('id')->on('academic_years'); + $table->foreign('class_id')->references('id')->on('i_classes'); + $table->foreign('registration_id')->references('id')->on('registrations'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('student_attendances'); + } +} diff --git a/database/migrations/2019_02_12_105853_create_leaves_table.php b/database/migrations/2019_02_12_105853_create_leaves_table.php new file mode 100755 index 00000000..4182c109 --- /dev/null +++ b/database/migrations/2019_02_12_105853_create_leaves_table.php @@ -0,0 +1,42 @@ +increments('id'); + $table->unsignedInteger('employee_id'); + $table->enum('leave_type', [1,2,3,4,5])->default(1); + $table->date('leave_date'); + $table->string('document')->nullable(); + $table->text('description')->nullable(); + //1= pending, 2= approved, 3= Rejected + $table->enum('status', [1,2,3])->default(1); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + $table->foreign('employee_id')->references('id')->on('employees'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('leaves'); + } +} diff --git a/database/migrations/2019_02_15_111855_create_employee_attendances_table.php b/database/migrations/2019_02_15_111855_create_employee_attendances_table.php new file mode 100755 index 00000000..450c2778 --- /dev/null +++ b/database/migrations/2019_02_15_111855_create_employee_attendances_table.php @@ -0,0 +1,42 @@ +increments('id'); + $table->unsignedInteger('employee_id'); + $table->date('attendance_date'); + $table->dateTime('in_time'); + $table->dateTime('out_time'); + $table->time('working_hour'); + $table->string('status',20)->nullable();//1 = in late, 2 = out early + $table->enum('present', [0,1])->default(0); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + $table->foreign('employee_id')->references('id')->on('employees'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('employee_attendances'); + } +} diff --git a/database/migrations/2019_02_23_194914_create_exams_table.php b/database/migrations/2019_02_23_194914_create_exams_table.php new file mode 100755 index 00000000..0ba71f2f --- /dev/null +++ b/database/migrations/2019_02_23_194914_create_exams_table.php @@ -0,0 +1,42 @@ +increments('id'); + $table->unsignedInteger('class_id'); + $table->string('name'); + $table->decimal('elective_subject_point_addition',5,2)->default(0.00); + $table->text('marks_distribution_types'); + $table->enum('status', [0,1])->default(1); + $table->boolean('open_for_marks_entry')->default(false); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + $table->foreign('class_id')->references('id')->on('i_classes'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('exams'); + } +} diff --git a/database/migrations/2019_02_23_195038_create_grades_table.php b/database/migrations/2019_02_23_195038_create_grades_table.php new file mode 100755 index 00000000..e70bff98 --- /dev/null +++ b/database/migrations/2019_02_23_195038_create_grades_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->string('name'); + $table->text('rules'); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('grades'); + } +} diff --git a/database/migrations/2019_02_23_195053_create_exam_rules_table.php b/database/migrations/2019_02_23_195053_create_exam_rules_table.php new file mode 100755 index 00000000..0a513ff7 --- /dev/null +++ b/database/migrations/2019_02_23_195053_create_exam_rules_table.php @@ -0,0 +1,48 @@ +increments('id'); + $table->unsignedInteger('class_id'); + $table->unsignedInteger('subject_id'); + $table->unsignedInteger('exam_id'); + $table->unsignedInteger('grade_id'); + $table->unsignedInteger('combine_subject_id')->nullable(); + $table->text('marks_distribution'); + $table->enum('passing_rule',[1,2,3])->default(1); //1= Over All, 2=Individual, 3= Both + $table->integer('total_exam_marks')->default(0); + $table->integer('over_all_pass')->default(0); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + $table->foreign('class_id')->references('id')->on('i_classes'); + $table->foreign('subject_id')->references('id')->on('subjects'); + $table->foreign('grade_id')->references('id')->on('grades'); + $table->foreign('combine_subject_id')->references('id')->on('subjects'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('exam_rules'); + } +} diff --git a/database/migrations/2019_02_23_203247_create_marks_table.php b/database/migrations/2019_02_23_203247_create_marks_table.php new file mode 100755 index 00000000..41dbcfae --- /dev/null +++ b/database/migrations/2019_02_23_203247_create_marks_table.php @@ -0,0 +1,54 @@ +increments('id'); + $table->unsignedInteger('academic_year_id'); + $table->unsignedInteger('class_id'); + $table->unsignedInteger('section_id'); + $table->unsignedInteger('registration_id'); + $table->unsignedInteger('exam_id'); + $table->unsignedInteger('subject_id'); + $table->text('marks'); + $table->integer('total_marks'); + $table->string('grade'); + $table->decimal('point',5,2); + $table->enum('present',[0,1])->default(1); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + $table->foreign('academic_year_id')->references('id')->on('academic_years'); + $table->foreign('class_id')->references('id')->on('i_classes'); + $table->foreign('section_id')->references('id')->on('sections'); + $table->foreign('registration_id')->references('id')->on('registrations'); + $table->foreign('exam_id')->references('id')->on('exams'); + $table->foreign('subject_id')->references('id')->on('subjects'); + + $table->unique(['class_id','exam_id','registration_id', 'subject_id']); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('marks'); + } +} diff --git a/database/migrations/2019_02_23_203658_create_results_table.php b/database/migrations/2019_02_23_203658_create_results_table.php new file mode 100755 index 00000000..14d5370a --- /dev/null +++ b/database/migrations/2019_02_23_203658_create_results_table.php @@ -0,0 +1,75 @@ +increments('id'); + $table->unsignedInteger('academic_year_id'); + $table->unsignedInteger('class_id'); + $table->unsignedInteger('registration_id'); + $table->unsignedInteger('exam_id'); + $table->integer('total_marks'); + $table->string('grade'); + $table->decimal('point',5,2); + $table->unsignedSmallInteger('subject_fail_count')->default(0); + $table->timestamps(); + $table->softDeletes(); + $table->userstamps(); + + + $table->foreign('academic_year_id')->references('id')->on('academic_years'); + $table->foreign('class_id')->references('id')->on('i_classes'); + $table->foreign('registration_id')->references('id')->on('registrations'); + $table->foreign('exam_id')->references('id')->on('exams'); + }); + + Schema::create('result_publish', function (Blueprint $table) { + $table->increments('id'); + $table->unsignedInteger('academic_year_id'); + $table->unsignedInteger('class_id'); + $table->unsignedInteger('exam_id'); + $table->date('publish_date'); + + $table->foreign('academic_year_id')->references('id')->on('academic_years'); + $table->foreign('class_id')->references('id')->on('i_classes'); + $table->foreign('exam_id')->references('id')->on('exams'); + }); + + Schema::create('result_combines', function (Blueprint $table) { + $table->increments('id'); + $table->unsignedInteger('registration_id'); + $table->unsignedInteger('subject_id'); + $table->unsignedInteger('exam_id'); + $table->integer('total_marks'); + $table->string('grade'); + $table->decimal('point',5,2); + + $table->foreign('registration_id')->references('id')->on('registrations'); + $table->foreign('subject_id')->references('id')->on('subjects'); + $table->foreign('exam_id')->references('id')->on('exams'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('result_combines'); + Schema::dropIfExists('result_publish'); + Schema::dropIfExists('results'); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php new file mode 100755 index 00000000..e866ca7c --- /dev/null +++ b/database/seeds/DatabaseSeeder.php @@ -0,0 +1,39 @@ +truncate(); + DB::table('users_permissions')->truncate(); + DB::table('notifications')->truncate(); + + DB::statement("SET foreign_key_checks=1"); + + $this->call(RolesTableSeeder::class); + $this->call(PermissionTableSeeder::class); + $this->call(UsersTableSeeder::class); + + } +} diff --git a/database/seeds/DemoAppDataSeeder.php b/database/seeds/DemoAppDataSeeder.php new file mode 100755 index 00000000..cd9f4e9f --- /dev/null +++ b/database/seeds/DemoAppDataSeeder.php @@ -0,0 +1,1455 @@ +deletePreviousData(); + + //some user with role + echo PHP_EOL , 'seeding users...'; + $this->userData(); + + //seed academic year + echo PHP_EOL , 'seeding academic year...'; + $this->academicYearData(); + + //seed common settings + echo PHP_EOL , 'seeding institute settings...'; + $this->instituteSettingsData(); + + //seed class + echo PHP_EOL , 'seeding class...'; + $this->classData(); + + //seed teacher + echo PHP_EOL , 'seeding teacher...'; + $this->teacherData(); + + //seed teacher + echo PHP_EOL , 'seeding employee...'; + $this->employeeData(); + + //seed section + echo PHP_EOL , 'seeding section...'; + $this->sectionData(); + + //seed subject + echo PHP_EOL , 'seeding subject...'; + $this->subjectData(); + + //seed student + echo PHP_EOL , 'seeding student...'; + $this->studentData(); + + //seed student attendance + echo PHP_EOL , 'seeding student attendance...'; + $this->studentAttendance(); + + //seed employee attendance + echo PHP_EOL , 'seeding employee attendance...'; + $this->employeeAttendance(); + + //leave and work out side data + echo PHP_EOL , 'seeding leave...'; + $this->leave(); + + //seed exam + echo PHP_EOL , 'seeding exam...'; + $this->examData(); + + //seed grade + echo PHP_EOL , 'seeding marking grade...'; + $this->gradeData(); + + //seed exam rules + echo PHP_EOL , 'seeding exam rules...'; + $this->examRulesData(); + + //seed exam marks + echo PHP_EOL , 'seeding exam marks...'; + $this->examMarksData(); + + //seed exam marks + echo PHP_EOL , 'seeding exam result...', PHP_EOL; + $this->generateResult(); + + } + + + private function deletePreviousData(){ + /*** + * This code is MYSQL specific + */ + \Illuminate\Support\Facades\DB::statement("SET foreign_key_checks=0"); + $this->deleteUserData(); + AcademicYear::truncate(); + AppMeta::truncate(); + IClass::truncate(); + Employee::truncate(); + Section::truncate(); + \App\Subject::truncate(); + \App\Student::truncate(); + \App\Registration::truncate(); + \App\StudentAttendance::truncate(); + \App\EmployeeAttendance::truncate(); + \App\Exam::truncate(); + \App\Grade::truncate(); + \App\ExamRule::truncate(); + \App\Mark::truncate(); + \App\Result::truncate(); + \App\Leave::truncate(); + \Illuminate\Support\Facades\DB::table('result_publish')->truncate(); + \Illuminate\Support\Facades\DB::table('result_combines')->truncate(); + \Illuminate\Support\Facades\DB::table('teacher_subjects')->truncate(); + \Illuminate\Support\Facades\DB::table('student_subjects')->truncate(); + \Illuminate\Support\Facades\DB::statement("SET foreign_key_checks=1"); + + //delete images + $storagePath = storage_path('app/public'); + $storagePath2 = storage_path('app'); + $dirs = [ + $storagePath.'/admission', + $storagePath.'/employee', + $storagePath.'/invoice', + $storagePath.'/leave', + $storagePath.'/logo', + $storagePath.'/report', + $storagePath.'/student', + $storagePath.'/work_outside', + $storagePath2.'/student-attendance', + $storagePath2.'/employee-attendance', + ]; + + foreach ($dirs as $dir){ + system("rm -rf ".escapeshellarg($dir)); + } + } + + private function userData(){ + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $users = factory(App\User::class, 3) + ->create(['created_by' => $created_by,'created_at' => $created_at]); + $users->each(function ($user) use($created_at, $created_by) { + \App\UserRole::create([ + 'user_id' => $user->id, + 'role_id' => rand(2,7), + 'created_by' => $created_by, + 'created_at' => $created_at + + ]); + }); + } + + private function deleteUserData(){ + $userIds = \App\UserRole::where('role_id','!=', AppHelper::USER_ADMIN)->pluck('user_id'); + DB::table('users_permissions')->whereIn('user_id', $userIds)->delete(); + DB::table('user_roles')->whereIn('user_id', $userIds)->delete(); + DB::table('users')->whereIn('id', $userIds)->delete(); + + } + + private function academicYearData(){ + $data['title'] = date('Y'); + $data['start_date'] = Carbon::createFromFormat('d/m/Y', '01/01/'.date('Y'));; + $data['end_date'] = Carbon::createFromFormat('d/m/Y', '31/12/'.date('Y')); + $data['status'] = '1'; + + AcademicYear::create($data); + } + + private function instituteSettingsData() + { + $originFilePath = resource_path('assets/backend/images/'); + $destinationPath = storage_path('app').'/public/logo/'; + + if(!is_dir($destinationPath)) { + mkdir($destinationPath); + } + + $fileName = 'logo-md.png'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['logo'] = $fileName; + + $fileName = 'logo-xs.png'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['logo_small'] = $fileName; + + $fileName = 'favicon.png'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['favicon'] = $fileName; + + + $data['name'] = 'CloudSchool BD'; + $data['short_name'] = 'CSBD'; + $data['establish'] = '2010'; + $data['website_link'] = 'http://cloudschoolbd.com'; + $data['email'] = 'info@cloudschoolbd.com'; + $data['phone_no'] = '+8801xxxxxxxxx'; + $data['address'] = 'Dhanmondi, Dhaka-1207'; + + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + //now create + AppMeta::create([ + 'meta_key' => 'institute_settings', + 'meta_value' => json_encode($data), + 'created_by' => $created_by, + 'created_at' => $created_at + ]); + + if(AppHelper::getInstituteCategory() != 'college') { + AppMeta::create([ + 'meta_key' => 'academic_year', + 'meta_value' => 1, + 'created_by' => $created_by, + 'created_at' => $created_at + ]); + } + + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + $shiftData = [ + 'Morning' => [ + 'start' => '08:00 am', + 'end' => '01:00 pm', + ], + 'Day' => [ + 'start' => '02:00 pm', + 'end' => '07:00 pm', + ], + 'Evening' => [ + 'start' => '12:00 am', + 'end' => '12:00 am', + ] + ]; + $insertData = [ + ['meta_key' => 'frontend_website' ,'meta_value' => 1, 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'language', 'meta_value' => 'en', 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'disable_language', 'meta_value' => 1, 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'institute_type', 'meta_value' => 1, 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'shift_data', 'meta_value' => json_encode($shiftData), 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'weekends', 'meta_value' => json_encode([5]), 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'week_start_day', 'meta_value' => 6, 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'week_end_day', 'meta_value' => 5, 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'total_casual_leave', 'meta_value' => 14, 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'total_sick_leave', 'meta_value' => 10, 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'total_maternity_leave', 'meta_value' => 90, 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'total_special_leave', 'meta_value' => 5, 'created_by' => $created_by, 'created_at' => $created_at], + ['meta_key' => 'board_name', 'meta_value' => 'Dhaka', 'created_by' => $created_by, 'created_at' => $created_at] + ]; + + //now crate + AppMeta::insert($insertData); + + //invalid previous cache + \Illuminate\Support\Facades\Cache::forget('app_settings'); + } + + + + private function classData(){ + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $insertData = [ + [ + 'name' => 'One', + 'numeric_value' => 1, + 'order' => 1, + 'group' => 'None', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => false, + 'max_selective_subject' => null, + 'have_elective_subject' => false, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + [ + 'name' => 'Two', + 'numeric_value' => 2, + 'order' => 2, + 'group' => 'None', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => true, + 'max_selective_subject' => 2, + 'have_elective_subject' => true, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + [ + 'name' => 'Three', + 'numeric_value' => 3, + 'order' => 3, + 'group' => 'None', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => false, + 'max_selective_subject' => null, + 'have_elective_subject' => false, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + [ + 'name' => 'Four', + 'numeric_value' => 4, + 'order' => 4, + 'group' => 'None', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => false, + 'max_selective_subject' => null, + 'have_elective_subject' => false, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + [ + 'name' => 'Five', + 'numeric_value' => 5, + 'order' => 5, + 'group' => 'None', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => false, + 'max_selective_subject' => null, + 'have_elective_subject' => false, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + [ + 'name' => 'Six', + 'numeric_value' => 6, + 'order' => 6, + 'group' => 'None', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => false, + 'max_selective_subject' => null, + 'have_elective_subject' => false, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + [ + 'name' => 'Seven', + 'numeric_value' => 7, + 'order' => 7, + 'group' => 'None', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => false, + 'max_selective_subject' => null, + 'have_elective_subject' => false, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + [ + 'name' => 'Eight', + 'numeric_value' => 8, + 'order' => 8, + 'group' => 'None', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => false, + 'max_selective_subject' => null, + 'have_elective_subject' => false, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + [ + 'name' => 'Nine Science', + 'numeric_value' => 90, + 'order' => 9, + 'group' => 'Science', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => false, + 'max_selective_subject' => null, + 'have_elective_subject' => false, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + [ + 'name' => 'Nine Humanities', + 'numeric_value' => 91, + 'order' => 10, + 'group' => 'Humanities', + 'status' => '1', + 'note' => 'demo test', + 'have_selective_subject' => false, + 'max_selective_subject' => null, + 'have_elective_subject' => false, + 'created_by' => $created_by, + 'created_at' => $created_at + ], + + ]; + + IClass::insert($insertData); + } + + private function teacherData() { + + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $insHeadDesignation = 7; + if(AppHelper::getInstituteCategory() == "college"){ + $insHeadDesignation = 1; + } + + $instituteHead = factory(App\Employee::class, 1) + ->create(['designation' => $insHeadDesignation,'created_by' => $created_by,'created_at' => $created_at]); + + $instituteHead->each(function ($teacher) use($created_at, $created_by) { + \App\UserRole::create([ + 'user_id' => $teacher->user_id, + 'role_id' => AppHelper::USER_TEACHER, + 'created_by' => $created_by, + 'created_at' => $created_at + + ]); + }); + + $teachers = factory(App\Employee::class, 5) + ->create(['created_by' => $created_by,'created_at' => $created_at]); + + $teachers->each(function ($teacher) use($created_at, $created_by) { + \App\UserRole::create([ + 'user_id' => $teacher->user_id, + 'role_id' => AppHelper::USER_TEACHER, + 'created_by' => $created_by, + 'created_at' => $created_at + + ]); + }); + + + } + private function employeeData() { + + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $employee = factory(App\Employee::class, 1)->create(['role_id' => 5, 'created_by' => $created_by,'created_at' => $created_at])->first(); + \App\UserRole::create(['user_id' => $employee->user_id, 'role_id' => $employee->role_id, 'created_by' => $created_by, 'created_at' => $created_at]); + + $employee = factory(App\Employee::class, 1)->create(['role_id' => 6, 'created_by' => $created_by,'created_at' => $created_at])->first(); + \App\UserRole::create(['user_id' => $employee->user_id, 'role_id' => $employee->role_id, 'created_by' => $created_by, 'created_at' => $created_at]); + + $employee = factory(App\Employee::class, 1)->create(['role_id' => 7, 'created_by' => $created_by,'created_at' => $created_at])->first(); + \App\UserRole::create(['user_id' => $employee->user_id, 'role_id' => $employee->role_id, 'created_by' => $created_by, 'created_at' => $created_at]); + + } + + private function sectionData() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $section = factory(App\Section::class, 5) + ->create(['created_by' => $created_by,'created_at' => $created_at]); + + $section = factory(App\Section::class, 2) + ->create(['class_id'=> 2, 'created_by' => $created_by,'created_at' => $created_at]); + + $section = factory(App\Section::class, 2) + ->create(['class_id'=> 3, 'created_by' => $created_by,'created_at' => $created_at]); + + $section = factory(App\Section::class, 2) + ->create(['class_id'=> 4, 'created_by' => $created_by,'created_at' => $created_at]); + + $section = factory(App\Section::class) + ->create(['class_id'=> 1, 'name' => 'A', 'created_by' => $created_by,'created_at' => $created_at]); + + $section = factory(App\Section::class) + ->create(['class_id'=> 1, 'name' => 'B', 'created_by' => $created_by,'created_at' => $created_at]); + + $section = factory(App\Section::class) + ->create(['class_id'=> 1, 'name' => 'C', 'created_by' => $created_by,'created_at' => $created_at]); + } + + private function subjectData() + { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE', 'Asia/Dhaka')); + + $subject = factory(App\Subject::class, 10) + ->create(['created_by' => $created_by, 'created_at' => $created_at]); + + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 1, 'type' => 1, 'name' => 'Bangla 1st', 'code' => '101', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 1, 'type' => 1, 'name' => 'Bangla 2nd', 'code' => '102', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 1, 'type' => 1, 'name' => 'English 1st', 'code' => '107', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 1, 'type' => 1, 'name' => 'English 2nd', 'code' => '108', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 1, 'type' => 1, 'name' => 'Math', 'code' => '111', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 1, 'type' => 1, 'name' => 'Computer', 'code' => '112', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + echo PHP_EOL."seeding class two subjects"; + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 2, 'type' => 1, 'name' => 'Bangla 1st', 'code' => '101', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 2, 'type' => 3, 'name' => 'Magic Study', 'code' => '102', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 2, 'type' => 1, 'name' => 'English 1st', 'code' => '107', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 2, 'type' => 3, 'name' => 'Drawing', 'code' => '108', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 2, 'type' => 1, 'name' => 'Math', 'code' => '111', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + $subject = factory(App\Subject::class, 1) + ->create(['class_id' => 2, 'type' => 2, 'name' => 'Computer', 'code' => '112', 'created_by' => $created_by, 'created_at' => $created_at]); + $subject->each(function ($sub) { + $teacher = App\Employee::where('role_id', \App\Http\Helpers\AppHelper::USER_TEACHER)->inRandomOrder()->first(); + // Create Pivot + $sub->teachers()->attach($teacher->id); + }); + + + } + + + private function studentData() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $students = factory(App\Student::class, 15) + ->create(['created_by' => $created_by,'created_at' => $created_at]); + + $students->each(function ($student) use($created_at, $created_by) { + \App\UserRole::create([ + 'user_id' => $student->user_id, + 'role_id' => AppHelper::USER_STUDENT, + 'created_by' => $created_by, + 'created_at' => $created_at + + ]); + }); + + //now register student to classes + + $studentIds = $students->pluck('id'); + $academicYearInfo = AcademicYear::where('id',1)->first(); + + $class1Info = IClass::where('id', 1)->first(); + $class1Sections = Section::where('class_id', $class1Info->id)->orderBy('name', 'asc')->take(1)->pluck('id'); + + $class2Info = IClass::where('id', 2)->first(); + $class2Sections = Section::where('class_id', $class2Info->id)->orderBy('name', 'asc')->take(1)->pluck('id'); + + $class3Info = IClass::where('id', 3)->first(); + $class3Sections = Section::where('class_id', $class3Info->id)->orderBy('name', 'asc')->take(1)->pluck('id'); + + $class4Info = IClass::where('id', 4)->first(); + $class4Sections = Section::where('class_id', $class4Info->id)->orderBy('name', 'asc')->take(1)->pluck('id'); + + + $counter = 1; + foreach ($studentIds as $studentId){ + + //distribute 5 student for class id 1 + if($counter <= 5){ + + $regiNo = $academicYearInfo->start_date->format('y') . (string)$class1Info->numeric_value; + $totalStudent = \App\Registration::where('academic_year_id', $academicYearInfo->id) + ->where('class_id', $class1Info->id)->withTrashed()->count(); + $regiNo .= str_pad(++$totalStudent,3,'0',STR_PAD_LEFT); + + $registrationData = [ + 'regi_no' => $regiNo, + 'student_id' => $studentId, + 'class_id' => $class1Info->id, + 'section_id' => $class1Sections[0], + 'academic_year_id' => $academicYearInfo->id, + 'roll_no' => $studentId, + 'shift' => 'Morning', + 'card_no' => null, + 'board_regi_no' => null, + 'house' => null, + 'status' => '1', + 'created_by' => $created_by, + 'created_at' => $created_at + ]; + + + } + //distribute 4 student for class id 2 + elseif($counter > 5 && $counter <= 9){ + $regiNo = $academicYearInfo->start_date->format('y') . (string)$class2Info->numeric_value; + $totalStudent = \App\Registration::where('academic_year_id', $academicYearInfo->id) + ->where('class_id', $class2Info->id)->withTrashed()->count(); + $regiNo .= str_pad(++$totalStudent,3,'0',STR_PAD_LEFT); + + $registrationData = [ + 'regi_no' => $regiNo, + 'student_id' => $studentId, + 'class_id' => $class2Info->id, + 'section_id' => $class2Sections[0], + 'academic_year_id' => $academicYearInfo->id, + 'roll_no' => $studentId, + 'shift' => 'Morning', + 'card_no' => null, + 'board_regi_no' => null, + 'house' => null, + 'status' => '1', + 'created_by' => $created_by, + 'created_at' => $created_at + ]; + + } + //distribute 3 student for class id 3 + elseif($counter > 9 && $counter <= 12){ + $regiNo = $academicYearInfo->start_date->format('y') . (string)$class3Info->numeric_value; + $totalStudent = \App\Registration::where('academic_year_id', $academicYearInfo->id) + ->where('class_id', $class3Info->id)->withTrashed()->count(); + $regiNo .= str_pad(++$totalStudent,3,'0',STR_PAD_LEFT); + + $registrationData = [ + 'regi_no' => $regiNo, + 'student_id' => $studentId, + 'class_id' => $class3Info->id, + 'section_id' => $class3Sections[0], + 'academic_year_id' => $academicYearInfo->id, + 'roll_no' => $studentId, + 'shift' => 'Morning', + 'card_no' => null, + 'board_regi_no' => null, + 'house' => null, + 'status' => '1', + 'created_by' => $created_by, + 'created_at' => $created_at + ]; + } + //distribute 3 student for class id 4 + else{ + + $regiNo = $academicYearInfo->start_date->format('y') . (string)$class4Info->numeric_value; + $totalStudent = \App\Registration::where('academic_year_id', $academicYearInfo->id) + ->where('class_id', $class4Info->id)->withTrashed()->count(); + $regiNo .= str_pad(++$totalStudent,3,'0',STR_PAD_LEFT); + + $registrationData = [ + 'regi_no' => $regiNo, + 'student_id' => $studentId, + 'class_id' => $class4Info->id, + 'section_id' => $class4Sections[0], + 'academic_year_id' => $academicYearInfo->id, + 'roll_no' => $studentId, + 'shift' => 'Morning', + 'card_no' => null, + 'board_regi_no' => null, + 'house' => null, + 'status' => '1', + 'created_by' => $created_by, + 'created_at' => $created_at + ]; + + } + + \App\Registration::insert([$registrationData]); + $counter++; + } + + //now assign subject to class 1 students + $students = \App\Registration::where('class_id', 1)->get(); + $subjects = \App\Subject::where('class_id', 1)->get()->mapWithKeys(function ($sub) { + return [$sub->id => ['subject_type' => $sub->getOriginal('type')]]; + })->toArray(); + + foreach ($students as $student){ + $student->subjects()->sync($subjects); + } + + + } + + private function studentAttendance() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $endDate = $created_at->copy(); + $startDate = $created_at->copy()->subDays(15); + + $wekends = AppHelper::getAppSettings('weekends', true); + if($wekends){ + $wekends = json_decode($wekends); + } + else{ + $wekends = []; + } + + $attendanceDates = AppHelper::generateDateRangeForReport($startDate, $endDate, true, $wekends, true); + + //fetch institute shift running times + $shiftData = AppHelper::getAppSettings('shift_data', true); + if($shiftData){ + $shiftData = json_decode($shiftData, true); + } + + $students = \App\Registration::where('class_id', 1)->where('academic_year_id', 1) + ->get(['id', 'shift']) + ->reduce(function ($students, $student) { + $students[$student->id] = $student->shift; + return $students; + }); + + $attendances = []; + foreach ($attendanceDates as $attendanceDate => $value) { + $shiftRuningTimes = []; + foreach ($shiftData as $shift => $times) { + $shiftRuningTimes[$shift] = [ + 'start' => Carbon::createFromFormat('Y-m-d h:i a', $attendanceDate . ' ' . $times['start']), + 'end' => Carbon::createFromFormat('Y-m-d h:i a', $attendanceDate . ' ' . $times['end']) + ]; + } + + foreach ($students as $studentId => $shift) { + $isPresent = rand(0,1); + if($isPresent) { + $inTime = $shiftRuningTimes[$shift]['start']; + $outTime = $shiftRuningTimes[$shift]['end']; + } + else{ + $inTime = Carbon::createFromFormat('Y-m-d H:i:s', $attendanceDate . ' 00:00:00'); + $outTime = $inTime; + } + $timeDiff = $inTime->diff($outTime)->format('%H:%I'); + + $attendances[] = [ + "academic_year_id" => 1, + "class_id" => 1, + "registration_id" => $studentId, + "attendance_date" => $attendanceDate, + "in_time" => $inTime, + "out_time" => $outTime, + "staying_hour" => $timeDiff, + "status" => '', + "present" => strval($isPresent), + "created_at" => $created_at, + "created_by" => $created_by, + ]; + } + + } + + //now insert into db + \App\StudentAttendance::insert($attendances); + } + + private function employeeAttendance() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $endDate = $created_at->copy(); + $startDate = $created_at->copy()->subDays(15); + + $wekends = AppHelper::getAppSettings('weekends', true); + if($wekends){ + $wekends = json_decode($wekends); + } + else{ + $wekends = []; + } + + $attendanceDates = AppHelper::generateDateRangeForReport($startDate, $endDate, true, $wekends, true); + + //fetch institute shift running times + $shiftData = AppHelper::getAppSettings('shift_data', true); + if($shiftData){ + $shiftData = json_decode($shiftData, true); + } + + //fetch employee working hours + $employees = Employee::where('status', AppHelper::ACTIVE)->get()->reduce(function ($employees, $employee) { + $employees[$employee->id] = [ + 'in_time' => $employee->getOriginal('duty_start'), + 'out_time' => $employee->getOriginal('duty_end') + ]; + return $employees; + }); + + $attendances = []; + foreach ($attendanceDates as $attendanceDate => $value) { + + foreach ($employees as $employeeId => $employeeShift) { + $isPresent = rand(0,1); + if($isPresent) { + $inTime = Carbon::createFromFormat('Y-m-d h:i a', $attendanceDate . ' ' . $shiftData['Morning']['start']); + $outTime = Carbon::createFromFormat('Y-m-d h:i a', $attendanceDate . ' ' . $shiftData['Morning']['end']); + } + else{ + $inTime = Carbon::createFromFormat('Y-m-d H:i:s', $attendanceDate . ' 00:00:00'); + $outTime = $inTime; + } + $timeDiff = $inTime->diff($outTime)->format('%H:%I'); + + $attendances[] = [ + "employee_id" => $employeeId, + "attendance_date" => $attendanceDate, + "in_time" => $inTime, + "out_time" => $outTime, + "working_hour" => $timeDiff, + "status" => '', + "present" => strval($isPresent), + "created_at" => $created_at, + "created_by" => $created_by, + ]; + + } + + } + + //now insert into db + \App\EmployeeAttendance::insert($attendances); + + + + + + } + + private function leave() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + $leaves = factory(App\Leave::class, 5) + ->create(['created_by' => $created_by,'created_at' => $created_at]); + + } + + private function examData() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $exmas = factory(App\Exam::class, 10) + ->create(['created_by' => $created_by,'created_at' => $created_at]); + + $exam = factory(App\Exam::class) + ->create([ + 'class_id'=> 1, + 'name' => '1st Term Exam', + 'elective_subject_point_addition' => 0, + 'marks_distribution_types' => json_encode([1,2,7]), + 'open_for_marks_entry' => true, + 'created_by' => $created_by, + 'created_at' => $created_at + ]); + + $exam = factory(App\Exam::class) + ->create([ + 'class_id'=> 1, + 'name' => 'Mid Term Exam', + 'elective_subject_point_addition' => 2.00, + 'marks_distribution_types' => json_encode([1,2,5]), + 'created_by' => $created_by, + 'created_at' => $created_at + ]); + + $exam = factory(App\Exam::class) + ->create([ + 'class_id'=> 1, + 'name' => 'Final Exam', + 'elective_subject_point_addition' => 0, + 'marks_distribution_types' => json_encode([1,2,7]), + 'created_by' => $created_by, + 'created_at' => $created_at + ]); + + } + + private function gradeData() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $grades = [ + [ + 'name' => '100 Marks', + 'rules' => json_encode([ + [ + 'grade' => 1,//AppHelper::GRADE_TYPES + 'point' => 5, + 'marks_from' => 80, + 'marks_upto' => 100 + ],[ + 'grade' => 2, + 'point' => 4, + 'marks_from' => 70, + 'marks_upto' => 79 + ],[ + 'grade' => 3, + 'point' => 3.5, + 'marks_from' => 60, + 'marks_upto' => 69 + ],[ + 'grade' => 4, + 'point' => 3, + 'marks_from' => 50, + 'marks_upto' => 59 + ],[ + 'grade' => 5, + 'point' => 2, + 'marks_from' => 40, + 'marks_upto' => 49 + ],[ + 'grade' => 6, + 'point' => 1, + 'marks_from' => 33, + 'marks_upto' => 39 + ], + [ + 'grade' => 7, + 'point' => 0, + 'marks_from' => 0, + 'marks_upto' => 32 + ] + ]), + 'created_at' => $created_at, + 'created_by' => $created_by + ], + [ + 'name' => '50 Marks', + 'rules' => json_encode([ + [ + 'grade' => 1, + 'point' => 5, + 'marks_from' => 40, + 'marks_upto' => 50 + ],[ + 'grade' => 2, + 'point' => 4, + 'marks_from' => 35, + 'marks_upto' => 39 + ],[ + 'grade' => 3, + 'point' => 3.5, + 'marks_from' => 30, + 'marks_upto' => 34 + ],[ + 'grade' => 4, + 'point' => 3, + 'marks_from' => 25, + 'marks_upto' => 29 + ],[ + 'grade' => 5, + 'point' => 2, + 'marks_from' => 20, + 'marks_upto' => 24 + ],[ + 'grade' => 6, + 'point' => 1, + 'marks_from' => 17, + 'marks_upto' => 19 + ], + [ + 'grade' => 7, + 'point' => 0, + 'marks_from' => 0, + 'marks_upto' => 16 + ] + ]), + 'created_at' => $created_at, + 'created_by' => $created_by + ] + ]; + + \App\Grade::insert($grades); + + //set default result system + $insertData = ['meta_key' => 'result_default_grade_id' ,'meta_value' => 1, 'created_by' => $created_by, 'created_at' => $created_at]; + AppMeta::insert($insertData); + + } + + private function examRulesData() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $class_id = 1; + + $subjects = \App\Subject::where('class_id', $class_id) + ->orderBy('code', 'asc') + ->get() + ->reduce(function ($subjects, $record){ + $subjects[$record->code] = $record->id; + return $subjects; + }); + + $exam = \App\Exam::where('class_id', $class_id)->orderBy('id', 'asc')->first(); +// $marksDistributions = json_decode($exam->marks_distribution_types); +// 1 2 7 + + //for bangla 1st + $rules[] = [ + 'class_id' => $class_id, + 'subject_id' => $subjects[101], + 'exam_id' => $exam->id, + 'grade_id' => 1, + 'combine_subject_id' => $subjects[102], + 'marks_distribution' => json_encode([ + ['type' => 1, 'total_marks' => 70, 'pass_marks' => 0], + ['type' => 2, 'total_marks' => 30, 'pass_marks' => 0], + ['type' => 7, 'total_marks' => 0, 'pass_marks' => 0], + ]), + 'passing_rule' => 1, + 'total_exam_marks' => 100, + 'over_all_pass' => 33, + 'created_at' => $created_at, + 'created_by' => $created_by + ]; + //bangla 2nd + $rules[] = [ + 'class_id' => $class_id, + 'subject_id' => $subjects[102], + 'exam_id' => $exam->id, + 'grade_id' => 2, + 'combine_subject_id' => null, + 'marks_distribution' => json_encode([ + ['type' => 1, 'total_marks' => 35, 'pass_marks' => 0], + ['type' => 2, 'total_marks' => 15, 'pass_marks' => 0], + ['type' => 7, 'total_marks' => 0, 'pass_marks' => 0], + ]), + 'passing_rule' => 1, + 'total_exam_marks' => 50, + 'over_all_pass' => 17, + 'created_at' => $created_at, + 'created_by' => $created_by + ]; + + //english 1st + $rules[] = [ + 'class_id' => $class_id, + 'subject_id' => $subjects[107], + 'exam_id' => $exam->id, + 'grade_id' => 1, + 'combine_subject_id' => $subjects[108], + 'marks_distribution' => json_encode([ + ['type' => 1, 'total_marks' => 70, 'pass_marks' => 0], + ['type' => 2, 'total_marks' => 30, 'pass_marks' => 0], + ['type' => 7, 'total_marks' => 0, 'pass_marks' => 0], + ]), + 'passing_rule' => 1, + 'total_exam_marks' => 100, + 'over_all_pass' => 33, + 'created_at' => $created_at, + 'created_by' => $created_by + ]; + //english 2nd + $rules[] = [ + 'class_id' => $class_id, + 'subject_id' => $subjects[108], + 'exam_id' => $exam->id, + 'grade_id' => 2, + 'combine_subject_id' => null, + 'marks_distribution' => json_encode([ + ['type' => 1, 'total_marks' => 35, 'pass_marks' => 0], + ['type' => 2, 'total_marks' => 15, 'pass_marks' => 0], + ['type' => 7, 'total_marks' => 0, 'pass_marks' => 0], + ]), + 'passing_rule' => 1, + 'total_exam_marks' => 50, + 'over_all_pass' => 17, + 'created_at' => $created_at, + 'created_by' => $created_by + ]; + + //math + $rules[] = [ + 'class_id' => $class_id, + 'subject_id' => $subjects[111], + 'exam_id' => $exam->id, + 'grade_id' => 1, + 'combine_subject_id' => null, + 'marks_distribution' => json_encode([ + ['type' => 1, 'total_marks' => 70, 'pass_marks' => 25], + ['type' => 2, 'total_marks' => 30, 'pass_marks' => 10], + ['type' => 7, 'total_marks' => 0, 'pass_marks' => 0], + ]), + 'passing_rule' => 2, + 'total_exam_marks' => 100, + 'over_all_pass' => 0, + 'created_at' => $created_at, + 'created_by' => $created_by + ]; + + //computer + $rules[] = [ + 'class_id' => $class_id, + 'subject_id' => $subjects[112], + 'exam_id' => $exam->id, + 'grade_id' => 1, + 'combine_subject_id' => null, + 'marks_distribution' => json_encode([ + ['type' => 1, 'total_marks' => 50, 'pass_marks' => 25], + ['type' => 2, 'total_marks' => 30, 'pass_marks' => 15], + ['type' => 7, 'total_marks' => 20, 'pass_marks' => 10], + ]), + 'passing_rule' => 3, + 'total_exam_marks' => 100, + 'over_all_pass' => 50, + 'created_at' => $created_at, + 'created_by' => $created_by + ]; + + \App\ExamRule::insert($rules); + + + + } + + private function examMarksData() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $class_id = 1; + $academic_year_id = 1; + + $subjects = \App\Subject::where('class_id', $class_id) + ->orderBy('code', 'asc') + ->get(['id']); + + $exam = \App\Exam::where('class_id', $class_id)->orderBy('id', 'asc')->first(); + + $students = \App\Registration::where('class_id', $class_id)->where('academic_year_id', 1) + ->get(['id', 'section_id']) + ->reduce(function ($students, $student) { + $students[$student->id] = $student->section_id; + return $students; + }); + + + $marksData = []; + + foreach ($subjects as $subject){ + $examRule = \App\ExamRule::where('exam_id',$exam->id) + ->where('subject_id', $subject->id) + ->first(); + + //pull grading information + $grade = \App\Grade::where('id', $examRule->grade_id)->first(); + + $gradingRules = json_decode($grade->rules); + + //exam distributed marks rules + $distributeMarksRules = []; + foreach (json_decode($examRule->marks_distribution) as $rule){ + $distributeMarksRules[$rule->type] = [ + 'total_marks' => $rule->total_marks, + 'pass_marks' => $rule->pass_marks + ]; + } + + //loop through students + foreach ($students as $student_id => $section_id){ + $marks = $this->generateMarks($distributeMarksRules); + [$isInvalid, $message, $totalMarks, $grade, $point] = AppHelper::processMarksAndCalculateResult($examRule, + $gradingRules, $distributeMarksRules, $marks); + + + $marksData[] = [ + 'academic_year_id' => 1, + 'class_id' => $class_id, + 'section_id' => $section_id, + 'registration_id' => $student_id, + 'exam_id' => $exam->id, + 'subject_id' => $subject->id, + 'marks' => json_encode($marks), + 'total_marks' => $totalMarks, + 'grade' => $grade, + 'point' => $point, + 'present' => '1', + "created_at" => $created_at, + "created_by" => $created_by, + ]; + + + } + } + + \App\Mark::insert($marksData); + + + + } + + private function generateMarks($distributeMarksRules){ + $marks = []; + foreach ($distributeMarksRules as $type => $values){ + $marks[$type] = rand(0, $values['total_marks']); + } + + return $marks; + + } + + private function generateResult() { + $created_by = 1; + $created_at = Carbon::now(env('APP_TIMEZONE','Asia/Dhaka')); + + $class_id = 1; + $acYear = 1; + $examInfo = \App\Exam::where('class_id', $class_id)->orderBy('id', 'asc')->first(); + + // pull default grading system + $grade_id = 1; + $grade = \App\Grade::where('id', $grade_id)->first(); + + // pull exam rules subject wise and find combine subject + $examRules = \App\ExamRule::where('class_id', $class_id) + ->where('exam_id', $examInfo->id) + ->select('subject_id','combine_subject_id','passing_rule','marks_distribution','total_exam_marks','over_all_pass') + ->with(['subject' => function($query){ + $query->select('id','type'); + }]) + ->get() + ->reduce(function ($examRules, $rule){ + $examRules[$rule->subject_id] =[ + 'combine_subject_id' => $rule->combine_subject_id, + 'passing_rule' => $rule->passing_rule, + 'marks_distribution' => json_decode($rule->marks_distribution), + 'total_exam_marks' => $rule->total_exam_marks, + 'over_all_pass' => $rule->over_all_pass, + 'subject_type' => $rule->subject->getOriginal('type') + ]; + return $examRules; + }); + + + //pull students with marks + $exam_id = $examInfo->id; + $students = \App\Registration::where('status', AppHelper::ACTIVE) + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->select('id') + ->with(['marks' => function($query) use($acYear,$class_id,$exam_id){ + $query->select('registration_id','subject_id','marks', 'total_marks', 'point', 'present') + ->where('academic_year_id', $acYear) + ->where('class_id', $class_id) + ->where('exam_id', $exam_id); + }]) + ->get(); + + $resultInsertData = []; + $combineResultInsertData = []; + $gradingRules = json_decode($grade->rules); + $userId = $created_by; + + //loop the students + foreach ($students as $student){ + $totalMarks = 0; + $totalPoint = 0; + $totalSubject = 0; + $combineSubjectsMarks = []; + $isFail = false; + $subjectFailCount = 0; + + $studentSubjects = $student->subjects->reduce(function ($studentSubjects, $subject){ + $studentSubjects[$subject->id] = $subject->pivot->subject_type; + return $studentSubjects; + }); + + foreach ($student->marks as $marks) { + //find combine subjects + $isAndInCombineSubject = AppHelper::isAndInCombine($marks->subject_id, $examRules); + if ($isAndInCombineSubject) { + $combineSubjectsMarks[$marks->subject_id] = $marks; + + //skip for next subject + continue; + } + + //find 4th subject AppHelper::SUBJECT_TYPE + $is4thSubject = ($studentSubjects[$marks->subject_id] == 2) ? 1 : 0; + if ($is4thSubject) { + + if ($marks->point >= $examInfo->elective_subject_point_addition) { + $totalPoint += ($marks->point - $examInfo->elective_subject_point_addition); + } + + $totalMarks += $marks->total_marks; + + //skip for next subject + continue; + } + + //process not combine and 4th subjects + if (!$isAndInCombineSubject && !$is4thSubject) { + + $totalMarks += $marks->total_marks; + $totalPoint += $marks->point; + $totalSubject++; + if (intval($marks->point) == 0) { + $isFail = true; + $subjectFailCount++; + } + + } + } + + + //now process combine subjects + foreach ($examRules as $subject_id => $data) { + if ($data['combine_subject_id'] != null) { + $totalSubject++; + $subjectMarks = $combineSubjectsMarks[$subject_id]; + $pairSubjectMarks = $combineSubjectsMarks[$data['combine_subject_id']]; + + [$pairFail, $combineTotalMarks, $pairTotalMarks] = AppHelper::processCombineSubjectMarks($subjectMarks, $pairSubjectMarks, $data, $examRules[$data['combine_subject_id']]); + + $totalMarks += $pairTotalMarks; + + if ($pairFail) { + //AppHelper::GRADE_TYPES + $pairGrade = "F"; + $pairPoint = 0.00; + $isFail = true; + $subjectFailCount++; + } else { + + [$pairGrade, $pairPoint] = AppHelper::findGradePointFromMarks($gradingRules, $pairTotalMarks); + $totalPoint += $pairPoint; + } + + //need to store in db for marks sheet print + $combineResultInsertData[] = [ + 'registration_id' => $student->id, + 'subject_id' => $subject_id, + 'exam_id' => $examInfo->id, + 'total_marks' => $combineTotalMarks, + 'grade' => $pairGrade, + 'point' => $pairPoint, + ]; + + } + } + + + $finalPoint = ($totalPoint / $totalSubject); + if ($isFail) { + //AppHelper::GRADE_TYPES + $finalGrade = 'F'; + } else { + $finalGrade = AppHelper::findGradeFromPoint($finalPoint, $gradingRules); + } + + $resultInsertData[] = [ + 'academic_year_id' => $acYear, + 'class_id' => $class_id, + 'registration_id' => $student->id, + 'exam_id' => $examInfo->id, + 'total_marks' => $totalMarks, + 'grade' => $finalGrade, + 'point' => $finalPoint, + 'subject_fail_count' => $subjectFailCount, + "created_at" => $created_at, + "created_by" => $userId, + ]; + + } + + \App\Result::insert($resultInsertData); + \Illuminate\Support\Facades\DB::table('result_publish')->insert([ + 'academic_year_id' => $acYear, + 'class_id' => $class_id, + 'exam_id' => $exam_id, + 'publish_date' => $created_at->format('Y-m-d') + ]); + \Illuminate\Support\Facades\DB::table('result_combines')->insert($combineResultInsertData); + + + } + +} diff --git a/database/seeds/DemoSiteDataSeeder.php b/database/seeds/DemoSiteDataSeeder.php new file mode 100755 index 00000000..85ccb2b1 --- /dev/null +++ b/database/seeds/DemoSiteDataSeeder.php @@ -0,0 +1,523 @@ +deletePreviousData(); + + //seed common settings + echo PHP_EOL , 'seeding settings...'; + $this->settingsData(); + + //time line data + echo PHP_EOL , 'seeding timeline...'; + $this->timelineData(); + + //faq + echo PHP_EOL , 'seeding faq...'; + $this->faqs(); + + //contact details + echo PHP_EOL , 'seeding contact info...'; + $this->contactData(); + + //gallery data + echo PHP_EOL , 'seeding gallery images...'; + $this->galleryData(); + + // testimonial + echo PHP_EOL , 'seeding gallery testimonials...'; + $this->testimonialData(); + + //statistic data + echo PHP_EOL , 'seeding statistic...'; + $this->statisticData(); + + //service data + echo PHP_EOL , 'seeding service...'; + $this->serviceTextData(); + + //about us data + echo PHP_EOL , 'seeding about us...'; + $this->aboutSectionData(); + + // slider data + echo PHP_EOL , 'seeding sliders...'; + $this->sliderData(); + + // class profile + echo PHP_EOL , 'seeding class...'; + $this->classProfileData(); + + + // teacher profile + echo PHP_EOL , 'seeding teachers...'; + $this->teacherProfileData(); + + // events + echo PHP_EOL , 'seeding events...'; + $this->eventData(); + + + echo PHP_EOL , 'seeding completed.', PHP_EOL; + + } + + + private function deletePreviousData(){ + /*** + * This code is MYSQL specific + */ + DB::statement("SET foreign_key_checks=0"); + SiteMeta::truncate(); + Testimonial::truncate(); + AboutContent::truncate(); + AboutSlider::truncate(); + Slider::truncate(); + ClassProfile::truncate(); + TeacherProfile::truncate(); + Event::truncate(); + DB::statement("SET foreign_key_checks=1"); + + //delete images + $storagePath = storage_path('app/public'); + $dirs = [ + $storagePath.'/sliders', + $storagePath.'/about', + $storagePath.'/class', + $storagePath.'/teacher', + $storagePath.'/gallery', + $storagePath.'/events', + $storagePath.'/site', + ]; + + foreach ($dirs as $dir){ + system("rm -rf ".escapeshellarg($dir)); + } + } + + + private function settingsData() + { + $originFilePath = resource_path('assets/frontend/demo/site/'); + $destinationPath = storage_path('app').'/public/site/'; + + if(!is_dir($destinationPath)) { + mkdir($destinationPath); + } + + $fileName = 'logo.png'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['logo'] = $fileName; + + $fileName = 'logo@2x.png'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['logo2x'] = $fileName; + + $fileName = 'favicon.png'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['favicon'] = $fileName; + + $data['name'] = 'Cloud School'; + $data['short_name'] = 'CloudSchool'; + $data['facebook'] = '#'; + $data['instagram'] = '#'; + $data['twitter'] = '#'; + $data['youtube'] = '#'; + + //now crate + SiteMeta::updateOrCreate( + ['meta_key' => 'settings'], + ['meta_value' => json_encode($data)] + ); + } + private function timelineData() + { + + $data = [ + 't' => 'We Start Here', + 'd' => 'Lorem ipsum', + 'y' => '2006' + ]; + + $data2 = [ + 't' => 'Top Score', + 'd' => 'We achive top result score in the state', + 'y' => '2010' + ]; + //now crate + SiteMeta::create( + [ + 'meta_key' => 'timeline', + 'meta_value' => json_encode($data) + ] + ); + SiteMeta::create( + [ + 'meta_key' => 'timeline', + 'meta_value' => json_encode($data2) + ] + ); + } + private function faqs() + { + $data = [ + 'q' => 'How to apply for adminission?', + 'a' => 'Just e-mail us, or contact on hot line.' + ]; + //now crate + SiteMeta::create( + [ + 'meta_key' => 'faq', + 'meta_value' => json_encode($data) + ] + ); + } + private function contactData() + { + //now crate or update model + SiteMeta::updateOrCreate( + ['meta_key' => 'contact_address'], + [ 'meta_value' => 'Dhaka-1207'] + ); + SiteMeta::updateOrCreate( + ['meta_key' => 'contact_phone'], + [ 'meta_value' => '+880258685'] + ); + SiteMeta::updateOrCreate( + ['meta_key' => 'contact_email'], + [ 'meta_value' => 'contact@cloudschoolbd.com'] + ); + SiteMeta::updateOrCreate( + ['meta_key' => 'contact_latlong'], + [ 'meta_value' => '23.7340076,90.3841824'] + ); + } + private function galleryData() + { + + //now crate + SiteMeta::create( + [ + 'meta_key' => 'gallery', + 'meta_value' => '1.jpg' + ] + ); + $originFilePath = resource_path('assets/frontend/demo/gallery/'); + $destinationPath = storage_path('app').'/public/gallery/'; + + if(!is_dir($destinationPath)) { + mkdir($destinationPath); + } + + $fileName = '1.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + SiteMeta::create( + [ + 'meta_key' => 'gallery', + 'meta_value' => '2.jpg' + ] + ); + + $fileName = '2.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + SiteMeta::create( + [ + 'meta_key' => 'gallery', + 'meta_value' => '3.jpg' + ] + ); + + $fileName = '3.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + } + private function testimonialData() + { + $data = [ + 'writer' => 'Shadhin', + 'comments' => 'Awesome Academy', + 'avatar' => null, + 'order' => 1, + ]; + + Testimonial::create($data); + + $data = [ + 'writer' => 'HRS', + 'comments' => 'Great school', + 'avatar' => null, + 'order' => 2, + ]; + + Testimonial::create($data); + } + private function statisticData() + { + $values = '4000,150,18000,9800'; + //now crate or update model + SiteMeta::updateOrCreate( + ['meta_key' => 'statistic'], + ['meta_value' => $values] + ); + } + private function serviceTextData() + { + SiteMeta::updateOrCreate( + ['meta_key' => 'our_service_text'], + ['meta_value' => 'Lorem ipsum'] + ); + } + private function aboutSectionData() + { + + $data = [ + 'why_content' => 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy.', + 'key_point_1_title' => 'Key point 1', + 'key_point_1_content' => 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock', + 'key_point_2_title' => 'Key point 2', + 'key_point_2_content' => 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock', + 'about_us' => 'it is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.', + 'who_we_are' => 'it is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution', + 'intro_video_embed_code' => '', + 'video_site_link' => 'https://www.youtube.com', + + ]; + + //now crate or update model + AboutContent::updateOrCreate( + ['id' => 1], + $data + ); + + $data = []; + + $originFilePath = resource_path('assets/frontend/demo/about/'); + $destinationPath = storage_path('app').'/public/about/'; + + if(!is_dir($destinationPath)) { + mkdir($destinationPath); + } + + $fileName = '1.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + + $data['image'] = $fileName; + $data['order'] = 1; + AboutSlider::create($data); + + $fileName = '2.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + + $data['image'] = $fileName; + $data['order'] = 2; + AboutSlider::create($data); + } + + private function sliderData() + { + + + $data = [ + 'title' => 'First slider image', + 'subtitle' => 'This is subtitle 1', + 'order' => 1 + ]; + + $originFilePath = resource_path('assets/frontend/demo/slider/'); + $destinationPath = storage_path('app').'/public/sliders/'; + + if(!is_dir($destinationPath)) { + mkdir($destinationPath); + } + + $fileName = '1.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['image'] = $fileName; + + Slider::create($data); + + $data = [ + 'title' => 'Second slider image', + 'subtitle' => 'This is subtitle 2', + 'order' => 2 + ]; + + $fileName = '2.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['image'] = $fileName; + + Slider::create($data); + + } + + private function classProfileData() + { + + $originFilePath = resource_path('assets/frontend/demo/class/'); + $destinationPath = storage_path('app').'/public/class_profile/'; + + if(!is_dir($destinationPath)) { + mkdir($destinationPath); + } + + $fileNameSm = '1-sm.jpg'; + $fileNameLg = '1-lg.jpg'; + copy($originFilePath.$fileNameSm, $destinationPath.$fileNameSm); + copy($originFilePath.$fileNameLg, $destinationPath.$fileNameLg); + + $data = [ + 'name' => 'Class Three', + 'image_sm' => '', + 'image_lg' => '', + 'teacher' => 'MC Smith', + 'room_no' => 'R301-R302', + 'capacity' => 60, + 'shift' => 'Morning', + 'short_description' => 'Lorem ipsum text' + ]; + $data['slug'] = strtolower(str_replace(' ','-', $data['name'])); + $data['image_sm'] = $fileNameSm; + $data['image_lg'] = $fileNameLg; + ClassProfile::create($data); + + $fileNameSm = '2-sm.jpg'; + $fileNameLg = '2-lg.jpg'; + copy($originFilePath.$fileNameSm, $destinationPath.$fileNameSm); + copy($originFilePath.$fileNameLg, $destinationPath.$fileNameLg); + + $data = [ + 'name' => 'Class Four', + 'image_sm' => '', + 'image_lg' => '', + 'teacher' => 'Jhon Doe', + 'room_no' => 'R401-R402', + 'capacity' => 70, + 'shift' => 'Morning', + 'short_description' => 'Lorem ipsum text' + ]; + $data['slug'] = strtolower(str_replace(' ','-', $data['name'])); + $data['image_sm'] = $fileNameSm; + $data['image_lg'] = $fileNameLg; + ClassProfile::create($data); + } + + private function teacherProfileData() + { + + $originFilePath = resource_path('assets/frontend/demo/teacher/'); + $destinationPath = storage_path('app').'/public/teacher_profile/'; + + if(!is_dir($destinationPath)) { + mkdir($destinationPath); + } + + $data = [ + 'name' => 'Fakir Chand', + 'image' => '', + 'designation' => 'Headmaster', + 'qualification' => 'M.A in English', + 'description' => 'Super cool boy!', + 'facebook' => '#', + 'instagram' => '#', + 'twitter' => '#', + ]; + + $fileName = '1.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['image'] = $fileName; + TeacherProfile::create($data); + + $data = [ + 'name' => 'Nosimon Beagum', + 'image' => '', + 'designation' => 'Class Teacher', + 'qualification' => 'Hons in English', + 'description' => '', + 'facebook' => '#', + 'instagram' => '#', + 'twitter' => '#', + ]; + + $fileName = '2.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['image'] = $fileName; + TeacherProfile::create($data); + } + + private function eventData() + { + $originFilePath = resource_path('assets/frontend/demo/events/'); + $destinationPath = storage_path('app').'/public/events/'; + + if(!is_dir($destinationPath)) { + mkdir($destinationPath); + } + + $data = [ + 'title' => 'Annual function '.date('Y'), + 'event_time' => Carbon::createFromFormat('d/m/Y h:i a', '20/12/'.date('Y').' 03:00 pm'), + 'cover_photo' => '', + 'slider_1' => '', + 'slider_2' => '', + 'slider_3' => '', + 'description' => 'it is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution', + 'tags' => 'annual,function', + 'cover_video' => '' + ]; + + + $data['slug'] = strtolower(str_replace(' ','-', $data['title'])); + + + $fileName = '1.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['cover_photo'] = $fileName; + + $fileName = '11.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['slider_1'] = $fileName; + + $fileName = '22.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['slider_2'] = $fileName; + + $fileName = '33.jpg'; + copy($originFilePath.$fileName, $destinationPath.$fileName); + $data['slider_3'] = $fileName; + + Event::create($data); + + + $data['title'] = 'Farewell Party'; + $data['event_time'] = Carbon::now()->addDays(15); + $data['cover_photo'] = null; + $data['tags'] = 'farewell,party'; + $data['cover_video'] = ''; + $data['description'] = "

Details:

  • What restrooms are available prior to gates opening?

    Angel Stadium restrooms are available prior to the gates opening; they are located in the parking lot near the Orangewood entrance.
  • Can I bring food or drinks into the stadium?
    You can bring one unopened bottle of water per person into the stadium. No other food or drinks are permitted.
  • Will food be available for sale inside the stadium?
    Yes. Concession stands will be open until Greg Laurie speaks. Alcohol will not be available.
  • Can I reserve or save seats?
    No. Seating is first-come, first-served.

"; + $data['slug'] = strtolower(str_replace(' ','-', $data['title'])); + + Event::create($data); + + + + } +} diff --git a/database/seeds/PermissionTableSeeder.php b/database/seeds/PermissionTableSeeder.php new file mode 100755 index 00000000..a8028daa --- /dev/null +++ b/database/seeds/PermissionTableSeeder.php @@ -0,0 +1,925 @@ + "change_password", + "name" => "Change Password", + "group" => "Common" + ], + [ + "slug" => "user.dashboard", + "name" => "Dashboard", + "group" => "Common" + ], + [ + "slug" => "lockscreen", + "name" => "Lock Screen", + "group" => "Common" + ], + [ + "slug" => "logout", + "name" => "Logout", + "group" => "Common" + ], + [ + "slug" => "profile", + "name" => "Profile", + "group" => "Common" + ], + [ + "slug" => "user.notification_unread", + "name" => "Notification View", + "group" => "Common" + ], + [ + "slug" => "user.notification_read", + "name" => "Notification View", + "group" => "Common" + ], + [ + "slug" => "user.notification_all", + "name" => "Notification View", + "group" => "Common" + ] + + ]; + + $exclusiveAdministratorPermissionList = [ + [ "slug" => "user.role_index", + "name" => "User Role View", + "group" => "Administration Exclusive" + ], + [ "slug" => "user.role_destroy", + "name" => "User Role Delete", + "group" => "Administration Exclusive" + ], + [ "slug" => "user.role_create", + "name" => "User Role Create", + "group" => "Administration Exclusive" + ], + [ "slug" => "user.role_store", + "name" => "User Role Create", + "group" => "Administration Exclusive" + ], + [ "slug" => "user.role_update", + "name" => "User Role Edit", + "group" => "Administration Exclusive" + ], + [ + "slug" => "administrator.user_index", + "name" => "System Admin View", + "group" => "Administration Exclusive" + ], + [ + "slug" => "administrator.user_create", + "name" => "System Admin Create", + "group" => "Administration Exclusive" + ], + [ + "slug" => "administrator.user_status", + "name" => "System Admin Edit", + "group" => "Administration Exclusive" + ], + [ + "slug" => "administrator.user_store", + "name" => "System Admin Create", + "group" => "Administration Exclusive" + ], + [ + "slug" => "administrator.user_update", + "name" => "System Admin Edit", + "group" => "Administration Exclusive" + ], + [ + "slug" => "administrator.user_destroy", + "name" => "System Admin Delete", + "group" => "Administration Exclusive" + ], + [ + "slug" => "administrator.user_edit", + "name" => "System Admin Edit", + "group" => "Administration Exclusive" + ], + [ "slug" => "administrator.user_password_reset", + "name" => "User Password Edit", + "group" => "Administration Exclusive" + ], + + ]; + + $administratorPermissionList = [ + + [ "slug" => "user.store", + "name" => "User Create", + "group" => "Administration" + ], + [ "slug" => "user.index", + "name" => "User View", + "group" => "Administration" + ], + [ "slug" => "user.create", + "name" => "User Create", + "group" => "Administration" + ], + [ "slug" => "user.status", + "name" => "User Edit", + "group" => "Administration" + ], + [ "slug" => "user.show", + "name" => "User View", + "group" => "Administration" + ], + [ "slug" => "user.update", + "name" => "User Edit", + "group" => "Administration" + ], + [ "slug" => "user.destroy", + "name" => "User Delete", + "group" => "Administration" + ], + [ "slug" => "user.edit", + "name" => "User Edit", + "group" => "Administration" + ], + [ "slug" => "user.permission", + "name" => "User Edit", + "group" => "Administration" + ], + [ + "slug" => "administrator.academic_year_destroy", + "name" => "Academic Year Delete", + "group" => "Administration" + ], + [ + "slug" => "administrator.academic_year", + "name" => "Academic Year View", + "group" => "Administration" + ], + [ + "slug" => "administrator.academic_year_store", + "name" => "Academic Year Create", + "group" => "Administration" + ], + [ + "slug" => "administrator.academic_year_create", + "name" => "Academic Year Create", + "group" => "Administration" + ], + [ + "slug" => "administrator.academic_year_edit", + "name" => "Academic Year Edit", + "group" => "Administration" + ], + [ + "slug" => "administrator.academic_year_status", + "name" => "Academic Year Edit", + "group" => "Administration" + ], + [ + "slug" => "administrator.academic_year_update", + "name" => "Academic Year Edit", + "group" => "Administration" + ], + [ "slug" => "settings.institute", + "name" => "Institute Settings Edit", + "group" => "Administration" + ], + [ "slug" => "settings.report", + "name" => "Report Settings Edit", + "group" => "Administration" + ] + ]; + + $academicPermissionList = [ + [ + "slug" => "academic.class_destroy", + "name" => "Class Delete", + "group" => "Academic" + ], + [ + "slug" => "academic.class", + "name" => "Class View", + "group" => "Academic" + ], + [ + "slug" => "academic.class_store", + "name" => "Class Create", + "group" => "Academic" + ], + [ + "slug" => "academic.class_create", + "name" => "Class Create", + "group" => "Academic" + ], + [ + "slug" => "academic.class_edit", + "name" => "Class Edit", + "group" => "Academic" + ], + [ + "slug" => "academic.class_status", + "name" => "Class Edit", + "group" => "Academic" + ], + [ + "slug" => "academic.class_update", + "name" => "Class Edit", + "group" => "Academic" + ], + [ + "slug" => "academic.section_destroy", + "name" => "Section Delete", + "group" => "Academic" + ], + [ + "slug" => "academic.section", + "name" => "Section View", + "group" => "Academic" + ], + [ + "slug" => "academic.section_store", + "name" => "Section Create", + "group" => "Academic" + ], + [ + "slug" => "academic.section_create", + "name" => "Section Create", + "group" => "Academic" + ], + [ + "slug" => "academic.section_edit", + "name" => "Section Edit", + "group" => "Academic" + ], + [ + "slug" => "academic.section_status", + "name" => "Section Edit", + "group" => "Academic" + ], + [ + "slug" => "academic.section_update", + "name" => "Section Edit", + "group" => "Academic" + ], + //subject + [ + "slug" => "academic.subject_destroy", + "name" => "Subject Delete", + "group" => "Academic" + ], + [ + "slug" => "academic.subject", + "name" => "Subject View", + "group" => "Academic" + ], + [ + "slug" => "academic.subject_store", + "name" => "Subject Create", + "group" => "Academic" + ], + [ + "slug" => "academic.subject_create", + "name" => "Subject Create", + "group" => "Academic" + ], + [ + "slug" => "academic.subject_edit", + "name" => "Subject Edit", + "group" => "Academic" + ], + [ + "slug" => "academic.subject_status", + "name" => "Subject Edit", + "group" => "Academic" + ], + [ + "slug" => "academic.subject_update", + "name" => "Subject Edit", + "group" => "Academic" + ], + //subject end + [ "slug" => "student.store", + "name" => "Student Create", + "group" => "Academic" + ], + [ "slug" => "student.index", + "name" => "Student View", + "group" => "Academic" + ], + [ "slug" => "student.list_by_filter", + "name" => "Student View", + "group" => "Academic" + ], + [ "slug" => "student.create", + "name" => "Student Create", + "group" => "Academic" + ], + [ "slug" => "student.status", + "name" => "Student Edit", + "group" => "Academic" + ], + [ "slug" => "student.destroy", + "name" => "Student Delete", + "group" => "Academic" + ], + [ "slug" => "student.update", + "name" => "Student Edit", + "group" => "Academic" + ], + [ "slug" => "student.show", + "name" => "Student View", + "group" => "Academic" + ], + [ "slug" => "student.edit", + "name" => "Student Edit", + "group" => "Academic" + ], + [ "slug" => "teacher.index", + "name" => "Teacher View", + "group" => "Academic" + ], + [ "slug" => "teacher.store", + "name" => "Teacher Create", + "group" => "Academic" + ], + [ "slug" => "teacher.create", + "name" => "Teacher Create", + "group" => "Academic" + ], + [ "slug" => "teacher.status", + "name" => "Teacher Edit", + "group" => "Academic" + ], + [ "slug" => "teacher.destroy", + "name" => "Teacher Delete", + "group" => "Academic" + ], + [ "slug" => "teacher.update", + "name" => "Teacher Edit", + "group" => "Academic" + ], + [ "slug" => "teacher.show", + "name" => "Teacher View", + "group" => "Academic" + ], + [ "slug" => "teacher.edit", + "name" => "Teacher Edit", + "group" => "Academic" + ], + // student attendance + [ "slug" => "student_attendance.index", + "name" => "Student Attendance View", + "group" => "Academic" + ], + [ "slug" => "student_attendance.store", + "name" => "Student Attendance Create", + "group" => "Academic" + ], + [ "slug" => "student_attendance.create", + "name" => "Student Attendance Create", + "group" => "Academic" + ], + [ "slug" => "student_attendance.status", + "name" => "Student Attendance Edit", + "group" => "Academic" + ], + //student attendance end + ]; + + $websitePermissionList = [ + [ + "slug" => "class_profile.index", + "name" => "Class Profile View", + "group" => "Website" + ], + [ + "slug" => "class_profile.store", + "name" => "Class Profile Create", + "group" => "Website" + ], + [ + "slug" => "class_profile.create", + "name" => "Class Profile Create", + "group" => "Website" + ], + [ + "slug" => "class_profile.show", + "name" => "Class Profile View", + "group" => "Website" + ], + [ + "slug" => "class_profile.update", + "name" => "Class Profile Edit", + "group" => "Website" + ], + [ + "slug" => "class_profile.destroy", + "name" => "Class Profile Delete", + "group" => "Website" + ], + [ + "slug" => "class_profile.edit", + "name" => "Class Profile Edit", + "group" => "Website" + ], + [ "slug" => "event.index", + "name" => "Event View", + "group" => "Website" + ], + [ "slug" => "event.store", + "name" => "Event Create", + "group" => "Website" + ], + [ "slug" => "event.create", + "name" => "Event Create", + "group" => "Website" + ], + [ "slug" => "event.destroy", + "name" => "Event Delete", + "group" => "Website" + ], + [ "slug" => "event.show", + "name" => "Event View", + "group" => "Website" + ], + [ "slug" => "event.update", + "name" => "Event Edit", + "group" => "Website" + ], + [ "slug" => "event.edit", + "name" => "Event Edit", + "group" => "Website" + ], + [ "slug" => "teacher_profile.index", + "name" => "Teacher Profile View", + "group" => "Website" + ], + [ "slug" => "teacher_profile.store", + "name" => "Teacher Profile Create", + "group" => "Website" + ], + [ "slug" => "teacher_profile.create", + "name" => "Teacher Profile Create", + "group" => "Website" + ], + [ "slug" => "teacher_profile.update", + "name" => "Teacher Profile Edit", + "group" => "Website" + ], + [ "slug" => "teacher_profile.show", + "name" => "Teacher Profile View", + "group" => "Website" + ], + [ "slug" => "teacher_profile.destroy", + "name" => "Teacher Profile Delete", + "group" => "Website" + ], + [ "slug" => "teacher_profile.edit", + "name" => "Teacher Profile Edit", + "group" => "Website" + ], + [ "slug" => "site.about_content", + "name" => "Site About Content Edit", + "group" => "Website" + ], + [ "slug" => "site.about_content", + "name" => "Site About Content Edit", + "group" => "Website" + ], + [ "slug" => "site.about_content_image", + "name" => "Site About Content Edit", + "group" => "Website" + ], + [ "slug" => "site.about_content_image", + "name" => "Site About Content Edit", + "group" => "Website" + ], + [ "slug" => "site.about_content_image_delete", + "name" => "Site About Content Delete", + "group" => "Website" + ], + [ "slug" => "site.analytics", + "name" => "Site Analytics Setting Edit", + "group" => "Website" + ], + [ "slug" => "site.analytics", + "name" => "Site Analytics Setting Edit", + "group" => "Website" + ], + [ "slug" => "site.contact_us", + "name" => "Site Contact Us Edit", + "group" => "Website" + ], + [ "slug" => "site.contact_us", + "name" => "Site Contact Us Edit", + "group" => "Website" + ], + [ "slug" => "site.dashboard", + "name" => "Site Dashboard View", + "group" => "Website" + ], + [ "slug" => "site.faq_delete", + "name" => "Site FAQ Delete", + "group" => "Website" + ], + [ "slug" => "site.faq", + "name" => "Site FAQ Create", + "group" => "Website" + ], + [ "slug" => "site.faq", + "name" => "Site FAQ Create", + "group" => "Website" + ], + [ "slug" => "site.gallery", + "name" => "Site Gallery View", + "group" => "Website" + ], + [ "slug" => "site.gallery_image", + "name" => "Site Gallery Create", + "group" => "Website" + ], + [ "slug" => "site.gallery_image", + "name" => "Site Gallery Create", + "group" => "Website" + ], + [ "slug" => "site.gallery_image_delete", + "name" => "Site Gallery Delete", + "group" => "Website" + ], + [ "slug" => "site.service", + "name" => "Site Service Edit", + "group" => "Website" + ], + [ "slug" => "site.service", + "name" => "Site Service Edit", + "group" => "Website" + ], + [ "slug" => "site.settings", + "name" => "Site Settings Edit", + "group" => "Website" + ], + [ "slug" => "site.settings", + "name" => "Site Settings Edit", + "group" => "Website" + ], + [ "slug" => "site.statistic", + "name" => "Site Statistic Edit", + "group" => "Website" + ], + [ "slug" => "site.statistic", + "name" => "Site Statistic Edit", + "group" => "Website" + ], + [ "slug" => "site.subscribe", + "name" => "Site Subscriber View", + "group" => "Website" + ], + [ "slug" => "site.testimonial", + "name" => "Site Testimonial View", + "group" => "Website" + ], + [ "slug" => "site.testimonial_delete", + "name" => "Site Testimonial Delete", + "group" => "Website" + ], + [ "slug" => "site.testimonial_create", + "name" => "Site Testimonial Create", + "group" => "Website" + ], + [ "slug" => "site.testimonial_create", + "name" => "Site Testimonial Create", + "group" => "Website" + ], + [ "slug" => "site.timeline", + "name" => "Site Timeline Create", + "group" => "Website" + ], + [ "slug" => "site.timeline", + "name" => "Site Timeline Create", + "group" => "Website" + ], + [ "slug" => "site.timeline_delete", + "name" => "Site Timeline Delete", + "group" => "Website" + ], + [ "slug" => "slider.index", + "name" => "Slider View", + "group" => "Website" + ], + [ "slug" => "slider.store", + "name" => "Slider Create", + "group" => "Website" + ], + [ "slug" => "slider.create", + "name" => "Slider Create", + "group" => "Website" + ], + [ "slug" => "slider.destroy", + "name" => "Slider Delete", + "group" => "Website" + ], + [ "slug" => "slider.update", + "name" => "Slider Edit", + "group" => "Website" + ], + [ "slug" => "slider.show", + "name" => "Slider View", + "group" => "Website" + ], + [ "slug" => "slider.edit", + "name" => "Slider Edit", + "group" => "Website" + ] + ]; + + $hrmPermissionList = [ + // Employee + [ "slug" => "hrm.employee.index", + "name" => "Employee View", + "group" => "HRM" + ], + [ "slug" => "hrm.employee.store", + "name" => "Employee Create", + "group" => "HRM" + ], + [ "slug" => "hrm.employee.create", + "name" => "Employee Create", + "group" => "HRM" + ], + [ "slug" => "hrm.employee.status", + "name" => "Employee Edit", + "group" => "HRM" + ], + [ "slug" => "hrm.employee.destroy", + "name" => "Employee Delete", + "group" => "HRM" + ], + [ "slug" => "hrm.employee.update", + "name" => "Employee Edit", + "group" => "HRM" + ], + [ "slug" => "hrm.employee.show", + "name" => "Employee View", + "group" => "HRM" + ], + [ "slug" => "hrm.employee.edit", + "name" => "Employee Edit", + "group" => "HRM" + ], + // Employee + // Leave + [ "slug" => "hrm.leave.index", + "name" => "Leave View", + "group" => "HRM" + ], + [ "slug" => "hrm.leave.store", + "name" => "Leave Create", + "group" => "HRM" + ], + [ "slug" => "hrm.leave.create", + "name" => "Leave Create", + "group" => "HRM" + ], + [ "slug" => "hrm.leave.destroy", + "name" => "Leave Delete", + "group" => "HRM" + ], + [ "slug" => "hrm.leave.update", + "name" => "Leave Edit", + "group" => "HRM" + ], + [ "slug" => "hrm.leave.show", + "name" => "Leave View", + "group" => "HRM" + ], + [ "slug" => "hrm.leave.edit", + "name" => "Leave Edit", + "group" => "HRM" + ], + // Leave + // Policy + [ "slug" => "hrm.policy", + "name" => "Policy View", + "group" => "HRM" + ], + [ "slug" => "hrm.policy", + "name" => "Policy Create", + "group" => "HRM" + ], + // Policy + // employee attendance + [ "slug" => "employee_attendance.index", + "name" => "Employee Attendance View", + "group" => "HRM" + ], + [ "slug" => "employee_attendance.store", + "name" => "Employee Attendance Create", + "group" => "HRM" + ], + [ "slug" => "employee_attendance.create", + "name" => "Employee Attendance Create", + "group" => "HRM" + ], + [ "slug" => "employee_attendance.status", + "name" => "Employee Attendance Edit", + "group" => "HRM" + ], + //employee attendance end + ]; + + $examPermissionList = [ + // Exam + [ "slug" => "exam.index", + "name" => "Exam View", + "group" => "Exam" + ], + [ "slug" => "exam.create", + "name" => "Exam Create", + "group" => "Exam" + ], + [ "slug" => "exam.store", + "name" => "Exam Create", + "group" => "Exam" + ], + [ "slug" => "exam.edit", + "name" => "Exam Edit", + "group" => "Exam" + ], + [ "slug" => "exam.update", + "name" => "Exam Edit", + "group" => "Exam" + ], + [ "slug" => "exam.status", + "name" => "Exam Edit", + "group" => "Exam" + ], + [ "slug" => "exam.destroy", + "name" => "Exam Delete", + "group" => "Exam" + ], + // Exam End + // Grade + [ "slug" => "exam.grade.index", + "name" => "Grade View", + "group" => "Exam" + ], + [ "slug" => "exam.grade.create", + "name" => "Grade Create", + "group" => "Exam" + ], + [ "slug" => "exam.grade.store", + "name" => "Grade Create", + "group" => "Exam" + ], + [ "slug" => "exam.grade.edit", + "name" => "Grade Edit", + "group" => "Exam" + ], + [ "slug" => "exam.grade.update", + "name" => "Grade Edit", + "group" => "Exam" + ], + [ "slug" => "exam.grade.destroy", + "name" => "Grade Delete", + "group" => "Exam" + ], + // Grade End + // Exam rule + [ "slug" => "exam.rule.index", + "name" => "Exam Rule View", + "group" => "Exam" + ], + [ "slug" => "exam.rule.create", + "name" => "Exam Rule Create", + "group" => "Exam" + ], + [ "slug" => "exam.rule.store", + "name" => "Exam Rule Create", + "group" => "Exam" + ], + [ "slug" => "exam.rule.edit", + "name" => "Exam Rule Edit", + "group" => "Exam" + ], + [ "slug" => "exam.rule.update", + "name" => "Exam Rule Edit", + "group" => "Exam" + ], + [ "slug" => "exam.rule.destroy", + "name" => "Exam Rule Delete", + "group" => "Exam" + ], + // Exam rule End + // Exam Marks + [ "slug" => "marks.index", + "name" => "Marks View", + "group" => "Exam" + ], + [ "slug" => "marks.create", + "name" => "Marks Create", + "group" => "Exam" + ], + [ "slug" => "marks.store", + "name" => "Marks Create", + "group" => "Exam" + ], + [ "slug" => "marks.edit", + "name" => "Marks Edit", + "group" => "Exam" + ], + [ "slug" => "marks.update", + "name" => "Marks Edit", + "group" => "Exam" + ], + // Exam Marks End + // Exam Result + [ "slug" => "result.index", + "name" => "Result View", + "group" => "Exam" + ], + [ "slug" => "result.create", + "name" => "Result Create", + "group" => "Exam" + ], + [ "slug" => "result.delete", + "name" => "Result Delete", + "group" => "Exam" + ], + // Exam Result End + // Promotion + [ "slug" => "promotion.create", + "name" => "Promotion Create", + "group" => "Exam" + ], + [ "slug" => "promotion.store", + "name" => "Promotion Create", + "group" => "Exam" + ], + // Promotion End + ]; + + + $reportsPermissionList = [ + // Report + [ + "slug" => "report.student_monthly_attendance", + "name" => "Student Monthly Attendance View", + "group" => "Report" + ], + [ + "slug" => "report.student_list", + "name" => "Student List View", + "group" => "Report" + ], + [ + "slug" => "report.employee_list", + "name" => "Employee List View", + "group" => "Report" + ], + [ + "slug" => "report.employee_monthly_attendance", + "name" => "Employee Monthly Attendance View", + "group" => "Report" + ], + // Report + ]; + + //merge all permissions and insert into db + $permissions = array_merge($commonPermissionList, $exclusiveAdministratorPermissionList, + $administratorPermissionList, $academicPermissionList, $websitePermissionList, $hrmPermissionList, + $examPermissionList, $reportsPermissionList); + + + echo PHP_EOL , 'seeding permissions...'; + + Permission::insert($permissions); + + echo PHP_EOL , 'seeding role permissions...', PHP_EOL; + //now add admin role permissions + $admin = Role::where('name', 'admin')->first(); + $permissions = Permission::where('group', '!=', 'Administration Exclusive')->get(); + $admin->permissions()->saveMany($permissions); + + //now add other roles common permissions + $permissions = Permission::where('group', 'Common')->get(); + + $roles = Role::where('name', '!=', 'admin')->get(); + foreach ($roles as $role){ + echo 'seeding '.$role->name.' permissions...', PHP_EOL; + $role->permissions()->saveMany($permissions); + } + } +} diff --git a/database/seeds/RolesTableSeeder.php b/database/seeds/RolesTableSeeder.php new file mode 100755 index 00000000..5fb52b32 --- /dev/null +++ b/database/seeds/RolesTableSeeder.php @@ -0,0 +1,64 @@ + 'Admin', + 'deletable' => false, + ] + ); + Role::create( + [ + 'name' => 'Teacher', + 'deletable' => false, + ] + ); + + Role::create( + [ + 'name' => 'Student', + 'deletable' => false, + ] + ); + Role::create( + [ + 'name' => 'Parents', + 'deletable' => false, + ] + ); + Role::create( + [ + 'name' => 'Accountant', + 'deletable' => false, + ] + ); + Role::create( + [ + 'name' => 'Librarian', + 'deletable' => false, + ] + ); + Role::create( + [ + 'name' => 'Receptionist', + 'deletable' => false, + ] + ); + + + } + +} diff --git a/database/seeds/UsersTableSeeder.php b/database/seeds/UsersTableSeeder.php new file mode 100755 index 00000000..7fcfe64b --- /dev/null +++ b/database/seeds/UsersTableSeeder.php @@ -0,0 +1,54 @@ + 'Super Admin', + 'username' => 'superadmin', + 'email' => 'superadmin@cloudschoolbd.com', + 'password' => bcrypt('super99'), + 'remember_token' => null, + 'is_super_admin' => true + ] + ); + + $user = User::create( + [ + 'name' => 'Mr. admin', + 'username' => 'admin', + 'email' => 'admin@cloudschoolbd.com', + 'password' => bcrypt('demo123'), + 'remember_token' => null, + ] + ); + + UserRole::create( + [ + 'user_id' => $superAdmin->id, + 'role_id' => AppHelper::USER_ADMIN + ] + ); + UserRole::create( + [ + 'user_id' => $user->id, + 'role_id' => AppHelper::USER_ADMIN + ] + ); + + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..de42cbe2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8984 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "dev": true + }, + "@babel/core": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "dev": true, + "requires": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz", + "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "requires": { + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "requires": { + "@babel/types": "^7.24.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + } + }, + "@babel/helper-replace-supers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + } + }, + "@babel/helpers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "dev": true, + "requires": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + } + }, + "@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.24.1" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz", + "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz", + "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.1" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/preset-env": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.3.tgz", + "integrity": "sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.1", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.1", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + } + }, + "@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/clean-css": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.11.tgz", + "integrity": "sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==", + "dev": true, + "requires": { + "@types/node": "*", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.56.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.6.tgz", + "integrity": "sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.43", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", + "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.5.tgz", + "integrity": "sha512-tah3dm+5sG+fEDAz6CrQ5evuEaPX9K6DF3E5a01MPOKhA2oGBoC+oA5EJzSugB905sN4DE19EDzldT2Cld2g6Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin-gifsicle": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.4.tgz", + "integrity": "sha512-ZghMBd/Jgqg5utTJNPmvf6DkuHzMhscJ8vgf/7MUGCpO+G+cLrhYltL+5d+h3A1B4W73S2SrmJZ1jS5LACpX+A==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-mozjpeg": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.4.tgz", + "integrity": "sha512-ZCAxV8SYJB8ehwHpnbRpHjg5Wc4HcyuAMiDhXbkgC7gujDoOTyHO3dhDkUtZ1oK1DLBRZapqG9etdLVhUml7yQ==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-optipng": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.4.tgz", + "integrity": "sha512-mvKnDMC8eCYZetAQudjs1DbgpR84WhsTx1wgvdiXnpuUEti3oJ+MaMYBRWPY0JlQ4+y4TXKOfa7+LOuT8daegQ==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-svgo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", + "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", + "dev": true, + "requires": { + "@types/imagemin": "*", + "@types/svgo": "^1" + } + }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", + "dev": true + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/node": { + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/svgo": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", + "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", + "dev": true + }, + "@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + } + } + }, + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz", + "integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "requires": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz", + "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.1" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bootstrap": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz", + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==" + }, + "bootstrap-colorpicker": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/bootstrap-colorpicker/-/bootstrap-colorpicker-3.4.0.tgz", + "integrity": "sha512-7vA0hvLrat3ptobEKlT9+6amzBUJcDAoh6hJRQY/AD+5dVZYXXf1ivRfrTwmuwiVLJo9rZwM8YB4lYzp6agzqg==", + "requires": { + "bootstrap": ">=4.0", + "jquery": ">=2.2", + "popper.js": ">=1.10" + }, + "dependencies": { + "bootstrap": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", + "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "dev": true + }, + "chainsaw": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", + "integrity": "sha1-EaBRAtHEx4W20EFdM21aOhYSkT4=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true + }, + "chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "requires": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "requires": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "requires": { + "color-name": "^1.0.0" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "collect.js": { + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.36.1.tgz", + "integrity": "sha512-jd97xWPKgHn6uvK31V6zcyPd40lUJd7gpYxbN2VOVxGWO4tyvS9Li4EpsFjXepGTo2tYcOTC4a8YsbQXMJ4XUw==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + }, + "dependencies": { + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha512-f/ZaH1aLe64qHgTILdldbvyfGiGF4uzeo9IuXUloIOLQzFmIPloy9QbZadNsuVv0j5qbKQvQb/H/UYf2UsKTpw==", + "dev": true, + "requires": { + "commander": "^2.9.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js-compat": { + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", + "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", + "dev": true, + "requires": { + "browserslist": "^4.23.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-env": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", + "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true + }, + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "datatables.net": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.11.3.tgz", + "integrity": "sha512-VMj5qEaTebpNurySkM6jy6sGpl+s6onPK8xJhYr296R/vUBnz1+id16NVqNf9z5aR076OGcpGHCuiTuy4E05oQ==", + "requires": { + "jquery": ">=1.7" + } + }, + "datatables.net-bs": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-1.11.0.tgz", + "integrity": "sha512-oVUDiKtL/kJZP9rXWQutcU1s6Gu8sm90LXvAbbN8rORlg+ovjpOF3AjKGIcNJgRaYSeZlYkvF2iUYi4Me+2FMA==", + "requires": { + "datatables.net": ">=1.10.25", + "jquery": ">=1.7" + } + }, + "datatables.net-responsive": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.2.5.tgz", + "integrity": "sha512-AuF28BJRQWfke0cwZwgJB5+WHgoDCDAnW59TJWX4JAXYes3iFrJA6mNHWw46Up3bqUJVI2ZxJoKTGpoEHm5hNA==", + "requires": { + "datatables.net": "^1.10.15", + "jquery": ">=1.7" + } + }, + "datatables.net-responsive-bs": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.2.5.tgz", + "integrity": "sha512-O3tIWZUiFtdHm5CkQ9I1vaQBQ74cchOq19JkYzWykkwP5mzW+tKuHINcajxDL5GJo8WXejG9BSNq6ZRK1BQkBw==", + "requires": { + "datatables.net-bs": "^1.10.15", + "datatables.net-responsive": "2.2.5", + "jquery": ">=1.7" + } + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.715", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", + "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==", + "dev": true + }, + "elliptic": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envinfo": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", + "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-module-lexer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.2.tgz", + "integrity": "sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==", + "dev": true + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "express": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.1.tgz", + "integrity": "sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastclick": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fastclick/-/fastclick-1.0.6.tgz", + "integrity": "sha1-FhYlsnsaWAZAWTa9qaLBkm0Gvmo=" + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hashish": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", + "integrity": "sha1-bWC8b/r3Ebav1g5CbQd5iAFOZVQ=", + "requires": { + "traverse": ">=0.2.4" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true + }, + "html-loader": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", + "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "dev": true, + "requires": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + } + } + }, + "htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "icheck": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/icheck/-/icheck-1.0.2.tgz", + "integrity": "sha1-BtCNo9R65EjBU7Jjm4bprX/fcSg=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "dev": true, + "requires": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + } + }, + "img-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz", + "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "install": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/install/-/install-0.11.2.tgz", + "integrity": "sha512-vm3WeuqkmCK/jD56s7pWLKl4QoHMdcIwLlsMAFYV3XAbrz+RdyOJvtIQn/A1LiaNz2djUdwec01/90KLSIaUGg==" + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jquery": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.0.tgz", + "integrity": "sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ==" + }, + "jquery-slimscroll": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/jquery-slimscroll/-/jquery-slimscroll-1.3.8.tgz", + "integrity": "sha1-hIHETnpHaHZTkIoo9/cK7WTITjY=", + "requires": { + "jquery": ">= 1.7" + } + }, + "jquery-ui": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.13.2.tgz", + "integrity": "sha512-wBZPnqWs5GaYJmo1Jj0k/mrSkzdQzKDwhXNtHKcBdAcKVxMM3KNYFq+iJ2i1rwiG53Z8M4mTn3Qxrm17uH1D4Q==", + "requires": { + "jquery": ">=1.8.0 <4.0.0" + } + }, + "jquery-validation": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/jquery-validation/-/jquery-validation-1.19.5.tgz", + "integrity": "sha512-X2SmnPq1mRiDecVYL8edWx+yTBZDyC8ohWXFhXdtqFHgU9Wd4KHkvcbCoIZ0JaSaumzS8s2gXSkP8F7ivg/8ZQ==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true + }, + "laravel-mix": { + "version": "6.0.49", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.49.tgz", + "integrity": "sha512-bBMFpFjp26XfijPvY5y9zGKud7VqlyOE0OWUcPo3vTBY5asw8LTjafAbee1dhfLz6PWNqDziz69CP78ELSpfKw==", + "dev": true, + "requires": { + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/runtime": "^7.15.4", + "@types/babel__core": "^7.1.16", + "@types/clean-css": "^4.2.5", + "@types/imagemin-gifsicle": "^7.0.1", + "@types/imagemin-mozjpeg": "^8.0.1", + "@types/imagemin-optipng": "^5.2.1", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.4.0", + "babel-loader": "^8.2.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "clean-css": "^5.2.4", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.5", + "commander": "^7.2.0", + "concat": "^1.0.3", + "css-loader": "^5.2.6", + "cssnano": "^5.0.8", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^4.0.0", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.6.2", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.1.0", + "postcss-loader": "^6.2.0", + "semver": "^7.3.5", + "strip-ansi": "^6.0.0", + "style-loader": "^2.0.0", + "terser": "^5.9.0", + "terser-webpack-plugin": "^5.2.4", + "vue-style-loader": "^4.1.3", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.8.0", + "webpack-notifier": "^1.14.1", + "webpackbar": "^5.0.0-3", + "yargs": "^17.2.1" + }, + "dependencies": { + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, + "node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dev": true, + "requires": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "dependencies": { + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true + } + } + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", + "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "remove": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/remove/-/remove-0.1.5.tgz", + "integrity": "sha1-CV/9gn1lyfQa2X0z5BanWBEHmVU=", + "requires": { + "seq": ">= 0.3.5" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.26.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz", + "integrity": "sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "script-loader": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz", + "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==", + "dev": true, + "requires": { + "raw-loader": "~0.5.1" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "select2": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/select2/-/select2-4.0.13.tgz", + "integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==" + }, + "selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "requires": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "seq": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/seq/-/seq-0.3.5.tgz", + "integrity": "sha1-rgKvOkJHk9jMvyEtaRdODFTf/jg=", + "requires": { + "chainsaw": ">=0.0.7 <0.1", + "hashish": ">=0.0.2 <0.1" + } + }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "sweetalert2": { + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-7.33.1.tgz", + "integrity": "sha512-69KYtyhtxejFG0HDb8aVhAwbpAWPSTZwaL5vxDHgojErD2KeFxTmRgmkbiLtMC8UdTFXRmvTPtZTF4459MUb7w==" + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", + "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toastr": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/toastr/-/toastr-2.1.4.tgz", + "integrity": "sha1-i0O+ZPudDEFIcURvLbjoyk6V8YE=", + "requires": { + "jquery": ">=1.12.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "vue-template-compiler": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", + "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.16.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + } + }, + "webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + } + }, + "webpack-notifier": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", + "dev": true, + "requires": { + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..8250c546 --- /dev/null +++ b/package.json @@ -0,0 +1,49 @@ +{ + "private": true, + "scripts": { + "prefrontend-dev": "rm -rf public/frontend", + "frontend-dev": "npm run frontend-development", + "frontend-development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js --env.mixfile=webpack.frontend.mix.js", + "frontend-watch": "npm run frontend-development -- --watch", + "frontend-prod": "npm run frontend-production", + "frontend-production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js --env.mixfile=webpack.frontend.mix.js", + "prebackend-dev": "rm -rf public/css public/js public/fonts public/images", + "backend-dev": "npm run backend-development", + "backend-development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js --env.mixfile=webpack.backend.mix.js", + "backend-watch": "npm run backend-development -- --watch", + "backend-prod": "npm run backend-production", + "backend-production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js --env.mixfile=webpack.backend.mix.js" + }, + "devDependencies": { + "axios": "^1.6.8", + "cross-env": "^7.0", + "laravel-mix": "^6.0.49", + "resolve-url-loader": "^5.0.0", + "sass": "^1.15.2", + "sass-loader": "^8.0.0", + "script-loader": "^0.7.2", + "vue-template-compiler": "^2.6.11" + }, + "dependencies": { + "bootstrap": "^3.4.0", + "bootstrap-colorpicker": "^3.4.0", + "chart.js": "^2.9.4", + "datatables.net": "^1.11.3", + "datatables.net-bs": "^1.11.0", + "datatables.net-responsive-bs": "^2.2.1", + "fastclick": "^1.0.6", + "font-awesome": "^4.7.0", + "icheck": "^1.0.2", + "install": "^0.11.0", + "jquery": "3.5.0", + "jquery-slimscroll": "^1.3.8", + "jquery-ui": "^1.13.2", + "jquery-validation": "^1.19.5", + "moment": "2.29.4", + "remove": "^0.1.5", + "select2": "^4.0.12", + "sweetalert2": "^7.33.1", + "toastr": "^2.1.4", + "popper.js": "^1.16.0" + } +} diff --git a/phpunit.xml b/phpunit.xml old mode 100644 new mode 100755 index c3304205..c9e326b6 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,18 +1,33 @@ + stopOnFailure="false"> - - ./app/tests/ + + ./tests/Feature + + + + ./tests/Unit + + + ./app + + + + + + + + + + diff --git a/public/.htaccess b/public/.htaccess old mode 100644 new mode 100755 index 77827ae7..b75525be --- a/public/.htaccess +++ b/public/.htaccess @@ -1,12 +1,18 @@ - Options -MultiViews + Options -MultiViews -Indexes RewriteEngine On - # Redirect Trailing Slashes... - RewriteRule ^(.*)/$ /$1 [L,R=301] + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d diff --git a/public/admission/001.jpeg b/public/admission/001.jpeg deleted file mode 100644 index 45a38698..00000000 Binary files a/public/admission/001.jpeg and /dev/null differ diff --git a/public/admission/001.png b/public/admission/001.png deleted file mode 100644 index ec5aab43..00000000 Binary files a/public/admission/001.png and /dev/null differ diff --git a/public/admission/003.jpeg b/public/admission/003.jpeg deleted file mode 100644 index 45a38698..00000000 Binary files a/public/admission/003.jpeg and /dev/null differ diff --git a/public/attendance.txt b/public/attendance.txt deleted file mode 100644 index faa7083c..00000000 --- a/public/attendance.txt +++ /dev/null @@ -1,232 +0,0 @@ -003:0000000010:20171108:112222 -003:0000000011:20171108:112550 -003:0000000013:20171108:112757 -003:0000000025:20171108:113006 -003:0000000039:20171108:113321 -003:0000000014:20171108:113553 -003:0000000035:20171108:113742 -003:0000000022:20171108:114306 -003:0000000027:20171108:114440 -003:0000000027:20171108:114441 -003:0000000042:20171108:114751 -003:0000000019:20171108:115255 -003:0000000043:20171108:120702 -003:0000000046:20171108:121031 -003:0000000031:20171108:121200 -003:0000000015:20171108:121329 -003:0000000024:20171108:121533 -003:0000000030:20171108:121735 -003:0000000021:20171108:121959 -003:0000000016:20171108:122116 -003:0000000023:20171108:122410 -003:0000000045:20171108:122842 -003:0000000048:20171108:123014 -003:0000000047:20171108:123130 -003:0000000053:20171108:123257 -003:0000000051:20171108:123405 -003:0000000052:20171108:123520 -003:0000000054:20171108:123622 -003:0000000055:20171108:124007 -003:0000000010:20171108:124320 -003:0000000010:20171108:124332 -003:0000000010:20171108:124337 -003:0000000036:20171108:125236 -003:0000000034:20171108:125522 -003:0000000034:20171108:125523 -003:0000000040:20171108:125632 -003:0000000017:20171108:130105 -003:0000000032:20171108:130558 -003:0000000044:20171108:130757 -003:0000000029:20171109:104709 -003:0000000037:20171109:104835 -003:0000000038:20171109:105229 -003:0000000049:20171109:105624 -003:0000000050:20171109:105741 -003:0000000050:20171109:105742 -003:0000000012:20171109:105905 -003:0000000020:20171109:110736 -003:0000000033:20171109:111332 -003:0000000041:20171109:113810 -003:0000000026:20171109:114335 -003:0000000046:20171109:123149 -003:0000000024:20171109:123523 -003:0000000023:20171109:123538 -003:0000000036:20171109:123541 -003:0000000035:20171109:123550 -003:0000000034:20171109:123613 -003:0000000019:20171109:123621 -003:0000000003:20171109:123904 -003:0000000040:20171109:130120 -003:0000000039:20171109:134154 -003:0000000039:20171109:134155 -003:0000000044:20171109:142703 -003:0000000012:20171109:144547 -003:0000000035:20171109:144836 -003:0000000019:20171109:144848 -003:0000000014:20171109:144853 -003:0000000041:20171109:144900 -003:0000000034:20171109:144905 -003:0000000037:20171109:144908 -003:0000000036:20171109:144913 -003:0000000043:20171109:144916 -003:0000000038:20171109:144920 -003:0000000033:20171109:144924 -003:0000000044:20171109:144927 -003:0000000039:20171109:144934 -003:0000000021:20171109:144938 -003:0000000032:20171109:144941 -003:0000000016:20171109:144946 -003:0000000035:20171109:144951 -003:0000000040:20171109:145006 -003:0000000042:20171109:145009 -003:0000000017:20171109:145118 -003:0000000011:20171109:145126 -003:0000000026:20171109:145131 -003:0000000013:20171109:145253 -003:0000000024:20171109:145526 -003:0000000023:20171109:145535 -003:0000000031:20171109:145739 -003:0000000054:20171109:162221 -003:0000000051:20171109:162227 -003:0000000055:20171109:162233 -003:0000000048:20171109:162246 -003:0000000053:20171109:162302 -003:0000000050:20171109:162307 -003:0000000046:20171109:163506 -003:0000000010:20171109:163516 -003:0000000045:20171109:163528 -003:0000000047:20171109:163621 -003:0000000052:20171109:163627 -003:0000000049:20171109:194046 -003:0000000048:20171110:070105 -003:0000000052:20171110:082149 -003:0000000052:20171110:082255 -003:0000000052:20171110:082256 -003:0000000052:20171110:082351 -003:0000000049:20171110:082358 -003:0000000052:20171110:162707 -003:0000000048:20171110:162721 -003:0000000049:20171110:193326 -003:0000000053:20171111:080444 -003:0000000049:20171111:083001 -003:0000000031:20171111:084950 -003:0000000050:20171111:085027 -003:0000000055:20171111:085444 -003:0000000054:20171111:085709 -003:0000000046:20171111:085842 -003:0000000051:20171111:090304 -003:0000000032:20171111:090316 -003:0000000013:20171111:090625 -003:0000000044:20171111:091523 -003:0000000023:20171111:092316 -003:0000000047:20171111:092337 -003:0000000011:20171111:092612 -003:0000000012:20171111:092656 -003:0000000016:20171111:093439 -003:0000000042:20171111:093613 -003:0000000033:20171111:093653 -003:0000000041:20171111:093758 -003:0000000043:20171111:093803 -003:0000000010:20171111:093823 -003:0000000035:20171111:093828 -003:0000000040:20171111:093831 -003:0000000021:20171111:093834 -003:0000000019:20171111:094528 -003:0000000036:20171111:095213 -003:0000000017:20171111:095222 -003:0000000045:20171111:095235 -003:0000000037:20171111:095247 -003:0000000034:20171111:095738 -003:0000000034:20171111:095739 -003:0000000038:20171111:101400 -003:0000000027:20171111:102151 -003:0000000039:20171111:102241 -003:0000000024:20171111:102301 -003:0000000020:20171111:102844 -003:0000000015:20171111:103533 -003:0000000025:20171111:104720 -003:0000000014:20171111:105844 -003:0000000022:20171111:120717 -003:0000000010:20171111:132502 -003:0000000022:20171111:140802 -003:0000000039:20171111:154236 -003:0000000037:20171111:155624 -003:0000000048:20171111:162910 -003:0000000022:20171111:164119 -003:0000000041:20171111:164128 -003:0000000043:20171111:164135 -003:0000000038:20171111:164206 -003:0000000016:20171111:164326 -003:0000000015:20171111:164331 -003:0000000013:20171111:164342 -003:0000000014:20171111:164407 -003:0000000025:20171111:164413 -003:0000000053:20171111:171746 -003:0000000020:20171111:171839 -003:0000000020:20171111:171842 -003:0000000035:20171111:171854 -003:0000000044:20171111:171900 -003:0000000012:20171111:171906 -003:0000000036:20171111:171916 -003:0000000042:20171111:171927 -003:0000000031:20171111:171931 -003:0000000040:20171111:171939 -003:0000000019:20171111:171945 -003:0000000017:20171111:171951 -003:0000000034:20171111:172005 -003:0000000023:20171111:172011 -003:0000000024:20171111:172019 -003:0000000032:20171111:172032 -003:0000000021:20171111:172038 -003:0000000050:20171111:172043 -003:0000000011:20171111:172059 -003:0000000033:20171111:172106 -003:0000000051:20171111:172111 -003:0000000045:20171111:172119 -003:0000000055:20171111:172138 -003:0000000046:20171111:172219 -003:0000000054:20171111:172226 -003:0000000047:20171111:172516 -003:0000000027:20171111:172544 -003:0000000052:20171112:082030 -003:0000000053:20171112:084732 -003:0000000055:20171112:084816 -003:0000000050:20171112:085705 -003:0000000051:20171112:090103 -003:0000000010:20171112:094349 -003:0000000030:20171112:094402 -003:0000000022:20171112:094413 -003:0000000047:20171112:094418 -003:0000000054:20171112:094509 -003:0000000045:20171112:094530 -003:0000000016:20171112:094539 -003:0000000035:20171112:094550 -003:0000000021:20171112:094602 -003:0000000046:20171112:094608 -003:0000000037:20171112:094652 -003:0000000043:20171112:094701 -003:0000000041:20171112:094710 -003:0000000012:20171112:094718 -003:0000000012:20171112:094719 -003:0000000027:20171112:094724 -003:0000000042:20171112:094727 -003:0000000044:20171112:094731 -003:0000000044:20171112:094746 -003:0000000033:20171112:094749 -003:0000000027:20171112:094800 -003:0000000023:20171112:094809 -003:0000000032:20171112:094811 -003:0000000019:20171112:094830 -003:0000000024:20171112:094843 -003:0000000025:20171112:094849 -003:0000000015:20171112:095102 -003:0000000040:20171112:095110 -003:0000000011:20171112:095432 -003:0000000017:20171112:095456 -003:0000000034:20171112:095503 -003:0000000013:20171112:100459 -003:0000000031:20171112:100507 -003:0000000020:20171112:101023 -003:0000000039:20171112:102009 -003:0000000038:20171112:102037 -003:0000000014:20171112:104934 diff --git a/public/bower_components/bootstrap-tour/.bower.json b/public/bower_components/bootstrap-tour/.bower.json deleted file mode 100644 index bc2dce53..00000000 --- a/public/bower_components/bootstrap-tour/.bower.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "bootstrap-tour", - "version": "0.8.0", - "main": [ - "./build/js/bootstrap-tour.js", - "./build/css/bootstrap-tour.css" - ], - "dependencies": { - "bootstrap": ">=2.3.2", - "jquery": ">=1.9.0" - }, - "homepage": "https://github.com/sorich87/bootstrap-tour", - "_release": "0.8.0", - "_resolution": { - "type": "version", - "tag": "v0.8.0", - "commit": "cb2b57c70b52303a4efc482e27e16545529ed39e" - }, - "_source": "git://github.com/sorich87/bootstrap-tour.git", - "_target": "~0.8.0", - "_originalSource": "bootstrap-tour", - "_direct": true -} \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/.gitignore b/public/bower_components/bootstrap-tour/.gitignore deleted file mode 100644 index e54fc47b..00000000 --- a/public/bower_components/bootstrap-tour/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.grunt -node_modules -components -bootstrap-tour.sublime-project -bootstrap-tour.sublime-workspace -npm-debug.log -test -_SpecRunner.html diff --git a/public/bower_components/bootstrap-tour/.travis.yml b/public/bower_components/bootstrap-tour/.travis.yml deleted file mode 100644 index d3f38ba7..00000000 --- a/public/bower_components/bootstrap-tour/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -node_js: - - "0.8" -before_script: - - npm install -g grunt-cli -branches: - only: - - master - - develop \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/Gruntfile.coffee b/public/bower_components/bootstrap-tour/Gruntfile.coffee deleted file mode 100644 index d396d547..00000000 --- a/public/bower_components/bootstrap-tour/Gruntfile.coffee +++ /dev/null @@ -1,218 +0,0 @@ -'use strict' - -module.exports = (grunt)-> - # project configuration - grunt.initConfig - # load package information - pkg: grunt.file.readJSON 'package.json' - - meta: - banner: "/* ===========================================================\n" + - "# <%= pkg.name %> - v<%= pkg.version %>\n" + - "# <%= pkg.homepage %>\n" + - "# ==============================================================\n" + - "# Copyright 2012-2013 <%= pkg.author.name %>\n" + - "#\n" + - "# Licensed under the Apache License, Version 2.0 (the \"License\");\n" + - "# you may not use this file except in compliance with the License.\n" + - "# You may obtain a copy of the License at\n" + - "#\n" + - "# http://www.apache.org/licenses/LICENSE-2.0\n" + - "#\n" + - "# Unless required by applicable law or agreed to in writing, software\n" + - "# distributed under the License is distributed on an \"AS IS\" BASIS,\n" + - "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + - "# See the License for the specific language governing permissions and\n" + - "# limitations under the License.\n" + - "*/\n" - - coffeelint: - options: - indentation: - value: 2 - level: "error" - no_trailing_semicolons: - level: "error" - no_trailing_whitespace: - level: "error" - max_line_length: - level: "ignore" - default: ["Gruntfile.coffee", "src/**/*.coffee"] - doc: ["Gruntfile.coffee", "docs/*.coffee"] - - clean: - default: "build" - test: "test" - - coffee: - options: - bare: true - default: - expand: true - flatten: true - cwd: "src/coffee" - src: ["*.coffee"] - dest: "build/js" - ext: ".js" - test: - expand: true - flatten: true - cwd: "src/spec" - src: ["*.spec.coffee"] - dest: "test" - ext: ".spec.js" - doc: - src: "docs/index.coffee" - dest: "docs/assets/js/index.js" - - concat: - options: - banner: "<%= meta.banner %>" - default: - expand: true - flatten: true - cwd: "build/js" - src: ["*.js"] - dest: "build/js" - ext: ".js" - style: - expand: true - flatten: true - cwd: "build/css" - src: ["*.css", "!*.min.css"] - dest: "build/css" - ext: ".css" - style_min: - expand: true - flatten: true - cwd: "build/css" - src: ["*.min.css"] - dest: "build/css" - ext: ".min.css" - - less: - default: - src: "src/less/<%= pkg.name %>.less" - dest: "build/css/<%= pkg.name %>.css" - min: - options: - compress: true - cleancss: true - src: "src/less/<%= pkg.name %>.less" - dest: "build/css/<%= pkg.name %>.min.css" - - uglify: - options: - banner: "<%= meta.banner %>" - default: - expand: true - flatten: true - cwd: "build/js" - src: ["*.js"] - dest: "build/js" - ext: ".min.js" - - watch: - default: - files: ["src/coffee/*.coffee"] - tasks: ["build"] - test: - files: ["src/spec/*.coffee"] - tasks: ["test"] - doc: - files: ["docs/*.coffee"] - tasks: ["coffeelint:doc", "coffee:doc"] - options: - livereload: true - - jasmine: - options: - keepRunner: true - vendor: [ - "docs/assets/vendor/jquery.js" - "docs/assets/vendor/bootstrap.js" - ] - specs: "test/*.spec.js" - src: "build/js/<%= pkg.name %>.js" - - copy: - default: - files: [ - expand: true - cwd: "build/js" - dest: "docs/assets/js" - src: ["*.js"] - , - expand: true - cwd: "build/css" - dest: "docs/assets/css" - src: ["*.css"] - ] - - connect: - default: - options: - port: 3000 - base: "docs" - - open: - default: - path: "http://localhost:<%= connect.default.options.port %>" - - bump: - options: - files: ["package.json", "bower.json"] - updateConfigs: ["pkg"] - commit: true - commitMessage: "Bump version to %VERSION%" - commitFiles: ["-a"] - createTag: true - tagName: "v%VERSION%" - tagMessage: "Version %VERSION%" - push: true - pushTo: "origin" - gitDescribeOptions: "--tags --always --abbrev=1 --dirty=-d" - - replace: - options: - patterns: [ - { - match: "/Version \\d+\\.\\d+\\.\\d+/g" - replacement: "Version <%= pkg.version %>" - expression: true - } - ] - default: - files: [ - { - expand: true - flatten: true - src: ["docs/index.html"] - dest: "docs/" - } - ] - - # load plugins that provide the tasks defined in the config - grunt.loadNpmTasks "grunt-bump" - grunt.loadNpmTasks "grunt-coffeelint" - grunt.loadNpmTasks "grunt-contrib-clean" - grunt.loadNpmTasks "grunt-contrib-coffee" - grunt.loadNpmTasks "grunt-contrib-concat" - grunt.loadNpmTasks "grunt-contrib-connect" - grunt.loadNpmTasks "grunt-contrib-copy" - grunt.loadNpmTasks "grunt-contrib-jasmine" - grunt.loadNpmTasks "grunt-contrib-less" - grunt.loadNpmTasks "grunt-contrib-uglify" - grunt.loadNpmTasks "grunt-contrib-watch" - grunt.loadNpmTasks "grunt-notify" - grunt.loadNpmTasks "grunt-open" - grunt.loadNpmTasks "grunt-replace" - - # register tasks - grunt.registerTask "default", ["run"] - grunt.registerTask "run", ["build", "connect", "open", "watch:doc"] - grunt.registerTask "build", ["clean", "coffeelint", "coffee", "less", "concat", "uglify", "copy"] - grunt.registerTask "test", ["build", "jasmine"] - grunt.registerTask "release", "Release a new version, push it and publish it", (target)-> - target = "patch" unless target - grunt.task.run "bump-only:#{target}", "test", "replace", "bump-commit" diff --git a/public/bower_components/bootstrap-tour/LICENSE b/public/bower_components/bootstrap-tour/LICENSE deleted file mode 100644 index 2bb9ad24..00000000 --- a/public/bower_components/bootstrap-tour/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/README.md b/public/bower_components/bootstrap-tour/README.md deleted file mode 100644 index 9cc81600..00000000 --- a/public/bower_components/bootstrap-tour/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Bootstrap Tour [![Build Status](https://travis-ci.org/sorich87/bootstrap-tour.png?branch=master)](https://travis-ci.org/sorich87/bootstrap-tour) - -Quick and easy way to build your product tours with Twitter Bootstrap Popovers. - -*Compatible with Bootstrap <= 3.0.0* - -## Demo and Documentation ## -[http://bootstraptour.com](http://bootstraptour.com) - -## TODO ## -- Add the smooth scrolling when the popover is outside the viewport -- Define an appropriate tag + milestone system - -## Contributing ## ->In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). - -Feel free to contribute with pull requests, bug reports or enhancement suggestions. - -We use [Grunt](http://gruntjs.com/) and [Jasmine](http://pivotal.github.io/jasmine/). Both make your lives easier ;) - -### How to run/develop - -Install the dependencies - -```bash -npm install -``` - -Files to be developed are located under `./src/` -Compiled sources are then automatically put under `./build/` (and `./test/`) - -Run main tasks (check `Gruntfile.coffee` for more infos) - -```javascript -// Start a server and run the demo page -grunt -grunt run -// Compile all sources -grunt build -// Compile all sources and run the tests -grunt test -// Automatically release a new version (see below for more details) -grunt release -``` - -[More information here](http://bootstraptour.com/#grunt-usage) - -## Releasing ## -Releasing a new version is completely automated using the Grunt task `grunt release`. - -```javascript -grunt release // patch release -grunt release:minor // minor release -grunt release:major // major release -``` - -## License ## -Code licensed under the [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0). -Documentation licensed under [CC BY 3.0](http://creativecommons.org/licenses/by/3.0/). -Well, the same licenses as Bootstrap. We are lazy! ;) diff --git a/public/bower_components/bootstrap-tour/bower.json b/public/bower_components/bootstrap-tour/bower.json deleted file mode 100644 index 894516ba..00000000 --- a/public/bower_components/bootstrap-tour/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "bootstrap-tour", - "version": "0.8.0", - "main": ["./build/js/bootstrap-tour.js", "./build/css/bootstrap-tour.css"], - "dependencies": { - "bootstrap": ">=2.3.2", - "jquery": ">=1.9.0" - } -} diff --git a/public/bower_components/bootstrap-tour/build/css/bootstrap-tour.css b/public/bower_components/bootstrap-tour/build/css/bootstrap-tour.css deleted file mode 100644 index 671c1846..00000000 --- a/public/bower_components/bootstrap-tour/build/css/bootstrap-tour.css +++ /dev/null @@ -1,65 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.8.0 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -.tour-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; - background-color: #000; - opacity: 0.8; -} -.tour-step-backdrop { - position: relative; - z-index: 1031; - background: inherit; -} -.tour-step-background { - position: absolute; - z-index: 1030; - background: inherit; - border-radius: 6px; -} -.popover[class*="tour-"] { - z-index: 1030; -} -.popover[class*="tour-"] .popover-navigation { - padding: 9px 14px; -} -.popover[class*="tour-"] .popover-navigation *[data-role=end] { - float: right; -} -.popover[class*="tour-"] .popover-navigation *[data-role=prev], -.popover[class*="tour-"] .popover-navigation *[data-role=next], -.popover[class*="tour-"] .popover-navigation *[data-role=end] { - cursor: pointer; -} -.popover[class*="tour-"] .popover-navigation *[data-role=prev].disabled, -.popover[class*="tour-"] .popover-navigation *[data-role=next].disabled, -.popover[class*="tour-"] .popover-navigation *[data-role=end].disabled { - cursor: default; -} -.popover[class*="tour-"].orphan { - position: fixed; - margin-top: 0; -} -.popover[class*="tour-"].orphan .arrow { - display: none; -} diff --git a/public/bower_components/bootstrap-tour/build/css/bootstrap-tour.min.css b/public/bower_components/bootstrap-tour/build/css/bootstrap-tour.min.css deleted file mode 100644 index 4f771f70..00000000 --- a/public/bower_components/bootstrap-tour/build/css/bootstrap-tour.min.css +++ /dev/null @@ -1,19 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.8.0 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -.tour-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000;opacity:.8}.tour-step-backdrop{position:relative;z-index:1031;background:inherit}.tour-step-background{position:absolute;z-index:1030;background:inherit;border-radius:6px}.popover[class*=tour-]{z-index:1030}.popover[class*=tour-] .popover-navigation{padding:9px 14px}.popover[class*=tour-] .popover-navigation [data-role=end]{float:right}.popover[class*=tour-] .popover-navigation [data-role=prev],.popover[class*=tour-] .popover-navigation [data-role=next],.popover[class*=tour-] .popover-navigation [data-role=end]{cursor:pointer}.popover[class*=tour-] .popover-navigation [data-role=prev].disabled,.popover[class*=tour-] .popover-navigation [data-role=next].disabled,.popover[class*=tour-] .popover-navigation [data-role=end].disabled{cursor:default}.popover[class*=tour-].orphan{position:fixed;margin-top:0}.popover[class*=tour-].orphan .arrow{display:none} \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/build/js/bootstrap-tour.js b/public/bower_components/bootstrap-tour/build/js/bootstrap-tour.js deleted file mode 100644 index ebe73a58..00000000 --- a/public/bower_components/bootstrap-tour/build/js/bootstrap-tour.js +++ /dev/null @@ -1,687 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.8.0 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -(function($, window) { - var Tour, document; - document = window.document; - Tour = (function() { - function Tour(options) { - this._options = $.extend({ - name: "tour", - container: "body", - keyboard: true, - storage: window.localStorage, - debug: false, - backdrop: false, - redirect: true, - orphan: false, - duration: false, - basePath: "", - template: "

", - afterSetState: function(key, value) {}, - afterGetState: function(key, value) {}, - afterRemoveState: function(key) {}, - onStart: function(tour) {}, - onEnd: function(tour) {}, - onShow: function(tour) {}, - onShown: function(tour) {}, - onHide: function(tour) {}, - onHidden: function(tour) {}, - onNext: function(tour) {}, - onPrev: function(tour) {}, - onPause: function(tour, duration) {}, - onResume: function(tour, duration) {} - }, options); - this._force = false; - this._inited = false; - this._steps = []; - this.backdrop = { - overlay: null, - $element: null, - $background: null, - backgroundShown: false, - overlayElementShown: false - }; - } - - Tour.prototype.setState = function(key, value) { - var e, keyName; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - try { - this._options.storage.setItem(keyName, value); - } catch (_error) { - e = _error; - if (e.code === DOMException.QUOTA_EXCEEDED_ERR) { - this.debug("LocalStorage quota exceeded. setState failed."); - } - } - return this._options.afterSetState(keyName, value); - } else { - if (this._state == null) { - this._state = {}; - } - return this._state[key] = value; - } - }; - - Tour.prototype.removeState = function(key) { - var keyName; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - this._options.storage.removeItem(keyName); - return this._options.afterRemoveState(keyName); - } else { - if (this._state != null) { - return delete this._state[key]; - } - } - }; - - Tour.prototype.getState = function(key) { - var keyName, value; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - value = this._options.storage.getItem(keyName); - } else { - if (this._state != null) { - value = this._state[key]; - } - } - if (value === void 0 || value === "null") { - value = null; - } - this._options.afterGetState(key, value); - return value; - }; - - Tour.prototype.addSteps = function(steps) { - var step, _i, _len, _results; - _results = []; - for (_i = 0, _len = steps.length; _i < _len; _i++) { - step = steps[_i]; - _results.push(this.addStep(step)); - } - return _results; - }; - - Tour.prototype.addStep = function(step) { - return this._steps.push(step); - }; - - Tour.prototype.getStep = function(i) { - if (this._steps[i] != null) { - return $.extend({ - id: "step-" + i, - path: "", - placement: "right", - title: "", - content: "

", - next: i === this._steps.length - 1 ? -1 : i + 1, - prev: i - 1, - animation: true, - container: this._options.container, - backdrop: this._options.backdrop, - redirect: this._options.redirect, - orphan: this._options.orphan, - duration: this._options.duration, - template: this._options.template, - onShow: this._options.onShow, - onShown: this._options.onShown, - onHide: this._options.onHide, - onHidden: this._options.onHidden, - onNext: this._options.onNext, - onPrev: this._options.onPrev, - onPause: this._options.onPause, - onResume: this._options.onResume - }, this._steps[i]); - } - }; - - Tour.prototype.init = function(force) { - var _this = this; - this._force = force; - if (this.ended()) { - return this._debug("Tour ended, init prevented."); - } - this.setCurrentStep(); - this._setupMouseNavigation(); - this._setupKeyboardNavigation(); - this._onResize(function() { - return _this.showStep(_this._current); - }); - if (this._current !== null) { - this.showStep(this._current); - } - this._inited = true; - return this; - }; - - Tour.prototype.start = function(force) { - var promise; - if (force == null) { - force = false; - } - if (!this._inited) { - this.init(force); - } - if (this._current === null) { - promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0); - return this._callOnPromiseDone(promise, this.showStep, 0); - } - }; - - Tour.prototype.next = function() { - var promise; - if (this.ended()) { - return this._debug("Tour ended, next prevented."); - } - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this._showNextStep); - }; - - Tour.prototype.prev = function() { - var promise; - if (this.ended()) { - return this._debug("Tour ended, prev prevented."); - } - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this._showPrevStep); - }; - - Tour.prototype.goTo = function(i) { - var promise; - if (this.ended()) { - return this._debug("Tour ended, goTo prevented."); - } - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this.showStep, i); - }; - - Tour.prototype.end = function() { - var endHelper, promise, - _this = this; - endHelper = function(e) { - $(document).off("click.tour-" + _this._options.name); - $(document).off("keyup.tour-" + _this._options.name); - $(window).off("resize.tour-" + _this._options.name); - _this.setState("end", "yes"); - _this._inited = false; - _this._force = false; - _this._clearTimer(); - if (_this._options.onEnd != null) { - return _this._options.onEnd(_this); - } - }; - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, endHelper); - }; - - Tour.prototype.ended = function() { - return !this._force && !!this.getState("end"); - }; - - Tour.prototype.restart = function() { - this.removeState("current_step"); - this.removeState("end"); - this.setCurrentStep(0); - return this.start(); - }; - - Tour.prototype.pause = function() { - var step; - step = this.getStep(this._current); - if (!(step && step.duration)) { - return; - } - this._paused = true; - this._duration -= new Date().getTime() - this._start; - window.clearTimeout(this._timer); - this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining)."); - if (step.onPause != null) { - return step.onPause(this, this._duration); - } - }; - - Tour.prototype.resume = function() { - var step, - _this = this; - step = this.getStep(this._current); - if (!(step && step.duration)) { - return; - } - this._paused = false; - this._start = new Date().getTime(); - this._duration = this._duration || step.duration; - this._timer = window.setTimeout(function() { - if (_this._isLast()) { - return _this.next(); - } else { - return _this.end(); - } - }, this._duration); - this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration); - if ((step.onResume != null) && this._duration !== step.duration) { - return step.onResume(this, this._duration); - } - }; - - Tour.prototype.hideStep = function(i) { - var hideStepHelper, promise, step, - _this = this; - step = this.getStep(i); - if (!step) { - return; - } - this._clearTimer(); - promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0); - hideStepHelper = function(e) { - var $element; - $element = $(step.element); - if (!($element.data("bs.popover") || $element.data("popover"))) { - $element = $("body"); - } - $element.popover("destroy"); - if (step.reflex) { - $element.css("cursor", "").off("click.tour-" + _this._options.name); - } - if (step.backdrop) { - _this._hideBackdrop(); - } - if (step.onHidden != null) { - return step.onHidden(_this); - } - }; - this._callOnPromiseDone(promise, hideStepHelper); - return promise; - }; - - Tour.prototype.showStep = function(i) { - var promise, showStepHelper, skipToPrevious, step, - _this = this; - step = this.getStep(i); - if (!step) { - return; - } - skipToPrevious = i < this._current; - promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0); - showStepHelper = function(e) { - var current_path, path; - _this.setCurrentStep(i); - path = $.isFunction(step.path) ? step.path.call() : _this._options.basePath + step.path; - current_path = [document.location.pathname, document.location.hash].join(""); - if (_this._isRedirect(path, current_path)) { - _this._redirect(step, path); - return; - } - if (_this._isOrphan(step)) { - if (!step.orphan) { - _this._debug("Skip the orphan step " + (_this._current + 1) + ". Orphan option is false and the element doesn't exist or is hidden."); - if (skipToPrevious) { - _this._showPrevStep(); - } else { - _this._showNextStep(); - } - return; - } - _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true."); - } - if (step.backdrop) { - _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0); - } - _this._scrollIntoView(step.element, function() { - if ((step.element != null) && step.backdrop) { - _this._showOverlayElement(step.element); - } - _this._showPopover(step, i); - if (step.onShown != null) { - step.onShown(_this); - } - return _this._debug("Step " + (_this._current + 1) + " of " + _this._steps.length); - }); - if (step.duration) { - return _this.resume(); - } - }; - this._callOnPromiseDone(promise, showStepHelper); - return promise; - }; - - Tour.prototype.setCurrentStep = function(value) { - if (value != null) { - this._current = value; - this.setState("current_step", value); - } else { - this._current = this.getState("current_step"); - this._current = this._current === null ? null : parseInt(this._current, 10); - } - return this; - }; - - Tour.prototype._showNextStep = function() { - var promise, showNextStepHelper, step, - _this = this; - step = this.getStep(this._current); - showNextStepHelper = function(e) { - return _this.showStep(step.next); - }; - promise = this._makePromise((step.onNext != null ? step.onNext(this) : void 0)); - return this._callOnPromiseDone(promise, showNextStepHelper); - }; - - Tour.prototype._showPrevStep = function() { - var promise, showPrevStepHelper, step, - _this = this; - step = this.getStep(this._current); - showPrevStepHelper = function(e) { - return _this.showStep(step.prev); - }; - promise = this._makePromise((step.onPrev != null ? step.onPrev(this) : void 0)); - return this._callOnPromiseDone(promise, showPrevStepHelper); - }; - - Tour.prototype._debug = function(text) { - if (this._options.debug) { - return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text); - } - }; - - Tour.prototype._isRedirect = function(path, currentPath) { - return (path != null) && path !== "" && path.replace(/\?.*$/, "").replace(/\/?$/, "") !== currentPath.replace(/\/?$/, ""); - }; - - Tour.prototype._redirect = function(step, path) { - if ($.isFunction(step.redirect)) { - return step.redirect.call(this, path); - } else if (step.redirect === true) { - this._debug("Redirect to " + path); - return document.location.href = path; - } - }; - - Tour.prototype._isOrphan = function(step) { - return (step.element == null) || !$(step.element).length || $(step.element).is(":hidden") && ($(step.element)[0].namespaceURI !== "http://www.w3.org/2000/svg"); - }; - - Tour.prototype._isLast = function() { - return this._current < this._steps.length - 1; - }; - - Tour.prototype._showPopover = function(step, i) { - var $element, $navigation, $template, $tip, isOrphan, options, - _this = this; - options = $.extend({}, this._options); - $template = $.isFunction(step.template) ? $(step.template(i, step)) : $(step.template); - $navigation = $template.find(".popover-navigation"); - isOrphan = this._isOrphan(step); - if (isOrphan) { - step.element = "body"; - step.placement = "top"; - $template = $template.addClass("orphan"); - } - $element = $(step.element); - $template.addClass("tour-" + this._options.name); - if (step.options) { - $.extend(options, step.options); - } - if (step.reflex) { - $element.css("cursor", "pointer").on("click.tour-" + this._options.name, function() { - if (_this._isLast()) { - return _this.next(); - } else { - return _this.end(); - } - }); - } - if (step.prev < 0) { - $navigation.find("*[data-role=prev]").addClass("disabled"); - } - if (step.next < 0) { - $navigation.find("*[data-role=next]").addClass("disabled"); - } - if (!step.duration) { - $navigation.find("*[data-role='pause-resume']").remove(); - } - step.template = $template.clone().wrap("
").parent().html(); - $element.popover({ - placement: step.placement, - trigger: "manual", - title: step.title, - content: step.content, - html: true, - animation: step.animation, - container: step.container, - template: step.template, - selector: step.element - }).popover("show"); - $tip = $element.data("bs.popover") ? $element.data("bs.popover").tip() : $element.data("popover").tip(); - $tip.attr("id", step.id); - this._reposition($tip, step); - if (isOrphan) { - return this._center($tip); - } - }; - - Tour.prototype._reposition = function($tip, step) { - var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; - offsetWidth = $tip[0].offsetWidth; - offsetHeight = $tip[0].offsetHeight; - tipOffset = $tip.offset(); - originalLeft = tipOffset.left; - originalTop = tipOffset.top; - offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); - if (offsetBottom < 0) { - tipOffset.top = tipOffset.top + offsetBottom; - } - offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth(); - if (offsetRight < 0) { - tipOffset.left = tipOffset.left + offsetRight; - } - if (tipOffset.top < 0) { - tipOffset.top = 0; - } - if (tipOffset.left < 0) { - tipOffset.left = 0; - } - $tip.offset(tipOffset); - if (step.placement === "bottom" || step.placement === "top") { - if (originalLeft !== tipOffset.left) { - return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, "left"); - } - } else { - if (originalTop !== tipOffset.top) { - return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, "top"); - } - } - }; - - Tour.prototype._center = function($tip) { - return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2); - }; - - Tour.prototype._replaceArrow = function($tip, delta, dimension, position) { - return $tip.find(".arrow").css(position, delta ? 50 * (1 - delta / dimension) + "%" : ""); - }; - - Tour.prototype._scrollIntoView = function(element, callback) { - var $element, $window, offsetTop, scrollTop, windowHeight, - _this = this; - if (!element) { - return callback(); - } - $element = $(element); - $window = $(window); - offsetTop = $element.offset().top; - windowHeight = $window.height(); - scrollTop = Math.max(0, offsetTop - (windowHeight / 2)); - this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + "."); - return $("body").stop().animate({ - scrollTop: Math.ceil(scrollTop) - }, function() { - callback(); - return _this._debug("Scroll into view. Animation end element offset: " + ($element.offset().top) + ". Window height: " + ($window.height()) + "."); - }); - }; - - Tour.prototype._onResize = function(callback, timeout) { - return $(window).on("resize.tour-" + this._options.name, function() { - clearTimeout(timeout); - return timeout = setTimeout(callback, 100); - }); - }; - - Tour.prototype._setupMouseNavigation = function() { - var _this = this; - _this = this; - $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=next]:not(.disabled)").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=next]:not(.disabled)", function(e) { - e.preventDefault(); - return _this.next(); - }); - $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=prev]:not(.disabled)").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=prev]:not(.disabled)", function(e) { - e.preventDefault(); - return _this.prev(); - }); - $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=end]").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=end]", function(e) { - e.preventDefault(); - return _this.end(); - }); - return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=pause-resume]").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=pause-resume]", function(e) { - var $this; - e.preventDefault(); - $this = $(this); - $this.text(_this._paused ? $this.data("pause-text") : $this.data("resume-text")); - if (_this._paused) { - return _this.resume(); - } else { - return _this.pause(); - } - }); - }; - - Tour.prototype._setupKeyboardNavigation = function() { - var _this = this; - if (!this._options.keyboard) { - return; - } - return $(document).on("keyup.tour-" + this._options.name, function(e) { - if (!e.which) { - return; - } - switch (e.which) { - case 39: - e.preventDefault(); - if (_this._isLast()) { - return _this.next(); - } else { - return _this.end(); - } - break; - case 37: - e.preventDefault(); - if (_this._current > 0) { - return _this.prev(); - } - break; - case 27: - e.preventDefault(); - return _this.end(); - } - }); - }; - - Tour.prototype._makePromise = function(result) { - if (result && $.isFunction(result.then)) { - return result; - } else { - return null; - } - }; - - Tour.prototype._callOnPromiseDone = function(promise, cb, arg) { - var _this = this; - if (promise) { - return promise.then(function(e) { - return cb.call(_this, arg); - }); - } else { - return cb.call(this, arg); - } - }; - - Tour.prototype._showBackdrop = function(element) { - if (this.backdrop.backgroundShown) { - return; - } - this.backdrop = $("
", { - "class": "tour-backdrop" - }); - this.backdrop.backgroundShown = true; - return $("body").append(this.backdrop); - }; - - Tour.prototype._hideBackdrop = function() { - this._hideOverlayElement(); - return this._hideBackground(); - }; - - Tour.prototype._hideBackground = function() { - this.backdrop.remove(); - this.backdrop.overlay = null; - return this.backdrop.backgroundShown = false; - }; - - Tour.prototype._showOverlayElement = function(element) { - var $background, $element, offset; - if (this.backdrop.overlayElementShown) { - return; - } - this.backdrop.overlayElementShown = true; - $element = $(element); - $background = $("
"); - offset = $element.offset(); - offset.top = offset.top; - offset.left = offset.left; - $background.width($element.innerWidth()).height($element.innerHeight()).addClass("tour-step-background").offset(offset); - $element.addClass("tour-step-backdrop"); - $("body").append($background); - this.backdrop.$element = $element; - return this.backdrop.$background = $background; - }; - - Tour.prototype._hideOverlayElement = function() { - if (!this.backdrop.overlayElementShown) { - return; - } - this.backdrop.$element.removeClass("tour-step-backdrop"); - this.backdrop.$background.remove(); - this.backdrop.$element = null; - this.backdrop.$background = null; - return this.backdrop.overlayElementShown = false; - }; - - Tour.prototype._clearTimer = function() { - window.clearTimeout(this._timer); - this._timer = null; - return this._duration = null; - }; - - return Tour; - - })(); - return window.Tour = Tour; -})(jQuery, window); diff --git a/public/bower_components/bootstrap-tour/build/js/bootstrap-tour.min.js b/public/bower_components/bootstrap-tour/build/js/bootstrap-tour.min.js deleted file mode 100644 index fb2e5611..00000000 --- a/public/bower_components/bootstrap-tour/build/js/bootstrap-tour.min.js +++ /dev/null @@ -1,19 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.8.0 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -!function(a,b){var c,d;return d=b.document,c=function(){function c(c){this._options=a.extend({name:"tour",container:"body",keyboard:!0,storage:b.localStorage,debug:!1,backdrop:!1,redirect:!0,orphan:!1,duration:!1,basePath:"",template:"

",afterSetState:function(){},afterGetState:function(){},afterRemoveState:function(){},onStart:function(){},onEnd:function(){},onShow:function(){},onShown:function(){},onHide:function(){},onHidden:function(){},onNext:function(){},onPrev:function(){},onPause:function(){},onResume:function(){}},c),this._force=!1,this._inited=!1,this._steps=[],this.backdrop={overlay:null,$element:null,$background:null,backgroundShown:!1,overlayElementShown:!1}}return c.prototype.setState=function(a,b){var c,d;if(this._options.storage){d=""+this._options.name+"_"+a;try{this._options.storage.setItem(d,b)}catch(e){c=e,c.code===DOMException.QUOTA_EXCEEDED_ERR&&this.debug("LocalStorage quota exceeded. setState failed.")}return this._options.afterSetState(d,b)}return null==this._state&&(this._state={}),this._state[a]=b},c.prototype.removeState=function(a){var b;return this._options.storage?(b=""+this._options.name+"_"+a,this._options.storage.removeItem(b),this._options.afterRemoveState(b)):null!=this._state?delete this._state[a]:void 0},c.prototype.getState=function(a){var b,c;return this._options.storage?(b=""+this._options.name+"_"+a,c=this._options.storage.getItem(b)):null!=this._state&&(c=this._state[a]),(void 0===c||"null"===c)&&(c=null),this._options.afterGetState(a,c),c},c.prototype.addSteps=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.addStep(b));return e},c.prototype.addStep=function(a){return this._steps.push(a)},c.prototype.getStep=function(b){return null!=this._steps[b]?a.extend({id:"step-"+b,path:"",placement:"right",title:"",content:"

",next:b===this._steps.length-1?-1:b+1,prev:b-1,animation:!0,container:this._options.container,backdrop:this._options.backdrop,redirect:this._options.redirect,orphan:this._options.orphan,duration:this._options.duration,template:this._options.template,onShow:this._options.onShow,onShown:this._options.onShown,onHide:this._options.onHide,onHidden:this._options.onHidden,onNext:this._options.onNext,onPrev:this._options.onPrev,onPause:this._options.onPause,onResume:this._options.onResume},this._steps[b]):void 0},c.prototype.init=function(a){var b=this;return this._force=a,this.ended()?this._debug("Tour ended, init prevented."):(this.setCurrentStep(),this._setupMouseNavigation(),this._setupKeyboardNavigation(),this._onResize(function(){return b.showStep(b._current)}),null!==this._current&&this.showStep(this._current),this._inited=!0,this)},c.prototype.start=function(a){var b;return null==a&&(a=!1),this._inited||this.init(a),null===this._current?(b=this._makePromise(null!=this._options.onStart?this._options.onStart(this):void 0),this._callOnPromiseDone(b,this.showStep,0)):void 0},c.prototype.next=function(){var a;return this.ended()?this._debug("Tour ended, next prevented."):(a=this.hideStep(this._current),this._callOnPromiseDone(a,this._showNextStep))},c.prototype.prev=function(){var a;return this.ended()?this._debug("Tour ended, prev prevented."):(a=this.hideStep(this._current),this._callOnPromiseDone(a,this._showPrevStep))},c.prototype.goTo=function(a){var b;return this.ended()?this._debug("Tour ended, goTo prevented."):(b=this.hideStep(this._current),this._callOnPromiseDone(b,this.showStep,a))},c.prototype.end=function(){var c,e,f=this;return c=function(){return a(d).off("click.tour-"+f._options.name),a(d).off("keyup.tour-"+f._options.name),a(b).off("resize.tour-"+f._options.name),f.setState("end","yes"),f._inited=!1,f._force=!1,f._clearTimer(),null!=f._options.onEnd?f._options.onEnd(f):void 0},e=this.hideStep(this._current),this._callOnPromiseDone(e,c)},c.prototype.ended=function(){return!this._force&&!!this.getState("end")},c.prototype.restart=function(){return this.removeState("current_step"),this.removeState("end"),this.setCurrentStep(0),this.start()},c.prototype.pause=function(){var a;return a=this.getStep(this._current),a&&a.duration?(this._paused=!0,this._duration-=(new Date).getTime()-this._start,b.clearTimeout(this._timer),this._debug("Paused/Stopped step "+(this._current+1)+" timer ("+this._duration+" remaining)."),null!=a.onPause?a.onPause(this,this._duration):void 0):void 0},c.prototype.resume=function(){var a,c=this;return a=this.getStep(this._current),a&&a.duration?(this._paused=!1,this._start=(new Date).getTime(),this._duration=this._duration||a.duration,this._timer=b.setTimeout(function(){return c._isLast()?c.next():c.end()},this._duration),this._debug("Started step "+(this._current+1)+" timer with duration "+this._duration),null!=a.onResume&&this._duration!==a.duration?a.onResume(this,this._duration):void 0):void 0},c.prototype.hideStep=function(b){var c,d,e,f=this;return(e=this.getStep(b))?(this._clearTimer(),d=this._makePromise(null!=e.onHide?e.onHide(this,b):void 0),c=function(){var b;return b=a(e.element),b.data("bs.popover")||b.data("popover")||(b=a("body")),b.popover("destroy"),e.reflex&&b.css("cursor","").off("click.tour-"+f._options.name),e.backdrop&&f._hideBackdrop(),null!=e.onHidden?e.onHidden(f):void 0},this._callOnPromiseDone(d,c),d):void 0},c.prototype.showStep=function(b){var c,e,f,g,h=this;return(g=this.getStep(b))?(f=b").parent().html(),d.popover({placement:b.placement,trigger:"manual",title:b.title,content:b.content,html:!0,animation:b.animation,container:b.container,template:b.template,selector:b.element}).popover("show"),g=d.data("bs.popover")?d.data("bs.popover").tip():d.data("popover").tip(),g.attr("id",b.id),this._reposition(g,b),h?this._center(g):void 0},c.prototype._reposition=function(b,c){var e,f,g,h,i,j,k;if(h=b[0].offsetWidth,f=b[0].offsetHeight,k=b.offset(),i=k.left,j=k.top,e=a(d).outerHeight()-k.top-b.outerHeight(),0>e&&(k.top=k.top+e),g=a("html").outerWidth()-k.left-b.outerWidth(),0>g&&(k.left=k.left+g),k.top<0&&(k.top=0),k.left<0&&(k.left=0),b.offset(k),"bottom"===c.placement||"top"===c.placement){if(i!==k.left)return this._replaceArrow(b,2*(k.left-i),h,"left")}else if(j!==k.top)return this._replaceArrow(b,2*(k.top-j),f,"top")},c.prototype._center=function(c){return c.css("top",a(b).outerHeight()/2-c.outerHeight()/2)},c.prototype._replaceArrow=function(a,b,c,d){return a.find(".arrow").css(d,b?50*(1-b/c)+"%":"")},c.prototype._scrollIntoView=function(c,d){var e,f,g,h,i,j=this;return c?(e=a(c),f=a(b),g=e.offset().top,i=f.height(),h=Math.max(0,g-i/2),this._debug("Scroll into view. ScrollTop: "+h+". Element offset: "+g+". Window height: "+i+"."),a("body").stop().animate({scrollTop:Math.ceil(h)},function(){return d(),j._debug("Scroll into view. Animation end element offset: "+e.offset().top+". Window height: "+f.height()+".")})):d()},c.prototype._onResize=function(c,d){return a(b).on("resize.tour-"+this._options.name,function(){return clearTimeout(d),d=setTimeout(c,100)})},c.prototype._setupMouseNavigation=function(){var b=this;return b=this,a(d).off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=next]:not(.disabled)").on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=next]:not(.disabled)",function(a){return a.preventDefault(),b.next()}),a(d).off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=prev]:not(.disabled)").on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=prev]:not(.disabled)",function(a){return a.preventDefault(),b.prev()}),a(d).off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=end]").on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=end]",function(a){return a.preventDefault(),b.end()}),a(d).off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=pause-resume]").on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=pause-resume]",function(c){var d;return c.preventDefault(),d=a(this),d.text(b._paused?d.data("pause-text"):d.data("resume-text")),b._paused?b.resume():b.pause()})},c.prototype._setupKeyboardNavigation=function(){var b=this;if(this._options.keyboard)return a(d).on("keyup.tour-"+this._options.name,function(a){if(a.which)switch(a.which){case 39:return a.preventDefault(),b._isLast()?b.next():b.end();case 37:if(a.preventDefault(),b._current>0)return b.prev();break;case 27:return a.preventDefault(),b.end()}})},c.prototype._makePromise=function(b){return b&&a.isFunction(b.then)?b:null},c.prototype._callOnPromiseDone=function(a,b,c){var d=this;return a?a.then(function(){return b.call(d,c)}):b.call(this,c)},c.prototype._showBackdrop=function(){return this.backdrop.backgroundShown?void 0:(this.backdrop=a("
",{"class":"tour-backdrop"}),this.backdrop.backgroundShown=!0,a("body").append(this.backdrop))},c.prototype._hideBackdrop=function(){return this._hideOverlayElement(),this._hideBackground()},c.prototype._hideBackground=function(){return this.backdrop.remove(),this.backdrop.overlay=null,this.backdrop.backgroundShown=!1},c.prototype._showOverlayElement=function(b){var c,d,e;if(!this.backdrop.overlayElementShown)return this.backdrop.overlayElementShown=!0,d=a(b),c=a("
"),e=d.offset(),e.top=e.top,e.left=e.left,c.width(d.innerWidth()).height(d.innerHeight()).addClass("tour-step-background").offset(e),d.addClass("tour-step-backdrop"),a("body").append(c),this.backdrop.$element=d,this.backdrop.$background=c},c.prototype._hideOverlayElement=function(){return this.backdrop.overlayElementShown?(this.backdrop.$element.removeClass("tour-step-backdrop"),this.backdrop.$background.remove(),this.backdrop.$element=null,this.backdrop.$background=null,this.backdrop.overlayElementShown=!1):void 0},c.prototype._clearTimer=function(){return b.clearTimeout(this._timer),this._timer=null,this._duration=null},c}(),b.Tour=c}(jQuery,window); \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/composer.json b/public/bower_components/bootstrap-tour/composer.json deleted file mode 100644 index d1e00ae7..00000000 --- a/public/bower_components/bootstrap-tour/composer.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "sorich87/bootstrap-tour", - "type":"vcs", - "url":"https://github.com/sorich87/bootstrap-tour.git", - "keywords": [ - "bootstrap", - "tour" - ] -} diff --git a/public/bower_components/bootstrap-tour/docs/assets/css/bootstrap-tour.css b/public/bower_components/bootstrap-tour/docs/assets/css/bootstrap-tour.css deleted file mode 100644 index 671c1846..00000000 --- a/public/bower_components/bootstrap-tour/docs/assets/css/bootstrap-tour.css +++ /dev/null @@ -1,65 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.8.0 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -.tour-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; - background-color: #000; - opacity: 0.8; -} -.tour-step-backdrop { - position: relative; - z-index: 1031; - background: inherit; -} -.tour-step-background { - position: absolute; - z-index: 1030; - background: inherit; - border-radius: 6px; -} -.popover[class*="tour-"] { - z-index: 1030; -} -.popover[class*="tour-"] .popover-navigation { - padding: 9px 14px; -} -.popover[class*="tour-"] .popover-navigation *[data-role=end] { - float: right; -} -.popover[class*="tour-"] .popover-navigation *[data-role=prev], -.popover[class*="tour-"] .popover-navigation *[data-role=next], -.popover[class*="tour-"] .popover-navigation *[data-role=end] { - cursor: pointer; -} -.popover[class*="tour-"] .popover-navigation *[data-role=prev].disabled, -.popover[class*="tour-"] .popover-navigation *[data-role=next].disabled, -.popover[class*="tour-"] .popover-navigation *[data-role=end].disabled { - cursor: default; -} -.popover[class*="tour-"].orphan { - position: fixed; - margin-top: 0; -} -.popover[class*="tour-"].orphan .arrow { - display: none; -} diff --git a/public/bower_components/bootstrap-tour/docs/assets/css/bootstrap-tour.min.css b/public/bower_components/bootstrap-tour/docs/assets/css/bootstrap-tour.min.css deleted file mode 100644 index 4f771f70..00000000 --- a/public/bower_components/bootstrap-tour/docs/assets/css/bootstrap-tour.min.css +++ /dev/null @@ -1,19 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.8.0 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -.tour-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000;opacity:.8}.tour-step-backdrop{position:relative;z-index:1031;background:inherit}.tour-step-background{position:absolute;z-index:1030;background:inherit;border-radius:6px}.popover[class*=tour-]{z-index:1030}.popover[class*=tour-] .popover-navigation{padding:9px 14px}.popover[class*=tour-] .popover-navigation [data-role=end]{float:right}.popover[class*=tour-] .popover-navigation [data-role=prev],.popover[class*=tour-] .popover-navigation [data-role=next],.popover[class*=tour-] .popover-navigation [data-role=end]{cursor:pointer}.popover[class*=tour-] .popover-navigation [data-role=prev].disabled,.popover[class*=tour-] .popover-navigation [data-role=next].disabled,.popover[class*=tour-] .popover-navigation [data-role=end].disabled{cursor:default}.popover[class*=tour-].orphan{position:fixed;margin-top:0}.popover[class*=tour-].orphan .arrow{display:none} \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/docs/assets/css/index.css b/public/bower_components/bootstrap-tour/docs/assets/css/index.css deleted file mode 100644 index dee240e1..00000000 --- a/public/bower_components/bootstrap-tour/docs/assets/css/index.css +++ /dev/null @@ -1,1124 +0,0 @@ -/* Add additional stylesheets below --------------------------------------------------- */ -/* - Bootstrap's documentation styles - Special styles for presenting Bootstrap's documentation and examples -*/ - - - -/* Body and structure --------------------------------------------------- */ - -body { - position: relative; - padding-top: 40px; - padding-bottom: 40px; -} - -/* Code in headings */ -h3 code { - font-size: 14px; - font-weight: normal; -} - - - -/* Tweak navbar brand link to be super sleek --------------------------------------------------- */ - -/* Change the docs' brand */ -body > .navbar .brand { - padding-right: 0; - padding-left: 0; - margin-left: 20px; - float: right; - font-weight: bold; - color: #000; - text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.125); - -webkit-transition: all .2s linear; - -moz-transition: all .2s linear; - transition: all .2s linear; -} -body > .navbar .brand:hover { - text-decoration: none; - text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.4); -} - - -/* Sections --------------------------------------------------- */ - -/* padding for in-page bookmarks and fixed navbar */ -section { - padding-top: 30px; -} -section > .page-header, -section > .lead { - color: #5a5a5a; -} -section > ul li { - margin-bottom: 5px; -} - -/* Separators (hr) */ -.bs-docs-separator { - margin: 40px 0 39px; -} - -/* Faded out hr */ -hr.soften { - height: 1px; - margin: 70px 0; - background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - background-image: -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - background-image: -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - background-image: -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - border: 0; -} - -.bs-callout { - margin: 20px 0; - padding: 20px; - border-left: 3px solid #eee; -} -.bs-callout-warning { - background-color: #faf8f0; - border-color: #faebcc; -} -.bs-callout-warning h4 { - color: #c09853; -} -.bs-callout h4 { - margin-top: 0; - margin-bottom: 5px; -} -.bs-callout p:last-child { - margin-bottom: 0; -} - - -/* Jumbotrons --------------------------------------------------- */ - -/* Base class -------------------------- */ -.jumbotron { - position: relative; - padding: 40px 0; - font-size: 16px; - color: #fff; - text-align: center; - text-shadow: 0 1px 3px rgba(0,0,0,.4), 0 0 30px rgba(0,0,0,.075); - background: #020031; /* Old browsers */ - background: -moz-linear-gradient(45deg, #020031 0%, #6d3353 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#020031), color-stop(100%,#6d3353)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(45deg, #020031 0%,#6d3353 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(45deg, #020031 0%,#6d3353 100%); /* Opera 11.10+ */ - background: -ms-linear-gradient(45deg, #020031 0%,#6d3353 100%); /* IE10+ */ - background: linear-gradient(45deg, #020031 0%,#6d3353 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#020031', endColorstr='#6d3353',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ - -webkit-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2); - -moz-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2); - box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2); -} -.jumbotron h1 { - font-size: 80px; - letter-spacing: -1px; - line-height: 1; -} -.jumbotron p { - font-size: 24px; - font-weight: 300; - line-height: 1.25; - margin-bottom: 30px; -} - -/* Link styles (used on .masthead-links as well) */ -.jumbotron a { - color: #fff; - color: rgba(255,255,255,.5); - -webkit-transition: all .2s ease-in-out; - -moz-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; -} -.jumbotron a:hover { - color: #fff; - text-shadow: 0 0 10px rgba(255,255,255,.25); -} - -/* Download button */ -.masthead .btn { - padding: 19px 24px; - font-size: 24px; - font-weight: 200; - border: 0; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - -webkit-transition: none; - -moz-transition: none; - transition: none; -} -.masthead .btn:hover { - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); -} -.masthead .btn:active { - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1); - box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1); -} -#download { - color: white; -} -#demo { - color: #333; -} - - -/* Pattern overlay -------------------------- */ -.jumbotron .container { - position: relative; - z-index: 2; -} -/* -.jumbotron:after { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: url(/assets/img/masthead-pattern.png) repeat center center; - opacity: .4; -} -*/ - -@media -only screen and (-webkit-min-device-pixel-ratio: 2), -only screen and ( min--moz-device-pixel-ratio: 2), -only screen and ( -o-min-device-pixel-ratio: 2/1) { - - .jumbotron:after { - background-size: 150px 150px; - } - -} - -/* Masthead (docs home) -------------------------- */ -.masthead { - padding: 70px 0 80px; - margin-bottom: 0; - color: #fff; -} -.masthead h1 { - font-size: 90px; - line-height: 1; - letter-spacing: -2px; -} -.masthead p { - font-size: 30px; - font-weight: 200; - line-height: 1.25; -} - -/* Textual links in masthead */ -.masthead-links { - margin: 0; - list-style: none; -} -.masthead-links li { - display: inline; - padding: 0 10px; - color: rgba(255,255,255,.25); -} - -/* Social proof buttons from GitHub & Twitter */ -.bs-docs-social { - padding: 15px 0; - text-align: center; - background-color: #f5f5f5; - border-top: 1px solid #fff; - border-bottom: 1px solid #ddd; -} - -/* Quick links on Home */ -.bs-docs-social-buttons { - margin-left: 0; - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.bs-docs-social-buttons li { - display: inline-block; - padding: 5px 8px; - line-height: 1; - *display: inline; - *zoom: 1; -} - -/* Subhead (other pages) -------------------------- */ -.subhead { - text-align: left; - border-bottom: 1px solid #ddd; -} -.subhead h1 { - font-size: 60px; -} -.subhead p { - margin-bottom: 20px; -} -.subhead .navbar { - display: none; -} - - - -/* Marketing section of Overview --------------------------------------------------- */ - -.marketing { - text-align: center; - color: #5a5a5a; -} -.marketing h1 { - margin: 60px 0 10px; - font-size: 60px; - font-weight: 200; - line-height: 1; - letter-spacing: -1px; -} -.marketing h2 { - font-weight: 200; - margin-bottom: 5px; -} -.marketing p { - font-size: 16px; - line-height: 1.5; -} -.marketing .marketing-byline { - margin-bottom: 40px; - font-size: 20px; - font-weight: 300; - line-height: 1.25; - color: #999; -} -.marketing-img { - display: block; - margin: 0 auto 30px; - max-height: 145px; -} - - - -/* Footer --------------------------------------------------- */ - -.footer { - text-align: center; - padding: 30px 0; - margin-top: 70px; - border-top: 1px solid #e5e5e5; - background-color: #f5f5f5; -} -.footer p { - margin-bottom: 0; - color: #777; -} -.footer-links { - margin: 10px 0; -} -.footer-links li { - display: inline; - padding: 0 2px; -} -.footer-links li:first-child { - padding-left: 0; -} - - - -/* Special grid styles --------------------------------------------------- */ - -.show-grid { - margin-top: 10px; - margin-bottom: 20px; -} -.show-grid [class*="span"] { - background-color: #eee; - text-align: center; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - min-height: 40px; - line-height: 40px; -} -.show-grid [class*="span"]:hover { - background-color: #ddd; -} -.show-grid .show-grid { - margin-top: 0; - margin-bottom: 0; -} -.show-grid .show-grid [class*="span"] { - margin-top: 5px; -} -.show-grid [class*="span"] [class*="span"] { - background-color: #ccc; -} -.show-grid [class*="span"] [class*="span"] [class*="span"] { - background-color: #999; -} - - - -/* Mini layout previews --------------------------------------------------- */ -.mini-layout { - border: 1px solid #ddd; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.075); - -moz-box-shadow: 0 1px 2px rgba(0,0,0,.075); - box-shadow: 0 1px 2px rgba(0,0,0,.075); -} -.mini-layout, -.mini-layout .mini-layout-body, -.mini-layout.fluid .mini-layout-sidebar { - height: 300px; -} -.mini-layout { - margin-bottom: 20px; - padding: 9px; -} -.mini-layout div { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.mini-layout .mini-layout-body { - background-color: #dceaf4; - margin: 0 auto; - width: 70%; -} -.mini-layout.fluid .mini-layout-sidebar, -.mini-layout.fluid .mini-layout-header, -.mini-layout.fluid .mini-layout-body { - float: left; -} -.mini-layout.fluid .mini-layout-sidebar { - background-color: #bbd8e9; - width: 20%; -} -.mini-layout.fluid .mini-layout-body { - width: 77.5%; - margin-left: 2.5%; -} - - - -/* Download page --------------------------------------------------- */ - -.download .page-header { - margin-top: 36px; -} -.page-header .toggle-all { - margin-top: 5px; -} - -/* Space out h3s when following a section */ -.download h3 { - margin-bottom: 5px; -} -.download-builder input + h3, -.download-builder .checkbox + h3 { - margin-top: 9px; -} - -/* Fields for variables */ -.download-builder input[type=text] { - margin-bottom: 9px; - font-family: Menlo, Monaco, "Courier New", monospace; - font-size: 12px; - color: #d14; -} -.download-builder input[type=text]:focus { - background-color: #fff; -} - -/* Custom, larger checkbox labels */ -.download .checkbox { - padding: 6px 10px 6px 25px; - font-size: 13px; - line-height: 18px; - color: #555; - background-color: #f9f9f9; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - cursor: pointer; -} -.download .checkbox:hover { - color: #333; - background-color: #f5f5f5; -} -.download .checkbox small { - font-size: 12px; - color: #777; -} - -/* Variables section */ -#variables label { - margin-bottom: 0; -} - -/* Giant download button */ -.download-btn { - margin: 36px 0 108px; -} -#download p, -#download h4 { - max-width: 50%; - margin: 0 auto; - color: #999; - text-align: center; -} -#download h4 { - margin-bottom: 0; -} -#download p { - margin-bottom: 18px; -} -.download-btn .btn { - display: block; - width: auto; - padding: 19px 24px; - margin-bottom: 27px; - font-size: 30px; - line-height: 1; - text-align: center; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - - - -/* Misc --------------------------------------------------- */ - -/* Make tables spaced out a bit more */ -h2 + table, -h3 + table, -h4 + table, -h2 + .row { - margin-top: 5px; -} - -/* Example sites showcase */ -.example-sites { - xmargin-left: 20px; -} -.example-sites img { - max-width: 100%; - margin: 0 auto; -} - -.scrollspy-example { - height: 200px; - overflow: auto; - position: relative; -} - - -/* Fake the :focus state to demo it */ -.focused { - border-color: rgba(82,168,236,.8); - -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6); - -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6); - box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6); - outline: 0; -} - -/* For input sizes, make them display block */ -.docs-input-sizes select, -.docs-input-sizes input[type=text] { - display: block; - margin-bottom: 9px; -} - -/* Icons -------------------------- */ -.the-icons { - margin-left: 0; - list-style: none; -} -.the-icons li { - float: left; - width: 25%; - line-height: 25px; -} -.the-icons i:hover { - background-color: rgba(255,0,0,.25); -} - -/* Example page -------------------------- */ -.bootstrap-examples h4 { - margin: 10px 0 5px; -} -.bootstrap-examples p { - font-size: 13px; - line-height: 18px; -} -.bootstrap-examples .thumbnail { - margin-bottom: 9px; - background-color: #fff; -} - - - -/* Bootstrap code examples --------------------------------------------------- */ - -/* Base class */ -.bs-docs-example { - position: relative; - margin: 15px 0; - padding: 39px 19px 14px; - *padding-top: 19px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -/* Echo out a label for the example */ -.bs-docs-example:after { - content: "Example"; - position: absolute; - top: -1px; - left: -1px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - background-color: #f5f5f5; - border: 1px solid #ddd; - color: #9da0a4; - -webkit-border-radius: 4px 0 4px 0; - -moz-border-radius: 4px 0 4px 0; - border-radius: 4px 0 4px 0; -} - -/* Remove spacing between an example and it's code */ -.bs-docs-example + .prettyprint { - margin-top: -20px; - padding-top: 15px; -} - -/* Tweak examples -------------------------- */ -.bs-docs-example > p:last-child { - margin-bottom: 0; -} -.bs-docs-example .table, -.bs-docs-example .progress, -.bs-docs-example .well, -.bs-docs-example .alert, -.bs-docs-example .hero-unit, -.bs-docs-example .pagination, -.bs-docs-example .navbar, -.bs-docs-example > .nav, -.bs-docs-example blockquote { - margin-bottom: 5px; -} -.bs-docs-example .pagination { - margin-top: 0; -} -.bs-navbar-top-example, -.bs-navbar-bottom-example { - z-index: 1; - padding: 0; - height: 90px; - overflow: hidden; /* cut the drop shadows off */ -} -.bs-navbar-top-example .navbar-fixed-top, -.bs-navbar-bottom-example .navbar-fixed-bottom { - margin-left: 0; - margin-right: 0; -} -.bs-navbar-top-example { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.bs-navbar-top-example:after { - top: auto; - bottom: -1px; - -webkit-border-radius: 0 4px 0 4px; - -moz-border-radius: 0 4px 0 4px; - border-radius: 0 4px 0 4px; -} -.bs-navbar-bottom-example { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.bs-navbar-bottom-example .navbar { - margin-bottom: 0; -} -form.bs-docs-example { - padding-bottom: 19px; -} - -/* Images */ -.bs-docs-example-images img { - margin: 10px; - display: inline-block; -} - -/* Tooltips */ -.bs-docs-tooltip-examples { - text-align: center; - margin: 0 0 10px; - list-style: none; -} -.bs-docs-tooltip-examples li { - display: inline; - padding: 0 10px; -} - -/* Popovers */ -.bs-docs-example-popover { - padding-bottom: 24px; - background-color: #f9f9f9; -} -.bs-docs-example-popover .popover { - position: relative; - display: block; - float: left; - width: 260px; - margin: 20px; -} - -/* Dropdowns */ -.bs-docs-example-submenus { - min-height: 180px; -} -.bs-docs-example-submenus > .pull-left + .pull-left { - margin-left: 20px; -} -.bs-docs-example-submenus .dropup > .dropdown-menu, -.bs-docs-example-submenus .dropdown > .dropdown-menu { - display: block; - position: static; - margin-bottom: 5px; - *width: 180px; -} - - - -/* Responsive docs --------------------------------------------------- */ - -/* Utility classes table -------------------------- */ -.responsive-utilities th small { - display: block; - font-weight: normal; - color: #999; -} -.responsive-utilities tbody th { - font-weight: normal; -} -.responsive-utilities td { - text-align: center; -} -.responsive-utilities td.is-visible { - color: #468847; - background-color: #dff0d8 !important; -} -.responsive-utilities td.is-hidden { - color: #ccc; - background-color: #f9f9f9 !important; -} - -/* Responsive tests -------------------------- */ -.responsive-utilities-test { - margin-top: 5px; - margin-left: 0; - list-style: none; - overflow: hidden; /* clear floats */ -} -.responsive-utilities-test li { - position: relative; - float: left; - width: 25%; - height: 43px; - font-size: 14px; - font-weight: bold; - line-height: 43px; - color: #999; - text-align: center; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.responsive-utilities-test li + li { - margin-left: 10px; -} -.responsive-utilities-test span { - position: absolute; - top: -1px; - left: -1px; - right: -1px; - bottom: -1px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.responsive-utilities-test span { - color: #468847; - background-color: #dff0d8; - border: 1px solid #d6e9c6; -} - - - -/* Sidenav for Docs --------------------------------------------------- */ - -.bs-docs-sidenav { - width: 228px; - margin: 30px 0 0; - padding: 0; - background-color: #fff; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065); - -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065); - box-shadow: 0 1px 4px rgba(0,0,0,.065); -} -.bs-docs-sidenav > li > a { - display: block; - width: 190px \9; - margin: 0 0 -1px; - padding: 8px 14px; - border: 1px solid #e5e5e5; -} -.bs-docs-sidenav > li:first-child > a { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} -.bs-docs-sidenav > li:last-child > a { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.bs-docs-sidenav > .active > a { - position: relative; - z-index: 2; - padding: 9px 15px; - border: 0; - text-shadow: 0 1px 0 rgba(0,0,0,.15); - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); - box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); -} -/* Chevrons */ -.bs-docs-sidenav .icon-chevron-right { - float: right; - margin-top: 2px; - margin-right: -6px; - opacity: .25; -} -.bs-docs-sidenav > li > a:hover { - background-color: #f5f5f5; -} -.bs-docs-sidenav a:hover .icon-chevron-right { - opacity: .5; -} -.bs-docs-sidenav .active .icon-chevron-right, -.bs-docs-sidenav .active a:hover .icon-chevron-right { - background-image: url(../img/glyphicons-halflings-white.png); - opacity: 1; -} -.bs-docs-sidenav.affix { - top: 40px; -} -.bs-docs-sidenav.affix-bottom { - position: absolute; - top: auto; - bottom: 270px; -} - -/* custom */ -#github { - display: block; - position: fixed; - width: 150px; - height: 150px; - top: 0; - right: 0; - z-index: 1050; -} - -code, -pre { - font-size: 13px; -} - -/* Responsive --------------------------------------------------- */ - -/* Desktop large -------------------------- */ -@media (min-width: 1200px) { - .bs-docs-container { - max-width: 970px; - } - .bs-docs-sidenav { - width: 258px; - } - .bs-docs-sidenav > li > a { - width: 230px \9; /* Override the previous IE8-9 hack */ - } -} - -/* Desktop -------------------------- */ -@media (max-width: 980px) { - /* Unfloat brand */ - body > .navbar-fixed-top .brand { - float: left; - margin-left: 0; - padding-left: 10px; - padding-right: 10px; - } - - /* Inline-block quick links for more spacing */ - .quick-links li { - display: inline-block; - margin: 5px; - } - - /* When affixed, space properly */ - .bs-docs-sidenav { - top: 0; - width: 218px; - margin-top: 30px; - margin-right: 0; - } -} - -/* Tablet to desktop -------------------------- */ -@media (min-width: 768px) and (max-width: 979px) { - /* Remove any padding from the body */ - body { - padding-top: 0; - } - /* Widen masthead and social buttons to fill body padding */ - .jumbotron { - margin-top: -20px; /* Offset bottom margin on .navbar */ - } - /* Adjust sidenav width */ - .bs-docs-sidenav { - width: 166px; - margin-top: 20px; - } - .bs-docs-sidenav.affix { - top: 0; - } -} - -/* Tablet -------------------------- */ -@media (max-width: 767px) { - /* Remove any padding from the body */ - body { - padding-top: 0; - } - - /* Widen masthead and social buttons to fill body padding */ - .jumbotron { - padding: 70px 20px 20px 20px; - margin-top: -20px; /* Offset bottom margin on .navbar */ - margin-right: -20px; - margin-left: -20px; - } - .masthead h1 { - font-size: 60px; - } - .masthead p, - .masthead .btn { - font-size: 20px; - } - .marketing .span4 { - margin-bottom: 40px; - } - .bs-docs-social { - margin: 0 -20px; - } - - /* Space out the show-grid examples */ - .show-grid [class*="span"] { - margin-bottom: 5px; - } - - /* Sidenav */ - .bs-docs-sidenav { - width: auto; - margin-bottom: 20px; - } - .bs-docs-sidenav.affix { - position: static; - width: auto; - top: 0; - } - - /* Unfloat the back to top link in footer */ - .footer { - margin-left: -20px; - margin-right: -20px; - padding-left: 20px; - padding-right: 20px; - } - .footer p { - margin-bottom: 9px; - } - - #github { - display: none !important; - } -} - -/* Landscape phones -------------------------- */ -@media (max-width: 480px) { - /* Remove padding above jumbotron */ - body { - padding-top: 0; - } - - /* Change up some type stuff */ - h2 small { - display: block; - } - - /* Downsize the jumbotrons */ - .jumbotron h1 { - font-size: 45px; - } - .jumbotron p, - .jumbotron .btn { - font-size: 18px; - } - .jumbotron .btn { - display: block; - margin: 0 auto; - } - - /* center align subhead text like the masthead */ - .subhead h1, - .subhead p { - text-align: center; - } - - /* Marketing on home */ - .marketing h1 { - font-size: 30px; - } - .marketing-byline { - font-size: 18px; - } - - /* center example sites */ - .example-sites { - margin-left: 0; - } - .example-sites > li { - float: none; - display: block; - max-width: 280px; - margin: 0 auto 18px; - text-align: center; - } - .example-sites .thumbnail > img { - max-width: 270px; - } - - /* Do our best to make tables work in narrow viewports */ - table code { - white-space: normal; - word-wrap: break-word; - word-break: break-all; - } - - /* Examples: dropdowns */ - .bs-docs-example-submenus > .pull-left { - float: none; - clear: both; - } - .bs-docs-example-submenus > .pull-left, - .bs-docs-example-submenus > .pull-left + .pull-left { - margin-left: 0; - } - .bs-docs-example-submenus p { - margin-bottom: 0; - } - .bs-docs-example-submenus .dropup > .dropdown-menu, - .bs-docs-example-submenus .dropdown > .dropdown-menu { - margin-bottom: 10px; - float: none; - max-width: 180px; - } - - /* Examples: modal */ - .modal-example .modal { - position: relative; - top: auto; - right: auto; - bottom: auto; - left: auto; - } - - /* Tighten up footer */ - .footer { - padding-top: 20px; - padding-bottom: 20px; - } -} - -/* custom */ -#github { - display: block; - position: fixed; - width: 150px; - height: 150px; - top: 0; - right: 0; - z-index: 1050; -} - -code, -pre { - font-size: 13px; -} \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.eot b/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index 87eaa434..00000000 Binary files a/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.eot and /dev/null differ diff --git a/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.svg b/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index 5fee0685..00000000 --- a/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.ttf b/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index be784dc1..00000000 Binary files a/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.ttf and /dev/null differ diff --git a/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.woff b/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index 2cc3e485..00000000 Binary files a/public/bower_components/bootstrap-tour/docs/assets/fonts/glyphicons-halflings-regular.woff and /dev/null differ diff --git a/public/bower_components/bootstrap-tour/docs/assets/img/apple-touch-icon-144-precomposed.png b/public/bower_components/bootstrap-tour/docs/assets/img/apple-touch-icon-144-precomposed.png deleted file mode 100644 index 622a865a..00000000 Binary files a/public/bower_components/bootstrap-tour/docs/assets/img/apple-touch-icon-144-precomposed.png and /dev/null differ diff --git a/public/bower_components/bootstrap-tour/docs/assets/img/favicon.png b/public/bower_components/bootstrap-tour/docs/assets/img/favicon.png deleted file mode 100644 index 4e4560fd..00000000 Binary files a/public/bower_components/bootstrap-tour/docs/assets/img/favicon.png and /dev/null differ diff --git a/public/bower_components/bootstrap-tour/docs/assets/img/masthead-pattern.png b/public/bower_components/bootstrap-tour/docs/assets/img/masthead-pattern.png deleted file mode 100644 index 75c46a15..00000000 Binary files a/public/bower_components/bootstrap-tour/docs/assets/img/masthead-pattern.png and /dev/null differ diff --git a/public/bower_components/bootstrap-tour/docs/assets/js/bootstrap-tour.js b/public/bower_components/bootstrap-tour/docs/assets/js/bootstrap-tour.js deleted file mode 100644 index ebe73a58..00000000 --- a/public/bower_components/bootstrap-tour/docs/assets/js/bootstrap-tour.js +++ /dev/null @@ -1,687 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.8.0 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -(function($, window) { - var Tour, document; - document = window.document; - Tour = (function() { - function Tour(options) { - this._options = $.extend({ - name: "tour", - container: "body", - keyboard: true, - storage: window.localStorage, - debug: false, - backdrop: false, - redirect: true, - orphan: false, - duration: false, - basePath: "", - template: "

", - afterSetState: function(key, value) {}, - afterGetState: function(key, value) {}, - afterRemoveState: function(key) {}, - onStart: function(tour) {}, - onEnd: function(tour) {}, - onShow: function(tour) {}, - onShown: function(tour) {}, - onHide: function(tour) {}, - onHidden: function(tour) {}, - onNext: function(tour) {}, - onPrev: function(tour) {}, - onPause: function(tour, duration) {}, - onResume: function(tour, duration) {} - }, options); - this._force = false; - this._inited = false; - this._steps = []; - this.backdrop = { - overlay: null, - $element: null, - $background: null, - backgroundShown: false, - overlayElementShown: false - }; - } - - Tour.prototype.setState = function(key, value) { - var e, keyName; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - try { - this._options.storage.setItem(keyName, value); - } catch (_error) { - e = _error; - if (e.code === DOMException.QUOTA_EXCEEDED_ERR) { - this.debug("LocalStorage quota exceeded. setState failed."); - } - } - return this._options.afterSetState(keyName, value); - } else { - if (this._state == null) { - this._state = {}; - } - return this._state[key] = value; - } - }; - - Tour.prototype.removeState = function(key) { - var keyName; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - this._options.storage.removeItem(keyName); - return this._options.afterRemoveState(keyName); - } else { - if (this._state != null) { - return delete this._state[key]; - } - } - }; - - Tour.prototype.getState = function(key) { - var keyName, value; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - value = this._options.storage.getItem(keyName); - } else { - if (this._state != null) { - value = this._state[key]; - } - } - if (value === void 0 || value === "null") { - value = null; - } - this._options.afterGetState(key, value); - return value; - }; - - Tour.prototype.addSteps = function(steps) { - var step, _i, _len, _results; - _results = []; - for (_i = 0, _len = steps.length; _i < _len; _i++) { - step = steps[_i]; - _results.push(this.addStep(step)); - } - return _results; - }; - - Tour.prototype.addStep = function(step) { - return this._steps.push(step); - }; - - Tour.prototype.getStep = function(i) { - if (this._steps[i] != null) { - return $.extend({ - id: "step-" + i, - path: "", - placement: "right", - title: "", - content: "

", - next: i === this._steps.length - 1 ? -1 : i + 1, - prev: i - 1, - animation: true, - container: this._options.container, - backdrop: this._options.backdrop, - redirect: this._options.redirect, - orphan: this._options.orphan, - duration: this._options.duration, - template: this._options.template, - onShow: this._options.onShow, - onShown: this._options.onShown, - onHide: this._options.onHide, - onHidden: this._options.onHidden, - onNext: this._options.onNext, - onPrev: this._options.onPrev, - onPause: this._options.onPause, - onResume: this._options.onResume - }, this._steps[i]); - } - }; - - Tour.prototype.init = function(force) { - var _this = this; - this._force = force; - if (this.ended()) { - return this._debug("Tour ended, init prevented."); - } - this.setCurrentStep(); - this._setupMouseNavigation(); - this._setupKeyboardNavigation(); - this._onResize(function() { - return _this.showStep(_this._current); - }); - if (this._current !== null) { - this.showStep(this._current); - } - this._inited = true; - return this; - }; - - Tour.prototype.start = function(force) { - var promise; - if (force == null) { - force = false; - } - if (!this._inited) { - this.init(force); - } - if (this._current === null) { - promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0); - return this._callOnPromiseDone(promise, this.showStep, 0); - } - }; - - Tour.prototype.next = function() { - var promise; - if (this.ended()) { - return this._debug("Tour ended, next prevented."); - } - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this._showNextStep); - }; - - Tour.prototype.prev = function() { - var promise; - if (this.ended()) { - return this._debug("Tour ended, prev prevented."); - } - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this._showPrevStep); - }; - - Tour.prototype.goTo = function(i) { - var promise; - if (this.ended()) { - return this._debug("Tour ended, goTo prevented."); - } - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this.showStep, i); - }; - - Tour.prototype.end = function() { - var endHelper, promise, - _this = this; - endHelper = function(e) { - $(document).off("click.tour-" + _this._options.name); - $(document).off("keyup.tour-" + _this._options.name); - $(window).off("resize.tour-" + _this._options.name); - _this.setState("end", "yes"); - _this._inited = false; - _this._force = false; - _this._clearTimer(); - if (_this._options.onEnd != null) { - return _this._options.onEnd(_this); - } - }; - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, endHelper); - }; - - Tour.prototype.ended = function() { - return !this._force && !!this.getState("end"); - }; - - Tour.prototype.restart = function() { - this.removeState("current_step"); - this.removeState("end"); - this.setCurrentStep(0); - return this.start(); - }; - - Tour.prototype.pause = function() { - var step; - step = this.getStep(this._current); - if (!(step && step.duration)) { - return; - } - this._paused = true; - this._duration -= new Date().getTime() - this._start; - window.clearTimeout(this._timer); - this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining)."); - if (step.onPause != null) { - return step.onPause(this, this._duration); - } - }; - - Tour.prototype.resume = function() { - var step, - _this = this; - step = this.getStep(this._current); - if (!(step && step.duration)) { - return; - } - this._paused = false; - this._start = new Date().getTime(); - this._duration = this._duration || step.duration; - this._timer = window.setTimeout(function() { - if (_this._isLast()) { - return _this.next(); - } else { - return _this.end(); - } - }, this._duration); - this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration); - if ((step.onResume != null) && this._duration !== step.duration) { - return step.onResume(this, this._duration); - } - }; - - Tour.prototype.hideStep = function(i) { - var hideStepHelper, promise, step, - _this = this; - step = this.getStep(i); - if (!step) { - return; - } - this._clearTimer(); - promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0); - hideStepHelper = function(e) { - var $element; - $element = $(step.element); - if (!($element.data("bs.popover") || $element.data("popover"))) { - $element = $("body"); - } - $element.popover("destroy"); - if (step.reflex) { - $element.css("cursor", "").off("click.tour-" + _this._options.name); - } - if (step.backdrop) { - _this._hideBackdrop(); - } - if (step.onHidden != null) { - return step.onHidden(_this); - } - }; - this._callOnPromiseDone(promise, hideStepHelper); - return promise; - }; - - Tour.prototype.showStep = function(i) { - var promise, showStepHelper, skipToPrevious, step, - _this = this; - step = this.getStep(i); - if (!step) { - return; - } - skipToPrevious = i < this._current; - promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0); - showStepHelper = function(e) { - var current_path, path; - _this.setCurrentStep(i); - path = $.isFunction(step.path) ? step.path.call() : _this._options.basePath + step.path; - current_path = [document.location.pathname, document.location.hash].join(""); - if (_this._isRedirect(path, current_path)) { - _this._redirect(step, path); - return; - } - if (_this._isOrphan(step)) { - if (!step.orphan) { - _this._debug("Skip the orphan step " + (_this._current + 1) + ". Orphan option is false and the element doesn't exist or is hidden."); - if (skipToPrevious) { - _this._showPrevStep(); - } else { - _this._showNextStep(); - } - return; - } - _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true."); - } - if (step.backdrop) { - _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0); - } - _this._scrollIntoView(step.element, function() { - if ((step.element != null) && step.backdrop) { - _this._showOverlayElement(step.element); - } - _this._showPopover(step, i); - if (step.onShown != null) { - step.onShown(_this); - } - return _this._debug("Step " + (_this._current + 1) + " of " + _this._steps.length); - }); - if (step.duration) { - return _this.resume(); - } - }; - this._callOnPromiseDone(promise, showStepHelper); - return promise; - }; - - Tour.prototype.setCurrentStep = function(value) { - if (value != null) { - this._current = value; - this.setState("current_step", value); - } else { - this._current = this.getState("current_step"); - this._current = this._current === null ? null : parseInt(this._current, 10); - } - return this; - }; - - Tour.prototype._showNextStep = function() { - var promise, showNextStepHelper, step, - _this = this; - step = this.getStep(this._current); - showNextStepHelper = function(e) { - return _this.showStep(step.next); - }; - promise = this._makePromise((step.onNext != null ? step.onNext(this) : void 0)); - return this._callOnPromiseDone(promise, showNextStepHelper); - }; - - Tour.prototype._showPrevStep = function() { - var promise, showPrevStepHelper, step, - _this = this; - step = this.getStep(this._current); - showPrevStepHelper = function(e) { - return _this.showStep(step.prev); - }; - promise = this._makePromise((step.onPrev != null ? step.onPrev(this) : void 0)); - return this._callOnPromiseDone(promise, showPrevStepHelper); - }; - - Tour.prototype._debug = function(text) { - if (this._options.debug) { - return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text); - } - }; - - Tour.prototype._isRedirect = function(path, currentPath) { - return (path != null) && path !== "" && path.replace(/\?.*$/, "").replace(/\/?$/, "") !== currentPath.replace(/\/?$/, ""); - }; - - Tour.prototype._redirect = function(step, path) { - if ($.isFunction(step.redirect)) { - return step.redirect.call(this, path); - } else if (step.redirect === true) { - this._debug("Redirect to " + path); - return document.location.href = path; - } - }; - - Tour.prototype._isOrphan = function(step) { - return (step.element == null) || !$(step.element).length || $(step.element).is(":hidden") && ($(step.element)[0].namespaceURI !== "http://www.w3.org/2000/svg"); - }; - - Tour.prototype._isLast = function() { - return this._current < this._steps.length - 1; - }; - - Tour.prototype._showPopover = function(step, i) { - var $element, $navigation, $template, $tip, isOrphan, options, - _this = this; - options = $.extend({}, this._options); - $template = $.isFunction(step.template) ? $(step.template(i, step)) : $(step.template); - $navigation = $template.find(".popover-navigation"); - isOrphan = this._isOrphan(step); - if (isOrphan) { - step.element = "body"; - step.placement = "top"; - $template = $template.addClass("orphan"); - } - $element = $(step.element); - $template.addClass("tour-" + this._options.name); - if (step.options) { - $.extend(options, step.options); - } - if (step.reflex) { - $element.css("cursor", "pointer").on("click.tour-" + this._options.name, function() { - if (_this._isLast()) { - return _this.next(); - } else { - return _this.end(); - } - }); - } - if (step.prev < 0) { - $navigation.find("*[data-role=prev]").addClass("disabled"); - } - if (step.next < 0) { - $navigation.find("*[data-role=next]").addClass("disabled"); - } - if (!step.duration) { - $navigation.find("*[data-role='pause-resume']").remove(); - } - step.template = $template.clone().wrap("
").parent().html(); - $element.popover({ - placement: step.placement, - trigger: "manual", - title: step.title, - content: step.content, - html: true, - animation: step.animation, - container: step.container, - template: step.template, - selector: step.element - }).popover("show"); - $tip = $element.data("bs.popover") ? $element.data("bs.popover").tip() : $element.data("popover").tip(); - $tip.attr("id", step.id); - this._reposition($tip, step); - if (isOrphan) { - return this._center($tip); - } - }; - - Tour.prototype._reposition = function($tip, step) { - var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; - offsetWidth = $tip[0].offsetWidth; - offsetHeight = $tip[0].offsetHeight; - tipOffset = $tip.offset(); - originalLeft = tipOffset.left; - originalTop = tipOffset.top; - offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); - if (offsetBottom < 0) { - tipOffset.top = tipOffset.top + offsetBottom; - } - offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth(); - if (offsetRight < 0) { - tipOffset.left = tipOffset.left + offsetRight; - } - if (tipOffset.top < 0) { - tipOffset.top = 0; - } - if (tipOffset.left < 0) { - tipOffset.left = 0; - } - $tip.offset(tipOffset); - if (step.placement === "bottom" || step.placement === "top") { - if (originalLeft !== tipOffset.left) { - return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, "left"); - } - } else { - if (originalTop !== tipOffset.top) { - return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, "top"); - } - } - }; - - Tour.prototype._center = function($tip) { - return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2); - }; - - Tour.prototype._replaceArrow = function($tip, delta, dimension, position) { - return $tip.find(".arrow").css(position, delta ? 50 * (1 - delta / dimension) + "%" : ""); - }; - - Tour.prototype._scrollIntoView = function(element, callback) { - var $element, $window, offsetTop, scrollTop, windowHeight, - _this = this; - if (!element) { - return callback(); - } - $element = $(element); - $window = $(window); - offsetTop = $element.offset().top; - windowHeight = $window.height(); - scrollTop = Math.max(0, offsetTop - (windowHeight / 2)); - this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + "."); - return $("body").stop().animate({ - scrollTop: Math.ceil(scrollTop) - }, function() { - callback(); - return _this._debug("Scroll into view. Animation end element offset: " + ($element.offset().top) + ". Window height: " + ($window.height()) + "."); - }); - }; - - Tour.prototype._onResize = function(callback, timeout) { - return $(window).on("resize.tour-" + this._options.name, function() { - clearTimeout(timeout); - return timeout = setTimeout(callback, 100); - }); - }; - - Tour.prototype._setupMouseNavigation = function() { - var _this = this; - _this = this; - $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=next]:not(.disabled)").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=next]:not(.disabled)", function(e) { - e.preventDefault(); - return _this.next(); - }); - $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=prev]:not(.disabled)").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=prev]:not(.disabled)", function(e) { - e.preventDefault(); - return _this.prev(); - }); - $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=end]").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=end]", function(e) { - e.preventDefault(); - return _this.end(); - }); - return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=pause-resume]").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=pause-resume]", function(e) { - var $this; - e.preventDefault(); - $this = $(this); - $this.text(_this._paused ? $this.data("pause-text") : $this.data("resume-text")); - if (_this._paused) { - return _this.resume(); - } else { - return _this.pause(); - } - }); - }; - - Tour.prototype._setupKeyboardNavigation = function() { - var _this = this; - if (!this._options.keyboard) { - return; - } - return $(document).on("keyup.tour-" + this._options.name, function(e) { - if (!e.which) { - return; - } - switch (e.which) { - case 39: - e.preventDefault(); - if (_this._isLast()) { - return _this.next(); - } else { - return _this.end(); - } - break; - case 37: - e.preventDefault(); - if (_this._current > 0) { - return _this.prev(); - } - break; - case 27: - e.preventDefault(); - return _this.end(); - } - }); - }; - - Tour.prototype._makePromise = function(result) { - if (result && $.isFunction(result.then)) { - return result; - } else { - return null; - } - }; - - Tour.prototype._callOnPromiseDone = function(promise, cb, arg) { - var _this = this; - if (promise) { - return promise.then(function(e) { - return cb.call(_this, arg); - }); - } else { - return cb.call(this, arg); - } - }; - - Tour.prototype._showBackdrop = function(element) { - if (this.backdrop.backgroundShown) { - return; - } - this.backdrop = $("
", { - "class": "tour-backdrop" - }); - this.backdrop.backgroundShown = true; - return $("body").append(this.backdrop); - }; - - Tour.prototype._hideBackdrop = function() { - this._hideOverlayElement(); - return this._hideBackground(); - }; - - Tour.prototype._hideBackground = function() { - this.backdrop.remove(); - this.backdrop.overlay = null; - return this.backdrop.backgroundShown = false; - }; - - Tour.prototype._showOverlayElement = function(element) { - var $background, $element, offset; - if (this.backdrop.overlayElementShown) { - return; - } - this.backdrop.overlayElementShown = true; - $element = $(element); - $background = $("
"); - offset = $element.offset(); - offset.top = offset.top; - offset.left = offset.left; - $background.width($element.innerWidth()).height($element.innerHeight()).addClass("tour-step-background").offset(offset); - $element.addClass("tour-step-backdrop"); - $("body").append($background); - this.backdrop.$element = $element; - return this.backdrop.$background = $background; - }; - - Tour.prototype._hideOverlayElement = function() { - if (!this.backdrop.overlayElementShown) { - return; - } - this.backdrop.$element.removeClass("tour-step-backdrop"); - this.backdrop.$background.remove(); - this.backdrop.$element = null; - this.backdrop.$background = null; - return this.backdrop.overlayElementShown = false; - }; - - Tour.prototype._clearTimer = function() { - window.clearTimeout(this._timer); - this._timer = null; - return this._duration = null; - }; - - return Tour; - - })(); - return window.Tour = Tour; -})(jQuery, window); diff --git a/public/bower_components/bootstrap-tour/docs/assets/js/bootstrap-tour.min.js b/public/bower_components/bootstrap-tour/docs/assets/js/bootstrap-tour.min.js deleted file mode 100644 index fb2e5611..00000000 --- a/public/bower_components/bootstrap-tour/docs/assets/js/bootstrap-tour.min.js +++ /dev/null @@ -1,19 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.8.0 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -!function(a,b){var c,d;return d=b.document,c=function(){function c(c){this._options=a.extend({name:"tour",container:"body",keyboard:!0,storage:b.localStorage,debug:!1,backdrop:!1,redirect:!0,orphan:!1,duration:!1,basePath:"",template:"

",afterSetState:function(){},afterGetState:function(){},afterRemoveState:function(){},onStart:function(){},onEnd:function(){},onShow:function(){},onShown:function(){},onHide:function(){},onHidden:function(){},onNext:function(){},onPrev:function(){},onPause:function(){},onResume:function(){}},c),this._force=!1,this._inited=!1,this._steps=[],this.backdrop={overlay:null,$element:null,$background:null,backgroundShown:!1,overlayElementShown:!1}}return c.prototype.setState=function(a,b){var c,d;if(this._options.storage){d=""+this._options.name+"_"+a;try{this._options.storage.setItem(d,b)}catch(e){c=e,c.code===DOMException.QUOTA_EXCEEDED_ERR&&this.debug("LocalStorage quota exceeded. setState failed.")}return this._options.afterSetState(d,b)}return null==this._state&&(this._state={}),this._state[a]=b},c.prototype.removeState=function(a){var b;return this._options.storage?(b=""+this._options.name+"_"+a,this._options.storage.removeItem(b),this._options.afterRemoveState(b)):null!=this._state?delete this._state[a]:void 0},c.prototype.getState=function(a){var b,c;return this._options.storage?(b=""+this._options.name+"_"+a,c=this._options.storage.getItem(b)):null!=this._state&&(c=this._state[a]),(void 0===c||"null"===c)&&(c=null),this._options.afterGetState(a,c),c},c.prototype.addSteps=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(this.addStep(b));return e},c.prototype.addStep=function(a){return this._steps.push(a)},c.prototype.getStep=function(b){return null!=this._steps[b]?a.extend({id:"step-"+b,path:"",placement:"right",title:"",content:"

",next:b===this._steps.length-1?-1:b+1,prev:b-1,animation:!0,container:this._options.container,backdrop:this._options.backdrop,redirect:this._options.redirect,orphan:this._options.orphan,duration:this._options.duration,template:this._options.template,onShow:this._options.onShow,onShown:this._options.onShown,onHide:this._options.onHide,onHidden:this._options.onHidden,onNext:this._options.onNext,onPrev:this._options.onPrev,onPause:this._options.onPause,onResume:this._options.onResume},this._steps[b]):void 0},c.prototype.init=function(a){var b=this;return this._force=a,this.ended()?this._debug("Tour ended, init prevented."):(this.setCurrentStep(),this._setupMouseNavigation(),this._setupKeyboardNavigation(),this._onResize(function(){return b.showStep(b._current)}),null!==this._current&&this.showStep(this._current),this._inited=!0,this)},c.prototype.start=function(a){var b;return null==a&&(a=!1),this._inited||this.init(a),null===this._current?(b=this._makePromise(null!=this._options.onStart?this._options.onStart(this):void 0),this._callOnPromiseDone(b,this.showStep,0)):void 0},c.prototype.next=function(){var a;return this.ended()?this._debug("Tour ended, next prevented."):(a=this.hideStep(this._current),this._callOnPromiseDone(a,this._showNextStep))},c.prototype.prev=function(){var a;return this.ended()?this._debug("Tour ended, prev prevented."):(a=this.hideStep(this._current),this._callOnPromiseDone(a,this._showPrevStep))},c.prototype.goTo=function(a){var b;return this.ended()?this._debug("Tour ended, goTo prevented."):(b=this.hideStep(this._current),this._callOnPromiseDone(b,this.showStep,a))},c.prototype.end=function(){var c,e,f=this;return c=function(){return a(d).off("click.tour-"+f._options.name),a(d).off("keyup.tour-"+f._options.name),a(b).off("resize.tour-"+f._options.name),f.setState("end","yes"),f._inited=!1,f._force=!1,f._clearTimer(),null!=f._options.onEnd?f._options.onEnd(f):void 0},e=this.hideStep(this._current),this._callOnPromiseDone(e,c)},c.prototype.ended=function(){return!this._force&&!!this.getState("end")},c.prototype.restart=function(){return this.removeState("current_step"),this.removeState("end"),this.setCurrentStep(0),this.start()},c.prototype.pause=function(){var a;return a=this.getStep(this._current),a&&a.duration?(this._paused=!0,this._duration-=(new Date).getTime()-this._start,b.clearTimeout(this._timer),this._debug("Paused/Stopped step "+(this._current+1)+" timer ("+this._duration+" remaining)."),null!=a.onPause?a.onPause(this,this._duration):void 0):void 0},c.prototype.resume=function(){var a,c=this;return a=this.getStep(this._current),a&&a.duration?(this._paused=!1,this._start=(new Date).getTime(),this._duration=this._duration||a.duration,this._timer=b.setTimeout(function(){return c._isLast()?c.next():c.end()},this._duration),this._debug("Started step "+(this._current+1)+" timer with duration "+this._duration),null!=a.onResume&&this._duration!==a.duration?a.onResume(this,this._duration):void 0):void 0},c.prototype.hideStep=function(b){var c,d,e,f=this;return(e=this.getStep(b))?(this._clearTimer(),d=this._makePromise(null!=e.onHide?e.onHide(this,b):void 0),c=function(){var b;return b=a(e.element),b.data("bs.popover")||b.data("popover")||(b=a("body")),b.popover("destroy"),e.reflex&&b.css("cursor","").off("click.tour-"+f._options.name),e.backdrop&&f._hideBackdrop(),null!=e.onHidden?e.onHidden(f):void 0},this._callOnPromiseDone(d,c),d):void 0},c.prototype.showStep=function(b){var c,e,f,g,h=this;return(g=this.getStep(b))?(f=b").parent().html(),d.popover({placement:b.placement,trigger:"manual",title:b.title,content:b.content,html:!0,animation:b.animation,container:b.container,template:b.template,selector:b.element}).popover("show"),g=d.data("bs.popover")?d.data("bs.popover").tip():d.data("popover").tip(),g.attr("id",b.id),this._reposition(g,b),h?this._center(g):void 0},c.prototype._reposition=function(b,c){var e,f,g,h,i,j,k;if(h=b[0].offsetWidth,f=b[0].offsetHeight,k=b.offset(),i=k.left,j=k.top,e=a(d).outerHeight()-k.top-b.outerHeight(),0>e&&(k.top=k.top+e),g=a("html").outerWidth()-k.left-b.outerWidth(),0>g&&(k.left=k.left+g),k.top<0&&(k.top=0),k.left<0&&(k.left=0),b.offset(k),"bottom"===c.placement||"top"===c.placement){if(i!==k.left)return this._replaceArrow(b,2*(k.left-i),h,"left")}else if(j!==k.top)return this._replaceArrow(b,2*(k.top-j),f,"top")},c.prototype._center=function(c){return c.css("top",a(b).outerHeight()/2-c.outerHeight()/2)},c.prototype._replaceArrow=function(a,b,c,d){return a.find(".arrow").css(d,b?50*(1-b/c)+"%":"")},c.prototype._scrollIntoView=function(c,d){var e,f,g,h,i,j=this;return c?(e=a(c),f=a(b),g=e.offset().top,i=f.height(),h=Math.max(0,g-i/2),this._debug("Scroll into view. ScrollTop: "+h+". Element offset: "+g+". Window height: "+i+"."),a("body").stop().animate({scrollTop:Math.ceil(h)},function(){return d(),j._debug("Scroll into view. Animation end element offset: "+e.offset().top+". Window height: "+f.height()+".")})):d()},c.prototype._onResize=function(c,d){return a(b).on("resize.tour-"+this._options.name,function(){return clearTimeout(d),d=setTimeout(c,100)})},c.prototype._setupMouseNavigation=function(){var b=this;return b=this,a(d).off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=next]:not(.disabled)").on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=next]:not(.disabled)",function(a){return a.preventDefault(),b.next()}),a(d).off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=prev]:not(.disabled)").on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=prev]:not(.disabled)",function(a){return a.preventDefault(),b.prev()}),a(d).off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=end]").on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=end]",function(a){return a.preventDefault(),b.end()}),a(d).off("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=pause-resume]").on("click.tour-"+this._options.name,".popover.tour-"+this._options.name+" *[data-role=pause-resume]",function(c){var d;return c.preventDefault(),d=a(this),d.text(b._paused?d.data("pause-text"):d.data("resume-text")),b._paused?b.resume():b.pause()})},c.prototype._setupKeyboardNavigation=function(){var b=this;if(this._options.keyboard)return a(d).on("keyup.tour-"+this._options.name,function(a){if(a.which)switch(a.which){case 39:return a.preventDefault(),b._isLast()?b.next():b.end();case 37:if(a.preventDefault(),b._current>0)return b.prev();break;case 27:return a.preventDefault(),b.end()}})},c.prototype._makePromise=function(b){return b&&a.isFunction(b.then)?b:null},c.prototype._callOnPromiseDone=function(a,b,c){var d=this;return a?a.then(function(){return b.call(d,c)}):b.call(this,c)},c.prototype._showBackdrop=function(){return this.backdrop.backgroundShown?void 0:(this.backdrop=a("
",{"class":"tour-backdrop"}),this.backdrop.backgroundShown=!0,a("body").append(this.backdrop))},c.prototype._hideBackdrop=function(){return this._hideOverlayElement(),this._hideBackground()},c.prototype._hideBackground=function(){return this.backdrop.remove(),this.backdrop.overlay=null,this.backdrop.backgroundShown=!1},c.prototype._showOverlayElement=function(b){var c,d,e;if(!this.backdrop.overlayElementShown)return this.backdrop.overlayElementShown=!0,d=a(b),c=a("
"),e=d.offset(),e.top=e.top,e.left=e.left,c.width(d.innerWidth()).height(d.innerHeight()).addClass("tour-step-background").offset(e),d.addClass("tour-step-backdrop"),a("body").append(c),this.backdrop.$element=d,this.backdrop.$background=c},c.prototype._hideOverlayElement=function(){return this.backdrop.overlayElementShown?(this.backdrop.$element.removeClass("tour-step-backdrop"),this.backdrop.$background.remove(),this.backdrop.$element=null,this.backdrop.$background=null,this.backdrop.overlayElementShown=!1):void 0},c.prototype._clearTimer=function(){return b.clearTimeout(this._timer),this._timer=null,this._duration=null},c}(),b.Tour=c}(jQuery,window); \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/docs/assets/js/index.js b/public/bower_components/bootstrap-tour/docs/assets/js/index.js deleted file mode 100644 index c57cb89f..00000000 --- a/public/bower_components/bootstrap-tour/docs/assets/js/index.js +++ /dev/null @@ -1,94 +0,0 @@ -$(function() { - var $demo, duration, remaining, tour; - $demo = $("#demo"); - tour = new Tour({ - onStart: function() { - return $demo.addClass("disabled", true); - }, - onEnd: function() { - return $demo.removeClass("disabled", true); - }, - debug: true - }); - duration = 5000; - remaining = duration; - tour.addSteps([ - { - element: "#demo", - placement: "bottom", - title: "Welcome to Bootstrap Tour!", - content: "Introduce new users to your product by walking them through it step by step.\nBuilt on the awesome\nBootstrap from Twitter." - }, { - element: "#usage", - placement: "top", - title: "A super simple setup", - content: "Easy is better, right? Easy like Bootstrap. The tour is up and running with just a few options and steps." - }, { - element: "#options", - placement: "top", - title: "Flexibilty and expressiveness", - content: "There are more options for those who want to get on the dark side.
\nPower to the people!", - reflex: true - }, { - element: "#duration", - placement: "top", - title: "Automagically expiring step", - content: "A new addition: make your tour (or step) completely automatic. You set the duration, Bootstrap\nTour does the rest. For instance, this step will disappear in 5 seconds.", - duration: 5000 - }, { - element: "#methods", - placement: "top", - title: "A new shiny Backdrop option", - content: "If you need to highlight the current step's element, activate the backdrop and you won't lose\nthe focus anymore!", - backdrop: true - }, { - title: "And support for orphan steps", - content: "If you activate the orphan property, the step(s) are shown centered in the page, and you can\nforget to specify element and placement!", - orphan: true - }, { - path: "/", - element: "#reflex", - placement: "bottom", - title: "Reflex mode", - content: "Reflex mode is enabled, click on the page heading to continue!", - reflex: true - }, { - path: "/page.html", - element: "h1", - placement: "bottom", - title: "See, you are not restricted to only one page", - content: "Well, nothing to see here. Click next to go back to the index page." - }, { - path: "/", - element: "#license", - placement: "top", - title: "Best of all, it's free!", - content: "Yeah! Free as in beer... or speech. Use and abuse, but don't forget to contribute!" - }, { - element: ".navbar-nav > li:last", - placement: "bottom", - title: "Fixed position", - content: "Works well for fixed positioned elements! :)" - } - ]); - tour.init(); - tour.start(); - if (tour.ended()) { - $('
You ended the demo tour. Restart the demo tour.
').prependTo(".content").alert(); - } - $(document).on("click", "[data-demo]", function(e) { - e.preventDefault(); - if ($(this).hasClass("disabled")) { - return; - } - tour.restart(); - return $(".alert").alert("close"); - }); - $("html").smoothScroll(); - return $(".gravatar").each(function() { - var $this, email; - $this = $(this); - email = md5($this.data("email")); - return $(this).attr("src", "http://www.gravatar.com/avatar/" + email + "?s=60"); - }); -}); diff --git a/public/bower_components/bootstrap-tour/docs/assets/vendor/bootstrap.css b/public/bower_components/bootstrap-tour/docs/assets/vendor/bootstrap.css deleted file mode 100644 index bbda4eed..00000000 --- a/public/bower_components/bootstrap-tour/docs/assets/vendor/bootstrap.css +++ /dev/null @@ -1,6805 +0,0 @@ -/*! - * Bootstrap v3.0.0 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */ - -/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -audio, -canvas, -video { - display: inline-block; -} - -audio:not([controls]) { - display: none; - height: 0; -} - -[hidden] { - display: none; -} - -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - margin: 0; -} - -a:focus { - outline: thin dotted; -} - -a:active, -a:hover { - outline: 0; -} - -h1 { - margin: 0.67em 0; - font-size: 2em; -} - -abbr[title] { - border-bottom: 1px dotted; -} - -b, -strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -hr { - height: 0; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -mark { - color: #000; - background: #ff0; -} - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -pre { - white-space: pre-wrap; -} - -q { - quotes: "\201C" "\201D" "\2018" "\2019"; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - border: 0; -} - -svg:not(:root) { - overflow: hidden; -} - -figure { - margin: 0; -} - -fieldset { - padding: 0.35em 0.625em 0.75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} - -legend { - padding: 0; - border: 0; -} - -button, -input, -select, -textarea { - margin: 0; - font-family: inherit; - font-size: 100%; -} - -button, -input { - line-height: normal; -} - -button, -select { - text-transform: none; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -button[disabled], -html input[disabled] { - cursor: default; -} - -input[type="checkbox"], -input[type="radio"] { - padding: 0; - box-sizing: border-box; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -@media print { - * { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 2cm .5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .table td, - .table th { - background-color: #fff !important; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} - -*, -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -html { - font-size: 62.5%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.428571429; - color: #333333; - background-color: #ffffff; -} - -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input, -select[multiple], -textarea { - background-image: none; -} - -a { - color: #428bca; - text-decoration: none; -} - -a:hover, -a:focus { - color: #2a6496; - text-decoration: underline; -} - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -img { - vertical-align: middle; -} - -.img-responsive { - display: block; - height: auto; - max-width: 100%; -} - -.img-rounded { - border-radius: 6px; -} - -.img-thumbnail { - display: inline-block; - height: auto; - max-width: 100%; - padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -.img-circle { - border-radius: 50%; -} - -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0 0 0 0); - border: 0; -} - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 16.099999999999998px; - font-weight: 200; - line-height: 1.4; -} - -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} - -small { - font-size: 85%; -} - -cite { - font-style: normal; -} - -.text-muted { - color: #999999; -} - -.text-primary { - color: #428bca; -} - -.text-warning { - color: #c09853; -} - -.text-danger { - color: #b94a48; -} - -.text-success { - color: #468847; -} - -.text-info { - color: #3a87ad; -} - -.text-left { - text-align: left; -} - -.text-right { - text-align: right; -} - -.text-center { - text-align: center; -} - -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 500; - line-height: 1.1; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} - -h1, -h2, -h3 { - margin-top: 20px; - margin-bottom: 10px; -} - -h4, -h5, -h6 { - margin-top: 10px; - margin-bottom: 10px; -} - -h1, -.h1 { - font-size: 36px; -} - -h2, -.h2 { - font-size: 30px; -} - -h3, -.h3 { - font-size: 24px; -} - -h4, -.h4 { - font-size: 18px; -} - -h5, -.h5 { - font-size: 14px; -} - -h6, -.h6 { - font-size: 12px; -} - -h1 small, -.h1 small { - font-size: 24px; -} - -h2 small, -.h2 small { - font-size: 18px; -} - -h3 small, -.h3 small, -h4 small, -.h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} - -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} - -.list-unstyled { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} - -dl { - margin-bottom: 20px; -} - -dt, -dd { - line-height: 1.428571429; -} - -dt { - font-weight: bold; -} - -dd { - margin-left: 0; -} - -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} - -blockquote p:last-child { - margin-bottom: 0; -} - -blockquote small { - display: block; - line-height: 1.428571429; - color: #999999; -} - -blockquote small:before { - content: '\2014 \00A0'; -} - -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { - content: ''; -} - -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 1.428571429; -} - -code, -pre { - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} - -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - white-space: nowrap; - background-color: #f9f2f4; - border-radius: 4px; -} - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.428571429; - color: #333333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; -} - -pre.prettyprint { - margin-bottom: 20px; -} - -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -.container:before, -.container:after { - display: table; - content: " "; -} - -.container:after { - clear: both; -} - -.container:before, -.container:after { - display: table; - content: " "; -} - -.container:after { - clear: both; -} - -.row { - margin-right: -15px; - margin-left: -15px; -} - -.row:before, -.row:after { - display: table; - content: " "; -} - -.row:after { - clear: both; -} - -.row:before, -.row:after { - display: table; - content: " "; -} - -.row:after { - clear: both; -} - -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11, -.col-xs-12, -.col-sm-1, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-md-1, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-md-10, -.col-md-11, -.col-md-12, -.col-lg-1, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-lg-10, -.col-lg-11, -.col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} - -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11 { - float: left; -} - -.col-xs-1 { - width: 8.333333333333332%; -} - -.col-xs-2 { - width: 16.666666666666664%; -} - -.col-xs-3 { - width: 25%; -} - -.col-xs-4 { - width: 33.33333333333333%; -} - -.col-xs-5 { - width: 41.66666666666667%; -} - -.col-xs-6 { - width: 50%; -} - -.col-xs-7 { - width: 58.333333333333336%; -} - -.col-xs-8 { - width: 66.66666666666666%; -} - -.col-xs-9 { - width: 75%; -} - -.col-xs-10 { - width: 83.33333333333334%; -} - -.col-xs-11 { - width: 91.66666666666666%; -} - -.col-xs-12 { - width: 100%; -} - -@media (min-width: 768px) { - .container { - max-width: 750px; - } - .col-sm-1, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9, - .col-sm-10, - .col-sm-11 { - float: left; - } - .col-sm-1 { - width: 8.333333333333332%; - } - .col-sm-2 { - width: 16.666666666666664%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-4 { - width: 33.33333333333333%; - } - .col-sm-5 { - width: 41.66666666666667%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-7 { - width: 58.333333333333336%; - } - .col-sm-8 { - width: 66.66666666666666%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-10 { - width: 83.33333333333334%; - } - .col-sm-11 { - width: 91.66666666666666%; - } - .col-sm-12 { - width: 100%; - } - .col-sm-push-1 { - left: 8.333333333333332%; - } - .col-sm-push-2 { - left: 16.666666666666664%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-4 { - left: 33.33333333333333%; - } - .col-sm-push-5 { - left: 41.66666666666667%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-7 { - left: 58.333333333333336%; - } - .col-sm-push-8 { - left: 66.66666666666666%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-10 { - left: 83.33333333333334%; - } - .col-sm-push-11 { - left: 91.66666666666666%; - } - .col-sm-pull-1 { - right: 8.333333333333332%; - } - .col-sm-pull-2 { - right: 16.666666666666664%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-4 { - right: 33.33333333333333%; - } - .col-sm-pull-5 { - right: 41.66666666666667%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-7 { - right: 58.333333333333336%; - } - .col-sm-pull-8 { - right: 66.66666666666666%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-10 { - right: 83.33333333333334%; - } - .col-sm-pull-11 { - right: 91.66666666666666%; - } - .col-sm-offset-1 { - margin-left: 8.333333333333332%; - } - .col-sm-offset-2 { - margin-left: 16.666666666666664%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-4 { - margin-left: 33.33333333333333%; - } - .col-sm-offset-5 { - margin-left: 41.66666666666667%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-7 { - margin-left: 58.333333333333336%; - } - .col-sm-offset-8 { - margin-left: 66.66666666666666%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-10 { - margin-left: 83.33333333333334%; - } - .col-sm-offset-11 { - margin-left: 91.66666666666666%; - } -} - -@media (min-width: 992px) { - .container { - max-width: 970px; - } - .col-md-1, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9, - .col-md-10, - .col-md-11 { - float: left; - } - .col-md-1 { - width: 8.333333333333332%; - } - .col-md-2 { - width: 16.666666666666664%; - } - .col-md-3 { - width: 25%; - } - .col-md-4 { - width: 33.33333333333333%; - } - .col-md-5 { - width: 41.66666666666667%; - } - .col-md-6 { - width: 50%; - } - .col-md-7 { - width: 58.333333333333336%; - } - .col-md-8 { - width: 66.66666666666666%; - } - .col-md-9 { - width: 75%; - } - .col-md-10 { - width: 83.33333333333334%; - } - .col-md-11 { - width: 91.66666666666666%; - } - .col-md-12 { - width: 100%; - } - .col-md-push-0 { - left: auto; - } - .col-md-push-1 { - left: 8.333333333333332%; - } - .col-md-push-2 { - left: 16.666666666666664%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-4 { - left: 33.33333333333333%; - } - .col-md-push-5 { - left: 41.66666666666667%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-7 { - left: 58.333333333333336%; - } - .col-md-push-8 { - left: 66.66666666666666%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-10 { - left: 83.33333333333334%; - } - .col-md-push-11 { - left: 91.66666666666666%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-pull-1 { - right: 8.333333333333332%; - } - .col-md-pull-2 { - right: 16.666666666666664%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-4 { - right: 33.33333333333333%; - } - .col-md-pull-5 { - right: 41.66666666666667%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-7 { - right: 58.333333333333336%; - } - .col-md-pull-8 { - right: 66.66666666666666%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-10 { - right: 83.33333333333334%; - } - .col-md-pull-11 { - right: 91.66666666666666%; - } - .col-md-offset-0 { - margin-left: 0; - } - .col-md-offset-1 { - margin-left: 8.333333333333332%; - } - .col-md-offset-2 { - margin-left: 16.666666666666664%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-4 { - margin-left: 33.33333333333333%; - } - .col-md-offset-5 { - margin-left: 41.66666666666667%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-7 { - margin-left: 58.333333333333336%; - } - .col-md-offset-8 { - margin-left: 66.66666666666666%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-10 { - margin-left: 83.33333333333334%; - } - .col-md-offset-11 { - margin-left: 91.66666666666666%; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1170px; - } - .col-lg-1, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9, - .col-lg-10, - .col-lg-11 { - float: left; - } - .col-lg-1 { - width: 8.333333333333332%; - } - .col-lg-2 { - width: 16.666666666666664%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-4 { - width: 33.33333333333333%; - } - .col-lg-5 { - width: 41.66666666666667%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-7 { - width: 58.333333333333336%; - } - .col-lg-8 { - width: 66.66666666666666%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-10 { - width: 83.33333333333334%; - } - .col-lg-11 { - width: 91.66666666666666%; - } - .col-lg-12 { - width: 100%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-push-1 { - left: 8.333333333333332%; - } - .col-lg-push-2 { - left: 16.666666666666664%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-4 { - left: 33.33333333333333%; - } - .col-lg-push-5 { - left: 41.66666666666667%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-7 { - left: 58.333333333333336%; - } - .col-lg-push-8 { - left: 66.66666666666666%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-10 { - left: 83.33333333333334%; - } - .col-lg-push-11 { - left: 91.66666666666666%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-pull-1 { - right: 8.333333333333332%; - } - .col-lg-pull-2 { - right: 16.666666666666664%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-4 { - right: 33.33333333333333%; - } - .col-lg-pull-5 { - right: 41.66666666666667%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-7 { - right: 58.333333333333336%; - } - .col-lg-pull-8 { - right: 66.66666666666666%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-10 { - right: 83.33333333333334%; - } - .col-lg-pull-11 { - right: 91.66666666666666%; - } - .col-lg-offset-0 { - margin-left: 0; - } - .col-lg-offset-1 { - margin-left: 8.333333333333332%; - } - .col-lg-offset-2 { - margin-left: 16.666666666666664%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-4 { - margin-left: 33.33333333333333%; - } - .col-lg-offset-5 { - margin-left: 41.66666666666667%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-7 { - margin-left: 58.333333333333336%; - } - .col-lg-offset-8 { - margin-left: 66.66666666666666%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-10 { - margin-left: 83.33333333333334%; - } - .col-lg-offset-11 { - margin-left: 91.66666666666666%; - } -} - -table { - max-width: 100%; - background-color: transparent; -} - -th { - text-align: left; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table thead > tr > th, -.table tbody > tr > th, -.table tfoot > tr > th, -.table thead > tr > td, -.table tbody > tr > td, -.table tfoot > tr > td { - padding: 8px; - line-height: 1.428571429; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} - -.table caption + thead tr:first-child th, -.table colgroup + thead tr:first-child th, -.table thead:first-child tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child td { - border-top: 0; -} - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed thead > tr > th, -.table-condensed tbody > tr > th, -.table-condensed tfoot > tr > th, -.table-condensed thead > tr > td, -.table-condensed tbody > tr > td, -.table-condensed tfoot > tr > td { - padding: 5px; -} - -.table-bordered { - border: 1px solid #dddddd; -} - -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} - -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} - -.table-striped > tbody > tr:nth-child(odd) > td, -.table-striped > tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} - -.table-hover > tbody > tr:hover > td, -.table-hover > tbody > tr:hover > th { - background-color: #f5f5f5; -} - -table col[class*="col-"] { - display: table-column; - float: none; -} - -table td[class*="col-"], -table th[class*="col-"] { - display: table-cell; - float: none; -} - -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} - -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td { - background-color: #d0e9c6; - border-color: #c9e2b3; -} - -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; - border-color: #eed3d7; -} - -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td { - background-color: #ebcccc; - border-color: #e6c1c7; -} - -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td { - background-color: #faf2cc; - border-color: #f8e5be; -} - -@media (max-width: 768px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-x: scroll; - overflow-y: hidden; - border: 1px solid #dddddd; - } - .table-responsive > .table { - margin-bottom: 0; - background-color: #fff; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > thead > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > thead > tr:last-child > td, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} - -label { - display: inline-block; - margin-bottom: 5px; - font-weight: bold; -} - -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - /* IE8-9 */ - - line-height: normal; -} - -input[type="file"] { - display: block; -} - -select[multiple], -select[size] { - height: auto; -} - -select optgroup { - font-family: inherit; - font-size: inherit; - font-style: inherit; -} - -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -input[type="number"]::-webkit-outer-spin-button, -input[type="number"]::-webkit-inner-spin-button { - height: auto; -} - -.form-control:-moz-placeholder { - color: #999999; -} - -.form-control::-moz-placeholder { - color: #999999; -} - -.form-control:-ms-input-placeholder { - color: #999999; -} - -.form-control::-webkit-input-placeholder { - color: #999999; -} - -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.428571429; - color: #555555; - vertical-align: middle; - background-color: #ffffff; - border: 1px solid #cccccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -} - -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); -} - -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - cursor: not-allowed; - background-color: #eeeeee; -} - -textarea.form-control { - height: auto; -} - -.form-group { - margin-bottom: 15px; -} - -.radio, -.checkbox { - display: block; - min-height: 20px; - padding-left: 20px; - margin-top: 10px; - margin-bottom: 10px; - vertical-align: middle; -} - -.radio label, -.checkbox label { - display: inline; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} - -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} - -.radio-inline, -.checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; -} - -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -.radio[disabled], -.radio-inline[disabled], -.checkbox[disabled], -.checkbox-inline[disabled], -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"], -fieldset[disabled] .radio, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} - -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -select.input-sm { - height: 30px; - line-height: 30px; -} - -textarea.input-sm { - height: auto; -} - -.input-lg { - height: 45px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -select.input-lg { - height: 45px; - line-height: 45px; -} - -textarea.input-lg { - height: auto; -} - -.has-warning .help-block, -.has-warning .control-label { - color: #c09853; -} - -.has-warning .form-control { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-warning .form-control:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - -.has-warning .input-group-addon { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.has-error .help-block, -.has-error .control-label { - color: #b94a48; -} - -.has-error .form-control { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-error .form-control:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - -.has-error .input-group-addon { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.has-success .help-block, -.has-success .control-label { - color: #468847; -} - -.has-success .form-control { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-success .form-control:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.has-success .input-group-addon { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.form-control-static { - padding-top: 7px; - margin-bottom: 0; -} - -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} - -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } -} - -.form-horizontal .control-label, -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} - -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; -} - -.form-horizontal .form-group:after { - clear: both; -} - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; -} - -.form-horizontal .form-group:after { - clear: both; -} - -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - } -} - -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.428571429; - text-align: center; - white-space: nowrap; - vertical-align: middle; - cursor: pointer; - border: 1px solid transparent; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; -} - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; -} - -.btn:active, -.btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - pointer-events: none; - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} - -.btn-default:hover, -.btn-default:focus, -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - color: #333333; - background-color: #ebebeb; - border-color: #adadad; -} - -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - background-image: none; -} - -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #ffffff; - border-color: #cccccc; -} - -.btn-primary { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #3276b1; - border-color: #285e8e; -} - -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - background-image: none; -} - -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #428bca; - border-color: #357ebd; -} - -.btn-warning { - color: #ffffff; - background-color: #f0ad4e; - border-color: #eea236; -} - -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #ed9c28; - border-color: #d58512; -} - -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - background-image: none; -} - -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} - -.btn-danger { - color: #ffffff; - background-color: #d9534f; - border-color: #d43f3a; -} - -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #d2322d; - border-color: #ac2925; -} - -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - background-image: none; -} - -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} - -.btn-success { - color: #ffffff; - background-color: #5cb85c; - border-color: #4cae4c; -} - -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #47a447; - border-color: #398439; -} - -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - background-image: none; -} - -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; -} - -.btn-info { - color: #ffffff; - background-color: #5bc0de; - border-color: #46b8da; -} - -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #39b3d7; - border-color: #269abc; -} - -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - background-image: none; -} - -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; -} - -.btn-link { - font-weight: normal; - color: #428bca; - cursor: pointer; - border-radius: 0; -} - -.btn-link, -.btn-link:active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} - -.btn-link:hover, -.btn-link:focus { - color: #2a6496; - text-decoration: underline; - background-color: transparent; -} - -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #999999; - text-decoration: none; -} - -.btn-lg { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -.btn-sm, -.btn-xs { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-xs { - padding: 1px 5px; -} - -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - display: none; -} - -.collapse.in { - display: block; -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); -} - -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - -webkit-font-smoothing: antialiased; - font-style: normal; - font-weight: normal; - line-height: 1; -} - -.glyphicon-asterisk:before { - content: "\2a"; -} - -.glyphicon-plus:before { - content: "\2b"; -} - -.glyphicon-euro:before { - content: "\20ac"; -} - -.glyphicon-minus:before { - content: "\2212"; -} - -.glyphicon-cloud:before { - content: "\2601"; -} - -.glyphicon-envelope:before { - content: "\2709"; -} - -.glyphicon-pencil:before { - content: "\270f"; -} - -.glyphicon-glass:before { - content: "\e001"; -} - -.glyphicon-music:before { - content: "\e002"; -} - -.glyphicon-search:before { - content: "\e003"; -} - -.glyphicon-heart:before { - content: "\e005"; -} - -.glyphicon-star:before { - content: "\e006"; -} - -.glyphicon-star-empty:before { - content: "\e007"; -} - -.glyphicon-user:before { - content: "\e008"; -} - -.glyphicon-film:before { - content: "\e009"; -} - -.glyphicon-th-large:before { - content: "\e010"; -} - -.glyphicon-th:before { - content: "\e011"; -} - -.glyphicon-th-list:before { - content: "\e012"; -} - -.glyphicon-ok:before { - content: "\e013"; -} - -.glyphicon-remove:before { - content: "\e014"; -} - -.glyphicon-zoom-in:before { - content: "\e015"; -} - -.glyphicon-zoom-out:before { - content: "\e016"; -} - -.glyphicon-off:before { - content: "\e017"; -} - -.glyphicon-signal:before { - content: "\e018"; -} - -.glyphicon-cog:before { - content: "\e019"; -} - -.glyphicon-trash:before { - content: "\e020"; -} - -.glyphicon-home:before { - content: "\e021"; -} - -.glyphicon-file:before { - content: "\e022"; -} - -.glyphicon-time:before { - content: "\e023"; -} - -.glyphicon-road:before { - content: "\e024"; -} - -.glyphicon-download-alt:before { - content: "\e025"; -} - -.glyphicon-download:before { - content: "\e026"; -} - -.glyphicon-upload:before { - content: "\e027"; -} - -.glyphicon-inbox:before { - content: "\e028"; -} - -.glyphicon-play-circle:before { - content: "\e029"; -} - -.glyphicon-repeat:before { - content: "\e030"; -} - -.glyphicon-refresh:before { - content: "\e031"; -} - -.glyphicon-list-alt:before { - content: "\e032"; -} - -.glyphicon-flag:before { - content: "\e034"; -} - -.glyphicon-headphones:before { - content: "\e035"; -} - -.glyphicon-volume-off:before { - content: "\e036"; -} - -.glyphicon-volume-down:before { - content: "\e037"; -} - -.glyphicon-volume-up:before { - content: "\e038"; -} - -.glyphicon-qrcode:before { - content: "\e039"; -} - -.glyphicon-barcode:before { - content: "\e040"; -} - -.glyphicon-tag:before { - content: "\e041"; -} - -.glyphicon-tags:before { - content: "\e042"; -} - -.glyphicon-book:before { - content: "\e043"; -} - -.glyphicon-print:before { - content: "\e045"; -} - -.glyphicon-font:before { - content: "\e047"; -} - -.glyphicon-bold:before { - content: "\e048"; -} - -.glyphicon-italic:before { - content: "\e049"; -} - -.glyphicon-text-height:before { - content: "\e050"; -} - -.glyphicon-text-width:before { - content: "\e051"; -} - -.glyphicon-align-left:before { - content: "\e052"; -} - -.glyphicon-align-center:before { - content: "\e053"; -} - -.glyphicon-align-right:before { - content: "\e054"; -} - -.glyphicon-align-justify:before { - content: "\e055"; -} - -.glyphicon-list:before { - content: "\e056"; -} - -.glyphicon-indent-left:before { - content: "\e057"; -} - -.glyphicon-indent-right:before { - content: "\e058"; -} - -.glyphicon-facetime-video:before { - content: "\e059"; -} - -.glyphicon-picture:before { - content: "\e060"; -} - -.glyphicon-map-marker:before { - content: "\e062"; -} - -.glyphicon-adjust:before { - content: "\e063"; -} - -.glyphicon-tint:before { - content: "\e064"; -} - -.glyphicon-edit:before { - content: "\e065"; -} - -.glyphicon-share:before { - content: "\e066"; -} - -.glyphicon-check:before { - content: "\e067"; -} - -.glyphicon-move:before { - content: "\e068"; -} - -.glyphicon-step-backward:before { - content: "\e069"; -} - -.glyphicon-fast-backward:before { - content: "\e070"; -} - -.glyphicon-backward:before { - content: "\e071"; -} - -.glyphicon-play:before { - content: "\e072"; -} - -.glyphicon-pause:before { - content: "\e073"; -} - -.glyphicon-stop:before { - content: "\e074"; -} - -.glyphicon-forward:before { - content: "\e075"; -} - -.glyphicon-fast-forward:before { - content: "\e076"; -} - -.glyphicon-step-forward:before { - content: "\e077"; -} - -.glyphicon-eject:before { - content: "\e078"; -} - -.glyphicon-chevron-left:before { - content: "\e079"; -} - -.glyphicon-chevron-right:before { - content: "\e080"; -} - -.glyphicon-plus-sign:before { - content: "\e081"; -} - -.glyphicon-minus-sign:before { - content: "\e082"; -} - -.glyphicon-remove-sign:before { - content: "\e083"; -} - -.glyphicon-ok-sign:before { - content: "\e084"; -} - -.glyphicon-question-sign:before { - content: "\e085"; -} - -.glyphicon-info-sign:before { - content: "\e086"; -} - -.glyphicon-screenshot:before { - content: "\e087"; -} - -.glyphicon-remove-circle:before { - content: "\e088"; -} - -.glyphicon-ok-circle:before { - content: "\e089"; -} - -.glyphicon-ban-circle:before { - content: "\e090"; -} - -.glyphicon-arrow-left:before { - content: "\e091"; -} - -.glyphicon-arrow-right:before { - content: "\e092"; -} - -.glyphicon-arrow-up:before { - content: "\e093"; -} - -.glyphicon-arrow-down:before { - content: "\e094"; -} - -.glyphicon-share-alt:before { - content: "\e095"; -} - -.glyphicon-resize-full:before { - content: "\e096"; -} - -.glyphicon-resize-small:before { - content: "\e097"; -} - -.glyphicon-exclamation-sign:before { - content: "\e101"; -} - -.glyphicon-gift:before { - content: "\e102"; -} - -.glyphicon-leaf:before { - content: "\e103"; -} - -.glyphicon-eye-open:before { - content: "\e105"; -} - -.glyphicon-eye-close:before { - content: "\e106"; -} - -.glyphicon-warning-sign:before { - content: "\e107"; -} - -.glyphicon-plane:before { - content: "\e108"; -} - -.glyphicon-random:before { - content: "\e110"; -} - -.glyphicon-comment:before { - content: "\e111"; -} - -.glyphicon-magnet:before { - content: "\e112"; -} - -.glyphicon-chevron-up:before { - content: "\e113"; -} - -.glyphicon-chevron-down:before { - content: "\e114"; -} - -.glyphicon-retweet:before { - content: "\e115"; -} - -.glyphicon-shopping-cart:before { - content: "\e116"; -} - -.glyphicon-folder-close:before { - content: "\e117"; -} - -.glyphicon-folder-open:before { - content: "\e118"; -} - -.glyphicon-resize-vertical:before { - content: "\e119"; -} - -.glyphicon-resize-horizontal:before { - content: "\e120"; -} - -.glyphicon-hdd:before { - content: "\e121"; -} - -.glyphicon-bullhorn:before { - content: "\e122"; -} - -.glyphicon-certificate:before { - content: "\e124"; -} - -.glyphicon-thumbs-up:before { - content: "\e125"; -} - -.glyphicon-thumbs-down:before { - content: "\e126"; -} - -.glyphicon-hand-right:before { - content: "\e127"; -} - -.glyphicon-hand-left:before { - content: "\e128"; -} - -.glyphicon-hand-up:before { - content: "\e129"; -} - -.glyphicon-hand-down:before { - content: "\e130"; -} - -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} - -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} - -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} - -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} - -.glyphicon-globe:before { - content: "\e135"; -} - -.glyphicon-tasks:before { - content: "\e137"; -} - -.glyphicon-filter:before { - content: "\e138"; -} - -.glyphicon-fullscreen:before { - content: "\e140"; -} - -.glyphicon-dashboard:before { - content: "\e141"; -} - -.glyphicon-heart-empty:before { - content: "\e143"; -} - -.glyphicon-link:before { - content: "\e144"; -} - -.glyphicon-phone:before { - content: "\e145"; -} - -.glyphicon-usd:before { - content: "\e148"; -} - -.glyphicon-gbp:before { - content: "\e149"; -} - -.glyphicon-sort:before { - content: "\e150"; -} - -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} - -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} - -.glyphicon-sort-by-order:before { - content: "\e153"; -} - -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} - -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} - -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} - -.glyphicon-unchecked:before { - content: "\e157"; -} - -.glyphicon-expand:before { - content: "\e158"; -} - -.glyphicon-collapse-down:before { - content: "\e159"; -} - -.glyphicon-collapse-up:before { - content: "\e160"; -} - -.glyphicon-log-in:before { - content: "\e161"; -} - -.glyphicon-flash:before { - content: "\e162"; -} - -.glyphicon-log-out:before { - content: "\e163"; -} - -.glyphicon-new-window:before { - content: "\e164"; -} - -.glyphicon-record:before { - content: "\e165"; -} - -.glyphicon-save:before { - content: "\e166"; -} - -.glyphicon-open:before { - content: "\e167"; -} - -.glyphicon-saved:before { - content: "\e168"; -} - -.glyphicon-import:before { - content: "\e169"; -} - -.glyphicon-export:before { - content: "\e170"; -} - -.glyphicon-send:before { - content: "\e171"; -} - -.glyphicon-floppy-disk:before { - content: "\e172"; -} - -.glyphicon-floppy-saved:before { - content: "\e173"; -} - -.glyphicon-floppy-remove:before { - content: "\e174"; -} - -.glyphicon-floppy-save:before { - content: "\e175"; -} - -.glyphicon-floppy-open:before { - content: "\e176"; -} - -.glyphicon-credit-card:before { - content: "\e177"; -} - -.glyphicon-transfer:before { - content: "\e178"; -} - -.glyphicon-cutlery:before { - content: "\e179"; -} - -.glyphicon-header:before { - content: "\e180"; -} - -.glyphicon-compressed:before { - content: "\e181"; -} - -.glyphicon-earphone:before { - content: "\e182"; -} - -.glyphicon-phone-alt:before { - content: "\e183"; -} - -.glyphicon-tower:before { - content: "\e184"; -} - -.glyphicon-stats:before { - content: "\e185"; -} - -.glyphicon-sd-video:before { - content: "\e186"; -} - -.glyphicon-hd-video:before { - content: "\e187"; -} - -.glyphicon-subtitles:before { - content: "\e188"; -} - -.glyphicon-sound-stereo:before { - content: "\e189"; -} - -.glyphicon-sound-dolby:before { - content: "\e190"; -} - -.glyphicon-sound-5-1:before { - content: "\e191"; -} - -.glyphicon-sound-6-1:before { - content: "\e192"; -} - -.glyphicon-sound-7-1:before { - content: "\e193"; -} - -.glyphicon-copyright-mark:before { - content: "\e194"; -} - -.glyphicon-registration-mark:before { - content: "\e195"; -} - -.glyphicon-cloud-download:before { - content: "\e197"; -} - -.glyphicon-cloud-upload:before { - content: "\e198"; -} - -.glyphicon-tree-conifer:before { - content: "\e199"; -} - -.glyphicon-tree-deciduous:before { - content: "\e200"; -} - -.glyphicon-briefcase:before { - content: "\1f4bc"; -} - -.glyphicon-calendar:before { - content: "\1f4c5"; -} - -.glyphicon-pushpin:before { - content: "\1f4cc"; -} - -.glyphicon-paperclip:before { - content: "\1f4ce"; -} - -.glyphicon-camera:before { - content: "\1f4f7"; -} - -.glyphicon-lock:before { - content: "\1f512"; -} - -.glyphicon-bell:before { - content: "\1f514"; -} - -.glyphicon-bookmark:before { - content: "\1f516"; -} - -.glyphicon-fire:before { - content: "\1f525"; -} - -.glyphicon-wrench:before { - content: "\1f527"; -} - -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-bottom: 0 dotted; - border-left: 4px solid transparent; - content: ""; -} - -.dropdown { - position: relative; -} - -.dropdown-toggle:focus { - outline: 0; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - list-style: none; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} - -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.428571429; - color: #333333; - white-space: nowrap; -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #428bca; -} - -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #428bca; - outline: 0; -} - -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} - -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.open > .dropdown-menu { - display: block; -} - -.open > a { - outline: 0; -} - -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.428571429; - color: #999999; -} - -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} - -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0 dotted; - border-bottom: 4px solid #000000; - content: ""; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} - -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } -} - -.btn-default .caret { - border-top-color: #333333; -} - -.btn-primary .caret, -.btn-success .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret { - border-top-color: #fff; -} - -.dropup .btn-default .caret { - border-bottom-color: #333333; -} - -.dropup .btn-primary .caret, -.dropup .btn-success .caret, -.dropup .btn-warning .caret, -.dropup .btn-danger .caret, -.dropup .btn-info .caret { - border-bottom-color: #fff; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} - -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} - -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} - -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus { - outline: none; -} - -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; -} - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; -} - -.btn-toolbar .btn-group { - float: left; -} - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group, -.btn-toolbar > .btn-group + .btn-group { - margin-left: 5px; -} - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} - -.btn-group > .btn:first-child { - margin-left: 0; -} - -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.btn-group > .btn-group { - float: left; -} - -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} - -.btn-group > .btn-group:first-child > .btn:last-child, -.btn-group > .btn-group:first-child > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group > .btn-group:last-child > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group-xs > .btn { - padding: 5px 10px; - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} - -.btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} - -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn .caret { - margin-left: 0; -} - -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} - -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} - -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group { - display: block; - float: none; - width: 100%; - max-width: 100%; -} - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - -.btn-group-vertical > .btn-group > .btn { - float: none; -} - -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} - -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 0; -} - -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} - -.btn-group-vertical > .btn-group:first-child > .btn:last-child, -.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical > .btn-group:last-child > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.btn-group-justified { - display: table; - width: 100%; - border-collapse: separate; - table-layout: fixed; -} - -.btn-group-justified .btn { - display: table-cell; - float: none; - width: 1%; -} - -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - display: none; -} - -.input-group { - position: relative; - display: table; - border-collapse: separate; -} - -.input-group.col { - float: none; - padding-right: 0; - padding-left: 0; -} - -.input-group .form-control { - width: 100%; - margin-bottom: 0; -} - -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 45px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 45px; - line-height: 45px; -} - -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn { - height: auto; -} - -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} - -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn { - height: auto; -} - -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} - -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} - -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} - -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - text-align: center; - background-color: #eeeeee; - border: 1px solid #cccccc; - border-radius: 4px; -} - -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} - -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} - -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} - -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group-addon:first-child { - border-right: 0; -} - -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.input-group-addon:last-child { - border-left: 0; -} - -.input-group-btn { - position: relative; - white-space: nowrap; -} - -.input-group-btn > .btn { - position: relative; -} - -.input-group-btn > .btn + .btn { - margin-left: -4px; -} - -.input-group-btn > .btn:hover, -.input-group-btn > .btn:active { - z-index: 2; -} - -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav:before, -.nav:after { - display: table; - content: " "; -} - -.nav:after { - clear: both; -} - -.nav:before, -.nav:after { - display: table; - content: " "; -} - -.nav:after { - clear: both; -} - -.nav > li { - position: relative; - display: block; -} - -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} - -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.nav > li.disabled > a { - color: #999999; -} - -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #999999; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} - -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #428bca; -} - -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} - -.nav > li > a > img { - max-width: none; -} - -.nav-tabs { - border-bottom: 1px solid #dddddd; -} - -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} - -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.428571429; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} - -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} - -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; -} - -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} - -.nav-tabs.nav-justified > li { - float: none; -} - -.nav-tabs.nav-justified > li > a { - text-align: center; -} - -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } -} - -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-bottom: 1px solid #dddddd; -} - -.nav-tabs.nav-justified > .active > a { - border-bottom-color: #ffffff; -} - -.nav-pills > li { - float: left; -} - -.nav-pills > li > a { - border-radius: 5px; -} - -.nav-pills > li + li { - margin-left: 2px; -} - -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #428bca; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} - -.nav-justified { - width: 100%; -} - -.nav-justified > li { - float: none; -} - -.nav-justified > li > a { - text-align: center; -} - -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } -} - -.nav-tabs-justified { - border-bottom: 0; -} - -.nav-tabs-justified > li > a { - margin-right: 0; - border-bottom: 1px solid #dddddd; -} - -.nav-tabs-justified > .active > a { - border-bottom-color: #ffffff; -} - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; -} - -.tabbable:after { - clear: both; -} - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; -} - -.tabbable:after { - clear: both; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} - -.tab-content > .active, -.pill-content > .active { - display: block; -} - -.nav .caret { - border-top-color: #428bca; - border-bottom-color: #428bca; -} - -.nav a:hover .caret { - border-top-color: #2a6496; - border-bottom-color: #2a6496; -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.navbar { - position: relative; - z-index: 1000; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} - -.navbar:before, -.navbar:after { - display: table; - content: " "; -} - -.navbar:after { - clear: both; -} - -.navbar:before, -.navbar:after { - display: table; - content: " "; -} - -.navbar:after { - clear: both; -} - -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; -} - -.navbar-header:after { - clear: both; -} - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; -} - -.navbar-header:after { - clear: both; -} - -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} - -.navbar-collapse { - max-height: 340px; - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; -} - -.navbar-collapse:after { - clear: both; -} - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; -} - -.navbar-collapse:after { - clear: both; -} - -.navbar-collapse.in { - overflow-y: auto; -} - -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-collapse .navbar-nav.navbar-left:first-child { - margin-left: -15px; - } - .navbar-collapse .navbar-nav.navbar-right:last-child { - margin-right: -15px; - } - .navbar-collapse .navbar-text:last-child { - margin-right: 0; - } -} - -.container > .navbar-header, -.container > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} - -@media (min-width: 768px) { - .container > .navbar-header, - .container > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} - -.navbar-static-top { - border-width: 0 0 1px; -} - -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - border-width: 0 0 1px; -} - -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} - -.navbar-fixed-top { - top: 0; - z-index: 1030; -} - -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; -} - -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; -} - -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} - -@media (min-width: 768px) { - .navbar > .container .navbar-brand { - margin-left: -15px; - } -} - -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - border: 1px solid transparent; - border-radius: 4px; -} - -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} - -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} - -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} - -.navbar-nav { - margin: 7.5px -15px; -} - -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} - -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} - -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} - -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } -} - -.navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); -} - -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } -} - -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } -} - -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} - -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.navbar-nav.pull-right > li > .dropdown-menu, -.navbar-nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} - -.navbar-text { - float: left; - margin-top: 15px; - margin-bottom: 15px; -} - -@media (min-width: 768px) { - .navbar-text { - margin-right: 15px; - margin-left: 15px; - } -} - -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} - -.navbar-default .navbar-brand { - color: #777777; -} - -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} - -.navbar-default .navbar-text { - color: #777777; -} - -.navbar-default .navbar-nav > li > a { - color: #777777; -} - -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; -} - -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; -} - -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; -} - -.navbar-default .navbar-toggle { - border-color: #dddddd; -} - -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} - -.navbar-default .navbar-toggle .icon-bar { - background-color: #cccccc; -} - -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e6e6e6; -} - -.navbar-default .navbar-nav > .dropdown > a:hover .caret, -.navbar-default .navbar-nav > .dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} - -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555555; - background-color: #e7e7e7; -} - -.navbar-default .navbar-nav > .open > a .caret, -.navbar-default .navbar-nav > .open > a:hover .caret, -.navbar-default .navbar-nav > .open > a:focus .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar-default .navbar-nav > .dropdown > a .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; - } -} - -.navbar-default .navbar-link { - color: #777777; -} - -.navbar-default .navbar-link:hover { - color: #333333; -} - -.navbar-inverse { - background-color: #222222; - border-color: #080808; -} - -.navbar-inverse .navbar-brand { - color: #999999; -} - -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .navbar-text { - color: #999999; -} - -.navbar-inverse .navbar-nav > li > a { - color: #999999; -} - -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; -} - -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; -} - -.navbar-inverse .navbar-toggle { - border-color: #333333; -} - -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} - -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} - -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} - -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #ffffff; - background-color: #080808; -} - -.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-nav > .dropdown > a .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .navbar-nav > .open > a .caret, -.navbar-inverse .navbar-nav > .open > a:hover .caret, -.navbar-inverse .navbar-nav > .open > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #999999; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; - } -} - -.navbar-inverse .navbar-link { - color: #999999; -} - -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} - -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} - -.breadcrumb > li { - display: inline-block; -} - -.breadcrumb > li + li:before { - padding: 0 5px; - color: #cccccc; - content: "/\00a0"; -} - -.breadcrumb > .active { - color: #999999; -} - -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} - -.pagination > li { - display: inline; -} - -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.428571429; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; -} - -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} - -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - background-color: #eeeeee; -} - -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 2; - color: #ffffff; - cursor: default; - background-color: #428bca; - border-color: #428bca; -} - -.pagination > .disabled > span, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #999999; - cursor: not-allowed; - background-color: #ffffff; - border-color: #dddddd; -} - -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; -} - -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} - -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} - -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; -} - -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} - -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} - -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; -} - -.pager:before, -.pager:after { - display: table; - content: " "; -} - -.pager:after { - clear: both; -} - -.pager:before, -.pager:after { - display: table; - content: " "; -} - -.pager:after { - clear: both; -} - -.pager li { - display: inline; -} - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; -} - -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.pager .next > a, -.pager .next > span { - float: right; -} - -.pager .previous > a, -.pager .previous > span { - float: left; -} - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - cursor: not-allowed; - background-color: #ffffff; -} - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} - -.label[href]:hover, -.label[href]:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.label:empty { - display: none; -} - -.label-default { - background-color: #999999; -} - -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #808080; -} - -.label-primary { - background-color: #428bca; -} - -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #3071a9; -} - -.label-success { - background-color: #5cb85c; -} - -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} - -.label-info { - background-color: #5bc0de; -} - -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} - -.label-warning { - background-color: #f0ad4e; -} - -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} - -.label-danger { - background-color: #d9534f; -} - -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} - -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; - border-radius: 10px; -} - -.badge:empty { - display: none; -} - -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.btn .badge { - position: relative; - top: -1px; -} - -a.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #428bca; - background-color: #ffffff; -} - -.nav-pills > li > a > .badge { - margin-left: 3px; -} - -.jumbotron { - padding: 30px; - margin-bottom: 30px; - font-size: 21px; - font-weight: 200; - line-height: 2.1428571435; - color: inherit; - background-color: #eeeeee; -} - -.jumbotron h1 { - line-height: 1; - color: inherit; -} - -.jumbotron p { - line-height: 1.4; -} - -.container .jumbotron { - border-radius: 6px; -} - -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1 { - font-size: 63px; - } -} - -.thumbnail { - display: inline-block; - display: block; - height: auto; - max-width: 100%; - padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -.thumbnail > img { - display: block; - height: auto; - max-width: 100%; -} - -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #428bca; -} - -.thumbnail > img { - margin-right: auto; - margin-left: auto; -} - -.thumbnail .caption { - padding: 9px; - color: #333333; -} - -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} - -.alert h4 { - margin-top: 0; - color: inherit; -} - -.alert .alert-link { - font-weight: bold; -} - -.alert > p, -.alert > ul { - margin-bottom: 0; -} - -.alert > p + p { - margin-top: 5px; -} - -.alert-dismissable { - padding-right: 35px; -} - -.alert-dismissable .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-success hr { - border-top-color: #c9e2b3; -} - -.alert-success .alert-link { - color: #356635; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-info hr { - border-top-color: #a6e1ec; -} - -.alert-info .alert-link { - color: #2d6987; -} - -.alert-warning { - color: #c09853; - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.alert-warning hr { - border-top-color: #f8e5be; -} - -.alert-warning .alert-link { - color: #a47e3c; -} - -.alert-danger { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-danger hr { - border-top-color: #e6c1c7; -} - -.alert-danger .alert-link { - color: #953b39; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - background-color: #428bca; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress-striped .progress-bar { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} - -.progress.active .progress-bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-bar-success { - background-color: #5cb85c; -} - -.progress-striped .progress-bar-success { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-bar-info { - background-color: #5bc0de; -} - -.progress-striped .progress-bar-info { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-bar-warning { - background-color: #f0ad4e; -} - -.progress-striped .progress-bar-warning { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-bar-danger { - background-color: #d9534f; -} - -.progress-striped .progress-bar-danger { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.media, -.media-body { - overflow: hidden; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; -} - -.media > .pull-left { - margin-right: 10px; -} - -.media > .pull-right { - margin-left: 10px; -} - -.media-list { - padding-left: 0; - list-style: none; -} - -.list-group { - padding-left: 0; - margin-bottom: 20px; -} - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} - -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} - -.list-group-item > .badge { - float: right; -} - -.list-group-item > .badge + .badge { - margin-right: 5px; -} - -a.list-group-item { - color: #555555; -} - -a.list-group-item .list-group-item-heading { - color: #333333; -} - -a.list-group-item:hover, -a.list-group-item:focus { - text-decoration: none; - background-color: #f5f5f5; -} - -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} - -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading { - color: inherit; -} - -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #e1edf7; -} - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} - -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} - -.panel { - margin-bottom: 20px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.panel-body { - padding: 15px; -} - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; -} - -.panel-body:after { - clear: both; -} - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; -} - -.panel-body:after { - clear: both; -} - -.panel > .list-group { - margin-bottom: 0; -} - -.panel > .list-group .list-group-item { - border-width: 1px 0; -} - -.panel > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.panel > .list-group .list-group-item:last-child { - border-bottom: 0; -} - -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} - -.panel > .table { - margin-bottom: 0; -} - -.panel > .panel-body + .table { - border-top: 1px solid #dddddd; -} - -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} - -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; -} - -.panel-title > a { - color: inherit; -} - -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} - -.panel-group .panel { - margin-bottom: 0; - overflow: hidden; - border-radius: 4px; -} - -.panel-group .panel + .panel { - margin-top: 5px; -} - -.panel-group .panel-heading { - border-bottom: 0; -} - -.panel-group .panel-heading + .panel-collapse .panel-body { - border-top: 1px solid #dddddd; -} - -.panel-group .panel-footer { - border-top: 0; -} - -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} - -.panel-default { - border-color: #dddddd; -} - -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #dddddd; -} - -.panel-default > .panel-heading + .panel-collapse .panel-body { - border-top-color: #dddddd; -} - -.panel-default > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #dddddd; -} - -.panel-primary { - border-color: #428bca; -} - -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} - -.panel-primary > .panel-heading + .panel-collapse .panel-body { - border-top-color: #428bca; -} - -.panel-primary > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #428bca; -} - -.panel-success { - border-color: #d6e9c6; -} - -.panel-success > .panel-heading { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.panel-success > .panel-heading + .panel-collapse .panel-body { - border-top-color: #d6e9c6; -} - -.panel-success > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #d6e9c6; -} - -.panel-warning { - border-color: #fbeed5; -} - -.panel-warning > .panel-heading { - color: #c09853; - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.panel-warning > .panel-heading + .panel-collapse .panel-body { - border-top-color: #fbeed5; -} - -.panel-warning > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #fbeed5; -} - -.panel-danger { - border-color: #eed3d7; -} - -.panel-danger > .panel-heading { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.panel-danger > .panel-heading + .panel-collapse .panel-body { - border-top-color: #eed3d7; -} - -.panel-danger > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #eed3d7; -} - -.panel-info { - border-color: #bce8f1; -} - -.panel-info > .panel-heading { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.panel-info > .panel-heading + .panel-collapse .panel-body { - border-top-color: #bce8f1; -} - -.panel-info > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #bce8f1; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} - -.well-lg { - padding: 24px; - border-radius: 6px; -} - -.well-sm { - padding: 9px; - border-radius: 3px; -} - -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} - -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.modal-open { - overflow: hidden; -} - -body.modal-open, -.modal-open .navbar-fixed-top, -.modal-open .navbar-fixed-bottom { - margin-right: 15px; -} - -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - display: none; - overflow: auto; - overflow-y: scroll; -} - -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} - -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); -} - -.modal-dialog { - z-index: 1050; - width: auto; - padding: 10px; - margin-right: auto; - margin-left: auto; -} - -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; - background-color: #000000; -} - -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} - -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} - -.modal-header { - min-height: 16.428571429px; - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} - -.modal-header .close { - margin-top: -2px; -} - -.modal-title { - margin: 0; - line-height: 1.428571429; -} - -.modal-body { - position: relative; - padding: 20px; -} - -.modal-footer { - padding: 19px 20px 20px; - margin-top: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} - -@media screen and (min-width: 768px) { - .modal-dialog { - right: auto; - left: 50%; - width: 600px; - padding-top: 30px; - padding-bottom: 30px; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } -} - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - font-size: 12px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; -} - -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} - -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} - -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} - -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - border-radius: 4px; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.top-left .tooltip-arrow { - bottom: 0; - left: 5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.top-right .tooltip-arrow { - right: 5px; - bottom: 0; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; -} - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.tooltip.bottom-left .tooltip-arrow { - top: 0; - left: 5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.tooltip.bottom-right .tooltip-arrow { - top: 0; - right: 5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - background-clip: padding-box; -} - -.popover.top { - margin-top: -10px; -} - -.popover.right { - margin-left: 10px; -} - -.popover.bottom { - margin-top: 10px; -} - -.popover.left { - margin-left: -10px; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} - -.popover-content { - padding: 9px 14px; -} - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover .arrow { - border-width: 11px; -} - -.popover .arrow:after { - border-width: 10px; - content: ""; -} - -.popover.top .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; - content: " "; -} - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; - content: " "; -} - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; -} - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; - content: " "; -} - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; -} - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; - content: " "; -} - -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} - -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - height: auto; - max-width: 100%; - line-height: 1; -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - opacity: 0.5; - filter: alpha(opacity=50); -} - -.carousel-control.left { - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} - -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} - -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} - -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - left: 50%; - z-index: 5; - display: inline-block; -} - -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - font-family: serif; -} - -.carousel-control .icon-prev:before { - content: '\2039'; -} - -.carousel-control .icon-next:before { - content: '\203a'; -} - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} - -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - border: 1px solid #ffffff; - border-radius: 10px; -} - -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #ffffff; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} - -.carousel-caption .btn { - text-shadow: none; -} - -@media screen and (min-width: 768px) { - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - margin-left: -15px; - font-size: 30px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} - -.clearfix:before, -.clearfix:after { - display: table; - content: " "; -} - -.clearfix:after { - clear: both; -} - -.pull-right { - float: right !important; -} - -.pull-left { - float: left !important; -} - -.hide { - display: none !important; -} - -.show { - display: block !important; -} - -.invisible { - visibility: hidden; -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.affix { - position: fixed; -} - -@-ms-viewport { - width: device-width; -} - -@media screen and (max-width: 400px) { - @-ms-viewport { - width: 320px; - } -} - -.hidden { - display: none !important; - visibility: hidden !important; -} - -.visible-xs { - display: none !important; -} - -tr.visible-xs { - display: none !important; -} - -th.visible-xs, -td.visible-xs { - display: none !important; -} - -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-xs.visible-sm { - display: block !important; - } - tr.visible-xs.visible-sm { - display: table-row !important; - } - th.visible-xs.visible-sm, - td.visible-xs.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-xs.visible-md { - display: block !important; - } - tr.visible-xs.visible-md { - display: table-row !important; - } - th.visible-xs.visible-md, - td.visible-xs.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-xs.visible-lg { - display: block !important; - } - tr.visible-xs.visible-lg { - display: table-row !important; - } - th.visible-xs.visible-lg, - td.visible-xs.visible-lg { - display: table-cell !important; - } -} - -.visible-sm { - display: none !important; -} - -tr.visible-sm { - display: none !important; -} - -th.visible-sm, -td.visible-sm { - display: none !important; -} - -@media (max-width: 767px) { - .visible-sm.visible-xs { - display: block !important; - } - tr.visible-sm.visible-xs { - display: table-row !important; - } - th.visible-sm.visible-xs, - td.visible-sm.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-sm.visible-md { - display: block !important; - } - tr.visible-sm.visible-md { - display: table-row !important; - } - th.visible-sm.visible-md, - td.visible-sm.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-sm.visible-lg { - display: block !important; - } - tr.visible-sm.visible-lg { - display: table-row !important; - } - th.visible-sm.visible-lg, - td.visible-sm.visible-lg { - display: table-cell !important; - } -} - -.visible-md { - display: none !important; -} - -tr.visible-md { - display: none !important; -} - -th.visible-md, -td.visible-md { - display: none !important; -} - -@media (max-width: 767px) { - .visible-md.visible-xs { - display: block !important; - } - tr.visible-md.visible-xs { - display: table-row !important; - } - th.visible-md.visible-xs, - td.visible-md.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-md.visible-sm { - display: block !important; - } - tr.visible-md.visible-sm { - display: table-row !important; - } - th.visible-md.visible-sm, - td.visible-md.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-md.visible-lg { - display: block !important; - } - tr.visible-md.visible-lg { - display: table-row !important; - } - th.visible-md.visible-lg, - td.visible-md.visible-lg { - display: table-cell !important; - } -} - -.visible-lg { - display: none !important; -} - -tr.visible-lg { - display: none !important; -} - -th.visible-lg, -td.visible-lg { - display: none !important; -} - -@media (max-width: 767px) { - .visible-lg.visible-xs { - display: block !important; - } - tr.visible-lg.visible-xs { - display: table-row !important; - } - th.visible-lg.visible-xs, - td.visible-lg.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-lg.visible-sm { - display: block !important; - } - tr.visible-lg.visible-sm { - display: table-row !important; - } - th.visible-lg.visible-sm, - td.visible-lg.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-lg.visible-md { - display: block !important; - } - tr.visible-lg.visible-md { - display: table-row !important; - } - th.visible-lg.visible-md, - td.visible-lg.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} - -.hidden-xs { - display: block !important; -} - -tr.hidden-xs { - display: table-row !important; -} - -th.hidden-xs, -td.hidden-xs { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } - tr.hidden-xs { - display: none !important; - } - th.hidden-xs, - td.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-xs.hidden-sm { - display: none !important; - } - tr.hidden-xs.hidden-sm { - display: none !important; - } - th.hidden-xs.hidden-sm, - td.hidden-xs.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-xs.hidden-md { - display: none !important; - } - tr.hidden-xs.hidden-md { - display: none !important; - } - th.hidden-xs.hidden-md, - td.hidden-xs.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-xs.hidden-lg { - display: none !important; - } - tr.hidden-xs.hidden-lg { - display: none !important; - } - th.hidden-xs.hidden-lg, - td.hidden-xs.hidden-lg { - display: none !important; - } -} - -.hidden-sm { - display: block !important; -} - -tr.hidden-sm { - display: table-row !important; -} - -th.hidden-sm, -td.hidden-sm { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-sm.hidden-xs { - display: none !important; - } - tr.hidden-sm.hidden-xs { - display: none !important; - } - th.hidden-sm.hidden-xs, - td.hidden-sm.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } - tr.hidden-sm { - display: none !important; - } - th.hidden-sm, - td.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-sm.hidden-md { - display: none !important; - } - tr.hidden-sm.hidden-md { - display: none !important; - } - th.hidden-sm.hidden-md, - td.hidden-sm.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-sm.hidden-lg { - display: none !important; - } - tr.hidden-sm.hidden-lg { - display: none !important; - } - th.hidden-sm.hidden-lg, - td.hidden-sm.hidden-lg { - display: none !important; - } -} - -.hidden-md { - display: block !important; -} - -tr.hidden-md { - display: table-row !important; -} - -th.hidden-md, -td.hidden-md { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-md.hidden-xs { - display: none !important; - } - tr.hidden-md.hidden-xs { - display: none !important; - } - th.hidden-md.hidden-xs, - td.hidden-md.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-md.hidden-sm { - display: none !important; - } - tr.hidden-md.hidden-sm { - display: none !important; - } - th.hidden-md.hidden-sm, - td.hidden-md.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } - tr.hidden-md { - display: none !important; - } - th.hidden-md, - td.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-md.hidden-lg { - display: none !important; - } - tr.hidden-md.hidden-lg { - display: none !important; - } - th.hidden-md.hidden-lg, - td.hidden-md.hidden-lg { - display: none !important; - } -} - -.hidden-lg { - display: block !important; -} - -tr.hidden-lg { - display: table-row !important; -} - -th.hidden-lg, -td.hidden-lg { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-lg.hidden-xs { - display: none !important; - } - tr.hidden-lg.hidden-xs { - display: none !important; - } - th.hidden-lg.hidden-xs, - td.hidden-lg.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-lg.hidden-sm { - display: none !important; - } - tr.hidden-lg.hidden-sm { - display: none !important; - } - th.hidden-lg.hidden-sm, - td.hidden-lg.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-lg.hidden-md { - display: none !important; - } - tr.hidden-lg.hidden-md { - display: none !important; - } - th.hidden-lg.hidden-md, - td.hidden-lg.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } - tr.hidden-lg { - display: none !important; - } - th.hidden-lg, - td.hidden-lg { - display: none !important; - } -} - -.visible-print { - display: none !important; -} - -tr.visible-print { - display: none !important; -} - -th.visible-print, -td.visible-print { - display: none !important; -} - -@media print { - .visible-print { - display: block !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } - .hidden-print { - display: none !important; - } - tr.hidden-print { - display: none !important; - } - th.hidden-print, - td.hidden-print { - display: none !important; - } -} \ No newline at end of file diff --git a/public/bower_components/bootstrap-tour/docs/assets/vendor/bootstrap.js b/public/bower_components/bootstrap-tour/docs/assets/vendor/bootstrap.js deleted file mode 100644 index 2c642571..00000000 --- a/public/bower_components/bootstrap-tour/docs/assets/vendor/bootstrap.js +++ /dev/null @@ -1,1999 +0,0 @@ -/** -* bootstrap.js v3.0.0 by @fat and @mdo -* Copyright 2013 Twitter Inc. -* http://www.apache.org/licenses/LICENSE-2.0 -*/ -if (!jQuery) { throw new Error("Bootstrap requires jQuery") } - -/* ======================================================================== - * Bootstrap: transition.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#transitions - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false, $el = this - $(this).one($.support.transition.end, function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } - - $(function () { - $.support.transition = transitionEnd() - }) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: alert.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#alerts - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent.trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one($.support.transition.end, removeElement) - .emulateTransitionEnd(150) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: button.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#buttons - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - } - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state = state + 'Text' - - if (!data.resetText) $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d); - }, 0) - } - - Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons"]') - - if ($parent.length) { - var $input = this.$element.find('input') - .prop('checked', !this.$element.hasClass('active')) - .trigger('change') - if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') - } - - this.$element.toggleClass('active') - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - e.preventDefault() - }) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: carousel.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#carousel - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = - this.$items = null - - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.DEFAULTS = { - interval: 5000 - , pause: 'hover' - , wrap: true - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getActiveIndex = function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - - return this.$items.index(this.$active) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getActiveIndex() - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this - - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - this.sliding = true - - isCycling && this.pause() - - var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - .emulateTransitionEnd(600) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - }) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - $carousel.carousel($carousel.data()) - }) - }) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: collapse.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#collapse - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing') - [dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('in') - [dimension]('auto') - this.transitioning = 0 - this.$element.trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - [dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element - [dimension](this.$element[dimension]()) - [0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - $target.collapse(option) - }) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: dropdown.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#dropdowns - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle=dropdown]' - var Dropdown = function (element) { - var $el = $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we we use a backdrop because click events don't delegate - $('