Reworked site setup, added SingleOrFail()
This commit is contained in:
78
app/Http/Controllers/AdminController.php
Normal file
78
app/Http/Controllers/AdminController.php
Normal file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
use App\Models\{Service,SiteDetails};
|
||||
|
||||
class AdminController extends Controller
|
||||
{
|
||||
public function service(Service $o)
|
||||
{
|
||||
return View('a.service',['o'=>$o]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Site setup
|
||||
*
|
||||
* @note This method is protected by the routes
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function setup(Request $request)
|
||||
{
|
||||
if ($request->post()) {
|
||||
$validated = $request->validate([
|
||||
'site_name' => 'required|string|max:255',
|
||||
'site_email' => 'required|string|email|max:255',
|
||||
'site_address1' => 'required|string|max:255',
|
||||
'site_address2' => 'nullable|string|max:255',
|
||||
'site_city' => 'required|string|max:64',
|
||||
'site_state' => 'required|string|max:32',
|
||||
'site_postcode' => 'required|string|max:8',
|
||||
'site_description' => 'nullable|string|min:5',
|
||||
'site_phone' => 'nullable|regex:/[0-9 ]+/|min:6|max:12',
|
||||
'site_fax' => 'nullable|regex:/[0-9 ]+/|min:6|max:12',
|
||||
'site_tax' => 'required|regex:/[0-9 ]+/|size:14',
|
||||
'social' => 'nullable|array',
|
||||
'top_menu' => 'nullable|array',
|
||||
'site_logo' => 'nullable|image',
|
||||
]);
|
||||
|
||||
$so = config('SITE_SETUP');
|
||||
|
||||
// @todo - not currently rendered in the home page
|
||||
$validated['social'] = [];
|
||||
$validated['top_menu'] = [];
|
||||
|
||||
// Handle the images
|
||||
foreach(['site_logo','email_logo'] as $key)
|
||||
if (array_key_exists($key,$validated))
|
||||
$validated[$key] = ($x=$validated[$key])->storeAs('site/'.config('SITE_SETUP')->site_id,$x->getClientOriginalName(),'public');
|
||||
|
||||
foreach ($so->details as $oo)
|
||||
if (array_key_exists($oo->key,$validated)) {
|
||||
$oo->value = Arr::get($validated,$oo->key);
|
||||
$oo->save();
|
||||
|
||||
unset($validated[$oo->key]);
|
||||
}
|
||||
|
||||
// Left over values to be created.
|
||||
foreach ($validated as $k=>$v) {
|
||||
$oo = new SiteDetails;
|
||||
$oo->key = $k;
|
||||
$oo->value = $v ?: '';
|
||||
|
||||
$so->details()->save($oo);
|
||||
}
|
||||
|
||||
return redirect()->back()
|
||||
->with('success','Settings saved');
|
||||
}
|
||||
|
||||
return view('a.setup');
|
||||
}
|
||||
}
|
@@ -1,82 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
use App\Mail\{OrderRequestApprove,OrderRequestReject};
|
||||
use App\Models\{Service,SiteDetails};
|
||||
|
||||
class AdminHomeController extends Controller
|
||||
{
|
||||
public function service(Service $o)
|
||||
{
|
||||
return View('a.service',['o'=>$o]);
|
||||
}
|
||||
|
||||
public function setup()
|
||||
{
|
||||
return view('a.setup');
|
||||
}
|
||||
|
||||
public function setup_update(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'site_name' => 'required|string|max:255',
|
||||
'site_email' => 'required|string|email|max:255',
|
||||
'site_address1' => 'required|string|max:255',
|
||||
'site_address2' => 'nullable|string|max:255',
|
||||
'site_city' => 'required|string|max:64',
|
||||
'site_state' => 'required|string|max:32',
|
||||
'site_postcode' => 'required|string|max:8',
|
||||
'site_phone' => 'nullable|regex:/[0-9 ]+/|min:6|max:12',
|
||||
'site_fax' => 'nullable|regex:/[0-9 ]+/|min:6|max:12',
|
||||
]);
|
||||
|
||||
// If we are more input that sample data, reject the update.
|
||||
if (config('SITE_SETUP')->allowed_keys(array_keys($request->except('_token'))))
|
||||
return redirect()->back()
|
||||
->withInput()
|
||||
->withErrors('Invalid configuration - values not expected.');
|
||||
|
||||
foreach ($request->except('_token') as $key => $value)
|
||||
{
|
||||
if (! $value) {
|
||||
SiteDetails::where('site_id',config('SITE_SETUP')->id)->where('key',$key)->delete();
|
||||
|
||||
} else {
|
||||
try {
|
||||
if ($key == 'site_logo' AND $value instanceof UploadedFile)
|
||||
{
|
||||
$path = $value->storeAs('site/'.config('SITE_SETUP')->id,$value->getClientOriginalName(),'public');
|
||||
|
||||
SiteDetails::updateOrCreate([
|
||||
'site_id'=>config('SITE_SETUP')->id,
|
||||
'key'=>$key,
|
||||
],[
|
||||
'value'=>$path,
|
||||
]);
|
||||
|
||||
} else {
|
||||
// Update or create our config record.
|
||||
SiteDetails::updateOrCreate([
|
||||
'site_id'=>config('SITE_SETUP')->id,
|
||||
'key'=>$key,
|
||||
],[
|
||||
'value'=>$value,
|
||||
]);
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
Log::debug($e->getMessage(),['k'=>$key,'v'=>$value]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return redirect()->back()
|
||||
->with('success','Setup Updated!');;
|
||||
}
|
||||
}
|
@@ -26,19 +26,26 @@ class SetSite
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
// @todo Figure out how to know if this is an API call - and deny it if it's not in the database.
|
||||
$so = new Site;
|
||||
|
||||
if ($so->getTable() AND Schema::hasTable($so->getTable()))
|
||||
$so = Site::where('url',$request->root())->first();
|
||||
$so = Site::where('url',$request->root())->single();
|
||||
|
||||
if ($so && ! $so->active)
|
||||
abort(404);
|
||||
|
||||
// If we dont exist, we'll return a fake model.
|
||||
if ((! $so) || (! $so->exists))
|
||||
$so = (new Site)->sample();
|
||||
if (! $so) {
|
||||
if ($request->ajax())
|
||||
abort(404);
|
||||
|
||||
$so = (new Site);
|
||||
}
|
||||
|
||||
// Set who we are in SETUP.
|
||||
Config::set('SITE_SETUP',$so);
|
||||
View::share('so',$so);
|
||||
if (! $request->ajax())
|
||||
View::share('so',$so);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
|
Reference in New Issue
Block a user