Blame | Last modification | View Log | Download
<?php/****/class ProcessSettingsFactory extends Process {public static function getModuleInfo() {return array('title' => __('Process Settings Factory', __FILE__),'summary' => __('Unlimited settings pages.', __FILE__),'version' => '1.0.6','author' => 'Macrura','permanent' => false,'autoload' => false,'icon' => 'check-square-o','requires' => 'SettingsFactory','permission' => 'settings-factory',"permissionMethod" => "hasSettingsPagePermission","permissions" => ["settings-factory" => "Access settings factory pages"],);}protected $module = null;protected $settingsKey = null;public function init() {$this->module = $this->modules->get('SettingsFactory');$this->data = $this->modules->getConfig('SettingsFactory');parent::init();}public function ready() {$this->settingsKey = $this->wire('page')->name;}public function ___execute() {$form = $this->buildForm();if($this->input->post('submit_save')) {$this->processForm($form);$this->session->redirect("./");return '';} else {$out = $form->render();if($this->wire->user->isSuperuser()) {$moduleInfo = $this->wire('modules')->getModuleInfoVerbose($this->module);$filepath = $this->wire('page')->sp_filepath ? 'Using ' . $this->wire('page')->sp_filepath : 'No Path Specified.';$out .= "<p class='version detail'><i class='fa fa-check-square-o'></i> Settings Factory v$moduleInfo[versionStr] | $filepath";$out .= " | <a href='{$this->wire('page')->editUrl}' target='_blank'>Edit Process Settings</a></p>";}return $out;}}/*** getModuleInfo interface for required permission** @param array $data* @return bool**/public static function hasSettingsPagePermission(array $data) {$page = $data['page'];$user = $data['user'];$wire = $data['wire'];// if there is a specific permission setup for this settings page$permission = $wire->permissions->get("$page->name");if(!$permission->id) $permission = 'settings-factory';return $user->hasPermission($permission);}/*** Render form for admin page* @return string form markup*/protected function buildForm() {$languages = ($this->wire('languages')) ? $this->wire('languages') : '';$nonDefaultLanguages = ($languages) ? $languages->findNonDefault() : '';$form = new InputfieldForm();$form->attr('id', 'ProcessSettingsFactory');$form->attr('method', 'post');$form->attr('action', './');$wire = $this->wire;$module = $this->module;// ------------------------------------------------------------------------// Notice// ------------------------------------------------------------------------$fDefault = $wire->modules->get('InputfieldMarkup');$fDefault->name = 'instructions';$fDefault->label = __('Instructions', __FILE__);$fDefault->markupText = __('Please check that you have correctly specified a path to a valid json or php file that defines your inputfields.', __FILE__);if(!$wire->page->sp_filepath) {$form->add($fDefault);}// ------------------------------------------------------------------------// USER DEFINED FIELDS// ------------------------------------------------------------------------if($wire->page->sp_filepath) {$path = $wire->config->paths->templates . $wire->page->sp_filepath;$settingsKey = $wire->page->name;$modData = $this->modules->getConfig('SettingsFactory');$thisData = isset($modData[$settingsKey]) ? $modData[$settingsKey] : null;if(file_exists($path)) {$pathParts = pathinfo($path);if($pathParts['extension'] == 'json') {$json = file_get_contents($path);$fArray = json_decode($json, true);}if($pathParts['extension'] == 'php') {$fArray = wireRenderFile($path);}$form->add($fArray);$inputfields = $this->extractInputfields($fArray);foreach($inputfields as $key => $cField) {$name = $cField['name'];if($thisData && isset($thisData[$name])) {$cField['value'] = $thisData[$name] ?: '';} else {$cField['value'] = '';}$f = $form->get($name);$f->attr('value', $cField['value']);if($nonDefaultLanguages) {if($f->useLanguages) {foreach($nonDefaultLanguages as $language) {$f->set("value" . $language->id, $thisData[$name . "__" . $language->id ]);}}}if($cField['type'] == 'InputfieldCheckbox' && $cField['value'] == 1) {$f->attr('checked', 'checked');}}} else {$fDefault->markupText = __("The specified file was not found. ($path)", __FILE__);$form->add($fDefault);}}$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;}/*** Extract the inputfields from nested tabs/fieldsets*/public function extractInputfields($inputfields) {$inputfieldsArray = new InputfieldWrapper();foreach($inputfields as $field) {if(is_array($field)) $inputfieldsArray->importArray($field);if($field instanceof InputfieldWrapper) {if(in_array('WireTab', $field->attributes)) {$this->wire('modules')->get('JqueryWireTabs');$this->wire('config')->scripts->append(wire('config')->urls->SettingsFactory.'wiretabs-init.js');}$inputfieldsArray->import($field->getAll());}}return $inputfieldsArray->getAll();}/*** Process configuration fields and populate to module* @param InputfieldWrapper $form**/protected function processForm($form) {$languages = ($this->wire('languages')) ? $this->wire('languages') : '';$nonDefaultLanguages = ($languages) ? $languages->findNonDefault() : '';$settingsKey = $this->wire('page')->name;$form->processInput($this->input->post);$thisData = $this->module->get($settingsKey);$valuesArray = array();foreach($thisData as $key => $value) {$f = $form->get($key);if(!$f) continue;if($nonDefaultLanguages) {if($f->useLanguages)foreach($nonDefaultLanguages as $language) $valuesArray[$key . "__" . $language->id ] = $f->get("value" . $language->id );}//$valuesArray[$key] = $f->attr('value');$valuesArray[$key] = is_array($f->attr('value')) ? array_values($f->attr('value')) : $f->attr('value');}$myData[$settingsKey] = $valuesArray;$newData = array_merge($this->data,$myData);$this->modules->saveModuleConfigData('SettingsFactory', $newData);$this->message(sprintf($this->_('Saved: %s'), $this->wire('page')->title));}}