mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-10-10 18:13:31 -04:00
338 lines
9.6 KiB
PHP
338 lines
9.6 KiB
PHP
<?php
|
|
|
|
namespace Modules\LaraBuilder\Providers;
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class Settings
|
|
{
|
|
/**
|
|
* Set The Value of Key Specified
|
|
*
|
|
* @param $key String
|
|
* @param mixed String $value
|
|
* @return void
|
|
*/
|
|
public function set(?string $section, ?string $key, array|string $value)
|
|
{
|
|
if (is_array($value)) {
|
|
$value = serialize(sanitizeArray($value));
|
|
} else {
|
|
$value = sanitizeTextField($value);
|
|
}
|
|
self::store($section, $key, $value);
|
|
if (config('cache', true)) {
|
|
Cache::forget('larabuilder__settings');
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Storing New & Updating existinsg Settings
|
|
*
|
|
* @param $key of setting
|
|
* @param $value of key
|
|
*/
|
|
private function store($section, $key, $value)
|
|
{
|
|
|
|
DB::table(config('larabuilder.db_prefix').'settings')->updateOrInsert(
|
|
[
|
|
'section' => $section,
|
|
'key' => $key,
|
|
],
|
|
[
|
|
'section' => $section,
|
|
'key' => $key,
|
|
'value' => $value,
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* reset the section
|
|
*
|
|
* @param $key String
|
|
* @return void
|
|
*/
|
|
public function resetSection($key = false)
|
|
{
|
|
|
|
if (! empty($key)) {
|
|
DB::table(config('larabuilder.db_prefix').'settings')->whereSection($key)->delete();
|
|
} else {
|
|
DB::table(config('larabuilder.db_prefix').'settings')->truncate();
|
|
}
|
|
if (config('cache', true)) {
|
|
Cache::forget('larabuilder__settings');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* get section fields html
|
|
*
|
|
* @return html
|
|
*/
|
|
public function getSectionSetting($params, $fields)
|
|
{
|
|
|
|
$html = '';
|
|
|
|
if (is_array($fields) && ! empty($fields)) {
|
|
|
|
$tab_key = ! empty($params['tab_key']) ? $params['tab_key'] : '';
|
|
$html = '<ul class="op-themeform__wrap">';
|
|
foreach ($fields as $field) {
|
|
|
|
$field['tab_key'] = $tab_key;
|
|
if (empty($params['repeater_id'])) {
|
|
$id = ! empty($field['id']) ? $field['id'] : '';
|
|
$db_value = self::get($tab_key.'.'.$id);
|
|
$field['db_value'] = $db_value;
|
|
if (! empty($db_value)) {
|
|
$field['value'] = $db_value;
|
|
}
|
|
} else {
|
|
$field['repeater_id'] = ! empty($params['repeater_id']) ? $params['repeater_id'] : '';
|
|
$field['index'] = ! empty($params['repeater_id']) ? $params['index'] : '';
|
|
}
|
|
$html .= self::getField($field);
|
|
}
|
|
$html .= '</ul>';
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* Get The Value of Key Specified
|
|
*
|
|
* @param $key String
|
|
* @return mixed String
|
|
*/
|
|
public function get(?string $key = null)
|
|
{
|
|
|
|
$settings = self::getSettings();
|
|
$key = explode('.', $key);
|
|
$section = $key[0];
|
|
$key = ! empty($key[1]) ? $key[1] : '';
|
|
|
|
if (empty($key)) { // return all settings
|
|
$sectionSettings = [];
|
|
if (! empty($settings[$section])) {
|
|
foreach ($settings[$section] as $setting => $value) {
|
|
$sectionSettings[$setting] = $this->decodeValue($value);
|
|
}
|
|
}
|
|
|
|
return $sectionSettings;
|
|
} elseif (isset($settings[$section][$key])) { //return selected setting
|
|
return $this->decodeValue($settings[$section][$key]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get settings array
|
|
*
|
|
* @return array
|
|
*/
|
|
private function getSettings()
|
|
{
|
|
|
|
if (config('cache', true)) {
|
|
|
|
return Cache::rememberForever('larabuilder__settings', function () {
|
|
return $this->fetchSettings();
|
|
});
|
|
} else {
|
|
return $this->fetchSettings();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* fetch From DB
|
|
*
|
|
* @return array
|
|
*/
|
|
private function fetchSettings()
|
|
{
|
|
|
|
$sections = [];
|
|
$settings = DB::table(config('larabuilder.db_prefix').'settings')->get();
|
|
if (! empty($settings)) {
|
|
foreach ($settings as $single) {
|
|
$sections[$single->section][$single->key] = $single->value;
|
|
}
|
|
}
|
|
|
|
return $sections;
|
|
}
|
|
|
|
private function decodeValue($settingValue)
|
|
{
|
|
|
|
$value = @unserialize($settingValue);
|
|
if ($value == 'b:0;' || $value !== false) {
|
|
$temp = [];
|
|
foreach ($value as $key => $data) {
|
|
if (is_array($data)) {
|
|
$temp[$key] = self::jsonDecodedArr($data);
|
|
} else {
|
|
if (self::isJSON($data)) {
|
|
$temp[$key] = json_decode($data, true);
|
|
} else {
|
|
$temp[$key] = $data;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $temp;
|
|
} else {
|
|
if (self::isJSON($settingValue)) {
|
|
return json_decode($settingValue, true);
|
|
} else {
|
|
return $settingValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* get json_decoded array
|
|
*
|
|
* @param $arr Array
|
|
* @param mixed String $value
|
|
* @return void
|
|
*/
|
|
private function jsonDecodedArr(&$arr)
|
|
{
|
|
|
|
foreach ($arr as $key => &$el) {
|
|
|
|
if (is_array($el)) {
|
|
self::jsonDecodedArr($el);
|
|
} else {
|
|
if (self::isJSON($el)) {
|
|
$el = json_decode($el, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $arr;
|
|
}
|
|
|
|
/**
|
|
* check string is json or not
|
|
*
|
|
* @param $string String
|
|
* @param mixed String $value
|
|
* @return void
|
|
*/
|
|
private function isJSON($string)
|
|
{
|
|
|
|
return is_string($string) && is_array(json_decode($string, true)) && (json_last_error() == JSON_ERROR_NONE) ? true : false;
|
|
}
|
|
|
|
/**
|
|
* get field html
|
|
*/
|
|
public function getField($field): string
|
|
{
|
|
|
|
$html = '';
|
|
if (! empty($field['type'])) {
|
|
|
|
switch ($field['type']) {
|
|
|
|
case 'text':
|
|
case 'password':
|
|
case 'number':
|
|
case 'editor':
|
|
$html = view('larabuilder::optionbuilder.components.input', $field)->render();
|
|
break;
|
|
|
|
case 'file':
|
|
$html = view('larabuilder::optionbuilder.components.file', $field)->render();
|
|
break;
|
|
|
|
case 'textarea':
|
|
$html = view('larabuilder::optionbuilder.components.textarea', $field)->render();
|
|
break;
|
|
|
|
case 'timepicker':
|
|
$html = view('larabuilder::optionbuilder.components.timepicker', $field)->render();
|
|
break;
|
|
|
|
case 'datepicker':
|
|
$html = view('larabuilder::optionbuilder.components.datepicker', $field)->render();
|
|
break;
|
|
|
|
case 'colorpicker':
|
|
$html = view('larabuilder::optionbuilder.components.colorpicker', $field)->render();
|
|
break;
|
|
|
|
case 'info':
|
|
$html = view('larabuilder::optionbuilder.components.info', $field)->render();
|
|
break;
|
|
|
|
case 'radio':
|
|
$html = view('larabuilder::optionbuilder.components.radio', $field)->render();
|
|
break;
|
|
|
|
case 'checkbox':
|
|
$html = view('larabuilder::optionbuilder.components.checkbox', $field)->render();
|
|
break;
|
|
|
|
case 'switch':
|
|
$html = view('larabuilder::optionbuilder.components.switch', $field)->render();
|
|
break;
|
|
|
|
case 'select':
|
|
$html = view('larabuilder::optionbuilder.components.select', $field)->render();
|
|
break;
|
|
|
|
case 'range':
|
|
$html = view('larabuilder::optionbuilder.components.range_slider', $field)->render();
|
|
break;
|
|
|
|
case 'slider':
|
|
$html = view('larabuilder::optionbuilder.components.slider', $field)->render();
|
|
break;
|
|
|
|
case 'repeater':
|
|
if (! empty($field['multi']) && $field['multi']) {
|
|
$html = view('larabuilder::optionbuilder.components.multiple-repeater', $field)->render();
|
|
} else {
|
|
$html = view('larabuilder::optionbuilder.components.single-repeater', $field)->render();
|
|
}
|
|
break;
|
|
|
|
case 'text-alignment':
|
|
$html = view('larabuilder::optionbuilder.components.text-alignment', $field)->render();
|
|
break;
|
|
|
|
case 'unit-slider':
|
|
$html = view('larabuilder::optionbuilder.components.unit-slider', $field)->render();
|
|
break;
|
|
|
|
case 'box-space':
|
|
$html = view('larabuilder::optionbuilder.components.box-space', $field)->render();
|
|
break;
|
|
|
|
case 'box-border':
|
|
$html = view('larabuilder::optionbuilder.components.box-border', $field)->render();
|
|
break;
|
|
|
|
case 'gmap-autocomplete':
|
|
$html = view('larabuilder::optionbuilder.components.gmap-autocomplete', $field)->render();
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
}
|