| Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/ |
| Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/ThemeRuleController.php |
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Models\Backend\ThemeRule;
use App\Models\Backend\ThemeSetting;
use App\Services\ThemeService;
use Illuminate\Http\Request;
class ThemeRuleController extends Controller
{
public function index(Request $request)
{
$search = $request->get('search');
$rules = ThemeRule::when($search, function ($q) use ($search) {
$q->where(function ($sub) use ($search) {
$sub->where('rule_name', 'like', "%{$search}%")
->orWhere('rule_description', 'like', "%{$search}%");
});
})
->orderBy('created_at', 'desc')
->paginate(10)
->onEachSide(1)
->withQueryString();
return view('backend.module.theme.theme-rule.index', [
'rules' => $rules,
'search' => $search,
]);
}
public function show($id)
{
$rule = ThemeRule::findOrFail($id);
return view('backend.module.theme.theme-rule.show', [
'rule' => $rule,
]);
}
public function create()
{
return view('backend.module.theme.theme-rule.form', [
'rule' => null,
]);
}
public function store(Request $request)
{
$request->validate([
'rule_name' => 'required|string|max:250',
'rule_description' => 'nullable|string|max:500',
'rule_content' => 'required|string',
'rule_status' => 'nullable|boolean',
]);
$paramNames = $request->input('param_name', []);
$paramDefaults = $request->input('param_default', []);
$paramTypes = $request->input('param_type', []);
$params = [];
foreach ($paramNames as $i => $name) {
if ($name) {
$default = $paramDefaults[$i] ?? '';
if (($paramTypes[$i] ?? '') === 'unit') {
preg_match('/^([\d]+)([a-zA-Z%]+)/', $default, $matches);
$default = [
'value' => $matches[1] ?? '0',
'unit' => $matches[2] ?? 'px',
];
}
$params[] = [
'param_name' => $name,
'param_default' => $default,
'param_type' => $paramTypes[$i] ?? 'text',
];
}
}
$rule = ThemeRule::create([
'rule_name' => $request->rule_name,
'rule_description' => $request->rule_description,
'rule_content' => $request->rule_content,
'rule_params' => !empty($params) ? json_encode($params) : null,
'rule_status' => $request->boolean('rule_status', true),
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
foreach ($params as $param) {
ThemeSetting::create([
'setting_rule_id' => $rule->rule_id,
'setting_param_name' => $param['param_name'],
'setting_param_type' => $param['param_type'],
'setting_param_value' => $param['param_type'] === 'unit'
? json_encode(['value' => $param['param_default'], 'unit' => 'px'])
: $param['param_default'],
'setting_param_default' => $param['param_type'] === 'unit'
? json_encode(['value' => $param['param_default'], 'unit' => 'px'])
: $param['param_default'],
]);
}
ThemeService::generateCss();
flash()->success('Theme rule created successfully.');
return redirect()->route('theme-rule.index');
}
public function edit($id)
{
$rule = ThemeRule::findOrFail($id);
return view('backend.module.theme.theme-rule.form', [
'rule' => $rule,
]);
}
public function update(Request $request, $id)
{
$rule = ThemeRule::findOrFail($id);
$request->validate([
'rule_name' => 'required|string|max:250',
'rule_description' => 'nullable|string|max:500',
'rule_content' => 'required|string',
'rule_status' => 'nullable|boolean',
]);
$paramNames = $request->input('param_name', []);
$paramDefaults = $request->input('param_default', []);
$paramTypes = $request->input('param_type', []);
$params = [];
foreach ($paramNames as $i => $name) {
if ($name) {
$default = $paramDefaults[$i] ?? '';
if (($paramTypes[$i] ?? '') === 'unit') {
preg_match('/^([\d]+)([a-zA-Z%]+)/', $default, $matches);
$default = [
'value' => $matches[1] ?? '0',
'unit' => $matches[2] ?? 'px',
];
}
$params[] = [
'param_name' => $name,
'param_default' => $default,
'param_type' => $paramTypes[$i] ?? 'text',
];
}
}
$rule->update([
'rule_name' => $request->rule_name,
'rule_description' => $request->rule_description,
'rule_content' => $request->rule_content,
'rule_params' => !empty($params) ? json_encode($params) : null,
'rule_status' => $request->boolean('rule_status', true),
'updated_by' => auth()->id(),
]);
ThemeSetting::where('setting_rule_id', $rule->rule_id)->delete();
foreach ($params as $param) {
ThemeSetting::create([
'setting_rule_id' => $rule->rule_id,
'setting_param_name' => $param['param_name'],
'setting_param_type' => $param['param_type'],
'setting_param_value' => $param['param_type'] === 'unit'
? json_encode(['value' => $param['param_default'], 'unit' => 'px'])
: $param['param_default'],
'setting_param_default' => $param['param_type'] === 'unit'
? json_encode(['value' => $param['param_default'], 'unit' => 'px'])
: $param['param_default'],
]);
}
ThemeService::generateCss();
flash()->success('Theme rule updated successfully.');
return redirect()->route('theme-rule.index');
}
public function destroy(Request $request)
{
$rule = ThemeRule::findOrFail($request->id);
$rule->delete();
ThemeService::generateCss();
flash()->success('Theme rule deleted successfully.');
return redirect()->route('theme-rule.index');
}
}