. * * @package phpservermon * @author Pepijn Over * @copyright Copyright (c) 2008-2014 Pepijn Over * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @version Release: @package_version@ * @link http://www.phpservermonitor.org/ **/ namespace psm\Module\Config\Controller; use psm\Module\AbstractController; use psm\Service\Database; use psm\Service\Template; class ConfigController extends AbstractController { /** * Checkboxes * @var array $checkboxes */ protected $checkboxes = array( 'email_status', 'email_smtp', 'sms_status', 'log_status', 'log_email', 'log_sms', 'show_update', ); /** * Fields for saving * @var array $fields */ protected $fields = array( 'email_from_name', 'email_from_email', 'email_smtp_host', 'email_smtp_port', 'email_smtp_username', 'email_smtp_password', 'sms_gateway_username', 'sms_gateway_password', 'sms_from', ); private $default_tab = 'general'; function __construct(Database $db, Template $tpl) { parent::__construct($db, $tpl); $this->setMinUserLevelRequired(PSM_USER_ADMIN); $this->setActions(array( 'index', 'save', ), 'index'); } /** * Populate all the config fields with values from the database */ protected function executeIndex() { $this->setTemplateId('config', 'config/config.tpl.html'); $config_db = $this->db->select( PSM_DB_PREFIX . 'config', null, array('key', 'value') ); $config = array(); foreach($config_db as $entry) { $config[$entry['key']] = $entry['value']; } // generate language array $lang_keys = psm_get_langs(); $languages = array(); foreach($lang_keys as $key => $label) { $languages[] = array( 'value' => $key, 'label' => $label, 'selected' => ($key == $config['language']) ? 'selected="selected"' : '', ); } $this->tpl->addTemplateDataRepeat($this->getTemplateId(), 'languages', $languages); $tpl_data = array( 'sms_selected_' . $config['sms_gateway'] => 'selected="selected"', 'alert_type_selected_' . $config['alert_type'] => 'selected="selected"', 'auto_refresh_servers' => (isset($config['auto_refresh_servers'])) ? $config['auto_refresh_servers'] : '0', ); foreach($this->checkboxes as $input_key) { $tpl_data[$input_key . '_checked'] = (isset($config[$input_key]) && (int) $config[$input_key] == 1) ? 'checked="checked"' : ''; } foreach($this->fields as $input_key) { $tpl_data[$input_key] = (isset($config[$input_key])) ? $config[$input_key] : ''; } $tpl_data[$this->default_tab . '_active'] = 'active'; $modal = new \psm\Util\Module\Modal($this->tpl, 'testEmail', \psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL); $this->addModal($modal); $modal->setTitle(psm_get_lang('servers', 'send_email')); $modal->setMessage(psm_get_lang('config', 'test_email')); $modal->setOKButtonLabel(psm_get_lang('config', 'send')); $modal = new \psm\Util\Module\Modal($this->tpl, 'testSMS', \psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL); $this->addModal($modal); $modal->setTitle(psm_get_lang('servers', 'send_sms')); $modal->setMessage(psm_get_lang('config', 'test_sms')); $modal->setOKButtonLabel(psm_get_lang('config', 'send')); $this->tpl->addTemplateData($this->getTemplateId(), $tpl_data); } /** * If a post has been done, gather all the posted data * and save it to the database */ protected function executeSave() { if(!empty($_POST)) { // save new config $clean = array( 'language' => $_POST['language'], 'sms_gateway' => $_POST['sms_gateway'], 'alert_type' => $_POST['alert_type'], 'auto_refresh_servers' => (isset($_POST['auto_refresh_servers'])) ? intval($_POST['auto_refresh_servers']) : '0', ); foreach($this->checkboxes as $input_key) { $clean[$input_key] = (isset($_POST[$input_key])) ? '1': '0'; } foreach($this->fields as $input_key) { if(isset($_POST[$input_key])) { $clean[$input_key] = $_POST[$input_key]; } } // save all values to the database $changed = false; foreach($clean as $key => $value) { // check if key already exists, otherwise add it $old_value = psm_get_conf($key); if($old_value === null) { // not yet set, add it $this->db->save( PSM_DB_PREFIX . 'config', array( 'key' => $key, 'value' => $value, ) ); $changed = true; } else if($value != $old_value) { // update $this->db->save( PSM_DB_PREFIX . 'config', array('value' => $value), array('key' => $key) ); $changed = true; } } if($changed) { $this->addMessage(psm_get_lang('config', 'updated'), 'success'); } else { $this->addMessage(psm_get_lang('config', 'nochanges')); } if(!empty($_POST['test_email'])) { // build mail object $mail = psm_build_mail(); $message = psm_get_lang('config', 'test_message'); $mail->Subject = $message; $mail->Priority = 1; $mail->Body = $message; $mail->AltBody = str_replace('
', "\n", $message); $user = $this->user->getUser(); $mail->AddAddress($user->email, $user->name); if($mail->Send()) { $this->addMessage(psm_get_lang('config', 'email_sent'), 'success'); } else { $this->addMessage(psm_get_lang('config', 'email_error') . ': ' . $mail->ErrorInfo, 'error'); } } elseif(!empty($_POST['test_sms'])) { // build sms object $sms = psm_build_sms(); if($sms) { $user = $this->user->getUser(); $sms->addRecipients($user->mobile); if($sms->sendSMS(psm_get_lang('config', 'test_message'))) { $this->addMessage(psm_get_lang('config', 'sms_sent'), 'success'); } else { $this->addMessage(psm_get_lang('config', 'sms_error'), 'error'); } } } if($clean['language'] != psm_get_conf('language')) { header('Location: ' . psm_build_url(array('mod' => 'config'), true, false)); die(); } if(isset($_POST['general_submit'])) { $this->default_tab = 'general'; } elseif(isset($_POST['email_submit']) || !empty($_POST['test_email'])) { $this->default_tab = 'email'; } elseif(isset($_POST['sms_submit']) || !empty($_POST['test_sms'])) { $this->default_tab = 'sms'; } elseif(isset($_POST['logging_submit'])) { $this->default_tab = 'logging'; } } $this->initializeAction('index'); } // override parent::createHTMLLabels() protected function createHTMLLabels() { $this->tpl->addTemplateData( $this->getTemplateId(), array( 'subtitle' => psm_get_lang('menu', 'config'), 'label_tab_email' => psm_get_lang('config', 'tab_email'), 'label_tab_sms' => psm_get_lang('config', 'tab_sms'), 'label_tab_log' => psm_get_lang('config', 'tab_log'), 'label_settings_email' => psm_get_lang('config', 'settings_email'), 'label_settings_sms' => psm_get_lang('config', 'settings_sms'), 'label_settings_notification' => psm_get_lang('config', 'settings_notification'), 'label_settings_log' => psm_get_lang('config', 'settings_log'), 'label_general' => psm_get_lang('config', 'general'), 'label_language' => psm_get_lang('config', 'language'), 'label_show_update' => psm_get_lang('config', 'show_update'), 'label_email_status' => psm_get_lang('config', 'email_status'), 'label_email_from_email' => psm_get_lang('config', 'email_from_email'), 'label_email_from_name' => psm_get_lang('config', 'email_from_name'), 'label_email_smtp' => psm_get_lang('config', 'email_smtp'), 'label_email_smtp_host' => psm_get_lang('config', 'email_smtp_host'), 'label_email_smtp_port' => psm_get_lang('config', 'email_smtp_port'), 'label_email_smtp_username' => psm_get_lang('config', 'email_smtp_username'), 'label_email_smtp_password' => psm_get_lang('config', 'email_smtp_password'), 'label_email_smtp_noauth' => psm_get_lang('config', 'email_smtp_noauth'), 'label_sms_status' => psm_get_lang('config', 'sms_status'), 'label_sms_gateway' => psm_get_lang('config', 'sms_gateway'), 'label_sms_gateway_mosms' => psm_get_lang('config', 'sms_gateway_mosms'), 'label_sms_gateway_mollie' => psm_get_lang('config', 'sms_gateway_mollie'), 'label_sms_gateway_spryng' => psm_get_lang('config', 'sms_gateway_spryng'), 'label_sms_gateway_inetworx' => psm_get_lang('config', 'sms_gateway_inetworx'), 'label_sms_gateway_clickatell' => psm_get_lang('config', 'sms_gateway_clickatell'), 'label_sms_gateway_textmarketer' => psm_get_lang('config', 'sms_gateway_textmarketer'), 'label_sms_gateway_username' => psm_get_lang('config', 'sms_gateway_username'), 'label_sms_gateway_password' => psm_get_lang('config', 'sms_gateway_password'), 'label_sms_from' => psm_get_lang('config', 'sms_from'), 'label_alert_type' => psm_get_lang('config', 'alert_type'), 'label_alert_type_description' => psm_get_lang('config', 'alert_type_description'), 'label_alert_type_status' => psm_get_lang('config', 'alert_type_status'), 'label_alert_type_offline' => psm_get_lang('config', 'alert_type_offline'), 'label_alert_type_always' => psm_get_lang('config', 'alert_type_always'), 'label_log_status' => psm_get_lang('config', 'log_status'), 'label_log_status_description' => psm_get_lang('config', 'log_status_description'), 'label_log_email' => psm_get_lang('config', 'log_email'), 'label_log_sms' => psm_get_lang('config', 'log_sms'), 'label_auto_refresh' => psm_get_lang('config', 'auto_refresh'), 'label_auto_refresh_servers' => psm_get_lang('config', 'auto_refresh_servers'), 'label_seconds' => psm_get_lang('config', 'seconds'), 'label_save' => psm_get_lang('system', 'save'), 'label_test' => psm_get_lang('config', 'test'), ) ); return parent::createHTMLLabels(); } }