Blame | Last modification | View Log | Download
<?php/*** ProcessWire General site settings module** Allows to set global site settings** by Piotr Markiewicz (pmarki)** ProcessWire 2.8.x (development), Copyright 2016 by Ryan Cramer* https://processwire.com***/class ProcessGeneralSettings extends Process implements Module {public static function getModuleInfo() {return array('title' => __('General site settings (Process)', __FILE__),'summary' => __('Editing of global site settings, setup in General Settings Module', __FILE__),'version' => 122,'permanent' => false,'autoload' => true,'icon' => 'sliders',//'requires' => 'GeneralSettings','installs' => 'GeneralSettings','page' => array('name' => 'general-settings','parent' => 'setup','title' => 'General settings',),'permission' => 'general-settings',"permissions" => ["general-settings" => "Access general settings page"],);}/*** Initialize**/public function init() {$this->data = $this->modules->getConfig('GeneralSettings');}public function ___execute() {if ($this->input->post('submit_save')) {return $this->renderForm($this->saveValues());//wire('session')->redirect(wire('page')->url);} else {return $this->renderForm();}}/*** Render form for admin page** @return string form markup**/protected function renderForm($settings=null) {if (!isset($this->data['settings'])) {return 'Create settings in module configuration first.';}$data = $this->data;$attrs = json_decode( $settings ?:$data['settings'], true);if ($attrs === null) {return 'Error decoding settings data.';}$form = $this->modules->get('InputfieldForm');$form->attr('id', 'SettingsModule');$form->attr('action', $this->wire('page')->url );$parent = $form;foreach ($attrs as $fset) {$field = $this->modules->get('Inputfield'.$fset['type']);$value = (isset($fset['value']) ? $fset['value'] : '');//------- NEW --------if($fset['type'] == 'FieldsetClose') {$parent = $form;continue;}//------- END NEW --------if (!$field) {$this->message('Unable to find field type ' .$fset['type']);continue;}//set attrbs for all type of fields$field->label = $fset['label'];$field->columnWidth = (intval($fset['width']) >=10) ? $fset['width'] : 100;$field->description = $fset['description'];//------- NEW --------// Placeholder$field->placeholder = isset($fset['placeholder']) ? $fset['placeholder'] : '';// Collapsedif(isset($fset['collapsed']) && $fset['collapsed'] != 'Default') {if($fset['collapsed'] == 'collapsedNever') $field->collapsed = Inputfield::collapsedNever;if($fset['collapsed'] == 'collapsedBlank') $field->collapsed = Inputfield::collapsedBlank;if($fset['collapsed'] == 'collapsedYes') $field->collapsed = Inputfield::collapsedYes;}// Markupif ($fset['type'] == 'Markup') {$field->markupText = '<p>' . $fset['description'] . '</p>';$field->description = '';}//------- END NEW --------if ($fset['type'] == 'Checkbox') {$field->uncheckedValue = '0';if($value === '1') {$field->setAttribute('checked', 'checked');}}if ($fset['type'] == 'URL') {$field->set('noRelative', 1);}// enabled use of checkboxesif ($fset['type'] == 'Select' || $fset['type'] == 'Radios' || $fset['type'] == 'Checkboxes') {foreach (explode(',', trim($fset['select'], ',')) as $label) {//value, label, attr$v = $this->wire('sanitizer')->name($label);if ($value == $v) {$field->addOption($v, $label, array('selected' => 1));} else {$field->addOption($v, $label);}}}if ($fset['type'] == 'Integer') {$field->setAttribute('type', 'number');}//fieldset or normal fieldif ($fset['type'] == 'Fieldset') {$field->addClass('fset_red');$parent = $field;$form->append($field);} else {$field->attr('name', $fset['api']);$field->attr('value', $value);$parent->append($field);}}$f = $this->modules->get('InputfieldSubmit');$f->attr('name', 'submit_save');$f->attr('value', $this->_('Save'));$f->addClass('head_button_clone');$f->icon = 'save';$form->add($f);return $form->render();}/*** Save values provided by user to module config data**/protected function saveValues() {$old = $this->data;$data = json_decode($old['settings'], true);$new = array();foreach ($data as $key => $field) {$new[$key] = $field;$new[$key]['value'] = $this->wire('input')->{$field['api']};}$old['settings'] = json_encode($new);wire('modules')->saveConfig('GeneralSettings', $old);$this->message('Site settings saved');return $old['settings'];}}