Files
wticreatorstudio/Modules/LaraBuilder/Providers/Settings.php
T

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;
}
}