Thread: SF.net SVN: postfixadmin:[606] branches/postfixadmin-smarty
Brought to you by:
christian_boltz,
gingerdog
From: <Seb...@us...> - 2009-03-28 11:36:12
|
Revision: 606 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=606&view=rev Author: Sebastian2009 Date: 2009-03-28 11:36:08 +0000 (Sat, 28 Mar 2009) Log Message: ----------- Add smarty libraries and directories: - smarty Version 2.6.22 - template compile time directory (template_c) Added Paths: ----------- branches/postfixadmin-smarty/smarty/ branches/postfixadmin-smarty/smarty/libs/ branches/postfixadmin-smarty/smarty/libs/Config_File.class.php branches/postfixadmin-smarty/smarty/libs/Smarty.class.php branches/postfixadmin-smarty/smarty/libs/Smarty_Compiler.class.php branches/postfixadmin-smarty/smarty/libs/debug.tpl branches/postfixadmin-smarty/smarty/libs/internals/ branches/postfixadmin-smarty/smarty/libs/internals/core.assemble_plugin_filepath.php branches/postfixadmin-smarty/smarty/libs/internals/core.assign_smarty_interface.php branches/postfixadmin-smarty/smarty/libs/internals/core.create_dir_structure.php branches/postfixadmin-smarty/smarty/libs/internals/core.display_debug_console.php branches/postfixadmin-smarty/smarty/libs/internals/core.get_include_path.php branches/postfixadmin-smarty/smarty/libs/internals/core.get_microtime.php branches/postfixadmin-smarty/smarty/libs/internals/core.get_php_resource.php branches/postfixadmin-smarty/smarty/libs/internals/core.is_secure.php branches/postfixadmin-smarty/smarty/libs/internals/core.is_trusted.php branches/postfixadmin-smarty/smarty/libs/internals/core.load_plugins.php branches/postfixadmin-smarty/smarty/libs/internals/core.load_resource_plugin.php branches/postfixadmin-smarty/smarty/libs/internals/core.process_cached_inserts.php branches/postfixadmin-smarty/smarty/libs/internals/core.process_compiled_include.php branches/postfixadmin-smarty/smarty/libs/internals/core.read_cache_file.php branches/postfixadmin-smarty/smarty/libs/internals/core.rm_auto.php branches/postfixadmin-smarty/smarty/libs/internals/core.rmdir.php branches/postfixadmin-smarty/smarty/libs/internals/core.run_insert_handler.php branches/postfixadmin-smarty/smarty/libs/internals/core.smarty_include_php.php branches/postfixadmin-smarty/smarty/libs/internals/core.write_cache_file.php branches/postfixadmin-smarty/smarty/libs/internals/core.write_compiled_include.php branches/postfixadmin-smarty/smarty/libs/internals/core.write_compiled_resource.php branches/postfixadmin-smarty/smarty/libs/internals/core.write_file.php branches/postfixadmin-smarty/smarty/libs/plugins/ branches/postfixadmin-smarty/smarty/libs/plugins/block.textformat.php branches/postfixadmin-smarty/smarty/libs/plugins/compiler.assign.php branches/postfixadmin-smarty/smarty/libs/plugins/function.assign_debug_info.php branches/postfixadmin-smarty/smarty/libs/plugins/function.config_load.php branches/postfixadmin-smarty/smarty/libs/plugins/function.counter.php branches/postfixadmin-smarty/smarty/libs/plugins/function.cycle.php branches/postfixadmin-smarty/smarty/libs/plugins/function.debug.php branches/postfixadmin-smarty/smarty/libs/plugins/function.eval.php branches/postfixadmin-smarty/smarty/libs/plugins/function.fetch.php branches/postfixadmin-smarty/smarty/libs/plugins/function.html_checkboxes.php branches/postfixadmin-smarty/smarty/libs/plugins/function.html_image.php branches/postfixadmin-smarty/smarty/libs/plugins/function.html_options.php branches/postfixadmin-smarty/smarty/libs/plugins/function.html_radios.php branches/postfixadmin-smarty/smarty/libs/plugins/function.html_select_date.php branches/postfixadmin-smarty/smarty/libs/plugins/function.html_select_time.php branches/postfixadmin-smarty/smarty/libs/plugins/function.html_table.php branches/postfixadmin-smarty/smarty/libs/plugins/function.mailto.php branches/postfixadmin-smarty/smarty/libs/plugins/function.math.php branches/postfixadmin-smarty/smarty/libs/plugins/function.popup.php branches/postfixadmin-smarty/smarty/libs/plugins/function.popup_init.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.capitalize.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.cat.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.count_characters.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.count_paragraphs.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.count_sentences.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.count_words.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.date_format.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.debug_print_var.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.default.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.escape.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.indent.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.lower.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.needle.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.nl2br.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.regex_replace.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.replace.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.spacify.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.string_format.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.strip.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.strip_tags.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.truncate.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.upper.php branches/postfixadmin-smarty/smarty/libs/plugins/modifier.wordwrap.php branches/postfixadmin-smarty/smarty/libs/plugins/outputfilter.trimwhitespace.php branches/postfixadmin-smarty/smarty/libs/plugins/shared.escape_special_chars.php branches/postfixadmin-smarty/smarty/libs/plugins/shared.make_timestamp.php branches/postfixadmin-smarty/templates_c/ Added: branches/postfixadmin-smarty/smarty/libs/Config_File.class.php =================================================================== --- branches/postfixadmin-smarty/smarty/libs/Config_File.class.php (rev 0) +++ branches/postfixadmin-smarty/smarty/libs/Config_File.class.php 2009-03-28 11:36:08 UTC (rev 606) @@ -0,0 +1,393 @@ +<?php + +/** + * Config_File class. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * For questions, help, comments, discussion, etc., please join the + * Smarty mailing list. Send a blank e-mail to + * sma...@go... + * + * @link http://www.smarty.net/ + * @version 2.6.19-dev + * @copyright Copyright: 2001-2005 New Digital Group, Inc. + * @author Andrei Zmievski <an...@ph...> + * @access public + * @package Smarty + */ + +/* $Id: Config_File.class.php 2786 2008-09-18 21:04:38Z Uwe.Tews $ */ + +/** + * Config file reading class + * @package Smarty + */ +class Config_File { + /**#@+ + * Options + * @var boolean + */ + /** + * Controls whether variables with the same name overwrite each other. + */ + var $overwrite = true; + + /** + * Controls whether config values of on/true/yes and off/false/no get + * converted to boolean values automatically. + */ + var $booleanize = true; + + /** + * Controls whether hidden config sections/vars are read from the file. + */ + var $read_hidden = true; + + /** + * Controls whether or not to fix mac or dos formatted newlines. + * If set to true, \r or \r\n will be changed to \n. + */ + var $fix_newlines = true; + /**#@-*/ + + /** @access private */ + var $_config_path = ""; + var $_config_data = array(); + /**#@-*/ + + /** + * Constructs a new config file class. + * + * @param string $config_path (optional) path to the config files + */ + function Config_File($config_path = NULL) + { + if (isset($config_path)) + $this->set_path($config_path); + } + + + /** + * Set the path where configuration files can be found. + * + * @param string $config_path path to the config files + */ + function set_path($config_path) + { + if (!empty($config_path)) { + if (!is_string($config_path) || !file_exists($config_path) || !is_dir($config_path)) { + $this->_trigger_error_msg("Bad config file path '$config_path'"); + return; + } + if(substr($config_path, -1) != DIRECTORY_SEPARATOR) { + $config_path .= DIRECTORY_SEPARATOR; + } + + $this->_config_path = $config_path; + } + } + + + /** + * Retrieves config info based on the file, section, and variable name. + * + * @param string $file_name config file to get info for + * @param string $section_name (optional) section to get info for + * @param string $var_name (optional) variable to get info for + * @return string|array a value or array of values + */ + function get($file_name, $section_name = NULL, $var_name = NULL) + { + if (empty($file_name)) { + $this->_trigger_error_msg('Empty config file name'); + return; + } else { + $file_name = $this->_config_path . $file_name; + if (!isset($this->_config_data[$file_name])) + $this->load_file($file_name, false); + } + + if (!empty($var_name)) { + if (empty($section_name)) { + return $this->_config_data[$file_name]["vars"][$var_name]; + } else { + if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name])) + return $this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name]; + else + return array(); + } + } else { + if (empty($section_name)) { + return (array)$this->_config_data[$file_name]["vars"]; + } else { + if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"])) + return (array)$this->_config_data[$file_name]["sections"][$section_name]["vars"]; + else + return array(); + } + } + } + + + /** + * Retrieves config info based on the key. + * + * @param $file_name string config key (filename/section/var) + * @return string|array same as get() + * @uses get() retrieves information from config file and returns it + */ + function &get_key($config_key) + { + list($file_name, $section_name, $var_name) = explode('/', $config_key, 3); + $result = &$this->get($file_name, $section_name, $var_name); + return $result; + } + + /** + * Get all loaded config file names. + * + * @return array an array of loaded config file names + */ + function get_file_names() + { + return array_keys($this->_config_data); + } + + + /** + * Get all section names from a loaded file. + * + * @param string $file_name config file to get section names from + * @return array an array of section names from the specified file + */ + function get_section_names($file_name) + { + $file_name = $this->_config_path . $file_name; + if (!isset($this->_config_data[$file_name])) { + $this->_trigger_error_msg("Unknown config file '$file_name'"); + return; + } + + return array_keys($this->_config_data[$file_name]["sections"]); + } + + + /** + * Get all global or section variable names. + * + * @param string $file_name config file to get info for + * @param string $section_name (optional) section to get info for + * @return array an array of variables names from the specified file/section + */ + function get_var_names($file_name, $section = NULL) + { + if (empty($file_name)) { + $this->_trigger_error_msg('Empty config file name'); + return; + } else if (!isset($this->_config_data[$file_name])) { + $this->_trigger_error_msg("Unknown config file '$file_name'"); + return; + } + + if (empty($section)) + return array_keys($this->_config_data[$file_name]["vars"]); + else + return array_keys($this->_config_data[$file_name]["sections"][$section]["vars"]); + } + + + /** + * Clear loaded config data for a certain file or all files. + * + * @param string $file_name file to clear config data for + */ + function clear($file_name = NULL) + { + if ($file_name === NULL) + $this->_config_data = array(); + else if (isset($this->_config_data[$file_name])) + $this->_config_data[$file_name] = array(); + } + + + /** + * Load a configuration file manually. + * + * @param string $file_name file name to load + * @param boolean $prepend_path whether current config path should be + * prepended to the filename + */ + function load_file($file_name, $prepend_path = true) + { + if ($prepend_path && $this->_config_path != "") + $config_file = $this->_config_path . $file_name; + else + $config_file = $file_name; + + ini_set('track_errors', true); + $fp = @fopen($config_file, "r"); + if (!is_resource($fp)) { + $this->_trigger_error_msg("Could not open config file '$config_file'"); + return false; + } + + $contents = ($size = filesize($config_file)) ? fread($fp, $size) : ''; + fclose($fp); + + $this->_config_data[$config_file] = $this->parse_contents($contents); + return true; + } + + /** + * Store the contents of a file manually. + * + * @param string $config_file file name of the related contents + * @param string $contents the file-contents to parse + */ + function set_file_contents($config_file, $contents) + { + $this->_config_data[$config_file] = $this->parse_contents($contents); + return true; + } + + /** + * parse the source of a configuration file manually. + * + * @param string $contents the file-contents to parse + */ + function parse_contents($contents) + { + if($this->fix_newlines) { + // fix mac/dos formatted newlines + $contents = preg_replace('!\r\n?!', "\n", $contents); + } + + $config_data = array(); + $config_data['sections'] = array(); + $config_data['vars'] = array(); + + /* reference to fill with data */ + $vars =& $config_data['vars']; + + /* parse file line by line */ + preg_match_all('!^.*\r?\n?!m', $contents, $match); + $lines = $match[0]; + for ($i=0, $count=count($lines); $i<$count; $i++) { + $line = $lines[$i]; + if (empty($line)) continue; + + if ( substr($line, 0, 1) == '[' && preg_match('!^\[(.*?)\]!', $line, $match) ) { + /* section found */ + if (substr($match[1], 0, 1) == '.') { + /* hidden section */ + if ($this->read_hidden) { + $section_name = substr($match[1], 1); + } else { + /* break reference to $vars to ignore hidden section */ + unset($vars); + $vars = array(); + continue; + } + } else { + $section_name = $match[1]; + } + if (!isset($config_data['sections'][$section_name])) + $config_data['sections'][$section_name] = array('vars' => array()); + $vars =& $config_data['sections'][$section_name]['vars']; + continue; + } + + if (preg_match('/^\s*(\.?\w+)\s*=\s*(.*)/s', $line, $match)) { + /* variable found */ + $var_name = rtrim($match[1]); + if (strpos($match[2], '"""') === 0) { + /* handle multiline-value */ + $lines[$i] = substr($match[2], 3); + $var_value = ''; + while ($i<$count) { + if (($pos = strpos($lines[$i], '"""')) === false) { + $var_value .= $lines[$i++]; + } else { + /* end of multiline-value */ + $var_value .= substr($lines[$i], 0, $pos); + break; + } + } + $booleanize = false; + + } else { + /* handle simple value */ + $var_value = preg_replace('/^([\'"])(.*)\1$/', '\2', rtrim($match[2])); + $booleanize = $this->booleanize; + + } + $this->_set_config_var($vars, $var_name, $var_value, $booleanize); + } + /* else unparsable line / means it is a comment / means ignore it */ + } + return $config_data; + } + + /**#@+ @access private */ + /** + * @param array &$container + * @param string $var_name + * @param mixed $var_value + * @param boolean $booleanize determines whether $var_value is converted to + * to true/false + */ + function _set_config_var(&$container, $var_name, $var_value, $booleanize) + { + if (substr($var_name, 0, 1) == '.') { + if (!$this->read_hidden) + return; + else + $var_name = substr($var_name, 1); + } + + if (!preg_match("/^[a-zA-Z_]\w*$/", $var_name)) { + $this->_trigger_error_msg("Bad variable name '$var_name'"); + return; + } + + if ($booleanize) { + if (preg_match("/^(on|true|yes)$/i", $var_value)) + $var_value = true; + else if (preg_match("/^(off|false|no)$/i", $var_value)) + $var_value = false; + } + + if (!isset($container[$var_name]) || $this->overwrite) + $container[$var_name] = $var_value; + else { + settype($container[$var_name], 'array'); + $container[$var_name][] = $var_value; + } + } + + /** + * @uses trigger_error() creates a PHP warning/error + * @param string $error_msg + * @param integer $error_type one of + */ + function _trigger_error_msg($error_msg, $error_type = E_USER_WARNING) + { + trigger_error("Config_File error: $error_msg", $error_type); + } + /**#@-*/ +} + +?> Added: branches/postfixadmin-smarty/smarty/libs/Smarty.class.php =================================================================== --- branches/postfixadmin-smarty/smarty/libs/Smarty.class.php (rev 0) +++ branches/postfixadmin-smarty/smarty/libs/Smarty.class.php 2009-03-28 11:36:08 UTC (rev 606) @@ -0,0 +1,1960 @@ +<?php + +/** + * Project: Smarty: the PHP compiling template engine + * File: Smarty.class.php + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * For questions, help, comments, discussion, etc., please join the + * Smarty mailing list. Send a blank e-mail to + * sma...@go... + * + * @link http://www.smarty.net/ + * @copyright 2001-2005 New Digital Group, Inc. + * @author Monte Ohrt <monte at ohrt dot com> + * @author Andrei Zmievski <an...@ph...> + * @package Smarty + * @version 2.6.21 + */ + +/* $Id: Smarty.class.php 2785 2008-09-18 21:04:12Z Uwe.Tews $ */ + +/** + * DIR_SEP isn't used anymore, but third party apps might + */ +if(!defined('DIR_SEP')) { + define('DIR_SEP', DIRECTORY_SEPARATOR); +} + +/** + * set SMARTY_DIR to absolute path to Smarty library files. + * if not defined, include_path will be used. Sets SMARTY_DIR only if user + * application has not already defined it. + */ + +if (!defined('SMARTY_DIR')) { + define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR); +} + +if (!defined('SMARTY_CORE_DIR')) { + define('SMARTY_CORE_DIR', SMARTY_DIR . 'internals' . DIRECTORY_SEPARATOR); +} + +define('SMARTY_PHP_PASSTHRU', 0); +define('SMARTY_PHP_QUOTE', 1); +define('SMARTY_PHP_REMOVE', 2); +define('SMARTY_PHP_ALLOW', 3); + +/** + * @package Smarty + */ +class Smarty +{ + /**#@+ + * Smarty Configuration Section + */ + + /** + * The name of the directory where templates are located. + * + * @var string + */ + var $template_dir = 'templates'; + + /** + * The directory where compiled templates are located. + * + * @var string + */ + var $compile_dir = 'templates_c'; + + /** + * The directory where config files are located. + * + * @var string + */ + var $config_dir = 'configs'; + + /** + * An array of directories searched for plugins. + * + * @var array + */ + var $plugins_dir = array('plugins'); + + /** + * If debugging is enabled, a debug console window will display + * when the page loads (make sure your browser allows unrequested + * popup windows) + * + * @var boolean + */ + var $debugging = false; + + /** + * When set, smarty does uses this value as error_reporting-level. + * + * @var boolean + */ + var $error_reporting = null; + + /** + * This is the path to the debug console template. If not set, + * the default one will be used. + * + * @var string + */ + var $debug_tpl = ''; + + /** + * This determines if debugging is enable-able from the browser. + * <ul> + * <li>NONE => no debugging control allowed</li> + * <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li> + * </ul> + * @link http://www.foo.dom/index.php?SMARTY_DEBUG + * @var string + */ + var $debugging_ctrl = 'NONE'; + + /** + * This tells Smarty whether to check for recompiling or not. Recompiling + * does not need to happen unless a template or config file is changed. + * Typically you enable this during development, and disable for + * production. + * + * @var boolean + */ + var $compile_check = true; + + /** + * This forces templates to compile every time. Useful for development + * or debugging. + * + * @var boolean + */ + var $force_compile = false; + + /** + * This enables template caching. + * <ul> + * <li>0 = no caching</li> + * <li>1 = use class cache_lifetime value</li> + * <li>2 = use cache_lifetime in cache file</li> + * </ul> + * @var integer + */ + var $caching = 0; + + /** + * The name of the directory for cache files. + * + * @var string + */ + var $cache_dir = 'cache'; + + /** + * This is the number of seconds cached content will persist. + * <ul> + * <li>0 = always regenerate cache</li> + * <li>-1 = never expires</li> + * </ul> + * + * @var integer + */ + var $cache_lifetime = 3600; + + /** + * Only used when $caching is enabled. If true, then If-Modified-Since headers + * are respected with cached content, and appropriate HTTP headers are sent. + * This way repeated hits to a cached page do not send the entire page to the + * client every time. + * + * @var boolean + */ + var $cache_modified_check = false; + + /** + * This determines how Smarty handles "<?php ... ?>" tags in templates. + * possible values: + * <ul> + * <li>SMARTY_PHP_PASSTHRU -> print tags as plain text</li> + * <li>SMARTY_PHP_QUOTE -> escape tags as entities</li> + * <li>SMARTY_PHP_REMOVE -> remove php tags</li> + * <li>SMARTY_PHP_ALLOW -> execute php tags</li> + * </ul> + * + * @var integer + */ + var $php_handling = SMARTY_PHP_PASSTHRU; + + /** + * This enables template security. When enabled, many things are restricted + * in the templates that normally would go unchecked. This is useful when + * untrusted parties are editing templates and you want a reasonable level + * of security. (no direct execution of PHP in templates for example) + * + * @var boolean + */ + var $security = false; + + /** + * This is the list of template directories that are considered secure. This + * is used only if {@link $security} is enabled. One directory per array + * element. {@link $template_dir} is in this list implicitly. + * + * @var array + */ + var $secure_dir = array(); + + /** + * These are the security settings for Smarty. They are used only when + * {@link $security} is enabled. + * + * @var array + */ + var $security_settings = array( + 'PHP_HANDLING' => false, + 'IF_FUNCS' => array('array', 'list', + 'isset', 'empty', + 'count', 'sizeof', + 'in_array', 'is_array', + 'true', 'false', 'null'), + 'INCLUDE_ANY' => false, + 'PHP_TAGS' => false, + 'MODIFIER_FUNCS' => array('count'), + 'ALLOW_CONSTANTS' => false + ); + + /** + * This is an array of directories where trusted php scripts reside. + * {@link $security} is disabled during their inclusion/execution. + * + * @var array + */ + var $trusted_dir = array(); + + /** + * The left delimiter used for the template tags. + * + * @var string + */ + var $left_delimiter = '{'; + + /** + * The right delimiter used for the template tags. + * + * @var string + */ + var $right_delimiter = '}'; + + /** + * The order in which request variables are registered, similar to + * variables_order in php.ini E = Environment, G = GET, P = POST, + * C = Cookies, S = Server + * + * @var string + */ + var $request_vars_order = 'EGPCS'; + + /** + * Indicates wether $HTTP_*_VARS[] (request_use_auto_globals=false) + * are uses as request-vars or $_*[]-vars. note: if + * request_use_auto_globals is true, then $request_vars_order has + * no effect, but the php-ini-value "gpc_order" + * + * @var boolean + */ + var $request_use_auto_globals = true; + + /** + * Set this if you want different sets of compiled files for the same + * templates. This is useful for things like different languages. + * Instead of creating separate sets of templates per language, you + * set different compile_ids like 'en' and 'de'. + * + * @var string + */ + var $compile_id = null; + + /** + * This tells Smarty whether or not to use sub dirs in the cache/ and + * templates_c/ directories. sub directories better organized, but + * may not work well with PHP safe mode enabled. + * + * @var boolean + * + */ + var $use_sub_dirs = false; + + /** + * This is a list of the modifiers to apply to all template variables. + * Put each modifier in a separate array element in the order you want + * them applied. example: <code>array('escape:"htmlall"');</code> + * + * @var array + */ + var $default_modifiers = array(); + + /** + * This is the resource type to be used when not specified + * at the beginning of the resource path. examples: + * $smarty->display('file:index.tpl'); + * $smarty->display('db:index.tpl'); + * $smarty->display('index.tpl'); // will use default resource type + * {include file="file:index.tpl"} + * {include file="db:index.tpl"} + * {include file="index.tpl"} {* will use default resource type *} + * + * @var array + */ + var $default_resource_type = 'file'; + + /** + * The function used for cache file handling. If not set, built-in caching is used. + * + * @var null|string function name + */ + var $cache_handler_func = null; + + /** + * This indicates which filters are automatically loaded into Smarty. + * + * @var array array of filter names + */ + var $autoload_filters = array(); + + /**#@+ + * @var boolean + */ + /** + * This tells if config file vars of the same name overwrite each other or not. + * if disabled, same name variables are accumulated in an array. + */ + var $config_overwrite = true; + + /** + * This tells whether or not to automatically booleanize config file variables. + * If enabled, then the strings "on", "true", and "yes" are treated as boolean + * true, and "off", "false" and "no" are treated as boolean false. + */ + var $config_booleanize = true; + + /** + * This tells whether hidden sections [.foobar] are readable from the + * tempalates or not. Normally you would never allow this since that is + * the point behind hidden sections: the application can access them, but + * the templates cannot. + */ + var $config_read_hidden = false; + + /** + * This tells whether or not automatically fix newlines in config files. + * It basically converts \r (mac) or \r\n (dos) to \n + */ + var $config_fix_newlines = true; + /**#@-*/ + + /** + * If a template cannot be found, this PHP function will be executed. + * Useful for creating templates on-the-fly or other special action. + * + * @var string function name + */ + var $default_template_handler_func = ''; + + /** + * The file that contains the compiler class. This can a full + * pathname, or relative to the php_include path. + * + * @var string + */ + var $compiler_file = 'Smarty_Compiler.class.php'; + + /** + * The class used for compiling templates. + * + * @var string + */ + var $compiler_class = 'Smarty_Compiler'; + + /** + * The class used to load config vars. + * + * @var string + */ + var $config_class = 'Config_File'; + +/**#@+ + * END Smarty Configuration Section + * There should be no need to touch anything below this line. + * @access private + */ + /** + * where assigned template vars are kept + * + * @var array + */ + var $_tpl_vars = array(); + + /** + * stores run-time $smarty.* vars + * + * @var null|array + */ + var $_smarty_vars = null; + + /** + * keeps track of sections + * + * @var array + */ + var $_sections = array(); + + /** + * keeps track of foreach blocks + * + * @var array + */ + var $_foreach = array(); + + /** + * keeps track of tag hierarchy + * + * @var array + */ + var $_tag_stack = array(); + + /** + * configuration object + * + * @var Config_file + */ + var $_conf_obj = null; + + /** + * loaded configuration settings + * + * @var array + */ + var $_config = array(array('vars' => array(), 'files' => array())); + + /** + * md5 checksum of the string 'Smarty' + * + * @var string + */ + var $_smarty_md5 = 'f8d698aea36fcbead2b9d5359ffca76f'; + + /** + * Smarty version number + * + * @var string + */ + var $_version = '2.6.21'; + + /** + * current template inclusion depth + * + * @var integer + */ + var $_inclusion_depth = 0; + + /** + * for different compiled templates + * + * @var string + */ + var $_compile_id = null; + + /** + * text in URL to enable debug mode + * + * @var string + */ + var $_smarty_debug_id = 'SMARTY_DEBUG'; + + /** + * debugging information for debug console + * + * @var array + */ + var $_smarty_debug_info = array(); + + /** + * info that makes up a cache file + * + * @var array + */ + var $_cache_info = array(); + + /** + * default file permissions + * + * @var integer + */ + var $_file_perms = 0644; + + /** + * default dir permissions + * + * @var integer + */ + var $_dir_perms = 0771; + + /** + * registered objects + * + * @var array + */ + var $_reg_objects = array(); + + /** + * table keeping track of plugins + * + * @var array + */ + var $_plugins = array( + 'modifier' => array(), + 'function' => array(), + 'block' => array(), + 'compiler' => array(), + 'prefilter' => array(), + 'postfilter' => array(), + 'outputfilter' => array(), + 'resource' => array(), + 'insert' => array()); + + + /** + * cache serials + * + * @var array + */ + var $_cache_serials = array(); + + /** + * name of optional cache include file + * + * @var string + */ + var $_cache_include = null; + + /** + * indicate if the current code is used in a compiled + * include + * + * @var string + */ + var $_cache_including = false; + + /**#@-*/ + /** + * The class constructor. + */ + function Smarty() + { + $this->assign('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] + : @$GLOBALS['HTTP_SERVER_VARS']['SCRIPT_NAME']); + } + + /** + * assigns values to template variables + * + * @param array|string $tpl_var the template variable name(s) + * @param mixed $value the value to assign + */ + function assign($tpl_var, $value = null) + { + if (is_array($tpl_var)){ + foreach ($tpl_var as $key => $val) { + if ($key != '') { + $this->_tpl_vars[$key] = $val; + } + } + } else { + if ($tpl_var != '') + $this->_tpl_vars[$tpl_var] = $value; + } + } + + /** + * assigns values to template variables by reference + * + * @param string $tpl_var the template variable name + * @param mixed $value the referenced value to assign + */ + function assign_by_ref($tpl_var, &$value) + { + if ($tpl_var != '') + $this->_tpl_vars[$tpl_var] = &$value; + } + + /** + * appends values to template variables + * + * @param array|string $tpl_var the template variable name(s) + * @param mixed $value the value to append + */ + function append($tpl_var, $value=null, $merge=false) + { + if (is_array($tpl_var)) { + // $tpl_var is an array, ignore $value + foreach ($tpl_var as $_key => $_val) { + if ($_key != '') { + if(!@is_array($this->_tpl_vars[$_key])) { + settype($this->_tpl_vars[$_key],'array'); + } + if($merge && is_array($_val)) { + foreach($_val as $_mkey => $_mval) { + $this->_tpl_vars[$_key][$_mkey] = $_mval; + } + } else { + $this->_tpl_vars[$_key][] = $_val; + } + } + } + } else { + if ($tpl_var != '' && isset($value)) { + if(!@is_array($this->_tpl_vars[$tpl_var])) { + settype($this->_tpl_vars[$tpl_var],'array'); + } + if($merge && is_array($value)) { + foreach($value as $_mkey => $_mval) { + $this->_tpl_vars[$tpl_var][$_mkey] = $_mval; + } + } else { + $this->_tpl_vars[$tpl_var][] = $value; + } + } + } + } + + /** + * appends values to template variables by reference + * + * @param string $tpl_var the template variable name + * @param mixed $value the referenced value to append + */ + function append_by_ref($tpl_var, &$value, $merge=false) + { + if ($tpl_var != '' && isset($value)) { + if(!@is_array($this->_tpl_vars[$tpl_var])) { + settype($this->_tpl_vars[$tpl_var],'array'); + } + if ($merge && is_array($value)) { + foreach($value as $_key => $_val) { + $this->_tpl_vars[$tpl_var][$_key] = &$value[$_key]; + } + } else { + $this->_tpl_vars[$tpl_var][] = &$value; + } + } + } + + + /** + * clear the given assigned template variable. + * + * @param string $tpl_var the template variable to clear + */ + function clear_assign($tpl_var) + { + if (is_array($tpl_var)) + foreach ($tpl_var as $curr_var) + unset($this->_tpl_vars[$curr_var]); + else + unset($this->_tpl_vars[$tpl_var]); + } + + + /** + * Registers custom function to be used in templates + * + * @param string $function the name of the template function + * @param string $function_impl the name of the PHP function to register + */ + function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null) + { + $this->_plugins['function'][$function] = + array($function_impl, null, null, false, $cacheable, $cache_attrs); + + } + + /** + * Unregisters custom function + * + * @param string $function name of template function + */ + function unregister_function($function) + { + unset($this->_plugins['function'][$function]); + } + + /** + * Registers object to be used in templates + * + * @param string $object name of template object + * @param object &$object_impl the referenced PHP object to register + * @param null|array $allowed list of allowed methods (empty = all) + * @param boolean $smarty_args smarty argument format, else traditional + * @param null|array $block_functs list of methods that are block format + */ + function register_object($object, &$object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) + { + settype($allowed, 'array'); + settype($smarty_args, 'boolean'); + $this->_reg_objects[$object] = + array(&$object_impl, $allowed, $smarty_args, $block_methods); + } + + /** + * Unregisters object + * + * @param string $object name of template object + */ + function unregister_object($object) + { + unset($this->_reg_objects[$object]); + } + + + /** + * Registers block function to be used in templates + * + * @param string $block name of template block + * @param string $block_impl PHP function to register + */ + function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null) + { + $this->_plugins['block'][$block] = + array($block_impl, null, null, false, $cacheable, $cache_attrs); + } + + /** + * Unregisters block function + * + * @param string $block name of template function + */ + function unregister_block($block) + { + unset($this->_plugins['block'][$block]); + } + + /** + * Registers compiler function + * + * @param string $function name of template function + * @param string $function_impl name of PHP function to register + */ + function register_compiler_function($function, $function_impl, $cacheable=true) + { + $this->_plugins['compiler'][$function] = + array($function_impl, null, null, false, $cacheable); + } + + /** + * Unregisters compiler function + * + * @param string $function name of template function + */ + function unregister_compiler_function($function) + { + unset($this->_plugins['compiler'][$function]); + } + + /** + * Registers modifier to be used in templates + * + * @param string $modifier name of template modifier + * @param string $modifier_impl name of PHP function to register + */ + function register_modifier($modifier, $modifier_impl) + { + $this->_plugins['modifier'][$modifier] = + array($modifier_impl, null, null, false); + } + + /** + * Unregisters modifier + * + * @param string $modifier name of template modifier + */ + function unregister_modifier($modifier) + { + unset($this->_plugins['modifier'][$modifier]); + } + + /** + * Registers a resource to fetch a template + * + * @param string $type name of resource + * @param array $functions array of functions to handle resource + */ + function register_resource($type, $functions) + { + if (count($functions)==4) { + $this->_plugins['resource'][$type] = + array($functions, false); + + } elseif (count($functions)==5) { + $this->_plugins['resource'][$type] = + array(array(array(&$functions[0], $functions[1]) + ,array(&$functions[0], $functions[2]) + ,array(&$functions[0], $functions[3]) + ,array(&$functions[0], $functions[4])) + ,false); + + } else { + $this->trigger_error("malformed function-list for '$type' in register_resource"); + + } + } + + /** + * Unregisters a resource + * + * @param string $type name of resource + */ + function unregister_resource($type) + { + unset($this->_plugins['resource'][$type]); + } + + /** + * Registers a prefilter function to apply + * to a template before compiling + * + * @param callback $function + */ + function register_prefilter($function) + { + $this->_plugins['prefilter'][$this->_get_filter_name($function)] + = array($function, null, null, false); + } + + /** + * Unregisters a prefilter function + * + * @param callback $function + */ + function unregister_prefilter($function) + { + unset($this->_plugins['prefilter'][$this->_get_filter_name($function)]); + } + + /** + * Registers a postfilter function to apply + * to a compiled template after compilation + * + * @param callback $function + */ + function register_postfilter($function) + { + $this->_plugins['postfilter'][$this->_get_filter_name($function)] + = array($function, null, null, false); + } + + /** + * Unregisters a postfilter function + * + * @param callback $function + */ + function unregister_postfilter($function) + { + unset($this->_plugins['postfilter'][$this->_get_filter_name($function)]); + } + + /** + * Registers an output filter function to apply + * to a template output + * + * @param callback $function + */ + function register_outputfilter($function) + { + $this->_plugins['outputfilter'][$this->_get_filter_name($function)] + = array($function, null, null, false); + } + + /** + * Unregisters an outputfilter function + * + * @param callback $function + */ + function unregister_outputfilter($function) + { + unset($this->_plugins['outputfilter'][$this->_get_filter_name($function)]); + } + + /** + * load a filter of specified type and name + * + * @param string $type filter type + * @param string $name filter name + */ + function load_filter($type, $name) + { + switch ($type) { + case 'output': + $_params = array('plugins' => array(array($type . 'filter', $name, null, null, false))); + require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + break; + + case 'pre': + case 'post': + if (!isset($this->_plugins[$type . 'filter'][$name])) + $this->_plugins[$type . 'filter'][$name] = false; + break; + } + } + + /** + * clear cached content for the given template and cache id + * + * @param string $tpl_file name of template file + * @param string $cache_id name of cache_id + * @param string $compile_id name of compile_id + * @param string $exp_time expiration time + * @return boolean + */ + function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) + { + + if (!isset($compile_id)) + $compile_id = $this->compile_id; + + if (!isset($tpl_file)) + $compile_id = null; + + $_auto_id = $this->_get_auto_id($cache_id, $compile_id); + + if (!empty($this->cache_handler_func)) { + return call_user_func_array($this->cache_handler_func, + array('clear', &$this, &$dummy, $tpl_file, $cache_id, $compile_id, $exp_time)); + } else { + $_params = array('auto_base' => $this->cache_dir, + 'auto_source' => $tpl_file, + 'auto_id' => $_auto_id, + 'exp_time' => $exp_time); + require_once(SMARTY_CORE_DIR . 'core.rm_auto.php'); + return smarty_core_rm_auto($_params, $this); + } + + } + + + /** + * clear the entire contents of cache (all templates) + * + * @param string $exp_time expire time + * @return boolean results of {@link smarty_core_rm_auto()} + */ + function clear_all_cache($exp_time = null) + { + return $this->clear_cache(null, null, null, $exp_time); + } + + + /** + * test to see if valid cache exists for this template + * + * @param string $tpl_file name of template file + * @param string $cache_id + * @param string $compile_id + * @return string|false results of {@link _read_cache_file()} + */ + function is_cached($tpl_file, $cache_id = null, $compile_id = null) + { + if (!$this->caching) + return false; + + if (!isset($compile_id)) + $compile_id = $this->compile_id; + + $_params = array( + 'tpl_file' => $tpl_file, + 'cache_id' => $cache_id, + 'compile_id' => $compile_id + ); + require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php'); + return smarty_core_read_cache_file($_params, $this); + } + + + /** + * clear all the assigned template variables. + * + */ + function clear_all_assign() + { + $this->_tpl_vars = array(); + } + + /** + * clears compiled version of specified template resource, + * or all compiled template files if one is not specified. + * This function is for advanced use only, not normally needed. + * + * @param string $tpl_file + * @param string $compile_id + * @param string $exp_time + * @return boolean results of {@link smarty_core_rm_auto()} + */ + function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) + { + if (!isset($compile_id)) { + $compile_id = $this->compile_id; + } + $_params = array('auto_base' => $this->compile_dir, + 'auto_source' => $tpl_file, + 'auto_id' => $compile_id, + 'exp_time' => $exp_time, + 'extensions' => array('.inc', '.php')); + require_once(SMARTY_CORE_DIR . 'core.rm_auto.php'); + return smarty_core_rm_auto($_params, $this); + } + + /** + * Checks whether requested template exists. + * + * @param string $tpl_file + * @return boolean + */ + function template_exists($tpl_file) + { + $_params = array('resource_name' => $tpl_file, 'quiet'=>true, 'get_source'=>false); + return $this->_fetch_resource_info($_params); + } + + /** + * Returns an array containing template variables + * + * @param string $name + * @param string $type + * @return array + */ + function &get_template_vars($name=null) + { + if(!isset($name)) { + return $this->_tpl_vars; + } elseif(isset($this->_tpl_vars[$name])) { + return $this->_tpl_vars[$name]; + } else { + // var non-existant, return valid reference + $_tmp = null; + return $_tmp; + } + } + + /** + * Returns an array containing config variables + * + * @param string $name + * @param string $type + * @return array + */ + function &get_config_vars($name=null) + { + if(!isset($name) && is_array($this->_config[0])) { + return $this->_config[0]['vars']; + } else if(isset($this->_config[0]['vars'][$name])) { + return $this->_config[0]['vars'][$name]; + } else { + // var non-existant, return valid reference + $_tmp = null; + return $_tmp; + } + } + + /** + * trigger Smarty error + * + * @param string $error_msg + * @param integer $error_type + */ + function trigger_error($error_msg, $error_type = E_USER_WARNING) + { + trigger_error("Smarty error: $error_msg", $error_type); + } + + + /** + * executes & displays the template results + * + * @param string $resource_name + * @param string $cache_id + * @param string $compile_id + */ + function display($resource_name, $cache_id = null, $compile_id = null) + { + $this->fetch($resource_name, $cache_id, $compile_id, true); + } + + /** + * executes & returns or displays the template results + * + * @param string $resource_name + * @param string $cache_id + * @param string $compile_id + * @param boolean $display + */ + function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false) + { + static $_cache_info = array(); + + $_smarty_old_error_level = $this->debugging ? error_reporting() : error_reporting(isset($this->error_reporting) + ? $this->error_reporting : error_reporting() & ~E_NOTICE); + + if (!$this->debugging && $this->debugging_ctrl == 'URL') { + $_query_string = $this->request_use_auto_globals ? $_SERVER['QUERY_STRING'] : $GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING']; + if (@strstr($_query_string, $this->_smarty_debug_id)) { + if (@strstr($_query_string, $this->_smarty_debug_id . '=on')) { + // enable debugging for this browser session + @setcookie('SMARTY_DEBUG', true); + $this->debugging = true; + } elseif (@strstr($_query_string, $this->_smarty_debug_id . '=off')) { + // disable debugging for this browser session + @setcookie('SMARTY_DEBUG', false); + $this->debugging = false; + } else { + // enable debugging for this page + $this->debugging = true; + } + } else { + $this->debugging = (bool)($this->request_use_auto_globals ? @$_COOKIE['SMARTY_DEBUG'] : @$GLOBALS['HTTP_COOKIE_VARS']['SMARTY_DEBUG']); + } + } + + if ($this->debugging) { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $_debug_start_time = smarty_core_get_microtime($_params, $this); + $this->_smarty_debug_info[] = array('type' => 'template', + 'filename' => $resource_name, + 'depth' => 0); + $_included_tpls_idx = count($this->_smarty_debug_info) - 1; + } + + if (!isset($compile_id)) { + $compile_id = $this->compile_id; + } + + $this->_compile_id = $compile_id; + $this->_inclusion_depth = 0; + + if ($this->caching) { + // save old cache_info, initialize cache_info + array_push($_cache_info, $this->_cache_info); + $this->_cache_info = array(); + $_params = array( + 'tpl_file' => $resource_name, + 'cache_id' => $cache_id, + 'compile_id' => $compile_id, + 'results' => null + ); + require_once(SMARTY_CORE_DIR . 'core.read_cache_file.php'); + if (smarty_core_read_cache_file($_params, $this)) { + $_smarty_results = $_params['results']; + if (!empty($this->_cache_info['insert_tags'])) { + $_params = array('plugins' => $this->_cache_info['insert_tags']); + require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); + smarty_core_load_plugins($_params, $this); + $_params = array('results' => $_smarty_results); + require_once(SMARTY_CORE_DIR . 'core.process_cached_inserts.php'); + $_smarty_results = smarty_core_process_cached_inserts($_params, $this); + } + if (!empty($this->_cache_info['cache_serials'])) { + $_params = array('results' => $_smarty_results); + require_once(SMARTY_CORE_DIR . 'core.process_compiled_include.php'); + $_smarty_results = smarty_core_process_compiled_include($_params, $this); + } + + + if ($display) { + if ($this->debugging) + { + // capture time for debugging info + $_params = array(); + require_once(SMARTY_CORE_DIR . 'core.get_microtime.php'); + $this->_smarty_debug_info[$_included_tpls_idx]['exec_time'] = smarty_core_get_microtime($_params, $this) - $_debug_start_time; + require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php'); + $_smarty_results .= smarty_core_display_debug_console($_params, $this); + } + if ($this->cache_modified_check) { + $_server_vars = ($this->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; + $_last_modified_date = @substr($_server_vars['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_server_vars['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3); + $_gmt_mtime = gmdate('D, d M Y H:i:s', $this->_cache_info['timestamp']).' GMT'; + if (@count($this->_cache_info['insert_tags']) == 0 + && !$this->_cache_serials + && $_gmt_mtime == $_last_modified_date) { + if (php_sapi_name()=='cgi') + header('Status: 304 Not Modified'); + else + header('HTTP/1.1 304 Not Modified'); + + } else { + header('Last-Modified: '.$_gmt_mtime); + echo $_smarty_results; + } + } else { + echo $_smarty_results; + } + error_reporting($_smarty_old_error_level); + // restore initial cache_info + $this->_cache_info = array_pop($_cache_info); + return true; + } else { + error_reporting($_smarty_old_error_level); + // restore initial cache_info + $this->_cache_info = array_pop($_cache_info); + return $_smarty_results; + } + } else { + $this->_cache_info['template'][$resource_name] = true; + if ($this->cache_modified_check && $display) { + header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT'); + } + } + } + + // load filters that are marked as autoload + if (count($this->autoload_filters)) { + foreach ($this->autoload_filters as $_filter_type => $_filters) { + foreach ($_filters as $_filter) { + $this->load_filter($_filter_type, $_filter); + } + } + } + + $_smarty_compile_path = $this->_get_compile_path($resource_name); + + // if we just need to display the results, don't perform output + // buffering - for speed + $_cache_including = $this->_cache_including; + $this->_cache_including = false; + if ($display && !$this->caching && count($this->_plugins['outputfilter']) == 0) { + if ($this->_is_compiled($resource_name, $_smarty_compile_path) + || $this->_compile_resource($resource_name, $_smarty_compile_path)) + { + include($_smarty_compile_path); + } + } else { + ob_start(); + if ($this->_is_compiled($resource_name, $_smarty_compile_path) + || $this->_compile_resource($resource_name, $_smarty_compile_path)) + { + include($_smarty_compile_path); + } + $_smarty_results = ob_get_contents(); + ob_end_clean(); + + foreach ((array)$this->_plugins['outputfilter'] as $_output_filter) { + $_smarty_results = call_user_func_array($_output_filter[0], array($_smarty_results, &$this)); + } + } + +... [truncated message content] |
From: <Seb...@us...> - 2009-04-02 11:14:35
|
Revision: 608 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=608&view=rev Author: Sebastian2009 Date: 2009-04-02 11:14:17 +0000 (Thu, 02 Apr 2009) Log Message: ----------- Change Postfixadmin to use smarty - there is a new folder configs where some basic configurations and definitions are placed - please review file configs/menu.conf for details. Modified Paths: -------------- branches/postfixadmin-smarty/backup.php branches/postfixadmin-smarty/broadcast-message.php branches/postfixadmin-smarty/common.php branches/postfixadmin-smarty/create-admin.php branches/postfixadmin-smarty/create-alias-domain.php branches/postfixadmin-smarty/create-alias.php branches/postfixadmin-smarty/create-domain.php branches/postfixadmin-smarty/create-mailbox.php branches/postfixadmin-smarty/css/default.css branches/postfixadmin-smarty/delete.php branches/postfixadmin-smarty/edit-active-admin.php branches/postfixadmin-smarty/edit-active-domain.php branches/postfixadmin-smarty/edit-active.php branches/postfixadmin-smarty/edit-admin.php branches/postfixadmin-smarty/edit-alias.php branches/postfixadmin-smarty/edit-domain.php branches/postfixadmin-smarty/edit-mailbox.php branches/postfixadmin-smarty/edit-vacation.php branches/postfixadmin-smarty/fetchmail.php branches/postfixadmin-smarty/list-admin.php branches/postfixadmin-smarty/list-domain.php branches/postfixadmin-smarty/list-virtual.php branches/postfixadmin-smarty/login.php branches/postfixadmin-smarty/main.php branches/postfixadmin-smarty/motd-users.txt branches/postfixadmin-smarty/motd.txt branches/postfixadmin-smarty/password.php branches/postfixadmin-smarty/search.php branches/postfixadmin-smarty/sendmail.php branches/postfixadmin-smarty/users/edit-alias.php branches/postfixadmin-smarty/users/login.php branches/postfixadmin-smarty/users/main.php branches/postfixadmin-smarty/users/password.php branches/postfixadmin-smarty/users/vacation.php branches/postfixadmin-smarty/viewlog.php Added Paths: ----------- branches/postfixadmin-smarty/config.local.php branches/postfixadmin-smarty/configs/ branches/postfixadmin-smarty/configs/menu.conf branches/postfixadmin-smarty/smarty.inc.php branches/postfixadmin-smarty/templates/admin_create-admin.tpl branches/postfixadmin-smarty/templates/admin_create-domain.tpl branches/postfixadmin-smarty/templates/admin_edit-admin.tpl branches/postfixadmin-smarty/templates/admin_edit-domain.tpl branches/postfixadmin-smarty/templates/admin_list-admin.tpl branches/postfixadmin-smarty/templates/admin_list-domain.tpl branches/postfixadmin-smarty/templates/broadcast-message.tpl branches/postfixadmin-smarty/templates/create-alias-domain.tpl branches/postfixadmin-smarty/templates/create-alias.tpl branches/postfixadmin-smarty/templates/create-mailbox.tpl branches/postfixadmin-smarty/templates/edit-alias.tpl branches/postfixadmin-smarty/templates/edit-mailbox.tpl branches/postfixadmin-smarty/templates/edit-vacation.tpl branches/postfixadmin-smarty/templates/fetchmail.tpl branches/postfixadmin-smarty/templates/footer.tpl branches/postfixadmin-smarty/templates/header.tpl branches/postfixadmin-smarty/templates/index.tpl branches/postfixadmin-smarty/templates/list-virtual.tpl branches/postfixadmin-smarty/templates/list-virtual_alias.tpl branches/postfixadmin-smarty/templates/list-virtual_alias_domain.tpl branches/postfixadmin-smarty/templates/list-virtual_mailbox.tpl branches/postfixadmin-smarty/templates/login.tpl branches/postfixadmin-smarty/templates/main.tpl branches/postfixadmin-smarty/templates/menu.tpl branches/postfixadmin-smarty/templates/message.tpl branches/postfixadmin-smarty/templates/motd-users.txt branches/postfixadmin-smarty/templates/motd.txt branches/postfixadmin-smarty/templates/overview-get.tpl branches/postfixadmin-smarty/templates/password.tpl branches/postfixadmin-smarty/templates/search.tpl branches/postfixadmin-smarty/templates/sendmail.tpl branches/postfixadmin-smarty/templates/users_edit-alias.tpl branches/postfixadmin-smarty/templates/users_login.tpl branches/postfixadmin-smarty/templates/users_main.tpl branches/postfixadmin-smarty/templates/users_menu.tpl branches/postfixadmin-smarty/templates/users_password.tpl branches/postfixadmin-smarty/templates/users_vacation.tpl branches/postfixadmin-smarty/templates/viewlog.tpl Modified: branches/postfixadmin-smarty/backup.php =================================================================== --- branches/postfixadmin-smarty/backup.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/backup.php 2009-04-02 11:14:17 UTC (rev 608) @@ -30,7 +30,11 @@ // TODO: make backup supported for postgres if ('pgsql'==$CONF['database_type']) { - print '<p>Sorry: Backup is currently not supported for your DBMS.</p>'; + $smarty->assign ('tMessage', '<p>Sorry: Backup is currently not supported for your DBMS ('.$CONF['database_type'].').</p>'); + $smarty->assign ('smarty_template', 'message'); + $smarty->display ('index.tpl'); +// print '<p>Sorry: Backup is currently not supported for your DBMS.</p>'; +die; } /* SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,adsrc @@ -63,10 +67,10 @@ if (!$fh = fopen ($backup, 'w')) { $tMessage = "<div class=\"error_msg\">Cannot open file ($backup)</div>"; - include ("templates/header.php"); - include ("templates/menu.php"); - include ("templates/message.php"); - include ("templates/footer.php"); + $smarty->assign ('tMessage', $tMessage); + $smarty->assign ('smarty_template', 'message'); + $smarty->display ('index.tpl'); +// include ("templates/message.php"); } else { Modified: branches/postfixadmin-smarty/broadcast-message.php =================================================================== --- branches/postfixadmin-smarty/broadcast-message.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/broadcast-message.php 2009-04-02 11:14:17 UTC (rev 608) @@ -79,19 +79,20 @@ } } } - include ("templates/header.php"); - include ("templates/menu.php"); - echo '<p>'.$PALANG['pBroadcast_success'].'</p>'; - include ("templates/footer.php"); + $smarty->assign ('tMessage', $PALANG['pBroadcast_success']); + $smarty->assign ('smarty_template', 'message'); + $smarty->display ('index.tpl'); +// echo '<p>'.$PALANG['pBroadcast_success'].'</p>'; } } if ($_SERVER['REQUEST_METHOD'] == "GET" || $error == 1) { - include ("templates/header.php"); - include ("templates/menu.php"); - include ("templates/broadcast-message.php"); - include ("templates/footer.php"); + $smarty->assign ('error', $error); + $smarty->assign ('smarty_template', 'broadcast-message'); + $smarty->display ('index.tpl'); + +// include ("templates/broadcast-message.php"); } /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ Modified: branches/postfixadmin-smarty/common.php =================================================================== --- branches/postfixadmin-smarty/common.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/common.php 2009-04-02 11:14:17 UTC (rev 608) @@ -74,4 +74,8 @@ } spl_autoload_register('postfixadmin_autoload'); +//***** +require_once ("$incpath/smarty.inc.php"); +//***** /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ +?> \ No newline at end of file Added: branches/postfixadmin-smarty/config.local.php =================================================================== --- branches/postfixadmin-smarty/config.local.php (rev 0) +++ branches/postfixadmin-smarty/config.local.php 2009-04-02 11:14:17 UTC (rev 608) @@ -0,0 +1,25 @@ +<? +$CONF['postfix_admin_url'] = ''; + +//$CONF['show_header_text'] = 'YES'; +//$CONF['header_text'] = ':: Postfix Admin ::'; + +//$CONF['show_footer_text'] = 'YES'; +//$CONF['footer_text'] = 'Return to change-this-to-your.domain.tld'; +//$CONF['footer_link'] = 'http://change-this-to-your.domain.tld'; + +$CONF['fetchmail'] = 'YES'; + +$CONF['alias_goto_limit'] = '0'; + +$CONF['transport'] = 'YES'; + +//$CONF['page_size'] = '5'; + +//$CONF['vacation_control_admin'] = 'YES'; + +$CONF['quota'] = 'YES'; +//$CONF['used_quotas'] = 'YES'; +//$CONF['alias_domain'] = 'NO'; +$CONF['user_footer_link'] = "main.php"; +?> Added: branches/postfixadmin-smarty/configs/menu.conf =================================================================== --- branches/postfixadmin-smarty/configs/menu.conf (rev 0) +++ branches/postfixadmin-smarty/configs/menu.conf 2009-04-02 11:14:17 UTC (rev 608) @@ -0,0 +1,72 @@ +url_main = main.php +# list_admin +url_list_admin = list-admin.php +url_create_admin = create-admin.php +# list-domain +url_list_domain = list-domain.php +url_create_domain = create-domain.php +# list-virtual +url_list_virtual = list-virtual.php +url_create_mailbox = create-mailbox.php +url_create_alias = create-alias.php +url_create_alias_domain = create-alias-domain.php +# fetchmail +url_fetchmail = fetchmail.php +url_fetchmail_new_entry = fetchmail.php?new=1 +# sendmail +url_sendmail = sendmail.php +url_broadcast_message = broadcast-message.php +# password +url_password = password.php +# backup +url_backup = backup.php +# viewlog +url_viewlog = viewlog.php +# logout +url_logout = logout.php + +# user-menu +url_user_edit_alias = edit-alias.php +url_user_vacation = vacation.php +url_user_password = password.php +url_user_logout = logout.php + + +url_edit_active = edit-active.php + +tr_header = <tr class="header"> +tr_hilightoff = <tr class="hilightoff" onmouseover="className='hilighton';" onmouseout="className='hilightoff';"> + +url_delete = delete.php +url_search = search.php +form_search = <form name="search" method="post" action="search.php"><input name="search" size="10" /></form> + +[main] +_txt_list_domain = pMenu_overview + +[admin_list-admin] +url_edit_active_admin = edit-active-admin.php +url_edit_admin = edit-admin.php + +[admin_list-domain] +url_edit_active_domain = edit-active-domain.php +url_edit_domain = edit-domain.php + +[DISCARDED] +_txt_main = pMenu_main +_txt_list_admin = pAdminMenu_list_admin +_txt_create_admin = pAdminMenu_create_admin +_txt_list_domain = pAdminMenu_list_domain +_txt_create_domain = pAdminMenu_create_domain +_txt_list_virtual = pAdminMenu_list_virtual +_txt_create_mailbox = pMenu_create_mailbox +_txt_create_alias = pMenu_create_alias +_txt_create_alias_domain = pMenu_create_alias_domain +_txt_fetchmail = pMenu_fetchmail +_txt_fetchmail_new_entry = pFetchmail_new_entry +_txt_logout = pMenu_logout +_txt_viewlog = pMenu_viewlog +_txt_password = pMenu_password +_txt_backup = pAdminMenu_backup +_txt_sendmail = pMenu_sendmail +_txt_broadcast_message = pAdminMenu_broadcast_message Modified: branches/postfixadmin-smarty/create-admin.php =================================================================== --- branches/postfixadmin-smarty/create-admin.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/create-admin.php 2009-04-02 11:14:17 UTC (rev 608) @@ -34,7 +34,6 @@ require_once('common.php'); authentication_require_role('global-admin'); - $list_domains = list_domains (); $tDomains = array(); @@ -51,7 +50,6 @@ if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']); $fDomains = array(); if (!empty ($_POST['fDomains'])) $fDomains = $_POST['fDomains']; - list ($error, $tMessage, $pAdminCreate_admin_username_text, $pAdminCreate_admin_password_text) = create_admin($fUsername, $fPassword, $fPassword2, $fDomains); if ($error != 0) { @@ -60,10 +58,14 @@ } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/admin_create-admin.php"); -include ("templates/footer.php"); +$smarty->assign ('tUsername', $tUsername); +$smarty->assign ('pAdminCreate_admin_username_text', $pAdminCreate_admin_username_text); +$smarty->assign ('pAdminCreate_admin_password_text', $pAdminCreate_admin_password_text); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('select_options', select_options ($list_domains, $tDomains)); +$smarty->assign ('smarty_template', 'admin_create-admin'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/create-alias-domain.php =================================================================== --- branches/postfixadmin-smarty/create-alias-domain.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/create-alias-domain.php 2009-04-02 11:14:17 UTC (rev 608) @@ -84,11 +84,14 @@ $fTargetDomain = escape_string ($_REQUEST['target_domain']); $fTargetDomain = strtolower ($fTargetDomain); } +//*** ????? if (isset ($_REQUEST['active'])) { $fActive = (bool)$_REQUEST['active']; } else { + $fActive = false; +} +if (!isset ($_REQUEST['submit'])) $fActive = true; -} if ($_SERVER['REQUEST_METHOD'] == "POST") { @@ -130,10 +133,13 @@ $tMessage .= "<br />($fAliasDomain -> $fTargetDomain)<br />\n"; } - -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/create-alias-domain.php"); -include ("templates/footer.php"); +$smarty->assign ('alias_domains', (count($alias_domains) > 0)); +$smarty->assign ('select_options_alias', select_options ($alias_domains, array ($fAliasDomain))); +$smarty->assign ('select_options_target', select_options ($target_domains, array ($fTargetDomain))); +if ($fActive) $smarty->assign ('fActive', ' checked="checked"'); +if ($error == 1) $tMessage = '<span class="error_msg">'.$tMessage.'</span>'; +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'create-alias-domain'); +$smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/create-alias.php =================================================================== --- branches/postfixadmin-smarty/create-alias.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/create-alias.php 2009-04-02 11:14:17 UTC (rev 608) @@ -169,9 +169,14 @@ } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/create-alias.php"); -include ("templates/footer.php"); +$smarty->assign ('tAddress', $tAddress); +$smarty->assign ('select_options', select_options ($list_domains, array ($tDomain))); +$smarty->assign ('pCreate_alias_address_text', $pCreate_alias_address_text); +$smarty->assign ('tGoto', $tGoto); +$smarty->assign ('pCreate_alias_goto_text', $pCreate_alias_goto_text); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'create-alias'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Modified: branches/postfixadmin-smarty/create-domain.php =================================================================== --- branches/postfixadmin-smarty/create-domain.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/create-domain.php 2009-04-02 11:14:17 UTC (rev 608) @@ -142,10 +142,18 @@ } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/admin_create-domain.php"); -include ("templates/footer.php"); +$smarty->assign ('tDomain', $tDomain); +$smarty->assign ('pAdminCreate_domain_domain_text', $pAdminCreate_domain_domain_text); +$smarty->assign ('tDescription', $tDescription); +$smarty->assign ('tAliases', $tAliases); +$smarty->assign ('tMailboxes', $tMailboxes); +$smarty->assign ('tMaxquota', $tMaxquota); +$smarty->assign ('select_options', select_options ($CONF ['transport_options'], array ($tTransport))); +$smarty->assign ('tDefaultaliases', ($tDefaultaliases == 'on') ? ' checked="checked"' : ''); +$smarty->assign ('tBackupmx', ($tBackupmx == 'on') ? ' checked="checked"' : ''); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'admin_create-domain'); +$smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Modified: branches/postfixadmin-smarty/create-mailbox.php =================================================================== --- branches/postfixadmin-smarty/create-mailbox.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/create-mailbox.php 2009-04-02 11:14:17 UTC (rev 608) @@ -48,7 +48,6 @@ $pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text']; -$pCreate_mailbox_name_text = $PALANG['pCreate_mailbox_name_text']; $pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text']; if ($_SERVER['REQUEST_METHOD'] == "GET") @@ -323,10 +322,17 @@ } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/create-mailbox.php"); -include ("templates/footer.php"); +$smarty->assign ('tUsername', $tUsername); +$smarty->assign ('select_options', select_options ($list_domains, array ($tDomain))); +$smarty->assign ('pCreate_mailbox_username_text', $pCreate_mailbox_username_text); +$smarty->assign ('pCreate_mailbox_password_text', $pCreate_mailbox_password_text); +$smarty->assign ('tName', $tName); +$smarty->assign ('tQuota', $tQuota); +$smarty->assign ('pCreate_mailbox_quota_text', $pCreate_mailbox_quota_text); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'create-mailbox'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/css/default.css =================================================================== --- branches/postfixadmin-smarty/css/default.css 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/css/default.css 2009-04-02 11:14:17 UTC (rev 608) @@ -240,12 +240,6 @@ line-height: 30px; } -#nav_bar { - text-align: right; - width: 750px; - margin: 0 auto; -} - #alias_domain_table, #alias_table, #mailbox_table, #overview_table, #log_table, #admin_table { width: 750px; margin: 0px auto; @@ -313,3 +307,9 @@ div.setup li { padding-bottom:1em; } + +div.nav_bar { + text-align: left; + width: 750px; + margin: 0 auto; +} Modified: branches/postfixadmin-smarty/delete.php =================================================================== --- branches/postfixadmin-smarty/delete.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/delete.php 2009-04-02 11:14:17 UTC (rev 608) @@ -225,11 +225,10 @@ flash_error($PALANG['invalid_parameter']); } +$smarty->assign ('smarty_template', 'message'); +$smarty->assign ('tMessage', $tMessage); +$smarty->display ('index.tpl'); -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/message.php"); -include ("templates/footer.php"); /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Modified: branches/postfixadmin-smarty/edit-active-admin.php =================================================================== --- branches/postfixadmin-smarty/edit-active-admin.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/edit-active-admin.php 2009-04-02 11:14:17 UTC (rev 608) @@ -50,11 +50,10 @@ exit; } } +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'message'); +$smarty->display ('index.tpl'); -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/message.php"); -include ("templates/footer.php"); /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ Modified: branches/postfixadmin-smarty/edit-active-domain.php =================================================================== --- branches/postfixadmin-smarty/edit-active-domain.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/edit-active-domain.php 2009-04-02 11:14:17 UTC (rev 608) @@ -50,10 +50,10 @@ } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/message.php"); -include ("templates/footer.php"); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'message'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/edit-active.php =================================================================== --- branches/postfixadmin-smarty/edit-active.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/edit-active.php 2009-04-02 11:14:17 UTC (rev 608) @@ -106,9 +106,9 @@ } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/message.php"); -include ("templates/footer.php"); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'message'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/edit-admin.php =================================================================== --- branches/postfixadmin-smarty/edit-admin.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/edit-admin.php 2009-04-02 11:14:17 UTC (rev 608) @@ -21,8 +21,8 @@ * * tAllDomains * tDomains - * tActive - * tSadmin + * tActive_checked + * tSadmin_checked * * Form POST \ GET Variables: * @@ -131,29 +131,33 @@ $tAllDomains = list_domains(); $tDomains = list_domains_for_admin ($username); -$tActive = ''; +$tActive_checked = ''; $tPassword = $admin_details['password']; if($admin_details['active'] == 't' || $admin_details['active'] == 1) { - $tActive = $admin_details['active']; + $tActive_checked = ' checked="checked"'; } -$tSadmin = '0'; +$tSadmin_checked = ''; $result = db_query ("SELECT * FROM $table_domain_admins WHERE username='$username'"); // could/should be multiple matches to query; if ($result['rows'] >= 1) { $result = $result['result']; while($row = db_array($result)) { if ($row['domain'] == 'ALL') { - $tSadmin = '1'; + $tSadmin_checked = ' checked="checked"'; $tDomains = array(); /* empty the list, they're an admin */ } } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/admin_edit-admin.php"); -include ("templates/footer.php"); +$smarty->assign ('username', $username); +$smarty->assign ('pAdminEdit_admin_password_text', $pAdminEdit_admin_password_text); +$smarty->assign ('tActive_checked', $tActive_checked); +$smarty->assign ('tSadmin_checked', $tSadmin_checked); +$smarty->assign ('select_options', select_options ($tAllDomains, $tDomains)); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'admin_edit-admin'); +$smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Modified: branches/postfixadmin-smarty/edit-alias.php =================================================================== --- branches/postfixadmin-smarty/edit-alias.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/edit-alias.php 2009-04-02 11:14:17 UTC (rev 608) @@ -143,10 +143,14 @@ $fAddress = htmlentities($fAddress, ENT_QUOTES); $fDomain = htmlentities($fDomain, ENT_QUOTES); -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/edit-alias.php"); -include ("templates/footer.php"); +$array = preg_split ('/,/', $tGoto); + +$smarty->assign ('fAddress', $fAddress); +$smarty->assign ('array', $array); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'edit-alias'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/edit-domain.php =================================================================== --- branches/postfixadmin-smarty/edit-domain.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/edit-domain.php 2009-04-02 11:14:17 UTC (rev 608) @@ -113,10 +113,18 @@ } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/admin_edit-domain.php"); -include ("templates/footer.php"); +$smarty->assign ('domain', $domain); +$smarty->assign ('tDescription', htmlspecialchars($tDescription, ENT_QUOTES)); +$smarty->assign ('tAliases', $tAliases); +$smarty->assign ('tMailboxes', $tMailboxes); +$smarty->assign ('tMaxquota', $tMaxquota); +$smarty->assign ('select_options', select_options ($CONF ['transport_options'], array ($tTransport))); +if ($tBackupmx) $smarty->assign ('tBackupmx', ' checked="checked"'); +if ($tActive) $smarty->assign ('tActive', ' checked="checked"'); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'admin_edit-domain'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Modified: branches/postfixadmin-smarty/edit-mailbox.php =================================================================== --- branches/postfixadmin-smarty/edit-mailbox.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/edit-mailbox.php 2009-04-02 11:14:17 UTC (rev 608) @@ -175,9 +175,18 @@ } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/edit-mailbox.php"); -include ("templates/footer.php"); +$smarty->assign ('fUsername', $fUsername); +//$smarty->assign ('pEdit_mailbox_username_text', $pEdit_mailbox_username_text); +$smarty->assign ('pEdit_mailbox_password_text', $pEdit_mailbox_password_text); +$smarty->assign ('tName', htmlspecialchars ($tName,ENT_QUOTES)); +$smarty->assign ('pEdit_mailbox_name_text', $pEdit_mailbox_name_text); +$smarty->assign ('tMaxquota', $tMaxquota); +$smarty->assign ('tQuota', $tQuota); +$smarty->assign ('pEdit_mailbox_quota_text', $pEdit_mailbox_quota_text); +if ($tActive) $smarty->assign ('tActive', ' checked="checked"'); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'edit-mailbox'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/edit-vacation.php =================================================================== --- branches/postfixadmin-smarty/edit-vacation.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/edit-vacation.php 2009-04-02 11:14:17 UTC (rev 608) @@ -199,9 +199,13 @@ $tMessage = $PALANG['pVacation_result_error']; } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/edit-vacation.php"); -include ("templates/footer.php"); +$smarty->assign ('tUseremail', $tUseremail); +$smarty->assign ('tSubject', htmlentities(stripslashes($tSubject), ENT_QUOTES, 'UTF-8')); +$smarty->assign ('tBody', htmlentities(stripslashes($tBody), ENT_QUOTES , 'UTF-8')); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('fCanceltarget', $fCanceltarget); +$smarty->assign ('smarty_template', 'edit-vacation'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/fetchmail.php =================================================================== --- branches/postfixadmin-smarty/fetchmail.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/fetchmail.php 2009-04-02 11:14:17 UTC (rev 608) @@ -121,10 +121,9 @@ $row_id = $edit; } -$user_mailboxes_sql= "'" . implode("','",escape_string(array_values($fm_defaults["mailbox"]))) . "'"; # mailboxes as SQL + if ($row_id) { - $result = db_query ("SELECT ".implode(",",escape_string(array_keys($fm_struct)))." FROM $table_fetchmail WHERE id=$row_id AND mailbox IN ($user_mailboxes_sql)"); - # TODO: the "AND mailbox IN ..." part should obsolete the check_owner call. Remove it after checking again. + $result = db_query ("SELECT ".implode(",",escape_string(array_keys($fm_struct)))." FROM $table_fetchmail WHERE id=" . $row_id); if ($result['rows'] > 0) { $edit_row = db_array ($result['result']); $account = $edit_row['src_user'] . " @ " . $edit_row['src_server']; @@ -222,8 +221,7 @@ $tFmail = array(); if ($edit + $new == 0) { # display list - # TODO: ORDER BY would even be better if it would order by the _domain_ of the target mailbox first - $res = db_query ("SELECT ".implode(",",escape_string(array_keys($fm_struct)))." FROM $table_fetchmail WHERE mailbox IN ($user_mailboxes_sql) ORDER BY mailbox,src_server,src_user"); + $res = db_query ("SELECT ".implode(",",escape_string(array_keys($fm_struct)))." FROM $table_fetchmail order by id desc"); if ($res['rows'] > 0) { while ($row = db_array ($res['result'])) { $tFmail[] = $row; @@ -242,11 +240,143 @@ function _inp_password($val){ return base64_encode($val); } +//***** +$headers=array(); +foreach(array_keys($fm_struct) as $row){ + list($editible,$view,$type)=$fm_struct[$row]; + $title = $PALANG['pFetchmail_field_' . $row]; + $comment = $PALANG['pFetchmail_desc_' . $row]; + if ($view){ + $headers[]=$title; +// $headers[]=array($editible, $view, $type, $title, $comment); + } +} +function fetchmail_edit_row($data=array()) +{ + global $fm_struct,$fm_defaults,$PALANG; + $id = $data["id"]; + $_id = $data["id"] * 100 + 1; + $ret = "<table>"; + $ret .= '<tr><td colspan="3"><h3>'.$PALANG['pMenu_fetchmail'] . '</h3></td></tr>'; + # TODO: $formvars possibly contains db-specific boolean values + # TODO: no problems with MySQL, to be tested with PgSQL + # TODO: undefined values may also occour + foreach($fm_struct as $key=>$struct){ + list($editible,$view,$type)=$struct; + $title = $PALANG['pFetchmail_field_' . $key]; + $comment = $PALANG['pFetchmail_desc_' . $key]; + if ($editible){ + $ret.="<tr><td align='left' valign='top'><label for='${_id}' style='width:20em;'>${title}: </label></td>"; + $ret.="<td align=left style='padding-left:.25em;padding-right:.25em;background-color:white;'>"; + $func="_edit_".$type; + if (! function_exists($func)) + $func="_edit_text"; + $val=isset($data[$key]) + ?$data[$key] + :(! is_array($fm_defaults[$key]) + ?$fm_defaults[$key] + :'' + ); + $fm_defaults_key = ""; if (isset($fm_defaults[$key])) $fm_defaults_key = $fm_defaults[$key]; + $ret.=$func($_id++,$key,$fm_defaults_key,$val); + $ret.="</td><td align=left valign=top><i> ${comment}</i></td></tr>\n"; + } + elseif($view){ + $func="_view_".$type; + $val=isset($data[$key]) + ?(function_exists($func) + ?$func($data[$key]) + :nl2br($data[$key]) + ) + :"--x--"; + $ret.="<tr><td align=left valign=top>${title}: </label></td>"; + $ret.="<td align=left valign=top style='padding-left:.25em;padding-right:.25em;background-color:white;'>".$val; + $ret.="</td><td align=left valign=top><i> ${comment}</i></td></tr>\n"; + } + } + $ret.="<tr><td align=center colspan=3> + <input type=submit name=save value='" . $PALANG['save'] . "'> + <input type=submit name=cancel value='" . $PALANG['cancel'] . "'> + "; + if ($id){ + $ret.="<input type=hidden name=edit value='${id}'>"; + } + $ret.="</td></tr>\n"; + $ret.="</table>\n"; + $ret.="<p />\n"; + $ret.="</form>\n"; + $ret.="</div>\n"; + return $ret; +} +function _edit_text($id,$key,$def_vals,$val=""){ + $val=htmlspecialchars($val); + return "<input type=text name=${key} id=${id} value='${val}'>"; +} -include ("./templates/header.php"); -include ("./templates/menu.php"); -include ("./templates/fetchmail.php"); -include ("./templates/footer.php"); +function _edit_password($id,$key,$def_vals,$val=""){ + $val=preg_replace("{.}","*",$val); + return "<input type=password name=${key} id=${id} value='${val}'>"; +} +function _edit_num($id,$key,$def_vals,$val=""){ + $val=(int)($val); + return "<input type=text name=${key} id=${id} value='${val}'>"; +} + +function _edit_bool($id,$key,$def_vals,$val=""){ + $ret="<input type=checkbox name=${key} id=${id}"; + if ($val) + $ret.=" checked"; + $ret.=">"; + return $ret; +} + +function _edit_longtext($id,$key,$def_vals,$val=""){ + $val=htmlspecialchars($val); + return "<textarea name=${key} id=${id} rows=2 style='width:20em;'>${val}</textarea>"; +} + +function _edit_enum($id,$key,$def_vals,$val=""){ + $ret="<select name=${key} id=${id}>"; + foreach($def_vals as $opt_val){ + $ret.="<option"; + if ($opt_val==$val) + $ret.=" selected"; + $ret.=">${opt_val}</option>\n"; + } + $ret.="</select>\n"; + return $ret; +} + +function _listview_id($val){ + return "<a href='?edit=${val}'> ${val} </a>"; +} + +function _listview_bool($val){ + return $val?"+":""; +} + +function _listview_longtext($val){ + return strlen($val)?"Text - ".strlen($val)." chars":"--x--"; +} + +function _listview_text($val){ + return sizeof($val)?$val:"--x--"; +} + +function _listview_password($val){ + return preg_replace("{.}","*",$val); +} + +$smarty->assign ('edit', $edit); +$smarty->assign ('new', $new); +$smarty->assign ('fetchmail_edit_row', fetchmail_edit_row($formvars)); +$smarty->assign ('headers', $headers); +$smarty->assign ('user_domains', $user_domains); +$smarty->assign ('tFmail', $tFmail); + +$smarty->assign ('smarty_template', 'fetchmail'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/list-admin.php =================================================================== --- branches/postfixadmin-smarty/list-admin.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/list-admin.php 2009-04-02 11:14:17 UTC (rev 608) @@ -25,17 +25,24 @@ authentication_require_role('global-admin'); +$_active = array ($PALANG ['NO'], $PALANG ['YES']); + $list_admins = list_admins(); -if ((is_array ($list_admins) and sizeof ($list_admins) > 0)) { - for ($i = 0; $i < sizeof ($list_admins); $i++) { - $admin_properties[$i] = get_admin_properties ($list_admins[$i]); - } +if ((is_array ($list_admins) and sizeof ($list_admins) > 0)) +{ + for ($i = 0; $i < sizeof ($list_admins); $i++) + { + $admin_properties[$i] = get_admin_properties ($list_admins[$i]); + $admin_properties[$i] ['name'] = $list_admins[$i]; + if ($admin_properties [$i] ['domain_count'] == 'ALL') + $admin_properties [$i] ['domain_count'] = $PALANG ['pAdminEdit_admin_super_admin']; + $admin_properties [$i] ['active'] = $_active [$admin_properties [$i] ['active']]; + } } +$smarty->assign ('admin_properties', $admin_properties); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('smarty_template', 'admin_list-admin'); +$smarty->display ('index.tpl'); -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/admin_list-admin.php"); -include ("templates/footer.php"); - /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Modified: branches/postfixadmin-smarty/list-domain.php =================================================================== --- branches/postfixadmin-smarty/list-domain.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/list-domain.php 2009-04-02 11:14:17 UTC (rev 608) @@ -50,24 +50,36 @@ $list_domains = list_domains_for_admin(authentication_get_username()); } - if (!empty ($list_domains)) - { - for ($i = 0; $i < sizeof ($list_domains); $i++) - { - $domain_properties[$i] = get_domain_properties ($list_domains[$i]); - } - } +if (!empty ($list_domains)) +{ + for ($i = 0; $i < sizeof ($list_domains); $i++) + { + $domain_properties [$i] = get_domain_properties ($list_domains[$i]); + + $domain_properties [$i]['name'] = $list_domains [$i]; + $domain_properties [$i]['backupmx'] = ($domain_properties [$i]['backupmx'] == 1) ? $PALANG ['YES'] : $PALANG ['NO']; + $domain_properties [$i]['active'] = ($domain_properties [$i]['active'] == 1) ? $PALANG ['YES'] : $PALANG ['NO']; + + $domain_properties [$i]['maxquota'] = eval_size ($domain_properties [$i]['maxquota']); + $domain_properties [$i]['aliases'] = eval_size ($domain_properties [$i]['aliases']); + $domain_properties [$i]['mailboxes'] = eval_size ($domain_properties [$i]['mailboxes']); + } +} #} -include ("templates/header.php"); -include ("templates/menu.php"); - -if ($is_superadmin) { - include ("templates/admin_list-domain.php"); -} else { - include ("templates/overview-get.php"); +$smarty->assign ('domain_properties', $domain_properties); +if ($is_superadmin) +{ + $smarty->assign ('select_options', select_options ($list_admins, array ($fUsername))); + $smarty->assign ('smarty_template', 'admin_list-domain'); } -include ("templates/footer.php"); +else +{ + $smarty->assign ('select_options', select_options ($list_domains, array ($_GET['domain']))); + $smarty->assign ('smarty_template', 'overview-get'); +} +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/list-virtual.php =================================================================== --- branches/postfixadmin-smarty/list-virtual.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/list-virtual.php 2009-04-02 11:14:17 UTC (rev 608) @@ -230,14 +230,164 @@ elseif($limit['mailbox_count'] < $limit['mailboxes']) { $tCanAddMailbox = true; } + + $limit ['aliases'] = eval_size ($limit ['aliases']); + $limit ['mailboxes'] = eval_size ($limit ['mailboxes']); + $limit ['maxquota'] = eval_size ($limit ['maxquota']); } +$gen_show_status = array (); +$check_alias_owner = array (); + +if ((is_array ($tAlias) and sizeof ($tAlias) > 0)) + for ($i = 0; $i < sizeof ($tAlias); $i++) + { + $gen_show_status [$i] = gen_show_status($tAlias[$i]['address']); + $check_alias_owner [$i] = check_alias_owner($SESSID_USERNAME, $tAlias[$i]['address']); + } + +$gen_show_status_mailbox = array (); +$divide_quota = array (); +if ((is_array ($tMailbox) and sizeof ($tMailbox) > 0)) + for ($i = 0; $i < sizeof ($tMailbox); $i++) + { + $gen_show_status_mailbox [$i] = gen_show_status($tMailbox[$i]['username']); + $divide_quota ['current'][$i] = divide_quota ($tMailbox[$i]['current']); + $divide_quota ['quota'][$i] = divide_quota ($tMailbox[$i]['quota']); + } + +class cNav_bar +{ + var $count, $title, $limit, $page_size, $pages; //* arguments + var $url; //* manually + var $fInit, $arr_prev, $arr_next, $arr_top; //* internal + var $anchor; + function cNav_bar ($aCount, $aTitle, $aLimit, $aPage_size, $aPages) + { + $this->count = $aCount; + $this->title = $aTitle; + $this->limit = $aLimit; + $this->page_size = $aPage_size; + $this->pages = $aPages; + $this->url = ''; + $this->fInit = false; + } + function init () + { + $this->anchor = 'a'.substr ($this->title, 3); + $this->url .= '#'.$this->anchor; + ($this->limit >= $this->page_size) ? $this->arr_prev = ' <a href="?limit='.($this->limit - $this->page_size).$this->url.'"><img border="0" src="images/arrow-l.png" title="'.$GLOBALS ['PALANG']['pOverview_left_arrow'].'" alt="'.$GLOBALS ['PALANG']['pOverview_left_arrow'].'"/></a> ' : $this->arr_prev = ''; + ($this->limit > 0) ? $this->arr_top = ' <a href="?limit=0'.$this->url.'"><img border="0" src="images/arrow-u.png" title="'.$GLOBALS ['PALANG']['pOverview_up_arrow'].'" alt="'.$GLOABLS ['PALANG']['pOverview_up_arrow'].'"/></a> ' : $this->arr_top = ''; + (($this->limit + $this->page_size) < ($this->count * $this->page_size)) ? $this->arr_next = ' <a href="?limit='.($this->limit + $this->page_size).$this->url.'"><img border="0" src="images/arrow-r.png" title="'.$GLOBALS ['PALANG']['pOverview_right_arrow'].'" alt="'.$GLOBALS ['PALANG']['pOverview_right_arrow'].'"/></a> ' : $this->arr_next = ''; + $this->fInit = true; + } + function display_pre () + { + $ret_val = '<div class="nav_bar"'; +//$ret_val .= ' style="background-color:#ffa;"'; + $ret_val .= '>'; + $ret_val .= '<table width="730"><colgroup span="1"><col width="550"></col></colgroup> '; + $ret_val .= '<tr><td align="left">'; + return $ret_val; + } + function display_post () + { + $ret_val = '</td></tr></table></div>'; + return $ret_val; + } + function display_top () + { + $ret_val = ''; + if ($this->count < 1) + return $ret_val; + if (!$this->fInit) + $this->init (); + + $ret_val .= '<a name="'.$this->anchor.'"></a>'; + $ret_val .= $this->display_pre (); + $ret_val .= '<b>'.$this->title.'</b> '; + ($this->limit >= $this->page_size) ? $highlight_at = $this->limit / $this->page_size : $highlight_at = 0; + + for ($i = 0; $i < count ($this->pages); $i++) + { + $lPage = $this->pages [$i]; + if ($i == $highlight_at) + $lPage = '<b>'.$lPage.'</b>'; + $ret_val .= '<a href="?limit='.($i * $this->page_size).$this->url.'">'.$lPage.'</a>'."\n"; + } + $ret_val .= '</td><td valign="middle" align="right">'; + + $ret_val .= $this->arr_prev; + $ret_val .= $this->arr_top; + $ret_val .= $this->arr_next; + + $ret_val .= $this->display_post (); + return $ret_val; + } + function display_bottom () + { + $ret_val = ''; + if ($this->count < 1) + return $ret_val; + if (!$this->fInit) + $this->init (); + $ret_val .= $this->display_pre (); + $ret_val .= '</td><td valign="middle" align="right">'; + + $ret_val .= $this->arr_prev; + $ret_val .= $this->arr_top; + $ret_val .= $this->arr_next; + + $ret_val .= $this->display_post (); + return $ret_val; + } +} + +$nav_bar_alias = new cNav_bar ($limit['alias_pgindex_count'], $PALANG['pOverview_alias_title'], $fDisplay, $CONF['page_size'], $limit['alias_pgindex']); +$nav_bar_alias->url = '&domain='.$fDomain; + +$nav_bar_mailbox = new cNav_bar ($limit['mbox_pgindex_count'], $PALANG['pOverview_mailbox_title'], $fDisplay, $CONF['page_size'], $limit['mbox_pgindex']); +$nav_bar_mailbox->url = '&domain='.$fDomain; +//print $nav_bar_alias->display_top (); + + // this is why we need a proper template layer. $fDomain = htmlentities($fDomain, ENT_QUOTES); -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/list-virtual.php"); -include ("templates/footer.php"); +$smarty->assign ('select_options', select_options ($list_domains, array ($fDomain))); +$smarty->assign ('nav_bar_alias', array ('top' => $nav_bar_alias->display_top (), 'bottom' => $nav_bar_alias->display_bottom ())); +$smarty->assign ('nav_bar_mailbox', array ('top' => $nav_bar_mailbox->display_top (), 'bottom' => $nav_bar_mailbox->display_bottom ())); + +$smarty->assign ('fDomain', $fDomain); + +$smarty->assign ('list_domains', $list_domains); +$smarty->assign ('limit', $limit); +$smarty->assign ('tDisplay_back_show', $tDisplay_back_show); +$smarty->assign ('tDisplay_back', $tDisplay_back); +$smarty->assign ('tDisplay_up_show', $tDisplay_up_show); +$smarty->assign ('tDisplay_next_show', $tDisplay_next_show); +$smarty->assign ('tDisplay_next', $tDisplay_next); + +if(sizeof ($tAliasDomains) > 0) + $smarty->assign ('tAliasDomains', $tAliasDomains); + +if(is_array($tTargetDomain)) +{ + $smarty->assign ('tTargetDomain', $tTargetDomain); + $smarty->assign ('PALANG_pOverview_alias_domain_target', sprintf($PALANG['pOverview_alias_domain_target'], $fDomain)); +} +$smarty->assign ('tAlias', $tAlias); +$smarty->assign ('gen_show_status', $gen_show_status); +$smarty->assign ('check_alias_owner', $check_alias_owner); +$smarty->assign ('tCanAddAlias', $tCanAddAlias); +$smarty->assign ('tMailbox', $tMailbox); +$smarty->assign ('gen_show_status_mailbox', $gen_show_status_mailbox); +$smarty->assign ('boolconf_used_quotas', boolconf('used_quotas')); +$smarty->assign ('divide_quota', $divide_quota); +$smarty->assign ('tCanAddMailbox', $tCanAddMailbox); +$smarty->assign ('smarty_template', 'list-virtual'); +$smarty->display ('index.tpl'); + + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/login.php =================================================================== --- branches/postfixadmin-smarty/login.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/login.php 2009-04-02 11:14:17 UTC (rev 608) @@ -41,12 +41,12 @@ exit; } } + $smarty->assign ('language_selector', language_selector()); if ($_SERVER['REQUEST_METHOD'] == "GET") { - include ("./templates/header.php"); - include ("./templates/login.php"); - include ("./templates/footer.php"); + $smarty->assign ('smarty_template', 'login'); + $smarty->display ('index.tpl'); } if ($_SERVER['REQUEST_METHOD'] == "POST") @@ -101,9 +101,11 @@ exit(0); } - include ("./templates/header.php"); - include ("./templates/login.php"); - include ("./templates/footer.php"); + $smarty->assign ('tUsername', $tUsername); + $smarty->assign ('tMessage', $tMessage); + + $smarty->assign ('smarty_template', 'login'); + $smarty->display ('index.tpl'); } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ Modified: branches/postfixadmin-smarty/main.php =================================================================== --- branches/postfixadmin-smarty/main.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/main.php 2009-04-02 11:14:17 UTC (rev 608) @@ -26,11 +26,7 @@ $SESSID_USERNAME = authentication_get_username(); authentication_require_role('admin'); +$smarty->assign ('smarty_template', 'main'); +$smarty->display ('index.tpl'); -include ("./templates/header.php"); -include ("./templates/menu.php"); -include ("./templates/main.php"); -include ("./templates/footer.php"); - -/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ -?> +/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Modified: branches/postfixadmin-smarty/motd-users.txt =================================================================== --- branches/postfixadmin-smarty/motd-users.txt 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/motd-users.txt 2009-04-02 11:14:17 UTC (rev 608) @@ -1,7 +1,7 @@ <div class="standout"> === Announcement ===<br /> This is a new version of Postfix Admin.<br /> -If you have any questions please direct them to the <a href="mailto:<?php print $CONF['admin_email']; ?>">Site Admin</a><br /> +If you have any questions please direct them to the <a href="mailto:{$CONF.admin_email}">Site Admin</a><br /> === Announcement ===<br /> </div> <br /> Modified: branches/postfixadmin-smarty/motd.txt =================================================================== --- branches/postfixadmin-smarty/motd.txt 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/motd.txt 2009-04-02 11:14:17 UTC (rev 608) @@ -1,7 +1,7 @@ <div class="standout"> === Announcement ===<br /> This is a new version of Postfix Admin.<br /> -If you have any questions please direct them to the <a href="mailto:<?php print $CONF['admin_email']; ?>">Site Admin</a><br /> +If you have any questions please direct them to the <a href="mailto:{$CONF.admin_email}">Site Admin</a><br /> === Announcement ===<br /> </div> <br /> Modified: branches/postfixadmin-smarty/password.php =================================================================== --- branches/postfixadmin-smarty/password.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/password.php 2009-04-02 11:14:17 UTC (rev 608) @@ -33,12 +33,12 @@ $SESSID_USERNAME = authentication_get_username(); +$smarty->assign ('SESSID_USERNAME', $SESSID_USERNAME); +$smarty->assign ('smarty_template', 'password'); + if ($_SERVER['REQUEST_METHOD'] == "GET") { - include ("./templates/header.php"); - include ("./templates/menu.php"); - include ("./templates/password.php"); - include ("./templates/footer.php"); + $smarty->display ('index.tpl'); } if ($_SERVER['REQUEST_METHOD'] == "POST") @@ -88,10 +88,10 @@ } } - include ("./templates/header.php"); - include ("./templates/menu.php"); - include ("./templates/password.php"); - include ("./templates/footer.php"); + $smarty->assign ('pPassword_password_current_text', $pPassword_password_current_text); + $smarty->assign ('pPassword_password_text', $pPassword_password_text); + $smarty->assign ('tMessage', $tMessage); + $smarty->display ('index.tpl'); } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ Modified: branches/postfixadmin-smarty/search.php =================================================================== --- branches/postfixadmin-smarty/search.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/search.php 2009-04-02 11:14:17 UTC (rev 608) @@ -124,10 +124,65 @@ } } -include ("templates/header.php"); -include ("templates/menu.php"); -include ("templates/search.php"); -include ("templates/footer.php"); +$check_alias_owner = array (); +if ((is_array ($tAlias) and sizeof ($tAlias) > 0)) + for ($i = 0; $i < sizeof ($tAlias); $i++) + $check_alias_owner [$i] = check_alias_owner ($SESSID_USERNAME, $tAlias[$i]['address']); + +$divide_quota = array (); +if ((is_array ($tMailbox) and sizeof ($tMailbox) > 0)) + for ($i = 0; $i < sizeof ($tMailbox); $i++) + { + $divide_quota ['quota'][$i] = divide_quota ($tMailbox[$i]['quota']); + } + +for ($i = 0; $i < sizeof ($tAlias); $i++) +{ + if ((is_array ($tAlias) and sizeof ($tAlias) > 0)) + { + $tAlias[$i]['display_address'] = $tAlias[$i]['address']; + if (stristr($tAlias[$i]['display_address'],$fSearch)) + { + $new_address = str_ireplace($fSearch, "<span style='background-color: lightgreen'>".$fSearch."</span>", $tAlias[$i]['display_address']); + $tAlias[$i]['display_address'] = $new_address; + } + if (stristr($tAlias[$i]['goto'], $fSearch)) + { + $tAlias[$i]['goto'] = str_ireplace($fSearch, "<span style='background-color: lightgreen'>".$fSearch."</span>", $tAlias[$i]['goto']); + } + ($tAlias [$i]['active'] == 1) ? $tAlias [$i]['active'] = $PALANG ['YES'] : $tAlias [$i]['active'] = $PALANG ['NO']; + } +} +for ($i = 0; $i < sizeof ($tMailbox); $i++) +{ + if ((is_array ($tMailbox) and sizeof ($tMailbox) > 0)) + { + $tMailbox[$i]['display_username'] = $tMailbox[$i]['username']; + if (stristr($tMailbox[$i]['display_username'],$fSearch)) + { + $new_name = str_ireplace ($fSearch, "<span style='background-color: lightgreen'>".$fSearch."</span>", $tMailbox[$i]['display_username']); + $tMailbox [$i]['display_username'] = $new_name; + } + if (stristr($tMailbox[$i]['name'],$fSearch)) + { + $tMailbox[$i]['name'] = str_ireplace($fSearch, "<span style='background-color: lightgreen'>".$fSearch."</span>", $tMailbox[$i]['name']); + } + ($tMailbox [$i]['active'] == 1) ? $tMailbox [$i]['active'] = $PALANG ['YES'] : $tMailbox [$i]['active'] = $PALANG ['NO']; + ($tMailbox [$i]['v_active'] == 1) ? $tMailbox [$i]['v_active'] = $PALANG ['pOverview_vacation_edit'] : $tMailbox [$i]['v_active'] = ''; + } +} + +$smarty->assign ('fSearch', $fSearch); +$smarty->assign ('select_options', select_options ($list_domains, array ($list_domains[0]))); +$smarty->assign ('tAlias', $tAlias); + +$smarty->assign ('check_alias_owner', $check_alias_owner); +$smarty->assign ('tMailbox', $tMailbox); +$smarty->assign ('divide_quota', $divide_quota); + +$smarty->assign ('smarty_template', 'search'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Modified: branches/postfixadmin-smarty/sendmail.php =================================================================== --- branches/postfixadmin-smarty/sendmail.php 2009-03-30 12:46:35 UTC (rev 607) +++ branches/postfixadmin-smarty/sendmail.php 2009-04-02 11:14:17 UTC (rev 608) @@ -79,11 +79,12 @@ } } } +$smarty->assign ('SESSID_USERNAME', $SESSID_USERNAME); +$smarty->assign ('tMessage', $tMessage); -include ("./templates/header.php"); -include ("./templates/menu.php"); -include ("./templates/sendmail.php"); -include ("./templates/footer.php"); +$smarty->assign ('smarty_template', 'sendmail'); +$smarty->display ('index.tpl'); + /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Added: branches/postfixadmin-smarty/smarty.inc.php =================================================================== --- branches/postfixadmin-smarty/smarty.inc.php (rev 0) +++ branches/postfixadmin-smarty/smarty.inc.php 2009-04-02 11:14:17 UTC (rev 608) @@ -0,0 +1,56 @@ +<? +require_once ("$incpath/smarty/libs/Smarty.class.php"); + +$smarty = new Smarty; + +//$smarty->debugging = true; + +$smarty->template_dir = $incpath.'/'.$smarty->template_dir; +$smarty->compile_dir = $incpath.'/'.$smarty->compile_dir; +$smarty->config_dir = $incpath.'/'.$smarty->config_dir; + +$CONF['theme_css'] = $CONF['postfix_admin_url'].'/'.htmlentities($CONF['theme_css']); +$CONF['theme_logo'] = $CONF['postfix_admin_url'].'/'.htmlentities($CONF['theme_logo']); + +$smarty->assign ('CONF', $CONF); +$smarty->assign ('PALANG', $PALANG); + +//*** footer.tpl +$smarty->assign ('version', $version); + +//*** menu.tpl +$smarty->assign ('boolconf_alias_domain', boolconf('alias_domain')); +$smarty->assign ('authentication_has_role', array ('global_admin' => authentication_has_role ('global-admin'), 'admin' => authentication_has_role ('admin'), 'user' => authentication_has_role ('user'))); + +if (authentication_has_role('global-admin')) +{ + $motd_file = "motd-admin.txt"; +} +else +{ + $motd_file = "motd.txt"; +} +if (file_exists ($CONF ['postfix_admin_path'].'/templates/'.$motd_file)) + $smarty->assign ('motd_file', $motd_file); +?> +<? +function select_options ($aValues, $aSelected) +{ + $ret_val = ''; + foreach ($aValues as $val) + { + $ret_val .= '<option value="'.$val.'"'; + if (in_array ($val, $aSelected)) + $ret_val .= ' selected="selected"'; + $ret_val .= '>'.$val.'</option>'; + } + return $ret_val; +} +function eval_size ($aSize) +{ + if ($aSize == 0) {$ret_val = $GLOBALS ['PALANG']['pOverview_unlimited']; } + elseif ($aSize < 0) {$ret_val = $GLOBALS ['PALANG']['pOverview_disabled']; } + else {$ret_val = $aSize; } + return $ret_val; +} +?> \ No newline at end of file Added: branches/postfixadmin-smarty/templates/admin_create-admin.tpl =================================================================== --- branches/postfixadmin-smarty/templates/admin_create-admin.tpl (rev 0) +++ branches/postfixadmin-smarty/templates/admin_create-admin.tpl 2009-04-02 11:14:17 UTC (rev 608) @@ -0,0 +1,37 @@ +<div id="edit_form"> +<form name="create_admin" method="post" action=""> +<table> + <tr> + <td colspan="3"><h3>{$PALANG.pAdminCreate_admin_welcome}</h3></td> + </tr> + <tr> + <td>{$PALANG.pAdminCreate_admin_username}:</td> + <td><input class="flat" type="text" name="fUsername" value="{$tUsername}" /></td> + <td>{$pAdminCreate_admin_username_text}</td> + </tr> + <tr> + <td>{$PALANG.pAdminCreate_admin_password}:</td> + <td><input class="flat" type="password" name="fPassword" /></td> + <td>{$pAdminCreate_admin_password_text}</td> + </tr> + <tr> + <td>{$PALANG.pAdminCreate_admin_password2}:</td> + <td><input class="flat" type="password" name="fPassword2" /></td> + <td> </td> + </tr> + <tr> + <td>{$PALANG.pAdminCreate_admin_address}:</td> + <td> + <select name="fDomains[]" size="10" multiple="multiple">{$select_options}</select> + </td> + <td> </td> + </tr> + <tr> + <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="{$PALANG.pAdminCreate_admin_button}" /></td> + </tr> + <tr> + <td colspan="3" class="standout">{$tMessage}</td> + </tr> +</table> +</form> +</div> Added: branches/postfixadmin-smarty/templates/admin_create-domain.tpl =================================================================== --- branches/postfixadmin-smarty/templates/admin_create-domain.tpl (rev 0) +++ branches/postfixadmin-smarty/templates/admin_create-domain.tpl 2009-04-02 11:14:17 UTC (rev 608) @@ -0,0 +1,59 @@ +<div id="edit_form"> +<form name="create_domain" method="post" action=""> +<table> + <tr> + <td colspan="3"><h3>{$PALANG.pAdminCreate_domain_welcome}</h3></td> + </tr> + <tr> + <td>{$PALANG.pAdminCreate_domain_domain}:</td> + <td><input class="flat" type="text" name="fDomain" value="{$tDomain}" /></td> + <td>{$pAdminCreate_domain_domain_text}</td> + </tr> + <tr> + <td>{$PALANG.pAdminCreate_domain_description}:</td> + <td><input class="flat" type="text" name="fDescription" value="{$tDescription}" /></td> + <td> </td> + </tr> + <tr> + <td>{$PALANG.pAdminCreate_domain_aliases}:</td> + <td><input class="flat" type="text" name="fAliases" value="{$tAliases}" /></td> + <td>{$PALANG.pAdminCreate_domain_aliases_text}</td> + </tr> + <tr> + <td>{$PALANG.pAdminCreate_domain_mailboxes}:</td> + <td><input class="flat" type="text" name="fMailboxes" value="{$tMailboxes}" /></td> + <td>{$PALANG.pAdminCreate_domain_mailboxes_text}</td> + </tr> +{if $CONF.quota===YES} + <tr> + <td>{$PALANG.pAdminCreate_domain_maxquota}:</td> + <td><input class="flat" type="text" name="fMaxquota" value="{$tMaxquota}" /></td> + <td>{$PALANG.pAdminCreate_domain_maxquota_text}</td> + </tr> +{/if} +{if $CONF.transport===YES} + <tr> + <td>{$PALANG.pAdminCreate_domain_transport}:</td> + <td><select class="flat" name="fTransport">{$select_options}</select></td> + <td>{$PALANG.pAdminCreate_domain_transport_text}</td> + </tr> +{/if} + <tr> + <td>{$PALANG.pAdminCreate_domain_defaultaliases}:</td> + <td><input class="flat" type="checkbox" value='on' name="fDefaultaliases"{$tDefaultaliases}/></td> + <td>{$PALANG.pAdminCreate_domain_defaultaliases_text}</td> + </tr> + <tr> + <td>{$PALANG.pAdminCreate_domain_backupmx}:</td> + <td><input class="flat" type="checkbox" value='on' name="fBackupmx"{$tBackupmx}/></td> + <td> </td> + </tr> + <tr> + <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="{$PALANG.pAdminCreate_domain_button}" /></td> + </tr> + <tr> + <td colspan="3" class="standout">{$tMessage}</td> + </tr> +</table> +</form> +</div> Added: branches/postfixadmin-smarty/templates/admin_edit-admin.tpl =================================================================== --- branches/postfixadmin-smarty/templates/admin_edit-admin.tpl (rev 0) +++ branches/postfixadmin-smarty/templates/admin_edit-admin.tpl 2009-04-02 11:14:17 UTC (rev 608) @@ -0,0 +1,46 @@ +<div id="edit_form"> +<form name="alias" method="post" action=""> +<table> + <tr> + <td colspan="3"><h3>{$PALANG.pAdminEdit_admin_welcome}</h3></td></tr> + <tr> + <td>{$PALANG.pAdminEdit_admin_username}:</td> + <td>{$username}</td> + <td> </td> + </tr> + <tr> + <td>{$PALANG.pAdminEdit_admin_password}:</td> + <td><input class="flat" type="password" name="fPassword" value=""/></td> + <td>{$pAdminEdit_admin_password_text}</td> + </tr> + <tr> + <td>{$PALANG.pAdminEdit_admin_password2}:</td> + <td><input class="flat" type="password" name="fPassword2" value="" /></td> + <td> </td> + </tr> + <tr> + <td>{$PALANG.pAdminEdit_admin_active}:</td> + <td><input class="flat" type="checkbox" name="fActive"{$tActive_checked}/></td> + <td> </td> + </tr> + <tr> + <td>{$PALANG.pAdminEdit_admin_super_admin}:</td> + <td><input class="flat" type="checkbox" name="fSadmin"{$tSadmin_checked}/></td> + <td> </td> + </tr> + <tr> + <td colspan="3" align="center"> + <select name="fDomains[]" size="10" multiple="multiple"> + {$select_options} + </select> + </td> + </tr> + <tr> + <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="{$PALANG.pAdminEdit_admin_button}" /></td> + </tr> + <tr> + <td colspan="3" class="standout">{$tMessage}</td> + </tr> +</table> +</form> +</div> Added: branches/postfixadmin-smarty/templates/admin_edit-domain.tpl =================================================================== --- branches/postfixadmin-smarty/templates/admin_edit-domain.tpl (rev 0) +++ branches/postfixadmin-smarty/templates/admin_edit-domain.tpl 2009-04-02 11:14:17 UTC (rev 608) @@ -0,0 +1,59 @@ +<div id="ed... [truncated message content] |
From: <Seb...@us...> - 2009-04-02 11:20:54
|
Revision: 609 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=609&view=rev Author: Sebastian2009 Date: 2009-04-02 11:20:39 +0000 (Thu, 02 Apr 2009) Log Message: ----------- Get bugfixes from trunk in sync Modified Paths: -------------- branches/postfixadmin-smarty/fetchmail.php branches/postfixadmin-smarty/users/vacation.php Modified: branches/postfixadmin-smarty/fetchmail.php =================================================================== --- branches/postfixadmin-smarty/fetchmail.php 2009-04-02 11:14:17 UTC (rev 608) +++ branches/postfixadmin-smarty/fetchmail.php 2009-04-02 11:20:39 UTC (rev 609) @@ -121,9 +121,10 @@ $row_id = $edit; } - +$user_mailboxes_sql= "'" . implode("','",escape_string(array_values($fm_defaults["mailbox"]))) . "'"; # mailboxes as SQL if ($row_id) { - $result = db_query ("SELECT ".implode(",",escape_string(array_keys($fm_struct)))." FROM $table_fetchmail WHERE id=" . $row_id); + $result = db_query ("SELECT ".implode(",",escape_string(array_keys($fm_struct)))." FROM $table_fetchmail WHERE id=$row_id AND mailbox IN ($user_mailboxes_sql)"); + # TODO: the "AND mailbox IN ..." part should obsolete the check_owner call. Remove it after checking again. if ($result['rows'] > 0) { $edit_row = db_array ($result['result']); $account = $edit_row['src_user'] . " @ " . $edit_row['src_server']; @@ -221,7 +222,8 @@ $tFmail = array(); if ($edit + $new == 0) { # display list - $res = db_query ("SELECT ".implode(",",escape_string(array_keys($fm_struct)))." FROM $table_fetchmail order by id desc"); + # TODO: ORDER BY would even be better if it would order by the _domain_ of the target mailbox first + $res = db_query ("SELECT ".implode(",",escape_string(array_keys($fm_struct)))." FROM $table_fetchmail WHERE mailbox IN ($user_mailboxes_sql) ORDER BY mailbox,src_server,src_user"); if ($res['rows'] > 0) { while ($row = db_array ($res['result'])) { $tFmail[] = $row; Modified: branches/postfixadmin-smarty/users/vacation.php =================================================================== --- branches/postfixadmin-smarty/users/vacation.php 2009-04-02 11:14:17 UTC (rev 608) +++ branches/postfixadmin-smarty/users/vacation.php 2009-04-02 11:20:39 UTC (rev 609) @@ -49,7 +49,8 @@ $tSubject = ''; $tBody = ''; - if($vh->get_details()) { + $details = $vh->get_details(); + if($details != false) { $tSubject = $details['subject']; $tBody = $details['body']; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Seb...@us...> - 2009-04-12 09:39:40
|
Revision: 627 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=627&view=rev Author: Sebastian2009 Date: 2009-04-12 09:39:36 +0000 (Sun, 12 Apr 2009) Log Message: ----------- get in sync with mainline. Modified Paths: -------------- branches/postfixadmin-smarty/ADDITIONS/fetchmail.pl branches/postfixadmin-smarty/DOCUMENTS/POSTFIX_CONF.txt branches/postfixadmin-smarty/common.php branches/postfixadmin-smarty/config.inc.php branches/postfixadmin-smarty/create-mailbox.php branches/postfixadmin-smarty/edit-alias.php branches/postfixadmin-smarty/login.php branches/postfixadmin-smarty/model/AliasHandler.php branches/postfixadmin-smarty/model/UserHandler.php branches/postfixadmin-smarty/setup.php branches/postfixadmin-smarty/xmlrpc.php Modified: branches/postfixadmin-smarty/ADDITIONS/fetchmail.pl =================================================================== --- branches/postfixadmin-smarty/ADDITIONS/fetchmail.pl 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/ADDITIONS/fetchmail.pl 2009-04-12 09:39:36 UTC (rev 627) @@ -8,6 +8,35 @@ # require liblockfile-simple-perl use LockFile::Simple qw(lock trylock unlock); +###################################################################### +########## Change the following variables to fit your needs ########## + +# database settings + +# database backend - uncomment one of these +our $db_type = 'Pg'; +#my $db_type = 'mysql'; + +# host name +our $db_host="127.0.0.1"; +# database name +our $db_name="postfix"; +# database username +our $db_username="mail"; +# database password +our $db_password="CHANGE_ME!"; + +# instead of changing this script, you can put your settings to /etc/mail/postfixadmin/fetchmail.conf +# just use perl syntax there to fill the variables listed above (without the "our" keyword). Example: +# $db_username = 'mail'; +if (-f "/etc/mail/postfixadmin/fetchmail.conf") { + require "/etc/mail/postfixadmin/fetchmail.conf"; +} + + +#################### Don't change anything below! #################### +###################################################################### + openlog("fetchmail-all", "pid", "mail"); sub log_and_die { @@ -30,11 +59,6 @@ } } -# mysql settings -$database="mailadmin"; -$hostname="127.0.0.1"; -$user="mail"; - $run_dir="/var/run/fetchmail"; # use specified config file @@ -42,26 +66,37 @@ do $configfile; } -$dsn = "DBI:mysql:database=$database;host=$hostname"; +if($db_type eq "Pg" || $db_type eq "mysql") { + $dsn = "DBI:$db_type:database=$db_name;host=$db_host"; +} else { + log_and_die "unsupported db_type $db_type"; +} + $lock_file=$run_dir . "/fetchmail-all.lock"; $lockmgr = LockFile::Simple->make(-autoclean => 1, -max => 1); $lockmgr->lock($lock_file) || log_and_die "can't lock ${lock_file}"; -#mysql connect -$dbh = DBI->connect($dsn, $user, $password) || log_and_die "cannot connect the database"; +# database connect +$dbh = DBI->connect($dsn, $db_username, $db_password) || log_and_die "cannot connect the database"; -$sql=<<SQL; -SELECT id,mailbox,src_server,src_auth,src_user,src_password,src_folder,fetchall,keep,protocol,mda,extra_options,usessl -FROM fetchmail -WHERE unix_timestamp(now())-unix_timestamp(date) > poll_time*60 -SQL +if($db_type eq "Pg") { + $sql_cond = "date_part('epoch',now())-date_part('epoch',date)"; +} elsif($db_type eq "mysql") { + $sql_cond = "unix_timestamp(now())-unix_timestamp(date)"; +} +$sql = " + SELECT id,mailbox,src_server,src_auth,src_user,src_password,src_folder,fetchall,keep,protocol,mda,extra_options,usessl + FROM fetchmail + WHERE $sql_cond > poll_time*60 + "; + my (%config); map{ my ($id,$mailbox,$src_server,$src_auth,$src_user,$src_password,$src_folder,$fetchall,$keep,$protocol,$mda,$extra_options,$usessl)=@$_; - syslog("info","fetch ${src_user}@${src_server} for ${mailbox}"); + syslog("info","fetch ${src_user}@${src_server} for ${mailbox}"); $cmd="user '${src_user}' there with password '".decode_base64($src_password)."'"; $cmd.=" folder '${src_folder}'" if ($src_folder); Modified: branches/postfixadmin-smarty/DOCUMENTS/POSTFIX_CONF.txt =================================================================== --- branches/postfixadmin-smarty/DOCUMENTS/POSTFIX_CONF.txt 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/DOCUMENTS/POSTFIX_CONF.txt 2009-04-12 09:39:36 UTC (rev 627) @@ -57,7 +57,7 @@ password = password hosts = localhost dbname = postfix -query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 +query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1' (Note: PostgreSQL does not have a concat() function, instead use e.g. .... alias.address = '%u' || '@' || alias_domain.target_domain AND ....) @@ -67,7 +67,7 @@ password = password hosts = localhost dbname = postfix -query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 +query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1' (See above note re Concat + PostgreSQL) @@ -87,18 +87,17 @@ password = password hosts = localhost dbname = postfix -query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1' +query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' #expansion_limit = 100 -(See above note re Concat + PostgreSQL) - mysql_virtual_alias_domain_mailbox_maps.cf: user = postfix password = password hosts = localhost dbname = postfix -query = SELECT CONCAT(domain,'/',maildir) FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 +query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1' + (See above note re Concat + PostgreSQL) # For quota support Modified: branches/postfixadmin-smarty/common.php =================================================================== --- branches/postfixadmin-smarty/common.php 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/common.php 2009-04-12 09:39:36 UTC (rev 627) @@ -22,39 +22,33 @@ } define('POSTFIXADMIN', 1); # checked in included files -function incorrect_setup() { - global $incpath; - # we ask the user to delete setup.php, which makes a blind redirect a bad idea - if(!is_file("$incpath/setup.php")) { - die ("config.inc.php does not exist or is not configured correctly. Please re-install setup.php and create/fix your config."); - } else { - # common.php is indirectly included in setup.php (via upgrade.php) - avoid endless redirect loop - if (!preg_match('/setup\.php$/', $_SERVER['SCRIPT_NAME'])) { - header("Location: setup.php"); - exit(0); - } - } -} - $incpath = dirname(__FILE__); (ini_get('magic_quotes_gpc') ? ini_set('magic_quotes_runtime', '0') : '1'); (ini_get('magic_quotes_gpc') ? ini_set('magic_quotes_sybase', '0') : '1'); -if(ini_get('register_globals')) { +if(ini_get('register_globals') == 'on') { die("Please turn off register_globals; edit your php.ini"); } require_once("$incpath/variables.inc.php"); if(!is_file("$incpath/config.inc.php")) { - // incorrectly setup... - incorrect_setup(); + die("config.inc.php is missing!"); } require_once("$incpath/config.inc.php"); + if(isset($CONF['configured'])) { if($CONF['configured'] == FALSE) { - incorrect_setup(); + die("Please edit config.inc.php - change \$CONF['configured'] to true after setting your database settings"); } + if(!isset($CONF['setup_password'])) { + die("You must have a \$CONF['setup_password'] defined - this allows authenticated access to setup.php"); + } + if($CONF['setup_password'] == 'changeme') { + die("You must specify a password in config.inc.php (\$CONF['setup_password']) in order to access setup.php"); + } } + + require_once("$incpath/languages/language.php"); require_once("$incpath/functions.inc.php"); require_once("$incpath/languages/" . check_language () . ".lang"); Modified: branches/postfixadmin-smarty/config.inc.php =================================================================== --- branches/postfixadmin-smarty/config.inc.php 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/config.inc.php 2009-04-12 09:39:36 UTC (rev 627) @@ -27,10 +27,12 @@ * The following line needs commenting out or removing before the * application will run! * Doing this implies you have changed this file as required. + * i.e. configuring database etc; specifying setup.php password etc. */ $CONF['configured'] = false; - +// In order to setup Postfixadmin, you MUST change the password below. +$CONF['setup_password'] = 'changeme'; // Postfix Admin Path // Set the location of your Postfix Admin installation here. // YOU MUST ENTER THE COMPLETE URL e.g. http://domain.tld/postfixadmin Modified: branches/postfixadmin-smarty/create-mailbox.php =================================================================== --- branches/postfixadmin-smarty/create-mailbox.php 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/create-mailbox.php 2009-04-12 09:39:36 UTC (rev 627) @@ -203,69 +203,13 @@ $tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />"; } -/* -# TODO: The following code segment is from admin/create-mailbox.php. To be compared/merged with the code from /create-mailbox.php. - Lines starting with /* were inserted to keep this section in commented mode. - - - if ($result['rows'] != 1) - { - $tDomain = $fDomain; - $tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />"; - } - else - { - - $error=TRUE; // Being pessimistic - if (mailbox_postcreation($fUsername,$fDomain,$maildir)) - { - if ('pgsql'==$CONF['database_type']) - { - $result=db_query("COMMIT"); - -/* should really not be possible: */ -/* - if (!$result) die('COMMIT-query failed.'); - } - $error=FALSE; - } else { - $tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />"; - if ('pgsql'==$CONF['database_type']) - { - $result=db_query("ROLLBACK"); - -/* should really not be possible: */ -/* - if (!$result) die('ROLLBACK-query failed.'); - } else { - /* - When we cannot count on transactions, we need to move forward, despite - the problems. - */ -/* - $error=FALSE; - } - } - - - if (!$error) - { - db_log ($CONF['admin_email'], $fDomain, 'create_mailbox', $fUsername); - - */ - -/* -TODO: this is the start of /create-mailbox code segment that was originally used in /create-mailbox.php instead - of the above from admin/create-mailbox.php. - To be compared / merged. - */ - // apparently uppercase usernames really confuse some IMAP clients. $fUsername = strtolower($fUsername); $local_part = ''; if(preg_match('/^(.*)@/', $fUsername, $matches)) { $local_part = $matches[1]; } + $result = db_query ("INSERT INTO $table_mailbox (username,password,name,maildir,local_part,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$local_part','$quota','$fDomain',NOW(),NOW(),'$sqlActive')"); if ($result['rows'] != 1 || !mailbox_postcreation($fUsername,$fDomain,$maildir, $quota)) { @@ -277,9 +221,6 @@ { db_query('COMMIT'); db_log ($SESSID_USERNAME, $fDomain, 'create_mailbox', "$fUsername"); -/* -TODO: this is the end of /create-mailbox.php code segment - */ $tDomain = $fDomain; $tQuota = $CONF['maxquota']; Modified: branches/postfixadmin-smarty/edit-alias.php =================================================================== --- branches/postfixadmin-smarty/edit-alias.php 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/edit-alias.php 2009-04-12 09:39:36 UTC (rev 627) @@ -34,6 +34,10 @@ authentication_require_role('admin'); $SESSID_USERNAME = authentication_get_username(); +if($CONF['alias_control_admin'] == 'NO' && !authentication_has_role('global-admin')) { + die("Check config.inc.php - domain administrators do not have the ability to edit user's aliases (alias_control_admin)"); +} + if ($_SERVER['REQUEST_METHOD'] == "GET") { if (isset ($_GET['address'])) $fAddress = escape_string ($_GET['address']); @@ -46,6 +50,9 @@ { $row = db_array ($result['result']); $tGoto = $row['goto']; + + //. if we are not a global admin, and special_alias_control is NO, hide the alias that's the mailbox name. + if($CONF['special_alias_control'] == 'NO' && !authentication_has_role('global-admin')) { /* Has a mailbox as well? Remove the address from $tGoto in order to edit just the real aliases */ $result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fAddress' AND domain='$fDomain'"); @@ -53,7 +60,8 @@ { $tGoto = preg_replace ('/\s*,*\s*' . $fAddress . '\s*,*\s*/', '', $tGoto); } - } + } + } } else { @@ -90,7 +98,7 @@ $goto = preg_replace ('/,*$|^,*/', '', $goto); $goto = preg_replace ('/,,*/', ',', $goto); - if (empty ($goto)) + if (empty ($goto) && !authentication_has_role('global-admin')) { $error = 1; $tGoto = $_POST['fGoto']; @@ -121,11 +129,20 @@ /* The alias has a real mailbox as well, prepend $goto with it */ if ($result['rows'] == 1) { - $goto = "$fAddress,$goto"; + // ensure mailbox alias exists... if they're a domain admin, and they're not allowed to... + if($CONF['alias_control_admin'] == 'NO' && !authentication_has_role('global-admin')) { + $array[] = $fAddress; + } + } + // duplicates suck, mmkay.. + $array = array_unique($array); + $goto = implode(',', $array); + if ($error != 1) { + $goto = escape_string($goto); $result = db_query ("UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fAddress' AND domain='$fDomain'"); if ($result['rows'] != 1) { Modified: branches/postfixadmin-smarty/login.php =================================================================== --- branches/postfixadmin-smarty/login.php 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/login.php 2009-04-12 09:39:36 UTC (rev 627) @@ -31,14 +31,13 @@ require_once('common.php'); # force user to delete setup.php (allows creation of superadmins!) -if (file_exists (realpath ("./setup.php"))) { - if (is_string($CONF['configured']) && $CONF['configured'] == 'I_know_the_risk_of_not_deleting_setup.php') - { +if (isset($CONF['configured']) && $CONF['configured'] == 'I_know_the_risk_of_not_deleting_setup.php') { } else { - print "Please delete " . dirname(__FILE__) . "/setup.php before using Postfix Admin!"; - exit; + if($CONF['configured'] !== true) { + print "Installation not yet configured; please edit config.inc.php"; + exit; } } $smarty->assign ('language_selector', language_selector()); Modified: branches/postfixadmin-smarty/model/AliasHandler.php =================================================================== --- branches/postfixadmin-smarty/model/AliasHandler.php 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/model/AliasHandler.php 2009-04-12 09:39:36 UTC (rev 627) @@ -97,6 +97,8 @@ $addresses = array_unique($addresses); $original = $this->get(true); + $tmp = preg_split('/@/', $this->username); + $domain = $tmp[1]; foreach($original as $address) { if($vacation_persist) { @@ -143,8 +145,6 @@ } if($this->hasAliasRecord() == false) { $true = db_get_boolean(True); - $tmp = preg_split('/@/', $username); - $domain = $tmp[1]; $sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), $true)"; } else { Modified: branches/postfixadmin-smarty/model/UserHandler.php =================================================================== --- branches/postfixadmin-smarty/model/UserHandler.php 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/model/UserHandler.php 2009-04-12 09:39:36 UTC (rev 627) @@ -35,7 +35,7 @@ $result = db_query ("UPDATE $table_mailbox SET password='$new_db_password',modified=NOW() WHERE username='$username'"); - db_log ($username, $USERID_DOMAIN, 'edit_password', "$USERID_USERNAME"); + db_log ($username, $USERID_DOMAIN, 'edit_password', "$username"); return true; } Modified: branches/postfixadmin-smarty/setup.php =================================================================== --- branches/postfixadmin-smarty/setup.php 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/setup.php 2009-04-12 09:39:36 UTC (rev 627) @@ -23,11 +23,8 @@ * Form POST \ GET Variables: -none- */ -define('POSTFIXADMIN', 1); # checked in included files +require_once("common.php"); -require_once("languages/en.lang"); -require_once("functions.inc.php"); - $CONF['show_header_text'] = 'NO'; $CONF['theme_logo'] = 'images/logo-default.png'; $CONF['theme_css'] = 'css/default.css'; @@ -309,6 +306,17 @@ if ($_SERVER['REQUEST_METHOD'] == "POST") { + // ensure password is correct. + if(!isset($_POST['setup_password'])) { + $error += 1; + $tMessage = "Setup password must be specified"; + } + if($_POST['setup_password'] != $CONF['setup_password']) { + $error += 1; + $tMessage = "Setup password not specified correctly"; + } + + if($error == 0) { if (isset ($_POST['fUsername'])) $fUsername = escape_string ($_POST['fUsername']); if (isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']); if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']); @@ -325,10 +333,14 @@ if (isset ($_POST['fUsername'])) $tUsername = escape_string ($_POST['fUsername']); } else { print "<p><b>$tMessage</b></p>"; - echo "<p><b>Delete (or rename) setup.php, and then click <a href='login.php'>here to login</a>.</b></p>"; } } + else { + print "<p><b>$tMessage</b></p>"; + } + } + if ($_SERVER['REQUEST_METHOD'] == "GET" || $error != 0) { ?> @@ -340,6 +352,11 @@ <td colspan="3"><h3>Create superadmin account</h3></td> </tr> <tr> + <td>Setup password (see config.inc.php)</td> + <td><input class="flat" type="password" name="setup_password" value="" /></td> + <td></td> + </tr> + <tr> <td><?php print $PALANG['pAdminCreate_admin_username'] . ":"; ?></td> <td><input class="flat" type="text" name="fUsername" value="<?php print $tUsername; ?>" /></td> <td><?php print $pAdminCreate_admin_username_text; ?></td> @@ -367,8 +384,8 @@ <?php } - print "<b>Make sure you delete this setup.php file!</b><br />\n"; - print "Also check the config.inc.php file for any settings that you might need to change!<br />\n"; + print "<b>Since version 2.3 there is no requirement to delete setup.php!</b><br />\n"; + print "<b>Check the config.inc.php file for any other settings that you might need to change!<br />\n"; } ?> </div> Modified: branches/postfixadmin-smarty/xmlrpc.php =================================================================== --- branches/postfixadmin-smarty/xmlrpc.php 2009-04-11 23:24:20 UTC (rev 626) +++ branches/postfixadmin-smarty/xmlrpc.php 2009-04-12 09:39:36 UTC (rev 627) @@ -34,7 +34,6 @@ require_once('Zend/XmlRpc/Server.php'); $server = new Zend_XmlRpc_Server(); -session_start(); /** * @param string $username This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Seb...@us...> - 2009-05-18 12:47:33
|
Revision: 658 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=658&view=rev Author: Sebastian2009 Date: 2009-05-18 12:47:27 +0000 (Mon, 18 May 2009) Log Message: ----------- get in sync from mainline. Modified Paths: -------------- branches/postfixadmin-smarty/ADDITIONS/cleanupdirs.pl branches/postfixadmin-smarty/CHANGELOG.TXT branches/postfixadmin-smarty/DOCUMENTS/UPGRADE.txt branches/postfixadmin-smarty/INSTALL.TXT branches/postfixadmin-smarty/broadcast-message.php branches/postfixadmin-smarty/common.php branches/postfixadmin-smarty/config.inc.php branches/postfixadmin-smarty/create-alias-domain.php branches/postfixadmin-smarty/create-alias.php branches/postfixadmin-smarty/debian/changelog branches/postfixadmin-smarty/debian/control branches/postfixadmin-smarty/debian/copyright branches/postfixadmin-smarty/debian/rules branches/postfixadmin-smarty/delete.php branches/postfixadmin-smarty/edit-active.php branches/postfixadmin-smarty/edit-alias.php branches/postfixadmin-smarty/functions.inc.php branches/postfixadmin-smarty/index.php branches/postfixadmin-smarty/languages/nb.lang branches/postfixadmin-smarty/list-domain.php branches/postfixadmin-smarty/list-virtual.php branches/postfixadmin-smarty/login.php branches/postfixadmin-smarty/setup.php branches/postfixadmin-smarty/templates/admin_list-domain.tpl branches/postfixadmin-smarty/upgrade.php branches/postfixadmin-smarty/users/vacation.php Added Paths: ----------- branches/postfixadmin-smarty/debian/TODO branches/postfixadmin-smarty/debian/apache.conf branches/postfixadmin-smarty/debian/lighttpd.conf branches/postfixadmin-smarty/debian/postfixadmin.config branches/postfixadmin-smarty/debian/postfixadmin.docs branches/postfixadmin-smarty/debian/postfixadmin.examples branches/postfixadmin-smarty/debian/postfixadmin.install branches/postfixadmin-smarty/debian/postfixadmin.links branches/postfixadmin-smarty/debian/postfixadmin.postinst branches/postfixadmin-smarty/debian/postfixadmin.postrm branches/postfixadmin-smarty/debian/postfixadmin.prerm branches/postfixadmin-smarty/debian/templates branches/postfixadmin-smarty/debian/watch Removed Paths: ------------- branches/postfixadmin-smarty/debian/apache-conf branches/postfixadmin-smarty/debian/docs Modified: branches/postfixadmin-smarty/ADDITIONS/cleanupdirs.pl =================================================================== --- branches/postfixadmin-smarty/ADDITIONS/cleanupdirs.pl 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/ADDITIONS/cleanupdirs.pl 2009-05-18 12:47:27 UTC (rev 658) @@ -42,13 +42,21 @@ use Getopt::Long; ### change settings as needed, see notes above ################################# -my $root_path = "/home/vmail"; -my $logfile = "/var/log/removed_maildirs.log"; -my $db_hostname = "localhost"; -my $db_port = "3306"; -my $db_database = "postfix"; -my $db_username = "someuser"; -my $db_password = "somepass"; +our $root_path = "/home/vmail"; +our $logfile = "/var/log/removed_maildirs.log"; +our $db_hostname = "localhost"; +our $db_port = "3306"; # this script currently supports MySQL only +our $db_database = "postfix"; +our $db_username = "someuser"; +our $db_password = "somepass"; + +# instead of changing this script, you can put your settings to /etc/mail/postfixadmin/cleanupdirs.conf +# just use perl syntax there to fill the variables listed above (without the "our" keyword). Example: +# $db_username = 'mail'; +if (-f "/etc/mail/postfixadmin/cleanupdirs.conf") { + require "/etc/mail/postfixadmin/cleanupdirs.conf"; +} + ################################################################################ ### begin program ############################################################## @@ -63,6 +71,7 @@ or die "Unable to access directory '$root_path' ($!)"; foreach my $domain_dir (sort readdir DOMAINDIR) { next if $domain_dir =~ /^\./; # skip dotted dirs + next if (! -d "$root_path/$domain_dir"); # skip everything that is not a directory my $full_domain_dir = "$root_path/$domain_dir"; opendir USERDIR, $full_domain_dir or die "Unable to access directory '$full_domain_dir' ($!)"; Modified: branches/postfixadmin-smarty/CHANGELOG.TXT =================================================================== --- branches/postfixadmin-smarty/CHANGELOG.TXT 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/CHANGELOG.TXT 2009-05-18 12:47:27 UTC (rev 658) @@ -11,6 +11,23 @@ # $Id$ +Version 2.3rc4 - 2009/04/18 - SVN r632 +-------------------------------------- + + - *Security fix* - on upgrade setup.php is restored; allowing a malicious + user to create their own superadmin account. We've removed the requirement to delete + setup.php, and instead a new config parameter (setup_password) is used to protect access + to this page. Password is encrypted, and setup.php can be used to generate the initial value. + - Fix undefined variables problem(s) + - Fix PostgreSQL date timestamp issues... + +Version 2.3rc3 - 2009/04/06 - SVN r611 +-------------------------------------- + + - Minor improvements to the Debian packaging, expect more soon + - Assorted bug fixes + - Partial support for per-user fetchmail.pl support + Version 2.3rc2 - 2009/02/03 - SVN r593 -------------------------------------- Modified: branches/postfixadmin-smarty/DOCUMENTS/UPGRADE.txt =================================================================== --- branches/postfixadmin-smarty/DOCUMENTS/UPGRADE.txt 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/DOCUMENTS/UPGRADE.txt 2009-05-18 12:47:27 UTC (rev 658) @@ -43,7 +43,7 @@ Make sure that you are in your WWW directory and then unarchive the Postfix Admin archive (whatever the filename is): - $ tar -zxvf postfixadmin-2.2.tgz + $ tar -zxvf postfixadmin-X.X.tgz 3. Change permissions @@ -66,28 +66,32 @@ Comparing config.inc.php with your previous using "diff" might save you some time. +You can use a config.local.php file to contain your local settings - these will override any +defined in config.inc.php -5. Perform appropriate database upgrades +5. Run setup.php ---------------------------------------- +Access setup.php through a web browser. + +It will attempt to upgrade your database, and also allow you to create a superadmin user. + +From version 2.3, you need to specify a setup_password in config.inc.php - +setup.php should guide you through this process. If you do not have a setup_password, type one +into the form, and setup.php will echo out the hashed value (which needs to go into config.inc.php). +The setup_password removes the requirement for you to delete setup.php, and also closes a security hole. + Since version 2.2 of Postfixadmin, setup.php can perform the needed database updates automatically . -Open setup.php in your browser to update your database scheme. - If you update from 2.1 or older, also create a superadmin account using setup.php. Note that admin/ has been merged into the main directory. Login with the superadmin account to setup domains and domain admins. -6. Delete setup.php -------------------- -Delete setup.php - it allown non-authorized users to create a superadmin -account! - -7. Done +6. Done ------- This is all that is needed. Fire up your browser and go to the site that you specified to host Postfix Admin. Modified: branches/postfixadmin-smarty/INSTALL.TXT =================================================================== --- branches/postfixadmin-smarty/INSTALL.TXT 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/INSTALL.TXT 2009-05-18 12:47:27 UTC (rev 658) @@ -104,14 +104,13 @@ The setup.php script will attempt to create the database structure (or upgrade it if you're coming from a previous version). -Assuming everything is OK you can create the admin user using the form displayed. +Assuming everything is OK you can specify a password (which you'll +need to use setup.php again in the future); when you submit the form, +the hashed value (which you need to enter into config.inc.php is echoed +out - with appropriate instructions on what to do with it). -Once you submit the form, all that's left to do is to delete "setup.php" +create the admin user using the form displayed. -e.g. - -mv setup.php setup.php.disabled - 5. Use PostfixAdmin ------------------- @@ -122,4 +121,7 @@ ------------------- As of March 2007, PostfixAdmin moved to SourceForge. For the forum posts and source updates, see: + https://sourceforge.net/projects/postfixadmin + +There is also #postfixadmin on irc.freenode.net. Modified: branches/postfixadmin-smarty/broadcast-message.php =================================================================== --- branches/postfixadmin-smarty/broadcast-message.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/broadcast-message.php 2009-05-18 12:47:27 UTC (rev 658) @@ -45,9 +45,11 @@ } else { - $q = 'select username from mailbox union '. - 'select goto from alias '. - 'where goto not in (select username from mailbox)'; + $table_mailbox = table_by_key('mailbox'); + $table_alias = table_by_key('alias'); + + $q = "select username from $table_mailbox union select goto from $table_alias " . + "where goto not in (select username from $table_mailbox)"; $result = db_query ($q); if ($result['rows'] > 0) Modified: branches/postfixadmin-smarty/common.php =================================================================== --- branches/postfixadmin-smarty/common.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/common.php 2009-05-18 12:47:27 UTC (rev 658) @@ -40,12 +40,6 @@ if($CONF['configured'] == FALSE) { die("Please edit config.inc.php - change \$CONF['configured'] to true after setting your database settings"); } - if(!isset($CONF['setup_password'])) { - die("You must have a \$CONF['setup_password'] defined - this allows authenticated access to setup.php"); - } - if($CONF['setup_password'] == 'changeme') { - die("You must specify a password in config.inc.php (\$CONF['setup_password']) in order to access setup.php"); - } } Modified: branches/postfixadmin-smarty/config.inc.php =================================================================== --- branches/postfixadmin-smarty/config.inc.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/config.inc.php 2009-05-18 12:47:27 UTC (rev 658) @@ -31,7 +31,9 @@ */ $CONF['configured'] = false; -// In order to setup Postfixadmin, you MUST change the password below. +// In order to setup Postfixadmin, you MUST specify a hashed password here. +// To create the hash, visit setup.php in a browser and type a password into the field, +// on submission it will be echoed out to you as a hashed value. $CONF['setup_password'] = 'changeme'; // Postfix Admin Path // Set the location of your Postfix Admin installation here. @@ -298,8 +300,11 @@ // - add the corresponding color to show_custom_colors $CONF['show_custom_domains']=array("subdomain.domain.ext","domain2.ext"); $CONF['show_custom_colors']=array("lightgreen","lightblue"); +// If you use a recipient_delimiter in your postfix config, you can also honor it when aliases are checked. +// Example: $CONF['recipient_delimiter'] = "+"; +// Set to "" to disable this check. +$CONF['recipient_delimiter'] = ""; - // Optional: // Script to run after creation of mailboxes. // Note that this may fail if PHP is run in "safe mode", or if @@ -379,7 +384,7 @@ // that future updates work without problems, you can use a separate config // file (config.local.php) instead of editing this file and override some // settings there. -if (file_exists(dirname(__FILE__) . '/config.local.php')) { # for / +if (file_exists(dirname(__FILE__) . '/config.local.php')) { include(dirname(__FILE__) . '/config.local.php'); } Modified: branches/postfixadmin-smarty/create-alias-domain.php =================================================================== --- branches/postfixadmin-smarty/create-alias-domain.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/create-alias-domain.php 2009-05-18 12:47:27 UTC (rev 658) @@ -38,6 +38,8 @@ exit; } +$fAliasDomain = ''; +$fTargetDomain= ''; $username = authentication_get_username(); $SESSID_USERNAME = $username; if(authentication_has_role('global-admin')) { Modified: branches/postfixadmin-smarty/create-alias.php =================================================================== --- branches/postfixadmin-smarty/create-alias.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/create-alias.php 2009-05-18 12:47:27 UTC (rev 658) @@ -117,15 +117,14 @@ $fAddress = "@" . escape_string ($_POST['fDomain']); } - $append_alias = false; - $result = db_query ("SELECT * FROM $table_alias WHERE address='$fAddress'"); if ($result['rows'] == 1) { - $append_alias = true; + $error = 1; $tAddress = escape_string ($_POST['fAddress']); $tGoto = $fGoto; $tDomain = $fDomain; + $pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error2']; } if ($fActive == "on") { @@ -135,29 +134,13 @@ $sqlActive = db_get_boolean(False); } - $success = false; - /* Alias (or mailbox) already present, let's add the destination to that row */ - if ($append_alias) { + if ($error != 1) { if (preg_match('/^\*@(.*)$/', $fGoto, $match)) { $fGoto = "@" . $match[1]; } - $array = db_array ($result['result']); - - $values ['goto'] = $array['goto'] . ',' . $fGoto; - $result = db_update ($table_alias, "address = '$fAddress'", $values, array ('modified')); - $success = ($result == 1); - - } elseif ($error != 1) { - if (preg_match('/^\*@(.*)$/', $fGoto, $match)) { - $fGoto = "@" . $match[1]; - } - $result = db_query ("INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW(),'$sqlActive')"); - $success = ($result['rows'] == 1); - } - - if (! $success) { + if ($result['rows'] != 1) { $tDomain = $fDomain; $tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br />\n"; } @@ -168,6 +151,7 @@ $tMessage = $PALANG['pCreate_alias_result_success'] . "<br />($fAddress -> $fGoto)<br />\n"; } } +} $smarty->assign ('tAddress', $tAddress); $smarty->assign ('select_options', select_options ($list_domains, array ($tDomain))); Added: branches/postfixadmin-smarty/debian/TODO =================================================================== --- branches/postfixadmin-smarty/debian/TODO (rev 0) +++ branches/postfixadmin-smarty/debian/TODO 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,4 @@ + * Do all necessary things automatically (maybe with dbconfig?) (database, setp password...) + * DebTags + * dbconfig: DOCUMENTS/SECURITY.txt + * include postfix configuration templates Deleted: branches/postfixadmin-smarty/debian/apache-conf =================================================================== --- branches/postfixadmin-smarty/debian/apache-conf 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/debian/apache-conf 2009-05-18 12:47:27 UTC (rev 658) @@ -1,5 +0,0 @@ -# BEGIN FOR POSTFIXADMIN - -Alias /postfixadmin /usr/share/postfixadmin - -# END FOR POSTFIXADMIN Added: branches/postfixadmin-smarty/debian/apache.conf =================================================================== --- branches/postfixadmin-smarty/debian/apache.conf (rev 0) +++ branches/postfixadmin-smarty/debian/apache.conf 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,5 @@ +# BEGIN FOR POSTFIXADMIN + +Alias /postfixadmin /usr/share/postfixadmin + +# END FOR POSTFIXADMIN Modified: branches/postfixadmin-smarty/debian/changelog =================================================================== --- branches/postfixadmin-smarty/debian/changelog 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/debian/changelog 2009-05-18 12:47:27 UTC (rev 658) @@ -1,106 +1,6 @@ -postfixadmin (2.3rc2) unstable; urgency=low +postfixadmin (2.3rc5) unstable; urgency=low - * Subversion revision 593 - * Add model directory to .deb etc. - * Updated ChangeLog + * Initial release (Closes: #247225) - -- David Goodwin <dav...@pa...> Thu, 19 Mar 2009 19:50:00 +0000 + -- Norman Messtorff <no...@no...> Sat, 09 May 2009 22:36:26 +0200 -postfixadmin (2.3rc1) unstable; urgency=low - - * Subversion revision 587 - * New XmlRpc API for integration with 3rd party web mail clients. - * Various bug fixes - * Translation patches - * Addition of dovecotpw support - - -- David Goodwin <dav...@pa...> Wed, 18 Mar 2009 19:52:00 +0000 - -postfixadmin (2.3beta) unstable; urgency=low - - * Subversion revision 533 - * Fixes for MySQL upgrade issues - * Improved vacation.pl (renotification options, use SMTP headers, better - logging, optional external config file) - * Improved fetchmail.pl - * Domain aliases - new implementation should reduce backscatter etc. - * translation updates - * Added domain-postcreation script support - * Enhanced mailbox table to make it easier for people to customise where mailboxes live - * and much more - - -- David Goodwin <dav...@pa...> Sat, 17 Jan 2009 20:06:00 +0000 - -postfixadmin (2.2.1.1) unstable; urgency=low - - * Subversion revision 412 (from branches/postfixadmin-2.2.1) - * THIS IS EFFECTIVELY THE SAME AS 2.2.1 (which should probably be ignored) - - -- David Goodwin <dav...@pa...> Wed, 23 Jul 2008 12:37:00 +0000 - -postfixadmin (2.2.1) unstable; urgency=low - - * Various bug fixes (MySQL charset issue(s)) - * Updated translations (pl, bg, ru, nb, tw etc) - * added quota parameter to mailbox_postcreation hook - * new hook to update the quota after editing a mailbox - ($CONF['mailbox_postedit_script']) - * fixed subfolder creation order and timing - * allow smtp server to be specified in vacation.pl - * fixed MySQL charset issues - * several small bugfixes - * Norwegian (bokmal) translation added - * Updated translations (pl, bg, ru, nb, tw etc) - * Subversion revision 408 - - -- David Goodwin <dav...@pa...> Mon, 21 Jul 2008 22:44:00 +0000 -postfixadmin (2.2.0) unstable; urgency=low - - * 2.2.0 Released. - * Fix fetchmail script to work with PostgreSQL - * Fix fetchmail table creation in MySQL and PostgreSQL - * Documentation fixups - * Subversion revision 356 - - -- David Goodwin <dav...@pa...> Thu, 29 Apr 2008 15:47:00 +0000 - -postfixadmin (2.2.0-rc5) unstable; urgency=low - - * Fix MySQL installation issues (schema not being created!) - * Fix MySQL vacation_notification timestamp issue - * SVN revision: 340 - - -- David Goodwin <dav...@pa...> Wed, 23 Apr 2008 16:27:00 +0000 - -postfixadmin (2.2.0-1rc4) unstable; urgency=low - - * Removal of standalone database schema files (see upgrade.php) - * Various bug fixes - * Better/Move documentation on installation - * setup.php/upgrade.php works for PostgreSQL and MySQL - * MySQL Unicode problems fixed - * I think this is effectively v2.2.0 - * SVN revision: 336 - - -- David Goodwin <dav...@pa...> Sun, 20 Apr 2008 20:19:00 +0000 - -postfixadmin (2.2.0-1rc3) unstable; urgency=low - - * Various bug fixes - - -- David Goodwin <dav...@pa...> Thu, 28 Feb 2008 12:00:00 +0000 - -postfixadmin (2.2.0-1rc2) unstable; urgency=low - - * Improved CSS - * Improved upgrade procedure (should work for PGSQL) (see upgrade.php) - * Various bug fixes - - -- David Goodwin <dav...@pa...> Sat, 29 Dec 2007 21:14:00 +0000 - -postfixadmin (2.2.0-1rc1) unstable; urgency=low - - * Initial Release (via dpkg) - - -- David Goodwin <dav...@pa...> Sun, 04 Nov 2007 15:36:00 +0000 - Modified: branches/postfixadmin-smarty/debian/control =================================================================== --- branches/postfixadmin-smarty/debian/control 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/debian/control 2009-05-18 12:47:27 UTC (rev 658) @@ -1,8 +1,8 @@ Source: postfixadmin Section: admin Priority: optional -Maintainer: David Goodwin <dav...@pa...> -Build-Depends: debhelper (>= 7) +Maintainer: Norman Messtorff <no...@no...> +Build-Depends: debhelper (>= 7), po-debconf, quilt (>= 0.46) Standards-Version: 3.8.1 Homepage: http://postfixadmin.sourceforge.net XS-Vcs-Svn: https://postfixadmin.svn.sourceforge.net/svnroot/postfixadmin/trunk @@ -10,19 +10,16 @@ Package: postfixadmin Architecture: all -Depends: apache2 | httpd, libapache2-mod-php5 | libapache-mod-php5 | php5-cgi | php5, ${misc:Depends} -Recommends: -Suggests: postfix, postgresql-server, mysql-server, squirrelmail, squirrelmail-postfixadmin, courier-imap, dovecot-imapd +Depends: debconf (>= 0.5), dbconfig-common, wwwconfig-common (>= 0.2.0), apache2 | lighttpd, libapache2-mod-php5 | php5-cgi | php5, php5-imap, php5-mysql | php5-pgsql, mysql-client | postgresql-client, ${misc:Depends} +Recommends: postfix-mysql | postfix-pgsql, mysql-server | postgresql-server +Suggests: squirrelmail-postfixadmin, dovecot-common | courier-authlib-mysql | courier-authlib-postgresql Description: Virtual mail hosting interface for Postfix Postfixadmin is a web interface to managing virtual users and domains - for a Postfix mailserver. The web interface is written in PHP. - Postfixadmin allows administrators to delegate handling a domain to domain - administrators. - Postfixadmin allows users to login and change their own settings (e.g. forward, - vacation, password etc). - Postfixadmin also includes support for virtual vacation support - - this requires Perl and various CPAN modules to be installed. - See included vacation.pl for further details. - . - Homepage: http://postfixadmin.sf.net/ - + for a Postfix mail transport agent. The web interface is written in PHP. + It supports Virtual mailboxes, aliases, forwarders and vacation. + . + Allows administrators to delegate the handling of domains to the + domain administrators. Allows users to login and change their own + settings (e.g. forwarders, vacation, passwords etc). + . + Provides easy integration into dovecot, courier or cyrus. Modified: branches/postfixadmin-smarty/debian/copyright =================================================================== --- branches/postfixadmin-smarty/debian/copyright 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/debian/copyright 2009-05-18 12:47:27 UTC (rev 658) @@ -3,28 +3,33 @@ It was downloaded from subversion, via http://postfixadmin.sf.net -Upstream Authors: The PostfixAdmin Development Team <pos...@li...> +Upstream Authors: + The PostfixAdmin Development Team <pos...@li...> + Copyright: Copyright (C) 2007 The Postfixadmin Project Team - This program is free software; you can redistribute it and/or modify +License: + + This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software + along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -On Debian GNU/Linux systems, the complete text of the GNU General Public -License can be found in the `/usr/share/common-licenses' directory. +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL-2' + The Debian packaging of Postfixadmin is licensed under the same terms as Postfixadmin itself. Deleted: branches/postfixadmin-smarty/debian/docs =================================================================== --- branches/postfixadmin-smarty/debian/docs 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/debian/docs 2009-05-18 12:47:27 UTC (rev 658) @@ -1,6 +0,0 @@ -VIRTUAL_VACATION -DOCUMENTS -ADDITIONS -LICENSE.TXT -INSTALL.TXT -GPL-LICENSE.TXT Added: branches/postfixadmin-smarty/debian/lighttpd.conf =================================================================== --- branches/postfixadmin-smarty/debian/lighttpd.conf (rev 0) +++ branches/postfixadmin-smarty/debian/lighttpd.conf 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,4 @@ +# Alias for Postfixadmin +alias.url += ( + "/postfixadmin" => "/usr/share/postfixadmin", +) Added: branches/postfixadmin-smarty/debian/postfixadmin.config =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.config (rev 0) +++ branches/postfixadmin-smarty/debian/postfixadmin.config 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,15 @@ +#!/bin/sh +set -e + +. /usr/share/debconf/confmodule +db_version 2.0 +db_input high postfixadmin/reconfigure-webserver || true +db_go || true + +if [ -f /usr/share/dbconfig-common/dpkg/config ]; then + # we support mysql and pgsql + dbc_dbtypes="mysql, pgsql" + + . /usr/share/dbconfig-common/dpkg/config + dbc_go postfixadmin $@ +fi Added: branches/postfixadmin-smarty/debian/postfixadmin.docs =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.docs (rev 0) +++ branches/postfixadmin-smarty/debian/postfixadmin.docs 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,5 @@ +DOCUMENTS +CHANGELOG.TXT +GPL-LICENSE.TXT +INSTALL.TXT +LICENSE.TXT Added: branches/postfixadmin-smarty/debian/postfixadmin.examples =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.examples (rev 0) +++ branches/postfixadmin-smarty/debian/postfixadmin.examples 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,2 @@ +ADDITIONS +VIRTUAL_VACATION Added: branches/postfixadmin-smarty/debian/postfixadmin.install =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.install (rev 0) +++ branches/postfixadmin-smarty/debian/postfixadmin.install 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,12 @@ +*.php usr/share/postfixadmin +admin usr/share/postfixadmin +css usr/share/postfixadmin +images usr/share/postfixadmin +languages usr/share/postfixadmin +model usr/share/postfixadmin +motd.txt usr/share/postfixadmin +motd-users.txt usr/share/postfixadmin +templates usr/share/postfixadmin +users usr/share/postfixadmin +debian/apache.conf etc/postfixadmin +debian/lighttpd.conf etc/postfixadmin Added: branches/postfixadmin-smarty/debian/postfixadmin.links =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.links (rev 0) +++ branches/postfixadmin-smarty/debian/postfixadmin.links 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1 @@ +etc/postfixadmin/config.inc.php usr/share/postfixadmin/config.inc.php Added: branches/postfixadmin-smarty/debian/postfixadmin.postinst =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.postinst (rev 0) +++ branches/postfixadmin-smarty/debian/postfixadmin.postinst 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,25 @@ +#!/bin/bash +set -e + +if [ "$1" = "configure" ]; then + . /usr/share/debconf/confmodule + db_version 2.0 + dbc_generate_include='template:/etc/postfixadmin/config.inc.php' + dbc_generate_include_owner='root:www-data' + dbc_generate_include_perms='640' + dbc_generate_include_args="-U -o template_infile=/usr/share/postfixadmin/config.inc.php" + . /usr/share/dbconfig-common/dpkg/postinst + dbc_go postfixadmin $@ + db_get postfixadmin/reconfigure-webserver + servers="$RET" + restart="$servers" + linkdestination_apache="../../postfixadmin/apache.conf" + linkdestination_lighttpd="../../postfixadmin/lighttpd.conf" + linkname="postfixadmin" + . /usr/share/wwwconfig-common/confd-link.sh + . /usr/share/wwwconfig-common/restart.sh +fi + +#DEBHELPER# + +exit 0 Added: branches/postfixadmin-smarty/debian/postfixadmin.postrm =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.postrm (rev 0) +++ branches/postfixadmin-smarty/debian/postfixadmin.postrm 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,26 @@ +#!/bin/sh +set -e + +if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then + if [ -f /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule + db_version 2.0 + + # restart the webserver only if we know which one was configured. + if db_get postfixadmin/reconfigure-webserver; then + servers="$RET" + restart=$servers + linkname="postfixadmin" + . /usr/share/wwwconfig-common/restart.sh + fi + + if [ -f /usr/share/dbconfig-common/dpkg/postrm ]; then + . /usr/share/dbconfig-common/dpkg/postrm + dbc_go postfixadmin $@ + fi + fi +fi + +#DEBHELPER# + +exit 0 Added: branches/postfixadmin-smarty/debian/postfixadmin.prerm =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.prerm (rev 0) +++ branches/postfixadmin-smarty/debian/postfixadmin.prerm 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,20 @@ +#!/bin/sh +set -e + +. /usr/share/debconf/confmodule + +if [ -f /usr/share/dbconfig-common/dpkg/prerm ]; then + . /usr/share/dbconfig-common/dpkg/prerm + dbc_go postfixadmin $@ +fi + +if [ -f /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule + db_version 2.0 + db_get postfixadmin/reconfigure-webserver + servers="$RET" + linkname="postfixadmin" + . /usr/share/wwwconfig-common/confd-link.sh +fi + +#DEBHELPER# Modified: branches/postfixadmin-smarty/debian/rules =================================================================== --- branches/postfixadmin-smarty/debian/rules 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/debian/rules 2009-05-18 12:47:27 UTC (rev 658) @@ -4,16 +4,21 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 +include /usr/share/quilt/quilt.make + build: build-stamp -build-stamp: + +build-stamp: $(QUILT_STAMPFN) dh_testdir + #dh_testroot touch build-stamp -clean: + +clean: unpatch dh_testdir dh_testroot - rm -f build-stamp dh_clean + debconf-updatepo install: build dh_testdir @@ -21,33 +26,20 @@ dh_prep dh_installdirs dh_install - cp motd* debian/postfixadmin/usr/share/postfixadmin - cp *.php debian/postfixadmin/usr/share/postfixadmin mv debian/postfixadmin/usr/share/postfixadmin/config.inc.php debian/postfixadmin/etc/postfixadmin/config.inc.php - ln -s /etc/postfixadmin/config.inc.php debian/postfixadmin/usr/share/postfixadmin/config.inc.php - perl -p -i -e "s#$$CONF\['postfix_admin_path'\] = dirname\(__FILE__\)#$$CONF\['postfix_admin_path'\] = '/usr/share/postfixadmin'#" debian/postfixadmin/etc/postfixadmin/config.inc.php - cp -a model debian/postfixadmin/usr/share/postfixadmin - cp -a admin debian/postfixadmin/usr/share/postfixadmin - cp -a images debian/postfixadmin/usr/share/postfixadmin - cp -a languages debian/postfixadmin/usr/share/postfixadmin - cp -a templates debian/postfixadmin/usr/share/postfixadmin - cp -a users debian/postfixadmin/usr/share/postfixadmin - cp css/default.css debian/postfixadmin/usr/share/postfixadmin/css - cp debian/apache-conf debian/postfixadmin/etc/apache2/conf.d/postfixadmin find debian/postfixadmin -name .svn | xargs -r rm -r # Build architecture-independent files here. binary-indep: build install dh_testdir dh_testroot - dh_installdebconf + dh_installchangelogs + dh_installdebconf dh_installdocs -X.svn - dh_installexamples - dh_installman - dh_installcron + dh_installexamples -X.svn dh_link dh_compress - dh_fixperms -X/var + dh_fixperms dh_installdeb dh_gencontrol dh_md5sums Added: branches/postfixadmin-smarty/debian/templates =================================================================== --- branches/postfixadmin-smarty/debian/templates (rev 0) +++ branches/postfixadmin-smarty/debian/templates 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,6 @@ +Template: postfixadmin/reconfigure-webserver +Type: multiselect +Choices: apache2, apache, apache-ssl, apache-perl, lighttpd +_Description: Web server to reconfigure automatically: + Please choose the web server that should be automatically configured + to run postfixadmin. Added: branches/postfixadmin-smarty/debian/watch =================================================================== --- branches/postfixadmin-smarty/debian/watch (rev 0) +++ branches/postfixadmin-smarty/debian/watch 2009-05-18 12:47:27 UTC (rev 658) @@ -0,0 +1,2 @@ +version=3 +http://sf.net/postfixadmin/postfixadmin-(.*)\.tar\.gz Modified: branches/postfixadmin-smarty/delete.php =================================================================== --- branches/postfixadmin-smarty/delete.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/delete.php 2009-05-18 12:47:27 UTC (rev 658) @@ -43,57 +43,6 @@ $error=0; -/** - * delete_alias - * Action: Delete an alias - * @param String $alias- alias to delete. - * @param String $domain - domain of the alias - * @param boolean $force_delete - deletes the alias from the table if true, - * checks if the alias is real and act accordlying if false. - * Default is false. - * @return String username (e.g. fo...@ex...) - */ -function delete_alias ($alias, $domain, $force_delete = false) -{ - global $table_alias, $table_mailbox; - $real_alias = true; - - if (! $force_delete) - { - $result = db_query ("SELECT 1 FROM $table_mailbox - WHERE username='$alias' AND domain='$domain'"); - if ($result['rows'] != 0) - { - /* If the alias is a real mailbox as well, remove all its real aliases and keep - * only the address */ - $real_alias = false; - } - } - - if ($force_delete or $real_alias) - { - $result = db_query ("DELETE FROM $table_alias WHERE address='$alias' AND domain='$domain'"); - } - else - { - $result = db_query ("UPDATE $table_alias SET goto='$alias',modified=NOW() - WHERE address='$alias' AND domain='$domain'"); - } - - if ($result['rows'] != 1) - { - $tMessage = $PALANG['pDelete_delete_error'] . "<b>$alias</b> (alias)!</span>"; - - return false; - } - else - { - db_log ($SESSID_USERNAME, $fDomain, 'delete_alias', $fDelete); - } - - return true; -} - if ($fTable == "admin") { authentication_require_role('global-admin'); @@ -149,7 +98,7 @@ } } # ($fTable == "alias_domain") -elseif ($fTable == "mailbox") +elseif ($fTable == "alias" or $fTable == "mailbox") { if (!check_owner ($SESSID_USERNAME, $fDomain)) @@ -165,10 +114,12 @@ else { if ($CONF['database_type'] == "pgsql") db_query('BEGIN'); - - $error = delete_alias ($fDelete, $fDomain, $force_delete = true) ? 0 : 1; - if (! $error) - { + /* there may be no aliases to delete */ + $result = db_query("SELECT * FROM $table_alias WHERE address = '$fDelete' AND domain = '$fDomain'"); + if($result['rows'] == 1) { + $result = db_query ("DELETE FROM $table_alias WHERE address='$fDelete' AND domain='$fDomain'"); + db_log ($SESSID_USERNAME, $fDomain, 'delete_alias', $fDelete); + } /* is there a mailbox? if do delete it from orbit; it's the only way to be sure */ $result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fDelete' AND domain='$fDomain'"); if ($result['rows'] == 1) @@ -204,22 +155,10 @@ header ("Location: list-virtual.php?domain=$fDomain"); exit; } else { - $tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (physical mail)!</span>"; + $tMessage .= $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (physical mail)!</span>"; if ($CONF['database_type'] == "pgsql") db_query('ROLLBACK'); } - } # ($fTable == "mailbox") } -elseif ($fTable == "alias") { - $error = delete_alias ($fDelete, $fDomain) ? 0 : 1; - - if ($error != 1) - { - header ("Location: list-virtual.php?domain=$fDomain"); - exit; - } else { - $tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</span>"; - } -} else { flash_error($PALANG['invalid_parameter']); Modified: branches/postfixadmin-smarty/edit-active.php =================================================================== --- branches/postfixadmin-smarty/edit-active.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/edit-active.php 2009-05-18 12:47:27 UTC (rev 658) @@ -32,6 +32,12 @@ authentication_require_role('admin'); $SESSID_USERNAME = authentication_get_username(); +$fAliasDomain = ''; +$fUsername = ''; +$fAlias = ''; +$fDomain = ''; +$fReturn = ''; + if ($_SERVER['REQUEST_METHOD'] == "GET") { if (isset ($_GET['alias_domain'])) $fAliasDomain = escape_string ($_GET['alias_domain']); Modified: branches/postfixadmin-smarty/edit-alias.php =================================================================== --- branches/postfixadmin-smarty/edit-alias.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/edit-alias.php 2009-05-18 12:47:27 UTC (rev 658) @@ -38,19 +38,37 @@ die("Check config.inc.php - domain administrators do not have the ability to edit user's aliases (alias_control_admin)"); } -if ($_SERVER['REQUEST_METHOD'] == "GET") -{ - if (isset ($_GET['address'])) $fAddress = escape_string ($_GET['address']); - if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']); +/* retrieve existing alias record for the user first... may be via GET or POST */ - if (check_owner ($SESSID_USERNAME, $fDomain) || authentication_has_role('global-admin')) +if(isset($_GET['address']) && isset($_GET['domain'])) { + $fAddress = escape_string($_GET['address']); + $fDomain = escape_string($_GET['domain']); +} +elseif(isset($_POST['address']) && isset($_POST['domain'])) { + $fAddress = escape_string($_POST['address']); + $fDomain = escape_string($_POST['domain']); +} +else { + die("Required parameters not present"); +} + +/* Check the user is able to edit the domain's aliases */ + + if(!check_owner($SESSID_USERNAME, $fDomain) && !authentication_has_role('global-admin')) { + die("You lack permission to do this. yes."); + } + + $table_alias = table_by_key('alias'); + $alias_list = array(); + $orig_alias_list = array(); $result = db_query ("SELECT * FROM $table_alias WHERE address='$fAddress' AND domain='$fDomain'"); if ($result['rows'] == 1) { $row = db_array ($result['result']); $tGoto = $row['goto']; - + $orig_alias_list = explode(',', $tGoto); + $alias_list = $orig_alias_list; //. if we are not a global admin, and special_alias_control is NO, hide the alias that's the mailbox name. if($CONF['special_alias_control'] == 'NO' && !authentication_has_role('global-admin')) { @@ -58,35 +76,31 @@ $result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fAddress' AND domain='$fDomain'"); if ($result['rows'] == 1) { - $tGoto = preg_replace ('/\s*,*\s*' . $fAddress . '\s*,*\s*/', '', $tGoto); - } + $alias_list = array(); // empty it, repopulated again below + foreach($orig_alias_list as $alias) { + if(strtolower($alias) == strtolower($fAddress)) { + // mailbox address is dropped if they don't have special_alias_control enabled, and/or not a global-admin + } + else { + $alias_list[] = $alias; + } + } } - } } - else - { - $tMessage = $PALANG['pEdit_alias_address_error']; - } } +else { + die("Invalid alias / domain combination"); +} if ($_SERVER['REQUEST_METHOD'] == "POST") { $pEdit_alias_goto = $PALANG['pEdit_alias_goto']; - if (isset ($_GET['address'])) $fAddress = escape_string ($_GET['address']); - $fAddress = strtolower ($fAddress); - if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']); if (isset ($_POST['fGoto'])) $fGoto = escape_string ($_POST['fGoto']); $fGoto = strtolower ($fGoto); - if (! (check_owner ($SESSID_USERNAME, $fDomain) || authentication_has_role('global-admin')) ) + if (!check_alias_owner ($SESSID_USERNAME, $fAddress)) { - $error = 1; - $tGoto = $_POST['fGoto']; - $tMessage = $PALANG['pEdit_alias_domain_error'] . "$fDomain</span>"; - } - elseif (!check_alias_owner ($SESSID_USERNAME, $fAddress)) - { $error = 1; $tGoto = $fGoto; $tMessage = $PALANG['pEdit_alias_result_error']; @@ -105,40 +119,39 @@ $tMessage = $PALANG['pEdit_alias_goto_text_error1']; } + $new_aliases = array(); if ($error != 1) { - $array = preg_split ('/,/', $goto); + $new_aliases = explode(',', $goto); } - else - { - $array = array(); - } + $new_aliases = array_unique($new_aliases); - for ($i = 0; $i < sizeof ($array); $i++) { - if (in_array ("$array[$i]", $CONF['default_aliases'])) continue; - if (empty ($array[$i])) continue; # TODO: should never happen - remove after 2.2 release - if (!check_email ($array[$i])) + foreach($new_aliases as $address) { + if (in_array($address, $CONF['default_aliases'])) continue; + if (empty($address)) continue; # TODO: should never happen - remove after 2.2 release + if (!check_email($address)) { $error = 1; $tGoto = $goto; - $tMessage = $PALANG['pEdit_alias_goto_text_error2'] . "$array[$i]</span>"; + $tMessage = $PALANG['pEdit_alias_goto_text_error2'] . "$address</span>"; } } $result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fAddress' AND domain='$fDomain'"); - /* The alias has a real mailbox as well, prepend $goto with it */ if ($result['rows'] == 1) { - // ensure mailbox alias exists... if they're a domain admin, and they're not allowed to... if($CONF['alias_control_admin'] == 'NO' && !authentication_has_role('global-admin')) { - $array[] = $fAddress; + // if original record had a mailbox alias, so ensure the updated one does too. + if(in_array($orig_alias_list, $fAddress)) { + $new_aliases[] = $fAddress; + } } } // duplicates suck, mmkay.. - $array = array_unique($array); + $new_aliases = array_unique($new_aliases); - $goto = implode(',', $array); + $goto = implode(',', $new_aliases); if ($error != 1) { @@ -152,7 +165,7 @@ { db_log ($SESSID_USERNAME, $fDomain, 'edit_alias', "$fAddress -> $goto"); - header ("Location: list-virtual.php?domain=$fDomain"); + header ("Location: list-virtual.php?domain=$fDomain"); exit; } } @@ -162,6 +175,8 @@ $fDomain = htmlentities($fDomain, ENT_QUOTES); $array = preg_split ('/,/', $tGoto); +// TOCHECK +$array = $alias_list; $smarty->assign ('fAddress', $fAddress); $smarty->assign ('array', $array); Modified: branches/postfixadmin-smarty/functions.inc.php =================================================================== --- branches/postfixadmin-smarty/functions.inc.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/functions.inc.php 2009-05-18 12:47:27 UTC (rev 658) @@ -22,7 +22,7 @@ exit; } -$version = '2.3 rc2'; +$version = '2.3 rc4'; /** * check_session @@ -431,13 +431,7 @@ global $table_alias, $table_mailbox, $table_domain; $list = array (); - $result = db_query ("SELECT COUNT(*) FROM $table_alias - LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username - WHERE ($table_alias.domain='$domain' AND $table_mailbox.maildir IS NULL) - OR - ($table_alias.domain='$domain' - AND $table_alias.goto LIKE '%,%' - AND $table_mailbox.maildir IS NOT NULL)"); + $result = db_query ("SELECT COUNT(*) FROM $table_alias WHERE domain='$domain'"); $row = db_row ($result['result']); $list['alias_count'] = $row[0]; @@ -449,7 +443,7 @@ $result = db_query ("SELECT SUM(quota) FROM $table_mailbox WHERE domain='$domain'"); $row = db_row ($result['result']); $list['quota_sum'] = $row[0]; - $list['alias_count'] = $list['alias_count']; + $list['alias_count'] = $list['alias_count'] - $list['mailbox_count']; $list['alias_pgindex']=array (); $list['mbox_pgindex']=array (); @@ -471,10 +465,6 @@ FROM $table_alias LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username WHERE ($table_alias.domain='$domain' AND $table_mailbox.maildir IS NULL) - OR - ($table_alias.domain='$domain' - AND $table_alias.goto LIKE '%,%' - AND $table_mailbox.maildir IS NOT NULL) ORDER BY $table_alias.address LIMIT $limitSql"; $result = db_query ("$query"); $row = db_array ($result['result']); @@ -487,10 +477,6 @@ FROM $table_alias LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username WHERE ($table_alias.domain='$domain' AND $table_mailbox.maildir IS NULL) - OR - ($table_alias.domain='$domain' - AND $table_alias.goto LIKE '%,%' - AND $table_mailbox.maildir IS NOT NULL) ORDER BY $table_alias.address LIMIT $limitSql"; $result = db_query ("$query"); $row = db_array ($result['result']); @@ -2140,7 +2126,13 @@ while ( ($g=array_pop($gotos)) && $stat_ok ) { $stat_catchall = substr($g,strpos($g,"@")); - $stat_result = db_query ("SELECT address FROM $table_alias WHERE address = '$g' OR address = '$stat_catchall'"); + $stat_delimiter = ""; + if (!empty($CONF['recipient_delimiter'])) { + $delimiter = preg_quote($CONF['recipient_delimiter'], "/"); + $stat_delimiter = preg_replace('/' .$delimiter. '[^' .$delimiter. ']*@/', "@", $g); + $stat_delimiter = "OR address = '$stat_delimiter'"; + } + $stat_result = db_query ("SELECT address FROM $table_alias WHERE address = '$g' OR address = '$stat_catchall' $stat_delimiter"); if ($stat_result['rows'] == 0) { $stat_ok = 0; @@ -2183,8 +2175,15 @@ // POP/IMAP CHECK if ( $CONF['show_popimap'] == 'YES' ) { + $stat_delimiter = ""; + if (!empty($CONF['recipient_delimiter'])) { + $delimiter = preg_quote($CONF['recipient_delimiter'], "/"); + $stat_delimiter = preg_replace('/' .$delimiter. '[^' .$delimiter. '@]*@/', "@", $stat_goto); + $stat_delimiter = ',' . $stat_delimiter; + } + //if the address passed in appears in its own goto field, its POP/IMAP - if ( preg_match ('/,' . $show_alias . ',/', ',' . $stat_goto . ',') ) + if ( preg_match ('/,' . $show_alias . ',/', ',' . $stat_goto . $stat_delimiter . ',') ) { $stat_string .= "<span style='background-color:" . $CONF['show_popimap_color'] . "'>" . $CONF['show_status_text'] . "</span> "; Modified: branches/postfixadmin-smarty/index.php =================================================================== --- branches/postfixadmin-smarty/index.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/index.php 2009-05-18 12:47:27 UTC (rev 658) @@ -23,7 +23,7 @@ $CONF['configured'] = FALSE; @include_once('config.inc.php'); # hide error message because only $CONF['configured'] is checked here -if (!file_exists (realpath ("./setup.php")) || $CONF['configured'] == 'I_know_the_risk_of_not_deleting_setup.php') +if ( $CONF['configured'] === TRUE ) { header ("Location: login.php"); exit; Modified: branches/postfixadmin-smarty/languages/nb.lang =================================================================== --- branches/postfixadmin-smarty/languages/nb.lang 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/languages/nb.lang 2009-05-18 12:47:27 UTC (rev 658) @@ -4,7 +4,7 @@ // Language file Norwegian (bokmål) // by Odd Henriksen // -// Last updated: 2009-01-24 / Odd Henriksen +// Last updated: 2009-04-19 / Odd Henriksen // $PALANG['YES'] = 'JA'; @@ -24,7 +24,7 @@ $PALANG['pLogin_username'] = 'Brukernavn (e-postadresse)'; $PALANG['pLogin_password'] = 'Passord'; $PALANG['pLogin_button'] = 'Logg inn'; -$PALANG['pLogin_failed'] = 'Your email address or password are not correct.'; # XXX +$PALANG['pLogin_failed'] = 'E-postadressen eller passordet er ikke korrekt.'; $PALANG['pLogin_login_users'] = 'Vanlige brukere kan klikke her for å gå til brukerseksjonen.'; $PALANG['pMenu_main'] = 'Hoved'; @@ -339,10 +339,10 @@ $PALANG['pUsersVacation_welcome_text'] = 'Du har allerede et autosvar aktivert!'; $PALANG['pUsersVacation_subject'] = 'Emne'; $PALANG['pUsersVacation_subject_text'] = 'Fraværsmelding'; -$PALANG['pUsersVacation_body'] = 'Meldingstekst'; # XXX text changed to 'Message' +$PALANG['pUsersVacation_body'] = 'Meldingstekst'; $PALANG['pUsersVacation_body_text'] = <<<EOM -Jeg er utilgjengelig fra <date> til <date>. -Dersom det gjelder noe viktig kan du kontakte <contact person>. +Jeg er utilgjengelig fra (dato) til (dato). +Dersom det gjelder noe viktig kan du kontakte (kontaktperson). EOM; $PALANG['pUsersVacation_button_away'] = 'Merk meg som fraværende'; $PALANG['pUsersVacation_button_back'] = 'Merk meg som tilstede'; Modified: branches/postfixadmin-smarty/list-domain.php =================================================================== --- branches/postfixadmin-smarty/list-domain.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/list-domain.php 2009-05-18 12:47:27 UTC (rev 658) @@ -40,33 +40,60 @@ $fUsername = ""; } +$list_all_domains = 0; if (isset($admin_properties) && $admin_properties['domain_count'] == 'ALL') { # list all domains for superadmins - $list_domains = list_domains (); + $list_all_domains = 1; } elseif (!empty($fUsername)) { $list_domains = list_domains_for_admin ($fUsername); } elseif ($is_superadmin) { - $list_domains = list_domains (); + $list_all_domains = 1; } else { $list_domains = list_domains_for_admin(authentication_get_username()); } -if (!empty ($list_domains)) -{ - for ($i = 0; $i < sizeof ($list_domains); $i++) - { - $domain_properties [$i] = get_domain_properties ($list_domains[$i]); +if ($list_all_domains == 1) { + $where = " WHERE domain.domain != 'ALL' "; # TODO: the ALL dummy domain is annoying... +} else { + $list_domains = escape_string($list_domains); + $where = " WHERE domain.domain IN ('" . join("','", $list_domains) . "') "; +} - $domain_properties [$i]['name'] = $list_domains [$i]; - $domain_properties [$i]['backupmx'] = ($domain_properties [$i]['backupmx'] == 1) ? $PALANG ['YES'] : $PALANG ['NO']; - $domain_properties [$i]['active'] = ($domain_properties [$i]['active'] == 1) ? $PALANG ['YES'] : $PALANG ['NO']; - - $domain_properties [$i]['maxquota'] = eval_size ($domain_properties [$i]['maxquota']); - $domain_properties [$i]['aliases'] = eval_size ($domain_properties [$i]['aliases']); - $domain_properties [$i]['mailboxes'] = eval_size ($domain_properties [$i]['mailboxes']); - } +# fetch domain data and number of mailboxes +# (PgSQL requires the extensive GROUP BY statement, https://sourceforge.net/forum/message.php?msg_id=7386240) +$query = " + SELECT domain.* , COUNT( DISTINCT mailbox.username ) AS mailbox_count + FROM domain + LEFT JOIN mailbox ON domain.domain = mailbox.domain + $where + GROUP BY domain.domain, domain.description, domain.aliases, domain.mailboxes, + domain.maxquota, domain.quota, domain.transport, domain.backupmx, domain.created, + domain.modified, domain.active + ORDER BY domain.domain + "; +$result = db_query($query); + +while ($row = db_array ($result['result'])) { + $domain_properties[$row['domain']] = $row; } -#} +# fetch number of aliases +# doing this separate is much faster than doing it in one "big" query +$query = " + SELECT domain.domain, COUNT( DISTINCT alias.address ) AS alias_count + FROM domain + LEFT JOIN alias ON domain.domain = alias.domain + $where + GROUP BY domain.domain + ORDER BY domain.domain + "; + +$result = db_query($query); + +while ($row = db_array ($result['result'])) { + # add number of aliases to $domain_properties array. mailbox aliases do not count. + $domain_properties [$row['domain']] ['alias_count'] = $row['alias_count'] - $domain_properties [$row['domain']] ['mailbox_count']; +} + $smarty->assign ('domain_properties', $domain_properties); if ($is_superadmin) { Modified: branches/postfixadmin-smarty/list-virtual.php =================================================================== --- branches/postfixadmin-smarty/list-virtual.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/list-virtual.php 2009-05-18 12:47:27 UTC (rev 658) @@ -123,22 +123,15 @@ $table_alias.active FROM $table_alias LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username WHERE ($table_alias.domain='$fDomain' AND $table_mailbox.maildir IS NULL) - OR - ($table_alias.domain='$fDomain' - AND $table_alias.goto LIKE '%,%' - AND $table_mailbox.maildir IS NOT NULL) ORDER BY $table_alias.address LIMIT $fDisplay, $page_size"; - if ('pgsql'==$CONF['database_type']) { $query = "SELECT address, goto, - modified, + extract(epoch from modified) as modified, active - FROM $table_alias WHERE domain='$fDomain' - AND NOT EXISTS(SELECT 1 FROM $table_mailbox - WHERE username=$table_alias.address - AND $table_alias.goto NOT LIKE '%,%') + FROM $table_alias + WHERE domain='$fDomain' AND NOT EXISTS(SELECT 1 FROM $table_mailbox WHERE username=$table_alias.address) ORDER BY address LIMIT $page_size OFFSET $fDisplay"; } $result = db_query ($query); @@ -148,16 +141,12 @@ { if ('pgsql'==$CONF['database_type']) { - $row['modified']=gmstrftime('%c %Z',$row['modified']); + //. at least in my database, $row['modified'] already looks like : 2009-04-11 21:38:10.75586+01, + // while gmstrftime expects an integer value. strtotime seems happy though. + //$row['modified']=gmstrftime('%c %Z',$row['modified']); + $row['modified'] = date('Y-m-d H:i', strtotime($row['modified'])); $row['active']=('t'==$row['active']) ? 1 : 0; } - - /* Has a real mailbox as well? Remove the address from $row['goto'] in order to edit just the real aliases */ - if (strstr ($row['goto'], ',') != FALSE) - { - $row['goto'] = preg_replace ('/\s*,*\s*' . $row['address'] . '\s*,*\s*/', '', $row['goto']); - } - $tAlias[] = $row; } } @@ -186,9 +175,9 @@ { if ('pgsql'==$CONF['database_type']) { - //var_dump($row); - $row['created']=gmstrftime('%c %Z',strtotime($row['created'])); - $row['modified']=gmstrftime('%c %Z',strtotime($row['modified'])); + // XXX + $row['modified'] = date('Y-m-d H:i', strtotime($row['modified'])); + $row['created'] = date('Y-m-d H:i', strtotime($row['created'])); $row['active']=('t'==$row['active']) ? 1 : 0; if($row['v_active'] == NULL) { $row['v_active'] = 'f'; @@ -389,5 +378,5 @@ $smarty->display ('index.tpl'); -/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ +/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Modified: branches/postfixadmin-smarty/login.php =================================================================== --- branches/postfixadmin-smarty/login.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/login.php 2009-05-18 12:47:27 UTC (rev 658) @@ -31,15 +31,11 @@ require_once('common.php'); # force user to delete setup.php (allows creation of superadmins!) -if (isset($CONF['configured']) && $CONF['configured'] == 'I_know_the_risk_of_not_deleting_setup.php') { - } - else - { - if($CONF['configured'] !== true) { + if($CONF['configured'] !== true) { print "Installation not yet configured; please edit config.inc.php"; exit; } -} + $smarty->assign ('language_selector', language_selector()); if ($_SERVER['REQUEST_METHOD'] == "GET") Modified: branches/postfixadmin-smarty/setup.php =================================================================== --- branches/postfixadmin-smarty/setup.php 2009-05-14 19:16:00 UTC (rev 657) +++ branches/postfixadmin-smarty/setup.php 2009-05-18 12:47:27 UTC (rev 658) @@ -23,7 +23,7 @@ * Form POST \ GET Variables: -none- */ -require_once("common.php"); +require_once('common.php'); $CONF['show_header_text'] = 'NO'; $CONF['theme_logo'] = 'images/logo-default.png'; @@ -71,7 +71,7 @@ } else { - print "<li><b>Unable to check for PHP version. (missing function: phpversion())</b></li>\n"; + print "<li><b>Unable to check for PHP version. (missing function: phpversion())</b></li>\n"; } // @@ -79,13 +79,13 @@ // if ($f_apache_get_version == 1) { - print "<li>" . apache_get_version() . "</li>\n"; + print "<li>" . apache_get_version() . "</li>\n"; } else { - # not running on Apache. - # However postfixadmin _is_ running, so obviously we are on a supported webserver ;-)) - # No need to confuse the user with a warning. + # not running on Apache. + # However postfixadmin _is_ running, so obviously we are on a supported webserver ;-)) + # No need to confuse the user with a warning. } print "</ul>"; @@ -97,18 +97,18 @@ // if ($f_get_magic_quotes_gpc == 1) { - if (get_magic_quotes_gpc () == 0) - { - print "<li>Magic Quotes: Disabled - OK</li>\n"; - } - else - { - print "<li><b>Warning: Magic Quotes: ON (internal workaround used)</b></li>\n"; - } + if (get_magic_quotes_gpc () == 0) + { + print "<li>Magic Quotes: Disabled - OK</li>\n"; + } + else + { + print "<li><b>Warning: Magic Quotes: ON (internal workaround used)</b></li>\n"; + } } else { - print "<li><b>Unable to check for Magic Quotes. (missing function: get_magic_quotes_gpc())</b></li>\n"; + print "<li><b>Unable to check for Magic Quotes. (missing function: get_magic_quotes_gpc())</b></li>\n"; } // @@ -117,27 +117,27 @@ $config_loaded = 0; if ($file_config == 1) { - print "<li>Depends on: presence config.inc.php - OK</li>\n"; - require_once('config.inc.php'); - $config_loaded = 1; + print "<li>Depends on: presence config.inc.php - OK</li>\n"; + require_once('config.... [truncated message content] |
From: <Seb...@us...> - 2009-05-24 11:12:41
|
Revision: 666 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=666&view=rev Author: Sebastian2009 Date: 2009-05-24 11:12:34 +0000 (Sun, 24 May 2009) Log Message: ----------- - incorporate latest changes from rev 661. Revision Links: -------------- http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=661&view=rev Modified Paths: -------------- branches/postfixadmin-smarty/CHANGELOG.TXT branches/postfixadmin-smarty/functions.inc.php branches/postfixadmin-smarty/list-virtual.php Modified: branches/postfixadmin-smarty/CHANGELOG.TXT =================================================================== --- branches/postfixadmin-smarty/CHANGELOG.TXT 2009-05-24 09:38:23 UTC (rev 665) +++ branches/postfixadmin-smarty/CHANGELOG.TXT 2009-05-24 11:12:34 UTC (rev 666) @@ -11,6 +11,14 @@ # $Id$ +Version 2.3rc5 - 2009/05/20 - SVN r658 +-------------------------------------- + + - Improvements to the setup process + - Far better Debian packaging (we hope!) which should make installation much, much easier. + - Various bug fixes + - Performance enhancements (or we fixed the regressions ...) in domain listing etc. + Version 2.3rc4 - 2009/04/18 - SVN r632 -------------------------------------- Modified: branches/postfixadmin-smarty/functions.inc.php =================================================================== --- branches/postfixadmin-smarty/functions.inc.php 2009-05-24 09:38:23 UTC (rev 665) +++ branches/postfixadmin-smarty/functions.inc.php 2009-05-24 11:12:34 UTC (rev 666) @@ -22,7 +22,7 @@ exit; } -$version = '2.3 rc4'; +$version = '2.3 rc5'; /** * check_session Modified: branches/postfixadmin-smarty/list-virtual.php =================================================================== --- branches/postfixadmin-smarty/list-virtual.php 2009-05-24 09:38:23 UTC (rev 665) +++ branches/postfixadmin-smarty/list-virtual.php 2009-05-24 11:12:34 UTC (rev 666) @@ -154,9 +154,17 @@ if ($CONF['vacation_control_admin'] == 'YES') { if (boolconf('used_quotas')) - $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active, $table_quota.current FROM $table_mailbox LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email LEFT JOIN $table_quota ON $table_mailbox.username=$table_quota.username WHERE $table_mailbox.domain='$fDomain' AND $table_quota.path='quota/storage' ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; + $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active, $table_quota.current FROM $table_mailbox + LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email + LEFT JOIN $table_quota ON $table_mailbox.username=$table_quota.username + WHERE $table_mailbox.domain='$fDomain' + ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; + // AND $table_quota.path='quota/storage' + else - $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active FROM $table_mailbox LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email WHERE $table_mailbox.domain='$fDomain' ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; + $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active FROM $table_mailbox + LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email + WHERE $table_mailbox.domain='$fDomain' ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Seb...@us...> - 2009-06-08 19:01:19
|
Revision: 674 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=674&view=rev Author: Sebastian2009 Date: 2009-06-08 19:01:03 +0000 (Mon, 08 Jun 2009) Log Message: ----------- - fix some small bugs in templates, mainly domains not showing in row for domain admin - tweak tables, left-align text - remove php-files from template directory, not needed anymore - get in sync with mainline Modified Paths: -------------- branches/postfixadmin-smarty/css/default.css branches/postfixadmin-smarty/debian/README.Debian branches/postfixadmin-smarty/debian/control branches/postfixadmin-smarty/debian/postfixadmin.postinst branches/postfixadmin-smarty/debian/postfixadmin.prerm branches/postfixadmin-smarty/debian/rules branches/postfixadmin-smarty/edit-mailbox.php branches/postfixadmin-smarty/list-domain.php branches/postfixadmin-smarty/list-virtual.php branches/postfixadmin-smarty/templates/edit-mailbox.tpl branches/postfixadmin-smarty/templates/footer.tpl branches/postfixadmin-smarty/templates/list-virtual.tpl branches/postfixadmin-smarty/templates/motd-users.txt branches/postfixadmin-smarty/templates/motd.txt branches/postfixadmin-smarty/templates/overview-get.tpl Removed Paths: ------------- branches/postfixadmin-smarty/debian/files branches/postfixadmin-smarty/templates/admin_create-admin.php branches/postfixadmin-smarty/templates/admin_create-domain.php branches/postfixadmin-smarty/templates/admin_edit-admin.php branches/postfixadmin-smarty/templates/admin_edit-domain.php branches/postfixadmin-smarty/templates/admin_list-admin.php branches/postfixadmin-smarty/templates/admin_list-domain.php branches/postfixadmin-smarty/templates/admin_search.php branches/postfixadmin-smarty/templates/broadcast-message.php branches/postfixadmin-smarty/templates/create-alias-domain.php branches/postfixadmin-smarty/templates/create-alias.php branches/postfixadmin-smarty/templates/create-mailbox.php branches/postfixadmin-smarty/templates/edit-alias.php branches/postfixadmin-smarty/templates/edit-mailbox.php branches/postfixadmin-smarty/templates/edit-vacation.php branches/postfixadmin-smarty/templates/fetchmail.php branches/postfixadmin-smarty/templates/footer.php branches/postfixadmin-smarty/templates/header.php branches/postfixadmin-smarty/templates/list-virtual.php branches/postfixadmin-smarty/templates/login.php branches/postfixadmin-smarty/templates/main.php branches/postfixadmin-smarty/templates/menu.php branches/postfixadmin-smarty/templates/message.php branches/postfixadmin-smarty/templates/overview-get.php branches/postfixadmin-smarty/templates/password.php branches/postfixadmin-smarty/templates/search.php branches/postfixadmin-smarty/templates/sendmail.php branches/postfixadmin-smarty/templates/users_edit-alias.php branches/postfixadmin-smarty/templates/users_login.php branches/postfixadmin-smarty/templates/users_main.php branches/postfixadmin-smarty/templates/users_menu.php branches/postfixadmin-smarty/templates/users_password.php branches/postfixadmin-smarty/templates/users_vacation.php branches/postfixadmin-smarty/templates/viewlog.php Modified: branches/postfixadmin-smarty/css/default.css =================================================================== --- branches/postfixadmin-smarty/css/default.css 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/css/default.css 2009-06-08 19:01:03 UTC (rev 674) @@ -98,14 +98,14 @@ font-size: 13px; } -#menu { +#menu, #tabbar { width: 750px; margin: 0 auto; padding-top: 10px; white-space: nowrap; } -#menu ul { +#menu ul, #tabbar ul { padding: 0; margin: 0; margin-left:auto; @@ -113,18 +113,18 @@ list-style: none; } -#menu li { +#menu li, #tabbar li { float: left; background: #efefef; margin-right: 3px; border-top: 4px solid #aaaaaa; } -#menu li:hover, #menu li.sfhover { +#menu li:hover, #menu li.sfhover, #tabbar li:hover, #tabbar li.sfhover { background: #BFFF00; } -#menu li ul { +#menu li ul, #tabbar li ul { position: absolute; width: auto; left: -999em; @@ -132,12 +132,12 @@ border:2px solid white; border-top:none; } -#menu li:hover ul, #menu li.sfhover ul { +#menu li:hover ul, #menu li.sfhover ul, #tabbar li:hover ul, #tabbar li.sfhover ul { left: auto; } -#menu li ul li { +#menu li ul li, #tabbar li ul li { float: none; margin-right: 0px; border-top:2px solid white;; @@ -145,22 +145,20 @@ } - - -#menu a { +#menu a, #tabbar a { display: block; width: auto; padding: 20px 5px 5px 5px; color: #888888; } -#menu a:hover { +#menu a:hover, #tabbar a:hover { color: #888888; } -#menu li ul li a { +#menu li ul li a, #tabbar li ul li a { padding: 5px 5px 5px 5px; } @@ -275,6 +273,10 @@ margin: 0; } +#alias_domain_table td, #alias_table td, #mailbox_table td, #overview_table td, #log_table td, #admin_table td { +text-align : left; +} + #footer { width: 750px; margin: 20px auto; Modified: branches/postfixadmin-smarty/debian/README.Debian =================================================================== --- branches/postfixadmin-smarty/debian/README.Debian 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/debian/README.Debian 2009-06-08 19:01:03 UTC (rev 674) @@ -19,6 +19,7 @@ - MySQL or PostgreSQL - Courier or Dovecot + Where to get help ================= @@ -28,3 +29,18 @@ - http://postfixadmin.sf.net - #postfixadmin on irc.freenode.net + +How to build this package for Debian/lenny +========================================== + +If you want to build this package for Debian/lenny, you have to execute + + DIST="lenny" dpkg-buildpackage -rfakeroot + +This will include the confd-link.sh script into the package. That script +is included in wwwconfig-common >0.2, but we have an older version in +lenny at the moment. + +We (upstream and myself) want to provide also an lenny ready package, +which will be available via sf.net. Just as an easy way for interested +people which are running lenny. Modified: branches/postfixadmin-smarty/debian/control =================================================================== --- branches/postfixadmin-smarty/debian/control 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/debian/control 2009-06-08 19:01:03 UTC (rev 674) @@ -10,7 +10,7 @@ Package: postfixadmin Architecture: all -Depends: debconf (>= 0.5), dbconfig-common, wwwconfig-common (>= 0.2.0), apache2 | lighttpd, libapache2-mod-php5 | php5-cgi | php5, php5-imap, php5-mysql | php5-pgsql, mysql-client | postgresql-client, ${misc:Depends} +Depends: debconf (>= 0.5), dbconfig-common, wwwconfig-common, apache2 | lighttpd, libapache2-mod-php5 | php5-cgi | php5, php5-imap, php5-mysql | php5-pgsql, mysql-client | postgresql-client, ${misc:Depends} Recommends: postfix-mysql | postfix-pgsql, mysql-server | postgresql-server Suggests: squirrelmail-postfixadmin, dovecot-common | courier-authlib-mysql | courier-authlib-postgresql Description: Virtual mail hosting interface for Postfix Deleted: branches/postfixadmin-smarty/debian/files =================================================================== --- branches/postfixadmin-smarty/debian/files 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/debian/files 2009-06-08 19:01:03 UTC (rev 674) @@ -1 +0,0 @@ -postfixadmin_2.3rc3_all.deb admin optional Modified: branches/postfixadmin-smarty/debian/postfixadmin.postinst =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.postinst 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/debian/postfixadmin.postinst 2009-06-08 19:01:03 UTC (rev 674) @@ -16,7 +16,11 @@ linkdestination_apache="../../postfixadmin/apache.conf" linkdestination_lighttpd="../../postfixadmin/lighttpd.conf" linkname="postfixadmin" - . /usr/share/wwwconfig-common/confd-link.sh + if [ -e /usr/share/wwwconfig-common/confd-link.sh ]; then + . /usr/share/wwwconfig-common/confd-link.sh + else + . /usr/share/postfixadmin/confd-link.sh + fi . /usr/share/wwwconfig-common/restart.sh fi Modified: branches/postfixadmin-smarty/debian/postfixadmin.prerm =================================================================== --- branches/postfixadmin-smarty/debian/postfixadmin.prerm 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/debian/postfixadmin.prerm 2009-06-08 19:01:03 UTC (rev 674) @@ -14,7 +14,11 @@ db_get postfixadmin/reconfigure-webserver servers="$RET" linkname="postfixadmin" - . /usr/share/wwwconfig-common/confd-link.sh + if [ -e /usr/share/wwwconfig-common/confd-link.sh ]; then + . /usr/share/wwwconfig-common/confd-link.sh + else + . /usr/share/postfixadmin/confd-link.sh + fi fi #DEBHELPER# Modified: branches/postfixadmin-smarty/debian/rules =================================================================== --- branches/postfixadmin-smarty/debian/rules 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/debian/rules 2009-06-08 19:01:03 UTC (rev 674) @@ -28,6 +28,7 @@ dh_install mv debian/postfixadmin/usr/share/postfixadmin/config.inc.php debian/postfixadmin/etc/postfixadmin/config.inc.php find debian/postfixadmin -name .svn | xargs -r rm -r + if test "${DIST}" = "lenny" ; then cp debian/confd-link.sh debian/postfixadmin/usr/share/postfixadmin/; fi # Build architecture-independent files here. binary-indep: build install Modified: branches/postfixadmin-smarty/edit-mailbox.php =================================================================== --- branches/postfixadmin-smarty/edit-mailbox.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/edit-mailbox.php 2009-06-08 19:01:03 UTC (rev 674) @@ -176,6 +176,7 @@ } $smarty->assign ('fUsername', $fUsername); +$smarty->assign ('fPassword', $user_details ['password']); //$smarty->assign ('pEdit_mailbox_username_text', $pEdit_mailbox_username_text); $smarty->assign ('pEdit_mailbox_password_text', $pEdit_mailbox_password_text); $smarty->assign ('tName', htmlspecialchars ($tName,ENT_QUOTES)); @@ -187,6 +188,5 @@ $smarty->assign ('tMessage', $tMessage); $smarty->assign ('smarty_template', 'edit-mailbox'); $smarty->display ('index.tpl'); - /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Modified: branches/postfixadmin-smarty/list-domain.php =================================================================== --- branches/postfixadmin-smarty/list-domain.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/list-domain.php 2009-06-08 19:01:03 UTC (rev 674) @@ -30,6 +30,7 @@ authentication_require_role('admin'); if (authentication_has_role('global-admin')) { +//if (authentication_has_role('admin')) { $list_admins = list_admins (); $is_superadmin = 1; $fUsername = safepost('fUsername', safeget('username')); # prefer POST over GET variable Modified: branches/postfixadmin-smarty/list-virtual.php =================================================================== --- branches/postfixadmin-smarty/list-virtual.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/list-virtual.php 2009-06-08 19:01:03 UTC (rev 674) @@ -382,9 +382,15 @@ $smarty->assign ('boolconf_used_quotas', boolconf('used_quotas')); $smarty->assign ('divide_quota', $divide_quota); $smarty->assign ('tCanAddMailbox', $tCanAddMailbox); +if (isset ($_GET ['tab'])) + $_SESSION ['tab'] = $_GET ['tab']; +//if (empty ($_GET ['tab'])) +// unset ($_SESSION ['tab']); +if (!isset ($_SESSION ['tab'])) + $_SESSION ['tab'] = 'mailbox'; +$smarty->assign ('tab', $_SESSION ['tab']); $smarty->assign ('smarty_template', 'list-virtual'); $smarty->display ('index.tpl'); - /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> Deleted: branches/postfixadmin-smarty/templates/admin_create-admin.php =================================================================== --- branches/postfixadmin-smarty/templates/admin_create-admin.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/admin_create-admin.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,52 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="create_admin" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pAdminCreate_admin_welcome']; ?></h3></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminCreate_admin_username'] . ":"; ?></td> - <td><input class="flat" type="text" name="fUsername" value="<?php print $tUsername; ?>" /></td> - <td><?php print $pAdminCreate_admin_username_text; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminCreate_admin_password'] . ":"; ?></td> - <td><input class="flat" type="password" name="fPassword" /></td> - <td><?php print $pAdminCreate_admin_password_text; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminCreate_admin_password2'] . ":"; ?></td> - <td><input class="flat" type="password" name="fPassword2" /></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pAdminCreate_admin_address'] . ":"; ?></td> - <td> - <select name="fDomains[]" size="10" multiple="multiple"> - <?php - for ($i = 0; $i < sizeof ($list_domains); $i++) - { - if (in_array ($list_domains[$i], $tDomains)) - { - print "<option value=\"" . $list_domains[$i] . "\" selected=\"selected\">" . $list_domains[$i] . "</option>\n"; - } - else - { - print "<option value=\"" . $list_domains[$i] . "\">" . $list_domains[$i] . "</option>\n"; - } - } - ?> - </select> - </td> - <td> </td> - </tr> - <tr> - <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pAdminCreate_admin_button']; ?>" /></td> - </tr> - <tr> - <td colspan="3" class="standout"><?php print $tMessage; ?></td> - </tr> -</table> -</form> -</div> Deleted: branches/postfixadmin-smarty/templates/admin_create-domain.php =================================================================== --- branches/postfixadmin-smarty/templates/admin_create-domain.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/admin_create-domain.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,78 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="create_domain" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pAdminCreate_domain_welcome']; ?></h3></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminCreate_domain_domain'] . ":"; ?></td> - <td><input class="flat" type="text" name="fDomain" value="<?php print $tDomain; ?>" /></td> - <td><?php print $pAdminCreate_domain_domain_text; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminCreate_domain_description'] . ":"; ?></td> - <td><input class="flat" type="text" name="fDescription" value="<?php print $tDescription; ?>" /></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pAdminCreate_domain_aliases'] . ":"; ?></td> - <td><input class="flat" type="text" name="fAliases" value="<?php print $tAliases; ?>" /></td> - <td><?php print $PALANG['pAdminCreate_domain_aliases_text']; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminCreate_domain_mailboxes'] . ":"; ?></td> - <td><input class="flat" type="text" name="fMailboxes" value="<?php print $tMailboxes; ?>" /></td> - <td><?php print $PALANG['pAdminCreate_domain_mailboxes_text']; ?></td> - </tr> - <?php if ($CONF['quota'] == 'YES') { ?> - <tr> - <td><?php print $PALANG['pAdminCreate_domain_maxquota'] . ":"; ?></td> - <td><input class="flat" type="text" name="fMaxquota" value="<?php print $tMaxquota; ?>" /></td> - <td><?php print $PALANG['pAdminCreate_domain_maxquota_text']; ?></td> - </tr> - <?php } if ($CONF['transport'] == 'YES') { ?> - <tr> - <td><?php print $PALANG['pAdminCreate_domain_transport'] . ":"; ?></td> - <td><select class="flat" name="fTransport"> - <?php - for ($i = 0; $i < sizeof ($CONF['transport_options']); $i++) - { - if ($CONF['transport_options'][$i] == $tTransport) - { - print "<option value=\"" . $CONF['transport_options'][$i] . "\" selected>" . $CONF['transport_options'][$i] . "</option>\n"; - } - else - { - print "<option value=\"" . $CONF['transport_options'][$i] . "\">" . $CONF['transport_options'][$i] . "</option>\n"; - } - } - ?> - </select> - </td> - <td><?php print $PALANG['pAdminCreate_domain_transport_text']; ?></td> - </tr> - <?php } ?> - <tr> - <td><?php print $PALANG['pAdminCreate_domain_defaultaliases'] . ":"; ?></td> - <td><?php $checked = ($tDefaultaliases == 'on') ? 'checked=checked' : ''; ?> - <input class="flat" type="checkbox" value='on' name="fDefaultaliases" <?php print $checked; ?> /> - </td> - <td><?php print $PALANG['pAdminCreate_domain_defaultaliases_text']; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminCreate_domain_backupmx'] . ":"; ?></td> - <td><?php $checked = ($tBackupmx == 'on') ? 'checked' : ''; ?> - <input class="flat" type="checkbox" value='on' name="fBackupmx" <?php print $checked; ?> /> - </td> - <td> </td> - </tr> - <tr> - <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pAdminCreate_domain_button']; ?>" /></td> - </tr> - <tr> - <td colspan="3" class="standout"><?php print $tMessage; ?></td> - </tr> -</table> -</form> -</div> Deleted: branches/postfixadmin-smarty/templates/admin_edit-admin.php =================================================================== --- branches/postfixadmin-smarty/templates/admin_edit-admin.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/admin_edit-admin.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,56 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="alias" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pAdminEdit_admin_welcome']; ?></h3></td></tr> - <tr> - <td><?php print $PALANG['pAdminEdit_admin_username']; ?>:</td> - <td><?php print $username; ?></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pAdminEdit_admin_password']; ?>:</td> - <td><input class="flat" type="password" autocomplete="off" name="fPassword" value=""/></td> - <td><?php print $pAdminEdit_admin_password_text; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminEdit_admin_password2']; ?>:</td> - <td><input class="flat" type="password" name="fPassword2" value="" /></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pAdminEdit_admin_active']; ?>:</td> - <td><input class="flat" type="checkbox" name="fActive" <?php print (!empty ($tActive)) ? 'checked' : ''; ?> /></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pAdminEdit_admin_super_admin']; ?>:</td> - <td><input class="flat" type="checkbox" name="fSadmin" <?php print (!empty ($tSadmin)) ? 'checked' : ''; ?> /></td> - <td> </td> - </tr> - <tr> - <td colspan=3 align=center> - <select name="fDomains[]" size="10" multiple="multiple"> - <?php - foreach($tAllDomains as $domain) { - // should escape $domain here to stop xss etc. - $selected = ''; - if (in_array ($domain, $tDomains)) { - $selected = "selected='selected'"; - } - print "<option value='$domain' $selected>$domain</option>\n"; - } - ?> - </select> - </td> - </tr> - <tr> - <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pAdminEdit_admin_button']; ?>" /></td> - </tr> - <tr> - <td colspan="3" class="standout"><?php print $tMessage; ?></td> - </tr> -</table> -</form> -</div> Deleted: branches/postfixadmin-smarty/templates/admin_edit-domain.php =================================================================== --- branches/postfixadmin-smarty/templates/admin_edit-domain.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/admin_edit-domain.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,76 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="edit_domain" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pAdminEdit_domain_welcome']; ?></h3></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminEdit_domain_domain'] . ":"; ?></td> - <td><?php print $domain; ?></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pAdminEdit_domain_description'] . ":"; ?></td> - <td><input class="flat" type="text" name="fDescription" value="<?php print htmlspecialchars($tDescription, ENT_QUOTES); ?>" /></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pAdminEdit_domain_aliases'] . ":"; ?></td> - <td><input class="flat" type="text" name="fAliases" value="<?php print $tAliases; ?>" /></td> - <td><?php print $PALANG['pAdminEdit_domain_aliases_text']; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pAdminEdit_domain_mailboxes'] . ":"; ?></td> - <td><input class="flat" type="text" name="fMailboxes" value="<?php print $tMailboxes; ?>" /></td> - <td><?php print $PALANG['pAdminEdit_domain_mailboxes_text']; ?></td> - </tr> - <?php if ($CONF['quota'] == 'YES') { ?> - <tr> - <td><?php print $PALANG['pAdminEdit_domain_maxquota'] . ":"; ?></td> - <td><input class="flat" type="text" name="fMaxquota" value="<?php print $tMaxquota; ?>" /></td> - <td><?php print $PALANG['pAdminEdit_domain_maxquota_text']; ?></td> - </tr> - <?php } if ($CONF['transport'] == 'YES') { ?> - <tr> - <td><?php print $PALANG['pAdminEdit_domain_transport'] . ":"; ?></td> - <td><select class="flat" name="fTransport"> - <?php - for ($i = 0; $i < sizeof ($CONF['transport_options']); $i++) - { - if ($CONF['transport_options'][$i] == $tTransport) - { - print "<option value=\"" . $CONF['transport_options'][$i] . "\" selected>" . $CONF['transport_options'][$i] . "</option>\n"; - } - else - { - print "<option value=\"" . $CONF['transport_options'][$i] . "\">" . $CONF['transport_options'][$i] . "</option>\n"; - } - } - ?> - </select> - </td> - <td><?php print $PALANG['pAdminEdit_domain_transport_text']; ?></td> - </tr> - <?php } ?> - <tr> - <td><?php print $PALANG['pAdminEdit_domain_backupmx'] . ":"; ?></td> - <td><?php $checked = (!empty ($tBackupmx)) ? 'checked=checked' : ''; ?> - <input class="flat" type="checkbox" name="fBackupmx" <?php print $checked; ?> /></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pAdminEdit_domain_active'] . ":"; ?></td> - <td><?php $checked = (!empty ($tActive)) ? 'checked=checked' : ''; ?> - <input class="flat" type="checkbox" name="fActive" <?php print $checked; ?> /></td> - <td> </td> - </tr> - <tr> - <td colspan="3" class="hlp_center"><input type="submit" class="button" name="submit" value="<?php print $PALANG['pAdminEdit_domain_button']; ?>" /></td> - </tr> - <tr> - <td colspan="3" class="standout"><?php print $tMessage; ?></td> - </tr> -</table> -</form> -</div> Deleted: branches/postfixadmin-smarty/templates/admin_list-admin.php =================================================================== --- branches/postfixadmin-smarty/templates/admin_list-admin.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/admin_list-admin.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,36 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<?php -if (sizeof ($list_admins) > 0) -{ - print "<table id=\"admin_table\">\n"; - print " <tr class=\"header\">\n"; - print " <td>" . $PALANG['pAdminList_admin_username'] . "</td>\n"; - print " <td>" . $PALANG['pAdminList_admin_count'] . "</td>\n"; - print " <td>" . $PALANG['pAdminList_admin_modified'] . "</td>\n"; - print " <td>" . $PALANG['pAdminList_admin_active'] . "</td>\n"; - print " <td colspan=\"2\"> </td>\n"; - print " </tr>\n"; - - for ($i = 0; $i < sizeof ($list_admins); $i++) - { - if ((is_array ($list_admins) and sizeof ($list_admins) > 0)) - { - print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n"; - print " <td><a href=\"list-domain.php?username=" . $list_admins[$i] . "\">" . $list_admins[$i] . "</a></td>"; - if ($admin_properties[$i]['domain_count'] == 'ALL') $admin_properties[$i]['domain_count'] = $PALANG['pAdminEdit_admin_super_admin']; - print " <td>" . $admin_properties[$i]['domain_count'] . "</td>"; - print " <td>" . $admin_properties[$i]['modified'] . "</td>"; - $active = ($admin_properties[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO']; - print " <td><a href=\"edit-active-admin.php?username=" . $list_admins[$i] . "\">" . $active . "</a></td>"; - print " <td><a href=\"edit-admin.php?username=" . $list_admins[$i] . "\">" . $PALANG['edit'] . "</a></td>"; - print " <td><a href=\"delete.php?table=admin&delete=" . $list_admins[$i] . "\" onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pAdminList_admin_username'] . ": " . $list_admins[$i] . "')\">" . $PALANG['del'] . "</a></td>"; - print " </tr>\n"; - } - } - - print "</table>\n"; - print "<p><a href=\"create-admin.php\">" . $PALANG['pAdminMenu_create_admin'] . "</a>\n"; -} - -/* vim: set ft=php expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ -?> Deleted: branches/postfixadmin-smarty/templates/admin_list-domain.php =================================================================== --- branches/postfixadmin-smarty/templates/admin_list-domain.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/admin_list-domain.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,87 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="overview"> -<form name="overview" method="post"> -<select name="fUsername" onChange="this.form.submit();"> -<?php -if (!empty ($list_admins)) -{ - for ($i = 0; $i < sizeof ($list_admins); $i++) - { - if ($fUsername == $list_admins[$i]) - { - print "<option value=\"" . $list_admins[$i] . "\" selected>" . $list_admins[$i] . "</option>\n"; - } - else - { - print "<option value=\"" . $list_admins[$i] . "\">" . $list_admins[$i] . "</option>\n"; - } - } -} -?> -</select> -<input class="button" type="submit" name="go" value="<?php print $PALANG['pOverview_button']; ?>" /> -</form> -<form name="search" method="post" action="search.php"> -<input type="textbox" name="search" size="10" /> -</form> -</div> - -<?php -if (sizeof ($list_domains) > 0) -{ - print "<table id=\"admin_table\">\n"; - print " <tr class=\"header\">\n"; - print " <td>" . $PALANG['pAdminList_domain_domain'] . "</td>\n"; - print " <td>" . $PALANG['pAdminList_domain_description'] . "</td>\n"; - print " <td>" . $PALANG['pAdminList_domain_aliases'] . "</td>\n"; - print " <td>" . $PALANG['pAdminList_domain_mailboxes'] . "</td>\n"; - if ($CONF['quota'] == 'YES') print " <td>" . $PALANG['pAdminList_domain_maxquota'] . "</td>\n"; - if ($CONF['transport'] == 'YES') print " <td>" . $PALANG['pAdminList_domain_transport'] . "</td>\n"; - print " <td>" . $PALANG['pAdminList_domain_backupmx'] . "</td>\n"; - print " <td>" . $PALANG['pAdminList_domain_modified'] . "</td>\n"; - print " <td>" . $PALANG['pAdminList_domain_active'] . "</td>\n"; - print " <td colspan=\"2\"> </td>\n"; - print " </tr>\n"; - - for ($i = 0; $i < sizeof ($list_domains); $i++) - { - if ((is_array ($list_domains) and sizeof ($list_domains) > 0)) - { - print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n"; - print "<td><a href=\"list-virtual.php?domain=" . $list_domains[$i] . "\">" . $list_domains[$i] . "</a></td>"; - print "<td>" . $domain_properties[$i]['description'] . "</td>"; - print "<td>" . $domain_properties[$i]['alias_count'] . " / " . $domain_properties[$i]['aliases'] . "</td>"; - print "<td>" . $domain_properties[$i]['mailbox_count'] . " / " . $domain_properties[$i]['mailboxes'] . "</td>"; - if ($CONF['quota'] == 'YES') - { - print " <td>"; - if ($domain_properties[$i]['maxquota'] == 0) - { - print $PALANG['pOverview_unlimited']; - } - elseif ($domain_properties[$i]['maxquota'] < 0) - { - print $PALANG['pOverview_disabled']; - } - else - { - print $domain_properties[$i]['maxquota']; - } - print "</td>\n"; - } - if ($CONF['transport'] == 'YES') print "<td>" . $domain_properties[$i]['transport'] . "</td>"; - $backupmx = ($domain_properties[$i]['backupmx'] == 1) ? $PALANG['YES'] : $PALANG['NO']; - print "<td>$backupmx</td>"; - print "<td>" . $domain_properties[$i]['modified'] . "</td>"; - $active = ($domain_properties[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO']; - print "<td><a href=\"edit-active-domain.php?domain=" . $list_domains[$i] . "\">" . $active . "</a></td>"; - print "<td><a href=\"edit-domain.php?domain=" . $list_domains[$i] . "\">" . $PALANG['edit'] . "</a></td>"; - print "<td><a href=\"delete.php?table=domain&delete=" . $list_domains[$i] . "\" onclick=\"return confirm ('" . $PALANG['confirm_domain'] . $PALANG['pAdminList_admin_domain'] . ": " . $list_domains[$i] . "')\">" . $PALANG['del'] . "</a></td>"; - print "</tr>\n"; - } - } - - print "</table>\n"; -} -echo "<p><a href='create-domain.php'>{$PALANG['pAdminMenu_create_domain']}</a>"; -?> Deleted: branches/postfixadmin-smarty/templates/admin_search.php =================================================================== --- branches/postfixadmin-smarty/templates/admin_search.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/admin_search.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,111 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<?php -require(dirname(__FILE__) . '/search.tpl'); - -/* old code, should be deleted after testing the merge with templates/search.php -?> - -<div id="overview"> -<form name="search" method="post" action="search.php"> -<table width=750><tr> -<td> - <h4><?php print $PALANG['pSearch_welcome'] . $fSearch; ?></h4> -</td> -<td> - <?php print $PALANG['pSearch']; ?>:<input type="textbox" name="search"> -</td> -<td align=right><select class="flat" name="fDomain" > -<?php -print "<option value=\"$list_domains[0]\" selected>$list_domains[0]</option>\n"; -for ($i = 1; $i < sizeof ($list_domains); $i++) -{ - print "<option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n"; -} -?> -</select> -<input class="button" type="submit" name="fGo" value="Return to <?php print $PALANG['pAdminMenu_list_virtual']; ?>" /></td> -</tr></table> -</form> -</div> - -<?php -if (sizeof ($tAlias) > 0) -{ - print "<table id=\"alias_table\">\n"; - print " <tr>\n"; - print " <td colspan=\"5\"><h3>".$PALANG['pOverview_alias_title']."</h3></td>"; - print " </tr>"; - print " <tr class=\"header\">\n"; - print " <td>" . $PALANG['pOverview_alias_address'] . "</td>\n"; - print " <td>" . $PALANG['pOverview_alias_goto'] . "</td>\n"; - print " <td>" . $PALANG['pOverview_alias_modified'] . "</td>\n"; - print " <td>" . $PALANG['pOverview_alias_active'] . "</td>\n"; - print " <td colspan=\"2\"> </td>\n"; - print " </tr>\n"; - - for ($i = 0; $i < sizeof ($tAlias); $i++) - { - if ((is_array ($tAlias) and sizeof ($tAlias) > 0)) - { - print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n"; - print " <td>" . $tAlias[$i]['address'] . "</td>\n"; - print " <td>" . ereg_replace (",", "<br>", $tAlias[$i]['goto']) . "</td>\n"; - print " <td>" . $tAlias[$i]['modified'] . "</td>\n"; - $active = ($tAlias[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO']; - print " <td><a href=\"edit-active.php?alias=" . urlencode ($tAlias[$i]['address']) . "&domain=" . $tAlias[$i]['domain']. "&return=search.php?search=" . urlencode ($fSearch) . "\">" . $active . "</a></td>\n"; - print " <td><a href=\"edit-alias.php?address=" . urlencode ($tAlias[$i]['address']) . "&domain=" . $tAlias[$i]['domain'] . "\">" . $PALANG['edit'] . "</a></td>\n"; - print " <td><a href=\"delete.php?table=alias&delete=" . urlencode ($tAlias[$i]['address']) . "&domain=" . $tAlias[$i]['domain'] . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_aliases'] . ": ". $tAlias[$i]['address'] . "')\">" . $PALANG['del'] . "</a></td>\n"; - print " </tr>\n"; - } - } - - print "</table>\n"; -} - -if (sizeof ($tMailbox) > 0) -{ - print "<table id=\"mailbox_table\">\n"; - print " <tr>\n"; - print " <td colspan=\"7\"><h3>".$PALANG['pOverview_mailbox_title']."</h3></td>"; - print " </tr>"; - print " <tr class=\"header\">\n"; - print " <td>" . $PALANG['pOverview_mailbox_username'] . "</td>\n"; - print " <td>" . $PALANG['pOverview_mailbox_name'] . "</td>\n"; - if ($CONF['quota'] == 'YES') print " <td>" . $PALANG['pOverview_mailbox_quota'] . "</td>\n"; - print " <td>" . $PALANG['pOverview_mailbox_modified'] . "</td>\n"; - print " <td>" . $PALANG['pOverview_mailbox_active'] . "</td>\n"; - if ($CONF['alias_control'] == 'YES') - { - print " <td colspan=\"3\"> </td>\n"; - } - else - { - print " <td colspan=\"2\"> </td>\n"; - } - print " </tr>\n"; - - for ($i = 0; $i < sizeof ($tMailbox); $i++) - { - if ((is_array ($tMailbox) and sizeof ($tMailbox) > 0)) - { - print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n"; - print " <td>" . $tMailbox[$i]['username'] . "</td>\n"; - print " <td>" . $tMailbox[$i]['name'] . "</td>\n"; - if ($CONF['quota'] == 'YES') print " <td>" . divide_quota ($tMailbox[$i]['quota']) . "</td>\n"; - print " <td>" . $tMailbox[$i]['modified'] . "</td>\n"; - $active = ($tMailbox[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO']; - print " <td><a href=\"edit-active.php?username=" . urlencode ($tMailbox[$i]['username']) . "&domain=" . $tMailbox[$i]['domain'] . "&return=search.php?search=" . urlencode ($fSearch) . "\">" . $active . "</a></td>\n"; - if ($CONF['alias_control'] == 'YES') - { - print " <td><a href=\"edit-alias.php?address=" . urlencode ($tMailbox[$i]['username']) . "&domain=" . $tMailbox[$i]['domain'] . "\">" . $PALANG['pOverview_alias_edit'] . "</a></td>\n"; - } - print " <td><a href=\"edit-mailbox.php?username=" . urlencode ($tMailbox[$i]['username']) . "&domain=" . $tMailbox[$i]['domain'] . "\">" . $PALANG['edit'] . "</a></td>\n"; - print " <td><a href=\"delete.php?table=mailbox&delete=" . urlencode ($tMailbox[$i]['username']) . "&domain=" . $tMailbox[$i]['domain'] . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_mailboxes'] . ": ". $tMailbox[$i]['username'] . "')\">" . $PALANG['del'] . "</a></td>\n"; - print " </tr>\n"; - } - } - print "</table>\n"; -} - -/* */ -?> Deleted: branches/postfixadmin-smarty/templates/broadcast-message.php =================================================================== --- branches/postfixadmin-smarty/templates/broadcast-message.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/broadcast-message.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,35 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="broadcast-message" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pBroadcast_title']; ?></h3></td> - </tr> - <tr> - <td><?php print $PALANG['pBroadcast_from'] . ":"; ?></td> - <td><?php print $CONF['admin_email']; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pBroadcast_name'] . ':'; ?></td> - <td><input class="flat" size="43" type="text" name="name"/></td> - </tr> - <tr> - <td><?php print $PALANG['pBroadcast_subject'] . ":"; ?></td> - <td><input class="flat" size="43" type="text" name="subject"/></td> - </tr> - <tr> - <td><?php print $PALANG['pBroadcast_message'] . ":"; ?></td> - <td><textarea class="flat" cols="40" rows="6" name="message"></textarea></td> - </tr> - <tr> - <td colspan="3" class="hlp_center"> - <?php - if($error == 1){ - echo '<br/><span class="error_msg">'.$PALANG['pBroadcast_error_empty'].'</span><br/><br/>' ; - } - ?> - <input class="button" type="submit" name="submit" value="<?php print $PALANG['pBroadcast_send']; ?>" /></td> - </tr> -</table> -</form> -</div> Deleted: branches/postfixadmin-smarty/templates/create-alias-domain.php =================================================================== --- branches/postfixadmin-smarty/templates/create-alias-domain.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/create-alias-domain.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,62 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="alias_domain" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pCreate_alias_domain_welcome']; ?></h3></td> - </tr> - -<?php -if (count($alias_domains) > 0) { -?> - - <tr> - <td><?php print $PALANG['pCreate_alias_domain_alias'] . ":"; ?></td> - <td> - <select class="flat" name="alias_domain"> - <?php - foreach ($alias_domains as $dom) - { - print "<option value=\"$dom\"".(($fAliasDomain == $dom) ? ' selected' : '').">$dom</option>\n"; - } - ?> - </select> - <td><?php print $PALANG['pCreate_alias_domain_alias_text']; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_alias_domain_target'] . ":"; ?></td> - <td> - <select class="flat" name="target_domain"> - <?php - foreach ($target_domains as $dom) - { - print "<option value=\"$dom\"".(($fTargetDomain == $dom) ? ' selected' : '').">$dom</option>\n"; - } - ?> - </select> - <td><?php print $PALANG['pCreate_alias_domain_target_text']; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_alias_domain_active'] . ":"; ?></td> - <td><input class="flat" type="checkbox" name="active" value="1"<?php if ($fActive) { print ' checked'; } ?> /></td> - <td> </td> - </tr> -<?php -} -?> - <tr> - <td colspan="3" class="standout"><?php if ($error) { print '<span class="error_msg">'; } print $tMessage; if ($error) { print '</span>'; } ?></td> - </tr> -<?php -if (count($alias_domains) > 0) { -?> - <tr> - <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pCreate_alias_domain_button']; ?>" /></td> - </tr> -<?php -} -?> -</table> -</form> -</div> -<?php /* vim: set ft=php expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> Deleted: branches/postfixadmin-smarty/templates/create-alias.php =================================================================== --- branches/postfixadmin-smarty/templates/create-alias.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/create-alias.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,51 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="alias" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pCreate_alias_welcome']; ?></h3></td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_alias_address']; ?></td> - <td><input class="flat" type="text" name="fAddress" value="<?php print $tAddress; ?>" /></td> - <td>@ - <select class="flat" name="fDomain"> - <?php - for ($i = 0; $i < sizeof ($list_domains); $i++) - { - if ($tDomain == $list_domains[$i]) - { - print "<option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n"; - } - else - { - print "<option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n"; - } - } - ?> - </select> - <?php print $pCreate_alias_address_text; ?> - </td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_alias_goto'] . ":"; ?></td> - <td><input class="flat" type="text" name="fGoto" value="<?php print $tGoto; ?>" /></td> - <td><?php print $pCreate_alias_goto_text; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_alias_active'] . ":"; ?></td> - <td><input class="flat" type="checkbox" name="fActive" checked /></td> - <td> </td> - </tr> - <tr> - <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pCreate_alias_button']; ?>" /></td> - </tr> - <tr> - <td colspan="3" class="standout"><?php print $tMessage; ?></td> - </tr> - <tr> - <td colspan="3" class="help_text"><?php print $PALANG['pCreate_alias_catchall_text']; ?></td> - </tr> -</table> -</form> -</div> Deleted: branches/postfixadmin-smarty/templates/create-mailbox.php =================================================================== --- branches/postfixadmin-smarty/templates/create-mailbox.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/create-mailbox.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,70 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="mailbox" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pCreate_mailbox_welcome']; ?></h3></td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_mailbox_username'] . ":"; ?></td> - <td><input class="flat" type="text" name="fUsername" value="<?php print $tUsername; ?>" autocomplete="off"/></td> - <td>@ - <select name="fDomain"> - <?php - for ($i = 0; $i < sizeof ($list_domains); $i++) - { - if ($tDomain == $list_domains[$i]) - { - print "<option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n"; - } - else - { - print "<option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n"; - } - } - ?> - </select> - <?php print $pCreate_mailbox_username_text; ?> - </td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_mailbox_password'] . ":"; ?></td> - <td><input class="flat" type="password" name="fPassword" /></td> - <td><?php print $pCreate_mailbox_password_text; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_mailbox_password2'] . ":"; ?></td> - <td><input class="flat" type="password" name="fPassword2" /></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_mailbox_name'] . ":"; ?></td> - <td><input class="flat" type="text" name="fName" value="<?php print $tName; ?>" /></td> - <td><?php print $pCreate_mailbox_name_text; ?></td> - </tr> - <?php if ($CONF['quota'] == 'YES') { ?> - <tr> - <td><?php print $PALANG['pCreate_mailbox_quota'] . ":"; ?></td> - <td><input class="flat" type="text" name="fQuota" value="<?php print $tQuota; ?>" /></td> - <td><?php print $pCreate_mailbox_quota_text; ?></td> - </tr> - <?php } ?> - <tr> - <td><?php print $PALANG['pCreate_mailbox_active'] . ":"; ?></td> - <td><input class="flat" type="checkbox" name="fActive" checked /></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pCreate_mailbox_mail'] . ":"; ?></td> - <td><input class="flat" type="checkbox" name="fMail" <?php print (isset($CONF['create_mailbox_subdirs'])) ? '' : 'checked'; ?> /></td> - <td> </td> - </tr> - <tr> - <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pCreate_mailbox_button']; ?>" /></td> - </tr> - <tr> - <td colspan="3" class="standout"><?php print $tMessage; ?></td> - </tr> -</table> -</form> -</div> Deleted: branches/postfixadmin-smarty/templates/edit-alias.php =================================================================== --- branches/postfixadmin-smarty/templates/edit-alias.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/edit-alias.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,37 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="alias" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pEdit_alias_welcome']; ?></h3></td> - </tr> - <tr> - <td><?php print $PALANG['pEdit_alias_address'] . ":"; ?></td> - <td><?php print $fAddress; ?></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pEdit_alias_goto'] . ":"; ?></td> - <td> -<textarea class="flat" rows="10" cols="60" name="fGoto"> -<?php -$array = preg_split ('/,/', $tGoto); -for ($i = 0 ; $i < sizeof ($array) ; $i++) -{ - if (empty ($array[$i])) continue; - print "$array[$i]\n"; -} -?> -</textarea> - </td> - <td> </td> - </tr> - <tr> - <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pEdit_alias_button']; ?>" /></td> - </tr> - <tr> - <td colspan="3" class="standout"><?php print $tMessage; ?></td> - </tr> -</table> -</form> -</div> Deleted: branches/postfixadmin-smarty/templates/edit-mailbox.php =================================================================== --- branches/postfixadmin-smarty/templates/edit-mailbox.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/edit-mailbox.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,51 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="edit_form"> -<form name="mailbox" method="post"> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pEdit_mailbox_welcome']; ?></h3></td> - </tr> - <tr> - <td><?php print $PALANG['pEdit_mailbox_username']; ?></td> - <td><?php print $fUsername; ?></td> - <td><?php print $pEdit_mailbox_username_text; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pEdit_mailbox_password'] . ":"; ?></td> - <td><input class="flat" type="password" name="fPassword" /></td> - <td><?php print $pEdit_mailbox_password_text; ?></td> - </tr> - <tr> - <td><?php print $PALANG['pEdit_mailbox_password2'] . ":"; ?></td> - <td><input class="flat" type="password" name="fPassword2" /></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pEdit_mailbox_name'] . ":"; ?></td> - <td><input class="flat" type="text" name="fName" value="<?php print htmlspecialchars ($tName,ENT_QUOTES); ?>" /></td> - <td><?php print $pEdit_mailbox_name_text; ?></td> - </tr> - <?php if ($CONF['quota'] == 'YES') { ?> - <tr> - <td><?php print $PALANG['pEdit_mailbox_quota'] . " (max: " . $tMaxquota . "):"; ?></td> - <td><input class="flat" type="text" name="fQuota" value="<?php print $tQuota; ?>" /></td> - <td><?php print $pEdit_mailbox_quota_text; ?></td> - </tr> - <?php } ?> - <tr> - <td><?php print $PALANG['pCreate_mailbox_active'] . ":"; ?></td> - <td><input class="flat" type="checkbox" name="fActive" <?php print (!empty ($tActive)) ? 'checked' : '' ?> /></td> - <td> </td> - </tr> - <tr> - <td colspan="3" class="hlp_center"> - <input class="button" type="submit" name="submit" value="<?php print $PALANG['pEdit_mailbox_button']; ?>" /> - <input class="button" type="submit" name="cancel" value="<?php print $PALANG['exit']; ?>" action="main.php" /> - </td> - </tr> - <tr> - <td colspan="3" class="standout"><?php print $tMessage; ?></td> - </tr> -</table> -</form> -</div> Modified: branches/postfixadmin-smarty/templates/edit-mailbox.tpl =================================================================== --- branches/postfixadmin-smarty/templates/edit-mailbox.tpl 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/edit-mailbox.tpl 2009-06-08 19:01:03 UTC (rev 674) @@ -11,6 +11,11 @@ <td>{$pEdit_mailbox_username_text}</td> </tr> <tr> + <td>{$PALANG.pPassword_password_current}:</td> + <td>{$fPassword}</td> + <td> </td> + </tr> + <tr> <td>{$PALANG.pEdit_mailbox_password}:</td> <td><input class="flat" type="password" name="fPassword" /></td> <td>{$pEdit_mailbox_password_text}</td> Deleted: branches/postfixadmin-smarty/templates/edit-vacation.php =================================================================== --- branches/postfixadmin-smarty/templates/edit-vacation.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/edit-vacation.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,45 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<script type="text/javascript"> -function newLocation() -{ -window.location="<?php print $fCanceltarget; ?>" - -} -</script> -<div id="edit_form"> - -<form name="edit-vacation" method="post" action=''> -<table> - <tr> - <td colspan="3"><h3><?php print $PALANG['pUsersVacation_welcome']; ?></h3></td> - </tr> - <tr> - <td><?php print $PALANG['pUsersLogin_username'] . ":"; ?></td> - <td><?php print $tUseremail; ?></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pUsersVacation_subject'] . ":"; ?></td> - <td><textarea class="flat" cols="60" name="fSubject" ><?php print htmlentities(stripslashes($tSubject), ENT_QUOTES, 'UTF-8'); ?></textarea></td> - <td> </td> - </tr> - <tr> - <td><?php print $PALANG['pUsersVacation_body'] . ":"; ?></td> - <td><textarea class="flat" rows="10" cols="60" name="fBody" ><?php print htmlentities(stripslashes($tBody), ENT_QUOTES , 'UTF-8'); ?></textarea></td> - <td> </td> - </tr> - <tr> - <td colspan="3" class="hlp_center"> - - <input class="button" type="submit" name="fChange" value="<?php print $PALANG['pEdit_vacation_set']; ?>" /> - <input class="button" type="submit" name="fBack" value="<?php print $PALANG['pEdit_vacation_remove']; ?>" /> - <input class="button" type="button" name="fCancel" value="<?php print $PALANG['exit']; ?>" onclick="newLocation()" /> - </td> - </tr> - - <tr> - <td colspan="3" class="standout"><?php print $tMessage; ?></td> - </tr> -</table> -</form> -</div> Deleted: branches/postfixadmin-smarty/templates/fetchmail.php =================================================================== --- branches/postfixadmin-smarty/templates/fetchmail.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/fetchmail.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,182 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<?php - -$headers=array(); -foreach(array_keys($fm_struct) as $row){ - list($editible,$view,$type)=$fm_struct[$row]; - $title = $PALANG['pFetchmail_field_' . $row]; - $comment = $PALANG['pFetchmail_desc_' . $row]; - if ($view){ - $headers[]=array($editible, $view, $type, $title, $comment); - } -} - -if ($edit || $new) { # edit mode - echo '<div id="edit_form">'; - echo '<form name="fetchmail" method="post">'; - print fetchmail_edit_row($formvars); - -} else { # display mode - print '<div id="overview">'; - print '<form name="overview" method="post">'; - print "<table id=\"log_table\" border=0>\n"; - print " <tr>\n"; - print " <td colspan=\"".(sizeof($headers)+2)."\"><h3>".$PALANG['pFetchmail_welcome'].$user_domains."</h3></td>\n"; - print " </tr>\n"; - print " <tr class=\"header\">\n"; - foreach($headers as $row){ - list($editible,$view,$type,$title,$comment)=$row; - print " <td>" . $title . "</td>\n"; - } - print "<td> </td>"; - print "<td> </td>"; - print " </tr>\n"; - - if (sizeof ($tFmail) > 0){ - foreach($tFmail as $row){ - print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n"; - foreach($row as $key=>$val){ - - if (!isset($fm_struct[$key])) continue; # TODO: not really nice, but avoids undefined index warnings ;-) - list($editible,$view,$type)=$fm_struct[$key]; - if ($view){ - $func="_listview_".$type; - print " <td nowrap>" . (function_exists($func)?$func($val):$val) . "</td>\n"; - } - - } - print "<td><a href=\"fetchmail.php?edit=" . $row['id'] . "\">" . $PALANG['edit'] . "</a></td>"; - print " <td><a href=\"fetchmail.php?delete=" . $row['id'] . "\"onclick=\"return confirm ('" - . $PALANG['confirm'] . $PALANG['pMenu_fetchmail'] . ": ". htmlentities($row['src_user']) . " @ " - . htmlentities($row['src_server']) . "')\">" . $PALANG['del'] . "</a></td>\n"; - print " </tr>\n"; - } - } - print "</table>"; - print "<p />\n"; - print "</form>\n"; - print "</div>\n"; - - print "<p><a href='?new=1'>".$PALANG['pFetchmail_new_entry']."</a></p>\n"; - -} # end display mode - -function fetchmail_edit_row($data=array()){ - global $fm_struct,$fm_defaults,$PALANG; - $id=$data["id"]; - $_id=$data["id"]*100+1; - $ret="<table>"; - $ret .= '<tr><td colspan="3"><h3>' . $PALANG['pMenu_fetchmail'] . '</h3></td></tr>'; - # TODO: $formvars possibly contains db-specific boolean values - # TODO: no problems with MySQL, to be tested with PgSQL - # TODO: undefined values may also occour - foreach($fm_struct as $key=>$struct){ - list($editible,$view,$type)=$struct; - $title = $PALANG['pFetchmail_field_' . $key]; - $comment = $PALANG['pFetchmail_desc_' . $key]; - if ($editible){ - $ret.="<tr><td align=left valign=top><label for=${_id} style='width:20em;'>${title}: </label></td>"; - $ret.="<td align=left style='padding-left:.25em;padding-right:.25em;background-color:white;'>"; - $func="_edit_".$type; - if (! function_exists($func)) - $func="_edit_text"; - $val=isset($data[$key]) - ?$data[$key] - :(! is_array($fm_defaults[$key]) - ?$fm_defaults[$key] - :'' - ); - $fm_defaults_key = ""; if (isset($fm_defaults[$key])) $fm_defaults_key = $fm_defaults[$key]; - $ret.=$func($_id++,$key,$fm_defaults_key,$val); - $ret.="</td><td align=left valign=top><i> ${comment}</i></td></tr>\n"; - } - elseif($view){ - $func="_view_".$type; - $val=isset($data[$key]) - ?(function_exists($func) - ?$func($data[$key]) - :nl2br($data[$key]) - ) - :"--x--"; - $ret.="<tr><td align=left valign=top>${title}: </label></td>"; - $ret.="<td align=left valign=top style='padding-left:.25em;padding-right:.25em;background-color:white;'>".$val; - $ret.="</td><td align=left valign=top><i> ${comment}</i></td></tr>\n"; - } - } - $ret.="<tr><td align=center colspan=3> - <input type=submit name=save value='" . $PALANG['save'] . "'> - <input type=submit name=cancel value='" . $PALANG['cancel'] . "'> - "; - if ($id){ - $ret.="<input type=hidden name=edit value='${id}'>"; - } - $ret.="</td></tr>\n"; - $ret.="</table>\n"; - $ret.="<p />\n"; - $ret.="</form>\n"; - $ret.="</div>\n"; - return $ret; -} - -function _edit_text($id,$key,$def_vals,$val=""){ - $val=htmlspecialchars($val); - return "<input type=text name=${key} id=${id} value='${val}'>"; -} - -function _edit_password($id,$key,$def_vals,$val=""){ - $val=preg_replace("{.}","*",$val); - return "<input type=password name=${key} id=${id} value='${val}'>"; -} - -function _edit_num($id,$key,$def_vals,$val=""){ - $val=(int)($val); - return "<input type=text name=${key} id=${id} value='${val}'>"; -} - -function _edit_bool($id,$key,$def_vals,$val=""){ - $ret="<input type=checkbox name=${key} id=${id}"; - if ($val) - $ret.=" checked"; - $ret.=">"; - return $ret; -} - -function _edit_longtext($id,$key,$def_vals,$val=""){ - $val=htmlspecialchars($val); - return "<textarea name=${key} id=${id} rows=2 style='width:20em;'>${val}</textarea>"; -} - -function _edit_enum($id,$key,$def_vals,$val=""){ - $ret="<select name=${key} id=${id}>"; - foreach($def_vals as $opt_val){ - $ret.="<option"; - if ($opt_val==$val) - $ret.=" selected"; - $ret.=">${opt_val}</option>\n"; - } - $ret.="</select>\n"; - return $ret; -} - -function _listview_id($val){ - return "<a href='?edit=${val}'> ${val} </a>"; -} - -function _listview_bool($val){ - return $val?"+":""; -} - -function _listview_longtext($val){ - return strlen($val)?"Text - ".strlen($val)." chars":"--x--"; -} - -function _listview_text($val){ - return sizeof($val)?$val:"--x--"; -} - -function _listview_password($val){ - return preg_replace("{.}","*",$val); -} - -/* vim: set ft=php expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ -?> Deleted: branches/postfixadmin-smarty/templates/footer.php =================================================================== --- branches/postfixadmin-smarty/templates/footer.php 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/footer.php 2009-06-08 19:01:03 UTC (rev 674) @@ -1,22 +0,0 @@ -<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?> -<div id="footer"> -<a target="_blank" href="http://postfixadmin.com/">Postfix Admin <?php print $version; ?></a> - | -<?php -if(isset($_SESSION['sessid']['username'])) { - printf($PALANG['pFooter_logged_as'], authentication_get_username()); -} -?> - | -<a target="_blank" href="http://postfixadmin.sf.net/update-check.php?version=<?php print $version; ?>"><?php print $PALANG['check_update']; ?></a> -<?php -if (($CONF['show_footer_text'] == "YES") and ($CONF['footer_link'])) -{ - print " | "; - print "<a href=\"" . $CONF['footer_link'] . "\">" . $CONF['footer_text'] . "</a>\n"; -} - -?> -</div> -</body> -</html> Modified: branches/postfixadmin-smarty/templates/footer.tpl =================================================================== --- branches/postfixadmin-smarty/templates/footer.tpl 2009-06-08 11:33:16 UTC (rev 673) +++ branches/postfixadmin-smarty/templates/footer.tpl 2009-06-08 19:01:03 UTC (rev 674) @@ -27,6 +27,7 @@ $sm... [truncated message content] |
From: <Seb...@us...> - 2009-08-10 13:40:53
|
Revision: 702 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=702&view=rev Author: Sebastian2009 Date: 2009-08-10 13:40:32 +0000 (Mon, 10 Aug 2009) Log Message: ----------- - get in sync with mainline, rev. 701 - added the ability to choose a range of date for vacation notification. Adjusted a SQL query in perl script and added nifty calendar. There are two additional fields in table vacation needed. Fix of upgrade.php still pending, as this will change db layout and I haven't got any PostgreSQL databases for testing. Modified Paths: -------------- branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl branches/postfixadmin-smarty/backup.php branches/postfixadmin-smarty/config.inc.php branches/postfixadmin-smarty/debian/changelog branches/postfixadmin-smarty/debian/control branches/postfixadmin-smarty/debian/rules branches/postfixadmin-smarty/edit-vacation.php branches/postfixadmin-smarty/functions.inc.php branches/postfixadmin-smarty/languages/de.lang branches/postfixadmin-smarty/languages/en.lang branches/postfixadmin-smarty/list-virtual.php branches/postfixadmin-smarty/templates/edit-vacation.tpl branches/postfixadmin-smarty/upgrade.php branches/postfixadmin-smarty/users/password.php branches/postfixadmin-smarty/variables.inc.php Added Paths: ----------- branches/postfixadmin-smarty/calendar.js branches/postfixadmin-smarty/css/calendar.css branches/postfixadmin-smarty/images/calendar/ branches/postfixadmin-smarty/images/calendar/cal.gif branches/postfixadmin-smarty/images/calendar/next_mon.gif branches/postfixadmin-smarty/images/calendar/next_year.gif branches/postfixadmin-smarty/images/calendar/no_cal.gif branches/postfixadmin-smarty/images/calendar/pixel.gif branches/postfixadmin-smarty/images/calendar/prev_mon.gif branches/postfixadmin-smarty/images/calendar/prev_year.gif branches/postfixadmin-smarty/images/calendar/shade_bl.png branches/postfixadmin-smarty/images/calendar/shade_bm.png branches/postfixadmin-smarty/images/calendar/shade_br.png branches/postfixadmin-smarty/images/calendar/shade_mr.png branches/postfixadmin-smarty/images/calendar/shade_tr.png Modified: branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl =================================================================== --- branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl 2009-08-04 20:45:21 UTC (rev 701) +++ branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl 2009-08-10 13:40:32 UTC (rev 702) @@ -56,15 +56,24 @@ # Use Log4Perl # Added better testing (and -t option) # +# 2009-06-29 Stevan Bajic <st...@ba...> +# Add Mail::Sender for SMTP auth + more flexibility +# +# 2009-07-07 Stevan Bajic <st...@ba...> +# Add better alias lookups +# Check for more heades from Anti-Virus/Anti-Spam solutions +# 2009-08-10 Sebastian <reg9009 at yahoo dot de> +# Adjust SQL query for vacation timeframe. It is now possible to set from/until date for vacation message. +# # Requirements - the following perl modules are required: # DBD::Pg or DBD::mysql -# Mail::Sendmail, Email::Valid MIME::Charset, Log::Log4perl, Log::Dispatch, MIME::EncWords and GetOpt::Std +# Mail::Sender, Email::Valid MIME::Charset, Log::Log4perl, Log::Dispatch, MIME::EncWords and GetOpt::Std # # You may install these via CPAN, or through your package tool. # CPAN: 'perl -MCPAN -e shell', then 'install Module::Whatever' # # On Debian based systems : -# libmail-sendmail-perl +# libmail-sender-perl # libdbd-pg-perl # libemail-valid-perl # libmime-perl @@ -87,6 +96,16 @@ # http://dag.wieers.com/home-made/apt/packages.php # +use DBI; +use MIME::Base64; +use MIME::EncWords qw(:all); +use Email::Valid; +use strict; +use Mail::Sender; +use Getopt::Std; +use Log::Log4perl qw(get_logger :levels); +use File::Basename; + # ========== begin configuration ========== # IMPORTANT: If you put passwords into this script, then remember @@ -95,32 +114,43 @@ # db_type - uncomment one of these our $db_type = 'Pg'; -#my $db_type = 'mysql'; +#our $db_type = 'mysql'; # leave empty for connection via UNIX socket our $db_host = ''; # connection details -our $db_username = 'dg'; -our $db_password = 'gingerdog'; +our $db_username = 'user'; +our $db_password = 'password'; our $db_name = 'postfix'; our $vacation_domain = 'autoreply.example.org'; # smtp server used to send vacation e-mails our $smtp_server = 'localhost'; +our $smtp_server_port = 25; +# SMTP authentication protocol used for sending. +# Can be 'PLAIN', 'LOGIN', 'CRAM-MD5' or 'NTLM' +# Leave it blank if you don't use authentification +our $smtp_auth = undef; +# username used to login to the server +our $smtp_authid = 'someuser'; +# password used to login to the server +our $smtp_authpwd = 'somepass'; + # Set to 1 to enable logging to syslog. our $syslog = 0; # path to logfile, when empty logging is supressed # change to e.g. /dev/null if you want nothing logged. -# if we can't write to this, we try /tmp/vacation.log instead -our $logfile='/var/spool/vacation/vacation.log'; +# if we can't write to this, and $log_to_file is 1 (below) the script will abort. +our $logfile='/var/log/vacation.log'; # 2 = debug + info, 1 = info only, 0 = error only our $log_level = 2; +# Whether to log to file or not, 0 = do not write to a log file +our $log_to_file = 0; - # notification interval, in seconds # set to 0 to notify only once # e.g. 1 day ... @@ -129,27 +159,24 @@ our $interval = 0; # instead of changing this script, you can put your settings to /etc/mail/postfixadmin/vacation.conf -# just use perl syntax there to fill the variables listed above (without the "our" keyword). Example: +# or /etc/postfixadmin/vacation.conf just use Perl syntax there to fill the variables listed above +# (without the "our" keyword). Example: # $db_username = 'mail'; if (-f "/etc/mail/postfixadmin/vacation.conf") { - require "/etc/mail/postfixadmin/vacation.conf"; + require "/etc/mail/postfixadmin/vacation.conf"; +} elsif (-f "/etc/postfixadmin/vacation.conf") { + require "/etc/postfixadmin/vacation.conf"; } # =========== end configuration =========== -if ( ! -w $logfile ) { - $logfile = "/tmp/vacation.log"; +if($log_to_file == 1) { + if (( ! -w $logfile ) && (! -w dirname($logfile))) { + # Cannot log; no where to write to. + die("Cannot create logfile : $logfile"); + } } -use DBI; -use MIME::Base64; -use MIME::EncWords qw(:all); -use Email::Valid; -use strict; -use Mail::Sendmail; -use Getopt::Std; -use Log::Log4perl qw(get_logger :levels); - my ($from, $to, $cc, $replyto , $subject, $messageid, $lastheader, $smtp_sender, $smtp_recipient, %opts, $spam, $test_mode, $logger); $subject=''; @@ -157,13 +184,12 @@ # Setup a logger... # -getopts('f:t:', \%opts) or die "Usage: $0 [-t yes] -f sender -- recipient\n -t for testing only\n"; +getopts('f:t:', \%opts) or die "Usage: $0 [-t yes] -f sender -- recipient\n\t-t for testing only\n"; $opts{f} and $smtp_sender = $opts{f} or die "-f sender not present on command line"; $test_mode = 0; $opts{t} and $test_mode = 1; $smtp_recipient = shift or die "recipient not given on command line"; - my $log_layout = Log::Log4perl::Layout::PatternLayout->new("%d %p> %F:%L %M - %m%n"); if($test_mode == 1) { @@ -173,18 +199,19 @@ $appender->layout($log_layout); $logger->add_appender($appender); $logger->debug("Test mode enabled"); -} -else { - # log to file. - my $appender = Log::Log4perl::Appender->new( - 'Log::Dispatch::File', - filename => $logfile, - mode => 'append'); - +} else { $logger = get_logger(); - $appender->layout($log_layout); - $logger->add_appender($appender); + if($log_to_file == 1) { + # log to file + my $appender = Log::Log4perl::Appender->new( + 'Log::Dispatch::File', + filename => $logfile, + mode => 'append'); + $appender->layout($log_layout); + $logger->add_appender($appender); + } + if($syslog == 1) { my $syslog_appender = Log::Log4perl::Appender->new( 'Log::Dispatch::Syslog', @@ -203,7 +230,6 @@ $logger->level($DEBUG); } - binmode (STDIN,':utf8'); my $dbh; @@ -281,9 +307,6 @@ return 0; } - - - # try and determine if email address has vacation turned on; we # have to do alias searching, and domain aliasing resolution for this. # If found, return ($num_matches, $real_email); @@ -295,7 +318,7 @@ exit(1); } my $realemail = ''; - my $query = qq{SELECT email FROM vacation WHERE email=? and active=$db_true}; + my $query = qq{SELECT email FROM vacation WHERE email=? and active=$db_true and activefrom <= NOW() and activeuntil >= NOW()}; my $stm = $dbh->prepare($query) or panic_prepare($query); $stm->execute($email) or panic_execute($query,"email='$email'"); my $rv = $stm->rows; @@ -303,54 +326,83 @@ # Recipient has vacation if ($rv == 1) { $realemail = $email; - $logger->debug("Found $email has vacation active"); + $logger->debug("Found '\$email'\ has vacation active"); } else { - # XXX why aren't we doing a join here? - $logger->debug("Looking for alias records that $email resolves to with vacation turned on"); - $query = qq{SELECT goto FROM alias WHERE address=?}; + $logger->debug("Looking for alias records that \'$email\' resolves to with vacation turned on"); + $query = qq{SELECT goto FROM alias WHERE address=? AND (goto LIKE ?,% OR goto LIKE %,? OR goto LIKE %,?,%)}; $stm = $dbh->prepare($query) or panic_prepare($query); - $stm->execute($email) or panic_execute($query,"address='$email'"); + $stm->execute($email,$email,$email,$email) or panic_execute($query,"address='$email'"); $rv = $stm->rows; # Recipient is an alias, check if mailbox has vacation if ($rv == 1) { my @row = $stm->fetchrow_array; my $alias = $row[0]; - $query = qq{SELECT email FROM vacation WHERE email=? and active=$db_true}; - $stm = $dbh->prepare($query) or panic_prepare($query); - $stm->execute($alias) or panic_prepare($query,"email='$alias'"); - $rv = $stm->rows; - + if ($alias =~ /,/) { + for (split(/\s*,\s*/, lc($alias))) { + my $singlealias = $_; + $logger->debug("Found alias \'$singlealias\' for email \'$email\'. Looking if vacation is on for alias."); + $query = qq{SELECT email FROM vacation WHERE email=? AND active=$db_true}; + $stm = $dbh->prepare($query) or panic_prepare($query); + $stm->execute($singlealias) or panic_execute($query,"email='$singlealias'"); + $rv = $stm->rows; # Alias has vacation - if ($rv == 1) { - $realemail = $alias; + if ($rv == 1) { + $realemail = $singlealias; + last; + } + } + } else { + $query = qq{SELECT email FROM vacation WHERE email=? AND active=$db_true}; + $stm = $dbh->prepare($query) or panic_prepare($query); + $stm->execute($alias) or panic_prepare($query,"email='$alias'"); + $rv = $stm->rows; +# Alias has vacation + if ($rv == 1) { + $realemail = $alias; + } } -# We still have to look for domain level aliases... - } else { +# We have to look for alias domain (domain1 -> domain2) + } else { my ($user, $domain) = split(/@/, $email); - $query = qq{SELECT goto FROM alias WHERE address=?}; + $logger->debug("Looking for alias domain for $domain / $email / $user"); + $query = qq{SELECT target_domain FROM alias_domain WHERE alias_domain=?}; $stm = $dbh->prepare($query) or panic_prepare($query); - $stm->execute("\@$domain") or panic_execute($query,"address='\@$domain'"); + $stm->execute($domain) or panic_execute($query,"alias_domain='$domain'"); $rv = $stm->rows; - $logger->debug("Looking for domain level aliases for $domain / $email / $user"); -# The receipient has a domain level alias - if ($rv == 1) { + +# The domain has a alias domain level alias + if ($rv == 1) { my @row = $stm->fetchrow_array; - my $wildcard_dest = $row[0]; - my ($wilduser, $wilddomain) = split(/@/, $wildcard_dest); + my $alias_domain_dest = $row[0]; + ($rv, $realemail) = find_real_address ("$user\@$alias_domain_dest"); +# We still have to look for domain level aliases... + } else { + my ($user, $domain) = split(/@/, $email); + $logger->debug("Looking for domain level aliases for $domain / $email / $user"); + $query = qq{SELECT goto FROM alias WHERE address=?}; + $stm = $dbh->prepare($query) or panic_prepare($query); + $stm->execute("\@$domain") or panic_execute($query,"address='\@$domain'"); + $rv = $stm->rows; + +# The receipient has a domain level alias + if ($rv == 1) { + my @row = $stm->fetchrow_array; + my $wildcard_dest = $row[0]; + my ($wilduser, $wilddomain) = split(/@/, $wildcard_dest); + # Check domain alias - if ($wilduser) { - ($rv, $realemail) = find_real_address ($wildcard_dest); + if ($wilduser) { + ($rv, $realemail) = find_real_address ($wildcard_dest); + } else { + ($rv, $realemail) = find_real_address ("$user\@$wilddomain"); + } } else { - my $new_email = $user . '@' . $wilddomain; - ($rv, $realemail) = find_real_address ($new_email); + $logger->debug("No domain level alias present for $domain / $email / $user"); } } - else { - $logger->debug("No domain level alias present for $domain / $email / $user"); - } } } return ($rv, $realemail); @@ -378,33 +430,46 @@ my $body = $row[1]; my $from = $email; my $to = $orig_from; - my $vacation_subject = encode_mimewords($subject, 'Encoding'=> 'q', 'Charset'=>'utf-8', 'Field'=>'Subject'); + my %smtp_connection; + %smtp_connection = ( + 'smtp' => $smtp_server, + 'port' => $smtp_server_port, + 'auth' => $smtp_auth, + 'authid' => $smtp_authid, + 'authpwd' => $smtp_authpwd, + 'skip_bad_recipients' => 'true', + 'encoding' => 'Base64', + 'ctype' => 'text/plain; charset=UTF-8', + 'headers' => 'Precedence: junk', + 'headers' => 'X-Loop: Postfix Admin Virtual Vacation', + ); my %mail; + # I believe Mail::Sender qp encodes the subject, so we no longer need to. %mail = ( - 'smtp' => $smtp_server, - 'Subject' => $vacation_subject, - 'From' => $from, - 'To' => $to, - 'MIME-Version' => '1.0', - 'Content-Type' => 'text/plain; charset=UTF-8', - 'Content-Transfer-Encoding' => 'base64', - 'Precedence' => 'junk', - 'X-Loop' => 'Postfix Admin Virtual Vacation', - 'Message' => encode_base64($body) + 'subject' => $subject, + 'from' => $from, + 'to' => $to, + 'msg' => encode_base64($body) ); if($test_mode == 1) { $logger->info("** TEST MODE ** : Vacation response sent to $to from $from subject $subject (not) sent\n"); $logger->info(%mail); return 0; } - sendmail(%mail) or $logger->error("Failed to send vacation response: " . $Mail::Sendmail::error); - $logger->debug("Vacation response sent, Mail::Sendmail said : " . $Mail::Sendmail::log); + $Mail::Sender::NO_X_MAILER = 1; + my $sender = new Mail::Sender({%smtp_connection}); + $sender->Open({%mail}); + $sender->SendLineEnc($body); + $sender->Close() or $logger->error("Failed to send vacation response: " . $sender->{'error_msg'}); + $logger->debug("Vacation response sent to $to, from $from"); } } -# Remove textual stuff from a (list of) email address(es) -# e.g. convert: "aardvark" <a@b.com>, "Danger Mouse" <c@d.com>, e@f.com to -# a@b.com, c@d.com, e@f.com +# Convert a (list of) email address(es) from RFC 822 style addressing to +# RFC 821 style addressing. e.g. convert: +# "John Jones" <JJ...@ac...>, "Jane Doe/Sales/ACME" <JD...@ac...> +# to: +# jj...@ac..., jd...@ac... sub strip_address { my ($arg) = @_; if(!$arg) { @@ -413,14 +478,13 @@ my @ok; $logger = get_logger(); my @list; - @list = $arg =~ m/([\w\.\-\']+\@[\w\.\-]+\w+)/g; + @list = $arg =~ m/([\w\.\-\+\'\=_\^\|\$\/\{\}~\?\*\\&\!`\%]+\@[\w\.\-]+\w+)/g; foreach(@list) { #$logger->debug("Checking: $_"); my $temp = Email::Valid->address( -address => $_, -mxcheck => 0); if($temp) { push(@ok, $temp); - } - else { + } else { $logger->debug("Email not valid : $Email::Valid::Details"); } } @@ -432,7 +496,7 @@ push(@uniq, $item) unless $seen{$item}++ } - my $result = join(", ", @uniq); + my $result = lc(join(", ", @uniq)); #$logger->debug("Result: $result"); return $result; } @@ -457,8 +521,8 @@ my ($address) = @_; my $logger = get_logger(); - if($address =~ /^(noreply|postmaster|mailer-daemon|listserv|majordomo|owner-|request-|bounces-)/i || - $address =~ /-(owner|request|bounces)\@/i ) { + if($address =~ /^(noreply|postmaster|mailer\-daemon|listserv|majordomo|owner\-|request\-|bounces\-)/i || + $address =~ /\-(owner|request|bounces)\@/i ) { $logger->debug("sender $address contains $1 - will not send vacation message"); exit(0); } @@ -483,20 +547,24 @@ elsif (/^from:\s*(.*)\n$/i) { $from = $1; $lastheader = \$from; } elsif (/^to:\s*(.*)\n$/i) { $to = $1; $lastheader = \$to; } elsif (/^cc:\s*(.*)\n$/i) { $cc = $1; $lastheader = \$cc; } - elsif (/^Reply-to:\s*(.*)\s*\n$/i) { $replyto = $1; $lastheader = \$replyto; } + elsif (/^Reply\-to:\s*(.*)\s*\n$/i) { $replyto = $1; $lastheader = \$replyto; } elsif (/^subject:\s*(.*)\n$/i) { $subject = $1; $lastheader = \$subject; } - elsif (/^message-id:\s*(.*)\s*\n$/i) { $messageid = $1; $lastheader = \$messageid; } - elsif (/^x-spam-(flag|status):\s+yes/i) { $logger->debug("x-spam-$1: yes found; exiting"); exit (0); } - elsif (/^x-facebook-notify:/i) { $logger->debug('Mail from facebook, ignoring'); exit(0); } + elsif (/^message\-id:\s*(.*)\s*\n$/i) { $messageid = $1; $lastheader = \$messageid; } + elsif (/^x\-spam\-(flag|status):\s+yes/i) { $logger->debug("x-spam-$1: yes found; exiting"); exit (0); } + elsif (/^x\-facebook\-notify:/i) { $logger->debug('Mail from facebook, ignoring'); exit(0); } elsif (/^precedence:\s+(bulk|list|junk)/i) { $logger->debug("precedence: $1 found; exiting"); exit (0); } - elsif (/^x-loop:\s+postfix\ admin\ virtual\ vacation/i) { $logger->debug("x-loop: postfix admin virtual vacation found; exiting"); exit (0); } - elsif (/^Auto-Submitted:\s*no/i) { next; } - elsif (/^Auto-Submitted:/i) { $logger->debug("Auto-Submitted: something found; exiting"); exit (0); } - elsif (/^List-(Id|Post):/i) { $logger->debug("List-$1: found; exiting"); exit (0); } + elsif (/^x\-loop:\s+postfix\ admin\ virtual\ vacation/i) { $logger->debug("x-loop: postfix admin virtual vacation found; exiting"); exit (0); } + elsif (/^Auto\-Submitted:\s*no/i) { next; } + elsif (/^Auto\-Submitted:/i) { $logger->debug("Auto-Submitted: something found; exiting"); exit (0); } + elsif (/^List\-(Id|Post):/i) { $logger->debug("List-$1: found; exiting"); exit (0); } + elsif (/^(x\-(barracuda\-)?spam\-status):\s+(yes)/i) { $logger->debug("$1: $3 found; exiting"); exit (0); } + elsif (/^(x\-dspam\-result):\s+(spam|bl[ao]cklisted)/i) { $logger->debug("$1: $2 found; exiting"); exit (0); } + elsif (/^(x\-(anti|avas\-)?virus\-status):\s+(infected)/i) { $logger->debug("$1: $3 found; exiting"); exit (0); } + elsif (/^(x\-(avas\-spam|spamtest|crm114|razor|pyzor)\-status):\s+(spam)/i) { $logger->debug("$1: $3 found; exiting"); exit (0); } + elsif (/^(x\-osbf\-lua\-score):\s+[0-9\/\.\-\+]+\s+\[([-S])\]/i) { $logger->debug("$1: $2 found; exiting"); exit (0); } else {$lastheader = "" ; } } - if($smtp_recipient =~ /\@$vacation_domain/) { # the regexp used here could probably be improved somewhat, for now hope that people won't use # as a valid mailbox character. my $tmp = $smtp_recipient; @@ -507,7 +575,6 @@ undef $tmp; } - # If either From: or To: are not set, exit if(!$from || !$to || !$messageid || !$smtp_sender || !$smtp_recipient) { $logger->info("One of from=$from, to=$to, messageid=$messageid, smtp sender=$smtp_sender, smtp recipient=$smtp_recipient empty"); @@ -515,7 +582,7 @@ } $logger->debug("Email headers have to: '$to' and From: '$from'"); $to = strip_address($to); -$from = lc ($from); +$cc = strip_address($cc); $from = check_and_clean_from_address($from); if($replyto ne "") { # if reply-to is invalid, or looks like a mailing list, then we probably don't want to send a reply. @@ -524,37 +591,29 @@ $smtp_sender = check_and_clean_from_address($smtp_sender); $smtp_recipient = check_and_clean_from_address($smtp_recipient); - if ($smtp_sender eq $smtp_recipient) { $logger->debug("smtp sender $smtp_sender and recipient $smtp_recipient are the same; aborting"); exit(0); } -my $recipfound = 0; for (split(/,\s*/, lc($to)), split(/,\s*/, lc($cc))) { - my $destinatario = strip_address($_); - if ($smtp_sender eq $destinatario) { - $logger->debug("sender header $smtp_sender contains recipient $destinatario (mailing myself?)"); + my $header_recipient = strip_address($_); + if ($smtp_sender eq $header_recipient) { + $logger->debug("sender header $smtp_sender contains recipient $header_recipient (mailing myself?)"); exit(0); } - if ($smtp_recipient eq $destinatario) { $recipfound++; } } -if (!$recipfound) { - $logger->debug("smtp envelope recipient $smtp_recipient not found in the header recipients ($to & $cc) (therefore they were bcc'ed, so won't send vacation message)"); - exit (0); -} - - my ($rv, $email) = find_real_address($smtp_recipient); if ($rv == 1) { $logger->debug("Attempting to send vacation response for: $messageid to: $smtp_sender, $smtp_recipient, $email (test_mode = $test_mode)"); send_vacation_email($email, $smtp_sender, $smtp_recipient, $messageid, $test_mode); -} -else { +} else { $logger->debug("SMTP recipient $smtp_recipient which resolves to $email does not have an active vacation (rv: $rv, email: $email)"); } 0; #/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ + + Modified: branches/postfixadmin-smarty/backup.php =================================================================== --- branches/postfixadmin-smarty/backup.php 2009-08-04 20:45:21 UTC (rev 701) +++ branches/postfixadmin-smarty/backup.php 2009-08-10 13:40:32 UTC (rev 702) @@ -58,9 +58,9 @@ if ($_SERVER['REQUEST_METHOD'] == "GET") { umask (077); - $path = (ini_get('upload_tmp_dir') != '') ? ini_get('upload_tmp_dir') : '/tmp/'; + $path = (ini_get('upload_tmp_dir') != '') ? ini_get('upload_tmp_dir') : '/tmp'; $filename = "postfixadmin-" . date ("Ymd") . "-" . getmypid() . ".sql"; - $backup = $path . $filename; + $backup = $path . DIRECTORY_SEPARATOR . $filename; $header = "#\n# Postfix Admin $version\n# Date: " . date ("D M j G:i:s T Y") . "\n#\n"; Added: branches/postfixadmin-smarty/calendar.js =================================================================== --- branches/postfixadmin-smarty/calendar.js (rev 0) +++ branches/postfixadmin-smarty/calendar.js 2009-08-10 13:40:32 UTC (rev 702) @@ -0,0 +1,336 @@ +// Tigra Calendar v4.0.2 (12-01-2009) European (dd.mm.yyyy) +// http://www.softcomplex.com/products/tigra_calendar/ +// Public Domain Software... You're welcome. + +// default settins +var A_TCALDEF = { + 'months' : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + 'weekdays' : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], + 'yearscroll': true, // show year scroller + 'weekstart': 1, // first day of week: 0-Su or 1-Mo + 'centyear' : 70, // 2 digit years less than 'centyear' are in 20xx, othewise in 19xx. + 'imgpath' : 'images/calendar/' // directory with calendar images +} +// date parsing function +function f_tcalParseDate (s_date) { + + var re_date = /^\s*(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s*$/; + if (!re_date.exec(s_date)) + return alert ("Invalid date: '" + s_date + "'.\nAccepted format is dd.mm.yyyy.") + var n_day = Number(RegExp.$1), + n_month = Number(RegExp.$2), + n_year = Number(RegExp.$3); + + if (n_year < 100) + n_year += (n_year < this.a_tpl.centyear ? 2000 : 1900); + if (n_month < 1 || n_month > 12) + return alert ("Invalid month value: '" + n_month + "'.\nAllowed range is 01-12."); + var d_numdays = new Date(n_year, n_month, 0); + if (n_day > d_numdays.getDate()) + return alert("Invalid day of month value: '" + n_day + "'.\nAllowed range for selected month is 01 - " + d_numdays.getDate() + "."); + + return new Date (n_year, n_month - 1, n_day); +} +// date generating function +function f_tcalGenerDate (d_date) { + return ( + (d_date.getDate() < 10 ? '0' : '') + d_date.getDate() + "." + + (d_date.getMonth() < 9 ? '0' : '') + (d_date.getMonth() + 1) + "." + + d_date.getFullYear() + ); +} + +// implementation +function tcal (a_cfg, a_tpl) { + + // apply default template if not specified + if (!a_tpl) + a_tpl = A_TCALDEF; + + // register in global collections + if (!window.A_TCALS) + window.A_TCALS = []; + if (!window.A_TCALSIDX) + window.A_TCALSIDX = []; + + this.s_id = a_cfg.id ? a_cfg.id : A_TCALS.length; + window.A_TCALS[this.s_id] = this; + window.A_TCALSIDX[window.A_TCALSIDX.length] = this; + + // assign methods + this.f_show = f_tcalShow; + this.f_hide = f_tcalHide; + this.f_toggle = f_tcalToggle; + this.f_update = f_tcalUpdate; + this.f_relDate = f_tcalRelDate; + this.f_parseDate = f_tcalParseDate; + this.f_generDate = f_tcalGenerDate; + + // create calendar icon + this.s_iconId = 'tcalico_' + this.s_id; + this.e_icon = f_getElement(this.s_iconId); + if (!this.e_icon) { + document.write('<img src="' + a_tpl.imgpath + 'cal.gif" id="' + this.s_iconId + '" onclick="A_TCALS[\'' + this.s_id + '\'].f_toggle()" class="tcalIcon" alt="Open Calendar" />'); + this.e_icon = f_getElement(this.s_iconId); + } + // save received parameters + this.a_cfg = a_cfg; + this.a_tpl = a_tpl; +} + +function f_tcalShow (d_date) { + + // find input field + if (!this.a_cfg.controlname) + throw("TC: control name is not specified"); + if (this.a_cfg.formname) { + var e_form = document.forms[this.a_cfg.formname]; + if (!e_form) + throw("TC: form '" + this.a_cfg.formname + "' can not be found"); + this.e_input = e_form.elements[this.a_cfg.controlname]; + } + else + this.e_input = f_getElement(this.a_cfg.controlname); + + if (!this.e_input || !this.e_input.tagName || this.e_input.tagName != 'INPUT') + throw("TC: element '" + this.a_cfg.controlname + "' does not exist in " + + (this.a_cfg.formname ? "form '" + this.a_cfg.controlname + "'" : 'this document')); + + // dynamically create HTML elements if needed + this.e_div = f_getElement('tcal'); + if (!this.e_div) { + this.e_div = document.createElement("DIV"); + this.e_div.id = 'tcal'; + document.body.appendChild(this.e_div); + } + this.e_shade = f_getElement('tcalShade'); + if (!this.e_shade) { + this.e_shade = document.createElement("DIV"); + this.e_shade.id = 'tcalShade'; + document.body.appendChild(this.e_shade); + } + this.e_iframe = f_getElement('tcalIF') + if (b_ieFix && !this.e_iframe) { + this.e_iframe = document.createElement("IFRAME"); + this.e_iframe.style.filter = 'alpha(opacity=0)'; + this.e_iframe.id = 'tcalIF'; + this.e_iframe.src = this.a_tpl.imgpath + 'pixel.gif'; + document.body.appendChild(this.e_iframe); + } + + // hide all calendars + f_tcalHideAll(); + + // generate HTML and show calendar + this.e_icon = f_getElement(this.s_iconId); + if (!this.f_update()) + return; + + this.e_div.style.visibility = 'visible'; + this.e_shade.style.visibility = 'visible'; + if (this.e_iframe) + this.e_iframe.style.visibility = 'visible'; + + // change icon and status + this.e_icon.src = this.a_tpl.imgpath + 'no_cal.gif'; + this.e_icon.title = 'Close Calendar'; + this.b_visible = true; +} + +function f_tcalHide (n_date) { + if (n_date) + this.e_input.value = this.f_generDate(new Date(n_date)); + + // no action if not visible + if (!this.b_visible) + return; + + // hide elements + if (this.e_iframe) + this.e_iframe.style.visibility = 'hidden'; + if (this.e_shade) + this.e_shade.style.visibility = 'hidden'; + this.e_div.style.visibility = 'hidden'; + + // change icon and status + this.e_icon = f_getElement(this.s_iconId); + this.e_icon.src = this.a_tpl.imgpath + 'cal.gif'; + this.e_icon.title = 'Open Calendar'; + this.b_visible = false; +} + +function f_tcalToggle () { + return this.b_visible ? this.f_hide() : this.f_show(); +} + +function f_tcalUpdate (d_date) { + + var d_today = this.a_cfg.today ? this.f_parseDate(this.a_cfg.today) : f_tcalResetTime(new Date()); + var d_selected = this.e_input.value == '' + ? (this.a_cfg.selected ? this.f_parseDate(this.a_cfg.selected) : d_today) + : this.f_parseDate(this.e_input.value); + + // figure out date to display + if (!d_date) + // selected by default + d_date = d_selected; + else if (typeof(d_date) == 'number') + // get from number + d_date = f_tcalResetTime(new Date(d_date)); + else if (typeof(d_date) == 'string') + // parse from string + this.f_parseDate(d_date); + + if (!d_date) return false; + + // first date to display + var d_firstday = new Date(d_date); + d_firstday.setDate(1); + d_firstday.setDate(1 - (7 + d_firstday.getDay() - this.a_tpl.weekstart) % 7); + + var a_class, s_html = '<table class="ctrl"><tbody><tr>' + + (this.a_tpl.yearscroll ? '<td' + this.f_relDate(d_date, -1, 'y') + ' title="Previous Year"><img src="' + this.a_tpl.imgpath + 'prev_year.gif" /></td>' : '') + + '<td' + this.f_relDate(d_date, -1) + ' title="Previous Month"><img src="' + this.a_tpl.imgpath + 'prev_mon.gif" /></td><th>' + + this.a_tpl.months[d_date.getMonth()] + ' ' + d_date.getFullYear() + + '</th><td' + this.f_relDate(d_date, 1) + ' title="Next Month"><img src="' + this.a_tpl.imgpath + 'next_mon.gif" /></td>' + + (this.a_tpl.yearscroll ? '<td' + this.f_relDate(d_date, 1, 'y') + ' title="Next Year"><img src="' + this.a_tpl.imgpath + 'next_year.gif" /></td></td>' : '') + + '</tr></tbody></table><table><tbody><tr class="wd">'; + + // print weekdays titles + for (var i = 0; i < 7; i++) + s_html += '<th>' + this.a_tpl.weekdays[(this.a_tpl.weekstart + i) % 7] + '</th>'; + s_html += '</tr>' ; + + // print calendar table + var n_date, n_month, d_current = new Date(d_firstday); + while (d_current.getMonth() == d_date.getMonth() || + d_current.getMonth() == d_firstday.getMonth()) { + + // print row heder + s_html +='<tr>'; + for (var n_wday = 0; n_wday < 7; n_wday++) { + + a_class = []; + n_date = d_current.getDate(); + n_month = d_current.getMonth(); + + // other month + if (d_current.getMonth() != d_date.getMonth()) + a_class[a_class.length] = 'othermonth'; + // weekend + if (d_current.getDay() == 0 || d_current.getDay() == 6) + a_class[a_class.length] = 'weekend'; + // today + if (d_current.valueOf() == d_today.valueOf()) + a_class[a_class.length] = 'today'; + // selected + if (d_current.valueOf() == d_selected.valueOf()) + a_class[a_class.length] = 'selected'; + + s_html += '<td onclick="A_TCALS[\'' + this.s_id + '\'].f_hide(' + d_current.valueOf() + ')"' + (a_class.length ? ' class="' + a_class.join(' ') + '">' : '>') + n_date + '</td>' + + d_current.setDate(++n_date); + while (d_current.getDate() != n_date && d_current.getMonth() == n_month) { + alert(n_date + "\n" + d_current + "\n" + new Date()); + d_current.setHours(d_current.getHours + 1); + d_current = f_tcalResetTime(d_current); + } + } + // print row footer + s_html +='</tr>'; + } + s_html +='</tbody></table>'; + + // update HTML, positions and sizes + this.e_div.innerHTML = s_html; + + var n_width = this.e_div.offsetWidth; + var n_height = this.e_div.offsetHeight; + var n_top = f_getPosition (this.e_icon, 'Top') + this.e_icon.offsetHeight; + var n_left = f_getPosition (this.e_icon, 'Left') - n_width + this.e_icon.offsetWidth; + if (n_left < 0) n_left = 0; + + this.e_div.style.left = n_left + 'px'; + this.e_div.style.top = n_top + 'px'; + + this.e_shade.style.width = (n_width + 8) + 'px'; + this.e_shade.style.left = (n_left - 1) + 'px'; + this.e_shade.style.top = (n_top - 1) + 'px'; + this.e_shade.innerHTML = b_ieFix + ? '<table><tbody><tr><td rowspan="2" colspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_tr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td height="' + (n_height - 7) + '" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_mr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td width="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bl.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bm.png\', sizingMethod=\'scale\');" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_br.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tbody></table>' + : '<table><tbody><tr><td rowspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td rowspan="2"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7"><img src="' + this.a_tpl.imgpath + 'shade_tr.png"></td></tr><tr><td background="' + this.a_tpl.imgpath + 'shade_mr.png" height="' + (n_height - 7) + '"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td><img src="' + this.a_tpl.imgpath + 'shade_bl.png"></td><td background="' + this.a_tpl.imgpath + 'shade_bm.png" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td><img src="' + this.a_tpl.imgpath + 'shade_br.png"></td></tr><tbody></table>'; + + if (this.e_iframe) { + this.e_iframe.style.left = n_left + 'px'; + this.e_iframe.style.top = n_top + 'px'; + this.e_iframe.style.width = (n_width + 6) + 'px'; + this.e_iframe.style.height = (n_height + 6) +'px'; + } + return true; +} + +function f_getPosition (e_elemRef, s_coord) { + var n_pos = 0, n_offset, + e_elem = e_elemRef; + + while (e_elem) { + n_offset = e_elem["offset" + s_coord]; + n_pos += n_offset; + e_elem = e_elem.offsetParent; + } + // margin correction in some browsers + if (b_ieMac) + n_pos += parseInt(document.body[s_coord.toLowerCase() + 'Margin']); + else if (b_safari) + n_pos -= n_offset; + + e_elem = e_elemRef; + while (e_elem != document.body) { + n_offset = e_elem["scroll" + s_coord]; + if (n_offset && e_elem.style.overflow == 'scroll') + n_pos -= n_offset; + e_elem = e_elem.parentNode; + } + return n_pos; +} + +function f_tcalRelDate (d_date, d_diff, s_units) { + var s_units = (s_units == 'y' ? 'FullYear' : 'Month'); + var d_result = new Date(d_date); + d_result['set' + s_units](d_date['get' + s_units]() + d_diff); + if (d_result.getDate() != d_date.getDate()) + d_result.setDate(0); + return ' onclick="A_TCALS[\'' + this.s_id + '\'].f_update(' + d_result.valueOf() + ')"'; +} + +function f_tcalHideAll () { + for (var i = 0; i < window.A_TCALSIDX.length; i++) + window.A_TCALSIDX[i].f_hide(); +} + +function f_tcalResetTime (d_date) { + d_date.setHours(0); + d_date.setMinutes(0); + d_date.setSeconds(0); + d_date.setMilliseconds(0); + return d_date; +} + +f_getElement = document.all ? + function (s_id) { return document.all[s_id] } : + function (s_id) { return document.getElementById(s_id) }; + +if (document.addEventListener) + window.addEventListener('scroll', f_tcalHideAll, false); +if (window.attachEvent) + window.attachEvent('onscroll', f_tcalHideAll); + +// global variables +var s_userAgent = navigator.userAgent.toLowerCase(), + re_webkit = /WebKit\/(\d+)/i; +var b_mac = s_userAgent.indexOf('mac') != -1, + b_ie5 = s_userAgent.indexOf('msie 5') != -1, + b_ie6 = s_userAgent.indexOf('msie 6') != -1 && s_userAgent.indexOf('opera') == -1; +var b_ieFix = b_ie5 || b_ie6, + b_ieMac = b_mac && b_ie5, + b_safari = b_mac && re_webkit.exec(s_userAgent) && Number(RegExp.$1) < 500; Modified: branches/postfixadmin-smarty/config.inc.php =================================================================== --- branches/postfixadmin-smarty/config.inc.php 2009-08-04 20:45:21 UTC (rev 701) +++ branches/postfixadmin-smarty/config.inc.php 2009-08-10 13:40:32 UTC (rev 702) @@ -16,12 +16,6 @@ * Contains configuration options. */ -if (ereg ("config.inc.php", $_SERVER['PHP_SELF'])) -{ - header ("Location: login.php"); - exit; -} - /***************************************************************** * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * The following line needs commenting out or removing before the @@ -176,7 +170,7 @@ // Virtual Vacation // If you want to use virtual vacation for you mailbox users set this to 'YES'. -// NOTE: Make sure that you install the vacation module. http://high5.net/postfixadmin/ +// NOTE: Make sure that you install the vacation module. (See VIRTUAL-VACATION/) $CONF['vacation'] = 'NO'; // This is the autoreply domain that you will need to set in your Postfix // transport maps to handle virtual vacations. It does not need to be a Added: branches/postfixadmin-smarty/css/calendar.css =================================================================== --- branches/postfixadmin-smarty/css/calendar.css (rev 0) +++ branches/postfixadmin-smarty/css/calendar.css 2009-08-10 13:40:32 UTC (rev 702) @@ -0,0 +1,95 @@ +/* calendar icon */ +img.tcalIcon { + cursor: pointer; + margin-left: 1px; + vertical-align: middle; +} +/* calendar container element */ +div#tcal { + position: absolute; + visibility: hidden; + z-index: 100; + width: 158px; + padding: 2px 0 0 0; +} +/* all tables in calendar */ +div#tcal table { + width: 100%; + border: 1px solid silver; + border-collapse: collapse; + background-color: white; +} +/* navigation table */ +div#tcal table.ctrl { + border-bottom: 0; +} +/* navigation buttons */ +div#tcal table.ctrl td { + width: 15px; + height: 20px; +} +/* month year header */ +div#tcal table.ctrl th { + background-color: white; + color: black; + border: 0; +} +/* week days header */ +div#tcal th { + border: 1px solid silver; + border-collapse: collapse; + text-align: center; + padding: 3px 0; + font-family: tahoma, verdana, arial; + font-size: 10px; + background-color: gray; + color: white; +} +/* date cells */ +div#tcal td { + border: 0; + border-collapse: collapse; + text-align: center; + padding: 2px 0; + font-family: tahoma, verdana, arial; + font-size: 11px; + width: 22px; + cursor: pointer; +} +/* date highlight + in case of conflicting settings order here determines the priority from least to most important */ +div#tcal td.othermonth { + color: silver; +} +div#tcal td.weekend { + background-color: #ACD6F5; +} +div#tcal td.today { + border: 1px solid red; +} +div#tcal td.selected { + background-color: #FFB3BE; +} +/* iframe element used to suppress windowed controls in IE5/6 */ +iframe#tcalIF { + position: absolute; + visibility: hidden; + z-index: 98; + border: 0; +} +/* transparent shadow */ +div#tcalShade { + position: absolute; + visibility: hidden; + z-index: 99; +} +div#tcalShade table { + border: 0; + border-collapse: collapse; + width: 100%; +} +div#tcalShade table td { + border: 0; + border-collapse: collapse; + padding: 0; +} Modified: branches/postfixadmin-smarty/debian/changelog =================================================================== --- branches/postfixadmin-smarty/debian/changelog 2009-08-04 20:45:21 UTC (rev 701) +++ branches/postfixadmin-smarty/debian/changelog 2009-08-10 13:40:32 UTC (rev 702) @@ -1,3 +1,16 @@ +postfixadmin (2.3rc7) unstable; urgency=low + + * Fix issue with pre.rm script + * New 'upstream' release. + + -- David Goodwin <dav...@pa...> Mon, 27 Jul 2009 22:08:26 +0100 + +postfixadmin (2.3rc6) unstable; urgency=low + + * Bump version number; etc. + + -- David Goodwin <dav...@pa...> Mon, 20 Jul 2009 19:56:26 +0100 + postfixadmin (2.3rc5) unstable; urgency=low * Initial release (Closes: #247225) Modified: branches/postfixadmin-smarty/debian/control =================================================================== --- branches/postfixadmin-smarty/debian/control 2009-08-04 20:45:21 UTC (rev 701) +++ branches/postfixadmin-smarty/debian/control 2009-08-10 13:40:32 UTC (rev 702) @@ -3,7 +3,7 @@ Priority: optional Maintainer: Norman Messtorff <no...@no...> Build-Depends: debhelper (>= 7), po-debconf, quilt (>= 0.46) -Standards-Version: 3.8.1 +Standards-Version: 3.8.2 Homepage: http://postfixadmin.sourceforge.net XS-Vcs-Svn: https://postfixadmin.svn.sourceforge.net/svnroot/postfixadmin/trunk XS-Vcs-Browse: http://postfixadmin.svn.sourceforge.net/viewvc/postfixadmin/trunk/ Modified: branches/postfixadmin-smarty/debian/rules =================================================================== --- branches/postfixadmin-smarty/debian/rules 2009-08-04 20:45:21 UTC (rev 701) +++ branches/postfixadmin-smarty/debian/rules 2009-08-10 13:40:32 UTC (rev 702) @@ -28,7 +28,7 @@ dh_install mv debian/postfixadmin/usr/share/postfixadmin/config.inc.php debian/postfixadmin/etc/postfixadmin/config.inc.php find debian/postfixadmin -name .svn | xargs -r rm -r - if test "${DIST}" = "lenny" ; then cp debian/confd-link.sh debian/postfixadmin/usr/share/postfixadmin/; fi + cp debian/confd-link.sh debian/postfixadmin/usr/share/postfixadmin/ # Build architecture-independent files here. binary-indep: build install Modified: branches/postfixadmin-smarty/edit-vacation.php =================================================================== --- branches/postfixadmin-smarty/edit-vacation.php 2009-08-04 20:45:21 UTC (rev 701) +++ branches/postfixadmin-smarty/edit-vacation.php 2009-08-10 13:40:32 UTC (rev 702) @@ -1,211 +1,222 @@ -<?php -/** - * Postfix Admin - * - * LICENSE - * This source file is subject to the GPL license that is bundled with - * this package in the file LICENSE.TXT. - * - * Further details on the project are available at : - * http://www.postfixadmin.com or http://postfixadmin.sf.net - * - * @version $Id$ - * @license GNU GPL v2 or later. - * - * File: edit-vacation.php - * Responsible for allowing users to update their vacation status. - * - * Template File: edit-vacation.php - * - * Template Variables: - * - * tUseremail - * tMessage - * tSubject - * tBody - * - * Form POST \ GET Variables: - * - * fUsername - * fDomain - * fCanceltarget - * fChange - * fBack - * fQuota - * fActive - */ - -require_once('common.php'); - -if($CONF['vacation'] == 'NO') { - header("Location: " . $CONF['postfix_admin_url'] . "/list-virtual.php"); - exit(0); -} - -$SESSID_USERNAME = authentication_get_username(); -$tmp = preg_split ('/@/', $SESSID_USERNAME); -$USERID_DOMAIN = $tmp[1]; - -// only allow admins to change someone else's 'stuff' -if(authentication_has_role('admin')) { - if (isset($_GET['username'])) $fUsername = escape_string ($_GET['username']); - if (isset($_GET['domain'])) $fDomain = escape_string ($_GET['domain']); -} -else { - $fUsername = $SESSID_USERNAME; - $fDomain = $USERID_DOMAIN; -} - -$vacation_domain = $CONF['vacation_domain']; -$vacation_goto = preg_replace('/@/', '#', $fUsername); -$vacation_goto = $vacation_goto . '@' . $vacation_domain; - -$fCanceltarget = $CONF['postfix_admin_url'] . "/list-virtual.php?domain=$fDomain"; - -if ($_SERVER['REQUEST_METHOD'] == "GET") -{ - - $result = db_query("SELECT * FROM $table_vacation WHERE email='$fUsername'"); - if ($result['rows'] == 1) - { - $row = db_array($result['result']); - $tMessage = ''; - $tSubject = $row['subject']; - $tBody = $row['body']; - } - - $tUseremail = $fUsername; - $tDomain = $fDomain; - if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); } - if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); } - -} - -if ($_SERVER['REQUEST_METHOD'] == "POST") -{ - - $tSubject = safepost('fSubject'); - $fSubject = escape_string ($tSubject); - $tBody = safepost('fBody'); - $fBody = escape_string ($tBody); - $fChange = escape_string (safepost('fChange')); - $fBack = escape_string (safepost('fBack')); - - if(authentication_has_role('admin') && isset($_GET['domain'])) { - $fDomain = escape_string ($_GET['domain']); - } - else { - $fDomain = $USERID_DOMAIN; - } - if(authentication_has_role('admin') && isset ($_GET['username'])) { - $fUsername = escape_string($_GET['username']); - } - else { - $fUsername = authentication_get_username(); - } - - $tUseremail = $fUsername; - if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); } - if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); } - - //if change, remove old one, then perhaps set new one - if (!empty ($fBack) || !empty ($fChange)) - { - //if we find an existing vacation entry, disable it - $result = db_query("SELECT * FROM $table_vacation WHERE email='$fUsername'"); - if ($result['rows'] == 1) - { - $db_false = db_get_boolean(false); - // retain vacation message if possible - i.e disable vacation away-ness. - $result = db_query ("UPDATE $table_vacation SET active = $db_false WHERE email='$fUsername'"); - $result = db_query("DELETE FROM $table_vacation_notification WHERE on_vacation='$fUsername'"); - - $result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'"); - if ($result['rows'] == 1) - { - $row = db_array ($result['result']); - $goto = $row['goto']; - //only one of these will do something, first handles address at beginning and middle, second at end - $goto= preg_replace ( "/$vacation_goto,/", '', $goto); - $goto= preg_replace ( "/,$vacation_goto/", '', $goto); - $goto= preg_replace ( "/$vacation_goto/", '', $goto); - if($goto == '') { - $sql = "DELETE FROM $table_alias WHERE address = '$fUsername'"; - } - else { - $sql = "UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fUsername'"; - } - $result = db_query($sql); - if ($result['rows'] != 1) - { - $error = 1; - } - } - } - } - - - //Set the vacation data for $fUsername - if (!empty ($fChange)) - { - $goto = ''; - $result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'"); - if ($result['rows'] == 1) - { - $row = db_array ($result['result']); - $goto = $row['goto']; - } - $Active = db_get_boolean(True); - $notActive = db_get_boolean(False); - // I don't think we need to care if the vacation entry is inactive or active.. as long as we don't try and - // insert a duplicate - $result = db_query("SELECT * FROM $table_vacation WHERE email = '$fUsername'"); - if($result['rows'] == 1) { - $result = db_query("UPDATE $table_vacation SET active = $Active, subject = '$fSubject', body = '$fBody', created = NOW() WHERE email = '$fUsername'"); - } - else { - $result = db_query ("INSERT INTO $table_vacation (email,subject,body,domain,created,active) VALUES ('$fUsername','$fSubject','$fBody','$fDomain',NOW(),$Active)"); - } - - if ($result['rows'] != 1) - { - $error = 1; - } - if($goto == '') { - $goto = $vacation_goto; - $sql = "INSERT INTO $table_alias (goto, address, domain, modified) VALUES ('$goto', '$fUsername', '$fDomain', NOW())"; - } - else { - $goto = $goto . "," . $vacation_goto; - $sql = "UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fUsername'"; - } - $result = db_query ($sql); - if ($result['rows'] != 1) - { - $error = 1; - } - } -} - -if($error == 0) { - if(!empty ($fBack)) { - $tMessage = $PALANG['pVacation_result_removed']; - } - if(!empty($fChange)) { - $tMessage= $PALANG['pVacation_result_added']; - } -} -else { - $tMessage = $PALANG['pVacation_result_error']; -} - -$smarty->assign ('tUseremail', $tUseremail); -$smarty->assign ('tSubject', htmlentities(stripslashes($tSubject), ENT_QUOTES, 'UTF-8')); -$smarty->assign ('tBody', htmlentities(stripslashes($tBody), ENT_QUOTES , 'UTF-8')); -$smarty->assign ('tMessage', $tMessage); -$smarty->assign ('fCanceltarget', $fCanceltarget); -$smarty->assign ('smarty_template', 'edit-vacation'); -$smarty->display ('index.tpl'); - -/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ -?> +<?php +/** + * Postfix Admin + * + * LICENSE + * This source file is subject to the GPL license that is bundled with + * this package in the file LICENSE.TXT. + * + * Further details on the project are available at : + * http://www.postfixadmin.com or http://postfixadmin.sf.net + * + * @version $Id$ + * @license GNU GPL v2 or later. + * + * File: edit-vacation.php + * Responsible for allowing users to update their vacation status. + * + * Template File: edit-vacation.php + * + * Template Variables: + * + * tUseremail + * tMessage + * tSubject + * tBody + * + * Form POST \ GET Variables: + * + * fUsername + * fDomain + * fCanceltarget + * fChange + * fBack + * fQuota + * fActive + */ + +require_once('common.php'); + +if($CONF['vacation'] == 'NO') { + header("Location: " . $CONF['postfix_admin_url'] . "/list-virtual.php"); + exit(0); +} + +$SESSID_USERNAME = authentication_get_username(); +$tmp = preg_split ('/@/', $SESSID_USERNAME); +$USERID_DOMAIN = $tmp[1]; + +// only allow admins to change someone else's 'stuff' +if(authentication_has_role('admin')) { + if (isset($_GET['username'])) $fUsername = escape_string ($_GET['username']); + if (isset($_GET['domain'])) $fDomain = escape_string ($_GET['domain']); +} +else { + $fUsername = $SESSID_USERNAME; + $fDomain = $USERID_DOMAIN; +} + +$vacation_domain = $CONF['vacation_domain']; +$vacation_goto = preg_replace('/@/', '#', $fUsername); +$vacation_goto = $vacation_goto . '@' . $vacation_domain; + +$fCanceltarget = $CONF['postfix_admin_url'] . "/list-virtual.php?domain=$fDomain"; + +if ($_SERVER['REQUEST_METHOD'] == "GET") +{ + + $result = db_query("SELECT * FROM $table_vacation WHERE email='$fUsername'"); + if ($result['rows'] == 1) + { + $row = db_array($result['result']); + $tMessage = ''; + $tSubject = $row['subject']; + $tBody = $row['body']; + $tActiveFrom = $row['activefrom']; + $tActiveUntil = $row['activeuntil']; + } + + $tUseremail = $fUsername; + $tDomain = $fDomain; + if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); } + if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); } + +} + +if ($_SERVER['REQUEST_METHOD'] == "POST") +{ + + $tSubject = safepost('fSubject'); + $fSubject = escape_string ($tSubject); + $tBody = safepost('fBody'); +// $tActiveFrom = safepost('activefrom').' 00:00:01'; +// $tActiveUntil = safepost('activeuntil').' 23:59:59'; + $tActiveFrom = date ("Y-m-d 00:00:00", strtotime (safepost('activefrom'))); + $tActiveUntil = date ("Y-m-d 23:59:59", strtotime (safepost('activeuntil'))); + $fBody = escape_string ($tBody); + $fChange = escape_string (safepost('fChange')); + $fBack = escape_string (safepost('fBack')); + if(authentication_has_role('admin') && isset($_GET['domain'])) { + $fDomain = escape_string ($_GET['domain']); + } + else { + $fDomain = $USERID_DOMAIN; + } + if(authentication_has_role('admin') && isset ($_GET['username'])) { + $fUsername = escape_string($_GET['username']); + } + else { + $fUsername = authentication_get_username(); + } + + $tUseremail = $fUsername; + if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); } + if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); } + + //if change, remove old one, then perhaps set new one + if (!empty ($fBack) || !empty ($fChange)) + { + //if we find an existing vacation entry, disable it + $result = db_query("SELECT * FROM $table_vacation WHERE email='$fUsername'"); + if ($result['rows'] == 1) + { + $db_false = db_get_boolean(false); + // retain vacation message if possible - i.e disable vacation away-ness. + $result = db_query ("UPDATE $table_vacation SET active = $db_false WHERE email='$fUsername'"); + $result = db_query("DELETE FROM $table_vacation_notification WHERE on_vacation='$fUsername'"); + + $result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'"); + if ($result['rows'] == 1) + { + $row = db_array ($result['result']); + $goto = $row['goto']; + //only one of these will do something, first handles address at beginning and middle, second at end + $goto= preg_replace ( "/$vacation_goto,/", '', $goto); + $goto= preg_replace ( "/,$vacation_goto/", '', $goto); + $goto= preg_replace ( "/$vacation_goto/", '', $goto); + if($goto == '') { + $sql = "DELETE FROM $table_alias WHERE address = '$fUsername'"; + } + else { + $sql = "UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fUsername'"; + } + $result = db_query($sql); + if ($result['rows'] != 1) + { + $error = 1; + } + } + } + } + + + //Set the vacation data for $fUsername + if (!empty ($fChange)) + { + $goto = ''; + $result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'"); + if ($result['rows'] == 1) + { + $row = db_array ($result['result']); + $goto = $row['goto']; + } + $Active = db_get_boolean(True); + $notActive = db_get_boolean(False); + // I don't think we need to care if the vacation entry is inactive or active.. as long as we don't try and + // insert a duplicate + $result = db_query("SELECT * FROM $table_vacation WHERE email = '$fUsername'"); + if($result['rows'] == 1) { + $result = db_query("UPDATE $table_vacation SET active = $Active, subject = '$fSubject', body = '$fBody', created = NOW(), activefrom = '$tActiveFrom', activeuntil = '$tActiveUntil' WHERE email = '$fUsername'"); + } + else { + $result = db_query ("INSERT INTO $table_vacation (email,subject,body,domain,created,active, activefrom, activeuntil) VALUES ('$fUsername','$fSubject','$fBody','$fDomain',NOW(),$Active, '$tActiveFrom', '$tActiveUntil')"); + } + + if ($result['rows'] != 1) + { + $error = 1; + } + if($goto == '') { + $goto = $vacation_goto; + $sql = "INSERT INTO $table_alias (goto, address, domain, modified, activefrom, activeuntil) VALUES ('$goto', '$fUsername', '$fDomain', NOW(), '$tActiveFrom', '$tActiveUntil')"; + } + else { + $goto = $goto . "," . $vacation_goto; + $sql = "UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fUsername'"; + } + $result = db_query ($sql); + if ($result['rows'] != 1) + { + $error = 1; + } + } +} + +if($error == 0) { + if(!empty ($fBack)) { + $tMessage = $PALANG['pVacation_result_removed']; + } + if(!empty($fChange)) { + $tMessage= $PALANG['pVacation_result_added']; + } +} +else { + $tMessage = $PALANG['pVacation_result_error']; +} +if (empty ($tActiveFrom)) + $tActiveFrom = date ("Y-m-d"); +if (empty ($tActiveUntil)) + $tActiveUntil = date ("Y-m-d"); + +$smarty->assign ('tUseremail', $tUseremail); +$smarty->assign ('tSubject', htmlentities(stripslashes($tSubject), ENT_QUOTES, 'UTF-8')); +$smarty->assign ('tBody', htmlentities(stripslashes($tBody), ENT_QUOTES , 'UTF-8')); +$smarty->assign ('tMessage', $tMessage); +$smarty->assign ('tActiveFrom', date ("d.m.Y", strtotime ($tActiveFrom))); +$smarty->assign ('tActiveUntil', date ("d.m.Y", strtotime ($tActiveUntil))); +$smarty->assign ('fCanceltarget', $fCanceltarget); +$smarty->assign ('smarty_template', 'edit-vacation'); +$smarty->display ('index.tpl'); + +/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ +?> Modified: branches/postfixadmin-smarty/functions.inc.php =================================================================== --- branches/postfixadmin-smarty/functions.inc.php 2009-08-04 20:45:21 UTC (rev 701) +++ branches/postfixadmin-smarty/functions.inc.php 2009-08-10 13:40:32 UTC (rev 702) @@ -16,14 +16,8 @@ * Contains re-usable code. */ -if (ereg ("functions.inc.php", $_SERVER['PHP_SELF'])) -{ - header ("Location: login.php"); - exit; -} +$version = '2.3 rc7'; -$version = '2.3 rc5'; - /** * check_session * Action: Check if a session already exists, if not redirect to login.php @@ -1142,9 +1136,9 @@ } elseif ($CONF['encrypt'] == 'system') { - if (ereg ("\$1\$", $pw_db)) { + if (preg_match("/\\$1\\$/", $pw_db)) { $split_salt = preg_split ('/\$/', $pw_db); - $salt = $split_salt[2]; + $salt = "\$1\$${split_salt[2]}\$"; } else { if (strlen($pw_db) == 0) { @@ -1178,7 +1172,7 @@ elseif ($CONF['encrypt'] == 'authlib') { $flavor = $CONF['authlib_default_flavor']; $salt = substr(create_salt(), 0, 2); # courier-authlib supports only two-character salts - if(ereg('^{.*}', $pw_db)) { + if(preg_match('/^{.*}/', $pw_db)) { // we have a flavor in the db -> use it instead of default flavor $result = split('{|}', $pw_db, 3); $flavor = $result[1]; @@ -1191,8 +1185,10 @@ $password = '{' . $flavor . '}' . base64_encode(md5($pw, TRUE)); } elseif(stripos($flavor, 'crypt') === 0) { $password = '{' . $flavor . '}' . crypt($pw, $salt); + } elseif(stripos($flavor, 'SHA') === 0) { + $password = '{' . $flavor . '}' . base64_encode(sha1($pw, TRUE)); } else { - ... [truncated message content] |
From: <Seb...@us...> - 2009-08-21 07:50:37
|
Revision: 709 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=709&view=rev Author: Sebastian2009 Date: 2009-08-21 07:50:25 +0000 (Fri, 21 Aug 2009) Log Message: ----------- - get in sync with mainline. Modified Paths: -------------- branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl branches/postfixadmin-smarty/create-domain.php branches/postfixadmin-smarty/edit-vacation.php Modified: branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl =================================================================== --- branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl 2009-08-20 07:09:41 UTC (rev 708) +++ branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl 2009-08-21 07:50:25 UTC (rev 709) @@ -324,16 +324,19 @@ my $rv = $stm->rows; # Recipient has vacation - if ($rv == 1) { - $realemail = $email; - $logger->debug("Found '\$email'\ has vacation active"); - } else { - $logger->debug("Looking for alias records that \'$email\' resolves to with vacation turned on"); - $query = qq{SELECT goto FROM alias WHERE address=? AND (goto LIKE ? OR goto LIKE % OR goto LIKE ?)}; - $stm = $dbh->prepare($query) or panic_prepare($query); - $stm->execute($email,"$email,%","%,$email","%,$email,%") or panic_execute($query,"address='$email'"); - $rv = $stm->rows; + if ($rv == 1) { + $realemail = $email; + $logger->debug("Found '\$email'\ has vacation active"); + } else { + my $vemail = $email; + $vemail =~ s/\@/#/g; + $logger->debug("Looking for alias records that \'$email\' resolves to with vacation turned on"); + $query = qq{SELECT goto FROM alias WHERE address=? AND (goto LIKE ? OR goto LIKE ? OR goto LIKE ?)}; + $stm = $dbh->prepare($query) or panic_prepare($query); + $stm->execute($email,"$email,%","%,$email","%,$email,%") or panic_execute($query,"address='$email'"); + $rv = $stm->rows; + # Recipient is an alias, check if mailbox has vacation if ($rv == 1) { my @row = $stm->fetchrow_array; Modified: branches/postfixadmin-smarty/create-domain.php =================================================================== --- branches/postfixadmin-smarty/create-domain.php 2009-08-20 07:09:41 UTC (rev 708) +++ branches/postfixadmin-smarty/create-domain.php 2009-08-21 07:50:25 UTC (rev 709) @@ -117,7 +117,7 @@ $sqlBackupmx = db_get_boolean(false); } - $sql_query = "INSERT INTO $table_domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,created,modified) VALUES ('$fDomain','$fDescription',$fAliases,$fMailboxes,$fMaxquota,'$fTransport',$sqlBackupmx,NOW(),NOW())"; + $sql_query = "INSERT INTO $table_domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,created,modified) VALUES ('$fDomain','$fDescription',$fAliases,$fMailboxes,$fMaxquota,'$fTransport','$sqlBackupmx',NOW(),NOW())"; $result = db_query($sql_query); if ($result['rows'] != 1) { Modified: branches/postfixadmin-smarty/edit-vacation.php =================================================================== --- branches/postfixadmin-smarty/edit-vacation.php 2009-08-20 07:09:41 UTC (rev 708) +++ branches/postfixadmin-smarty/edit-vacation.php 2009-08-21 07:50:25 UTC (rev 709) @@ -122,7 +122,7 @@ { $db_false = db_get_boolean(false); // retain vacation message if possible - i.e disable vacation away-ness. - $result = db_query ("UPDATE $table_vacation SET active = $db_false WHERE email='$fUsername'"); + $result = db_query ("UPDATE $table_vacation SET active = '$db_false' WHERE email='$fUsername'"); $result = db_query("DELETE FROM $table_vacation_notification WHERE on_vacation='$fUsername'"); $result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Seb...@us...> - 2009-10-08 08:02:06
|
Revision: 724 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=724&view=rev Author: Sebastian2009 Date: 2009-10-08 08:01:54 +0000 (Thu, 08 Oct 2009) Log Message: ----------- - get in sync with mainline Modified Paths: -------------- branches/postfixadmin-smarty/DOCUMENTS/DOVECOT.txt branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl branches/postfixadmin-smarty/config.inc.php branches/postfixadmin-smarty/edit-vacation.php branches/postfixadmin-smarty/functions.inc.php branches/postfixadmin-smarty/model/AliasHandler.php branches/postfixadmin-smarty/model/UserHandler.php branches/postfixadmin-smarty/model/VacationHandler.php branches/postfixadmin-smarty/upgrade.php branches/postfixadmin-smarty/xmlrpc.php Modified: branches/postfixadmin-smarty/DOCUMENTS/DOVECOT.txt =================================================================== --- branches/postfixadmin-smarty/DOCUMENTS/DOVECOT.txt 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/DOCUMENTS/DOVECOT.txt 2009-10-08 08:01:54 UTC (rev 724) @@ -119,11 +119,11 @@ Create database in Mysql: create table quota ( - username varchar(255) not null, - path varchar(100) not null, + username varchar(255) /*!40100 CHARACTER SET latin1 */ not null, + path varchar(100) /*!40100 CHARACTER SET latin1 */ not null, current integer, primary key (username, path) -); +) TYPE=MyISAM ; Enable quota support in Postfixadmin config.inc.php: Modified: branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl =================================================================== --- branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl 2009-10-08 08:01:54 UTC (rev 724) @@ -215,7 +215,7 @@ if($syslog == 1) { my $syslog_appender = Log::Log4perl::Appender->new( 'Log::Dispatch::Syslog', - Facility => 'user', + Facility => 'mail', ); $logger->add_appender($syslog_appender); } @@ -284,7 +284,7 @@ my @row = $stm->fetchrow_array; my $int = $row[0]; if ($int > $interval) { - $logger->debug("[Interval elapsed, sending the message]: From: $from To:$to"); + $logger->info("[Interval elapsed, sending the message]: From: $from To:$to"); $query = qq{UPDATE vacation_notification SET notified_at=NOW() WHERE on_vacation=? AND notified=?}; $stm = $dbh->prepare($query); if (!$stm) { Modified: branches/postfixadmin-smarty/config.inc.php =================================================================== --- branches/postfixadmin-smarty/config.inc.php 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/config.inc.php 2009-10-08 08:01:54 UTC (rev 724) @@ -18,7 +18,7 @@ /***************************************************************** * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * The following line needs commenting out or removing before the + * You have to set $CONF['configured'] = true; before the * application will run! * Doing this implies you have changed this file as required. * i.e. configuring database etc; specifying setup.php password etc. @@ -51,6 +51,11 @@ $CONF['database_password'] = 'postfixadmin'; $CONF['database_name'] = 'postfix'; $CONF['database_prefix'] = ''; +// If you need to specify a different port for a MYSQL database connection, use e.g. +// $CONF['database_host'] = '172.30.33.66:3308'; +// If you need to specify a different port for POSTGRESQL database connection +// uncomment and change the following +// $CONF['database_port'] = '5432'; // Here, if you need, you can customize table names. $CONF['database_prefix'] = ''; @@ -374,6 +379,12 @@ $CONF['theme_logo'] = 'images/logo-default.png'; $CONF['theme_css'] = 'css/default.css'; +// XMLRPC Interface. +// This should be only of use if you wish to use e.g the +// Postfixadmin-Squirrelmail package +// change to boolean true to enable xmlrpc +$CONF['xmlrpc_enabled'] = false; + // If you want to keep most settings at default values and/or want to ensure // that future updates work without problems, you can use a separate config // file (config.local.php) instead of editing this file and override some Modified: branches/postfixadmin-smarty/edit-vacation.php =================================================================== --- branches/postfixadmin-smarty/edit-vacation.php 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/edit-vacation.php 2009-10-08 08:01:54 UTC (rev 724) @@ -166,7 +166,7 @@ // insert a duplicate $result = db_query("SELECT * FROM $table_vacation WHERE email = '$fUsername'"); if($result['rows'] == 1) { - $result = db_query("UPDATE $table_vacation SET active = $Active, subject = '$fSubject', body = '$fBody', created = NOW(), activefrom = '$tActiveFrom', activeuntil = '$tActiveUntil' WHERE email = '$fUsername'"); + $result = db_query("UPDATE $table_vacation SET active = '$Active', subject = '$fSubject', body = '$fBody', created = NOW(), activefrom = '$tActiveFrom', activeuntil = '$tActiveUntil' WHERE email = '$fUsername'"); } else { $result = db_query ("INSERT INTO $table_vacation (email,subject,body,domain,created,active, activefrom, activeuntil) VALUES ('$fUsername','$fSubject','$fBody','$fDomain',NOW(),$Active, '$tActiveFrom', '$tActiveUntil')"); Modified: branches/postfixadmin-smarty/functions.inc.php =================================================================== --- branches/postfixadmin-smarty/functions.inc.php 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/functions.inc.php 2009-10-08 08:01:54 UTC (rev 724) @@ -781,8 +781,8 @@ $query = "SELECT $table_domain.domain, $table_domain_admins.username FROM $table_domain LEFT JOIN $table_domain_admins ON $table_domain.domain=$table_domain_admins.domain WHERE $table_domain_admins.username='$username' - AND $table_domain.active=$active_sql - AND $table_domain.backupmx=$backupmx_sql + AND $table_domain.active='$active_sql' + AND $table_domain.backupmx='$backupmx_sql' ORDER BY $table_domain_admins.domain"; $result = db_query ($query); @@ -1462,7 +1462,10 @@ { if (function_exists ("pg_pconnect")) { - $connect_string = "host=" . $CONF['database_host'] . " dbname=" . $CONF['database_name'] . " user=" . $CONF['database_user'] . " password=" . $CONF['database_password']; + if(!isset($CONF['database_port'])) { + $CONF['database_port'] = '5432'; + } + $connect_string = "host=" . $CONF['database_host'] . " port=" . $CONF['database_port'] . " dbname=" . $CONF['database_name'] . " user=" . $CONF['database_user'] . " password=" . $CONF['database_password']; $link = @pg_pconnect ($connect_string) or $error_text .= ("<p />DEBUG INFORMATION:<br />Connect: failed to connect to database. $DEBUG_TEXT"); if ($link) pg_set_client_encoding($link, 'UNICODE'); } Modified: branches/postfixadmin-smarty/model/AliasHandler.php =================================================================== --- branches/postfixadmin-smarty/model/AliasHandler.php 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/model/AliasHandler.php 2009-10-08 08:01:54 UTC (rev 724) @@ -145,7 +145,7 @@ } if($this->hasAliasRecord() == false) { $true = db_get_boolean(True); - $sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), $true)"; + $sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), '$true')"; } else { $sql = "UPDATE $table_alias SET goto = '$goto', modified = NOW() WHERE address = '$username'"; Modified: branches/postfixadmin-smarty/model/UserHandler.php =================================================================== --- branches/postfixadmin-smarty/model/UserHandler.php 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/model/UserHandler.php 2009-10-08 08:01:54 UTC (rev 724) @@ -30,7 +30,7 @@ $table_mailbox = table_by_key('mailbox'); $active = db_get_boolean(True); - $result = db_query("SELECT * FROM $table_mailbox WHERE username='$username' AND active=$active"); + $result = db_query("SELECT * FROM $table_mailbox WHERE username='$username' AND active='$active'"); $new_db_password = escape_string(pacrypt($new_password)); $result = db_query ("UPDATE $table_mailbox SET password='$new_db_password',modified=NOW() WHERE username='$username'"); @@ -51,7 +51,7 @@ $table_mailbox = table_by_key('mailbox'); $active = db_get_boolean(True); - $query = "SELECT password FROM $table_mailbox WHERE username='$username' AND active=$active"; + $query = "SELECT password FROM $table_mailbox WHERE username='$username' AND active='$active'"; $result = db_query ($query); if ($result['rows'] == 1) Modified: branches/postfixadmin-smarty/model/VacationHandler.php =================================================================== --- branches/postfixadmin-smarty/model/VacationHandler.php 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/model/VacationHandler.php 2009-10-08 08:01:54 UTC (rev 724) @@ -29,7 +29,7 @@ // tidy up vacation table. $active = db_get_boolean(False); $username = escape_string($this->username); - $result = db_query("UPDATE $table_vacation SET active = $active WHERE email='$username'"); + $result = db_query("UPDATE $table_vacation SET active = '$active' WHERE email='$username'"); $result = db_query("DELETE FROM $table_vacation_notification WHERE on_vacation='$username'"); /* crap error handling; oh for exceptions... */ return true; @@ -95,12 +95,12 @@ $active = db_get_boolean(True); // check if the user has a vacation entry already, if so just update it if($result['rows'] == 1) { - $result = db_query("UPDATE $table_vacation SET active = $active, body = '$body', subject = '$subject', created = NOW() WHERE email = '$username'"); + $result = db_query("UPDATE $table_vacation SET active = '$active', body = '$body', subject = '$subject', created = NOW() WHERE email = '$username'"); } else { $tmp = preg_split ('/@/', $username); $domain = escape_string($tmp[1]); - $result = db_query ("INSERT INTO $table_vacation (email,subject,body,domain,created,active) VALUES ('$username','$subject','$body','$domain',NOW(),$active)"); + $result = db_query ("INSERT INTO $table_vacation (email,subject,body,domain,created,active) VALUES ('$username','$subject','$body','$domain',NOW(),'$active')"); } $ah = new AliasHandler($this->username); Modified: branches/postfixadmin-smarty/upgrade.php =================================================================== --- branches/postfixadmin-smarty/upgrade.php 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/upgrade.php 2009-10-08 08:01:54 UTC (rev 724) @@ -169,6 +169,8 @@ '{LATIN1}' => '/*!40100 CHARACTER SET latin1 */', '{IF_NOT_EXISTS}' => 'IF NOT EXISTS', '{RENAME_COLUMN}' => 'CHANGE COLUMN', + '{MYISAM}' => 'ENGINE=MyISAM', + '{INNODB}' => 'ENGINE=InnoDB', ); $sql = "$sql $attach_mysql"; @@ -179,10 +181,12 @@ '{UNSIGNED}' => '', '{FULLTEXT}' => '', '{BOOLEAN}' => 'BOOLEAN NOT NULL', - '{UTF-8}' => '', # TODO: UTF-8 is simply ignored. - '{LATIN1}' => '', # TODO: same for latin1 - '{IF_NOT_EXISTS}' => '', # TODO: does this work with PgSQL? NO + '{UTF-8}' => '', # UTF-8 is simply ignored. + '{LATIN1}' => '', # same for latin1 + '{IF_NOT_EXISTS}' => '', # does not work with PgSQL '{RENAME_COLUMN}' => 'ALTER COLUMN', # PgSQL : ALTER TABLE x RENAME x TO y + '{MYISAM}' => '', + '{INNODB}' => '', 'int(1)' => 'int', 'int(10)' => 'int', 'int(11)' => 'int', @@ -257,7 +261,7 @@ `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`) - ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Admins';"; + ) {MYISAM} COMMENT='Postfix Admin - Virtual Admins';"; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $alias ( @@ -268,7 +272,7 @@ `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`address`) - ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases'; "; + ) {MYISAM} COMMENT='Postfix Admin - Virtual Aliases'; "; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $domain ( @@ -284,7 +288,7 @@ `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`domain`) - ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains'; "; + ) {MYISAM} COMMENT='Postfix Admin - Virtual Domains'; "; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $domain_admins ( @@ -293,7 +297,7 @@ `created` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', KEY username (`username`) - ) TYPE=MyISAM COMMENT='Postfix Admin - Domain Admins';"; + ) {MYISAM} COMMENT='Postfix Admin - Domain Admins';"; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $log ( @@ -303,7 +307,7 @@ `action` varchar(255) NOT NULL default '', `data` varchar(255) NOT NULL default '', KEY timestamp (`timestamp`) - ) TYPE=MyISAM COMMENT='Postfix Admin - Log';"; + ) {MYISAM} COMMENT='Postfix Admin - Log';"; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $mailbox ( @@ -317,7 +321,7 @@ `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`) - ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes';"; + ) {MYISAM} COMMENT='Postfix Admin - Virtual Mailboxes';"; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $vacation ( @@ -330,7 +334,7 @@ active tinyint(4) NOT NULL default '1', PRIMARY KEY (email), KEY email (email) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8 TYPE=InnoDB COMMENT='Postfix Admin - Virtual Vacation' ;"; + ) {INNODB} DEFAULT CHARSET=utf8 COMMENT='Postfix Admin - Virtual Vacation' ;"; foreach($sql as $query) { db_query_parsed($query); @@ -600,7 +604,7 @@ COMMIT;" ); if(!_pgsql_object_exists('mailbox_username_active')) { - db_query_parsed('CREATE INDEX mailbox_username_active ON $table_mailbox(username,active)'); + db_query_parsed("CREATE INDEX mailbox_username_active ON $table_mailbox(username,active)"); } @@ -657,7 +661,7 @@ `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`), KEY username (`username`) -) TYPE=MyISAM DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Admins'; "); +) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Admins'; "); $result = db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} `" . table_by_key('alias') . "` ( @@ -669,7 +673,7 @@ `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`address`), KEY address (`address`) - ) TYPE=MyISAM DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Aliases'; + ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Aliases'; "); $result = db_query_parsed(" @@ -687,7 +691,7 @@ `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`domain`), KEY domain (`domain`) - ) TYPE=MyISAM DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Domains'; + ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Domains'; "); $result = db_query_parsed(" @@ -697,7 +701,7 @@ `created` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', KEY username (`username`) - ) TYPE=MyISAM DEFAULT {LATIN1} COMMENT='Postfix Admin - Domain Admins'; + ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Domain Admins'; "); $result = db_query_parsed(" @@ -708,7 +712,7 @@ `action` varchar(255) NOT NULL default '', `data` varchar(255) NOT NULL default '', KEY timestamp (`timestamp`) - ) TYPE=MyISAM DEFAULT {LATIN1} COMMENT='Postfix Admin - Log'; + ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Log'; "); $result = db_query_parsed(" @@ -724,7 +728,7 @@ `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`), KEY username (`username`) - ) TYPE=MyISAM DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Mailboxes'; + ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Mailboxes'; "); $result = db_query_parsed(" @@ -738,7 +742,7 @@ `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`email`), KEY email (`email`) - ) TYPE=MyISAM DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Vacation'; + ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Vacation'; "); } @@ -764,7 +768,7 @@ ALTER TABLE `$table_vacation` CHANGE `domain` `domain` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_vacation` CHANGE `active` `active` TINYINT( 1 ) NOT NULL DEFAULT '1' ALTER TABLE `$table_vacation` DEFAULT {LATIN1} - ALTER TABLE `$table_vacation` ENGINE = INNODB + ALTER TABLE `$table_vacation` {INNODB} ")); foreach ($all_sql as $sql) { @@ -813,7 +817,7 @@ CONSTRAINT `vacation_notification_pkey` FOREIGN KEY (`on_vacation`) REFERENCES $table_vacation(`email`) ON DELETE CASCADE ) - ENGINE=InnoDB TYPE=InnoDB + {INNODB} COMMENT='Postfix Admin - Virtual Vacation Notifications' "); @@ -917,7 +921,7 @@ PRIMARY KEY (`alias_domain`), KEY `active` (`active`), KEY `target_domain` (`target_domain`) - ) TYPE=MyISAM COMMENT='Postfix Admin - Domain Aliases' + ) {MYISAM} COMMENT='Postfix Admin - Domain Aliases' "); } Modified: branches/postfixadmin-smarty/xmlrpc.php =================================================================== --- branches/postfixadmin-smarty/xmlrpc.php 2009-10-06 21:48:59 UTC (rev 723) +++ branches/postfixadmin-smarty/xmlrpc.php 2009-10-08 08:01:54 UTC (rev 724) @@ -4,13 +4,13 @@ * * Usage example: * require_once('Zend/XmlRpc/Client.php'); - * $xmlrpc = new Zend_XmlRpc_Client('http://server/xmlrpc.php'); + * $xmlrpc = new Zend_XmlRpc_Client('https://server/xmlrpc.php'); * * $http_client = $xmlrpc->getHttpClient(); * $http_client->setCookieJar(); * * $login_object = $xmlrpc->getProxy('login'); - * $success = $login_object->login($username, $password); + * $success = $login_object->login($email_address, $password); * * if($success) { * echo "We're logged in"; @@ -22,7 +22,7 @@ * $alias = $xmlrpc->getProxy('alias'); * $vacation = $xmlrpc->getProxy('vacation'); * - * if($vacation->isEnabled()) { + * if($vacation->checkVacation()) { * echo "Vacation turned on for user"; * } * @@ -32,6 +32,10 @@ */ require_once(dirname(__FILE__) . '/common.php'); +if($CONF['xmlrpc_enabled'] == false) { + die("xmlrpc support disabled"); +} + require_once('Zend/XmlRpc/Server.php'); $server = new Zend_XmlRpc_Server(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Seb...@us...> - 2009-10-19 16:45:18
|
Revision: 732 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=732&view=rev Author: Sebastian2009 Date: 2009-10-19 16:45:08 +0000 (Mon, 19 Oct 2009) Log Message: ----------- - get in sync with trunk Modified Paths: -------------- branches/postfixadmin-smarty/DOCUMENTS/DOVECOT.txt branches/postfixadmin-smarty/config.inc.php branches/postfixadmin-smarty/functions.inc.php branches/postfixadmin-smarty/list-virtual.php branches/postfixadmin-smarty/templates/create-mailbox.tpl branches/postfixadmin-smarty/upgrade.php Modified: branches/postfixadmin-smarty/DOCUMENTS/DOVECOT.txt =================================================================== --- branches/postfixadmin-smarty/DOCUMENTS/DOVECOT.txt 2009-10-18 23:47:45 UTC (rev 731) +++ branches/postfixadmin-smarty/DOCUMENTS/DOVECOT.txt 2009-10-19 16:45:08 UTC (rev 732) @@ -118,15 +118,16 @@ Create database in Mysql: -create table quota ( - username varchar(255) /*!40100 CHARACTER SET latin1 */ not null, - path varchar(100) /*!40100 CHARACTER SET latin1 */ not null, - current integer, - primary key (username, path) -) TYPE=MyISAM ; +(This is automatically done by postfixadmin's setup.php) Enable quota support in Postfixadmin config.inc.php: $CONF['used_quotas'] = 'YES'; $CONF['quota'] = 'YES'; + +Note: The above text describes the configuration for dovecot 1.0 & 1.1 quota table format. + +If you use dovecot 1.2 or newer, +- use the 'quota2' table (also created by setup.php) +- set $CONF['new_quota_table'] = 'YES' Modified: branches/postfixadmin-smarty/config.inc.php =================================================================== --- branches/postfixadmin-smarty/config.inc.php 2009-10-18 23:47:45 UTC (rev 731) +++ branches/postfixadmin-smarty/config.inc.php 2009-10-19 16:45:08 UTC (rev 732) @@ -72,6 +72,7 @@ 'vacation' => 'vacation', 'vacation_notification' => 'vacation_notification', 'quota' => 'quota', + 'quota2' => 'quota2', ); // Site Admin @@ -359,8 +360,12 @@ // See: DOCUMENTATION/DOVECOT.txt // http://wiki.dovecot.org/Quota/Dict // -// $CONF['used_quotas'] = 'YES'; +$CONF['used_quotas'] = 'NO'; +// if you use dovecot >= 1.2, set this to yes. +// Note about dovecot config: table "quota" is for 1.0 & 1.1, table "quota2" is for dovecot 1.2 and newer +$CONF['new_quota_table'] = 'NO'; + // // Normally, the TCP port number does not have to be specified. // $CONF['create_mailbox_subdirs_hostport']=143; Modified: branches/postfixadmin-smarty/functions.inc.php =================================================================== --- branches/postfixadmin-smarty/functions.inc.php 2009-10-18 23:47:45 UTC (rev 731) +++ branches/postfixadmin-smarty/functions.inc.php 2009-10-19 16:45:08 UTC (rev 732) @@ -2353,4 +2353,5 @@ $table_vacation = table_by_key ('vacation'); $table_vacation_notification = table_by_key('vacation_notification'); $table_quota = table_by_key ('quota'); +$table_quota2 = table_by_key ('quota2'); /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ Modified: branches/postfixadmin-smarty/list-virtual.php =================================================================== --- branches/postfixadmin-smarty/list-virtual.php 2009-10-18 23:47:45 UTC (rev 731) +++ branches/postfixadmin-smarty/list-virtual.php 2009-10-19 16:45:08 UTC (rev 732) @@ -160,28 +160,57 @@ if ($CONF['vacation_control_admin'] == 'YES') { - if (boolconf('used_quotas')) - $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active, $table_quota.current FROM $table_mailbox - LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email - LEFT JOIN $table_quota ON $table_mailbox.username=$table_quota.username - WHERE $table_mailbox.domain='$fDomain' - ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; - // AND $table_quota.path='quota/storage' - - else - $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active FROM $table_mailbox - LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email - WHERE $table_mailbox.domain='$fDomain' ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; + if (boolconf('used_quotas')) + { + if (boolconf('new_quota_table')) + { + $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active, $table_quota2.bytes FROM $table_mailbox + LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email + LEFT JOIN $table_quota2 ON $table_mailbox.username=$table_quota2.username + WHERE $table_mailbox.domain='$fDomain' + ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; + } + else + { + $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active, $table_quota.current FROM $table_mailbox + LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email + LEFT JOIN $table_quota ON $table_mailbox.username=$table_quota.username + WHERE $table_mailbox.domain='$fDomain' AND + ( $table_quota.path='quota/storage' OR $table_quota.path IS NULL ) + ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; + } + } + else # $CONF[used_quotas] = NO + { + $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active FROM $table_mailbox + LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email + WHERE $table_mailbox.domain='$fDomain' ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; + } } -else +else # $CONF['vacation_control_admin'] == 'NO' { + if (boolconf('used_quotas')) + { + if (boolconf('new_quota_table')) + { + $query = "SELECT $table_mailbox.*, $table_quota2.bytes as current FROM $table_mailbox + LEFT JOIN $table_quota2 ON $table_mailbox.username=$table_quota2.username + WHERE $table_mailbox.domain='$fDomain' ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; + } + else + { + $query = "SELECT $table_mailbox.*, $table_quota.current FROM $table_mailbox + LEFT JOIN $table_quota ON $table_mailbox.username=$table_quota.username + WHERE $table_mailbox.domain='$fDomain' AND + ( $table_quota.path='quota/storage' OR $table_quota.path IS NULL ) + ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; + } + } + else # $CONF[used_quotas] = NO + { + $query = "SELECT * FROM $table_mailbox WHERE domain='$fDomain' ORDER BY username LIMIT $page_size OFFSET $fDisplay"; + } - $query = "SELECT * FROM $table_mailbox WHERE domain='$fDomain' ORDER BY username LIMIT $fDisplay, $page_size"; - if ('pgsql'==$CONF['database_type']) - { - $query = "SELECT *,extract(epoch from created) as uts_created,extract(epoch from modified) as uts_modified FROM $table_mailbox WHERE domain='$fDomain' ORDER BY username LIMIT $page_size OFFSET $fDisplay"; - } - } $result = db_query ($query); if ($result['rows'] > 0) Modified: branches/postfixadmin-smarty/templates/create-mailbox.tpl =================================================================== --- branches/postfixadmin-smarty/templates/create-mailbox.tpl 2009-10-18 23:47:45 UTC (rev 731) +++ branches/postfixadmin-smarty/templates/create-mailbox.tpl 2009-10-19 16:45:08 UTC (rev 732) @@ -42,7 +42,7 @@ </tr> <tr> <td>{$PALANG.pCreate_mailbox_mail}:</td> - <td><input class="flat" type="checkbox" name="fMail"{if $CONF.create_mailbox_subdirs}{else} checked="checked"{/if} /></td> + <td><input class="flat" type="checkbox" name="fMail" checked="checked" /></td> <td> </td> </tr> <tr> Modified: branches/postfixadmin-smarty/upgrade.php =================================================================== --- branches/postfixadmin-smarty/upgrade.php 2009-10-18 23:47:45 UTC (rev 731) +++ branches/postfixadmin-smarty/upgrade.php 2009-10-19 16:45:08 UTC (rev 732) @@ -171,6 +171,7 @@ '{RENAME_COLUMN}' => 'CHANGE COLUMN', '{MYISAM}' => 'ENGINE=MyISAM', '{INNODB}' => 'ENGINE=InnoDB', + '{BIGINT}' => 'bigint', ); $sql = "$sql $attach_mysql"; @@ -1137,3 +1138,94 @@ ) {MYISAM} COMMENT='Postfix Admin - User whitelist' "); } + +function upgrade_729() { + $table_quota = table_by_key('quota'); + $table_quota2 = table_by_key('quota2'); + + # table for dovecot v1.0 & 1.1 + db_query_parsed(" + CREATE TABLE {IF_NOT_EXISTS} $table_quota ( + username VARCHAR(255) {LATIN1} NOT NULL, + path VARCHAR(100) {LATIN1} NOT NULL, + current {BIGINT}, + PRIMARY KEY (username, path) + ) {MYISAM} ; + "); + + # table for dovecot >= 1.2 + db_query_parsed(" + CREATE TABLE {IF_NOT_EXISTS} $table_quota2 ( + username VARCHAR(100) {LATIN1} NOT NULL, + bytes {BIGINT} NOT NULL DEFAULT 0, + messages integer NOT NULL DEFAULT 0, + PRIMARY KEY (username) + ) {MYISAM} ; + "); +} + +function upgrade_730_pgsql() { + $table_quota = table_by_key('quota'); + $table_quota2 = table_by_key('quota2'); + + # trigger for dovecot v1.0 & 1.1 quota table + # taken from http://wiki.dovecot.org/Quota/Dict + db_query_parsed(" + CREATE OR REPLACE FUNCTION merge_quota() RETURNS TRIGGER AS \$merge_quota\$ + BEGIN + UPDATE $table_quota SET current = NEW.current + current WHERE username = NEW.username AND path = NEW.path; + IF found THEN + RETURN NULL; + ELSE + RETURN NEW; + END IF; + END; + \$merge_quota\$ LANGUAGE plpgsql; + "); + db_query_parsed(" + CREATE TRIGGER mergequota BEFORE INSERT ON $table_quota FOR EACH ROW EXECUTE PROCEDURE merge_quota(); + "); + + # trigger for dovecot >= 1.2 quota table + # taken from http://wiki.dovecot.org/Quota/Dict, table/trigger name changed to quota2 naming + db_query_parsed(" + CREATE OR REPLACE FUNCTION merge_quota2() RETURNS TRIGGER AS \$\$ + BEGIN + IF NEW.messages < 0 OR NEW.messages IS NULL THEN + -- ugly kludge: we came here from this function, really do try to insert + IF NEW.messages IS NULL THEN + NEW.messages = 0; + ELSE + NEW.messages = -NEW.messages; + END IF; + return NEW; + END IF; + + LOOP + UPDATE $table_quota2 SET bytes = bytes + NEW.bytes, + messages = messages + NEW.messages + WHERE username = NEW.username; + IF found THEN + RETURN NULL; + END IF; + + BEGIN + IF NEW.messages = 0 THEN + INSERT INTO $table_quota2 (bytes, messages, username) VALUES (NEW.bytes, NULL, NEW.username); + ELSE + INSERT INTO $table_quota2 (bytes, messages, username) VALUES (NEW.bytes, -NEW.messages, NEW.username); + END IF; + return NULL; + EXCEPTION WHEN unique_violation THEN + -- someone just inserted the record, update it + END; + END LOOP; + END; + \$\$ LANGUAGE plpgsql; +"); + + db_query_parsed(" + CREATE TRIGGER mergequota2 BEFORE INSERT ON $table_quota2 + FOR EACH ROW EXECUTE PROCEDURE merge_quota2(); + "); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Seb...@us...> - 2009-10-21 20:14:07
|
Revision: 735 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=735&view=rev Author: Sebastian2009 Date: 2009-10-21 20:13:56 +0000 (Wed, 21 Oct 2009) Log Message: ----------- - get in sync with mainline rev. 734 Modified Paths: -------------- branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl branches/postfixadmin-smarty/common.php branches/postfixadmin-smarty/setup.php Modified: branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl =================================================================== --- branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl 2009-10-21 08:00:07 UTC (rev 734) +++ branches/postfixadmin-smarty/VIRTUAL_VACATION/vacation.pl 2009-10-21 20:13:56 UTC (rev 735) @@ -17,7 +17,7 @@ # Slightly better logging which includes messageid # Avoid infinite loops with domain aliases # -# 2005-01-19 Troels Arvin <tr...@ar...> +# 2005-01-19 Troels Arvin <troels at arvin.dk> # PostgreSQL-version. # Normalized DB schema from one vacation table ("vacation") # to two ("vacation", "vacation_notification"). Uses @@ -27,18 +27,18 @@ # to try to avoid SQL injection. # International characters are now handled well. # -# 2005-01-21 Troels Arvin <tr...@ar...> +# 2005-01-21 Troels Arvin <troels at arvin.dk> # Uses the Email::Valid package to avoid sending notices # to obviously invalid addresses. # -# 2007-08-15 David Goodwin <da...@pa...> +# 2007-08-15 David Goodwin <david at palepurple.co.uk> # Use the Perl Mail::Sendmail module for sending mail # Check for headers that start with blank lines (patch from forum) # -# 2007-08-20 Martin Ambroz <am...@tr...> +# 2007-08-20 Martin Ambroz <amsys at trustica.cz> # Added initial Unicode support # -# 2008-05-09 Fabio Bonelli <fab...@li...> +# 2008-05-09 Fabio Bonelli <fabiobonelli at libero.it> # Properly handle failed queries to vacation_notification. # Fixed log reporting. # @@ -56,12 +56,13 @@ # Use Log4Perl # Added better testing (and -t option) # -# 2009-06-29 Stevan Bajic <st...@ba...> +# 2009-06-29 Stevan Bajic <stevan at bajic.ch> # Add Mail::Sender for SMTP auth + more flexibility # -# 2009-07-07 Stevan Bajic <st...@ba...> +# 2009-07-07 Stevan Bajic <stevan at bajic.ch> # Add better alias lookups # Check for more heades from Anti-Virus/Anti-Spam solutions +# # 2009-08-10 Sebastian <reg9009 at yahoo dot de> # Adjust SQL query for vacation timeframe. It is now possible to set from/until date for vacation message. # @@ -330,10 +331,11 @@ } else { my $vemail = $email; $vemail =~ s/\@/#/g; + $vemail = $vemail . "\@" . $vacation_domain; $logger->debug("Looking for alias records that \'$email\' resolves to with vacation turned on"); - $query = qq{SELECT goto FROM alias WHERE address=? AND (goto LIKE ? OR goto LIKE ? OR goto LIKE ?)}; + $query = qq{SELECT goto FROM alias WHERE address=? AND (goto LIKE ? OR goto LIKE ? OR goto LIKE ? OR goto = ?)}; $stm = $dbh->prepare($query) or panic_prepare($query); - $stm->execute($email,"$email,%","%,$email","%,$email,%") or panic_execute($query,"address='$email'"); + $stm->execute($email,"$vemail,%","%,$vemail","%,$vemail,%", "$vemail") or panic_execute($query,"address='$email'"); $rv = $stm->rows; Modified: branches/postfixadmin-smarty/common.php =================================================================== --- branches/postfixadmin-smarty/common.php 2009-10-21 08:00:07 UTC (rev 734) +++ branches/postfixadmin-smarty/common.php 2009-10-21 20:13:56 UTC (rev 735) @@ -17,10 +17,10 @@ * environment and ensures other functions are loaded. */ -if(!defined('POSTFIXADMIN')) { +if(!defined('POSTFIXADMIN')) { # already defined if called from setup.php session_start(); + define('POSTFIXADMIN', 1); # checked in included files } -define('POSTFIXADMIN', 1); # checked in included files $incpath = dirname(__FILE__); (ini_get('magic_quotes_gpc') ? ini_set('magic_quotes_runtime', '0') : '1'); Modified: branches/postfixadmin-smarty/setup.php =================================================================== --- branches/postfixadmin-smarty/setup.php 2009-10-21 08:00:07 UTC (rev 734) +++ branches/postfixadmin-smarty/setup.php 2009-10-21 20:13:56 UTC (rev 735) @@ -23,6 +23,8 @@ * Form POST \ GET Variables: -none- */ +define('POSTFIXADMIN', 1); # by defining it here, common.php will not start a session. + require_once('common.php'); $CONF['show_header_text'] = 'NO'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Seb...@us...> - 2009-10-26 16:20:23
|
Revision: 744 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=744&view=rev Author: Sebastian2009 Date: 2009-10-26 16:20:13 +0000 (Mon, 26 Oct 2009) Log Message: ----------- - sync with mainline, rev. 739 Modified Paths: -------------- branches/postfixadmin-smarty/CHANGELOG.TXT branches/postfixadmin-smarty/backup.php branches/postfixadmin-smarty/config.inc.php branches/postfixadmin-smarty/upgrade.php Modified: branches/postfixadmin-smarty/CHANGELOG.TXT =================================================================== --- branches/postfixadmin-smarty/CHANGELOG.TXT 2009-10-26 14:50:40 UTC (rev 743) +++ branches/postfixadmin-smarty/CHANGELOG.TXT 2009-10-26 16:20:13 UTC (rev 744) @@ -10,7 +10,35 @@ # Last update: # $Id$ +Version ***svn*** - 2009/10/24 - SVN r***** +-------------------------------------- + - automatically create quota tables for dovecot (both 1.0/1.1 and >= 1.2) + - list-virtual can now handle both table formats + - fixed upgrade.php for MySQL 6.0 compability + - changed vacation.pl syslog facility from "user" to "mail" + - added config option for postregsql database port + - added config option to enable/disable XMLRPC interface (default: off) + - Fix check/query for alias with enabled vacation in vacation.pl + - Fix db_get_boolean() to return t/f for postgresql, not true/false + - Fix missing quoting for boolean values in SQL queries at various places + - Allow SHA courier-authlib passwords + - various small bug fixes + - fixed SVN revision for 2.3rc7 in changelog (was r691, should be r694) + +Version 2.3rc7 - 2009/07/27 - SVN r694 +-------------------------------------- + + - Fix bug with confd-link.sh debian thing (breakage on Lenny with wwwconfig-common 0.1.2) + - Fix crypt() issue (see https://sourceforge.net/tracker/?func=detail&aid=2814820&group_id=191583&atid=937964 ) + +Version 2.3rc6 - 2009/07/20 - SVN r689 +-------------------------------------- + + - Updates to vacation.pl + - PHP 5.3 compatibility + - Easier dependencies for .debs - should work on Lenny/Ubuntu etc without issue now. + Version 2.3rc5 - 2009/05/20 - SVN r658 -------------------------------------- Modified: branches/postfixadmin-smarty/backup.php =================================================================== --- branches/postfixadmin-smarty/backup.php 2009-10-26 14:50:40 UTC (rev 743) +++ branches/postfixadmin-smarty/backup.php 2009-10-26 16:20:13 UTC (rev 744) @@ -86,6 +86,8 @@ 'fetchmail', 'log', 'mailbox', + 'quota', + 'quota2', 'vacation', 'vacation_notification' ); Modified: branches/postfixadmin-smarty/config.inc.php =================================================================== --- branches/postfixadmin-smarty/config.inc.php 2009-10-26 14:50:40 UTC (rev 743) +++ branches/postfixadmin-smarty/config.inc.php 2009-10-26 16:20:13 UTC (rev 744) @@ -100,6 +100,7 @@ // In what flavor should courier-authlib style passwords be enrypted? // md5 = {md5} + base64 encoded md5 hash // md5raw = {md5raw} + plain encoded md5 hash +// SHA = {SHA} + base64-encoded sha1 hash // crypt = {crypt} + Standard UNIX DES-enrypted with 2-character salt $CONF['authlib_default_flavor'] = 'md5raw'; Modified: branches/postfixadmin-smarty/upgrade.php =================================================================== --- branches/postfixadmin-smarty/upgrade.php 2009-10-26 14:50:40 UTC (rev 743) +++ branches/postfixadmin-smarty/upgrade.php 2009-10-26 16:20:13 UTC (rev 744) @@ -1167,6 +1167,8 @@ function upgrade_730_pgsql() { $table_quota = table_by_key('quota'); $table_quota2 = table_by_key('quota2'); + + db_query_parsed('CREATE LANGUAGE plpgsql', 1); /* will error if plpgsql is already installed */ # trigger for dovecot v1.0 & 1.1 quota table # taken from http://wiki.dovecot.org/Quota/Dict This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Seb...@us...> - 2009-11-03 12:29:02
|
Revision: 753 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=753&view=rev Author: Sebastian2009 Date: 2009-11-03 12:28:50 +0000 (Tue, 03 Nov 2009) Log Message: ----------- - sync with mainline rev. 752 ready to get merged into trunk. Modified Paths: -------------- branches/postfixadmin-smarty/edit-alias.php branches/postfixadmin-smarty/functions.inc.php branches/postfixadmin-smarty/languages/de.lang branches/postfixadmin-smarty/list-virtual.php branches/postfixadmin-smarty/templates/list-virtual_mailbox.tpl branches/postfixadmin-smarty/upgrade.php Modified: branches/postfixadmin-smarty/edit-alias.php =================================================================== --- branches/postfixadmin-smarty/edit-alias.php 2009-11-02 18:46:48 UTC (rev 752) +++ branches/postfixadmin-smarty/edit-alias.php 2009-11-03 12:28:50 UTC (rev 753) @@ -40,15 +40,10 @@ /* retrieve existing alias record for the user first... may be via GET or POST */ -if(isset($_GET['address']) && isset($_GET['domain'])) { - $fAddress = escape_string($_GET['address']); - $fDomain = escape_string($_GET['domain']); -} -elseif(isset($_POST['address']) && isset($_POST['domain'])) { - $fAddress = escape_string($_POST['address']); - $fDomain = escape_string($_POST['domain']); -} -else { +$fAddress = safepost('address', safeget('address')); # escaped below +$fDomain = escape_string(preg_replace("/.*@/", "", $fAddress)); +$fAddress = escape_string($fAddress); # escaped now +if ($fAddress == "") { die("Required parameters not present"); } @@ -89,7 +84,7 @@ } } else { - die("Invalid alias / domain combination"); + die("Invalid alias"); } if ($_SERVER['REQUEST_METHOD'] == "POST") Modified: branches/postfixadmin-smarty/functions.inc.php =================================================================== --- branches/postfixadmin-smarty/functions.inc.php 2009-11-02 18:46:48 UTC (rev 752) +++ branches/postfixadmin-smarty/functions.inc.php 2009-11-03 12:28:50 UTC (rev 753) @@ -1200,19 +1200,28 @@ $dovecotpw = "dovecotpw"; if (!empty($CONF['dovecotpw'])) $dovecotpw = $CONF['dovecotpw']; - // prevent showing plain password in process table - $prefix = "postfixadmin-"; - $tmpfile = tempnam('/tmp', $prefix); - $pipe = popen("'$dovecotpw' -s '$method' > '$tmpfile'", 'w'); # TODO: replace tempfile usage with proc_open call + # Use proc_open call to avoid safe_mode problems and to prevent showing plain password in process table + $spec = array( + 0 => array("pipe", "r"), // stdin + 1 => array("pipe", "w") // stdout + ); + $pipe = proc_open("$dovecotpw '-s' $method", $spec, $pipes); + if (!$pipe) { - unlink($tmpfile); + die("can't proc_open $dovecotpw"); } else { // use dovecot's stdin, it uses getpass() twice - fwrite($pipe, $pw . "\n", 1+strlen($pw)); usleep(1000); - fwrite($pipe, $pw . "\n", 1+strlen($pw)); - pclose($pipe); - $password = file_get_contents($tmpfile); + // Write pass in pipe stdin + fwrite($pipes[0], $pw . "\n", 1+strlen($pw)); usleep(1000); + fwrite($pipes[0], $pw . "\n", 1+strlen($pw)); + fclose($pipes[0]); + + // Read hash from pipe stdout + $password = fread($pipes[1], "200"); + fclose($pipes[1]); + proc_close($pipe); + if ( !preg_match('/^\{' . $method . '\}/', $password)) { die("can't encrypt password with dovecotpw"); } $password = trim(str_replace('{' . $method . '}', '', $password)); unlink($tmpfile); @@ -1757,8 +1766,17 @@ } } +/** + * db_in_clause + * Action: builds and returns the "field in(x, y)" clause for database queries + * Call: db_in_clause (string field, array values) + */ +function db_in_clause($field, $values) { + return " $field IN ('" + . implode("','",escape_string(array_values($values))) + . "') "; +} - // // table_by_key // Action: Return table name for given key Modified: branches/postfixadmin-smarty/languages/de.lang =================================================================== --- branches/postfixadmin-smarty/languages/de.lang 2009-11-02 18:46:48 UTC (rev 752) +++ branches/postfixadmin-smarty/languages/de.lang 2009-11-03 12:28:50 UTC (rev 753) @@ -166,7 +166,7 @@ $PALANG['pEdit_mailbox_quota_text_error'] = 'MB<br /><span class="error_msg">Das angegebene Quota ist zu hoch!</span>'; $PALANG['pEdit_mailbox_domain_error'] = '<span class="error_msg">Diese Domain gehört nicht Ihnen: '; $PALANG['pEdit_mailbox_button'] = 'Mailbox editieren'; -$PALANG['pEdit_mailbox_result_error'] = '<span class="error_msg">Unmöglich das Passwort zu ändern!</span>'; +$PALANG['pEdit_mailbox_result_error'] = '<span class="error_msg">Mailbox kann nicht geändert werden!</span>'; $PALANG['pPassword_welcome'] = 'Ändern Sie Ihr Login-Passwort.'; $PALANG['pPassword_admin'] = 'Login'; Modified: branches/postfixadmin-smarty/list-virtual.php =================================================================== --- branches/postfixadmin-smarty/list-virtual.php 2009-11-02 18:46:48 UTC (rev 752) +++ branches/postfixadmin-smarty/list-virtual.php 2009-11-03 12:28:50 UTC (rev 753) @@ -53,11 +53,13 @@ { if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']); if (isset ($_GET['limit'])) $fDisplay = intval ($_GET['limit']); + $search = escape_string(safeget('search')); } else { if (isset ($_POST['fDomain'])) $fDomain = escape_string ($_POST['fDomain']); if (isset ($_POST['limit'])) $fDisplay = intval ($_POST['limit']); + $search = escape_string(safepost('search')); } // store fDomain in $_SESSION so after adding/editing aliases/mailboxes we can @@ -69,6 +71,7 @@ if (count($list_domains) == 0) { # die("no domains"); header("Location: list-domain.php"); # no domains (for this admin at least) - redirect to domain list + exit; } if ((is_array ($list_domains) and sizeof ($list_domains) > 0)) if (empty ($fDomain)) $fDomain = $list_domains[0]; @@ -79,6 +82,12 @@ exit(0); } +# +# alias domain +# + +# TODO: add search support for alias domains + if (boolconf('alias_domain')) { # Alias-Domains # first try to get a list of other domains pointing @@ -124,23 +133,37 @@ } } +# +# aliases +# + +if ($search == "") { + $sql_domain = " $table_alias.domain='$fDomain' "; + $sql_where = ""; +} else { + $sql_domain = db_in_clause("$table_alias.domain", $list_domains); + $sql_where = " AND ( address LIKE '%$search%' OR goto LIKE '%$search%' ) "; +} + $query = "SELECT $table_alias.address, $table_alias.goto, $table_alias.modified, $table_alias.active FROM $table_alias LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username - WHERE ($table_alias.domain='$fDomain' AND $table_mailbox.maildir IS NULL) + WHERE ($sql_domain AND $table_mailbox.maildir IS NULL $sql_where) ORDER BY $table_alias.address LIMIT $fDisplay, $page_size"; if ('pgsql'==$CONF['database_type']) { + # TODO: is the different query for pgsql really needed? The mailbox query below also works with both... $query = "SELECT address, goto, extract(epoch from modified) as modified, active FROM $table_alias - WHERE domain='$fDomain' AND NOT EXISTS(SELECT 1 FROM $table_mailbox WHERE username=$table_alias.address) + WHERE $sql_domain AND NOT EXISTS(SELECT 1 FROM $table_mailbox WHERE username=$table_alias.address $sql_where) ORDER BY address LIMIT $page_size OFFSET $fDisplay"; } + $result = db_query ($query); if ($result['rows'] > 0) { @@ -158,65 +181,74 @@ } } -if ($CONF['vacation_control_admin'] == 'YES') -{ - if (boolconf('used_quotas')) - { - if (boolconf('new_quota_table')) - { - $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active, $table_quota2.bytes FROM $table_mailbox - LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email - LEFT JOIN $table_quota2 ON $table_mailbox.username=$table_quota2.username - WHERE $table_mailbox.domain='$fDomain' - ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; - } - else - { - $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active, $table_quota.current FROM $table_mailbox - LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email - LEFT JOIN $table_quota ON $table_mailbox.username=$table_quota.username - WHERE $table_mailbox.domain='$fDomain' AND - ( $table_quota.path='quota/storage' OR $table_quota.path IS NULL ) - ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; - } - } - else # $CONF[used_quotas] = NO - { - $query = "SELECT $table_mailbox.*, $table_vacation.active AS v_active FROM $table_mailbox - LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email - WHERE $table_mailbox.domain='$fDomain' ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; - } + +# +# mailboxes +# + +$display_mailbox_aliases = boolconf('special_alias_control'); # TODO: is this condition correct? - I'm slightly confused with alias_control, alias_control_admin and special_alias_control + +# build the sql query +$sql_select = " SELECT $table_mailbox.* "; +$sql_from = " FROM $table_mailbox "; +$sql_join = ""; +$sql_where = " WHERE 1 "; +$sql_order = " ORDER BY $table_mailbox.username "; +$sql_limit = " LIMIT $page_size OFFSET $fDisplay"; + +if ($search == "") { + $sql_where .= " AND $table_mailbox.domain='$fDomain' "; +} else { + $sql_where .= " AND " . db_in_clause("$table_mailbox.domain", $list_domains) . " "; + $sql_where .= " AND ( $table_mailbox.username LIKE '%$search%' OR $table_mailbox.name LIKE '%$search%' "; + if ($display_mailbox_aliases) { + $sql_where .= " OR $table_alias.goto LIKE '%$search%' "; + } + $sql_where .= " ) "; # $search is already escaped } -else # $CONF['vacation_control_admin'] == 'NO' -{ - if (boolconf('used_quotas')) - { - if (boolconf('new_quota_table')) - { - $query = "SELECT $table_mailbox.*, $table_quota2.bytes as current FROM $table_mailbox - LEFT JOIN $table_quota2 ON $table_mailbox.username=$table_quota2.username - WHERE $table_mailbox.domain='$fDomain' ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; - } - else - { - $query = "SELECT $table_mailbox.*, $table_quota.current FROM $table_mailbox - LEFT JOIN $table_quota ON $table_mailbox.username=$table_quota.username - WHERE $table_mailbox.domain='$fDomain' AND - ( $table_quota.path='quota/storage' OR $table_quota.path IS NULL ) - ORDER BY $table_mailbox.username LIMIT $page_size OFFSET $fDisplay"; - } - } - else # $CONF[used_quotas] = NO - { - $query = "SELECT * FROM $table_mailbox WHERE domain='$fDomain' ORDER BY username LIMIT $page_size OFFSET $fDisplay"; - } +if ($display_mailbox_aliases) { + $sql_select .= ", $table_alias.goto "; + $sql_join .= " LEFT JOIN $table_alias ON $table_mailbox.username=$table_alias.address "; +} +if (boolconf('vacation_control_admin')) { + $sql_select .= ", $table_vacation.active AS v_active "; + $sql_join .= " LEFT JOIN $table_vacation ON $table_mailbox.username=$table_vacation.email "; } + +if (boolconf('used_quotas') && boolconf('new_quota_table')) { + $sql_select .= ", $table_quota2.bytes as current "; + $sql_join .= " LEFT JOIN $table_quota2 ON $table_mailbox.username=$table_quota2.username "; +} + +if (boolconf('used_quotas') && ( ! boolconf('new_quota_table') ) ) { + $sql_select .= ", $table_quota.current "; + $sql_join .= " LEFT JOIN $table_quota ON $table_mailbox.username=$table_quota.username "; + $sql_where .= " AND ( $table_quota.path='quota/storage' OR $table_quota.path IS NULL ) "; +} + +$query = "$sql_select\n$sql_from\n$sql_join\n$sql_where\n$sql_order\n$sql_limit"; + $result = db_query ($query); if ($result['rows'] > 0) { while ($row = db_array ($result['result'])) { + if ($display_mailbox_aliases) { + $goto_split = split(",", $row['goto']); + $row['goto_mailbox'] = 0; + $row['goto_other'] = array(); + + foreach ($goto_split as $goto_single) { + if ($goto_single == $row['username']) { # delivers to mailbox + $row['goto_mailbox'] = 1; + } elseif (boolconf('vacation') && strstr($goto_single, '@' . $CONF['vacation_domain']) ) { # vacation alias - TODO: check for full vacation alias + # skip the vacation alias, vacation status is detected otherwise + } else { # forwarding to other alias + $row['goto_other'][] = $goto_single; + } + } + } if ('pgsql'==$CONF['database_type']) { // XXX @@ -235,6 +267,7 @@ $tCanAddAlias = false; $tCanAddMailbox = false; +# TODO: needs reworking for $search... $limit = get_domain_properties($fDomain); if (isset ($limit)) { if ($fDisplay >= $page_size) { @@ -418,6 +451,7 @@ $smarty->assign ('boolconf_used_quotas', boolconf('used_quotas')); $smarty->assign ('divide_quota', $divide_quota); $smarty->assign ('tCanAddMailbox', $tCanAddMailbox); +$smarty->assign ('display_mailbox_aliases', $display_mailbox_aliases); if (isset ($_GET ['tab'])) $_SESSION ['tab'] = $_GET ['tab']; //if (empty ($_GET ['tab'])) Modified: branches/postfixadmin-smarty/templates/list-virtual_mailbox.tpl =================================================================== --- branches/postfixadmin-smarty/templates/list-virtual_mailbox.tpl 2009-11-02 18:46:48 UTC (rev 752) +++ branches/postfixadmin-smarty/templates/list-virtual_mailbox.tpl 2009-11-03 12:28:50 UTC (rev 753) @@ -1,6 +1,9 @@ {#tr_header#} {if $CONF.show_status===YES}<td></td>{/if} <td>{$PALANG.pOverview_mailbox_username}</td> + {if $display_mailbox_aliases==true} + <td>{$PALANG.pOverview_alias_goto}</td> + {/if} <td>{$PALANG.pOverview_mailbox_name}</td> {if $CONF.quota===YES}<td>{$PALANG.pOverview_mailbox_quota}</td>{/if} <td>{$PALANG.pOverview_mailbox_modified}</td> @@ -14,6 +17,18 @@ <td>{$gen_show_status_mailbox[$i]}</td> {/if} <td>{$item.username}</td> + {if $display_mailbox_aliases==true} + <td> + {foreach from=$item.goto_other item=item2 key=j} + {if $item.goto_mailbox == 1} + Mailbox<br/> + {else} + Forward only<br/> + {/if} + {$item2}<br/> + {/foreach} + <td> + {/if} <td>{$item.name}</td> {if $CONF.quota===YES} <td> Modified: branches/postfixadmin-smarty/upgrade.php =================================================================== --- branches/postfixadmin-smarty/upgrade.php 2009-11-02 18:46:48 UTC (rev 752) +++ branches/postfixadmin-smarty/upgrade.php 2009-11-03 12:28:50 UTC (rev 753) @@ -862,7 +862,7 @@ extra_options text, returned_text text, mda varchar(255) not null default '', - date timestamp(14), + date timestamp, primary key(id) ); "); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Seb...@us...> - 2009-11-03 19:52:18
|
Revision: 755 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=755&view=rev Author: Sebastian2009 Date: 2009-11-03 19:52:04 +0000 (Tue, 03 Nov 2009) Log Message: ----------- - prepare for commit. raised version to 2.4 develop Modified Paths: -------------- branches/postfixadmin-smarty/DOCUMENTS/POSTFIX_CONF.txt branches/postfixadmin-smarty/functions.inc.php Modified: branches/postfixadmin-smarty/DOCUMENTS/POSTFIX_CONF.txt =================================================================== --- branches/postfixadmin-smarty/DOCUMENTS/POSTFIX_CONF.txt 2009-11-03 19:39:47 UTC (rev 754) +++ branches/postfixadmin-smarty/DOCUMENTS/POSTFIX_CONF.txt 2009-11-03 19:52:04 UTC (rev 755) @@ -70,7 +70,7 @@ Contents of the files These are examples only, you will likely have to and want to make some -cumtomizations. You will also want to consider the config.inc.php +customizations. You will also want to consider the config.inc.php settings for domain_path and domain_in_mailbox. These examples use values of domain_path=YES and domain_in_mailbox=NO Modified: branches/postfixadmin-smarty/functions.inc.php =================================================================== --- branches/postfixadmin-smarty/functions.inc.php 2009-11-03 19:39:47 UTC (rev 754) +++ branches/postfixadmin-smarty/functions.inc.php 2009-11-03 19:52:04 UTC (rev 755) @@ -16,7 +16,7 @@ * Contains re-usable code. */ -$version = '2.3 rc7'; +$version = '2.4 develop'; /** * check_session This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |