/** * Process * Does all the work. * Saves settings, Checks details, calls the API to save the actual settings and checks whether it worked or not. * * @see GetApi * @see API::Set * @see API::Save * @see GetLang * @see ParseTemplate * @see SendStudio_Functions::Process * @see SendTestPreview * @see Settings_API::CheckCron * @see Settings_API::UpdateCron * * @return Void Does all of the processing, doesn't return anything. */ function Process() { $action = (isset($_GET['Action'])) ? strtolower($_GET['Action']) : null; $user = GetUser(); $access = $user->HasAccess('System', 'System'); $popup = (in_array($action, $this->PopupWindows)) ? true : false; if (!$access) { $this->DenyAccess(); return; } $LK = false; switch ($action) { case 'addons': // we need a subaction & addon name. if (!isset($_GET['SubAction'])) { return $this->ShowSettingsPage(); } if (!isset($_GET['Addon'])) { return $this->ShowSettingsPage(); } require_once(SENDSTUDIO_BASE_DIRECTORY . DIRECTORY_SEPARATOR . 'addons' . DIRECTORY_SEPARATOR . 'interspire_addons.php'); $post = array(); if (!empty($_POST)) { $post = $_POST; } try { $allowed_sub_action = array('install', 'uninstall', 'enable', 'disable', 'upgrade', 'configure', 'savesettings'); $subaction = $this->_getGETRequest('SubAction', ''); if (!in_array(strtolower($subaction), $allowed_sub_action)) { FlashMessage(GetLang('Addon_Action_NotAllowed'), SS_FLASH_MSG_ERROR, 'index.php?Page=Settings&Tab=6'); return; } $result = Interspire_Addons::Process($_GET['Addon'], $subaction, $post); if ($result === true) { FlashMessage(GetLang('Addon_Success_' . strtolower($_GET['SubAction'])), SS_FLASH_MSG_SUCCESS, 'index.php?Page=Settings&Tab=6'); return; } if ($result === false || $result == null) { FlashMessage(GetLang('Addon_Failure_' . strtolower($_GET['SubAction'])), SS_FLASH_MSG_ERROR, 'index.php?Page=Settings&Tab=6'); return; } echo $result; } catch (Exception $e) { $error = $e->GetMessage(); FlashMessage($error, SS_FLASH_MSG_ERROR, 'index.php?Page=Settings&Tab=6'); } return; break; case 'viewdisabled': $this->PrintHeader(true); $reporttype = (isset($_GET['Report'])) ? $_GET['Report'] : null; switch ($reporttype) { case 'autoresponder': $GLOBALS['Heading'] = GetLang('Autoresponders_Disabled_Heading'); $GLOBALS['Intro'] = GetLang('Autoresponders_Disabled_Heading_Intro'); $disabled_list = IEM::sessionGet('AutorespondersDisabled'); $disabled_report = ''; $var = GetLang('DisabledAutoresponder_Item'); foreach ($disabled_list as $p => $details) { $disabled_report .= sprintf($var, $details['autorespondername'], $details['listname']) . "\n"; } break; case 'newsletter': $GLOBALS['Heading'] = GetLang('Newsletters_Disabled_Heading'); $GLOBALS['Intro'] = GetLang('Newsletters_Disabled_Heading_Intro'); $disabled_list = IEM::sessionGet('NewslettersDisabled'); $disabled_report = ''; $var = GetLang('DisabledNewsletter_Item'); foreach ($disabled_list as $p => $details) { $disabled_report .= sprintf($var, $details['newslettername']) . "\n"; } break; } $GLOBALS['DisabledList'] = $disabled_report; $this->ParseTemplate('Settings_Disabled_Report'); $this->PrintFooter(true); break; case 'systeminfo': $this->PrintHeader(); $db = IEM::getDatabase(); $GLOBALS['DatabaseVersion'] = $db->FetchOne('SELECT version() AS version'); $GLOBALS['ProductVersion'] = GetLang('SENDSTUDIO_VERSION'); $GLOBALS['ShowProd'] = empty($GLOBALS['ProductEdition']) ? 'none' : ''; $charset = (isset($SENDSTUDIO_DEFAULTCHARSET)) ? $SENDSTUDIO_DEFAULTCHARSET : SENDSTUDIO_CHARSET; $GLOBALS['DefaultCharset'] = $charset; $GLOBALS['CharsetDescription'] = GetLang($charset); $GLOBALS['ServerTimeZone'] = SENDSTUDIO_SERVERTIMEZONE; $GLOBALS['ServerTimeZoneDescription'] = GetLang(SENDSTUDIO_SERVERTIMEZONE); $GLOBALS['ServerTime'] = date('r'); $GLOBALS['PHPVersion'] = phpversion(); $GLOBALS['ServerSoftware'] = htmlspecialchars($_SERVER["SERVER_SOFTWARE"], ENT_QUOTES, SENDSTUDIO_CHARSET); $GLOBALS['SafeModeEnabled'] = (SENDSTUDIO_SAFE_MODE) ? GetLang('Yes') : GetLang('No'); $GLOBALS['ImapSupportFound'] = (function_exists('imap_open')) ? GetLang('Yes') : GetLang('No'); $GLOBALS['CurlSupportFound'] = (function_exists('curl_init')) ? GetLang('Yes') : GetLang('No'); $php_mods = $this->ParsePHPModules(); $GLOBALS['GDVersion'] = GetLang('GD_NotDetected'); if (Settings_API::GDEnabled() && $php_mods !== false) { $GLOBALS['GDVersion'] = $php_mods['gd']['GD Version']; } $GLOBALS['ModSecurity'] = GetLang('ModSecurity_Unknown'); if (!is_numeric(strpos(php_sapi_name(), 'cgi')) && $php_mods !== false) { $apache_mods = $this->ParseApacheModules($php_mods); if (in_array('mod_security', $apache_mods)) { $GLOBALS['ModSecurity'] = GetLang('Yes'); } else { $GLOBALS['ModSecurity'] = GetLang('No'); } } $this->ParseTemplate('Settings_SystemInfo'); $this->PrintFooter(); break; case 'showinfo': $this->PrintHeader(true); phpinfo(); $this->PrintFooter(true); break; case 'sendpreviewdisplay': $this->PrintHeader($popup); $this->SendTestPreviewDisplay('index.php?Page=Settings&Action=SendPreview', 'self.parent.getPreviewParameters()'); $this->PrintFooter($popup); break; case 'sendsmtppreviewdisplay': $this->PrintHeader($popup); $this->SendTestPreviewDisplay('index.php?Page=Settings&Action=SendPreview', 'self.parent.getSMTPPreviewParameters()'); $this->PrintFooter($popup); break; case 'sendpreview': $this->SendTestPreview(); break; case 'testbouncedisplay': $this->PrintHeader($popup); $this->TestBounceSettingsDisplay(); $this->PrintFooter($popup); break; case 'testbouncesettings': $this->TestBounceSettings(); break; case 'save': if (empty($_POST)) { $this->ShowSettingsPage(); break; } $api = $this->GetApi(); $result = false; $errors = array(); // Make sure that Contact email is filled in if (!isset($_POST['email_address']) || trim($_POST['email_address']) == '') { array_push($errors, GetLang('ErrorAlertMessage_BlankContactEmail')); } // Make sure that license key is filled in if (!isset($_POST['licensekey']) || trim($_POST['licensekey']) == '') { array_push($errors, GetLang('ErrorAlertMessage_BlankLicenseKey')); } // Make sure that application name is filled in if (!isset($_POST['lng_applicationtitle']) || trim($_POST['lng_applicationtitle']) == '') { array_push($errors, GetLang('ErrorAlertMessage_BlankApplicationName')); } $agencyId = get_agency_license_variables(); if(!empty($agencyId['agencyid'])) { $temp = IEM::requestGetPOST('lng_accountupgrademessage', '', 'trim'); if (empty($temp)) { array_push($errors, GetLang('ErrorAlertMessage_BlankAccountUpgradeMessage')); } $temp = IEM::requestGetPOST('lng_freetrial_expiry_login', '', 'trim'); if (empty($temp)) { array_push($errors, GetLang('ErrorAlertMessage_BlankExpiredLogin')); } } if ($api && count($errors) == 0) { do { $settings = array(); // fix up the database settings first. $all_areas = $api->Areas; $LK = (isset($_POST['licensekey'])) ? $_POST['licensekey'] : false; if (defined('APPLICATION_SHOW_WHITELABEL_MENU') && constant('APPLICATION_SHOW_WHITELABEL_MENU')) { foreach ($all_areas['whitelabel'] as $area) { $val = IEM::requestGetPOST(strtolower($area), false); $temp = strtolower($area); switch ($temp) { // Special case for handling logo image case 'application_logo_image': $val = IEM::requestGetPOST('existing_app_logo_image', false); if (isset($_FILES['Application_Logo_Image']) && !empty($_FILES['Application_Logo_Image']['name'])) { if ($_FILES['Application_Logo_Image']['error'] != 0 || !@is_uploaded_file($_FILES['Application_Logo_Image']['tmp_name'])) { array_push($errors, GetLang('ErrorAlertMessage_ErrorApplicationLogoImage')); break 3; } if (!$this->IsImageFile(strtolower($_FILES['Application_Logo_Image']['name']))){ array_push($errors, GetLang('ErrorAlertMessage_InvalidNameApplicationLogoImage')); break 3; } $uploadedFile = strtolower(basename($_FILES['Application_Logo_Image']['name'])); $uploadedFile = preg_replace('/.*(\..*)$/', 'applicationlogo${1}', $uploadedFile); if(move_uploaded_file($_FILES['Application_Logo_Image']['tmp_name'], (TEMP_DIRECTORY . DIRECTORY_SEPARATOR . $uploadedFile))) { @chmod(TEMP_DIRECTORY . DIRECTORY_SEPARATOR . $uploadedFile, 0666); $val = 'temp/' . $uploadedFile; } if (!$this->IsValidImageFile(TEMP_DIRECTORY . DIRECTORY_SEPARATOR . $uploadedFile, $_FILES['Application_Logo_Image']['type'])){ @unlink(TEMP_DIRECTORY . DIRECTORY_SEPARATOR . $uploadedFile); array_push($errors, GetLang('ErrorAlertMessage_InvalidFormatApplicationLogoImage')); break 3; } } break; // Special case for handling favicon case 'application_favicon': $val = IEM::requestGetPOST('existing_app_favicon', false); if (isset($_FILES['Application_Favicon']) && !empty($_FILES['Application_Favicon']['name'])) { if ($_FILES['Application_Favicon']['error'] != 0 || !@is_uploaded_file($_FILES['Application_Favicon']['tmp_name'])) { array_push($errors, GetLang('ErrorAlertMessage_ErrorApplicationFavicon')); break 3; } if (!$this->IsIconFile(strtolower($_FILES['Application_Favicon']['name']))){ array_push($errors, GetLang('ErrorAlertMessage_InvalidNameApplicationFavicon')); break 3; } $uploadedFile = 'favicon.ico'; if(move_uploaded_file($_FILES['Application_Favicon']['tmp_name'], (TEMP_DIRECTORY . DIRECTORY_SEPARATOR . $uploadedFile))) { @chmod(TEMP_DIRECTORY . DIRECTORY_SEPARATOR . $uploadedFile, 0666); $val = 'temp/' . $uploadedFile; } if (!$this->IsValidIconFile(TEMP_DIRECTORY . DIRECTORY_SEPARATOR . $uploadedFile, $_FILES['Application_Favicon']['type'])){ @unlink(TEMP_DIRECTORY . DIRECTORY_SEPARATOR . $uploadedFile); array_push($errors, GetLang('ErrorAlertMessage_InvalidFormatApplicationFavicon')); break 3; } } break; } $settings[$area] = $val; } } foreach ($all_areas['config'] as $area) { if (isset($_POST[strtolower($area)])) { $val = $_POST[strtolower($area)]; } else { $val = false; } if ($area == 'DATABASE_USER') { if (isset($_POST['database_u'])) { $val = $_POST['database_u']; } } if ($area == 'DATABASE_PASS') { if (isset($_POST['database_p'])) { $val = $_POST['database_p']; } } if ($area == 'APPLICATION_URL') { if (substr($val, -1) == '/') { $val = substr($val, 0, -1); } } $settings[$area] = $val; } unset($all_areas['config']); unset($all_areas['whitelabel']); // look after all of the other settings now. foreach ($all_areas as $p => $area) { if (isset($_POST[strtolower($area)])) { $val = $_POST[strtolower($area)]; } else { $val = false; } if ($area == 'BOUNCE_AGREEDELETE' && isset($_POST['bounce_process'])) { $val = 1; } if ($area == 'TEXTFOOTER') { $val = strip_tags($val); } if ($area == 'SMTP_USERNAME') { if (isset($_POST['smtp_u'])) { $val = $_POST['smtp_u']; } } if ($area == 'SMTP_PASSWORD') { if (isset($_POST['smtp_p'])) { $val = $_POST['smtp_p']; } $val = base64_encode($val); } if ($area == 'BOUNCE_PASSWORD') { if (isset($_POST['bounce_password'])) { $val = $_POST['bounce_password']; } $val = base64_encode($val); } $settings[$area] = $val; } // ----- Settings that cannot be changed $settings['DEFAULTCHARSET'] = SENDSTUDIO_DEFAULTCHARSET; if (!empty($settings['DEFAULTCHARSET'])) { $settings['DEFAULTCHARSET'] = 'UTF-8'; } // ----- // ----- Security settings $settings['SECURITY_WRONG_LOGIN_WAIT'] = intval($settings['SECURITY_WRONG_LOGIN_WAIT']); $settings['SECURITY_WRONG_LOGIN_THRESHOLD_COUNT'] = intval($settings['SECURITY_WRONG_LOGIN_THRESHOLD_COUNT']); $settings['SECURITY_WRONG_LOGIN_THRESHOLD_DURATION'] = intval($settings['SECURITY_WRONG_LOGIN_THRESHOLD_DURATION']) * 60; $settings['SECURITY_BAN_DURATION'] = intval($settings['SECURITY_BAN_DURATION']) * 60; if (!isset($_POST['security_wrong_login_wait_enable'])) { $settings['SECURITY_WRONG_LOGIN_WAIT'] = 0; } if (!isset($_POST['security_wrong_login_threshold_enable'])) { $settings['SECURITY_WRONG_LOGIN_THRESHOLD_COUNT'] = 0; } // ----- $api->Set('Settings', $settings); $result = $api->Save(); // Save warnings if ($result) { $tempRequestWarningsEnabled = IEM::requestGetPOST('credit_percentage_warnings_enable', array()); $tempRequestWarningLevels = IEM::requestGetPOST('credit_percentage_warnings_level', array()); $tempRequestWarnigSubjects = IEM::requestGetPOST('credit_percentage_warnings_subject', array()); $tempRequestWarningEmails = IEM::requestGetPOST('credit_percentage_warnings_text', array()); if (!empty($tempRequestWarningsEnabled) && !empty($tempRequestWarningLevels) && !empty($tempRequestWarningEmails)) { $tempRecords = array(); foreach ($tempRequestWarningLevels as $index => $level) { $tempRecords[] = array( 'enabled' => in_array($index, $tempRequestWarningsEnabled), 'creditlevel' => $level, 'aspercentage' => '1', // FIXME at this stage, only monthly credits warnings are available 'emailsubject' => (isset($tempRequestWarnigSubjects[$index]) ? $tempRequestWarnigSubjects[$index] : ''), 'emailcontents' => (isset($tempRequestWarningEmails[$index]) ? $tempRequestWarningEmails[$index] : '') ); } $result = $api->SaveCreditWarnings($tempRecords); } else { $result = $api->SaveCreditWarnings(array()); } unset($tempRequestWarningsEnabled); unset($tempRequestWarningLevels); unset($tempRequestWarningEmails); } } while(false); } $tabNum = ($_POST['tab_num'] && intval($_POST['tab_num'])) ? intval($_POST['tab_num']) : 1 ; if ($result) { FlashMessage(GetLang('SettingsSaved'), SS_FLASH_MSG_SUCCESS, 'index.php?Page=Settings&Tab='.$tabNum); } else { foreach ($errors as $error) { FlashMessage($error, SS_FLASH_MSG_ERROR); } FlashMessage(GetLang('SettingsNotSaved'), SS_FLASH_MSG_ERROR, 'index.php?Page=Settings&Tab='.$tabNum); } break; default: $this->ShowSettingsPage(); break; } }
/** * InsertChartImage * Sets the variables to display a statistics chart * * @param String $chartname The variable name for the chart * @param String $data_url The URL the chart should get data from * @param Array $settings An array of settings for the chart * * @return Void Returns nothing, sets the variables for displaying the chart */ function InsertChartImage($chartname,$data_url,$settings = null) { $params = array(); if (is_array($settings)) { foreach ($settings as $key => $val) { $params[] = urlencode($key) . "=" . urlencode($val); } } $params = implode('&',$params); if (Settings_API::GDEnabled()) { $GLOBALS[$chartname] = '<img src="' . $data_url . ( $params ? '&' . $params : '') . '&GetAsImg=1" style="display: block;">'; } else { $GLOBALS[$chartname] = '<p>(' . GetLang('GD_Not_Enabled') . ')</p>'; } }
/** * InsertChartImage * Sets the variables to display a statistics chart. * * @param String $chartname The variable name for the chart. * @param String $data_url The URL the chart should get data from. * @param Array $settings An array of settings for the chart. * * @return Void Returns nothing, sets the variables for displaying the chart. */ private static function InsertChartImage($chartname, $data_url, $settings = null, $subaction) { // If this page is for print we'll return an image rather than embedding the flash player if ($subaction == 'print') { $params = array(); if (is_array($settings)) { foreach ($settings as $key => $val) { $params[] = urlencode($key) . "=" . urlencode($val); } } if (self::hasNoData($data_url)) { return ''; } $params = implode('&', $params); if (Settings_API::GDEnabled()) { return '<img src="' . $data_url . ($params ? '&' . $params : '') . '&GetAsImg=1" style="display: block;" />'; } else { return '<p>(' . GetLang('GD_Not_Enabled') . ')</p>'; } } else { $base_url = SENDSTUDIO_APPLICATION_URL . '/admin/'; $transparent = true; $chartType = 'column'; return InsertChart($chartType, $data_url, array('graph_title' => $settings['graph_title']), $transparent, $base_url); } }