toArray(); // call getOptionInputData method to get all options if (method_exists($className, 'getOptionInputData')) { $optionInputData = $className::getOptionInputData(); } else { $optionInputData = []; } // collect all option input data $optionsData = []; foreach ($options as $key => $value) { $optionsData[$key] = [ 'value' => $value, 'label' => $optionInputData[$key]['label'] ?? ucwords(str_replace('_', ' ', $key)), 'type' => $optionInputData[$key]['type'] ?? 'string', 'description' => $optionInputData[$key]['description'] ?? '', 'options' => $optionInputData[$key]['options'] ?? [], ]; } // collect category icon if available if (isset($optionInputData['category_icon'])) { $optionsData['category_icon'] = $optionInputData['category_icon']; } $optionsData['settings_class'] = $className; $settings[str_replace('Settings', '', class_basename($className))] = $optionsData; } $settings->sort(); $themes = array_diff(scandir(base_path('themes')), array('..', '.')); return view('admin.settings.index', [ 'settings' => $settings->all(), 'themes' => $themes, 'active_theme' => Theme::active(), ]); } /** * Update the specified resource in storage. * */ public function update(Request $request) { $category = request()->get('category'); $settings_class = request()->get('settings_class'); if (method_exists($settings_class, 'getValidations')) { $validations = $settings_class::getValidations(); } else { $validations = []; } $validator = Validator::make($request->all(), $validations); if ($validator->fails()) { return Redirect::to('admin/settings' . '#' . $category)->withErrors($validator)->withInput(); } $settingsClass = new $settings_class(); foreach ($settingsClass->toArray() as $key => $value) { switch (gettype($request->input($key))) { case 'boolean': $settingsClass->$key = $request->has($key); break; case 'string': $settingsClass->$key = $request->input($key) ?? ''; break; case 'integer': $settingsClass->$key = $request->input($key) ?? 0; break; case 'array': $settingsClass->$key = $request->input($key) ?? []; break; case 'double': $settingsClass->$key = $request->input($key) ?? 0.0; break; case 'NULL': $settingsClass->$key = null; break; } } $settingsClass->save(); return Redirect::to('admin/settings' . '#' . $category)->with('success', 'Settings updated successfully.'); } }