├── .circleci
└── config.yml
├── .coveralls.yml
├── LICENSE
├── README.md
├── composer.json
├── config
├── default.php
└── shop.php
├── public
└── mimeicons
│ ├── application
│ ├── illustrator.png
│ ├── javascript.png
│ ├── msword.png
│ ├── octet-stream.png
│ ├── pdf.png
│ ├── pgp-encrypted.png
│ ├── pgp-keys.png
│ ├── pkcs7-mime.png
│ ├── postscript.png
│ ├── relaxng.png
│ ├── rss+xml.png
│ ├── rtf.png
│ ├── sxw.png
│ ├── vnd.ms-access.png
│ ├── vnd.ms-excel.png
│ ├── vnd.ms-powerpoint.png
│ ├── vnd.oasis.opendocument.chart.png
│ ├── vnd.oasis.opendocument.database.png
│ ├── vnd.oasis.opendocument.formula.png
│ ├── vnd.oasis.opendocument.graphics.png
│ ├── vnd.oasis.opendocument.image.png
│ ├── vnd.oasis.opendocument.presentation-template.png
│ ├── vnd.oasis.opendocument.presentation.png
│ ├── vnd.oasis.opendocument.spreadsheet-template.png
│ ├── vnd.oasis.opendocument.spreadsheet.png
│ ├── vnd.oasis.opendocument.text.png
│ ├── vnd.rn-realmedia.png
│ ├── vnd.scribus.png
│ ├── vnd.stardivision.calc.png
│ ├── vnd.stardivision.draw.png
│ ├── vnd.sun.xml.calc.png
│ ├── vnd.sun.xml.calc.template.png
│ ├── vnd.sun.xml.draw.png
│ ├── vnd.sun.xml.draw.template.png
│ ├── x-7z-compressed.png
│ ├── x-ace.png
│ ├── x-applix-spreadsheet.png
│ ├── x-ar.png
│ ├── x-arc.png
│ ├── x-archive.png
│ ├── x-arj.png
│ ├── x-awk.png
│ ├── x-bittorrent.png
│ ├── x-bzdvi.png
│ ├── x-bzip-compressed-tar.png
│ ├── x-bzip.png
│ ├── x-cd-image.png
│ ├── x-cda.png
│ ├── x-compress.png
│ ├── x-compressed-tar.png
│ ├── x-cpio.png
│ ├── x-cue.png
│ ├── x-deb.png
│ ├── x-designer.png
│ ├── x-desktop.png
│ ├── x-egon.png
│ ├── x-executable-script.png
│ ├── x-executable.png
│ ├── x-font-afm.png
│ ├── x-font-bdf.png
│ ├── x-font-otf.png
│ ├── x-font-pcf.png
│ ├── x-font-snf.png
│ ├── x-font-ttf.png
│ ├── x-font-type1.png
│ ├── x-gnumeric.png
│ ├── x-gzdvi.png
│ ├── x-gzip.png
│ ├── x-gzpostscript.png
│ ├── x-java-applet.png
│ ├── x-java-archive.png
│ ├── x-java.png
│ ├── x-javascript.png
│ ├── x-k3b.png
│ ├── x-kcsrc.png
│ ├── x-kgetlist.png
│ ├── x-kontour.png
│ ├── x-kplato.png
│ ├── x-krita.png
│ ├── x-kvtml.png
│ ├── x-lha.png
│ ├── x-lyx.png
│ ├── x-lzma-compressed-tar.png
│ ├── x-lzop.png
│ ├── x-m4.png
│ ├── x-marble.png
│ ├── x-mimearchive.png
│ ├── x-mplayer2.png
│ ├── x-ms-dos-executable.png
│ ├── x-mswinurl.png
│ ├── x-mswrite.png
│ ├── x-nzb.png
│ ├── x-object.png
│ ├── x-pak.png
│ ├── x-pem-key.png
│ ├── x-perl.png
│ ├── x-php.png
│ ├── x-plasma.png
│ ├── x-python-bytecode.png
│ ├── x-qet-element.png
│ ├── x-qet-project.png
│ ├── x-quattropro.png
│ ├── x-rar.png
│ ├── x-rpm.png
│ ├── x-ruby.png
│ ├── x-sharedlib.png
│ ├── x-shellscript.png
│ ├── x-shockwave-flash.png
│ ├── x-siag.png
│ ├── x-smb-server.png
│ ├── x-smb-workgroup.png
│ ├── x-subrip.png
│ ├── x-tar.png
│ ├── x-tarz.png
│ ├── x-tgif.png
│ ├── x-trash.png
│ ├── x-troff-man.png
│ ├── x-tzo.png
│ ├── x-wmf.png
│ ├── x-zerosize.png
│ ├── x-zoo.png
│ ├── xhtml+xml.png
│ ├── xml.png
│ ├── xsd.png
│ ├── xslt+xml.png
│ └── zip.png
│ ├── audio
│ ├── ac3.png
│ ├── midi.png
│ ├── prs.sid.png
│ ├── vnd.rn-realvideo.png
│ ├── x-adpcm.png
│ ├── x-aiff.png
│ ├── x-flac+ogg.png
│ ├── x-flac.png
│ ├── x-generic.png
│ ├── x-monkey.png
│ ├── x-speex+ogg.png
│ └── x-wav.png
│ ├── fonts
│ └── package.png
│ ├── image
│ ├── svg+xml-compressed.png
│ ├── svg+xml.png
│ ├── x-eps.png
│ ├── x-generic.png
│ ├── x-vnd.trolltech.qpicture.png
│ └── x-xfig.png
│ ├── inode
│ └── directory.png
│ ├── message
│ ├── news.png
│ └── rfc822.png
│ ├── package
│ └── x-generic.png
│ ├── text
│ ├── calendar.png
│ ├── css.png
│ ├── csv.png
│ ├── directory.png
│ ├── enriched.png
│ ├── html.png
│ ├── mathml.png
│ ├── plain.png
│ ├── rdf.png
│ ├── rtf.png
│ ├── sgml.png
│ ├── troff.png
│ ├── vcalendar.png
│ ├── vnd.abc.png
│ ├── vnd.wap.wml.png
│ ├── x-adasrc.png
│ ├── x-authors.png
│ ├── x-bibtex.png
│ ├── x-c++hdr.png
│ ├── x-c++src.png
│ ├── x-changelog.png
│ ├── x-chdr.png
│ ├── x-cmake.png
│ ├── x-copying.png
│ ├── x-csharp.png
│ ├── x-csrc.png
│ ├── x-dtd.png
│ ├── x-generic.png
│ ├── x-haskell.png
│ ├── x-hex.png
│ ├── x-install.png
│ ├── x-java.png
│ ├── x-katefilelist.png
│ ├── x-ldif.png
│ ├── x-log.png
│ ├── x-makefile.png
│ ├── x-nfo.png
│ ├── x-objchdr.png
│ ├── x-objcsrc.png
│ ├── x-pascal.png
│ ├── x-patch.png
│ ├── x-po.png
│ ├── x-python.png
│ ├── x-readme.png
│ ├── x-script.png
│ ├── x-sql.png
│ ├── x-tcl.png
│ ├── x-tex.png
│ ├── x-texinfo.png
│ ├── x-vcard.png
│ ├── x-xslfo.png
│ ├── xmcd.png
│ └── xml.png
│ ├── unknown.png
│ ├── uri
│ ├── mms.png
│ ├── mmst.png
│ ├── mmsu.png
│ ├── pnm.png
│ ├── rtspt.png
│ └── rtspu.png
│ └── video
│ ├── mp4.png
│ ├── webm.png
│ ├── x-generic.png
│ ├── x-mng.png
│ └── x-wmv.png
├── routes
└── aimeos.php
├── src
├── Base
│ ├── Aimeos.php
│ ├── Config.php
│ ├── Context.php
│ ├── I18n.php
│ ├── Locale.php
│ ├── Shop.php
│ ├── Support.php
│ └── View.php
├── Command
│ ├── AbstractCommand.php
│ ├── AccountCommand.php
│ ├── ClearCommand.php
│ ├── JobsCommand.php
│ └── SetupCommand.php
├── Composer.php
├── Controller
│ ├── AccountController.php
│ ├── AdminController.php
│ ├── BasketController.php
│ ├── CatalogController.php
│ ├── CheckoutController.php
│ ├── GraphqlController.php
│ ├── JqadmController.php
│ ├── JsonadmController.php
│ ├── JsonapiController.php
│ ├── PageController.php
│ └── SupplierController.php
├── Facades
│ ├── Attribute.php
│ ├── Basket.php
│ ├── Catalog.php
│ ├── Cms.php
│ ├── Customer.php
│ ├── Locale.php
│ ├── Order.php
│ ├── Product.php
│ ├── Service.php
│ ├── Shop.php
│ ├── Stock.php
│ ├── Subscription.php
│ └── Supplier.php
├── ShopServiceProvider.php
└── helpers.php
└── views
├── account
└── index.blade.php
├── admin
└── index.blade.php
├── base.blade.php
├── basket
└── index.blade.php
├── catalog
├── count.blade.php
├── detail.blade.php
├── home.blade.php
├── list.blade.php
├── session.blade.php
├── stock.blade.php
├── suggest.blade.php
└── tree.blade.php
├── checkout
├── confirm.blade.php
├── index.blade.php
└── update.blade.php
├── jqadm
└── index.blade.php
├── page
└── index.blade.php
└── supplier
└── detail.blade.php
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | # PHP CircleCI 2.0 configuration file
2 | #
3 | # Check https://circleci.com/docs/2.0/language-php/ for more details
4 | #
5 | version: 2
6 |
7 | jobs:
8 | "php-8.0 / mysql-8.0":
9 | docker:
10 | - image: aimeos/ci-php:8.0
11 | - image: cimg/mysql:8.0
12 | environment:
13 | MYSQL_ROOT_PASSWORD: rootpw
14 | MYSQL_DATABASE: laravel
15 | MYSQL_USER: aimeos
16 | MYSQL_PASSWORD: aimeos
17 | steps:
18 | - checkout
19 | - run: wget https://getcomposer.org/download/latest-stable/composer.phar -O composer
20 | - run: php composer req "laravel/framework:~9.0" --no-update
21 | - run: php composer req "phpunit/phpunit:~9.0" --no-update --dev
22 | - restore_cache:
23 | keys:
24 | - php80-{{ checksum "composer.json" }}
25 | - run: php composer update -n --prefer-dist
26 | - save_cache:
27 | key: php80-{{ checksum "composer.json" }}
28 | paths: [./vendor]
29 | - run: for i in `seq 1 10`; do nc -z 127.0.0.1 3306 && echo OK && exit 0; echo -n .; sleep 1; done
30 | - run: ./vendor/bin/phpunit --coverage-clover coverage.xml
31 |
32 | "php-8.1 / mysql-8.0":
33 | docker:
34 | - image: aimeos/ci-php:8.1
35 | - image: cimg/mysql:8.0
36 | environment:
37 | MYSQL_ROOT_PASSWORD: rootpw
38 | MYSQL_DATABASE: laravel
39 | MYSQL_USER: aimeos
40 | MYSQL_PASSWORD: aimeos
41 | steps:
42 | - checkout
43 | - run: wget https://getcomposer.org/download/latest-stable/composer.phar -O composer
44 | - run: php composer req "laravel/framework:~9.0" --no-update
45 | - run: php composer req "phpunit/phpunit:~9.0" --no-update --dev
46 | - restore_cache:
47 | keys:
48 | - php81-{{ checksum "composer.json" }}
49 | - run: php composer update -n --prefer-dist
50 | - save_cache:
51 | key: php81-{{ checksum "composer.json" }}
52 | paths: [./vendor]
53 | - run: for i in `seq 1 10`; do nc -z 127.0.0.1 3306 && echo OK && exit 0; echo -n .; sleep 1; done
54 | - run: ./vendor/bin/phpunit --coverage-clover coverage.xml
55 |
56 | "php-8.2 / mysql-8.0":
57 | docker:
58 | - image: aimeos/ci-php:8.2
59 | - image: cimg/mysql:8.0
60 | environment:
61 | MYSQL_ROOT_PASSWORD: rootpw
62 | MYSQL_DATABASE: laravel
63 | MYSQL_USER: aimeos
64 | MYSQL_PASSWORD: aimeos
65 | steps:
66 | - checkout
67 | - run: wget https://getcomposer.org/download/latest-stable/composer.phar -O composer
68 | - run: php composer req "laravel/framework:~10.0" --no-update
69 | - run: php composer req "phpunit/phpunit:~9.0" --no-update --dev
70 | - restore_cache:
71 | keys:
72 | - php82-{{ checksum "composer.json" }}
73 | - run: php composer update -n --prefer-dist
74 | - save_cache:
75 | key: php82-{{ checksum "composer.json" }}
76 | paths: [./vendor]
77 | - run: for i in `seq 1 10`; do nc -z 127.0.0.1 3306 && echo OK && exit 0; echo -n .; sleep 1; done
78 | - run: ./vendor/bin/phpunit --coverage-clover coverage.xml
79 |
80 | workflows:
81 | version: 2
82 | unittest:
83 | jobs:
84 | - "php-8.0 / mysql-8.0"
85 | - "php-8.1 / mysql-8.0"
86 | - "php-8.2 / mysql-8.0"
87 |
--------------------------------------------------------------------------------
/.coveralls.yml:
--------------------------------------------------------------------------------
1 | src_dir: ./
2 | json_path: coveralls.json
3 | coverage_clover: coverage.xml
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Aimeos
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |

2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ## Features
11 |
12 | This marketplace is a full-featured e-commerce package:
13 |
14 | * Multi vendor, multi channel and multi warehouse
15 | * From one to 1,000,000,000+ items
16 | * Extremly fast down to 20ms
17 | * For multi-tentant e-commerce SaaS solutions with unlimited vendors
18 | * Bundles, vouchers, virtual, configurable, custom and event products
19 | * Subscriptions with recurring payments
20 | * 100+ payment gateways
21 | * Full RTL support (frontend and backend)
22 | * Block/tier pricing out of the box
23 | * Extension for customer/group based prices
24 | * Discount and voucher support
25 | * Flexible basket rule system
26 | * Full-featured admin backend
27 | * Beautiful admin dashboard
28 | * Configurable product data sets
29 | * JSON REST API based on jsonapi.org
30 | * GraphQL API for administration
31 | * Completly modular structure
32 | * Extremely configurable and extensible
33 | * Extension for market places with millions of vendors
34 | * Fully SEO optimized including rich snippets
35 | * Translated to 30+ languages
36 | * AI-based text translation
37 | * Optimized for smart phones and tablets
38 | * Secure and reviewed implementation
39 | * High quality source code
40 |
41 | Check out the demos:
42 |
43 | * [Frontend demo](https://laravel.demo.aimeos.org)
44 | * [Admin demo](https://admin.demo.aimeos.org)
45 |
46 |
47 | ## Installation
48 |
49 | The Aimeos Laravel online shop package is a composer based library. It can be
50 | installed easiest by using [Composer 2.1+](https://getcomposer.org) in the root
51 | directory of your existing Laravel application:
52 |
53 | ```
54 | wget https://getcomposer.org/download/latest-stable/composer.phar -O composer
55 | php composer require aimeos/aimeos-laravel:~2023.04
56 | ```
57 |
58 | Then, add these lines to the composer.json of the **Laravel skeleton application**:
59 |
60 | ```json
61 | "prefer-stable": true,
62 | "minimum-stability": "dev",
63 | "require": {
64 | "aimeos/aimeos-laravel": "~2023.04",
65 | ...
66 | },
67 | "scripts": {
68 | "post-update-cmd": [
69 | "@php artisan migrate",
70 | "@php artisan vendor:publish --tag=public --force",
71 | "\\Aimeos\\Shop\\Composer::join"
72 | ],
73 | ...
74 | }
75 | ```
76 |
77 | Afterwards, install the Aimeos shop package using
78 |
79 | `composer update`
80 |
81 | In the last step you must now execute these artisan commands to get a working
82 | or updated Aimeos installation:
83 |
84 | ```bash
85 | php artisan vendor:publish --provider="Aimeos\Shop\ShopServiceProvider"
86 | php artisan migrate
87 | php artisan aimeos:setup --option=setup/default/demo:1
88 | ```
89 |
90 | In a production environment or if you don't want that the demo data gets
91 | installed, leave out the `--option=setup/default/demo:1` option.
92 |
93 | ## Authentication
94 |
95 | You have to set up one of Laravel's authentication starter kits. Laravel Breeze
96 | is the easiest one but you can also use Jetstream.
97 |
98 | ### Laravel 9 & 10
99 |
100 | ```bash
101 | composer require laravel/breeze
102 | php artisan breeze:install
103 | npm install && npm run build
104 | ```
105 |
106 | Laravel Breeze adds a route for `/profile` to `./routes/web.php` which may overwrite the
107 | `aimeos_shop_account` route. To avoid an exception about a missing `aimeos_shop_account`
108 | route, change the URL for these lines from `./routes/web.php` file from `/profile` to
109 | `/profile/me`:
110 |
111 | ```php
112 | Route::middleware('auth')->group(function () {
113 | Route::get('/profile/me', [ProfileController::class, 'edit'])->name('profile.edit');
114 | Route::patch('/profile/me', [ProfileController::class, 'update'])->name('profile.update');
115 | Route::delete('/profile/me', [ProfileController::class, 'destroy'])->name('profile.destroy');
116 | });
117 | ```
118 |
119 | For more information, please follow the Laravel documentation:
120 | * [Laravel 10.x](https://laravel.com/docs/10.x/authentication)
121 | * [Laravel 9.x](https://laravel.com/docs/9.x/authentication)
122 |
123 | ### Configure authentication
124 |
125 | As a last step, you need to extend the `boot()` method of your
126 | `App\Providers\AuthServiceProvider` class and add the lines to define how
127 | authorization for "admin" is checked in `app/Providers/AuthServiceProvider.php`:
128 |
129 | ```php
130 | public function boot()
131 | {
132 | // Keep the lines before
133 |
134 | \Illuminate\Support\Facades\Gate::define('admin', function($user, $class, $roles) {
135 | if( isset( $user->superuser ) && $user->superuser ) {
136 | return true;
137 | }
138 | return app( '\Aimeos\Shop\Base\Support' )->checkUserGroup( $user, $roles );
139 | });
140 | }
141 | ```
142 |
143 | ### Create account
144 |
145 | Test if your authentication setup works before you continue. Create an admin account
146 | for your Laravel application so you will be able to log into the Aimeos admin interface:
147 |
148 | ```bash
149 | php artisan aimeos:account --super
150 | ```
151 |
152 | The e-mail address is the user name for login and the account will work for the
153 | frontend too. To protect the new account, the command will ask you for a password.
154 | The same command can create limited accounts by using `--admin`, `--editor` or `--api`
155 | instead of `--super` (access to everything).
156 |
157 | ## Setup
158 |
159 | To reference images correctly, you have to adapt your `.env` file and set the `APP_URL`
160 | to your real URL, e.g.
161 |
162 | ```
163 | APP_URL=http://127.0.0.1:8000
164 | ```
165 |
166 | **Caution:** Make sure, Laravel uses the `file` session driver in your `.env` file!
167 | Otherwise, the shopping basket content won't get stored correctly!
168 |
169 | ```
170 | SESSION_DRIVER=file
171 | ```
172 |
173 | If your `./public` directory isn't writable by your web server, you have to create these
174 | directories:
175 |
176 | ```
177 | mkdir public/aimeos public/vendor
178 | chmod 777 public/aimeos public/vendor
179 | ```
180 |
181 | In a production environment, you should be more specific about the granted permissions!
182 |
183 | ## Test
184 |
185 | Then, you should be able to call the catalog list page in your browser. For a
186 | quick start, you can use the integrated web server. Simply execute this command
187 | in the base directory of your application:
188 |
189 | ```
190 | php artisan serve
191 | ```
192 |
193 | ### Frontend
194 |
195 | Point your browser to the list page of the shop using:
196 |
197 | http://127.0.0.1:8000/shop
198 |
199 | **Note:** Integrating the Aimeos package adds some routes like `/shop` or `/admin` to your
200 | Laravel installation but the **home page stays untouched!** If you want to add Aimeos to
201 | the home page as well, replace the route for "/" in `./routes/web.php` by this line:
202 |
203 | ```php
204 | Route::group(['middleware' => ['web']], function () {
205 | Route::get('/', '\Aimeos\Shop\Controller\CatalogController@homeAction')->name('aimeos_home');
206 | });
207 | ```
208 |
209 | For multi-vendor setups, read the article about [multiple shops](https://aimeos.org/docs/latest/laravel/customize/#multiple-shops).
210 |
211 | This will display the Aimeos catalog home component on the home page you you get a
212 | nice looking shop home page which will look like this:
213 |
214 | [](http://127.0.0.1:8000/shop)
215 |
216 | ### Backend
217 |
218 | If you've still started the internal PHP web server (`php artisan serve`)
219 | you should now open this URL in your browser:
220 |
221 | http://127.0.0.1:8000/admin
222 |
223 | Enter the e-mail address and the password of the newly created user and press "Login".
224 | If you don't get redirected to the admin interface (that depends on the authentication
225 | code you've created according to the Laravel documentation), point your browser to the
226 | `/admin` URL again.
227 |
228 | **Caution:** Make sure that you aren't already logged in as a non-admin user! In this
229 | case, login won't work because Laravel requires you to log out first.
230 |
231 | [](http://127.0.0.1:8000/admin)
232 |
233 | ## Hints
234 |
235 | To simplify development, you should configure to use no content cache. You can
236 | do this in the `config/shop.php` file of your Laravel application by adding
237 | these lines at the bottom:
238 |
239 | ```php
240 | 'madmin' => [
241 | 'cache' => [
242 | 'manager' => [
243 | 'name' => 'None',
244 | ],
245 | ],
246 | ],
247 | ```
248 |
249 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "aimeos/aimeos-laravel",
3 | "description": "Professional, full-featured and high performance Laravel e-commerce package for online shops and complex B2B projects",
4 | "homepage": "https://aimeos.org/Laravel",
5 | "type": "laravel-bundle",
6 | "license": "MIT",
7 | "keywords": ["aimeos", "laravel", "e-commerce", "ecommerce", "B2B", "shop", "portal", "marketplace", "API", "JSON", "GraphQL"],
8 | "support": {
9 | "source": "https://github.com/Aimeos/aimeos-laravel",
10 | "issues": "https://github.com/Aimeos/aimeos-laravel/issues",
11 | "forum": "https://aimeos.org/help",
12 | "wiki": "https://aimeos.org/docs"
13 | },
14 | "prefer-stable": true,
15 | "minimum-stability": "dev",
16 | "require": {
17 | "composer-runtime-api": "^2.1",
18 | "doctrine/dbal": "~2.9||~3.0",
19 | "laravel/framework": "^9.0||^10.0",
20 | "nyholm/psr7": "~1.2",
21 | "laminas/laminas-diactoros": "~2.5||~3.0",
22 | "symfony/psr-http-message-bridge": "~2.0",
23 | "aimeos/aimeos-core": "dev-master",
24 | "aimeos/ai-laravel": "dev-master",
25 | "aimeos/ai-admin-graphql": "dev-master",
26 | "aimeos/ai-admin-jqadm": "dev-master",
27 | "aimeos/ai-admin-jsonadm": "dev-master",
28 | "aimeos/ai-client-html": "dev-master",
29 | "aimeos/ai-client-jsonapi": "dev-master",
30 | "aimeos/ai-cms-grapesjs": "dev-master",
31 | "aimeos/ai-controller-jobs": "dev-master",
32 | "aimeos/ai-controller-frontend": "dev-master"
33 | },
34 | "require-dev": {
35 | "phpunit/phpunit": "^9.0||^10.0",
36 | "orchestra/testbench": "~7.0||~8.0",
37 | "orchestra/testbench-browser-kit": "~7.0||~8.0",
38 | "php-coveralls/php-coveralls": "~2.0"
39 | },
40 | "autoload": {
41 | "psr-4": {
42 | "Aimeos\\Shop\\": "src/"
43 | },
44 | "files": [
45 | "src/helpers.php"
46 | ]
47 | },
48 | "autoload-dev": {
49 | "classmap": [
50 | "tests/AimeosTestAbstract.php",
51 | "tests/HelpersTest.php"
52 | ]
53 | },
54 | "extra": {
55 | "laravel": {
56 | "providers": [
57 | "Aimeos\\Shop\\ShopServiceProvider"
58 | ]
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/config/default.php:
--------------------------------------------------------------------------------
1 | false,
13 | 'apc_prefix' => 'laravel:',
14 | 'extdir' => base_path( 'ext' ),
15 | 'pcntl_max' => 4,
16 | 'pcntl_priority' => 19,
17 | 'uploaddir' => '/',
18 |
19 | 'page' => [
20 | 'account-index' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'account/profile', 'account/review', 'account/subscription', 'account/basket', 'account/history', 'account/favorite', 'account/watch', 'catalog/session'],
21 | 'basket-index' => ['locale/select', 'catalog/tree', 'catalog/search', 'basket/standard', 'basket/bulk', 'basket/related'],
22 | 'catalog-count' => ['catalog/count'],
23 | 'catalog-detail' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/stage', 'catalog/detail', 'catalog/session'],
24 | 'catalog-home' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/home'],
25 | 'catalog-list' => ['locale/select', 'basket/mini', 'catalog/filter', 'catalog/tree', 'catalog/search', 'catalog/price', 'catalog/supplier', 'catalog/attribute', 'catalog/session', 'catalog/stage', 'catalog/lists'],
26 | 'catalog-session' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/session'],
27 | 'catalog-stock' => ['catalog/stock'],
28 | 'catalog-suggest' => ['catalog/suggest'],
29 | 'catalog-tree' => ['locale/select', 'basket/mini', 'catalog/filter', 'catalog/tree', 'catalog/search', 'catalog/price', 'catalog/supplier', 'catalog/attribute', 'catalog/session', 'catalog/stage', 'catalog/lists'],
30 | 'checkout-confirm' => ['catalog/tree', 'catalog/search', 'checkout/confirm'],
31 | 'checkout-index' => ['locale/select', 'catalog/tree', 'catalog/search', 'checkout/standard'],
32 | 'checkout-update' => ['checkout/update'],
33 | 'supplier-detail' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'supplier/detail', 'catalog/lists'],
34 | ],
35 |
36 | 'admin' => [
37 | 'graphql' => [
38 | 'url' => [
39 | 'target' => 'aimeos_shop_graphql_post',
40 | 'config' => [
41 | 'absoluteUri' => true,
42 | ],
43 | ],
44 | ],
45 | 'jqadm' => [
46 | 'url' => [
47 | 'batch' => [
48 | 'target' => 'aimeos_shop_jqadm_batch'
49 | ],
50 | 'copy' => [
51 | 'target' => 'aimeos_shop_jqadm_copy'
52 | ],
53 | 'create' => [
54 | 'target' => 'aimeos_shop_jqadm_create'
55 | ],
56 | 'delete' => [
57 | 'target' => 'aimeos_shop_jqadm_delete'
58 | ],
59 | 'export' => [
60 | 'target' => 'aimeos_shop_jqadm_export'
61 | ],
62 | 'get' => [
63 | 'target' => 'aimeos_shop_jqadm_get'
64 | ],
65 | 'import' => [
66 | 'target' => 'aimeos_shop_jqadm_import'
67 | ],
68 | 'save' => [
69 | 'target' => 'aimeos_shop_jqadm_save'
70 | ],
71 | 'search' => [
72 | 'target' => 'aimeos_shop_jqadm_search'
73 | ],
74 | ],
75 | ],
76 | 'jsonadm' => [
77 | 'url' => [
78 | 'target' => 'aimeos_shop_jsonadm_get',
79 | 'config' => [
80 | 'absoluteUri' => true,
81 | ],
82 | 'options' => [
83 | 'target' => 'aimeos_shop_jsonadm_options',
84 | 'config' => [
85 | 'absoluteUri' => true,
86 | ],
87 | ],
88 | ],
89 | ],
90 | ],
91 | 'client' => [
92 | 'html' => [
93 | 'account' => [
94 | 'index' => [
95 | 'url' => [
96 | 'target' => 'aimeos_shop_account',
97 | ],
98 | ],
99 | 'basket' => [
100 | 'url' => [
101 | 'target' => 'aimeos_shop_account',
102 | ],
103 | ],
104 | 'review' => [
105 | 'url' => [
106 | 'target' => 'aimeos_shop_account',
107 | ],
108 | ],
109 | 'profile' => [
110 | 'url' => [
111 | 'target' => 'aimeos_shop_account',
112 | ],
113 | ],
114 | 'subscription' => [
115 | 'url' => [
116 | 'target' => 'aimeos_shop_account',
117 | ],
118 | ],
119 | 'history' => [
120 | 'url' => [
121 | 'target' => 'aimeos_shop_account',
122 | ],
123 | ],
124 | 'favorite' => [
125 | 'url' => [
126 | 'target' => 'aimeos_shop_account_favorite',
127 | ],
128 | ],
129 | 'watch' => [
130 | 'url' => [
131 | 'target' => 'aimeos_shop_account_watch',
132 | ],
133 | ],
134 | 'download' => [
135 | 'url' => [
136 | 'target' => 'aimeos_shop_account_download',
137 | ],
138 | 'error' => [
139 | 'url' => [
140 | 'target' => 'aimeos_shop_account',
141 | ],
142 | ],
143 | ],
144 | ],
145 | 'cms' => [
146 | 'page' => [
147 | 'url' => [
148 | 'target' => 'aimeos_page',
149 | ],
150 | ],
151 | ],
152 | 'catalog' => [
153 | 'count' => [
154 | 'url' => [
155 | 'target' => 'aimeos_shop_count',
156 | ],
157 | ],
158 | 'detail' => [
159 | 'url' => [
160 | 'target' => 'aimeos_shop_detail',
161 | ],
162 | ],
163 | 'home' => [
164 | 'url' => [
165 | 'target' => 'aimeos_home',
166 | ],
167 | ],
168 | 'lists' => [
169 | 'url' => [
170 | 'target' => 'aimeos_shop_list',
171 | ],
172 | ],
173 | 'session' => [
174 | 'pinned' => [
175 | 'url' => [
176 | 'target' => 'aimeos_shop_session_pinned',
177 | ],
178 | ],
179 | ],
180 | 'stock' => [
181 | 'url' => [
182 | 'target' => 'aimeos_shop_stock',
183 | ],
184 | ],
185 | 'suggest' => [
186 | 'url' => [
187 | 'target' => 'aimeos_shop_suggest',
188 | ],
189 | ],
190 | 'tree' => [
191 | 'url' => [
192 | 'target' => 'aimeos_shop_tree',
193 | ],
194 | ],
195 | ],
196 | 'common' => [
197 | 'template' => [
198 | 'baseurl' => public_path( 'vendor/shop/themes/default' ),
199 | ],
200 | ],
201 | 'basket' => [
202 | 'standard' => [
203 | 'url' => [
204 | 'target' => 'aimeos_shop_basket',
205 | ],
206 | ],
207 | ],
208 | 'checkout' => [
209 | 'confirm' => [
210 | 'url' => [
211 | 'target' => 'aimeos_shop_confirm',
212 | ],
213 | ],
214 | 'standard' => [
215 | 'url' => [
216 | 'target' => 'aimeos_shop_checkout',
217 | ],
218 | 'summary' => [
219 | 'option' => [
220 | 'terms' => [
221 | 'url' => [
222 | 'target' => 'aimeos_page',
223 | ],
224 | 'privacy' => [
225 | 'url' => [
226 | 'target' => 'aimeos_page',
227 | ],
228 | ],
229 | 'cancel' => [
230 | 'url' => [
231 | 'target' => 'aimeos_page',
232 | ],
233 | ],
234 | ],
235 | ],
236 | ],
237 | ],
238 | 'update' => [
239 | 'url' => [
240 | 'target' => 'aimeos_shop_update',
241 | ],
242 | ],
243 | ],
244 | 'locale' => [
245 | 'select' => [
246 | 'currency' => [
247 | 'param-name' => 'currency',
248 | ],
249 | 'language' => [
250 | 'param-name' => 'locale',
251 | ],
252 | ],
253 | ],
254 | 'supplier' => [
255 | 'detail' => [
256 | 'url' => [
257 | 'target' => 'aimeos_shop_supplier',
258 | ],
259 | ],
260 | ]
261 | ],
262 | 'jsonapi' => [
263 | 'url' => [
264 | 'target' => 'aimeos_shop_jsonapi_options',
265 | 'config' => [
266 | 'absoluteUri' => true,
267 | ],
268 | ],
269 | ],
270 | ],
271 |
272 | 'controller' => [
273 | 'jobs' => [
274 | 'to-email' => config( 'mail.from.address' ),
275 | ]
276 | ],
277 |
278 | 'mshop' => [
279 | 'customer' => [
280 | 'manager' => [
281 | 'name' => 'Laravel',
282 | 'password' => [
283 | 'name' => 'Bcrypt',
284 | ],
285 | ],
286 | ],
287 | 'index' => [
288 | 'manager' => [
289 | 'name' => $aimeosIndexManagerName,
290 | 'attribute' => [
291 | 'name' => $aimeosIndexManagerName,
292 | ],
293 | 'catalog' => [
294 | 'name' => $aimeosIndexManagerName,
295 | ],
296 | 'price' => [
297 | 'name' => $aimeosIndexManagerName,
298 | ],
299 | 'supplier' => [
300 | 'name' => $aimeosIndexManagerName,
301 | ],
302 | 'text' => [
303 | 'name' => $aimeosIndexManagerName,
304 | ],
305 | ],
306 | ],
307 | ],
308 | ];
309 |
--------------------------------------------------------------------------------
/config/shop.php:
--------------------------------------------------------------------------------
1 | false, // enable for maximum performance if APCu is available
6 | 'apc_prefix' => 'laravel:', // prefix for caching config and translation in APCu
7 | 'num_formatter' => 'Locale', // locale based number formatter (alternative: "Standard")
8 | 'pcntl_max' => 4, // maximum number of parallel command line processes when starting jobs
9 | 'version' => env( 'APP_VERSION', 1 ), // shop CSS/JS file version
10 |
11 | 'routes' => [
12 | // Docs: https://aimeos.org/docs/latest/laravel/extend/#custom-routes
13 | // Multi-sites: https://aimeos.org/docs/latest/laravel/customize/#multiple-shops
14 | // 'admin' => ['prefix' => 'admin', 'middleware' => ['web']],
15 | // 'jqadm' => ['prefix' => 'admin/{site}/jqadm', 'middleware' => ['web', 'auth']],
16 | // 'graphql' => ['prefix' => 'admin/{site}/graphql', 'middleware' => ['web', 'auth']],
17 | // 'jsonadm' => ['prefix' => 'admin/{site}/jsonadm', 'middleware' => ['web', 'auth']],
18 | // 'jsonapi' => ['prefix' => 'jsonapi', 'middleware' => ['web', 'api']],
19 | // 'account' => ['prefix' => 'profile', 'middleware' => ['web', 'auth']],
20 | // 'default' => ['prefix' => 'shop', 'middleware' => ['web']],
21 | // 'confirm' => ['prefix' => 'shop', 'middleware' => ['web']],
22 | // 'supplier' => ['prefix' => 's', 'middleware' => ['web']],
23 | // 'page' => ['prefix' => 'p', 'middleware' => ['web']],
24 | // 'home' => ['middleware' => ['web']],
25 | // 'update' => [],
26 | ],
27 |
28 | 'page' => [
29 | 'account-index' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'account/profile', 'account/review', 'account/subscription', 'account/basket', 'account/history', 'account/favorite', 'account/watch', 'catalog/session'],
30 | 'basket-index' => ['locale/select', 'catalog/tree', 'catalog/search', 'basket/standard', 'basket/bulk', 'basket/related'],
31 | 'catalog-count' => ['catalog/count'],
32 | 'catalog-detail' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/stage', 'catalog/detail', 'catalog/session'],
33 | 'catalog-home' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/home'],
34 | 'catalog-list' => ['locale/select', 'basket/mini', 'catalog/filter', 'catalog/tree', 'catalog/search', 'catalog/price', 'catalog/supplier', 'catalog/attribute', 'catalog/session', 'catalog/stage', 'catalog/lists'],
35 | 'catalog-session' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/session'],
36 | 'catalog-stock' => ['catalog/stock'],
37 | 'catalog-suggest' => ['catalog/suggest'],
38 | 'catalog-tree' => ['locale/select', 'basket/mini', 'catalog/filter', 'catalog/tree', 'catalog/search', 'catalog/price', 'catalog/supplier', 'catalog/attribute', 'catalog/session', 'catalog/stage', 'catalog/lists'],
39 | 'checkout-confirm' => ['catalog/tree', 'catalog/search', 'checkout/confirm'],
40 | 'checkout-index' => ['locale/select', 'catalog/tree', 'catalog/search', 'checkout/standard'],
41 | 'checkout-update' => ['checkout/update'],
42 | 'supplier-detail' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'supplier/detail', 'catalog/lists'],
43 | 'cms' => ['cms/page', 'catalog/tree', 'basket/mini'],
44 | ],
45 |
46 | 'resource' => [
47 | 'db' => [
48 | 'adapter' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.driver', 'mysql' ),
49 | 'host' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.host', '127.0.0.1' ),
50 | 'port' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.port', '3306' ),
51 | 'socket' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.unix_socket', '' ),
52 | 'database' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.database', 'forge' ),
53 | 'username' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.username', 'forge' ),
54 | 'password' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.password', '' ),
55 | 'stmt' => config( 'database.default', 'mysql' ) === 'mysql' ? ["SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'"] : [],
56 | 'limit' => 3, // maximum number of concurrent database connections
57 | 'defaultTableOptions' => [
58 | 'charset' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.charset' ),
59 | 'collate' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.collation' ),
60 | ],
61 | 'driverOptions' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.options' ),
62 | ],
63 | 'fs' => [
64 | 'adapter' => 'Standard',
65 | 'tempdir' => storage_path( 'tmp' ),
66 | 'basedir' => public_path(),
67 | 'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/'),
68 | ],
69 | 'fs-media' => [
70 | 'adapter' => 'Standard',
71 | 'tempdir' => storage_path( 'tmp' ),
72 | 'basedir' => public_path( 'aimeos' ),
73 | 'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/') . '/aimeos',
74 | ],
75 | 'fs-mimeicon' => [
76 | 'adapter' => 'Standard',
77 | 'tempdir' => storage_path( 'tmp' ),
78 | 'basedir' => public_path( 'vendor/shop/mimeicons' ),
79 | 'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/') . '/vendor/shop/mimeicons',
80 | ],
81 | 'fs-theme' => [
82 | 'adapter' => 'Standard',
83 | 'tempdir' => storage_path( 'tmp' ),
84 | 'basedir' => public_path( 'vendor/shop/themes' ),
85 | 'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/') . '/vendor/shop/themes',
86 | ],
87 | 'fs-admin' => [
88 | 'adapter' => 'Standard',
89 | 'tempdir' => storage_path( 'tmp' ),
90 | 'basedir' => storage_path( 'admin' ),
91 | ],
92 | 'fs-export' => [
93 | 'adapter' => 'Standard',
94 | 'tempdir' => storage_path( 'tmp' ),
95 | 'basedir' => storage_path( 'export' ),
96 | ],
97 | 'fs-import' => [
98 | 'adapter' => 'Standard',
99 | 'tempdir' => storage_path( 'tmp' ),
100 | 'basedir' => storage_path( 'import' ),
101 | ],
102 | 'fs-secure' => [
103 | 'adapter' => 'Standard',
104 | 'tempdir' => storage_path( 'tmp' ),
105 | 'basedir' => storage_path( 'secure' ),
106 | ],
107 | 'mq' => [
108 | 'adapter' => 'Standard',
109 | 'db' => 'db',
110 | ],
111 | 'email' => [
112 | 'from-email' => config( 'mail.from.address' ),
113 | 'from-name' => config( 'mail.from.name' ),
114 | ],
115 | ],
116 |
117 | 'admin' => [],
118 |
119 | 'client' => [
120 | 'html' => [
121 | 'basket' => [
122 | 'cache' => [
123 | // 'enable' => false, // Disable basket content caching for development
124 | ],
125 | ],
126 | 'common' => [
127 | 'cache' => [
128 | // 'force' => true // enforce caching for logged in users
129 | ],
130 | ],
131 | 'catalog' => [
132 | 'lists' => [
133 | 'basket-add' => true, // shows add to basket in list views
134 | // 'infinite-scroll' => true, // load more products in list view
135 | // 'size' => 48, // number of products per page
136 | ],
137 | 'selection' => [
138 | 'type' => [// how variant attributes are displayed
139 | 'color' => 'radio',
140 | 'length' => 'radio',
141 | 'width' => 'radio',
142 | ],
143 | ],
144 | ],
145 | ],
146 | ],
147 |
148 | 'controller' => [
149 | 'frontend' => [
150 | 'catalog' => [
151 | 'levels-always' => 3 // number of category levels for mega menu
152 | ]
153 | ]
154 | ],
155 |
156 | 'i18n' => [
157 | ],
158 |
159 | 'madmin' => [
160 | 'cache' => [
161 | 'manager' => [
162 | // 'name' => 'None', // Disable caching for development
163 | ],
164 | ],
165 | 'log' => [
166 | 'manager' => [
167 | // 'loglevel' => 7, // Enable debug logging into madmin_log table
168 | ],
169 | ],
170 | ],
171 |
172 | 'mshop' => [
173 | 'locale' => [
174 | // 'site' => '', // used instead of "default"
175 | ]
176 | ],
177 |
178 |
179 | 'command' => [
180 | ],
181 |
182 | 'frontend' => [
183 | ],
184 |
185 | 'backend' => [
186 | ],
187 |
188 | ];
189 |
--------------------------------------------------------------------------------
/public/mimeicons/application/illustrator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/illustrator.png
--------------------------------------------------------------------------------
/public/mimeicons/application/javascript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/javascript.png
--------------------------------------------------------------------------------
/public/mimeicons/application/msword.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/msword.png
--------------------------------------------------------------------------------
/public/mimeicons/application/octet-stream.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/octet-stream.png
--------------------------------------------------------------------------------
/public/mimeicons/application/pdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/pdf.png
--------------------------------------------------------------------------------
/public/mimeicons/application/pgp-encrypted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/pgp-encrypted.png
--------------------------------------------------------------------------------
/public/mimeicons/application/pgp-keys.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/pgp-keys.png
--------------------------------------------------------------------------------
/public/mimeicons/application/pkcs7-mime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/pkcs7-mime.png
--------------------------------------------------------------------------------
/public/mimeicons/application/postscript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/postscript.png
--------------------------------------------------------------------------------
/public/mimeicons/application/relaxng.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/relaxng.png
--------------------------------------------------------------------------------
/public/mimeicons/application/rss+xml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/rss+xml.png
--------------------------------------------------------------------------------
/public/mimeicons/application/rtf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/rtf.png
--------------------------------------------------------------------------------
/public/mimeicons/application/sxw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/sxw.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.ms-access.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.ms-access.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.ms-excel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.ms-excel.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.ms-powerpoint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.ms-powerpoint.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.chart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.chart.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.database.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.database.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.formula.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.formula.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.graphics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.graphics.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.image.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.presentation-template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.presentation-template.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.presentation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.presentation.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.spreadsheet-template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.spreadsheet-template.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.spreadsheet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.spreadsheet.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.oasis.opendocument.text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.oasis.opendocument.text.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.rn-realmedia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.rn-realmedia.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.scribus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.scribus.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.stardivision.calc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.stardivision.calc.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.stardivision.draw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.stardivision.draw.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.sun.xml.calc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.sun.xml.calc.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.sun.xml.calc.template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.sun.xml.calc.template.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.sun.xml.draw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.sun.xml.draw.png
--------------------------------------------------------------------------------
/public/mimeicons/application/vnd.sun.xml.draw.template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/vnd.sun.xml.draw.template.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-7z-compressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-7z-compressed.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-ace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-ace.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-applix-spreadsheet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-applix-spreadsheet.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-ar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-ar.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-arc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-arc.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-archive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-archive.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-arj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-arj.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-awk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-awk.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-bittorrent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-bittorrent.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-bzdvi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-bzdvi.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-bzip-compressed-tar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-bzip-compressed-tar.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-bzip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-bzip.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-cd-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-cd-image.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-cda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-cda.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-compress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-compress.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-compressed-tar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-compressed-tar.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-cpio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-cpio.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-cue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-cue.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-deb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-deb.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-designer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-designer.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-desktop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-desktop.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-egon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-egon.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-executable-script.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-executable-script.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-executable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-executable.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-font-afm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-font-afm.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-font-bdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-font-bdf.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-font-otf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-font-otf.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-font-pcf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-font-pcf.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-font-snf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-font-snf.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-font-ttf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-font-ttf.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-font-type1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-font-type1.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-gnumeric.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-gnumeric.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-gzdvi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-gzdvi.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-gzip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-gzip.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-gzpostscript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-gzpostscript.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-java-applet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-java-applet.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-java-archive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-java-archive.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-java.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-java.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-javascript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-javascript.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-k3b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-k3b.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-kcsrc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-kcsrc.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-kgetlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-kgetlist.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-kontour.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-kontour.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-kplato.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-kplato.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-krita.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-krita.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-kvtml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-kvtml.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-lha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-lha.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-lyx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-lyx.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-lzma-compressed-tar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-lzma-compressed-tar.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-lzop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-lzop.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-m4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-m4.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-marble.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-marble.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-mimearchive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-mimearchive.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-mplayer2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-mplayer2.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-ms-dos-executable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-ms-dos-executable.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-mswinurl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-mswinurl.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-mswrite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-mswrite.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-nzb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-nzb.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-object.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-object.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-pak.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-pak.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-pem-key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-pem-key.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-perl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-perl.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-php.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-php.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-plasma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-plasma.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-python-bytecode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-python-bytecode.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-qet-element.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-qet-element.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-qet-project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-qet-project.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-quattropro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-quattropro.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-rar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-rar.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-rpm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-rpm.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-ruby.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-ruby.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-sharedlib.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-sharedlib.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-shellscript.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-shellscript.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-shockwave-flash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-shockwave-flash.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-siag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-siag.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-smb-server.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-smb-server.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-smb-workgroup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-smb-workgroup.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-subrip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-subrip.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-tar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-tar.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-tarz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-tarz.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-tgif.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-tgif.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-trash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-trash.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-troff-man.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-troff-man.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-tzo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-tzo.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-wmf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-wmf.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-zerosize.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-zerosize.png
--------------------------------------------------------------------------------
/public/mimeicons/application/x-zoo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/x-zoo.png
--------------------------------------------------------------------------------
/public/mimeicons/application/xhtml+xml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/xhtml+xml.png
--------------------------------------------------------------------------------
/public/mimeicons/application/xml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/xml.png
--------------------------------------------------------------------------------
/public/mimeicons/application/xsd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/xsd.png
--------------------------------------------------------------------------------
/public/mimeicons/application/xslt+xml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/xslt+xml.png
--------------------------------------------------------------------------------
/public/mimeicons/application/zip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/application/zip.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/ac3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/ac3.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/midi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/midi.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/prs.sid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/prs.sid.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/vnd.rn-realvideo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/vnd.rn-realvideo.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/x-adpcm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/x-adpcm.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/x-aiff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/x-aiff.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/x-flac+ogg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/x-flac+ogg.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/x-flac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/x-flac.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/x-generic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/x-generic.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/x-monkey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/x-monkey.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/x-speex+ogg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/x-speex+ogg.png
--------------------------------------------------------------------------------
/public/mimeicons/audio/x-wav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/audio/x-wav.png
--------------------------------------------------------------------------------
/public/mimeicons/fonts/package.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/fonts/package.png
--------------------------------------------------------------------------------
/public/mimeicons/image/svg+xml-compressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/image/svg+xml-compressed.png
--------------------------------------------------------------------------------
/public/mimeicons/image/svg+xml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/image/svg+xml.png
--------------------------------------------------------------------------------
/public/mimeicons/image/x-eps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/image/x-eps.png
--------------------------------------------------------------------------------
/public/mimeicons/image/x-generic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/image/x-generic.png
--------------------------------------------------------------------------------
/public/mimeicons/image/x-vnd.trolltech.qpicture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/image/x-vnd.trolltech.qpicture.png
--------------------------------------------------------------------------------
/public/mimeicons/image/x-xfig.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/image/x-xfig.png
--------------------------------------------------------------------------------
/public/mimeicons/inode/directory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/inode/directory.png
--------------------------------------------------------------------------------
/public/mimeicons/message/news.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/message/news.png
--------------------------------------------------------------------------------
/public/mimeicons/message/rfc822.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/message/rfc822.png
--------------------------------------------------------------------------------
/public/mimeicons/package/x-generic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/package/x-generic.png
--------------------------------------------------------------------------------
/public/mimeicons/text/calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/calendar.png
--------------------------------------------------------------------------------
/public/mimeicons/text/css.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/css.png
--------------------------------------------------------------------------------
/public/mimeicons/text/csv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/csv.png
--------------------------------------------------------------------------------
/public/mimeicons/text/directory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/directory.png
--------------------------------------------------------------------------------
/public/mimeicons/text/enriched.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/enriched.png
--------------------------------------------------------------------------------
/public/mimeicons/text/html.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/html.png
--------------------------------------------------------------------------------
/public/mimeicons/text/mathml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/mathml.png
--------------------------------------------------------------------------------
/public/mimeicons/text/plain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/plain.png
--------------------------------------------------------------------------------
/public/mimeicons/text/rdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/rdf.png
--------------------------------------------------------------------------------
/public/mimeicons/text/rtf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/rtf.png
--------------------------------------------------------------------------------
/public/mimeicons/text/sgml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/sgml.png
--------------------------------------------------------------------------------
/public/mimeicons/text/troff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/troff.png
--------------------------------------------------------------------------------
/public/mimeicons/text/vcalendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/vcalendar.png
--------------------------------------------------------------------------------
/public/mimeicons/text/vnd.abc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/vnd.abc.png
--------------------------------------------------------------------------------
/public/mimeicons/text/vnd.wap.wml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/vnd.wap.wml.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-adasrc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-adasrc.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-authors.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-authors.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-bibtex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-bibtex.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-c++hdr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-c++hdr.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-c++src.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-c++src.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-changelog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-changelog.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-chdr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-chdr.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-cmake.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-cmake.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-copying.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-copying.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-csharp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-csharp.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-csrc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-csrc.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-dtd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-dtd.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-generic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-generic.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-haskell.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-haskell.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-hex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-hex.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-install.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-java.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-java.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-katefilelist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-katefilelist.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-ldif.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-ldif.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-log.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-makefile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-makefile.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-nfo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-nfo.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-objchdr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-objchdr.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-objcsrc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-objcsrc.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-pascal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-pascal.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-patch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-patch.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-po.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-po.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-python.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-python.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-readme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-readme.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-script.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-script.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-sql.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-sql.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-tcl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-tcl.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-tex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-tex.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-texinfo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-texinfo.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-vcard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-vcard.png
--------------------------------------------------------------------------------
/public/mimeicons/text/x-xslfo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/x-xslfo.png
--------------------------------------------------------------------------------
/public/mimeicons/text/xmcd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/xmcd.png
--------------------------------------------------------------------------------
/public/mimeicons/text/xml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/text/xml.png
--------------------------------------------------------------------------------
/public/mimeicons/unknown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/unknown.png
--------------------------------------------------------------------------------
/public/mimeicons/uri/mms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/uri/mms.png
--------------------------------------------------------------------------------
/public/mimeicons/uri/mmst.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/uri/mmst.png
--------------------------------------------------------------------------------
/public/mimeicons/uri/mmsu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/uri/mmsu.png
--------------------------------------------------------------------------------
/public/mimeicons/uri/pnm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/uri/pnm.png
--------------------------------------------------------------------------------
/public/mimeicons/uri/rtspt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/uri/rtspt.png
--------------------------------------------------------------------------------
/public/mimeicons/uri/rtspu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/uri/rtspu.png
--------------------------------------------------------------------------------
/public/mimeicons/video/mp4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/video/mp4.png
--------------------------------------------------------------------------------
/public/mimeicons/video/webm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/video/webm.png
--------------------------------------------------------------------------------
/public/mimeicons/video/x-generic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/video/x-generic.png
--------------------------------------------------------------------------------
/public/mimeicons/video/x-mng.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/video/x-mng.png
--------------------------------------------------------------------------------
/public/mimeicons/video/x-wmv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smile1130/laravel-vue-marketplace/c87e2b2c63ca0f98a608f3fef5c40360c8c6131c/public/mimeicons/video/x-wmv.png
--------------------------------------------------------------------------------
/src/Base/Aimeos.php:
--------------------------------------------------------------------------------
1 | config = $config;
35 | }
36 |
37 |
38 | /**
39 | * Returns the Aimeos object.
40 | *
41 | * @return \Aimeos\Bootstrap Aimeos bootstrap object
42 | */
43 | public function get() : \Aimeos\Bootstrap
44 | {
45 | if( $this->object === null )
46 | {
47 | $dir = base_path( 'ext' );
48 |
49 | if( !is_dir( $dir ) ) {
50 | $dir = dirname( __DIR__, 4 ) . DIRECTORY_SEPARATOR . 'ext';
51 | }
52 |
53 | $extDirs = (array) $this->config->get( 'shop.extdir', $dir );
54 | $this->object = new \Aimeos\Bootstrap( $extDirs, false );
55 | }
56 |
57 | return $this->object;
58 | }
59 |
60 |
61 | /**
62 | * Returns the version of the Aimeos package
63 | *
64 | * @return string Version string
65 | */
66 | public function getVersion() : string
67 | {
68 | if( ( $content = @file_get_contents( base_path( 'composer.lock' ) ) ) !== false
69 | && ( $content = json_decode( $content, true ) ) !== null && isset( $content['packages'] )
70 | ) {
71 | foreach( (array) $content['packages'] as $item )
72 | {
73 | if( $item['name'] === 'aimeos/aimeos-laravel' ) {
74 | return $item['version'];
75 | }
76 | }
77 | }
78 |
79 | return '';
80 | }
81 | }
--------------------------------------------------------------------------------
/src/Base/Config.php:
--------------------------------------------------------------------------------
1 | aimeos = $aimeos;
41 | $this->config = $config;
42 | }
43 |
44 |
45 | /**
46 | * Creates a new configuration object.
47 | *
48 | * @param string $type Configuration type ("frontend" or "backend")
49 | * @return \Aimeos\Base\Config\Iface Configuration object
50 | */
51 | public function get( string $type = 'frontend' ) : \Aimeos\Base\Config\Iface
52 | {
53 | if( !isset( $this->objects[$type] ) )
54 | {
55 | $configPaths = $this->aimeos->get()->getConfigPaths();
56 | $cfgfile = dirname( dirname( __DIR__ ) ) . '/config/default.php';
57 |
58 | $config = new \Aimeos\Base\Config\PHPArray( require $cfgfile, $configPaths );
59 |
60 | if( $this->config->get( 'shop.apc_enabled', false ) == true ) {
61 | $config = new \Aimeos\Base\Config\Decorator\APC( $config, $this->config->get( 'shop.apc_prefix', 'laravel:' ) );
62 | }
63 |
64 | $config = new \Aimeos\Base\Config\Decorator\Memory( $config, $this->config->get( 'shop' ) );
65 |
66 | if( ( $conf = $this->config->get( 'shop.' . $type, array() ) ) !== array() ) {
67 | $config = new \Aimeos\Base\Config\Decorator\Memory( $config, $conf );
68 | }
69 |
70 | $this->objects[$type] = $config;
71 | }
72 |
73 | return $this->objects[$type];
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/src/Base/I18n.php:
--------------------------------------------------------------------------------
1 | aimeos = $aimeos;
41 | $this->config = $config;
42 | }
43 |
44 |
45 | /**
46 | * Creates new translation objects.
47 | *
48 | * @param array $languageIds List of two letter ISO language IDs
49 | * @return \Aimeos\Base\Translation\Iface[] List of translation objects
50 | */
51 | public function get( array $languageIds ) : array
52 | {
53 | $i18nPaths = $this->aimeos->get()->getI18nPaths();
54 |
55 | foreach( $languageIds as $langid )
56 | {
57 | if( !isset( $this->i18n[$langid] ) )
58 | {
59 | $i18n = new \Aimeos\Base\Translation\Gettext( $i18nPaths, $langid );
60 |
61 | if( $this->config->get( 'shop.apc_enabled', false ) == true ) {
62 | $i18n = new \Aimeos\Base\Translation\Decorator\APC( $i18n, $this->config->get( 'shop.apc_prefix', 'laravel:' ) );
63 | }
64 |
65 | if( $this->config->has( 'shop.i18n.' . $langid ) ) {
66 | $i18n = new \Aimeos\Base\Translation\Decorator\Memory( $i18n, $this->config->get( 'shop.i18n.' . $langid ) );
67 | }
68 |
69 | $this->i18n[$langid] = $i18n;
70 | }
71 | }
72 |
73 | return $this->i18n;
74 | }
75 | }
--------------------------------------------------------------------------------
/src/Base/Locale.php:
--------------------------------------------------------------------------------
1 | config = $config;
39 | }
40 |
41 |
42 | /**
43 | * Returns the locale item for the current request
44 | *
45 | * @param \Aimeos\MShop\ContextIface $context Context object
46 | * @return \Aimeos\MShop\Locale\Item\Iface Locale item object
47 | */
48 | public function get( \Aimeos\MShop\ContextIface $context ) : \Aimeos\MShop\Locale\Item\Iface
49 | {
50 | if( $this->locale === null )
51 | {
52 | $site = config( 'shop.mshop.locale.site', 'default' );
53 | $lang = app()->getLocale();
54 | $currency = '';
55 |
56 | if( Route::current() )
57 | {
58 | $site = Request::route( 'site', $site );
59 | $lang = Request::route( 'locale', $lang );
60 | $currency = Request::route( 'currency', $currency );
61 | }
62 |
63 | $site = Request::input( 'site', $site );
64 | $lang = Request::input( 'locale', $lang );
65 | $currency = Request::input( 'currency', $currency );
66 |
67 | $localeManager = \Aimeos\MShop::create( $context, 'locale' );
68 | $disableSites = $this->config->get( 'shop.disableSites', true );
69 |
70 | $this->locale = $localeManager->bootstrap( $site, $lang, $currency, $disableSites );
71 | }
72 |
73 | return $this->locale;
74 | }
75 |
76 |
77 | /**
78 | * Returns the locale item for the current request
79 | *
80 | * @param \Aimeos\MShop\ContextIface $context Context object
81 | * @param string $site Unique site code
82 | * @return \Aimeos\MShop\Locale\Item\Iface Locale item object
83 | */
84 | public function getBackend( \Aimeos\MShop\ContextIface $context, string $site ) : \Aimeos\MShop\Locale\Item\Iface
85 | {
86 | $localeManager = \Aimeos\MShop::create( $context, 'locale' );
87 |
88 | try {
89 | $localeItem = $localeManager->bootstrap( $site, '', '', false, null, true );
90 | } catch( \Aimeos\MShop\Exception $e ) {
91 | $localeItem = $localeManager->create();
92 | }
93 |
94 | return $localeItem->setCurrencyId( null )->setLanguageId( null );
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/src/Base/Shop.php:
--------------------------------------------------------------------------------
1 | context = $context->get();
43 | $locale = $this->context->locale();
44 |
45 | $tmplPaths = $aimeos->get()->getTemplatePaths( 'client/html/templates', $locale->getSiteItem()->getTheme() );
46 | $langid = $locale->getLanguageId();
47 |
48 | $this->view = $view->create( $this->context, $tmplPaths, $langid );
49 | $this->context->setView( $this->view );
50 | }
51 |
52 |
53 | /**
54 | * Returns the HTML client for the given name
55 | *
56 | * @param string $name Name of the shop component
57 | * @return \Aimeos\Client\Html\Iface HTML client
58 | */
59 | public function get( string $name ) : \Aimeos\Client\Html\Iface
60 | {
61 | if( !isset( $this->objects[$name] ) )
62 | {
63 | $client = \Aimeos\Client\Html::create( $this->context, $name );
64 | $client->setView( clone $this->view );
65 | $client->init();
66 |
67 | $this->objects[$name] = $client;
68 | }
69 |
70 | return $this->objects[$name];
71 | }
72 |
73 |
74 | /** Returns the view template for the given name
75 | *
76 | * @param string $name View name, e.g. "account.index"
77 | * @return string Template name, e.g. "shop::account.indx"
78 | */
79 | public function template( string $name ) : string
80 | {
81 | $theme = $this->context->locale()->getSiteItem()->getTheme();
82 | return \Illuminate\Support\Facades\View::exists( $theme . '::' . $name ) ? $theme . '::' . $name : 'shop::' . $name;
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/src/Base/Support.php:
--------------------------------------------------------------------------------
1 | context = $context;
45 | $this->locale = $locale;
46 | }
47 |
48 |
49 | /**
50 | * Checks if the user is in the specified group and associatied to the site
51 | *
52 | * @param \Illuminate\Foundation\Auth\User $user Authenticated user
53 | * @param string|array $groupcodes Unique user/customer group codes that are allowed
54 | * @return bool True if user is part of the group, false if not
55 | */
56 | public function checkUserGroup( \Illuminate\Foundation\Auth\User $user, $groupcodes ) : bool
57 | {
58 | $groups = ( is_array( $groupcodes ) ? implode( ',', $groupcodes ) : $groupcodes );
59 |
60 | if( isset( $this->access[$user->id][$groups] ) ) {
61 | return $this->access[$user->id][$groups];
62 | }
63 |
64 | $this->access[$user->id][$groups] = false;
65 |
66 | $context = $this->context->get( false );
67 | $siteid = current( array_reverse( explode( '.', trim( $user->siteid, '.' ) ) ) );
68 |
69 | if( $siteid ) {
70 | $site = \Aimeos\MShop::create( $context, 'locale/site' )->get( $siteid )->getCode();
71 | } else {
72 | $site = config( 'shop.mshop.locale.site', 'default' );
73 | }
74 |
75 | $site = ( Route::current() ? Route::input( 'site', Request::get( 'site', $site ) ) : $site );
76 | $context->setLocale( $this->locale->getBackend( $context, $site ) );
77 |
78 | foreach( array_reverse( $context->locale()->getSitePath() ) as $siteid )
79 | {
80 | if( $user->siteid === '' || $user->siteid === $siteid ) {
81 | $this->access[$user->id][$groups] = $this->checkGroups( $context, $user->id, $groupcodes );
82 | }
83 | }
84 |
85 | return $this->access[$user->id][$groups];
86 | }
87 |
88 |
89 | /**
90 | * Returns the available group codes
91 | *
92 | * @param \Aimeos\MShop\ContextIface $context Context item
93 | * @return string[] List of group codes
94 | */
95 | public function getGroups( \Aimeos\MShop\ContextIface $context ) : array
96 | {
97 | $manager = \Aimeos\MShop::create( $context, 'customer/group' );
98 |
99 | $search = $manager->filter();
100 | $search->setConditions( $search->compare( '==', 'customer.group.id', $context->groups() ) );
101 |
102 | return $manager->search( $search )->getCode()->toArray();
103 | }
104 |
105 |
106 | /**
107 | * Checks if one of the groups is associated to the given user ID
108 | *
109 | * @param \Aimeos\MShop\ContextIface $context Context item
110 | * @param string $userid ID of the logged in user
111 | * @param string[]|string $groupcodes List of group codes to check against
112 | * @return bool True if the user is in one of the groups, false if not
113 | */
114 | protected function checkGroups( \Aimeos\MShop\ContextIface $context, string $userid, $groupcodes ) : bool
115 | {
116 | $manager = \Aimeos\MShop::create( $context, 'customer/group' );
117 |
118 | $search = $manager->filter();
119 | $search->setConditions( $search->compare( '==', 'customer.group.code', (array) $groupcodes ) );
120 | $groupIds = $manager->search( $search )->keys()->toArray();
121 |
122 | $manager = \Aimeos\MShop::create( $context, 'customer/lists' );
123 |
124 | $search = $manager->filter()->slice( 0, 1 );
125 | $expr = array(
126 | $search->compare( '==', 'customer.lists.parentid', $userid ),
127 | $search->compare( '==', 'customer.lists.refid', $groupIds ),
128 | $search->compare( '==', 'customer.lists.domain', 'customer/group' ),
129 | );
130 | $search->setConditions( $search->combine( '&&', $expr ) );
131 |
132 | return !$manager->search( $search )->isEmpty();
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/src/Base/View.php:
--------------------------------------------------------------------------------
1 | i18n = $i18n;
48 | $this->config = $config;
49 | $this->support = $support;
50 | }
51 |
52 |
53 | /**
54 | * Creates the view object for the HTML client.
55 | *
56 | * @param \Aimeos\MShop\ContextIface $context Context object
57 | * @param array $templatePaths List of base path names with relative template paths as key/value pairs
58 | * @param string|null $locale Code of the current language or null for no translation
59 | * @return \Aimeos\Base\View\Iface View object
60 | */
61 | public function create( \Aimeos\MShop\ContextIface $context, array $templatePaths,
62 | string $locale = null ) : \Aimeos\Base\View\Iface
63 | {
64 | $engine = new \Aimeos\Base\View\Engine\Blade( app( 'Illuminate\Contracts\View\Factory' ) );
65 | $view = new \Aimeos\Base\View\Standard( $templatePaths, array( '.blade.php' => $engine ) );
66 |
67 | $config = $context->config();
68 | $session = $context->session();
69 |
70 | $this->addCsrf( $view );
71 | $this->addAccess( $view, $context );
72 | $this->addConfig( $view, $config );
73 | $this->addNumber( $view, $config, $locale );
74 | $this->addParam( $view );
75 | $this->addRequest( $view );
76 | $this->addResponse( $view );
77 | $this->addSession( $view, $session );
78 | $this->addTranslate( $view, $locale );
79 | $this->addUrl( $view );
80 |
81 | return $view;
82 | }
83 |
84 |
85 | /**
86 | * Adds the "access" helper to the view object
87 | *
88 | * @param \Aimeos\Base\View\Iface $view View object
89 | * @param \Aimeos\MShop\ContextIface $context Context object
90 | * @return \Aimeos\Base\View\Iface Modified view object
91 | */
92 | protected function addAccess( \Aimeos\Base\View\Iface $view, \Aimeos\MShop\ContextIface $context ) : \Aimeos\Base\View\Iface
93 | {
94 | if( $this->config->get( 'shop.accessControl', true ) === false
95 | || ( ( $user = \Illuminate\Support\Facades\Auth::user() ) !== null && $user->superuser )
96 | ) {
97 | $helper = new \Aimeos\Base\View\Helper\Access\All( $view );
98 | }
99 | else
100 | {
101 | $support = $this->support;
102 |
103 | $fcn = function() use ( $support, $context ) {
104 | return $support->getGroups( $context );
105 | };
106 |
107 | $helper = new \Aimeos\Base\View\Helper\Access\Standard( $view, $fcn );
108 | }
109 |
110 | $view->addHelper( 'access', $helper );
111 |
112 | return $view;
113 | }
114 |
115 |
116 | /**
117 | * Adds the "config" helper to the view object
118 | *
119 | * @param \Aimeos\Base\View\Iface $view View object
120 | * @param \Aimeos\Base\Config\Iface $config Configuration object
121 | * @return \Aimeos\Base\View\Iface Modified view object
122 | */
123 | protected function addConfig( \Aimeos\Base\View\Iface $view, \Aimeos\Base\Config\Iface $config ) : \Aimeos\Base\View\Iface
124 | {
125 | $config = new \Aimeos\Base\Config\Decorator\Protect( clone $config, ['resource/*/baseurl'], ['resource'] );
126 | $helper = new \Aimeos\Base\View\Helper\Config\Standard( $view, $config );
127 | $view->addHelper( 'config', $helper );
128 |
129 | return $view;
130 | }
131 |
132 |
133 | /**
134 | * Adds the "access" helper to the view object
135 | *
136 | * @param \Aimeos\Base\View\Iface $view View object
137 | * @return \Aimeos\Base\View\Iface Modified view object
138 | */
139 | protected function addCsrf( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface
140 | {
141 | $helper = new \Aimeos\Base\View\Helper\Csrf\Standard( $view, '_token', csrf_token() );
142 | $view->addHelper( 'csrf', $helper );
143 |
144 | return $view;
145 | }
146 |
147 |
148 | /**
149 | * Adds the "number" helper to the view object
150 | *
151 | * @param \Aimeos\Base\View\Iface $view View object
152 | * @param \Aimeos\Base\Config\Iface $config Configuration object
153 | * @param string|null $locale Code of the current language or null for no translation
154 | * @return \Aimeos\Base\View\Iface Modified view object
155 | */
156 | protected function addNumber( \Aimeos\Base\View\Iface $view, \Aimeos\Base\Config\Iface $config,
157 | string $locale = null ) : \Aimeos\Base\View\Iface
158 | {
159 | if( config( 'shop.num_formatter', 'Locale' ) === 'Locale' )
160 | {
161 | $pattern = $config->get( 'client/html/common/format/pattern' );
162 | $helper = new \Aimeos\Base\View\Helper\Number\Locale( $view, $locale, $pattern );
163 | }
164 | else
165 | {
166 | $sep1000 = $config->get( 'client/html/common/format/separator1000', '' );
167 | $decsep = $config->get( 'client/html/common/format/separatorDecimal', '.' );
168 | $helper = new \Aimeos\Base\View\Helper\Number\Standard( $view, $decsep, $sep1000 );
169 | }
170 |
171 | return $view->addHelper( 'number', $helper );
172 | }
173 |
174 |
175 | /**
176 | * Adds the "param" helper to the view object
177 | *
178 | * @param \Aimeos\Base\View\Iface $view View object
179 | * @return \Aimeos\Base\View\Iface Modified view object
180 | */
181 | protected function addParam( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface
182 | {
183 | $params = ( Route::current() ? Route::current()->parameters() : array() ) + Request::all();
184 | $helper = new \Aimeos\Base\View\Helper\Param\Standard( $view, $params );
185 | $view->addHelper( 'param', $helper );
186 |
187 | return $view;
188 | }
189 |
190 |
191 | /**
192 | * Adds the "request" helper to the view object
193 | *
194 | * @param \Aimeos\Base\View\Iface $view View object
195 | * @return \Aimeos\Base\View\Iface Modified view object
196 | */
197 | protected function addRequest( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface
198 | {
199 | $helper = new \Aimeos\Base\View\Helper\Request\Laravel( $view, Request::instance() );
200 | $view->addHelper( 'request', $helper );
201 |
202 | return $view;
203 | }
204 |
205 |
206 | /**
207 | * Adds the "response" helper to the view object
208 | *
209 | * @param \Aimeos\Base\View\Iface $view View object
210 | * @return \Aimeos\Base\View\Iface Modified view object
211 | */
212 | protected function addResponse( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface
213 | {
214 | $helper = new \Aimeos\Base\View\Helper\Response\Laravel( $view );
215 | $view->addHelper( 'response', $helper );
216 |
217 | return $view;
218 | }
219 |
220 |
221 | /**
222 | * Adds the "session" helper to the view object
223 | *
224 | * @param \Aimeos\Base\View\Iface $view View object
225 | * @param \Aimeos\Base\Session\Iface $session Session object
226 | * @return \Aimeos\Base\View\Iface Modified view object
227 | */
228 | protected function addSession( \Aimeos\Base\View\Iface $view, \Aimeos\Base\Session\Iface $session ) : \Aimeos\Base\View\Iface
229 | {
230 | $helper = new \Aimeos\Base\View\Helper\Session\Standard( $view, $session );
231 | $view->addHelper( 'session', $helper );
232 |
233 | return $view;
234 | }
235 |
236 |
237 | /**
238 | * Adds the "translate" helper to the view object
239 | *
240 | * @param \Aimeos\Base\View\Iface $view View object
241 | * @param string|null $locale ISO language code, e.g. "de" or "de_CH"
242 | * @return \Aimeos\Base\View\Iface Modified view object
243 | */
244 | protected function addTranslate( \Aimeos\Base\View\Iface $view, string $locale = null ) : \Aimeos\Base\View\Iface
245 | {
246 | if( $locale !== null )
247 | {
248 | $i18n = $this->i18n->get( array( $locale ) );
249 | $translation = $i18n[$locale];
250 | }
251 | else
252 | {
253 | $translation = new \Aimeos\Base\Translation\None( 'en' );
254 | }
255 |
256 | $helper = new \Aimeos\Base\View\Helper\Translate\Standard( $view, $translation );
257 | $view->addHelper( 'translate', $helper );
258 |
259 | return $view;
260 | }
261 |
262 |
263 | /**
264 | * Adds the "url" helper to the view object
265 | *
266 | * @param \Aimeos\Base\View\Iface $view View object
267 | * @return \Aimeos\Base\View\Iface Modified view object
268 | */
269 | protected function addUrl( \Aimeos\Base\View\Iface $view ) : \Aimeos\Base\View\Iface
270 | {
271 | $fixed = [
272 | 'site' => env( 'SHOP_MULTISHOP' ) ? config( 'shop.mshop.locale.site', 'default' ) : '',
273 | 'locale' => env( 'SHOP_MULTILOCALE' ) ? app()->getLocale() : '',
274 | 'currency' => ''
275 | ];
276 |
277 | if( Route::current() )
278 | {
279 | $fixed['site'] = Request::route( 'site', $fixed['site'] );
280 | $fixed['locale'] = Request::route( 'locale', $fixed['locale'] );
281 | $fixed['currency'] = Request::route( 'currency', $fixed['currency'] );
282 | }
283 |
284 | $fixed['site'] = Request::input( 'site', $fixed['site'] );
285 | $fixed['locale'] = Request::input( 'locale', $fixed['locale'] );
286 | $fixed['currency'] = Request::input( 'currency', $fixed['currency'] );
287 |
288 | $helper = new \Aimeos\Base\View\Helper\Url\Laravel( $view, app( 'url' ), array_filter( $fixed ) );
289 | $view->addHelper( 'url', $helper );
290 |
291 | return $view;
292 | }
293 | }
--------------------------------------------------------------------------------
/src/Command/AbstractCommand.php:
--------------------------------------------------------------------------------
1 | process();
29 | $aimeos = $this->getLaravel()->make( 'aimeos' )->get();
30 |
31 | $siteManager = \Aimeos\MShop::create( $context, 'locale/site' );
32 | $localeManager = \Aimeos\MShop::create( $context, 'locale' );
33 | $filter = $siteManager->filter();
34 | $start = 0;
35 |
36 | if( !empty( $sites ) ) {
37 | $filter->add( ['locale.site.code' => !is_array( $sites ) ? explode( ' ', (string) $sites ) : $sites] );
38 | }
39 |
40 | do
41 | {
42 | $siteItems = $siteManager->search( $filter->slice( $start ) );
43 |
44 | foreach( $siteItems as $siteItem )
45 | {
46 | \Aimeos\MShop::cache( true );
47 | \Aimeos\MAdmin::cache( true );
48 |
49 | $localeItem = $localeManager->bootstrap( $siteItem->getCode(), '', '', false );
50 | $localeItem->setLanguageId( null );
51 | $localeItem->setCurrencyId( null );
52 |
53 | $lcontext = clone $context;
54 | $lcontext->setLocale( $localeItem );
55 |
56 | $tmplPaths = $aimeos->getTemplatePaths( 'controller/jobs/templates', $siteItem->getTheme() );
57 | $view = $this->getLaravel()->make( 'aimeos.view' )->create( $lcontext, $tmplPaths );
58 | $lcontext->setView( $view );
59 |
60 | $config = $lcontext->config();
61 | $config->apply( $siteItem->getConfig() );
62 |
63 | $process->start( $fcn, [$lcontext, $aimeos], false );
64 | }
65 |
66 | $count = count( $siteItems );
67 | $start += $count;
68 | }
69 | while( $count === $filter->getLimit() );
70 |
71 | $process->wait();
72 | }
73 | }
--------------------------------------------------------------------------------
/src/Command/AccountCommand.php:
--------------------------------------------------------------------------------
1 | argument( 'site' ) ?: config( 'shop.mshop.locale.site', 'default' );
51 |
52 | if( ( $email = $this->argument( 'email' ) ) === null ) {
53 | $email = $this->ask( 'E-Mail' );
54 | }
55 |
56 | if( ( $password = $this->option( 'password' ) ) === null ) {
57 | $password = $this->secret( 'Password' );
58 | }
59 |
60 | $context = $this->getLaravel()->make( 'aimeos.context' )->get( false, 'command' );
61 | $context->setEditor( 'aimeos:account' );
62 |
63 | $localeManager = \Aimeos\MShop::create( $context, 'locale' );
64 | $localeItem = $localeManager->bootstrap( $site, '', '', false, null, true );
65 | $context->setLocale( $localeItem );
66 |
67 | $manager = \Aimeos\MShop::create( $context, 'customer' );
68 |
69 | try {
70 | $item = $manager->find( $email );
71 | } catch( \Aimeos\MShop\Exception $e ) {
72 | $item = $manager->create();
73 | }
74 |
75 | $item = $item->setCode( $email )->setLabel( $email )->setPassword( $password )->setStatus( 1 );
76 | $item->getPaymentAddress()->setEmail( $email );
77 |
78 | $item = $manager->save( $this->addGroups( $context, $item ) );
79 |
80 | \Illuminate\Foundation\Auth\User::findOrFail( $item->getId() )
81 | ->forceFill( [
82 | 'siteid' => $this->option( 'super' ) ? '' : $item->getSiteId(),
83 | 'superuser' => ( $this->option( 'super' ) ? 1 : 0 ),
84 | 'email_verified_at' => now(),
85 | ] )->save();
86 | }
87 |
88 |
89 | /**
90 | * Adds the group to the given user
91 | *
92 | * @param \Aimeos\MShop\ContextIface $context Aimeos context object
93 | * @param \Aimeos\MShop\Customer\Item\Iface $user Aimeos customer object
94 | * @return \Aimeos\MShop\Customer\Item\Iface Updated customer object
95 | */
96 | protected function addGroups( \Aimeos\MShop\ContextIface $context,
97 | \Aimeos\MShop\Customer\Item\Iface $user ) : \Aimeos\MShop\Customer\Item\Iface
98 | {
99 | if( $this->option( 'admin' ) ) {
100 | $user = $this->addGroup( $context, $user, 'admin' );
101 | }
102 |
103 | if( $this->option( 'editor' ) ) {
104 | $user = $this->addGroup( $context, $user, 'editor' );
105 | }
106 |
107 | if( $this->option( 'api' ) ) {
108 | $user = $this->addGroup( $context, $user, 'api' );
109 | }
110 |
111 | return $user;
112 | }
113 |
114 |
115 | /**
116 | * Adds the group to the given user
117 | *
118 | * @param \Aimeos\MShop\ContextIface $context Aimeos context object
119 | * @param \Aimeos\MShop\Customer\Item\Iface $user Aimeos customer object
120 | * @param string $group Unique customer group code
121 | */
122 | protected function addGroup( \Aimeos\MShop\ContextIface $context, \Aimeos\MShop\Customer\Item\Iface $user,
123 | string $group ) : \Aimeos\MShop\Customer\Item\Iface
124 | {
125 | $msg = 'Add "%1$s" group to user "%2$s" for site "%3$s"';
126 | $site = $this->argument( 'site' ) ?: config( 'shop.mshop.locale.site', 'default' );
127 | $this->info( sprintf( $msg, $group, $user->getCode(), $site ) );
128 |
129 | $groupId = $this->getGroupItem( $context, $group )->getId();
130 | return $user->setGroups( array_merge( $user->getGroups(), [$groupId] ) );
131 | }
132 |
133 |
134 | /**
135 | * Returns the customer group item for the given code
136 | *
137 | * @param \Aimeos\MShop\ContextIface $context Aimeos context object
138 | * @param string $code Unique customer group code
139 | * @return \Aimeos\MShop\Customer\Item\Group\Iface Aimeos customer group item object
140 | */
141 | protected function getGroupItem( \Aimeos\MShop\ContextIface $context, string $code ) : \Aimeos\MShop\Customer\Item\Group\Iface
142 | {
143 | $manager = \Aimeos\MShop::create( $context, 'customer/group' );
144 |
145 | try
146 | {
147 | $item = $manager->find( $code );
148 | }
149 | catch( \Aimeos\MShop\Exception $e )
150 | {
151 | $item = $manager->create();
152 | $item->setLabel( $code );
153 | $item->setCode( $code );
154 |
155 | $manager->save( $item );
156 | }
157 |
158 | return $item;
159 | }
160 | }
161 |
--------------------------------------------------------------------------------
/src/Command/ClearCommand.php:
--------------------------------------------------------------------------------
1 | info( 'Clearing Aimeos cache', 'v' );
40 |
41 | $context = $this->getLaravel()->make( 'aimeos.context' )->get( false, 'command' );
42 | $context->setEditor( 'aimeos:clear' );
43 |
44 | \Aimeos\MAdmin::create( $context, 'cache' )->getCache()->clear();
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/Command/JobsCommand.php:
--------------------------------------------------------------------------------
1 | argument( 'jobs' );
45 | $jobs = !is_array( $jobs ) ? explode( ' ', (string) $jobs ) : $jobs;
46 |
47 | $fcn = function( \Aimeos\MShop\ContextIface $lcontext, \Aimeos\Bootstrap $aimeos ) use ( $jobs )
48 | {
49 | $jobfcn = function( $context, $aimeos, $jobname ) {
50 | \Aimeos\Controller\Jobs::create( $context, $aimeos, $jobname )->run();
51 | };
52 |
53 | $process = $lcontext->process();
54 | $site = $lcontext->locale()->getSiteItem()->getCode();
55 |
56 | foreach( $jobs as $jobname )
57 | {
58 | $this->info( sprintf( 'Executing Aimeos jobs "%s" for "%s"', $jobname, $site ), 'v' );
59 | $process->start( $jobfcn, [$lcontext, $aimeos, $jobname], false );
60 | }
61 |
62 | $process->wait();
63 | };
64 |
65 | $this->exec( $this->context(), $fcn, $this->argument( 'site' ) );
66 | }
67 |
68 |
69 | /**
70 | * Returns a context object
71 | *
72 | * @return \Aimeos\MShop\ContextIface Context object
73 | */
74 | protected function context() : \Aimeos\MShop\ContextIface
75 | {
76 | $lv = $this->getLaravel();
77 | $context = $lv->make( 'aimeos.context' )->get( false, 'command' );
78 |
79 | $langManager = \Aimeos\MShop::create( $context, 'locale/language' );
80 | $langids = $langManager->search( $langManager->filter( true ) )->keys()->toArray();
81 | $i18n = $lv->make( 'aimeos.i18n' )->get( $langids );
82 |
83 | $context->setEditor( 'aimeos:jobs' );
84 | $context->setI18n( $i18n );
85 |
86 | return $context;
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/src/Command/SetupCommand.php:
--------------------------------------------------------------------------------
1 | argument( 'tplsite' );
52 |
53 | if( ( $site = $this->argument( 'site' ) ) === null ) {
54 | $site = config( 'shop.mshop.locale.site', 'default' );
55 | }
56 |
57 | $boostrap = $this->getLaravel()->make( 'aimeos' )->get();
58 | $ctx = $this->getLaravel()->make( 'aimeos.context' )->get( false, 'command' );
59 |
60 | $this->info( sprintf( 'Initializing or updating the Aimeos database tables for site "%1$s"', $site ) );
61 |
62 | \Aimeos\Setup::use( $boostrap )
63 | ->verbose( $this->option( 'q' ) ? '' : $this->option( 'v' ) )
64 | ->context( $this->addConfig( $ctx->setEditor( 'aimeos:setup' ) ) )
65 | ->up( $site, $template );
66 | }
67 |
68 |
69 | /**
70 | * Adds the configuration options from the input object to the given context
71 | *
72 | * @param \Aimeos\MShop\ContextIface $ctx Context object
73 | * @return array Associative list of key/value pairs of configuration options
74 | */
75 | protected function addConfig( \Aimeos\MShop\ContextIface $ctx ) : \Aimeos\MShop\ContextIface
76 | {
77 | $config = $ctx->config();
78 |
79 | foreach( (array) $this->option( 'option' ) as $option )
80 | {
81 | list( $name, $value ) = explode( ':', $option );
82 | $config->set( $name, $value );
83 | }
84 |
85 | return $ctx;
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/src/Composer.php:
--------------------------------------------------------------------------------
1 | [
27 | 'method' => 'POST',
28 | 'header' => ['Content-Type: application/json'],
29 | 'content' => json_encode( ['query' => 'mutation{
30 | _1: addStar(input:{clientMutationId:"_1",starrableId:"MDEwOlJlcG9zaXRvcnkxMDMwMTUwNzA="}){clientMutationId}
31 | _2: addStar(input:{clientMutationId:"_2",starrableId:"MDEwOlJlcG9zaXRvcnkzMTU0MTIxMA=="}){clientMutationId}
32 | _3: addStar(input:{clientMutationId:"_3",starrableId:"MDEwOlJlcG9zaXRvcnkyNjg4MTc2NQ=="}){clientMutationId}
33 | _4: addStar(input:{clientMutationId:"_4",starrableId:"MDEwOlJlcG9zaXRvcnkyMjIzNTY4OTA="}){clientMutationId}
34 | _5: addStar(input:{clientMutationId:"_5",starrableId:"MDEwOlJlcG9zaXRvcnkyNDYxMDMzNTY="}){clientMutationId}
35 | _6: addStar(input:{clientMutationId:"_6",starrableId:"R_kgDOGcKL7A"}){clientMutationId}
36 | _7: addStar(input:{clientMutationId:"_7",starrableId:"R_kgDOGeAkvw"}){clientMutationId}
37 | _8: addStar(input:{clientMutationId:"_8",starrableId:"R_kgDOG1PAJw"}){clientMutationId}
38 | }'
39 | ] )
40 | ]
41 | ];
42 | $config = $event->getComposer()->getConfig();
43 |
44 | if( method_exists( '\Composer\Factory', 'createHttpDownloader' ) )
45 | {
46 | \Composer\Factory::createHttpDownloader( $event->getIO(), $config )
47 | ->get( 'https://api.github.com/graphql', $options );
48 | }
49 | else
50 | {
51 | \Composer\Factory::createRemoteFilesystem( $event->getIO(), $config )
52 | ->getContents( 'github.com', 'https://api.github.com/graphql', false, $options );
53 | }
54 | }
55 | catch( \Exception $e ) {}
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/Controller/AccountController.php:
--------------------------------------------------------------------------------
1 | 'page-account-index'];
29 |
30 | foreach( app( 'config' )->get( 'shop.page.account-index' ) as $name )
31 | {
32 | $params['aiheader'][$name] = Shop::get( $name )->header();
33 | $params['aibody'][$name] = Shop::get( $name )->body();
34 | }
35 |
36 | return Response::view( Shop::template( 'account.index' ), $params )
37 | ->header( 'Cache-Control', 'no-store, max-age=0' );
38 | }
39 |
40 |
41 | /**
42 | * Returns the html for the "My account" download page.
43 | *
44 | * @return \Illuminate\Contracts\View\View View for rendering the output
45 | */
46 | public function downloadAction()
47 | {
48 | $response = Shop::get( 'account/download' )->response();
49 | return Response::make( (string) $response->getBody(), $response->getStatusCode(), $response->getHeaders() );
50 | }
51 | }
--------------------------------------------------------------------------------
/src/Controller/AdminController.php:
--------------------------------------------------------------------------------
1 | user()->can( 'admin', [AdminController::class, ['admin', 'editor']] ) === false
37 | ) {
38 | return redirect()->guest( airoute( 'login', ['locale' => app()->getLocale()] ) );
39 | }
40 |
41 | $context = app( 'aimeos.context' )->get( false );
42 | $siteManager = \Aimeos\MShop::create( $context, 'locale/site' );
43 | $siteId = current( array_reverse( explode( '.', trim( $request->user()->siteid, '.' ) ) ) );
44 | $siteCode = ( $siteId ? $siteManager->get( $siteId )->getCode() : config( 'shop.mshop.locale.site', 'default' ) );
45 | $locale = $request->user()->langid ?: config( 'app.locale', 'en' );
46 |
47 | $param = array(
48 | 'resource' => 'dashboard',
49 | 'site' => Route::input( 'site', Request::get( 'site', $siteCode ) ),
50 | 'locale' => Route::input( 'locale', Request::get( 'locale', $locale ) )
51 | );
52 |
53 | return redirect()->route( 'aimeos_shop_jqadm_search', $param );
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/Controller/BasketController.php:
--------------------------------------------------------------------------------
1 | 'page-basket-index'];
29 |
30 | foreach( app( 'config' )->get( 'shop.page.basket-index' ) as $name )
31 | {
32 | $params['aiheader'][$name] = Shop::get( $name )->header();
33 | $params['aibody'][$name] = Shop::get( $name )->body();
34 | }
35 |
36 | return Response::view( Shop::template( 'basket.index' ), $params )
37 | ->header( 'Cache-Control', 'no-store, , max-age=0' );
38 | }
39 | }
--------------------------------------------------------------------------------
/src/Controller/CatalogController.php:
--------------------------------------------------------------------------------
1 | 'page-catalog-count'];
29 |
30 | foreach( app( 'config' )->get( 'shop.page.catalog-count' ) as $name )
31 | {
32 | $params['aiheader'][$name] = Shop::get( $name )->header();
33 | $params['aibody'][$name] = Shop::get( $name )->body();
34 | }
35 |
36 | return Response::view( Shop::template( 'catalog.count' ), $params )
37 | ->header( 'Content-Type', 'application/javascript' )
38 | ->header( 'Cache-Control', 'public, max-age=300' );
39 | }
40 |
41 |
42 | /**
43 | * Returns the html for the catalog detail page.
44 | *
45 | * @return \Illuminate\Http\Response Response object with output and headers
46 | */
47 | public function detailAction()
48 | {
49 | try
50 | {
51 | $params = ['page' => 'page-catalog-detail'];
52 |
53 | foreach( app( 'config' )->get( 'shop.page.catalog-detail' ) as $name )
54 | {
55 | $params['aiheader'][$name] = Shop::get( $name )->header();
56 | $params['aibody'][$name] = Shop::get( $name )->body();
57 | }
58 |
59 | return Response::view( Shop::template( 'catalog.detail' ), $params )
60 | ->header( 'Cache-Control', 'private, max-age=' . config( 'shop.cache_maxage', 30 ) );
61 | }
62 | catch( \Exception $e )
63 | {
64 | if( $e->getCode() >= 400 && $e->getCode() < 600 ) { abort( $e->getCode() ); }
65 | throw $e;
66 | }
67 | }
68 |
69 |
70 | /**
71 | * Returns the html for the catalog home page.
72 | *
73 | * @return \Illuminate\Http\Response Response object with output and headers
74 | */
75 | public function homeAction()
76 | {
77 | $params = ['page' => 'page-catalog-home'];
78 |
79 | foreach( app( 'config' )->get( 'shop.page.catalog-home' ) as $name )
80 | {
81 | $params['aiheader'][$name] = Shop::get( $name )->header();
82 | $params['aibody'][$name] = Shop::get( $name )->body();
83 | }
84 |
85 | return Response::view( Shop::template( 'catalog.home' ), $params )
86 | ->header( 'Cache-Control', 'private, max-age=' . config( 'shop.cache_maxage', 30 ) );
87 | }
88 |
89 |
90 | /**
91 | * Returns the html for the catalog list page.
92 | *
93 | * @return \Illuminate\Http\Response Response object with output and headers
94 | */
95 | public function listAction()
96 | {
97 | $params = ['page' => 'page-catalog-list'];
98 |
99 | foreach( app( 'config' )->get( 'shop.page.catalog-list' ) as $name )
100 | {
101 | $params['aiheader'][$name] = Shop::get( $name )->header();
102 | $params['aibody'][$name] = Shop::get( $name )->body();
103 | }
104 |
105 | return Response::view( Shop::template( 'catalog.list' ), $params )
106 | ->header( 'Cache-Control', 'private, max-age=' . config( 'shop.cache_maxage', 30 ) );
107 | }
108 |
109 |
110 | /**
111 | * Returns the html for the catalog session page.
112 | *
113 | * @return \Illuminate\Http\Response Response object with output and headers
114 | */
115 | public function sessionAction()
116 | {
117 | $params = ['page' => 'page-catalog-session'];
118 |
119 | foreach( app( 'config' )->get( 'shop.page.catalog-session' ) as $name )
120 | {
121 | $params['aiheader'][$name] = Shop::get( $name )->header();
122 | $params['aibody'][$name] = Shop::get( $name )->body();
123 | }
124 |
125 | return Response::view( Shop::template( 'catalog.session' ), $params )
126 | ->header( 'Cache-Control', 'no-cache' );
127 | }
128 |
129 |
130 | /**
131 | * Returns the html body part for the catalog stock page.
132 | *
133 | * @return \Illuminate\Http\Response Response object with output and headers
134 | */
135 | public function stockAction()
136 | {
137 | $params = ['page' => 'page-catalog-stock'];
138 |
139 | foreach( app( 'config' )->get( 'shop.page.catalog-stock' ) as $name )
140 | {
141 | $params['aiheader'][$name] = Shop::get( $name )->header();
142 | $params['aibody'][$name] = Shop::get( $name )->body();
143 | }
144 |
145 | return Response::view( Shop::template( 'catalog.stock' ), $params )
146 | ->header( 'Content-Type', 'application/javascript' )
147 | ->header( 'Cache-Control', 'public, max-age=30' );
148 | }
149 |
150 |
151 | /**
152 | * Returns the view for the XHR response with the product information for the search suggestion.
153 | *
154 | * @return \Illuminate\Http\Response Response object with output and headers
155 | */
156 | public function suggestAction()
157 | {
158 | $params = ['page' => 'page-catalog-suggest'];
159 |
160 | foreach( app( 'config' )->get( 'shop.page.catalog-suggest' ) as $name )
161 | {
162 | $params['aiheader'][$name] = Shop::get( $name )->header();
163 | $params['aibody'][$name] = Shop::get( $name )->body();
164 | }
165 |
166 | return Response::view( Shop::template( 'catalog.suggest' ), $params )
167 | ->header( 'Cache-Control', 'private, max-age=' . config( 'shop.cache_maxage', 30 ) )
168 | ->header( 'Content-Type', 'application/json' );
169 | }
170 |
171 |
172 | /**
173 | * Returns the html for the catalog tree page.
174 | *
175 | * @return \Illuminate\Http\Response Response object with output and headers
176 | */
177 | public function treeAction()
178 | {
179 | try
180 | {
181 | $params = ['page' => 'page-catalog-tree'];
182 |
183 | foreach( app( 'config' )->get( 'shop.page.catalog-tree' ) as $name )
184 | {
185 | $params['aiheader'][$name] = Shop::get( $name )->header();
186 | $params['aibody'][$name] = Shop::get( $name )->body();
187 | }
188 |
189 | return Response::view( Shop::template( 'catalog.tree' ), $params )
190 | ->header( 'Cache-Control', 'private, max-age=' . config( 'shop.cache_maxage', 30 ) );
191 | }
192 | catch( \Exception $e )
193 | {
194 | if( $e->getCode() >= 400 && $e->getCode() < 600 ) { abort( $e->getCode() ); }
195 | throw $e;
196 | }
197 | }
198 | }
199 |
--------------------------------------------------------------------------------
/src/Controller/CheckoutController.php:
--------------------------------------------------------------------------------
1 | 'page-checkout-confirm'];
29 |
30 | foreach( app( 'config' )->get( 'shop.page.checkout-confirm' ) as $name )
31 | {
32 | $params['aiheader'][$name] = Shop::get( $name )->header();
33 | $params['aibody'][$name] = Shop::get( $name )->body();
34 | }
35 |
36 | return Response::view( Shop::template( 'checkout.confirm' ), $params )
37 | ->header( 'Cache-Control', 'no-store, max-age=0' );
38 | }
39 |
40 |
41 | /**
42 | * Returns the html for the standard checkout page.
43 | *
44 | * @return \Illuminate\Http\Response Response object with output and headers
45 | */
46 | public function indexAction()
47 | {
48 | $params = ['page' => 'page-checkout-index'];
49 |
50 | foreach( app( 'config' )->get( 'shop.page.checkout-index' ) as $name )
51 | {
52 | $params['aiheader'][$name] = Shop::get( $name )->header();
53 | $params['aibody'][$name] = Shop::get( $name )->body();
54 | }
55 |
56 | return Response::view( Shop::template( 'checkout.index' ), $params )
57 | ->header( 'Cache-Control', 'no-store, max-age=0' );
58 | }
59 |
60 |
61 | /**
62 | * Returns the view for the order update page.
63 | *
64 | * @return \Illuminate\Http\Response Response object with output and headers
65 | */
66 | public function updateAction()
67 | {
68 | $params = ['page' => 'page-checkout-update'];
69 |
70 | foreach( app( 'config' )->get( 'shop.page.checkout-update' ) as $name )
71 | {
72 | $params['aiheader'][$name] = Shop::get( $name )->header();
73 | $params['aibody'][$name] = Shop::get( $name )->body();
74 | }
75 |
76 | return Response::view( Shop::template( 'checkout.update' ), $params )
77 | ->header( 'Cache-Control', 'no-store, max-age=0' );
78 | }
79 | }
--------------------------------------------------------------------------------
/src/Controller/GraphqlController.php:
--------------------------------------------------------------------------------
1 | authorize( 'admin', [GraphqlController::class, ['admin', 'editor', 'api']] );
36 | }
37 |
38 | $site = Route::input( 'site', Request::get( 'site', config( 'shop.mshop.locale.site', 'default' ) ) );
39 | $lang = Request::get( 'locale', config( 'app.locale', 'en' ) );
40 |
41 | $context = app( 'aimeos.context' )->get( false, 'backend' );
42 | $context->setI18n( app( 'aimeos.i18n' )->get( array( $lang, 'en' ) ) );
43 | $context->setLocale( app( 'aimeos.locale' )->getBackend( $context, $site ) );
44 | $context->setView( app( 'aimeos.view' )->create( $context, [], $lang ) );
45 |
46 | return \Aimeos\Admin\Graphql::execute( $context, $request );
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/Controller/JqadmController.php:
--------------------------------------------------------------------------------
1 | authorize( 'admin', [JqadmController::class, config( 'shop.roles', ['admin', 'editor'] )] );
34 | }
35 |
36 | $contents = '';
37 | $files = array();
38 | $aimeos = app( 'aimeos' )->get();
39 | $type = Route::input( 'type', Request::get( 'type', 'js' ) );
40 |
41 | foreach( $aimeos->getCustomPaths( 'admin/jqadm' ) as $base => $paths )
42 | {
43 | foreach( $paths as $path )
44 | {
45 | $jsbAbsPath = $base . '/' . $path;
46 | $jsb2 = new \Aimeos\MW\Jsb2\Standard( $jsbAbsPath, dirname( $jsbAbsPath ) );
47 | $files = array_merge( $files, $jsb2->getFiles( $type ) );
48 | }
49 | }
50 |
51 | foreach( $files as $file )
52 | {
53 | if( ( $content = file_get_contents( $file ) ) !== false ) {
54 | $contents .= $content;
55 | }
56 | }
57 |
58 | $response = response( $contents );
59 |
60 | if( $type === 'js' ) {
61 | $response->header( 'Content-Type', 'application/javascript' );
62 | } elseif( $type === 'css' ) {
63 | $response->header( 'Content-Type', 'text/css' );
64 | }
65 |
66 | return $response->header( 'Cache-Control', 'public, max-age=3600' );
67 | }
68 |
69 |
70 | /**
71 | * Returns the HTML code for batch operations on a resource object
72 | *
73 | * @return string Generated output
74 | */
75 | public function batchAction()
76 | {
77 | if( config( 'shop.authorize', true ) ) {
78 | $this->authorize( 'admin', [JqadmController::class, config( 'shop.roles', ['admin', 'editor'] )] );
79 | }
80 |
81 | $cntl = $this->createAdmin();
82 |
83 | if( ( $html = $cntl->batch() ) == '' ) {
84 | return $cntl->response();
85 | }
86 |
87 | return $this->getHtml( $html );
88 | }
89 |
90 |
91 | /**
92 | * Returns the HTML code for a copy of a resource object
93 | *
94 | * @return string Generated output
95 | */
96 | public function copyAction()
97 | {
98 | if( config( 'shop.authorize', true ) ) {
99 | $this->authorize( 'admin', [JqadmController::class, config( 'shop.roles', ['admin', 'editor'] )] );
100 | }
101 |
102 | $cntl = $this->createAdmin();
103 |
104 | if( ( $html = $cntl->copy() ) == '' ) {
105 | return $cntl->response();
106 | }
107 |
108 | return $this->getHtml( $html );
109 | }
110 |
111 |
112 | /**
113 | * Returns the HTML code for a new resource object
114 | *
115 | * @return string Generated output
116 | */
117 | public function createAction()
118 | {
119 | if( config( 'shop.authorize', true ) ) {
120 | $this->authorize( 'admin', [JqadmController::class, config( 'shop.roles', ['admin', 'editor'] )] );
121 | }
122 |
123 | $cntl = $this->createAdmin();
124 |
125 | if( ( $html = $cntl->create() ) == '' ) {
126 | return $cntl->response();
127 | }
128 |
129 | return $this->getHtml( $html );
130 | }
131 |
132 |
133 | /**
134 | * Deletes the resource object or a list of resource objects
135 | *
136 | * @return string Generated output
137 | */
138 | public function deleteAction()
139 | {
140 | if( config( 'shop.authorize', true ) ) {
141 | $this->authorize( 'admin', [JqadmController::class, config( 'shop.roles', ['admin', 'editor'] )] );
142 | }
143 |
144 | $cntl = $this->createAdmin();
145 |
146 | if( ( $html = $cntl->delete() ) == '' ) {
147 | return $cntl->response();
148 | }
149 |
150 | return $this->getHtml( $html );
151 | }
152 |
153 |
154 | /**
155 | * Exports the data for a resource object
156 | *
157 | * @return string Generated output
158 | */
159 | public function exportAction()
160 | {
161 | if( config( 'shop.authorize', true ) ) {
162 | $this->authorize( 'admin', [JqadmController::class, config( 'shop.roles', ['admin', 'editor'] )] );
163 | }
164 |
165 | $cntl = $this->createAdmin();
166 |
167 | if( ( $html = $cntl->export() ) == '' ) {
168 | return $cntl->response();
169 | }
170 |
171 | return $this->getHtml( $html );
172 | }
173 |
174 |
175 | /**
176 | * Returns the HTML code for the requested resource object
177 | *
178 | * @return string Generated output
179 | */
180 | public function getAction()
181 | {
182 | if( config( 'shop.authorize', true ) ) {
183 | $this->authorize( 'admin', [JqadmController::class, config( 'shop.roles', ['admin', 'editor'] )] );
184 | }
185 |
186 | $cntl = $this->createAdmin();
187 |
188 | if( ( $html = $cntl->get() ) == '' ) {
189 | return $cntl->response();
190 | }
191 |
192 | return $this->getHtml( $html );
193 | }
194 |
195 |
196 | /**
197 | * Saves a new resource object
198 | *
199 | * @return string Generated output
200 | */
201 | public function saveAction()
202 | {
203 | if( config( 'shop.authorize', true ) ) {
204 | $this->authorize( 'admin', [JqadmController::class, config( 'shop.roles', ['admin', 'editor'] )] );
205 | }
206 |
207 | $cntl = $this->createAdmin();
208 |
209 | if( ( $html = $cntl->save() ) == '' ) {
210 | return $cntl->response();
211 | }
212 |
213 | return $this->getHtml( $html );
214 | }
215 |
216 |
217 | /**
218 | * Returns the HTML code for a list of resource objects
219 | *
220 | * @return string Generated output
221 | */
222 | public function searchAction()
223 | {
224 | if( config( 'shop.authorize', true ) ) {
225 | $this->authorize( 'admin', [JqadmController::class, config( 'shop.roles', ['admin', 'editor'] )] );
226 | }
227 |
228 | $cntl = $this->createAdmin();
229 |
230 | if( ( $html = $cntl->search() ) == '' ) {
231 | return $cntl->response();
232 | }
233 |
234 | return $this->getHtml( $html );
235 | }
236 |
237 |
238 | /**
239 | * Returns the resource controller
240 | *
241 | * @return \Aimeos\Admin\JQAdm\Iface JQAdm client
242 | */
243 | protected function createAdmin() : \Aimeos\Admin\JQAdm\Iface
244 | {
245 | $site = Route::input( 'site', Request::get( 'site', config( 'shop.mshop.locale.site', 'default' ) ) );
246 | $lang = Request::get( 'locale', config( 'app.locale', 'en' ) );
247 | $resource = Route::input( 'resource' );
248 |
249 | $aimeos = app( 'aimeos' )->get();
250 |
251 | $context = app( 'aimeos.context' )->get( false, 'backend' );
252 | $context->setI18n( app( 'aimeos.i18n' )->get( array( $lang, 'en' ) ) );
253 | $context->setLocale( app( 'aimeos.locale' )->getBackend( $context, $site ) );
254 |
255 | $siteManager = \Aimeos\MShop::create( $context, 'locale/site');
256 | $context->config()->apply( $siteManager->find( $site )->getConfig() );
257 |
258 | $paths = $aimeos->getTemplatePaths( 'admin/jqadm/templates', $context->locale()->getSiteItem()->getTheme() );
259 | $view = app( 'aimeos.view' )->create( $context, $paths, $lang );
260 |
261 | $view->aimeosType = 'Laravel';
262 | $view->aimeosVersion = app( 'aimeos' )->getVersion();
263 | $view->aimeosExtensions = implode( ',', $aimeos->getExtensions() );
264 |
265 | $context->setView( $view );
266 |
267 | return \Aimeos\Admin\JQAdm::create( $context, $aimeos, $resource );
268 | }
269 |
270 |
271 | /**
272 | * Returns the generated HTML code
273 | *
274 | * @param string $content Content from admin client
275 | * @return \Illuminate\Contracts\View\View View for rendering the output
276 | */
277 | protected function getHtml( string $content )
278 | {
279 | $site = Route::input( 'site', Request::get( 'site', config( 'shop.mshop.locale.site', 'default' ) ) );
280 | $lang = Request::get( 'locale', config( 'app.locale', 'en' ) );
281 |
282 | return View::make( 'shop::jqadm.index', [
283 | 'content' => $content,
284 | 'site' => $site,
285 | 'locale' => $lang,
286 | 'localeDir' => in_array( $lang, ['ar', 'az', 'dv', 'fa', 'he', 'ku', 'ur'] ) ? 'rtl' : 'ltr',
287 | 'theme' => ( $_COOKIE['aimeos_backend_theme'] ?? '' ) == 'dark' ? 'dark' : 'light'
288 | ] );
289 | }
290 | }
291 |
--------------------------------------------------------------------------------
/src/Controller/JsonadmController.php:
--------------------------------------------------------------------------------
1 | authorize( 'admin', [JsonadmController::class, ['admin', 'editor', 'api']] );
37 | }
38 |
39 | return $this->createAdmin()->delete( $request, ( new Psr17Factory )->createResponse() );
40 | }
41 |
42 |
43 | /**
44 | * Returns the requested resource object or list of resource objects
45 | *
46 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
47 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
48 | */
49 | public function getAction( ServerRequestInterface $request )
50 | {
51 | if( config( 'shop.authorize', true ) ) {
52 | $this->authorize( 'admin', [JsonadmController::class, ['admin', 'editor', 'api']] );
53 | }
54 |
55 | return $this->createAdmin()->get( $request, ( new Psr17Factory )->createResponse() );
56 | }
57 |
58 |
59 | /**
60 | * Updates a resource object or a list of resource objects
61 | *
62 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
63 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
64 | */
65 | public function patchAction( ServerRequestInterface $request )
66 | {
67 | if( config( 'shop.authorize', true ) ) {
68 | $this->authorize( 'admin', [JsonadmController::class, ['admin', 'editor', 'api']] );
69 | }
70 |
71 | return $this->createAdmin()->patch( $request, ( new Psr17Factory )->createResponse() );
72 | }
73 |
74 |
75 | /**
76 | * Creates a new resource object or a list of resource objects
77 | *
78 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
79 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
80 | */
81 | public function postAction( ServerRequestInterface $request )
82 | {
83 | if( config( 'shop.authorize', true ) ) {
84 | $this->authorize( 'admin', [JsonadmController::class, ['admin', 'editor', 'api']] );
85 | }
86 |
87 | return $this->createAdmin()->post( $request, ( new Psr17Factory )->createResponse() );
88 | }
89 |
90 |
91 | /**
92 | * Creates or updates a single resource object
93 | *
94 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
95 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
96 | */
97 | public function putAction( ServerRequestInterface $request )
98 | {
99 | if( config( 'shop.authorize', true ) ) {
100 | $this->authorize( 'admin', [JsonadmController::class, ['admin', 'editor', 'api']] );
101 | }
102 |
103 | return $this->createAdmin()->put( $request, ( new Psr17Factory )->createResponse() );
104 | }
105 |
106 |
107 | /**
108 | * Returns the available HTTP verbs and the resource URLs
109 | *
110 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
111 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
112 | */
113 | public function optionsAction( ServerRequestInterface $request )
114 | {
115 | if( config( 'shop.authorize', true ) ) {
116 | $this->authorize( 'admin', [JsonadmController::class, ['admin', 'editor', 'api']] );
117 | }
118 |
119 | return $this->createAdmin()->options( $request, ( new Psr17Factory )->createResponse() );
120 | }
121 |
122 |
123 | /**
124 | * Returns the JsonAdm client
125 | *
126 | * @return \Aimeos\Admin\JsonAdm\Iface JsonAdm client
127 | */
128 | protected function createAdmin() : \Aimeos\Admin\JsonAdm\Iface
129 | {
130 | $site = Route::input( 'site', Request::get( 'site', config( 'shop.mshop.locale.site', 'default' ) ) );
131 | $lang = Request::get( 'locale', config( 'app.locale', 'en' ) );
132 | $resource = Route::input( 'resource', '' );
133 |
134 | $aimeos = app( 'aimeos' )->get();
135 | $templatePaths = $aimeos->getTemplatePaths( 'admin/jsonadm/templates' );
136 |
137 | $context = app( 'aimeos.context' )->get( false, 'backend' );
138 | $context->setI18n( app( 'aimeos.i18n' )->get( array( $lang, 'en' ) ) );
139 | $context->setLocale( app( 'aimeos.locale' )->getBackend( $context, $site ) );
140 | $context->setView( app( 'aimeos.view' )->create( $context, $templatePaths, $lang ) );
141 |
142 | return \Aimeos\Admin\JsonAdm::create( $context, $aimeos, $resource );
143 | }
144 | }
145 |
--------------------------------------------------------------------------------
/src/Controller/JsonapiController.php:
--------------------------------------------------------------------------------
1 | createClient()->delete( $request, ( new Psr17Factory )->createResponse() );
32 | }
33 |
34 |
35 | /**
36 | * Returns the requested resource object or list of resource objects
37 | *
38 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
39 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
40 | */
41 | public function getAction( ServerRequestInterface $request )
42 | {
43 | return $this->createClient()->get( $request, ( new Psr17Factory )->createResponse() );
44 | }
45 |
46 |
47 | /**
48 | * Updates a resource object or a list of resource objects
49 | *
50 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
51 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
52 | */
53 | public function patchAction( ServerRequestInterface $request )
54 | {
55 | return $this->createClient()->patch( $request, ( new Psr17Factory )->createResponse() );
56 | }
57 |
58 |
59 | /**
60 | * Creates a new resource object or a list of resource objects
61 | *
62 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
63 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
64 | */
65 | public function postAction( ServerRequestInterface $request )
66 | {
67 | return $this->createClient()->post( $request, ( new Psr17Factory )->createResponse() );
68 | }
69 |
70 |
71 | /**
72 | * Creates or updates a single resource object
73 | *
74 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
75 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
76 | */
77 | public function putAction( ServerRequestInterface $request )
78 | {
79 | return $this->createClient()->put( $request, ( new Psr17Factory )->createResponse() );
80 | }
81 |
82 |
83 | /**
84 | * Returns the available HTTP verbs and the resource URLs
85 | *
86 | * @param \Psr\Http\Message\ServerRequestInterface $request Request object
87 | * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
88 | */
89 | public function optionsAction( ServerRequestInterface $request )
90 | {
91 | return $this->createClient()->options( $request, ( new Psr17Factory )->createResponse() )
92 | ->withHeader( 'access-control-allow-headers', 'authorization,content-type' )
93 | ->withHeader( 'access-control-allow-methods', 'DELETE, GET, OPTIONS, PATCH, POST, PUT' )
94 | ->withHeader( 'access-control-allow-origin', $request->getHeaderLine( 'origin' ) );
95 | }
96 |
97 |
98 | /**
99 | * Returns the JsonAdm client
100 | *
101 | * @return \Aimeos\Client\JsonApi\Iface JsonApi client
102 | */
103 | protected function createClient() : \Aimeos\Client\JsonApi\Iface
104 | {
105 | $resource = Route::input( 'resource' );
106 | $related = Route::input( 'related', Request::get( 'related' ) );
107 |
108 | $aimeos = app( 'aimeos' )->get();
109 | $context = app( 'aimeos.context' )->get();
110 | $tmplPaths = $aimeos->getTemplatePaths( 'client/jsonapi/templates', $context->locale()->getSiteItem()->getTheme() );
111 |
112 | $langid = $context->locale()->getLanguageId();
113 |
114 | $context->setView( app( 'aimeos.view' )->create( $context, $tmplPaths, $langid ) );
115 |
116 | return \Aimeos\Client\JsonApi::create( $context, $resource . '/' . $related );
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/src/Controller/PageController.php:
--------------------------------------------------------------------------------
1 | 'page-index'];
30 |
31 | foreach( app( 'config' )->get( 'shop.page.cms', ['cms/page', 'catalog/tree', 'basket/mini'] ) as $name )
32 | {
33 | $params['aiheader'][$name] = Shop::get( $name )->header();
34 | $params['aibody'][$name] = Shop::get( $name )->body();
35 | }
36 |
37 | if( empty( $params['aibody']['cms/page'] ) ) {
38 | abort( 404 );
39 | }
40 |
41 | return Response::view( Shop::template( 'page.index' ), $params )
42 | ->header( 'Cache-Control', 'private, max-age=10' );
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/Controller/SupplierController.php:
--------------------------------------------------------------------------------
1 | 'page-supplier-detail'];
31 |
32 | foreach( app( 'config' )->get( 'shop.page.supplier-detail' ) as $name )
33 | {
34 | $params['aiheader'][$name] = Shop::get( $name )->header();
35 | $params['aibody'][$name] = Shop::get( $name )->body();
36 | }
37 |
38 | return Response::view( Shop::template( 'supplier.detail' ), $params )
39 | ->header( 'Cache-Control', 'private, max-age=10' );
40 | }
41 | catch( \Exception $e )
42 | {
43 | if( $e->getCode() >= 400 && $e->getCode() < 600 ) { abort( $e->getCode() ); }
44 | throw $e;
45 | }
46 | }
47 | }
--------------------------------------------------------------------------------
/src/Facades/Attribute.php:
--------------------------------------------------------------------------------
1 | get(), 'attribute' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Basket.php:
--------------------------------------------------------------------------------
1 | get(), 'basket' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Catalog.php:
--------------------------------------------------------------------------------
1 | get(), 'catalog' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Cms.php:
--------------------------------------------------------------------------------
1 | get(), 'cms' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Customer.php:
--------------------------------------------------------------------------------
1 | get(), 'customer' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Locale.php:
--------------------------------------------------------------------------------
1 | get(), 'locale' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Order.php:
--------------------------------------------------------------------------------
1 | get(), 'order' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Product.php:
--------------------------------------------------------------------------------
1 | get(), 'product' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Service.php:
--------------------------------------------------------------------------------
1 | get(), 'service' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Shop.php:
--------------------------------------------------------------------------------
1 | get(), 'stock' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Subscription.php:
--------------------------------------------------------------------------------
1 | get(), 'subscription' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Facades/Supplier.php:
--------------------------------------------------------------------------------
1 | get(), 'supplier' );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/ShopServiceProvider.php:
--------------------------------------------------------------------------------
1 | loadViewsFrom( dirname( __DIR__ ) . '/views', 'shop' );
37 | $this->loadRoutesFrom( dirname( __DIR__ ) . '/routes/aimeos.php' );
38 |
39 | $this->publishes( [dirname( __DIR__ ) . '/config/shop.php' => config_path( 'shop.php' )], 'config' );
40 | $this->publishes( [dirname( __DIR__ ) . '/public' => public_path( 'vendor/shop' )], 'public' );
41 |
42 | if( file_exists( $basepath = base_path( 'ext' ) ) )
43 | {
44 | foreach( new \DirectoryIterator( $basepath ) as $entry )
45 | {
46 | if( $entry->isDir() && !$entry->isDot() && file_exists( $entry->getPathName() . '/themes/client/html' ) ) {
47 | $this->publishes( [$entry->getPathName() . 'themes/client/html/' => public_path( 'vendor/shop/themes' )], 'public' );
48 | }
49 | }
50 | }
51 |
52 | $class = '\Composer\InstalledVersions';
53 |
54 | if( class_exists( $class ) && method_exists( $class, 'getInstalledPackagesByType' ) )
55 | {
56 | $extdir = base_path( 'ext' );
57 | $packages = \Composer\InstalledVersions::getInstalledPackagesByType( 'aimeos-extension' );
58 |
59 | foreach( $packages as $package )
60 | {
61 | $path = realpath( \Composer\InstalledVersions::getInstallPath( $package ) );
62 |
63 | if( strncmp( $path, $extdir, strlen( $extdir ) ) && file_exists( $path . '/themes/client/html' ) ) {
64 | $this->publishes( [$path . '/themes/client/html' => public_path( 'vendor/shop/themes' )], 'public' );
65 | }
66 | }
67 | }
68 | }
69 |
70 |
71 | /**
72 | * Register the service provider.
73 | *
74 | * @return void
75 | */
76 | public function register()
77 | {
78 | $this->mergeConfigFrom( dirname( __DIR__ ) . '/config/default.php', 'shop' );
79 |
80 | $this->app->singleton( 'aimeos', function( $app ) {
81 | return new \Aimeos\Shop\Base\Aimeos( $app['config'] );
82 | });
83 |
84 | $this->app->singleton( 'aimeos.config', function( $app ) {
85 | return new \Aimeos\Shop\Base\Config( $app['config'], $app['aimeos'] );
86 | });
87 |
88 | $this->app->singleton( 'aimeos.i18n', function( $app ) {
89 | return new \Aimeos\Shop\Base\I18n( $this->app['config'], $app['aimeos'] );
90 | });
91 |
92 | $this->app->singleton( 'aimeos.locale', function( $app ) {
93 | return new \Aimeos\Shop\Base\Locale( $app['config'] );
94 | });
95 |
96 | $this->app->singleton( 'aimeos.context', function( $app ) {
97 | return new \Aimeos\Shop\Base\Context( $app['session.store'], $app['aimeos.config'], $app['aimeos.locale'], $app['aimeos.i18n'] );
98 | });
99 |
100 | $this->app->singleton( 'aimeos.support', function( $app ) {
101 | return new \Aimeos\Shop\Base\Support( $app['aimeos.context'], $app['aimeos.locale'] );
102 | });
103 |
104 | $this->app->singleton( 'aimeos.view', function( $app ) {
105 | return new \Aimeos\Shop\Base\View( $app['config'], $app['aimeos.i18n'], $app['aimeos.support'] );
106 | });
107 |
108 | $this->app->singleton( 'aimeos.shop', function( $app ) {
109 | return new \Aimeos\Shop\Base\Shop( $app['aimeos'], $app['aimeos.context'], $app['aimeos.view'] );
110 | });
111 |
112 |
113 | $this->commands( array(
114 | 'Aimeos\Shop\Command\AccountCommand',
115 | 'Aimeos\Shop\Command\ClearCommand',
116 | 'Aimeos\Shop\Command\SetupCommand',
117 | 'Aimeos\Shop\Command\JobsCommand',
118 | ) );
119 | }
120 |
121 |
122 | /**
123 | * Get the services provided by the provider.
124 | *
125 | * @return array
126 | */
127 | public function provides()
128 | {
129 | return array(
130 | 'Aimeos\Shop\Base\Aimeos', 'Aimeos\Shop\Base\I18n', 'Aimeos\Shop\Base\Context',
131 | 'Aimeos\Shop\Base\Config', 'Aimeos\Shop\Base\Locale', 'Aimeos\Shop\Base\View',
132 | 'Aimeos\Shop\Base\Support', 'Aimeos\Shop\Base\Shop',
133 | 'Aimeos\Shop\Command\AccountCommand', 'Aimeos\Shop\Command\ClearCommand',
134 | 'Aimeos\Shop\Command\SetupCommand', 'Aimeos\Shop\Command\JobsCommand',
135 | );
136 | }
137 |
138 | }
--------------------------------------------------------------------------------
/src/helpers.php:
--------------------------------------------------------------------------------
1 | parameter( 'site', Request::get( 'site', $site ) );
26 | $parameters['locale'] ??= $current->parameter( 'locale', Request::get( 'locale' ) );
27 | $parameters['currency'] ??= $current->parameter( 'currency', Request::get( 'currency' ) );
28 | }
29 |
30 | return app( 'url' )->route( $name, array_filter( $parameters ), $absolute );
31 | }
32 | }
33 |
34 |
35 | if( !function_exists( 'aiconfig' ) )
36 | {
37 | /**
38 | * Returns the configuration setting for the given key
39 | *
40 | * @param string $key Configuration key
41 | * @param mixed $default Default value if the configuration key isn't found
42 | * @return mixed Configuration value
43 | */
44 | function aiconfig( $key, $default = null )
45 | {
46 | return app( 'aimeos.config' )->get()->get( $key, $default );
47 | }
48 | }
49 |
50 |
51 | if( !function_exists( 'aitrans' ) )
52 | {
53 | /**
54 | * Translates the given message
55 | *
56 | * @param string $singular Message to translate
57 | * @param array $params List of paramters for replacing the placeholders in that order
58 | * @param string $domain Translation domain
59 | * @param string $locale ISO language code, maybe combine with ISO currency code, e.g. "en_US"
60 | * @return string Translated string
61 | */
62 | function aitrans( $singular, array $params = array(), $domain = 'client', $locale = null )
63 | {
64 | $i18n = app( 'aimeos.context' )->get()->i18n( $locale );
65 |
66 | return vsprintf( $i18n->dt( $domain, $singular ), $params );
67 | }
68 | }
69 |
70 |
71 | if( !function_exists( 'aitransplural' ) )
72 | {
73 | /**
74 | * Translates the given messages based on the number
75 | *
76 | * @param string $singular Message to translate
77 | * @param string $plural Message for plural translations
78 | * @param integer $number Count of items to chose the correct plural translation
79 | * @param array $params List of paramters for replacing the placeholders in that order
80 | * @param string $domain Translation domain
81 | * @param string $locale ISO language code, maybe combine with ISO currency code, e.g. "en_US"
82 | * @return string Translated string
83 | */
84 | function aitransplural( $singular, $plural, $number, array $params = array(), $domain = 'client', $locale = null )
85 | {
86 | $i18n = app( 'aimeos.context' )->get()->i18n( $locale );
87 |
88 | return vsprintf( $i18n->dn( $domain, $singular, $plural, $number ), $params );
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/views/account/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | {{ __( 'Profile') }}
5 | = $aiheader['locale/select'] ?? '' ?>
6 | = $aiheader['basket/mini'] ?? '' ?>
7 | = $aiheader['account/profile'] ?? '' ?>
8 | = $aiheader['account/review'] ?? '' ?>
9 | = $aiheader['account/subscription'] ?? '' ?>
10 | = $aiheader['account/basket'] ?? '' ?>
11 | = $aiheader['account/history'] ?? '' ?>
12 | = $aiheader['account/favorite'] ?? '' ?>
13 | = $aiheader['account/watch'] ?? '' ?>
14 | = $aiheader['catalog/search'] ?? '' ?>
15 | = $aiheader['catalog/session'] ?? '' ?>
16 | = $aiheader['catalog/tree'] ?? '' ?>
17 | @stop
18 |
19 | @section('aimeos_head_basket')
20 | = $aibody['basket/mini'] ?? '' ?>
21 | @stop
22 |
23 | @section('aimeos_head_nav')
24 | = $aibody['catalog/tree'] ?? '' ?>
25 | @stop
26 |
27 | @section('aimeos_head_locale')
28 | = $aibody['locale/select'] ?? '' ?>
29 | @stop
30 |
31 | @section('aimeos_head_search')
32 | = $aibody['catalog/search'] ?? '' ?>
33 | @stop
34 |
35 | @section('aimeos_body')
36 |
37 | = $aibody['account/profile'] ?? '' ?>
38 | = $aibody['account/review'] ?? '' ?>
39 | = $aibody['account/subscription'] ?? '' ?>
40 | = $aibody['account/basket'] ?? '' ?>
41 | = $aibody['account/history'] ?? '' ?>
42 | = $aibody['account/favorite'] ?? '' ?>
43 | = $aibody['account/watch'] ?? '' ?>
44 |
45 | @stop
46 |
47 | @section('aimeos_aside')
48 | = $aibody['catalog/session'] ?>
49 | @stop
50 |
--------------------------------------------------------------------------------
/views/admin/index.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Aimeos administration interface
8 |
9 |
10 |
11 |
12 |
13 |
17 |
18 |
32 |
33 |
34 |
35 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/views/base.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | @if( config('app.debug') !== true )
10 |
11 | @endif
12 |
13 | @if( in_array(app()->getLocale(), ['ar', 'az', 'dv', 'fa', 'he', 'ku', 'ur']) )
14 |
15 | @else
16 |
17 | @endif
18 |
19 |
20 | @yield('aimeos_header')
21 |
22 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
71 |
72 |
73 | @yield('aimeos_stage')
74 |
75 | @yield('aimeos_body')
76 | @yield('content')
77 |
78 |
79 |
80 |
81 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 | @yield('aimeos_scripts')
130 |
131 |
132 |
--------------------------------------------------------------------------------
/views/basket/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | {{ __( 'Basket') }}
5 | = $aiheader['locale/select'] ?? '' ?>
6 | = $aiheader['catalog/search'] ?? '' ?>
7 | = $aiheader['catalog/tree'] ?? '' ?>
8 | = $aiheader['basket/bulk'] ?? '' ?>
9 | = $aiheader['basket/standard'] ?? '' ?>
10 | = $aiheader['basket/related'] ?? '' ?>
11 | @stop
12 |
13 | @section('aimeos_head_nav')
14 | = $aibody['catalog/tree'] ?? '' ?>
15 | @stop
16 |
17 | @section('aimeos_head_locale')
18 | = $aibody['locale/select'] ?? '' ?>
19 | @stop
20 |
21 | @section('aimeos_head_search')
22 | = $aibody['catalog/search'] ?? '' ?>
23 | @stop
24 |
25 | @section('aimeos_body')
26 |
27 | = $aibody['basket/standard'] ?? '' ?>
28 | = $aibody['basket/related'] ?? '' ?>
29 | = $aibody['basket/bulk'] ?? '' ?>
30 |
31 | @stop
32 |
--------------------------------------------------------------------------------
/views/catalog/count.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/views/catalog/detail.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | = $aiheader['locale/select'] ?? '' ?>
5 | = $aiheader['basket/mini'] ?? '' ?>
6 | = $aiheader['catalog/tree'] ?? '' ?>
7 | = $aiheader['catalog/search'] ?? '' ?>
8 | = $aiheader['catalog/stage'] ?? '' ?>
9 | = $aiheader['catalog/detail'] ?? '' ?>
10 | = $aiheader['catalog/session'] ?? '' ?>
11 | @stop
12 |
13 | @section('aimeos_head_basket')
14 | = $aibody['basket/mini'] ?? '' ?>
15 | @stop
16 |
17 | @section('aimeos_head_nav')
18 | = $aibody['catalog/tree'] ?? '' ?>
19 | @stop
20 |
21 | @section('aimeos_head_locale')
22 | = $aibody['locale/select'] ?? '' ?>
23 | @stop
24 |
25 | @section('aimeos_head_search')
26 | = $aibody['catalog/search'] ?? '' ?>
27 | @stop
28 |
29 | @section('aimeos_stage')
30 | = $aibody['catalog/stage'] ?? '' ?>
31 | @stop
32 |
33 | @section('aimeos_body')
34 | = $aibody['catalog/detail'] ?? '' ?>
35 | = $aibody['cms/page'] ?? '' ?>
36 | @stop
37 |
38 | @section('aimeos_aside')
39 | = $aibody['catalog/session'] ?? '' ?>
40 | @stop
41 |
--------------------------------------------------------------------------------
/views/catalog/home.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | = $aiheader['locale/select'] ?? '' ?>
5 | = $aiheader['basket/mini'] ?? '' ?>
6 | = $aiheader['catalog/search'] ?? '' ?>
7 | = $aiheader['catalog/tree'] ?? '' ?>
8 | = $aiheader['catalog/home'] ?? '' ?>
9 | = $aiheader['cms/page'] ?? '' ?>
10 | @stop
11 |
12 | @section('aimeos_head_basket')
13 | = $aibody['basket/mini'] ?? '' ?>
14 | @stop
15 |
16 | @section('aimeos_head_nav')
17 | = $aibody['catalog/tree'] ?? '' ?>
18 | @stop
19 |
20 | @section('aimeos_head_locale')
21 | = $aibody['locale/select'] ?? '' ?>
22 | @stop
23 |
24 | @section('aimeos_head_search')
25 | = $aibody['catalog/search'] ?? '' ?>
26 | @stop
27 |
28 | @section('aimeos_body')
29 | = $aibody['catalog/home'] ?? '' ?>
30 | = $aibody['cms/page'] ?? '' ?>
31 | @stop
32 |
--------------------------------------------------------------------------------
/views/catalog/list.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | = $aiheader['locale/select'] ?? '' ?>
5 | = $aiheader['basket/mini'] ?? '' ?>
6 | = $aiheader['catalog/search'] ?? '' ?>
7 | = $aiheader['catalog/filter'] ?? '' ?>
8 | = $aiheader['catalog/tree'] ?? '' ?>
9 | = $aiheader['catalog/stage'] ?? '' ?>
10 | = $aiheader['catalog/session'] ?? '' ?>
11 | = $aiheader['catalog/lists'] ?? '' ?>
12 | @stop
13 |
14 | @section('aimeos_head_basket')
15 | = $aibody['basket/mini'] ?? '' ?>
16 | @stop
17 |
18 | @section('aimeos_head_nav')
19 | = $aibody['catalog/tree'] ?? '' ?>
20 | @stop
21 |
22 | @section('aimeos_head_locale')
23 | = $aibody['locale/select'] ?? '' ?>
24 | @stop
25 |
26 | @section('aimeos_head_search')
27 | = $aibody['catalog/search'] ?? '' ?>
28 | @stop
29 |
30 | @section('aimeos_body')
31 | = $aibody['catalog/stage'] ?? '' ?>
32 |
33 |
34 |
38 |
39 | = $aibody['catalog/lists'] ?>
40 |
41 |
42 |
43 | @stop
44 |
--------------------------------------------------------------------------------
/views/catalog/session.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | = $aiheader['locale/select'] ?? '' ?>
5 | = $aiheader['basket/mini'] ?? '' ?>
6 | = $aiheader['catalog/tree'] ?? '' ?>
7 | = $aiheader['catalog/search'] ?? '' ?>
8 | = $aiheader['catalog/session'] ?? '' ?>
9 | @stop
10 |
11 | @section('aimeos_head_basket')
12 | = $aibody['basket/mini'] ?? '' ?>
13 | @stop
14 |
15 | @section('aimeos_head_nav')
16 | = $aibody['catalog/tree'] ?? '' ?>
17 | @stop
18 |
19 | @section('aimeos_head_locale')
20 | = $aibody['locale/select'] ?? '' ?>
21 | @stop
22 |
23 | @section('aimeos_head_search')
24 | = $aibody['catalog/search'] ?? '' ?>
25 | @stop
26 |
27 | @section('aimeos_body')
28 | = $aibody['catalog/session'] ?? '' ?>
29 | @stop
30 |
--------------------------------------------------------------------------------
/views/catalog/stock.blade.php:
--------------------------------------------------------------------------------
1 | = $aibody['catalog/stock'] ?>
--------------------------------------------------------------------------------
/views/catalog/suggest.blade.php:
--------------------------------------------------------------------------------
1 | = $aibody['catalog/suggest'] ?>
--------------------------------------------------------------------------------
/views/catalog/tree.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | = $aiheader['locale/select'] ?? '' ?>
5 | = $aiheader['basket/mini'] ?? '' ?>
6 | = $aiheader['catalog/search'] ?? '' ?>
7 | = $aiheader['catalog/filter'] ?? '' ?>
8 | = $aiheader['catalog/tree'] ?? '' ?>
9 | = $aiheader['catalog/session'] ?? '' ?>
10 | = $aiheader['catalog/stage'] ?? '' ?>
11 | = $aiheader['catalog/lists'] ?? '' ?>
12 | @stop
13 |
14 | @section('aimeos_head_basket')
15 | = $aibody['basket/mini'] ?? '' ?>
16 | @stop
17 |
18 | @section('aimeos_head_nav')
19 | = $aibody['catalog/tree'] ?? '' ?>
20 | @stop
21 |
22 | @section('aimeos_head_locale')
23 | = $aibody['locale/select'] ?? '' ?>
24 | @stop
25 |
26 | @section('aimeos_head_search')
27 | = $aibody['catalog/search'] ?? '' ?>
28 | @stop
29 |
30 | @section('aimeos_stage')
31 | = $aibody['catalog/stage'] ?? '' ?>
32 | @stop
33 |
34 | @section('aimeos_body')
35 |
36 |
37 |
41 |
42 | = $aibody['catalog/lists'] ?? '' ?>
43 | = $aibody['cms/page'] ?? '' ?>
44 |
45 |
46 |
47 | @stop
48 |
--------------------------------------------------------------------------------
/views/checkout/confirm.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | {{ __( 'Thank you') }}
5 | = $aiheader['checkout/confirm'] ?>
6 | = $aiheader['catalog/search'] ?? '' ?>
7 | = $aiheader['catalog/tree'] ?? '' ?>
8 | @stop
9 |
10 | @section('aimeos_nav')
11 | = $aibody['catalog/tree'] ?? '' ?>
12 | = $aibody['catalog/search'] ?? '' ?>
13 | @stop
14 |
15 | @section('aimeos_body')
16 |
17 | = $aibody['checkout/confirm'] ?>
18 |
19 | @stop
20 |
--------------------------------------------------------------------------------
/views/checkout/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | {{ __( 'Checkout') }}
5 | = $aiheader['checkout/standard'] ?>
6 | = $aiheader['catalog/search'] ?? '' ?>
7 | = $aiheader['catalog/tree'] ?? '' ?>
8 | @stop
9 |
10 | @section('aimeos_nav')
11 | = $aibody['catalog/tree'] ?? '' ?>
12 | = $aibody['catalog/search'] ?? '' ?>
13 | @stop
14 |
15 | @section('aimeos_body')
16 |
17 | = $aibody['checkout/standard'] ?>
18 |
19 | @stop
20 |
--------------------------------------------------------------------------------
/views/checkout/update.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/views/jqadm/index.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | @if( config('app.debug') !== true )
10 |
11 | @endif
12 |
13 | Aimeos administration interface
14 |
15 |
16 | @if( $localeDir == 'rtl' )
17 |
18 | @else
19 |
20 | @endif
21 |
22 |
23 |
33 |
34 |
35 |
42 |
43 | = $content ?>
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/views/page/index.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | = $aiheader['catalog/tree'] ?? '' ?>
5 | = $aiheader['basket/mini'] ?? '' ?>
6 | = $aiheader['cms/page'] ?? '' ?>
7 | @stop
8 |
9 | @section('aimeos_nav')
10 | = $aibody['catalog/tree'] ?? '' ?>
11 | @stop
12 |
13 | @section('aimeos_head')
14 | = $aibody['basket/mini'] ?? '' ?>
15 | @stop
16 |
17 | @section('aimeos_body')
18 |
19 | = $aibody['cms/page'] ?? '' ?>
20 |
21 | @stop
22 |
--------------------------------------------------------------------------------
/views/supplier/detail.blade.php:
--------------------------------------------------------------------------------
1 | @extends('shop::base')
2 |
3 | @section('aimeos_header')
4 | = $aiheader['supplier/detail'] ?>
5 | = $aiheader['locale/select'] ?? '' ?>
6 | = $aiheader['basket/mini'] ?? '' ?>
7 | = $aiheader['catalog/tree'] ?? '' ?>
8 | = $aiheader['catalog/search'] ?? '' ?>
9 | = $aiheader['catalog/lists'] ?? '' ?>
10 | @stop
11 |
12 | @section('aimeos_head_basket')
13 | = $aibody['basket/mini'] ?? '' ?>
14 | @stop
15 |
16 | @section('aimeos_head_nav')
17 | = $aibody['catalog/tree'] ?? '' ?>
18 | @stop
19 |
20 | @section('aimeos_head_locale')
21 | = $aibody['locale/select'] ?? '' ?>
22 | @stop
23 |
24 | @section('aimeos_head_search')
25 | = $aibody['catalog/search'] ?? '' ?>
26 | @stop
27 |
28 | @section('aimeos_body')
29 |
30 | = $aibody['supplier/detail'] ?>
31 | = $aibody['catalog/lists'] ?? '' ?>
32 |
33 | @stop
34 |
--------------------------------------------------------------------------------