From d4f6a774d0acade5eacdf20a4c0a6532ea42d942 Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Sun, 6 Jan 2019 01:40:44 +0100 Subject: [PATCH] user shops + shipping --- .idea/workspace.xml | 1082 +++++++++-------- app/Http/Controllers/Api/KasController.php | 24 +- app/Http/Controllers/ShippingController.php | 104 ++ app/Http/Controllers/Web/CardController.php | 16 +- app/Http/Controllers/Web/SiteController.php | 17 +- app/Http/Kernel.php | 1 + app/Http/Middleware/Subdomain.php | 35 + app/Models/Shipping.php | 50 + app/Models/ShippingCountry.php | 25 + app/Models/ShippingPrice.php | 93 ++ app/Models/UserShop.php | 2 +- app/Services/Util.php | 27 + ...018_10_21_164001_create_products_table.php | 3 + ...19_01_06_004815_create_shippings_table.php | 39 + ...06_004849_create_shipping_prices_table.php | 49 + ...004907_create_shipping_countries_table.php | 44 + public/assets/images/logo_bio.png | Bin 0 -> 17914 bytes public/assets/images/logo_derma.png | Bin 0 -> 30179 bytes resources/lang/de.json | 4 + resources/views/admin/shipping/edit.blade.php | 72 ++ .../views/admin/shipping/index.blade.php | 59 + resources/views/home.blade.php | 16 +- resources/views/layouts/application.blade.php | 38 +- .../layouts/includes/layout-sidenav.blade.php | 4 + .../user/components/user_shop_edit.blade.php | 6 +- resources/views/web/index.blade.php | 231 +--- .../web/layouts/includes/footer.blade.php | 8 +- .../web/layouts/includes/header.blade.php | 4 +- resources/views/web/start.blade.php | 230 ++++ .../views/web/templates/aloevera.blade.php | 2 +- .../templates/anforderungsprofil.blade.php | 2 +- resources/views/web/templates/card.blade.php | 10 +- .../web/templates/checkout-final.blade.php | 2 +- .../views/web/templates/checkout.blade.php | 4 +- .../views/web/templates/datenschutz.blade.php | 2 +- .../web/templates/erreichbarkeit.blade.php | 2 +- .../web/templates/existenzgruendung.blade.php | 2 +- .../views/web/templates/impressum.blade.php | 2 +- .../web/templates/karrierechancen.blade.php | 2 +- .../views/web/templates/kontakt.blade.php | 2 +- .../views/web/templates/partner.blade.php | 2 +- .../web/templates/produkte-show.blade.php | 4 +- .../views/web/templates/produkte.blade.php | 6 +- .../views/web/templates/ueber-uns.blade.php | 2 +- .../web/templates/vereinbarkeit.blade.php | 2 +- .../views/web/templates/vorteile.blade.php | 2 +- .../web/user/layouts/application.blade.php | 79 ++ .../user/layouts/includes/footer.blade.php | 62 + .../user/layouts/includes/header.blade.php | 135 ++ .../views/web/user/layouts/layout.blade.php | 23 + resources/views/web/user/start.blade.php | 121 ++ routes/_web.php | 312 +++++ routes/web.php | 75 +- 53 files changed, 2326 insertions(+), 814 deletions(-) create mode 100755 app/Http/Controllers/ShippingController.php create mode 100755 app/Http/Middleware/Subdomain.php create mode 100644 app/Models/Shipping.php create mode 100644 app/Models/ShippingCountry.php create mode 100644 app/Models/ShippingPrice.php create mode 100644 database/migrations/2019_01_06_004815_create_shippings_table.php create mode 100644 database/migrations/2019_01_06_004849_create_shipping_prices_table.php create mode 100644 database/migrations/2019_01_06_004907_create_shipping_countries_table.php create mode 100644 public/assets/images/logo_bio.png create mode 100644 public/assets/images/logo_derma.png create mode 100755 resources/views/admin/shipping/edit.blade.php create mode 100755 resources/views/admin/shipping/index.blade.php create mode 100644 resources/views/web/start.blade.php create mode 100644 resources/views/web/user/layouts/application.blade.php create mode 100644 resources/views/web/user/layouts/includes/footer.blade.php create mode 100644 resources/views/web/user/layouts/includes/header.blade.php create mode 100644 resources/views/web/user/layouts/layout.blade.php create mode 100644 resources/views/web/user/start.blade.php create mode 100755 routes/_web.php diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 6526dcb..d67f73a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,68 +2,49 @@ - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -323,6 +236,9 @@ base_ url aktvie + ac + card_show + route @@ -360,57 +276,57 @@ @@ -432,6 +348,7 @@ + @@ -544,8 +461,8 @@ - @@ -594,6 +511,21 @@ + + + + + + + + + + + + + + + @@ -659,6 +591,22 @@ + + + + + + + + + + + + + + + + @@ -667,6 +615,14 @@ + + + + + + + + @@ -674,6 +630,14 @@ + + + + + + + + @@ -696,6 +660,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -715,17 +738,18 @@ + + + + + + + + - - - - - - - - - + - + @@ -804,301 +829,354 @@ + + + + + file://$PROJECT_DIR$/app/Http/Middleware/Subdomain.php + 4 + + + + - - - - - - - - - - + - - - - - + + - - - - - - - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - + + - + - - - - - - - - - - - - + + - - + + - + - - - - - - + - + - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + + + + diff --git a/app/Http/Controllers/Api/KasController.php b/app/Http/Controllers/Api/KasController.php index b1169fa..cf6d450 100755 --- a/app/Http/Controllers/Api/KasController.php +++ b/app/Http/Controllers/Api/KasController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Input; +use Session; use \SoapClient; class KasController extends Controller @@ -17,6 +18,7 @@ class KasController extends Controller private $session_lifetime = 600; // Gültigkeit des Tokens in Sek. bis zur neuen Authentifizierung private $session_update_lifetime = 'Y'; // bei N läuft die Session nach <$session_lifetime> Sekunden ab, bei Y verlängert sich die Session mit jeder Benutzung private $CredentialToken = false; + private $kas_flood_delay = 2; /** * Create a new controller instance. @@ -31,6 +33,7 @@ class KasController extends Controller public function action($func, $para = array()){ + $this->checkSession($func); try { $Params = array(); // Parameter für die API-Funktion @@ -42,6 +45,8 @@ class KasController extends Controller 'KasRequestType' => $func, // API-Funktion 'KasRequestParams' => $para // Parameter an die API-Funktion ))); + Session::put('flood_protection.'.$func, time() + $this->kas_flood_delay + 0.2); + if(isset($req['Response']['ReturnString']) && $req['Response']['ReturnString'] == "TRUE"){ return $req['Response']['ReturnInfo']; } @@ -60,8 +65,11 @@ class KasController extends Controller private function login(){ + + $this->checkSession('auth'); try { + $SoapLogon = new SoapClient('https://kasapi.kasserver.com/soap/wsdl/KasAuth.wsdl'); $this->CredentialToken = $SoapLogon->KasAuth(json_encode(array( 'KasUser' => $this->kas_user, @@ -70,6 +78,8 @@ class KasController extends Controller 'SessionLifeTime' => $this->session_lifetime, 'SessionUpdateLifeTime' => $this->session_update_lifetime ))); + Session::put('flood_protection.auth', time() + $this->kas_flood_delay + 0.2); + } // Fehler abfangen und ausgeben @@ -83,7 +93,19 @@ class KasController extends Controller } + private function checkSession($func) + { + $name = 'flood_protection.'.$func; + if(Session::exists($name)){ + $time_to_wait = (float)Session::get($name) - time(); + Session::forget($name); + }else { + $time_to_wait = 0; + } + if ( $time_to_wait >= 0 ) { + usleep( intval( $time_to_wait*1000000 ) ); + } - + } } \ No newline at end of file diff --git a/app/Http/Controllers/ShippingController.php b/app/Http/Controllers/ShippingController.php new file mode 100755 index 0000000..1474c5c --- /dev/null +++ b/app/Http/Controllers/ShippingController.php @@ -0,0 +1,104 @@ +middleware('superadmin'); + + } + + /** + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function index() + { + $data = [ + 'values' => Shipping::all(), + ]; + return view('admin.shipping.index', $data); + } + + public function edit($shipping_id) + { + if($shipping_id == "new"){ + $shipping = new Shipping(); + $shipping->active = 1; + + }else{ + $shipping = Shipping::findOrFail($shipping_id); + + } + $data = [ + 'value' => $shipping, + ]; + return view('admin.shipping.edit', $data); + + + } + + /** + * @param Request $request + * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View + */ + public function store(Request $request) + { + $data = Input::all(); + if ($data['id'] == "new") { + $shipping = new Shipping(); + $rules = array( + 'name' => 'required', + ); + + } else { + $shipping = Shipping::findOrFail($data['id']); + $rules = array( + 'name' => 'required', + ); + } + $data = [ + 'value' => $shipping, + ]; + $validator = Validator::make(Input::all(), $rules); + + if ($validator->fails()) { + return view('admin.shipping.edit', $data)->withErrors($validator); + + } + $data = Input::all(); + + $shipping->name = $data['name']; + $shipping->free = $data['free']; + $shipping->active = isset($data['active']) ? true : false; + $shipping->save(); + + + \Session()->flash('alert-save', true); + + return redirect(route('admin_shipping_edit', [$shipping->id])); + + } + + public function deleteShipping($shipping_id) + { + $shipping = Shipping::findOrFail($shipping_id); + $shipping->delete(); + + \Session()->flash('alert-success', "Versandkosten gelöscht"); + return redirect('/admin/shippings'); + + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Web/CardController.php b/app/Http/Controllers/Web/CardController.php index fa82657..bb46d50 100755 --- a/app/Http/Controllers/Web/CardController.php +++ b/app/Http/Controllers/Web/CardController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Web; use App\Http\Controllers\Controller; use App\Models\Product; +use Util; use Yard; use Input; @@ -56,7 +57,10 @@ class CardController extends Controller } public function showCard(){ - return view('web.templates.card'); + $data = [ + 'user_shop' => Util::getUserShop(), + ]; + return view('web.templates.card', $data); } public function updateCard(){ @@ -73,11 +77,17 @@ class CardController extends Controller } public function checkoutCard(){ - return view('web.templates.checkout'); + $data = [ + 'user_shop' => Util::getUserShop(), + ]; + return view('web.templates.checkout', $data); } public function checkoutFinalCard(){ - return view('web.templates.checkout-final'); + $data = [ + 'user_shop' => Util::getUserShop(), + ]; + return view('web.templates.checkout-final', $data); } diff --git a/app/Http/Controllers/Web/SiteController.php b/app/Http/Controllers/Web/SiteController.php index 3b52a03..f0b766b 100755 --- a/app/Http/Controllers/Web/SiteController.php +++ b/app/Http/Controllers/Web/SiteController.php @@ -7,6 +7,7 @@ use App\Http\Controllers\Controller; use App\Models\Category; use App\Models\Product; use Input; +use Util; class SiteController extends Controller { @@ -22,7 +23,10 @@ class SiteController extends Controller public function index() { - return view('web.index'); + $data = [ + 'user_shop' => Util::getUserShop() + ]; + return view('web.index', $data); } public function site($site, $subsite = false, $product_slug = false) @@ -35,6 +39,7 @@ class SiteController extends Controller if ($category && $product) { $data = [ + 'user_shop' => Util::getUserShop(), 'subsite' => $subsite, 'categories' => Category::where('active', true)->orderBy('pos', 'ASC')->get(), 'product' => $product, @@ -51,6 +56,7 @@ class SiteController extends Controller $category = Category::where('slug', $subsite)->where('active', true)->first(); if ($category) { $data = [ + 'user_shop' => Util::getUserShop(), 'subsite' => $subsite, 'categories' => Category::where('active', true)->orderBy('pos', 'ASC')->get(), 'products' => Product::whereHas('categories', function ($query) use ($category) { @@ -65,6 +71,7 @@ class SiteController extends Controller } } $data = [ + 'user_shop' => Util::getUserShop(), 'subsite' => 'alle-produkte', 'categories' => Category::where('active', true)->orderBy('pos', 'ASC')->get(), 'products' => Product::where('active', true)->orderBy('pos', 'ASC')->get(), @@ -72,17 +79,19 @@ class SiteController extends Controller ]; return view('web.templates.'.$site, $data); } - + $data = [ + 'user_shop' => Util::getUserShop() + ]; if($subsite){ if(!view()->exists('web.templates.'.$subsite)){ abort(404); } - return view('web.templates.'.$subsite); + return view('web.templates.'.$subsite, $data); } if(!view()->exists('web.templates.'.$site)){ abort(404); } - return view('web.templates.'.$site); + return view('web.templates.'.$site, $data); } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 8bda5a9..cef55e6 100755 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -56,6 +56,7 @@ class Kernel extends HttpKernel 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'admin' => \App\Http\Middleware\Admin::class, 'superadmin' => \App\Http\Middleware\SuperAdmin::class, + 'subdomain' => \App\Http\Middleware\Subdomain::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, diff --git a/app/Http/Middleware/Subdomain.php b/app/Http/Middleware/Subdomain.php new file mode 100755 index 0000000..844f108 --- /dev/null +++ b/app/Http/Middleware/Subdomain.php @@ -0,0 +1,35 @@ +route('subdomain'))){ + $user_shop = UserShop::where('slug', $request->route('subdomain'))->where('active', 1)->first(); + $request->route()->forgetParameter('subdomain'); + Util::setPostRoute('user.'); + if($user_shop){ + \Session::put('user_shop', $user_shop); + return $next($request); + } + } + return redirect(config('app.url')); + + } +} diff --git a/app/Models/Shipping.php b/app/Models/Shipping.php new file mode 100644 index 0000000..61fab51 --- /dev/null +++ b/app/Models/Shipping.php @@ -0,0 +1,50 @@ + 'array', + ]; + + protected $fillable = [ + 'name', 'active', 'free' + ]; + + public function _format_number($value){ + return preg_replace("/[^0-9,]/", "", $value); + } + + public function setFreeAttribute( $value ) { + if($value == ""){ + $this->attributes['free'] = null; + }else{ + $value = $this->_format_number($value); + $this->attributes['free'] = floatval(str_replace(',', '.', $value)); + } + } + public function getFormattedFree() + { + if($this->attributes['free'] === null) { + return ""; + } + if(\App::getLocale() == "en"){ + return number_format($this->attributes['free'], 2, '.', ','); + } + return number_format($this->attributes['free'], 2, ',', '.'); + } + + + public function countries(){ + return $this->hasMany('App\Models\ShippingCountry', 'shipping_id', 'id'); + } + + public function prices(){ + return $this->hasMany('App\Models\ShippingPrice', 'shipping_id', 'id'); + } +} diff --git a/app/Models/ShippingCountry.php b/app/Models/ShippingCountry.php new file mode 100644 index 0000000..e278512 --- /dev/null +++ b/app/Models/ShippingCountry.php @@ -0,0 +1,25 @@ +belongsTo('App\Models\Shipping', 'shipping_id'); + } + + public function country() + { + return $this->belongsTo('App\Models\Country', 'country_id'); + } +} diff --git a/app/Models/ShippingPrice.php b/app/Models/ShippingPrice.php new file mode 100644 index 0000000..44d2035 --- /dev/null +++ b/app/Models/ShippingPrice.php @@ -0,0 +1,93 @@ +belongsTo('App\Models\Shipping', 'shipping_id'); + } + + + public function _format_number($value){ + return preg_replace("/[^0-9,]/", "", $value); + } + + public function setPriceAttribute( $value ) { + $value = $this->_format_number($value); + $this->attributes['price'] = floatval(str_replace(',', '.', $value)); + } + public function setFactorAttribute( $value ) { + $value = $this->_format_number($value); + $this->attributes['factor'] = floatval(str_replace(',', '.', $value)); + } + public function setTaxAttribute( $value ) { + $value = $this->_format_number($value); + $this->attributes['tax'] = floatval(str_replace(',', '.', $value)); + } + public function setPriceOldAttribute( $value ) { + $value = $this->_format_number($value); + $this->attributes['price_old'] = floatval(str_replace(',', '.', $value)); + } + + public function setTotalFromAttribute( $value ) { + $value = $this->_format_number($value); + $this->attributes['total_from'] = floatval(str_replace(',', '.', $value)); + } + public function setTotalToAttribute( $value ) { + $value = $this->_format_number($value); + $this->attributes['total_to'] = floatval(str_replace(',', '.', $value)); + } + + + public function getFormattedPrice() + { + if(\App::getLocale() == "en"){ + return number_format($this->attributes['price'], 2, '.', ','); + } + return number_format($this->attributes['price'], 2, ',', '.'); + } + public function getFormattedTax() + { + if(\App::getLocale() == "en"){ + return number_format($this->attributes['tax'], 2, '.', ','); + } + return number_format($this->attributes['tax'], 2, ',', '.'); + } + + public function getFormattedFactor() + { + if(\App::getLocale() == "en"){ + return number_format($this->attributes['factor'], 2, '.', ','); + } + return number_format($this->attributes['factor'], 2, ',', '.'); + } + + + public function getFormatTotalFrom() + { + if(\App::getLocale() == "en"){ + return number_format($this->attributes['total_from'], 2, '.', ','); + } + return number_format($this->attributes['total_from'], 2, ',', '.'); + } + public function getFormattedTotalTo() + { + if(\App::getLocale() == "en"){ + return number_format($this->attributes['total_to'], 2, '.', ','); + } + return number_format($this->attributes['total_to'], 2, ',', '.'); + } + + + +} diff --git a/app/Models/UserShop.php b/app/Models/UserShop.php index 8086d4f..ae0fbcb 100644 --- a/app/Models/UserShop.php +++ b/app/Models/UserShop.php @@ -55,7 +55,7 @@ class UserShop extends Model public function getSubdomainStatus() { - if($this->is_online != NULL){ + if($this->is_online !== NULL){ return $this->is_online; } diff --git a/app/Services/Util.php b/app/Services/Util.php index d52ec0a..d1b1361 100644 --- a/app/Services/Util.php +++ b/app/Services/Util.php @@ -6,6 +6,7 @@ namespace App\Services; class Util { + private static $postRoute = 'base.'; public static function formatDate(){ if(\App::getLocale() == "en"){ @@ -28,4 +29,30 @@ class Util } return 'd.m.Y - H:i'; } + public static function getPostRoute(){ + return self::$postRoute; + } + public static function setPostRoute($postRoute){ + self::$postRoute = $postRoute; + } + + public static function getUserShop(){ + if(\Session::has('user_shop')){ + if($user_shop = \Session::get('user_shop')){ + return $user_shop; + } + } + return false; + } + + public static function addRoute($p = []){ + $b = []; + if(\Session::has('user_shop')){ + if($user_shop = \Session::get('user_shop')){ + $b = ['subdomain' => $user_shop->slug]; + } + } + return array_merge($p, $b); + } + } \ No newline at end of file diff --git a/database/migrations/2018_10_21_164001_create_products_table.php b/database/migrations/2018_10_21_164001_create_products_table.php index 5cfedd7..ac7909a 100644 --- a/database/migrations/2018_10_21_164001_create_products_table.php +++ b/database/migrations/2018_10_21_164001_create_products_table.php @@ -31,6 +31,9 @@ class CreateProductsTable extends Migration $table->decimal('price_old', 8, 2)->nullable(); //streichpreis + $table->unsignedInteger('weight')->nullable(); + + $table->string('contents')->nullable(); $table->string('number')->nullable(); $table->string('icons')->nullable(); //as array cast diff --git a/database/migrations/2019_01_06_004815_create_shippings_table.php b/database/migrations/2019_01_06_004815_create_shippings_table.php new file mode 100644 index 0000000..5d7af8d --- /dev/null +++ b/database/migrations/2019_01_06_004815_create_shippings_table.php @@ -0,0 +1,39 @@ +increments('id'); + + $table->string('name')->index(); + $table->text('trans_name')->nullable(); + + $table->decimal('free', 8, 2)->nullable(); + + $table->boolean('active')->default(false); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('shippings'); + } +} diff --git a/database/migrations/2019_01_06_004849_create_shipping_prices_table.php b/database/migrations/2019_01_06_004849_create_shipping_prices_table.php new file mode 100644 index 0000000..f02e75a --- /dev/null +++ b/database/migrations/2019_01_06_004849_create_shipping_prices_table.php @@ -0,0 +1,49 @@ +increments('id'); + $table->unsignedInteger('shipping_id'); + + $table->decimal('price', 8, 2)->nullable(); + $table->decimal('tax', 5, 2)->nullable(); + $table->decimal('factor', 5, 2)->nullable(); + + $table->decimal('total_from', 8, 2)->nullable(); + $table->decimal('total_to', 8, 2)->nullable(); + + $table->unsignedInteger('weight_from')->nullable(); + $table->unsignedInteger('weight_to')->nullable(); + + + $table->timestamps(); + + $table->foreign('shipping_id') + ->references('id') + ->on('shippings') + ->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('shipping_prices'); + } +} diff --git a/database/migrations/2019_01_06_004907_create_shipping_countries_table.php b/database/migrations/2019_01_06_004907_create_shipping_countries_table.php new file mode 100644 index 0000000..03b0aae --- /dev/null +++ b/database/migrations/2019_01_06_004907_create_shipping_countries_table.php @@ -0,0 +1,44 @@ +increments('id'); + $table->unsignedInteger('shipping_id'); + $table->unsignedInteger('country_id')->nullable()->index(); + + $table->timestamps(); + + $table->foreign('shipping_id') + ->references('id') + ->on('shippings') + ->onDelete('cascade'); + + $table->foreign('country_id') + ->references('id') + ->on('countries'); + }); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('shipping_countries'); + } +} diff --git a/public/assets/images/logo_bio.png b/public/assets/images/logo_bio.png new file mode 100644 index 0000000000000000000000000000000000000000..b32de59e33027889ebd12b316f4d23bad61fd492 GIT binary patch literal 17914 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 e-|qE40t^769n6_x$w|!s0000any()) +
+
+
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+
+
+ @endif + +

+ {{ __('Create/Edit Versandkosten') }} +

+ + {!! Form::open(['url' => route('admin_shipping_store'), 'class' => 'form-horizontal', 'id'=>'']) !!} + + +
+   + {{ __('back') }} +
+ + +
+ +
+ {{ __('Versandkosten') }} + +
+ +
+
+ + + {{ Form::text('name', $value->name, array('placeholder'=>__('Name'), 'class'=>'form-control'.($errors->has('name') ? ' is-invalid' : ''), 'id'=>'name', 'required')) }} +
+ @if ($errors->has('name')) + + {{ $errors->first('name') }} + + @endif + + +
+ + {{ Form::text('free', $value->getFormattedFree(), array('placeholder'=>__('Free'), 'class'=>'form-control', 'id'=>'free')) }} +
+ +
+
+
+   + {{ __('back') }} +
+ + {!! Form::close() !!} + + + + +@endsection diff --git a/resources/views/admin/shipping/index.blade.php b/resources/views/admin/shipping/index.blade.php new file mode 100755 index 0000000..074da9c --- /dev/null +++ b/resources/views/admin/shipping/index.blade.php @@ -0,0 +1,59 @@ +@extends('layouts.layout-2') + +@section('content') +
+
+ {{__('Versandkosten')}} +
+
+ + + + + + + + + + + @foreach($values as $value) + + + + + + + + @endforeach + +
 {{__('Name')}}{{__('Status')}}
+ + + + {{ $value->name }}@if($value->active) @else@endif
+ +
+
+ + +@endsection diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 91730fc..61b4777 100755 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -54,7 +54,21 @@ @if($user->active == 1 && !$user->user_shop)

{{__('Your Shop') }}

- {{__('open your shop')}} + @if($user->shop) +

+ {{__('open since')}} {{__('at')}} {{ $user->shop->getActiveDateFormat() }}

+ @if($user->shop->active) +

+ {{__('Status')}} {{ __('active') }}

+ @else +

+ {{__('Status')}} {{ __('inactive') }}

+ @endif + {{__('settings your shop')}} + + @else + {{__('open your shop')}} + @endif
@endif diff --git a/resources/views/layouts/application.blade.php b/resources/views/layouts/application.blade.php index ffb3832..c7bdc95 100755 --- a/resources/views/layouts/application.blade.php +++ b/resources/views/layouts/application.blade.php @@ -117,6 +117,8 @@ + + @@ -136,6 +138,20 @@ $('.summernote').summernote({ height: 140, lang: 'de-DE', + cleaner:{ + action: 'both', // both|button|paste 'button' only cleans via toolbar button, 'paste' only clean when pasting content, both does both options. + newline: '
', // Summernote's default is to use '


' + notStyle: 'position:absolute;top:0;left:0;right:0', // Position of Notification + icon: '[Your Button]', + keepHtml: false, // Remove all Html formats + keepOnlyTags: ['

', '
', '

    ', '
  • ', '', '','', ''], // If keepHtml is true, remove all tags except these + keepClasses: false, // Remove Classes + badTags: ['style', 'script', 'applet', 'embed', 'noframes', 'noscript', 'html'], // Remove full tags with contents + badAttributes: ['style', 'start'], // Remove attributes from remaining tags + limitChars: false, // 0/false|# 0/false disables option + limitDisplay: 'both', // text|html|both + limitStop: false // true/false + } }); $('.summernote-small').summernote({ @@ -148,9 +164,27 @@ ['fontsize', ['fontsize']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], - ['height', ['height']] - ] + ['height', ['height']], + ['view',['fullscreen','codeview']], + + ], + cleaner:{ + action: 'both', // both|button|paste 'button' only cleans via toolbar button, 'paste' only clean when pasting content, both does both options. + newline: '
    ', // Summernote's default is to use '


    ' + notStyle: 'position:absolute;top:0;left:0;right:0', // Position of Notification + icon: '[Your Button]', + keepHtml: false, // Remove all Html formats + keepOnlyTags: ['

    ', '
    ', '

      ', '
    • ', '', '','', ''], // If keepHtml is true, remove all tags except these + keepClasses: false, // Remove Classes + badTags: ['style', 'script', 'applet', 'embed', 'noframes', 'noscript', 'html'], // Remove full tags with contents + badAttributes: ['style', 'start'], // Remove attributes from remaining tags + limitChars: false, // 0/false|# 0/false disables option + limitDisplay: 'both', // text|html|both + limitStop: false // true/false + } }); + $('.note-status-output').hide(); + }); diff --git a/resources/views/layouts/includes/layout-sidenav.blade.php b/resources/views/layouts/includes/layout-sidenav.blade.php index 08d1e64..7b403d9 100755 --- a/resources/views/layouts/includes/layout-sidenav.blade.php +++ b/resources/views/layouts/includes/layout-sidenav.blade.php @@ -82,6 +82,10 @@
      {{ __('User Rechte') }}
    • +
    • +
      {{ __('Versandkosten') }}
      +
    • + @endif diff --git a/resources/views/user/components/user_shop_edit.blade.php b/resources/views/user/components/user_shop_edit.blade.php index 1814e21..8da50d6 100644 --- a/resources/views/user/components/user_shop_edit.blade.php +++ b/resources/views/user/components/user_shop_edit.blade.php @@ -76,7 +76,11 @@ @if(!$user->shop->getSubdomainStatus())
    • - {{ __('not available copy') }} + {{ __('not available copy') }} + + + +
    • @endif
    • diff --git a/resources/views/web/index.blade.php b/resources/views/web/index.blade.php index 7f7435e..85bfc6c 100644 --- a/resources/views/web/index.blade.php +++ b/resources/views/web/index.blade.php @@ -1,230 +1 @@ -@extends('web.layouts.layout') - -@section('content') - - - - - -
      - -
      -
        - - -
      • - - - -
        - -
        - Deutscher Direktvertrieb für -
        - -
        - 100% Premium Bio Aloe Vera -
        -
      • -
      -
      -
      -
      - - - - -
      -
      - -

      MIVITA ist ein Unternehmen mit Standort in Deutschland, das innovative und umweltfreundliche - sowie hochwertige Produkte vertreibt. Seit seinem Markteintritt bekennt sich das MIVITA Unternehmen zu einem - Werteverständnis, bei dem die Zufriedenheit der Kunden, wie auch die Verantwortung für die Umwelt im Fokus - stehen.

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

      Warum MIVITA?

      -

      Unsere Kunden vertrauen zurecht auf die exzellenten Eigenschaften der MIVITA Produkte. Damit trifft - jeder aktiv eine kluge Entscheidung für Gesundheit und Umwelt.

      - -

      Wir legen nicht nur auf die Qualität unserer Produkte einen hohen Stellenwert, sondern natürlich auch - auf umfassende, kompetente Beratung durch freundliche und fachkundige Berater und Beraterinnen.

      - -

      Wir entwickeln und vertreiben ausschließlich Produkte, die qualitativ hochwertig sind. So sind sie - bei sachgemäßer Anwendung und Pflege langlebig und sehr ergiebig. Faktoren, die uns die - Zufriedenheit unserer Kunden sichern.

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

      Aloe Vera

      -

      Mit höchstem Anspruch arbeiten wir gemeinsam mit der Aloe Vera Farm auf Mallorca - zusammen, die weltweite Qualität der Spitzenklasse garantiert.

      - - - Mehr - - - - lesen - JETZT - - - - - -
      -
      -
      -
      -

      Produkte

      -

      Hier findest Du einen Überblick über das komplette Premium-Produktsortiment von MIVITA. - Vom hochwertigen Aloe Saft bis zu wohltuender Kosmetik.

      - - - Mehr - - - - lesen - JETZT - - - - - -
      -
      -
      -
      -

      Vertriebspartner

      -

      Werde auch Du ein Vertriebspartner von MIVITA und baue Dir Dein eigenes Geschäft mit - Qualitätsprodukten auf. Wenn Du magst, kannst Du sofort starten ...

      - - - Mehr - - - - lesen - JETZT - - - - - -
      -
      - -
      - - -
      -
      - - - -
      -
      - -
      - -
      - -

      MIVITA ist exklusiver Partner der Farm Aloe Vera de Mallorca im Bereich Direktvertrieb Deutschland. - Hier haben zwei Unternehmen zusammengefunden, für die Qualität und Nachhaltigkeit oberstes Gebot - sind. Nur so lassen sich langfristig zufriedene Kunden zu echten Fans unserer Produkte gewinnen.

      -
      -

      „Mensch, Tier und Natur zuliebe ... Nachhaltigkeit und Produkte, die wirklich „guttun“, sind - uns wichtig.“

      -

      Alois Ried - Inhaber MIVITA

      -
      - -
      - -
      - -
      - -
      - -
      - - -
      - -
      -
      - - - - -@endsection +@include($user_shop ?'web.user.start' : 'web.start') diff --git a/resources/views/web/layouts/includes/footer.blade.php b/resources/views/web/layouts/includes/footer.blade.php index 2c99d5e..a011754 100644 --- a/resources/views/web/layouts/includes/footer.blade.php +++ b/resources/views/web/layouts/includes/footer.blade.php @@ -85,11 +85,11 @@ - zum Warenkorb + zum Warenkorb @@ -123,7 +123,7 @@ Aloe Vera
    • -
    • +
    • Produktwelt diff --git a/resources/views/web/start.blade.php b/resources/views/web/start.blade.php new file mode 100644 index 0000000..7f7435e --- /dev/null +++ b/resources/views/web/start.blade.php @@ -0,0 +1,230 @@ +@extends('web.layouts.layout') + +@section('content') + + + + + +
      + +
      +
        + + +
      • + + + +
        + +
        + Deutscher Direktvertrieb für +
        + +
        + 100% Premium Bio Aloe Vera +
        +
      • +
      +
      +
      +
      + + + + +
      +
      + +

      MIVITA ist ein Unternehmen mit Standort in Deutschland, das innovative und umweltfreundliche + sowie hochwertige Produkte vertreibt. Seit seinem Markteintritt bekennt sich das MIVITA Unternehmen zu einem + Werteverständnis, bei dem die Zufriedenheit der Kunden, wie auch die Verantwortung für die Umwelt im Fokus + stehen.

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

      Warum MIVITA?

      +

      Unsere Kunden vertrauen zurecht auf die exzellenten Eigenschaften der MIVITA Produkte. Damit trifft + jeder aktiv eine kluge Entscheidung für Gesundheit und Umwelt.

      + +

      Wir legen nicht nur auf die Qualität unserer Produkte einen hohen Stellenwert, sondern natürlich auch + auf umfassende, kompetente Beratung durch freundliche und fachkundige Berater und Beraterinnen.

      + +

      Wir entwickeln und vertreiben ausschließlich Produkte, die qualitativ hochwertig sind. So sind sie + bei sachgemäßer Anwendung und Pflege langlebig und sehr ergiebig. Faktoren, die uns die + Zufriedenheit unserer Kunden sichern.

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

      Aloe Vera

      +

      Mit höchstem Anspruch arbeiten wir gemeinsam mit der Aloe Vera Farm auf Mallorca + zusammen, die weltweite Qualität der Spitzenklasse garantiert.

      + + + Mehr + + + + lesen + JETZT + + + + + +
      +
      +
      +
      +

      Produkte

      +

      Hier findest Du einen Überblick über das komplette Premium-Produktsortiment von MIVITA. + Vom hochwertigen Aloe Saft bis zu wohltuender Kosmetik.

      + + + Mehr + + + + lesen + JETZT + + + + + +
      +
      +
      +
      +

      Vertriebspartner

      +

      Werde auch Du ein Vertriebspartner von MIVITA und baue Dir Dein eigenes Geschäft mit + Qualitätsprodukten auf. Wenn Du magst, kannst Du sofort starten ...

      + + + Mehr + + + + lesen + JETZT + + + + + +
      +
      + +
      + + +
      +
      + + + +
      +
      + +
      + +
      + +

      MIVITA ist exklusiver Partner der Farm Aloe Vera de Mallorca im Bereich Direktvertrieb Deutschland. + Hier haben zwei Unternehmen zusammengefunden, für die Qualität und Nachhaltigkeit oberstes Gebot + sind. Nur so lassen sich langfristig zufriedene Kunden zu echten Fans unserer Produkte gewinnen.

      +
      +

      „Mensch, Tier und Natur zuliebe ... Nachhaltigkeit und Produkte, die wirklich „guttun“, sind + uns wichtig.“

      +

      Alois Ried - Inhaber MIVITA

      +
      + +
      + +
      + +
      + +
      + +
      + + +
      + +
      +
      + + + + +@endsection diff --git a/resources/views/web/templates/aloevera.blade.php b/resources/views/web/templates/aloevera.blade.php index 55fd0d4..d30138d 100644 --- a/resources/views/web/templates/aloevera.blade.php +++ b/resources/views/web/templates/aloevera.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/anforderungsprofil.blade.php b/resources/views/web/templates/anforderungsprofil.blade.php index 134c9b8..b71e508 100644 --- a/resources/views/web/templates/anforderungsprofil.blade.php +++ b/resources/views/web/templates/anforderungsprofil.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/card.blade.php b/resources/views/web/templates/card.blade.php index c12c5d0..b643604 100644 --- a/resources/views/web/templates/card.blade.php +++ b/resources/views/web/templates/card.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') @@ -120,7 +120,7 @@ @if(Yard::instance('shopping')->content()->count()) - {!! Form::open(['url' => route('card_update'), 'class' => 'cartContent clearfix', 'id'=>'']) !!} + {!! Form::open(['url' => route(Util::getPostRoute().'card_update', Util::addRoute()), 'class' => 'cartContent clearfix', 'id'=>'']) !!}
      @@ -149,7 +149,7 @@ {{ $row->name }} Lieferzeit: 1-3 Werktage - +
      {{ $row->subtotal() }}
      × {{ $row->price() }} €
      @@ -158,7 +158,7 @@ @endforeach
      - Warenkorb löschen + Warenkorb löschen
      @@ -213,7 +213,7 @@ - zur Kasse + zur Kasse diff --git a/resources/views/web/templates/checkout-final.blade.php b/resources/views/web/templates/checkout-final.blade.php index 7d768f3..4e13f37 100644 --- a/resources/views/web/templates/checkout-final.blade.php +++ b/resources/views/web/templates/checkout-final.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/checkout.blade.php b/resources/views/web/templates/checkout.blade.php index a1fb45d..64cea1c 100644 --- a/resources/views/web/templates/checkout.blade.php +++ b/resources/views/web/templates/checkout.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') @@ -103,7 +103,7 @@
      - {!! Form::open(['url' => route('card_checkout_final'), 'class' => 'row clearfix', 'id'=>'']) !!} + {!! Form::open(['url' => route(Util::getPostRoute().'card_checkout_final', Util::addRoute()), 'class' => 'row clearfix', 'id'=>'']) !!} diff --git a/resources/views/web/templates/datenschutz.blade.php b/resources/views/web/templates/datenschutz.blade.php index ff575ea..5d62e18 100644 --- a/resources/views/web/templates/datenschutz.blade.php +++ b/resources/views/web/templates/datenschutz.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content')
      diff --git a/resources/views/web/templates/erreichbarkeit.blade.php b/resources/views/web/templates/erreichbarkeit.blade.php index 7fd69de..34023c9 100644 --- a/resources/views/web/templates/erreichbarkeit.blade.php +++ b/resources/views/web/templates/erreichbarkeit.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/existenzgruendung.blade.php b/resources/views/web/templates/existenzgruendung.blade.php index b3cad8b..7a4c0ca 100644 --- a/resources/views/web/templates/existenzgruendung.blade.php +++ b/resources/views/web/templates/existenzgruendung.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/impressum.blade.php b/resources/views/web/templates/impressum.blade.php index a347325..02a52c0 100644 --- a/resources/views/web/templates/impressum.blade.php +++ b/resources/views/web/templates/impressum.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content')
      diff --git a/resources/views/web/templates/karrierechancen.blade.php b/resources/views/web/templates/karrierechancen.blade.php index f93c7e1..4042022 100644 --- a/resources/views/web/templates/karrierechancen.blade.php +++ b/resources/views/web/templates/karrierechancen.blade.php @@ -1,5 +1,5 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/kontakt.blade.php b/resources/views/web/templates/kontakt.blade.php index 903b2fd..bf58034 100644 --- a/resources/views/web/templates/kontakt.blade.php +++ b/resources/views/web/templates/kontakt.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/partner.blade.php b/resources/views/web/templates/partner.blade.php index 7b1fbf6..6ac7515 100644 --- a/resources/views/web/templates/partner.blade.php +++ b/resources/views/web/templates/partner.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/produkte-show.blade.php b/resources/views/web/templates/produkte-show.blade.php index 45ad93d..d63d41a 100644 --- a/resources/views/web/templates/produkte-show.blade.php +++ b/resources/views/web/templates/produkte-show.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') @@ -117,7 +117,7 @@

      - {!! Form::open(['url' => route('card_add_post', [$product->id]), 'class' => 'mb-0', 'id'=>'']) !!} + {!! Form::open(['url' => route(Util::getPostRoute().'card_add_post', Util::addRoute([$product->id])), 'class' => 'mb-0', 'id'=>'']) !!}

      diff --git a/resources/views/web/templates/produkte.blade.php b/resources/views/web/templates/produkte.blade.php index 56a9120..372e917 100644 --- a/resources/views/web/templates/produkte.blade.php +++ b/resources/views/web/templates/produkte.blade.php @@ -1,4 +1,6 @@ -@extends('web.layouts.layout') + +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') + @section('content') @@ -103,7 +105,7 @@
      - + In den Warenkorb diff --git a/resources/views/web/templates/ueber-uns.blade.php b/resources/views/web/templates/ueber-uns.blade.php index f89bf96..66ed4f9 100644 --- a/resources/views/web/templates/ueber-uns.blade.php +++ b/resources/views/web/templates/ueber-uns.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/vereinbarkeit.blade.php b/resources/views/web/templates/vereinbarkeit.blade.php index 4a5b734..5d008d1 100644 --- a/resources/views/web/templates/vereinbarkeit.blade.php +++ b/resources/views/web/templates/vereinbarkeit.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/templates/vorteile.blade.php b/resources/views/web/templates/vorteile.blade.php index b606bc0..2bbc025 100644 --- a/resources/views/web/templates/vorteile.blade.php +++ b/resources/views/web/templates/vorteile.blade.php @@ -1,4 +1,4 @@ -@extends('web.layouts.layout') +@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout') @section('content') diff --git a/resources/views/web/user/layouts/application.blade.php b/resources/views/web/user/layouts/application.blade.php new file mode 100644 index 0000000..c170267 --- /dev/null +++ b/resources/views/web/user/layouts/application.blade.php @@ -0,0 +1,79 @@ + + + + + mivita care + + + + + + + + + + + + + + + + + + + + + + + + + + + @yield('layout-content') + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/views/web/user/layouts/includes/footer.blade.php b/resources/views/web/user/layouts/includes/footer.blade.php new file mode 100644 index 0000000..7ed8711 --- /dev/null +++ b/resources/views/web/user/layouts/includes/footer.blade.php @@ -0,0 +1,62 @@ + +
      +
      + +
      + +
      + +

      + Du möchtest Kontakt aufnehmen? +

      + {!! $user_shop->info !!} +
      + +
      + +
      +
      + + + + + \ No newline at end of file diff --git a/resources/views/web/user/layouts/includes/header.blade.php b/resources/views/web/user/layouts/includes/header.blade.php new file mode 100644 index 0000000..3a66c6c --- /dev/null +++ b/resources/views/web/user/layouts/includes/header.blade.php @@ -0,0 +1,135 @@ + diff --git a/resources/views/web/user/layouts/layout.blade.php b/resources/views/web/user/layouts/layout.blade.php new file mode 100644 index 0000000..d3184d9 --- /dev/null +++ b/resources/views/web/user/layouts/layout.blade.php @@ -0,0 +1,23 @@ +@extends('web.user.layouts.application') + +@section('layout-content') + + @include('web.user.layouts.includes.header') + + +
      + + + + @yield('content') + + + + + @include('web.user.layouts.includes.footer') + + +
      + + +@endsection diff --git a/resources/views/web/user/start.blade.php b/resources/views/web/user/start.blade.php new file mode 100644 index 0000000..32dcf9d --- /dev/null +++ b/resources/views/web/user/start.blade.php @@ -0,0 +1,121 @@ +@extends('web.user.layouts.layout') + +@section('content') + + + + + + + + +
      +
      + + + +
      +
      + + @if($user_shop->isImage()) + + @else +

      {{ $user_shop->title }}

      + @endif + + + +
      +
      + @if($user_shop->isImage()) +

      {{ $user_shop->title }}

      + @endif + {!! $user_shop->copy !!} +
      +
      + + +
      +
      + + + + +
      +
      + + +
      +
      +
      +

      Aloe Vera

      +

      Mit höchstem Anspruch arbeiten wir gemeinsam mit der Aloe Vera Farm auf Mallorca + zusammen, die weltweite Qualität der Spitzenklasse garantiert.

      + + + Mehr + + + + lesen + JETZT + + + + + +
      +
      +
      +
      +

      Produkte

      +

      Hier findest Du einen Überblick über das komplette Premium-Produktsortiment von MIVITA. + Vom hochwertigen Aloe Saft bis zu wohltuender Kosmetik.

      + + + Mehr + + + + lesen + JETZT + + + + + +
      +
      +
      +
      +

      Vertriebspartner

      +

      Werde auch Du ein Vertriebspartner von MIVITA und baue Dir Dein eigenes Geschäft mit + Qualitätsprodukten auf. Wenn Du magst, kannst Du sofort starten ...

      + + + Mehr + + + + lesen + JETZT + + + + + +
      +
      + +
      + + +
      +
      + + +@endsection diff --git a/routes/_web.php b/routes/_web.php new file mode 100755 index 0000000..ee1fd16 --- /dev/null +++ b/routes/_web.php @@ -0,0 +1,312 @@ + '{subdomain}.mivita.local', 'middleware' => 'subdomain'], $RoutesOnlyForExamp); + + + + +/* ROUTING the SUBDOMAINS*/ +/* +Route::group(['domain' => '{subdomain}.mivita.local'], $RoutesOnlyForExamp); + +Route::group(['domain' => 'mivita.local'], $RoutesOnlyForExamp); + +*/ +/* + + + +*/ + + + +Route::get('/data_protected', 'HomeController@legalDataProtected')->name('data_protected'); +Route::get('/imprint', 'HomeController@legalImprint')->name('imprint'); + +Route::get('storage/images/{from}/{slug}', function($from = null, $slug = null) { + if ($from == 'shop'){ + $image = \App\Models\UserShop::where('filename', $slug)->first(); + $path = storage_path('app/public').'/images/shop'.'/'.$image->filename; + + } + if (file_exists($path)) { + return Response::file($path); + } +})->name('storage_images'); + + +Route::domain('mivita.local')->group(function () { + + Route::get('/', 'Web\SiteController@index')->name('/'); + Route::get('/{site}/{subsite?}/{product_slug?}', 'Web\SiteController@site')->name('site'); + Route::get('/card/add/{id}/{quantity?}/{product_slug?}', 'Web\CardController@addToCardGet')->name('card_add_get'); + Route::post('/card/add/{id}', 'Web\CardController@addToCardPost')->name('card_add_post'); + Route::get('/card/show', 'Web\CardController@showCard')->name('card_show'); + Route::get('/card/checkout', 'Web\CardController@checkoutCard')->name('card_checkout'); + Route::post('/card/checkout_final', 'Web\CardController@checkoutFinalCard')->name('card_checkout_final'); + Route::post('/card/update', 'Web\CardController@updateCard')->name('card_update'); + Route::get('/card/remove/{rowId}', 'Web\CardController@removeCard')->name('card_remove'); + Route::get('/card/delete', 'Web\CardController@deleteCard')->name('card_delete'); + + Route::get('product/image/{slug}', function($slug = null) + { + $image = \App\Models\ProductImage::where('slug', $slug)->first(); + $path = storage_path('app/public').'/images/product'.'/'.$image->product_id.'/'.$image->filename; + if (file_exists($path)) { + return Response::file($path); + } + })->name('product_image'); + +}); + + +Route::domain('mein.mivita.local')->group(function () { + + Auth::routes(); + Route::get('/logout', function(){ + Auth::logout(); + return Redirect::to('login'); + })->name('logout'); + + Route::get('locale/{locale}', function ($locale) { + \Session::put('locale', $locale); + if(Auth::check()){ + $user = Auth::user(); + $user->lang = $locale; + $user->save(); + } + return redirect()->back(); + })->name('locale'); + + + Route::post('/loading/modal', 'HomeController@loadingModal')->name('loading_modal'); + Route::get('/', 'HomeController@index')->name('home'); + Route::get('/user/update_email_confirm/{token}', 'UserUpdateEmailController@activateMail')->name('user_update_email_confirm'); + Route::post('/user/check/mail', 'HomeController@checkMail')->name('user_check_mail'); + + Route::get('/register/verify/{confirmationCode}', 'HomeController@verify')->name('register_verify'); + + Route::get('/status/register', 'HomeController@statusRegister')->name('status_register'); + Route::get('/status/verify', 'HomeController@statusVerify')->name('status_verify'); + Route::get('/status/error', 'HomeController@statusError')->name('status_error'); + Route::get('/status/not/found', 'HomeController@notFound')->name('not_found'); + + + Route::group(['middleware' => ['auth']], function() + { + Route::get('storage/{type?}/{file?}', function($type = null, $file = null) + { + if($type == 'xls'){ + $path = storage_path("app/export/"); + $filename = $file.'.xls'; + } + + if (file_exists($path.$filename)) { + return Response::download($path.$filename, $filename); + } + })->name('storage'); + + Route::get('/home', 'HomeController@show')->name('home'); + + + /* Route::get('/user/edit', 'UserController@userEdit')->name('user_edit'); + + */ + Route::get('/user/edit', 'UserDataController@userEdit')->name('user_edit'); + Route::post('/user/edit', 'UserDataController@userEditStore')->name('user_edit'); + Route::post('/user/data/store', 'UserDataController@userDataStore')->name('user_data_store'); + + + Route::get('/user/update_password', 'UserUpdatePasswordController@updatePassword')->name('user_update_password'); + Route::post('/user/update_password', 'UserUpdatePasswordController@updatePasswordStore')->name('user_update_password'); + + Route::get('/user/update_password_first', 'UserUpdatePasswordController@updatePasswordFirst')->name('user_update_password_first'); + Route::post('/user/update_password_first', 'UserUpdatePasswordController@updatePasswordFirstStore')->name('user_update_password_first'); + + Route::get('/user/update_email', 'UserUpdateEmailController@index')->name('user_update_email'); + Route::post('/user/update_email', 'UserUpdateEmailController@update')->name('user_update_email'); + + Route::get('/user/delete_account', 'UserDeleteController@deleteAccount')->name('user_delete_account'); + Route::post('/user/delete_account', 'UserDeleteController@deleteAccountAction')->name('user_delete_account'); + + Route::post('/user/data/accepted/form', 'UserDataController@userDataAcceptedForm')->name('user_data_accepted_form'); + + Route::get('/user/data/free', 'UserDataController@userDataFree')->name('user_data_free'); + Route::post('/user/data/free/form', 'UserDataController@userDataFreeForm')->name('user_data_free_form'); + + Route::get('/user/shop', 'UserShopController@index')->name('user_shop'); + Route::post('/user/shop/store', 'UserShopController@store')->name('user_shop_store'); + Route::post('/user/shop/register/form', 'UserShopController@userShopRegisterForm')->name('user_shop_register_form'); + Route::post('/user/shop/name/check', 'UserShopController@checkUserShopName')->name('user_shop_name_check'); + Route::post('/user/shop/upload/image', 'UserShopController@uploadImage')->name('user_shop_upload_image'); + Route::get('/user/shop/delete/image', 'UserShopController@deleteImage')->name('user_shop_delete_image'); + + }); + + Route::group(['middleware' => ['admin']], function() + { + //translate + Route::get('/admin/translate/all', 'TranslationController@index')->name('admin_translate_all'); + Route::get('/admin/translate/all/edit/{lang}/{from?}', 'TranslationController@edit')->name('admin_translate_all_edit'); + Route::post('/admin/translate/all/update/{lang}/{from?}', 'TranslationController@update')->name('admin_translate_all_update'); + + Route::get('/admin/translate/file', 'TranslationFileController@index')->name('admin_translate_file'); + Route::get('/admin/translation/file/{file}/{language?}/{langsource?}/{show?}', 'TranslationFileController@edit')->name('admin_translate_file_edit'); + Route::post('/admin/translation/file/{file}/{language?}/{langsource?}/{show?}', 'TranslationFileController@update')->name('admin_translate_file_update'); + + //products + Route::get('admin/product/show', 'ProductController@index')->name('admin_product_show'); + Route::post('admin/product/store', 'ProductController@store')->name('admin_product_store'); + Route::get('admin/product/edit/{id}', 'ProductController@edit')->name('admin_product_edit'); + Route::get('admin/product/delete/{id}', 'ProductController@delete')->name('admin_product_delete'); + //products images + Route::post('admin/product/upload/image', 'ProductController@uploadImage')->name('admin_product_upload_image'); + Route::get('admin/product/{image_id}/{product_id}', 'ProductController@deleteImage')->name('admin_product_delete_image'); + //products categories + Route::get('admin/product/categories', 'CategoryController@index')->name('admin_product_categories'); + Route::post('admin/product/category/store', 'CategoryController@store')->name('admin_product_category_store'); + Route::get('admin/product/category/delete/{id}', 'CategoryController@delete')->name('admin_product_category_delete'); + //products attributes + Route::get('admin/product/attributes', 'AttributeController@index')->name('admin_product_attributes'); + Route::post('admin/product/attribute/store', 'AttributeController@store')->name('admin_product_attribute_store'); + Route::get('admin/product/attribute/delete/{id}', 'AttributeController@delete')->name('admin_product_attribute_delete'); + + + //Route::get('/admin/products/import', 'ImportProductController@import')->name('admin_product_import'); + + //leads + Route::get('datatables/leads', 'DataTableController@getLeads')->name('datatables-leads'); + + Route::get('/admin/leads', 'LeadController@index')->name('admin_leads'); + Route::get('/admin/lead/edit/{id}', 'LeadController@edit')->name('admin_lead_edit'); + + Route::get('/admin/lead/change_mail/{id}', 'UserUpdateEmailController@adminChangeMail')->name('admin_lead_change_mail'); + Route::post('/admin/lead/change_mail/{id}', 'UserUpdateEmailController@adminUpdateMail')->name('admin_lead_change_mail'); + + Route::post('/admin/lead/store', 'LeadController@store')->name('admin_lead_store'); + + + + + + + }); + + //login pages for superadmin + Route::group(['middleware' => ['superadmin']], function() { + //leads + Route::get('/admin/users', 'AdminUserController@index')->name('admin_users'); + Route::get('/admin/user/edit/{user_id}', 'AdminUserController@edit')->name('admin_user_edit'); + Route::post('/admin/user/store', 'AdminUserController@store')->name('admin_user_store'); + Route::get('/admin/user/delete/{user_id}', 'AdminUserController@deleteUser')->name('admin_user_delete'); + + Route::get('data_table', 'DataTableController@datatable')->name('data_table'); + // Route::get('datatables/leads', 'DataTableController@getLeads')->name('datatables-leads'); + Route::get('data/table/users', 'DataTableController@getUsers')->name('data_table_users'); + + }); + + +}); + + +Route::domain('{subdomain}.mivita.local')->group(function () { + + Route::group(['middleware' => ['subdomain']], function() { + + + + + }); +}); + + + + +/* + +//Route::get('/', 'HomeController@index')->name('/'); + +/*Route::post('/register/data', 'HomeController@register')->name('register_data'); +Route::post('/user/check/mail', 'HomeController@checkMail')->name('user_check_mail'); + +Route::get('/register/verify/{confirmationCode}', 'HomeController@verify')->name('register_verify'); + +Route::get('/status/register', 'HomeController@statusRegister')->name('status_register'); +Route::get('/status/verify', 'HomeController@statusVerify')->name('status_verify'); +Route::get('/status/error', 'HomeController@statusError')->name('status_error'); + + +Route::get('/user/update_email_confirm/{token}', 'UpdateEmailController@activateMail')->name('user_update_email_confirm'); +*/ + + + + + +/*Route::get('storage/{what}/{path}/{id}/{file_name}', function($what = null, $path = null, $id = null, $file_name = null) +{ + $path = storage_path().'/app/'.$path.'/'.$id.'/images/'.$what.'/'.$file_name; + if (file_exists($path)) { + return Response::file($path); + } +}); + +Route::get('storage/{user_id}/{file_name}', function($user_id = null, $file_name = null) +{ + $path = storage_path().'/'.'app'.'/user/' . $user_id . '/verification/' . $file_name; + if (file_exists($path)) { + return Response::file($path); + } +}); +*/ + +/* +use App\Mail\MailResetPassword; + +Route::get('/send_test_email', function(){ + + try { + // Mail::to('kevin.adametz@me.com')->send(new MailResetPassword('asdasd', Auth::user())); + + Mail::raw('Sending emails with Mailgun and Laravel is easy!', function($message) { + $message->to('kevin.adametz@me.com', 'Kevin Adametz'); + $message->subject('testing Networktrips'); + }); + + + + } catch (\Exception $e) { + dd($e->getMessage()); + } + + $fail = Mail::failures(); + + if(!empty($fail)) throw new \Exception('Could not send message to '.$fail[0]); + + }); + +*/ \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index ec6b1f7..69fcfb3 100755 --- a/routes/web.php +++ b/routes/web.php @@ -23,38 +23,29 @@ Route::get('storage/images/{from}/{slug}', function($from = null, $slug = null) } })->name('storage_images'); +Route::get('product/image/{slug}', function($slug = null) +{ + $image = \App\Models\ProductImage::where('slug', $slug)->first(); + $path = storage_path('app/public').'/images/product'.'/'.$image->product_id.'/'.$image->filename; + if (file_exists($path)) { + return Response::file($path); + } +})->name('product_image'); Route::domain('mivita.local')->group(function () { Route::get('/', 'Web\SiteController@index')->name('/'); - - Route::get('product/image/{slug}', function($slug = null) - { - $image = \App\Models\ProductImage::where('slug', $slug)->first(); - $path = storage_path('app/public').'/images/product'.'/'.$image->product_id.'/'.$image->filename; - if (file_exists($path)) { - return Response::file($path); - } - })->name('product_image'); - - Route::get('/card/add/{id}/{quantity?}/{product_slug?}', 'Web\CardController@addToCardGet')->name('card_add_get'); - - Route::post('/card/add/{id}', 'Web\CardController@addToCardPost')->name('card_add_post'); - - Route::get('/card/show', 'Web\CardController@showCard')->name('card_show'); - - Route::get('/card/checkout', 'Web\CardController@checkoutCard')->name('card_checkout'); - Route::post('/card/checkout_final', 'Web\CardController@checkoutFinalCard')->name('card_checkout_final'); - - Route::post('/card/update', 'Web\CardController@updateCard')->name('card_update'); - - Route::get('/card/remove/{rowId}', 'Web\CardController@removeCard')->name('card_remove'); - - Route::get('/card/delete', 'Web\CardController@deleteCard')->name('card_delete'); - - Route::get('/{site}/{subsite?}/{product_slug?}', 'Web\SiteController@site')->name('site'); + Route::get('/card/add/{id}/{quantity?}/{product_slug?}', 'Web\CardController@addToCardGet')->name('base.card_add_get'); + Route::post('/card/add/{id}', 'Web\CardController@addToCardPost')->name('base.card_add_post'); + Route::get('/card/show', 'Web\CardController@showCard')->name('base.card_show'); + Route::get('/card/checkout', 'Web\CardController@checkoutCard')->name('base.card_checkout'); + Route::post('/card/checkout_final', 'Web\CardController@checkoutFinalCard')->name('base.card_checkout_final'); + Route::post('/card/update', 'Web\CardController@updateCard')->name('base.card_update'); + Route::get('/card/remove/{rowId}', 'Web\CardController@removeCard')->name('base.card_remove'); + Route::get('/card/delete', 'Web\CardController@deleteCard')->name('base.card_delete'); + Route::get('/{site}/{subsite?}/{product_slug?}', 'Web\SiteController@site')->name('base.site'); }); @@ -185,11 +176,6 @@ Route::domain('mein.mivita.local')->group(function () { Route::post('/admin/lead/store', 'LeadController@store')->name('admin_lead_store'); - - - - - }); //login pages for superadmin @@ -200,13 +186,14 @@ Route::domain('mein.mivita.local')->group(function () { Route::post('/admin/user/store', 'AdminUserController@store')->name('admin_user_store'); Route::get('/admin/user/delete/{user_id}', 'AdminUserController@deleteUser')->name('admin_user_delete'); + Route::get('/admin/shippings', 'ShippingController@index')->name('admin_shippings'); + Route::get('/admin/shipping/edit/{shipping_id}', 'ShippingController@edit')->name('admin_shipping_edit'); + Route::post('/admin/shipping/store', 'ShippingController@store')->name('admin_shipping_store'); + Route::get('/admin/shipping/delete/{shipping_id}', 'ShippingController@deleteUser')->name('admin_shipping_delete'); + Route::get('data_table', 'DataTableController@datatable')->name('data_table'); // Route::get('datatables/leads', 'DataTableController@getLeads')->name('datatables-leads'); Route::get('data/table/users', 'DataTableController@getUsers')->name('data_table_users'); - - - - }); @@ -215,12 +202,22 @@ Route::domain('mein.mivita.local')->group(function () { /* ROUTING the SUBDOMAINS*/ -Route::domain('{sub}.mivita.local')->group(function () { +Route::domain('{subdomain}.mivita.local')->group(function () { + Route::group(['middleware' => ['subdomain']], function() { - Route::get('/', function ($sub) { - die($sub); - }); + Route::get('/', 'Web\SiteController@index')->name(''); + Route::get('/card/add/{id}/{quantity?}/{product_slug?}', 'Web\CardController@addToCardGet')->name('user.card_add_get'); + Route::post('/card/add/{id}', 'Web\CardController@addToCardPost')->name('user.card_add_post'); + Route::get('/card/show', 'Web\CardController@showCard')->name('user.card_show'); + Route::get('/card/checkout', 'Web\CardController@checkoutCard')->name('user.card_checkout'); + Route::post('/card/checkout_final', 'Web\CardController@checkoutFinalCard')->name('user.card_checkout_final'); + Route::post('/card/update', 'Web\CardController@updateCard')->name('user.card_update'); + Route::get('/card/remove/{rowId}', 'Web\CardController@removeCard')->name('user.card_remove'); + Route::get('/card/delete', 'Web\CardController@deleteCard')->name('user.card_delete'); + Route::get('/{site}/{subsite?}/{product_slug?}', 'Web\SiteController@site')->name('user.site'); + + }); });