diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..53d48bf3 --- /dev/null +++ b/.env.example @@ -0,0 +1,46 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_DRIVER=smtp +MAIL_HOST=smtp.mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS=null +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/README.md b/README.md new file mode 100644 index 00000000..81f2f62b --- /dev/null +++ b/README.md @@ -0,0 +1,78 @@ +

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 1500 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[British Software Development](https://www.britishsoftware.co)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- [UserInsights](https://userinsights.com) +- [Fragrantica](https://www.fragrantica.com) +- [SOFTonSOFA](https://softonsofa.com/) +- [User10](https://user10.com) +- [Soumettre.fr](https://soumettre.fr/) +- [CodeBrisk](https://codebrisk.com) +- [1Forge](https://1forge.com) +- [TECPRESSO](https://tecpresso.co.jp/) +- [Runtime Converter](http://runtimeconverter.com/) +- [WebL'Agence](https://weblagence.com/) +- [Invoice Ninja](https://www.invoiceninja.com) +- [iMi digital](https://www.imi-digital.de/) +- [Earthlink](https://www.earthlink.ro/) +- [Steadfast Collective](https://steadfastcollective.com/) +- [We Are The Robots Inc.](https://watr.mx/) +- [Understand.io](https://www.understand.io/) +- [Abdel Elrafa](https://abdelelrafa.com) +- [Hyper Host](https://hyper.host) +- [Appoly](https://www.appoly.co.uk) +- [OP.GG](https://op.gg) + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Http/Controllers/JS/CacheController.php b/app/Http/Controllers/JS/CacheController.php new file mode 100644 index 00000000..43eeb29e --- /dev/null +++ b/app/Http/Controllers/JS/CacheController.php @@ -0,0 +1,22 @@ +middleware('auth'); + } + + /** + * Show the application dashboard. + * + * @return + */ + public function index() + { + $data = []; + $dashboard = 'dashboard_general'; + + if (Users::hasRole('admin')) { + $dashboard = 'dashboard'; + $data = []; + } + + return view('shop.admin.Dashboard.index', $data); + } +} diff --git a/app/Http/Controllers/Shop/Admin/HomeController.php b/app/Http/Controllers/Shop/Admin/HomeController.php new file mode 100644 index 00000000..9d7a6ccb --- /dev/null +++ b/app/Http/Controllers/Shop/Admin/HomeController.php @@ -0,0 +1,29 @@ +middleware('auth'); + } + + /** + * Show the application dashboard. + * + * @return \Illuminate\Contracts\Support\Renderable + */ + public function index() + { + return redirect('dashboard'); + } +} diff --git a/app/Http/Controllers/Shop/Admin/InventoryController.php b/app/Http/Controllers/Shop/Admin/InventoryController.php new file mode 100644 index 00000000..b5e44994 --- /dev/null +++ b/app/Http/Controllers/Shop/Admin/InventoryController.php @@ -0,0 +1,86 @@ +middleware('auth'); + } + + /** + * Show the application dashboard. + * + * @return \Illuminate\Contracts\Support\Renderable + */ + public function index() + { + return redirect('dashboard'); + } +} diff --git a/app/Http/Controllers/Shop/InvoiceController.php b/app/Http/Controllers/Shop/InvoiceController.php new file mode 100644 index 00000000..3f214e56 --- /dev/null +++ b/app/Http/Controllers/Shop/InvoiceController.php @@ -0,0 +1,87 @@ + $row['civilite'], + 'name' => $row['nom'], + 'firstname' => $row['prenom'], + 'street1' => $row['adresse'], + 'zipcode' => $row['cp'], + 'city' => $row['ville'], + 'mobile' => $row['mobile'], + 'email' => $row['email'], + 'phone' => $row['telephone'], + ]); + } +} diff --git a/app/Install.php b/app/Install.php new file mode 100644 index 00000000..aa663c00 --- /dev/null +++ b/app/Install.php @@ -0,0 +1,34 @@ +external('composer', 'install', '--no-dev', '--prefer-dist', '--optimize-autoloader') + ->artisan('key:generate', ['--force' => true]) + ->artisan('migrate', ['--force' => true]) + ->artisan('storage:link') +// ->dispatch(new MakeCronTask) + ->external('npm', 'install', '--production') + ->external('npm', 'run', 'production') + ->artisan('route:cache') + ->artisan('config:cache') + ->artisan('event:cache'); + } + + public function local(Runner $run) + { + return $run + ->external('composer', 'install') + ->artisan('key:generate') + ->artisan('migrate') + ->artisan('storage:link') + ->external('npm', 'install') + ->external('npm', 'run', 'development'); + } +} diff --git a/app/Menu/Shop.php b/app/Menu/Shop.php new file mode 100644 index 00000000..57d8c7f8 --- /dev/null +++ b/app/Menu/Shop.php @@ -0,0 +1,29 @@ +add('Commerce', [ 'permission' => 'backend', 'icon' => 'cog' ]) + ->id('shop') + ->activeIfRoute('shop') + ->order(1); + + $menu->addTo('shop', 'Commandes', [ 'route' => 'Shop.Admin.Orders.index', 'permission' => 'backend' ]) + ->activeIfRoute(['Shop.Admin.Orders.index'])->order(1); + $menu->addTo('shop', 'Factures', [ 'route' => 'Shop.Admin.Invoices.index', 'permission' => 'backend' ]) + ->activeIfRoute(['Shop.Admin.Invoices.index'])->order(2); + + $menu->addTo('shop', 'Categories', [ 'route' => 'Shop.Admin.Products.index', 'permission' => 'backend' ]) + ->activeIfRoute(['Shop.Admin.Products.index'])->order(3); + $menu->addTo('shop', 'Produits', [ 'route' => 'Shop.Admin.Products.index', 'permission' => 'backend' ]) + ->activeIfRoute(['Shop.Admin.Products.index'])->order(4); + + + } +} diff --git a/app/Models/Auth/Permission.php b/app/Models/Auth/Permission.php new file mode 100644 index 00000000..966a6868 --- /dev/null +++ b/app/Models/Auth/Permission.php @@ -0,0 +1,49 @@ +belongsTo('App\Models\Application'); + } + + public function application_module() + { + return $this->belongsTo('App\Models\ApplicationModule'); + } + + public function getDisplayNameAttribute($value) + { + return __($value); + } + + public function getDescriptionAttribute($value) + { + return __($value); + } +} diff --git a/app/Models/Auth/PermissionRole.php b/app/Models/Auth/PermissionRole.php new file mode 100644 index 00000000..3ed9e8b4 --- /dev/null +++ b/app/Models/Auth/PermissionRole.php @@ -0,0 +1,30 @@ +belongsTo('App\Permission'); + } + + public function role() + { + return $this->belongsTo('App\Role'); + } + + public function scopeByPermission($query, $id) + { + return $query->where('permission_id', $id); + } + + public function scopeByRole($query, $id) + { + return $query->where('role_id', $id); + } +} diff --git a/app/Models/Auth/PermissionUser.php b/app/Models/Auth/PermissionUser.php new file mode 100644 index 00000000..ef2931e8 --- /dev/null +++ b/app/Models/Auth/PermissionUser.php @@ -0,0 +1,45 @@ +belongsTo('App\Permission'); + } + + public function user() + { + return $this->belongsTo('App\User'); + } + + public function team() + { + return $this->belongsTo('App\Team'); + } + + public function scopeByUser($query, $id) + { + return $query->where('user_id', $id); + } + + public function scopeByPermission($query, $id) + { + return $query->where('permission_id', $id); + } + + public function scopeByUserType($query, $name) + { + return $query->where('user_type', $name); + } + + public function scopeByTeam($query, $id) + { + return $query->where('team_id', $id); + } +} diff --git a/app/Models/Auth/Role.php b/app/Models/Auth/Role.php new file mode 100644 index 00000000..eb599ca8 --- /dev/null +++ b/app/Models/Auth/Role.php @@ -0,0 +1,45 @@ +name)->count(); + } +} diff --git a/app/Models/Auth/RoleUser.php b/app/Models/Auth/RoleUser.php new file mode 100644 index 00000000..d31ab60a --- /dev/null +++ b/app/Models/Auth/RoleUser.php @@ -0,0 +1,41 @@ +belongsTo('App\User'); + } + + public function team() + { + return $this->belongsTo('App\Team'); + } + + public function scopeByUser($query, $id) + { + return $query->where('user_id', $id); + } + + public function scopeByRole($query, $id) + { + return $query->where('role_id', $id); + } + + public function scopeByUserType($query, $name) + { + return $query->where('user_type', $name); + } + + public function scopeByTeam($query, $id) + { + return $query->where('team_id', $id); + } +} diff --git a/app/Models/Auth/Team.php b/app/Models/Auth/Team.php new file mode 100644 index 00000000..ec235b33 --- /dev/null +++ b/app/Models/Auth/Team.php @@ -0,0 +1,35 @@ +hasMany('App\User'); + } + + public function society() + { + return $this->belongsTo('App\Models\Society'); + } + + public function scopeActive($query) + { + return $query->where('active', 1); + } + + public function scopeBySociety($query, $id) + { + return $query->where('society_id', $id); + } +} diff --git a/app/Models/Auth/TeamUser.php b/app/Models/Auth/TeamUser.php new file mode 100644 index 00000000..a796258c --- /dev/null +++ b/app/Models/Auth/TeamUser.php @@ -0,0 +1,31 @@ +belongsTo('App\User'); + } + + public function team() + { + return $this->belongsTo('App\Team'); + } + + public function scopeByUser($query, $id) + { + return $query->where('user_id', $id); + } + + public function scopeByTeam($query, $id) + { + return $query->where('team_id', $id); + } +} diff --git a/app/Models/Modules/Application.php b/app/Models/Modules/Application.php new file mode 100644 index 00000000..e3c7bd47 --- /dev/null +++ b/app/Models/Modules/Application.php @@ -0,0 +1,42 @@ +hasMany('App\Models\Modules\ApplicationPage'); + } + + public function modules() + { + return $this->hasMany('App\Models\Modules\ApplicationModule'); + } + + public function scopeActive($query) + { + return $query->where('active', 1); + } + + public function scopeVisible($query) + { + return $query->where('visible', 1); + } + + public function scopeBySlug($query, $slug) + { + return $query->where('slug', $slug); + } + + public function scopeByOrder($query) + { + return $query->sortBy('order'); + } +} diff --git a/app/Models/Modules/ApplicationModule.php b/app/Models/Modules/ApplicationModule.php new file mode 100644 index 00000000..fb21b978 --- /dev/null +++ b/app/Models/Modules/ApplicationModule.php @@ -0,0 +1,37 @@ +belongsTo('App\Models\Modules\Application'); + } + + public function permissions() + { + return $this->hasMany('App\Auth\Permission'); + } + + public function scopeActive($query) + { + return $query->where('active', 1); + } + + public function scopeByApplication($query, $id) + { + return $query->where('application_id', $id); + } + + public function scopeBySlug($query, $slug) + { + return $query->where('slug', $slug); + } +} diff --git a/app/Models/Modules/ApplicationPage.php b/app/Models/Modules/ApplicationPage.php new file mode 100644 index 00000000..f966916e --- /dev/null +++ b/app/Models/Modules/ApplicationPage.php @@ -0,0 +1,32 @@ +belongsTo('App\Models\Modules\Application'); + } + + public function scopeActive($query) + { + return $query->where('active', 1); + } + + public function scopeByApplication($query, $application_id) + { + return $query->where('application_id', $application_id); + } + + public function scopeBySlug($query, $slug) + { + return $query->where('slug', $slug); + } +} diff --git a/app/Models/Modules/Family.php b/app/Models/Modules/Family.php new file mode 100644 index 00000000..44d86d38 --- /dev/null +++ b/app/Models/Modules/Family.php @@ -0,0 +1,11 @@ +hasMany('App\Models\Shop\Invoice'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function Orders() + { + return $this->hasMany('App\Models\Shop\Order'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function User() + { + return $this->belongsTo('App\User'); + } +} \ No newline at end of file diff --git a/app/Models/Shop/Inventory.php b/app/Models/Shop/Inventory.php new file mode 100644 index 00000000..4e35ea44 --- /dev/null +++ b/app/Models/Shop/Inventory.php @@ -0,0 +1,18 @@ +belongsTo('App\Models\Shop\InventoryPlace'); + } +} \ No newline at end of file diff --git a/app/Models/Shop/InventoryPlace.php b/app/Models/Shop/InventoryPlace.php new file mode 100644 index 00000000..d9f604c8 --- /dev/null +++ b/app/Models/Shop/InventoryPlace.php @@ -0,0 +1,18 @@ +hasMany('App\Models\Inventory'); + } +} \ No newline at end of file diff --git a/app/Models/Shop/Invoice.php b/app/Models/Shop/Invoice.php new file mode 100644 index 00000000..e48881cf --- /dev/null +++ b/app/Models/Shop/Invoice.php @@ -0,0 +1,26 @@ +hasMany('App\Models\Shop\InvoiceItem'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function Customer() + { + return $this->belongsTo('App\Models\Shop\Customer'); + } +} \ No newline at end of file diff --git a/app/Models/Shop/InvoiceItem.php b/app/Models/Shop/InvoiceItem.php new file mode 100644 index 00000000..feb425d9 --- /dev/null +++ b/app/Models/Shop/InvoiceItem.php @@ -0,0 +1,26 @@ +belongsTo('App\Models\Shop\Product'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function Invoice() + { + return $this->belongsTo('App\Models\Shop\Invoice'); + } +} \ No newline at end of file diff --git a/app/Models/Shop/Order.php b/app/Models/Shop/Order.php new file mode 100644 index 00000000..209169f9 --- /dev/null +++ b/app/Models/Shop/Order.php @@ -0,0 +1,26 @@ +belongsTo('App\Models\Shop\Customer'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function Payments() + { + return $this->hasMany('App\Models\Shop\OrderPayment'); + } +} \ No newline at end of file diff --git a/app/Models/Shop/OrderPayment.php b/app/Models/Shop/OrderPayment.php new file mode 100644 index 00000000..4232c8f1 --- /dev/null +++ b/app/Models/Shop/OrderPayment.php @@ -0,0 +1,20 @@ +belongsTo('App\Models\Shop\Order'); + } + + +} diff --git a/app/Models/Shop/Product.php b/app/Models/Shop/Product.php new file mode 100644 index 00000000..2a882f6b --- /dev/null +++ b/app/Models/Shop/Product.php @@ -0,0 +1,50 @@ +hasMany('App\Models\Shop\Inventory'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function Prices() + { + return $this->hasMany('App\Models\Shop\ProductPrice'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function ProductAttributes() + { + return $this->hasMany('App\Models\Shop\ProductAttribute'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function Categories() + { + return $this->hasMany('App\Models\Shop\CategoryProduct'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function InvoiceItems() + { + return $this->hasMany('App\Models\Shop\InvoiceItem'); + } +} \ No newline at end of file diff --git a/app/Models/Shop/ProductAttribute.php b/app/Models/Shop/ProductAttribute.php new file mode 100644 index 00000000..c44ef62a --- /dev/null +++ b/app/Models/Shop/ProductAttribute.php @@ -0,0 +1,18 @@ +belongsTo('App\Models\Shop\Product'); + } +} \ No newline at end of file diff --git a/app/Models/Shop/ProductPrice.php b/app/Models/Shop/ProductPrice.php new file mode 100644 index 00000000..99186808 --- /dev/null +++ b/app/Models/Shop/ProductPrice.php @@ -0,0 +1,26 @@ +belongsTo('App\Models\Shop\Product'); + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function ProductAttribute() + { + return $this->belongsTo('App\Models\Shop\ProductAttribute'); + } +} \ No newline at end of file diff --git a/app/Models/Shop/Section.php b/app/Models/Shop/Section.php new file mode 100644 index 00000000..8f18192d --- /dev/null +++ b/app/Models/Shop/Section.php @@ -0,0 +1,19 @@ +hasMany('App\Models\Shop\Product'); + } + +} \ No newline at end of file diff --git a/app/Repositories/ApplicationPages.php b/app/Repositories/ApplicationPages.php new file mode 100644 index 00000000..6b5d7960 --- /dev/null +++ b/app/Repositories/ApplicationPages.php @@ -0,0 +1,23 @@ +byApplication($application_id)->bySlug($slug)->first(); + return $app ? $app->toArray() : null; + } + + // récupère toutes les pages actives pour une application + public static function getActiveByApplication($application_id) + { + $app = ApplicationPage::active()->byApplication($application_id)->get(); + return $app ? $app->toArray() : null; + } +} diff --git a/app/Repositories/Applications.php b/app/Repositories/Applications.php new file mode 100644 index 00000000..155399df --- /dev/null +++ b/app/Repositories/Applications.php @@ -0,0 +1,60 @@ +toArray(); + } + + public static function getCurrent() + { + $route = explode('.', Route::currentRouteName()); + $app = isset($route[0]) ? $route[0] : null; + $page = isset($route[1]) ? $route[1] : null; + $action = isset($route[2]) ? $route[2] : null; + + if (self::getBySlug($app)) { + $data['current'] = self::getBySlug($app)->toArray(); + $application_id = $data['current']['id']; + $data['page'] = ApplicationPages::getBySlug($application_id, $page); + $data['pages'] = ApplicationPages::getActiveByApplication($application_id); + $data['action'] = $action; + } else { + $data['current']['slug'] = $app; + } + $data['langs'] = Languages::getActive(); + $data['lang'] = Languages::getCurrent(); + return $data; + } + + public static function getActives() + { + return Application::active()->get()->toArray(); + } + + public static function getActivesWithModules() + { + return Application::with('modules')->active()->get()->toArray(); + } + + public static function getVisibles() + { + return Application::visible()->get()->toArray(); + } + + public static function getBySlug($slug) + { + return Application::active()->bySlug($slug)->first(); + } +} diff --git a/app/Repositories/Cities.php b/app/Repositories/Cities.php new file mode 100644 index 00000000..75b44428 --- /dev/null +++ b/app/Repositories/Cities.php @@ -0,0 +1,66 @@ +where('nom', 'LIKE', "$query%")->orderBy('nom', 'ASC')->take(30)->get(); + } + + public static function getVillesByCP($query) + { + return Ville::select('id', DB::raw("concat(nom,' (',code_postal,')') as text"))->where('code_postal', 'LIKE', "%q$guery%")->orderBy('nom', 'ASC')->take(30)->get(); + } + + public static function getCPByVille($id) + { + $ville = self::get($id); + $codes = explode("-", $ville->code_postal); + return $codes; + } + + public static function getNomByVille($id) + { + $ville = self::get($id); + return $ville->nom; + } + + public static function get($id) + { + return Ville::find($id); + } + + public static function getCoords($adresse) + { + // dd(app('geocoder')->geocode('Los Angeles, CA')->get()); + // dd(app('geocoder')->geocode('5 boulevard du Port, Amiens, France')->get()); + // dump($adresse); + $geocode = app('geocoder')->geocode($adresse)->get(); + // dump($geocode); + if (count($geocode)) { + // dump($geocode); + $res = $geocode[0]->getCoordinates()->toArray(); + // dump($res); + $latitude = $res[0]; + $longitude = $res[1]; + // dump($latitude); + // dump($longitude); + return ['latitude' => $latitude, 'longitude' => $longitude]; + } else { + return false; + } + } + + public static function getCoordsByVille($id) + { + $ville = Ville::find($id); + return ['latitude' => $ville->latitude, 'longitude' => $ville->longitude]; + } +} diff --git a/app/Repositories/Config.php b/app/Repositories/Config.php new file mode 100644 index 00000000..3786b00b --- /dev/null +++ b/app/Repositories/Config.php @@ -0,0 +1,68 @@ + [$css_client]]; + } + + $layout = new Layout(); + $data = $layout->init($options, $appOptions, $clientOptions, $adminOptions); + + if (Users::getUser()) { + $data['user'] = Users::getInfo(); + $data['user']['lang'] = Session::get('locale'); + } else { + Session::put('locale', 'fr'); + } + + if (Clients::isClient()) { + $data['isClient'] = true; + $data['client'] = Clients::getInfo(); + $data['apps'] = Clients::getApplications(); + } else { + $data['isClient'] = false; + $data['client']['publicPath'] = $partner_path; + $data['apps'] = Applications::getVisibles(); + } + $data['client']['partner']['publicPath'] = $partner_path; + + // $layout->publish('tenant_path', $data['client']['publicPath']); + $data['global']['tenant_path'] = $data['client']['publicPath']; + $data['global']['roles'] = Users::getRoles(); + $data['global']['permissions'] = Users::getPermissions(); + $data['app'] = Applications::getCurrent(); + + return $data; + } + + public static function getCacheVersions() + { + $data = Cache::getFilesVersion('assets/apps/ContractDrive/js', 'js'); + // $data += Cache::getFilesVersion('assets/apps/ContractDrive/css','css'); + return $data; + } + +} diff --git a/app/Repositories/Core/Cache.php b/app/Repositories/Core/Cache.php new file mode 100644 index 00000000..3155096f --- /dev/null +++ b/app/Repositories/Core/Cache.php @@ -0,0 +1,48 @@ +addInclude('*.'.$type); + // $scanner->addExclude('*filter*'); + // $scanner->addExclude('./src/*'); + $path = public_path() . '/' . $folder; + + $data = []; + foreach ($scanner($path) as $i) { + // dump($i); + $sub = $i->getPath(); + $sub = str_replace($path, '', $sub); + $sub = str_replace('\\', '/', $sub); + // dump($sub); + $filename = '/' . $folder . $sub . '/' . $i->getFilename(); + // dump($filename); + $mtime = $i->getMTime(); + $data[$filename] = $mtime; + } + return $data; + } +} diff --git a/app/Repositories/Core/DataTable.php b/app/Repositories/Core/DataTable.php new file mode 100644 index 00000000..1967fa27 --- /dev/null +++ b/app/Repositories/Core/DataTable.php @@ -0,0 +1,341 @@ + $success, + 'data' => $data, + 'message' => $message, + 'code' => $success ? 200 : 500, + 'recordsTotal' => $items['total'], + 'recordsFiltered' => $items['totalFiltered'], + ]; + + \Debugbar::disable(); + echo json_encode($json); + + return $json; + exit; + + return response()->json($json); + } + + public static function get($data, $options = array()) + { + // Debug::fdump($options); + $model = self::getModel($options); + $select = isset($options['select']) ? $options['select'] : ''; + $elements = new $model(); + $table = $elements->getTable(); + $real_id = $table . '.id'; + + $data2 = static::getElements($data, $options); + // Debug::fdump($data2); + $elements = $data2['elements']; + $length = $data2['length']; + $skip = $data2['skip']; + $order = $data2['order']; + $sort = $data2['sort']; + + // Debug::fdump($elements->get()->toArray()); + // + // Debug::fdump($order); + // exit; + + if (strpos($order, '.')) { + $tab = explode('.', $order); + $nb_model = count($tab) - 1; + for ($i = 0; $i < $nb_model; $i++) { + $controller = $tab[$i]; + if (isset($options['namespace'])) { + $namespace = $options['namespace']; + } else { + $namespace = 'App\Models\\'; + } + $jointModelObj = $namespace.ucfirst(Str::camel($controller)); + // Debug::fdump($controller); + $jointModel = new $jointModelObj(); + $jointTable = $jointModel->getTable(); + // Debug::fdump($controller); + // Debug::fdump($jointTable); + if ($table !== $jointTable) { + $elements = $elements->leftJoin($jointTable, $jointTable.'.id', '=', $controller.'_id'); + } + $table = $controller; + } + $order = $jointTable . '.' . $tab[$nb_model]; + } + + /* + if (!empty($select)) { + $elements = $elements->select('*',"$real_id as id", $select); + } else { + $elements = $elements->select('*',"$real_id as id"); + } + */ + // Debug::fdump($order); + $elements = $elements->orderBy($order, $sort); + + if (!empty($options['order']) && ($options['order'] !== $order)) { + $elements = $elements->orderBy($options['order'], $options['sort']); + } + // Debug::dump($elements); + if (isset($options['trash']) && $options['trash']) { + $elements = $elements->withTrashed()->take($length)->skip($skip)->get(); + } else { + $elements = $elements->take($length)->skip($skip)->get(); + } + // Debug::dump($elements); + + $tab = [ + 'elements' => $elements->toArray(), + 'total' => $data2['total'], + 'totalFiltered' => $data2['totalFiltered'] + ]; + + // dump($elements->toArray()); + + return $tab; + } + + public static function getModel($options) + { + // return '\App\Models\\'.$options['app'].$options['model']; + return $options['model']; + } + + + public static function getElements($data, $options) + { + $vars = static::QueryBuilder($data, $options); + // Debug::fdump($vars); + $model = self::getModel($options); + // Debug::dump($model); + + $elements = new $model(); + $total = $elements::count(); + + // Debug::dump($vars); + // exit; + + if (is_array($vars)) { + extract($vars); + } + // dump($order); + if (empty($order)) { + $order = $options['order']; + $sort = $options['sort']; + } + + $with = (isset($options['with'])) ? $options['with'] : null; + $withCount = (isset($options['withCount'])) ? $options['withCount'] : null; + $where = (isset($vars['where'])) ? $vars['where'] : null; + $searchcol = (isset($vars['searchcol'])) ? $vars['searchcol'] : null; + $filter = (isset($vars['filter'])) ? $vars['filter'] : null; + + Debug::dump($with); + Debug::dump($withCount); + Debug::dump($where); + Debug::dump($searchcol); + Debug::dump($filter); + + $elements = ($with) ? $elements->with($with) : $elements; + $elements = ($withCount) ? $elements->withCount($withCount) : $elements; + $elements = ($where) ? $elements->whereRaw($where) : $elements; + $elements = ($filter) ? $elements->whereRaw($filter) : $elements; + + // Debug::fdump($elements->get()->toArray()); + // Debug::message($where); + // exit; + + $elements = static::addSearchFilter($elements, $hasfilters); + $elements = static::addSearch($elements, $searchcol, $search); + + Debug::dump($hasfilters); + // dump($search); + // + + $totalFiltered = $elements->count(); + + // Debug::breakpoint($elements); + // exit; + + $data2 = [ + 'elements' => $elements, + 'total' => $total, + 'totalFiltered' => $totalFiltered, + 'length' => $length, + 'skip' => $skip, + 'order' => $order, + 'sort' => $sort, + ]; + + // var_dump($data2['elements']->get()->toArray()); + return $data2; + } + + public static function addSearchFilter($elements, $hasfilters) + { + if (is_array($hasfilters)) { + foreach ($hasfilters as $hasfilter) { + if (!empty($hasfilter['search'])) { + $elements = $elements->whereHas($hasfilter['controller'], function ($query) use ($hasfilter) { + if ($hasfilter['like']) { + $query->where($hasfilter['field'], 'like', '%' . $hasfilter['search'] . '%'); + } else { + $query->where($hasfilter['field'], '=', $hasfilter['search']); + } + }); + } + } + } + return $elements; + } + + public static function addSearch($elements, $searchcol, $search) + { + if (!empty($search)) { + if (strpos($searchcol, '.')) { + $tab = explode('.', $searchcol); + $searchField = [ + 'controller' => $tab[0], + 'field' => $tab[1], + 'search' => $search, + ]; + $elements = $elements->whereHas($searchField['controller'], function ($query) use ($searchField) { + $query->where($searchField['field'], 'like', '%' . $searchField['search'] . '%'); + }); + } else { + $elements = $elements->where($searchcol, 'like', "%$search%"); + } + } + return $elements; + } + + + public static function QueryBuilder($data, $options = array()) + { + $model = self::getModel($options); + $elements = new $model(); + $table = $elements->getTable(); + $filter = ''; + $hasfilters = array(); + // Debug::fdump($data); + // Debug::message($data); + // Debug::dump($options); + // Debug::dump($data); + + if (is_array($options) && is_array($options['likefields'])) { + $likefields = $options['likefields']; + } + $length = isset($data['length']) ? (int) $data['length'] : 10; + $skip = isset($data['start']) ? (int) $data['start'] : 0; + if (isset($data['search'])) { + $search = ($data['search']['value'] !== '') ? $data['search']['value'] : ''; + } else { + $search = null; + } + + // Debug::fdump($data); + if (isset($data['order'])) { + if ($data['order'][0]['dir']) { //on est sur qu'un tri est en cours, pb de la colonne 0 + $sort = ($data['order'][0]['dir']); + $order = self::getSortcol($data); + } + } else { + $order = null; + $sort = null; + } + + // Debug::dump($order); + + if (isset($data['columns']) && is_array($data['columns'])) { + foreach ($data['columns'] as $item) { + $filter_search = $item['search']['value']; + $filter_col = ($item['name']) ? $item['name'] : $item['data']; + + // Debug::dump($filter_col); + // Debug::dump($filter_search); + // Debug::dump(is_null($filter_search)); + + if (!is_null($filter_search)) { + // Debug::dump($item); + // Debug::dump($filter_search); + // Debug::dump($filter_col); + + if (strpos($filter_col, '.')) { + $tab = explode('.', $filter_col); + if (is_array($likefields) && in_array($filter_col, $likefields)) { + $like = true; + } else { + $like = false; + } + + $hasfilters[] = [ + 'controller' => $tab[0], + 'field' => $tab[1], + 'search' => $filter_search, + 'like' => $like, + ]; + } else { + // $filter_col = $table . '.' .$item['data']; + $filter .= (!empty($filter)) ? ' and ' : ''; + if (is_array($likefields) && in_array($filter_col, $likefields)) { + $filter .= "($table.$filter_col LIKE '%$filter_search%')"; + } else { + $filter .= "($table.$filter_col = '$filter_search')"; + } + } + } + } + } + + if (isset($data['where'])) { + $where = $data['where']; + } else { + $where = null; + } + + $options = [ + 'length' => $length, + 'skip' => $skip, + 'search' => $search, + 'order' => $order, + 'sort' => $sort, + 'filter' => $filter, + 'hasfilters' => $hasfilters, + 'where' => $where, + ]; + + Debug::dump($options); + return $options; + } + + public static function getSortcol($data) + { + $sortcol = $data['order'][0]['column']; + if (!is_null($sortcol) && ($sortcol !== 0)) { + if (!empty($data['columns'][$sortcol]['name'])) { + $order = $data['columns'][$sortcol]['name']; + } else { + $order = $data['columns'][$sortcol]['data']; + } + } + return $order; + } +} diff --git a/app/Repositories/Core/Database.php b/app/Repositories/Core/Database.php new file mode 100644 index 00000000..e4a62ca1 --- /dev/null +++ b/app/Repositories/Core/Database.php @@ -0,0 +1,50 @@ +getTable()); + foreach ($columns as &$column) { + $type = Schema::getColumnType($table->getTable(), $column); + array_push($data, ['name' => $column, 'type' => $type]); + } + return $data; + } + + public static function getPopulate($model, $route, $id) + { + echo Form::model($model, ['route' => [$route.'.update', $id]]); + } +} diff --git a/app/Repositories/Core/DateHelper.php b/app/Repositories/Core/DateHelper.php new file mode 100644 index 00000000..9f80e1ad --- /dev/null +++ b/app/Repositories/Core/DateHelper.php @@ -0,0 +1,52 @@ +startOfDay(); + } + + public static function byWeek() + { + return Carbon::now()->startOfWeek(); + } + + public static function byMonth() + { + return Carbon::now()->startOfMonth(); + } + + public static function byQuarter() + { + return Carbon::now()->startOfQuarter(); + } + + public static function bySemester() + { + $quarter = Carbon::now()->quarter; + switch ($quarter) { + case 1: + case 2: + $date = Carbon::now()->startOfYear(); + break; + case 3: + $date = Carbon::now()->startOfQuarter(); + break; + case 4: + $date = Carbon::now()->subMonth(3)->startOfQuarter(); + break; + } + return $date; + } + + public static function byYear() + { + return Carbon::now()->startOfYear(); + } +} diff --git a/app/Repositories/Core/DateRange.php b/app/Repositories/Core/DateRange.php new file mode 100644 index 00000000..db01073e --- /dev/null +++ b/app/Repositories/Core/DateRange.php @@ -0,0 +1,114 @@ +copy()->subMonth($nb); + return static::getPeriodsbyMonth($begin, $end); + } + + public static function getPeriodsLastWeek($nb) + { + $end = static::lastWeek(); + $begin = $end->copy()->subWeek($nb); + return static::getPeriodsbyWeek($begin, $end); + } + + public static function getPeriodsLastDay($nb) + { + $end = static::lastDay(); + $begin = $end->copy()->subDay($nb); + return static::getPeriodsbyDay($begin, $end); + } + + public static function byDay() + { + return [Carbon::now()->startOfDay(), Carbon::now()->endOfDay()]; + } + + public static function byWeek() + { + return [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()]; + } + + public static function byMonth() + { + return [Carbon::now()->startOfMonth(), Carbon::now()->endOfMonth()]; + } + + public static function byQuarter() + { + return [Carbon::now()->startOfQuarter(), Carbon::now()->endOfQuarter()]; + } + + public static function bySemester() + { + $quarter = Carbon::now()->quarter; + switch ($quarter) { + case 1: + case 2: + $date = Carbon::now()->startOfYear(); + break; + case 3: + $date = Carbon::now()->startOfQuarter(); + break; + case 4: + $date = Carbon::now()->subMonth(3)->startOfQuarter(); + break; + } + return [$date, $date->addMonth(6)]; + } + + public static function byYear() + { + return [Carbon::now()->startOfYear(), Carbon::now()->endOfYear()]; + } + + public static function lastMonth() + { + $start = Carbon::parse('first day of last month'); + $start->addMonth()->startOfDay(); + return $start; + } + + public static function lastWeek() + { + return Carbon::parse('last monday'); + } + + public static function lastDay() + { + return Carbon::parse('yesterday'); + } + + public static function getPeriodsbyMonth($begin, $end) + { + return (static::getPeriods($begin, $end, 'MONTH')); + } + + public static function getPeriodsbyWeek($begin, $end) + { + return (static::getPeriods($begin, $end, 'WEEK')); + } + + public static function getPeriodsbyDay($begin, $end) + { + return (static::getPeriods($begin, $end, 'DAY')); + } + + public static function getPeriods($begin, $end, $interval) + { + $period = new Period($begin, new \DateTime($end)); + foreach ($period->getDatePeriod("1 $interval") as $day) { + $daterange[] = Period::createFromDuration($day->format('Y-m-d H:i:s'), "1 $interval"); + } + return ($daterange); + } +} diff --git a/app/Repositories/Core/DateTime.php b/app/Repositories/Core/DateTime.php new file mode 100644 index 00000000..b5a72822 --- /dev/null +++ b/app/Repositories/Core/DateTime.php @@ -0,0 +1,59 @@ +isoFormat('Y-MM-DD') : null; + } + + public static function convertTime($date) + { + return $date ? Carbon::createFromFormat('d/m/Y H:i', $date)->isoFormat('Y-MM-DD HH:mm:ss') : null; + } + + public static function toFr($date) + { + return $date ? Carbon::parse($date)->isoFormat('DD/MM/Y') : null; + } + + public static function toFrTime($date) + { + return $date ? Carbon::parse($date)->isoFormat('DD/MM/Y HH:mm:ss') : null; + } + + public static function FromDatetimeFr($date) + { + return $date ? Carbon::createFromFormat('d/m/Y H:i:s', $date) : null; + } + + public static function DatetimeToStamp($date) + { + return $date ? self::FromDatetimeFr($date)->isoFormat('Y-MM-DD HH:mm:ss') : null; + } + + public static function DatetimeToDate($date) + { + return $date ? self::FromDatetimeFr($date)->isoFormat('DD/MM/Y') : null; + } + + public static function DatetimeToTime($date) + { + return $date ? self::FromDatetimeFr($date)->isoFormat('HH:mm') : null; + } + + public static function isPast($date) + { + return self::FromDatetimeFr($date)->isPast(); + } +} diff --git a/app/Repositories/Core/Debug.php b/app/Repositories/Core/Debug.php new file mode 100644 index 00000000..6ebdd22f --- /dev/null +++ b/app/Repositories/Core/Debug.php @@ -0,0 +1,297 @@ +debugbar = DebugBar::getInstance()->debugbar; + } + + public static function isDebugbar() + { + return class_exists('Barryvdh\Debugbar\ServiceProvider') ? true : false; + } + + public static function isClockwork() + { + return class_exists('Clockwork\Support\Laravel\ClockworkServiceProvider') ? true : false; + } + + public static function start($var = '', $params = array(), $txt = '') + { + if (!static::isDebug()) { + return false; + } + $var = (empty($var)) ? static::getMethod() : $var; + $params = (empty($params)) ? static::getArgs() : $params; + /* + foreach ($params as $key => $value) { + $params[$key] = substr($value,30); + } + */ + // TODO Fixer la longueur des params string passés + if (is_null($params)) { + $params = array(); + } + + Timer::start($var, $params); + + if (static::isDebugbar()) { + \Debugbar::startMeasure($var, $txt); + } + + if (static::isClockwork()) { + // clock()->startEvent($var, $txt); + } + } + + public static function stop($var = '') + { + if (!static::isDebug()) { + return false; + } + $var = (empty($var)) ? static::getMethod() : $var; + Timer::stop(); + + if (static::isDebugbar()) { + \Debugbar::stopMeasure($var); + } + + if (static::isClockwork()) { + // clock()->endEvent($var); + } + } + + public static function render($force = false) + { + static::dump((string) Timer::result(), '', $force); + } + + public static function memory($force = false) + { + static::dump(memory_get_usage(), '', $force); + } + + public static function breakpoint($msg = '', $cat = '', $force = true) + { + static::dump($msg, $cat, $force); + static::header('paramètres'); + static::dump(static::getArgs(), '', $force); + static::footer('paramètres'); + static::render($force); + static::backtrace($force); + exit; + } + + /** + * dump un message uniquement si debug est true + * @param string $msg [description] + * @return [type] [description] + */ + public static function message($msg, $cat = '') + { + if (static::isDebug()) { + static::dump($msg, $cat); + } + } + + /** + * force la sortie d'un dump, sans passer par la debugbar ou test si debug est true + * @param string $msg [description] + * @return [type] [description] + */ + public static function fdump($msg, $cat = '') + { + static::dump($msg, $cat, 3); + } + + /** + * dump un message suivant le handler de sortie prévu (log, debugbar, cli, ...) + * @param [type] $msg [description] + * @param boolean $force si true, force la sortie en output direct + * @return [type] [description] + */ + public static function dump($msg, $cat = '', $force = false) + { + $cat = $cat ? $cat : self::getClass(); + if ($force || self::isForcedOutput()) { + dump(self::getLocation()); + dump($msg); + } + + if (self::isDebug()) { + if (static::isCLI()) { + self::dumpCli($msg, $cat); + } + if (static::isDebugbar()) { + self::dumpDebugbar($msg, $cat); + } + if (static::isClockwork()) { + self::dumpClockwork($msg, $cat); + } + } + } + + public static function dumpDebugbar($msg, $cat = '', $force = false) + { + \Debugbar::addMessage(self::getLocation(), $cat); + \Debugbar::addMessage($msg, $cat); + } + + public static function dumpClockwork($msg, $cat = '') + { + clock($msg); + } + + public static function dumpCli($msg, $cat = '') + { + $climate = new CLImate; + // $climate->yellow()->bold()->out($message); + // $climate->white()->bold()->out($output); + // $climate->out($msg); + // dump(self::getLocation()); + // dump($msg); + } + + public static function header($titre = '') + { + static::dump("*********** $titre ************"); + } + + public static function footer($titre = '') + { + static::dump("*********** Fin $titre ************"); + } + + public static function isDebug() + { + return self::getIsDebug() && 1; + } + + public static function isForcedOutput() + { + return self::getIsDebug() > 1; + } + + public static function getIsDebug() + { + $caller = (array) static::getCaller(); + // dump($caller); + if ($caller['class']) { + if (isset($caller['class']::$is_debug)) { + $is_debug = $caller['class']::$is_debug; + } else { + $is_debug = false; + } + } else { + dump("la isDebug::165"); + dump($caller); + $is_debug = true; + } + return $is_debug; + } + + public static function backtrace($force = false) + { + $txt = ''; + $backtrace = debug_backtrace(); + $backtrace = array_reverse($backtrace); + foreach ($backtrace as $item) { + $caller = isset($item['class']) ? $item['class'] . $item['type'] . $item['function'] : $item['function']; + $place = isset($item['file']) ? $item['file'] . ' at ' . $item['line'] : ''; + $txt .= "$caller | $place \n"; + } + static::dump($txt, '', $force); + // dump($backtrace); + } + + public static function getLocation() + { + return static::getMethod() . ' at ' . static::getFile() . ' line ' . static::getLine(); + } + + public static function getMethod() + { + return (static::getClass() . static::getType() . static::getFunction()); + } + + public static function getClass() + { + return static::getCaller()->class; + } + + public static function getFunction() + { + return static::getCaller()->function; + } + + public static function getType() + { + return static::getCaller()->type; + } + + public static function getArgs() + { + // dump(static::getCaller()->args); + return static::getCaller()->args; + } + + public static function getLine() + { + return static::getParent()->line; + } + + public static function getFile() + { + return static::getParent()->file; + } + + public static function getCaller() + { + $backtrace = debug_backtrace(); + // dump($backtrace); + $k = 1; + while ($backtrace[$k]['class'] == 'App\Repositories\Core\Debug') { + $k++; + } + return (object) $backtrace[$k]; + } + + public static function getParent() + { + $backtrace = debug_backtrace(); + // dump($backtrace); + $k = 1; + while ($backtrace[$k]['class'] == 'App\Repositories\Core\Debug') { + $k++; + } + return (object) $backtrace[$k - 1]; + } + + public static function getRoot() + { + $backtrace = debug_backtrace(); + $object = isset($backtrace[0]['object']) ? $backtrace[0]['object'] : null; + $k = 1; + while (isset($backtrace[$k]) && (!isset($backtrace[$k]['object']) || $object === $backtrace[$k]['object'])) { + $k++; + } + return isset($backtrace[$k]['object']) ? $backtrace[$k]['object'] : null; + } + + public static function isCLI() + { + return (PHP_SAPI == 'cli'); + } +} diff --git a/app/Repositories/Core/Export.php b/app/Repositories/Core/Export.php new file mode 100644 index 00000000..7160fd08 --- /dev/null +++ b/app/Repositories/Core/Export.php @@ -0,0 +1,159 @@ +xls = new PHPExcel(); + } + + public function create($filename, $stockage = false) + { + $this->sheet = $this->xls->setActiveSheetIndex(0); + $this->filename = $filename; + $this->stockage = $stockage; + $this->lig = 1; + } + + public function setColumnsTitle($data) + { + $col = 0; + foreach ($data as $value) { + $this->writeTitle($this->lig, $col, $value); + $col++; + } + $this->lig++; + } + + public function writeTitle($lig, $col, $txt) + { + $coord = $this->conv($lig, $col); + $style = $this->sheet->getStyle($coord); + $styleFont = $style->getFont(); + $styleFont->setBold(true); + $styleFont->setSize(12); + $styleFont->setName('Arial'); + // $styleFont->getColor()->setARGB(PHPExcel_Style_Color::COLOR_GREEN); + $this->sheet->setCellValue($coord, $txt); + if ($this->debug) { + echo "Col $col Ligne $lig : $coord Text $txt
"; + } + } + + public function writeCell($lig, $col, $txt) + { + $coord = $this->conv($lig, $col); + $this->sheet->setCellValue($coord, $txt); + if ($this->debug) { + echo "Col $col Ligne $lig : $coord Text $txt
"; + } + } + + public function exportRow($data, $config = null) + { + if ($config) { + $vars = $config['vars']; + $options = $config['options']; + $multioptions = $config['multioptions']; + } + $col = 0; + if (is_array($vars)) { + foreach ($vars as $key) { + $txt = $data[$key]; + if (isset($options[$key])) { + $txt = $options[$key][$txt]; + } + if (isset($multioptions[$key])) { + $tabs = BaseController::getReverseMultiOptions($txt); + foreach ($tabs as $key2 => $value) { + $txt .= $multioptions[$key][$key2] . '\n'; + } + } + $this->writeCell($this->lig, $col, $txt); + $this->nb++; + $col++; + } + } else { + foreach ($data as $value) { + $txt = $value; + $this->writeCell($this->lig, $col, $txt); + $this->nb++; + $col++; + } + } + $this->lig++; + } + + public function header() + { + // Redirect output to a client’s web browser (Excel5) + header('Content-Type: application/vnd.ms-excel'); + header('Content-Disposition: attachment;filename="' . $this->filename . '"'); + header('Cache-Control: max-age=0'); + // If you're serving to IE 9, then the following may be needed + // header('Cache-Control: max-age=1'); + + // If you're serving to IE over SSL, then the following may be needed + header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified + header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 + header('Pragma: public'); // HTTP/1.0 + } + + public function close() + { + if (!$this->debug) { + // Debug::message($this->xls); + $objWriter = PHPExcel_IOFactory::createWriter($this->xls, 'Excel2007'); + // Debug::message($objWriter); + // exit; + if (!$this->stockage) { + $this->header(); + $objWriter->save('php://output'); + } else { + // $objWriter->save(str_replace('.php', '.xlsx', __FILE__)); + $objWriter->save('text.xlsx'); + } + } + } + + public function conv($lig, $col) + { + $c = static::convColtoTxt($col); + $lig = $this->lig; + return ("$c$lig"); + } + + public function convColtoTxt($col) + { + $col1 = $col % 26; + $col2 = (int) floor($col / 26); + if ($col2) { + $c = chr(64 + $col2); + } else { + $c = ''; + } + $c .= chr(65 + $col1); + return ($c); + } + + public function getOption($var) + { + $data = $this->init(); + return ($data[$var . '_options']); + } + + public function getOptions($data) + { + $options = array(); + foreach ($data as $key => $value) { + $var = substr($key, 0, -8); + $options[$var] = $value; + } + return $options; + } +} diff --git a/app/Repositories/Core/Geolocation.php b/app/Repositories/Core/Geolocation.php new file mode 100644 index 00000000..9a2d24b0 --- /dev/null +++ b/app/Repositories/Core/Geolocation.php @@ -0,0 +1,32 @@ +geocode($address)->get(); + + if (count($geocode)) { + $res = $geocode[0]->getCoordinates()->toArray(); + // dump($res); + $longitude = $res[0]; + $latitude = $res[1]; + // dump($latitude); + // dump($longitude); + // exit; + return ['latitude' => $latitude, 'longitude' => $longitude]; + } else { + return false; + } + } + } + + public static function autocomplete($query) + { + } +} diff --git a/app/Repositories/Core/Menu/Builder.php b/app/Repositories/Core/Menu/Builder.php new file mode 100644 index 00000000..fef5a477 --- /dev/null +++ b/app/Repositories/Core/Menu/Builder.php @@ -0,0 +1,94 @@ +%s', $title); + + $id = isset($options['id']) ? $options['id'] : $this->id(); + + $item = new Item($this, $id, $title, $options); + + if (isset($options['icon'])) { + $item->icon($options['icon']); + } + + if (isset($options['role']) || isset($options['permission'])) { + $ability = ['admin']; + if (isset($options['role'])) { + $ability = $ability + explode(',', $options['role']); + } + + $permission = null; + if (isset($options['permission'])) { + $permission = explode(',', $options['permission']); + } + + $currentUser = Auth::user(); + + if ($currentUser && $currentUser->ability($ability, $permission)) { + $this->items->push($item); + } + + } else { + $this->items->push($item); + } + + return $item; + } + + /** + * Add an item to a existing menu item as a submenu item. + * + * @param $id Id of the menu item to attach to + * @param $title Title of the sub item + * @param string $options + * + * @return Lavary\Menu\Item + */ + public function addTo($id, $title, $options = '') + { + $parent = $this->whereId($id)->first(); + + if (isset($parent)) { + if (!isset($this->root[$parent->id])) { + $parent->attr(['url' => '#', 'class' => 'treeview']); + // $str = ''; + // $parent->append($str); + $this->root[$parent->id] = true; + } + + $item = $parent->add($title, $options); + } else { + $item = $this->add($title, $options); + } + + $item->icon('circle-o'); + + return $item; + } +} diff --git a/app/Repositories/Core/Menu/Item.php b/app/Repositories/Core/Menu/Item.php new file mode 100644 index 00000000..94b47e7c --- /dev/null +++ b/app/Repositories/Core/Menu/Item.php @@ -0,0 +1,77 @@ +prepend(sprintf('', $icon)); + + return $this; + } + + /** + * Set the item order. + * + * @param $order + * + * @return self + */ + public function order($order) + { + $this->data('order', $order); + + return $this; + } + + /** + * Make the item active. + * + * @param string|array $routes + * + * @return self + */ + public function activeIfRoute($routes = null) + { + if (!empty($routes)) { + if (is_string($routes)) { + $routes = [$routes]; + } + + foreach ($routes as $pattern) { + $arr = [$pattern]; + if (if_route_pattern($arr)) { + $this->activate(); + + if (strstr($this->title, 'circle-o')) { + $this->title = str_replace('fa-circle-o', 'fa-dot-circle-o', $this->title); + } + // dump($this); + return $this; + } + } + + return $this; + } + + $activeClass = $this->builder->conf('active_class'); + $this->attributes['class'] = Builder::formatGroupClass(['class' => $activeClass], $this->attributes); + $this->isActive = true; + + if (strstr($this->title, 'circle-o')) { + $this->title = str_replace('fa-circle-o', 'fa-dot-circle-o', $this->title); + } + + return $this; + } +} diff --git a/app/Repositories/Core/Menu/Logs.php b/app/Repositories/Core/Menu/Logs.php new file mode 100644 index 00000000..b80834f7 --- /dev/null +++ b/app/Repositories/Core/Menu/Logs.php @@ -0,0 +1,27 @@ +add(__('boilerplate::logs.menu.category'), ['permission' => 'logs', 'icon' => 'list']) + ->id('logs') + ->order(1100); + + $menu->addTo('logs', __('boilerplate::logs.menu.stats'), [ + 'route' => 'boilerplate.logs.dashboard', + 'permission' => 'logs', ]) + ->order(1110) + ->activeIfRoute('boilerplate.logs.dashboard'); + + $menu->addTo('logs', __('boilerplate::logs.menu.reports'), [ + 'route' => 'boilerplate.logs.list', + 'permission' => 'logs', ]) + ->order(1120) + ->activeIfRoute(['boilerplate.logs.list', 'boilerplate.logs.show', 'boilerplate.logs.filter']); + } +} diff --git a/app/Repositories/Core/Menu/Menu.php b/app/Repositories/Core/Menu/Menu.php new file mode 100644 index 00000000..b1d10d38 --- /dev/null +++ b/app/Repositories/Core/Menu/Menu.php @@ -0,0 +1,29 @@ +menu)) { + $this->menu[$name] = new Builder($name, $this->loadConf($name)); + } + + // Registering the items + call_user_func($callback, $this->menu[$name]); + + // Storing each menu instance in the collection + $this->collection->put($name, $this->menu[$name]); + + // Make the instance available in all views + View::share($name, $this->menu[$name]); + + return $this->menu[$name]; + } + } +} diff --git a/app/Repositories/Core/Menu/Users.php b/app/Repositories/Core/Menu/Users.php new file mode 100644 index 00000000..7210c80d --- /dev/null +++ b/app/Repositories/Core/Menu/Users.php @@ -0,0 +1,33 @@ +add(__('boilerplate::layout.access'), ['icon' => 'users']) + ->id('access') + ->order(1000); + + $menu->addTo('access', __('boilerplate::users.list.title'), [ + 'route' => 'boilerplate.users.index', + 'permission' => 'users_crud', ]) + ->activeIfRoute(['boilerplate.users.index', 'boilerplate.users.edit']); + + $menu->addTo('access', __('boilerplate::users.create.title'), [ + 'route' => 'boilerplate.users.create', + 'permission' => 'users_crud', ]) + ->activeIfRoute('boilerplate.users.create'); + + $menu->addTo('access', __('boilerplate::layout.role_management'), [ + 'route' => 'boilerplate.roles.index', + 'permission' => 'roles_crud', ]) + ->activeIfRoute('boilerplate.roles.*'); + + $menu->addTo('access', __('boilerplate::users.profile.title'), ['route' => 'boilerplate.user.profile']) + ->activeIfRoute('boilerplate.user.profile'); + } +} diff --git a/app/Repositories/Core/Number.php b/app/Repositories/Core/Number.php new file mode 100644 index 00000000..21e8492b --- /dev/null +++ b/app/Repositories/Core/Number.php @@ -0,0 +1,21 @@ +setCulture('fr-FR'); + + $formatter->setLanguageManager($languageManager); + + $price = $formatter->format($value, '0,0'); + return $price; + } +} diff --git a/app/Repositories/Core/Stat.php b/app/Repositories/Core/Stat.php new file mode 100644 index 00000000..49b2ae93 --- /dev/null +++ b/app/Repositories/Core/Stat.php @@ -0,0 +1,187 @@ + $begin, 'end' => $end, 'count' => $item['count']]; + } + return $tab; + } + + + /* + fonctions de rendus + */ + + public static function renderStatsbyMultiVar($var, $var_option = '') + { + static::renderStatsJson(static::getStatsbyMultiVar($var, $var_option)); + } + + public static function renderStatsbyVar($var) + { + static::renderStatsJson(static::getStatsbyVar($var)); + } + + public static function renderStatsbyOptions($var, $var_option = '') + { + static::renderStatsJson(static::getStatsbyOptions($var, $var_option)); + } + + public static function renderStatsJson($data) + { + Response::headers()->set('Content-Type', 'application/json'); + Response::setBody(json_encode($data, JSON_NUMERIC_CHECK)); + } + + + /* + Fonctions internes + */ + + public static function getStatsbyMultiVar($var, $var_option = '') + { + if (empty($var_option)) { + $var_option = $var; + } + $options = self::getInstance()->controller->getOption($var_option); + return self::getInstance()->getStatsbyMultiOptions($var, $options); + } + + public static function getCountByPeriod($var, $begin, $end) + { + $count = static::getModel() + ->whereBetween($var, $begin, $end) + ->count(); + return $count; + } + + public static function getCountbyVar($var) + { + $db = self::getInstance()->app->db; + $data = static::getModel() + ->select($db::raw("count(id) as y, $var as name")) + ->groupBy($var) + ->get(); + // var_Debug::message($data); + return ($data); + } + + + public static function getStatsbyOptions($var, $var_option = '') + { + if (empty($var_option)) { + $var_option = $var; + } + $options = self::getInstance()->controller->getOption($var_option); + $nb = static::getCountbyOption($var); + // var_Debug::message($nb); + foreach ($options as $key => $value) { + $y = (int) $nb[$key]; + $data[] = ['y' => $y, 'name' => $value]; + } + // var_Debug::message($data); + return ($data); + } + + public static function getCountbyOption($var) + { + $db = self::getInstance()->app->db; + $data = static::getModel() + ->select($db::raw('count(id) as nb')) + ->groupBy($var) + ->get(); + foreach ($data as $key => $value) { + if (is_array($data[$key])) { + $data[$key] = (int) $data[$key]['nb']; + } else { + $data[$key] = (int) $data[$key]->nb; + } + } + return ($data); + } + + public static function getStatsbyMultiOptions($var, $options) + { + foreach ($options as $key => $value) { + $nb = static::getCountbyBin($var, $key); + $data[] = ['y' => $nb, 'name' => $value]; + } + return ($data); + } + + public static function getCountbyBin($var, $value) + { + $bit = pow(2, $value); + $count = static::getModel() + ->where($var, '&', $bit) + ->count(); + return $count; + } + + + public static function getStatsbyPeriod($begin = '', $end = '', $period = 'days') + { + $end = Carbon::now(); + $begin = Carbon::now()->subMonth(1); + switch ($period) { + case 'days': + $periods = DateRange::getPeriodsbyDay($begin, $end); + break; + case 'months': + $periods = DateRange::getPeriodsbyMonth($begin, $end); + break; + case 'weeks': + $periods = DateRange::getPeriodsbyWeek($begin, $end); + break; + default: + } + return ($periods); + } + + public static function serializeValues($tab) + { + return static::serializeByVar($tab, 'count'); + } + + public static function serializeByVar($tab, $var, $n = 0) + { + $collection = collect($tab); + + if ($n) { + $tab = $collection->pluck($var)->slice(-$n)->toArray(); + } else { + $tab = $collection->pluck($var)->toArray(); + } + + return implode(",", $tab); + } + + public static function avgByVar($tab, $var) + { + return collect($tab)->pluck($var)->avg(); + } +} diff --git a/app/Repositories/Core/Upload.php b/app/Repositories/Core/Upload.php new file mode 100644 index 00000000..cf6fdde6 --- /dev/null +++ b/app/Repositories/Core/Upload.php @@ -0,0 +1,101 @@ +getClientOriginalName(); + $data['filetype'] = $file->extension(); + $data['filesize'] = $file->getSize(); + return $data; + } + + public static function getUuid($file, $data) + { + $data = (is_array($data)) ? (object) $data : $data; + $pos = strrpos($file, '/'); + $uuid = substr($file, $pos+1); + $uuid = str_replace('.' . $data->filetype, '', $uuid); + return $uuid; + } + + public static function store($file, $filepath) + { + return $file->store($filepath); + } + + public static function storePublic($file, $filepath) + { + // exit; + $filepath = 'public/' . $filepath; + return $file->store($filepath); + } + + public static function delete($file) + { + return Storage::delete($file); + } + + public static function createThumb($file, $size, $sub = false) + { + $thumb = self::getThumbPath($file, $sub); + $filename = self::getPublicPath($file); + return Image::make($filename)->orientate()->widen($size)->save($thumb); + } + + /* + public static function getPath($file) { + return 'public/' . self::getFilename($file); + } + */ + + public static function getPublicPath($file) + { + return storage_path('app/public/' . self::getFilename($file)); + } + + public static function getPrivatePath($file) + { + return storage_path('app/' . self::getFilename($file)); + } + + public static function getSrc($file) + { + return '/storage/' . self::getFilename($file); + } + + public static function getThumbPath($file) + { + return storage_path('app/public/' . self::getThumbFilename($file)); + } + + public static function getThumbSrc($file) + { + return '/storage/' . self::getThumbFilename($file); + } + + public static function getFilename($file) + { + $file = (is_array($file)) ? (object) $file : $file; + return $file->filepath . '/' . self::getName($file); + } + + public static function getThumbFilename($file, $sub = false) + { + $sub = $sub ? $sub : 'thumbs/'; + $file = (is_array($file)) ? (object) $file : $file; + return $file->filepath . '/' . $sub . self::getName($file); + } + + public static function getName($file) + { + $file = (is_array($file)) ? (object) $file : $file; + return $file->uuid . '.' .$file->filetype; + } +} diff --git a/app/Repositories/Core/User/NewUser.php b/app/Repositories/Core/User/NewUser.php new file mode 100644 index 00000000..7dc1bc73 --- /dev/null +++ b/app/Repositories/Core/User/NewUser.php @@ -0,0 +1,66 @@ +markdown('notifications.email') + ->greeting(__('notifications.greeting', ['firstname' => $notifiable->first_name])) + ->subject(__('notifications.newuser.subject', ['name' => config('app.name')])) + ->line(__('notifications.newuser.intro', [ + 'name' => $currentUser->first_name.' '.$currentUser->last_name, + ])) + ->action( + __('notifications.newuser.button'), + route('users.firstlogin', $notifiable->remember_token) + ) + ->salutation(__('notifications.salutation', [ + 'name' => $currentUser->first_name.' '.$currentUser->last_name, + ])) + ->line(__('notifications.newuser.outro')); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Repositories/Core/User/ResetPassword.php b/app/Repositories/Core/User/ResetPassword.php new file mode 100644 index 00000000..763d1691 --- /dev/null +++ b/app/Repositories/Core/User/ResetPassword.php @@ -0,0 +1,31 @@ +markdown('notifications.email') + ->greeting(__('notifications.greeting', ['firstname' => $notifiable->first_name])) + ->subject(__('notifications.resetpassword.subject')) + ->line(__('notifications.resetpassword.intro')) + ->action( + __('notifications.resetpassword.button'), + route('password.reset', $this->token) + ) + ->line(__('notifications.resetpassword.outro')); + } +*/ +} diff --git a/app/Repositories/Shop/Products.php b/app/Repositories/Shop/Products.php new file mode 100644 index 00000000..5dbbe2f7 --- /dev/null +++ b/app/Repositories/Shop/Products.php @@ -0,0 +1,217 @@ +orderBy('name'); + return Datatables::of($model)->make(true); + } + + public static function select_all() + { + return Product::select('id','name','active')->orderBy('name','asc')->get()->toArray(); + } + + public static function select_by_id($id) + { + return Product::find($id)->toArray(); + } + + public static function getId($Product = false) + { + $Product = self::get($Product); + return $Product ? $Product->id : false; + } + + public static function get($Product = false) + { + $website = self::getWebsite($Product); + return $website ? Product::byWebsite($website->id)->first() : false; + } + + public static function store($data) + { + $id = isset($data['id']) ? $data['id'] : false; + if (!$id) { + $Product_id = self::create($data); + } else { + $Product_id = self::update($data); + } + + ApplicationProducts::associate($Product_id, $data['applications']); + + return $Product_id; + } + + public static function create($data) + { + $slug = Str::slug($data['slug'],'-'); + $url = $slug . '.' . Partners::getDomain(); + $website = Websites::create($url); + $item = []; + $item['website_id'] = $website->id; + $item['name'] = $data['name']; + $item['slug'] = $slug; + $item['repository'] = $slug; + $item['session_name'] = $slug . '_sess'; + $item['logo_image'] = 'logo.png'; + $item['background_image'] = 'login-background.jpg'; + $item['custom_css'] = 'Product.css'; + $item['active'] = true; + $Product = Product::create($item); + + $DB_system = Partners::getDBName(); + $sql = "GRANT SELECT ON `$DB_system`.* TO '" . $website->uuid . "'@localhost"; + DB::connection('system')->statement($sql); + // GRANT SELECT ON `legstack`.* TO '828656d3463e45c0a33e9cc8b5c2f265'@'127.0.0.1'; + return $Product->id; + } + + public static function update($data) + { + // TODO + } + + public static function destroy($id) + { + $Product = Product::find($id); + + } + + public static function getPublicPath($repository = false, $Product = false) + { + return self::getLocalPath() . self::getPath($repository, $Product); + } + + /** + * [getPrivatePath renvoie le chemin complet du repertoire du tenant ] + * @param boolean $repository [description] + * @param boolean $Product [description] + * @return [type] [description] + */ + public static function getPrivatePath($repository = false, $Product = false) + { + return self::getPrivateDir($repository, $Product); + } + + public static function getPrivateDir($repository = false, $Product = false) + { + return self::getLocalDir() . self::getPath($repository, $Product); + } + + /** + * [getRelativePath renvoie le chemin relatif au storage ] + * @param boolean $repository [description] + * @param boolean $Product [description] + * @return [type] [description] + */ + public static function getRelativePath($repository = false, $Product = false) + { + return self::getTenancyRoot() . self::getPath($repository, $Product); + } + + /** + * [getPath renvoie le chemin relatif à la tenancy root] + * @param boolean $repository [description] + * @param boolean $Product [description] + * @return [type] [description] + */ + public static function getPath($repository = false, $Product = false) + { + $path = '/'. self::getSlug($Product); + $path .= $repository ? $repository : ''; + return $path; + } + + /** + * [getStorage revoie le storage du tenant (local, S3, ...)] + * @return [type] [description] + */ + public static function getStorage() + { + return Storage::disk('tenant'); + } + + public static function getDirectory() + { + return app(\Hyn\Tenancy\Website\Directory::class); + } + + /** + * [getLocalDir renvoie le chemin complet vers la tenancy sur le disque] + * @return [type] [description] + */ + public static function getLocalDir() + { + return storage_path('app' . self::getTenancyRoot()); + } + + /** + * [getLocalPath revnoie le chemin public vers la tenancy publique] + * @return [type] [description] + */ + public static function getLocalPath() + { + return '/storage' . self::getTenancyRoot(); + } + + public static function getSlug($Product = false) + { + if ($Product) { + return $Product; + } + + $website = self::getWebsite(); + if ($website) { + return($website->uuid); + } + + /* + // regarde si le Product existe et qu'il possède au moins une licence valide pour une des applications + $host = array_key_exists('HTTP_HOST', $_SERVER) ? $_SERVER['HTTP_HOST'] : 'legtech.legtech'; + $url_hostname = explode(".", $host); // décompose l'url de base + $slug = $url_hostname[0]; + if ($slug == 'legstack') { + $slug = 'legtech'; + } + return $slug; + */ + } + + // récupère les informations de connexion à la base du Product + public static function getDatabaseEnvironment($Product_id) + { + return Product::byId($Product_id)->first()->toArray(); + } + + public static function isProduct() + { + $website = self::getWebsite(); + $is_Product = $website ? true : false; + return $is_Product; + } + + public static function getWebsite() + { + return \Hyn\Tenancy\Facades\TenancyFacade::website(); + } + + public static function getWebsiteByProduct($id) + { + $Product = Product::find($id); + return Website::find($Product->website_id); + } + +} diff --git a/app/Repositories/Teams.php b/app/Repositories/Teams.php new file mode 100644 index 00000000..686aa79b --- /dev/null +++ b/app/Repositories/Teams.php @@ -0,0 +1,80 @@ +get(); + } + + public static function getUsersIdByTeam($id) + { + return self::getUsersByTeam($id)->pluck('user_id'); + } + + public static function getUsersByTeam2($id) + { + return Team::find($id)->users(); + } + + public static function getOptions() + { + return Team::get()->pluck('name', 'id'); + } + + public static function get($id) + { + return Team::find($id); + } + + public static function getTable($id) + { + $datas = Team::with(['societe'])->withCount(['users']); + return Datatables::of($datas)->make(true); + } + + public static function delete($id) + { + Users::destroyByUniqueTeam($id); + return Team::destroy($id); + } + + public static function destroyBySociete($id) + { + $teams = Team::bySociete($id)->get(); + foreach ($teams as $team) { + self::delete($team->id); + } + } + + // ajoute une équipe/service/direction + public static function create($data) + { + return Team::create($data); + } + + // met à jour les informations d'une équipe/service/direction + public static function update($data) + { + return Team::find($data['id'])->update($data); + } +} diff --git a/app/Repositories/Users.php b/app/Repositories/Users.php new file mode 100644 index 00000000..500dc37b --- /dev/null +++ b/app/Repositories/Users.php @@ -0,0 +1,177 @@ +first(); + return $partenaire ? $partenaire->id : null; + } + + public static function getPartenaire($user_id = false) + { + $user_id = $user_id ? $user_id : self::getId(); + return Societe::partenaireByUser($user_id)->first(); + } + + public static function getPromoteurId($user_id = false) + { + $user_id = $user_id ? $user_id : self::getId(); + return Promoteur::byUser($user_id)->first()->id; + } + + public static function getPromoteur($user_id = false) + { + $user_id = $user_id ? $user_id : self::getId(); + return Societe::promoteurByUser($user_id)->first(); + } + + public static function getInfo($id = false) + { + return self::getWithDetail($id); + } + + public static function getWithDetail($id = false) + { + $id = $id ? $id : self::getId(); + return User::where('id', $id)->with(['user_detail'])->first(); + } + + public static function getEmailsByRole($role) { + return User::select('id','email')->whereRoleIs($role)->get()->toArray(); + } + + public static function getIdsByRole($role) { + return User::select('id')->whereRoleIs($role)->get()->pluck('id')->toArray(); + } + + public static function getListByRole($role) + { + return self::selectOptions()->orderBy('nom', 'asc')->whereRoleIs($role)->get(); + } + + public static function getOptions() + { + return self::selectOptions()->get(); + } + + public static function selectOptions() + { + return User::select('id', DB::raw("concat(last_name,' ',first_name) as nom")); + } + + public static function hasRole($role) + { + $user = self::get(); + return $user ? $user->hasRole($role) : false; + } + + public static function getId() + { + return self::getUser()->id; + } + + public static function get($id = false) + { + $id = $id ? $id : self::getId(); + return User::find($id); + } + + public static function getUser() + { + return Auth::user(); + } + + public static function isConnected() + { + return Auth::check(); + } + + public static function delete($id) + { + $t = RoleUser::byUser($id)->delete(); + return User::destroy($id); + } + + public static function getByTeam($id) + { + return User::byTeam($id)->get(); + } + + public static function getByUniqueTeam($id) + { + return User::byTeam($id)->byUniqueTeam()->get(); + } + + public static function destroyByUniqueTeam($id) + { + return User::byTeam($id)->byUniqueTeam()->delete(); + } + + // récupère les champs de la table + public static function get_field_table() + { + return $this->getConnection()->getSchemaBuilder()->getColumnListing($this->getTable()); + } + + // ajoute un utilisateur + public static function insert($data) + { + return User::create($data); + } + + // récupère tous les utilisateurs + public static function select_all() + { + return User::all()->toArray(); + } + + + // met à jour les informations d'un utilisateur + public static function update(Request $request) + { + return User::find($data['id'])->update($data); + } + + // met à jour le mot de passe d'un utilisateur + public static function update_password($id, $password) + { + $user = User::find($id); + $user->password = Hash::make($password); + return $user->save(); + } +} diff --git a/app/Twiggy.php b/app/Twiggy.php new file mode 100644 index 00000000..f79f51db --- /dev/null +++ b/app/Twiggy.php @@ -0,0 +1,111 @@ +get('menu_admin')->asUl(); + } + + public function pretty_date($date) + { + $time = strtotime($date); + $now = time(); + $ago = $now - $time; + $futur = 0; + + if ($ago < 0) { + $ago = (-1 * $ago); + $futur = 1; + } + + if ($ago < 60) { + $when = round($ago); + $s = ($when == 1) ? "seconde" : "secondes"; + $txt = "$when $s"; + } elseif ($ago < 3600) { + $when = round($ago / 60); + $m = ($when == 1) ? "minute" : "minutes"; + $txt = "$when $m"; + } elseif ($ago >= 3600 && $ago < 86400) { + $when = round($ago / 60 / 60); + $h = ($when == 1) ? "heure" : "heures"; + $txt = "$when $h"; + } elseif ($ago >= 86400 && $ago < 2629743.83) { + $when = round($ago / 60 / 60 / 24); + $d = ($when == 1) ? "jour" : "jours"; + $txt = "$when $d"; + } elseif ($ago >= 2629743.83 && $ago < 31556926) { + $when = round($ago / 60 / 60 / 24 / 30.4375); + $m = "mois"; + $txt = "$when $m"; + } else { + $when = round($ago / 60 / 60 / 24 / 365); + $y = ($when == 1) ? "an" : "ans"; + $txt = "$when $y"; + } + + if ($futur) { + $txt = "dans " . $txt; + } else { + $txt = "il y a " . $txt; + } + return $txt; + } +} diff --git a/app/Update.php b/app/Update.php new file mode 100644 index 00000000..3ebd2bb6 --- /dev/null +++ b/app/Update.php @@ -0,0 +1,32 @@ +external('composer', 'install', '--no-dev', '--prefer-dist', '--optimize-autoloader') + ->external('npm', 'install', '--production') + ->external('npm', 'run', 'production') + ->artisan('route:cache') + ->artisan('config:cache') + ->artisan('event:cache') + ->artisan('migrate', ['--force' => true]) + ->artisan('cache:clear') + ->artisan('queue:restart'); // ->artisan('horizon:terminate'); + } + + public function local(Runner $run) + { + return $run + ->external('composer', 'install') + ->external('npm', 'install') + ->external('npm', 'run', 'development') + ->artisan('migrate') + ->artisan('cache:clear'); + } +} diff --git a/app/User.php b/app/User.php index e79dab7f..ebbae15a 100644 --- a/app/User.php +++ b/app/User.php @@ -2,32 +2,70 @@ namespace App; +use Carbon\Carbon; use Illuminate\Contracts\Auth\MustVerifyEmail; +use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Laratrust\Traits\LaratrustUserTrait; +use Mpociot\Teamwork\Traits\UserHasTeams; +use Sebastienheyd\Boilerplate\Notifications\NewUser as NewUserNotification; +use Sebastienheyd\Boilerplate\Notifications\ResetPassword as ResetPasswordNotification; + +/** + * Sebastienheyd\Boilerplate\Models\User. + * + * @property int $id + * @property bool $active + * @property string $first_name + * @property string $last_name + * @property string $email + * @property string $password + * @property string $remember_token + * @property \Carbon\Carbon $created_at + * @property \Carbon\Carbon $updated_at + * @property string $deleted_at + * @property string $last_login + * @property-read string|false $avatar_path + * @property-read string $avatar_url + * @property-read mixed $name + * @property-read \Illuminate\Notifications\DatabaseNotificationCollection|\Illuminate\Notifications\DatabaseNotification[] $notifications + * @property-read \Illuminate\Database\Eloquent\Collection|\Sebastienheyd\Boilerplate\Models\Permission[] $permissions + * @property-read \Illuminate\Database\Eloquent\Collection|\Sebastienheyd\Boilerplate\Models\Role[] $roles + * + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereActive($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereCreatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereDeletedAt($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereEmail($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereFirstName($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereId($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereLastLogin($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereLastName($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User wherePassword($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereRememberToken($value) + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereRoleIs($role = '') + * @method static \Illuminate\Database\Query\Builder|\Sebastienheyd\Boilerplate\Models\User whereUpdatedAt($value) + * @mixin \Eloquent + */ + class User extends Authenticatable { use Notifiable; + use LaratrustUserTrait; + use SoftDeletes; + use UserHasTeams; /** * The attributes that are mass assignable. * * @var array */ - protected $fillable = [ - 'name', 'email', 'password', - ]; + protected $fillable = ['active', 'last_name', 'first_name', 'email', 'password', 'remember_token', 'last_login']; - /** - * The attributes that should be hidden for arrays. - * - * @var array - */ - protected $hidden = [ - 'password', 'remember_token', - ]; + protected $hidden = ['password', 'remember_token']; + /** * The attributes that should be cast to native types. * @@ -36,4 +74,169 @@ class User extends Authenticatable protected $casts = [ 'email_verified_at' => 'datetime', ]; + + public function user_detail() + { + return $this->hasOne('App\Models\UserDetail'); + } + + public function teams2() + { + return $this->hasManyThrough('App\Team', 'App\Models\TeamUser', 'user_id', 'id', 'id', 'team_id'); + } + + public function scopeByTeam($query, $id) + { + return $query->whereHas('teams2', function ($query) use ($id) { + $query->where('id', $id); + }); + } + + public function scopeByUniqueTeam($query) + { + return $query->has('teams2', '=', 1); + } + + public function scopeBySociete($query, $id) + { + return $query->whereHas('teams2', function ($query) use ($id) { + $query->bySociete($id); + }); + } + + public function scopeByPartenaire($query, $id) + { + return $query->whereHas('teams2', function ($query) use ($id) { + $query->byPartenaire($id); + }); + } + + public function scopeActive($query) + { + return $query->where('active', 1); + } + + /** + * Send the password reset notification. + * + * @param string $token + * + * @return void + */ + public function sendPasswordResetNotification($token) + { + $this->notify(new ResetPasswordNotification($token)); + } + + /** + * Send notification when a new user is created. + * + * @param string $token + */ + public function sendNewUserNotification($token) + { + $this->notify(new NewUserNotification($token, $this)); + } + + /** + * Return last name in uppercase by default. + * + * @param $value + * + * @return string + */ + public function getLastNameAttribute($value) + { + return mb_strtoupper($value); + } + + /** + * Return first name with first char of every word in uppercase. + * + * @param $value + * + * @return string + */ + public function getFirstNameAttribute($value) + { + return mb_convert_case($value, MB_CASE_TITLE); + } + + /** + * Return a concatenation of first name and last_name if field name does not exists. + * + * @param $value + * + * @return string + */ + public function getNameAttribute($value) + { + if (!empty($value)) { + return $value; + } + + return $this->first_name.' '.$this->last_name; + } + + /** + * Return last login date formatted. + * + * @param string $format + * @param string $default + * + * @return mixed|string + */ + public function getLastLogin($format = 'YYYY-MM-DD HH:mm:ss', $default = '') + { + if ($this->last_login === null) { + return $default; + } + + return Carbon::createFromTimeString($this->last_login)->isoFormat($format); + } + + /** + * Return role list as a string. + * + * @return string + */ + public function getRolesList() + { + $res = []; + foreach ($this->roles as $role) { + $res[] = __($role->display_name); + } + if (empty($res)) { + return '-'; + } + + return implode(', ', $res); + } + + /** + * Check if current user has an avatar. + * + * @return string|false + */ + public function getAvatarPathAttribute() + { + return public_path('images/avatars/'.md5($this->id.$this->email).'.jpg'); + } + + /** + * Return current user avatar uri. + * + * @return string + */ + public function getAvatarUrlAttribute() + { + if (is_file($this->avatar_path)) { + $ts = filemtime($this->avatar_path); + + return asset('images/avatars/'.md5($this->id.$this->email).'.jpg?t='.$ts); + } + + return asset('/assets/vendor/boilerplate/images/default-user.png'); + } + } diff --git a/artisan b/artisan new file mode 100644 index 00000000..5c23e2e2 --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +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 +| 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. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/composer.json b/composer.json index d28160c0..44ea1eae 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { - "name": "laravel/laravel", + "name": "humanet/opensem", "type": "project", - "description": "The Laravel Framework.", + "description": "Gestion ERP/E-Commerce de semences", "keywords": [ "framework", "laravel" @@ -9,17 +9,91 @@ "license": "MIT", "require": { "php": "^7.2", + "arcanedev/log-viewer": "^7.0", + "arrilot/laravel-widgets": "^3.13", + "awssat/laravel-sync-migration": "^0.2", + "box/spout": "^3.1", + "browner12/helpers": "^3.0", + "coduo/php-humanizer": "^3.0", + "consoletvs/charts": "^6.5", + "cornford/googlmapper": "^3.0", + "datatables/datatables": "^1.10", + "eduardokum/laravel-mail-auto-embed": "^1.0", + "erjanmx/laravel-migrate-check": "^1.3", + "exyplis/eloquent-builder-macros": "^1.5", "fideloper/proxy": "^4.0", + "geo6/geocoder-php-addok-provider": "^1.1", + "gzero/eloquent-tree": "^3.1", + "hassankhan/config": "^2.1", + "intervention/image": "^2.5", + "intervention/imagecache": "^2.4", + "jasonlewis/expressive-date": "^1.0", + "jenssegers/date": "^3.5", + "jrean/laravel-user-verification": "^8.0", + "kalnoy/nestedset": "^5.0", + "laracasts/utilities": "^3.0", "laravel/framework": "^6.2", - "laravel/tinker": "^2.0", - "sebastienheyd/boilerplate": "^7.1" + "laravel/scout": "^7.2", + "laravel/ui": "^1.0", + "laravelcollective/html": "^6.0", + "league/climate": "^3.5", + "league/period": "^4.9", + "maatwebsite/excel": "^3.1", + "mad-web/laravel-initializer": "^3.0", + "mediactive-digital/migrations-generator": "^2.0", + "moneyphp/money": "^3.3", + "mpdf/mpdf": "^8.0", + "mpociot/teamwork": "^5.3", + "mtolhuys/laravel-schematics": "^0.10.1", + "nicmart/tree": "^0.2.7", + "olssonm/laravel-backup-shield": "^3.1", + "orangehill/iseed": "^2.6", + "payum/payum": "^1.6", + "php-console/php-console": "^3.1", + "proengsoft/laravel-jsvalidation": "^3.0", + "qoraiche/laravel-mail-editor": "^1.3", + "rcrowe/twigbridge": "^0.11.3", + "respect/validation": "^1.1", + "rinvex/laravel-categories": "^3.0", + "rtconner/laravel-tagging": "^4.0", + "rutorika/sortable": "^7.0", + "santigarcor/laratrust": "^5.2", + "sebastienheyd/boilerplate": "^7.0", + "sensiolabs/security-checker": "^6.0", + "sheub/ban-france-provider": "^1.0@dev", + "smajohusic/laravel-mail-logger": "^1.0", + "soved/laravel-gdpr": "^1.5", + "spatie/laravel-activitylog": "^3.6", + "spatie/laravel-backup": "^6.2", + "spatie/laravel-medialibrary": "^7.0", + "staudenmeir/eloquent-has-many-deep": "^1.8", + "stillat/numeral.php": "^2.0", + "te7a-houdini/laroute": "^1.0", + "themsaid/laravel-mail-preview": "^3.0", + "toin0u/geocoder-laravel": "^4.2", + "twig/extensions": "^1.5", + "unicodeveloper/laravel-password": "^1.0", + "voku/stringy": "^6.2", + "watson/rememberable": "^3.0", + "yadahan/laravel-authentication-log": "^1.2", + "yajra/laravel-datatables": "^1.5" }, "require-dev": { + "barryvdh/laravel-debugbar": "^3.2", + "beyondcode/laravel-dump-server": "^1.3", + "beyondcode/laravel-er-diagram-generator": "^1.4", + "daniel-werner/php-quality-tools": "^1.2", "facade/ignition": "^1.4", "fzaninotto/faker": "^1.9.1", + "laravel/tinker": "^2.2", "mockery/mockery": "^1.0", "nunomaduro/collision": "^3.0", - "phpunit/phpunit": "^8.0" + "nunomaduro/larastan": "^0.5.2", + "nunomaduro/phpinsights": "^1.13", + "phpunit/phpunit": "^8.0", + "sayeed/custom-migrate": "^1.0", + "theseer/phpdox": "^0.12.0", + "wnx/laravel-stats": "^2.0" }, "config": { "optimize-autoloader": true, @@ -49,7 +123,6 @@ "prefer-stable": true, "scripts": { "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-root-package-install": [ diff --git a/config/authentication-log.php b/config/authentication-log.php new file mode 100644 index 00000000..4dc8e926 --- /dev/null +++ b/config/authentication-log.php @@ -0,0 +1,28 @@ + env('AUTHENTICATION_LOG_NOTIFY', true), + + /* + |-------------------------------------------------------------------------- + | Old Logs Clear + |-------------------------------------------------------------------------- + | + | When the clean-command is executed, all authentication logs older than + | the number of days specified here will be deleted. + | + */ + + 'older' => 365, + +]; diff --git a/config/backup-shield.php b/config/backup-shield.php new file mode 100644 index 00000000..60574e04 --- /dev/null +++ b/config/backup-shield.php @@ -0,0 +1,12 @@ + env('APP_KEY'), + 'encryption' => \Olssonm\BackupShield\Encryption::ENCRYPTION_DEFAULT + + // Available encryption methods: + // \Olssonm\BackupShield\Encryption::ENCRYPTION_DEFAULT (PHP < 7.2: PKWARE/ZipCrypto, PHP >= 7.2: AES 128) + // \Olssonm\BackupShield\Encryption::ENCRYPTION_WINZIP_AES_128 (AES 128) + // \Olssonm\BackupShield\Encryption::ENCRYPTION_WINZIP_AES_192 (AES 192) + // \Olssonm\BackupShield\Encryption::ENCRYPTION_WINZIP_AES_256 (AES 256) + ]; diff --git a/config/backup.php b/config/backup.php new file mode 100644 index 00000000..bdc9379e --- /dev/null +++ b/config/backup.php @@ -0,0 +1,231 @@ + [ + + /* + * The name of this application. You can use this name to monitor + * the backups. + */ + 'name' => env('APP_NAME', 'laravel-backup'), + + 'source' => [ + + 'files' => [ + + /* + * The list of directories and files that will be included in the backup. + */ + 'include' => [ + base_path(), + ], + + /* + * These directories and files will be excluded from the backup. + * + * Directories used by the backup process will automatically be excluded. + */ + 'exclude' => [ + base_path('vendor'), + base_path('node_modules'), + ], + + /* + * Determines if symlinks should be followed. + */ + 'follow_links' => false, + ], + + /* + * The names of the connections to the databases that should be backed up + * MySQL, PostgreSQL, SQLite and Mongo databases are supported. + * + * The content of the database dump may be customized for each connection + * by adding a 'dump' key to the connection settings in config/database.php. + * E.g. + * 'mysql' => [ + * ... + * 'dump' => [ + * 'excludeTables' => [ + * 'table_to_exclude_from_backup', + * 'another_table_to_exclude' + * ] + * ], + * ], + * + * If you are using only InnoDB tables on a MySQL server, you can + * also supply the useSingleTransaction option to avoid table locking. + * + * E.g. + * 'mysql' => [ + * ... + * 'dump' => [ + * 'useSingleTransaction' => true, + * ], + * ], + * + * For a complete list of available customization options, see https://github.com/spatie/db-dumper + */ + 'databases' => [ + 'mysql', + ], + ], + + /* + * The database dump can be compressed to decrease diskspace usage. + * + * Out of the box Laravel-backup supplies + * Spatie\DbDumper\Compressors\GzipCompressor::class. + * + * You can also create custom compressor. More info on that here: + * https://github.com/spatie/db-dumper#using-compression + * + * If you do not want any compressor at all, set it to null. + */ + 'database_dump_compressor' => null, + + 'destination' => [ + + /* + * The filename prefix used for the backup zip file. + */ + 'filename_prefix' => '', + + /* + * The disk names on which the backups will be stored. + */ + 'disks' => [ + 'local', + ], + ], + + /* + * The directory where the temporary files will be stored. + */ + 'temporary_directory' => storage_path('app/backup-temp'), + ], + + /* + * You can get notified when specific events occur. Out of the box you can use 'mail' and 'slack'. + * For Slack you need to install guzzlehttp/guzzle and laravel/slack-notification-channel. + * + * You can also use your own notification classes, just make sure the class is named after one of + * the `Spatie\Backup\Events` classes. + */ + 'notifications' => [ + + 'notifications' => [ + \Spatie\Backup\Notifications\Notifications\BackupHasFailed::class => ['mail'], + \Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFound::class => ['mail'], + \Spatie\Backup\Notifications\Notifications\CleanupHasFailed::class => ['mail'], + \Spatie\Backup\Notifications\Notifications\BackupWasSuccessful::class => ['mail'], + \Spatie\Backup\Notifications\Notifications\HealthyBackupWasFound::class => ['mail'], + \Spatie\Backup\Notifications\Notifications\CleanupWasSuccessful::class => ['mail'], + ], + + /* + * Here you can specify the notifiable to which the notifications should be sent. The default + * notifiable will use the variables specified in this config file. + */ + 'notifiable' => \Spatie\Backup\Notifications\Notifiable::class, + + 'mail' => [ + 'to' => 'your@example.com', + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + ], + + 'slack' => [ + 'webhook_url' => '', + + /* + * If this is set to null the default channel of the webhook will be used. + */ + 'channel' => null, + + 'username' => null, + + 'icon' => null, + + ], + ], + + /* + * Here you can specify which backups should be monitored. + * If a backup does not meet the specified requirements the + * UnHealthyBackupWasFound event will be fired. + */ + 'monitor_backups' => [ + [ + 'name' => env('APP_NAME', 'laravel-backup'), + 'disks' => ['local'], + 'health_checks' => [ + \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1, + \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000, + ], + ], + + /* + [ + 'name' => 'name of the second app', + 'disks' => ['local', 's3'], + 'health_checks' => [ + \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumAgeInDays::class => 1, + \Spatie\Backup\Tasks\Monitor\HealthChecks\MaximumStorageInMegabytes::class => 5000, + ], + ], + */ + ], + + 'cleanup' => [ + /* + * The strategy that will be used to cleanup old backups. The default strategy + * will keep all backups for a certain amount of days. After that period only + * a daily backup will be kept. After that period only weekly backups will + * be kept and so on. + * + * No matter how you configure it the default strategy will never + * delete the newest backup. + */ + 'strategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class, + + 'default_strategy' => [ + + /* + * The number of days for which backups must be kept. + */ + 'keep_all_backups_for_days' => 7, + + /* + * The number of days for which daily backups must be kept. + */ + 'keep_daily_backups_for_days' => 16, + + /* + * The number of weeks for which one weekly backup must be kept. + */ + 'keep_weekly_backups_for_weeks' => 8, + + /* + * The number of months for which one monthly backup must be kept. + */ + 'keep_monthly_backups_for_months' => 4, + + /* + * The number of years for which one yearly backup must be kept. + */ + 'keep_yearly_backups_for_years' => 2, + + /* + * After cleaning up the backups remove the oldest backup until + * this amount of megabytes has been reached. + */ + 'delete_oldest_backups_when_using_more_megabytes_than' => 5000, + ], + ], + +]; diff --git a/config/boilerplate/app.php b/config/boilerplate/app.php index 4c6ed021..759b1e14 100644 --- a/config/boilerplate/app.php +++ b/config/boilerplate/app.php @@ -8,7 +8,7 @@ return [ 'domain' => '', // Redirect to this route after login - 'redirectTo' => 'boilerplate.dashboard', + 'redirectTo' => 'Shop.Admin.dashboard', // Backend locale 'locale' => config('app.locale'), diff --git a/config/boilerplate/menu.php b/config/boilerplate/menu.php index 76b54dc1..75b4f332 100644 --- a/config/boilerplate/menu.php +++ b/config/boilerplate/menu.php @@ -1,6 +1,6 @@ \Sebastienheyd\Boilerplate\Controllers\DashboardController::class, // Dashboard controller to use + 'dashboard' => \App\Http\Controllers\Shop\Admin\DashboardController::class, // Dashboard controller to use 'providers' => [], // Additional menu items providers ]; diff --git a/config/boilerplate/themes/default.php b/config/boilerplate/themes/default.php index 281d7132..51a6e93b 100644 --- a/config/boilerplate/themes/default.php +++ b/config/boilerplate/themes/default.php @@ -21,15 +21,15 @@ return [ 'border' => false, 'compact' => false, 'links' => [ - 'bg' => 'blue', + 'bg' => 'green', 'shadow' => 1, ], 'brand' => [ 'bg' => 'gray-dark', 'logo' => [ - 'bg' => 'blue', + 'bg' => 'green', 'icon' => '', - 'text' => 'BOilerplate', + 'text' => 'OpenSem', 'shadow' => 2, ], ], @@ -40,7 +40,7 @@ return [ ], 'footer' => [ 'visible' => true, - 'vendorname' => 'Boilerplate', + 'vendorname' => 'OpenSem', 'vendorlink' => '', ], 'card' => [ diff --git a/config/charts.php b/config/charts.php new file mode 100644 index 00000000..b1a19c4e --- /dev/null +++ b/config/charts.php @@ -0,0 +1,15 @@ + 'Chartjs', +]; diff --git a/config/datatables-buttons.php b/config/datatables-buttons.php new file mode 100644 index 00000000..54bd7871 --- /dev/null +++ b/config/datatables-buttons.php @@ -0,0 +1,90 @@ + [ + /* + * Base namespace/directory to create the new file. + * This is appended on default Laravel namespace. + * Usage: php artisan datatables:make User + * Output: App\DataTables\UserDataTable + * With Model: App\User (default model) + * Export filename: users_timestamp + */ + 'base' => 'DataTables', + + /* + * Base namespace/directory where your model's are located. + * This is appended on default Laravel namespace. + * Usage: php artisan datatables:make Post --model + * Output: App\DataTables\PostDataTable + * With Model: App\Post + * Export filename: posts_timestamp + */ + 'model' => '', + ], + + /* + * Set Custom stub folder + */ + //'stub' => '/resources/custom_stub', + + /* + * PDF generator to be used when converting the table to pdf. + * Available generators: excel, snappy + * Snappy package: barryvdh/laravel-snappy + * Excel package: maatwebsite/excel + */ + 'pdf_generator' => 'snappy', + + /* + * Snappy PDF options. + */ + 'snappy' => [ + 'options' => [ + 'no-outline' => true, + 'margin-left' => '0', + 'margin-right' => '0', + 'margin-top' => '10mm', + 'margin-bottom' => '10mm', + ], + 'orientation' => 'landscape', + ], + + /* + * Default html builder parameters. + */ + 'parameters' => [ + 'dom' => 'Bfrtip', + 'order' => [[0, 'desc']], + 'buttons' => [ + 'create', + 'export', + 'print', + 'reset', + 'reload', + ], + ], + + /* + * Generator command default options value. + */ + 'generator' => [ + /* + * Default columns to generate when not set. + */ + 'columns' => 'id,add your columns,created_at,updated_at', + + /* + * Default buttons to generate when not set. + */ + 'buttons' => 'create,export,print,reset,reload', + + /* + * Default DOM to generate when not set. + */ + 'dom' => 'Bfrtip', + ], +]; diff --git a/config/datatables-fractal.php b/config/datatables-fractal.php new file mode 100644 index 00000000..25f547a8 --- /dev/null +++ b/config/datatables-fractal.php @@ -0,0 +1,13 @@ + 'include', + + /* + * Default fractal serializer. + */ + 'serializer' => League\Fractal\Serializer\DataArraySerializer::class, +]; diff --git a/config/datatables-html.php b/config/datatables-html.php new file mode 100644 index 00000000..2b0995fd --- /dev/null +++ b/config/datatables-html.php @@ -0,0 +1,27 @@ + [ + 'class' => 'table', + 'id' => 'dataTableBuilder', + ], + + /* + * Default condition to determine if a parameter is a callback or not. + * Callbacks needs to start by those terms or they will be casted to string. + */ + 'callback' => ['$', '$.', 'function'], + + /* + * Html builder script template. + */ + 'script' => 'datatables::script', + + /* + * Html builder script template for DataTables Editor integration. + */ + 'editor' => 'datatables::editor', +]; diff --git a/config/debug-server.php b/config/debug-server.php new file mode 100644 index 00000000..f897262f --- /dev/null +++ b/config/debug-server.php @@ -0,0 +1,8 @@ + 'tcp://127.0.0.1:9912', +]; diff --git a/config/debugbar.php b/config/debugbar.php new file mode 100644 index 00000000..3275f105 --- /dev/null +++ b/config/debugbar.php @@ -0,0 +1,202 @@ + env('DEBUGBAR_ENABLED', null), + 'except' => [ + 'telescope*' + ], + + /* + |-------------------------------------------------------------------------- + | Storage settings + |-------------------------------------------------------------------------- + | + | DebugBar stores data for session/ajax requests. + | You can disable this, so the debugbar stores data in headers/session, + | but this can cause problems with large data collectors. + | By default, file storage (in the storage folder) is used. Redis and PDO + | can also be used. For PDO, run the package migrations first. + | + */ + 'storage' => [ + 'enabled' => true, + 'driver' => 'file', // redis, file, pdo, custom + 'path' => storage_path('debugbar'), // For file driver + 'connection' => null, // Leave null for default connection (Redis/PDO) + 'provider' => '' // Instance of StorageInterface for custom driver + ], + + /* + |-------------------------------------------------------------------------- + | Vendors + |-------------------------------------------------------------------------- + | + | Vendor files are included by default, but can be set to false. + | This can also be set to 'js' or 'css', to only include javascript or css vendor files. + | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files) + | and for js: jquery and and highlight.js + | So if you want syntax highlighting, set it to true. + | jQuery is set to not conflict with existing jQuery scripts. + | + */ + + 'include_vendors' => true, + + /* + |-------------------------------------------------------------------------- + | Capture Ajax Requests + |-------------------------------------------------------------------------- + | + | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors), + | you can use this option to disable sending the data through the headers. + | + | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools. + */ + + 'capture_ajax' => true, + 'add_ajax_timing' => false, + + /* + |-------------------------------------------------------------------------- + | Custom Error Handler for Deprecated warnings + |-------------------------------------------------------------------------- + | + | When enabled, the Debugbar shows deprecated warnings for Symfony components + | in the Messages tab. + | + */ + 'error_handler' => false, + + /* + |-------------------------------------------------------------------------- + | Clockwork integration + |-------------------------------------------------------------------------- + | + | The Debugbar can emulate the Clockwork headers, so you can use the Chrome + | Extension, without the server-side code. It uses Debugbar collectors instead. + | + */ + 'clockwork' => false, + + /* + |-------------------------------------------------------------------------- + | DataCollectors + |-------------------------------------------------------------------------- + | + | Enable/disable DataCollectors + | + */ + + 'collectors' => [ + 'phpinfo' => true, // Php version + 'messages' => true, // Messages + 'time' => true, // Time Datalogger + 'memory' => true, // Memory usage + 'exceptions' => true, // Exception displayer + 'log' => true, // Logs from Monolog (merged in messages if enabled) + 'db' => true, // Show database (PDO) queries and bindings + 'views' => true, // Views with their data + 'route' => true, // Current route information + 'auth' => false, // Display Laravel authentication status + 'gate' => true, // Display Laravel Gate checks + 'session' => true, // Display session data + 'symfony_request' => true, // Only one can be enabled.. + 'mail' => true, // Catch mail messages + 'laravel' => false, // Laravel version and environment + 'events' => false, // All events fired + 'default_request' => false, // Regular or special Symfony request logger + 'logs' => false, // Add the latest log messages + 'files' => false, // Show the included files + 'config' => false, // Display config settings + 'cache' => false, // Display cache events + 'models' => false, // Display models + ], + + /* + |-------------------------------------------------------------------------- + | Extra options + |-------------------------------------------------------------------------- + | + | Configure some DataCollectors + | + */ + + 'options' => [ + 'auth' => [ + 'show_name' => true, // Also show the users name/email in the debugbar + ], + 'db' => [ + 'with_params' => true, // Render SQL with the parameters substituted + 'backtrace' => true, // Use a backtrace to find the origin of the query in your files. + 'timeline' => false, // Add the queries to the timeline + 'explain' => [ // Show EXPLAIN output on queries + 'enabled' => false, + 'types' => ['SELECT'], // // workaround ['SELECT'] only. https://github.com/barryvdh/laravel-debugbar/issues/888 ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+ + ], + 'hints' => true, // Show hints for common mistakes + ], + 'mail' => [ + 'full_log' => false + ], + 'views' => [ + 'data' => false, //Note: Can slow down the application, because the data can be quite large.. + ], + 'route' => [ + 'label' => true // show complete route on bar + ], + 'logs' => [ + 'file' => null + ], + 'cache' => [ + 'values' => true // collect cache values + ], + ], + + /* + |-------------------------------------------------------------------------- + | Inject Debugbar in Response + |-------------------------------------------------------------------------- + | + | Usually, the debugbar is added just before , by listening to the + | Response after the App is done. If you disable this, you have to add them + | in your template yourself. See http://phpdebugbar.com/docs/rendering.html + | + */ + + 'inject' => true, + + /* + |-------------------------------------------------------------------------- + | DebugBar route prefix + |-------------------------------------------------------------------------- + | + | Sometimes you want to set route prefix to be used by DebugBar to load + | its resources from. Usually the need comes from misconfigured web server or + | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97 + | + */ + 'route_prefix' => '_debugbar', + + /* + |-------------------------------------------------------------------------- + | DebugBar route domain + |-------------------------------------------------------------------------- + | + | By default DebugBar route served from the same domain that request served. + | To override default domain, specify it as a non-empty value. + */ + 'route_domain' => null, +]; diff --git a/config/erd-generator.php b/config/erd-generator.php new file mode 100644 index 00000000..0d8e346a --- /dev/null +++ b/config/erd-generator.php @@ -0,0 +1,115 @@ + [ + base_path('app'), + ], + + /* + * If you want to ignore complete models or certain relations of a specific model, + * you can specify them here. + * To ignore a model completely, just add the fully qualified classname. + * To ignore only a certain relation of a model, enter the classname as the key + * and an array of relation names to ignore. + */ + 'ignore' => [ + // User::class, + // Post::class => [ + // 'user' + // ] + ], + + /* + * If true, all directories specified will be scanned recursively for models. + * Set this to false if you prefer to explicitly define each directory that should + * be scanned for models. + */ + 'recursive' => true, + + /* + * The generator will automatically try to look up the model specific columns + * and add them to the generated output. If you do not wish to use this + * feature, you can disable it here. + */ + 'use_db_schema' => true, + + /* + * This setting toggles weather the column types (VARCHAR, INT, TEXT, etc.) + * should be visible on the generated diagram. This option requires + * 'use_db_schema' to be set to true. + */ + 'use_column_types' => true, + + /* + * These colors will be used in the table representation for each entity in + * your graph. + */ + 'table' => [ + 'header_background_color' => '#d3d3d3', + 'header_font_color' => '#333333', + 'row_background_color' => '#ffffff', + 'row_font_color' => '#333333', + ], + + /* + * Here you can define all the available Graphviz attributes that should be applied to your graph, + * to its nodes and to the edge (the connection between the nodes). Depending on the size of + * your diagram, different settings might produce better looking results for you. + * + * See http://www.graphviz.org/doc/info/attrs.html#d:label for a full list of attributes. + */ + 'graph' => [ + 'style' => 'filled', + 'bgcolor' => '#F7F7F7', + 'fontsize' => 12, + 'labelloc' => 't', + 'concentrate' => true, + 'splines' => 'polyline', + 'overlap' => false, + 'nodesep' => 1, + 'rankdir' => 'LR', + 'pad' => 0.5, + 'ranksep' => 2, + 'esep' => true, + 'fontname' => 'Helvetica Neue' + ], + + 'node' => [ + 'margin' => 0, + 'shape' => 'rectangle', + 'fontname' => 'Helvetica Neue' + ], + + 'edge' => [ + 'color' => '#003049', + 'penwidth' => 1.8, + 'fontname' => 'Helvetica Neue' + ], + + 'relations' => [ + 'HasOne' => [ + 'dir' => 'both', + 'color' => '#D62828', + 'arrowhead' => 'tee', + 'arrowtail' => 'none', + ], + 'BelongsTo' => [ + 'dir' => 'both', + 'color' => '#F77F00', + 'arrowhead' => 'tee', + 'arrowtail' => 'crow', + ], + 'HasMany' => [ + 'dir' => 'both', + 'color' => '#FCBF49', + 'arrowhead' => 'crow', + 'arrowtail' => 'none', + ], + ] + +]; diff --git a/config/excel.php b/config/excel.php new file mode 100644 index 00000000..fa3e12b2 --- /dev/null +++ b/config/excel.php @@ -0,0 +1,186 @@ + [ + + /* + |-------------------------------------------------------------------------- + | Chunk size + |-------------------------------------------------------------------------- + | + | When using FromQuery, the query is automatically chunked. + | Here you can specify how big the chunk should be. + | + */ + 'chunk_size' => 1000, + + /* + |-------------------------------------------------------------------------- + | Pre-calculate formulas during export + |-------------------------------------------------------------------------- + */ + 'pre_calculate_formulas' => false, + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV exports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'line_ending' => PHP_EOL, + 'use_bom' => false, + 'include_separator_line' => false, + 'excel_compatibility' => false, + ], + ], + + 'imports' => [ + + 'read_only' => true, + + 'heading_row' => [ + + /* + |-------------------------------------------------------------------------- + | Heading Row Formatter + |-------------------------------------------------------------------------- + | + | Configure the heading row formatter. + | Available options: none|slug|custom + | + */ + 'formatter' => 'slug', + ], + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV imports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'escape_character' => '\\', + 'contiguous' => false, + 'input_encoding' => 'UTF-8', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Extension detector + |-------------------------------------------------------------------------- + | + | Configure here which writer type should be used when + | the package needs to guess the correct type + | based on the extension alone. + | + */ + 'extension_detector' => [ + 'xlsx' => Excel::XLSX, + 'xlsm' => Excel::XLSX, + 'xltx' => Excel::XLSX, + 'xltm' => Excel::XLSX, + 'xls' => Excel::XLS, + 'xlt' => Excel::XLS, + 'ods' => Excel::ODS, + 'ots' => Excel::ODS, + 'slk' => Excel::SLK, + 'xml' => Excel::XML, + 'gnumeric' => Excel::GNUMERIC, + 'htm' => Excel::HTML, + 'html' => Excel::HTML, + 'csv' => Excel::CSV, + 'tsv' => Excel::TSV, + + /* + |-------------------------------------------------------------------------- + | PDF Extension + |-------------------------------------------------------------------------- + | + | Configure here which Pdf driver should be used by default. + | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF + | + */ + 'pdf' => Excel::DOMPDF, + ], + + 'value_binder' => [ + + /* + |-------------------------------------------------------------------------- + | Default Value Binder + |-------------------------------------------------------------------------- + | + | PhpSpreadsheet offers a way to hook into the process of a value being + | written to a cell. In there some assumptions are made on how the + | value should be formatted. If you want to change those defaults, + | you can implement your own default value binder. + | + */ + 'default' => Maatwebsite\Excel\DefaultValueBinder::class, + ], + + 'transactions' => [ + + /* + |-------------------------------------------------------------------------- + | Transaction Handler + |-------------------------------------------------------------------------- + | + | By default the import is wrapped in a transaction. This is useful + | for when an import may fail and you want to retry it. With the + | transactions, the previous import gets rolled-back. + | + | You can disable the transaction handler by setting this to null. + | Or you can choose a custom made transaction handler here. + | + | Supported handlers: null|db + | + */ + 'handler' => 'db', + ], + + 'temporary_files' => [ + + /* + |-------------------------------------------------------------------------- + | Local Temporary Path + |-------------------------------------------------------------------------- + | + | When exporting and importing files, we use a temporary file, before + | storing reading or downloading. Here you can customize that path. + | + */ + 'local_path' => sys_get_temp_dir(), + + /* + |-------------------------------------------------------------------------- + | Remote Temporary Disk + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup with queues in which you + | cannot rely on having a shared local temporary path, you might + | want to store the temporary file on a shared disk. During the + | queue executing, we'll retrieve the temporary file from that + | location instead. When left to null, it will always use + | the local path. This setting only has effect when using + | in conjunction with queued imports and exports. + | + */ + 'remote_disk' => null, + 'remote_prefix' => null, + + ], +]; diff --git a/config/gdpr.php b/config/gdpr.php new file mode 100644 index 00000000..32bd457c --- /dev/null +++ b/config/gdpr.php @@ -0,0 +1,74 @@ + 'gdpr', + + /* + |-------------------------------------------------------------------------- + | Route Middleware + |-------------------------------------------------------------------------- + | + | These middleware are run during every request to the GDPR routes. Please + | keep in mind to only allow authenticated users to access the routes. + | + */ + + 'middleware' => [ + 'web', + 'auth', + ], + + /* + |-------------------------------------------------------------------------- + | Re-authentication + |-------------------------------------------------------------------------- + | + | Only authenticated users should be able to download their data. + | Re-authentication is recommended to prevent information leakage. + | + */ + + 're-authenticate' => true, + + /* + |-------------------------------------------------------------------------- + | Cleanup Strategy + |-------------------------------------------------------------------------- + | + | This strategy will be used to clean up inactive users. Do not forget to + | mention these thresholds in your terms and conditions. + | + */ + + 'cleanup' => [ + + 'strategy' => 'Soved\Laravel\Gdpr\Jobs\Cleanup\Strategies\DefaultStrategy', + + 'defaultStrategy' => [ + + /* + * The number of months for which inactive users must be kept. + */ + 'keepInactiveUsersForMonths' => 6, + + /* + * The number of days before deletion at which inactive users will be notified. + */ + 'notifyUsersDaysBeforeDeletion' => 14, + + ], + + ], + +]; diff --git a/config/generators.config.php b/config/generators.config.php new file mode 100644 index 00000000..d214f861 --- /dev/null +++ b/config/generators.config.php @@ -0,0 +1,42 @@ + base_path('vendor/mediactive-digital/laravel-4-generators/src/Way/Generators/templates/model.txt'), + + 'scaffold_model_template_path' => base_path('vendor/mediactive-digital/laravel-4-generators/src/Way/Generators/templates/scaffolding/model.txt'), + + 'controller_template_path' => base_path('vendor/mediactive-digital/laravel-4-generators/src/Way/Generators/templates/controller.txt'), + + 'scaffold_controller_template_path' => base_path('vendor/mediactive-digital/laravel-4-generators/src/Way/Generators/templates/scaffolding/controller.txt'), + + 'migration_template_path' => base_path('vendor/mediactive-digital/laravel-4-generators/src/Way/Generators/templates/migration.txt'), + + 'seed_template_path' => base_path('vendor/mediactive-digital/laravel-4-generators/src/Way/Generators/templates/seed.txt'), + + 'view_template_path' => base_path('vendor/mediactive-digital/laravel-4-generators/src/Way/Generators/templates/view.txt'), + + + /* + |-------------------------------------------------------------------------- + | Where the generated files will be saved... + |-------------------------------------------------------------------------- + | + */ + 'model_target_path' => app_path(), + + 'controller_target_path' => app_path('Http/Controllers'), + + 'migration_target_path' => base_path('database/migrations'), + + 'seed_target_path' => base_path('database/seeds'), + + 'view_target_path' => base_path('resources/views') + +]; diff --git a/config/geocoder.php b/config/geocoder.php new file mode 100644 index 00000000..03b8b44a --- /dev/null +++ b/config/geocoder.php @@ -0,0 +1,110 @@ + [ + + /* + |----------------------------------------------------------------------- + | Cache Store + |----------------------------------------------------------------------- + | + | Specify the cache store to use for caching. The value "null" will use + | the default cache store specified in /config/cache.php file. + | + | Default: null + | + */ + + 'store' => null, + + /* + |----------------------------------------------------------------------- + | Cache Duration + |----------------------------------------------------------------------- + | + | Specify the cache duration in minutes. The default approximates a + | "forever" cache, but there are certain issues with Laravel's forever + | caching methods that prevent us from using them in this project. + | + | Default: 9999999 (integer) + | + */ + + 'duration' => 9999999, + ], + + /* + |--------------------------------------------------------------------------- + | Providers + |--------------------------------------------------------------------------- + | + | Here you may specify any number of providers that should be used to + | perform geocaching operations. The `chain` provider is special, + | in that it can contain multiple providers that will be run in + | the sequence listed, should the previous provider fail. By + | default the first provider listed will be used, but you + | can explicitly call subsequently listed providers by + | alias: `app('geocoder')->using('google_maps')`. + | + | Please consult the official Geocoder documentation for more info. + | https://github.com/geocoder-php/Geocoder#providers + | + */ + 'providers' => [ + Chain::class => [ + GoogleMaps::class => [ + env('GOOGLE_MAPS_LOCALE', 'en-US'), + env('GOOGLE_MAPS_API_KEY'), + ], + GeoPlugin::class => [], + ], + ], + + /* + |--------------------------------------------------------------------------- + | Adapter + |--------------------------------------------------------------------------- + | + | You can specify which PSR-7-compliant HTTP adapter you would like to use. + | There are multiple options at your disposal: CURL, Guzzle, and others. + | + | Please consult the official Geocoder documentation for more info. + | https://github.com/geocoder-php/Geocoder#usage + | + | Default: Client::class (FQCN for CURL adapter) + | + */ + 'adapter' => Client::class, + + /* + |--------------------------------------------------------------------------- + | Reader + |--------------------------------------------------------------------------- + | + | You can specify a reader for specific providers, like GeoIp2, which + | connect to a local file-database. The reader should be set to an + | instance of the required reader class or an array containing the reader + | class and arguments. + | + | Please consult the official Geocoder documentation for more info. + | https://github.com/geocoder-php/geoip2-provider + | + | Default: null + | + | Example: + | 'reader' => [ + | WebService::class => [ + | env('MAXMIND_USER_ID'), + | env('MAXMIND_LICENSE_KEY') + | ], + | ], + | + */ + 'reader' => null, + +]; diff --git a/config/helpers.php b/config/helpers.php new file mode 100644 index 00000000..4bffb439 --- /dev/null +++ b/config/helpers.php @@ -0,0 +1,72 @@ + [], + + /* + |-------------------------------------------------------------------------- + | Custom Helpers + |-------------------------------------------------------------------------- + | + | You are also encouraged to write your own helpers. If you prefer a + | mapper based inclusion, you can selectively activate your custom + | helpers by adding them here. Otherwise all PHP files in the + | Helpers directory will be automatically loaded. + | + */ + + 'custom_helpers' => [], + + /* + |-------------------------------------------------------------------------- + | Directory + |-------------------------------------------------------------------------- + | + | By default this package will look in the application's 'Helpers' + | directory. However, you may choose to override the directory. + | + */ + + 'directory' => 'Helpers', + + /* + |-------------------------------------------------------------------------- + | Default Timezone + |-------------------------------------------------------------------------- + | + | The 'datetime' helper provides an easy way to format all of your Datetime + | instances according to a runtime timezone. As a fallback, you may + | enter your applications's default timezone here. + | + */ + + 'default_timezone' => 'america/chicago', + + /* + |-------------------------------------------------------------------------- + | Default Image + |-------------------------------------------------------------------------- + | + | The 'image' helper provides a simple default image when no image is + | passed to it. Here you can define which image you would like to + | use as the fallback image. The path is relative to the + | resource root, or 'public' directory. + | + */ + + 'default_image' => 'images/noImage.svg', + +]; diff --git a/config/imagecache.php b/config/imagecache.php new file mode 100644 index 00000000..99a1cc8a --- /dev/null +++ b/config/imagecache.php @@ -0,0 +1,71 @@ + null, + + /* + |-------------------------------------------------------------------------- + | Storage paths + |-------------------------------------------------------------------------- + | + | The following paths will be searched for the image filename, submitted + | by URI. + | + | Define as many directories as you like. + | + */ + + 'paths' => array( + public_path('upload'), + public_path('images') + ), + + /* + |-------------------------------------------------------------------------- + | Manipulation templates + |-------------------------------------------------------------------------- + | + | Here you may specify your own manipulation filter templates. + | The keys of this array will define which templates + | are available in the URI: + | + | {route}/{template}/{filename} + | + | The values of this array will define which filter class + | will be applied, by its fully qualified name. + | + */ + + 'templates' => array( + 'small' => 'Intervention\Image\Templates\Small', + 'medium' => 'Intervention\Image\Templates\Medium', + 'large' => 'Intervention\Image\Templates\Large', + ), + + /* + |-------------------------------------------------------------------------- + | Image Cache Lifetime + |-------------------------------------------------------------------------- + | + | Lifetime in minutes of the images handled by the imagecache route. + | + */ + + 'lifetime' => 43200, + +); diff --git a/config/initializer.php b/config/initializer.php new file mode 100644 index 00000000..15ea1916 --- /dev/null +++ b/config/initializer.php @@ -0,0 +1,12 @@ + 'app.env', +]; diff --git a/config/insights.php b/config/insights.php new file mode 100644 index 00000000..36b96e69 --- /dev/null +++ b/config/insights.php @@ -0,0 +1,113 @@ + 'laravel', + /* + |-------------------------------------------------------------------------- + | IDE + |-------------------------------------------------------------------------- + | + | This options allow to add hyperlinks in your terminal to quickly open + | files in your favorite IDE while browsing your PhpInsights report. + | + | Supported: "textmate", "macvim", "emacs", "sublime", "phpstorm", + | "atom", "vscode". + | + | If you have another IDE that is not in this list but which provide an + | url-handler, you could fill this config with a pattern like this: + | + | myide://open?url=file://%f&line=%l + | + */ + + 'ide' => null, + /* + |-------------------------------------------------------------------------- + | Configuration + |-------------------------------------------------------------------------- + | + | Here you may adjust all the various `Insights` that will be used by PHP + | Insights. You can either add, remove or configure `Insights`. Keep in + | mind that all added `Insights` must belong to a specific `Metric`. + | + */ + + 'exclude' => [ + // 'path/to/directory-or-file' + ], + + 'add' => [ + Classes::class => [ + ForbiddenFinalClasses::class, + ], + ], + + 'remove' => [ + AlphabeticallySortedUsesSniff::class, + DeclareStrictTypesSniff::class, + DisallowMixedTypeHintSniff::class, + ForbiddenDefineFunctions::class, + ForbiddenNormalClasses::class, + ForbiddenTraits::class, + ParameterTypeHintSniff::class, + PropertyTypeHintSniff::class, + ReturnTypeHintSniff::class, + UselessFunctionDocCommentSniff::class, + ], + + 'config' => [ + ForbiddenPrivateMethods::class => [ + 'title' => 'The usage of private methods is not idiomatic in Laravel.', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Requirements + |-------------------------------------------------------------------------- + | + | Here you may define a level you want to reach per `Insights` category. + | When a score is lower than the minimum level defined, then an error + | code will be returned. This is optional and individually defined. + | + */ + + 'requirements' => [ +// 'min-quality' => 0, +// 'min-complexity' => 0, +// 'min-architecture' => 0, +// 'min-style' => 0, +// 'disable-security-check' => false, + ], + +]; diff --git a/config/javascript.php b/config/javascript.php new file mode 100644 index 00000000..a78ffaa4 --- /dev/null +++ b/config/javascript.php @@ -0,0 +1,30 @@ + 'footer', + + /* + |-------------------------------------------------------------------------- + | JavaScript Namespace + |-------------------------------------------------------------------------- + | + | By default, we'll add variables to the global window object. However, + | it's recommended that you change this to some namespace - anything. + | That way, you can access vars, like "SomeNamespace.someVariable." + | + */ + 'js_namespace' => 'window' + +]; diff --git a/config/jsvalidation.php b/config/jsvalidation.php new file mode 100644 index 00000000..7d8a66dc --- /dev/null +++ b/config/jsvalidation.php @@ -0,0 +1,42 @@ + 'jsvalidation::bootstrap', + + /* + * Default JQuery selector find the form to be validated. + * By default, the validations are applied to all forms. + */ + 'form_selector' => 'form', + + /* + * If you change the focus on detect some error then active + * this parameter to move the focus to the first error found. + */ + 'focus_on_error' => false, + + /* + * Duration time for the animation when We are moving the focus + * to the first error, http://api.jquery.com/animate/ for more information. + */ + 'duration_animate' => 1000, + + /* + * Enable or disable Ajax validations of Database and custom rules. + * By default Unique, ActiveURL, Exists and custom validations are validated via AJAX + */ + 'disable_remote_validation' => false, + + /* + * Field name used in the remote validation Ajax request + * You can change this value to avoid conflicts wth your field names + */ + 'remote_validation_field' => '_jsvalidation', + +]; diff --git a/config/laravel-widgets.php b/config/laravel-widgets.php new file mode 100644 index 00000000..ca2e8c03 --- /dev/null +++ b/config/laravel-widgets.php @@ -0,0 +1,22 @@ + 'App\Widgets', + + 'use_jquery_for_ajax_calls' => false, + + /* + * Set Ajax widget middleware + */ + 'route_middleware' => ['web'], + + /* + * Relative path from the base directory to a regular widget stub. + */ + 'widget_stub' => 'vendor/arrilot/laravel-widgets/src/Console/stubs/widget.stub', + + /* + * Relative path from the base directory to a plain widget stub. + */ + 'widget_plain_stub' => 'vendor/arrilot/laravel-widgets/src/Console/stubs/widget_plain.stub', +]; diff --git a/config/laroute.php b/config/laroute.php new file mode 100644 index 00000000..ebe6eed1 --- /dev/null +++ b/config/laroute.php @@ -0,0 +1,58 @@ + 'public/js', + + /* + * The destination filename for the javascript file. + */ + 'filename' => 'laroute', + + /* + * The namespace for the helper functions. By default this will bind them to + * `window.laroute`. + */ + 'namespace' => 'laroute', + + /* + * Generate absolute URLs + * + * Set the Application URL in config/app.php + */ + 'absolute' => false, + + /* + * The Filter Method + * + * 'all' => All routes except "'laroute' => false" + * 'only' => Only "'laroute' => true" routes + * 'force' => All routes, ignored "laroute" route parameter + */ + 'filter' => 'all', + + /* + * Controller Namespace + * + * Set here your controller namespace (see RouteServiceProvider -> $namespace) for cleaner action calls + * e.g. 'App\Http\Controllers' + */ + 'action_namespace' => '', + + /* + * The path to the template `laroute.js` file. This is the file that contains + * the ported helper Laravel url/route functions and the route data to go + * with them. + */ + 'template' => 'vendor/te7a-houdini/laroute/src/templates/laroute.js', + + /* + * Appends a prefix to URLs. By default the prefix is an empty string. + * + */ + 'prefix' => '', + +]; diff --git a/config/mail-auto-embed.php b/config/mail-auto-embed.php new file mode 100644 index 00000000..eabff92b --- /dev/null +++ b/config/mail-auto-embed.php @@ -0,0 +1,28 @@ + env('MAIL_AUTO_EMBED', true), + + /* + |-------------------------------------------------------------------------- + | Mail embed method + |-------------------------------------------------------------------------- + | + | Supported: "attachment", "base64" + | + */ + + 'method' => env('MAIL_AUTO_EMBED_METHOD', 'attachment'), + +]; diff --git a/config/mailLogger.php b/config/mailLogger.php new file mode 100644 index 00000000..faef7058 --- /dev/null +++ b/config/mailLogger.php @@ -0,0 +1,22 @@ + false, + + /* + * Set how long a entry should be in the database. Remember that enableAutoDeletion has to be true. + */ + 'keepLogsForDays' => 30, + + /* + * Define all possible input field names your app uses when sending the email. This will then be used to get the + * field value from the request + */ + 'toEmailAddresses' => [ + 'to', + 'email', + ], +]; diff --git a/config/maileclipse.php b/config/maileclipse.php new file mode 100644 index 00000000..52667616 --- /dev/null +++ b/config/maileclipse.php @@ -0,0 +1,249 @@ + 'maileclipse', + + /* + |-------------------------------------------------------------------------- + | Application Mailables Directory + |-------------------------------------------------------------------------- + | + */ + + 'mailables_dir' => app_path('Mail/'), + + /* + |-------------------------------------------------------------------------- + | If you want the package to look for the equivalent factory if the + | dependency is an eloquent model. + |-------------------------------------------------------------------------- + | + */ + + 'factory' => true, + + /* + |-------------------------------------------------------------------------- + | Environment + |-------------------------------------------------------------------------- + | + | If you don't want to use this package in production env + | at all, you can restrict that using this option + | rather than by using a middleware. + | + */ + + 'allowed_environments' => ['local', 'staging', 'testing'], + + /* + |-------------------------------------------------------------------------- + | MailEclipse Route Middleware + |-------------------------------------------------------------------------- + | + | The value should be an array of fully qualified + | class names of the middleware classes. + | + */ + + 'middlewares' => [ + 'web', + //'auth', + ], + + /* + |-------------------------------------------------------------------------- + | Templates + |-------------------------------------------------------------------------- + | + | List of pre-defined templates used by maileclipse (HTML/Markdown) + | + | + */ + + 'skeletons' => [ + + 'html' => [ + + 'airmail' => [ + 'confirm', + 'invite', + 'invoice', + 'ping', + 'progress', + 'reignite', + 'survey', + 'upsell', + 'welcome', + ], + + 'cerberus' => [ + 'fluid', + 'hybrid', + 'responsive', + ], + + 'cleave' => [ + 'confirm', + 'invite', + 'invoice', + 'ping', + 'progress', + 'reignite', + 'survey', + 'upsell', + 'welcome', + ], + + 'go' => [ + 'confirm', + 'invite', + 'invoice', + 'ping', + 'progress', + 'reignite', + 'survey', + 'upsell', + 'welcome', + ], + + 'goldstar' => [ + 'birthday', + 'confirm', + 'invite', + 'invoice', + 'progress', + 'reignite', + 'survey', + 'update', + 'welcome', + ], + + 'mantra' => [ + 'activation', + 'birthday', + 'coupon', + 'progress', + 'rating', + 'receipt', + 'shipped', + 'update', + 'welcome', + ], + + 'meow' => [ + 'confirmation', + 'coupon', + 'digest-left', + 'digest-right', + 'progress', + 'receipt', + 'survey', + 'two-column', + 'welcome', + ], + + 'narrative' => [ + 'confirm', + 'invite', + 'invoice', + 'ping', + 'progress', + 'reignite', + 'survey', + 'upsell', + 'welcome', + ], + + 'neopolitan' => [ + 'confirm', + 'invite', + 'invoice', + 'ping', + 'progress', + 'reignite', + 'survey', + 'upsell', + 'welcome', + ], + + 'oxygen' => [ + 'confirm', + 'invite', + 'invoice', + 'ping', + 'progress', + 'reignite', + 'survey', + 'upsell', + 'welcome', + ], + + 'plain' => [ + 'plain', + ], + + 'skyline' => [ + 'confirm', + 'invite', + 'invoice', + 'ping', + 'progress', + 'reignite', + 'survey', + 'upsell', + 'welcome', + ], + + 'sunday' => [ + 'confirm', + 'invite', + 'invoice', + 'ping', + 'progress', + 'reignite', + 'survey', + 'upsell', + 'welcome', + ], + + 'zenflat' => [ + 'confirm', + 'invite', + 'invoice', + 'ping', + 'progress', + 'reignite', + 'survey', + 'upsell', + 'welcome', + ], + + ], + + 'markdown' => [ + 'postmark' => [ + 'blank', + 'comment-notification', + 'invoice', + 'receipt', + 'reset-password', + 'reset-password-help', + 'trial-expired', + 'trial-expiring', + 'user-invitation', + 'welcome', + ], + ], + ], + +]; diff --git a/config/mailpreview.php b/config/mailpreview.php new file mode 100644 index 00000000..7e6c93ca --- /dev/null +++ b/config/mailpreview.php @@ -0,0 +1,74 @@ + storage_path('email-previews'), + + /** + * -------------------------------------------------------------------------- + * Time in seconds to keep old previews + * -------------------------------------------------------------------------- + * + * This option determines how long (in seconds) the mail transformer should + * keep the generated preview files before deleting them. By default it + * set to 60 seconds, but you can change this to whatever you desire. + * + */ + + 'maximum_lifetime' => 60, + + /** + * -------------------------------------------------------------------------- + * An option to enable showing a HTML link on mail sent + * -------------------------------------------------------------------------- + * + * This option determines if you would like to show a HTML link at the top + * left corner of your screen every time and email is sent from your + * system, the link will point the browser to the preview file. + * + */ + + 'show_link_to_preview' => true, + + /** + * The timeout for the popup + * + * This is a time in miliseconds + * if you use 0 or a negative number it will never be removed. + */ + 'popup_timeout' => 8000, + + /** + * -------------------------------------------------------------------------- + * Middleware group(s) + * -------------------------------------------------------------------------- + * + * Most likely you don't have to touch this value, in this array all + * middleware groups that you want to use this package with should + * be included. + */ + 'middleware_groups' => ['web'], + + /** + * -------------------------------------------------------------------------- + * Set middleware for the mail preview route + * -------------------------------------------------------------------------- + * + * This option allows for setting middlewares for the route that shows a + * preview to the mail that was just sent. + */ + + 'middleware' => [ + + ], +]; diff --git a/config/medialibrary.php b/config/medialibrary.php new file mode 100644 index 00000000..a8957028 --- /dev/null +++ b/config/medialibrary.php @@ -0,0 +1,156 @@ + env('MEDIA_DISK', 'public'), + + /* + * The maximum file size of an item in bytes. + * Adding a larger file will result in an exception. + */ + 'max_file_size' => 1024 * 1024 * 10, + + /* + * This queue will be used to generate derived and responsive images. + * Leave empty to use the default queue. + */ + 'queue_name' => '', + + /* + * The fully qualified class name of the media model. + */ + 'media_model' => Spatie\MediaLibrary\Models\Media::class, + + 's3' => [ + /* + * The domain that should be prepended when generating urls. + */ + 'domain' => 'https://'.env('AWS_BUCKET').'.s3.amazonaws.com', + ], + + 'remote' => [ + /* + * Any extra headers that should be included when uploading media to + * a remote disk. Even though supported headers may vary between + * different drivers, a sensible default has been provided. + * + * Supported by S3: CacheControl, Expires, StorageClass, + * ServerSideEncryption, Metadata, ACL, ContentEncoding + */ + 'extra_headers' => [ + 'CacheControl' => 'max-age=604800', + ], + ], + + 'responsive_images' => [ + + /* + * This class is responsible for calculating the target widths of the responsive + * images. By default we optimize for filesize and create variations that each are 20% + * smaller than the previous one. More info in the documentation. + * + * https://docs.spatie.be/laravel-medialibrary/v7/advanced-usage/generating-responsive-images + */ + 'width_calculator' => Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator::class, + + /* + * By default rendering media to a responsive image will add some javascript and a tiny placeholder. + * This ensures that the browser can already determine the correct layout. + */ + 'use_tiny_placeholders' => true, + + /* + * This class will generate the tiny placeholder used for progressive image loading. By default + * the medialibrary will use a tiny blurred jpg image. + */ + 'tiny_placeholder_generator' => Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred::class, + ], + + /* + * When urls to files get generated, this class will be called. Leave empty + * if your files are stored locally above the site root or on s3. + */ + 'url_generator' => null, + + /* + * Whether to activate versioning when urls to files get generated. + * When activated, this attaches a ?v=xx query string to the URL. + */ + 'version_urls' => false, + + /* + * The class that contains the strategy for determining a media file's path. + */ + 'path_generator' => null, + + /* + * Medialibrary will try to optimize all converted images by removing + * metadata and applying a little bit of compression. These are + * the optimizers that will be used by default. + */ + 'image_optimizers' => [ + Spatie\ImageOptimizer\Optimizers\Jpegoptim::class => [ + '--strip-all', // this strips out all text information such as comments and EXIF data + '--all-progressive', // this will make sure the resulting image is a progressive one + ], + Spatie\ImageOptimizer\Optimizers\Pngquant::class => [ + '--force', // required parameter for this package + ], + Spatie\ImageOptimizer\Optimizers\Optipng::class => [ + '-i0', // this will result in a non-interlaced, progressive scanned image + '-o2', // this set the optimization level to two (multiple IDAT compression trials) + '-quiet', // required parameter for this package + ], + Spatie\ImageOptimizer\Optimizers\Svgo::class => [ + '--disable=cleanupIDs', // disabling because it is known to cause troubles + ], + Spatie\ImageOptimizer\Optimizers\Gifsicle::class => [ + '-b', // required parameter for this package + '-O3', // this produces the slowest but best results + ], + ], + + /* + * These generators will be used to create an image of media files. + */ + 'image_generators' => [ + Spatie\MediaLibrary\ImageGenerators\FileTypes\Image::class, + Spatie\MediaLibrary\ImageGenerators\FileTypes\Webp::class, + Spatie\MediaLibrary\ImageGenerators\FileTypes\Pdf::class, + Spatie\MediaLibrary\ImageGenerators\FileTypes\Svg::class, + Spatie\MediaLibrary\ImageGenerators\FileTypes\Video::class, + ], + + /* + * The engine that should perform the image conversions. + * Should be either `gd` or `imagick`. + */ + 'image_driver' => env('IMAGE_DRIVER', 'gd'), + + /* + * FFMPEG & FFProbe binaries paths, only used if you try to generate video + * thumbnails and have installed the php-ffmpeg/php-ffmpeg composer + * dependency. + */ + 'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'), + 'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'), + + /* + * The path where to store temporary files while performing image conversions. + * If set to null, storage_path('medialibrary/temp') will be used. + */ + 'temporary_directory_path' => null, + + /* + * Here you can override the class names of the jobs used by this package. Make sure + * your custom jobs extend the ones provided by the package. + */ + 'jobs' => [ + 'perform_conversions' => Spatie\MediaLibrary\Jobs\PerformConversions::class, + 'generate_responsive_images' => Spatie\MediaLibrary\Jobs\GenerateResponsiveImages::class, + ], +]; diff --git a/config/schematics.php b/config/schematics.php new file mode 100644 index 00000000..7c78ae8b --- /dev/null +++ b/config/schematics.php @@ -0,0 +1,51 @@ + null, + 'form-request-namespace' => 'App\\Http\\Requests', + 'model' => [ + 'namespace' => 'App\\', + 'path' => app_path(), + 'paths' => [ + app_path(), + ], + ], + 'middleware' => null, + 'auto-migrate' => false, + + /* + |-------------------------------------------------------------------------- + | Create, Update & Delete + |-------------------------------------------------------------------------- + | + | Here you may define defaults for the scaffolding. These will set + | the checkboxes in the forms to be checked or not. + | + */ + + 'create' => [ + 'migration' => false, + 'resource-controller' => false, + 'form-request' => false, + ], + + 'update' => [ + 'migration' => false, + ], + + 'delete' => [ + 'migration' => false, + ], +]; diff --git a/config/scout.php b/config/scout.php new file mode 100644 index 00000000..96f740d0 --- /dev/null +++ b/config/scout.php @@ -0,0 +1,91 @@ + env('SCOUT_DRIVER', 'algolia'), + + /* + |-------------------------------------------------------------------------- + | Index Prefix + |-------------------------------------------------------------------------- + | + | Here you may specify a prefix that will be applied to all search index + | names used by Scout. This prefix may be useful if you have multiple + | "tenants" or applications sharing the same search infrastructure. + | + */ + + 'prefix' => env('SCOUT_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Queue Data Syncing + |-------------------------------------------------------------------------- + | + | This option allows you to control if the operations that sync your data + | with your search engines are queued. When this is set to "true" then + | all automatic data syncing will get queued for better performance. + | + */ + + 'queue' => env('SCOUT_QUEUE', false), + + /* + |-------------------------------------------------------------------------- + | Chunk Sizes + |-------------------------------------------------------------------------- + | + | These options allow you to control the maximum chunk size when you are + | mass importing data into the search engine. This allows you to fine + | tune each of these chunk sizes based on the power of the servers. + | + */ + + 'chunk' => [ + 'searchable' => 500, + 'unsearchable' => 500, + ], + + /* + |-------------------------------------------------------------------------- + | Soft Deletes + |-------------------------------------------------------------------------- + | + | This option allows to control whether to keep soft deleted records in + | the search indexes. Maintaining soft deleted records can be useful + | if your application still needs to search for the records later. + | + */ + + 'soft_delete' => false, + + /* + |-------------------------------------------------------------------------- + | Algolia Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure your Algolia settings. Algolia is a cloud hosted + | search engine which works great with Scout out of the box. Just plug + | in your application ID and admin API key to get started searching. + | + */ + + 'algolia' => [ + 'id' => env('ALGOLIA_APP_ID', ''), + 'secret' => env('ALGOLIA_SECRET', ''), + ], + +]; diff --git a/config/stats.php b/config/stats.php new file mode 100644 index 00000000..57ac3478 --- /dev/null +++ b/config/stats.php @@ -0,0 +1,60 @@ + [ + base_path('app'), + base_path('database'), + base_path('tests'), + ], + + /* + * List of files/folders to be excluded from analysis. + */ + 'exclude' => [ + base_path('tests/bootstrap.php'), + // base_path('app/helpers.php'), + // base_path('app/Services'), + ], + + /* + * List of your custom Classifiers + */ + 'custom_component_classifier' => [ + // \App\Classifiers\CustomerExportClassifier::class + ], + + /* + * The Strategy used to reject Classes from the project statistics. + * + * By default all Classes located in + * the vendor directory are being rejected and don't + * count to the statistics. + * + * The package ships with 2 strategies: + * - \Wnx\LaravelStats\RejectionStrategies\RejectVendorClasses::class + * - \Wnx\LaravelStats\RejectionStrategies\RejectInternalClasses::class + * + * If none of the default strategies fit for your usecase, you can + * write your own class which implements the RejectionStrategy Contract. + */ + 'rejection_strategy' => \Wnx\LaravelStats\RejectionStrategies\RejectVendorClasses::class, + + /* + * Namespaces which should be ignored. + * Laravel Stats uses the `Str::startsWith()`class to + * check if a Namespace should be ignored. + * + * You can use `Illuminate` to ignore the entire `Illuminate`-namespace + * or `Illuminate\Support` to ignore a subset of the namespace. + */ + 'ignored_namespaces' => [ + 'Wnx\LaravelStats', + 'Illuminate', + 'Symfony', + ], + +]; diff --git a/config/tagging.php b/config/tagging.php new file mode 100644 index 00000000..216442fc --- /dev/null +++ b/config/tagging.php @@ -0,0 +1,31 @@ + 'integer', // 'string' or 'integer' + + // Value of are passed through this before save of tags + 'normalizer' => '\Conner\Tagging\TaggingUtility::slug', + + // Display value of tags are passed through (for front end display) + 'displayer' => '\Illuminate\Support\Str::title', + + // Database connection for Conner\Taggable\Tag model to use +// 'connection' => 'mysql', + + // When deleting a model, remove all the tags first + 'untag_on_delete' => true, + + // Auto-delete unused tags from the 'tags' database table (when they are used zero times) + 'delete_unused_tags' => false, + + // Model to use to store the tags in the database + 'tag_model'=>'\Conner\Tagging\Model\Tag', + + // Delimiter used within tags + 'delimiter' => '-', + + // Model to use for the relation between tags and tagged records + 'tagged_model' => '\Conner\Tagging\Model\Tagged', +]; diff --git a/config/teamwork.php b/config/teamwork.php new file mode 100644 index 00000000..5eb9e053 --- /dev/null +++ b/config/teamwork.php @@ -0,0 +1,91 @@ + config('auth.providers.users.model', App\User::class), + + /* + |-------------------------------------------------------------------------- + | Teamwork users Table + |-------------------------------------------------------------------------- + | + | This is the users table name used by Teamwork. + | + */ + 'users_table' => 'users', + + /* + |-------------------------------------------------------------------------- + | Teamwork Team Model + |-------------------------------------------------------------------------- + | + | This is the Team model used by Teamwork to create correct relations. Update + | the team if it is in a different namespace. + | + */ + 'team_model' => Mpociot\Teamwork\TeamworkTeam::class, + + /* + |-------------------------------------------------------------------------- + | Teamwork teams Table + |-------------------------------------------------------------------------- + | + | This is the teams table name used by Teamwork to save teams to the database. + | + */ + 'teams_table' => 'teams', + + /* + |-------------------------------------------------------------------------- + | Teamwork team_user Table + |-------------------------------------------------------------------------- + | + | This is the team_user table used by Teamwork to save assigned teams to the + | database. + | + */ + 'team_user_table' => 'team_user', + + /* + |-------------------------------------------------------------------------- + | User Foreign key on Teamwork's team_user Table (Pivot) + |-------------------------------------------------------------------------- + */ + 'user_foreign_key' => 'id', + + /* + |-------------------------------------------------------------------------- + | Teamwork Team Invite Model + |-------------------------------------------------------------------------- + | + | This is the Team Invite model used by Teamwork to create correct relations. + | Update the team if it is in a different namespace. + | + */ + 'invite_model' => Mpociot\Teamwork\TeamInvite::class, + + /* + |-------------------------------------------------------------------------- + | Teamwork team invites Table + |-------------------------------------------------------------------------- + | + | This is the team invites table name used by Teamwork to save sent/pending + | invitation into teams to the database. + | + */ + 'team_invites_table' => 'team_invites', +]; diff --git a/config/translatable.php b/config/translatable.php new file mode 100644 index 00000000..699bea11 --- /dev/null +++ b/config/translatable.php @@ -0,0 +1,9 @@ + 'en', +]; diff --git a/config/twigbridge.php b/config/twigbridge.php new file mode 100644 index 00000000..1cbaa15a --- /dev/null +++ b/config/twigbridge.php @@ -0,0 +1,230 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Configuration options for Twig. + */ +return [ + + 'twig' => [ + /* + |-------------------------------------------------------------------------- + | Extension + |-------------------------------------------------------------------------- + | + | File extension for Twig view files. + | + */ + 'extension' => 'twig', + + /* + |-------------------------------------------------------------------------- + | Accepts all Twig environment configuration options + |-------------------------------------------------------------------------- + | + | http://twig.sensiolabs.org/doc/api.html#environment-options + | + */ + 'environment' => [ + + // When set to true, the generated templates have a __toString() method + // that you can use to display the generated nodes. + // default: false + 'debug' => env('APP_DEBUG', false), + + // The charset used by the templates. + // default: utf-8 + 'charset' => 'utf-8', + + // The base template class to use for generated templates. + // default: TwigBridge\Twig\Template + 'base_template_class' => 'TwigBridge\Twig\Template', + + // An absolute path where to store the compiled templates, or false to disable caching. If null + // then the cache file path is used. + // default: cache file storage path + 'cache' => null, + + // When developing with Twig, it's useful to recompile the template + // whenever the source code changes. If you don't provide a value + // for the auto_reload option, it will be determined automatically based on the debug value. + 'auto_reload' => true, + + // If set to false, Twig will silently ignore invalid variables + // (variables and or attributes/methods that do not exist) and + // replace them with a null value. When set to true, Twig throws an exception instead. + // default: false + 'strict_variables' => false, + + // If set to true, auto-escaping will be enabled by default for all templates. + // default: 'html' + 'autoescape' => 'html', + + // A flag that indicates which optimizations to apply + // (default to -1 -- all optimizations are enabled; set it to 0 to disable) + 'optimizations' => -1, + ], + + /* + |-------------------------------------------------------------------------- + | Safe Classes + |-------------------------------------------------------------------------- + | + | When set, the output of the `__string` method of the following classes will not be escaped. + | default: Laravel's Htmlable, which the HtmlString class implements. + | + */ + 'safe_classes' => [ + \Illuminate\Contracts\Support\Htmlable::class => ['html'], + ], + + /* + |-------------------------------------------------------------------------- + | Global variables + |-------------------------------------------------------------------------- + | + | These will always be passed in and can be accessed as Twig variables. + | NOTE: these will be overwritten if you pass data into the view with the same key. + | + */ + 'globals' => [], + ], + + 'extensions' => [ + + /* + |-------------------------------------------------------------------------- + | Extensions + |-------------------------------------------------------------------------- + | + | Enabled extensions. + | + | `Twig\Extension\DebugExtension` is enabled automatically if twig.debug is TRUE. + | + */ + 'enabled' => [ + 'TwigBridge\Extension\Loader\Facades', + 'TwigBridge\Extension\Loader\Filters', + 'TwigBridge\Extension\Loader\Functions', + + 'TwigBridge\Extension\Laravel\Auth', + 'TwigBridge\Extension\Laravel\Config', + 'TwigBridge\Extension\Laravel\Dump', + 'TwigBridge\Extension\Laravel\Input', + 'TwigBridge\Extension\Laravel\Session', + 'TwigBridge\Extension\Laravel\Str', + 'TwigBridge\Extension\Laravel\Translator', + 'TwigBridge\Extension\Laravel\Url', + 'TwigBridge\Extension\Laravel\Model', + // 'TwigBridge\Extension\Laravel\Gate', + + // 'TwigBridge\Extension\Laravel\Form', + // 'TwigBridge\Extension\Laravel\Html', + // 'TwigBridge\Extension\Laravel\Legacy\Facades', + ], + + /* + |-------------------------------------------------------------------------- + | Facades + |-------------------------------------------------------------------------- + | + | Available facades. Access like `{{ Config.get('foo.bar') }}`. + | + | Each facade can take an optional array of options. To mark the whole facade + | as safe you can set the option `'is_safe' => true`. Setting the facade as + | safe means that any HTML returned will not be escaped. + | + | It is advisable to not set the whole facade as safe and instead mark the + | each appropriate method as safe for security reasons. You can do that with + | the following syntax: + | + | + | 'Form' => [ + | 'is_safe' => [ + | 'open' + | ] + | ] + | + | + | The values of the `is_safe` array must match the called method on the facade + | in order to be marked as safe. + | + */ + 'facades' => [], + + /* + |-------------------------------------------------------------------------- + | Functions + |-------------------------------------------------------------------------- + | + | Available functions. Access like `{{ secure_url(...) }}`. + | + | Each function can take an optional array of options. These options are + | passed directly to `Twig\TwigFunction`. + | + | So for example, to mark a function as safe you can do the following: + | + | + | 'link_to' => [ + | 'is_safe' => ['html'] + | ] + | + | + | The options array also takes a `callback` that allows you to name the + | function differently in your Twig templates than what it's actually called. + | + | + | 'link' => [ + | 'callback' => 'link_to' + | ] + | + | + */ + 'functions' => [ + 'elixir', + 'head', + 'last', + 'mix', + ], + + /* + |-------------------------------------------------------------------------- + | Filters + |-------------------------------------------------------------------------- + | + | Available filters. Access like `{{ variable|filter }}`. + | + | Each filter can take an optional array of options. These options are + | passed directly to `Twig\TwigFilter`. + | + | So for example, to mark a filter as safe you can do the following: + | + | + | 'studly_case' => [ + | 'is_safe' => ['html'] + | ] + | + | + | The options array also takes a `callback` that allows you to name the + | filter differently in your Twig templates than what is actually called. + | + | + | 'snake' => [ + | 'callback' => 'snake_case' + | ] + | + | + */ + 'filters' => [ + 'get' => 'data_get', + ], + ], +]; diff --git a/config/user-verification.php b/config/user-verification.php new file mode 100644 index 00000000..5c53dc8b --- /dev/null +++ b/config/user-verification.php @@ -0,0 +1,49 @@ + [ + /* + |----------------------------------------------------------------------- + | Email View Type + |----------------------------------------------------------------------- + | + | This option defines the email view type. + | + | Supported: "default", "markdown" + | + */ + 'type' => 'default', + + /* + |----------------------------------------------------------------------- + | Custom view name + |----------------------------------------------------------------------- + | + | This option defines a custom view name. + | + */ + 'view' => null, + ], + + /* + |--------------------------------------------------------------------------- + | Log the user in after verification + |--------------------------------------------------------------------------- + | + | This option defines if the user should be logged in after verification. + | USE WITH CAUTION as it may introduce security issues in your app. + | By default Laravel log in a new registered user. + | + | Supported: (bool) "true", "false" + | + */ + 'auto-login' => false, + +]; diff --git a/database/migrations/2014_01_07_073615_create_tagged_table.php b/database/migrations/2014_01_07_073615_create_tagged_table.php new file mode 100644 index 00000000..ce36b565 --- /dev/null +++ b/database/migrations/2014_01_07_073615_create_tagged_table.php @@ -0,0 +1,25 @@ +increments('id'); + if(config('tagging.primary_keys_type') == 'string') { + $table->string('taggable_id', 36)->index(); + } else { + $table->integer('taggable_id')->unsigned()->index(); + } + $table->string('taggable_type', 125)->index(); + $table->string('tag_name', 125); + $table->string('tag_slug', 125)->index(); + }); + } + + public function down() { + Schema::drop('tagging_tagged'); + } +} diff --git a/database/migrations/2014_01_07_073615_create_tags_table.php b/database/migrations/2014_01_07_073615_create_tags_table.php new file mode 100644 index 00000000..1a3a7474 --- /dev/null +++ b/database/migrations/2014_01_07_073615_create_tags_table.php @@ -0,0 +1,24 @@ +increments('id'); + $table->string('slug', 125)->index(); + $table->string('name', 125); + $table->boolean('suggest')->default(false); + $table->integer('count')->unsigned()->default(0); // count of how many times this tag was used + $table->integer('tag_group_id')->unsigned()->nullable(); + }); + } + + public function down() + { + Schema::drop('tagging_tags'); + } +} diff --git a/database/migrations/2016_06_29_073615_create_tag_groups_table.php b/database/migrations/2016_06_29_073615_create_tag_groups_table.php new file mode 100644 index 00000000..558e85f3 --- /dev/null +++ b/database/migrations/2016_06_29_073615_create_tag_groups_table.php @@ -0,0 +1,21 @@ +increments('id'); + $table->string('slug', 125)->index(); + $table->string('name', 125); + }); + } + + public function down() + { + Schema::drop('tagging_tag_groups'); + } +} diff --git a/database/migrations/2016_06_29_073615_update_tags_table.php b/database/migrations/2016_06_29_073615_update_tags_table.php new file mode 100644 index 00000000..7c58ec76 --- /dev/null +++ b/database/migrations/2016_06_29_073615_update_tags_table.php @@ -0,0 +1,24 @@ +foreign('tag_group_id')->references('id')->on('tagging_tag_groups'); + }); + + } + + + public function down() + { + Schema::disableForeignKeyConstraints(); + Schema::table('tagging_tags', function ($table) { + $table->dropForeign('tagging_tags_tag_group_id_foreign'); + }); + } +} diff --git a/database/migrations/2016_09_13_070520_add_verification_to_user_table.php b/database/migrations/2016_09_13_070520_add_verification_to_user_table.php new file mode 100644 index 00000000..f3d1ff1a --- /dev/null +++ b/database/migrations/2016_09_13_070520_add_verification_to_user_table.php @@ -0,0 +1,50 @@ + + */ + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; + +class AddVerificationToUserTable extends Migration +{ + /** + * Determine the user table name. + * + * @return string + */ + public function getUserTableName() + { + $user_model = config('auth.providers.users.model', App\User::class); + + return (new $user_model)->getTable(); + } + + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table($this->getUserTableName(), function (Blueprint $table) { + $table->boolean('verified')->default(false); + $table->string('verification_token')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table($this->getUserTableName(), function (Blueprint $table) { + $table->dropColumn('verified'); + $table->dropColumn('verification_token'); + }); + } +} diff --git a/database/migrations/2017_09_01_000000_create_authentication_log_table.php b/database/migrations/2017_09_01_000000_create_authentication_log_table.php new file mode 100644 index 00000000..412f821e --- /dev/null +++ b/database/migrations/2017_09_01_000000_create_authentication_log_table.php @@ -0,0 +1,35 @@ +bigIncrements('id'); + $table->morphs('authenticatable'); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->timestamp('login_at')->nullable(); + $table->timestamp('logout_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('authentication_log'); + } +} diff --git a/database/migrations/2020_03_11_222012_create_products_table.php b/database/migrations/2020_03_11_222012_create_products_table.php new file mode 100644 index 00000000..75448bb7 --- /dev/null +++ b/database/migrations/2020_03_11_222012_create_products_table.php @@ -0,0 +1,43 @@ + + * @url https://github.com/mtolhuys/laravel-schematics + * @tag laravel-schematics-products-model + */ + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateProductsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('products', static function (Blueprint $table) { + $table->increments('id'); + $table->string('title', 255)->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('products'); + } +} diff --git a/database/migrations/2020_03_11_222524_create_customers_table.php b/database/migrations/2020_03_11_222524_create_customers_table.php new file mode 100644 index 00000000..78b98428 --- /dev/null +++ b/database/migrations/2020_03_11_222524_create_customers_table.php @@ -0,0 +1,42 @@ + + * @url https://github.com/mtolhuys/laravel-schematics + * @tag laravel-schematics-customers-model + */ + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateCustomersTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('customers', static function (Blueprint $table) { + $table->increments('id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('customers'); + } +} diff --git a/database/migrations/2020_03_11_222558_create_invoices_table.php b/database/migrations/2020_03_11_222558_create_invoices_table.php new file mode 100644 index 00000000..f922cd40 --- /dev/null +++ b/database/migrations/2020_03_11_222558_create_invoices_table.php @@ -0,0 +1,47 @@ + + * @url https://github.com/mtolhuys/laravel-schematics + * @tag laravel-schematics-invoices-model + */ + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateInvoicesTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('invoices', static function (Blueprint $table) { + $table->increments('id'); + $table->integer('user_id'); + $table->boolean('status_id', true); + $table->decimal('subtotal', 10, 2); + $table->decimal('total', 10, 2); + $table->decimal('shipping', 10, 2); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('invoices'); + } +} diff --git a/database/migrations/2020_03_11_223002_create_invoice_items_table.php b/database/migrations/2020_03_11_223002_create_invoice_items_table.php new file mode 100644 index 00000000..20119869 --- /dev/null +++ b/database/migrations/2020_03_11_223002_create_invoice_items_table.php @@ -0,0 +1,53 @@ + + * @url https://github.com/mtolhuys/laravel-schematics + * @tag laravel-schematics-invoice_items-model + */ + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateInvoiceItemsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('invoice_items', static function (Blueprint $table) { + $table->increments('id'); + $table->integer('invoice_id')->nullable(); + $table->integer('product_id')->nullable(); + $table->integer('status')->nullable(); + $table->integer('quantity')->nullable(); + $table->decimal('unit_price',10,2); + $table->integer('tax_id')->nullable(); + $table->integer('raw_price')->nullable(); + $table->integer('tax')->nullable(); + $table->integer('total_price')->nullable(); + $table->decimal('discount_percent')->nullable(); + $table->decimal('discount')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('invoice_items'); + } +} diff --git a/database/migrations/2020_03_11_223618_create_orders_table.php b/database/migrations/2020_03_11_223618_create_orders_table.php new file mode 100644 index 00000000..32e7146d --- /dev/null +++ b/database/migrations/2020_03_11_223618_create_orders_table.php @@ -0,0 +1,42 @@ + + * @url https://github.com/mtolhuys/laravel-schematics + * @tag laravel-schematics-orders-model + */ + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateOrdersTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('orders', static function (Blueprint $table) { + $table->increments('id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('orders'); + } +} diff --git a/database/migrations/2020_03_14_183658_create_order_payments_table.php b/database/migrations/2020_03_14_183658_create_order_payments_table.php new file mode 100644 index 00000000..31addb7f --- /dev/null +++ b/database/migrations/2020_03_14_183658_create_order_payments_table.php @@ -0,0 +1,43 @@ + + * @url https://github.com/mtolhuys/laravel-schematics + * @tag laravel-schematics-order_payments-model + */ + +use Illuminate\Support\Facades\Schema; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Database\Migrations\Migration; + +class CreateOrderPaymentsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('order_payments', static function (Blueprint $table) { + $table->increments('id'); + $table->integer('order_id')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('order_payments'); + } +} diff --git a/database/migrations/2020_03_24_211342_create_media_table.php b/database/migrations/2020_03_24_211342_create_media_table.php new file mode 100644 index 00000000..139ec806 --- /dev/null +++ b/database/migrations/2020_03_24_211342_create_media_table.php @@ -0,0 +1,38 @@ +bigIncrements('id'); + $table->morphs('model'); + $table->string('collection_name'); + $table->string('name'); + $table->string('file_name'); + $table->string('mime_type')->nullable(); + $table->string('disk'); + $table->unsignedBigInteger('size'); + $table->json('manipulations'); + $table->json('custom_properties'); + $table->json('responsive_images'); + $table->unsignedInteger('order_column')->nullable(); + $table->nullableTimestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + { + Schema::dropIfExists('media'); + } +} diff --git a/database/migrations/2020_03_24_211342_teamwork_setup_tables.php b/database/migrations/2020_03_24_211342_teamwork_setup_tables.php new file mode 100644 index 00000000..5e2fdca1 --- /dev/null +++ b/database/migrations/2020_03_24_211342_teamwork_setup_tables.php @@ -0,0 +1,87 @@ +integer( 'current_team_id' )->unsigned()->nullable(); + } ); + + + Schema::create( \Config::get( 'teamwork.teams_table' ), function ( Blueprint $table ) + { + $table->increments( 'id' )->unsigned(); + $table->integer( 'owner_id' )->unsigned()->nullable(); + $table->string( 'name' ); + $table->timestamps(); + } ); + + Schema::create( \Config::get( 'teamwork.team_user_table' ), function ( Blueprint $table ) + { + $table->bigInteger( 'user_id' )->unsigned(); + $table->integer( 'team_id' )->unsigned(); + $table->timestamps(); + + $table->foreign( 'user_id' ) + ->references( \Config::get( 'teamwork.user_foreign_key' ) ) + ->on( \Config::get( 'teamwork.users_table' ) ) + ->onUpdate( 'cascade' ) + ->onDelete( 'cascade' ); + + $table->foreign( 'team_id' ) + ->references( 'id' ) + ->on( \Config::get( 'teamwork.teams_table' ) ) + ->onDelete( 'cascade' ); + } ); + + Schema::create( \Config::get( 'teamwork.team_invites_table' ), function(Blueprint $table) + { + $table->increments('id'); + $table->bigInteger('user_id')->unsigned(); + $table->integer('team_id')->unsigned(); + $table->enum('type', ['invite', 'request']); + $table->string('email'); + $table->string('accept_token'); + $table->string('deny_token'); + $table->timestamps(); + $table->foreign( 'team_id' ) + ->references( 'id' ) + ->on( \Config::get( 'teamwork.teams_table' ) ) + ->onDelete( 'cascade' ); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table(\Config::get( 'teamwork.users_table' ), function(Blueprint $table) + { + $table->dropColumn('current_team_id'); + }); + + Schema::table(\Config::get('teamwork.team_user_table'), function (Blueprint $table) { + $table->dropForeign(\Config::get('teamwork.team_user_table').'_user_id_foreign'); + $table->dropForeign(\Config::get('teamwork.team_user_table').'_team_id_foreign'); + }); + + Schema::drop(\Config::get('teamwork.team_user_table')); + Schema::drop(\Config::get('teamwork.team_invites_table')); + Schema::drop(\Config::get('teamwork.teams_table')); + + } +} diff --git a/package.json b/package.json index bb631ab0..7870a8b8 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,122 @@ }, "devDependencies": { "axios": "^0.19", + "bootstrap": "^4.3.1", "cross-env": "^7.0", + "grunt": "^1.0.4", + "grunt-contrib-clean": "^2.0.0", + "grunt-contrib-concat": "^1.0.1", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-cssmin": "^3.0.0", + "grunt-contrib-handlebars": "^1.0.0", + "grunt-contrib-uglify": "^4.0.1", + "grunt-contrib-watch": "^1.1.0", + "grunt-eslint": "^22.0.0", + "grunt-webstandards": "^0.1.1", + "jquery": "^3.3.1", "laravel-mix": "^5.0.1", "lodash": "^4.17.13", + "popper.js": "^1.12", "resolve-url-loader": "^3.1.0", "sass": "^1.15.2", "sass-loader": "^8.0.0", "vue-template-compiler": "^2.6.11" + }, + "dependencies": { + "@activix/bootstrap-datetimepicker": "^2.0.7", + "@claviska/jquery-minicolors": "^2.3.4", + "admin-lte": "^2.4.10", + "animate.css": "^3.7.0", + "bootbox": "^5.2.0", + "bootstrap-chosen": "^1.4.2", + "bootstrap-datepicker": "^1.8.0", + "bootstrap-fileinput": "^5.0.5", + "bootstrap-multiselect": "^0.9.13", + "bootstrap-slider": "^10.6.2", + "bootstrap-sweetalert": "^1.0.1", + "bootstrap-tabdrop": "^0.1.0", + "bootstrap-validate": "^2.1.3", + "bootstrap-validator": "^0.11.9", + "bootstrap4-toggle": "^3.6.1", + "chart.js": "^2.8.0", + "datatables": "^1.10.18", + "datatables.net": "^1.10.19", + "datatables.net-bs4": "^1.10.19", + "datatables.net-buttons": "^1.5.6", + "datatables.net-buttons-bs4": "^1.5.6", + "datatables.net-colreorder": "^1.5.1", + "datatables.net-colreorder-bs4": "^1.5.1", + "datatables.net-fixedcolumns": "^3.2.6", + "datatables.net-fixedcolumns-bs4": "^3.2.6", + "datatables.net-fixedheader": "^3.1.5", + "datatables.net-fixedheader-bs4": "^3.1.5", + "datatables.net-keytable": "^2.5.0", + "datatables.net-keytable-bs4": "^2.5.0", + "datatables.net-plugins": "^1.10.19", + "datatables.net-responsive": "^2.2.3", + "datatables.net-scroller": "^2.0.0", + "datatables.net-scroller-bs4": "^2.0.0", + "datatables.net-select": "^1.3.0", + "datatables.net-select-bs4": "^1.3.0", + "daterangepicker": "^3.0.5", + "dropzone": "^5.5.1", + "easy-pie-chart": "^2.1.7", + "es6-promise": "^4.2.8", + "font-awesome": "^4.7.0", + "formBuilder": "^3.2.3", + "fullcalendar": "^3.10.1", + "handlebars": "^4.1.1", + "handlebars-layouts": "^3.1.4", + "icheck": "^1.0.2", + "iconate": "*", + "input-switch": "^1.1.0", + "inputmask": "^4.0.8", + "isotope-layout": "^3.0.6", + "izimodal": "^1.5.1", + "jquery-confirm": "^3.3.4", + "jquery-form": "^4.2.2", + "jquery-jeditable": "^2.0.13", + "jquery-json": "^2.6.0", + "jQuery-QueryBuilder": "^2.5.2", + "jquery-migrate": "^3.1.0", + "jquery-placeholder": "^2.3.1", + "jquery.are-you-sure": "^1.9.0", + "jquery-serializejson": "^2.9.0", + "jquery-slidePanel": "^0.3.5", + "jquery-slimscroll": "^1.3.8", + "jquery-ui": "^1.12.1", + "jquery-validation": "^1.19.0", + "jquery.cookie": "^1.4.1", + "jquery.documentsize": "^1.2.5", + "jquery.filer": "^1.3.0", + "jquery.nicescroll": "^3.7.6", + "jquery.quicksearch": "^2.4.0", + "jquery.uniform": "^4.3.0", + "jscroll": "^2.4.1", + "jszip": "^3.2.2", + "moment": "^2.24.0", + "morris.js": "^0.5.0", + "mousetrap": "^1.6.3", + "multiselect": "^0.9.12", + "nestable": "*", + "numeral": "^2.0.6", + "packery": "^2.1.2", + "pdfmake": "^0.1.57", + "philter": "^1.5.0", + "promise-polyfill": "^8.1.3", + "pwstrength-bootstrap": "^3.0.3", + "raphael": "^2.2.8", + "selectize": "^0.12.6", + "screenfull": "^4.2.0", + "slidebars": "^2.0.2", + "summernote": "^0.8.12", + "swag": "^0.7.0", + "sweetalert2": "^8.16.1", + "tablesort": "^5.1.0", + "textillate": "^0.4.1", + "tooltipster": "^4.2.6", + "underscore": "^1.9.2", + "wew.js": "^1.0.1", + "x-editable": "^1.5.1" } } diff --git a/resources/lang/vendor/authentication-log/en/messages.php b/resources/lang/vendor/authentication-log/en/messages.php new file mode 100644 index 00000000..d4023cca --- /dev/null +++ b/resources/lang/vendor/authentication-log/en/messages.php @@ -0,0 +1,19 @@ + 'Login from a new device', + 'content' => 'Your :app account logged in from a new device.', + +]; diff --git a/resources/lang/vendor/backup/ar/notifications.php b/resources/lang/vendor/backup/ar/notifications.php new file mode 100644 index 00000000..f84de9cc --- /dev/null +++ b/resources/lang/vendor/backup/ar/notifications.php @@ -0,0 +1,35 @@ + 'رسالة استثناء: :message', + 'exception_trace' => 'تتبع الإستثناء: :trace', + 'exception_message_title' => 'رسالة استثناء', + 'exception_trace_title' => 'تتبع الإستثناء', + + 'backup_failed_subject' => 'أخفق النسخ الاحتياطي لل :application_name', + 'backup_failed_body' => 'مهم: حدث خطأ أثناء النسخ الاحتياطي :application_name', + + 'backup_successful_subject' => 'نسخ احتياطي جديد ناجح ل :application_name', + 'backup_successful_subject_title' => 'نجاح النسخ الاحتياطي الجديد!', + 'backup_successful_body' => 'أخبار عظيمة، نسخة احتياطية جديدة ل :application_name تم إنشاؤها بنجاح على القرص المسمى :disk_name.', + + 'cleanup_failed_subject' => 'فشل تنظيف النسخ الاحتياطي للتطبيق :application_name .', + 'cleanup_failed_body' => 'حدث خطأ أثناء تنظيف النسخ الاحتياطية ل :application_name', + + 'cleanup_successful_subject' => 'تنظيف النسخ الاحتياطية ل :application_name تمت بنجاح', + 'cleanup_successful_subject_title' => 'تنظيف النسخ الاحتياطية تم بنجاح!', + 'cleanup_successful_body' => 'تنظيف النسخ الاحتياطية ل :application_name على القرص المسمى :disk_name تم بنجاح.', + + 'healthy_backup_found_subject' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name صحية', + 'healthy_backup_found_subject_title' => 'النسخ الاحتياطية ل :application_name صحية', + 'healthy_backup_found_body' => 'تعتبر النسخ الاحتياطية ل :application_name صحية. عمل جيد!', + + 'unhealthy_backup_found_subject' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية', + 'unhealthy_backup_found_subject_title' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية. :problem', + 'unhealthy_backup_found_body' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name غير صحية.', + 'unhealthy_backup_found_not_reachable' => 'لا يمكن الوصول إلى وجهة النسخ الاحتياطي. :error', + 'unhealthy_backup_found_empty' => 'لا توجد نسخ احتياطية لهذا التطبيق على الإطلاق.', + 'unhealthy_backup_found_old' => 'تم إنشاء أحدث النسخ الاحتياطية في :date وتعتبر قديمة جدا.', + 'unhealthy_backup_found_unknown' => 'عذرا، لا يمكن تحديد سبب دقيق.', + 'unhealthy_backup_found_full' => 'النسخ الاحتياطية تستخدم الكثير من التخزين. الاستخدام الحالي هو :disk_usage وهو أعلى من الحد المسموح به من :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/cs/notifications.php b/resources/lang/vendor/backup/cs/notifications.php new file mode 100644 index 00000000..947eb436 --- /dev/null +++ b/resources/lang/vendor/backup/cs/notifications.php @@ -0,0 +1,35 @@ + 'Zpráva výjimky: :message', + 'exception_trace' => 'Stopa výjimky: :trace', + 'exception_message_title' => 'Zpráva výjimky', + 'exception_trace_title' => 'Stopa výjimky', + + 'backup_failed_subject' => 'Záloha :application_name neuspěla', + 'backup_failed_body' => 'Důležité: Při záloze :application_name se vyskytla chyba', + + 'backup_successful_subject' => 'Úspěšná nová záloha :application_name', + 'backup_successful_subject_title' => 'Úspěšná nová záloha!', + 'backup_successful_body' => 'Dobrá zpráva, na disku jménem :disk_name byla úspěšně vytvořena nová záloha :application_name.', + + 'cleanup_failed_subject' => 'Vyčištění záloh :application_name neuspělo.', + 'cleanup_failed_body' => 'Při vyčištění záloh :application_name se vyskytla chyba', + + 'cleanup_successful_subject' => 'Vyčištění záloh :application_name úspěšné', + 'cleanup_successful_subject_title' => 'Vyčištění záloh bylo úspěšné!', + 'cleanup_successful_body' => 'Vyčištění záloh :application_name na disku jménem :disk_name bylo úspěšné.', + + 'healthy_backup_found_subject' => 'Zálohy pro :application_name na disku :disk_name jsou zdravé', + 'healthy_backup_found_subject_title' => 'Zálohy pro :application_name jsou zdravé', + 'healthy_backup_found_body' => 'Zálohy pro :application_name jsou považovány za zdravé. Dobrá práce!', + + 'unhealthy_backup_found_subject' => 'Důležité: Zálohy pro :application_name jsou nezdravé', + 'unhealthy_backup_found_subject_title' => 'Důležité: Zálohy pro :application_name jsou nezdravé. :problem', + 'unhealthy_backup_found_body' => 'Zálohy pro :application_name na disku :disk_name Jsou nezdravé.', + 'unhealthy_backup_found_not_reachable' => 'Nelze se dostat k cíli zálohy. :error', + 'unhealthy_backup_found_empty' => 'Tato aplikace nemá vůbec žádné zálohy.', + 'unhealthy_backup_found_old' => 'Poslední záloha vytvořená dne :date je považována za příliš starou.', + 'unhealthy_backup_found_unknown' => 'Omlouváme se, nemůžeme určit přesný důvod.', + 'unhealthy_backup_found_full' => 'Zálohy zabírají příliš mnoho místa na disku. Aktuální využití disku je :disk_usage, což je vyšší než povolený limit :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/da/notifications.php b/resources/lang/vendor/backup/da/notifications.php new file mode 100644 index 00000000..e7b95fc5 --- /dev/null +++ b/resources/lang/vendor/backup/da/notifications.php @@ -0,0 +1,35 @@ + 'Fejlbesked: :message', + 'exception_trace' => 'Fejl trace: :trace', + 'exception_message_title' => 'Fejlbesked', + 'exception_trace_title' => 'Fejl trace', + + 'backup_failed_subject' => 'Backup af :application_name fejlede', + 'backup_failed_body' => 'Vigtigt: Der skete en fejl under backup af :application_name', + + 'backup_successful_subject' => 'Ny backup af :application_name oprettet', + 'backup_successful_subject_title' => 'Ny backup!', + 'backup_successful_body' => 'Gode nyheder - der blev oprettet en ny backup af :application_name på disken :disk_name.', + + 'cleanup_failed_subject' => 'Oprydning af backups for :application_name fejlede.', + 'cleanup_failed_body' => 'Der skete en fejl under oprydning af backups for :application_name', + + 'cleanup_successful_subject' => 'Oprydning af backups for :application_name gennemført', + 'cleanup_successful_subject_title' => 'Backup oprydning gennemført!', + 'cleanup_successful_body' => 'Oprydningen af backups for :application_name på disken :disk_name er gennemført.', + + 'healthy_backup_found_subject' => 'Alle backups for :application_name på disken :disk_name er OK', + 'healthy_backup_found_subject_title' => 'Alle backups for :application_name er OK', + 'healthy_backup_found_body' => 'Alle backups for :application_name er ok. Godt gået!', + + 'unhealthy_backup_found_subject' => 'Vigtigt: Backups for :application_name fejlbehæftede', + 'unhealthy_backup_found_subject_title' => 'Vigtigt: Backups for :application_name er fejlbehæftede. :problem', + 'unhealthy_backup_found_body' => 'Backups for :application_name på disken :disk_name er fejlbehæftede.', + 'unhealthy_backup_found_not_reachable' => 'Backup destinationen kunne ikke findes. :error', + 'unhealthy_backup_found_empty' => 'Denne applikation har ingen backups overhovedet.', + 'unhealthy_backup_found_old' => 'Den seneste backup fra :date er for gammel.', + 'unhealthy_backup_found_unknown' => 'Beklager, en præcis årsag kunne ikke findes.', + 'unhealthy_backup_found_full' => 'Backups bruger for meget plads. Nuværende disk forbrug er :disk_usage, hvilket er mere end den tilladte grænse på :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/de/notifications.php b/resources/lang/vendor/backup/de/notifications.php new file mode 100644 index 00000000..2d87d8f1 --- /dev/null +++ b/resources/lang/vendor/backup/de/notifications.php @@ -0,0 +1,35 @@ + 'Fehlermeldung: :message', + 'exception_trace' => 'Fehlerverfolgung: :trace', + 'exception_message_title' => 'Fehlermeldung', + 'exception_trace_title' => 'Fehlerverfolgung', + + 'backup_failed_subject' => 'Backup von :application_name konnte nicht erstellt werden', + 'backup_failed_body' => 'Wichtig: Beim Backup von :application_name ist ein Fehler aufgetreten', + + 'backup_successful_subject' => 'Erfolgreiches neues Backup von :application_name', + 'backup_successful_subject_title' => 'Erfolgreiches neues Backup!', + 'backup_successful_body' => 'Gute Nachrichten, ein neues Backup von :application_name wurde erfolgreich erstellt und in :disk_name gepeichert.', + + 'cleanup_failed_subject' => 'Aufräumen der Backups von :application_name schlug fehl.', + 'cleanup_failed_body' => 'Beim aufräumen der Backups von :application_name ist ein Fehler aufgetreten', + + 'cleanup_successful_subject' => 'Aufräumen der Backups von :application_name backups erfolgreich', + 'cleanup_successful_subject_title' => 'Aufräumen der Backups erfolgreich!', + 'cleanup_successful_body' => 'Aufräumen der Backups von :application_name in :disk_name war erfolgreich.', + + 'healthy_backup_found_subject' => 'Die Backups von :application_name in :disk_name sind gesund', + 'healthy_backup_found_subject_title' => 'Die Backups von :application_name sind Gesund', + 'healthy_backup_found_body' => 'Die Backups von :application_name wurden als gesund eingestuft. Gute Arbeit!', + + 'unhealthy_backup_found_subject' => 'Wichtig: Die Backups für :application_name sind nicht gesund', + 'unhealthy_backup_found_subject_title' => 'Wichtig: Die Backups für :application_name sind ungesund. :problem', + 'unhealthy_backup_found_body' => 'Die Backups für :application_name in :disk_name sind ungesund.', + 'unhealthy_backup_found_not_reachable' => 'Das Backup Ziel konnte nicht erreicht werden. :error', + 'unhealthy_backup_found_empty' => 'Es gibt für die Anwendung noch gar keine Backups.', + 'unhealthy_backup_found_old' => 'Das letzte Backup am :date ist zu lange her.', + 'unhealthy_backup_found_unknown' => 'Sorry, ein genauer Grund konnte nicht gefunden werden.', + 'unhealthy_backup_found_full' => 'Die Backups verbrauchen zu viel Platz. Aktuell wird :disk_usage belegt, dass ist höher als das erlaubte Limit von :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/en/notifications.php b/resources/lang/vendor/backup/en/notifications.php new file mode 100644 index 00000000..d7a11281 --- /dev/null +++ b/resources/lang/vendor/backup/en/notifications.php @@ -0,0 +1,35 @@ + 'Exception message: :message', + 'exception_trace' => 'Exception trace: :trace', + 'exception_message_title' => 'Exception message', + 'exception_trace_title' => 'Exception trace', + + 'backup_failed_subject' => 'Failed backup of :application_name', + 'backup_failed_body' => 'Important: An error occurred while backing up :application_name', + + 'backup_successful_subject' => 'Successful new backup of :application_name', + 'backup_successful_subject_title' => 'Successful new backup!', + 'backup_successful_body' => 'Great news, a new backup of :application_name was successfully created on the disk named :disk_name.', + + 'cleanup_failed_subject' => 'Cleaning up the backups of :application_name failed.', + 'cleanup_failed_body' => 'An error occurred while cleaning up the backups of :application_name', + + 'cleanup_successful_subject' => 'Clean up of :application_name backups successful', + 'cleanup_successful_subject_title' => 'Clean up of backups successful!', + 'cleanup_successful_body' => 'The clean up of the :application_name backups on the disk named :disk_name was successful.', + + 'healthy_backup_found_subject' => 'The backups for :application_name on disk :disk_name are healthy', + 'healthy_backup_found_subject_title' => 'The backups for :application_name are healthy', + 'healthy_backup_found_body' => 'The backups for :application_name are considered healthy. Good job!', + + 'unhealthy_backup_found_subject' => 'Important: The backups for :application_name are unhealthy', + 'unhealthy_backup_found_subject_title' => 'Important: The backups for :application_name are unhealthy. :problem', + 'unhealthy_backup_found_body' => 'The backups for :application_name on disk :disk_name are unhealthy.', + 'unhealthy_backup_found_not_reachable' => 'The backup destination cannot be reached. :error', + 'unhealthy_backup_found_empty' => 'There are no backups of this application at all.', + 'unhealthy_backup_found_old' => 'The latest backup made on :date is considered too old.', + 'unhealthy_backup_found_unknown' => 'Sorry, an exact reason cannot be determined.', + 'unhealthy_backup_found_full' => 'The backups are using too much storage. Current usage is :disk_usage which is higher than the allowed limit of :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/es/notifications.php b/resources/lang/vendor/backup/es/notifications.php new file mode 100644 index 00000000..4f4900fe --- /dev/null +++ b/resources/lang/vendor/backup/es/notifications.php @@ -0,0 +1,35 @@ + 'Mensaje de la excepción: :message', + 'exception_trace' => 'Traza de la excepción: :trace', + 'exception_message_title' => 'Mensaje de la excepción', + 'exception_trace_title' => 'Traza de la excepción', + + 'backup_failed_subject' => 'Copia de seguridad de :application_name fallida', + 'backup_failed_body' => 'Importante: Ocurrió un error al realizar la copia de seguridad de :application_name', + + 'backup_successful_subject' => 'Se completó con éxito la copia de seguridad de :application_name', + 'backup_successful_subject_title' => '¡Nueva copia de seguridad creada con éxito!', + 'backup_successful_body' => 'Buenas noticias, una nueva copia de seguridad de :application_name fue creada con éxito en el disco llamado :disk_name.', + + 'cleanup_failed_subject' => 'La limpieza de copias de seguridad de :application_name falló.', + 'cleanup_failed_body' => 'Ocurrió un error mientras se realizaba la limpieza de copias de seguridad de :application_name', + + 'cleanup_successful_subject' => 'La limpieza de copias de seguridad de :application_name se completó con éxito', + 'cleanup_successful_subject_title' => '!Limpieza de copias de seguridad completada con éxito!', + 'cleanup_successful_body' => 'La limpieza de copias de seguridad de :application_name en el disco llamado :disk_name se completo con éxito.', + + 'healthy_backup_found_subject' => 'Las copias de seguridad de :application_name en el disco :disk_name están en buen estado', + 'healthy_backup_found_subject_title' => 'Las copias de seguridad de :application_name están en buen estado', + 'healthy_backup_found_body' => 'Las copias de seguridad de :application_name se consideran en buen estado. ¡Buen trabajo!', + + 'unhealthy_backup_found_subject' => 'Importante: Las copias de seguridad de :application_name están en mal estado', + 'unhealthy_backup_found_subject_title' => 'Importante: Las copias de seguridad de :application_name están en mal estado. :problem', + 'unhealthy_backup_found_body' => 'Las copias de seguridad de :application_name en el disco :disk_name están en mal estado.', + 'unhealthy_backup_found_not_reachable' => 'No se puede acceder al destino de la copia de seguridad. :error', + 'unhealthy_backup_found_empty' => 'No existe ninguna copia de seguridad de esta aplicación.', + 'unhealthy_backup_found_old' => 'La última copia de seguriad hecha en :date es demasiado antigua.', + 'unhealthy_backup_found_unknown' => 'Lo siento, no es posible determinar la razón exacta.', + 'unhealthy_backup_found_full' => 'Las copias de seguridad están ocupando demasiado espacio. El espacio utilizado actualmente es :disk_usage el cual es mayor que el límite permitido de :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/fa/notifications.php b/resources/lang/vendor/backup/fa/notifications.php new file mode 100644 index 00000000..33cbe335 --- /dev/null +++ b/resources/lang/vendor/backup/fa/notifications.php @@ -0,0 +1,35 @@ + 'پیغام خطا: :message', + 'exception_trace' => 'جزییات خطا: :trace', + 'exception_message_title' => 'پیغام خطا', + 'exception_trace_title' => 'جزییات خطا', + + 'backup_failed_subject' => 'پشتیبان‌گیری :application_name با خطا مواجه شد.', + 'backup_failed_body' => 'پیغام مهم: هنگام پشتیبان‌گیری از :application_name خطایی رخ داده است. ', + + 'backup_successful_subject' => 'نسخه پشتیبان جدید :application_name با موفقیت ساخته شد.', + 'backup_successful_subject_title' => 'پشتیبان‌گیری موفق!', + 'backup_successful_body' => 'خبر خوب, به تازگی نسخه پشتیبان :application_name بر روی دیسک :disk_name با موفقیت ساخته شد. ', + + 'cleanup_failed_subject' => 'پاک‌‌سازی نسخه پشتیبان :application_name انجام نشد.', + 'cleanup_failed_body' => 'هنگام پاک‌سازی نسخه پشتیبان :application_name خطایی رخ داده است.', + + 'cleanup_successful_subject' => 'پاک‌سازی نسخه پشتیبان :application_name با موفقیت انجام شد.', + 'cleanup_successful_subject_title' => 'پاک‌سازی نسخه پشتیبان!', + 'cleanup_successful_body' => 'پاک‌سازی نسخه پشتیبان :application_name بر روی دیسک :disk_name با موفقیت انجام شد.', + + 'healthy_backup_found_subject' => 'نسخه پشتیبان :application_name بر روی دیسک :disk_name سالم بود.', + 'healthy_backup_found_subject_title' => 'نسخه پشتیبان :application_name سالم بود.', + 'healthy_backup_found_body' => 'نسخه پشتیبان :application_name به نظر سالم میاد. دمت گرم!', + + 'unhealthy_backup_found_subject' => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود.', + 'unhealthy_backup_found_subject_title' => 'خبر مهم: نسخه پشتیبان :application_name سالم نبود. :problem', + 'unhealthy_backup_found_body' => 'نسخه پشتیبان :application_name بر روی دیسک :disk_name سالم نبود.', + 'unhealthy_backup_found_not_reachable' => 'مقصد پشتیبان‌گیری در دسترس نبود. :error', + 'unhealthy_backup_found_empty' => 'برای این برنامه هیچ نسخه پشتیبانی وجود ندارد.', + 'unhealthy_backup_found_old' => 'آخرین نسخه پشتیبان برای تاریخ :date است. که به نظر خیلی قدیمی میاد. ', + 'unhealthy_backup_found_unknown' => 'متاسفانه دلیل دقیق مشخص نشده است.', + 'unhealthy_backup_found_full' => 'نسخه‌های پشتیبانی که تهیه کرده اید حجم زیادی اشغال کرده اند. میزان دیسک استفاده شده :disk_usage است که از میزان مجاز :disk_limit فراتر رفته است. ', +]; diff --git a/resources/lang/vendor/backup/fi/notifications.php b/resources/lang/vendor/backup/fi/notifications.php new file mode 100644 index 00000000..85e3607c --- /dev/null +++ b/resources/lang/vendor/backup/fi/notifications.php @@ -0,0 +1,35 @@ + 'Virheilmoitus: :message', + 'exception_trace' => 'Virhe, jäljitys: :trace', + 'exception_message_title' => 'Virheilmoitus', + 'exception_trace_title' => 'Virheen jäljitys', + + 'backup_failed_subject' => ':application_name varmuuskopiointi epäonnistui', + 'backup_failed_body' => 'HUOM!: :application_name varmuuskoipionnissa tapahtui virhe', + + 'backup_successful_subject' => ':application_name varmuuskopioitu onnistuneesti', + 'backup_successful_subject_title' => 'Uusi varmuuskopio!', + 'backup_successful_body' => 'Hyviä uutisia! :application_name on varmuuskopioitu levylle :disk_name.', + + 'cleanup_failed_subject' => ':application_name varmuuskopioiden poistaminen epäonnistui.', + 'cleanup_failed_body' => ':application_name varmuuskopioiden poistamisessa tapahtui virhe.', + + 'cleanup_successful_subject' => ':application_name varmuuskopiot poistettu onnistuneesti', + 'cleanup_successful_subject_title' => 'Varmuuskopiot poistettu onnistuneesti!', + 'cleanup_successful_body' => ':application_name varmuuskopiot poistettu onnistuneesti levyltä :disk_name.', + + 'healthy_backup_found_subject' => ':application_name varmuuskopiot levyllä :disk_name ovat kunnossa', + 'healthy_backup_found_subject_title' => ':application_name varmuuskopiot ovat kunnossa', + 'healthy_backup_found_body' => ':application_name varmuuskopiot ovat kunnossa. Hieno homma!', + + 'unhealthy_backup_found_subject' => 'HUOM!: :application_name varmuuskopiot ovat vialliset', + 'unhealthy_backup_found_subject_title' => 'HUOM!: :application_name varmuuskopiot ovat vialliset. :problem', + 'unhealthy_backup_found_body' => ':application_name varmuuskopiot levyllä :disk_name ovat vialliset.', + 'unhealthy_backup_found_not_reachable' => 'Varmuuskopioiden kohdekansio ei ole saatavilla. :error', + 'unhealthy_backup_found_empty' => 'Tästä sovelluksesta ei ole varmuuskopioita.', + 'unhealthy_backup_found_old' => 'Viimeisin varmuuskopio, luotu :date, on liian vanha.', + 'unhealthy_backup_found_unknown' => 'Virhe, tarkempaa tietoa syystä ei valitettavasti ole saatavilla.', + 'unhealthy_backup_found_full' => 'Varmuuskopiot vievät liikaa levytilaa. Tällä hetkellä käytössä :disk_usage, mikä on suurempi kuin sallittu tilavuus (:disk_limit).', +]; diff --git a/resources/lang/vendor/backup/fr/notifications.php b/resources/lang/vendor/backup/fr/notifications.php new file mode 100644 index 00000000..57a98c23 --- /dev/null +++ b/resources/lang/vendor/backup/fr/notifications.php @@ -0,0 +1,35 @@ + 'Message de l\'exception : :message', + 'exception_trace' => 'Trace de l\'exception : :trace', + 'exception_message_title' => 'Message de l\'exception', + 'exception_trace_title' => 'Trace de l\'exception', + + 'backup_failed_subject' => 'Échec de la sauvegarde de :application_name', + 'backup_failed_body' => 'Important : Une erreur est survenue lors de la sauvegarde de :application_name', + + 'backup_successful_subject' => 'Succès de la sauvegarde de :application_name', + 'backup_successful_subject_title' => 'Sauvegarde créée avec succès !', + 'backup_successful_body' => 'Bonne nouvelle, une nouvelle sauvegarde de :application_name a été créée avec succès sur le disque nommé :disk_name.', + + 'cleanup_failed_subject' => 'Le nettoyage des sauvegardes de :application_name a echoué.', + 'cleanup_failed_body' => 'Une erreur est survenue lors du nettoyage des sauvegardes de :application_name', + + 'cleanup_successful_subject' => 'Succès du nettoyage des sauvegardes de :application_name', + 'cleanup_successful_subject_title' => 'Sauvegardes nettoyées avec succès !', + 'cleanup_successful_body' => 'Le nettoyage des sauvegardes de :application_name sur le disque nommé :disk_name a été effectué avec succès.', + + 'healthy_backup_found_subject' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont saines', + 'healthy_backup_found_subject_title' => 'Les sauvegardes pour :application_name sont saines', + 'healthy_backup_found_body' => 'Les sauvegardes pour :application_name sont considérées saines. Bon travail !', + + 'unhealthy_backup_found_subject' => 'Important : Les sauvegardes pour :application_name sont corrompues', + 'unhealthy_backup_found_subject_title' => 'Important : Les sauvegardes pour :application_name sont corrompues. :problem', + 'unhealthy_backup_found_body' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont corrompues.', + 'unhealthy_backup_found_not_reachable' => 'La destination de la sauvegarde n\'est pas accessible. :error', + 'unhealthy_backup_found_empty' => 'Il n\'y a aucune sauvegarde pour cette application.', + 'unhealthy_backup_found_old' => 'La dernière sauvegarde du :date est considérée trop vieille.', + 'unhealthy_backup_found_unknown' => 'Désolé, une raison exacte ne peut être déterminée.', + 'unhealthy_backup_found_full' => 'Les sauvegardes utilisent trop d\'espace disque. L\'utilisation actuelle est de :disk_usage alors que la limite autorisée est de :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/hi/notifications.php b/resources/lang/vendor/backup/hi/notifications.php new file mode 100644 index 00000000..74a188d3 --- /dev/null +++ b/resources/lang/vendor/backup/hi/notifications.php @@ -0,0 +1,35 @@ + 'गलती संदेश: :message', + 'exception_trace' => 'गलती निशान: :trace', + 'exception_message_title' => 'गलती संदेश', + 'exception_trace_title' => 'गलती निशान', + + 'backup_failed_subject' => ':application_name का बैकअप असफल रहा', + 'backup_failed_body' => 'जरूरी सुचना: :application_name का बैकअप लेते समय असफल रहे', + + 'backup_successful_subject' => ':application_name का बैकअप सफल रहा', + 'backup_successful_subject_title' => 'बैकअप सफल रहा!', + 'backup_successful_body' => 'खुशखबरी, :application_name का बैकअप :disk_name पर संग्रहित करने मे सफल रहे.', + + 'cleanup_failed_subject' => ':application_name के बैकअप की सफाई असफल रही.', + 'cleanup_failed_body' => ':application_name के बैकअप की सफाई करते समय कुछ बाधा आयी है.', + + 'cleanup_successful_subject' => ':application_name के बैकअप की सफाई सफल रही', + 'cleanup_successful_subject_title' => 'बैकअप की सफाई सफल रही!', + 'cleanup_successful_body' => ':application_name का बैकअप जो :disk_name नाम की डिस्क पर संग्रहित है, उसकी सफाई सफल रही.', + + 'healthy_backup_found_subject' => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप स्वस्थ है', + 'healthy_backup_found_subject_title' => ':application_name के सभी बैकअप स्वस्थ है', + 'healthy_backup_found_body' => 'बहुत बढ़िया! :application_name के सभी बैकअप स्वस्थ है.', + + 'unhealthy_backup_found_subject' => 'जरूरी सुचना : :application_name के बैकअप अस्वस्थ है', + 'unhealthy_backup_found_subject_title' => 'जरूरी सुचना : :application_name के बैकअप :problem के बजेसे अस्वस्थ है', + 'unhealthy_backup_found_body' => ':disk_name नाम की डिस्क पर संग्रहित :application_name के बैकअप अस्वस्थ है', + 'unhealthy_backup_found_not_reachable' => ':error के बजेसे बैकअप की मंजिल तक पोहोच नहीं सकते.', + 'unhealthy_backup_found_empty' => 'इस एप्लीकेशन का कोई भी बैकअप नहीं है.', + 'unhealthy_backup_found_old' => 'हालहीमें :date को लिया हुआ बैकअप बहुत पुराना है.', + 'unhealthy_backup_found_unknown' => 'माफ़ कीजिये, सही कारण निर्धारित नहीं कर सकते.', + 'unhealthy_backup_found_full' => 'सभी बैकअप बहुत ज्यादा जगह का उपयोग कर रहे है. फ़िलहाल सभी बैकअप :disk_usage जगह का उपयोग कर रहे है, जो की :disk_limit अनुमति सीमा से अधिक का है.', +]; diff --git a/resources/lang/vendor/backup/id/notifications.php b/resources/lang/vendor/backup/id/notifications.php new file mode 100644 index 00000000..971322a0 --- /dev/null +++ b/resources/lang/vendor/backup/id/notifications.php @@ -0,0 +1,35 @@ + 'Pesan pengecualian: :message', + 'exception_trace' => 'Jejak pengecualian: :trace', + 'exception_message_title' => 'Pesan pengecualian', + 'exception_trace_title' => 'Jejak pengecualian', + + 'backup_failed_subject' => 'Gagal backup :application_name', + 'backup_failed_body' => 'Penting: Sebuah error terjadi ketika membackup :application_name', + + 'backup_successful_subject' => 'Backup baru sukses dari :application_name', + 'backup_successful_subject_title' => 'Backup baru sukses!', + 'backup_successful_body' => 'Kabar baik, sebuah backup baru dari :application_name sukses dibuat pada disk bernama :disk_name.', + + 'cleanup_failed_subject' => 'Membersihkan backup dari :application_name yang gagal.', + 'cleanup_failed_body' => 'Sebuah error teradi ketika membersihkan backup dari :application_name', + + 'cleanup_successful_subject' => 'Sukses membersihkan backup :application_name', + 'cleanup_successful_subject_title' => 'Sukses membersihkan backup!', + 'cleanup_successful_body' => 'Pembersihan backup :application_name pada disk bernama :disk_name telah sukses.', + + 'healthy_backup_found_subject' => 'Backup untuk :application_name pada disk :disk_name sehat', + 'healthy_backup_found_subject_title' => 'Backup untuk :application_name sehat', + 'healthy_backup_found_body' => 'Backup untuk :application_name dipertimbangkan sehat. Kerja bagus!', + + 'unhealthy_backup_found_subject' => 'Penting: Backup untuk :application_name tidak sehat', + 'unhealthy_backup_found_subject_title' => 'Penting: Backup untuk :application_name tidak sehat. :problem', + 'unhealthy_backup_found_body' => 'Backup untuk :application_name pada disk :disk_name tidak sehat.', + 'unhealthy_backup_found_not_reachable' => 'Tujuan backup tidak dapat terjangkau. :error', + 'unhealthy_backup_found_empty' => 'Tidak ada backup pada aplikasi ini sama sekali.', + 'unhealthy_backup_found_old' => 'Backup terakhir dibuat pada :date dimana dipertimbahkan sudah sangat lama.', + 'unhealthy_backup_found_unknown' => 'Maaf, sebuah alasan persisnya tidak dapat ditentukan.', + 'unhealthy_backup_found_full' => 'Backup menggunakan terlalu banyak kapasitas penyimpanan. Penggunaan terkini adalah :disk_usage dimana lebih besar dari batas yang diperbolehkan yaitu :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/it/notifications.php b/resources/lang/vendor/backup/it/notifications.php new file mode 100644 index 00000000..43ad38e4 --- /dev/null +++ b/resources/lang/vendor/backup/it/notifications.php @@ -0,0 +1,35 @@ + 'Messaggio dell\'eccezione: :message', + 'exception_trace' => 'Traccia dell\'eccezione: :trace', + 'exception_message_title' => 'Messaggio dell\'eccezione', + 'exception_trace_title' => 'Traccia dell\'eccezione', + + 'backup_failed_subject' => 'Fallito il backup di :application_name', + 'backup_failed_body' => 'Importante: Si è verificato un errore durante il backup di :application_name', + + 'backup_successful_subject' => 'Creato nuovo backup di :application_name', + 'backup_successful_subject_title' => 'Nuovo backup creato!', + 'backup_successful_body' => 'Grande notizia, un nuovo backup di :application_name è stato creato con successo sul disco :disk_name.', + + 'cleanup_failed_subject' => 'Pulizia dei backup di :application_name fallita.', + 'cleanup_failed_body' => 'Si è verificato un errore durante la pulizia dei backup di :application_name', + + 'cleanup_successful_subject' => 'Pulizia dei backup di :application_name avvenuta con successo', + 'cleanup_successful_subject_title' => 'Pulizia dei backup avvenuta con successo!', + 'cleanup_successful_body' => 'La pulizia dei backup di :application_name sul disco :disk_name è avvenuta con successo.', + + 'healthy_backup_found_subject' => 'I backup per :application_name sul disco :disk_name sono sani', + 'healthy_backup_found_subject_title' => 'I backup per :application_name sono sani', + 'healthy_backup_found_body' => 'I backup per :application_name sono considerati sani. Bel Lavoro!', + + 'unhealthy_backup_found_subject' => 'Importante: i backup per :application_name sono corrotti', + 'unhealthy_backup_found_subject_title' => 'Importante: i backup per :application_name sono corrotti. :problem', + 'unhealthy_backup_found_body' => 'I backup per :application_name sul disco :disk_name sono corrotti.', + 'unhealthy_backup_found_not_reachable' => 'Impossibile raggiungere la destinazione di backup. :error', + 'unhealthy_backup_found_empty' => 'Non esiste alcun backup di questa applicazione.', + 'unhealthy_backup_found_old' => 'L\'ultimo backup fatto il :date è considerato troppo vecchio.', + 'unhealthy_backup_found_unknown' => 'Spiacenti, non è possibile determinare una ragione esatta.', + 'unhealthy_backup_found_full' => 'I backup utilizzano troppa memoria. L\'utilizzo corrente è :disk_usage che è superiore al limite consentito di :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/nl/notifications.php b/resources/lang/vendor/backup/nl/notifications.php new file mode 100644 index 00000000..5dbc65ed --- /dev/null +++ b/resources/lang/vendor/backup/nl/notifications.php @@ -0,0 +1,35 @@ + 'Fout bericht: :message', + 'exception_trace' => 'Fout trace: :trace', + 'exception_message_title' => 'Fout bericht', + 'exception_trace_title' => 'Fout trace', + + 'backup_failed_subject' => 'Back-up van :application_name mislukt', + 'backup_failed_body' => 'Belangrijk: Er ging iets fout tijdens het maken van een back-up van :application_name', + + 'backup_successful_subject' => 'Succesvolle nieuwe back-up van :application_name', + 'backup_successful_subject_title' => 'Succesvolle nieuwe back-up!', + 'backup_successful_body' => 'Goed nieuws, een nieuwe back-up van :application_name was succesvol aangemaakt op de schijf genaamd :disk_name.', + + 'cleanup_failed_subject' => 'Het opschonen van de back-ups van :application_name is mislukt.', + 'cleanup_failed_body' => 'Er ging iets fout tijdens het opschonen van de back-ups van :application_name', + + 'cleanup_successful_subject' => 'Opschonen van :application_name back-ups was succesvol.', + 'cleanup_successful_subject_title' => 'Opschonen van back-ups was succesvol!', + 'cleanup_successful_body' => 'Het opschonen van de :application_name back-ups op de schijf genaamd :disk_name was succesvol.', + + 'healthy_backup_found_subject' => 'De back-ups voor :application_name op schijf :disk_name zijn gezond', + 'healthy_backup_found_subject_title' => 'De back-ups voor :application_name zijn gezond', + 'healthy_backup_found_body' => 'De back-ups voor :application_name worden als gezond beschouwd. Goed gedaan!', + + 'unhealthy_backup_found_subject' => 'Belangrijk: De back-ups voor :application_name zijn niet meer gezond', + 'unhealthy_backup_found_subject_title' => 'Belangrijk: De back-ups voor :application_name zijn niet gezond. :problem', + 'unhealthy_backup_found_body' => 'De back-ups voor :application_name op schijf :disk_name zijn niet gezond.', + 'unhealthy_backup_found_not_reachable' => 'De back-upbestemming kon niet worden bereikt. :error', + 'unhealthy_backup_found_empty' => 'Er zijn geen back-ups van deze applicatie beschikbaar.', + 'unhealthy_backup_found_old' => 'De laatste back-up gemaakt op :date is te oud.', + 'unhealthy_backup_found_unknown' => 'Sorry, een exacte reden kon niet worden bepaald.', + 'unhealthy_backup_found_full' => 'De back-ups gebruiken te veel opslagruimte. Momenteel wordt er :disk_usage gebruikt wat hoger is dan de toegestane limiet van :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/pl/notifications.php b/resources/lang/vendor/backup/pl/notifications.php new file mode 100644 index 00000000..7b267ac8 --- /dev/null +++ b/resources/lang/vendor/backup/pl/notifications.php @@ -0,0 +1,35 @@ + 'Błąd: :message', + 'exception_trace' => 'Zrzut błędu: :trace', + 'exception_message_title' => 'Błąd', + 'exception_trace_title' => 'Zrzut błędu', + + 'backup_failed_subject' => 'Tworzenie kopii zapasowej aplikacji :application_name nie powiodło się', + 'backup_failed_body' => 'Ważne: Wystąpił błąd podczas tworzenia kopii zapasowej aplikacji :application_name', + + 'backup_successful_subject' => 'Pomyślnie utworzono kopię zapasową aplikacji :application_name', + 'backup_successful_subject_title' => 'Nowa kopia zapasowa!', + 'backup_successful_body' => 'Wspaniała wiadomość, nowa kopia zapasowa aplikacji :application_name została pomyślnie utworzona na dysku o nazwie :disk_name.', + + 'cleanup_failed_subject' => 'Czyszczenie kopii zapasowych aplikacji :application_name nie powiodło się.', + 'cleanup_failed_body' => 'Wystąpił błąd podczas czyszczenia kopii zapasowej aplikacji :application_name', + + 'cleanup_successful_subject' => 'Kopie zapasowe aplikacji :application_name zostały pomyślnie wyczyszczone', + 'cleanup_successful_subject_title' => 'Kopie zapasowe zostały pomyślnie wyczyszczone!', + 'cleanup_successful_body' => 'Czyszczenie kopii zapasowych aplikacji :application_name na dysku :disk_name zakończone sukcesem.', + + 'healthy_backup_found_subject' => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są poprawne', + 'healthy_backup_found_subject_title' => 'Kopie zapasowe aplikacji :application_name są poprawne', + 'healthy_backup_found_body' => 'Kopie zapasowe aplikacji :application_name są poprawne. Dobra robota!', + + 'unhealthy_backup_found_subject' => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne', + 'unhealthy_backup_found_subject_title' => 'Ważne: Kopie zapasowe aplikacji :application_name są niepoprawne. :problem', + 'unhealthy_backup_found_body' => 'Kopie zapasowe aplikacji :application_name na dysku :disk_name są niepoprawne.', + 'unhealthy_backup_found_not_reachable' => 'Miejsce docelowe kopii zapasowej nie jest osiągalne. :error', + 'unhealthy_backup_found_empty' => 'W aplikacji nie ma żadnej kopii zapasowych tej aplikacji.', + 'unhealthy_backup_found_old' => 'Ostatnia kopia zapasowa wykonania dnia :date jest zbyt stara.', + 'unhealthy_backup_found_unknown' => 'Niestety, nie można ustalić dokładnego błędu.', + 'unhealthy_backup_found_full' => 'Kopie zapasowe zajmują zbyt dużo miejsca. Obecne użycie dysku :disk_usage jest większe od ustalonego limitu :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/pt-BR/notifications.php b/resources/lang/vendor/backup/pt-BR/notifications.php new file mode 100644 index 00000000..d22ebf4d --- /dev/null +++ b/resources/lang/vendor/backup/pt-BR/notifications.php @@ -0,0 +1,35 @@ + 'Exception message: :message', + 'exception_trace' => 'Exception trace: :trace', + 'exception_message_title' => 'Exception message', + 'exception_trace_title' => 'Exception trace', + + 'backup_failed_subject' => 'Falha no backup da aplicação :application_name', + 'backup_failed_body' => 'Importante: Ocorreu um erro ao fazer o backup da aplicação :application_name', + + 'backup_successful_subject' => 'Backup realizado com sucesso: :application_name', + 'backup_successful_subject_title' => 'Backup Realizado com sucesso!', + 'backup_successful_body' => 'Boas notícias, um novo backup da aplicação :application_name foi criado no disco :disk_name.', + + 'cleanup_failed_subject' => 'Falha na limpeza dos backups da aplicação :application_name.', + 'cleanup_failed_body' => 'Um erro ocorreu ao fazer a limpeza dos backups da aplicação :application_name', + + 'cleanup_successful_subject' => 'Limpeza dos backups da aplicação :application_name concluída!', + 'cleanup_successful_subject_title' => 'Limpeza dos backups concluída!', + 'cleanup_successful_body' => 'A limpeza dos backups da aplicação :application_name no disco :disk_name foi concluída.', + + 'healthy_backup_found_subject' => 'Os backups da aplicação :application_name no disco :disk_name estão em dia', + 'healthy_backup_found_subject_title' => 'Os backups da aplicação :application_name estão em dia', + 'healthy_backup_found_body' => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!', + + 'unhealthy_backup_found_subject' => 'Importante: Os backups da aplicação :application_name não estão em dia', + 'unhealthy_backup_found_subject_title' => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem', + 'unhealthy_backup_found_body' => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.', + 'unhealthy_backup_found_not_reachable' => 'O destino dos backups não pode ser alcançado. :error', + 'unhealthy_backup_found_empty' => 'Não existem backups para essa aplicação.', + 'unhealthy_backup_found_old' => 'O último backup realizado em :date é considerado muito antigo.', + 'unhealthy_backup_found_unknown' => 'Desculpe, a exata razão não pode ser encontrada.', + 'unhealthy_backup_found_full' => 'Os backups estão usando muito espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/ro/notifications.php b/resources/lang/vendor/backup/ro/notifications.php new file mode 100644 index 00000000..cc0322db --- /dev/null +++ b/resources/lang/vendor/backup/ro/notifications.php @@ -0,0 +1,35 @@ + 'Cu excepția mesajului: :message', + 'exception_trace' => 'Urmă excepţie: :trace', + 'exception_message_title' => 'Mesaj de excepție', + 'exception_trace_title' => 'Urmă excepţie', + + 'backup_failed_subject' => 'Nu s-a putut face copie de rezervă pentru :application_name', + 'backup_failed_body' => 'Important: A apărut o eroare în timpul generării copiei de rezervă pentru :application_name', + + 'backup_successful_subject' => 'Copie de rezervă efectuată cu succes pentru :application_name', + 'backup_successful_subject_title' => 'O nouă copie de rezervă a fost efectuată cu succes!', + 'backup_successful_body' => 'Vești bune, o nouă copie de rezervă pentru :application_name a fost creată cu succes pe discul cu numele :disk_name.', + + 'cleanup_failed_subject' => 'Curățarea copiilor de rezervă pentru :application_name nu a reușit.', + 'cleanup_failed_body' => 'A apărut o eroare în timpul curățirii copiilor de rezervă pentru :application_name', + + 'cleanup_successful_subject' => 'Curățarea copiilor de rezervă pentru :application_name a fost făcută cu succes', + 'cleanup_successful_subject_title' => 'Curățarea copiilor de rezervă a fost făcută cu succes!', + 'cleanup_successful_body' => 'Curățarea copiilor de rezervă pentru :application_name de pe discul cu numele :disk_name a fost făcută cu succes.', + + 'healthy_backup_found_subject' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name sunt în regulă', + 'healthy_backup_found_subject_title' => 'Copiile de rezervă pentru :application_name sunt în regulă', + 'healthy_backup_found_body' => 'Copiile de rezervă pentru :application_name sunt considerate în regulă. Bună treabă!', + + 'unhealthy_backup_found_subject' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă', + 'unhealthy_backup_found_subject_title' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă. :problem', + 'unhealthy_backup_found_body' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name nu sunt în regulă.', + 'unhealthy_backup_found_not_reachable' => 'Nu se poate ajunge la destinația copiilor de rezervă. :error', + 'unhealthy_backup_found_empty' => 'Nu există copii de rezervă ale acestei aplicații.', + 'unhealthy_backup_found_old' => 'Cea mai recentă copie de rezervă făcută la :date este considerată prea veche.', + 'unhealthy_backup_found_unknown' => 'Ne pare rău, un motiv exact nu poate fi determinat.', + 'unhealthy_backup_found_full' => 'Copiile de rezervă folosesc prea mult spațiu de stocare. Utilizarea curentă este de :disk_usage care este mai mare decât limita permisă de :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/ru/notifications.php b/resources/lang/vendor/backup/ru/notifications.php new file mode 100644 index 00000000..875633c3 --- /dev/null +++ b/resources/lang/vendor/backup/ru/notifications.php @@ -0,0 +1,35 @@ + 'Сообщение об ошибке: :message', + 'exception_trace' => 'Сведения об ошибке: :trace', + 'exception_message_title' => 'Сообщение об ошибке', + 'exception_trace_title' => 'Сведения об ошибке', + + 'backup_failed_subject' => 'Не удалось сделать резервную копию :application_name', + 'backup_failed_body' => 'Внимание: Произошла ошибка во время резервного копирования :application_name', + + 'backup_successful_subject' => 'Успешно создана новая резервная копия :application_name', + 'backup_successful_subject_title' => 'Успешно создана новая резервная копия!', + 'backup_successful_body' => 'Отличная новость, новая резервная копия :application_name успешно создана и сохранена на диск :disk_name.', + + 'cleanup_failed_subject' => 'Не удалось очистить резервные копии :application_name', + 'cleanup_failed_body' => 'Произошла ошибка при очистке резервных копий :application_name', + + 'cleanup_successful_subject' => 'Очистка от резервных копий :application_name прошла успешно', + 'cleanup_successful_subject_title' => 'Очистка резервных копий прошла удачно!', + 'cleanup_successful_body' => 'Очистка от старых резервных копий :application_name на диске :disk_name прошла удачно.', + + 'healthy_backup_found_subject' => 'Резервная копия :application_name с диска :disk_name установлена', + 'healthy_backup_found_subject_title' => 'Резервная копия :application_name установлена', + 'healthy_backup_found_body' => 'Резервная копия :application_name успешно установлена. Хорошая работа!', + + 'unhealthy_backup_found_subject' => 'Внимание: резервная копия :application_name не установилась', + 'unhealthy_backup_found_subject_title' => 'Внимание: резервная копия для :application_name не установилась. :problem', + 'unhealthy_backup_found_body' => 'Резервная копия для :application_name на диске :disk_name не установилась.', + 'unhealthy_backup_found_not_reachable' => 'Резервная копия не смогла установиться. :error', + 'unhealthy_backup_found_empty' => 'Резервные копии для этого приложения отсутствуют.', + 'unhealthy_backup_found_old' => 'Последнее резервное копирование создано :date является устаревшим.', + 'unhealthy_backup_found_unknown' => 'Извините, точная причина не может быть определена.', + 'unhealthy_backup_found_full' => 'Резервные копии используют слишком много памяти. Используется :disk_usage что выше допустимого предела: :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/tr/notifications.php b/resources/lang/vendor/backup/tr/notifications.php new file mode 100644 index 00000000..298b0ec4 --- /dev/null +++ b/resources/lang/vendor/backup/tr/notifications.php @@ -0,0 +1,35 @@ + 'Hata mesajı: :message', + 'exception_trace' => 'Hata izleri: :trace', + 'exception_message_title' => 'Hata mesajı', + 'exception_trace_title' => 'Hata izleri', + + 'backup_failed_subject' => 'Yedeklenemedi :application_name', + 'backup_failed_body' => 'Önemli: Yedeklenirken bir hata oluştu :application_name', + + 'backup_successful_subject' => 'Başarılı :application_name yeni yedeklemesi', + 'backup_successful_subject_title' => 'Başarılı bir yeni yedekleme!', + 'backup_successful_body' => 'Harika bir haber, :application_name âit yeni bir yedekleme :disk_name adlı diskte başarıyla oluşturuldu.', + + 'cleanup_failed_subject' => ':application_name yedeklemeleri temizlenmesi başarısız.', + 'cleanup_failed_body' => ':application_name yedeklerini temizlerken bir hata oluştu ', + + 'cleanup_successful_subject' => ':application_name yedeklemeleri temizlenmesi başarılı.', + 'cleanup_successful_subject_title' => 'Yedeklerin temizlenmesi başarılı!', + 'cleanup_successful_body' => ':application_name yedeklemeleri temizlenmesi ,:disk_name diskinden silindi', + + 'healthy_backup_found_subject' => ':application_name yedeklenmesi ,:disk_name adlı diskte sağlıklı', + 'healthy_backup_found_subject_title' => ':application_name yedeklenmesi sağlıklı', + 'healthy_backup_found_body' => ':application_name için yapılan yedeklemeler sağlıklı sayılır. Aferin!', + + 'unhealthy_backup_found_subject' => 'Önemli: :application_name için yedeklemeler sağlıksız', + 'unhealthy_backup_found_subject_title' => 'Önemli: :application_name için yedeklemeler sağlıksız. :problem', + 'unhealthy_backup_found_body' => 'Yedeklemeler: :application_name disk: :disk_name sağlıksız.', + 'unhealthy_backup_found_not_reachable' => 'Yedekleme hedefine ulaşılamıyor. :error', + 'unhealthy_backup_found_empty' => 'Bu uygulamanın yedekleri yok.', + 'unhealthy_backup_found_old' => ':date tarihinde yapılan en son yedekleme çok eski kabul ediliyor.', + 'unhealthy_backup_found_unknown' => 'Üzgünüm, kesin bir sebep belirlenemiyor.', + 'unhealthy_backup_found_full' => 'Yedeklemeler çok fazla depolama alanı kullanıyor. Şu anki kullanım: :disk_usage, izin verilen sınırdan yüksek: :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/uk/notifications.php b/resources/lang/vendor/backup/uk/notifications.php new file mode 100644 index 00000000..a39c90a2 --- /dev/null +++ b/resources/lang/vendor/backup/uk/notifications.php @@ -0,0 +1,35 @@ + 'Повідомлення про помилку: :message', + 'exception_trace' => 'Деталі помилки: :trace', + 'exception_message_title' => 'Повідомлення помилки', + 'exception_trace_title' => 'Деталі помилки', + + 'backup_failed_subject' => 'Не вдалось зробити резервну копію :application_name', + 'backup_failed_body' => 'Увага: Трапилась помилка під час резервного копіювання :application_name', + + 'backup_successful_subject' => 'Успішне резервне копіювання :application_name', + 'backup_successful_subject_title' => 'Успішно створена резервна копія!', + 'backup_successful_body' => 'Чудова новина, нова резервна копія :application_name успішно створена і збережена на диск :disk_name.', + + 'cleanup_failed_subject' => 'Не вдалось очистити резервні копії :application_name', + 'cleanup_failed_body' => 'Сталася помилка під час очищення резервних копій :application_name', + + 'cleanup_successful_subject' => 'Успішне очищення від резервних копій :application_name', + 'cleanup_successful_subject_title' => 'Очищення резервних копій пройшло вдало!', + 'cleanup_successful_body' => 'Очищенно від старих резервних копій :application_name на диску :disk_name пойшло успішно.', + + 'healthy_backup_found_subject' => 'Резервна копія :application_name з диску :disk_name установлена', + 'healthy_backup_found_subject_title' => 'Резервна копія :application_name установлена', + 'healthy_backup_found_body' => 'Резервна копія :application_name успішно установлена. Хороша робота!', + + 'unhealthy_backup_found_subject' => 'Увага: резервна копія :application_name не установилась', + 'unhealthy_backup_found_subject_title' => 'Увага: резервна копія для :application_name не установилась. :problem', + 'unhealthy_backup_found_body' => 'Резервна копія для :application_name на диску :disk_name не установилась.', + 'unhealthy_backup_found_not_reachable' => 'Резервна копія не змогла установитись. :error', + 'unhealthy_backup_found_empty' => 'Резервні копії для цього додатку відсутні.', + 'unhealthy_backup_found_old' => 'Останнє резервне копіювання створено :date є застарілим.', + 'unhealthy_backup_found_unknown' => 'Вибачте, але ми не змогли визначити точну причину.', + 'unhealthy_backup_found_full' => 'Резервні копії використовують занадто багато пам`яті. Використовується :disk_usage що вище за допустиму межу :disk_limit.', +]; diff --git a/resources/lang/vendor/backup/zh-CN/notifications.php b/resources/lang/vendor/backup/zh-CN/notifications.php new file mode 100644 index 00000000..bbab325d --- /dev/null +++ b/resources/lang/vendor/backup/zh-CN/notifications.php @@ -0,0 +1,35 @@ + '异常信息: :message', + 'exception_trace' => '异常跟踪: :trace', + 'exception_message_title' => '异常信息', + 'exception_trace_title' => '异常跟踪', + + 'backup_failed_subject' => ':application_name 备份失败', + 'backup_failed_body' => '重要说明:备份 :application_name 时发生错误', + + 'backup_successful_subject' => ':application_name 备份成功', + 'backup_successful_subject_title' => '备份成功!', + 'backup_successful_body' => '好消息, :application_name 备份成功,位于磁盘 :disk_name 中。', + + 'cleanup_failed_subject' => '清除 :application_name 的备份失败。', + 'cleanup_failed_body' => '清除备份 :application_name 时发生错误', + + 'cleanup_successful_subject' => '成功清除 :application_name 的备份', + 'cleanup_successful_subject_title' => '成功清除备份!', + 'cleanup_successful_body' => '成功清除 :disk_name 磁盘上 :application_name 的备份。', + + 'healthy_backup_found_subject' => ':disk_name 磁盘上 :application_name 的备份是健康的', + 'healthy_backup_found_subject_title' => ':application_name 的备份是健康的', + 'healthy_backup_found_body' => ':application_name 的备份是健康的。干的好!', + + 'unhealthy_backup_found_subject' => '重要说明::application_name 的备份不健康', + 'unhealthy_backup_found_subject_title' => '重要说明::application_name 备份不健康。 :problem', + 'unhealthy_backup_found_body' => ':disk_name 磁盘上 :application_name 的备份不健康。', + 'unhealthy_backup_found_not_reachable' => '无法访问备份目标。 :error', + 'unhealthy_backup_found_empty' => '根本没有此应用程序的备份。', + 'unhealthy_backup_found_old' => '最近的备份创建于 :date ,太旧了。', + 'unhealthy_backup_found_unknown' => '对不起,确切原因无法确定。', + 'unhealthy_backup_found_full' => '备份占用了太多存储空间。当前占用了 :disk_usage ,高于允许的限制 :disk_limit。', +]; diff --git a/resources/lang/vendor/backup/zh-TW/notifications.php b/resources/lang/vendor/backup/zh-TW/notifications.php new file mode 100644 index 00000000..be561c48 --- /dev/null +++ b/resources/lang/vendor/backup/zh-TW/notifications.php @@ -0,0 +1,35 @@ + '異常訊息: :message', + 'exception_trace' => '異常追蹤: :trace', + 'exception_message_title' => '異常訊息', + 'exception_trace_title' => '異常追蹤', + + 'backup_failed_subject' => ':application_name 備份失敗', + 'backup_failed_body' => '重要說明:備份 :application_name 時發生錯誤', + + 'backup_successful_subject' => ':application_name 備份成功', + 'backup_successful_subject_title' => '備份成功!', + 'backup_successful_body' => '好消息, :application_name 備份成功,位於磁盤 :disk_name 中。', + + 'cleanup_failed_subject' => '清除 :application_name 的備份失敗。', + 'cleanup_failed_body' => '清除備份 :application_name 時發生錯誤', + + 'cleanup_successful_subject' => '成功清除 :application_name 的備份', + 'cleanup_successful_subject_title' => '成功清除備份!', + 'cleanup_successful_body' => '成功清除 :disk_name 磁盤上 :application_name 的備份。', + + 'healthy_backup_found_subject' => ':disk_name 磁盤上 :application_name 的備份是健康的', + 'healthy_backup_found_subject_title' => ':application_name 的備份是健康的', + 'healthy_backup_found_body' => ':application_name 的備份是健康的。幹的好!', + + 'unhealthy_backup_found_subject' => '重要說明::application_name 的備份不健康', + 'unhealthy_backup_found_subject_title' => '重要說明::application_name 備份不健康。 :problem', + 'unhealthy_backup_found_body' => ':disk_name 磁盤上 :application_name 的備份不健康。', + 'unhealthy_backup_found_not_reachable' => '無法訪問備份目標。 :error', + 'unhealthy_backup_found_empty' => '根本沒有此應用程序的備份。', + 'unhealthy_backup_found_old' => '最近的備份創建於 :date ,太舊了。', + 'unhealthy_backup_found_unknown' => '對不起,確切原因無法確定。', + 'unhealthy_backup_found_full' => '備份佔用了太多存儲空間。當前佔用了 :disk_usage ,高於允許的限制 :disk_limit。', +]; diff --git a/resources/lang/vendor/laravel-user-verification/en/user-verification.php b/resources/lang/vendor/laravel-user-verification/en/user-verification.php new file mode 100644 index 00000000..834757e1 --- /dev/null +++ b/resources/lang/vendor/laravel-user-verification/en/user-verification.php @@ -0,0 +1,18 @@ + 'Account Verification', + + // error view + 'verification_error_header' => 'Verification failed', + 'verification_error_message' => 'Your account could not be verified.', + 'verification_error_back_button' => 'Back', + +]; diff --git a/resources/views/auth/firstlogin.blade.php b/resources/views/auth/firstlogin.blade.php new file mode 100644 index 00000000..df040c6c --- /dev/null +++ b/resources/views/auth/firstlogin.blade.php @@ -0,0 +1,30 @@ +@extends('boilerplate::auth.layout', [ + 'title' => __('boilerplate::auth.firstlogin.title'), + 'bodyClass' => 'hold-transition login-page' +]) + +@section('content') + @component('boilerplate::auth.loginbox') + {{ Form::open(['route' => 'boilerplate.users.firstlogin', 'autocomplete' => 'off']) }} + +
+

{{ __('boilerplate::auth.firstlogin.intro') }}

+
+
+ {{ Form::label('password', __('boilerplate::auth.fields.password')) }} + {{ Form::input('password', 'password', Request::old('password'), ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('password','

:message

') !!} +
+
+ {{ Form::label('password_confirmation', __('boilerplate::auth.fields.password_confirm')) }} + {{ Form::input('password', 'password_confirmation', Request::old('password_confirmation'), ['class' => 'form-control']) }} + {!! $errors->first('password_confirmation','

:message

') !!} +
+
+ +
+ + @endcomponent +@endsection diff --git a/resources/views/auth/layout.blade.php b/resources/views/auth/layout.blade.php new file mode 100644 index 00000000..4d0bac54 --- /dev/null +++ b/resources/views/auth/layout.blade.php @@ -0,0 +1,18 @@ + + + + + + + + + {{ $title }} | {{ config('app.name') }} + + @stack('css') + + + @yield('content') + + @stack('js') + + \ No newline at end of file diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 00000000..e7f4856a --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,51 @@ +@extends('auth.layout', [ + 'title' => __('boilerplate::auth.login.title'), + 'bodyClass' => 'hold-transition login-page' +]) + +@prepend('js') + @include('components.js.ie11') + @include('components.js', ['js' => '/js/main.min.js']) +@endprepend + +@push('css') + @include('components.css', ['css' => '/css/main.min.css']) +@endpush + +@section('content') + @component('auth.loginbox') + {!! Form::open(['route' => 'boilerplate.login', 'method' => 'post', 'autocomplete'=> 'off']) !!} +
+
+ {{ Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.email'), 'required', 'autofocus']) }} + + {!! $errors->first('email','

:message

') !!} +
+
+
+
+ {{ Form::password('password', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password')]) }} + + {!! $errors->first('password','

:message

') !!} +
+
+
+
+
+ +
+
+
+ +
+
+ {!! Form::close() !!} + {{ __('boilerplate::auth.login.forgotpassword') }}
+ @if(config('boilerplate.auth.register')) + {{ __('boilerplate::auth.login.register') }} + @endif + @endcomponent +@endsection diff --git a/resources/views/auth/loginbox.blade.php b/resources/views/auth/loginbox.blade.php new file mode 100644 index 00000000..36c4e62d --- /dev/null +++ b/resources/views/auth/loginbox.blade.php @@ -0,0 +1,8 @@ +@if (config('app.name') == 'CRM') + @include('auth.crm') + +@endif + +@if (config('app.name') == 'HestImmo') + @include('auth.hestimmo') +@endif diff --git a/resources/views/auth/passwords/email.blade.php b/resources/views/auth/passwords/email.blade.php new file mode 100644 index 00000000..59f59270 --- /dev/null +++ b/resources/views/auth/passwords/email.blade.php @@ -0,0 +1,28 @@ +@extends('boilerplate::auth.layout', ['title' => __('boilerplate::auth.password.title'), 'bodyClass' => 'hold-transition login-page']) + +@section('content') + @component('boilerplate::auth.loginbox') +

{{ __('boilerplate::auth.password.intro') }}

+ @if (session('status')) +
+ {{ session('status') }} +
+ @endif + {!! Form::open(['route' => 'boilerplate.password.email', 'method' => 'post', 'autocomplete'=> 'off']) !!} +
+ {{ Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.email'), 'required', 'autofocus']) }} + {!! $errors->first('email','

:message

') !!} +
+
+
+
+ +
+
+
+ {!! Form::close() !!} + {{ __('boilerplate::auth.password.login_link') }}
+ @endcomponent +@endsection diff --git a/resources/views/auth/passwords/reset.blade.php b/resources/views/auth/passwords/reset.blade.php new file mode 100644 index 00000000..37c7ff1b --- /dev/null +++ b/resources/views/auth/passwords/reset.blade.php @@ -0,0 +1,27 @@ +@extends('boilerplate::auth.layout', ['title' => __('boilerplate::auth.password_reset.title')]) + +@section('content') + @component('boilerplate::auth.loginbox') +

{{ __('boilerplate::auth.password_reset.intro') }}

+ {!! Form::open(['route' => 'boilerplate.password.reset.post', 'method' => 'post', 'autocomplete'=> 'off']) !!} + {!! Form::hidden('token', $token) !!} +
+ {{ Form::email('email', old('email', $email), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.email'), 'required', 'autofocus']) }} + {!! $errors->first('email','

:message

') !!} +
+
+ {{ Form::password('password', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password'), 'required']) }} + {!! $errors->first('password','

:message

') !!} +
+
+ {{ Form::password('password_confirmation', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password_confirm'), 'required']) }} + {!! $errors->first('password_confirmation','

:message

') !!} +
+
+
+ +
+
+ {!! Form::close() !!} + @endcomponent +@endsection diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100644 index 00000000..86c3bc67 --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1,39 @@ +@extends('boilerplate::auth.layout', ['title' => __('boilerplate::auth.register.title'), 'bodyClass' => 'hold-transition login-page']) + +@section('content') + @component('boilerplate::auth.loginbox') +

{{ __('boilerplate::auth.register.intro') }}

+ {!! Form::open(['route' => 'boilerplate.register', 'method' => 'post', 'autocomplete'=> 'off']) !!} +
+ {{ Form::text('first_name', old('first_name'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.first_name'), 'required', 'autofocus']) }} + {!! $errors->first('first_name','

:message

') !!} +
+
+ {{ Form::text('last_name', old('last_name'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.last_name'), 'required']) }} + {!! $errors->first('last_name','

:message

') !!} +
+
+ {{ Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.email'), 'required']) }} + {!! $errors->first('email','

:message

') !!} +
+
+ {{ Form::password('password', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password'), 'required']) }} + {!! $errors->first('password','

:message

') !!} +
+
+ {{ Form::password('password_confirmation', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password_confirm'), 'required']) }} + {!! $errors->first('password_confirmation','

:message

') !!} +
+
+
+ +
+
+ {!! Form::close() !!} + @if(!$firstUser) + {{ __('boilerplate::auth.register.login_link') }}
+ @endif + @endcomponent +@endsection diff --git a/resources/views/auth/verify.blade.php b/resources/views/auth/verify.blade.php new file mode 100644 index 00000000..c742cb4b --- /dev/null +++ b/resources/views/auth/verify.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Verify Your Email Address') }}
+ +
+ @if (session('resent')) + + @endif + + {{ __('Before proceeding, please check your email for a verification link.') }} + {{ __('If you did not receive the email') }}, {{ __('click here to request another') }}. +
+
+
+
+
+@endsection diff --git a/resources/views/components/address.blade.php b/resources/views/components/address.blade.php new file mode 100644 index 00000000..33eb5678 --- /dev/null +++ b/resources/views/components/address.blade.php @@ -0,0 +1,32 @@ +
+ + {{ Form::label('adresse', 'Adresse') }} + + + {{ Form::label('complement_adresse', 'Complément d\'adresse') }} + + +
+
+ {{ Form::label('code_postal', 'Code postal') }} + +
+ +
+ {{ Form::label('ville', 'Ville') }} + @include('components.city', ['name' => $ville]) +
+
+ + + + +
+ +@include('boilerplate::load.select2') + +@push('js') + + + +@endpush diff --git a/resources/views/components/button-add.blade.php b/resources/views/components/button-add.blade.php new file mode 100644 index 00000000..d2dae1f2 --- /dev/null +++ b/resources/views/components/button-add.blade.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/views/components/button-delete.blade.php b/resources/views/components/button-delete.blade.php new file mode 100644 index 00000000..7b3be035 --- /dev/null +++ b/resources/views/components/button-delete.blade.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/resources/views/components/button-save.blade.php b/resources/views/components/button-save.blade.php new file mode 100644 index 00000000..467e0889 --- /dev/null +++ b/resources/views/components/button-save.blade.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/resources/views/components/carousel-modal.blade.php b/resources/views/components/carousel-modal.blade.php new file mode 100644 index 00000000..7d3e0d09 --- /dev/null +++ b/resources/views/components/carousel-modal.blade.php @@ -0,0 +1,37 @@ + + + \ No newline at end of file diff --git a/resources/views/components/carousel.blade.php b/resources/views/components/carousel.blade.php new file mode 100644 index 00000000..236417f0 --- /dev/null +++ b/resources/views/components/carousel.blade.php @@ -0,0 +1,45 @@ +
+
+ +
+
+ +@if (isset($with_modal) && $with_modal) + +@endif + + diff --git a/resources/views/components/checkbox.blade.php b/resources/views/components/checkbox.blade.php new file mode 100644 index 00000000..05a21d2a --- /dev/null +++ b/resources/views/components/checkbox.blade.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/resources/views/components/city.blade.php b/resources/views/components/city.blade.php new file mode 100644 index 00000000..4d715f93 --- /dev/null +++ b/resources/views/components/city.blade.php @@ -0,0 +1,36 @@ +@include('components.select', ['name' => $name.'_id', 'id_name' => $name.'_id', 'class' => 'form-control', 'list' => (isset($list)) ? $list : null, 'value' => (isset($value)) ? $value : null, 'style' => 'width: 100%;']) + + + +@include('boilerplate::load.select2') + +@push('js') + +@endpush diff --git a/resources/views/components/contact.blade.php b/resources/views/components/contact.blade.php new file mode 100644 index 00000000..1aee0cf4 --- /dev/null +++ b/resources/views/components/contact.blade.php @@ -0,0 +1,25 @@ +
+ +
+
+ {{ Form::label('tel_perso', 'Téléphone domicile') }} + +
+
+ {{ Form::label('tel_pro', 'Téléphone professionnel') }} + +
+
+ +
+
+ {{ Form::label('Mobile', 'Mobile') }} + +
+
+ {{ Form::label('email', 'Email') }} + +
+
+ +
\ No newline at end of file diff --git a/resources/views/components/css.blade.php b/resources/views/components/css.blade.php new file mode 100644 index 00000000..b0e8e1f6 --- /dev/null +++ b/resources/views/components/css.blade.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/views/components/date.blade.php b/resources/views/components/date.blade.php new file mode 100644 index 00000000..1639f7f3 --- /dev/null +++ b/resources/views/components/date.blade.php @@ -0,0 +1 @@ +@include('components.input', ['class' => 'datepicker', 'mask' => '99/99/9999']) \ No newline at end of file diff --git a/resources/views/components/datetime.blade.php b/resources/views/components/datetime.blade.php new file mode 100644 index 00000000..102a99b1 --- /dev/null +++ b/resources/views/components/datetime.blade.php @@ -0,0 +1 @@ +@include('components.input', ['class' => 'datetimepicker', 'mask' => '99/99/9999 99:99']) \ No newline at end of file diff --git a/resources/views/components/email.blade.php b/resources/views/components/email.blade.php new file mode 100644 index 00000000..00ef9874 --- /dev/null +++ b/resources/views/components/email.blade.php @@ -0,0 +1 @@ +@include('components.input', ['type' => 'email']) diff --git a/resources/views/components/file.blade.php b/resources/views/components/file.blade.php new file mode 100644 index 00000000..59b1b4e2 --- /dev/null +++ b/resources/views/components/file.blade.php @@ -0,0 +1,9 @@ + diff --git a/resources/views/components/input.blade.php b/resources/views/components/input.blade.php new file mode 100644 index 00000000..bb776e65 --- /dev/null +++ b/resources/views/components/input.blade.php @@ -0,0 +1,16 @@ + diff --git a/resources/views/components/js.blade.php b/resources/views/components/js.blade.php new file mode 100644 index 00000000..097839e7 --- /dev/null +++ b/resources/views/components/js.blade.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/views/components/js/ie11.blade.php b/resources/views/components/js/ie11.blade.php new file mode 100644 index 00000000..0fca7ca9 --- /dev/null +++ b/resources/views/components/js/ie11.blade.php @@ -0,0 +1,4 @@ +@prepend('js') + + +@endprepend \ No newline at end of file diff --git a/resources/views/components/money.blade.php b/resources/views/components/money.blade.php new file mode 100644 index 00000000..7f504d60 --- /dev/null +++ b/resources/views/components/money.blade.php @@ -0,0 +1 @@ +@include('components.input', ['type' => 'number']) \ No newline at end of file diff --git a/resources/views/components/number.blade.php b/resources/views/components/number.blade.php new file mode 100644 index 00000000..7f504d60 --- /dev/null +++ b/resources/views/components/number.blade.php @@ -0,0 +1 @@ +@include('components.input', ['type' => 'number']) \ No newline at end of file diff --git a/resources/views/components/options-complex.blade.php b/resources/views/components/options-complex.blade.php new file mode 100644 index 00000000..657b57a0 --- /dev/null +++ b/resources/views/components/options-complex.blade.php @@ -0,0 +1,14 @@ +@if (isset($list) && count($list)) + @foreach($list as $item) + + @endforeach +@endif diff --git a/resources/views/components/options.blade.php b/resources/views/components/options.blade.php new file mode 100644 index 00000000..96d5ab15 --- /dev/null +++ b/resources/views/components/options.blade.php @@ -0,0 +1,5 @@ +@if (isset($list) && count($list)) + @foreach($list as $key => $item) + + @endforeach +@endif diff --git a/resources/views/components/person-address-contact.blade.php b/resources/views/components/person-address-contact.blade.php new file mode 100644 index 00000000..5e85827e --- /dev/null +++ b/resources/views/components/person-address-contact.blade.php @@ -0,0 +1,3 @@ +@include('components.person') +@include('components.address') +@include('components.contact') \ No newline at end of file diff --git a/resources/views/components/person.blade.php b/resources/views/components/person.blade.php new file mode 100644 index 00000000..2c4a8754 --- /dev/null +++ b/resources/views/components/person.blade.php @@ -0,0 +1,24 @@ +
+ +
+
+ {{ Form::label('civilite', 'Civilité') }} + +
+ +
+ {{ Form::label('prenom', 'Prénom') }} + +
+ +
+ {{ Form::label('nom', 'Nom') }} + +
+
+ +
\ No newline at end of file diff --git a/resources/views/components/phone.blade.php b/resources/views/components/phone.blade.php new file mode 100644 index 00000000..70743915 --- /dev/null +++ b/resources/views/components/phone.blade.php @@ -0,0 +1 @@ +@include('components.input', ['mask' => '99.99.99.99.99']) \ No newline at end of file diff --git a/resources/views/components/select.blade.php b/resources/views/components/select.blade.php new file mode 100644 index 00000000..ae05c50d --- /dev/null +++ b/resources/views/components/select.blade.php @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/resources/views/components/textarea.blade.php b/resources/views/components/textarea.blade.php new file mode 100644 index 00000000..0e6ab87f --- /dev/null +++ b/resources/views/components/textarea.blade.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/resources/views/components/upload-document.blade.php b/resources/views/components/upload-document.blade.php new file mode 100644 index 00000000..8f5add55 --- /dev/null +++ b/resources/views/components/upload-document.blade.php @@ -0,0 +1,19 @@ + diff --git a/resources/views/components/upload-dropzone.blade.php b/resources/views/components/upload-dropzone.blade.php new file mode 100644 index 00000000..88263886 --- /dev/null +++ b/resources/views/components/upload-dropzone.blade.php @@ -0,0 +1,64 @@ +
+
+

{{ $dropzone_title }}

+
+ @csrf +
+
+
+

Glisser/Déposer vos fichiers ou cliquez pour téléverser

+
+
+
+
+ +
+
+
+
+ +{{--Dropzone Preview Template--}} + + {{--End of Dropzone Preview Template--}} \ No newline at end of file diff --git a/resources/views/components/upload-photo.blade.php b/resources/views/components/upload-photo.blade.php new file mode 100644 index 00000000..553b3efc --- /dev/null +++ b/resources/views/components/upload-photo.blade.php @@ -0,0 +1,19 @@ + diff --git a/resources/views/components/upload.blade.php b/resources/views/components/upload.blade.php new file mode 100644 index 00000000..6d290e2a --- /dev/null +++ b/resources/views/components/upload.blade.php @@ -0,0 +1,22 @@ + + + + diff --git a/resources/views/components/widgets/box.blade.php b/resources/views/components/widgets/box.blade.php new file mode 100644 index 00000000..19225838 --- /dev/null +++ b/resources/views/components/widgets/box.blade.php @@ -0,0 +1,23 @@ +
+
+

{{ $title }}

+
+ + +
+
+ +
+ {{ $content }} +
+ + + @if (isset($footer)) + + @endif + +
+ diff --git a/resources/views/cornford/googlmapper/circle.blade.php b/resources/views/cornford/googlmapper/circle.blade.php new file mode 100644 index 00000000..3ebd7f84 --- /dev/null +++ b/resources/views/cornford/googlmapper/circle.blade.php @@ -0,0 +1,22 @@ +var circleCoordinates_{!! $id !!} = ( + @foreach ($options['coordinates'] as $key => $coordinate) + new google.maps.LatLng({!! $coordinate['latitude'] !!}, {!! $coordinate['longitude'] !!}) + @endforeach +); + +var circle_{!! $id !!} = new google.maps.Circle({ + strokeColor: '{!! $options['strokeColor'] !!}', + strokeOpacity: {!! $options['strokeOpacity'] !!}, + strokeWeight: {!! $options['strokeWeight'] !!}, + fillColor: '{!! $options['fillColor'] !!}', + fillOpacity: {!! $options['fillOpacity'] !!}, + center: circleCoordinates_{!! $id !!}, + radius: {!! $options['radius'] !!}, + editable: {!! $options['editable'] ? 'true' : 'false' !!} +}); + +circle_{!! $id !!}.setMap({!! $options['map'] !!}); + +shapes.push({ + 'circle_{!! $id !!}': circle_{!! $id !!} +}); \ No newline at end of file diff --git a/resources/views/cornford/googlmapper/javascript.blade.php b/resources/views/cornford/googlmapper/javascript.blade.php new file mode 100644 index 00000000..c6fbf67f --- /dev/null +++ b/resources/views/cornford/googlmapper/javascript.blade.php @@ -0,0 +1,33 @@ +@if (!$view->shared('javascript', false)) + + @if ($view->share('javascript', true)) @endif + + @if ($options['async']) + + + + + + @else + + + + @endif + + @if ($options['cluster']) + + + + @endif + +@endif diff --git a/resources/views/cornford/googlmapper/map.blade.php b/resources/views/cornford/googlmapper/map.blade.php new file mode 100644 index 00000000..2ca0818d --- /dev/null +++ b/resources/views/cornford/googlmapper/map.blade.php @@ -0,0 +1,112 @@ +
+ + \ No newline at end of file diff --git a/resources/views/cornford/googlmapper/mapper.blade.php b/resources/views/cornford/googlmapper/mapper.blade.php new file mode 100644 index 00000000..db61b974 --- /dev/null +++ b/resources/views/cornford/googlmapper/mapper.blade.php @@ -0,0 +1,19 @@ +@include('googlmapper::javascript') + +@foreach ($items as $id => $item) + + {!! $item->render($id, $view) !!} + + @if ($options['async']) + + + + @endif + +@endforeach diff --git a/resources/views/cornford/googlmapper/marker.blade.php b/resources/views/cornford/googlmapper/marker.blade.php new file mode 100644 index 00000000..c6e6e189 --- /dev/null +++ b/resources/views/cornford/googlmapper/marker.blade.php @@ -0,0 +1,133 @@ +@if ($options['place']) + + var service = new google.maps.places.PlacesService({!! $options['map'] !!}); + var request = { + placeId: '{!! $options['place'] !!}' + }; + + service.getDetails(request, function(placeResult, status) { + if (status != google.maps.places.PlacesServiceStatus.OK) { + alert('Unable to find the Place details.'); + return; + } + +@endif + +@if ($options['locate'] && $options['marker']) + if (typeof navigator !== 'undefined' && navigator.geolocation) { + navigator.geolocation.getCurrentPosition(function (position) { + marker_0.setPosition(new google.maps.LatLng(position.coords.latitude, position.coords.longitude)); + }); + } +@endif + +var markerPosition_{!! $id !!} = new google.maps.LatLng({!! $options['latitude'] !!}, {!! $options['longitude'] !!}); + +var marker_{!! $id !!} = new google.maps.Marker({ + position: markerPosition_{!! $id !!}, + @if ($options['place']) + place: { + placeId: '{!! $options['place'] !!}', + location: { lat: {!! $options['latitude'] !!}, lng: {!! $options['longitude'] !!} } + }, + attribution: { + source: document.title, + webUrl: document.URL + }, + @endif + + @if (isset($options['draggable']) && $options['draggable'] == true) + draggable: true, + @endif + + title: {!! json_encode((string) $options['title']) !!}, + label: {!! json_encode($options['label']) !!}, + animation: @if (empty($options['animation']) || $options['animation'] == 'NONE') '' @else google.maps.Animation.{!! $options['animation'] !!} @endif, + @if ($options['symbol']) + icon: { + path: google.maps.SymbolPath.{!! $options['symbol'] !!}, + scale: {!! $options['scale'] !!} + } + @else + icon: + @if (is_array($options['icon']) && isset($options['icon']['url'])) + { + url: {!! json_encode((string) $options['icon']['url']) !!}, + + @if (isset($options['icon']['size'])) + @if (is_array($options['icon']['size'])) + scaledSize: new google.maps.Size({!! $options['icon']['size'][0] !!}, {!! $options['icon']['size'][1] !!}) + @else + scaledSize: new google.maps.Size({!! $options['icon']['size'] !!}, {!! $options['icon']['size'] !!}) + @endif + @endif + } + @else + {!! json_encode($options['icon']) !!} + @endif + @endif +}); + +bounds.extend(marker_{!! $id !!}.position); + +marker_{!! $id !!}.setMap({!! $options['map'] !!}); +markers.push(marker_{!! $id !!}); + +@if ($options['place']) + + marker_{!! $id !!}.addListener('click', function() { + infowindow.setContent('' + placeResult.name + ''); + infowindow.open({!! $options['map'] !!}, this); + }); + }); + +@else + + @if (!empty($options['content'])) + + var infowindow_{!! $id !!} = new google.maps.InfoWindow({ + content: {!! json_encode((string) $options['content']) !!} + }); + + @if (isset($options['maxWidth'])) + + infowindow_{!! $id !!}.setOptions({ maxWidth: {!! $options['maxWidth'] !!} }); + + @endif + + @if (isset($options['open']) && $options['open']) + + infowindow_{!! $id !!}.open({!! $options['map'] !!}, marker_{!! $id !!}); + + @endif + + google.maps.event.addListener(marker_{!! $id !!}, 'click', function() { + + @if (isset($options['autoClose']) && $options['autoClose']) + + for (var i = 0; i < infowindows.length; i++) { + infowindows[i].close(); + } + + @endif + + infowindow_{!! $id !!}.open({!! $options['map'] !!}, marker_{!! $id !!}); + }); + + infowindows.push(infowindow_{!! $id !!}); + + @endif + +@endif + +@foreach (['eventClick', 'eventDblClick', 'eventRightClick', 'eventMouseOver', 'eventMouseDown', 'eventMouseUp', 'eventMouseOut', 'eventDrag', 'eventDragStart', 'eventDragEnd', 'eventDomReady'] as $event) + + @if (isset($options[$event])) + + google.maps.event.addListener(marker_{!! $id !!}, '{!! str_replace('event', '', strtolower($event)) !!}', function (event) { + {!! $options[$event] !!} + }); + + @endif + +@endforeach diff --git a/resources/views/cornford/googlmapper/overlay.blade.php b/resources/views/cornford/googlmapper/overlay.blade.php new file mode 100644 index 00000000..da22bbce --- /dev/null +++ b/resources/views/cornford/googlmapper/overlay.blade.php @@ -0,0 +1,12 @@ +var overlayCoordinates_{!! $id !!} = new google.maps.LatLngBounds( + @foreach ($options['coordinates'] as $coordinate) + new google.maps.LatLng({!! $coordinate['latitude'] !!}, {!! $coordinate['longitude'] !!}), + @endforeach +); + +overlay_{!! $id !!} = new google.maps.GroundOverlay( + '{!! $options['image'] !!}', + overlayCoordinates_{!! $id !!} +); + +overlay_{!! $id !!}.setMap({!! $options['map'] !!}); diff --git a/resources/views/cornford/googlmapper/polygon.blade.php b/resources/views/cornford/googlmapper/polygon.blade.php new file mode 100644 index 00000000..3c7030ca --- /dev/null +++ b/resources/views/cornford/googlmapper/polygon.blade.php @@ -0,0 +1,21 @@ +var polygonCoordinates_{!! $id !!} = [ + @foreach ($options['coordinates'] as $coordinate) + new google.maps.LatLng({!! $coordinate['latitude'] !!}, {!! $coordinate['longitude'] !!}), + @endforeach +]; + +var polygon_{!! $id !!} = new google.maps.Polygon({ + paths: polygonCoordinates_{!! $id !!}, + strokeColor: '{!! $options['strokeColor'] !!}', + strokeOpacity: {!! $options['strokeOpacity'] !!}, + strokeWeight: {!! $options['strokeWeight'] !!}, + fillColor: '{!! $options['fillColor'] !!}', + fillOpacity: {!! $options['fillOpacity'] !!}, + editable: {!! $options['editable'] ? 'true' : 'false' !!} +}); + +polygon_{!! $id !!}.setMap({!! $options['map'] !!}); + +shapes.push({ + 'polygon_{!! $id !!}': polygon_{!! $id !!} +}); \ No newline at end of file diff --git a/resources/views/cornford/googlmapper/polyline.blade.php b/resources/views/cornford/googlmapper/polyline.blade.php new file mode 100644 index 00000000..1b4b5e91 --- /dev/null +++ b/resources/views/cornford/googlmapper/polyline.blade.php @@ -0,0 +1,20 @@ +var polylineCoordinates_{!! $id !!} = [ + @foreach ($options['coordinates'] as $coordinate) + new google.maps.LatLng({!! $coordinate['latitude'] !!}, {!! $coordinate['longitude'] !!}), + @endforeach +]; + +var polyline_{!! $id !!} = new google.maps.Polyline({ + path: polylineCoordinates_{!! $id !!}, + geodesic: {!! $options['strokeColor'] ? 'true' : 'false' !!}, + strokeColor: '{!! $options['strokeColor'] !!}', + strokeOpacity: {!! $options['strokeOpacity'] !!}, + strokeWeight: {!! $options['strokeWeight'] !!}, + editable: {!! $options['editable'] ? 'true' : 'false' !!} +}); + +polyline_{!! $id !!}.setMap({!! $options['map'] !!}); + +shapes.push({ + 'polyline_{!! $id !!}': polyline_{!! $id !!} +}); \ No newline at end of file diff --git a/resources/views/cornford/googlmapper/rectangle.blade.php b/resources/views/cornford/googlmapper/rectangle.blade.php new file mode 100644 index 00000000..1f354e3b --- /dev/null +++ b/resources/views/cornford/googlmapper/rectangle.blade.php @@ -0,0 +1,21 @@ +var rectangleCoordinates_{!! $id !!} = new google.maps.LatLngBounds( + @foreach ($options['coordinates'] as $key => $coordinate) + new google.maps.LatLng({!! $coordinate['latitude'] !!}, {!! $coordinate['longitude'] !!})@if (count($options['coordinates']) - 1 > $key), @endif + @endforeach +); + +var rectangle_{!! $id !!} = new google.maps.Rectangle({ + strokeColor: '{!! $options['strokeColor'] !!}', + strokeOpacity: {!! $options['strokeOpacity'] !!}, + strokeWeight: {!! $options['strokeWeight'] !!}, + fillColor: '{!! $options['fillColor'] !!}', + fillOpacity: {!! $options['fillOpacity'] !!}, + bounds: rectangleCoordinates_{!! $id !!}, + editable: {!! $options['editable'] ? 'true' : 'false' !!} +}); + +rectangle_{!! $id !!}.setMap({!! $options['map'] !!}); + +shapes.push({ + 'rectangle_{!! $id !!}': rectangle_{!! $id !!} +}); \ No newline at end of file diff --git a/resources/views/cornford/googlmapper/streetview.blade.php b/resources/views/cornford/googlmapper/streetview.blade.php new file mode 100644 index 00000000..9f223dd1 --- /dev/null +++ b/resources/views/cornford/googlmapper/streetview.blade.php @@ -0,0 +1,39 @@ +
+ + \ No newline at end of file diff --git a/resources/views/emails/components/button.blade.php b/resources/views/emails/components/button.blade.php new file mode 100644 index 00000000..d0963b85 --- /dev/null +++ b/resources/views/emails/components/button.blade.php @@ -0,0 +1,7 @@ +{{ $txt }} \ No newline at end of file diff --git a/resources/views/emails/components/inline_css.blade.php b/resources/views/emails/components/inline_css.blade.php new file mode 100644 index 00000000..3035e3fc --- /dev/null +++ b/resources/views/emails/components/inline_css.blade.php @@ -0,0 +1,208 @@ + + + + + + + \ No newline at end of file diff --git a/resources/views/emails/layout.blade.php b/resources/views/emails/layout.blade.php new file mode 100644 index 00000000..88f7d1a3 --- /dev/null +++ b/resources/views/emails/layout.blade.php @@ -0,0 +1,88 @@ + + + + + + {{ $title }} + + @include('emails.components.inline_css') + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+ +
+ + + + + + + +
OpenSEMGestion des messages
+
+ +
+
+
+
+ @yield('content') +
+
+
+ + + + + + + + + +
 
 
+
+
+
+ + + + + + +
OpenSEM - 2020
+
+
+ + \ No newline at end of file diff --git a/resources/views/emails/welcome.blade.php b/resources/views/emails/welcome.blade.php new file mode 100644 index 00000000..60587248 --- /dev/null +++ b/resources/views/emails/welcome.blade.php @@ -0,0 +1,13 @@ + + + + Bienvenue chez OpenSEM + + + +

Bienvenue chez OpenSEM {{ $user['first_name'] }} {{ $user['last_name'] }}

+


Votre identifiant est : {{ $user['email'] }}

+

Votre token est {{ $user['token'] }}

+ + + \ No newline at end of file diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 00000000..46aa40ed --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,11 @@ +@extends('layouts.site', [ + 'title' => 'Banques', + 'subtitle' => 'Liste des banques', + 'breadcrumb' => ['Banques'] +]) + +@section('content') + +TEST + +@endsection diff --git a/resources/views/layout/contentheader.blade.php b/resources/views/layout/contentheader.blade.php new file mode 100644 index 00000000..c67f7117 --- /dev/null +++ b/resources/views/layout/contentheader.blade.php @@ -0,0 +1,24 @@ +

+ {{ $title }} + @if(isset($subtitle)) + {{ $subtitle }} + @endif +

+ \ No newline at end of file diff --git a/resources/views/layout/footer.blade.php b/resources/views/layout/footer.blade.php new file mode 100644 index 00000000..e68d348a --- /dev/null +++ b/resources/views/layout/footer.blade.php @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/resources/views/layout/header.blade.php b/resources/views/layout/header.blade.php new file mode 100644 index 00000000..1bbad8aa --- /dev/null +++ b/resources/views/layout/header.blade.php @@ -0,0 +1,30 @@ +
+ + +
\ No newline at end of file diff --git a/resources/views/layout/index.blade.php b/resources/views/layout/index.blade.php new file mode 100644 index 00000000..a476679a --- /dev/null +++ b/resources/views/layout/index.blade.php @@ -0,0 +1,50 @@ + + + + + + + + + {{ $title }} | {{ config('app.name') }} + + @stack('css') + + +
+ @include('layout.header') + @include('boilerplate::layout.mainsidebar') +
+
+ @include('layout.contentheader') +
+
+ @yield('content') +
+
+ @include('layout.footer') +
+ + + @stack('js') + + diff --git a/resources/views/layout/mainsidebar.blade.php b/resources/views/layout/mainsidebar.blade.php new file mode 100644 index 00000000..fcf793d5 --- /dev/null +++ b/resources/views/layout/mainsidebar.blade.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 00000000..a6c6d034 --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,51 @@ + + + + + + + + + @if (isset($title)) {{ $title }} @endif | {{ config('app.name') }} + + + @stack('css') + + +
+ @include('layouts.partials.app.header') + @include('layouts.partials.app.mainsidebar') +
+
+ @include('layouts.partials.app.contentheader') +
+
+ @yield('content') +
+
+ @include('layouts.partials.app.footer') +
+ + + @stack('js') + + diff --git a/resources/views/layouts/partials/app/contentheader.blade.php b/resources/views/layouts/partials/app/contentheader.blade.php new file mode 100644 index 00000000..c67f7117 --- /dev/null +++ b/resources/views/layouts/partials/app/contentheader.blade.php @@ -0,0 +1,24 @@ +

+ {{ $title }} + @if(isset($subtitle)) + {{ $subtitle }} + @endif +

+ \ No newline at end of file diff --git a/resources/views/layouts/partials/app/footer.blade.php b/resources/views/layouts/partials/app/footer.blade.php new file mode 100644 index 00000000..ed69a5c9 --- /dev/null +++ b/resources/views/layouts/partials/app/footer.blade.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/resources/views/layouts/partials/app/header.blade.php b/resources/views/layouts/partials/app/header.blade.php new file mode 100644 index 00000000..aaf23636 --- /dev/null +++ b/resources/views/layouts/partials/app/header.blade.php @@ -0,0 +1,37 @@ +
+ + +
\ No newline at end of file diff --git a/resources/views/layouts/partials/app/mainsidebar.blade.php b/resources/views/layouts/partials/app/mainsidebar.blade.php new file mode 100644 index 00000000..fcf793d5 --- /dev/null +++ b/resources/views/layouts/partials/app/mainsidebar.blade.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/resources/views/layouts/partials/site/basket.blade.php b/resources/views/layouts/partials/site/basket.blade.php new file mode 100644 index 00000000..1554e1f1 --- /dev/null +++ b/resources/views/layouts/partials/site/basket.blade.php @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/resources/views/layouts/partials/site/topbar.blade.php b/resources/views/layouts/partials/site/topbar.blade.php new file mode 100644 index 00000000..e579ba75 --- /dev/null +++ b/resources/views/layouts/partials/site/topbar.blade.php @@ -0,0 +1,54 @@ +
+ +
\ No newline at end of file diff --git a/resources/views/layouts/site.blade.php b/resources/views/layouts/site.blade.php new file mode 100644 index 00000000..80d315e7 --- /dev/null +++ b/resources/views/layouts/site.blade.php @@ -0,0 +1,49 @@ + + + + + + + + {{ config('app.name', 'Laravel') }} + + @stack('css') + + +
+ + @include('layouts.partials.site.topbar') + +
+
+ @yield('content') +
+
+ +
+ + + + @stack('js') + + + diff --git a/resources/views/shop/_partials/block-banner.twig b/resources/views/shop/_partials/block-banner.twig new file mode 100644 index 00000000..cee7f0c7 --- /dev/null +++ b/resources/views/shop/_partials/block-banner.twig @@ -0,0 +1,29 @@ +
+ + + +
diff --git a/resources/views/shop/_partials/block-bottom.twig b/resources/views/shop/_partials/block-bottom.twig new file mode 100644 index 00000000..0d0635e3 --- /dev/null +++ b/resources/views/shop/_partials/block-bottom.twig @@ -0,0 +1,8 @@ +
+ {{ include('shop._partials.testimonials')}} + {{ include('shop._partials.services')}} + {{ include('shop._partials.special-products')}} + {{ include("shop._partials.newsletter")}} + {{ include("shop._partials.block-news")}} + {{ include("shop._partials.block-manufacturers")}} +
\ No newline at end of file diff --git a/resources/views/shop/_partials/block-breadcrumb.twig b/resources/views/shop/_partials/block-breadcrumb.twig new file mode 100644 index 00000000..c75757e9 --- /dev/null +++ b/resources/views/shop/_partials/block-breadcrumb.twig @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/resources/views/shop/_partials/block-manufacturers.twig b/resources/views/shop/_partials/block-manufacturers.twig new file mode 100644 index 00000000..1ade8668 --- /dev/null +++ b/resources/views/shop/_partials/block-manufacturers.twig @@ -0,0 +1,31 @@ +
+

Nos meilleures marques

+
+ +
+
\ No newline at end of file diff --git a/resources/views/shop/_partials/block-news.twig b/resources/views/shop/_partials/block-news.twig new file mode 100644 index 00000000..0e912687 --- /dev/null +++ b/resources/views/shop/_partials/block-news.twig @@ -0,0 +1,26 @@ +
+
+

+ Dernières nouvelles +

+
+ +
+
+
\ No newline at end of file diff --git a/resources/views/shop/_partials/block-products.twig b/resources/views/shop/_partials/block-products.twig new file mode 100644 index 00000000..26062ed8 --- /dev/null +++ b/resources/views/shop/_partials/block-products.twig @@ -0,0 +1,40 @@ +
+
+

Meilleurs produits

+ + + +
+
+ +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/resources/views/shop/_partials/blog.twig b/resources/views/shop/_partials/blog.twig new file mode 100644 index 00000000..4ce5e3e1 --- /dev/null +++ b/resources/views/shop/_partials/blog.twig @@ -0,0 +1,39 @@ +
+
+
+ +
+ + + + 25 + Oct + + 2019 + +
+
+
+

Viderer voluptatum te eum

+

+ Ei has mutat solum. Fugit atomorum efficiantur an vim, te mea... +

+ Lire la suite +
+
+
+
+
\ No newline at end of file diff --git a/resources/views/shop/_partials/footer.twig b/resources/views/shop/_partials/footer.twig new file mode 100644 index 00000000..41ad7bfe --- /dev/null +++ b/resources/views/shop/_partials/footer.twig @@ -0,0 +1,247 @@ + diff --git a/resources/views/shop/_partials/header-nav.twig b/resources/views/shop/_partials/header-nav.twig new file mode 100644 index 00000000..56904ae7 --- /dev/null +++ b/resources/views/shop/_partials/header-nav.twig @@ -0,0 +1,68 @@ + diff --git a/resources/views/shop/_partials/header-top.twig b/resources/views/shop/_partials/header-top.twig new file mode 100644 index 00000000..b9eaf2f9 --- /dev/null +++ b/resources/views/shop/_partials/header-top.twig @@ -0,0 +1,46 @@ +
+
+
+ +
+
+
+ + + + Panier + 0,00 $ - 0 items + 0 + + +
+ Your cart is empty +
+
+
+
+
+
+
+
Appelez-nous
+
+00 900 123456789
+
+
+ +
+
+ + +
+
diff --git a/resources/views/shop/_partials/header.twig b/resources/views/shop/_partials/header.twig new file mode 100644 index 00000000..b0a927a3 --- /dev/null +++ b/resources/views/shop/_partials/header.twig @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/resources/views/shop/_partials/manufacturer.twig b/resources/views/shop/_partials/manufacturer.twig new file mode 100644 index 00000000..45235bfb --- /dev/null +++ b/resources/views/shop/_partials/manufacturer.twig @@ -0,0 +1,9 @@ +
+
+
+ + Fashion Manufacturer 1 + +
+
+
\ No newline at end of file diff --git a/resources/views/shop/_partials/newsletter.twig b/resources/views/shop/_partials/newsletter.twig new file mode 100644 index 00000000..998e2a0c --- /dev/null +++ b/resources/views/shop/_partials/newsletter.twig @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/resources/views/shop/_partials/notifications.twig b/resources/views/shop/_partials/notifications.twig new file mode 100644 index 00000000..23f3535f --- /dev/null +++ b/resources/views/shop/_partials/notifications.twig @@ -0,0 +1,5 @@ + diff --git a/resources/views/shop/_partials/presta_js.twig b/resources/views/shop/_partials/presta_js.twig new file mode 100644 index 00000000..6c6be592 --- /dev/null +++ b/resources/views/shop/_partials/presta_js.twig @@ -0,0 +1,20 @@ + + + diff --git a/resources/views/shop/_partials/product.twig b/resources/views/shop/_partials/product.twig new file mode 100644 index 00000000..1995ee1f --- /dev/null +++ b/resources/views/shop/_partials/product.twig @@ -0,0 +1,98 @@ +
+
+ + + +
+
\ No newline at end of file diff --git a/resources/views/shop/_partials/search.twig b/resources/views/shop/_partials/search.twig new file mode 100644 index 00000000..48676a51 --- /dev/null +++ b/resources/views/shop/_partials/search.twig @@ -0,0 +1,18 @@ + +
+
+
+ + +
+
+ + + +
+
+
+ \ No newline at end of file diff --git a/resources/views/shop/_partials/sections.twig b/resources/views/shop/_partials/sections.twig new file mode 100644 index 00000000..12e9ff3a --- /dev/null +++ b/resources/views/shop/_partials/sections.twig @@ -0,0 +1,104 @@ + + diff --git a/resources/views/shop/_partials/services.twig b/resources/views/shop/_partials/services.twig new file mode 100644 index 00000000..b251fc59 --- /dev/null +++ b/resources/views/shop/_partials/services.twig @@ -0,0 +1,49 @@ +
+

Nos services

+ +
\ No newline at end of file diff --git a/resources/views/shop/_partials/slider.twig b/resources/views/shop/_partials/slider.twig new file mode 100644 index 00000000..9e6a55b3 --- /dev/null +++ b/resources/views/shop/_partials/slider.twig @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/resources/views/shop/_partials/special-product.twig b/resources/views/shop/_partials/special-product.twig new file mode 100644 index 00000000..7ea40627 --- /dev/null +++ b/resources/views/shop/_partials/special-product.twig @@ -0,0 +1,85 @@ +
+
+ +
\ No newline at end of file diff --git a/resources/views/shop/_partials/special-products.twig b/resources/views/shop/_partials/special-products.twig new file mode 100644 index 00000000..e842e11d --- /dev/null +++ b/resources/views/shop/_partials/special-products.twig @@ -0,0 +1,21 @@ +
+
+

Produits speciaux

+ + +
+ +
+
+
diff --git a/resources/views/shop/_partials/testimonials.twig b/resources/views/shop/_partials/testimonials.twig new file mode 100644 index 00000000..184cf7fd --- /dev/null +++ b/resources/views/shop/_partials/testimonials.twig @@ -0,0 +1,61 @@ +
+
+ +
+
\ No newline at end of file diff --git a/resources/views/shop/_partials/wrapper.twig b/resources/views/shop/_partials/wrapper.twig new file mode 100644 index 00000000..318e6a2c --- /dev/null +++ b/resources/views/shop/_partials/wrapper.twig @@ -0,0 +1,49 @@ +
+ +
+
+ + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ + + +
+ + + +
+ + +
+ + + +
+ + + +
+
+ +
diff --git a/resources/views/shop/admin/Dashboard/_partials/counter.blade.php b/resources/views/shop/admin/Dashboard/_partials/counter.blade.php new file mode 100644 index 00000000..c9fc2f16 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/counter.blade.php @@ -0,0 +1,30 @@ + diff --git a/resources/views/shop/admin/Dashboard/_partials/evolutions.blade.php b/resources/views/shop/admin/Dashboard/_partials/evolutions.blade.php new file mode 100644 index 00000000..dd93af14 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/evolutions.blade.php @@ -0,0 +1,38 @@ +
+
+
+ 17% +
35 210.43 €
+ TOTAL VENTE +
+ +
+ +
+
+ 0% +
10 390.90 €
+ PANIER MOYEN +
+ +
+ +
+
+ 20% +
248
+ NB CLIENTS +
+ +
+ +
+
+ 18% +
1200
+ NB PRODUITS +
+ +
+
+ diff --git a/resources/views/shop/admin/Dashboard/_partials/infobox.blade.php b/resources/views/shop/admin/Dashboard/_partials/infobox.blade.php new file mode 100644 index 00000000..b3890d89 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/infobox.blade.php @@ -0,0 +1,24 @@ + +
+
+ @include('modules.Dashboard.partials.tile1') +
+ +
+ @include('modules.Dashboard.partials.tile2') +
+ + + +
+ +
+ @include('modules.Dashboard.partials.tile3') +
+ +
+ @include('modules.Dashboard.partials.tile4') +
+ +
+ diff --git a/resources/views/shop/admin/Dashboard/_partials/latest_members.blade.php b/resources/views/shop/admin/Dashboard/_partials/latest_members.blade.php new file mode 100644 index 00000000..ed3650e6 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/latest_members.blade.php @@ -0,0 +1,66 @@ + +
+
+

Utilisateurs

+ +
+ 8 Nouveaux + + +
+
+ +
+ + +
+ + + +
+ \ No newline at end of file diff --git a/resources/views/shop/admin/Dashboard/_partials/latest_orders.blade.php b/resources/views/shop/admin/Dashboard/_partials/latest_orders.blade.php new file mode 100644 index 00000000..67f90070 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/latest_orders.blade.php @@ -0,0 +1,43 @@ + +
+
+

Derniers dossiers

+ +
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + +
RésidenceLotPrixVendeur
RésidenceLotPrixVendeur
+
+ +
+ + + +
+ diff --git a/resources/views/shop/admin/Dashboard/_partials/report.blade.php b/resources/views/shop/admin/Dashboard/_partials/report.blade.php new file mode 100644 index 00000000..e335f552 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/report.blade.php @@ -0,0 +1,23 @@ +
+ +
+ @include('shop.admin.Dashboard._partials.salesByPeriod') +
+ +
+ @include('shop.admin.Dashboard._partials.stock') +
+ +
+ + +
+
+ @include('shop.admin.Dashboard._partials.latest_orders') +
+ +
+ @include('shop.admin.Dashboard._partials.stats_sections') +
+ +
\ No newline at end of file diff --git a/resources/views/shop/admin/Dashboard/_partials/salesByPeriod.blade.php b/resources/views/shop/admin/Dashboard/_partials/salesByPeriod.blade.php new file mode 100644 index 00000000..f3f601c5 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/salesByPeriod.blade.php @@ -0,0 +1,40 @@ +
+
+
+
+

Evolution du CA

+ +
+ +
+ + +
+ +
+
+ +
+
+
+ @include('shop.admin.Dashboard.components.chart') +
+
+ +
+ + + +
+ +
+ +
+ diff --git a/resources/views/shop/admin/Dashboard/_partials/stats.blade.php b/resources/views/shop/admin/Dashboard/_partials/stats.blade.php new file mode 100644 index 00000000..ea71ee1e --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/stats.blade.php @@ -0,0 +1,7 @@ +@include('shop.admin.Dashboard.components.infobox2', ['count' => (isset($nb_lots_optionne)) ? $nb_lots_optionne : 0, 'class' => 'bg-aqua', 'icon' => 'fa-building-o', 'text' => 'Lots optionnés', 'percent' => 0 ]) + +@include('shop.admin.Dashboard.components.infobox2', ['count' => (isset($montant_options_encours)) ? $montant_options_encours : 0, 'class' => 'bg-red', 'icon' => 'fa-clock-o', 'text' => 'Options En cours', 'percent' => 10 ]) + +@include('shop.admin.Dashboard.components.infobox2', ['count' => (isset($montant_dossiers_encours)) ? $montant_dossiers_encours : 0, 'class' => 'bg-yellow', 'icon' => 'fa-hourglass-start', 'text' => 'Dossiers en cours', 'percent' => 20 ]) + +@include('shop.admin.Dashboard.components.infobox2', ['count' => (isset($montant_ventes)) ? $montant_ventes : 0, 'class' => 'bg-green', 'icon' => 'fa-check-square-o', 'text' => 'Ventes', 'percent' => 30 ]) diff --git a/resources/views/shop/admin/Dashboard/_partials/stats_lots.blade.php b/resources/views/shop/admin/Dashboard/_partials/stats_lots.blade.php new file mode 100644 index 00000000..3db2b8de --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/stats_lots.blade.php @@ -0,0 +1,20 @@ +
+ +
+
+
{{ $nb_residences }}
+ Résidences +
+ +
+
+
{{ $nb_lots }}
+ Lots +
+ +
+
+
{{ $lots_percent }} %
+ En cours +
+
diff --git a/resources/views/shop/admin/Dashboard/_partials/stats_sections.blade.php b/resources/views/shop/admin/Dashboard/_partials/stats_sections.blade.php new file mode 100644 index 00000000..f3c6db70 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/stats_sections.blade.php @@ -0,0 +1,56 @@ +
+
+

Type de lots

+ +
+ + +
+
+ +
+
+
+
+ +
+ +
+ +
+
    +
  • T1
  • +
  • T2
  • +
  • T3
  • +
  • T4
  • +
  • T5
  • +
  • Part
  • +
+
+ +
+ +
+ + + +
diff --git a/resources/views/shop/admin/Dashboard/_partials/stock.blade.php b/resources/views/shop/admin/Dashboard/_partials/stock.blade.php new file mode 100644 index 00000000..63fe70c7 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/_partials/stock.blade.php @@ -0,0 +1,40 @@ +

+ Activités +

+ +
+ Produit 1 + 160/200 + +
+
+
+
+ +
+ Produit 2 + 310/400 + +
+
+
+
+ +
+ Produit 3 + 480/800 + +
+
+
+
+ +
+ Produit 4 + 250/500 + +
+
+
+
+ diff --git a/resources/views/shop/admin/Dashboard/components/chart.blade.php b/resources/views/shop/admin/Dashboard/components/chart.blade.php new file mode 100644 index 00000000..6623e351 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/components/chart.blade.php @@ -0,0 +1,9 @@ +

+ Ventes : 1 Jan 2019 - 30 Juin 2019 +

+ +
+ + +
+ diff --git a/resources/views/shop/admin/Dashboard/components/counter.blade.php b/resources/views/shop/admin/Dashboard/components/counter.blade.php new file mode 100644 index 00000000..c59ddb51 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/components/counter.blade.php @@ -0,0 +1,30 @@ + diff --git a/resources/views/shop/admin/Dashboard/components/evolutions.blade.php b/resources/views/shop/admin/Dashboard/components/evolutions.blade.php new file mode 100644 index 00000000..6fa186e7 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/components/evolutions.blade.php @@ -0,0 +1,38 @@ +
+
+
+ 17% +
35,210.43 €
+ TOTAL VENTE +
+ +
+ +
+
+ 0% +
10,390.90 €
+ TOTAL COMMISSION +
+ +
+ +
+
+ 20% +
24,813.53 €
+ TOTAL PROFIT +
+ +
+ +
+
+ 18% +
1200
+ Dossiers complétés +
+ +
+
+ diff --git a/resources/views/shop/admin/Dashboard/components/infobox.blade.php b/resources/views/shop/admin/Dashboard/components/infobox.blade.php new file mode 100644 index 00000000..14cf6f5a --- /dev/null +++ b/resources/views/shop/admin/Dashboard/components/infobox.blade.php @@ -0,0 +1,7 @@ +
+ +
+ {{ $text }} + {{ $count }} +
+
diff --git a/resources/views/shop/admin/Dashboard/components/infobox2.blade.php b/resources/views/shop/admin/Dashboard/components/infobox2.blade.php new file mode 100644 index 00000000..dbbe6772 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/components/infobox2.blade.php @@ -0,0 +1,16 @@ +
+ + +
+ {{ $text }} + {{ App\Repositories\Core\Number::price($count) }} + +
+
+
+ + + +
+
+ diff --git a/resources/views/shop/admin/Dashboard/components/latest_orders.blade.php b/resources/views/shop/admin/Dashboard/components/latest_orders.blade.php new file mode 100644 index 00000000..67f90070 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/components/latest_orders.blade.php @@ -0,0 +1,43 @@ + +
+
+

Derniers dossiers

+ +
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + +
RésidenceLotPrixVendeur
RésidenceLotPrixVendeur
+
+ +
+ + + +
+ diff --git a/resources/views/shop/admin/Dashboard/components/map.blade.php b/resources/views/shop/admin/Dashboard/components/map.blade.php new file mode 100644 index 00000000..7fbb5f4e --- /dev/null +++ b/resources/views/shop/admin/Dashboard/components/map.blade.php @@ -0,0 +1,20 @@ + + +@component('components.widgets.box') + + @slot('title', 'Emplacement des résidences') + + @slot('content') +
+
+
+ {!! Mapper::render() !!} +
+
+
+ @include('modules.Dashboard.partials.hestimmo.stats_lots') +
+
+ @endslot + +@endcomponent diff --git a/resources/views/shop/admin/Dashboard/components/monthly_report.blade.php b/resources/views/shop/admin/Dashboard/components/monthly_report.blade.php new file mode 100644 index 00000000..fe7aad9e --- /dev/null +++ b/resources/views/shop/admin/Dashboard/components/monthly_report.blade.php @@ -0,0 +1,47 @@ +
+
+
+
+

Statistiques mensuelles

+ +
+ +
+ + +
+ +
+
+ +
+
+
+ @include('modules.Dashboard.partials.chart') +
+ +
+ @include('modules.Dashboard.partials.goal_completion') +
+ +
+ +
+ + + +
+ +
+ +
+ diff --git a/resources/views/shop/admin/Dashboard/index.blade.php b/resources/views/shop/admin/Dashboard/index.blade.php new file mode 100644 index 00000000..aad29c42 --- /dev/null +++ b/resources/views/shop/admin/Dashboard/index.blade.php @@ -0,0 +1,30 @@ +@extends('boilerplate::layout.index', [ + 'title' => __('dashboard.title'), + 'subtitle' => __('boilerplate::users.list.title'), + 'breadcrumb' => [ + __('boilerplate::dashboard.title') => 'boilerplate.users.index' + ] +]) + +@include('boilerplate::logs.style') + +@section('content') + + @include('shop.admin.Dashboard._partials.counter') + @include('shop.admin.Dashboard._partials.report') + +@endsection + +@prepend('js') + @include('components.js.ie11') + @include('components.js', ['js' => '/js/laroute.js']) + @include('components.js', ['js' => '/js/main.min.js']) + @include('components.js', ['js' => '/js/datatables.min.js']) + @include('boilerplate::load.moment') + +@endprepend + +@push('css') + @include('components.css', ['css' => '/css/main.min.css']) + @include('components.css', ['css' => '/css/datatables.min.css']) +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Product/create.blade.php b/resources/views/shop/admin/Product/create.blade.php new file mode 100644 index 00000000..925c876d --- /dev/null +++ b/resources/views/shop/admin/Product/create.blade.php @@ -0,0 +1,38 @@ +@extends('layout.index', [ + 'title' => __('lots.title'), + 'subtitle' => __('lots.create.title'), + 'breadcrumb' => [__('lots.title'), __('lots.create.title')] +]) + +@include('boilerplate::load.icheck') +@include('boilerplate::load.fileinput') + +@prepend('js') + @include('components.js', ['js' => '/js/main.min.js']) +@endprepend + +@push('css') + @include('components.css', ['css' => '/css/main.min.css']) +@endpush + + +@section('content') + + {{ Form::open(['route' => 'Hestimmo.Lots.store', 'id' => 'lot-form', 'autocomplete' => 'off', 'files' => true]) }} + +
+
+ + {{ __('lots.list.title') }} + + + + @include('components.button-save') + +
+
+ + @include('Hestimmo.modules.Lot.lot_form') + + +@endsection diff --git a/resources/views/shop/admin/Product/edit.blade.php b/resources/views/shop/admin/Product/edit.blade.php new file mode 100644 index 00000000..f49a78a8 --- /dev/null +++ b/resources/views/shop/admin/Product/edit.blade.php @@ -0,0 +1,39 @@ +@extends('layout.index', [ + 'title' => 'Lots', + 'subtitle' => 'Edition d\'un lot', + 'breadcrumb' => ['Lots'] +]) + +@include('boilerplate::load.icheck') +@include('boilerplate::load.fileinput') + +@prepend('js') + @include('components.js', ['js' => '/js/main.min.js']) +@endprepend + +@push('css') + @include('components.css', ['css' => '/css/main.min.css']) +@endpush + + +@section('content') + + {{ Form::open(['route' => 'Hestimmo.Lots.update', 'id' => 'lot-form', 'autocomplete' => 'off', 'files' => true]) }} + +
+
+ + {{ __('lots.list.title') }} + + + + @include('components.button-save') + +
+
+ + + @include('Hestimmo.modules.Lot.lot_form') + + +@endsection diff --git a/resources/views/shop/admin/Product/list.blade.php b/resources/views/shop/admin/Product/list.blade.php new file mode 100644 index 00000000..a68afd88 --- /dev/null +++ b/resources/views/shop/admin/Product/list.blade.php @@ -0,0 +1,94 @@ +@extends('layout.index', [ + 'title' => __('lots.title'), + 'subtitle' => __('lots.list.title'), + 'breadcrumb' => [__('lots.title')] +]) + +@section('content') +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ @include('components.select', ['name' => 'statut', 'class' => 'form-control-sm', 'style' => 'padding: 2px;', 'list' => $type_lot_statuts]) + + @include('components.select', ['name' => 'type_dispositif', 'class' => 'form-control-sm', 'style' => 'padding: 2px;', 'list' => $type_dispositifs]) + + @include('components.select', ['name' => 'residence', 'class' => 'form-control-sm', 'style' => 'padding: 2px;', 'list' => $residences]) + + + + @include('components.select', ['name' => 'type_lot', 'class' => 'form-control-sm', 'style' => 'padding: 2px;', 'list' => $type_lots]) + + + + + + + + + + + + + + + + + + +
StatutDispositifRésidenceRéférenceTypeSurfaceSurface Ext.Prix totalPrix achatPackageF. NotaireF. BancaireLoyer logementLoyer stat.
+
+
+@endsection + +@prepend('js') + @include('components.js.ie11') + @include('components.js', ['js' => '/js/laroute.js']) + @include('components.js', ['js' => '/js/main.min.js']) + @include('components.js', ['js' => '/js/datatables.min.js']) +@endprepend + +@push('js') + @include('components.js', ['js' => '/js/lot_index.min.js']) +@endpush + +@push('css') + @include('components.css', ['css' => '/css/main.min.css']) + @include('components.css', ['css' => '/css/datatables.min.css']) +@endpush diff --git a/resources/views/shop/admin/Product/partials/carousel.blade.php b/resources/views/shop/admin/Product/partials/carousel.blade.php new file mode 100644 index 00000000..2a34ac68 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/carousel.blade.php @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/resources/views/shop/admin/Product/partials/detail.blade.php b/resources/views/shop/admin/Product/partials/detail.blade.php new file mode 100644 index 00000000..e7e8122f --- /dev/null +++ b/resources/views/shop/admin/Product/partials/detail.blade.php @@ -0,0 +1,178 @@ +
+
+ @include('components.carousel', ['id_name' => 'detail_lot', 'with_modal' => true, 'id' => $id ]) +
+
+
+ {{ __('lots.reference') }} : {{ $ref }} +
+ +

{{ $type_lot['nom'] }} - {{ $residence['nom'] }}

+ + Dispositif {{ $dispositifs[0]['type_dispositif']['nom'] }} + + +

+ + {{ $batiment['adresse'] }} {{ $batiment['code_postal'] }} {{ $batiment['ville'] }}
+ {{ $batiment['complement_adresse'] }} - {{ $etage }}

+ +
+ Surface : {{ $surface }} m2
+ + @if ($surface_balcon) Balcon/Terrasse : {{ $surface_balcon }} m2
@endif + @if ($surface_cave) Cave : {{ $surface_cave }} m2
@endif + @if ($surface_grenier) Grenier : {{ $surface_grenier }} m2
@endif + @if ($surface_soussol) Sous-sol : {{ $surface_soussol }} m2
@endif + @if ($surface_terrain) Terrain : {{ $surface_terrain }} m2
@endif +
+ +
+

{{ App\Repositories\Core\Number::price($prix_total) }} €

+
+ +
+ + +
+ +
+
+ + +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Prix acquisitionMontant travauxPrix totalPrix cavePrix stationnementPackage
{{ App\Repositories\Core\Number::price($prix_achat) }}{{ App\Repositories\Core\Number::price($prix_travaux) }}{{ App\Repositories\Core\Number::price($prix_total) }}{{ App\Repositories\Core\Number::price($prix_cave) }}{{ App\Repositories\Core\Number::price($prix_stationnement) }}{{ App\Repositories\Core\Number::price($package) }}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
Honoraires AgenceFrais notaireFrais bancaireCourtage bancaireInterêts intercalaires
{{ App\Repositories\Core\Number::price($honoraires_agence) }}{{ App\Repositories\Core\Number::price($frais_notaire) }}{{ App\Repositories\Core\Number::price($frais_bancaire) }}{{ App\Repositories\Core\Number::price($courtage_bancaire) }}{{ App\Repositories\Core\Number::price($interets_intercalaires) }}
+
+ +
+ + + + + + + + + + + + + + + +
Garantie reventeLoyer logementLoyer stationnement
{{ App\Repositories\Core\Number::price($garantie_revente) }}{{ App\Repositories\Core\Number::price($loyer_logement) }}{{ App\Repositories\Core\Number::price($loyer_stationnement) }}
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + @foreach($documents as $document) + + + + + + + + @endforeach + +
TypeTitreFormatPoids
{{ $document['type_document']['nom'] }}{{ $document['title'] }}{{ $document['filetype'] }}{{ Coduo\PHPHumanizer\NumberHumanizer::binarySuffix($document['filesize']) }}
+
+
+
+
+
+
+
+ + + diff --git a/resources/views/shop/admin/Product/partials/edit-documentation.blade.php b/resources/views/shop/admin/Product/partials/edit-documentation.blade.php new file mode 100644 index 00000000..ba2105d4 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/edit-documentation.blade.php @@ -0,0 +1,28 @@ +@if (isset($documents)) + @include('Hestimmo.modules.LotDocument.partials.list-documents') +@endif + +@include('Hestimmo.modules.LotDocument.partials.block_document_new') +
+ + + +@push('js') + +@endpush diff --git a/resources/views/shop/admin/Product/partials/edit-option.blade.php b/resources/views/shop/admin/Product/partials/edit-option.blade.php new file mode 100644 index 00000000..38df47b9 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/edit-option.blade.php @@ -0,0 +1,46 @@ +
+
+ + @include('components.checkbox', ['name' => 'reserve', 'id' => 'reserve', 'class' => 'icheck', 'val' => 1, 'value' => (isset($reserve)) ? $reserve : null]) +
+ +
+
+ + @include('components.checkbox', ['name' => 'promo', 'class' => 'icheck', 'val' => 1, 'value' => (isset($promo)) ? $promo : null]) +
+
+ +@push('js') + + +@endpush + \ No newline at end of file diff --git a/resources/views/shop/admin/Product/partials/edit-photo.blade.php b/resources/views/shop/admin/Product/partials/edit-photo.blade.php new file mode 100644 index 00000000..f86bd994 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/edit-photo.blade.php @@ -0,0 +1,28 @@ +@if (isset($photos)) + @include('Hestimmo.modules.LotPhoto.partials.list-photos') +@endif + +@include('Hestimmo.modules.LotPhoto.partials.block_photo_new') +
+ + + +@push('js') + +@endpush diff --git a/resources/views/shop/admin/Product/partials/edit-renseignement.blade.php b/resources/views/shop/admin/Product/partials/edit-renseignement.blade.php new file mode 100644 index 00000000..8b1bd422 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/edit-renseignement.blade.php @@ -0,0 +1,269 @@ +
+ +
+ {{ Form::label('ref', 'Numéro de lot') }} + @include('components.input', ['name' => 'ref', 'value' => (isset($ref)) ? $ref : null]) +
+ +
+
+ {{ Form::label('type_dispositifs', 'Type de dispositifs') }} + @include('components.select', ['name' => 'type_dispositif_id', 'list' => $type_dispositifs, 'value' => (isset($type_dispositif_id)) ? $type_dispositif_id : null]) +
+
+ +
+
+ {{ Form::label('type_lots', 'Type de lot') }} + @include('components.select', ['name' => 'type_lot_id', 'list' => $type_lots, 'value' => (isset($type_lot_id)) ? $type_lot_id : null ]) +
+
+ +
+ {{ Form::label('nb_etages', 'Agencement') }} + @include('components.select', ['name' => 'nb_etages', 'list' => [1 => 'Aucun étage', 2 => 'Duplex', 3=> 'Triplex'], 'value' => (isset($nb_etages)) ? $nb_etages : 1]) +
+ + +
+
+ {{ Form::label('statut_id', 'Statut') }} + @include('components.select', ['name' => 'statut_id', 'list' => $type_lot_statuts, 'value' => (isset($statut_id)) ? $statut_id : 3]) +
+
+ +
+ +
+ +
+ {{ Form::label('description', 'Description') }} + +
+ +
+
+
+
+ {{ Form::label('residence_id', 'Résidence') }} + @include('components.select', ['name' => 'residence_id', 'id_name' => 'residence_id', 'list' => $residences, 'value' => (isset($residence_id)) ? $residence_id : null]) +
+
+
+
+ {{ Form::label('residence_batiment_id', 'Batiment') }} + @include('components.select', ['name' => 'residence_batiment_id', 'id_name' => 'residence_batiment_id', 'list' => (isset($batiments)) ? $batiments : null, 'value' => (isset($residence_batiment_id)) ? $residence_batiment_id : null]) +
+
+ +
+ {{ Form::label('position_etage', 'Etage') }} + @include('components.select', ['name' => 'position_etage', 'id_name' => 'position_etage', 'list' => (isset($etages)) ? $etages : null, 'value' => (isset($position_etage)) ? $position_etage : null]) +
+
+ +
+
+ {{ Form::label('adresse', 'Adresse') }} + @include('components.input', ['name' => 'adresse', 'value' => (isset($adresse)) ? $adresse : null]) +
+
+ {{ Form::label('complement_adresse', 'Complément d\'adresse') }} + @include('components.input', ['name' => 'complement_adresse', 'value' => (isset($complement_adresse)) ? $complement_adresse : null]) +
+
+ +
+
+ {{ Form::label('code_postal', 'Code postal') }} + @include('components.input', ['name' => 'code_postal', 'value' => (isset($code_postal)) ? $code_postal : null]) +
+ +
+ {{ Form::label('ville', 'Ville') }} + @include('components.city', ['name' => 'ville', 'list' => (isset($ville)) ? [$ville_id => $ville] : [], 'value' => (isset($ville_id)) ? $ville_id : null]) +
+
+ + +
+ +
+ +
+
+ +
+
+ {{ Form::label('surface', 'Surface') }} + @include('components.input', ['name' => 'surface', 'value' => (isset($surface)) ? $surface : null]) +
+
+ {{ Form::label('surface_terrain', 'Terrain') }} + @include('components.input', ['name' => 'surface_terrain', 'value' => (isset($surface_terrain)) ? $surface_terrain : null]) +
+
+ {{ Form::label('surface_balcon', 'Balcon / Terrasse') }} + @include('components.input', ['name' => 'surface_balcon', 'value' => (isset($surface_balcon)) ? $surface_balcon : null]) +
+
+ {{ Form::label('surface_cave', 'Cave') }} + @include('components.input', ['name' => 'surface_cave', 'value' => (isset($surface_cave)) ? $surface_cave : null]) +
+
+ {{ Form::label('surface_soussol', 'Sous-sol') }} + @include('components.input', ['name' => 'surface_soussol', 'value' => (isset($surface_soussol)) ? $surface_soussol : null]) +
+
+ {{ Form::label('surface_grenier', 'Grenier') }} + @include('components.input', ['name' => 'surface_grenier', 'value' => (isset($surface_grenier)) ? $surface_grenier : null]) +
+
+ +
+ +
+ + +
+
+ {{ Form::label('prix_achat', 'Prix acquisition') }} + @include('components.money', ['name' => 'prix_achat', 'value' => (isset($prix_achat)) ? $prix_achat : null]) +
+
+ {{ Form::label('prix_travaux', 'Montant travaux') }} + @include('components.money', ['name' => 'prix_travaux', 'value' => (isset($prix_travaux)) ? $prix_travaux : null]) +
+
+ {{ Form::label('prix_total', 'Prix total') }} + @include('components.money', ['name' => 'prix_total', 'value' => (isset($prix_total)) ? $prix_total : null]) +
+
+ {{ Form::label('prix_cave', 'Prix cave') }} + @include('components.money', ['name' => 'prix_cave', 'value' => (isset($prix_cave)) ? $prix_cave : null]) +
+
+ {{ Form::label('prix_stationnement', 'Prix stationnement') }} + @include('components.money', ['name' => 'prix_stationnement', 'value' => (isset($prix_stationnement)) ? $prix_stationnement : null]) +
+
+ {{ Form::label('package', 'Package') }} + @include('components.money', ['name' => 'package', 'value' => (isset($package)) ? $package : null]) +
+
+ + +
+
+ {{ Form::label('honoraires_agence', 'Honoraires Agence') }} + @include('components.money', ['name' => 'honoraires_agence', 'value' => (isset($honoraires_agence)) ? $honoraires_agence : null]) +
+
+ {{ Form::label('frais_notaire', 'Frais notaire') }} + @include('components.money', ['name' => 'frais_notaire', 'value' => (isset($frais_notaire)) ? $frais_notaire : null]) +
+
+ {{ Form::label('frais_bancaire', 'Garantie bancaire') }} + @include('components.money', ['name' => 'frais_bancaire', 'value' => (isset($frais_bancaire)) ? $frais_bancaire : null]) +
+
+ {{ Form::label('courtage_bancaire', 'Courtage bancaire') }} + @include('components.money', ['name' => 'courtage_bancaire', 'value' => (isset($courtage_bancaire)) ? $courtage_bancaire : null]) +
+
+ {{ Form::label('interets_intercalaires', 'Interets intercalaires') }} + @include('components.money', ['name' => 'interets_intercalaires', 'value' => (isset($interets_intercalaires)) ? $interets_intercalaires : null]) +
+
+ +
+
+ {{ Form::label('garantie_revente', 'Garantie revente') }} + @include('components.money', ['name' => 'garantie_revente', 'value' => (isset($garantie_revente)) ? $garantie_revente : null]) +
+
+ {{ Form::label('loyer_logement', 'Loyer logement') }} + @include('components.money', ['name' => 'loyer_logement', 'value' => (isset($loyer_logement)) ? $loyer_logement : null]) +
+
+ {{ Form::label('loyer_stationnement', 'Loyer stationnement') }} + @include('components.money', ['name' => 'loyer_stationnement', 'value' => (isset($loyer_stationnement)) ? $loyer_stationnement : null]) +
+
+ +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Product/partials/list-mini.blade.php b/resources/views/shop/admin/Product/partials/list-mini.blade.php new file mode 100644 index 00000000..5a9c0f75 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/list-mini.blade.php @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + +
NuméroTypeSurfacePrix totalPackageDont F. NotaireLoyer logement
+ +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Product/partials/lot-promo.blade.php b/resources/views/shop/admin/Product/partials/lot-promo.blade.php new file mode 100644 index 00000000..cc5944ba --- /dev/null +++ b/resources/views/shop/admin/Product/partials/lot-promo.blade.php @@ -0,0 +1,73 @@ +
+
+
+ @if (isset($lot['residence']['photos'][0])) + Lot + @else + + @endif +
+
+
+ +
+
+
+
+ @if (isset($lot['dispositifs'][0])) + {{ $lot['dispositifs'][0]['type_dispositif']['nom'] }} + @endif +
+
+ + {{ $lot['photos_count'] }} +
+
+
+
+
+
+
+
+
+

+ {{ $lot['type_lot']['nom'] }} +

+
+
+

+ {{ App\Repositories\Core\Number::price($lot['prix_total']) }} € +

+
+
+ @if (!empty($lot['description'])) + {!! $lot['description'] !!} + @else + {!! $lot['residence']['description'] !!} + @endif +

+ + + + {{ $lot['batiment']['adresse'] }} {{ $lot['batiment']['code_postal'] }} {{ $lot['batiment']['ville'] }} +

+
    +
  • {{ $lot['type_lot']['nb_pieces'] }} pièces
  • +
  • {{ $lot['type_lot']['nb_chambres'] }} @if ($lot['type_lot']['nb_chambres'] > 1) chambres @else chambre @endif
  • +
  • {{ $lot['surface'] }} m²
  • +
+
+
+
+ +
+
+ +
+ diff --git a/resources/views/shop/admin/Product/partials/modal-detail.blade.php b/resources/views/shop/admin/Product/partials/modal-detail.blade.php new file mode 100644 index 00000000..1216b269 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/modal-detail.blade.php @@ -0,0 +1,12 @@ + diff --git a/resources/views/shop/admin/Product/partials/modal-edit-document.blade.php b/resources/views/shop/admin/Product/partials/modal-edit-document.blade.php new file mode 100644 index 00000000..5599d388 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/modal-edit-document.blade.php @@ -0,0 +1,17 @@ + + \ No newline at end of file diff --git a/resources/views/shop/admin/Product/partials/modal-option.blade.php b/resources/views/shop/admin/Product/partials/modal-option.blade.php new file mode 100644 index 00000000..00ee3dd6 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/modal-option.blade.php @@ -0,0 +1,43 @@ +{{ Form::open(['route' => 'Hestimmo.Options.store', 'id' => 'option-form', 'autocomplete' => 'off']) }} + + + +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Product/partials/recherche-disponibles.blade.php b/resources/views/shop/admin/Product/partials/recherche-disponibles.blade.php new file mode 100644 index 00000000..ffe29472 --- /dev/null +++ b/resources/views/shop/admin/Product/partials/recherche-disponibles.blade.php @@ -0,0 +1,95 @@ + +
+
+ +
+ +
+ +
+ +
+ +
+ + +
+ @include('components.city', ['name' => 'ville']) +
+ +
+ +
+ +
+ Distance : 5 km +
+
+ +
+
+ +
+
+ +
+
+
+

{{ App\Repositories\Core\Number::price($min) }} - {{ App\Repositories\Core\Number::price($max) }}

+

Montant +/- 10 000 €

+
+
+ +
+
+
+
+
+ +
+ +
+ +

+
+ +
+ + +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Product/product_form.blade.php b/resources/views/shop/admin/Product/product_form.blade.php new file mode 100644 index 00000000..a7e0178a --- /dev/null +++ b/resources/views/shop/admin/Product/product_form.blade.php @@ -0,0 +1,73 @@ + + +@push('js') + @include('components.js', ['js' => '/js/laroute.js']) + + + + + +@endpush diff --git a/resources/views/shop/admin/Product/recherche.blade.php b/resources/views/shop/admin/Product/recherche.blade.php new file mode 100644 index 00000000..23df73f0 --- /dev/null +++ b/resources/views/shop/admin/Product/recherche.blade.php @@ -0,0 +1,125 @@ +@extends('layout.index', [ + 'title' => __('lots.title'), + 'subtitle' => __('lots.demande.title'), + 'breadcrumb' => [__('lots.demande.title')] +]) + +@section('content') + + {{ Form::open(['route' => 'Hestimmo.Lots.disponibles', 'id' => 'lot-form', 'autocomplete' => 'off']) }} + +
+ +
+ +
+
+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ Distance : 5 km +
+
+ +
+
+ +
+
+ +
+
+
+

10 000

+

Montant +/- 5000 €

+
+
+ +
+
+
+
+
+ +
+ +
+ +

+
+ +
+
+
+ + + @include('Hestimmo.modules.Lot.partials.list-mini') + +@endsection + +@include('boilerplate::load.datatables') +@include('boilerplate::load.select2') + +@push('js') + + +@endpush + +@push('css') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Product/show.blade.php b/resources/views/shop/admin/Product/show.blade.php new file mode 100644 index 00000000..1e1cd729 --- /dev/null +++ b/resources/views/shop/admin/Product/show.blade.php @@ -0,0 +1,36 @@ +@extends('layout.index', [ + 'title' => __('products.title'), + 'subtitle' => __('products.title'), + 'breadcrumb' => [__('products.title')] +]) + +@section('content') +
+ +
+ +
+ +
+
+
+

{{ name }}

+

+ {{ $product.section.name }}
+

+
+
+

{{ $prix_total }} €

+

{{ $residence['type_produit']['name'] }}

+
+ +
+ @include('Hestimmo.modules.Lot.partials.carousel') +
+
+
+
+
+
+ +@endsection diff --git a/resources/views/shop/admin/Product/site/lot.blade.php b/resources/views/shop/admin/Product/site/lot.blade.php new file mode 100644 index 00000000..75c11cbe --- /dev/null +++ b/resources/views/shop/admin/Product/site/lot.blade.php @@ -0,0 +1,38 @@ +
+
+
+ Lot +
+
+
+ + + +
+
+
+
{{ $dispositif }}
+
{{ $nb_photos }}
+
+
+
+
+
+
+

+ {{ $prix }} € + +

+
{{ $titre }}
+

Au sein d'une résidence récente et sécurisée, dans un cadre calme et verdoyant, appartement T3 de 58 m² situé au 1er étage comprenant

+

{{ $adresse }} {{ $ville }}

+
    +
  • {{ $nb_chambres+2 }} pièces
  • +
  • {{ $nb_chambres }} chambres
  • +
  • {{ $surface }} m²
  • +
+
+
+
+ +
\ No newline at end of file diff --git a/resources/views/shop/admin/Product/site/recherche.blade.php b/resources/views/shop/admin/Product/site/recherche.blade.php new file mode 100644 index 00000000..6faad1f8 --- /dev/null +++ b/resources/views/shop/admin/Product/site/recherche.blade.php @@ -0,0 +1,110 @@ +
+ +
+ +@include('boilerplate::load.select2') + +@push('js') + + +@endpush + +@push('css') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/ProductPhoto/partials/block_photo.blade.php b/resources/views/shop/admin/ProductPhoto/partials/block_photo.blade.php new file mode 100644 index 00000000..ae3b315d --- /dev/null +++ b/resources/views/shop/admin/ProductPhoto/partials/block_photo.blade.php @@ -0,0 +1,13 @@ +
+ + + +
+ ... +
+

{{ $photo['title'] }}

+

Poids : {{ $photo['filesize'] }}

+
+
+ +
\ No newline at end of file diff --git a/resources/views/shop/admin/ProductPhoto/partials/block_photo_new.blade.php b/resources/views/shop/admin/ProductPhoto/partials/block_photo_new.blade.php new file mode 100644 index 00000000..c33c6cd3 --- /dev/null +++ b/resources/views/shop/admin/ProductPhoto/partials/block_photo_new.blade.php @@ -0,0 +1,15 @@ +
+ +

+ + Photo +

+ + + + + + + @include('components.select',['name' => 'lot_photos[][type_photo_id]' , 'list' => $type_photos]) + +
\ No newline at end of file diff --git a/resources/views/shop/admin/ProductPhoto/partials/list-photos.blade.php b/resources/views/shop/admin/ProductPhoto/partials/list-photos.blade.php new file mode 100644 index 00000000..427d14a8 --- /dev/null +++ b/resources/views/shop/admin/ProductPhoto/partials/list-photos.blade.php @@ -0,0 +1,41 @@ +@if (isset($photos) && count($photos)) + + + + + + + + + + + + @foreach($photos as $photo) + + + + + + + + @endforeach + +
PhotoTypeTitrePoids
+ + + {{ $photo['type_photo']['nom'] }} + + {{ $photo['title'] }} + + {{ $photo['filesize'] }} + + + + + +
+@endif \ No newline at end of file diff --git a/resources/views/shop/admin/Section/create.blade.php b/resources/views/shop/admin/Section/create.blade.php new file mode 100644 index 00000000..925c876d --- /dev/null +++ b/resources/views/shop/admin/Section/create.blade.php @@ -0,0 +1,38 @@ +@extends('layout.index', [ + 'title' => __('lots.title'), + 'subtitle' => __('lots.create.title'), + 'breadcrumb' => [__('lots.title'), __('lots.create.title')] +]) + +@include('boilerplate::load.icheck') +@include('boilerplate::load.fileinput') + +@prepend('js') + @include('components.js', ['js' => '/js/main.min.js']) +@endprepend + +@push('css') + @include('components.css', ['css' => '/css/main.min.css']) +@endpush + + +@section('content') + + {{ Form::open(['route' => 'Hestimmo.Lots.store', 'id' => 'lot-form', 'autocomplete' => 'off', 'files' => true]) }} + +
+
+ + {{ __('lots.list.title') }} + + + + @include('components.button-save') + +
+
+ + @include('Hestimmo.modules.Lot.lot_form') + + +@endsection diff --git a/resources/views/shop/admin/Section/edit.blade.php b/resources/views/shop/admin/Section/edit.blade.php new file mode 100644 index 00000000..f49a78a8 --- /dev/null +++ b/resources/views/shop/admin/Section/edit.blade.php @@ -0,0 +1,39 @@ +@extends('layout.index', [ + 'title' => 'Lots', + 'subtitle' => 'Edition d\'un lot', + 'breadcrumb' => ['Lots'] +]) + +@include('boilerplate::load.icheck') +@include('boilerplate::load.fileinput') + +@prepend('js') + @include('components.js', ['js' => '/js/main.min.js']) +@endprepend + +@push('css') + @include('components.css', ['css' => '/css/main.min.css']) +@endpush + + +@section('content') + + {{ Form::open(['route' => 'Hestimmo.Lots.update', 'id' => 'lot-form', 'autocomplete' => 'off', 'files' => true]) }} + +
+
+ + {{ __('lots.list.title') }} + + + + @include('components.button-save') + +
+
+ + + @include('Hestimmo.modules.Lot.lot_form') + + +@endsection diff --git a/resources/views/shop/admin/Section/list.blade.php b/resources/views/shop/admin/Section/list.blade.php new file mode 100644 index 00000000..a68afd88 --- /dev/null +++ b/resources/views/shop/admin/Section/list.blade.php @@ -0,0 +1,94 @@ +@extends('layout.index', [ + 'title' => __('lots.title'), + 'subtitle' => __('lots.list.title'), + 'breadcrumb' => [__('lots.title')] +]) + +@section('content') +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ @include('components.select', ['name' => 'statut', 'class' => 'form-control-sm', 'style' => 'padding: 2px;', 'list' => $type_lot_statuts]) + + @include('components.select', ['name' => 'type_dispositif', 'class' => 'form-control-sm', 'style' => 'padding: 2px;', 'list' => $type_dispositifs]) + + @include('components.select', ['name' => 'residence', 'class' => 'form-control-sm', 'style' => 'padding: 2px;', 'list' => $residences]) + + + + @include('components.select', ['name' => 'type_lot', 'class' => 'form-control-sm', 'style' => 'padding: 2px;', 'list' => $type_lots]) + + + + + + + + + + + + + + + + + + +
StatutDispositifRésidenceRéférenceTypeSurfaceSurface Ext.Prix totalPrix achatPackageF. NotaireF. BancaireLoyer logementLoyer stat.
+
+
+@endsection + +@prepend('js') + @include('components.js.ie11') + @include('components.js', ['js' => '/js/laroute.js']) + @include('components.js', ['js' => '/js/main.min.js']) + @include('components.js', ['js' => '/js/datatables.min.js']) +@endprepend + +@push('js') + @include('components.js', ['js' => '/js/lot_index.min.js']) +@endpush + +@push('css') + @include('components.css', ['css' => '/css/main.min.css']) + @include('components.css', ['css' => '/css/datatables.min.css']) +@endpush diff --git a/resources/views/shop/admin/Section/partials/carousel.blade.php b/resources/views/shop/admin/Section/partials/carousel.blade.php new file mode 100644 index 00000000..2a34ac68 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/carousel.blade.php @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/resources/views/shop/admin/Section/partials/detail.blade.php b/resources/views/shop/admin/Section/partials/detail.blade.php new file mode 100644 index 00000000..e7e8122f --- /dev/null +++ b/resources/views/shop/admin/Section/partials/detail.blade.php @@ -0,0 +1,178 @@ +
+
+ @include('components.carousel', ['id_name' => 'detail_lot', 'with_modal' => true, 'id' => $id ]) +
+
+
+ {{ __('lots.reference') }} : {{ $ref }} +
+ +

{{ $type_lot['nom'] }} - {{ $residence['nom'] }}

+ + Dispositif {{ $dispositifs[0]['type_dispositif']['nom'] }} + + +

+ + {{ $batiment['adresse'] }} {{ $batiment['code_postal'] }} {{ $batiment['ville'] }}
+ {{ $batiment['complement_adresse'] }} - {{ $etage }}

+ +
+ Surface : {{ $surface }} m2
+ + @if ($surface_balcon) Balcon/Terrasse : {{ $surface_balcon }} m2
@endif + @if ($surface_cave) Cave : {{ $surface_cave }} m2
@endif + @if ($surface_grenier) Grenier : {{ $surface_grenier }} m2
@endif + @if ($surface_soussol) Sous-sol : {{ $surface_soussol }} m2
@endif + @if ($surface_terrain) Terrain : {{ $surface_terrain }} m2
@endif +
+ +
+

{{ App\Repositories\Core\Number::price($prix_total) }} €

+
+ +
+ + +
+ +
+
+ + +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Prix acquisitionMontant travauxPrix totalPrix cavePrix stationnementPackage
{{ App\Repositories\Core\Number::price($prix_achat) }}{{ App\Repositories\Core\Number::price($prix_travaux) }}{{ App\Repositories\Core\Number::price($prix_total) }}{{ App\Repositories\Core\Number::price($prix_cave) }}{{ App\Repositories\Core\Number::price($prix_stationnement) }}{{ App\Repositories\Core\Number::price($package) }}
+
+ +
+ + + + + + + + + + + + + + + + + + + +
Honoraires AgenceFrais notaireFrais bancaireCourtage bancaireInterêts intercalaires
{{ App\Repositories\Core\Number::price($honoraires_agence) }}{{ App\Repositories\Core\Number::price($frais_notaire) }}{{ App\Repositories\Core\Number::price($frais_bancaire) }}{{ App\Repositories\Core\Number::price($courtage_bancaire) }}{{ App\Repositories\Core\Number::price($interets_intercalaires) }}
+
+ +
+ + + + + + + + + + + + + + + +
Garantie reventeLoyer logementLoyer stationnement
{{ App\Repositories\Core\Number::price($garantie_revente) }}{{ App\Repositories\Core\Number::price($loyer_logement) }}{{ App\Repositories\Core\Number::price($loyer_stationnement) }}
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + @foreach($documents as $document) + + + + + + + + @endforeach + +
TypeTitreFormatPoids
{{ $document['type_document']['nom'] }}{{ $document['title'] }}{{ $document['filetype'] }}{{ Coduo\PHPHumanizer\NumberHumanizer::binarySuffix($document['filesize']) }}
+
+
+
+
+
+
+
+ + + diff --git a/resources/views/shop/admin/Section/partials/edit-documentation.blade.php b/resources/views/shop/admin/Section/partials/edit-documentation.blade.php new file mode 100644 index 00000000..ba2105d4 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/edit-documentation.blade.php @@ -0,0 +1,28 @@ +@if (isset($documents)) + @include('Hestimmo.modules.LotDocument.partials.list-documents') +@endif + +@include('Hestimmo.modules.LotDocument.partials.block_document_new') +
+ + + +@push('js') + +@endpush diff --git a/resources/views/shop/admin/Section/partials/edit-option.blade.php b/resources/views/shop/admin/Section/partials/edit-option.blade.php new file mode 100644 index 00000000..38df47b9 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/edit-option.blade.php @@ -0,0 +1,46 @@ +
+
+ + @include('components.checkbox', ['name' => 'reserve', 'id' => 'reserve', 'class' => 'icheck', 'val' => 1, 'value' => (isset($reserve)) ? $reserve : null]) +
+ +
+
+ + @include('components.checkbox', ['name' => 'promo', 'class' => 'icheck', 'val' => 1, 'value' => (isset($promo)) ? $promo : null]) +
+
+ +@push('js') + + +@endpush + \ No newline at end of file diff --git a/resources/views/shop/admin/Section/partials/edit-photo.blade.php b/resources/views/shop/admin/Section/partials/edit-photo.blade.php new file mode 100644 index 00000000..f86bd994 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/edit-photo.blade.php @@ -0,0 +1,28 @@ +@if (isset($photos)) + @include('Hestimmo.modules.LotPhoto.partials.list-photos') +@endif + +@include('Hestimmo.modules.LotPhoto.partials.block_photo_new') +
+ + + +@push('js') + +@endpush diff --git a/resources/views/shop/admin/Section/partials/edit-renseignement.blade.php b/resources/views/shop/admin/Section/partials/edit-renseignement.blade.php new file mode 100644 index 00000000..8b1bd422 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/edit-renseignement.blade.php @@ -0,0 +1,269 @@ +
+ +
+ {{ Form::label('ref', 'Numéro de lot') }} + @include('components.input', ['name' => 'ref', 'value' => (isset($ref)) ? $ref : null]) +
+ +
+
+ {{ Form::label('type_dispositifs', 'Type de dispositifs') }} + @include('components.select', ['name' => 'type_dispositif_id', 'list' => $type_dispositifs, 'value' => (isset($type_dispositif_id)) ? $type_dispositif_id : null]) +
+
+ +
+
+ {{ Form::label('type_lots', 'Type de lot') }} + @include('components.select', ['name' => 'type_lot_id', 'list' => $type_lots, 'value' => (isset($type_lot_id)) ? $type_lot_id : null ]) +
+
+ +
+ {{ Form::label('nb_etages', 'Agencement') }} + @include('components.select', ['name' => 'nb_etages', 'list' => [1 => 'Aucun étage', 2 => 'Duplex', 3=> 'Triplex'], 'value' => (isset($nb_etages)) ? $nb_etages : 1]) +
+ + +
+
+ {{ Form::label('statut_id', 'Statut') }} + @include('components.select', ['name' => 'statut_id', 'list' => $type_lot_statuts, 'value' => (isset($statut_id)) ? $statut_id : 3]) +
+
+ +
+ +
+ +
+ {{ Form::label('description', 'Description') }} + +
+ +
+
+
+
+ {{ Form::label('residence_id', 'Résidence') }} + @include('components.select', ['name' => 'residence_id', 'id_name' => 'residence_id', 'list' => $residences, 'value' => (isset($residence_id)) ? $residence_id : null]) +
+
+
+
+ {{ Form::label('residence_batiment_id', 'Batiment') }} + @include('components.select', ['name' => 'residence_batiment_id', 'id_name' => 'residence_batiment_id', 'list' => (isset($batiments)) ? $batiments : null, 'value' => (isset($residence_batiment_id)) ? $residence_batiment_id : null]) +
+
+ +
+ {{ Form::label('position_etage', 'Etage') }} + @include('components.select', ['name' => 'position_etage', 'id_name' => 'position_etage', 'list' => (isset($etages)) ? $etages : null, 'value' => (isset($position_etage)) ? $position_etage : null]) +
+
+ +
+
+ {{ Form::label('adresse', 'Adresse') }} + @include('components.input', ['name' => 'adresse', 'value' => (isset($adresse)) ? $adresse : null]) +
+
+ {{ Form::label('complement_adresse', 'Complément d\'adresse') }} + @include('components.input', ['name' => 'complement_adresse', 'value' => (isset($complement_adresse)) ? $complement_adresse : null]) +
+
+ +
+
+ {{ Form::label('code_postal', 'Code postal') }} + @include('components.input', ['name' => 'code_postal', 'value' => (isset($code_postal)) ? $code_postal : null]) +
+ +
+ {{ Form::label('ville', 'Ville') }} + @include('components.city', ['name' => 'ville', 'list' => (isset($ville)) ? [$ville_id => $ville] : [], 'value' => (isset($ville_id)) ? $ville_id : null]) +
+
+ + +
+ +
+ +
+
+ +
+
+ {{ Form::label('surface', 'Surface') }} + @include('components.input', ['name' => 'surface', 'value' => (isset($surface)) ? $surface : null]) +
+
+ {{ Form::label('surface_terrain', 'Terrain') }} + @include('components.input', ['name' => 'surface_terrain', 'value' => (isset($surface_terrain)) ? $surface_terrain : null]) +
+
+ {{ Form::label('surface_balcon', 'Balcon / Terrasse') }} + @include('components.input', ['name' => 'surface_balcon', 'value' => (isset($surface_balcon)) ? $surface_balcon : null]) +
+
+ {{ Form::label('surface_cave', 'Cave') }} + @include('components.input', ['name' => 'surface_cave', 'value' => (isset($surface_cave)) ? $surface_cave : null]) +
+
+ {{ Form::label('surface_soussol', 'Sous-sol') }} + @include('components.input', ['name' => 'surface_soussol', 'value' => (isset($surface_soussol)) ? $surface_soussol : null]) +
+
+ {{ Form::label('surface_grenier', 'Grenier') }} + @include('components.input', ['name' => 'surface_grenier', 'value' => (isset($surface_grenier)) ? $surface_grenier : null]) +
+
+ +
+ +
+ + +
+
+ {{ Form::label('prix_achat', 'Prix acquisition') }} + @include('components.money', ['name' => 'prix_achat', 'value' => (isset($prix_achat)) ? $prix_achat : null]) +
+
+ {{ Form::label('prix_travaux', 'Montant travaux') }} + @include('components.money', ['name' => 'prix_travaux', 'value' => (isset($prix_travaux)) ? $prix_travaux : null]) +
+
+ {{ Form::label('prix_total', 'Prix total') }} + @include('components.money', ['name' => 'prix_total', 'value' => (isset($prix_total)) ? $prix_total : null]) +
+
+ {{ Form::label('prix_cave', 'Prix cave') }} + @include('components.money', ['name' => 'prix_cave', 'value' => (isset($prix_cave)) ? $prix_cave : null]) +
+
+ {{ Form::label('prix_stationnement', 'Prix stationnement') }} + @include('components.money', ['name' => 'prix_stationnement', 'value' => (isset($prix_stationnement)) ? $prix_stationnement : null]) +
+
+ {{ Form::label('package', 'Package') }} + @include('components.money', ['name' => 'package', 'value' => (isset($package)) ? $package : null]) +
+
+ + +
+
+ {{ Form::label('honoraires_agence', 'Honoraires Agence') }} + @include('components.money', ['name' => 'honoraires_agence', 'value' => (isset($honoraires_agence)) ? $honoraires_agence : null]) +
+
+ {{ Form::label('frais_notaire', 'Frais notaire') }} + @include('components.money', ['name' => 'frais_notaire', 'value' => (isset($frais_notaire)) ? $frais_notaire : null]) +
+
+ {{ Form::label('frais_bancaire', 'Garantie bancaire') }} + @include('components.money', ['name' => 'frais_bancaire', 'value' => (isset($frais_bancaire)) ? $frais_bancaire : null]) +
+
+ {{ Form::label('courtage_bancaire', 'Courtage bancaire') }} + @include('components.money', ['name' => 'courtage_bancaire', 'value' => (isset($courtage_bancaire)) ? $courtage_bancaire : null]) +
+
+ {{ Form::label('interets_intercalaires', 'Interets intercalaires') }} + @include('components.money', ['name' => 'interets_intercalaires', 'value' => (isset($interets_intercalaires)) ? $interets_intercalaires : null]) +
+
+ +
+
+ {{ Form::label('garantie_revente', 'Garantie revente') }} + @include('components.money', ['name' => 'garantie_revente', 'value' => (isset($garantie_revente)) ? $garantie_revente : null]) +
+
+ {{ Form::label('loyer_logement', 'Loyer logement') }} + @include('components.money', ['name' => 'loyer_logement', 'value' => (isset($loyer_logement)) ? $loyer_logement : null]) +
+
+ {{ Form::label('loyer_stationnement', 'Loyer stationnement') }} + @include('components.money', ['name' => 'loyer_stationnement', 'value' => (isset($loyer_stationnement)) ? $loyer_stationnement : null]) +
+
+ +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Section/partials/list-mini.blade.php b/resources/views/shop/admin/Section/partials/list-mini.blade.php new file mode 100644 index 00000000..5a9c0f75 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/list-mini.blade.php @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + +
NuméroTypeSurfacePrix totalPackageDont F. NotaireLoyer logement
+ +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Section/partials/lot-promo.blade.php b/resources/views/shop/admin/Section/partials/lot-promo.blade.php new file mode 100644 index 00000000..cc5944ba --- /dev/null +++ b/resources/views/shop/admin/Section/partials/lot-promo.blade.php @@ -0,0 +1,73 @@ +
+
+
+ @if (isset($lot['residence']['photos'][0])) + Lot + @else + + @endif +
+
+
+ +
+
+
+
+ @if (isset($lot['dispositifs'][0])) + {{ $lot['dispositifs'][0]['type_dispositif']['nom'] }} + @endif +
+
+ + {{ $lot['photos_count'] }} +
+
+
+
+
+
+
+
+
+

+ {{ $lot['type_lot']['nom'] }} +

+
+
+

+ {{ App\Repositories\Core\Number::price($lot['prix_total']) }} € +

+
+
+ @if (!empty($lot['description'])) + {!! $lot['description'] !!} + @else + {!! $lot['residence']['description'] !!} + @endif +

+ + + + {{ $lot['batiment']['adresse'] }} {{ $lot['batiment']['code_postal'] }} {{ $lot['batiment']['ville'] }} +

+
    +
  • {{ $lot['type_lot']['nb_pieces'] }} pièces
  • +
  • {{ $lot['type_lot']['nb_chambres'] }} @if ($lot['type_lot']['nb_chambres'] > 1) chambres @else chambre @endif
  • +
  • {{ $lot['surface'] }} m²
  • +
+
+
+
+ +
+
+ +
+ diff --git a/resources/views/shop/admin/Section/partials/modal-detail.blade.php b/resources/views/shop/admin/Section/partials/modal-detail.blade.php new file mode 100644 index 00000000..1216b269 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/modal-detail.blade.php @@ -0,0 +1,12 @@ + diff --git a/resources/views/shop/admin/Section/partials/modal-edit-document.blade.php b/resources/views/shop/admin/Section/partials/modal-edit-document.blade.php new file mode 100644 index 00000000..5599d388 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/modal-edit-document.blade.php @@ -0,0 +1,17 @@ + + \ No newline at end of file diff --git a/resources/views/shop/admin/Section/partials/modal-option.blade.php b/resources/views/shop/admin/Section/partials/modal-option.blade.php new file mode 100644 index 00000000..00ee3dd6 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/modal-option.blade.php @@ -0,0 +1,43 @@ +{{ Form::open(['route' => 'Hestimmo.Options.store', 'id' => 'option-form', 'autocomplete' => 'off']) }} + + + +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Section/partials/recherche-disponibles.blade.php b/resources/views/shop/admin/Section/partials/recherche-disponibles.blade.php new file mode 100644 index 00000000..ffe29472 --- /dev/null +++ b/resources/views/shop/admin/Section/partials/recherche-disponibles.blade.php @@ -0,0 +1,95 @@ + +
+
+ +
+ +
+ +
+ +
+ +
+ + +
+ @include('components.city', ['name' => 'ville']) +
+ +
+ +
+ +
+ Distance : 5 km +
+
+ +
+
+ +
+
+ +
+
+
+

{{ App\Repositories\Core\Number::price($min) }} - {{ App\Repositories\Core\Number::price($max) }}

+

Montant +/- 10 000 €

+
+
+ +
+
+
+
+
+ +
+ +
+ +

+
+ +
+ + +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Section/product_form.blade.php b/resources/views/shop/admin/Section/product_form.blade.php new file mode 100644 index 00000000..a7e0178a --- /dev/null +++ b/resources/views/shop/admin/Section/product_form.blade.php @@ -0,0 +1,73 @@ + + +@push('js') + @include('components.js', ['js' => '/js/laroute.js']) + + + + + +@endpush diff --git a/resources/views/shop/admin/Section/recherche.blade.php b/resources/views/shop/admin/Section/recherche.blade.php new file mode 100644 index 00000000..23df73f0 --- /dev/null +++ b/resources/views/shop/admin/Section/recherche.blade.php @@ -0,0 +1,125 @@ +@extends('layout.index', [ + 'title' => __('lots.title'), + 'subtitle' => __('lots.demande.title'), + 'breadcrumb' => [__('lots.demande.title')] +]) + +@section('content') + + {{ Form::open(['route' => 'Hestimmo.Lots.disponibles', 'id' => 'lot-form', 'autocomplete' => 'off']) }} + +
+ +
+ +
+
+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ Distance : 5 km +
+
+ +
+
+ +
+
+ +
+
+
+

10 000

+

Montant +/- 5000 €

+
+
+ +
+
+
+
+
+ +
+ +
+ +

+
+ +
+
+
+ + + @include('Hestimmo.modules.Lot.partials.list-mini') + +@endsection + +@include('boilerplate::load.datatables') +@include('boilerplate::load.select2') + +@push('js') + + +@endpush + +@push('css') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/admin/Section/show.blade.php b/resources/views/shop/admin/Section/show.blade.php new file mode 100644 index 00000000..1e1cd729 --- /dev/null +++ b/resources/views/shop/admin/Section/show.blade.php @@ -0,0 +1,36 @@ +@extends('layout.index', [ + 'title' => __('products.title'), + 'subtitle' => __('products.title'), + 'breadcrumb' => [__('products.title')] +]) + +@section('content') +
+ +
+ +
+ +
+
+
+

{{ name }}

+

+ {{ $product.section.name }}
+

+
+
+

{{ $prix_total }} €

+

{{ $residence['type_produit']['name'] }}

+
+ +
+ @include('Hestimmo.modules.Lot.partials.carousel') +
+
+
+
+
+
+ +@endsection diff --git a/resources/views/shop/admin/Section/site/lot.blade.php b/resources/views/shop/admin/Section/site/lot.blade.php new file mode 100644 index 00000000..75c11cbe --- /dev/null +++ b/resources/views/shop/admin/Section/site/lot.blade.php @@ -0,0 +1,38 @@ +
+
+
+ Lot +
+
+
+ + + +
+
+
+
{{ $dispositif }}
+
{{ $nb_photos }}
+
+
+
+
+
+
+

+ {{ $prix }} € + +

+
{{ $titre }}
+

Au sein d'une résidence récente et sécurisée, dans un cadre calme et verdoyant, appartement T3 de 58 m² situé au 1er étage comprenant

+

{{ $adresse }} {{ $ville }}

+
    +
  • {{ $nb_chambres+2 }} pièces
  • +
  • {{ $nb_chambres }} chambres
  • +
  • {{ $surface }} m²
  • +
+
+
+
+ +
\ No newline at end of file diff --git a/resources/views/shop/admin/Section/site/recherche.blade.php b/resources/views/shop/admin/Section/site/recherche.blade.php new file mode 100644 index 00000000..6faad1f8 --- /dev/null +++ b/resources/views/shop/admin/Section/site/recherche.blade.php @@ -0,0 +1,110 @@ +
+ +
+ +@include('boilerplate::load.select2') + +@push('js') + + +@endpush + +@push('css') + +@endpush \ No newline at end of file diff --git a/resources/views/shop/home.twig b/resources/views/shop/home.twig new file mode 100644 index 00000000..21448de3 --- /dev/null +++ b/resources/views/shop/home.twig @@ -0,0 +1,56 @@ + + + + + + + + + OpenSemis + + + + + + + + + + + + + +
+ + {{ include("shop._partials.header") }} + {{ include("shop._partials.notifications") }} + +
+ +
+
+
+
+ + {{ include("shop._partials.slider") }} + {{ include("shop._partials.block-banner") }} + {{ include("shop._partials.block-products") }} + + + {{ include("shop._partials.block-breadcrumb") }} + {{ include("shop._partials.wrapper") }} + + {{ include("shop._partials.block-bottom")}} + + {{ include("shop._partials.footer")}} + +
+
+ +   + + + + + + \ No newline at end of file diff --git a/resources/views/shop/layout/layout.twig b/resources/views/shop/layout/layout.twig new file mode 100644 index 00000000..21448de3 --- /dev/null +++ b/resources/views/shop/layout/layout.twig @@ -0,0 +1,56 @@ + + + + + + + + + OpenSemis + + + + + + + + + + + + + +
+ + {{ include("shop._partials.header") }} + {{ include("shop._partials.notifications") }} + +
+ +
+
+
+
+ + {{ include("shop._partials.slider") }} + {{ include("shop._partials.block-banner") }} + {{ include("shop._partials.block-products") }} + + + {{ include("shop._partials.block-breadcrumb") }} + {{ include("shop._partials.wrapper") }} + + {{ include("shop._partials.block-bottom")}} + + {{ include("shop._partials.footer")}} + +
+
+ +   + + + + + + \ No newline at end of file diff --git a/resources/views/users/permissions/create.blade.php b/resources/views/users/permissions/create.blade.php new file mode 100644 index 00000000..c8396b93 --- /dev/null +++ b/resources/views/users/permissions/create.blade.php @@ -0,0 +1,52 @@ +@extends('layout.index', [ + 'title' => 'Permissions', + 'subtitle' => __('permissions.edit.title'), + 'breadcrumb' => [ + __('permissions.title') => 'boilerplate.Users.Permissions.index', + __('permissions.edit.title') + ] +]) + +@include('boilerplate::load.icheck') + +@section('content') + {{ Form::open(['route' => ['boilerplate.Users.Permissions.update', ''], 'method' => 'put', 'autocomplete' => 'off']) }} +
+
+ + {{ __('permissions.list.title') }} + + + + +
+
+
+
+
+
+

{{ __('permissions.parameters') }}

+
+
+
+ {{ Form::label('display_name', __('permissions.label')) }} + {{ Form::text('display_name', '', ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('display_name','

:message

') !!} +
+
+ {{ Form::label('description', __('permissions.description')) }} + {{ Form::text('description', '', ['class' => 'form-control']) }} + {!! $errors->first('description','

:message

') !!} +
+
+ {{ Form::label('name', __('permissions.name')) }} + {{ Form::text('name', '', ['class' => 'form-control']) }} + {!! $errors->first('name','

:message

') !!} +
+
+
+
+ {{ Form::close() }} +@endsection \ No newline at end of file diff --git a/resources/views/users/permissions/edit.blade.php b/resources/views/users/permissions/edit.blade.php new file mode 100644 index 00000000..5e6d1cc9 --- /dev/null +++ b/resources/views/users/permissions/edit.blade.php @@ -0,0 +1,52 @@ +@extends('layout.index', [ + 'title' => 'Permissions', + 'subtitle' => 'Edition', + 'breadcrumb' => [ + __('permissions.title') => 'boilerplate.Users.Permissions.index', + __('permissions.edit.title') + ] +]) + +@include('boilerplate::load.icheck') + +@section('content') + {{ Form::open(['route' => ['boilerplate.Users.Permissions.update', $permission->id], 'method' => 'put', 'autocomplete' => 'off']) }} +
+
+ + {{ __('permissions.list.title') }} + + + + +
+
+
+
+
+
+

{{ __('permissions.parameters') }}

+
+
+
+ {{ Form::label('display_name', __('permissions.label')) }} + {{ Form::text('display_name', old('display_name', $permission->display_name), ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('display_name','

:message

') !!} +
+
+ {{ Form::label('description', __('permissions.description')) }} + {{ Form::text('description', old('description', $permission->description), ['class' => 'form-control']) }} + {!! $errors->first('description','

:message

') !!} +
+
+ {{ Form::label('name', __('permissions.name')) }} + {{ Form::text('name', old('name', $permission->name), ['class' => 'form-control']) }} + {!! $errors->first('name','

:message

') !!} +
+
+
+
+ {{ Form::close() }} +@endsection \ No newline at end of file diff --git a/resources/views/users/permissions/list.blade.php b/resources/views/users/permissions/list.blade.php new file mode 100644 index 00000000..4a603367 --- /dev/null +++ b/resources/views/users/permissions/list.blade.php @@ -0,0 +1,85 @@ +@extends('boilerplate::layout.index', [ + 'title' => __('permissions.title'), + 'subtitle' => __('permissions.list.title'), + 'breadcrumb' => ['Utilisateurs', 'Permissions'] +]) + +@section('content') + +
+
+ + + + + + + + + + + + @foreach($permissions as $permission) + + + + + + + + @endforeach + +
{{ __('permissions.name') }}{{ __('permissions.label') }}{{ __('permissions.description') }}{{ __('permissions.list.nbusers') }}
+ {{ $permission->name }} + + {{ $permission->display_name }} + + {{ $permission->description }}
+
+ + + + + +
+
+
+@endsection + +@include('boilerplate::load.datatables') + +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/users/roles/create.blade.php b/resources/views/users/roles/create.blade.php new file mode 100644 index 00000000..9b924bf4 --- /dev/null +++ b/resources/views/users/roles/create.blade.php @@ -0,0 +1,74 @@ +@extends('layout.index', [ + 'title' => __('boilerplate::role.title'), + 'subtitle' => __('boilerplate::role.create.title'), + 'breadcrumb' => [ + __('boilerplate::role.title') => 'boilerplate.roles.index', + __('boilerplate::role.create.title') + ] +]) + +@include('boilerplate::load.icheck') + +@section('content') + {{ Form::open(['route' => 'boilerplate.roles.store', 'autocomplete' => 'off']) }} +
+
+ + {{ __('boilerplate::role.list.title') }} + + + + +
+
+
+
+
+
+

{{ __('boilerplate::role.parameters') }}

+
+
+
+ {{ Form::label('display_name', __('boilerplate::role.label')) }} + {{ Form::text('display_name', old('display_name'), ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('display_name','

:message

') !!} +
+
+ {{ Form::label('description', __('boilerplate::role.description')) }} + {{ Form::text('description', old('description'), ['class' => 'form-control']) }} + {!! $errors->first('description','

:message

') !!} +
+
+
+
+ @if(count($permissions) > 0) +
+
+
+

{{ __('boilerplate::role.permissions') }}

+
+
+ + + @foreach($permissions as $permission) + + + + + @endforeach + +
+ {{ Form::checkbox('permission['.$permission->id.']', 1, old('permission['.$permission->id.']'), ['id' => 'permission_'.$permission->id, 'class' => 'icheck']) }} + + {{ Form::label('permission_'.$permission->id, $permission->display_name, ['class' => 'mbn']) }}
+ {{ __($permission->description) }} +
+
+
+
+ @endif +
+ {{ Form::close() }} +@endsection \ No newline at end of file diff --git a/resources/views/users/roles/edit.blade.php b/resources/views/users/roles/edit.blade.php new file mode 100644 index 00000000..6434a573 --- /dev/null +++ b/resources/views/users/roles/edit.blade.php @@ -0,0 +1,78 @@ +@extends('layout.index', [ + 'title' => __('boilerplate::role.title'), + 'subtitle' => __('boilerplate::role.edit.title'), + 'breadcrumb' => [ + __('boilerplate::role.title') => 'boilerplate.roles.index', + __('boilerplate::role.edit.title') + ] +]) + +@include('boilerplate::load.icheck') + +@section('content') + {{ Form::open(['route' => ['boilerplate.roles.update', $role->id], 'method' => 'put', 'autocomplete' => 'off']) }} +
+
+ + {{ __('boilerplate::role.list.title') }} + + + + +
+
+
+
+
+
+

{{ __('boilerplate::role.parameters') }}

+
+
+ {!! $errors->first('name','

:message

') !!} +
+ {{ Form::label('display_name', __('boilerplate::role.label')) }} + {{ Form::text('display_name', old('display_name', $role->display_name), ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('display_name','

:message

') !!} +
+
+ {{ Form::label('description', __('boilerplate::role.description')) }} + {{ Form::text('description', old('description', $role->description), ['class' => 'form-control']) }} + {!! $errors->first('description','

:message

') !!} +
+
+
+
+ @if(count($permissions) > 0) +
+
+
+

{{ __('boilerplate::role.permissions') }}

+
+
+ + + @foreach($permissions as $permission) + + + + + @endforeach + +
+ @if($role->id == 1) + + @else + {{ Form::checkbox('permission['.$permission->id.']', 1, old('permission['.$permission->id.']', $role->permissions()->where(['id' => $permission->id])->count()), ['id' => 'permission_'.$permission->id, 'class' => 'icheck']) }} + @endif + + {{ Form::label('permission_'.$permission->id, $permission->display_name, ['class' => 'mbn']) }}
+ {{ $permission->description }} +
+
+
+
+ @endif + {{ Form::close() }} +@endsection \ No newline at end of file diff --git a/resources/views/users/roles/list.blade.php b/resources/views/users/roles/list.blade.php new file mode 100644 index 00000000..c57e1792 --- /dev/null +++ b/resources/views/users/roles/list.blade.php @@ -0,0 +1,95 @@ +@extends('boilerplate::layout.index', [ + 'title' => __('boilerplate::role.title'), + 'subtitle' => __('boilerplate::role.list.title'), + 'breadcrumb' => [__('boilerplate::role.title')] +]) + +@section('content') + +
+
+

{{ __('boilerplate::role.list.title') }}

+
+
+ + + + + + + + + + + + @foreach($roles as $role) + + + + + + + + @endforeach + +
{{ __('boilerplate::role.label') }}{{ __('boilerplate::role.description') }}{{ __('boilerplate::role.permissions') }}{{ __('boilerplate::role.list.nbusers') }}
+ {{ $role->display_name }} + + {{ $role->description }}
+
+ {!! $role->permissions->implode('display_name', ', ') !!} + + {{ $role->getNbUsers() }} + + + + + @if($role->name !== 'admin' && + !(config('boilerplate.auth.register') && $role->name === config('boilerplate.auth.register_role')) && + $role->getNbUsers() === 0) + + + + @endif +
+
+
+@endsection + +@include('boilerplate::load.datatables') + +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/users/teams/create.blade.php b/resources/views/users/teams/create.blade.php new file mode 100644 index 00000000..ceecf487 --- /dev/null +++ b/resources/views/users/teams/create.blade.php @@ -0,0 +1,74 @@ +@extends('layout.index', [ + 'title' => __('team.title'), + 'subtitle' => __('team.create.title'), + 'breadcrumb' => [ + __('team.title') => 'boilerplate.Users.Teams.index', + __('team.create.title') + ] +]) + +@include('boilerplate::load.icheck') + +@section('content') + {{ Form::open(['route' => 'boilerplate.Users.Teams.store', 'autocomplete' => 'off']) }} +
+
+ + {{ __('team.list.title') }} + + + + +
+
+
+
+
+
+

{{ __('team.parameters') }}

+
+
+
+ {{ Form::label('display_name', __('team.label')) }} + {{ Form::text('display_name', old('display_name'), ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('display_name','

:message

') !!} +
+
+ {{ Form::label('description', __('team.description')) }} + {{ Form::text('description', old('description'), ['class' => 'form-control']) }} + {!! $errors->first('description','

:message

') !!} +
+
+
+
+ @if(count($permissions) > 0) +
+
+
+

{{ __('team.permissions') }}

+
+
+ + + @foreach($permissions as $permission) + + + + + @endforeach + +
+ {{ Form::checkbox('permission['.$permission->id.']', 1, old('permission['.$permission->id.']'), ['id' => 'permission_'.$permission->id, 'class' => 'icheck']) }} + + {{ Form::label('permission_'.$permission->id, __($permission->display_name), ['class' => 'mbn']) }}
+ {{ __($permission->description) }} +
+
+
+
+ @endif +
+ {{ Form::close() }} +@endsection \ No newline at end of file diff --git a/resources/views/users/teams/edit.blade.php b/resources/views/users/teams/edit.blade.php new file mode 100644 index 00000000..f17cd9e4 --- /dev/null +++ b/resources/views/users/teams/edit.blade.php @@ -0,0 +1,52 @@ +@extends('layout.index', [ + 'title' => __('team.title'), + 'subtitle' => __('team.edit.title'), + 'breadcrumb' => [ + __('team.title') => 'boilerplate.Users.Teams.index', + __('team.edit.title') + ] +]) + +@include('boilerplate::load.icheck') + +@section('content') + {{ Form::open(['route' => ['boilerplate.Users.Teams.update', $team->id], 'method' => 'put', 'autocomplete' => 'off']) }} +
+
+ + {{ __('team.list.title') }} + + + + +
+
+
+
+
+
+

{{ __('team.parameters') }}

+
+
+
+ {{ Form::label('display_name', __('team.label')) }} + {{ Form::text('display_name', old('display_name', $team->display_name), ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('display_name','

:message

') !!} +
+
+ {{ Form::label('description', __('team.description')) }} + {{ Form::text('description', old('description', $team->description), ['class' => 'form-control']) }} + {!! $errors->first('description','

:message

') !!} +
+
+ {{ Form::label('name', __('team.name')) }} + {{ Form::text('name', old('name', $team->name), ['class' => 'form-control']) }} + {!! $errors->first('name','

:message

') !!} +
+
+
+
+ {{ Form::close() }} +@endsection \ No newline at end of file diff --git a/resources/views/users/teams/list.blade.php b/resources/views/users/teams/list.blade.php new file mode 100644 index 00000000..b3deaa66 --- /dev/null +++ b/resources/views/users/teams/list.blade.php @@ -0,0 +1,108 @@ +@extends('boilerplate::layout.index', [ + 'title' => __('team.title'), + 'subtitle' => __('team.list.title'), + 'breadcrumb' => [__('team.list.title')] +]) + +@section('content') +
+
+ + + + + + + + + + + +
{{ __('team.label') }}{{ __('team.description') }}{{ __('team.list.nbusers') }}
+
+
+@endsection + +@prepend('js') + @include('components.js.ie11') + @include('components.js', ['js' => '/js/laroute.js']) + @include('components.js', ['js' => '/js/main.min.js']) + @include('components.js', ['js' => '/js/datatables.min.js']) +@endprepend + +@push('css') + @include('components.css', ['css' => '/css/main.min.css']) + @include('components.css', ['css' => '/css/datatables.min.css']) +@endpush + +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/users/users/agenda.blade.php b/resources/views/users/users/agenda.blade.php new file mode 100644 index 00000000..eebadcd0 --- /dev/null +++ b/resources/views/users/users/agenda.blade.php @@ -0,0 +1,12 @@ +
+
+ +@push('js') + @include('components.js', ['js' => '/js/calendar.min.js']) + @include('components.js', ['js' => '/js/events.min.js']) +@endpush + +@push('css') + @include('components.css', ['css' => '/css/calendar.min.css']) +@endpush + diff --git a/resources/views/users/users/create.blade.php b/resources/views/users/users/create.blade.php new file mode 100644 index 00000000..26dedb6b --- /dev/null +++ b/resources/views/users/users/create.blade.php @@ -0,0 +1,100 @@ +@extends('boilerplate::layout.index', [ + 'title' => __('boilerplate::users.title'), + 'subtitle' => __('boilerplate::users.create.title'), + 'breadcrumb' => [ + __('boilerplate::users.title') => 'boilerplate.users.index', + __('boilerplate::users.create.title') + ] +]) + +@include('boilerplate::load.icheck') + +@section('content') + {{ Form::open(['route' => 'boilerplate.users.store', 'autocomplete' => 'off']) }} +
+
+ + {{ __('boilerplate::users.returntolist') }} + + + + +
+
+
+
+
+
+

{{ __('boilerplate::users.informations') }}

+
+
+
+
+
+ {{ Form::label('active', __('boilerplate::users.status')) }} + {{ Form::select("active", ['0' => __('boilerplate::users.inactive'), '1' => __('boilerplate::users.active')], old('active', 1), ['class' => 'form-control']) }} + {!! $errors->first('active','

:message

') !!} +
+
+
+
+ {{ Form::label('email', __('boilerplate::users.email')) }} + {{ Form::input('text', 'email', old('email'), ['class' => 'form-control']) }} + {!! $errors->first('email','

:message

') !!} +
+
+
+ + {{ __('boilerplate::users.create.help') }} + +
+
+
+
+
+ {{ Form::label('last_name', __('boilerplate::users.firstname')) }} + {{ Form::input('text', 'first_name', old('first_name'), ['class' => 'form-control']) }} + {!! $errors->first('first_name','

:message

') !!} +
+
+
+
+ {{ Form::label('last_name', __('boilerplate::users.lastname')) }} + {{ Form::input('text', 'last_name', old('last_name'), ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('last_name','

:message

') !!} +
+
+
+
+
+
+
+
+
+

{{ __('boilerplate::users.roles') }}

+
+
+ + @foreach($roles as $role) + + + + + @endforeach +
+ {{ Form::checkbox('roles['.$role->id.']', null, null, ['id' => 'role_'.$role->id, 'class' => 'icheck']) }} + + {{ Form::label('role_'.$role->id, $role->display_name, ['class' => 'mbn']) }}
+ {{ $role->description }}
+ +
+
+
+
+
+ {{ Form::close() }} +@endsection \ No newline at end of file diff --git a/resources/views/users/users/edit.blade.php b/resources/views/users/users/edit.blade.php new file mode 100644 index 00000000..28dab59e --- /dev/null +++ b/resources/views/users/users/edit.blade.php @@ -0,0 +1,97 @@ +@extends('boilerplate::layout.index', [ + 'title' => __('boilerplate::users.title'), + 'subtitle' => __('boilerplate::users.edit.title'), + 'breadcrumb' => [ + __('boilerplate::users.title') => 'boilerplate.users.index', + __('boilerplate::users.edit.title') + ] +]) + +@section('content') + {{ Form::open(['route' => ['boilerplate.users.update', $user->id], 'method' => 'put', 'autocomplete' => 'off']) }} +
+
+ + {{ __('boilerplate::users.returntolist') }} + + + + +
+
+ +
+
+
+
+

{{ __('boilerplate::users.informations') }}

+
+
+ @if(Auth::user()->id !== $user->id) +
+ {{ Form::label('active', __('boilerplate::users.status')) }} + {{ Form::select('active', ['0' => __('boilerplate::users.inactive'), '1' => __('boilerplate::users.active')], old('active', $user->active), ['class' => 'form-control']) }} + {!! $errors->first('active','

:message

') !!} +
+ @endif +
+
+
+ {{ Form::label('last_name', __('boilerplate::users.lastname')) }} + {{ Form::text('last_name', old('last_name', $user->last_name), ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('last_name','

:message

') !!} +
+
+
+
+ {{ Form::label('first_name', __('boilerplate::users.firstname')) }} + {{ Form::text('first_name', old('first_name', $user->first_name), ['class' => 'form-control']) }} + {!! $errors->first('first_name','

:message

') !!} +
+
+
+
+ {{ Form::label('email', __('boilerplate::users.email')) }} + {{ Form::email('email', old('email', $user->email), ['class' => 'form-control']) }} + {!! $errors->first('email','

:message

') !!} +
+
+
+
+
+
+
+

{{ __('boilerplate::users.roles') }}

+
+
+ + @foreach($roles as $role) + @if($role->name !== 'admin' || ($role->name === 'admin' && Auth::user()->hasRole('admin'))) + + + + + @endif + @endforeach +
+ @if(Auth::user()->id === $user->id && $role->name === 'admin' && Auth::user()->hasRole('admin')) + {{ Form::checkbox('roles['.$role->id.']', 1, old('roles['.$role->id.']', $user->hasRole($role->name)), ['id' => 'role_'.$role->id, 'class' => 'icheck', 'checked', 'disabled']) }} + {!! Form::hidden('roles['.$role->id.']', '1', ['id' => 'role_'.$role->id]) !!} + @else + {{ Form::checkbox('roles['.$role->id.']', 1, old('roles['.$role->id.']', $user->hasRole($role->name)), ['id' => 'role_'.$role->id, 'class' => 'icheck']) }} + @endif + + {{ Form::label('role_'.$role->id, $role->display_name, ['class' => 'mbn']) }}
+ {{ $role->description }}
+ {{ $role->permissions->implode('display_name', ', ') }} +
+
+
+
+
+ {{ Form::close() }} +@endsection + +@include('boilerplate::load.icheck') \ No newline at end of file diff --git a/resources/views/users/users/list.blade.php b/resources/views/users/users/list.blade.php new file mode 100644 index 00000000..22117efa --- /dev/null +++ b/resources/views/users/users/list.blade.php @@ -0,0 +1,88 @@ +@extends('boilerplate::layout.index', [ + 'title' => __('boilerplate::users.title'), + 'subtitle' => __('boilerplate::users.list.title'), + 'breadcrumb' => [ + __('boilerplate::users.title') => 'boilerplate.users.index' + ] +]) + +@section('content') + +
+
+

{{ __('boilerplate::users.list.title') }}

+
+
+ + + + + + + + + + + + + +
{{ __('boilerplate::users.list.state') }}{{ __('boilerplate::users.list.lastname') }}{{ __('boilerplate::users.list.firstname') }}{{ __('boilerplate::users.list.email') }}{{ __('boilerplate::users.list.roles') }}{{ __('boilerplate::users.list.creationdate') }}{{ __('boilerplate::users.list.lastconnect') }}
+
+
+@endsection + +@include('boilerplate::load.datatables') + +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/users/users/profile.blade.php b/resources/views/users/users/profile.blade.php new file mode 100644 index 00000000..de418fcd --- /dev/null +++ b/resources/views/users/users/profile.blade.php @@ -0,0 +1,132 @@ +@extends('boilerplate::layout.index', [ + 'title' => __('boilerplate::users.profile.title'), + 'subtitle' => $user->name, + 'breadcrumb' => [ + $user->name => 'boilerplate.user.profile', + ] +]) + +@section('content') + {{ Form::open(['route' => ['boilerplate.user.profile'], 'method' => 'post', 'autocomplete' => 'off', 'files' => true]) }} +
+
+ + + +
+
+
+
+
+ + avatar + +
+ +

{{ $user->name }}

+

{{ $user->getRolesList() }}

+
+ +

+ {{ __('boilerplate::users.profile.subscribedsince', [ + 'date' => $user->created_at->isoFormat(__('boilerplate::date.lFdY')), + 'since' => $user->created_at->diffForHumans()]) }} +

+
+
+
+
+
+ @if(is_file($user->avatar_path)) + + + + @endif +

{{ __('boilerplate::users.profile.avatar') }}

+
+
+
+ {!! Form::file('avatar', ['id' => 'avatar']) !!} + {!! $errors->first('avatar','

:message

') !!} +
+
+
+
+
+
+
+

{{ __('boilerplate::users.informations') }}

+
+
+
+
+
+ {{ Form::label('first_name', __('boilerplate::users.firstname')) }} + {{ Form::text('first_name', old('first_name', $user->first_name), ['class' => 'form-control']) }} + {!! $errors->first('first_name','

:message

') !!} +
+
+
+
+ {{ Form::label('last_name', __('boilerplate::users.lastname')) }} + {{ Form::text('last_name', old('last_name', $user->last_name), ['class' => 'form-control', 'autofocus']) }} + {!! $errors->first('last_name','

:message

') !!} +
+
+
+
+ {{ Form::label('password', ucfirst(__('boilerplate::auth.fields.password'))) }} + {{ Form::password('password', ['class' => 'form-control']) }} + {!! $errors->first('password','

:message

') !!} +
+
+
+
+ {{ Form::label('password_confirmation', ucfirst(__('boilerplate::auth.fields.password_confirm'))) }} + {{ Form::password('password_confirmation', ['class' => 'form-control']) }} + {!! $errors->first('password_confirmation','

:message

') !!} +
+
+
+
+
+
+
+ {{ Form::close() }} +@endsection + +@include('boilerplate::load.fileinput') + +@push('js') + +@endpush \ No newline at end of file diff --git a/resources/views/vendor/authentication-log/emails/new.blade.php b/resources/views/vendor/authentication-log/emails/new.blade.php new file mode 100644 index 00000000..016d1286 --- /dev/null +++ b/resources/views/vendor/authentication-log/emails/new.blade.php @@ -0,0 +1,14 @@ +@component('mail::message') +# Hello! + +Your {{ config('app.name') }} account logged in from a new device. + +> **Account:** {{ $account->email }}
+> **Time:** {{ $time->toCookieString() }}
+> **IP Address:** {{ $ipAddress }}
+> **Browser:** {{ $browser }} + +If this was you, you can ignore this alert. If you suspect any suspicious activity on your account, please change your password. + +Regards,
{{ config('app.name') }} +@endcomponent diff --git a/resources/views/vendor/charts/README.md b/resources/views/vendor/charts/README.md new file mode 100644 index 00000000..4d8fa7a5 --- /dev/null +++ b/resources/views/vendor/charts/README.md @@ -0,0 +1,3 @@ +# Charts Views + +All the charts views are located in this folder diff --git a/resources/views/vendor/charts/c3/container.blade.php b/resources/views/vendor/charts/c3/container.blade.php new file mode 100644 index 00000000..9671a556 --- /dev/null +++ b/resources/views/vendor/charts/c3/container.blade.php @@ -0,0 +1,3 @@ +
formatContainerOptions('css') !!}> +
+@include('charts::loader') \ No newline at end of file diff --git a/resources/views/vendor/charts/c3/script.blade.php b/resources/views/vendor/charts/c3/script.blade.php new file mode 100644 index 00000000..96c6e7c7 --- /dev/null +++ b/resources/views/vendor/charts/c3/script.blade.php @@ -0,0 +1,29 @@ + diff --git a/resources/views/vendor/charts/chartjs/container.blade.php b/resources/views/vendor/charts/chartjs/container.blade.php new file mode 100644 index 00000000..48773434 --- /dev/null +++ b/resources/views/vendor/charts/chartjs/container.blade.php @@ -0,0 +1,2 @@ + +@include('charts::loader') \ No newline at end of file diff --git a/resources/views/vendor/charts/chartjs/script.blade.php b/resources/views/vendor/charts/chartjs/script.blade.php new file mode 100644 index 00000000..ff355676 --- /dev/null +++ b/resources/views/vendor/charts/chartjs/script.blade.php @@ -0,0 +1,41 @@ + +@foreach ($chart->plugins as $plugin) + @include($chart->pluginsViews[$plugin]); +@endforeach + + diff --git a/resources/views/vendor/charts/echarts/container.blade.php b/resources/views/vendor/charts/echarts/container.blade.php new file mode 100644 index 00000000..9671a556 --- /dev/null +++ b/resources/views/vendor/charts/echarts/container.blade.php @@ -0,0 +1,3 @@ +
formatContainerOptions('css') !!}> +
+@include('charts::loader') \ No newline at end of file diff --git a/resources/views/vendor/charts/echarts/script.blade.php b/resources/views/vendor/charts/echarts/script.blade.php new file mode 100644 index 00000000..a3b6cad0 --- /dev/null +++ b/resources/views/vendor/charts/echarts/script.blade.php @@ -0,0 +1,29 @@ + diff --git a/resources/views/vendor/charts/frappe/container.blade.php b/resources/views/vendor/charts/frappe/container.blade.php new file mode 100644 index 00000000..ffd5a3d3 --- /dev/null +++ b/resources/views/vendor/charts/frappe/container.blade.php @@ -0,0 +1,3 @@ +
+
+@include('charts::loader') \ No newline at end of file diff --git a/resources/views/vendor/charts/frappe/script.blade.php b/resources/views/vendor/charts/frappe/script.blade.php new file mode 100644 index 00000000..e305783c --- /dev/null +++ b/resources/views/vendor/charts/frappe/script.blade.php @@ -0,0 +1,44 @@ + diff --git a/resources/views/vendor/charts/fusioncharts/container.blade.php b/resources/views/vendor/charts/fusioncharts/container.blade.php new file mode 100644 index 00000000..8974fbf6 --- /dev/null +++ b/resources/views/vendor/charts/fusioncharts/container.blade.php @@ -0,0 +1,3 @@ +
formatContainerOptions('css') !!}> +
+@include('charts::loader') diff --git a/resources/views/vendor/charts/fusioncharts/script.blade.php b/resources/views/vendor/charts/fusioncharts/script.blade.php new file mode 100644 index 00000000..7eae4682 --- /dev/null +++ b/resources/views/vendor/charts/fusioncharts/script.blade.php @@ -0,0 +1,48 @@ + diff --git a/resources/views/vendor/charts/highcharts/container.blade.php b/resources/views/vendor/charts/highcharts/container.blade.php new file mode 100644 index 00000000..8974fbf6 --- /dev/null +++ b/resources/views/vendor/charts/highcharts/container.blade.php @@ -0,0 +1,3 @@ +
formatContainerOptions('css') !!}> +
+@include('charts::loader') diff --git a/resources/views/vendor/charts/highcharts/script.blade.php b/resources/views/vendor/charts/highcharts/script.blade.php new file mode 100644 index 00000000..e47f5bc0 --- /dev/null +++ b/resources/views/vendor/charts/highcharts/script.blade.php @@ -0,0 +1,27 @@ + diff --git a/resources/views/vendor/charts/init.blade.php b/resources/views/vendor/charts/init.blade.php new file mode 100644 index 00000000..9720d923 --- /dev/null +++ b/resources/views/vendor/charts/init.blade.php @@ -0,0 +1,17 @@ +let {{ $chart->id }}_rendered = false; +@if ($chart->api_url) +let {{ $chart->id }}_api_url = "{!! $chart->api_url !!}"; +@endif +let {{ $chart->id }}_load = function () { + if (document.getElementById("{{ $chart->id }}") && !{{ $chart->id }}_rendered) { + @if ($chart->api_url) + fetch({{ $chart->id }}_api_url) + .then(data => data.json()) + .then(data => { {{ $chart->id }}_create(data) }); + @else + {{ $chart->id }}_create({!! $chart->formatDatasets() !!}) + @endif + } +}; +window.addEventListener("load", {{ $chart->id }}_load); +document.addEventListener("turbolinks:load", {{ $chart->id }}_load); diff --git a/resources/views/vendor/charts/loader.blade.php b/resources/views/vendor/charts/loader.blade.php new file mode 100644 index 00000000..56eb7c81 --- /dev/null +++ b/resources/views/vendor/charts/loader.blade.php @@ -0,0 +1,40 @@ +
+ + + + + + + + + + + + + + + + + + + +
diff --git a/resources/views/vendor/datatables/editor.blade.php b/resources/views/vendor/datatables/editor.blade.php new file mode 100644 index 00000000..6173e909 --- /dev/null +++ b/resources/views/vendor/datatables/editor.blade.php @@ -0,0 +1,12 @@ +(function(window,$){ + $.ajaxSetup({headers: {'X-CSRF-TOKEN': '{{csrf_token()}}'}}); + window.LaravelDataTables = window.LaravelDataTables || {}; + @foreach($editors as $editor) + var {{$editor->instance}} = window.LaravelDataTables["%1$s-{{$editor->instance}}"] = new $.fn.dataTable.Editor({!! $editor->toJson() !!}); + {!! $editor->scripts !!} + @foreach ((array) $editor->events as $event) + {{$editor->instance}}.on('{!! $event['event'] !!}', {!! $event['script'] !!}); + @endforeach + @endforeach + window.LaravelDataTables["%1$s"] = $("#%1$s").DataTable(%2$s); +})(window,jQuery); diff --git a/resources/views/vendor/datatables/options.blade.php b/resources/views/vendor/datatables/options.blade.php new file mode 100644 index 00000000..c5ac966b --- /dev/null +++ b/resources/views/vendor/datatables/options.blade.php @@ -0,0 +1,6 @@ +window.LaravelDataTables = window.LaravelDataTables || {}; +window.LaravelDataTables.options = %2$s +window.LaravelDataTables.editors = []; +@foreach($editors as $editor) +window.LaravelDataTables.editors["{{$editor->instance}}"] = {!! $editor->toJson() !!} +@endforeach diff --git a/resources/views/vendor/datatables/print.blade.php b/resources/views/vendor/datatables/print.blade.php new file mode 100644 index 00000000..d9767b7d --- /dev/null +++ b/resources/views/vendor/datatables/print.blade.php @@ -0,0 +1,37 @@ + + + + Print Table + + + + + + + + + + + @foreach($data as $row) + @if ($row == reset($data)) + + @foreach($row as $key => $value) + + @endforeach + + @endif + + @foreach($row as $key => $value) + @if(is_string($value) || is_numeric($value)) + + @else + + @endif + @endforeach + + @endforeach +
{!! $key !!}
{!! $value !!}
+ + diff --git a/resources/views/vendor/datatables/script.blade.php b/resources/views/vendor/datatables/script.blade.php new file mode 100644 index 00000000..9abfa03e --- /dev/null +++ b/resources/views/vendor/datatables/script.blade.php @@ -0,0 +1 @@ +(function(window,$){window.LaravelDataTables=window.LaravelDataTables||{};window.LaravelDataTables["%1$s"]=$("#%1$s").DataTable(%2$s);})(window,jQuery); diff --git a/resources/views/vendor/jsvalidation/bootstrap.php b/resources/views/vendor/jsvalidation/bootstrap.php new file mode 100644 index 00000000..f426edf4 --- /dev/null +++ b/resources/views/vendor/jsvalidation/bootstrap.php @@ -0,0 +1,56 @@ + diff --git a/resources/views/vendor/jsvalidation/bootstrap4.php b/resources/views/vendor/jsvalidation/bootstrap4.php new file mode 100644 index 00000000..ba86f575 --- /dev/null +++ b/resources/views/vendor/jsvalidation/bootstrap4.php @@ -0,0 +1,55 @@ + diff --git a/resources/views/vendor/laravel-user-verification/email-markdown.blade.php b/resources/views/vendor/laravel-user-verification/email-markdown.blade.php new file mode 100644 index 00000000..66ecfa8e --- /dev/null +++ b/resources/views/vendor/laravel-user-verification/email-markdown.blade.php @@ -0,0 +1,11 @@ +@component('mail::message') + +One last step! + +@component('mail::button', ['url' => route('email-verification.check', $user->verification_token) . '?email=' . urlencode($user->email) ]) +Click here to verify your account +@endcomponent + +Thanks,
+{{ config('app.name') }} +@endcomponent diff --git a/resources/views/vendor/laravel-user-verification/email.blade.php b/resources/views/vendor/laravel-user-verification/email.blade.php new file mode 100644 index 00000000..4eea6199 --- /dev/null +++ b/resources/views/vendor/laravel-user-verification/email.blade.php @@ -0,0 +1 @@ +Click here to verify your account: {{ $link }} diff --git a/resources/views/vendor/laravel-user-verification/user-verification.blade.php b/resources/views/vendor/laravel-user-verification/user-verification.blade.php new file mode 100644 index 00000000..77dd75a9 --- /dev/null +++ b/resources/views/vendor/laravel-user-verification/user-verification.blade.php @@ -0,0 +1,26 @@ +@extends('layouts.app') + + +@section('content') +
+
+
+
+
{!! trans('laravel-user-verification::user-verification.verification_error_header') !!}
+
+ + {!! trans('laravel-user-verification::user-verification.verification_error_message') !!} + + +
+
+
+
+
+@endsection diff --git a/resources/views/vendor/maileclipse/templates/.gitkeep b/resources/views/vendor/maileclipse/templates/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/resources/views/vendor/medialibrary/image.blade.php b/resources/views/vendor/medialibrary/image.blade.php new file mode 100644 index 00000000..4c78aab1 --- /dev/null +++ b/resources/views/vendor/medialibrary/image.blade.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/views/vendor/medialibrary/placeholderSvg.blade.php b/resources/views/vendor/medialibrary/placeholderSvg.blade.php new file mode 100644 index 00000000..1ba86f8d --- /dev/null +++ b/resources/views/vendor/medialibrary/placeholderSvg.blade.php @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/resources/views/vendor/medialibrary/responsiveImage.blade.php b/resources/views/vendor/medialibrary/responsiveImage.blade.php new file mode 100644 index 00000000..667738d5 --- /dev/null +++ b/resources/views/vendor/medialibrary/responsiveImage.blade.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/views/vendor/medialibrary/responsiveImageWithPlaceholder.blade.php b/resources/views/vendor/medialibrary/responsiveImageWithPlaceholder.blade.php new file mode 100644 index 00000000..7a7a8113 --- /dev/null +++ b/resources/views/vendor/medialibrary/responsiveImageWithPlaceholder.blade.php @@ -0,0 +1 @@ + diff --git a/routes/shop/Customers.php b/routes/shop/Customers.php new file mode 100644 index 00000000..0b3d2a7c --- /dev/null +++ b/routes/shop/Customers.php @@ -0,0 +1,6 @@ +prefix('Customers')->name('Customers.')->group(function () { + Route::get('show/{id}', 'CustomerController@show')->name('show'); +}); + diff --git a/routes/shop/Invoices.php b/routes/shop/Invoices.php new file mode 100644 index 00000000..4ab95c8b --- /dev/null +++ b/routes/shop/Invoices.php @@ -0,0 +1,6 @@ +prefix('Invoices')->name('Invoices.')->group(function () { + Route::get('show/{id}', 'InvoiceController@show')->name('show'); +}); + diff --git a/routes/shop/Orders.php b/routes/shop/Orders.php new file mode 100644 index 00000000..9c009df7 --- /dev/null +++ b/routes/shop/Orders.php @@ -0,0 +1,11 @@ +name('Orders.')->group(function () { + Route::get('', 'OrderController@index')->name('index'); + Route::get('create', 'OrderController@create')->name('create'); + Route::delete('destroy', 'OrderController@destroy')->name('destroy'); + Route::post('update', 'OrderController@update')->name('update'); + Route::post('store', 'OrderController@store')->name('store'); + Route::get('edit/{id}', 'OrderController@edit')->name('edit'); +}); + diff --git a/routes/shop/Products.php b/routes/shop/Products.php new file mode 100644 index 00000000..01169339 --- /dev/null +++ b/routes/shop/Products.php @@ -0,0 +1,8 @@ +name('Products.')->group(function () { + Route::get('', 'ProductController@index')->name('index'); + Route::get('bySection/{id}', 'ProductController@bySection')->name('index'); + Route::get('show/{id}', 'ProductController@show')->name('show'); +}); + diff --git a/routes/shop/Sections.php b/routes/shop/Sections.php new file mode 100644 index 00000000..e962103f --- /dev/null +++ b/routes/shop/Sections.php @@ -0,0 +1,7 @@ +name('Sections.')->group(function () { + Route::get('', 'SectionController@index')->name('index'); + Route::get('show/{id}', 'SectionController@show')->name('show'); +}); + diff --git a/routes/shop/admin/Customers.php b/routes/shop/admin/Customers.php new file mode 100644 index 00000000..1dbbda7d --- /dev/null +++ b/routes/shop/admin/Customers.php @@ -0,0 +1,12 @@ +name('Customers.')->group(function () { + Route::get('', 'CustomerController@index')->name('index'); + Route::get('create', 'CustomerController@create')->name('create'); + Route::delete('destroy', 'CustomerController@destroy')->name('destroy'); + Route::post('update', 'CustomerController@update')->name('update'); + Route::post('store', 'CustomerController@store')->name('store'); + Route::get('edit/{id}', 'CustomerController@edit')->name('edit'); + +}); + diff --git a/routes/shop/admin/Inventories.php b/routes/shop/admin/Inventories.php new file mode 100644 index 00000000..7c3d6731 --- /dev/null +++ b/routes/shop/admin/Inventories.php @@ -0,0 +1,4 @@ +name('Invoices.')->group(function () { + Route::get('', 'InvoiceController@index')->name('index'); + Route::get('create', 'InvoiceController@create')->name('create'); + Route::delete('destroy', 'InvoiceController@destroy')->name('destroy'); + Route::post('update', 'InvoiceController@update')->name('update'); + Route::post('store', 'InvoiceController@store')->name('store'); + Route::get('edit/{id}', 'InvoiceController@edit')->name('edit'); + +}); + diff --git a/routes/shop/admin/OrderPayments.php b/routes/shop/admin/OrderPayments.php new file mode 100644 index 00000000..30ca1e6e --- /dev/null +++ b/routes/shop/admin/OrderPayments.php @@ -0,0 +1,4 @@ +name('Orders.')->group(function () { + Route::get('', 'OrderController@index')->name('index'); + Route::get('create', 'OrderController@create')->name('create'); + Route::delete('destroy', 'OrderController@destroy')->name('destroy'); + Route::post('update', 'OrderController@update')->name('update'); + Route::post('store', 'OrderController@store')->name('store'); + Route::get('edit/{id}', 'OrderController@edit')->name('edit'); + +}); + diff --git a/routes/shop/admin/ProductAttributes.php b/routes/shop/admin/ProductAttributes.php new file mode 100644 index 00000000..9b98553a --- /dev/null +++ b/routes/shop/admin/ProductAttributes.php @@ -0,0 +1,4 @@ +name('Products.')->group(function () { + Route::get('', 'ProductController@index')->name('index'); + Route::get('create', 'ProductController@create')->name('create'); + Route::delete('destroy', 'ProductController@destroy')->name('destroy'); + Route::post('update', 'ProductController@update')->name('update'); + Route::post('store', 'ProductController@store')->name('store'); + Route::get('edit/{id}', 'ProductController@edit')->name('edit'); + +}); + diff --git a/routes/shop/admin/Sections.php b/routes/shop/admin/Sections.php new file mode 100644 index 00000000..6c545ebd --- /dev/null +++ b/routes/shop/admin/Sections.php @@ -0,0 +1,12 @@ +name('Sections.')->group(function () { + Route::get('', 'SectionController@index')->name('index'); + Route::get('create', 'SectionController@create')->name('create'); + Route::delete('destroy', 'SectionController@destroy')->name('destroy'); + Route::post('update', 'SectionController@update')->name('update'); + Route::post('store', 'SectionController@store')->name('store'); + Route::get('edit/{id}', 'SectionController@edit')->name('edit'); + +}); + diff --git a/routes/shop/admin/route.php b/routes/shop/admin/route.php new file mode 100644 index 00000000..5caa17ea --- /dev/null +++ b/routes/shop/admin/route.php @@ -0,0 +1,16 @@ +prefix('Admin')->namespace('Admin')->name('Admin.')->group(function () { + Route::get('dashboard', 'DashboardController@index')->name('dashboard'); + include( __DIR__ . '/Customers.php'); + include( __DIR__ . '/Inventories.php'); + include( __DIR__ . '/InventoryPlaces.php'); + include( __DIR__ . '/InvoiceItems.php'); + include( __DIR__ . '/Invoices.php'); + include( __DIR__ . '/OrderPayments.php'); + include( __DIR__ . '/Orders.php'); + include( __DIR__ . '/ProductAttributes.php'); + include( __DIR__ . '/ProductPrices.php'); + include( __DIR__ . '/Products.php'); + include( __DIR__ . '/Sections.php'); +}); diff --git a/routes/shop/route.php b/routes/shop/route.php new file mode 100644 index 00000000..086e3940 --- /dev/null +++ b/routes/shop/route.php @@ -0,0 +1,10 @@ +namespace('Shop')->name('Shop.')->group(function () { + include( __DIR__ . '/Customers.php'); + include( __DIR__ . '/Invoices.php'); + include( __DIR__ . '/Orders.php'); + include( __DIR__ . '/Products.php'); + include( __DIR__ . '/Sections.php'); + include( __DIR__ . '/admin/route.php'); +}); diff --git a/routes/web.php b/routes/web.php index 810aa349..8e82e55e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,6 +11,14 @@ | */ -Route::get('/', function () { - return view('welcome'); -}); +Auth::routes(); + +Route::get('', 'Shop\HomeController@index')->name('welcome'); +Route::get('home', 'Shop\HomeController@index')->name('home'); + +// include( __DIR__ . '/boilerplate/route.php'); +// include( __DIR__ . '/admin/route.php'); +include( __DIR__ . '/shop/route.php'); + + +Route::get('cache', 'JS\CacheController@getCacheVersions')->name('cacheVersions');