webworld888/app/Http/Controllers/User/Settings/TermsController.php
2021-10-26 19:14:12 +09:00

170 lines
4.9 KiB
PHP

<?php
/**
* TermsController.php
*
* PHP version 7
*
* @category Controllers
* @package App\Http\Controllers\User\Settings
* @author XE Developers <developers@xpressengine.com>
* @copyright 2020 Copyright XEHub Corp. <https://www.xehub.io>
* @license http://www.gnu.org/licenses/lgpl-3.0-standalone.html LGPL
* @link https://xpressengine.io
*/
namespace App\Http\Controllers\User\Settings;
use App\Http\Controllers\Controller;
use Symfony\Component\HttpKernel\Exception\HttpException;
use XeDB;
use XeLang;
use XePresenter;
use Xpressengine\Http\Request;
/**
* Class TermsController
*
* @category Controllers
* @package App\Http\Controllers\User\Settings
* @author XE Developers <developers@xpressengine.com>
* @copyright 2020 Copyright XEHub Corp. <https://www.xehub.io>
* @license http://www.gnu.org/licenses/lgpl-3.0-standalone.html LGPL
* @link https://xpressengine.io
*/
class TermsController extends Controller
{
/**
* Show list for registered terms.
*
* @return \Xpressengine\Presenter\Presentable
*/
public function index()
{
$terms = app('xe.terms')->all();
return XePresenter::make('user.settings.setting.terms.index', compact('terms'));
}
/**
* Show the term registration form.
*
* @return \Xpressengine\Presenter\Presentable
*/
public function create()
{
return XePresenter::make('user.settings.setting.terms.create', [
'locales' => XeLang::getLocales()
]);
}
/**
* Create a term.
*
* @param Request $request request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
{
$this->validate($request, ['title' => 'langRequired']);
$last = app('xe.terms')->lastOrder();
app('xe.terms')->create([
'title' => $request->get('title'),
'description' => $request->get('description'),
'content' => $request->get('content'),
'is_require' => $request->get('is_require') === 'require',
'order' => $last ? $last + 1 : 0
]);
return redirect()->route('settings.user.setting.terms.index')->with('alert', [
'type' => 'success', 'message' => xe_trans('xe::saved')
]);
}
/**
* Show edit form for the term
*
* @param string $id identifier
* @return \Xpressengine\Presenter\Presentable
*/
public function edit($id)
{
$term = app('xe.terms')->find($id);
return XePresenter::make('user.settings.setting.terms.edit', [
'term' => $term
]);
}
/**
* Update a term.
*
* @param Request $request request
* @param string $id identifier
* @return \Illuminate\Http\RedirectResponse
*/
public function update(Request $request, $id)
{
if (!$term = app('xe.terms')->find($id)) {
throw new HttpException(422, "undefined [#$id]");
}
$this->validate($request, ['title' => 'langRequired']);
app('xe.terms')->update($term, [
'title' => $request->get('title'),
'description' => $request->get('description'),
'content' => $request->get('content'),
'is_require' => $request->get('is_require') === 'require'
]);
return redirect()->route('settings.user.setting.terms.index')->with('alert', [
'type' => 'success', 'message' => xe_trans('xe::saved')
]);
}
/**
* Destroy terms.
*
* @param Request $request request
* @return \Illuminate\Http\RedirectResponse
*/
public function destroies(Request $request)
{
XeDB::transaction(function () use ($request) {
foreach ($request->get('id', []) as $id) {
app('xe.terms')->delete(app('xe.terms')->find($id));
}
});
return redirect()->route('settings.user.setting.terms.index')->with('alert', [
'type' => 'success', 'message' => xe_trans('xe::deleted')
]);
}
/**
* Set enables terms.
*
* @param Request $request request
* @return \Illuminate\Http\RedirectResponse
*/
public function enable(Request $request)
{
XeDB::transaction(function () use ($request) {
$enables = $request->get('enable') ?: [];
$terms = app('xe.terms')->all();
$terms = $terms->partition(function ($term) use ($enables) {
return in_array($term->id, $enables);
});
$enables = array_merge(array_flip($enables), $terms->first()->keyBy('id')->all());
app('xe.terms')->enable(array_values($enables));
app('xe.terms')->disable($terms->last());
});
return redirect()->route('settings.user.setting.terms.index')->with('alert', [
'type' => 'success', 'message' => xe_trans('xe::saved')
]);
}
}