HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/PvdBoogaard/indoorski.nl/backup/oude-site/cms/api/class.settings.php
<?php

class iwp_settings extends iwp_engine
{
	public static $PermissionOptions;

	public static function getPermissionOptions ()
	{
		return self::$PermissionOptions;
	}

	/**
	 * Returns a granularity list for this class.
	 *
	 * @param Integer $total Total will be populated with number of rows found in query (by reference)
	 * @param String $filter Filter string, optional
	 * @param Integer $page Page number of records to return, optional
	 * @return Array List of value/text pairs
	 */
	public static function getGranularityList (&$total, &$page, $filter = '')
	{
		iwp_language::getInstance()->Load('admin.settings', true);
		$form = iwp_admin_settings::getInstance()->CreateForm();

		$list = array();
		foreach ($form->Fields() as $key => $field) {
			$settingName = $field->lang->Get('field_'. $key .'_Name');
			if
			(
				!$filter					//	and no filter is specified, or
				||
				(
					$filter
					&&
					stristr($settingName, $filter)	//	a filter is specified and matches this setting name
				)
			) {
				//	qualified, add it to the list of settings
				$list[] = array(
					'value'		=> $key,
					'text'		=> $settingName,
				);
			}
		}

		$total = count($list);

		$limitStart = ($page * IWP_PERMISSIONGRANULARITEMS_PER_PAGE) - IWP_PERMISSIONGRANULARITEMS_PER_PAGE;
		$list = array_slice($list, $limitStart, IWP_PERMISSIONGRANULARITEMS_PER_PAGE);

		return $list;
	}

	/**
	 * Returns a list of settings 'titles' (names) for the supplied ids. Used by the permission management system.
	 *
	 * @param Array $keys
	 * @return Array
	 */
	public static function getTitleList (&$keys)
	{
		$list = array();

		if (count($keys)) {
			$settingsList = iwp_config::GetSystemVars();

			foreach ($settingsList as $key => $value) {
				if (in_array($key, $keys)) {
					$settingName = $key;
					$list[] = array(
						'value' => $key,
						'text' => $settingName
					);
				}
			}
		}

		return $list;
	}

	/**
	 * Creates the iwp_form for use with the settings UI
	 *
	 * @return iwp_form
	 */
	public function CreateForm ()
	{
		$form = new iwp_form();
		$form->EnableTabs = true;

		//	TAB - WEBSITE SETTINGS

		$form->AddTab($this->lang->Get('GeneralSiteSettings'));

		//	Group - Site Status Settings

		$form->AddGroup($this->lang->Get('StatusSettings'));

		$form->AddField('checkbox', 'downForMaintenance');

		//	Group - Site Settings

		$form->AddGroup($this->lang->Get('SiteSettings'));

		$field = $form->AddField('textbox', 'siteName')->DisableLabel();
		$field->AddValidation('IsNotBlank');
		$field->Required = true;


		$field = $form->AddField('textbox', 'siteSlogan')->DisableLabel();
		$field->Required = false;

		/*
		 * As of IWP 5.1 the siteURL is automatically sniffed -- lets just hope it's not an addiction
		 *
		$field = $form->AddField('textbox', 'siteURL')->DisableLabel();
		$field->AddValidation('IsNotBlank');
		$field->Required = true;
		 */

		$form->AddField('textbox', 'siteDesc')->DisableLabel();
		$form->AddField('textbox', 'siteKeywords')->DisableLabel();

		/*
		 * As of IWP 5.1 appPath is automatically sniffed.
		 *
		$form->AddField('textbox', 'appPath')->DisableLabel();
		 */

		$field = $form->AddField('textbox', 'AdminEmail')->DisableLabel();
		$field->AddValidation('IsNotBlank');
		$field->Required = true;

		$form->AddField('textbox', 'ContactEmail')->DisableLabel();

		//	IWP 5 now only supports UTF-8
		// $field = $form->AddField('select', 'charset', $groupName);
		// $this->CharsetOptions($field);

		//	Group - License Settings

		/* $form->AddGroup($this->lang->Get('LicenseSettings'));

		$form->AddField('textbox', 'licenseKey')->DisableLabel()->Required = true;
 */
		//	TAB - BUILT-IN PAGES

		$form->AddTab($this->lang->Get('BuiltInPages'));
		$form->AddGroup($this->lang->Get('BuiltInPageContent'));

		$this->template->Assign(array('tinyMCE', 'width'), '650');
		$this->template->Assign(array('tinyMCE', 'height'), '300');

		$form->AddField('checkbox', 'error_404_edit');
		$form->AddField('wysiwyg', 'error_404')->DisableLabel()->DisableName()->EnableHelpTip()->AddValidation('GetWYSIWYGContent');
		$form->HideRowIfThisNotChecked('error_404', 'error_404_edit');

		$form->AddField('checkbox', 'maintenance_edit');
		$form->AddField('wysiwyg', 'maintenance')->DisableLabel()->DisableName()->EnableHelpTip()->AddValidation('GetWYSIWYGContent');
		$form->HideRowIfThisNotChecked('maintenance', 'maintenance_edit');


		$form->AddField('checkbox', 'search_tips_edit');
		$form->AddField('wysiwyg', 'search_tips')->DisableLabel()->DisableName()->EnableHelpTip()->AddValidation('GetWYSIWYGContent');
		$form->HideRowIfThisNotChecked('search_tips', 'search_tips_edit');

		//	TAB - MISC SETTINGS
		$form->AddTab($this->lang->Get('MiscSettings'));

		//	Group - User Account Settings

		$form->AddGroup($this->lang->Get('UserAccountSettings'));

		$form->AddField('checkbox', 'RestrictUserPictureSize');

		$form->AddField('textbox', 'UserPictureWidth')
			->SetAttribute('style', 'width: 35px;')
			->AddValidation('ValidateUserPictureWidth')
			->Prepend('<img src="images/nodejoin.gif" width="20" height="20">&nbsp;')
			->Required = true;

		$form->AddField('textbox', 'UserPictureHeight')
			->SetAttribute('style', 'width: 35px;')
			->AddValidation('ValidateUserPictureHeight')
			->Prepend('<img src="images/1x1.gif" width="20" height="20">&nbsp;')
			->Required = true;

		$form->RunJsOnPageLoad('iwp.form.BindNumbersOnly("UserPictureHeight");');
		$form->RunJsOnPageLoad('iwp.form.BindNumbersOnly("UserPictureWidth");');

		$form->HideRowIfThisNotChecked(array('UserPictureWidth', 'UserPictureHeight'), 'RestrictUserPictureSize');

		//	Group - Category Settings

		$form->AddGroup($this->lang->Get('CategorySettings'));
		$form->AddField('textbox', 'CategoryContentPerPage')->DisableLabel()->SetAttribute('style', 'width: 35px;')->AddValidation('IsIntGreaterThanZero');
		$form->AddField('checkbox', 'ShowPageNumberOnCategories');

		//	Group - Cache Settings

		$form->AddGroup($this->lang->Get('CacheSettings'));

		$form->AddField('checkbox', 'EnableCache');

		$form->AddField('empty', 'ClearCache')->DisableLabel()->html = '<img src="images/nodejoin.gif" width="20" height="20" />&nbsp;<input type="button" value="'. iwp_htmlentities($this->lang->Get('field_ClearCache_Button')) .'" class="FormButton" onclick="launchCC();" />&nbsp;';

		//	Group - Dates

		$form->AddGroup($this->lang->Get('Dates'));

		$field = $form->AddField('select', 'ShortDateFormat')->SetAttribute('class', 'Field200');
		$this->DateOptions($field, 'short');

		$field = $form->AddField('select', 'LongDateFormat')->SetAttribute('class', 'Field200');
		$this->DateOptions($field, 'long');

		$field = $form->AddField('select', 'DateDelimiter')->SetAttribute('class', 'Field200');
		$field->AddFieldOption('-','- (dash)')->AddFieldOption('/','/ (forward slash)')->AddFieldOption('.','. (fullstop/period)');

		if (version_compare(PHP_VERSION, '5.2.0', '>=')) {
			$field = $form->AddField('select', 'defaultTimezone')->SetAttribute('class', 'Field200')->DisableLabel();
			if ($timezones = DateTimeZone::listIdentifiers()) {
				foreach ($timezones as $timezone) {
					$field->AddFieldOption($timezone, $timezone);
				}
			}
		} else {
			$field = $form->AddField('textbox', 'defaultTimezone')->SetAttribute('class', 'Field200')->DisableLabel();
			$form->AddField('empty', 'defaultTimezoneNote')->DisableLabel()->DisableName()->DisableHelpTip()->html = $this->lang->Get('field_defaultTimezone_Label');
		}

		$field->AddValidation('IsValidTimezone');

		//	Group - Cookie Settings

		$form->AddGroup($this->lang->Get('CookieSettings'));
		$form->AddField('textbox', 'cookiePrefix')->SetAttribute('class', 'Field200');

		//	Group - Database Settings

		if(!IWP::$DemoMode){
			$form->AddGroup($this->lang->Get('DatabaseSettings'));

			$form->AddField('empty', 'dbUser')
				->DisableHelpTip()
				->DisableLabel()
				->html = iwp_config::Get('dbUser');

			$form->AddField('empty', 'dbPass')
				->DisableHelpTip()
				->DisableLabel()
				->html = '**********';

			$form->AddField('empty', 'dbServer')
				->DisableHelpTip()
				->DisableLabel()
				->html = iwp_config::Get('dbServer');

			$form->AddField('empty', 'dbDatabase')
				->DisableHelpTip()
				->DisableLabel()
				->html = iwp_config::Get('dbDatabase');

			$form->AddField('empty', 'tablePrefix')
				->DisableHelpTip()
				->DisableLabel()
				->html = iwp_config::Get('tablePrefix');


			if(iwp_validation::IsBlank(iwp_config::Get('MySQLVersion'))){
				$mysqlVersion = mysql_get_server_info();
			}else{
				$mysqlVersion = iwp_config::Get('MySQLVersion');
			}

			$form->AddField('empty', 'MySQLVersion')->DisableLabel()->html = 'MySQL ' . $mysqlVersion;
		}

		//	Tab - Connection Settings

		$form->AddTab($this->lang->Get('ConnectionSettings'));

		//	Group - Remote HTTP Connection

		$form->AddGroup($this->lang->Get('HTTPConnection'));
		$form->AddField('radio', 'curlorfopen')
			->AddFieldOption('autodetect', 'autodetect')
			->AddFieldOption('curl', 'curl')
			->AddFieldOption('fopen', 'fopen')
			->DisableLabel();

		if(!function_exists('curl_init')) {
			$form->RunJsOnPageLoad('$("#curlorfopen_curl").attr("disabled", "disabled"); $("label[for=curlorfopen_curl]").attr("disabled", "disabled").addClass("graytext").append(" - <i>' . $this->lang->Get('urlCurlNotSupported') . '</i>");');
		}

		if(!ini_get('allow_url_fopen')) {
			$form->RunJsOnPageLoad('$("#curlorfopen_fopen").attr("disabled", "disabled"); $("label[for=curlorfopen_fopen]").attr("disabled", "disabled").addClass("graytext").append(" - <i>' . $this->lang->Get('urlFopenNotSupported') . '</i>");');
		}

		if(!ini_get('allow_url_fopen') && !function_exists('curl_init')) {
			$form->RunJsOnPageLoad('$("#curlorfopen_autodetect").attr("disabled", "disabled"); $("label[for=curlorfopen_autodetect]").attr("disabled", "disabled").addClass("graytext").html("<i>' . $this->lang->Get('NoRemoteConnectionSupported') . '</i>");');
		}

		$form->AddGroup($this->lang->Get('EmailConnection'));

		$form->AddField('radio', 'smtpoption')
			->AddFieldOption('default', 'default')
			->AddFieldOption('usesmtp', 'usesmtp')
			->DisableLabel();

		$form->AddField('textbox', 'smtp_hostname')
			->Prepend('<img src="images/nodejoin.gif" width="20" height="20" />')
			->SetAttribute('style', 'margin-left: 5px;')
			->IsRequired()
			->DisableLabel();

		$form->AddField('textbox', 'smtp_username')
			->SetAttribute('style', 'margin-left: 25px;')
			->DisableLabel();

		$form->AddField('textbox', 'smtp_password')
			->SetAttribute('style', 'margin-left: 25px;')
			->DisableLabel();

		$form->AddField('textbox', 'smtp_port')
			->SetAttribute('style', 'margin-left: 25px;')
			->DisableLabel();

		$form->HideRowIfThisNotChecked(array('smtp_hostname', 'smtp_username', 'smtp_password', 'smtp_port', 'TestSMTP'), 'smtpoption_usesmtp');
		$form->RunJsOnPageLoad('$("#smtpoption_default").bind("change", function () { $("#smtpoption_usesmtp").trigger("change"); });');

		$form->AddField('empty', 'TestSMTP')
			->DisableLabel()
			->DisableName()
			->html = '<input style="margin-left: 25px;" type="button" value="'. iwp_htmlentities($this->lang->Get('field_TestSMTP_Button')) .'" id="testSMTPButton" class="FormButton" />';

		$form->RunJsOnPageLoad('$("#testSMTPButton").bind("click", testSMTPSettings);');


		//	Finalise the form

		foreach ($form->Fields as $fieldName => $field) {
			//	disable form elements for settings the current user does not have access to
			if (!$this->auth->HasPerm('core', 'settings', 'edit', $fieldName)) {
				$field->SetAttribute('disabled', 'disabled')->SetAttribute('readonly', 'readonly');
			}
		}

		return $form;
	}


	/**
	 * Test the SMTP settings from the settings page.
	 *
	 * @return void Doesn't return anything
	 */
	public function remoteTestSMTPSettings() {
		$response = array();
		$subject = sprintf($this->lang->Get('TestSendingSubject'), iwp_config::Get('siteName'));
		$text = sprintf($this->lang->Get('TestSendingEmail'), iwp_config::Get('siteName'));

		$testEmailAddress = $_POST['testEmailAddress'];

		if(!isset($testEmailAddress) || empty($testEmailAddress) || !$this->valid->ValidEmail($testEmailAddress)) {
			$response['success'] = false;
			$response['message'] = $this->lang->Get('SMTPEnterValidEmail');
			die(json_encode($response));
		}
		else {
			$testEmailAddress = $testEmailAddress;
		}

		// this should not use the iwp_email class as it'll configure a smtp server
		// this should remail Email_API
		$email_api = new Email_API();

		$email_api->Set('SMTPServer', $_POST['MailSMTPServer']);

		if(isset($_POST['MailSMTPUsername']) && !empty($_POST['MailSMTPUsername'])) {
			$email_api->Set('SMTPUsername', $_POST['MailSMTPUsername']);
		}

		if(isset($_POST['MailSMTPPassword']) && !empty($_POST['MailSMTPPassword'])) {
			$email_api->Set('SMTPPassword', $_POST['MailSMTPPassword']);
		}

		if(isset($_POST['MailSMTPPort']) && !empty($_POST['MailSMTPPort'])) {
			$email_api->Set('SMTPPort', $_POST['MailSMTPPort']);
		}

		$email_api->Set('Subject', $subject);
		$email_api->Set('FromAddress', 	$testEmailAddress);
		$email_api->Set('ReplyTo', 		$testEmailAddress);
		$email_api->Set('BounceAddress',$testEmailAddress);

		$email_api->AddBody('text', $text);

		$email_api->AddRecipient($testEmailAddress, '', 't');
		$send_result = $email_api->Send();

		if (isset($send_result['success']) && $send_result['success'] > 0) {
			$response['success'] = true;
			$response['message'] = sprintf($this->lang->Get('TestEmailSent'), $testEmailAddress) ;
		} else {
			$failure = array_shift($send_result['fail']);
			$response['success'] = false;
			$msg = $this->lang->Get('TestEmailNotSent');
			$msg = str_replace("\\n", "\n", $msg);
			$response['message'] = sprintf($msg,  $testEmailAddress, $failure[1]) ;
		}

		die(json_encode($response));
	}


	/**
	 * Given a date format string which would be used with date() functions, this function will determine if that format string is 'American'.
	 *
	 * This is determined by checking the position of numeric and abbreviated month format codes in relation to numeric day and year codes.
	 *
	 * @param string $format
	 * @return bool True if the date format was determined to be American. Otherwise false if not, or if it could not be determined at all (could be lacking any month code).
	 */
	public static function IsAmericanDateFormat ($format) {
		if ($format === 'c' || $format === 'r') {
			//	special case for ISO 8601 and RFC 2822
			return false;
		}

		//	strip out codes we're not interested in
		$allCodes = self::$_monthCodes . self::$_yearCodes . self::$_dayCodes;
		$format = preg_replace('#[^'. $allCodes .']#', '', $format);

		//	summarise the different codes into common codes
		$format = preg_replace('#['. self::$_dayCodes .']#', 'd', $format);		//	change all day codes to d
		$format = preg_replace('#['. self::$_monthCodes .']#', 'm', $format);	//	change all month codes to m
		$format = preg_replace('#['. self::$_yearCodes .']#', 'y', $format);	//	change all year codes to y

		$posDate = strpos($format, 'd');
		$posMonth = strpos($format, 'm');
		$posYear = strpos($format, 'y');

		if ($posDate === false || $posMonth === false || $posYear === false) {
			//	incomplete date format, we require at least day month year codes to determine an Americanized date
			return false;
		}
		//	any regular date format should now be reduced to 'dmy', 'ymd', 'mdy' or something similar

		if ($posMonth < $posDate && $posMonth < $posYear) {
			return true;
		}

		return false;
	}

	private static $_monthCodes = 'mMn';
	private static $_yearCodes = 'oYy';
	private static $_dayCodes = 'djN';
}

iwp_settings::$PermissionOptions = array(
	//'full'		=> new iwp_permissionoption(true, false, false),
	'edit'		=> new iwp_permissionoption(true, false, false),
);