user shop sites

This commit is contained in:
Kevin Adametz 2019-02-07 17:25:43 +01:00
parent 22a2b4710a
commit dc857e88d5
37 changed files with 2044 additions and 869 deletions

View file

@ -4,6 +4,7 @@
namespace App\Http\Controllers;
use App\Http\Controllers\Api\KasController;
use App\Models\UserShop;
use App\Models\UserShopOnSite;
use App\Repositories\UserRepository;
use Auth;
use Input;
@ -25,6 +26,21 @@ class UserShopController extends Controller
public function index()
{
$user = Auth::user();
if ($user->shop && !$user->shop->set_defaults) {
if ($user->account) {
$user->shop->title = $user->account->first_name . " " . $user->account->last_name;
}
if ($user->account) {
$user->shop->contact = $this->generate_contact($user);
} else {
$user->shop->contact = "Deine Straße/Nr • Dein PLZ Ort\nFestnetz: Deine Festnetz-Nummer\nMobil: Deine Mobil-Nummer\nDeine E-Mail-Adresse";
}
$user->shop->accessibility = "Mo-Fr: 9.00 - 19.00 Uhr\nSa-So: 11.00 - 18.00 Uhr";
}
$data = [
'user' => $user,
];
@ -37,24 +53,46 @@ class UserShopController extends Controller
$user = Auth::user();
$data = Input::all();
if(!$user->shop){
if (!$user->shop) {
abort(404);
}
$user->shop->title = $data['title'];;
$user->shop->copy = $data['copy'];
$user->shop->info = $data['info'];
$user->shop->title = $data['title'];
$user->shop->contact = trim(preg_replace('/\s*\n+/',"\n", $data['contact']));
$user->shop->accessibility = trim(preg_replace('/\s*\n+/',"\n", $data['accessibility']));
$user->shop->about = trim(preg_replace('/\s+/', ' ',$data['about']));
$user->shop->active = isset($data['active']) ? true : false;
$user->shop->set_defaults = true;
$user->shop->save();
\Session()->flash('alert-save', true);
$data = [
'user' => $user,
];
return view('user.shop', $data);
return redirect(route('user_shop'));
}
private function generate_contact($user)
{
$ret = "";
$sep = "\n";
$ret = $user->account->street != "" ? $user->account->street : "Deine Straße/Nr";
$ret .= "";
$ret.= $user->account->postal_code != "" ? $user->account->postal_code." " : "Dein PLZ ";
$ret.= $user->account->city != "" ? $user->account->city : "Dein Ort";
$ret.= $sep;
$pre = $user->account->pre_phone_id != "" ? $user->account->pre_phone->phone." " : "";
$ret.= "Festnetz: ".($user->account->phone != "" ? $pre.$user->account->phone : "Deine Festnetz-Nummer");
$ret.= $sep;
$pre = $user->account->pre_mobil_id != "" ? $user->account->pre_mobil->phone." " : "";
$ret.= "Mobil: ".($user->account->mobil != "" ? $pre.$user->account->mobil : "Deine Mobil-Nummer");
$ret.= $sep;
$ret.= $user->email;
return $ret;
}
// Upload FILE -----------------------------------------------------------------------------------------------------------------------
@ -141,6 +179,86 @@ class UserShopController extends Controller
}
public function uploadOnSiteImage(){
$user = Auth::user();
$user_shop_id = Input::get('user_shop_id');
if(!$user->shop || $user->shop->id != $user_shop_id){
abort(404);
}
try {
$image = \App\Services\Slim::getImages('images')[0];
if ( isset($image['output']['data']) )
{
// Base64 of the image
$data = $image['output']['data'];
$file_ex = array( 'image/jpeg' => 'jpg', 'image/png' => 'png');
if (!isset($file_ex[$image['output']['type']])) {
\Session()->flash('alert-danger', 'File is not jpg or png!');
return redirect(route('user_shop'));
}
$ext = $file_ex[$image['output']['type']];
// Original file name
$name = $image['output']['name'];
$name = \App\Services\Slim::sanitizeFileName($name);
$name = uniqid() . '_' . $name;
$data = \Storage::disk('public')->put(
'images/user_shop/'.$user->shop->id.'/'.$name,
$data
);
UserShopOnSite::create([
'user_shop_id' => $user->shop->id,
'filename' => $name,
'original_name' => $image['output']['name'],
'ext' => $ext,
'mine' => $image['output']['type'],
'size' => $image['input']['size']
]);
\Session()->flash('alert-success', "Datei hochgeladen");
return redirect(route('user_shop'));
}
\Session()->flash('alert-danger', "Datei leer");
return redirect(route('user_shop'));
}
catch (Exception $e) {
\Session()->flash('alert-danger', "Fehler".$e);
return redirect(route('user_shop'));
}
}
public function deleteOnSiteImage($image_id, $user_shop_id){
$user = Auth::user();
if(!$user->shop || $user->shop->id != $user_shop_id){
abort(404);
}
$image = UserShopOnSite::findOrFail($image_id);
if($image->user_shop_id == $user_shop_id){
$file = 'images/user_shop/'.$user_shop_id.'/'.$image->filename;
\Storage::disk('public')->delete($file);
$image->delete();
\Session()->flash('alert-success', "Datei gelöscht");
return redirect(route('user_shop'));
}
\Session()->flash('alert-danger', "Datei nicht gefunden");
return redirect(route('user_shop'));
}

View file

@ -0,0 +1,106 @@
<?php
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Mail\MailContact;
use GuzzleHttp\Client;
use Input;
use Illuminate\Support\Facades\Mail;
use Util;
use Validator;
class ContactController extends Controller
{
private $GOOGLE_ReCAPTCHA_KEY = "6LeeZosUAAAAAG907fMMqO4BFgsiR4ANDodd8FlU";
private $GOOGLE_ReCAPTCHA_SECRET = "6LeeZosUAAAAADIy2fyR4RG3EuM-Zdz7Pa2Qmb1J";
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
}
public function create()
{
$data = [
'GOOGLE_ReCAPTCHA_KEY' => $this->GOOGLE_ReCAPTCHA_KEY,
'user_shop' => Util::getUserShop(),
];
return view('web.templates.kontakt', $data);
}
public function store()
{
$user_shop = Util::getUserShop();
$rules = array(
'first_name'=>'required',
'last_name'=>'required',
'email'=>'required|email',
'message'=>'required',
'g-recaptcha-response'=>'required|recaptcha',
'accepted_data_protection' => 'required',
);
Validator::extend('recaptcha', function($attribute, $value, $parameters, $validator) {
return $this->reCaptcha_validate($attribute, $value, $parameters, $validator);
});
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return back()->withErrors($validator)->withErrors($validator)->withInput(Input::all());
}else{
$contact = [];
$contact['first_name'] = Input::get('first_name');
$contact['last_name'] = Input::get('last_name');
$contact['email'] = Input::get('email');
$contact['phone'] = Input::get('phone');
$contact['subject'] = Input::get('subject');
$contact['message'] = Input::get('message');
if($user_shop){
Mail::to($contact['email'])->bcc([$user_shop->user->email, 'k.adametz@kagado.de'])->send(new MailContact($contact));
}else{
Mail::to($contact['email'])->bcc('k.adametz@kagado.de')->send(new MailContact($contact));
}
$data = [
'user_shop' => Util::getUserShop(),
];
return view('web.templates.contact-final', $data);
}
}
private function reCaptcha_validate($attribute, $value, $parameters, $validator)
{
$client = new Client();
$response = $client->post(
'https://www.google.com/recaptcha/api/siteverify',
['form_params' =>
[
'secret' => $this->GOOGLE_ReCAPTCHA_SECRET,
'response' => $value
]
]
);
$body = json_decode((string)$response->getBody());
return $body->success;
}
}

View file

@ -23,8 +23,12 @@ class SiteController extends Controller
public function index()
{
$products = ['aloe-vera-gel-99', 'aloe-vera-saft-500-ml', 'aloe-vera-lippenbalsam'];
$set_products = ['aloe-vera-cleaner-set', 'aloe-vera-koerper-set', 'aloe-vera-repair-set'];
$data = [
'user_shop' => Util::getUserShop()
'products' => Product::whereIn('slug', $products)->get(),
'set_products' => Product::whereIn('slug', $set_products)->get(),
'user_shop' => Util::getUserShop(),
];
return view('web.index', $data);
}
@ -32,6 +36,8 @@ class SiteController extends Controller
public function site($site, $subsite = false, $product_slug = false)
{
$subsite = trim($subsite, '/');
$product_slug = trim($product_slug, '/');
if($product_slug){
$category = Category::where('slug', $subsite)->where('active', true)->first();

View file

@ -19,6 +19,7 @@ class Kernel extends HttpKernel
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
# \App\Http\Middleware\RemoveExcessWhitespaceMiddleware::class,
];
/**

View file

@ -0,0 +1,29 @@
<?php
namespace App\Http\Middleware;
use Closure;
class RemoveExcessWhitespaceMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);
$output = $response->getOriginalContent();
$filters = array(
'/<!--([^\[|(<!)].*)/' => '', // Remove HTML Comments (breaks with HTML5 Boilerplate)
'/(?<!\S)\/\/\s*[^\r\n]*/' => '', // Remove comments in the form /* */
'/\s{2,}/' => ' ', // Shorten multiple white spaces
'/(\r?\n)/' => '', // Collapse new lines
'/(\>)\s*(\<)/m' => '$1$2', // Trim Final Whitespace from between html tags
);
$output = preg_replace(array_keys($filters), array_values($filters), $output);
$response->setContent($output);
return $response;
}
}

50
app/Mail/MailContact.php Normal file
View file

@ -0,0 +1,50 @@
<?php
namespace App\Mail;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use Util;
class MailContact extends Mailable
{
use Queueable, SerializesModels;
public $user_shop;
public $subject;
public $data;
public function __construct($data)
{
$this->data = $data;
$this->user_shop = Util::getUserShop();
$this->subject = __('Anfrage von mivita.care');
if($this->user_shop){
$this->subject = __('Anfrage von '.$this->user_shop->slug.'.mivita.care');
}
}
public function build()
{
$salutation = __('Dear customer').",";
$copy1line = __('Deine Anfrage von mivita.care');
if($this->user_shop){
$copy1line = __('Deine Anfrage von '.$this->user_shop->slug.'.mivita.care');
}
return $this->view('emails.contact')->with([
'salutation' => $salutation,
'copy1line' => $copy1line,
'data' => $this->data,
'copy3line' => __('For further questions we are happy to help you.'),
'greetings' => __('Best regards'),
'sender' => __('your mivita.care team'),
]);
}
}

View file

@ -57,7 +57,6 @@ class ProductImage extends Model
];
}
public function product()
{
return $this->belongsTo('App\Models\Product', 'product_id');

View file

@ -14,11 +14,7 @@ class UserShop extends Model
protected $is_online = NULL;
protected $casts = [
'trans_title' => 'array',
'trans_copy' => 'array',
'trans_info' => 'array',
'featured' => 'array',
];
protected $fillable = [
@ -42,6 +38,10 @@ class UserShop extends Model
return $this->belongsTo('App\User', 'user_id');
}
public function on_sites(){
return $this->hasMany('App\Models\UserShopOnSite', 'user_shop_id', 'id');
}
public function getActiveDateFormat(){
if(!$this->attributes['active_date']){ return ""; }
return Carbon::parse($this->attributes['active_date'])->format(\Util::formatDateTimeDB());
@ -52,7 +52,6 @@ class UserShop extends Model
return Carbon::parse($this->attributes['active_date'])->format("d.m.Y");
}
public function getSubdomain()
{
return config('app.protocol').$this->attributes['slug'].".".config('app.domain');
@ -82,6 +81,28 @@ class UserShop extends Model
}
public function getSubdomainAvailable ()
{
$rCurlHandle = curl_init ( $this->attributes['slug'].".mivita.care" );
curl_setopt ( $rCurlHandle, CURLOPT_CONNECTTIMEOUT, 10 );
curl_setopt ( $rCurlHandle, CURLOPT_HEADER, TRUE );
curl_setopt ( $rCurlHandle, CURLOPT_NOBODY, TRUE );
curl_setopt ( $rCurlHandle, CURLOPT_RETURNTRANSFER, TRUE );
$strResponse = curl_exec ( $rCurlHandle );
curl_close ( $rCurlHandle );
if ( !$strResponse )
{
return FALSE;
}
return TRUE;
}
public function isImage(){
if(empty($this->attributes['filename']) || @$this->attributes['filename'] == null || @$this->attributes['filename'] == ""){

View file

@ -0,0 +1,65 @@
<?php
namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;
class UserShopOnSite extends Model
{
use Sluggable;
protected $table = 'user_shop_on_sites';
protected $fillable = [
'user_shop_id', 'filename', 'original_name', 'ext', 'mine', 'size'
];
public function sluggable()
{
return [
'slug' => [
'source' => 'original_name'
]
];
}
public function product()
{
return $this->belongsTo('App\Models\UserShop', 'user_shop_id');
}
public function formatBytes($precision = 2)
{
$size = $this->size;
if ($size > 0) {
$size = (int) $size;
$base = log($size) / log(1024);
$suffixes = array(' bytes', ' KB', ' MB', ' GB', ' TB');
return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)];
} else {
return $size;
}
}
public function isImage(){
if(empty($this->attributes['filename']) || @$this->attributes['filename'] == null || @$this->attributes['filename'] == ""){
return false;
}
if(!\Storage::disk('public')->has('images/shop/'.$this->filename)){
return false;
}
return true;
}
public function getImage(){
if($this->isImage()){
$link = 'images/shop/'.$this->filename;
return '/storage/'.$link.'?=lm='.\Storage::disk('public')->lastModified($link);
}
return false;
}
}

View file

@ -38,10 +38,10 @@ class HTMLHelper
}
public static function getRoleLabel($role_id = 0){
return '<span class="badge badge-pill '.self::getLable($role_id).'">'.self::$roles[$role_id].'</span>';
return '<span class="badge badge-pill '.self::getLabel($role_id).'">'.self::$roles[$role_id].'</span>';
}
public static function getLable($id){
public static function getLabel($id){
switch ($id) {
case 0:
return 'badge-default';

View file

@ -86,7 +86,7 @@ class User extends Authenticatable
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'token',
'email', 'password', 'token',
];
/**