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) { // Get the type of the settingsclass property $rp = new \ReflectionProperty($settingsClass, $key); $rpType = $rp->getType(); if ($rpType == 'bool') { $settingsClass->$key = $request->has($key); continue; } $nullable = $rpType->allowsNull(); if ($nullable) $settingsClass->$key = $request->input($key) ?? null; else $settingsClass->$key = $request->input($key); } $settingsClass->save(); return Redirect::to('admin/settings' . '#' . $category)->with('success', 'Settings updated successfully.'); } }