bianjunhui пре 2 недеља
родитељ
комит
1f4827db9e
100 измењених фајлова са 20809 додато и 7 уклоњено
  1. 18 0
      .editorconfig
  2. 80 0
      .env.example
  3. 11 0
      .gitattributes
  4. 31 5
      .gitignore
  5. 76 0
      CODE_OF_CONDUCT.md
  6. 62 0
      CONTRIBUTING.md
  7. 20 0
      LICENSE
  8. 175 2
      README.md
  9. 15 0
      SECURITY.md
  10. 284 0
      UPGRADE.md
  11. 8 0
      app/Http/Controllers/Controller.php
  12. 18 0
      app/Http/Middleware/EncryptCookies.php
  13. 42 0
      app/Providers/AppServiceProvider.php
  14. 53 0
      artisan
  15. 51 0
      bootstrap/app.php
  16. 2 0
      bootstrap/cache/.gitignore
  17. 46 0
      bootstrap/providers.php
  18. 154 0
      composer.json
  19. 14016 0
      composer.lock
  20. 7 0
      config/.gitignore
  21. 187 0
      config/app.php
  22. 113 0
      config/auth.php
  23. 32 0
      config/bagisto-vite.php
  24. 75 0
      config/breadcrumbs.php
  25. 57 0
      config/broadcasting.php
  26. 108 0
      config/cache.php
  27. 47 0
      config/concord.php
  28. 34 0
      config/cors.php
  29. 182 0
      config/database.php
  30. 74 0
      config/elasticsearch.php
  31. 84 0
      config/filesystems.php
  32. 52 0
      config/hashing.php
  33. 20 0
      config/image.php
  34. 69 0
      config/imagecache.php
  35. 132 0
      config/logging.php
  36. 150 0
      config/mail.php
  37. 28 0
      config/openai.php
  38. 14 0
      config/products.php
  39. 114 0
      config/purify.php
  40. 112 0
      config/queue.php
  41. 291 0
      config/repository.php
  42. 95 0
      config/responsecache.php
  43. 68 0
      config/sanctum.php
  44. 82 0
      config/services.php
  45. 217 0
      config/session.php
  46. 57 0
      config/sitemap.php
  47. 53 0
      config/themes.php
  48. 149 0
      config/translatable.php
  49. 43 0
      config/view.php
  50. 37 0
      config/visitor.php
  51. 1 0
      database/.gitignore
  52. 35 0
      database/migrations/2014_10_12_000000_create_users_table.php
  53. 32 0
      database/migrations/2014_10_12_100000_create_password_resets_table.php
  54. 33 0
      database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
  55. 36 0
      database/migrations/2020_12_27_121950_create_jobs_table.php
  56. 36 0
      database/migrations/2022_03_15_160510_create_failed_jobs_table.php
  57. 39 0
      database/migrations/2022_10_04_144444_create_job_batches_table.php
  58. 44 0
      database/migrations/2023_10_05_163612_create_visits_table.php
  59. 19 0
      database/seeders/DatabaseSeeder.php
  60. 116 0
      docker-compose.yml
  61. 20 0
      lang/ar/auth.php
  62. 19 0
      lang/ar/pagination.php
  63. 22 0
      lang/ar/passwords.php
  64. 207 0
      lang/ar/validation.php
  65. 20 0
      lang/bn/auth.php
  66. 19 0
      lang/bn/pagination.php
  67. 22 0
      lang/bn/passwords.php
  68. 207 0
      lang/bn/validation.php
  69. 20 0
      lang/ca/auth.php
  70. 19 0
      lang/ca/pagination.php
  71. 22 0
      lang/ca/passwords.php
  72. 207 0
      lang/ca/validation.php
  73. 20 0
      lang/de/auth.php
  74. 19 0
      lang/de/pagination.php
  75. 22 0
      lang/de/passwords.php
  76. 207 0
      lang/de/validation.php
  77. 20 0
      lang/en/auth.php
  78. 19 0
      lang/en/pagination.php
  79. 22 0
      lang/en/passwords.php
  80. 207 0
      lang/en/validation.php
  81. 20 0
      lang/es/auth.php
  82. 19 0
      lang/es/pagination.php
  83. 22 0
      lang/es/passwords.php
  84. 207 0
      lang/es/validation.php
  85. 20 0
      lang/fa/auth.php
  86. 19 0
      lang/fa/pagination.php
  87. 22 0
      lang/fa/passwords.php
  88. 207 0
      lang/fa/validation.php
  89. 20 0
      lang/fr/auth.php
  90. 19 0
      lang/fr/pagination.php
  91. 22 0
      lang/fr/passwords.php
  92. 207 0
      lang/fr/validation.php
  93. 20 0
      lang/he/auth.php
  94. 19 0
      lang/he/pagination.php
  95. 22 0
      lang/he/passwords.php
  96. 207 0
      lang/he/validation.php
  97. 20 0
      lang/hi_IN/auth.php
  98. 19 0
      lang/hi_IN/pagination.php
  99. 22 0
      lang/hi_IN/passwords.php
  100. 0 0
      lang/hi_IN/validation.php

+ 18 - 0
.editorconfig

@@ -0,0 +1,18 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[*.{yml,yaml}]
+indent_size = 2
+
+[docker-compose.yml]
+indent_size = 4

+ 80 - 0
.env.example

@@ -0,0 +1,80 @@
+APP_NAME=Bagisto
+APP_ENV=local
+APP_KEY=
+APP_DEBUG=true
+APP_DEBUG_ALLOWED_IPS=
+APP_URL=http://localhost
+APP_ADMIN_URL=admin
+APP_TIMEZONE=Asia/Kolkata
+
+APP_LOCALE=en
+APP_FALLBACK_LOCALE=en
+APP_FAKER_LOCALE=en_US
+
+APP_CURRENCY=USD
+
+APP_MAINTENANCE_DRIVER=file
+# APP_MAINTENANCE_STORE=database
+
+BCRYPT_ROUNDS=12
+
+LOG_CHANNEL=stack
+LOG_STACK=single
+LOG_DEPRECATIONS_CHANNEL=null
+LOG_LEVEL=debug
+
+DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=
+DB_USERNAME=
+DB_PASSWORD=
+DB_PREFIX=
+
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+SESSION_ENCRYPT=false
+SESSION_PATH=/
+SESSION_DOMAIN=null
+
+BROADCAST_CONNECTION=log
+FILESYSTEM_DISK=public
+QUEUE_CONNECTION=sync
+
+CACHE_STORE=file
+CACHE_PREFIX=
+
+MEMCACHED_HOST=127.0.0.1
+
+REDIS_CLIENT=phpredis
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+RESPONSE_CACHE_ENABLED=true
+
+MAIL_MAILER=smtp
+MAIL_HOST=smtp.mailtrap.io
+MAIL_PORT=2525
+MAIL_USERNAME=
+MAIL_PASSWORD=
+MAIL_ENCRYPTION=tls
+
+MAIL_FROM_ADDRESS=shop@example.com
+MAIL_FROM_NAME=Shop
+
+ADMIN_MAIL_ADDRESS=admin@example.com
+ADMIN_MAIL_NAME=Admin
+
+CONTACT_MAIL_ADDRESS=
+CONTACT_MAIL_NAME=
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+AWS_DEFAULT_REGION=us-east-1
+AWS_BUCKET=
+AWS_USE_PATH_STYLE_ENDPOINT=false
+
+VITE_APP_NAME="${APP_NAME}"
+VITE_HOST=localhost
+VITE_PORT=

+ 11 - 0
.gitattributes

@@ -0,0 +1,11 @@
+* text=auto eol=lf
+
+*.blade.php diff=html
+*.css diff=css
+*.html diff=html
+*.md diff=markdown
+*.php diff=php
+
+/.github export-ignore
+CHANGELOG.md export-ignore
+.styleci.yml export-ignore

+ 31 - 5
.gitignore

@@ -1,6 +1,32 @@
-# ---> Laravel
-/bootstrap/compiled.php
-.env.*.php
-.env.php
 .env
-
+.env.testing
+.idea
+.php_cs.cache
+.phpunit.result.cache
+.vscode
+.vagrant
+*.hot
+/stubs
+/data
+/docker-compose-collection
+Homestead.json
+Homestead.yaml
+/ignorables/*
+/node_modules
+npm-debug.log
+package-lock.json
+/playwright-report
+/public/css
+/public/js
+/public/hot
+/public/storage
+/public/vendor
+/lang/vendor
+/storage/*.key
+/storage/dcc-data/
+/test-results
+/vendor
+yarn.lock
+yarn-error.log
+/test-results
+/playwright-report

+ 76 - 0
CODE_OF_CONDUCT.md

@@ -0,0 +1,76 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, sex characteristics, gender identity and expression,
+level of experience, education, socio-economic status, nationality, personal
+appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+ advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at support@bagisto.com. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see
+https://www.contributor-covenant.org/faq

+ 62 - 0
CONTRIBUTING.md

@@ -0,0 +1,62 @@
+# Bagisto Contribution Guide
+
+**BUGS:**
+
+To encourage active collaboration, Bagisto encourages pull requests, not just bug reports. "Bug reports" may also be sent in the form of a pull request containing a negative test.
+
+However, when filing a bug report, your issue should contain a title and a clear description of the issue. You should also include as much relevant information as possible and a code sample that demonstrates the issue. The goal of a bug report is to make it easy for yourself - and others - to replicate the bug and develop a fix.
+
+Remember, bug reports are created in the hope that others with the same problem will collaborate with you on solving it. Creating a bug report serves to help yourself and others start on the path of fixing the problem.
+
+**Projects that you can contribute in:**
+
+1. Bagisto
+
+2. Bagisto docs
+
+3. Laravel-aliexpress-dropship
+
+4. Laravel-aliexpress-dropship-chrome-extension
+
+5. Bagisto-custom-style-extension
+
+**Core development ideas or discussion:**
+
+If you propose a new feature, please implement at least some of the code needed to complete the quality.
+
+Informal discussion regarding bugs, new features, and implementation of existing features occurs in the comments of the issues filed using feature template.
+
+**Which branch you should target?**
+
+All bug fixes should be sent to the latest staging branch, i.e. development branch. Bug fixes should never be sent to the master branch unless they fix features that exist only in the upcoming release.
+
+Minor features fully backwards compatible with the current Laravel release may be sent to the latest stable branch.
+
+Major new features should always be sent to the master branch, which contains the upcoming Bagisto release.
+
+**Compiling assets:**
+
+If you are submitting a change that will affect a compiled file, such as most of the files in admin/resources/assets/sass or admin/resources/assets/js of the Bagisto repository, do not commit the compiled files. Due to their large size, they cannot realistically be reviewed by a maintainer. This could be exploited as a way to inject malicious code into Bagisto. To defensively prevent this, all compiled files will be generated and committed by Bagisto maintainers.
+
+**Code style:**
+
+Bagisto follows PSR-2 for coding standards and PSR-4 as of Laravel for autoloading standards.
+
+**PHPDoc:**
+
+Below is an example of a valid Bagisto doc block. Note that the @param attribute is followed by two spaces, the argument type, two more spaces, and finally, the variable name:
+  ``` php
+    /**
+    * Register a service with CoreServiceProvider.
+    *
+    * @param  string|array  $loader
+    * @param  \Closure|string|null  $concrete
+    * @param  bool  $shared
+    * @return void
+    * @throws \Exception
+    */
+    protected function registerFacades($loader, $concrete = null, $shared = false)
+    {
+        //
+    }
+  ```

+ 20 - 0
LICENSE

@@ -0,0 +1,20 @@
+MIT License
+
+Copyright 2010-2025, Webkul Software
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 175 - 2
README.md

@@ -1,3 +1,176 @@
-# bagisto
+<p align="center">
+  <a href="http://www.bagisto.com">
+    <picture>
+      <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/bagisto/temp-media/0b0984778fae92633f57e625c5494ead1fe320c3/dark-logo-P5H7MBtx.svg">
+      <source media="(prefers-color-scheme: light)" srcset="https://bagisto.com/wp-content/themes/bagisto/images/logo.png">
+      <img src="https://bagisto.com/wp-content/themes/bagisto/images/logo.png" alt="Bagisto logo">
+    </picture>
+  </a>
+</p>
 
-bagisto2.3.11
+<p align="center">
+    <a href="https://packagist.org/packages/bagisto/bagisto"><img src="https://poser.pugx.org/bagisto/bagisto/d/total.svg" alt="Total Downloads"></a>
+    <a href="https://packagist.org/packages/bagisto/bagisto"><img src="https://poser.pugx.org/bagisto/bagisto/v/stable.svg" alt="Latest Stable Version"></a>
+    <a href="https://packagist.org/packages/bagisto/bagisto"><img src="https://poser.pugx.org/bagisto/bagisto/license.svg" alt="License"></a>
+    <a href="#backers"><img src="https://opencollective.com/bagisto/backers/badge.svg" alt="Backers on Open Collective"></a>
+    <a href="#sponsors"><img src="https://opencollective.com/bagisto/sponsors/badge.svg" alt="Sponsors on Open Collective"></a>
+    <a href="https://www.codetriage.com/bagisto/bagisto"><img src="https://www.codetriage.com/bagisto/bagisto/badges/users.svg" alt="Open Source Helpers"></a>
+</p>
+
+<p align="center">
+    <a href="https://twitter.com/intent/follow?screen_name=bagistoshop"><img src="https://img.shields.io/twitter/follow/bagistoshop?style=social"></a>
+    <a href="https://www.youtube.com/channel/UCbrfqnhyiDv-bb9QuZtonYQ"><img src="https://img.shields.io/youtube/channel/subscribers/UCbrfqnhyiDv-bb9QuZtonYQ?style=social"></a>
+</p>
+
+<p align="center">
+    ➡️ <a href="https://bagisto.com/en/">Website</a> | <a href="https://devdocs.bagisto.com/">Documentation</a> | <a href="https://devdocs.bagisto.com/2.3/introduction/installation.html#installation">Installation Guide</a> | <a href="https://devdocs.bagisto.com/2.3/introduction/docker.html">Docker Installation</a>  | <a href="https://forums.bagisto.com/">Forums</a> | <a href="https://www.facebook.com/groups/bagisto/">Community</a> ⬅️
+</p>
+
+
+<p align="center" style="display: inline;">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/ar.svg" alt="Arabic" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/de.svg" alt="German" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/us.svg" alt="English" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/es.svg" alt="Spanish" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/ir.svg" alt="Persian" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/it.svg" alt="Italian" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/nl.svg" alt="Dutch" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/pl.svg" alt="Polish" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/pt.svg" alt="Portuguese" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/tr.svg" alt="Turkish" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/eg.svg" alt="Egyptian" width="24" height="24">
+    <img class="flag-img" src="https://flagicons.lipis.dev/flags/4x3/cn.svg" alt="Chinese" width="24" height="24">
+</p>
+
+<a href="https://www.youtube.com/watch?v=OHbte7hdxYU">
+    <img class="flag-img" src="https://raw.githubusercontent.com/bagisto/temp-media/master/bagisto-featured.png" alt="Chinese" width="100%">
+</a>
+
+# Introduction
+
+Bagisto is an opensource [laravel eCommerce](https://www.bagisto.com/) framework built on some of the hottest technologies such as [Laravel](https://laravel.com/) (a [PHP](https://secure.php.net/) framework) and [Vue.js](https://vuejs.org/) a progressive Javascript framework.
+
+Bagisto can help you cut down your time, cost, and workforce for building online stores or migrating from physical stores to the ever-demanding online world. Your business—whether small or huge—can benefit. The best part, it's straightforward to set it up!
+
+![enter image description here](https://raw.githubusercontent.com/bagisto/temp-media/master/stats.webp)
+
+# Getting Started
+
+![enter image description here](https://raw.githubusercontent.com/bagisto/temp-media/master/geting-starded.png)
+
+[Install Bagisto](https://devdocs.bagisto.com/2.3/introduction/installation.html#install-using-gui-installer) with or without Composer (Check [Requirement Details](https://bagisto.com/en/download/))
+
+Follow the [Getting Started with Bagisto](https://www.youtube.com/watch?v=s_DhQrjK8Tw&list=PLe30vg_FG4OS3BU8rHUKQZ2mnX45xwSMc) Tutorial
+
+You can browse through the Free [Live Demo](https://demo.bagisto.com/)
+
+## ☁️ Cloud Installation via Amazon AMI
+
+You can also deploy Bagisto quickly using our pre-configured Amazon Machine Image (AMI) available on the AWS Marketplace:
+
+👉 [**Launch Bagisto on AWS**](https://aws.amazon.com/marketplace/pp/prodview-r3xv62axcqkpa)
+
+This AMI allows you to get started with Bagisto on a cloud environment without manual setup. Ideal for scalable production or testing environments.
+
+# Accelerate Your Online Store Launch with the Bagisto Starter Pack!
+
+Empower your e-commerce journey with the [Bagisto Starter Pack](https://store.webkul.com/bagisto-starter-pack.html), streamlining setup and integration for a seamless online store launch. Get ready to unlock success in the digital marketplace! 
+
+# Open Source B2B eCommerce Platform
+
+The [B2B eCommerce Platform](https://bagisto.com/en/b2b-commerce-platform/) enhances your Bagisto store with advanced Business-to-Business (B2B) features. It enables company-based purchasing, multi-user access, quote negotiation, and procurement management — empowering businesses to handle B2B workflows efficiently within a single platform.
+
+![Bagisto B2B Ecommerce Image](https://github.com/bagisto/temp-media/blob/master/intro-banner.webp)
+
+# Multi Vendor Marketplace
+
+[Multi Vendor Marketplace](https://bagisto.com/en/laravel-multi-vendor-marketplace/) transforms a standard store into a complete marketplace, allowing the admin to manage sellers, commissions, product approvals, and order handling, while giving vendors a dedicated dashboard to manage their catalog, orders, and transactions.
+
+![Multi Vendor Marketplace Image](https://github.com/bagisto/temp-media/blob/master/multi-vendor-marketplace.webp)
+
+# Multi Tenant eCommerce
+
+[Multi Tenant eCommerce](https://bagisto.com/en/laravel-multi-tenant-saas/) in Bagisto allows businesses to build a SaaS-based marketplace platform where multiple vendors or merchants can create and manage their own individual stores under a single system.
+
+![Multi Tenant eCommerce Image](https://github.com/bagisto/temp-media/blob/master/multi-tenant.webp)
+
+# POS 
+
+[Point of Sale](https://bagisto.com/en/laravel-pos/) system manages retail operations efficiently, handling inventory management and fast customer checkout for your store.
+
+![POS Image](https://github.com/bagisto/temp-media/blob/master/pos.webp)
+
+# Headless Commerce
+
+The power of headless laravel commerce now comes to Bagisto enabling you to experience seamless and easily scalable storefront performance. Backed by some of the hottest tech stacks, Bagisto commerce can now be used to build powerful headless commerce solutions offering blazing-fast speed and easy customization powered by Next.js
+
+## Next.js Commerce
+
+![enter image description here](https://raw.githubusercontent.com/bagisto/temp-media/master/next.png)
+
+Develop and deploy your next headless commerce storefronts with Next JS and Bagisto: [https://github.com/bagisto/nextjs-commerce](https://github.com/bagisto/nextjs-commerce)
+
+# Open Source Mobile eCommerce
+
+Revolutionize Your Online Store with Bagisto's Open Source eCommerce Mobile 
+
+![enter image description here](https://raw.githubusercontent.com/bagisto/temp-media/master/open-source-ecommerce-mobile.png)
+
+Mobile eCommerce powered by Flutter & Laravel: https://github.com/bagisto/opensource-ecommerce-mobile-app
+
+# AI Powered eCommerce
+
+You can integrate popular large language models like GPT-5, Gemini 3, Mistral, and LLaMA 4, Grok (xAI),GLM 4.6,Kimi-K2, Qwen 3, Deepseek etc to build [AI-powered eCommerce](https://bagisto.com/en/extensions/laravel-chatbot-using-openai-chatgpt-llm/) applications with Bagisto. Some of the popular use cases where you can make use of LLMs to build AI apps are chatbot, automated product descriptions, customer support, search, and recommendations.
+
+![enter image description here](https://raw.githubusercontent.com/bagisto/temp-media/master/ai_powered_ecommerce.png)
+
+You can incorporate LLM API with your bagisto applications to send and receive queries and ensure proper error handling and rate limiting to prevent overuse of the API
+
+# Decentralised eCommerce
+
+Build [decentralised applications](https://bagisto.com/en/services/blockchain-commerce/) with Bagisto on popular blockchains like Ethereum and Solana by integrating smart contracts with the eCommerce platform. You can have decentralised marketplaces, [NFT marketplaces](https://bagisto.com/en/nft-marketplace/), and decentralised e-signing with the laravel eCommerce system.
+
+![enter image description here](https://raw.githubusercontent.com/bagisto/temp-media/master/decentralised-ecommerce.png)
+
+# Commerce For Every Need
+
+![enter image description here](https://raw.githubusercontent.com/bagisto/temp-media/master/every-need.png)
+
+With Bagisto, you can easily create use cases for various commerce needs like Marketplaces, PWA, Native Mobile Apps, Multi-Tenants systems, Blockchain and many more.
+
+# Built In Extensions
+
+![enter image description here](https://raw.githubusercontent.com/bagisto/temp-media/master/built_in_extension.png)
+
+Make use of 100+ Bagisto pre-built extensions from [Bagisto Extension Markeptlace](https://bagisto.com/en/extensions/)
+
+# Community
+
+![enter image description here](https://raw.githubusercontent.com/bagisto/temp-media/master/community.png)
+
+Get Bagisto support on [Facebook Group](https://www.facebook.com/groups/bagisto) and [Forum](https://forums.bagisto.com/)
+Would like to help us build the most developer-friendly E-Commerce platform? Start by reading our [Contributing Guide](https://github.com/bagisto/bagisto/blob/master/.github/CONTRIBUTING.md)!
+
+# License
+Bagisto is a fully open-source Laravel eCommerce framework that will always remain free under the [MIT License](https://github.com/bagisto/bagisto/blob/2.3/LICENSE).
+
+# Security Vulnerabilities
+If you think that you have found a security issue in Bagisto, please do not use the issue tracker and do not post it publicly. Instead, all security issues must be sent to [mailto:support@bagisto.com](mailto:support@bagisto.com).
+
+# Contributors
+
+This project is on [Open Collective](https://opencollective.com/bagisto), and it exists thanks to the people who contribute.
+
+<a href="https://github.com/bagisto/bagisto/graphs/contributors"><img src="https://opencollective.com/bagisto/contributors.svg?width=890&button=false"/></a>
+
+# Backers
+
+Thank you to all our backers! 🙏
+
+<a href="https://opencollective.com/bagisto" target="_blank"><img src="https://opencollective.com/bagisto/backers.svg?width=890"></a>
+
+# Sponsors
+
+Support this project by becoming a sponsor. Your logo will show up here with a link to your website.
+
+<a href="https://opencollective.com/bagisto" target="_blank"><img src="https://opencollective.com/bagisto/sponsors.svg?width=890&isActive=true"></a>

+ 15 - 0
SECURITY.md

@@ -0,0 +1,15 @@
+# Reporting Security Issues
+
+Bagisto values the contributions of the security research community and appreciates your efforts to help keep Bagisto and its merchants secure.
+
+## Where should I report security issues?
+
+If you believe you have discovered a security vulnerability in Bagisto, **please do not** use the public issue tracker and **do not** disclose it publicly.
+
+Instead, you may report security issues through **either** of the following responsible disclosure channels:
+
+- **Email:** Send detailed information to **support@bagisto.com**
+
+Both channels ensure that security issues are reviewed promptly and handled responsibly before any public disclosure.
+
+We appreciate your cooperation in helping us maintain a secure ecosystem for all Bagisto users.

+ 284 - 0
UPGRADE.md

@@ -0,0 +1,284 @@
+# UPGRADE Guide
+
+- [Upgrading To v2.3 From v2.2](#upgrading-to-v23-from-v22)
+
+## High Impact Changes
+
+- [Updating Dependencies](#updating-dependencies)
+
+- [Application Structure](#application-structure)
+
+## Medium Impact Changes
+
+- [Environment Keys Changes](#environment-keys-changes)
+
+## Low Impact Changes
+
+- [Removed Publishable Stuffs](#removed-publishable-stuffs)
+
+- [Removal of Aliases and Singleton Facade Registry](#removal-of-aliases-and-singleton-facade-registry)
+
+- [Schedule Commands Moved To Package](#schedule-commands-moved-to-package)
+
+## Upgrading To v2.3 From v2.2
+
+> [!NOTE]
+> We strive to document every potential breaking change. However, as some of these alterations occur in lesser-known sections of Bagisto, only a fraction of them may impact your application.
+
+### Updating Dependencies
+
+**Impact Probability: High**
+
+#### PHP 8.2.0 Required
+
+We have upgraded to Laravel 11 and Laravel now requires PHP 8.2.0 or greater.
+
+#### Composer Dependencies
+
+We have handled most of the dependencies mentioned by Laravel, so there is no need for further action on your part. 
+
+#### NPM Depenencies
+
+We have upgraded the NPM dependencies to Vite 5 and the Laravel Vite Plugin to version 1.0. This update will not affect your work unless you are working directly on the package. In that case, you need to rename the file postcss.config.js to postcss.config.cjs. Below are the changes required in your package file:
+
+```diff
+- module.exports = {
+-  plugins: {
+-    tailwindcss: {},
+-    autoprefixer: {},
+-  },
+- }
+
++ module.exports = ({ env }) => ({
++     plugins: [require("tailwindcss")(), require("autoprefixer")()],
++ });
+```
+
+### Application Structure
+
+**Impact Probability: High**
+
+With Laravel 11, a new default application structure has been introduced, resulting in a leaner setup with fewer default files. This update reduces the number of service providers, middleware, and configuration files in the framework.
+
+Since Bagisto is built on top of Laravel, we have also updated Bagisto to Laravel 11 and adopted the same streamlined approach to maintain compatibility. For more detailed information, please refer to the [Laravel documentation](https://laravel.com/docs/11.x). 
+
+### Environment Keys Changes
+
+**Impact Probability: Medium**
+
+We have synchronized most of the new .env keys introduced in Laravel's latest release (version 11). Below, we have listed only the keys that have been newly added or had their names changed in this version.
+
+```diff
+- CACHE_DRIVER=file
++ CACHE_STORE=file
+
+- BROADCAST_DRIVER=log
++ BROADCAST_CONNECTION=log
+
+- QUEUE_DRIVER=sync
++ QUEUE_CONNECTION=database
+```
+
+Additionally, the following keys have been removed to prevent the `.env` file from becoming unnecessarily large. These keys are not required unless the related services are being used. In a fresh installation of Bagisto, these keys will not be present by default; you will need to add them manually if you plan to use the corresponding services.
+
+```diff
+- FIXER_API_KEY=
+- EXCHANGE_RATES_API_KEY=
+- EXCHANGE_RATES_API_ENDPOINT=
+
+- 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}"
+
+- FACEBOOK_CLIENT_ID=
+- FACEBOOK_CLIENT_SECRET=
+- FACEBOOK_CALLBACK_URL=https://yourhost.com/customer/social-login/facebook/callback
+
+- TWITTER_CLIENT_ID=
+- TWITTER_CLIENT_SECRET=
+- TWITTER_CALLBACK_URL=https://yourhost.com/customer/social-login/twitter/callback
+
+- GOOGLE_CLIENT_ID=
+- GOOGLE_CLIENT_SECRET=
+- GOOGLE_CALLBACK_URL=https://yourhost.com/customer/social-login/google/callback
+
+- LINKEDIN_CLIENT_ID=
+- LINKEDIN_CLIENT_SECRET=
+- LINKEDIN_CALLBACK_URL=https://yourhost.com/customer/social-login/linkedin-openid/callback
+
+- GITHUB_CLIENT_ID=
+- GITHUB_CLIENT_SECRET=
+- GITHUB_CALLBACK_URL=https://yourhost.com/customer/social-login/github/callback
+```
+
+### Removal of Aliases and Singleton Facade Registry
+
+**Impact Probability: Low**
+
+We have removed all aliases and the singleton facade registry. This change was made because facades are inherently singletons, making the additional registry unnecessary.
+
+#### Using Helper Methods Instead of Aliases
+
+We now strongly recommend using our helper methods instead of relying on aliases. This approach provides better IDE support, type hinting, and makes the code more explicit and easier to understand.
+
+Instead of:
+
+```diff
+- app('core')->getAllChannels()
+```
+
+Use:
+
+```diff
++ core()->getAllChannels(); // Recommended
+```
+
+OR
+
+```diff
++ use Webkul\Core\Facades\Core;
+
++ Core::getAllChannels();
+```
+
+> [!NOTE]
+> Did you noticed, in the newer version of Bagisto, we have replaced all alias references with full namespaces.
+
+This change applies to all our helper methods, not just `core()`. Always prefer the helper method if one is available.
+
+### Removed Publishable Stuffs
+
+**Impact Probability: Low**
+
+We have removed all the publishable registries from the service provider, and we are no longer publishing any files. Previously, configuration files were often published manually. However, with this update, most of the configuration files have been moved directly into the default config folder, simplifying the structure and eliminating the need for manual publishing.
+
+For instance, if you look at the **Core** package, there were previously four configuration files located in the `Config` folder of the package:
+
+```diff
+- packages/Webkul/Core/src/Config/*.php
+```
+
+These configuration files have now been moved to the root `config` folder:
+
+```diff
++ config/*.php
+```
+
+This change consolidates the configuration files into a central location, following Laravel 11's convention and eliminating the need for separate publishable registries.
+
+### Schedule Commands Moved To Package
+
+**Impact Probability: Low**
+
+All scheduled commands previously registered in the Kernel have now been moved to their respective packages. Since each command belongs to a specific package, it is more appropriate for the package itself to handle its own commands. Therefore, each individual package is now responsible for registering its respective commands.
+
+```diff
+- $schedule->command('invoice:cron')->dailyAt('3:00');
+- $schedule->command('indexer:index --type=price')->dailyAt('00:01');
+- $schedule->command('product:price-rule:index')->dailyAt('00:01');
+
++ // Core Package
++ $schedule->command('invoice:cron')->dailyAt('3:00');
+
++ // Product Package
++ $schedule->command('indexer:index --type=price')->dailyAt('00:01');
+
++ // CatalogRule Package
++ $schedule->command('product:price-rule:index')->dailyAt('00:01');
+```
+
+### Packages
+
+Below are the specific changes we have implemented in each package:
+
+#### Core
+
+##### Unwanted Files Removed
+
+The following files have been removed as they are no longer needed:
+
+**Impact Probability: Low**
+
+- Configs
+
+```diff
+- src/Config/concord.php
+- src/Config/elasticsearch.php
+- src/Config/repository.php
+- src/Config/visitor.php
+```
+
+- Commands
+
+```diff
+- src/Console/Commands/BagistoPublish.php
+- src/Console/Commands/DownChannelCommand.php
+- src/Console/Commands/UpChannelCommand.php
+```
+
+These files have been deemed unnecessary in the current structure, streamlining the codebase and reducing clutter
+
+##### Exception Handler
+
+**Impact Probability: Low**
+
+n Bagisto, we have overridden the default Laravel 11 exception handler. Since the Laravel 11 application skeleton is now empty, we need to override the core Laravel exception handler instead of using the handler within the app directory.
+
+Additionally, the access modifiers for some of our methods have been updated.
+
+```diff
+- private function handleAuthenticationException(): void
++ protected function handleAuthenticationException(): void
+
+- private function handleHttpException(): void
++ protected function handleHttpException(): void
+
+- private function handleValidationException(): void
++ protected function handleValidationException(): void
+
+- private function handleServerException(): void
++ protected function handleServerException(): void
+```
+
+##### Maintenance Mode Middleware
+
+**Impact Probability: Low**
+
+The `CheckForMaintenanceMode` class has been removed, and a new class, `PreventRequestsDuringMaintenance`, has been introduced. In Laravel, `PreventRequestsDuringMaintenance` middleware is applied at the global level. However, in Bagisto, we have removed the middleware from the global scope and applied it at the route level.
+
+The reason for this change is that we need to display customized pages based on the current theme, and if the middleware is applied globally, the theme may not be accessible, resulting an error.
+
+```diff
+- CheckForMaintenanceMode.php
+
++ PreventRequestsDuringMaintenance.php
+```
+
+#### DataGrid
+
+##### The `Webkul\DataGrid\DataGrid` Class
+
+**Impact Probability: Medium**
+
+1. Moved the `DataGridExport` class to the DataGrid package and enhanced the new exporter class with the `WithQuery` interface instead of `WithView`. This change reduces the need for temporary file creation.
+
+2. We have removed the `exportFile` properties and all its associated method i.e. `setExportFile` and `getExportFile`,
+
+```diff
+- protected mixed $exportFile = null;
+- public function setExportFile($format = 'csv')
+- public function getExportFile()
+```
+
+3. We have removed two methods: `processPaginatedRequest` and `processExportRequest`.
+
+```diff
+- $this->processPaginatedRequest();
+- $this->processExportRequest();
+```
+
+4. Removed all the events from the setter methods to avoid duplicate dispatching.

+ 8 - 0
app/Http/Controllers/Controller.php

@@ -0,0 +1,8 @@
+<?php
+
+namespace App\Http\Controllers;
+
+abstract class Controller
+{
+    //
+}

+ 18 - 0
app/Http/Middleware/EncryptCookies.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
+
+class EncryptCookies extends Middleware
+{
+    /**
+     * The names of the cookies that should not be encrypted.
+     *
+     * @var array
+     */
+    protected $except = [
+        'sidebar_collapsed',
+        'dark_mode',
+    ];
+}

+ 42 - 0
app/Providers/AppServiceProvider.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Providers;
+
+use Barryvdh\Debugbar\Facades\Debugbar;
+use Illuminate\Support\Facades\Artisan;
+use Illuminate\Support\Facades\ParallelTesting;
+use Illuminate\Support\Facades\Request;
+use Illuminate\Support\ServiceProvider;
+
+class AppServiceProvider extends ServiceProvider
+{
+    /**
+     * Register any application services.
+     */
+    public function register(): void
+    {
+        $allowedIPs = array_map('trim', explode(',', config('app.debug_allowed_ips')));
+
+        $allowedIPs = array_filter($allowedIPs);
+
+        if (empty($allowedIPs)) {
+            return;
+        }
+
+        if (in_array(Request::ip(), $allowedIPs)) {
+            Debugbar::enable();
+        } else {
+            Debugbar::disable();
+        }
+    }
+
+    /**
+     * Bootstrap any application services.
+     */
+    public function boot(): void
+    {
+        ParallelTesting::setUpTestDatabase(function (string $database, int $token) {
+            Artisan::call('db:seed');
+        });
+    }
+}

+ 53 - 0
artisan

@@ -0,0 +1,53 @@
+#!/usr/bin/env php
+<?php
+
+define('LARAVEL_START', microtime(true));
+
+/*
+|--------------------------------------------------------------------------
+| Register The Auto Loader
+|--------------------------------------------------------------------------
+|
+| Composer provides a convenient, automatically generated class loader
+| for our application. We just need to utilize it! We'll require it
+| into the script here so that we do not have to worry about the
+| loading of any of our classes manually. It's great to relax.
+|
+*/
+
+require __DIR__.'/vendor/autoload.php';
+
+$app = require_once __DIR__.'/bootstrap/app.php';
+
+/*
+|--------------------------------------------------------------------------
+| Run The Artisan Application
+|--------------------------------------------------------------------------
+|
+| When we run the console application, the current CLI command will be
+| executed in this console and the response sent back to a terminal
+| or another output device for the developers. Here goes nothing!
+|
+*/
+
+$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
+
+$status = $kernel->handle(
+    $input = new Symfony\Component\Console\Input\ArgvInput,
+    new Symfony\Component\Console\Output\ConsoleOutput
+);
+
+/*
+|--------------------------------------------------------------------------
+| Shutdown The Application
+|--------------------------------------------------------------------------
+|
+| Once Artisan has finished running, we will fire off the shutdown events
+| 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);

+ 51 - 0
bootstrap/app.php

@@ -0,0 +1,51 @@
+<?php
+
+use App\Http\Middleware\EncryptCookies;
+use Illuminate\Console\Scheduling\Schedule;
+use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncryptCookies;
+use Illuminate\Foundation\Application;
+use Illuminate\Foundation\Configuration\Exceptions;
+use Illuminate\Foundation\Configuration\Middleware;
+use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
+use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance;
+use Webkul\Core\Http\Middleware\SecureHeaders;
+use Webkul\Installer\Http\Middleware\CanInstall;
+
+return Application::configure(basePath: dirname(__DIR__))
+    ->withRouting(
+        web: __DIR__.'/../routes/web.php',
+        commands: __DIR__.'/../routes/console.php',
+        health: '/up',
+    )
+    ->withMiddleware(function (Middleware $middleware) {
+        /**
+         * Remove the default Laravel middleware that prevents requests during maintenance mode. There are three
+         * middlewares in the shop that need to be loaded before this middleware. Therefore, we need to remove this
+         * middleware from the list and add the overridden middleware at the end of the list.
+         *
+         * As of now, this has been added in the Admin and Shop providers. I will look for a better approach in Laravel 11 for this.
+         */
+        $middleware->remove(PreventRequestsDuringMaintenance::class);
+
+        /**
+         * Remove the default Laravel middleware that converts empty strings to null. First, handle all nullable cases,
+         * then remove this line.
+         */
+        $middleware->remove(ConvertEmptyStringsToNull::class);
+
+        $middleware->append(SecureHeaders::class);
+        $middleware->append(CanInstall::class);
+
+        /**
+         * Add the overridden middleware at the end of the list.
+         */
+        $middleware->replaceInGroup('web', BaseEncryptCookies::class, EncryptCookies::class);
+
+        $middleware->trustProxies('*');
+    })
+    ->withSchedule(function (Schedule $schedule) {
+        //
+    })
+    ->withExceptions(function (Exceptions $exceptions) {
+        //
+    })->create();

+ 2 - 0
bootstrap/cache/.gitignore

@@ -0,0 +1,2 @@
+*
+!.gitignore

+ 46 - 0
bootstrap/providers.php

@@ -0,0 +1,46 @@
+<?php
+
+return [
+    /**
+     * Application service providers.
+     */
+    App\Providers\AppServiceProvider::class,
+
+    /**
+     * Webkul's service providers.
+     */
+    Webkul\Admin\Providers\AdminServiceProvider::class,
+    Webkul\Attribute\Providers\AttributeServiceProvider::class,
+    Webkul\BookingProduct\Providers\BookingProductServiceProvider::class,
+    Webkul\CMS\Providers\CMSServiceProvider::class,
+    Webkul\CartRule\Providers\CartRuleServiceProvider::class,
+    Webkul\CatalogRule\Providers\CatalogRuleServiceProvider::class,
+    Webkul\Category\Providers\CategoryServiceProvider::class,
+    Webkul\Checkout\Providers\CheckoutServiceProvider::class,
+    Webkul\Core\Providers\CoreServiceProvider::class,
+    Webkul\Core\Providers\EnvValidatorServiceProvider::class,
+    Webkul\Customer\Providers\CustomerServiceProvider::class,
+    Webkul\DataGrid\Providers\DataGridServiceProvider::class,
+    Webkul\DataTransfer\Providers\DataTransferServiceProvider::class,
+    Webkul\DebugBar\Providers\DebugBarServiceProvider::class,
+    Webkul\FPC\Providers\FPCServiceProvider::class,
+    Webkul\GDPR\Providers\GDPRServiceProvider::class,
+    Webkul\Installer\Providers\InstallerServiceProvider::class,
+    Webkul\Inventory\Providers\InventoryServiceProvider::class,
+    Webkul\MagicAI\Providers\MagicAIServiceProvider::class,
+    Webkul\Marketing\Providers\MarketingServiceProvider::class,
+    Webkul\Notification\Providers\NotificationServiceProvider::class,
+    Webkul\Payment\Providers\PaymentServiceProvider::class,
+    Webkul\Paypal\Providers\PaypalServiceProvider::class,
+    Webkul\Product\Providers\ProductServiceProvider::class,
+    Webkul\Rule\Providers\RuleServiceProvider::class,
+    Webkul\Sales\Providers\SalesServiceProvider::class,
+    Webkul\Shipping\Providers\ShippingServiceProvider::class,
+    Webkul\Shop\Providers\ShopServiceProvider::class,
+    Webkul\Sitemap\Providers\SitemapServiceProvider::class,
+    Webkul\SocialLogin\Providers\SocialLoginServiceProvider::class,
+    Webkul\SocialShare\Providers\SocialShareServiceProvider::class,
+    Webkul\Tax\Providers\TaxServiceProvider::class,
+    Webkul\Theme\Providers\ThemeServiceProvider::class,
+    Webkul\User\Providers\UserServiceProvider::class,
+];

+ 154 - 0
composer.json

@@ -0,0 +1,154 @@
+{
+    "name": "bagisto/bagisto",
+    "type": "project",
+    "description": "Bagisto Laravel E-Commerce",
+    "keywords": [
+        "framework",
+        "laravel"
+    ],
+    "license": "MIT",
+    "require": {
+        "php": "^8.2",
+        "ext-calendar": "*",
+        "ext-curl": "*",
+        "ext-intl": "*",
+        "ext-mbstring": "*",
+        "ext-openssl": "*",
+        "ext-pdo": "*",
+        "ext-pdo_mysql": "*",
+        "ext-tokenizer": "*",
+        "astrotomic/laravel-translatable": "^11.0.0",
+        "bagisto/image-cache": "dev-master",
+        "barryvdh/laravel-dompdf": "^2.0.0",
+        "diglactic/laravel-breadcrumbs": "^9.0",
+        "elasticsearch/elasticsearch": "^8.10",
+        "enshrined/svg-sanitize": "^0.22.0",
+        "guzzlehttp/guzzle": "^7.0.1",
+        "intervention/image": "^2.4",
+        "kalnoy/nestedset": "^6.0",
+        "khaled.alshamaa/ar-php": "^6.0.0",
+        "konekt/concord": "^1.2",
+        "laravel/framework": "^11.0",
+        "laravel/octane": "^2.3",
+        "laravel/sanctum": "^4.0",
+        "laravel/socialite": "^5.0",
+        "laravel/tinker": "^2.0",
+        "laravel/ui": "^4.0",
+        "maatwebsite/excel": "^3.1.46",
+        "mpdf/mpdf": "^8.2",
+        "nesbot/carbon": "^2.72.2",
+        "openai-php/laravel": "^0.10.1",
+        "paypal/paypal-checkout-sdk": "1.0.1",
+        "predis/predis": "^2.2",
+        "prettus/l5-repository": "^2.6",
+        "pusher/pusher-php-server": "^7.0",
+        "shetabit/visitor": "^4.1",
+        "spatie/laravel-responsecache": "^7.4",
+        "spatie/laravel-sitemap": "^7.3",
+        "stevebauman/purify": "^6.3"
+    },
+    "require-dev": {
+        "bagisto/laravel-datafaker": "2.3.*",
+        "barryvdh/laravel-debugbar": "^3.8",
+        "fakerphp/faker": "^1.23",
+        "laravel/pint": "^1.19",
+        "mockery/mockery": "^1.6",
+        "nunomaduro/collision": "^8.0",
+        "pestphp/pest": "^3.0",
+        "pestphp/pest-plugin-laravel": "^3.0",
+        "phpunit/phpunit": "^11.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "App\\": "app/",
+            "Database\\Factories\\": "database/factories/",
+            "Database\\Seeders\\": "database/seeders/",
+            "Webkul\\Admin\\": "packages/Webkul/Admin/src",
+            "Webkul\\Attribute\\": "packages/Webkul/Attribute/src",
+            "Webkul\\BookingProduct\\": "packages/Webkul/BookingProduct/src",
+            "Webkul\\CartRule\\": "packages/Webkul/CartRule/src",
+            "Webkul\\CatalogRule\\": "packages/Webkul/CatalogRule/src",
+            "Webkul\\Category\\": "packages/Webkul/Category/src",
+            "Webkul\\Checkout\\": "packages/Webkul/Checkout/src",
+            "Webkul\\CMS\\": "packages/Webkul/CMS/src",
+            "Webkul\\Core\\": "packages/Webkul/Core/src",
+            "Webkul\\Customer\\": "packages/Webkul/Customer/src",
+            "Webkul\\DataGrid\\": "packages/Webkul/DataGrid/src",
+            "Webkul\\DataTransfer\\": "packages/Webkul/DataTransfer/src",
+            "Webkul\\DebugBar\\": "packages/Webkul/DebugBar/src",
+            "Webkul\\FPC\\": "packages/Webkul/FPC/src",
+            "Webkul\\GDPR\\": "packages/Webkul/GDPR/src",
+            "Webkul\\Installer\\": "packages/Webkul/Installer/src",
+            "Webkul\\Inventory\\": "packages/Webkul/Inventory/src",
+            "Webkul\\MagicAI\\": "packages/Webkul/MagicAI/src",
+            "Webkul\\Marketing\\": "packages/Webkul/Marketing/src",
+            "Webkul\\Notification\\": "packages/Webkul/Notification/src",
+            "Webkul\\Paypal\\": "packages/Webkul/Paypal/src",
+            "Webkul\\Payment\\": "packages/Webkul/Payment/src",
+            "Webkul\\Product\\": "packages/Webkul/Product/src",
+            "Webkul\\Rule\\": "packages/Webkul/Rule/src",
+            "Webkul\\Sales\\": "packages/Webkul/Sales/src",
+            "Webkul\\Shipping\\": "packages/Webkul/Shipping/src",
+            "Webkul\\Shop\\": "packages/Webkul/Shop/src",
+            "Webkul\\Sitemap\\": "packages/Webkul/Sitemap/src",
+            "Webkul\\SocialLogin\\": "packages/Webkul/SocialLogin/src",
+            "Webkul\\SocialShare\\": "packages/Webkul/SocialShare/src",
+            "Webkul\\Tax\\": "packages/Webkul/Tax/src",
+            "Webkul\\Theme\\": "packages/Webkul/Theme/src",
+            "Webkul\\User\\": "packages/Webkul/User/src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Tests\\": "tests/",
+            "Webkul\\Admin\\Tests\\": "packages/Webkul/Admin/tests",
+            "Webkul\\Core\\Tests\\": "packages/Webkul/Core/tests",
+            "Webkul\\DataGrid\\Tests\\": "packages/Webkul/DataGrid/tests",
+            "Webkul\\Installer\\Tests\\": "packages/Webkul/Installer/tests",
+            "Webkul\\Shop\\Tests\\": "packages/Webkul/Shop/tests"
+        }
+    },
+    "scripts": {
+        "post-autoload-dump": [
+            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
+            "@php artisan package:discover --ansi"
+        ],
+        "post-create-project-cmd": [
+            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
+            "@php artisan key:generate --ansi"
+        ]
+    },
+    "extra": {
+        "laravel": {
+            "dont-discover": [
+                "intervention/image",
+                "laravel/socialite",
+                "shetabit/visitor"
+            ]
+        }
+    },
+    "repositories": [{
+        "type": "path",
+        "url": "packages/*/*",
+        "options": {
+            "symlink": true
+        }
+    }],
+    "config": {
+        "optimize-autoloader": true,
+        "preferred-install": "dist",
+        "sort-packages": true,
+        "allow-plugins": {
+            "pestphp/pest-plugin": true,
+            "php-http/discovery": true
+        }
+    },
+    "minimum-stability": "stable",
+    "prefer-stable": true,
+    "support": {
+        "issues": "https://github.com/bagisto/bagisto/issues",
+        "forum": "https://forums.bagisto.com",
+        "source": "https://github.com/bagisto/bagisto",
+        "docs": "https://devdocs.bagisto.com"
+    }
+}

Разлика између датотеке није приказан због своје велике величине
+ 14016 - 0
composer.lock


+ 7 - 0
config/.gitignore

@@ -0,0 +1,7 @@
+debugbar.php
+dompdf.php
+excel.php
+flare.php
+ignition.php
+scout.php
+tinker.php

+ 187 - 0
config/app.php

@@ -0,0 +1,187 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Application Name
+    |--------------------------------------------------------------------------
+    |
+    | This value is the name of your application. This value is used when the
+    | framework needs to place the application's name in a notification or
+    | any other location as required by the application or its packages.
+    |
+    */
+
+    'name' => env('APP_NAME', 'Bagisto'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Application Environment
+    |--------------------------------------------------------------------------
+    |
+    | This value determines the "environment" your application is currently
+    | running in. This may determine how you prefer to configure various
+    | services your application utilizes. Set this in your ".env" file.
+    |
+    */
+
+    'env' => env('APP_ENV', 'production'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Application Debug Mode
+    |--------------------------------------------------------------------------
+    |
+    | When your application is in debug mode, detailed error messages with
+    | stack traces will be shown on every error that occurs within your
+    | application. If disabled, a simple generic error page is shown.
+    |
+    */
+
+    'debug' => env('APP_DEBUG', false),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Debug Allowed IPs
+    |--------------------------------------------------------------------------
+    |
+    | This value is used to allow the debug mode only for the specified IPs.
+    | This is useful when you want to debug the application on the production
+    | server without enabling it for everyone.
+    */
+
+    'debug_allowed_ips' => env('APP_DEBUG_ALLOWED_IPS', null),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Application URL
+    |--------------------------------------------------------------------------
+    |
+    | This URL is used by the console to properly generate URLs when using
+    | the Artisan command line tool. You should set this to the root of
+    | your application so that it is used when running Artisan tasks.
+    |
+    */
+
+    'url' => env('APP_URL', 'http://localhost'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Application Admin URL
+    |--------------------------------------------------------------------------
+    |
+    | This URL suffix is used to define the admin url for example
+    | admin/ or backend/
+    |
+    */
+
+    'admin_url' => env('APP_ADMIN_URL', 'admin'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Application Timezone
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the default timezone for your application, which
+    | will be used by the PHP date and date-time functions. We have gone
+    | ahead and set this to a sensible default for you out of the box.
+    |
+    */
+
+    'timezone' => env('APP_TIMEZONE', 'Asia/Kolkata'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Application Locale Configuration
+    |--------------------------------------------------------------------------
+    |
+    | The application locale determines the default locale that will be used
+    | by the translation service provider. You are free to set this value
+    | to any of the locales which will be supported by the application.
+    |
+    */
+
+    'locale' => env('APP_LOCALE', 'en'),
+
+    'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
+
+    'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Country
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the default country by country code.
+    | Ensure it is uppercase and reflects the 'code' column of the
+    | countries table.
+    |
+    | for example: DE EN FR
+    | (use capital letters!)
+    */
+
+    'default_country' => null,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Base Currency Code
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the base currency code for your application.
+    |
+    */
+
+    'currency' => env('APP_CURRENCY', 'USD'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default channel Code
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the default channel code for your application.
+    |
+    */
+
+    'channel' => 'default',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Encryption Key
+    |--------------------------------------------------------------------------
+    |
+    | This key is used by the Illuminate encrypter service and should be set
+    | to a random, 32 character string, otherwise these encrypted strings
+    | will not be safe. Please do this before deploying an application!
+    |
+    */
+
+    'cipher' => 'AES-256-CBC',
+
+    'key' => env('APP_KEY'),
+
+    'previous_keys' => [
+        ...array_filter(
+            explode(',', env('APP_PREVIOUS_KEYS', ''))
+        ),
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Maintenance Mode Driver
+    |--------------------------------------------------------------------------
+    |
+    | These configuration options determine the driver used to determine and
+    | manage Laravel's "maintenance mode" status. The "cache" driver will
+    | allow maintenance mode to be controlled across multiple machines.
+    |
+    | Supported drivers: "file", "cache"
+    |
+    */
+
+    'maintenance' => [
+        'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
+        'store'  => env('APP_MAINTENANCE_STORE', 'database'),
+    ],
+
+];

+ 113 - 0
config/auth.php

@@ -0,0 +1,113 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Defaults
+    |--------------------------------------------------------------------------
+    |
+    | This option defines the default authentication "guard" and password
+    | reset "broker" for your application. You may change these values
+    | as required, but they're a perfect start for most applications.
+    |
+    */
+
+    'defaults' => [
+        'guard'     => 'customer',
+        'passwords' => 'customers',
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Guards
+    |--------------------------------------------------------------------------
+    |
+    | Next, you may define every authentication guard for your application.
+    | Of course, a great default configuration has been defined for you
+    | which utilizes session storage plus the Eloquent user provider.
+    |
+    | All authentication guards have a user provider, which defines how the
+    | users are actually retrieved out of your database or other storage
+    | system used by the application. Typically, Eloquent is utilized.
+    |
+    | Supported: "session"
+    |
+    */
+
+    'guards' => [
+        'customer' => [
+            'driver'   => 'session',
+            'provider' => 'customers',
+        ],
+
+        'admin' => [
+            'driver'   => 'session',
+            'provider' => 'admins',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | User Providers
+    |--------------------------------------------------------------------------
+    |
+    | All authentication guards have a user provider, which defines how the
+    | users are actually retrieved out of your database or other storage
+    | system used by the application. Typically, Eloquent is utilized.
+    |
+    | If you have multiple user tables or models you may configure multiple
+    | providers to represent the model / table. These providers may then
+    | be assigned to any extra authentication guards you have defined.
+    |
+    | Supported: "database", "eloquent"
+    |
+    */
+
+    'providers' => [
+        'customers' => [
+            'driver' => 'eloquent',
+            'model'  => Webkul\Customer\Models\Customer::class,
+        ],
+
+        'admins' => [
+            'driver' => 'eloquent',
+            'model'  => Webkul\User\Models\Admin::class,
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Resetting Passwords
+    |--------------------------------------------------------------------------
+    |
+    | These configuration options specify the behavior of Laravel's password
+    | reset functionality, including the table utilized for token storage
+    | and the user provider that is invoked to actually retrieve users.
+    |
+    | The expiry time is the number of minutes that each reset token will be
+    | considered valid. This security feature keeps tokens short-lived so
+    | they have less time to be guessed. You may change this as needed.
+    |
+    | The throttle setting is the number of seconds a user must wait before
+    | generating more password reset tokens. This prevents the user from
+    | quickly generating a very large amount of password reset tokens.
+    |
+    */
+
+    'passwords' => [
+        'customers' => [
+            'provider' => 'customers',
+            'table'    => 'customer_password_resets',
+            'expire'   => 60,
+            'throttle' => 60,
+        ],
+
+        'admins' => [
+            'provider' => 'admins',
+            'table'    => 'admin_password_resets',
+            'expire'   => 60,
+            'throttle' => 60,
+        ],
+    ],
+];

+ 32 - 0
config/bagisto-vite.php

@@ -0,0 +1,32 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Bagisto Vite Configuration
+    |--------------------------------------------------------------------------
+    |
+    | Please add your Vite registry here to seamlessly support the `bagisto_assets` function.
+    |
+    */
+
+    'viters' => [
+        'admin' => [
+            'hot_file'                 => 'admin-default-vite.hot',
+            'build_directory'          => 'themes/admin/default/build',
+            'package_assets_directory' => 'src/Resources/assets',
+        ],
+
+        'shop' => [
+            'hot_file'                 => 'shop-default-vite.hot',
+            'build_directory'          => 'themes/shop/default/build',
+            'package_assets_directory' => 'src/Resources/assets',
+        ],
+
+        'installer' => [
+            'hot_file'                 => 'installer-default-vite.hot',
+            'build_directory'          => 'themes/installer/default/build',
+            'package_assets_directory' => 'src/Resources/assets',
+        ],
+    ],
+];

+ 75 - 0
config/breadcrumbs.php

@@ -0,0 +1,75 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | View Name
+    |--------------------------------------------------------------------------
+    |
+    | Choose a view to display when Breadcrumbs::render() is called.
+    | Built in templates are:
+    |
+    | - 'breadcrumbs::bootstrap5'  - Bootstrap 5
+    | - 'breadcrumbs::bootstrap4'  - Bootstrap 4
+    | - 'breadcrumbs::bulma'       - Bulma
+    | - 'breadcrumbs::foundation6' - Foundation 6
+    | - 'breadcrumbs::json-ld'     - JSON-LD Structured Data
+    | - 'breadcrumbs::materialize' - Materialize
+    | - 'breadcrumbs::tailwind'    - Tailwind CSS
+    | - 'breadcrumbs::uikit'       - UIkit
+    |
+    | Or a custom view, e.g. '_partials/breadcrumbs'.
+    |
+    */
+
+    'view' => 'breadcrumbs::bootstrap5',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Breadcrumbs File(s)
+    |--------------------------------------------------------------------------
+    |
+    | The file(s) where breadcrumbs are defined. e.g.
+    |
+    | - base_path('routes/breadcrumbs.php')
+    | - glob(base_path('breadcrumbs/*.php'))
+    |
+    */
+
+    'files' => base_path('routes/breadcrumbs.php'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Exceptions
+    |--------------------------------------------------------------------------
+    |
+    | Determine when to throw an exception.
+    |
+    */
+
+    // When route-bound breadcrumbs are used but the current route doesn't have a name (UnnamedRouteException)
+    'unnamed-route-exception' => true,
+
+    // When route-bound breadcrumbs are used and the matching breadcrumb doesn't exist (InvalidBreadcrumbException)
+    'missing-route-bound-breadcrumb-exception' => true,
+
+    // When a named breadcrumb is used but doesn't exist (InvalidBreadcrumbException)
+    'invalid-named-breadcrumb-exception' => true,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Classes
+    |--------------------------------------------------------------------------
+    |
+    | Subclass the default classes for more advanced customisations.
+    |
+    */
+
+    // Manager
+    'manager-class' => Diglactic\Breadcrumbs\Manager::class,
+
+    // Generator
+    'generator-class' => Diglactic\Breadcrumbs\Generator::class,
+
+];

+ 57 - 0
config/broadcasting.php

@@ -0,0 +1,57 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Broadcaster
+    |--------------------------------------------------------------------------
+    |
+    | This option controls the default broadcaster that will be used by the
+    | framework when an event needs to be broadcast. You may set this to
+    | any of the connections defined in the "connections" array below.
+    |
+    | Supported: "pusher", "redis", "log", "null"
+    |
+    */
+
+    'default' => env('BROADCAST_DRIVER', 'null'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Broadcast Connections
+    |--------------------------------------------------------------------------
+    |
+    | Here you may define all of the broadcast connections that will be used
+    | to broadcast events to other systems or over websockets. Samples of
+    | each available type of connection are provided inside this array.
+    |
+    */
+
+    'connections' => [
+        'pusher' => [
+            'driver'  => 'pusher',
+            'key'     => env('PUSHER_APP_KEY'),
+            'secret'  => env('PUSHER_APP_SECRET'),
+            'app_id'  => env('PUSHER_APP_ID'),
+            'options' => [
+                'cluster'   => env('PUSHER_APP_CLUSTER'),
+                'encrypted' => true,
+            ],
+        ],
+
+        'redis' => [
+            'driver'     => 'redis',
+            'connection' => 'default',
+        ],
+
+        'log' => [
+            'driver' => 'log',
+        ],
+
+        'null' => [
+            'driver' => 'null',
+        ],
+    ],
+
+];

+ 108 - 0
config/cache.php

@@ -0,0 +1,108 @@
+<?php
+
+use Illuminate\Support\Str;
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Cache Store
+    |--------------------------------------------------------------------------
+    |
+    | This option controls the default cache store that will be used by the
+    | framework. This connection is utilized if another isn't explicitly
+    | specified when running a cache operation inside the application.
+    |
+    */
+
+    'default' => env('CACHE_STORE', 'file'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Cache Stores
+    |--------------------------------------------------------------------------
+    |
+    | Here you may define all of the cache "stores" for your application as
+    | well as their drivers. You may even define multiple stores for the
+    | same cache driver to group types of items stored in your caches.
+    |
+    | Supported drivers: "array", "database", "file", "memcached",
+    |                    "redis", "dynamodb", "octane", "null"
+    |
+    */
+
+    'stores' => [
+
+        'array' => [
+            'driver'    => 'array',
+            'serialize' => false,
+        ],
+
+        'database' => [
+            'driver'          => 'database',
+            'connection'      => env('DB_CACHE_CONNECTION'),
+            'table'           => env('DB_CACHE_TABLE', 'cache'),
+            'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
+            'lock_table'      => env('DB_CACHE_LOCK_TABLE'),
+        ],
+
+        'file' => [
+            'driver'    => 'file',
+            'path'      => storage_path('framework/cache/data'),
+            'lock_path' => storage_path('framework/cache/data'),
+        ],
+
+        'memcached' => [
+            'driver'        => 'memcached',
+            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
+            'sasl'          => [
+                env('MEMCACHED_USERNAME'),
+                env('MEMCACHED_PASSWORD'),
+            ],
+            'options' => [
+                // Memcached::OPT_CONNECT_TIMEOUT => 2000,
+            ],
+            'servers' => [
+                [
+                    'host'   => env('MEMCACHED_HOST', '127.0.0.1'),
+                    'port'   => env('MEMCACHED_PORT', 11211),
+                    'weight' => 100,
+                ],
+            ],
+        ],
+
+        'redis' => [
+            'driver'          => 'redis',
+            'connection'      => env('REDIS_CACHE_CONNECTION', 'cache'),
+            'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
+        ],
+
+        'dynamodb' => [
+            'driver'   => 'dynamodb',
+            'key'      => env('AWS_ACCESS_KEY_ID'),
+            'secret'   => env('AWS_SECRET_ACCESS_KEY'),
+            'region'   => env('AWS_DEFAULT_REGION', 'us-east-1'),
+            'table'    => env('DYNAMODB_CACHE_TABLE', 'cache'),
+            'endpoint' => env('DYNAMODB_ENDPOINT'),
+        ],
+
+        'octane' => [
+            'driver' => 'octane',
+        ],
+
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Cache Key Prefix
+    |--------------------------------------------------------------------------
+    |
+    | When utilizing the APC, database, memcached, Redis, and DynamoDB cache
+    | stores, there might be other applications using the same cache. For
+    | that reason, you may prefix every cache key to avoid collisions.
+    |
+    */
+
+    'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
+
+];

+ 47 - 0
config/concord.php

@@ -0,0 +1,47 @@
+<?php
+
+return [
+
+    /**
+     * The path of the convention file.
+     */
+    'convention' => Webkul\Core\CoreConvention::class,
+
+    /**
+     * Example:
+     *
+     * VendorA\ModuleX\Providers\ModuleServiceProvider::class,
+     * VendorB\ModuleY\Providers\ModuleServiceProvider::class,
+     */
+    'modules' => [
+        \Webkul\Admin\Providers\ModuleServiceProvider::class,
+        \Webkul\Attribute\Providers\ModuleServiceProvider::class,
+        \Webkul\BookingProduct\Providers\ModuleServiceProvider::class,
+        \Webkul\CMS\Providers\ModuleServiceProvider::class,
+        \Webkul\CartRule\Providers\ModuleServiceProvider::class,
+        \Webkul\CatalogRule\Providers\ModuleServiceProvider::class,
+        \Webkul\Category\Providers\ModuleServiceProvider::class,
+        \Webkul\Checkout\Providers\ModuleServiceProvider::class,
+        \Webkul\Core\Providers\ModuleServiceProvider::class,
+        \Webkul\Customer\Providers\ModuleServiceProvider::class,
+        \Webkul\DataGrid\Providers\ModuleServiceProvider::class,
+        \Webkul\DataTransfer\Providers\ModuleServiceProvider::class,
+        \Webkul\GDPR\Providers\ModuleServiceProvider::class,
+        \Webkul\Inventory\Providers\ModuleServiceProvider::class,
+        \Webkul\Marketing\Providers\ModuleServiceProvider::class,
+        \Webkul\Notification\Providers\ModuleServiceProvider::class,
+        \Webkul\Payment\Providers\ModuleServiceProvider::class,
+        \Webkul\Paypal\Providers\ModuleServiceProvider::class,
+        \Webkul\Product\Providers\ModuleServiceProvider::class,
+        \Webkul\Rule\Providers\ModuleServiceProvider::class,
+        \Webkul\Sales\Providers\ModuleServiceProvider::class,
+        \Webkul\Shipping\Providers\ModuleServiceProvider::class,
+        \Webkul\Shop\Providers\ModuleServiceProvider::class,
+        \Webkul\Sitemap\Providers\ModuleServiceProvider::class,
+        \Webkul\SocialLogin\Providers\ModuleServiceProvider::class,
+        \Webkul\Tax\Providers\ModuleServiceProvider::class,
+        \Webkul\Theme\Providers\ModuleServiceProvider::class,
+        \Webkul\User\Providers\ModuleServiceProvider::class,
+    ],
+
+];

+ 34 - 0
config/cors.php

@@ -0,0 +1,34 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Cross-Origin Resource Sharing (CORS) Configuration
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure your settings for cross-origin resource sharing
+    | or "CORS". This determines what cross-origin operations may execute
+    | in web browsers. You are free to adjust these settings as needed.
+    |
+    | To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
+    |
+    */
+
+    'paths' => ['api/*', 'sanctum/csrf-cookie'],
+
+    'allowed_methods' => ['*'],
+
+    'allowed_origins' => ['*'],
+
+    'allowed_origins_patterns' => [],
+
+    'allowed_headers' => ['*'],
+
+    'exposed_headers' => [],
+
+    'max_age' => 0,
+
+    'supports_credentials' => false,
+
+];

+ 182 - 0
config/database.php

@@ -0,0 +1,182 @@
+<?php
+
+use Illuminate\Support\Str;
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Database Connection Name
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify which of the database connections below you wish
+    | to use as your default connection for database operations. This is
+    | the connection which will be utilized unless another connection
+    | is explicitly specified when you execute a query / statement.
+    |
+    */
+
+    'default' => env('DB_CONNECTION', 'mysql'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Database Connections
+    |--------------------------------------------------------------------------
+    |
+    | Below are all of the database connections defined for your application.
+    | An example configuration is provided for each database system which
+    | is supported by Laravel. You're free to add / remove connections.
+    |
+    */
+
+    'connections' => [
+
+        'sqlite' => [
+            'driver'                  => 'sqlite',
+            'url'                     => env('DB_URL'),
+            'database'                => env('DB_DATABASE', database_path('database.sqlite')),
+            'prefix'                  => env('DB_PREFIX', ''),
+            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
+            'busy_timeout'            => null,
+            'journal_mode'            => null,
+            'synchronous'             => null,
+        ],
+
+        'mysql' => [
+            'driver'         => 'mysql',
+            'url'            => env('DB_URL'),
+            'host'           => env('DB_HOST', '127.0.0.1'),
+            'port'           => env('DB_PORT', '3306'),
+            'database'       => env('DB_DATABASE', 'laravel'),
+            'username'       => env('DB_USERNAME', 'root'),
+            'password'       => env('DB_PASSWORD', ''),
+            'unix_socket'    => env('DB_SOCKET', ''),
+            'charset'        => env('DB_CHARSET', 'utf8mb4'),
+            'collation'      => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
+            'prefix'         => env('DB_PREFIX', ''),
+            'prefix_indexes' => true,
+            'strict'         => false,
+            'engine'         => null,
+            'options'        => extension_loaded('pdo_mysql') ? array_filter([
+                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
+            ]) : [],
+        ],
+
+        'mariadb' => [
+            'driver'         => 'mariadb',
+            'url'            => env('DB_URL'),
+            'host'           => env('DB_HOST', '127.0.0.1'),
+            'port'           => env('DB_PORT', '3306'),
+            'database'       => env('DB_DATABASE', 'laravel'),
+            'username'       => env('DB_USERNAME', 'root'),
+            'password'       => env('DB_PASSWORD', ''),
+            'unix_socket'    => env('DB_SOCKET', ''),
+            'charset'        => env('DB_CHARSET', 'utf8mb4'),
+            'collation'      => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
+            'prefix'         => env('DB_PREFIX', ''),
+            'prefix_indexes' => true,
+            'strict'         => false,
+            'engine'         => null,
+            'options'        => extension_loaded('pdo_mysql') ? array_filter([
+                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
+            ]) : [],
+        ],
+
+        'pgsql' => [
+            'driver'         => 'pgsql',
+            'url'            => env('DB_URL'),
+            'host'           => env('DB_HOST', '127.0.0.1'),
+            'port'           => env('DB_PORT', '5432'),
+            'database'       => env('DB_DATABASE', 'laravel'),
+            'username'       => env('DB_USERNAME', 'root'),
+            'password'       => env('DB_PASSWORD', ''),
+            'charset'        => env('DB_CHARSET', 'utf8'),
+            'prefix'         => env('DB_PREFIX', ''),
+            'prefix_indexes' => true,
+            'search_path'    => 'public',
+            'sslmode'        => 'prefer',
+        ],
+
+        'sqlsrv' => [
+            'driver'         => 'sqlsrv',
+            'url'            => env('DB_URL'),
+            'host'           => env('DB_HOST', 'localhost'),
+            'port'           => env('DB_PORT', '1433'),
+            'database'       => env('DB_DATABASE', 'laravel'),
+            'username'       => env('DB_USERNAME', 'root'),
+            'password'       => env('DB_PASSWORD', ''),
+            'charset'        => env('DB_CHARSET', 'utf8'),
+            'prefix'         => env('DB_PREFIX', ''),
+            'prefix_indexes' => true,
+            // 'encrypt' => env('DB_ENCRYPT', 'yes'),
+            // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
+        ],
+
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Migration Repository Table
+    |--------------------------------------------------------------------------
+    |
+    | This table keeps track of all the migrations that have already run for
+    | your application. Using this information, we can determine which of
+    | the migrations on disk haven't actually been run on the database.
+    |
+    */
+
+    'migrations' => [
+        'table'                  => 'migrations',
+        'update_date_on_publish' => true,
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Redis Databases
+    |--------------------------------------------------------------------------
+    |
+    | Redis is an open source, fast, and advanced key-value store that also
+    | provides a richer body of commands than a typical key-value system
+    | such as Memcached. You may define your connection settings here.
+    |
+    */
+
+    'redis' => [
+
+        'client' => env('REDIS_CLIENT', 'phpredis'),
+
+        'options' => [
+            'cluster' => env('REDIS_CLUSTER', 'redis'),
+            'prefix'  => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
+        ],
+
+        'default' => [
+            'url'      => env('REDIS_URL'),
+            'host'     => env('REDIS_HOST', '127.0.0.1'),
+            'username' => env('REDIS_USERNAME'),
+            'password' => env('REDIS_PASSWORD'),
+            'port'     => env('REDIS_PORT', '6379'),
+            'database' => env('REDIS_DB', '0'),
+        ],
+
+        'cache' => [
+            'url'      => env('REDIS_URL'),
+            'host'     => env('REDIS_HOST', '127.0.0.1'),
+            'username' => env('REDIS_USERNAME'),
+            'password' => env('REDIS_PASSWORD'),
+            'port'     => env('REDIS_PORT', '6379'),
+            'database' => env('REDIS_CACHE_DB', '1'),
+        ],
+
+        'session' => [
+            'url'      => env('REDIS_URL'),
+            'host'     => env('REDIS_HOST', '127.0.0.1'),
+            'username' => env('REDIS_USERNAME'),
+            'password' => env('REDIS_PASSWORD', null),
+            'port'     => env('REDIS_PORT', 6379),
+            'database' => env('REDIS_SESSION_DATABASE', '2'),
+        ],
+
+    ],
+
+];

+ 74 - 0
config/elasticsearch.php

@@ -0,0 +1,74 @@
+<?php
+
+return [
+
+    /**
+     * Here you can specify the connection to use when building a client.
+     */
+    'connection' => 'default',
+
+    /**
+     * These are the available connections parameters that you can use to connect
+     */
+    'connections' => [
+        'default' => [
+            'hosts' => [
+                env('ELASTICSEARCH_HOST', 'http://localhost:9200'),
+            ],
+
+            'user'   => env('ELASTICSEARCH_USER', null),
+            'pass'   => env('ELASTICSEARCH_PASS', null),
+        ],
+
+        /**
+         * You can connect with API key authentication by setting the `api` key
+         * instead of the `user` and `pass` keys.
+         */
+        'api' => [
+            'hosts' => [
+                env('ELASTICSEARCH_HOST', null),
+            ],
+
+            'key'   => env('ELASTICSEARCH_API_KEY', null),
+        ],
+
+        /**
+         * You can connect to Elastic Cloud with the Cloud ID using the `cloud` key.
+         */
+        'cloud' => [
+            'id'      => env('ELASTICSEARCH_CLOUD_ID', null),
+
+            /**
+             * If you are authenticating with API KEY then set user and pass as null
+             */
+            'api_key' => env('ELASTICSEARCH_API_KEY', null),
+
+            /**
+             * If you are authenticating with username and password then set api_key as null
+             */
+            'user'    => env('ELASTICSEARCH_USER', null),
+            'pass'    => env('ELASTICSEARCH_PASS', null),
+        ],
+    ],
+
+    /**
+     * CA Bundle
+     *
+     * If you have the http_ca.crt certificate copied during the start of Elasticsearch
+     * then the path here
+     *
+     * @see https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/connecting.html#auth-http
+     */
+    'caBundle' => null,
+
+    /**
+     * Retries
+     *
+     * By default, the client will retry n times, where n = number of nodes in
+     * your cluster. If you would like to disable retries, or change the number,
+     * you can do so here.
+     *
+     * @see https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/set-retries.html
+     */
+    'retries' => null,
+];

+ 84 - 0
config/filesystems.php

@@ -0,0 +1,84 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Filesystem Disk
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the default filesystem disk that should be used
+    | by the framework. The "local" disk, as well as a variety of cloud
+    | based disks are available to your application for file storage.
+    |
+    */
+
+    'default' => env('FILESYSTEM_DISK', 'public'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Filesystem Disks
+    |--------------------------------------------------------------------------
+    |
+    | Below you may configure as many filesystem disks as necessary, and you
+    | may even configure multiple disks for the same driver. Examples for
+    | most supported storage drivers are configured here for reference.
+    |
+    | Supported drivers: "local", "ftp", "sftp", "s3"
+    |
+    */
+
+    'disks' => [
+
+        'local' => [
+            'driver' => 'local',
+            'root'   => storage_path('app'),
+            'serve'  => true,
+            'throw'  => false,
+        ],
+
+        'private' => [
+            'driver' => 'local',
+            'root'   => storage_path('app/private'),
+            'serve'  => true,
+            'throw'  => false,
+        ],
+
+        'public' => [
+            'driver'     => 'local',
+            'root'       => storage_path('app/public'),
+            'url'        => env('APP_URL').'/storage',
+            'visibility' => 'public',
+            'throw'      => false,
+        ],
+
+        's3' => [
+            'driver'                  => 's3',
+            'key'                     => env('AWS_ACCESS_KEY_ID'),
+            'secret'                  => env('AWS_SECRET_ACCESS_KEY'),
+            'region'                  => env('AWS_DEFAULT_REGION'),
+            'bucket'                  => env('AWS_BUCKET'),
+            'url'                     => env('AWS_URL'),
+            'endpoint'                => env('AWS_ENDPOINT'),
+            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
+            'throw'                   => false,
+        ],
+
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Symbolic Links
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure the symbolic links that will be created when the
+    | `storage:link` Artisan command is executed. The array keys should be
+    | the locations of the links and the values should be their targets.
+    |
+    */
+
+    'links' => [
+        public_path('storage') => storage_path('app/public'),
+    ],
+
+];

+ 52 - 0
config/hashing.php

@@ -0,0 +1,52 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Hash Driver
+    |--------------------------------------------------------------------------
+    |
+    | This option controls the default hash driver that will be used to hash
+    | passwords for your application. By default, the bcrypt algorithm is
+    | used; however, you remain free to modify this option if you wish.
+    |
+    | Supported: "bcrypt", "argon"
+    |
+    */
+
+    'driver' => 'bcrypt',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Bcrypt Options
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the configuration options that should be used when
+    | passwords are hashed using the Bcrypt algorithm. This will allow you
+    | to control the amount of time it takes to hash the given password.
+    |
+    */
+
+    'bcrypt' => [
+        'rounds' => env('BCRYPT_ROUNDS', 10),
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Argon Options
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the configuration options that should be used when
+    | passwords are hashed using the Argon algorithm. These will allow you
+    | to control the amount of time it takes to hash the given password.
+    |
+    */
+
+    'argon' => [
+        'memory'  => 1024,
+        'threads' => 2,
+        'time'    => 2,
+    ],
+
+];

+ 20 - 0
config/image.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Image Driver
+    |--------------------------------------------------------------------------
+    |
+    | Intervention Image supports "GD Library" and "Imagick" to process images
+    | internally. You may choose one of them according to your PHP
+    | configuration. By default PHP's "GD Library" implementation is used.
+    |
+    | Supported: "gd", "imagick"
+    |
+    */
+
+    'driver' => 'gd',
+
+];

+ 69 - 0
config/imagecache.php

@@ -0,0 +1,69 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Name of route
+    |--------------------------------------------------------------------------
+    |
+    | Enter the routes name to enable dynamic imagecache manipulation.
+    | This handle will define the first part of the URI:
+    |
+    | {route}/{template}/{filename}
+    |
+    | Examples: "images", "img/cache"
+    |
+     */
+
+    'route' => 'cache',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Storage paths
+    |--------------------------------------------------------------------------
+    |
+    | The following paths will be searched for the image filename, submited
+    | by URI.
+    |
+    | Define as many directories as you like.
+    |
+     */
+
+    'paths' => [
+        storage_path('app/public'),
+        public_path('storage'),
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | 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' => [
+        'small'  => 'Webkul\Shop\CacheFilters\Small',
+        'medium' => 'Webkul\Shop\CacheFilters\Medium',
+        'large'  => 'Webkul\Shop\CacheFilters\Large',
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Image Cache Lifetime
+    |--------------------------------------------------------------------------
+    |
+    | Lifetime in minutes of the images handled by the imagecache route.
+    |
+     */
+
+    'lifetime' => 525600,
+];

+ 132 - 0
config/logging.php

@@ -0,0 +1,132 @@
+<?php
+
+use Monolog\Handler\NullHandler;
+use Monolog\Handler\StreamHandler;
+use Monolog\Handler\SyslogUdpHandler;
+use Monolog\Processor\PsrLogMessageProcessor;
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Log Channel
+    |--------------------------------------------------------------------------
+    |
+    | This option defines the default log channel that is utilized to write
+    | messages to your logs. The value provided here should match one of
+    | the channels present in the list of "channels" configured below.
+    |
+    */
+
+    'default' => env('LOG_CHANNEL', 'stack'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Deprecations Log Channel
+    |--------------------------------------------------------------------------
+    |
+    | This option controls the log channel that should be used to log warnings
+    | regarding deprecated PHP and library features. This allows you to get
+    | your application ready for upcoming major versions of dependencies.
+    |
+    */
+
+    'deprecations' => [
+        'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
+        'trace'   => env('LOG_DEPRECATIONS_TRACE', false),
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Log Channels
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure the log channels for your application. Laravel
+    | utilizes the Monolog PHP logging library, which includes a variety
+    | of powerful log handlers and formatters that you're free to use.
+    |
+    | Available drivers: "single", "daily", "slack", "syslog",
+    |                    "errorlog", "monolog", "custom", "stack"
+    |
+    */
+
+    'channels' => [
+
+        'stack' => [
+            'driver'            => 'stack',
+            'channels'          => explode(',', env('LOG_STACK', 'single')),
+            'ignore_exceptions' => false,
+        ],
+
+        'single' => [
+            'driver'               => 'single',
+            'path'                 => storage_path('logs/laravel.log'),
+            'level'                => env('LOG_LEVEL', 'debug'),
+            'replace_placeholders' => true,
+        ],
+
+        'daily' => [
+            'driver'               => 'daily',
+            'path'                 => storage_path('logs/laravel.log'),
+            'level'                => env('LOG_LEVEL', 'debug'),
+            'days'                 => env('LOG_DAILY_DAYS', 14),
+            'replace_placeholders' => true,
+        ],
+
+        'slack' => [
+            'driver'               => 'slack',
+            'url'                  => env('LOG_SLACK_WEBHOOK_URL'),
+            'username'             => env('LOG_SLACK_USERNAME', 'Laravel Log'),
+            'emoji'                => env('LOG_SLACK_EMOJI', ':boom:'),
+            'level'                => env('LOG_LEVEL', 'critical'),
+            'replace_placeholders' => true,
+        ],
+
+        'papertrail' => [
+            'driver'       => 'monolog',
+            'level'        => env('LOG_LEVEL', 'debug'),
+            'handler'      => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
+            'handler_with' => [
+                'host'             => env('PAPERTRAIL_URL'),
+                'port'             => env('PAPERTRAIL_PORT'),
+                'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
+            ],
+            'processors' => [PsrLogMessageProcessor::class],
+        ],
+
+        'stderr' => [
+            'driver'    => 'monolog',
+            'level'     => env('LOG_LEVEL', 'debug'),
+            'handler'   => StreamHandler::class,
+            'formatter' => env('LOG_STDERR_FORMATTER'),
+            'with'      => [
+                'stream' => 'php://stderr',
+            ],
+            'processors' => [PsrLogMessageProcessor::class],
+        ],
+
+        'syslog' => [
+            'driver'               => 'syslog',
+            'level'                => env('LOG_LEVEL', 'debug'),
+            'facility'             => env('LOG_SYSLOG_FACILITY', LOG_USER),
+            'replace_placeholders' => true,
+        ],
+
+        'errorlog' => [
+            'driver'               => 'errorlog',
+            'level'                => env('LOG_LEVEL', 'debug'),
+            'replace_placeholders' => true,
+        ],
+
+        'null' => [
+            'driver'  => 'monolog',
+            'handler' => NullHandler::class,
+        ],
+
+        'emergency' => [
+            'path' => storage_path('logs/laravel.log'),
+        ],
+
+    ],
+
+];

+ 150 - 0
config/mail.php

@@ -0,0 +1,150 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Mailer
+    |--------------------------------------------------------------------------
+    |
+    | This option controls the default mailer that is used to send all email
+    | messages unless another mailer is explicitly specified when sending
+    | the message. All additional mailers can be configured within the
+    | "mailers" array. Examples of each type of mailer are provided.
+    |
+    */
+
+    'default' => env('MAIL_MAILER', 'smtp'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Mailer Configurations
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure all of the mailers used by your application plus
+    | their respective settings. Several examples have been configured for
+    | you and you are free to add your own as your application requires.
+    |
+    | Laravel supports a variety of mail "transport" drivers that can be used
+    | when delivering an email. You may specify which one you're using for
+    | your mailers below. You may also add additional mailers if needed.
+    |
+    | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
+    |            "postmark", "resend", "log", "array",
+    |            "failover", "roundrobin"
+    |
+    */
+
+    'mailers' => [
+
+        'smtp' => [
+            'transport'    => 'smtp',
+            'url'          => env('MAIL_URL'),
+            'host'         => env('MAIL_HOST', '127.0.0.1'),
+            'port'         => env('MAIL_PORT', 2525),
+            'encryption'   => env('MAIL_ENCRYPTION', 'tls'),
+            'username'     => env('MAIL_USERNAME'),
+            'password'     => env('MAIL_PASSWORD'),
+            'timeout'      => null,
+            'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
+        ],
+
+        'ses' => [
+            'transport' => 'ses',
+        ],
+
+        'postmark' => [
+            'transport' => 'postmark',
+
+            // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
+
+            // 'client' => [
+            //     'timeout' => 5,
+            // ],
+        ],
+
+        'resend' => [
+            'transport' => 'resend',
+        ],
+
+        'sendmail' => [
+            'transport' => 'sendmail',
+            'path'      => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
+        ],
+
+        'log' => [
+            'transport' => 'log',
+            'channel'   => env('MAIL_LOG_CHANNEL'),
+        ],
+
+        'array' => [
+            'transport' => 'array',
+        ],
+
+        'failover' => [
+            'transport' => 'failover',
+
+            'mailers' => [
+                'smtp',
+                'log',
+            ],
+        ],
+
+        'roundrobin' => [
+            'transport' => 'roundrobin',
+
+            'mailers' => [
+                'ses',
+                'postmark',
+            ],
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Global "From" Address
+    |--------------------------------------------------------------------------
+    |
+    | You may wish for all emails sent by your application to be sent from
+    | the same address. Here you may specify a name and address that is
+    | used globally for all emails that are sent by your application.
+    |
+    */
+
+    'from' => [
+        'address' => env('MAIL_FROM_ADDRESS'),
+        'name'    => env('MAIL_FROM_NAME'),
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Global "Admin" Address
+    |--------------------------------------------------------------------------
+    |
+    | General admin related admins, such as order notifications.
+    |
+    */
+
+    'admin' => [
+        'address' => env('ADMIN_MAIL_ADDRESS'),
+        'name'    => env('ADMIN_MAIL_NAME', 'Admin'),
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Global "Contact" Address
+    |--------------------------------------------------------------------------
+    |
+    | General contact address used in the footer of the email templates.
+
+    | Here, you may specify a name and address that is used globally for
+    | all e-mails that are sent by your application.
+    |
+    */
+
+    'contact' => [
+        'address' => env('CONTACT_MAIL_ADDRESS'),
+        'name'    => env('CONTACT_MAIL_NAME', 'Contact'),
+    ],
+
+];

+ 28 - 0
config/openai.php

@@ -0,0 +1,28 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | OpenAI API Key and Organization
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify your OpenAI API Key and organization. This will be
+    | used to authenticate with the OpenAI API - you can find your API key
+    | and organization on your OpenAI dashboard, at https://openai.com.
+    */
+
+    'api_key'      => env('OPENAI_API_KEY'),
+    'organization' => env('OPENAI_ORGANIZATION'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Request Timeout
+    |--------------------------------------------------------------------------
+    |
+    | The timeout may be used to specify the maximum number of seconds to wait
+    | for a response. By default, the client will time out after 30 seconds.
+    */
+
+    'request_timeout' => env('OPENAI_REQUEST_TIMEOUT', 30),
+];

+ 14 - 0
config/products.php

@@ -0,0 +1,14 @@
+<?php
+
+return [
+    /**
+     * Skip attribute during product copy.
+     *
+     * Supported Relations: ['categories', 'inventories', 'customer_group_prices', 'images', 'videos', 'product_relations']
+     *
+     * Support Attributes: All Attributes (Example: 'sku', 'product_number', etc)
+     */
+    'copy' => [
+        'skip_attributes' => [],
+    ],
+];

+ 114 - 0
config/purify.php

@@ -0,0 +1,114 @@
+<?php
+
+use Webkul\Core\Purifier\Definitions\ExtendedHtml5Definition;
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Config
+    |--------------------------------------------------------------------------
+    |
+    | This option defines the default config that is provided to HTMLPurifier.
+    |
+    */
+
+    'default' => 'default',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Config sets
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure various sets of configuration for differentiated use of HTMLPurifier.
+    | A specific set of configuration can be applied by calling the "config($name)" method on
+    | a Purify instance. Feel free to add/remove/customize these attributes as you wish.
+    |
+    | Documentation: http://htmlpurifier.org/live/configdoc/plain.html
+    |
+    |   Core.Encoding               The encoding to convert input to.
+    |   HTML.Doctype                Doctype to use during filtering.
+    |   HTML.Allowed                The allowed HTML Elements with their allowed attributes.
+    |   HTML.ForbiddenElements      The forbidden HTML elements. Elements that are listed in this
+    |                               string will be removed, however their content will remain.
+    |   CSS.AllowedProperties       The Allowed CSS properties.
+    |   AutoFormat.AutoParagraph    Newlines are converted in to paragraphs whenever possible.
+    |   AutoFormat.RemoveEmpty      Remove empty elements that contribute no semantic information to the document.
+    |
+    */
+
+    'configs' => [
+
+        'default' => [
+            'Core.Encoding'            => 'utf-8',
+            'HTML.Doctype'             => 'HTML 4.01 Transitional',
+            'HTML.Allowed'             => 'h1,h2,h3,h4,h5,h6,b,u,strong,i,em,s,del,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src],blockquote',
+            'HTML.ForbiddenElements'   => '',
+            'CSS.AllowedProperties'    => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align',
+            'AutoFormat.AutoParagraph' => false,
+            'AutoFormat.RemoveEmpty'   => false,
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | HTMLPurifier definitions
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify a class that augments the HTML definitions used by
+    | HTMLPurifier. Additional HTML5 definitions are provided out of the box.
+    | When specifying a custom class, make sure it implements the interface:
+    |
+    |   \Stevebauman\Purify\Definitions\Definition
+    |
+    | Note that these definitions are applied to every Purifier instance.
+    |
+    | Documentation: http://htmlpurifier.org/docs/enduser-customize.html
+    |
+    */
+
+    'definitions' => ExtendedHtml5Definition::class,
+
+    /*
+    |--------------------------------------------------------------------------
+    | HTMLPurifier CSS definitions
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify a class that augments the CSS definitions used by
+    | HTMLPurifier. When specifying a custom class, make sure it implements
+    | the interface:
+    |
+    |   \Stevebauman\Purify\Definitions\CssDefinition
+    |
+    | Note that these definitions are applied to every Purifier instance.
+    |
+    | CSS should be extending $definition->info['css-attribute'] = values
+    | See HTMLPurifier_CSSDefinition for further explanation
+    |
+    */
+
+    'css-definitions' => null,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Serializer
+    |--------------------------------------------------------------------------
+    |
+    | The storage implementation where HTMLPurifier can store its serializer files.
+    | If the filesystem cache is in use, the path must be writable through the
+    | storage disk by the web server, otherwise an exception will be thrown.
+    |
+    */
+
+    'serializer' => [
+        'driver' => env('CACHE_STORE', env('CACHE_DRIVER', 'file')),
+        'cache'  => \Stevebauman\Purify\Cache\CacheDefinitionCache::class,
+    ],
+
+    // 'serializer' => [
+    //    'disk' => env('FILESYSTEM_DISK', 'local'),
+    //    'path' => 'purify',
+    //    'cache' => \Stevebauman\Purify\Cache\FilesystemDefinitionCache::class,
+    // ],
+
+];

+ 112 - 0
config/queue.php

@@ -0,0 +1,112 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Queue Connection Name
+    |--------------------------------------------------------------------------
+    |
+    | Laravel's queue supports a variety of backends via a single, unified
+    | API, giving you convenient access to each backend using identical
+    | syntax for each. The default queue connection is defined below.
+    |
+    */
+
+    'default' => env('QUEUE_CONNECTION', 'database'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Queue Connections
+    |--------------------------------------------------------------------------
+    |
+    | Here you may configure the connection options for every queue backend
+    | used by your application. An example configuration is provided for
+    | each backend supported by Laravel. You're also free to add more.
+    |
+    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
+    |
+    */
+
+    'connections' => [
+
+        'sync' => [
+            'driver' => 'sync',
+        ],
+
+        'database' => [
+            'driver'       => 'database',
+            'connection'   => env('DB_QUEUE_CONNECTION'),
+            'table'        => env('DB_QUEUE_TABLE', 'jobs'),
+            'queue'        => env('DB_QUEUE', 'default'),
+            'retry_after'  => (int) env('DB_QUEUE_RETRY_AFTER', 90),
+            'after_commit' => false,
+        ],
+
+        'beanstalkd' => [
+            'driver'       => 'beanstalkd',
+            'host'         => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
+            'queue'        => env('BEANSTALKD_QUEUE', 'default'),
+            'retry_after'  => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
+            'block_for'    => 0,
+            'after_commit' => false,
+        ],
+
+        'sqs' => [
+            'driver'       => 'sqs',
+            'key'          => env('AWS_ACCESS_KEY_ID'),
+            'secret'       => env('AWS_SECRET_ACCESS_KEY'),
+            'prefix'       => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
+            'queue'        => env('SQS_QUEUE', 'default'),
+            'suffix'       => env('SQS_SUFFIX'),
+            'region'       => env('AWS_DEFAULT_REGION', 'us-east-1'),
+            'after_commit' => false,
+        ],
+
+        'redis' => [
+            'driver'       => 'redis',
+            'connection'   => env('REDIS_QUEUE_CONNECTION', 'default'),
+            'queue'        => env('REDIS_QUEUE', 'default'),
+            'retry_after'  => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
+            'block_for'    => null,
+            'after_commit' => false,
+        ],
+
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Job Batching
+    |--------------------------------------------------------------------------
+    |
+    | The following options configure the database and table that store job
+    | batching information. These options can be updated to any database
+    | connection and table which has been defined by your application.
+    |
+    */
+
+    'batching' => [
+        'database' => env('DB_CONNECTION', 'mysql'),
+        'table'    => 'job_batches',
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Failed Queue Jobs
+    |--------------------------------------------------------------------------
+    |
+    | These options configure the behavior of failed queue job logging so you
+    | can control how and where failed jobs are stored. Laravel ships with
+    | support for storing failed jobs in a simple file or in a database.
+    |
+    | Supported drivers: "database-uuids", "dynamodb", "file", "null"
+    |
+    */
+
+    'failed' => [
+        'driver'   => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
+        'database' => env('DB_CONNECTION', 'mysql'),
+        'table'    => 'failed_jobs',
+    ],
+
+];

+ 291 - 0
config/repository.php

@@ -0,0 +1,291 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Prettus Repository Config
+|--------------------------------------------------------------------------
+|
+|
+*/
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Repository Pagination Limit Default
+    |--------------------------------------------------------------------------
+    |
+    */
+    'pagination' => [
+        'limit' => 15,
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Fractal Presenter Config
+    |--------------------------------------------------------------------------
+    |
+
+    Available serializers:
+    ArraySerializer
+    DataArraySerializer
+    JsonApiSerializer
+
+    */
+    'fractal'    => [
+        'params'     => [
+            'include' => 'include',
+        ],
+        'serializer' => League\Fractal\Serializer\DataArraySerializer::class,
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Cache Config
+    |--------------------------------------------------------------------------
+    |
+    */
+    'cache'      => [
+        /*
+         |--------------------------------------------------------------------------
+         | Cache Status
+         |--------------------------------------------------------------------------
+         |
+         | Enable or disable cache
+         |
+         */
+        'enabled'    => false,
+
+        /*
+         |--------------------------------------------------------------------------
+         | Cache Minutes
+         |--------------------------------------------------------------------------
+         |
+         | Time of expiration cache
+         |
+         */
+        'minutes'    => 10080,
+
+        /*
+         |--------------------------------------------------------------------------
+         | Cache Repository
+         |--------------------------------------------------------------------------
+         |
+         | Instance of Illuminate\Contracts\Cache\Repository
+         |
+         */
+        'repository' => 'cache',
+
+        /*
+          |--------------------------------------------------------------------------
+          | Cache Clean Listener
+          |--------------------------------------------------------------------------
+          |
+          |
+          |
+          */
+        'clean'      => [
+
+            /*
+              |--------------------------------------------------------------------------
+              | Enable clear cache on repository changes
+              |--------------------------------------------------------------------------
+              |
+              */
+            'enabled' => true,
+
+            /*
+              |--------------------------------------------------------------------------
+              | Actions in Repository
+              |--------------------------------------------------------------------------
+              |
+              | create : Clear Cache on create Entry in repository
+              | update : Clear Cache on update Entry in repository
+              | delete : Clear Cache on delete Entry in repository
+              |
+              */
+            'on'      => [
+                'created' => true,
+                'updated' => true,
+                'deleted' => true,
+            ],
+        ],
+
+        'params'     => [
+            /*
+            |--------------------------------------------------------------------------
+            | Skip Cache Params
+            |--------------------------------------------------------------------------
+            |
+            |
+            | Ex: http://prettus.local/?search=lorem&skipCache=true
+            |
+            */
+            'skipCache' => 'skipCache',
+        ],
+
+        /*
+       |--------------------------------------------------------------------------
+       | Methods Allowed
+       |--------------------------------------------------------------------------
+       |
+       | methods cacheable : all, paginate, find, findByField, findWhere, getByCriteria
+       |
+       | Ex:
+       |
+       | 'only'  =>['all','paginate'],
+       |
+       | or
+       |
+       | 'except'  =>['find'],
+       */
+        'allowed'    => [
+            'only'   => null,
+            'except' => null,
+        ],
+
+        'repositories' => [
+            'Webkul\Core\Repositories\CoreConfigRepository' => [
+                'enabled' => true,
+
+                // 'minutes'    => 10080,
+
+                // 'clean'      => [
+                //     'enabled' => true,
+
+                //     'on'      => [
+                //         'created' => true,
+                //         'updated' => true,
+                //         'deleted' => true,
+                //     ]
+                // ],
+
+                // 'allowed' => [
+                //     'only' => null,
+
+                //     'except' => null
+                // ],
+            ],
+
+            'Webkul\Core\Repositories\ChannelRepository' => [
+                'enabled' => true,
+            ],
+
+            'Webkul\Core\Repositories\CountryRepository' => [
+                'enabled' => true,
+            ],
+
+            'Webkul\Core\Repositories\CountryStateRepository' => [
+                'enabled' => true,
+            ],
+
+            'Webkul\Core\Repositories\CurrencyRepository' => [
+                'enabled' => true,
+            ],
+
+            'Webkul\Core\Repositories\LocaleRepository' => [
+                'enabled' => true,
+            ],
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Criteria Config
+    |--------------------------------------------------------------------------
+    |
+    | Settings of request parameters names that will be used by Criteria
+    |
+    */
+    'criteria'   => [
+        /*
+        |--------------------------------------------------------------------------
+        | Accepted Conditions
+        |--------------------------------------------------------------------------
+        |
+        | Conditions accepted in consultations where the Criteria
+        |
+        | Ex:
+        |
+        | 'acceptedConditions'=>['=','like']
+        |
+        | $query->where('foo','=','bar')
+        | $query->where('foo','like','bar')
+        |
+        */
+        'acceptedConditions' => [
+            '=',
+            'like',
+            'in',
+        ],
+        /*
+        |--------------------------------------------------------------------------
+        | Request Params
+        |--------------------------------------------------------------------------
+        |
+        | Request parameters that will be used to filter the query in the repository
+        |
+        | Params :
+        |
+        | - search : Searched value
+        |   Ex: http://prettus.local/?search=lorem
+        |
+        | - searchFields : Fields in which research should be carried out
+        |   Ex:
+        |    http://prettus.local/?search=lorem&searchFields=name;email
+        |    http://prettus.local/?search=lorem&searchFields=name:like;email
+        |    http://prettus.local/?search=lorem&searchFields=name:like
+        |
+        | - filter : Fields that must be returned to the response object
+        |   Ex:
+        |   http://prettus.local/?search=lorem&filter=id,name
+        |
+        | - orderBy : Order By
+        |   Ex:
+        |   http://prettus.local/?search=lorem&orderBy=id
+        |
+        | - sortedBy : Sort
+        |   Ex:
+        |   http://prettus.local/?search=lorem&orderBy=id&sortedBy=asc
+        |   http://prettus.local/?search=lorem&orderBy=id&sortedBy=desc
+        |
+        | - searchJoin: Specifies the search method (AND / OR), by default the
+        |               application searches each parameter with OR
+        |   EX:
+        |   http://prettus.local/?search=lorem&searchJoin=and
+        |   http://prettus.local/?search=lorem&searchJoin=or
+        |
+        */
+        'params'             => [
+            'search'       => 'search',
+            'searchFields' => 'searchFields',
+            'filter'       => 'filter',
+            'orderBy'      => 'orderBy',
+            'sortedBy'     => 'sortedBy',
+            'with'         => 'with',
+            'searchJoin'   => 'searchJoin',
+            'withCount'    => 'withCount',
+        ],
+    ],
+    /*
+    |--------------------------------------------------------------------------
+    | Generator Config
+    |--------------------------------------------------------------------------
+    |
+    */
+    'generator'  => [
+        'basePath'          => app()->path(),
+        'rootNamespace'     => 'App\\',
+        'stubsOverridePath' => app()->path(),
+        'paths'             => [
+            'models'       => 'Entities',
+            'repositories' => 'Repositories',
+            'interfaces'   => 'Repositories',
+            'transformers' => 'Transformers',
+            'presenters'   => 'Presenters',
+            'validators'   => 'Validators',
+            'controllers'  => 'Http/Controllers',
+            'provider'     => 'RepositoryServiceProvider',
+            'criteria'     => 'Criteria',
+        ],
+    ],
+];

+ 95 - 0
config/responsecache.php

@@ -0,0 +1,95 @@
+<?php
+
+return [
+    /*
+     * Determine if the response cache middleware should be enabled.
+     */
+    'enabled' => env('RESPONSE_CACHE_ENABLED', false),
+
+    /*
+     *  The given class will determinate if a request should be cached. The
+     *  default class will cache all successful GET-requests.
+     *
+     *  You can provide your own class given that it implements the
+     *  CacheProfile interface.
+     */
+    'cache_profile' => Spatie\ResponseCache\CacheProfiles\CacheAllSuccessfulGetRequests::class,
+
+    /*
+     *  Optionally, you can specify a header that will force a cache bypass.
+     *  This can be useful to monitor the performance of your application.
+     */
+    'cache_bypass_header' => [
+        'name'  => env('CACHE_BYPASS_HEADER_NAME', null),
+        'value' => env('CACHE_BYPASS_HEADER_VALUE', null),
+    ],
+
+    /*
+     * When using the default CacheRequestFilter this setting controls the
+     * default number of seconds responses must be cached.
+     */
+    'cache_lifetime_in_seconds' => env('RESPONSE_CACHE_LIFETIME', 60 * 60 * 24 * 7),
+
+    /*
+     * This setting determines if a http header named with the cache time
+     * should be added to a cached response. This can be handy when
+     * debugging.
+     */
+    'add_cache_time_header' => env('APP_DEBUG', true),
+
+    /*
+     * This setting determines the name of the http header that contains
+     * the time at which the response was cached
+     */
+    'cache_time_header_name' => env('RESPONSE_CACHE_HEADER_NAME', 'Bagisto-FPC'),
+
+    /*
+     * This setting determines if a http header named with the cache age
+     * should be added to a cached response. This can be handy when
+     * debugging.
+     * ONLY works when "add_cache_time_header" is also active!
+     */
+    'add_cache_age_header' => env('RESPONSE_CACHE_AGE_HEADER', false),
+
+    /*
+     * This setting determines the name of the http header that contains
+     * the age of cache
+     */
+    'cache_age_header_name' => env('RESPONSE_CACHE_AGE_HEADER_NAME', 'Bagisto-FPC-Age'),
+
+    /*
+     * Here you may define the cache store that should be used to store
+     * requests. This can be the name of any store that is
+     * configured in app/config/cache.php
+     */
+    'cache_store' => env('RESPONSE_CACHE_DRIVER', 'file'),
+
+    /*
+     * Here you may define replacers that dynamically replace content from the response.
+     * Each replacer must implement the Replacer interface.
+     */
+    'replacers' => [
+        \Spatie\ResponseCache\Replacers\CsrfTokenReplacer::class,
+        \Webkul\FPC\Replacers\FlashMessagesReplacer::class,
+    ],
+
+    /*
+     * If the cache driver you configured supports tags, you may specify a tag name
+     * here. All responses will be tagged. When clearing the responsecache only
+     * items with that tag will be flushed.
+     *
+     * You may use a string or an array here.
+     */
+    'cache_tag' => '',
+
+    /*
+     * This class is responsible for generating a hash for a request. This hash
+     * is used to look up a cached response.
+     */
+    'hasher' => \Webkul\FPC\Hasher\DefaultHasher::class,
+
+    /*
+     * This class is responsible for serializing responses.
+     */
+    'serializer' => \Spatie\ResponseCache\Serializers\DefaultSerializer::class,
+];

+ 68 - 0
config/sanctum.php

@@ -0,0 +1,68 @@
+<?php
+
+use Laravel\Sanctum\Sanctum;
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Stateful Domains
+    |--------------------------------------------------------------------------
+    |
+    | Requests from the following domains / hosts will receive stateful API
+    | authentication cookies. Typically, these should include your local
+    | and production domains which access your API via a frontend SPA.
+    |
+    */
+
+    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
+        '%s%s',
+        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
+        Sanctum::currentApplicationUrlWithPort()
+    ))),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Sanctum Guards
+    |--------------------------------------------------------------------------
+    |
+    | This array contains the authentication guards that will be checked when
+    | Sanctum is trying to authenticate a request. If none of these guards
+    | are able to authenticate the request, Sanctum will use the bearer
+    | token that's present on an incoming request for authentication.
+    |
+    */
+
+    'guard' => [],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Expiration Minutes
+    |--------------------------------------------------------------------------
+    |
+    | This value controls the number of minutes until an issued token will be
+    | considered expired. If this value is null, personal access tokens do
+    | not expire. This won't tweak the lifetime of first-party sessions.
+    |
+    */
+
+    'expiration' => null,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Sanctum Middleware
+    |--------------------------------------------------------------------------
+    |
+    | When authenticating your first-party SPA with Sanctum you may need to
+    | customize some of the middleware Sanctum uses while processing the
+    | request. You may change the middleware listed below as required.
+    |
+    */
+
+    'middleware' => [
+        'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
+        'encrypt_cookies'      => Illuminate\Cookie\Middleware\EncryptCookies::class,
+        'validate_csrf_token'  => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
+    ],
+
+];

+ 82 - 0
config/services.php

@@ -0,0 +1,82 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Third Party Services
+    |--------------------------------------------------------------------------
+    |
+    | This file is for storing the credentials for third party services such
+    | as Mailgun, Postmark, AWS and more. This file provides the de facto
+    | location for this type of information, allowing packages to have
+    | a conventional file to locate the various service credentials.
+    |
+    */
+
+    'postmark' => [
+        'token' => env('POSTMARK_TOKEN'),
+    ],
+
+    'ses' => [
+        'key'    => env('AWS_ACCESS_KEY_ID'),
+        'secret' => env('AWS_SECRET_ACCESS_KEY'),
+        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
+    ],
+
+    'resend' => [
+        'key' => env('RESEND_KEY'),
+    ],
+
+    'slack' => [
+        'notifications' => [
+            'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
+            'channel'              => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
+        ],
+    ],
+
+    'exchange_api' => [
+        'default' => 'exchange_rates',
+
+        'fixer' => [
+            'key'   => env('FIXER_API_KEY'),
+            'class' => 'Webkul\Core\Helpers\Exchange\FixerExchange',
+        ],
+
+        'exchange_rates' => [
+            'key'   => env('EXCHANGE_RATES_API_KEY'),
+            'class' => 'Webkul\Core\Helpers\Exchange\ExchangeRates',
+            'url'   => env('EXCHANGE_RATES_API_ENDPOINT'),
+        ],
+    ],
+
+    'facebook' => [
+        'client_id'     => env('FACEBOOK_CLIENT_ID'),
+        'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
+        'redirect'      => env('FACEBOOK_CALLBACK_URL'),
+    ],
+
+    'twitter' => [
+        'client_id'     => env('TWITTER_CLIENT_ID'),
+        'client_secret' => env('TWITTER_CLIENT_SECRET'),
+        'redirect'      => env('TWITTER_CALLBACK_URL'),
+    ],
+
+    'google' => [
+        'client_id'     => env('GOOGLE_CLIENT_ID'),
+        'client_secret' => env('GOOGLE_CLIENT_SECRET'),
+        'redirect'      => env('GOOGLE_CALLBACK_URL'),
+    ],
+
+    'linkedin-openid' => [
+        'client_id'     => env('LINKEDIN_CLIENT_ID'),
+        'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
+        'redirect'      => env('LINKEDIN_CALLBACK_URL'),
+    ],
+
+    'github' => [
+        'client_id'     => env('GITHUB_CLIENT_ID'),
+        'client_secret' => env('GITHUB_CLIENT_SECRET'),
+        'redirect'      => env('GITHUB_CALLBACK_URL'),
+    ],
+];

+ 217 - 0
config/session.php

@@ -0,0 +1,217 @@
+<?php
+
+use Illuminate\Support\Str;
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default Session Driver
+    |--------------------------------------------------------------------------
+    |
+    | This option determines the default session driver that is utilized for
+    | incoming requests. Laravel supports a variety of storage options to
+    | persist session data. Database storage is a great default choice.
+    |
+    | Supported: "file", "cookie", "database", "apc",
+    |            "memcached", "redis", "dynamodb", "array"
+    |
+    */
+
+    'driver' => env('SESSION_DRIVER', 'file'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session Lifetime
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the number of minutes that you wish the session
+    | to be allowed to remain idle before it expires. If you want them
+    | to expire immediately when the browser is closed then you may
+    | indicate that via the expire_on_close configuration option.
+    |
+    */
+
+    'lifetime' => env('SESSION_LIFETIME', 120),
+
+    'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session Encryption
+    |--------------------------------------------------------------------------
+    |
+    | This option allows you to easily specify that all of your session data
+    | should be encrypted before it's stored. All encryption is performed
+    | automatically by Laravel and you may use the session like normal.
+    |
+    */
+
+    'encrypt' => env('SESSION_ENCRYPT', false),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session File Location
+    |--------------------------------------------------------------------------
+    |
+    | When utilizing the "file" session driver, the session files are placed
+    | on disk. The default storage location is defined here; however, you
+    | are free to provide another location where they should be stored.
+    |
+    */
+
+    'files' => storage_path('framework/sessions'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session Database Connection
+    |--------------------------------------------------------------------------
+    |
+    | When using the "database" or "redis" session drivers, you may specify a
+    | connection that should be used to manage these sessions. This should
+    | correspond to a connection in your database configuration options.
+    |
+    */
+
+    'connection' => env('SESSION_CONNECTION'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session Database Table
+    |--------------------------------------------------------------------------
+    |
+    | When using the "database" session driver, you may specify the table to
+    | be used to store sessions. Of course, a sensible default is defined
+    | for you; however, you're welcome to change this to another table.
+    |
+    */
+
+    'table' => env('SESSION_TABLE', 'sessions'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session Cache Store
+    |--------------------------------------------------------------------------
+    |
+    | When using one of the framework's cache driven session backends, you may
+    | define the cache store which should be used to store the session data
+    | between requests. This must match one of your defined cache stores.
+    |
+    | Affects: "apc", "dynamodb", "memcached", "redis"
+    |
+    */
+
+    'store' => env('SESSION_STORE'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session Sweeping Lottery
+    |--------------------------------------------------------------------------
+    |
+    | Some session drivers must manually sweep their storage location to get
+    | rid of old sessions from storage. Here are the chances that it will
+    | happen on a given request. By default, the odds are 2 out of 100.
+    |
+    */
+
+    'lottery' => [2, 100],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session Cookie Name
+    |--------------------------------------------------------------------------
+    |
+    | Here you may change the name of the session cookie that is created by
+    | the framework. Typically, you should not need to change this value
+    | since doing so does not grant a meaningful security improvement.
+    |
+    */
+
+    'cookie' => env(
+        'SESSION_COOKIE',
+        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
+    ),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session Cookie Path
+    |--------------------------------------------------------------------------
+    |
+    | The session cookie path determines the path for which the cookie will
+    | be regarded as available. Typically, this will be the root path of
+    | your application, but you're free to change this when necessary.
+    |
+    */
+
+    'path' => env('SESSION_PATH', '/'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Session Cookie Domain
+    |--------------------------------------------------------------------------
+    |
+    | This value determines the domain and subdomains the session cookie is
+    | available to. By default, the cookie will be available to the root
+    | domain and all subdomains. Typically, this shouldn't be changed.
+    |
+    */
+
+    'domain' => env('SESSION_DOMAIN'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | HTTPS Only Cookies
+    |--------------------------------------------------------------------------
+    |
+    | By setting this option to true, session cookies will only be sent back
+    | to the server if the browser has a HTTPS connection. This will keep
+    | the cookie from being sent to you when it can't be done securely.
+    |
+    */
+
+    'secure' => env('SESSION_SECURE_COOKIE'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | HTTP Access Only
+    |--------------------------------------------------------------------------
+    |
+    | Setting this value to true will prevent JavaScript from accessing the
+    | value of the cookie and the cookie will only be accessible through
+    | the HTTP protocol. It's unlikely you should disable this option.
+    |
+    */
+
+    'http_only' => env('SESSION_HTTP_ONLY', true),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Same-Site Cookies
+    |--------------------------------------------------------------------------
+    |
+    | This option determines how your cookies behave when cross-site requests
+    | take place, and can be used to mitigate CSRF attacks. By default, we
+    | will set this value to "lax" to permit secure cross-site requests.
+    |
+    | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
+    |
+    | Supported: "lax", "strict", "none", null
+    |
+    */
+
+    'same_site' => env('SESSION_SAME_SITE', 'lax'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Partitioned Cookies
+    |--------------------------------------------------------------------------
+    |
+    | Setting this value to true will tie the cookie to the top-level site for
+    | a cross-site context. Partitioned cookies are accepted by the browser
+    | when flagged "secure" and the Same-Site attribute is set to "none".
+    |
+    */
+
+    'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
+
+];

+ 57 - 0
config/sitemap.php

@@ -0,0 +1,57 @@
+<?php
+
+use GuzzleHttp\RequestOptions;
+use Spatie\Sitemap\Crawler\Profile;
+
+return [
+
+    /*
+     * These options will be passed to GuzzleHttp\Client when it is created.
+     * For in-depth information on all options see the Guzzle docs:
+     *
+     * http://docs.guzzlephp.org/en/stable/request-options.html
+     */
+    'guzzle_options' => [
+
+        /*
+         * Whether or not cookies are used in a request.
+         */
+        RequestOptions::COOKIES => true,
+
+        /*
+         * The number of seconds to wait while trying to connect to a server.
+         * Use 0 to wait indefinitely.
+         */
+        RequestOptions::CONNECT_TIMEOUT => 10,
+
+        /*
+         * The timeout of the request in seconds. Use 0 to wait indefinitely.
+         */
+        RequestOptions::TIMEOUT => 10,
+
+        /*
+         * Describes the redirect behavior of a request.
+         */
+        RequestOptions::ALLOW_REDIRECTS => false,
+    ],
+
+    /*
+     * The sitemap generator can execute JavaScript on each page so it will
+     * discover links that are generated by your JS scripts. This feature
+     * is powered by headless Chrome.
+     */
+    'execute_javascript' => false,
+
+    /*
+     * The package will make an educated guess as to where Google Chrome is installed.
+     * You can also manually pass its location here.
+     */
+    'chrome_binary_path' => null,
+
+    /*
+     * The sitemap generator uses a CrawlProfile implementation to determine
+     * which urls should be crawled for the sitemap.
+     */
+    'crawl_profile' => Profile::class,
+
+];

+ 53 - 0
config/themes.php

@@ -0,0 +1,53 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Shop Theme Configuration
+    |--------------------------------------------------------------------------
+    |
+    | All the configurations are related to the shop themes.
+    |
+    */
+
+    'shop-default' => 'default',
+
+    'shop' => [
+        'default' => [
+            'name'        => 'Default',
+            'assets_path' => 'public/themes/shop/default',
+            'views_path'  => 'resources/themes/default/views',
+
+            'vite'        => [
+                'hot_file'                 => 'shop-default-vite.hot',
+                'build_directory'          => 'themes/shop/default/build',
+                'package_assets_directory' => 'src/Resources/assets',
+            ],
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Admin Theme Configuration
+    |--------------------------------------------------------------------------
+    |
+    | All the configurations are related to the admin themes.
+    |
+    */
+
+    'admin-default' => 'default',
+
+    'admin' => [
+        'default' => [
+            'name'        => 'Default',
+            'assets_path' => 'public/themes/admin/default',
+            'views_path'  => 'resources/admin-themes/default/views',
+
+            'vite'        => [
+                'hot_file'                 => 'admin-default-vite.hot',
+                'build_directory'          => 'themes/admin/default/build',
+                'package_assets_directory' => 'src/Resources/assets',
+            ],
+        ],
+    ],
+];

+ 149 - 0
config/translatable.php

@@ -0,0 +1,149 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Application Locales
+    |--------------------------------------------------------------------------
+    |
+    | Contains an array with the applications available locales.
+    |
+    */
+    'locales' => [
+        'en',
+        'fr',
+        'es' => [
+            'MX', // mexican spanish
+            'CO', // colombian spanish
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Locale separator
+    |--------------------------------------------------------------------------
+    |
+    | This is a string used to glue the language and the country when defining
+    | the available locales. Example: if set to '-', then the locale for
+    | colombian spanish will be saved as 'es-CO' into the database.
+    |
+    */
+    'locale_separator' => '-',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default locale
+    |--------------------------------------------------------------------------
+    |
+    | As a default locale, Translatable takes the locale of Laravel's
+    | translator. If for some reason you want to override this,
+    | you can specify what default should be used here.
+    | If you set a value here it will only use the current config value
+    | and never fallback to the translator one.
+    |
+    */
+    'locale' => null,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Use fallback
+    |--------------------------------------------------------------------------
+    |
+    | Determine if fallback locales are returned by default or not. To add
+    | more flexibility and configure this option per "translatable"
+    | instance, this value will be overridden by the property
+    | $useTranslationFallback when defined
+    |
+    */
+    'use_fallback' => true,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Use fallback per property
+    |--------------------------------------------------------------------------
+    |
+    | The property fallback feature will return the translated value of
+    | the fallback locale if the property is empty for the selected
+    | locale. Note that 'use_fallback' must be enabled.
+    |
+     */
+    'use_property_fallback' => true,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Fallback Locale
+    |--------------------------------------------------------------------------
+    |
+    | A fallback locale is the locale being used to return a translation
+    | when the requested translation is not existing. To disable it
+    | set it to false.
+    | If set to null it will loop through all configured locales until
+    | one existing is found or end of list reached. The locales are looped
+    | from top to bottom and for country based locales the simple one
+    | is used first. So "es" will be checked before "es_MX".
+    |
+    */
+    'fallback_locale' => 'en',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Translation Model Namespace
+    |--------------------------------------------------------------------------
+    |
+    | Defines the default 'Translation' class namespace. For example, if
+    | you want to use App\Translations\CountryTranslation instead of App\CountryTranslation
+    | set this to 'App\Translations'.
+    |
+    */
+    'translation_model_namespace' => null,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Translation Suffix
+    |--------------------------------------------------------------------------
+    |
+    | Defines the default 'Translation' class suffix. For example, if
+    | you want to use CountryTrans instead of CountryTranslation
+    | application, set this to 'Trans'.
+    |
+    */
+    'translation_suffix' => 'Translation',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Locale key
+    |--------------------------------------------------------------------------
+    |
+    | Defines the 'locale' field name, which is used by the
+    | translation model.
+    |
+    */
+    'locale_key' => 'locale',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Always load translations when converting to array
+    |--------------------------------------------------------------------------
+    | Setting this to false will have a performance improvement but will
+    | not return the translations when using toArray(), unless the
+    | translations relationship is already loaded.
+    |
+     */
+    'to_array_always_loads_translations' => true,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Configure the default behavior of the rule factory
+    |--------------------------------------------------------------------------
+    | The default values used to control the behavior of the RuleFactory.
+    | Here you can set your own default format and delimiters for
+    | your whole app.
+     *
+     */
+    'rule_factory' => [
+        'format' => \Astrotomic\Translatable\Validation\RuleFactory::FORMAT_ARRAY,
+        'prefix' => '%',
+        'suffix' => '%',
+    ],
+];

+ 43 - 0
config/view.php

@@ -0,0 +1,43 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Blade File Tracer
+    |--------------------------------------------------------------------------
+    |
+    | Shows blade file path in front
+    |
+    */
+
+    'tracer' => false,
+
+    /*
+    |--------------------------------------------------------------------------
+    | View Storage Paths
+    |--------------------------------------------------------------------------
+    |
+    | Most templating systems load templates from disk. Here you may specify
+    | an array of paths that should be checked for your views. Of course
+    | the usual Laravel view path has already been registered for you.
+    |
+    */
+
+    'paths' => [
+        resource_path('views'),
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Compiled View Path
+    |--------------------------------------------------------------------------
+    |
+    | This option determines where all the compiled Blade templates will be
+    | stored for your application. Typically, this is within the storage
+    | directory. However, as usual, you are free to change this value.
+    |
+    */
+
+    'compiled' => realpath(storage_path('framework/views')),
+
+];

+ 37 - 0
config/visitor.php

@@ -0,0 +1,37 @@
+<?php
+
+return [
+    /*
+    |--------------------------------------------------------------------------
+    | Default Driver
+    |--------------------------------------------------------------------------
+    |
+    | This value determines which of the following driver to use.
+    | You can switch to a different driver at runtime.
+    |
+    */
+    'default' => 'jenssegers',
+
+    // except save request or route names
+    'except' => ['login', 'register'],
+
+    // name of the table which visit records should save in
+    'table_name' => 'visits',
+
+    /*
+    |--------------------------------------------------------------------------
+    | List of Drivers
+    |--------------------------------------------------------------------------
+    |
+    | This is the array of Classes that maps to Drivers above.
+    | You can create your own driver if you like and add the
+    | config in the drivers array and the class to use for
+    | here with the same name. You will have to implement
+    | Shetabit\Visitor\Contracts\UserAgentParser in your driver.
+    |
+    */
+    'drivers' => [
+        'jenssegers' => \Shetabit\Visitor\Drivers\JenssegersAgent::class,
+        'UAParser'   => \Shetabit\Visitor\Drivers\UAParser::class,
+    ],
+];

+ 1 - 0
database/.gitignore

@@ -0,0 +1 @@
+*.sqlite

+ 35 - 0
database/migrations/2014_10_12_000000_create_users_table.php

@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('users', function (Blueprint $table) {
+            $table->increments('id');
+            $table->string('name');
+            $table->string('email')->unique();
+            $table->string('password');
+            $table->rememberToken();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('users');
+    }
+};

+ 32 - 0
database/migrations/2014_10_12_100000_create_password_resets_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('password_resets', function (Blueprint $table) {
+            $table->string('email')->index();
+            $table->string('token');
+            $table->timestamp('created_at')->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('password_resets');
+    }
+};

+ 33 - 0
database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('personal_access_tokens', function (Blueprint $table) {
+            $table->id();
+            $table->morphs('tokenable');
+            $table->string('name');
+            $table->string('token', 64)->unique();
+            $table->text('abilities')->nullable();
+            $table->timestamp('last_used_at')->nullable();
+            $table->timestamp('expires_at')->nullable();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('personal_access_tokens');
+    }
+};

+ 36 - 0
database/migrations/2020_12_27_121950_create_jobs_table.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('jobs', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->string('queue')->index();
+            $table->longText('payload');
+            $table->unsignedTinyInteger('attempts');
+            $table->unsignedInteger('reserved_at')->nullable();
+            $table->unsignedInteger('available_at');
+            $table->unsignedInteger('created_at');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('jobs');
+    }
+};

+ 36 - 0
database/migrations/2022_03_15_160510_create_failed_jobs_table.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('failed_jobs', function (Blueprint $table) {
+            $table->id();
+            $table->string('uuid')->unique();
+            $table->text('connection');
+            $table->text('queue');
+            $table->longText('payload');
+            $table->longText('exception');
+            $table->timestamp('failed_at')->useCurrent();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('failed_jobs');
+    }
+};

+ 39 - 0
database/migrations/2022_10_04_144444_create_job_batches_table.php

@@ -0,0 +1,39 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('job_batches', function (Blueprint $table) {
+            $table->string('id')->primary();
+            $table->string('name');
+            $table->integer('total_jobs');
+            $table->integer('pending_jobs');
+            $table->integer('failed_jobs');
+            $table->text('failed_job_ids');
+            $table->mediumText('options')->nullable();
+            $table->integer('cancelled_at')->nullable();
+            $table->integer('created_at');
+            $table->integer('finished_at')->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('job_batches');
+    }
+};

+ 44 - 0
database/migrations/2023_10_05_163612_create_visits_table.php

@@ -0,0 +1,44 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateVisitsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create(config('visitor.table_name'), function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->string('method')->nullable();
+            $table->mediumText('request')->nullable();
+            $table->mediumText('url')->nullable();
+            $table->mediumText('referer')->nullable();
+            $table->text('languages')->nullable();
+            $table->text('useragent')->nullable();
+            $table->text('headers')->nullable();
+            $table->text('device')->nullable();
+            $table->text('platform')->nullable();
+            $table->text('browser')->nullable();
+            $table->ipAddress('ip')->nullable();
+            $table->nullableMorphs('visitable'); // object model
+            $table->nullableMorphs('visitor'); // subject model
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists(config('visitor.table_name'));
+    }
+}

+ 19 - 0
database/seeders/DatabaseSeeder.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace Database\Seeders;
+
+use Illuminate\Database\Seeder;
+use Webkul\Installer\Database\Seeders\DatabaseSeeder as BagistoDatabaseSeeder;
+
+class DatabaseSeeder extends Seeder
+{
+    /**
+     * Seed the application's database.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        $this->call(BagistoDatabaseSeeder::class);
+    }
+}

+ 116 - 0
docker-compose.yml

@@ -0,0 +1,116 @@
+services:
+    laravel.test:
+        build:
+            context: ./vendor/laravel/sail/runtimes/8.3
+            dockerfile: Dockerfile
+            args:
+                WWWGROUP: '${WWWGROUP}'
+        image: sail-8.3/app
+        extra_hosts:
+            - 'host.docker.internal:host-gateway'
+        ports:
+            - '${APP_PORT:-80}:80'
+            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
+        environment:
+            WWWUSER: '${WWWUSER}'
+            LARAVEL_SAIL: 1
+            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
+            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
+            IGNITION_LOCAL_SITES_PATH: '${PWD}'
+        volumes:
+            - '.:/var/www/html'
+        networks:
+            - sail
+        depends_on:
+            - mysql
+            - redis
+            - elasticsearch
+            - kibana
+            - mailpit
+    mysql:
+        image: 'mysql/mysql-server:8.0'
+        ports:
+            - '${FORWARD_DB_PORT:-3306}:3306'
+        environment:
+            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
+            MYSQL_ROOT_HOST: '%'
+            MYSQL_DATABASE: '${DB_DATABASE}'
+            MYSQL_USER: '${DB_USERNAME}'
+            MYSQL_PASSWORD: '${DB_PASSWORD}'
+            MYSQL_ALLOW_EMPTY_PASSWORD: 1
+        volumes:
+            - 'sail-mysql:/var/lib/mysql'
+            - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
+        networks:
+            - sail
+        healthcheck:
+            test:
+                - CMD
+                - mysqladmin
+                - ping
+                - '-p${DB_PASSWORD}'
+            retries: 3
+            timeout: 5s
+    redis:
+        image: 'redis:alpine'
+        ports:
+            - '${FORWARD_REDIS_PORT:-6379}:6379'
+        volumes:
+            - 'sail-redis:/data'
+        networks:
+            - sail
+        healthcheck:
+            test:
+                - CMD
+                - redis-cli
+                - ping
+            retries: 3
+            timeout: 5s
+    elasticsearch:
+        image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
+        ports:
+            - '9200:9200'
+            - '9300:9300'
+        environment:
+            - xpack.security.enabled=false
+            - discovery.type=single-node
+            - bootstrap.memory_lock=true
+            - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
+        ulimits:
+            memlock:
+                soft: -1
+                hard: -1
+            nofile:
+                soft: 65536
+                hard: 65536
+        volumes:
+            - 'sail-elasticsearch:/var/lib/elasticsearch/data'
+        networks:
+            - sail
+    kibana:
+        image: docker.elastic.co/kibana/kibana:7.17.0
+        ports:
+            - 5601:5601
+        environment:
+            ELASTICSEARCH_HOSTS: 'http://elasticsearch:9200'
+        networks:
+            - sail
+        depends_on:
+            - elasticsearch
+    mailpit:
+        image: 'axllent/mailpit:latest'
+        ports:
+            - '${FORWARD_MAILPIT_PORT:-1025}:1025'
+            - '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025'
+        networks:
+            - sail
+networks:
+    sail:
+        driver: bridge
+volumes:
+    sail-mysql:
+        driver: local
+    sail-redis:
+        driver: local
+    sail-elasticsearch:
+        driver: local

+ 20 - 0
lang/ar/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'هذه البيانات لا تتطابق مع سجلاتنا.',
+    'password' => 'كلمة المرور المقدمة غير صحيحة.',
+    'throttle' => 'محاولات تسجيل الدخول كثيرة جداً. يرجى المحاولة مرة أخرى في :seconds ثواني.',
+
+];

+ 19 - 0
lang/ar/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'التالي &raquo;',
+    'previous' => '&laquo; السابق',
+
+];

+ 22 - 0
lang/ar/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'تمت إعادة تعيين كلمة المرور الخاصة بك.',
+    'sent'      => 'لقد قمنا بإرسال رابط إعادة تعيين كلمة المرور إلى بريدك الإلكتروني.',
+    'throttled' => 'يرجى الانتظار قبل المحاولة مرة أخرى.',
+    'token'     => 'هذا الرمز غير صالح لإعادة تعيين كلمة المرور.',
+    'user'      => 'لا يمكننا العثور على مستخدم بهذا البريد الإلكتروني.',
+
+];

+ 207 - 0
lang/ar/validation.php

@@ -0,0 +1,207 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'        => 'الحقل :attribute يجب أن يتم قبوله.',
+    'accepted_if'     => 'الحقل :attribute يجب أن يتم قبوله عندما يكون :value :other.',
+    'active_url'      => 'الحقل :attribute يجب أن يكون رابط URL صالح.',
+    'after'           => 'الحقل :attribute يجب أن يكون تاريخًا بعد :date.',
+    'after_or_equal'  => 'الحقل :attribute يجب أن يكون تاريخًا بعد أو يساوي :date.',
+    'alpha'           => 'الحقل :attribute يجب أن يحتوي على أحرف فقط.',
+    'alpha_dash'      => 'الحقل :attribute يجب أن يحتوي على أحرف، أرقام، شرطات، وشرطات سفلية فقط.',
+    'alpha_num'       => 'الحقل :attribute يجب أن يحتوي على أحرف وأرقام فقط.',
+    'array'           => 'الحقل :attribute يجب أن يكون مصفوفة.',
+    'ascii'           => 'الحقل :attribute يجب أن يحتوي على أحرف أبجدية وأرقام ورموز فقط.',
+    'before'          => 'الحقل :attribute يجب أن يكون تاريخًا قبل :date.',
+    'before_or_equal' => 'الحقل :attribute يجب أن يكون تاريخًا قبل أو يساوي :date.',
+
+    'between' => [
+        'array'   => 'الحقل :attribute يجب أن يحتوي بين :min و :max عنصر.',
+        'file'    => 'الحقل :attribute يجب أن يكون بين :min و :max كيلوبايت.',
+        'numeric' => 'الحقل :attribute يجب أن يكون بين :min و :max.',
+        'string'  => 'الحقل :attribute يجب أن يكون بين :min و :max حرف.',
+    ],
+
+    'boolean'           => 'الحقل :attribute يجب أن يكون صحيح أو خطأ.',
+    'can'               => 'الحقل :attribute يحتوي على قيمة غير مسموح بها.',
+    'confirmed'         => 'تأكيد الحقل :attribute لا يتطابق.',
+    'current_password'  => 'كلمة المرور غير صحيحة.',
+    'date'              => 'الحقل :attribute يجب أن يكون تاريخًا صالحًا.',
+    'date_equals'       => 'الحقل :attribute يجب أن يكون تاريخًا مساويًا ل :date.',
+    'date_format'       => 'الحقل :attribute يجب أن يتطابق مع التنسيق :format.',
+    'decimal'           => 'الحقل :attribute يجب أن يحتوي على :decimal أماكن عشرية.',
+    'declined'          => 'الحقل :attribute يجب أن يكون مرفوضًا.',
+    'declined_if'       => 'الحقل :attribute يجب أن يكون مرفوضًا عندما يكون :other :value.',
+    'different'         => 'الحقل :attribute و :other يجب أن يكونا مختلفين.',
+    'digits'            => 'الحقل :attribute يجب أن يكون :digits أرقام.',
+    'digits_between'    => 'الحقل :attribute يجب أن يكون بين :min و :max أرقام.',
+    'dimensions'        => 'الحقل :attribute يحتوي على أبعاد صورة غير صالحة.',
+    'distinct'          => 'الحقل :attribute يحتوي على قيمة مكررة.',
+    'doesnt_end_with'   => 'الحقل :attribute يجب ألا ينتهي بأحد القيم التالية: :values.',
+    'doesnt_start_with' => 'الحقل :attribute يجب ألا يبدأ بأحد القيم التالية: :values.',
+    'email'             => 'الحقل :attribute يجب أن يكون عنوان بريد إلكتروني صالح.',
+    'ends_with'         => 'الحقل :attribute يجب أن ينتهي بأحد القيم التالية: :values.',
+    'enum'              => 'القيمة المحددة :attribute غير صالحة.',
+    'exists'            => 'القيمة المحددة :attribute غير صالحة.',
+    'extensions'        => 'الحقل :attribute يجب أن يحتوي على أحد الامتدادات التالية: :values.',
+    'file'              => 'الحقل :attribute يجب أن يكون ملفًا.',
+    'filled'            => 'الحقل :attribute يجب أن يحتوي على قيمة.',
+
+    'gt' => [
+        'array'   => 'الحقل :attribute يجب أن يحتوي على أكثر من :value عنصر.',
+        'file'    => 'الحقل :attribute يجب أن يكون أكبر من :value كيلوبايت.',
+        'numeric' => 'الحقل :attribute يجب أن يكون أكبر من :value.',
+        'string'  => 'الحقل :attribute يجب أن يكون أكبر من :value حرف.',
+    ],
+
+    'gte' => [
+        'array'   => 'الحقل :attribute يجب أن يحتوي على :value عنصر أو أكثر.',
+        'file'    => 'الحقل :attribute يجب أن يكون أكبر من أو يساوي :value كيلوبايت.',
+        'numeric' => 'الحقل :attribute يجب أن يكون أكبر من أو يساوي :value.',
+        'string'  => 'الحقل :attribute يجب أن يكون أكبر من أو يساوي :value حرف.',
+    ],
+
+    'hex_color' => 'الحقل :attribute يجب أن يكون لونًا سداسي عشريًا صالحًا.',
+    'image'     => 'الحقل :attribute يجب أن يكون صورة.',
+    'in'        => 'القيمة المحددة :attribute غير صالحة.',
+    'in_array'  => 'الحقل :attribute يجب أن يكون موجودًا في :other.',
+    'integer'   => 'الحقل :attribute يجب أن يكون عددًا صحيحًا.',
+    'ip'        => 'الحقل :attribute يجب أن يكون عنوان IP صالحًا.',
+    'ipv4'      => 'الحقل :attribute يجب أن يكون عنوان IPv4 صالحًا.',
+    'ipv6'      => 'الحقل :attribute يجب أن يكون عنوان IPv6 صالحًا.',
+    'json'      => 'الحقل :attribute يجب أن يكون سلسلة JSON صالحة.',
+    'lowercase' => 'الحقل :attribute يجب أن يكون في حالة صغيرة.',
+
+    'lt' => [
+        'array'   => 'الحقل :attribute يجب أن يحتوي على أقل من :value عنصر.',
+        'file'    => 'الحقل :attribute يجب أن يكون أصغر من :value كيلوبايت.',
+        'numeric' => 'الحقل :attribute يجب أن يكون أصغر من :value.',
+        'string'  => 'الحقل :attribute يجب أن يكون أصغر من :value حرف.',
+    ],
+
+    'lte' => [
+        'array'   => 'الحقل :attribute يجب ألا يحتوي على أكثر من :value عنصر.',
+        'file'    => 'الحقل :attribute يجب أن يكون أصغر من أو يساوي :value كيلوبايت.',
+        'numeric' => 'الحقل :attribute يجب أن يكون أصغر من أو يساوي :value.',
+        'string'  => 'الحقل :attribute يجب أن يكون أصغر من أو يساوي :value حرف.',
+    ],
+
+    'mac_address' => 'الحقل :attribute يجب أن يكون عنوان MAC صالحًا.',
+
+    'max' => [
+        'array'   => 'الحقل :attribute يجب ألا يحتوي على أكثر من :max عنصر.',
+        'file'    => 'الحقل :attribute يجب ألا يكون أكبر من :max كيلوبايت.',
+        'numeric' => 'الحقل :attribute يجب ألا يكون أكبر من :max.',
+        'string'  => 'الحقل :attribute يجب ألا يكون أكبر من :max حرف.',
+    ],
+
+    'max_digits' => 'الحقل :attribute يجب ألا يحتوي على أكثر من :max أرقام.',
+    'mimes'      => 'الحقل :attribute يجب أن يكون ملفًا من النوع: :values.',
+    'mimetypes'  => 'الحقل :attribute يجب أن يكون ملفًا من النوع: :values.',
+
+    'min' => [
+        'array'   => 'الحقل :attribute يجب أن يحتوي على الأقل على :min عنصر.',
+        'file'    => 'الحقل :attribute يجب أن يكون على الأقل :min كيلوبايت.',
+        'numeric' => 'الحقل :attribute يجب أن يكون على الأقل :min.',
+        'string'  => 'الحقل :attribute يجب أن يكون على الأقل :min حرف.',
+    ],
+
+    'min_digits'       => 'الحقل :attribute يجب أن يحتوي على الأقل :min أرقام.',
+    'missing'          => 'الحقل :attribute يجب أن يكون مفقودًا.',
+    'missing_if'       => 'الحقل :attribute يجب أن يكون مفقودًا عندما يكون :other :value.',
+    'missing_unless'   => 'الحقل :attribute يجب أن يكون مفقودًا ما لم يكن :other :value.',
+    'missing_with'     => 'الحقل :attribute يجب أن يكون مفقودًا عندما يكون :values موجودًا.',
+    'missing_with_all' => 'الحقل :attribute يجب أن يكون مفقودًا عندما تكون :values موجودة.',
+    'multiple_of'      => 'الحقل :attribute يجب أن يكون مضاعفًا لـ :value.',
+    'not_in'           => 'القيمة المحددة :attribute غير صالحة.',
+    'not_regex'        => 'تنسيق الحقل :attribute غير صالح.',
+    'numeric'          => 'الحقل :attribute يجب أن يكون رقمًا.',
+
+    'password' => [
+        'letters'       => 'الحقل :attribute يجب أن يحتوي على حرف واحد على الأقل.',
+        'mixed'         => 'الحقل :attribute يجب أن يحتوي على حرف كبير وحرف صغير على الأقل واحد من كل.',
+        'numbers'       => 'الحقل :attribute يجب أن يحتوي على رقم واحد على الأقل.',
+        'symbols'       => 'الحقل :attribute يجب أن يحتوي على رمز واحد على الأقل.',
+        'uncompromised' => 'الـ :attribute المعطى قد ظهر في تسريب بيانات. يرجى اختيار :attribute مختلف.',
+    ],
+
+    'present'              => 'الحقل :attribute يجب أن يكون موجودًا.',
+    'present_if'           => 'الحقل :attribute يجب أن يكون موجودًا عندما يكون :other :value.',
+    'present_unless'       => 'الحقل :attribute يجب أن يكون موجودًا ما لم يكن :other :value.',
+    'present_with'         => 'الحقل :attribute يجب أن يكون موجودًا عندما يكون :values موجودًا.',
+    'present_with_all'     => 'الحقل :attribute يجب أن يكون موجودًا عندما تكون :values موجودة.',
+    'prohibited'           => 'الحقل :attribute ممنوع.',
+    'prohibited_if'        => 'الحقل :attribute ممنوع عندما يكون :other :value.',
+    'prohibited_unless'    => 'الحقل :attribute ممنوع ما لم يكن :other في :values.',
+    'prohibits'            => 'الحقل :attribute يمنع :other من الوجود.',
+    'regex'                => 'تنسيق الحقل :attribute غير صالح.',
+    'required'             => 'الحقل :attribute مطلوب.',
+    'required_array_keys'  => 'الحقل :attribute يجب أن يحتوي على مفاتيح لـ :values.',
+    'required_if'          => 'الحقل :attribute مطلوب عندما يكون :other :value.',
+    'required_if_accepted' => 'الحقل :attribute مطلوب عندما يكون :other مقبولًا.',
+    'required_unless'      => 'الحقل :attribute مطلوب ما لم يكن :other في :values.',
+    'required_with'        => 'الحقل :attribute مطلوب عندما يكون :values موجودًا.',
+    'required_with_all'    => 'الحقل :attribute مطلوب عندما تكون :values موجودة.',
+    'required_without'     => 'الحقل :attribute مطلوب عندما لا تكون :values موجودة.',
+    'required_without_all' => 'الحقل :attribute مطلوب عندما لا تكون أيًا من :values موجودة.',
+    'same'                 => 'الحقل :attribute يجب أن يتطابق مع :other.',
+
+    'size' => [
+        'array'   => 'الحقل :attribute يجب أن يحتوي على :size عنصر.',
+        'file'    => 'الحقل :attribute يجب أن يكون :size كيلوبايت.',
+        'numeric' => 'الحقل :attribute يجب أن يكون :size.',
+        'string'  => 'الحقل :attribute يجب أن يكون :size حرف.',
+    ],
+
+    'starts_with' => 'الحقل :attribute يجب أن يبدأ بأحد القيم التالية: :values.',
+    'string'      => 'الحقل :attribute يجب أن يكون نصًا.',
+    'timezone'    => 'الحقل :attribute يجب أن يكون مدخلًا صحيحًا للمنطقة الزمنية.',
+    'unique'      => 'الـ :attribute تم اختياره بالفعل.',
+    'uploaded'    => 'فشل في تحميل الـ :attribute.',
+    'uppercase'   => 'الحقل :attribute يجب أن يكون في حالة كبيرة.',
+    'url'         => 'الحقل :attribute يجب أن يكون رابط URL صالحًا.',
+    'ulid'        => 'الحقل :attribute يجب أن يكون ULID صالحًا.',
+    'uuid'        => 'الحقل :attribute يجب أن يكون UUID صالحًا.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'رسالة مخصصة',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
lang/bn/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'এই পরিচিতিগুলি আমাদের রেকর্ড সাথে মিলছে না।',
+    'password' => 'প্রদত্ত পাসওয়ার্ড ভুল।',
+    'throttle' => 'লগইনের অনেক চেষ্টা করা হয়েছে। দয়া করে :seconds সেকেন্ড পরে আবার চেষ্টা করুন।',
+
+];

+ 19 - 0
lang/bn/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'পরবর্তী &raquo;',
+    'previous' => '&laquo; পূর্ববর্তী',
+
+];

+ 22 - 0
lang/bn/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'আপনার পাসওয়ার্ড রিসেট হয়েছে।',
+    'sent'      => 'আমরা আপনার পাসওয়ার্ড রিসেট লিঙ্ক ইমেইল করেছি।',
+    'throttled' => 'পুনরায় চেষ্টা করার আগে অনুগ্রহ করে অপেক্ষা করুন।',
+    'token'     => 'এই পাসওয়ার্ড রিসেট টোকেন অবৈধ।',
+    'user'      => 'আমরা ঐ ইমেল ঠিকানায় ব্যবহারকারী খুঁজে পাচ্ছি না।',
+
+];

+ 207 - 0
lang/bn/validation.php

@@ -0,0 +1,207 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'        => 'ফিল্ড :attribute অবশ্যই গ্রহণযোগ্য হতে হবে।',
+    'accepted_if'     => 'যদি :other :value হয়, তবে :attribute ফিল্ড গ্রহণযোগ্য হতে হবে।',
+    'active_url'      => 'ফিল্ড :attribute অবশ্যই একটি বৈধ URL হতে হবে।',
+    'after'           => 'ফিল্ড :attribute অবশ্যই :date এর পরের একটি তারিখ হতে হবে।',
+    'after_or_equal'  => 'ফিল্ড :attribute অবশ্যই :date এর পরে অথবা সমান হতে হবে।',
+    'alpha'           => 'ফিল্ড :attribute অবশ্যই শুধুমাত্র অক্ষর ধারণ করতে হবে।',
+    'alpha_dash'      => 'ফিল্ড :attribute অবশ্যই শুধুমাত্র অক্ষর, সংখ্যা, ড্যাশ, এবং আন্ডারস্কোর ধারণ করতে হবে।',
+    'alpha_num'       => 'ফিল্ড :attribute অবশ্যই শুধুমাত্র অক্ষর এবং সংখ্যা ধারণ করতে হবে।',
+    'array'           => 'ফিল্ড :attribute অবশ্যই একটি অ্যারে হতে হবে।',
+    'ascii'           => 'ফিল্ড :attribute অবশ্যই একটি একক-বাইট বর্ণান্ত অক্ষরিক এবং চিহ্ন ধারণ করতে হবে।',
+    'before'          => 'ফিল্ড :attribute অবশ্যই :date এর পূর্বের একটি তারিখ হতে হবে।',
+    'before_or_equal' => 'ফিল্ড :attribute অবশ্যই :date এর পূর্বে অথবা সমান হতে হবে।',
+
+    'between' => [
+        'array'   => 'ফিল্ড :attribute অবশ্যই :min এবং :max আইটেম মধ্যে হতে হবে।',
+        'file'    => 'ফিল্ড :attribute অবশ্যই :min এবং :max কিলোবাইট মধ্যে হতে হবে।',
+        'numeric' => 'ফিল্ড :attribute অবশ্যই :min এবং :max মধ্যে হতে হবে।',
+        'string'  => 'ফিল্ড :attribute অবশ্যই :min এবং :max অক্ষর মধ্যে হতে হবে।',
+    ],
+
+    'boolean'           => 'ফিল্ড :attribute অবশ্যই সত্য বা মিথ্যা হতে হবে।',
+    'can'               => 'ফিল্ড :attribute অননুমোদিত মান ধারণ করছে।',
+    'confirmed'         => 'ফিল্ড :attribute নিশ্চিতকরণের মান মেলেনি।',
+    'current_password'  => 'পাসওয়ার্ড ভুল।',
+    'date'              => 'ফিল্ড :attribute অবশ্যই একটি বৈধ তারিখ হতে হবে।',
+    'date_equals'       => 'ফিল্ড :attribute অবশ্যই :date এর সমান তারিখ হতে হবে।',
+    'date_format'       => 'ফিল্ড :attribute অবশ্যই :format ফর্ম্যাটের সাথে মেলে না।',
+    'decimal'           => 'ফিল্ড :attribute অবশ্যই :decimal দশমিক স্থান হতে হবে।',
+    'declined'          => 'ফিল্ড :attribute অবশ্যই প্রত্যাখ্যান করতে হবে।',
+    'declined_if'       => 'যদি :other :value হয়, তবে :attribute ফিল্ড অবশ্যই প্রত্যাখ্যান করতে হবে।',
+    'different'         => 'ফিল্ড :attribute এবং :other অবশ্যই আলাদা হতে হবে।',
+    'digits'            => 'ফিল্ড :attribute অবশ্যই :digits সংখ্যার হতে হবে।',
+    'digits_between'    => 'ফিল্ড :attribute অবশ্যই :min এবং :max সংখ্যার মধ্যে হতে হবে।',
+    'dimensions'        => 'ফিল্ড :attribute অবশ্যই অবৈধ চিত্র মাত্রা ধারণ করে।',
+    'distinct'          => 'ফিল্ড :attribute অননুকরণশীল মান ধারণ করে।',
+    'doesnt_end_with'   => 'ফিল্ড :attribute অবশ্যই নিম্নলিখিত মধ্যে কোনটির সাথে শেষ হবে না: :values।',
+    'doesnt_start_with' => 'ফিল্ড :attribute অবশ্যই নিম্নলিখিত মধ্যে কোনটি দিয়ে শুরু হবে না: :values।',
+    'email'             => 'ফিল্ড :attribute অবশ্যই একটি বৈধ ইমেল ঠিকানা হতে হবে।',
+    'ends_with'         => 'ফিল্ড :attribute অবশ্যই নিম্নলিখিত মধ্যে কোনটিতে শেষ হতে হবে: :values।',
+    'enum'              => 'নির্বাচিত :attribute অবৈধ।',
+    'exists'            => 'নির্বাচিত :attribute অবৈধ।',
+    'extensions'        => 'ফিল্ড :attribute অবশ্যই নিম্নলিখিত একটি এক্সটেনশন হতে হবে: :values।',
+    'file'              => 'ফিল্ড :attribute অবশ্যই একটি ফাইল হতে হবে।',
+    'filled'            => 'ফিল্ড :attribute অবশ্যই একটি মান ধারণ করতে হবে।',
+
+    'gt' => [
+        'array'   => 'ফিল্ড :attribute অবশ্যই :value আইটেমের চেয়ে বেশি হতে হবে।',
+        'file'    => 'ফিল্ড :attribute অবশ্যই :value কিলোবাইটের চেয়ে বড় হতে হবে।',
+        'numeric' => 'ফিল্ড :attribute অবশ্যই :value এর চেয়ে বড় হতে হবে।',
+        'string'  => 'ফিল্ড :attribute অবশ্যই :value অক্ষরের চেয়ে বেশি হতে হবে।',
+    ],
+
+    'gte' => [
+        'array'   => 'ফিল্ড :attribute অবশ্যই :value আইটেম অথবা তার অধিক হতে হবে।',
+        'file'    => 'ফিল্ড :attribute অবশ্যই :value কিলোবাইটের চেয়ে বড় অথবা সমান হতে হবে।',
+        'numeric' => 'ফিল্ড :attribute অবশ্যই :value এর চেয়ে বড় অথবা সমান হতে হবে।',
+        'string'  => 'ফিল্ড :attribute অবশ্যই :value অক্ষরের চেয়ে বড় অথবা সমান হতে হবে।',
+    ],
+
+    'hex_color' => 'ফিল্ড :attribute অবশ্যই একটি বৈধ হেক্সাডেসিমাল রঙ হতে হবে।',
+    'image'     => 'ফিল্ড :attribute অবশ্যই একটি ছবি হতে হবে।',
+    'in'        => 'নির্বাচিত :attribute অবৈধ।',
+    'in_array'  => 'ফিল্ড :attribute অবশ্যই :other এর মধ্যে থাকতে হবে।',
+    'integer'   => 'ফিল্ড :attribute অবশ্যই একটি পূর্ণসংখ্যা হতে হবে।',
+    'ip'        => 'ফিল্ড :attribute অবশ্যই একটি বৈধ IP ঠিকানা হতে হবে।',
+    'ipv4'      => 'ফিল্ড :attribute অবশ্যই একটি বৈধ IPv4 ঠিকানা হতে হবে।',
+    'ipv6'      => 'ফিল্ড :attribute অবশ্যই একটি বৈধ IPv6 ঠিকানা হতে হবে।',
+    'json'      => 'ফিল্ড :attribute অবশ্যই একটি বৈধ JSON স্ট্রিং হতে হবে।',
+    'lowercase' => 'ফিল্ড :attribute অবশ্যই ছো',
+
+    'lt' => [
+        'array'   => 'ফিল্ড :attribute অবশ্যই :value আইটেমের চেয়ে কম হতে হবে।',
+        'file'    => 'ফিল্ড :attribute অবশ্যই :value কিলোবাইটের চেয়ে ছোট হতে হবে।',
+        'numeric' => 'ফিল্ড :attribute অবশ্যই :value এর চেয়ে ছোট হতে হবে।',
+        'string'  => 'ফিল্ড :attribute অবশ্যই :value অক্ষরের চেয়ে কম হতে হবে।',
+    ],
+
+    'lte' => [
+        'array'   => 'ফিল্ড :attribute অবশ্যই :value আইটেম অথবা তার কম হতে হবে।',
+        'file'    => 'ফিল্ড :attribute অবশ্যই :value কিলোবাইটের চেয়ে ছোট অথবা সমান হতে হবে।',
+        'numeric' => 'ফিল্ড :attribute অবশ্যই :value এর চেয়ে ছোট অথবা সমান হতে হবে।',
+        'string'  => 'ফিল্ড :attribute অবশ্যই :value অক্ষরের চেয়ে কম অথবা সমান হতে হবে।',
+    ],
+
+    'mac_address' => 'ফিল্ড :attribute অবশ্যই একটি বৈধ MAC ঠিকানা হতে হবে।',
+
+    'max' => [
+        'array'   => 'ফিল্ড :attribute অবশ্যই :max আইটেমের বেশি হতে পারবে না।',
+        'file'    => 'ফিল্ড :attribute অবশ্যই :max কিলোবাইটের বেশি হতে পারবে না।',
+        'numeric' => 'ফিল্ড :attribute অবশ্যই :max এর বেশি হতে পারবে না।',
+        'string'  => 'ফিল্ড :attribute অবশ্যই :max অক্ষরের বেশি হতে পারবে না।',
+    ],
+
+    'max_digits' => 'ফিল্ড :attribute অবশ্যই :max ডিজিটের বেশি হতে পারবে না।',
+    'mimes'      => 'ফিল্ড :attribute অবশ্যই নিম্নলিখিত ধরণের ফাইল হতে হবে: :values।',
+    'mimetypes'  => 'ফিল্ড :attribute অবশ্যই নিম্নলিখিত ধরণের ফাইল হতে হবে: :values।',
+
+    'min' => [
+        'array'   => 'ফিল্ড :attribute অবশ্যই অন্তত :min আইটেম থাকতে হবে।',
+        'file'    => 'ফিল্ড :attribute অবশ্যই অন্তত :min কিলোবাইট থাকতে হবে।',
+        'numeric' => 'ফিল্ড :attribute অবশ্যই অন্তত :min থাকতে হবে।',
+        'string'  => 'ফিল্ড :attribute অবশ্যই অন্তত :min অক্ষর থাকতে হবে।',
+    ],
+
+    'min_digits'       => 'ফিল্ড :attribute অবশ্যই অন্তত :min ডিজিট থাকতে হবে।',
+    'missing'          => 'ফিল্ড :attribute অনুপস্থিত হতে হবে।',
+    'missing_if'       => ':other এর মান :value হলে ফিল্ড :attribute অনুপস্থিত হতে হবে।',
+    'missing_unless'   => ':other এর মান :value না হলে ফিল্ড :attribute অনুপস্থিত হতে হবে।',
+    'missing_with'     => ':values উপস্থিত হলে ফিল্ড :attribute অনুপস্থিত হতে হবে।',
+    'missing_with_all' => ':values সবগুলি উপস্থিত হলে ফিল্ড :attribute অনুপস্থিত হতে হবে।',
+    'multiple_of'      => 'ফিল্ড :attribute অবশ্যই :value এর একটি গুণফল হতে হবে।',
+    'not_in'           => 'নির্বাচিত :attribute অবৈধ।',
+    'not_regex'        => 'ফিল্ড :attribute ফরম্যাট অবৈধ।',
+    'numeric'          => 'ফিল্ড :attribute অবশ্যই একটি সংখ্যা হতে হবে।',
+
+    'password' => [
+        'letters'       => 'ফিল্ড :attribute অবশ্যই কমপক্ষে একটি অক্ষর থাকতে হবে।',
+        'mixed'         => 'ফিল্ড :attribute অবশ্যই কমপক্ষে একটি বৃহত্তম এবং একটি ছোট্তম অক্ষর থাকতে হবে।',
+        'numbers'       => 'ফিল্ড :attribute অবশ্যই কমপক্ষে একটি সংখ্যা থাকতে হবে।',
+        'symbols'       => 'ফিল্ড :attribute অবশ্যই কমপক্ষে একটি চিহ্ন থাকতে হবে।',
+        'uncompromised' => 'প্রদত্ত :attribute একটি ডেটা লিকে প্রকাশিত হয়েছে। অনুগ্রহ করে একটি পৃথক :attribute নির্বাচন করুন।',
+    ],
+
+    'present'              => 'ফিল্ড :attribute অবশ্যই উপস্থিত হতে হবে।',
+    'present_if'           => ':other এর মান :value হলে ফিল্ড :attribute অবশ্যই উপস্থিত হতে হবে।',
+    'present_unless'       => ':other এর মান :value না হলে ফিল্ড :attribute অবশ্যই উপস্থিত হতে হবে।',
+    'present_with'         => ':values উপস্থিত হলে ফিল্ড :attribute অবশ্যই উপস্থিত হতে হবে।',
+    'present_with_all'     => ':values সবগুলি উপস্থিত হলে ফিল্ড :attribute অবশ্যই উপস্থিত হতে হবে।',
+    'prohibited'           => 'ফিল্ড :attribute নিষিদ্ধ।',
+    'prohibited_if'        => ':other এর মান :value হলে ফিল্ড :attribute নিষিদ্ধ।',
+    'prohibited_unless'    => ':other অন্তত একটি :values হলে ফিল্ড :attribute নিষিদ্ধ।',
+    'prohibits'            => 'ফিল্ড :attribute :other এর উপস্থিতিকে নিষিদ্ধ করে।',
+    'regex'                => 'ফিল্ড :attribute ফরম্যাট অবৈধ।',
+    'required'             => 'ফিল্ড :attribute প্রয়োজন।',
+    'required_array_keys'  => 'ফিল্ড :attribute অন্তর্ভুক্ত না :values এর জন্য কী দরকার।',
+    'required_if'          => ':other এর মান :value হলে ফিল্ড :attribute প্রয়োজন।',
+    'required_if_accepted' => ':other এর মান গ্রহণ করা হলে ফিল্ড :attribute প্রয়োজন।',
+    'required_unless'      => ':other এর মান :values এর মধ্যে না থাকলে ফিল্ড :attribute প্রয়োজন।',
+    'required_with'        => ':values উপস্থিত হলে ফিল্ড :attribute প্রয়োজন।',
+    'required_with_all'    => ':values সব উপস্থিত হলে ফিল্ড :attribute প্রয়োজন।',
+    'required_without'     => ':values উপস্থিত না হলে ফিল্ড :attribute প্রয়োজন।',
+    'required_without_all' => ':values কোনটি উপস্থিত না হলে ফিল্ড :attribute প্রয়োজন।',
+    'same'                 => 'ফিল্ড :attribute অবশ্যই :other এর সাথে মেলে যাওয়া উচিত।',
+
+    'size' => [
+        'array'   => 'ফিল্ড :attribute অবশ্যই :size আইটেম থাকতে হবে।',
+        'file'    => 'ফিল্ড :attribute অবশ্যই :size কিলোবাইট হতে হবে।',
+        'numeric' => 'ফিল্ড :attribute অবশ্যই :size হতে হবে।',
+        'string'  => 'ফিল্ড :attribute অবশ্যই :size অক্ষর হতে হবে।',
+    ],
+
+    'starts_with' => 'ফিল্ড :attribute অবশ্যই নিম্নলিখিত মধ্যে একটি দিয়ে শুরু হতে হবে: :values।',
+    'string'      => 'ফিল্ড :attribute অবশ্যই একটি স্ট্রিং হতে হবে।',
+    'timezone'    => 'ফিল্ড :attribute অবশ্যই একটি বৈধ সময় অঞ্চল হতে হবে।',
+    'unique'      => 'ফিল্ড :attribute ইতিমধ্যে নেওয়া হয়েছে।',
+    'uploaded'    => 'ফিল্ড :attribute আপলোড করা ব্যর্থ হয়েছে।',
+    'uppercase'   => 'ফিল্ড :attribute অবশ্যই বড় অক্ষরে হতে হবে।',
+    'url'         => 'ফিল্ড :attribute অবশ্যই একটি বৈধ URL হতে হবে।',
+    'ulid'        => 'ফিল্ড :attribute অবশ্যই একটি বৈধ ULID হতে হবে।',
+    'uuid'        => 'ফিল্ড :attribute অবশ্যই একটি বৈধ UUID হতে হবে।',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'কাস্টম-বার্তা',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
lang/ca/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'Aquestes credencials no coincideixen amb els nostres registres.',
+    'password' => 'La contrasenya proporcionada es incorrecta.',
+    'throttle' => 'Massa intents d\'inici de sessió. Si us plau, intenta-ho de nou en :seconds segons.',
+
+];

+ 19 - 0
lang/ca/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'Següent &raquo;',
+    'previous' => '&laquo; Anterior',
+
+];

+ 22 - 0
lang/ca/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'S\'ha restablert la seva contrasenya.',
+    'sent'      => 'Hem enviat l\'enllaç per a restablir la seva contrasenya per correu electrònic.',
+    'throttled' => 'Si us plau, espereu abans de tornar a intentar-ho.',
+    'token'     => 'Aquest token de restabliment de contrasenya no es vàlid.',
+    'user'      => 'No podem trobar un usuari amb aquesta adreça de correu electrònic.',
+
+];

+ 207 - 0
lang/ca/validation.php

@@ -0,0 +1,207 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'        => 'El camp :attribute ha de ser acceptat.',
+    'accepted_if'     => 'El camp :attribute ha de ser acceptat quan :other es :value.',
+    'active_url'      => 'El camp :attribute ha de ser una URL vàlida.',
+    'after'           => 'El camp :attribute ha de ser una data posterior a :date.',
+    'after_or_equal'  => 'El camp :attribute ha de ser una data posterior o igual a :date.',
+    'alpha'           => 'El camp :attribute només ha de contenir lletres.',
+    'alpha_dash'      => 'El camp :attribute només ha de contenir lletres, números, guions y guions baixos.',
+    'alpha_num'       => 'El camp :attribute només ha de contenir lletres y números.',
+    'array'           => 'El camp :attribute ha de ser un array.',
+    'ascii'           => 'El camp :attribute només ha de contenir caracters alfanumérics y símbols de només un byte.',
+    'before'          => 'El camp :attribute ha de ser una data anterior a :date.',
+    'before_or_equal' => 'El camp :attribute ha de ser una data anterior o igual a :date.',
+
+    'between' => [
+        'array'   => 'El camp :attribute ha de tenir entre :min y :max elements.',
+        'file'    => 'El camp :attribute ha de tenir entre :min y :max kilobytes.',
+        'numeric' => 'El camp :attribute ha d\'estar entre :min y :max.',
+        'string'  => 'El camp :attribute ha de tenir entre :min y :max caràcters.',
+    ],
+
+    'boolean'           => 'El camp :attribute ha de ser vertader o falso.',
+    'can'               => 'El camp :attribute conte un valor no autorizado.',
+    'confirmed'         => 'La confirmació del camp :attribute no coincide.',
+    'current_password'  => 'La contraseña es incorrecta.',
+    'date'              => 'El camp :attribute ha de ser una data vàlida.',
+    'date_equals'       => 'El camp :attribute ha de ser una data igual a :date.',
+    'date_format'       => 'El camp :attribute ha de coincidir amb el format :format.',
+    'decimal'           => 'El camp :attribute ha de tenir :decimal posicions decimals.',
+    'declined'          => 'El camp :attribute ha de ser rebutjat.',
+    'declined_if'       => 'El camp :attribute ha de ser rebutjat quan :other es :value.',
+    'different'         => 'El camp :attribute y :other han de ser diferents.',
+    'digits'            => 'El camp :attribute ha de tenir :digits dígits.',
+    'digits_between'    => 'El camp :attribute ha de tenir entre :min y :max dígits.',
+    'dimensions'        => 'El camp :attribute te dimensions d\'imatge no vàlides.',
+    'distinct'          => 'El camp :attribute te un valor duplicat.',
+    'doesnt_end_with'   => 'El camp :attribute no ha d\'acabar amb cap dels següents valors: :values.',
+    'doesnt_start_with' => 'El camp :attribute no ha de començar amb cap dels següents valors: :values.',
+    'email'             => 'El camp :attribute ha de ser una adreça de correu electrònic vàlida.',
+    'ends_with'         => 'El camp :attribute ha d\'acabar amb un dels següents valors: :values.',
+    'enum'              => 'L\'atribut :attribute sel·leccionat es invàlid.',
+    'exists'            => 'L\'atribut :attribute sel·leccionat es invàlid.',
+    'extensions'        => 'El camp :attribute ha de tenir una de las següents extensions: :values.',
+    'file'              => 'El camp :attribute ha de ser un arxiu.',
+    'filled'            => 'El camp :attribute ha de tenir un valor.',
+
+    'gt' => [
+        'array'   => 'El camp :attribute ha de tenir més de :value elements.',
+        'file'    => 'El camp :attribute ha de ser més gran que :value kilobytes.',
+        'numeric' => 'El camp :attribute ha de ser més gran que :value.',
+        'string'  => 'El camp :attribute ha de tenir més de :value caràcters.',
+    ],
+
+    'gte' => [
+        'array'   => 'El camp :attribute ha de tenir :value elements o més.',
+        'file'    => 'El camp :attribute ha de ser més gran o igual que :value kilobytes.',
+        'numeric' => 'El camp :attribute ha de ser més gran o igual que :value.',
+        'string'  => 'El camp :attribute ha de tenir :value caràcters o més.',
+    ],
+
+    'hex_color' => 'El camp :attribute ha de ser un color hexadecimal válido.',
+    'image'     => 'El camp :attribute ha de ser una  .',
+    'in'        => 'El :attribute sel·leccionat es invàlid.',
+    'in_array'  => 'El camp :attribute ha d\'existir en :other.',
+    'integer'   => 'El camp :attribute ha de ser un número enter.',
+    'ip'        => 'El camp :attribute ha de ser una adreça IP vàlida.',
+    'ipv4'      => 'El camp :attribute ha de ser una adreça IPv4 vàlida.',
+    'ipv6'      => 'El camp :attribute ha de ser una adreça IPv6 vàlida.',
+    'json'      => 'El camp :attribute ha de ser una cadena JSON vàlida.',
+    'lowercase' => 'El camp :attribute ha d\'estar en minúsculas.',
+
+    'lt' => [
+        'array'   => 'El camp :attribute ha de tenir menys de :value elements.',
+        'file'    => 'El camp :attribute ha de ser menor que :value kilobytes.',
+        'numeric' => 'El camp :attribute ha de ser menor que :value.',
+        'string'  => 'El camp :attribute ha de tenir menys de :value caràcters.',
+    ],
+
+    'lte' => [
+        'array'   => 'El camp :attribute no ha de tenir més de :value elements.',
+        'file'    => 'El camp :attribute ha de ser menor o igual que :value kilobytes.',
+        'numeric' => 'El camp :attribute ha de ser menor o igual que :value.',
+        'string'  => 'El camp :attribute ha de ser menor o igual que :value caràcters.',
+    ],
+
+    'mac_address' => 'El camp :attribute ha de ser una adreça MAC vàlida.',
+
+    'max' => [
+        'array'   => 'El camp :attribute no ha de tenir més de :max elements.',
+        'file'    => 'El camp :attribute no ha de ser més gran que :max kilobytes.',
+        'numeric' => 'El camp :attribute no ha de ser més gran que :max.',
+        'string'  => 'El camp :attribute no ha de ser més gran que :max caràcters.',
+    ],
+
+    'max_digits'       => 'El camp :attribute no ha de tenir més de :max dígitos.',
+    'mimes'            => 'El camp :attribute ha de ser un archivo de tipo: :values.',
+    'mimetypes'        => 'El camp :attribute ha de ser un archivo de tipo: :values.',
+
+    'min' => [
+        'array'   => 'El camp :attribute ha de tenir al menys :min elements.',
+        'file'    => 'El camp :attribute ha de ser de al menys :min kilobytes.',
+        'numeric' => 'El camp :attribute ha de ser de al menys :min.',
+        'string'  => 'El camp :attribute ha de tenir al menys :min caràcters.',
+    ],
+
+    'min_digits'       => 'El camp :attribute ha de tenir al menys :min dígits.',
+    'missing'          => 'El camp :attribute ha de faltar.',
+    'missing_if'       => 'El camp :attribute ha de faltar quan :other es :value.',
+    'missing_unless'   => 'El camp :attribute ha de faltar a menys que :other sea :value.',
+    'missing_with'     => 'El camp :attribute ha de faltar quan :values està present.',
+    'missing_with_all' => 'El camp :attribute ha de faltar quan :values estàn presents.',
+    'multiple_of'      => 'El camp :attribute ha de ser un múltiple de :value.',
+    'not_in'           => 'El :attribute sel·leccionat es invàlid.',
+    'not_regex'        => 'El format del camp :attribute es invàlid.',
+    'numeric'          => 'El camp :attribute ha de ser un número.',
+
+    'password' => [
+        'letters'       => 'El camp :attribute ha de contenir al menys una letra.',
+        'mixed'         => 'El camp :attribute ha de contenir al menys una letra majscula y una minúscula.',
+        'numbers'       => 'El camp :attribute ha de contenir al menys un número.',
+        'symbols'       => 'El camp :attribute ha de contenir al menys un símbol.',
+        'uncompromised' => 'L\'atribut :attribute donat ha aparegut en una filtració de dades. Si us plau, trii un :attribute diferent.',
+    ],
+
+    'present'              => 'El camp :attribute ha d\'estar present.',
+    'present_if'           => 'El camp :attribute ha d\'estar present quan :other es :value.',
+    'present_unless'       => 'El camp :attribute ha d\'estar present a menys que :other sea :value.',
+    'present_with'         => 'El camp :attribute ha d\'estar present quan :values està present.',
+    'present_with_all'     => 'El camp :attribute ha d\'estar present quan :values estàn presents.',
+    'prohibited'           => 'El camp :attribute està prohibit.',
+    'prohibited_if'        => 'El camp :attribute està prohibit quan :other es :value.',
+    'prohibited_unless'    => 'El camp :attribute està prohibit a menys que :other esté en :values.',
+    'prohibits'            => 'El camp :attribute prohíbe que :other esté present.',
+    'regex'                => 'El formato del camp :attribute es invàlid.',
+    'required'             => 'El camp :attribute es obligatòri.',
+    'required_array_keys'  => 'El camp :attribute ha de contenir entrades para: :values.',
+    'required_if'          => 'El camp :attribute es obligatòri quan :other es :value.',
+    'required_if_accepted' => 'El camp :attribute es obligatòri quan :other es acceptat.',
+    'required_unless'      => 'El camp :attribute es obligatòri a menys que :other esté en :values.',
+    'required_with'        => 'El camp :attribute es obligatòri quan :values està present.',
+    'required_with_all'    => 'El camp :attribute es obligatòri quan :values están presents.',
+    'required_without'     => 'El camp :attribute es obligatòri quan :values no està present.',
+    'required_without_all' => 'El camp :attribute es obligatòri quan cap dels :values està present.',
+    'same'                 => 'El camp :attribute ha de coincidir amb :other.',
+
+    'size' => [
+        'array'   => 'El camp :attribute ha de contenir :size elements.',
+        'file'    => 'El camp :attribute ha de tenir :size kilobytes.',
+        'numeric' => 'El camp :attribute ha de ser :size.',
+        'string'  => 'El camp :attribute ha de tenir :size caràcters.',
+    ],
+
+    'starts_with' => 'El camp :attribute ha de empezar amb uno dels següents valores: :values.',
+    'string'      => 'El camp :attribute ha de ser una cadena de texto.',
+    'timezone'    => 'El camp :attribute ha de ser una zona horaria vàlida.',
+    'unique'      => 'L\'atribut :attribute ya ha sido tomado.',
+    'uploaded'    => 'La càrrerga de l\'atribut :attribute falló.',
+    'uppercase'   => 'El camp :attribute ha d\'estar en majúscules.',
+    'url'         => 'El camp :attribute ha de ser una URL vàlida.',
+    'ulid'        => 'El camp :attribute ha de ser un ULID válid.',
+    'uuid'        => 'El camp :attribute ha de ser un UUID válid.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'missatge personalitzat',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
lang/de/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'Diese Anmeldeinformationen stimmen nicht mit unseren Aufzeichnungen überein.',
+    'password' => 'Das angegebene Passwort ist falsch.',
+    'throttle' => 'Zu viele Anmeldeversuche. Bitte versuchen Sie es in :seconds Sekunden erneut.',
+
+];

+ 19 - 0
lang/de/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'Weiter &raquo;',
+    'previous' => '&laquo; Zurück',
+
+];

+ 22 - 0
lang/de/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'Ihr Passwort wurde zurückgesetzt.',
+    'sent'      => 'Wir haben Ihren Passwort-Zurücksetzungslink per E-Mail gesendet.',
+    'throttled' => 'Bitte warten Sie, bevor Sie es erneut versuchen.',
+    'token'     => 'Dieses Passwort-Zurücksetzungs-Token ist ungültig.',
+    'user'      => 'Wir können keinen Benutzer mit dieser E-Mail-Adresse finden.',
+
+];

+ 207 - 0
lang/de/validation.php

@@ -0,0 +1,207 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'        => 'Das Feld :attribute muss akzeptiert werden.',
+    'accepted_if'     => 'Das Feld :attribute muss akzeptiert werden, wenn :other :value ist.',
+    'active_url'      => 'Das Feld :attribute muss eine gültige URL sein.',
+    'after'           => 'Das Feld :attribute muss ein Datum nach :date sein.',
+    'after_or_equal'  => 'Das Feld :attribute muss ein Datum nach oder gleich :date sein.',
+    'alpha'           => 'Das Feld :attribute darf nur Buchstaben enthalten.',
+    'alpha_dash'      => 'Das Feld :attribute darf nur Buchstaben, Zahlen, Bindestriche und Unterstriche enthalten.',
+    'alpha_num'       => 'Das Feld :attribute darf nur Buchstaben und Zahlen enthalten.',
+    'array'           => 'Das Feld :attribute muss ein Array sein.',
+    'ascii'           => 'Das Feld :attribute darf nur ein Byte umfassende alphanumerische Zeichen und Symbole enthalten.',
+    'before'          => 'Das Feld :attribute muss ein Datum vor :date sein.',
+    'before_or_equal' => 'Das Feld :attribute muss ein Datum vor oder gleich :date sein.',
+
+    'between' => [
+        'array'   => 'Das Feld :attribute muss zwischen :min und :max Elemente haben.',
+        'file'    => 'Das Feld :attribute muss zwischen :min und :max Kilobytes groß sein.',
+        'numeric' => 'Das Feld :attribute muss zwischen :min und :max liegen.',
+        'string'  => 'Das Feld :attribute muss zwischen :min und :max Zeichen lang sein.',
+    ],
+
+    'boolean'           => 'Das Feld :attribute muss true oder false sein.',
+    'can'               => 'Das Feld :attribute enthält einen unautorisierten Wert.',
+    'confirmed'         => 'Die Bestätigung des Feldes :attribute stimmt nicht überein.',
+    'current_password'  => 'Das Passwort ist falsch.',
+    'date'              => 'Das Feld :attribute muss ein gültiges Datum sein.',
+    'date_equals'       => 'Das Feld :attribute muss ein Datum gleich :date sein.',
+    'date_format'       => 'Das Feld :attribute muss das Format :format haben.',
+    'decimal'           => 'Das Feld :attribute muss :decimal Dezimalstellen haben.',
+    'declined'          => 'Das Feld :attribute muss abgelehnt werden.',
+    'declined_if'       => 'Das Feld :attribute muss abgelehnt werden, wenn :other :value ist.',
+    'different'         => 'Das Feld :attribute und :other müssen sich unterscheiden.',
+    'digits'            => 'Das Feld :attribute muss :digits Ziffern haben.',
+    'digits_between'    => 'Das Feld :attribute muss zwischen :min und :max Ziffern haben.',
+    'dimensions'        => 'Das Feld :attribute hat ungültige Bildabmessungen.',
+    'distinct'          => 'Das Feld :attribute hat einen doppelten Wert.',
+    'doesnt_end_with'   => 'Das Feld :attribute darf nicht mit einem der folgenden enden: :values.',
+    'doesnt_start_with' => 'Das Feld :attribute darf nicht mit einem der folgenden beginnen: :values.',
+    'email'             => 'Das Feld :attribute muss eine gültige E-Mail-Adresse sein.',
+    'ends_with'         => 'Das Feld :attribute muss mit einem der folgenden enden: :values.',
+    'enum'              => 'Die ausgewählte :attribute ist ungültig.',
+    'exists'            => 'Die ausgewählte :attribute ist ungültig.',
+    'extensions'        => 'Das Feld :attribute muss eine der folgenden Erweiterungen haben: :values.',
+    'file'              => 'Das Feld :attribute muss eine Datei sein.',
+    'filled'            => 'Das Feld :attribute muss einen Wert haben.',
+
+    'gt' => [
+        'array'   => 'Das Feld :attribute muss mehr als :value Elemente haben.',
+        'file'    => 'Das Feld :attribute muss größer als :value Kilobytes sein.',
+        'numeric' => 'Das Feld :attribute muss größer als :value sein.',
+        'string'  => 'Das Feld :attribute muss mehr als :value Zeichen haben.',
+    ],
+
+    'gte' => [
+        'array'   => 'Das Feld :attribute muss :value Elemente oder mehr haben.',
+        'file'    => 'Das Feld :attribute muss größer oder gleich :value Kilobytes sein.',
+        'numeric' => 'Das Feld :attribute muss größer oder gleich :value sein.',
+        'string'  => 'Das Feld :attribute muss größer oder gleich :value Zeichen haben.',
+    ],
+
+    'hex_color' => 'Das Feld :attribute muss eine gültige hexadezimale Farbe sein.',
+    'image'     => 'Das Feld :attribute muss ein Bild sein.',
+    'in'        => 'Die ausgewählte :attribute ist ungültig.',
+    'in_array'  => 'Das Feld :attribute muss in :other existieren.',
+    'integer'   => 'Das Feld :attribute muss eine ganze Zahl sein.',
+    'ip'        => 'Das Feld :attribute muss eine gültige IP-Adresse sein.',
+    'ipv4'      => 'Das Feld :attribute muss eine gültige IPv4-Adresse sein.',
+    'ipv6'      => 'Das Feld :attribute muss eine gültige IPv6-Adresse sein.',
+    'json'      => 'Das Feld :attribute muss ein gültiger JSON-String sein.',
+    'lowercase' => 'Das Feld :attribute muss in Kleinbuchstaben sein.',
+
+    'lt' => [
+        'array'   => 'Das Feld :attribute muss weniger als :value Elemente haben.',
+        'file'    => 'Das Feld :attribute muss kleiner als :value Kilobytes sein.',
+        'numeric' => 'Das Feld :attribute muss kleiner als :value sein.',
+        'string'  => 'Das Feld :attribute muss weniger als :value Zeichen haben.',
+    ],
+
+    'lte' => [
+        'array'   => 'Das Feld :attribute darf nicht mehr als :value Elemente haben.',
+        'file'    => 'Das Feld :attribute muss kleiner oder gleich :value Kilobytes sein.',
+        'numeric' => 'Das Feld :attribute muss kleiner oder gleich :value sein.',
+        'string'  => 'Das Feld :attribute muss kleiner oder gleich :value Zeichen haben.',
+    ],
+
+    'mac_address' => 'Das Feld :attribute muss eine gültige MAC-Adresse sein.',
+
+    'max' => [
+        'array'   => 'Das Feld :attribute darf nicht mehr als :max Elemente haben.',
+        'file'    => 'Das Feld :attribute darf nicht größer als :max Kilobytes sein.',
+        'numeric' => 'Das Feld :attribute darf nicht größer als :max sein.',
+        'string'  => 'Das Feld :attribute darf nicht größer als :max Zeichen sein.',
+    ],
+
+    'max_digits' => 'Das Feld :attribute darf nicht mehr als :max Ziffern haben.',
+    'mimes'      => 'Das Feld :attribute muss eine Datei vom Typ: :values sein.',
+    'mimetypes'  => 'Das Feld :attribute muss eine Datei vom Typ: :values sein.',
+
+    'min' => [
+        'array'   => 'Das Feld :attribute muss mindestens :min Elemente haben.',
+        'file'    => 'Das Feld :attribute muss mindestens :min Kilobytes groß sein.',
+        'numeric' => 'Das Feld :attribute muss mindestens :min sein.',
+        'string'  => 'Das Feld :attribute muss mindestens :min Zeichen haben.',
+    ],
+
+    'min_digits'       => 'Das Feld :attribute muss mindestens :min Ziffern haben.',
+    'missing'          => 'Das Feld :attribute muss fehlen.',
+    'missing_if'       => 'Das Feld :attribute muss fehlen, wenn :other :value ist.',
+    'missing_unless'   => 'Das Feld :attribute muss fehlen, es sei denn, :other ist :value.',
+    'missing_with'     => 'Das Feld :attribute muss fehlen, wenn :values vorhanden sind.',
+    'missing_with_all' => 'Das Feld :attribute muss fehlen, wenn :values vorhanden sind.',
+    'multiple_of'      => 'Das Feld :attribute muss ein Vielfaches von :value sein.',
+    'not_in'           => 'Die ausgewählte :attribute ist ungültig.',
+    'not_regex'        => 'Das Format des Feldes :attribute ist ungültig.',
+    'numeric'          => 'Das Feld :attribute muss eine Zahl sein.',
+
+    'password' => [
+        'letters'       => 'Das Feld :attribute muss mindestens einen Buchstaben enthalten.',
+        'mixed'         => 'Das Feld :attribute muss mindestens einen Großbuchstaben und einen Kleinbuchstaben enthalten.',
+        'numbers'       => 'Das Feld :attribute muss mindestens eine Zahl enthalten.',
+        'symbols'       => 'Das Feld :attribute muss mindestens ein Symbol enthalten.',
+        'uncompromised' => 'Das angegebene :attribute ist in einem Datenleck aufgetreten. Bitte wählen Sie ein anderes :attribute.',
+    ],
+
+    'present'              => 'Das Feld :attribute muss vorhanden sein.',
+    'present_if'           => 'Das Feld :attribute muss vorhanden sein, wenn :other :value ist.',
+    'present_unless'       => 'Das Feld :attribute muss vorhanden sein, es sei denn, :other ist :value.',
+    'present_with'         => 'Das Feld :attribute muss vorhanden sein, wenn :values vorhanden ist.',
+    'present_with_all'     => 'Das Feld :attribute muss vorhanden sein, wenn :values vorhanden sind.',
+    'prohibited'           => 'Das Feld :attribute ist verboten.',
+    'prohibited_if'        => 'Das Feld :attribute ist verboten, wenn :other :value ist.',
+    'prohibited_unless'    => 'Das Feld :attribute ist verboten, es sei denn, :other ist in :values.',
+    'prohibits'            => 'Das Feld :attribute verbietet :other.',
+    'regex'                => 'Das Format des Feldes :attribute ist ungültig.',
+    'required'             => 'Das Feld :attribute ist erforderlich.',
+    'required_array_keys'  => 'Das Feld :attribute muss Einträge für: :values enthalten.',
+    'required_if'          => 'Das Feld :attribute ist erforderlich, wenn :other :value ist.',
+    'required_if_accepted' => 'Das Feld :attribute ist erforderlich, wenn :other akzeptiert wird.',
+    'required_unless'      => 'Das Feld :attribute ist erforderlich, es sei denn, :other ist in :values.',
+    'required_with'        => 'Das Feld :attribute ist erforderlich, wenn :values vorhanden ist.',
+    'required_with_all'    => 'Das Feld :attribute ist erforderlich, wenn :values vorhanden sind.',
+    'required_without'     => 'Das Feld :attribute ist erforderlich, wenn :values nicht vorhanden ist.',
+    'required_without_all' => 'Das Feld :attribute ist erforderlich, wenn keine der :values vorhanden ist.',
+    'same'                 => 'Das Feld :attribute muss mit :other übereinstimmen.',
+
+    'size' => [
+        'array'   => 'Das Feld :attribute muss :size Elemente enthalten.',
+        'file'    => 'Das Feld :attribute muss :size Kilobytes groß sein.',
+        'numeric' => 'Das Feld :attribute muss :size sein.',
+        'string'  => 'Das Feld :attribute muss :size Zeichen haben.',
+    ],
+
+    'starts_with' => 'Das Feld :attribute muss mit einem der folgenden beginnen: :values.',
+    'string'      => 'Das Feld :attribute muss ein String sein.',
+    'timezone'    => 'Das Feld :attribute muss eine gültige Zeitzone sein.',
+    'unique'      => 'Das :attribute wurde bereits verwendet.',
+    'uploaded'    => 'Das :attribute konnte nicht hochgeladen werden.',
+    'uppercase'   => 'Das Feld :attribute muss großgeschrieben sein.',
+    'url'         => 'Das Feld :attribute muss eine gültige URL sein.',
+    'ulid'        => 'Das Feld :attribute muss eine gültige ULID sein.',
+    'uuid'        => 'Das Feld :attribute muss eine gültige UUID sein.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'benutzerdefinierte Nachricht',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
lang/en/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'These credentials do not match our records.',
+    'password' => 'The provided password is incorrect.',
+    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
+
+];

+ 19 - 0
lang/en/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'Next &raquo;',
+    'previous' => '&laquo; Previous',
+
+];

+ 22 - 0
lang/en/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'Your password has been reset.',
+    'sent'      => 'We have emailed your password reset link.',
+    'throttled' => 'Please wait before retrying.',
+    'token'     => 'This password reset token is invalid.',
+    'user'      => "We can't find a user with that email address.",
+
+];

+ 207 - 0
lang/en/validation.php

@@ -0,0 +1,207 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'        => 'The :attribute field must be accepted.',
+    'accepted_if'     => 'The :attribute field must be accepted when :other is :value.',
+    'active_url'      => 'The :attribute field must be a valid URL.',
+    'after'           => 'The :attribute field must be a date after :date.',
+    'after_or_equal'  => 'The :attribute field must be a date after or equal to :date.',
+    'alpha'           => 'The :attribute field must only contain letters.',
+    'alpha_dash'      => 'The :attribute field must only contain letters, numbers, dashes, and underscores.',
+    'alpha_num'       => 'The :attribute field must only contain letters and numbers.',
+    'array'           => 'The :attribute field must be an array.',
+    'ascii'           => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
+    'before'          => 'The :attribute field must be a date before :date.',
+    'before_or_equal' => 'The :attribute field must be a date before or equal to :date.',
+
+    'between' => [
+        'array'   => 'The :attribute field must have between :min and :max items.',
+        'file'    => 'The :attribute field must be between :min and :max kilobytes.',
+        'numeric' => 'The :attribute field must be between :min and :max.',
+        'string'  => 'The :attribute field must be between :min and :max characters.',
+    ],
+
+    'boolean'           => 'The :attribute field must be true or false.',
+    'can'               => 'The :attribute field contains an unauthorized value.',
+    'confirmed'         => 'The :attribute field confirmation does not match.',
+    'current_password'  => 'The password is incorrect.',
+    'date'              => 'The :attribute field must be a valid date.',
+    'date_equals'       => 'The :attribute field must be a date equal to :date.',
+    'date_format'       => 'The :attribute field must match the format :format.',
+    'decimal'           => 'The :attribute field must have :decimal decimal places.',
+    'declined'          => 'The :attribute field must be declined.',
+    'declined_if'       => 'The :attribute field must be declined when :other is :value.',
+    'different'         => 'The :attribute field and :other must be different.',
+    'digits'            => 'The :attribute field must be :digits digits.',
+    'digits_between'    => 'The :attribute field must be between :min and :max digits.',
+    'dimensions'        => 'The :attribute field has invalid image dimensions.',
+    'distinct'          => 'The :attribute field has a duplicate value.',
+    'doesnt_end_with'   => 'The :attribute field must not end with one of the following: :values.',
+    'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',
+    'email'             => 'The :attribute field must be a valid email address.',
+    'ends_with'         => 'The :attribute field must end with one of the following: :values.',
+    'enum'              => 'The selected :attribute is invalid.',
+    'exists'            => 'The selected :attribute is invalid.',
+    'extensions'        => 'The :attribute field must have one of the following extensions: :values.',
+    'file'              => 'The :attribute field must be a file.',
+    'filled'            => 'The :attribute field must have a value.',
+
+    'gt' => [
+        'array'   => 'The :attribute field must have more than :value items.',
+        'file'    => 'The :attribute field must be greater than :value kilobytes.',
+        'numeric' => 'The :attribute field must be greater than :value.',
+        'string'  => 'The :attribute field must be greater than :value characters.',
+    ],
+
+    'gte' => [
+        'array'   => 'The :attribute field must have :value items or more.',
+        'file'    => 'The :attribute field must be greater than or equal to :value kilobytes.',
+        'numeric' => 'The :attribute field must be greater than or equal to :value.',
+        'string'  => 'The :attribute field must be greater than or equal to :value characters.',
+    ],
+
+    'hex_color' => 'The :attribute field must be a valid hexadecimal color.',
+    'image'     => 'The :attribute field must be an image.',
+    'in'        => 'The selected :attribute is invalid.',
+    'in_array'  => 'The :attribute field must exist in :other.',
+    'integer'   => 'The :attribute field must be an integer.',
+    'ip'        => 'The :attribute field must be a valid IP address.',
+    'ipv4'      => 'The :attribute field must be a valid IPv4 address.',
+    'ipv6'      => 'The :attribute field must be a valid IPv6 address.',
+    'json'      => 'The :attribute field must be a valid JSON string.',
+    'lowercase' => 'The :attribute field must be lowercase.',
+
+    'lt' => [
+        'array'   => 'The :attribute field must have less than :value items.',
+        'file'    => 'The :attribute field must be less than :value kilobytes.',
+        'numeric' => 'The :attribute field must be less than :value.',
+        'string'  => 'The :attribute field must be less than :value characters.',
+    ],
+
+    'lte' => [
+        'array'   => 'The :attribute field must not have more than :value items.',
+        'file'    => 'The :attribute field must be less than or equal to :value kilobytes.',
+        'numeric' => 'The :attribute field must be less than or equal to :value.',
+        'string'  => 'The :attribute field must be less than or equal to :value characters.',
+    ],
+
+    'mac_address' => 'The :attribute field must be a valid MAC address.',
+
+    'max' => [
+        'array'   => 'The :attribute field must not have more than :max items.',
+        'file'    => 'The :attribute field must not be greater than :max kilobytes.',
+        'numeric' => 'The :attribute field must not be greater than :max.',
+        'string'  => 'The :attribute field must not be greater than :max characters.',
+    ],
+
+    'max_digits' => 'The :attribute field must not have more than :max digits.',
+    'mimes'      => 'The :attribute field must be a file of type: :values.',
+    'mimetypes'  => 'The :attribute field must be a file of type: :values.',
+
+    'min' => [
+        'array'   => 'The :attribute field must have at least :min items.',
+        'file'    => 'The :attribute field must be at least :min kilobytes.',
+        'numeric' => 'The :attribute field must be at least :min.',
+        'string'  => 'The :attribute field must be at least :min characters.',
+    ],
+
+    'min_digits'       => 'The :attribute field must have at least :min digits.',
+    'missing'          => 'The :attribute field must be missing.',
+    'missing_if'       => 'The :attribute field must be missing when :other is :value.',
+    'missing_unless'   => 'The :attribute field must be missing unless :other is :value.',
+    'missing_with'     => 'The :attribute field must be missing when :values is present.',
+    'missing_with_all' => 'The :attribute field must be missing when :values are present.',
+    'multiple_of'      => 'The :attribute field must be a multiple of :value.',
+    'not_in'           => 'The selected :attribute is invalid.',
+    'not_regex'        => 'The :attribute field format is invalid.',
+    'numeric'          => 'The :attribute field must be a number.',
+
+    'password' => [
+        'letters'       => 'The :attribute field must contain at least one letter.',
+        'mixed'         => 'The :attribute field must contain at least one uppercase and one lowercase letter.',
+        'numbers'       => 'The :attribute field must contain at least one number.',
+        'symbols'       => 'The :attribute field must contain at least one symbol.',
+        'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
+    ],
+
+    'present'              => 'The :attribute field must be present.',
+    'present_if'           => 'The :attribute field must be present when :other is :value.',
+    'present_unless'       => 'The :attribute field must be present unless :other is :value.',
+    'present_with'         => 'The :attribute field must be present when :values is present.',
+    'present_with_all'     => 'The :attribute field must be present when :values are present.',
+    'prohibited'           => 'The :attribute field is prohibited.',
+    'prohibited_if'        => 'The :attribute field is prohibited when :other is :value.',
+    'prohibited_unless'    => 'The :attribute field is prohibited unless :other is in :values.',
+    'prohibits'            => 'The :attribute field prohibits :other from being present.',
+    'regex'                => 'The :attribute field format is invalid.',
+    'required'             => 'The :attribute field is required.',
+    'required_array_keys'  => 'The :attribute field must contain entries for: :values.',
+    'required_if'          => 'The :attribute field is required when :other is :value.',
+    'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
+    'required_unless'      => 'The :attribute field is required unless :other is in :values.',
+    'required_with'        => 'The :attribute field is required when :values is present.',
+    'required_with_all'    => 'The :attribute field is required when :values are present.',
+    'required_without'     => 'The :attribute field is required when :values is not present.',
+    'required_without_all' => 'The :attribute field is required when none of :values are present.',
+    'same'                 => 'The :attribute field must match :other.',
+
+    'size' => [
+        'array'   => 'The :attribute field must contain :size items.',
+        'file'    => 'The :attribute field must be :size kilobytes.',
+        'numeric' => 'The :attribute field must be :size.',
+        'string'  => 'The :attribute field must be :size characters.',
+    ],
+
+    'starts_with' => 'The :attribute field must start with one of the following: :values.',
+    'string'      => 'The :attribute field must be a string.',
+    'timezone'    => 'The :attribute field must be a valid timezone.',
+    'unique'      => 'The :attribute has already been taken.',
+    'uploaded'    => 'The :attribute failed to upload.',
+    'uppercase'   => 'The :attribute field must be uppercase.',
+    'url'         => 'The :attribute field must be a valid URL.',
+    'ulid'        => 'The :attribute field must be a valid ULID.',
+    'uuid'        => 'The :attribute field must be a valid UUID.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'custom-message',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
lang/es/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'Estas credenciales no coinciden con nuestros registros.',
+    'password' => 'La contraseña proporcionada es incorrecta.',
+    'throttle' => 'Demasiados intentos de inicio de sesión. Por favor, inténtalo de nuevo en :seconds segundos.',
+
+];

+ 19 - 0
lang/es/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'Siguiente &raquo;',
+    'previous' => '&laquo; Anterior',
+
+];

+ 22 - 0
lang/es/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'Se ha restablecido su contraseña.',
+    'sent'      => 'Hemos enviado el enlace para restablecer su contraseña por correo electrónico.',
+    'throttled' => 'Por favor, espere antes de volver a intentarlo.',
+    'token'     => 'Este token de restablecimiento de contraseña no es válido.',
+    'user'      => 'No podemos encontrar un usuario con esa dirección de correo electrónico.',
+
+];

+ 207 - 0
lang/es/validation.php

@@ -0,0 +1,207 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'        => 'El campo :attribute debe ser aceptado.',
+    'accepted_if'     => 'El campo :attribute debe ser aceptado cuando :other es :value.',
+    'active_url'      => 'El campo :attribute debe ser una URL válida.',
+    'after'           => 'El campo :attribute debe ser una fecha posterior a :date.',
+    'after_or_equal'  => 'El campo :attribute debe ser una fecha posterior o igual a :date.',
+    'alpha'           => 'El campo :attribute solo debe contener letras.',
+    'alpha_dash'      => 'El campo :attribute solo debe contener letras, números, guiones y guiones bajos.',
+    'alpha_num'       => 'El campo :attribute solo debe contener letras y números.',
+    'array'           => 'El campo :attribute debe ser un array.',
+    'ascii'           => 'El campo :attribute solo debe contener caracteres alfanuméricos y símbolos de un solo byte.',
+    'before'          => 'El campo :attribute debe ser una fecha anterior a :date.',
+    'before_or_equal' => 'El campo :attribute debe ser una fecha anterior o igual a :date.',
+
+    'between' => [
+        'array'   => 'El campo :attribute debe tener entre :min y :max elementos.',
+        'file'    => 'El campo :attribute debe tener entre :min y :max kilobytes.',
+        'numeric' => 'El campo :attribute debe estar entre :min y :max.',
+        'string'  => 'El campo :attribute debe tener entre :min y :max caracteres.',
+    ],
+
+    'boolean'           => 'El campo :attribute debe ser verdadero o falso.',
+    'can'               => 'El campo :attribute contiene un valor no autorizado.',
+    'confirmed'         => 'La confirmación del campo :attribute no coincide.',
+    'current_password'  => 'La contraseña es incorrecta.',
+    'date'              => 'El campo :attribute debe ser una fecha válida.',
+    'date_equals'       => 'El campo :attribute debe ser una fecha igual a :date.',
+    'date_format'       => 'El campo :attribute debe coincidir con el formato :format.',
+    'decimal'           => 'El campo :attribute debe tener :decimal lugares decimales.',
+    'declined'          => 'El campo :attribute debe ser rechazado.',
+    'declined_if'       => 'El campo :attribute debe ser rechazado cuando :other es :value.',
+    'different'         => 'El campo :attribute y :other deben ser diferentes.',
+    'digits'            => 'El campo :attribute debe tener :digits dígitos.',
+    'digits_between'    => 'El campo :attribute debe tener entre :min y :max dígitos.',
+    'dimensions'        => 'El campo :attribute tiene dimensiones de imagen no válidas.',
+    'distinct'          => 'El campo :attribute tiene un valor duplicado.',
+    'doesnt_end_with'   => 'El campo :attribute no debe terminar con ninguno de los siguientes: :values.',
+    'doesnt_start_with' => 'El campo :attribute no debe comenzar con ninguno de los siguientes: :values.',
+    'email'             => 'El campo :attribute debe ser una dirección de correo electrónico válida.',
+    'ends_with'         => 'El campo :attribute debe terminar con uno de los siguientes: :values.',
+    'enum'              => 'El :attribute seleccionado es inválido.',
+    'exists'            => 'El :attribute seleccionado es inválido.',
+    'extensions'        => 'El campo :attribute debe tener una de las siguientes extensiones: :values.',
+    'file'              => 'El campo :attribute debe ser un archivo.',
+    'filled'            => 'El campo :attribute debe tener un valor.',
+
+    'gt' => [
+        'array'   => 'El campo :attribute debe tener más de :value elementos.',
+        'file'    => 'El campo :attribute debe ser mayor que :value kilobytes.',
+        'numeric' => 'El campo :attribute debe ser mayor que :value.',
+        'string'  => 'El campo :attribute debe tener más de :value caracteres.',
+    ],
+
+    'gte' => [
+        'array'   => 'El campo :attribute debe tener :value elementos o más.',
+        'file'    => 'El campo :attribute debe ser mayor o igual que :value kilobytes.',
+        'numeric' => 'El campo :attribute debe ser mayor o igual que :value.',
+        'string'  => 'El campo :attribute debe tener :value caracteres o más.',
+    ],
+
+    'hex_color' => 'El campo :attribute debe ser un color hexadecimal válido.',
+    'image'     => 'El campo :attribute debe ser una imagen.',
+    'in'        => 'El :attribute seleccionado es inválido.',
+    'in_array'  => 'El campo :attribute debe existir en :other.',
+    'integer'   => 'El campo :attribute debe ser un número entero.',
+    'ip'        => 'El campo :attribute debe ser una dirección IP válida.',
+    'ipv4'      => 'El campo :attribute debe ser una dirección IPv4 válida.',
+    'ipv6'      => 'El campo :attribute debe ser una dirección IPv6 válida.',
+    'json'      => 'El campo :attribute debe ser una cadena JSON válida.',
+    'lowercase' => 'El campo :attribute debe estar en minúsculas.',
+
+    'lt' => [
+        'array'   => 'El campo :attribute debe tener menos de :value elementos.',
+        'file'    => 'El campo :attribute debe ser menor que :value kilobytes.',
+        'numeric' => 'El campo :attribute debe ser menor que :value.',
+        'string'  => 'El campo :attribute debe tener menos de :value caracteres.',
+    ],
+
+    'lte' => [
+        'array'   => 'El campo :attribute no debe tener más de :value elementos.',
+        'file'    => 'El campo :attribute debe ser menor o igual que :value kilobytes.',
+        'numeric' => 'El campo :attribute debe ser menor o igual que :value.',
+        'string'  => 'El campo :attribute debe ser menor o igual que :value caracteres.',
+    ],
+
+    'mac_address' => 'El campo :attribute debe ser una dirección MAC válida.',
+
+    'max' => [
+        'array'   => 'El campo :attribute no debe tener más de :max elementos.',
+        'file'    => 'El campo :attribute no debe ser mayor que :max kilobytes.',
+        'numeric' => 'El campo :attribute no debe ser mayor que :max.',
+        'string'  => 'El campo :attribute no debe ser mayor que :max caracteres.',
+    ],
+
+    'max_digits'       => 'El campo :attribute no debe tener más de :max dígitos.',
+    'mimes'            => 'El campo :attribute debe ser un archivo de tipo: :values.',
+    'mimetypes'        => 'El campo :attribute debe ser un archivo de tipo: :values.',
+
+    'min' => [
+        'array'   => 'El campo :attribute debe tener al menos :min elementos.',
+        'file'    => 'El campo :attribute debe ser de al menos :min kilobytes.',
+        'numeric' => 'El campo :attribute debe ser de al menos :min.',
+        'string'  => 'El campo :attribute debe tener al menos :min caracteres.',
+    ],
+
+    'min_digits'       => 'El campo :attribute debe tener al menos :min dígitos.',
+    'missing'          => 'El campo :attribute debe faltar.',
+    'missing_if'       => 'El campo :attribute debe faltar cuando :other es :value.',
+    'missing_unless'   => 'El campo :attribute debe faltar a menos que :other sea :value.',
+    'missing_with'     => 'El campo :attribute debe faltar cuando :values está presente.',
+    'missing_with_all' => 'El campo :attribute debe faltar cuando :values están presentes.',
+    'multiple_of'      => 'El campo :attribute debe ser un múltiplo de :value.',
+    'not_in'           => 'El :attribute seleccionado es inválido.',
+    'not_regex'        => 'El formato del campo :attribute es inválido.',
+    'numeric'          => 'El campo :attribute debe ser un número.',
+
+    'password' => [
+        'letters'       => 'El campo :attribute debe contener al menos una letra.',
+        'mixed'         => 'El campo :attribute debe contener al menos una letra mayúscula y una minúscula.',
+        'numbers'       => 'El campo :attribute debe contener al menos un número.',
+        'symbols'       => 'El campo :attribute debe contener al menos un símbolo.',
+        'uncompromised' => 'El :attribute dado ha aparecido en una filtración de datos. Por favor, elija un :attribute diferente.',
+    ],
+
+    'present'              => 'El campo :attribute debe estar presente.',
+    'present_if'           => 'El campo :attribute debe estar presente cuando :other es :value.',
+    'present_unless'       => 'El campo :attribute debe estar presente a menos que :other sea :value.',
+    'present_with'         => 'El campo :attribute debe estar presente cuando :values está presente.',
+    'present_with_all'     => 'El campo :attribute debe estar presente cuando :values están presentes.',
+    'prohibited'           => 'El campo :attribute está prohibido.',
+    'prohibited_if'        => 'El campo :attribute está prohibido cuando :other es :value.',
+    'prohibited_unless'    => 'El campo :attribute está prohibido a menos que :other esté en :values.',
+    'prohibits'            => 'El campo :attribute prohíbe que :other esté presente.',
+    'regex'                => 'El formato del campo :attribute es inválido.',
+    'required'             => 'El campo :attribute es obligatorio.',
+    'required_array_keys'  => 'El campo :attribute debe contener entradas para: :values.',
+    'required_if'          => 'El campo :attribute es obligatorio cuando :other es :value.',
+    'required_if_accepted' => 'El campo :attribute es obligatorio cuando :other es aceptado.',
+    'required_unless'      => 'El campo :attribute es obligatorio a menos que :other esté en :values.',
+    'required_with'        => 'El campo :attribute es obligatorio cuando :values está presente.',
+    'required_with_all'    => 'El campo :attribute es obligatorio cuando :values están presentes.',
+    'required_without'     => 'El campo :attribute es obligatorio cuando :values no está presente.',
+    'required_without_all' => 'El campo :attribute es obligatorio cuando ninguno de los :values está presente.',
+    'same'                 => 'El campo :attribute debe coincidir con :other.',
+
+    'size' => [
+        'array'   => 'El campo :attribute debe contener :size elementos.',
+        'file'    => 'El campo :attribute debe tener :size kilobytes.',
+        'numeric' => 'El campo :attribute debe ser :size.',
+        'string'  => 'El campo :attribute debe tener :size caracteres.',
+    ],
+
+    'starts_with' => 'El campo :attribute debe empezar con uno de los siguientes valores: :values.',
+    'string'      => 'El campo :attribute debe ser una cadena de texto.',
+    'timezone'    => 'El campo :attribute debe ser una zona horaria válida.',
+    'unique'      => 'El :attribute ya ha sido tomado.',
+    'uploaded'    => 'La carga del :attribute falló.',
+    'uppercase'   => 'El campo :attribute debe estar en mayúsculas.',
+    'url'         => 'El campo :attribute debe ser una URL válida.',
+    'ulid'        => 'El campo :attribute debe ser un ULID válido.',
+    'uuid'        => 'El campo :attribute debe ser un UUID válido.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'mensaje personalizado',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
lang/fa/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'این اعتبارات با سوابق ما مطابقت ندارد.',
+    'password' => 'رمز عبور ارائه شده اشتباه است.',
+    'throttle' => 'تلاش‌های ورود زیاد. لطفاً در :seconds ثانیه دوباره تلاش کنید.',
+
+];

+ 19 - 0
lang/fa/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'بعدی &raquo;',
+    'previous' => '&laquo; قبلی',
+
+];

+ 22 - 0
lang/fa/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'رمز عبور شما بازنشانی شده است.',
+    'sent'      => 'ما لینک بازنشانی رمز عبور خود را به ایمیل شما ارسال کرده‌ایم.',
+    'throttled' => 'لطفاً قبل از تلاش مجدد صبر کنید.',
+    'token'     => 'این نشانه بازنشانی رمز عبور نامعتبر است.',
+    'user'      => 'ما نمی‌توانیم کاربری با آن آدرس ایمیل پیدا کنیم.',
+
+];

+ 207 - 0
lang/fa/validation.php

@@ -0,0 +1,207 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'        => 'فیلد :attribute باید پذیرفته شود.',
+    'accepted_if'     => 'فیلد :attribute باید پذیرفته شود زمانی که :other برابر با :value است.',
+    'active_url'      => 'فیلد :attribute باید یک URL معتبر باشد.',
+    'after'           => 'فیلد :attribute باید یک تاریخ پس از :date باشد.',
+    'after_or_equal'  => 'فیلد :attribute باید یک تاریخ بعد یا مساوی با :date باشد.',
+    'alpha'           => 'فیلد :attribute فقط باید شامل حروف باشد.',
+    'alpha_dash'      => 'فیلد :attribute فقط باید شامل حروف، اعداد، خط تیره و زیرخط باشد.',
+    'alpha_num'       => 'فیلد :attribute فقط باید شامل حروف و اعداد باشد.',
+    'array'           => 'فیلد :attribute باید یک آرایه باشد.',
+    'ascii'           => 'فیلد :attribute فقط باید شامل کاراکترهای الفبایی و عددی یک بایتی باشد.',
+    'before'          => 'فیلد :attribute باید یک تاریخ پیش از :date باشد.',
+    'before_or_equal' => 'فیلد :attribute باید یک تاریخ قبل یا مساوی با :date باشد.',
+
+    'between' => [
+        'array'   => 'فیلد :attribute باید بین :min و :max آیتم باشد.',
+        'file'    => 'فیلد :attribute باید بین :min و :max کیلوبایت باشد.',
+        'numeric' => 'فیلد :attribute باید بین :min و :max باشد.',
+        'string'  => 'فیلد :attribute باید بین :min و :max کاراکتر باشد.',
+    ],
+
+    'boolean'           => 'فیلد :attribute باید true یا false باشد.',
+    'can'               => 'مقدار :attribute شامل مقدار غیرمجاز است.',
+    'confirmed'         => 'تأییدیه فیلد :attribute با مطابقت ندارد.',
+    'current_password'  => 'رمز عبور اشتباه است.',
+    'date'              => 'فیلد :attribute باید یک تاریخ معتبر باشد.',
+    'date_equals'       => 'فیلد :attribute باید یک تاریخ مساوی با :date باشد.',
+    'date_format'       => 'فیلد :attribute باید با فرمت :format مطابقت داشته باشد.',
+    'decimal'           => 'فیلد :attribute باید :decimal رقم اعشار داشته باشد.',
+    'declined'          => 'فیلد :attribute باید رد شود.',
+    'declined_if'       => 'فیلد :attribute باید رد شود زمانی که :other برابر با :value است.',
+    'different'         => 'فیلد :attribute و :other باید متفاوت باشند.',
+    'digits'            => 'فیلد :attribute باید :digits رقم باشد.',
+    'digits_between'    => 'فیلد :attribute باید بین :min و :max رقم باشد.',
+    'dimensions'        => 'فیلد :attribute ابعاد تصویر نامعتبری دارد.',
+    'distinct'          => 'فیلد :attribute دارای مقدار تکراری است.',
+    'doesnt_end_with'   => 'فیلد :attribute نباید با یکی از موارد زیر پایان یابد: :values.',
+    'doesnt_start_with' => 'فیلد :attribute نباید با یکی از موارد زیر شروع شود: :values.',
+    'email'             => 'فیلد :attribute باید یک آدرس ایمیل معتبر باشد.',
+    'ends_with'         => 'فیلد :attribute باید با یکی از موارد زیر پایان یابد: :values.',
+    'enum'              => 'مقدار انتخابی :attribute معتبر نیست.',
+    'exists'            => 'مقدار انتخابی :attribute معتبر نیست.',
+    'extensions'        => 'فیلد :attribute باید دارای یکی از پسوندهای زیر باشد: :values.',
+    'file'              => 'فیلد :attribute باید یک فایل باشد.',
+    'filled'            => 'فیلد :attribute باید دارای مقدار باشد.',
+
+    'gt' => [
+        'array'   => 'فیلد :attribute باید بیشتر از :value آیتم داشته باشد.',
+        'file'    => 'اندازه فایل :attribute باید بیشتر از :value کیلوبایت باشد.',
+        'numeric' => 'مقدار :attribute باید بیشتر از :value باشد.',
+        'string'  => 'طول رشته :attribute باید بیشتر از :value کاراکتر باشد.',
+    ],
+
+    'gte' => [
+        'array'   => 'فیلد :attribute باید حداقل شامل :value آیتم باشد.',
+        'file'    => 'اندازه فایل :attribute باید حداقل :value کیلوبایت باشد.',
+        'numeric' => 'مقدار :attribute باید حداقل :value باشد.',
+        'string'  => 'طول رشته :attribute باید حداقل :value کاراکتر باشد.',
+    ],
+
+    'hex_color' => 'فیلد :attribute باید یک رنگ شش‌زمینه‌ای معتبر باشد.',
+    'image'     => 'فیلد :attribute باید یک تصویر باشد.',
+    'in'        => 'مقدار انتخابی :attribute معتبر نیست.',
+    'in_array'  => 'فیلد :attribute باید در :other وجود داشته باشد.',
+    'integer'   => 'فیلد :attribute باید یک عدد صحیح باشد.',
+    'ip'        => 'فیلد :attribute باید یک آدرس IP معتبر باشد.',
+    'ipv4'      => 'فیلد :attribute باید یک آدرس IPv4 معتبر باشد.',
+    'ipv6'      => 'فیلد :attribute باید یک آدرس IPv6 معتبر باشد.',
+    'json'      => 'فیلد :attribute باید یک رشته JSON معتبر باشد.',
+    'lowercase' => 'فیلد :attribute باید شامل حروف کوچک باشد.',
+
+    'lt' => [
+        'array'   => 'فیلد :attribute باید کمتر از :value آیتم داشته باشد.',
+        'file'    => 'اندازه فایل :attribute باید کمتر از :value کیلوبایت باشد.',
+        'numeric' => 'مقدار :attribute باید کمتر از :value باشد.',
+        'string'  => 'طول رشته :attribute باید کمتر از :value کاراکتر باشد.',
+    ],
+
+    'lte' => [
+        'array'   => 'فیلد :attribute نباید بیشتر از :value آیتم داشته باشد.',
+        'file'    => 'اندازه فایل :attribute باید کمتر یا مساوی با :value کیلوبایت باشد.',
+        'numeric' => 'مقدار :attribute باید کمتر یا مساوی با :value باشد.',
+        'string'  => 'طول رشته :attribute باید کمتر یا مساوی با :value کاراکتر باشد.',
+    ],
+
+    'mac_address' => 'فیلد :attribute باید یک آدرس MAC معتبر باشد.',
+
+    'max' => [
+        'array'   => 'فیلد :attribute نباید بیشتر از :max آیتم داشته باشد.',
+        'file'    => 'اندازه فایل :attribute نباید بیشتر از :max کیلوبایت باشد.',
+        'numeric' => 'مقدار :attribute نباید بیشتر از :max باشد.',
+        'string'  => 'طول رشته :attribute نباید بیشتر از :max کاراکتر باشد.',
+    ],
+
+    'max_digits' => 'فیلد :attribute نباید بیشتر از :max رقم داشته باشد.',
+    'mimes'      => 'فیلد :attribute باید یک فایل از نوع :values باشد.',
+    'mimetypes'  => 'فیلد :attribute باید یک فایل از نوع :values باشد.',
+
+    'min' => [
+        'array'   => 'فیلد :attribute باید حداقل دارای :min آیتم باشد.',
+        'file'    => 'اندازه فایل :attribute باید حداقل :min کیلوبایت باشد.',
+        'numeric' => 'مقدار :attribute باید حداقل :min باشد.',
+        'string'  => 'طول رشته :attribute باید حداقل :min کاراکتر باشد.',
+    ],
+
+    'min_digits'       => 'فیلد :attribute باید حداقل دارای :min رقم باشد.',
+    'missing'          => 'فیلد :attribute باید موجود باشد.',
+    'missing_if'       => 'فیلد :attribute باید موجود باشد زمانی که :other برابر با :value است.',
+    'missing_unless'   => 'فیلد :attribute باید موجود باشد مگر اینکه :other برابر با :value باشد.',
+    'missing_with'     => 'فیلد :attribute باید موجود باشد زمانی که :values موجود است.',
+    'missing_with_all' => 'فیلد :attribute باید موجود باشد زمانی که :values موجود است.',
+    'multiple_of'      => 'فیلد :attribute باید یک ضریب از :value باشد.',
+    'not_in'           => 'مقدار انتخابی :attribute معتبر نیست.',
+    'not_regex'        => 'فرمت فیلد :attribute نامعتبر است.',
+    'numeric'          => 'فیلد :attribute باید یک عدد باشد.',
+
+    'password' => [
+        'letters'       => 'فیلد :attribute باید حداقل شامل یک حرف باشد.',
+        'mixed'         => 'فیلد :attribute باید حداقل شامل یک حرف بزرگ و یک حرف کوچک باشد.',
+        'numbers'       => 'فیلد :attribute باید حداقل شامل یک عدد باشد.',
+        'symbols'       => 'فیلد :attribute باید حداقل شامل یک نماد باشد.',
+        'uncompromised' => 'مقدار داده شده برای :attribute در یک نشست داده به نظر می‌رسد. لطفاً مقدار دیگری را انتخاب کنید.',
+    ],
+
+    'present'              => 'فیلد :attribute باید موجود باشد.',
+    'present_if'           => 'فیلد :attribute باید موجود باشد زمانی که :other برابر با :value است.',
+    'present_unless'       => 'فیلد :attribute باید موجود باشد مگر اینکه :other برابر با :value باشد.',
+    'present_with'         => 'فیلد :attribute باید موجود باشد زمانی که :values موجود است.',
+    'present_with_all'     => 'فیلد :attribute باید موجود باشد زمانی که :values موجود است.',
+    'prohibited'           => 'فیلد :attribute ممنوع است.',
+    'prohibited_if'        => 'فیلد :attribute ممنوع است زمانی که :other برابر با :value است.',
+    'prohibited_unless'    => 'فیلد :attribute ممنوع است مگر اینکه :other در :values وجود داشته باشد.',
+    'prohibits'            => 'فیلد :attribute از حضور :other منع می‌کند.',
+    'regex'                => 'فرمت فیلد :attribute نامعتبر است.',
+    'required'             => 'فیلد :attribute الزامی است.',
+    'required_array_keys'  => 'فیلد :attribute باید شامل موارد: :values باشد.',
+    'required_if'          => 'فیلد :attribute الزامی است زمانی که :other برابر با :value باشد.',
+    'required_if_accepted' => 'فیلد :attribute الزامی است زمانی که :other پذیرفته شود.',
+    'required_unless'      => 'فیلد :attribute الزامی است مگر اینکه :other در :values وجود داشته باشد.',
+    'required_with'        => 'فیلد :attribute الزامی است زمانی که :values موجود است.',
+    'required_with_all'    => 'فیلد :attribute الزامی است زمانی که :values موجود است.',
+    'required_without'     => 'فیلد :attribute الزامی است زمانی که :values موجود نیست.',
+    'required_without_all' => 'فیلد :attribute الزامی است زمانی که هیچ یک از :values موجود نیست.',
+    'same'                 => 'فیلد :attribute باید با :other همخوانی داشته باشد.',
+
+    'size' => [
+        'array'   => 'فیلد :attribute باید شامل :size مورد باشد.',
+        'file'    => 'اندازه فایل :attribute باید :size کیلوبایت باشد.',
+        'numeric' => 'مقدار :attribute باید :size باشد.',
+        'string'  => 'طول رشته :attribute باید :size کاراکتر باشد.',
+    ],
+
+    'starts_with' => 'فیلد :attribute باید با یکی از موارد زیر شروع شود: :values.',
+    'string'      => 'فیلد :attribute باید یک رشته باشد.',
+    'timezone'    => 'فیلد :attribute باید یک منطقه زمانی معتبر باشد.',
+    'unique'      => 'مقدار :attribute قبلاً انتخاب شده است.',
+    'uploaded'    => 'آپلود فایل :attribute با شکست مواجه شد.',
+    'uppercase'   => 'فیلد :attribute باید با حروف بزرگ نوشته شود.',
+    'url'         => 'فیلد :attribute باید یک URL معتبر باشد.',
+    'ulid'        => 'فیلد :attribute باید یک ULID معتبر باشد.',
+    'uuid'        => 'فیلد :attribute باید یک UUID معتبر باشد.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'پیام سفارشی',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
lang/fr/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'Ces identifiants ne correspondent pas à nos enregistrements.',
+    'password' => 'Le mot de passe fourni est incorrect.',
+    'throttle' => 'Trop de tentatives de connexion. Veuillez réessayer dans :seconds secondes.',
+
+];

+ 19 - 0
lang/fr/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'Suivant &raquo;',
+    'previous' => '&laquo; Précédent',
+
+];

+ 22 - 0
lang/fr/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'Votre mot de passe a été réinitialisé.',
+    'sent'      => 'Nous avons envoyé le lien de réinitialisation de votre mot de passe par e-mail.',
+    'throttled' => 'Veuillez patienter avant de réessayer.',
+    'token'     => 'Ce jeton de réinitialisation de mot de passe n\'est pas valide.',
+    'user'      => 'Nous ne trouvons aucun utilisateur avec cette adresse e-mail.',
+
+];

+ 207 - 0
lang/fr/validation.php

@@ -0,0 +1,207 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'        => 'Le champ :attribute doit être accepté.',
+    'accepted_if'     => 'Le champ :attribute doit être accepté lorsque :other est :value.',
+    'active_url'      => 'Le champ :attribute doit être une URL valide.',
+    'after'           => 'Le champ :attribute doit être une date postérieure à :date.',
+    'after_or_equal'  => 'Le champ :attribute doit être une date postérieure ou égale à :date.',
+    'alpha'           => 'Le champ :attribute ne doit contenir que des lettres.',
+    'alpha_dash'      => 'Le champ :attribute ne doit contenir que des lettres, des chiffres, des tirets et des underscores.',
+    'alpha_num'       => 'Le champ :attribute ne doit contenir que des lettres et des chiffres.',
+    'array'           => 'Le champ :attribute doit être un tableau.',
+    'ascii'           => 'Le champ :attribute ne doit contenir que des caractères alphanumériques et des symboles d\'un seul octet.',
+    'before'          => 'Le champ :attribute doit être une date antérieure à :date.',
+    'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale à :date.',
+
+    'between' => [
+        'array'   => 'Le champ :attribute doit avoir entre :min et :max éléments.',
+        'file'    => 'Le champ :attribute doit être compris entre :min et :max kilo-octets.',
+        'numeric' => 'Le champ :attribute doit être compris entre :min et :max.',
+        'string'  => 'Le champ :attribute doit être compris entre :min et :max caractères.',
+    ],
+
+    'boolean'           => 'Le champ :attribute doit être vrai ou faux.',
+    'can'               => 'Le champ :attribute contient une valeur non autorisée.',
+    'confirmed'         => 'La confirmation du champ :attribute ne correspond pas.',
+    'current_password'  => 'Le mot de passe est incorrect.',
+    'date'              => 'Le champ :attribute doit être une date valide.',
+    'date_equals'       => 'Le champ :attribute doit être une date égale à :date.',
+    'date_format'       => 'Le champ :attribute doit correspondre au format :format.',
+    'decimal'           => 'Le champ :attribute doit avoir :decimal décimales.',
+    'declined'          => 'Le champ :attribute doit être refusé.',
+    'declined_if'       => 'Le champ :attribute doit être refusé lorsque :other est :value.',
+    'different'         => 'Le champ :attribute et :other doivent être différents.',
+    'digits'            => 'Le champ :attribute doit comporter :digits chiffres.',
+    'digits_between'    => 'Le champ :attribute doit être compris entre :min et :max chiffres.',
+    'dimensions'        => 'Le champ :attribute a des dimensions d\'image non valides.',
+    'distinct'          => 'Le champ :attribute a une valeur en double.',
+    'doesnt_end_with'   => 'Le champ :attribute ne doit pas se terminer par l\'un des éléments suivants : :values.',
+    'doesnt_start_with' => 'Le champ :attribute ne doit pas commencer par l\'un des éléments suivants : :values.',
+    'email'             => 'Le champ :attribute doit être une adresse email valide.',
+    'ends_with'         => 'Le champ :attribute doit se terminer par l\'un des éléments suivants : :values.',
+    'enum'              => 'La valeur sélectionnée pour :attribute est invalide.',
+    'exists'            => 'La valeur sélectionnée pour :attribute est invalide.',
+    'extensions'        => 'Le champ :attribute doit avoir l\'une des extensions suivantes : :values.',
+    'file'              => 'Le champ :attribute doit être un fichier.',
+    'filled'            => 'Le champ :attribute doit avoir une valeur.',
+
+    'gt' => [
+        'array'   => 'Le champ :attribute doit avoir plus de :value éléments.',
+        'file'    => 'Le champ :attribute doit être supérieur à :value kilo-octets.',
+        'numeric' => 'Le champ :attribute doit être supérieur à :value.',
+        'string'  => 'Le champ :attribute doit être supérieur à :value caractères.',
+    ],
+
+    'gte' => [
+        'array'   => 'Le champ :attribute doit avoir :value éléments ou plus.',
+        'file'    => 'Le champ :attribute doit être supérieur ou égal à :value kilo-octets.',
+        'numeric' => 'Le champ :attribute doit être supérieur ou égal à :value.',
+        'string'  => 'Le champ :attribute doit être supérieur ou égal à :value caractères.',
+    ],
+
+    'hex_color' => 'Le champ :attribute doit être une couleur hexadécimale valide.',
+    'image'     => 'Le champ :attribute doit être une image.',
+    'in'        => 'La valeur sélectionnée pour :attribute est invalide.',
+    'in_array'  => 'Le champ :attribute doit exister dans :other.',
+    'integer'   => 'Le champ :attribute doit être un entier.',
+    'ip'        => 'Le champ :attribute doit être une adresse IP valide.',
+    'ipv4'      => 'Le champ :attribute doit être une adresse IPv4 valide.',
+    'ipv6'      => 'Le champ :attribute doit être une adresse IPv6 valide.',
+    'json'      => 'Le champ :attribute doit être une chaîne JSON valide.',
+    'lowercase' => 'Le champ :attribute doit être en minuscules.',
+
+    'lt' => [
+        'array'   => 'Le champ :attribute doit avoir moins de :value éléments.',
+        'file'    => 'Le champ :attribute doit être inférieur à :value kilo-octets.',
+        'numeric' => 'Le champ :attribute doit être inférieur à :value.',
+        'string'  => 'Le champ :attribute doit être inférieur à :value caractères.',
+    ],
+
+    'lte' => [
+        'array'   => 'Le champ :attribute ne doit pas avoir plus de :value éléments.',
+        'file'    => 'Le champ :attribute doit être inférieur ou égal à :value kilo-octets.',
+        'numeric' => 'Le champ :attribute doit être inférieur ou égal à :value.',
+        'string'  => 'Le champ :attribute doit être inférieur ou égal à :value caractères.',
+    ],
+
+    'mac_address' => 'Le champ :attribute doit être une adresse MAC valide.',
+
+    'max' => [
+        'array'   => 'Le champ :attribute ne doit pas avoir plus de :max éléments.',
+        'file'    => 'Le champ :attribute ne doit pas dépasser :max kilo-octets.',
+        'numeric' => 'Le champ :attribute ne doit pas être supérieur à :max.',
+        'string'  => 'Le champ :attribute ne doit pas dépasser :max caractères.',
+    ],
+
+    'max_digits' => 'Le champ :attribute ne doit pas comporter plus de :max chiffres.',
+    'mimes'      => 'Le champ :attribute doit être un fichier de type :values.',
+    'mimetypes'  => 'Le champ :attribute doit être un fichier de type :values.',
+
+    'min' => [
+        'array'   => 'Le champ :attribute doit avoir au moins :min éléments.',
+        'file'    => 'Le champ :attribute doit être d\'au moins :min kilo-octets.',
+        'numeric' => 'Le champ :attribute doit être d\'au moins :min.',
+        'string'  => 'Le champ :attribute doit comporter au moins :min caractères.',
+    ],
+
+    'min_digits'       => 'Le champ :attribute doit comporter au moins :min chiffres.',
+    'missing'          => 'Le champ :attribute doit être manquant.',
+    'missing_if'       => 'Le champ :attribute doit être manquant lorsque :other est :value.',
+    'missing_unless'   => 'Le champ :attribute doit être manquant sauf si :other est :value.',
+    'missing_with'     => 'Le champ :attribute doit être manquant lorsque :values est présent.',
+    'missing_with_all' => 'Le champ :attribute doit être manquant lorsque :values sont présents.',
+    'multiple_of'      => 'Le champ :attribute doit être un multiple de :value.',
+    'not_in'           => 'La valeur sélectionnée pour :attribute est invalide.',
+    'not_regex'        => 'Le format du champ :attribute est invalide.',
+    'numeric'          => 'Le champ :attribute doit être un nombre.',
+
+    'password' => [
+        'letters'       => 'Le champ :attribute doit contenir au moins une lettre.',
+        'mixed'         => 'Le champ :attribute doit contenir au moins une lettre majuscule et une lettre minuscule.',
+        'numbers'       => 'Le champ :attribute doit contenir au moins un chiffre.',
+        'symbols'       => 'Le champ :attribute doit contenir au moins un symbole.',
+        'uncompromised' => 'Le :attribute donné est apparu dans une fuite de données. Veuillez choisir un autre :attribute.',
+    ],
+
+    'present'              => 'Le champ :attribute doit être présent.',
+    'present_if'           => 'Le champ :attribute doit être présent lorsque :other est :value.',
+    'present_unless'       => 'Le champ :attribute doit être présent sauf si :other est :value.',
+    'present_with'         => 'Le champ :attribute doit être présent lorsque :values est présent.',
+    'present_with_all'     => 'Le champ :attribute doit être présent lorsque :values sont présents.',
+    'prohibited'           => 'Le champ :attribute est interdit.',
+    'prohibited_if'        => 'Le champ :attribute est interdit lorsque :other est :value.',
+    'prohibited_unless'    => 'Le champ :attribute est interdit sauf si :other est dans :values.',
+    'prohibits'            => 'Le champ :attribute interdit la présence de :other.',
+    'regex'                => 'Le format du champ :attribute est invalide.',
+    'required'             => 'Le champ :attribute est requis.',
+    'required_array_keys'  => 'Le champ :attribute doit contenir des entrées pour :values.',
+    'required_if'          => 'Le champ :attribute est requis lorsque :other est :value.',
+    'required_if_accepted' => 'Le champ :attribute est requis lorsque :other est accepté.',
+    'required_unless'      => 'Le champ :attribute est requis sauf si :other est dans :values.',
+    'required_with'        => 'Le champ :attribute est requis lorsque :values est présent.',
+    'required_with_all'    => 'Le champ :attribute est requis lorsque :values sont présents.',
+    'required_without'     => 'Le champ :attribute est requis lorsque :values n\'est pas présent.',
+    'required_without_all' => 'Le champ :attribute est requis lorsque aucun de :values n\'est présent.',
+    'same'                 => 'Le champ :attribute doit correspondre à :other.',
+
+    'size' => [
+        'array'   => 'Le champ :attribute doit contenir :size éléments.',
+        'file'    => 'Le champ :attribute doit être de :size kilo-octets.',
+        'numeric' => 'Le champ :attribute doit être :size.',
+        'string'  => 'Le champ :attribute doit contenir :size caractères.',
+    ],
+
+    'starts_with' => 'Le champ :attribute doit commencer par l\'un des éléments suivants : :values.',
+    'string'      => 'Le champ :attribute doit être une chaîne de caractères.',
+    'timezone'    => 'Le champ :attribute doit être un fuseau horaire valide.',
+    'unique'      => 'Le champ :attribute a déjà été pris.',
+    'uploaded'    => 'Le chargement du fichier :attribute a échoué.',
+    'uppercase'   => 'Le champ :attribute doit être en majuscules.',
+    'url'         => 'Le format de l\'URL du champ :attribute est invalide.',
+    'ulid'        => 'Le champ :attribute doit être un ULID valide.',
+    'uuid'        => 'Le champ :attribute doit être un UUID valide.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'message personnalisé',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
lang/he/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'אלו פרטי הכניסה לא תואמים את הרשומות שלנו.',
+    'password' => 'הסיסמה שסופקה אינה נכונה.',
+    'throttle' => 'ניסיונות כניסה רבים מדי. נסה שוב בעוד :seconds שניות.',
+
+];

+ 19 - 0
lang/he/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'הבא &raquo;',
+    'previous' => '&laquo; הקודם',
+
+];

+ 22 - 0
lang/he/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'הסיסמה שלך אופסה בהצלחה.',
+    'sent'      => 'שלחנו לך קישור לאיפוס הסיסמה בדוא"ל.',
+    'throttled' => 'אנא המתן לפני שתנסה שוב.',
+    'token'     => 'אסימון איפוס הסיסמה הזה אינו תקף.',
+    'user'      => "לא ניתן למצוא משתמש עם כתובת הדוא''ל הזו.",
+
+];

+ 207 - 0
lang/he/validation.php

@@ -0,0 +1,207 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted'        => 'שדה :attribute חייב להתקבל.',
+    'accepted_if'     => 'שדה :attribute חייב להתקבל כאשר :other הוא :value.',
+    'active_url'      => 'שדה :attribute חייב להיות כתובת URL תקפה.',
+    'after'           => 'שדה :attribute חייב להיות תאריך אחרי :date.',
+    'after_or_equal'  => 'שדה :attribute חייב להיות תאריך אחרי או שווה ל־:date.',
+    'alpha'           => 'שדה :attribute יכול להכיל רק אותיות.',
+    'alpha_dash'      => 'שדה :attribute יכול להכיל רק אותיות, מספרים, מקפים וקווים תחתונים.',
+    'alpha_num'       => 'שדה :attribute יכול להכיל רק אותיות ומספרים.',
+    'array'           => 'שדה :attribute חייב להיות מערך.',
+    'ascii'           => 'שדה :attribute יכול להכיל רק תווים אלפאנומריים וסימנים בתצורה יחידתית.',
+    'before'          => 'שדה :attribute חייב להיות תאריך לפני :date.',
+    'before_or_equal' => 'שדה :attribute חייב להיות תאריך לפני או שווה ל־:date.',
+
+    'between' => [
+        'array'   => 'שדה :attribute חייב להכיל בין :min ל־:max פריטים.',
+        'file'    => 'שדה :attribute חייב להיות בין :min ל־:max קילובייטים.',
+        'numeric' => 'שדה :attribute חייב להיות בין :min ל־:max.',
+        'string'  => 'שדה :attribute חייב להיות בין :min ל־:max תווים.',
+    ],
+
+    'boolean'           => 'שדה :attribute חייב להיות אמת או שקר.',
+    'can'               => 'שדה :attribute מכיל ערך לא מורשה.',
+    'confirmed'         => 'אישור השדה :attribute אינו תואם.',
+    'current_password'  => 'הסיסמה שגויה.',
+    'date'              => 'שדה :attribute חייב להיות תאריך תקף.',
+    'date_equals'       => 'שדה :attribute חייב להיות תאריך שווה ל־:date.',
+    'date_format'       => 'שדה :attribute אינו תואם את הפורמט :format.',
+    'decimal'           => 'שדה :attribute חייב להיות עם :decimal ספרות אחרי הנקודה.',
+    'declined'          => 'השדה :attribute חייב להיות מדווח כמסריר.',
+    'declined_if'       => 'השדה :attribute חייב להיות מדווח כמסריר כאשר :other הוא :value.',
+    'different'         => 'השדה :attribute ו־:other חייבים להיות שונים.',
+    'digits'            => 'שדה :attribute חייב להיות בעל :digits ספרות.',
+    'digits_between'    => 'שדה :attribute חייב להיות בין :min ל־:max ספרות.',
+    'dimensions'        => 'התמונה בשדה :attribute יש מימדים לא תקינים.',
+    'distinct'          => 'שדה :attribute מכיל ערך כפול.',
+    'doesnt_end_with'   => 'שדה :attribute חייב לא להסתיים באחד מהערכים הבאים: :values.',
+    'doesnt_start_with' => 'שדה :attribute חייב לא להתחיל באחד מהערכים הבאים: :values.',
+    'email'             => 'שדה :attribute חייב להיות כתובת דוא"ל תקינה.',
+    'ends_with'         => 'שדה :attribute חייב להסתיים באחד מהערכים הבאים: :values.',
+    'enum'              => 'הערך שנבחר עבור :attribute אינו תקין.',
+    'exists'            => 'הערך שנבחר עבור :attribute אינו תקין.',
+    'extensions'        => 'שדה :attribute חייב להכיל אחת מהסיומות הבאות: :values.',
+    'file'              => 'שדה :attribute חייב להיות קובץ.',
+    'filled'            => 'שדה :attribute חייב להכיל ערך.',
+
+    'gt' => [
+        'array'   => 'שדה :attribute חייב להכיל יותר מ־:value פריטים.',
+        'file'    => 'שדה :attribute חייב להיות גדול מ־:value קילובייטים.',
+        'numeric' => 'שדה :attribute חייב להיות גדול מ־:value.',
+        'string'  => 'שדה :attribute חייב להיות גדול מ־:value תווים.',
+    ],
+
+    'gte' => [
+        'array'   => 'שדה :attribute חייב להכיל :value פריטים או יותר.',
+        'file'    => 'שדה :attribute חייב להיות גדול או שווה ל־:value קילובייטים.',
+        'numeric' => 'שדה :attribute חייב להיות גדול או שווה ל־:value.',
+        'string'  => 'שדה :attribute חייב להיות גדול או שווה ל־:value תווים.',
+    ],
+
+    'hex_color' => 'שדה :attribute חייב להיות קוד צבע הקסדצימלי תקין.',
+    'image'     => 'שדה :attribute חייב להיות תמונה.',
+    'in'        => 'הערך שנבחר עבור :attribute אינו תקין.',
+    'in_array'  => 'שדה :attribute חייב להיות קיים ב־:other.',
+    'integer'   => 'שדה :attribute חייב להיות מספר שלם.',
+    'ip'        => 'שדה :attribute חייב להיות כתובת IP תקינה.',
+    'ipv4'      => 'שדה :attribute חייב להיות כתובת IPv4 תקינה.',
+    'ipv6'      => 'שדה :attribute חייב להיות כתובת IPv6 תקינה.',
+    'json'      => 'שדה :attribute חייב להיות מחרוזת JSON תקינה.',
+    'lowercase' => 'שדה :attribute חייב להיות באותיות קטנות בלבד.',
+
+    'lt' => [
+        'array'   => 'שדה :attribute חייב להכיל פחות מ־:value פריטים.',
+        'file'    => 'שדה :attribute חייב להיות פחות מ־:value קילובייטים.',
+        'numeric' => 'שדה :attribute חייב להיות פחות מ־:value.',
+        'string'  => 'שדה :attribute חייב להיות פחות מ־:value תווים.',
+    ],
+
+    'lte' => [
+        'array'   => 'שדה :attribute חייב להכיל :value פריטים או פחות.',
+        'file'    => 'שדה :attribute חייב להיות קטן או שווה ל־:value קילובייטים.',
+        'numeric' => 'שדה :attribute חייב להיות קטן או שווה ל־:value.',
+        'string'  => 'שדה :attribute חייב להיות קטן או שווה ל־:value תווים.',
+    ],
+
+    'mac_address' => 'שדה :attribute חייב להיות כתובת MAC תקינה.',
+
+    'max' => [
+        'array'   => 'שדה :attribute חייב להכיל לא יותר מ־:max פריטים.',
+        'file'    => 'שדה :attribute חייב להיות קטן מ־:max קילובייטים.',
+        'numeric' => 'שדה :attribute חייב להיות קטן מ־:max.',
+        'string'  => 'שדה :attribute חייב להיות קטן מ־:max תווים.',
+    ],
+
+    'max_digits' => 'שדה :attribute חייב להיות עד :max ספרות.',
+    'mimes'      => 'שדה :attribute חייב להיות קובץ מסוג: :values.',
+    'mimetypes'  => 'שדה :attribute חייב להיות קובץ מסוג: :values.',
+
+    'min' => [
+        'array'   => 'שדה :attribute חייב להכיל לפחות :min פריטים.',
+        'file'    => 'שדה :attribute חייב להיות לפחות :min קילובייטים.',
+        'numeric' => 'שדה :attribute חייב להיות לפחות :min.',
+        'string'  => 'שדה :attribute חייב להיות לפחות :min תווים.',
+    ],
+
+    'min_digits'       => 'שדה :attribute חייב להיות לפחות בעל :min ספרות.',
+    'missing'          => 'שדה :attribute חייב להיות חסר.',
+    'missing_if'       => 'שדה :attribute חייב להיות חסר כאשר :other הוא :value.',
+    'missing_unless'   => 'שדה :attribute חייב להיות חסר אלא אם :other הוא :value.',
+    'missing_with'     => 'שדה :attribute חייב להיות חסר כאשר :values נמצאים.',
+    'missing_with_all' => 'שדה :attribute חייב להיות חסר כאשר :values נמצאים.',
+    'multiple_of'      => 'שדה :attribute חייב להיות מרובה של :value.',
+    'not_in'           => 'הערך שנבחר עבור :attribute אינו תקין.',
+    'not_regex'        => 'פורמט שדה :attribute אינו תקין.',
+    'numeric'          => 'שדה :attribute חייב להיות מספר.',
+
+    'password' => [
+        'letters'       => 'שדה :attribute חייב לכלול לפחות אות אחת.',
+        'mixed'         => 'שדה :attribute חייב לכלול לפחות אות אחת באותיות גדולות ואחת באותיות קטנות.',
+        'numbers'       => 'שדה :attribute חייב לכלול לפחות מספר אחד.',
+        'symbols'       => 'שדה :attribute חייב לכלול לפחות סמל אחד.',
+        'uncompromised' => 'ה־:attribute שנבחר הופיע בפרצת מידע. יש לבחור :attribute אחר.',
+    ],
+
+    'present'              => 'שדה :attribute חייב להיות נוכח.',
+    'present_if'           => 'שדה :attribute חייב להיות נוכח כאשר :other הוא :value.',
+    'present_unless'       => 'שדה :attribute חייב להיות נוכח אלא אם :other הוא :value.',
+    'present_with'         => 'שדה :attribute חייב להיות נוכח כאשר :values נמצאים.',
+    'present_with_all'     => 'שדה :attribute חייב להיות נוכח כאשר :values נמצאים.',
+    'prohibited'           => 'שדה :attribute אסור.',
+    'prohibited_if'        => 'שדה :attribute אסור כאשר :other הוא :value.',
+    'prohibited_unless'    => 'שדה :attribute אסור אלא אם :other הוא ב־:values.',
+    'prohibits'            => 'שדה :attribute אסור מלהכיל את :other.',
+    'regex'                => 'פורמט השדה :attribute אינו תקין.',
+    'required'             => 'שדה :attribute הוא חובה.',
+    'required_array_keys'  => 'שדה :attribute חייב להכיל ערכים עבור: :values.',
+    'required_if'          => 'שדה :attribute נדרש כאשר :other הוא :value.',
+    'required_if_accepted' => 'שדה :attribute נדרש כאשר :other מתקבל.',
+    'required_unless'      => 'שדה :attribute נדרש אלא אם :other הוא ב־:values.',
+    'required_with'        => 'שדה :attribute נדרש כאשר :values נמצאים.',
+    'required_with_all'    => 'שדה :attribute נדרש כאשר :values נמצאים.',
+    'required_without'     => 'שדה :attribute נדרש כאשר :values לא נמצאים.',
+    'required_without_all' => 'שדה :attribute נדרש כאשר אף אחד מהערכים :values לא נמצאים.',
+    'same'                 => 'שדה :attribute חייב להתאים ל־:other.',
+
+    'size' => [
+        'array'   => 'שדה :attribute חייב להכיל :size פריטים.',
+        'file'    => 'שדה :attribute חייב להיות בגודל של :size קילובייט.',
+        'numeric' => 'שדה :attribute חייב להיות בגודל של :size.',
+        'string'  => 'שדה :attribute חייב להיות בגודל של :size תווים.',
+    ],
+
+    'starts_with' => 'שדה :attribute חייב להתחיל באחד מהערכים הבאים: :values.',
+    'string'      => 'שדה :attribute חייב להיות מחרוזת.',
+    'timezone'    => 'שדה :attribute חייב להיות איזור זמן תקין.',
+    'unique'      => 'ה־:attribute כבר תפוס.',
+    'uploaded'    => 'העלאת :attribute נכשלה.',
+    'uppercase'   => 'שדה :attribute חייב להיות באותיות גדולות בלבד.',
+    'url'         => 'שדה :attribute חייב להיות כתובת URL תקינה.',
+    'ulid'        => 'שדה :attribute חייב להיות ULID תקין.',
+    'uuid'        => 'שדה :attribute חייב להיות UUID תקין.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'הודעה מותאמת אישית',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
lang/hi_IN/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed'   => 'ये क्रेडेंशियल हमारे रिकॉर्ड से मेल नहीं खाते।',
+    'password' => 'प्रदान किया गया पासवर्ड गलत है।',
+    'throttle' => 'बहुत सारे लॉगिन प्रयास। कृपया :seconds सेकंड में पुन: प्रयास करें।',
+
+];

+ 19 - 0
lang/hi_IN/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'next'     => 'आगे &raquo;',
+    'previous' => '&laquo; पिछला',
+
+];

+ 22 - 0
lang/hi_IN/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset'     => 'आपका पासवर्ड रीसेट कर दिया गया है।',
+    'sent'      => 'हमने आपके पासवर्ड रीसेट लिंक को ईमेल किया है।',
+    'throttled' => 'कृपया पुनः प्रयास करने से पहले प्रतीक्षा करें।',
+    'token'     => 'यह पासवर्ड रीसेट टोकन अमान्य है।',
+    'user'      => 'हम उस ईमेल पते के साथ कोई उपयोगकर्ता नहीं ढूंढ सकते।',
+
+];

+ 0 - 0
lang/hi_IN/validation.php


Неке датотеке нису приказане због велике количине промена