mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-10-10 18:13:31 -04:00
147 lines
4.4 KiB
PHP
147 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace Modules\LaraBuilder\Providers;
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Modules\LaraBuilder\Entities\Page;
|
|
|
|
class PageSettings
|
|
{
|
|
public $sectionId;
|
|
|
|
public $directory;
|
|
|
|
public function storePage($request)
|
|
{
|
|
$pageData = [];
|
|
foreach ($request->get('data') as $item) {
|
|
$pageData[$item['name']] = $item['value'];
|
|
}
|
|
|
|
$pageData['slug'] = createPageSlug($pageData['slug']);
|
|
|
|
$validator = Validator::make($pageData, [
|
|
'name' => 'required',
|
|
'title' => 'required',
|
|
'description' => 'nullable',
|
|
'slug' => 'required|unique:'.config('larabuilder.db_prefix').'pages,slug,'.($pageData['id'] ?? ''),
|
|
]);
|
|
|
|
if ($validator->passes()) {
|
|
if (Page::whereNull('slug')->first() && ! empty($pageData['id'])) {
|
|
$validator->errors()->add('slug', __('larabuilder::pagebuilder.slug_error'));
|
|
} else {
|
|
$pageData = sanitizeArray($pageData);
|
|
if (empty($pageData['slug'])) {
|
|
$pageData['slug'] = null;
|
|
}
|
|
Page::updateOrCreate(['id' => $pageData['id'] ?? null], $pageData);
|
|
|
|
if (! empty($pageData['id'])) {
|
|
Cache::forget('pagebuilder__pageData_'.$pageData['id']);
|
|
}
|
|
|
|
return response()->json(['success' => true]);
|
|
}
|
|
}
|
|
|
|
return response()->json(['success' => false, 'error' => $validator->errors()->all()]);
|
|
}
|
|
|
|
public function getPageSettings($pageId)
|
|
{
|
|
return self::getPage($pageId)->settings ?? [];
|
|
}
|
|
|
|
public function getPage($pageId)
|
|
{
|
|
if (config('cache.default') != 'null') {
|
|
return Cache::rememberForever('pagebuilder__pageData_'.$pageId, function () use ($pageId) {
|
|
return self::fetchPage($pageId);
|
|
});
|
|
} else {
|
|
return self::fetchPage($pageId);
|
|
}
|
|
}
|
|
|
|
private function fetchPage($pageId)
|
|
{
|
|
if (! empty($pageId)) {
|
|
return Page::find($pageId);
|
|
}
|
|
}
|
|
|
|
public function getPageBySlug($slug)
|
|
{
|
|
return Page::whereSlug($slug)->first();
|
|
}
|
|
|
|
public function getPageSectionSettings($pageId, $sectionId, $key)
|
|
{
|
|
$db_value = '';
|
|
$pageSettings = self::getPage($pageId)->settings ?? [];
|
|
$dbValue = [];
|
|
if (! empty($pageSettings['section_data']) && array_key_exists($sectionId, $pageSettings['section_data'])) {
|
|
$dbValue = $pageSettings['section_data'][$sectionId]['settings'][$key] ?? [];
|
|
if (! empty($dbValue['is_array']) && $dbValue['is_array'] == '1') {
|
|
foreach ($dbValue['value'] as $index => $value) {
|
|
if (! is_array($value) && self::isJSON($value)) {
|
|
$dbValue['value'][$index] = json_decode($value, true);
|
|
} elseif (! is_array($value) && ! self::isJSON($value)) {
|
|
$dbValue['value'][$index] = $value;
|
|
} else {
|
|
$dbValue['value'][$index] = self::jsonDecodedArr($value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (! empty($dbValue['value'])) {
|
|
$db_value = $dbValue['value'];
|
|
}
|
|
|
|
return $db_value;
|
|
}
|
|
|
|
/**
|
|
* check string is json or not
|
|
*
|
|
* @param $string String
|
|
* @param mixed String $value
|
|
* @return void
|
|
*/
|
|
private function isJSON($string): bool
|
|
{
|
|
return is_string($string) && is_array(json_decode($string, true)) && (json_last_error() == JSON_ERROR_NONE) ? true : false;
|
|
}
|
|
|
|
private function jsonDecodedArr(&$arr)
|
|
{
|
|
foreach ($arr as &$el) {
|
|
if (is_array($el)) {
|
|
self::jsonDecodedArr($el);
|
|
} else {
|
|
if (self::isJSON($el)) {
|
|
$el = json_decode($el, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $arr;
|
|
}
|
|
|
|
public function setPageSettings($pageId, $pageSettings): Page
|
|
{
|
|
if (! empty($pageSettings)) {
|
|
$pageSettings = sanitizeArray($pageSettings);
|
|
}
|
|
$page = Page::find($pageId);
|
|
$page->update(['settings' => $pageSettings ?? []]);
|
|
if (config('cache', true)) {
|
|
Cache::forget('pagebuilder__pageData_'.$pageId);
|
|
}
|
|
|
|
return $page->fresh();
|
|
}
|
|
}
|