mirror of
https://github.com/gtbu/Typesetter-5.3-p8.git
synced 2024-11-14 18:59:19 +01:00
573 lines
14 KiB
PHP
573 lines
14 KiB
PHP
<?php
|
|
|
|
namespace gp\admin;
|
|
|
|
defined('is_running') or die('Not an entry point...');
|
|
|
|
includeFile('tool/Image.php');
|
|
|
|
class Configuration extends \gp\special\Base{
|
|
|
|
protected $variables;
|
|
|
|
public function __construct($args){
|
|
global $langmessage;
|
|
|
|
parent::__construct($args);
|
|
|
|
$this->page->ajaxReplace = array();
|
|
|
|
|
|
//add examples to smtp_hosts
|
|
$langmessage['about_config']['smtp_hosts'] .= 'ssl://smtp.gmail.com:465 ; tls://smtp.live.com:587';
|
|
$langmessage['about_config']['showgplink'] = 'Showing the "powered by" link on your site is a great way to support '.CMS_NAME.' CMS.';
|
|
$langmessage['about_config']['history_limit'] = 'Max: '.gp_backup_limit;
|
|
$langmessage['about_config']['maxthumbsize'] .= ' '.\gp\tool::Link('Admin/Configuration',$langmessage['recreate_all_thumbnails'],'cmd=recreate_thumbs','class="" data-cmd="creq"');
|
|
|
|
$this->variables = array(
|
|
|
|
// these values aren't used
|
|
//'timeoffset'=>'',
|
|
//'dateformat'=>'',
|
|
|
|
/* General Settings */
|
|
'general_settings' => false,
|
|
'title' => '',
|
|
'keywords' => '',
|
|
'desc' => 'textarea',
|
|
|
|
'Interface' => false,
|
|
'colorbox_style' => [
|
|
'minimalistic' => 'Minimalistic',
|
|
'example1' => 'Example 1',
|
|
'example2' => 'Example 2',
|
|
'example3' => 'Example 3',
|
|
'example4' => 'Example 4',
|
|
'example5' => 'Example 5',
|
|
],
|
|
'gallery_legacy_style' => 'boolean',
|
|
'language' => '',
|
|
'langeditor' => '',
|
|
'showsitemap' => 'boolean',
|
|
'showlogin' => 'boolean',
|
|
'showgplink' => 'boolean',
|
|
|
|
'Images' => false,
|
|
'allow_svg_upload' => 'boolean',
|
|
'maximgarea' => 'integer',
|
|
'resize_images' => 'boolean',
|
|
'preserve_icc_profiles' => 'boolean',
|
|
'preserve_image_metadata' => 'boolean',
|
|
'maxthumbsize' => 'integer',
|
|
'maxthumbheight' => 'integer',
|
|
'thumbskeepaspect' => 'boolean',
|
|
|
|
'Performance' => false,
|
|
'auto_redir' => 'integer',
|
|
'history_limit' => 'integer',
|
|
'HTML_Tidy' => '',
|
|
'Report_Errors' => 'boolean',
|
|
'combinejs' => 'boolean',
|
|
'minifyjs' => 'boolean',
|
|
'combinecss' => 'boolean',
|
|
'etag_headers' => 'boolean',
|
|
'space_char' => [
|
|
'_' => 'Underscore "_"',
|
|
'-' => 'Dash "-"'
|
|
],
|
|
|
|
/* Hide Admin UI Settings */
|
|
'Hide Admin UI' => false,
|
|
'admin_ui_autohide_below' => 'integer',
|
|
'admin_ui_hotkey' => '',
|
|
'admin_ui_hotkey_code' => 'hidden',
|
|
|
|
/* Contact Configuration */
|
|
'contact_config' => false,
|
|
'toemail' => '',
|
|
'toname' => '',
|
|
'from_address' => '',
|
|
'from_name' => '',
|
|
'from_use_user' => 'boolean',
|
|
'require_email' => '',
|
|
'contact_advanced' => false,
|
|
'mail_method' => '',
|
|
'sendmail_path' => '',
|
|
'smtp_hosts' => '',
|
|
'smtp_user' => '',
|
|
'smtp_pass' => 'password',
|
|
//'fromemail' => '',
|
|
|
|
'reCaptcha' => false,
|
|
'recaptcha_public' => '',
|
|
'recaptcha_private' => '',
|
|
'recaptcha_language' => '',
|
|
);
|
|
|
|
}
|
|
|
|
public function RunScript(){
|
|
|
|
$cmd = \gp\tool::GetCommand();
|
|
switch($cmd){
|
|
case 'save_config':
|
|
$this->SaveConfig();
|
|
break;
|
|
case 'recreate_thumbs':
|
|
$this->RecreateThumbs();
|
|
break;
|
|
}
|
|
|
|
$this->showForm();
|
|
}
|
|
|
|
|
|
/**
|
|
* Save the posted configuration
|
|
*
|
|
*/
|
|
protected function SaveConfig(){
|
|
global $config, $langmessage;
|
|
|
|
$config_before = $config;
|
|
$possible = $this->getPossible();
|
|
|
|
foreach($possible as $key => $curr_possible){
|
|
|
|
if( $curr_possible == 'boolean' ){
|
|
if( isset($_POST[$key]) && ($_POST[$key] == 'true') ){
|
|
$config[$key] = true;
|
|
}else{
|
|
$config[$key] = false;
|
|
}
|
|
|
|
}elseif( $curr_possible == 'integer' ){
|
|
if( isset($_POST[$key]) && ( is_numeric($_POST[$key]) || $_POST[$key] == '' ) ){ // also allow empty values
|
|
$config[$key] = $_POST[$key];
|
|
}
|
|
|
|
}elseif( isset($_POST[$key]) ){
|
|
$config[$key] = $_POST[$key];
|
|
}
|
|
}
|
|
|
|
|
|
$config['history_limit'] = min($config['history_limit'],gp_backup_limit);
|
|
|
|
if( !\gp\admin\Tools::SaveConfig(true) ){
|
|
return false;
|
|
}
|
|
|
|
|
|
if( isset($_GET['gpreq']) && $_GET['gpreq'] == 'json' ){
|
|
msg($langmessage['SAVED'].' '.$langmessage['REFRESH']);
|
|
}else{
|
|
msg($langmessage['SAVED']);
|
|
}
|
|
|
|
//resize thumbnails
|
|
if(
|
|
$config_before['preserve_icc_profiles'] !== $config['preserve_icc_profiles']
|
|
|| $config_before['preserve_image_metadata'] !== $config['preserve_image_metadata']
|
|
|| $config_before['maxthumbsize'] !== $config['maxthumbsize']
|
|
|| $config_before['maxthumbheight'] !== $config['maxthumbheight']
|
|
|| $config_before['thumbskeepaspect'] !== $config['thumbskeepaspect']
|
|
){
|
|
msg(\gp\tool::Link(
|
|
'Admin/Configuration',
|
|
$langmessage['recreate_all_thumbnails'],
|
|
'cmd=recreate_thumbs',
|
|
[
|
|
'class' => '',
|
|
'data-cmd' => 'creq',
|
|
]
|
|
));
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private function getValues(){
|
|
global $config;
|
|
|
|
$mailer = new \gp\tool\Emailer();
|
|
|
|
if( $_SERVER['REQUEST_METHOD'] != 'POST'){
|
|
$show = $config;
|
|
}else{
|
|
$show = $_POST;
|
|
}
|
|
if( empty($show['recaptcha_language']) ){
|
|
$show['recaptcha_language'] = 'inherit';
|
|
}
|
|
|
|
if( empty($show['from_address']) ){
|
|
$show['from_address'] = $mailer->From_Address();
|
|
}
|
|
if( empty($show['from_name']) ){
|
|
$show['from_name'] = $mailer->From_Name();
|
|
}
|
|
if( empty($show['mail_method']) ){
|
|
$show['mail_method'] = $mailer->Mail_Method();
|
|
}
|
|
|
|
//suhosin will stop the script if a POST value contains a real path like /usr/sbin/sendmail
|
|
//if( empty($show['sendmail_path']) ){
|
|
// $show['sendmail_path'] = $mailer->Sendmail_Path();
|
|
//}
|
|
|
|
return $show;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get possible configuration values
|
|
*
|
|
*/
|
|
protected function getPossible(){
|
|
global $dataDir,$langmessage;
|
|
|
|
$possible = $this->variables;
|
|
|
|
$langDir = $dataDir.'/include/thirdparty/ckeditor/lang'; //ckeditor
|
|
|
|
$possible['langeditor'] = \gp\tool\Files::readDir($langDir,'js');
|
|
unset($possible['langeditor']['_languages']);
|
|
$possible['langeditor']['inherit'] = ' '.$langmessage['default']; //want it to be the first in the list
|
|
asort($possible['langeditor']);
|
|
|
|
|
|
//recaptcha language
|
|
$possible['recaptcha_language'] = [];
|
|
$possible['recaptcha_language']['inherit'] = $langmessage['default'];
|
|
|
|
// According to https://developers.google.com/recaptcha/docs/language
|
|
$recaptcha_languages = [
|
|
'af', 'am', 'ar', 'az',
|
|
'bn', 'bg',
|
|
'ca', 'cs',
|
|
'da', 'de', 'de-AT', 'de-CH',
|
|
'el', 'en', 'en-GB', 'es', 'es-419', 'et', 'eu',
|
|
'fa', 'fi', 'fil', 'fr', 'fr-CA',
|
|
'gl', 'gu',
|
|
'hi', 'hr', 'hu', 'hy',
|
|
'id', 'is', 'it', 'iw',
|
|
'ja',
|
|
'ka', 'kn', 'ko',
|
|
'lo', 'lt', 'lv',
|
|
'ml', 'mn', 'mr', 'ms',
|
|
'nl', 'no',
|
|
'pl', 'pt', 'pt-BR', 'pt-PT',
|
|
'ro', 'ru',
|
|
'si', 'sk', 'sl', 'sr', 'sv', 'sw',
|
|
'ta', 'te', 'th', 'tr',
|
|
'uk', 'ur',
|
|
'vi',
|
|
'zh-HK', 'zh-CN', 'zh-TW', 'zu',
|
|
];
|
|
foreach($recaptcha_languages as $lang){
|
|
$possible['recaptcha_language'][$lang] = $lang;
|
|
}
|
|
|
|
//website language
|
|
$possible['language'] = $this->GetPossibleLanguages();
|
|
|
|
//tidy
|
|
if( function_exists('tidy_parse_string') ){
|
|
$possible['HTML_Tidy'] = [
|
|
'off' => $langmessage['Off'],
|
|
'' => $langmessage['On']
|
|
];
|
|
}else{
|
|
$possible['HTML_Tidy'] = [''=>'Unavailable'];
|
|
}
|
|
|
|
//required email fields
|
|
$possible['require_email'] = [
|
|
'none' => 'None',
|
|
'' => 'Subject & Message',
|
|
'email' => 'Subject, Message & Email'
|
|
];
|
|
|
|
|
|
//see xoopsmultimailer.php
|
|
$possible['mail_method'] = [
|
|
'mail' => 'PHP mail()',
|
|
'sendmail' => 'sendmail',
|
|
'smtp' => 'smtp',
|
|
'smtpauth' => 'SMTPAuth'
|
|
];
|
|
|
|
//CDN
|
|
foreach(\gp\tool\Output\Combine::$scripts as $key => $script_info){
|
|
if( !isset($script_info['cdn']) ){
|
|
continue;
|
|
}
|
|
|
|
$config_key = 'cdn_'.$key;
|
|
|
|
if( !array_key_exists($config_key, $possible) ){
|
|
continue;
|
|
}
|
|
|
|
$opts = array_keys($script_info['cdn']);
|
|
$possible[$config_key] = array_combine($opts, $opts);
|
|
array_unshift($possible[$config_key],$langmessage['None']);
|
|
}
|
|
|
|
gpSettingsOverride('configuration',$possible);
|
|
|
|
return $possible;
|
|
}
|
|
|
|
|
|
/**
|
|
* Return a list of possible languages
|
|
* Based on the files in /include/languages
|
|
*
|
|
*/
|
|
private function GetPossibleLanguages(){
|
|
global $dataDir;
|
|
$lang_dir = $dataDir.'/include/languages';
|
|
|
|
$files = scandir($lang_dir);
|
|
$languages = array();
|
|
foreach($files as $file){
|
|
if( $file == '.' || $file == '..' || strpos($file,'main.inc') === false ){
|
|
continue;
|
|
}
|
|
|
|
$languages[] = str_replace('.main.inc','',$file);
|
|
}
|
|
|
|
return array_combine($languages, $languages);
|
|
}
|
|
|
|
|
|
/**
|
|
* Display configuration settings
|
|
*
|
|
*/
|
|
protected function showForm(){
|
|
global $langmessage;
|
|
|
|
$possible_values = $this->getPossible();
|
|
$array = $this->getValues();
|
|
|
|
echo '<form action="'.\gp\tool::GetUrl($this->page->requested).'" method="post">';
|
|
|
|
|
|
|
|
//order by the possible values
|
|
$opened = false;
|
|
foreach($possible_values as $key => $possible_value){
|
|
|
|
if( $possible_value === false ){
|
|
if( $opened ){
|
|
echo '</table>';
|
|
$this->SaveAllButton(false);
|
|
echo '<br/>';
|
|
}
|
|
echo '<h2>';
|
|
if( isset($langmessage[$key]) ){
|
|
echo $langmessage[$key];
|
|
}else{
|
|
echo str_replace('_',' ',$key);
|
|
}
|
|
echo '</h2>';
|
|
echo '<table class="bordered configuration">';
|
|
$opened = true;
|
|
continue;
|
|
}
|
|
|
|
if( isset($array[$key]) ){
|
|
$value = $array[$key];
|
|
}else{
|
|
$value = '';
|
|
}
|
|
|
|
echo "\n\n";
|
|
|
|
$tr_class_attr = '';
|
|
if( !is_array($possible_value) && $possible_value == 'hidden' ){
|
|
$tr_class_attr = ' class="nodisplay"';
|
|
}
|
|
echo '<tr' . $tr_class_attr . '><td style="white-space:nowrap">';
|
|
if( isset($langmessage[$key]) ){
|
|
echo $langmessage[$key];
|
|
}else{
|
|
echo str_replace('_',' ',$key);
|
|
}
|
|
echo '</td><td>';
|
|
|
|
|
|
if( is_array($possible_value) ){
|
|
self::formSelect($key,$possible_value,$value);
|
|
}else{
|
|
switch($possible_value){
|
|
case 'boolean':
|
|
$this->formCheckbox($key,$value);
|
|
break;
|
|
case 'textarea':
|
|
$this->formTextarea($key,$value);
|
|
break;
|
|
default:
|
|
$this->formInput($key,$value,$possible_value);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( isset($langmessage['about_config'][$key]) ){
|
|
echo $langmessage['about_config'][$key];
|
|
}
|
|
echo '</td></tr>';
|
|
|
|
}
|
|
|
|
echo '</table>';
|
|
|
|
|
|
$this->SaveAllButton(true);
|
|
echo '</form>';
|
|
}
|
|
|
|
|
|
/**
|
|
* Display Save buttons
|
|
*
|
|
*/
|
|
protected function SaveButtons(){
|
|
global $langmessage;
|
|
|
|
|
|
echo '<div style="margin:1em 0">';
|
|
echo '<input type="hidden" name="cmd" value="save_config" />';
|
|
|
|
if( isset($_GET['gpreq']) && $_GET['gpreq'] == 'json' ){
|
|
echo '<input value="'.$langmessage['save'].'" type="submit" name="aaa" accesskey="s" class="gppost gpsubmit" />';
|
|
}else{
|
|
echo '<input value="'.$langmessage['save'].'" type="submit" name="aaa" accesskey="s" class="gpsubmit"/>';
|
|
}
|
|
|
|
echo '</div>';
|
|
|
|
echo '<p class="admin_note">';
|
|
echo '<b>';
|
|
echo $langmessage['see_also'];
|
|
echo '</b> ';
|
|
echo \gp\tool::Link('Admin/Preferences',$langmessage['Preferences'],'','data-cmd="gpabox"');
|
|
echo '</p>';
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Display Save All buttons
|
|
* @param boolean $is_last If true include admin notice and hidden cmd input
|
|
*/
|
|
protected function SaveAllButton($is_last=true){
|
|
global $langmessage;
|
|
|
|
echo '<div style="margin:1em 0">';
|
|
|
|
if( $is_last ){
|
|
echo '<input type="hidden" name="cmd" value="save_config" />';
|
|
}
|
|
|
|
if( isset($_GET['gpreq']) && $_GET['gpreq'] == 'json' ){
|
|
echo '<input value="' . $langmessage['Save All'] . '" type="submit" name="aaa" accesskey="s" class="gppost gpsubmit" />';
|
|
}else{
|
|
echo '<input value="' . $langmessage['Save All'] . '" type="submit" name="aaa" accesskey="s" class="gpsubmit"/>';
|
|
}
|
|
|
|
echo '</div>';
|
|
|
|
if( $is_last ){
|
|
echo '<p class="admin_note">';
|
|
echo '<b>';
|
|
echo $langmessage['see_also'];
|
|
echo '</b> ';
|
|
echo \gp\tool::Link('Admin/Preferences',$langmessage['Preferences'],'','data-cmd="gpabox"');
|
|
echo '</p>';
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Form Functions
|
|
*
|
|
*/
|
|
|
|
public function formCheckbox($key,$value){
|
|
$checked = '';
|
|
if( $value && $value !== 'false' ){
|
|
$checked = ' checked="checked"';
|
|
}
|
|
echo '<input type="hidden" name="'.$key.'" value="false" '.$checked.'/> ';
|
|
echo '<input type="checkbox" name="'.$key.'" value="true" '.$checked.'/> ';
|
|
}
|
|
|
|
public function formInput($name,$value,$type='text'){
|
|
echo "\n<div>";
|
|
echo '<input id="'.$name.'" name="'.$name.'" size="50" value="'.htmlspecialchars($value).'" type="'.$type.'" class="gpinput"/>';
|
|
echo '</div>';
|
|
}
|
|
|
|
public function formTextarea($name,$value){
|
|
global $langmessage;
|
|
$count_label = sprintf($langmessage['_characters'],'<span>'.strlen($value).'</span>');
|
|
echo '<span class="show_character_count gptextarea">';
|
|
echo '<textarea id="'.$name.'" name="'.$name.'" cols="50" rows="2">'.htmlspecialchars($value).'</textarea>';
|
|
echo '<span class="character_count">'.$count_label.'</span>';
|
|
echo '</span>';
|
|
}
|
|
|
|
public static function formSelect($name,$possible,$value=null){
|
|
global $languages;
|
|
|
|
foreach($possible as $key => &$val){
|
|
if( isset($languages[$val]) ){
|
|
$val = $languages[$val].' ('.$val.')';
|
|
}
|
|
}
|
|
|
|
echo \gp\tool\HTML::Select( $possible, $value, ' name="'.$name.'" class="gpselect"');
|
|
}
|
|
|
|
|
|
/**
|
|
* Recreate all of the thumbnails according to the size in the configuration
|
|
* TODO: With lots of images, this may easily exceed PHP script runtime or available memory
|
|
* and should be broken up into consecutive AJAX calls
|
|
*/
|
|
function RecreateThumbs($dir_rel = ''){
|
|
global $dataDir;
|
|
|
|
$dir_full = $dataDir.'/data/_uploaded'.$dir_rel;
|
|
$files = scandir($dir_full);
|
|
|
|
foreach($files as $file){
|
|
|
|
if( $file == '.' || $file == '..' || $file == 'thumbnails' ){
|
|
continue;
|
|
}
|
|
|
|
$file_full = $dir_full.'/'.$file;
|
|
$file_rel = $dir_rel.'/'.$file;
|
|
|
|
if( is_dir($file_full) ){
|
|
$this->RecreateThumbs($file_rel);
|
|
continue;
|
|
}
|
|
|
|
if( \gp\admin\Content\Uploaded::IsImg($file_full) ){
|
|
\gp\admin\Content\Uploaded::CreateThumbnail($file_full);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|