sarga/packages/Webkul/CMS/src/Http/Controllers/Admin/PageController.php

189 lines
5.0 KiB
PHP

<?php
namespace Webkul\CMS\Http\Controllers\Admin;
use Webkul\CMS\Http\Controllers\Controller;
use Webkul\CMS\Repositories\CmsRepository;
/**
* CMS controller
*
* @author Jitendra Singh <jitendra@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class PageController extends Controller
{
/**
* To hold the request variables from route file
*
* @var array
*/
protected $_config;
/**
* To hold the CMSRepository instance
*
* @var \Webkul\CMS\Repositories\CmsRepository
*/
protected $cmsRepository;
/**
* Create a new controller instance.
*
* @param \Webkul\CMS\Repositories\CmsRepository $cmsRepository
* @return void
*/
public function __construct(CmsRepository $cmsRepository)
{
$this->middleware('admin');
$this->cmsRepository = $cmsRepository;
$this->_config = request('_config');
}
/**
* Loads the index page showing the static pages resources
*
* @return \Illuminate\View\View
*/
public function index()
{
return view($this->_config['view']);
}
/**
* To create a new CMS page
*
* @return \Illuminate\View\View
*/
public function create()
{
return view($this->_config['view']);
}
/**
* To store a new CMS page in storage
*
* @return \Illuminate\Http\Response
*/
public function store()
{
$data = request()->all();
$this->validate(request(), [
'url_key' => ['required', 'unique:cms_page_translations,url_key', new \Webkul\Core\Contracts\Validations\Slug],
'page_title' => 'required',
'channels' => 'required',
'html_content' => 'required',
]);
$page = $this->cmsRepository->create(request()->all());
session()->flash('success', trans('admin::app.response.create-success', ['name' => 'page']));
return redirect()->route($this->_config['redirect']);
}
/**
* To edit a previously created CMS page
*
* @param int $id
* @return \Illuminate\View\View
*/
public function edit($id)
{
$page = $this->cmsRepository->findOrFail($id);
return view($this->_config['view'], compact('page'));
}
/**
* To update the previously created CMS page in storage
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update($id)
{
$locale = request()->get('locale') ?: app()->getLocale();
$this->validate(request(), [
$locale . '.url_key' => ['required', new \Webkul\Core\Contracts\Validations\Slug, function ($attribute, $value, $fail) use ($id) {
if (! $this->cmsRepository->isUrlKeyUnique($id, $value)) {
$fail(trans('admin::app.response.already-taken', ['name' => 'Page']));
}
}],
$locale . '.page_title' => 'required',
$locale . '.html_content' => 'required',
'channels' => 'required',
]);
$this->cmsRepository->update(request()->all(), $id);
session()->flash('success', trans('admin::app.response.update-success', ['name' => 'Page']));
return redirect()->route($this->_config['redirect']);
}
/**
* To delete the previously create CMS page
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function delete($id)
{
$page = $this->cmsRepository->findOrFail($id);
if ($page->delete()) {
session()->flash('success', trans('admin::app.cms.pages.delete-success'));
return response()->json(['message' => true], 200);
} else {
session()->flash('success', trans('admin::app.cms.pages.delete-failure'));
return response()->json(['message' => false], 200);
}
}
/**
* To mass delete the CMS resource from storage
*
* @return \Illuminate\Http\Response
*/
public function massDelete()
{
$data = request()->all();
if ($data['indexes']) {
$pageIDs = explode(',', $data['indexes']);
$count = 0;
foreach ($pageIDs as $pageId) {
$page = $this->cmsRepository->find($pageId);
if ($page) {
$page->delete();
$count++;
}
}
if (count($pageIDs) == $count) {
session()->flash('success', trans('admin::app.datagrid.mass-ops.delete-success', [
'resource' => 'CMS Pages',
]));
} else {
session()->flash('success', trans('admin::app.datagrid.mass-ops.partial-action', [
'resource' => 'CMS Pages',
]));
}
} else {
session()->flash('warning', trans('admin::app.datagrid.mass-ops.no-resource'));
}
return redirect()->route('admin.cms.index');
}
}