X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=plugins%2Fadministrator%2Foptions.php;h=d9ce252d07dd880cd2d229c29e1409178916061e;hp=da4e46a105541db96c76c37f511cf5812642af36;hb=1710ad6563993035601d94fe96f68c9b964e866c;hpb=781da5d46ad278a22a427618b86628f75b40136c diff --git a/plugins/administrator/options.php b/plugins/administrator/options.php index da4e46a1..d9ce252d 100644 --- a/plugins/administrator/options.php +++ b/plugins/administrator/options.php @@ -1,20 +1,26 @@ $j + 1 && - $line{$j}.$line{$j+1} == '*/' ) { + $line[$j].$line[$j+1] == '*/' ) { $mode = ''; $j++; } break; case 'D': // Delimiter detect - switch ( $line{$j} ) { + switch ( $line[$j] ) { case '"': case "'": // Double quote string - $delimiter = $value = $line{$j}; + $delimiter = $value = $line[$j]; $mode = 'S'; break; case ' ': @@ -98,22 +110,22 @@ function parseConfig( $cfg_file ) { default: if ( strtoupper( substr( $line, $j, 4 ) ) == 'TRUE' ) { // Boolean TRUE - $newcfg{$key} = 'TRUE'; + $newcfg[$key] = 'TRUE'; $key = ''; $mode = ';'; } else if ( strtoupper( substr( $line, $j, 5 ) ) == 'FALSE' ) { - $newcfg{$key} = 'FALSE'; + $newcfg[$key] = 'FALSE'; $key = ''; $mode = ';'; } else { // Number or function call $mode = 'N'; - $value = $line{$j}; + $value = $line[$j[; } } break; default: - if ( $line{$j} == '$' ) { + if ( $line[$j] == '$' ) { // We must detect $key name $mode = 'K'; $key = '$'; @@ -122,10 +134,10 @@ function parseConfig( $cfg_file ) { // Skip untill next ; $mode = ';'; $j += 6; - } else if ( $line{$j}.$line{$j+1} == '/*' ) { + } else if ( $line[$j].$line[$j+1] == '/*' ) { $mode = 'C'; $j++; - } else if ( $line{$j} == '#' || $line{$j}.$line{$j+1} == '//' ) { + } else if ( $line[$j] == '#' || $line[$j].$line[$j+1] == '//' ) { // Delete till the end of the line $j = $s; } @@ -134,91 +146,98 @@ function parseConfig( $cfg_file ) { } } -/* Change paths containing SM_PATH to admin-friendly paths - relative to the config dir, i.e.: - '' --> - SM_PATH . 'images/logo.gif' --> ../images/logo.gif - '/absolute/path/logo.gif' --> /absolute/path/logo.gif - 'http://whatever/' --> http://whatever - Note removal of quotes in returned value -*/ +/** + * Change paths containing SM_PATH to admin-friendly paths + * relative to the config dir, i.e.: + * '' --> + * SM_PATH . 'images/logo.gif' --> ../images/logo.gif + * '/absolute/path/logo.gif' --> /absolute/path/logo.gif + * 'http://whatever/' --> http://whatever + * Note removal of quotes in returned value + * + * @param string $old_path path that has to be converted + * @return string new path + * @access private + */ function change_to_rel_path($old_path) { - $new_path = str_replace("SM_PATH . '", "../", $old_path); + $new_path = str_replace("SM_PATH . '", "../", $old_path); $new_path = str_replace("../config/","", $new_path); $new_path = str_replace("'","", $new_path); return $new_path; } -/* Change relative path (relative to config dir) to - internal SM_PATH, i.e.: - empty_string --> '' - ../images/logo.gif --> SM_PATH . 'images/logo.gif' - images/logo.gif --> SM_PATH . 'config/images/logo.gif' - /absolute/path/logo.gif --> '/absolute/path/logo.gif' - http://whatever/ --> 'http://whatever' -*/ +/** + * Change relative path (relative to config dir) to + * internal SM_PATH, i.e.: + * empty_string --> '' + * ../images/logo.gif --> SM_PATH . 'images/logo.gif' + * images/logo.gif --> SM_PATH . 'config/images/logo.gif' + * C:/absolute/win/path --> 'C:/absolute/win/path' + * /absolute/path/logo.gif --> '/absolute/path/logo.gif' + * http://whatever/ --> 'http://whatever' + * + * @param string $old_path path that has to be converted + * @return string new path + * @access private +*/ function change_to_sm_path($old_path) { - if ( $old_path === '' || $old_path == "''" ) { - return "''"; - } elseif ( preg_match("/^(\/|http)/", $old_path) ) { - return "'" . $old_path . "'"; - } elseif ( preg_match("/^(\$|SM_PATH)/", $old_path) ) { - return $old_path; - } - - $new_path = ''; - $rel_path = explode("../", $old_path); - if ( count($rel_path) > 2 ) { - // Since we're relative to the config dir, - // more than 1 ../ puts us OUTSIDE the SM tree. - // get full path to config.php, then pop the filename - $abs_path = explode('/', realpath (SM_PATH . 'config/config.php')); - array_pop ($abs_path); - foreach ( $rel_path as $subdir ) { - if ( $subdir === '' ) { - array_pop ($abs_path); - } else { - array_push($abs_path, $subdir); - } - } - foreach ($abs_path as $subdir) { - $new_path .= $subdir . '/'; - } - $new_path = "'$new_path'"; - } elseif ( count($rel_path) > 1 ) { - // we're within the SM tree, prepend SM_PATH - $new_path = str_replace('../',"SM_PATH . '", $old_path . "'"); - } else { - // Last, if it's a relative path without a .. prefix, - // we're somewhere within the config dir, so prepend - // SM_PATH . 'config/ - $new_path = "SM_PATH . 'config/" . $old_path . "'"; - } - return $new_path; + if ( $old_path === '' || $old_path == "''" ) { + return "''"; + } elseif ( preg_match("/^(\/|http)/", $old_path) || + substr($old_path,1,2) == ':/' ) { + return "'" . $old_path . "'"; + } elseif ( preg_match("/^(\$|SM_PATH)/", $old_path) ) { + return $old_path; + } + + $new_path = ''; + $rel_path = explode("../", $old_path); + if ( count($rel_path) > 2 ) { + // Since we're relative to the config dir, + // more than 1 ../ puts us OUTSIDE the SM tree. + // get full path to config.php, then pop the filename + $abs_path = explode('/', realpath (SM_PATH . 'config/config.php')); + array_pop ($abs_path); + foreach ( $rel_path as $subdir ) { + if ( $subdir === '' ) { + array_pop ($abs_path); + } else { + array_push($abs_path, $subdir); + } + } + foreach ($abs_path as $subdir) { + $new_path .= $subdir . '/'; + } + $new_path = "'$new_path'"; + } elseif ( count($rel_path) > 1 ) { + // we're within the SM tree, prepend SM_PATH + $new_path = str_replace('../',"SM_PATH . '", $old_path . "'"); + } else { + // Last, if it's a relative path without a .. prefix, + // we're somewhere within the config dir, so prepend + // SM_PATH . 'config/ + $new_path = "SM_PATH . 'config/" . $old_path . "'"; + } + return $new_path; } /* ---------------------- main -------------------------- */ +/** main SquirrelMail include */ +require('../../include/init.php'); +/* configuration definitions */ +include_once(SM_PATH . 'plugins/administrator/defines.php'); +/* additional functions */ +include_once(SM_PATH . 'plugins/administrator/auth.php'); -/** @ignore */ -define('SM_PATH','../../'); - -/* SquirrelMail required files. */ -require_once(SM_PATH . 'include/validate.php'); -require_once(SM_PATH . 'functions/page_header.php'); -require_once(SM_PATH . 'functions/imap.php'); -require_once(SM_PATH . 'include/load_prefs.php'); -require_once(SM_PATH . 'plugins/administrator/defines.php'); -require_once(SM_PATH . 'plugins/administrator/auth.php'); - -GLOBAL $data_dir, $username; +global $data_dir, $username; if ( !adm_check_user() ) { header('Location: ' . SM_PATH . 'src/options.php') ; exit; } -displayPageHeader($color, 'None'); +displayPageHeader($color); $newcfg = array( ); @@ -240,29 +259,29 @@ $colapse = array( 'Titles' => 'off', 'Group7' => getPref($data_dir, $username, 'adm_Group7', 'on' ), 'Group8' => getPref($data_dir, $username, 'adm_Group8', 'on' ), 'Group9' => getPref($data_dir, $username, 'adm_Group9', 'on' ), - 'Group10' => getPref($data_dir, $username, 'adm_Group10', 'on' ) ); + 'Group10' => getPref($data_dir, $username, 'adm_Group10', 'on' ), + 'Group11' => getPref($data_dir, $username, 'adm_Group11', 'on' ) ); /* look in $_GET array for 'switch' */ if ( sqgetGlobalVar('switch', $switch, SQ_GET) ) { if ( $colapse[$switch] == 'on' ) { - $colapse[$switch] = 'off'; + $colapse[$switch] = 'off'; } else { - $colapse[$switch] = 'on'; + $colapse[$switch] = 'on'; } setPref($data_dir, $username, "adm_$switch", $colapse[$switch] ); } -echo "
" . - "
". - "" , - "", - ""; +echo '' . + '
" . _("Configuration Administrator") . "
"; - -echo ""; -echo _("Note: it is recommended that you configure your system using conf.pl, and not this plugin. conf.pl contains additional information regarding the purpose of variables and appropriate values, as well as additional verification steps."); -echo "
"; -echo _("Run or consult conf.pl should you run into difficulty with your configuration."); -echo "
'. + ''. + ''. + ''; $act_grp = 'Titles'; /* Active group */ @@ -290,9 +309,9 @@ foreach ( $newcfg as $k => $v ) { } else if ( $l == 'false' ) { $v = 'FALSE'; $type = SMOPT_TYPE_BOOLEAN; - } else if ( $v{0} == "'" ) { + } else if ( $v[0] == "'" ) { $type = SMOPT_TYPE_STRING; - } else if ( $v{0} == '"' ) { + } else if ( $v[0] == '"' ) { $type = SMOPT_TYPE_STRING; } @@ -302,12 +321,16 @@ foreach ( $newcfg as $k => $v ) { $type = SMOPT_TYPE_PLUGINS; } else if ( substr( $k, 0, 13 ) == '$ldap_server[' ) { $type = SMOPT_TYPE_LDAP; + } else if ( substr( $k, 0, 9 ) == '$fontsets' || + substr( $k, 0, 13 ) == '$aTemplateSet' ) { + $type = SMOPT_TYPE_CUSTOM; } - if( $type == SMOPT_TYPE_TITLE || $colapse[$act_grp] == 'off' ) { + if ( $type == SMOPT_TYPE_TITLE || $colapse[$act_grp] == 'off' ) { switch ( $type ) { case SMOPT_TYPE_LDAP: + case SMOPT_TYPE_CUSTOM: case SMOPT_TYPE_PLUGINS: case SMOPT_TYPE_THEME: case SMOPT_TYPE_HIDDEN: @@ -315,7 +338,7 @@ foreach ( $newcfg as $k => $v ) { case SMOPT_TYPE_EXTERNAL: echo ""; + ''; break; case SMOPT_TYPE_TITLE: if ( $colapse[$k] == 'on' ) { @@ -323,9 +346,9 @@ foreach ( $newcfg as $k => $v ) { } else { $sw = '(-)'; } - echo ""; + echo ''; $act_grp = $k; break; case SMOPT_TYPE_COMMENT: @@ -339,20 +362,21 @@ foreach ( $newcfg as $k => $v ) { echo "\n"; break; case SMOPT_TYPE_INTEGER: - /* look for variable $e in POST, fill into $v */ - if ( sqgetGlobalVar($e, $v, SQ_POST) ) { - $v = intval( $v ); + /* look for variable $e in POST, fill into $v */ + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = intval( $new_v ); $newcfg[$k] = $v; } echo "\n"; break; case SMOPT_TYPE_NUMLIST: - if ( sqgetGlobalVar($e, $v, SQ_POST) ) { + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = $new_v; $newcfg[$k] = $v; } echo "\n"; break; case SMOPT_TYPE_STRLIST: - if ( sqgetGlobalVar($e, $v, SQ_POST) ) { - $v = '"' . $v . '"'; + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = '"' . $new_v . '"'; $newcfg[$k] = $v; } echo "\n"; break; case SMOPT_TYPE_STRING: - if ( sqgetGlobalVar($e, $v, SQ_POST) ) { - $v = '"' . $v . '"'; + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = '"' . addslashes($new_v) . '"'; $newcfg[$k] = $v; } if ( $v == '""' && isset( $defcfg[$k]['default'] ) ) { $v = "'" . $defcfg[$k]['default'] . "'"; $newcfg[$k] = $v; } - echo "\n"; break; case SMOPT_TYPE_BOOLEAN: - if ( sqgetGlobalVar($e, $v, SQ_POST) ) { + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = $new_v; $newcfg[$k] = $v; } else { $v = strtoupper( $v ); } if ( $v == 'TRUE' ) { - $ct = ' checked'; + $ct = ' checked="checked"'; $cf = ''; } else { $ct = ''; - $cf = ' checked'; + $cf = ' checked="checked"'; } echo "\n"; break; - case SMOPT_TYPE_PATH: - if ( sqgetGlobalVar($e, $v, SQ_POST) ) { - $v = change_to_sm_path($v); - $newcfg[$k] = $v; + case SMOPT_TYPE_PATH: + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + // FIXME: fix use of $data_dir in $attachment_dir + $v = change_to_sm_path($new_v); + $newcfg[$k] = $v; } if ( $v == "''" && isset( $defcfg[$k]['default'] ) ) { $v = change_to_sm_path($defcfg[$k]['default']); $newcfg[$k] = $v; } - echo "\n"; - break; + echo "\n"; + break; default: echo "'. - "". - "". + "". + "". "\n"; $i++; @@ -508,104 +538,117 @@ if ( $colapse['Group8'] == 'on' ) { } else { $sw = '(-)'; } -echo "'; - -if( $colapse['Group8'] == 'off' ) { - - $plugpath = SM_PATH . 'plugins/'; - if ( file_exists($plugpath) ) { - $fd = opendir( $plugpath ); - $op_plugin = array(); - $p_count = 0; - while (false !== ($file = readdir($fd))) { - if ($file != '.' && $file != '..' && $file != 'CVS' && is_dir($plugpath . $file) ) { - $op_plugin[] = $file; - $p_count++; - } - } - closedir($fd); - asort( $op_plugin ); - - /* Lets get the plugins that are active */ - $plugins = array(); - if ( sqgetGlobalVar('plg', $v, SQ_POST) ) { - foreach ( $op_plugin as $plg ) { - if ( sqgetGlobalVar("plgs_$plg", $v, SQ_POST) && $v == 'on' ) { - $plugins[] = $plg; +echo ''; + +if ( $colapse['Group8'] == 'off' ) { + + $plugpath = SM_PATH . 'plugins/'; + if ( file_exists($plugpath) ) { + $fd = opendir( $plugpath ); + $op_plugin = array(); + $p_count = 0; + while (false !== ($file = readdir($fd))) { + if ($file != '.' && $file != '..' && $file != 'CVS' && is_dir($plugpath . $file) ) { + $op_plugin[] = $file; + $p_count++; } } - $i = 0; - foreach ( $plugins as $plg ) { - $k = "\$plugins[$i]"; - $newcfg[$k] = "'$plg'"; - $i++; - } - while ( isset( $newcfg["\$plugins[$i]"] ) ) { - $k = "\$plugins[$i]"; - $newcfg[$k] = ''; - $i++; - } - } else { - $i = 0; - while ( isset( $newcfg["\$plugins[$i]"] ) ) { - $k = "\$plugins[$i]"; - $v = $newcfg[$k]; - $plugins[] = substr( $v, 1, strlen( $v ) - 2 ); - $i++; - } - } - echo "'; - } else { - echo '\n"; - } + echo ''; + } else { + echo '\n"; + } } -echo "\n" , +echo '\n". '
'. + _("Configuration Administrator").'
'. + _("Note: it is recommended that you configure your system using conf.pl, and not this plugin. conf.pl contains additional information regarding the purpose of variables and appropriate values, as well as additional verification steps."). + '
'. + _("Run or consult conf.pl should you run into difficulty with your configuration."). + '
$name" . $defcfg[$k]['value'] . - "
" . - "$sw " . - "$name
'. + "". + ''.$sw.' '.$name.'
$name". - ""; + ""; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name"; @@ -360,7 +384,7 @@ foreach ( $newcfg as $k => $v ) { foreach ( $defcfg[$k]['posvals'] as $kp => $vp ) { echo ""; } @@ -371,8 +395,8 @@ foreach ( $newcfg as $k => $v ) { echo "
$name". @@ -380,7 +404,7 @@ foreach ( $newcfg as $k => $v ) { foreach ( $defcfg[$k]['posvals'] as $kp => $vp ) { echo ""; } @@ -392,70 +416,76 @@ foreach ( $newcfg as $k => $v ) { break; case SMOPT_TYPE_TEXTAREA: - if ( sqgetGlobalVar($e, $v, SQ_POST) ) { - $v = '"' . $v . '"'; + if ( sqgetGlobalVar($e, $new_v, SQ_POST) ) { + $v = '"' . addslashes($new_v) . '"'; $newcfg[$k] = str_replace( "\n", '', $v ); } - echo "
$name". - ""; + echo "
$name" + .""; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name". - ""; + echo "
$name" + ."'; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name" . - "" . _("Yes") . - "" . _("No"); + "" . _("Yes") . + "" . _("No"); if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } echo "
$name". - ""; + echo "
$name". + "'; if ( isset( $defcfg[$k]['comment'] ) ) { echo '   ' . $defcfg[$k]['comment']; } - echo "
$name" . "$v"; @@ -487,15 +517,15 @@ if ( $colapse['Group7'] == 'off' ) { $e2 = "theme_path_$i"; if ( sqgetGlobalVar($e, $v2, SQ_POST) ) { $v2 = change_to_sm_path($v2); - $newcfg[$k2] = $v2; + $newcfg[$k2] = $v2; } else { $v2 = $newcfg[$k2]; } $name = substr( $v1, 1, strlen( $v1 ) - 2 ); $path = change_to_rel_path($v2); echo '
$i. $i.
" . - "$sw " . - _("Plugins") . '
'. + ''. + $sw.' '._("Plugins").'
' . - "". - "\n"; - } - echo '
"; - foreach ( $op_plugin as $plg ) { - if ( in_array( $plg, $plugins ) ) { - $sw = ' checked'; + closedir($fd); + asort( $op_plugin ); + + /* Lets get the plugins that are active */ + $plugins = array(); + if ( sqgetGlobalVar('plg', $v, SQ_POST) ) { + foreach ( $op_plugin as $plg ) { + if ( sqgetGlobalVar("plgs_$plg", $v2, SQ_POST) && $v2 == 'on' ) { + $plugins[] = $plg; + } + } + $i = 0; + foreach ( $plugins as $plg ) { + $k = "\$plugins[$i]"; + $newcfg[$k] = "'$plg'"; + $i++; + } + while ( isset( $newcfg["\$plugins[$i]"] ) ) { + $k = "\$plugins[$i]"; + $newcfg[$k] = ''; + $i++; + } } else { - $sw = ''; + $i = 0; + while ( isset( $newcfg["\$plugins[$i]"] ) ) { + $k = "\$plugins[$i]"; + $v = $newcfg[$k]; + $plugins[] = substr( $v, 1, strlen( $v ) - 2 ); + $i++; + } } - echo '
$plg
Plugin directory could not be found: ' . $plugpath . "
'; + foreach ( $op_plugin as $plg ) { + if ( in_array( $plg, $plugins ) ) { + $sw = ' checked="checked"'; + } else { + $sw = ''; + } + echo '\n". + "". + "\n"; + } + echo '
'; + if (file_exists(SM_PATH . "plugins/$plg/README")) { + echo "$plg"; + } else { + echo $plg; + } + echo "
'. + sprintf(_("Plugin directory could not be found: %s"), $plugpath). + "

'. - ''._("Test Configuration"). - "

'. + ''. + _("Test Configuration")."
'; /* Write the options to the file. */ -if( $fp = @fopen( $cfgfile, 'w' ) ) { - fwrite( $fp, " $v ) { - if ( $k{0} == '$' && $v <> '' || is_int($v)) { + if ( $k[0] == '$' && $v <> '' || is_int($v)) { if ( substr( $k, 1, 11 ) == 'ldap_server' ) { $v = substr( $v, 0, strlen( $v ) - 1 ) . "\n)"; $v = str_replace( 'array(', "array(\n\t", $v ); $v = str_replace( "',", "',\n\t", $v ); } + /* FIXME: add elseif that reverts plugins[#] to plugins[] */ fwrite( $fp, "$k = $v;\n" ); - } + } } + // close php fwrite( $fp, '?>' ); fclose( $fp ); } else { - echo '
'. + echo '

'. _("Config file can't be opened. Please check config.php."). - ''; + '

'; } + ?> +