X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Foptions_identities.php;h=6467a0f2d6d2d117996a03ca787ddd1dce7eb1db;hp=12cf4de78ba64f5b27c57c95aa0cc05b360e31dc;hb=bd3ebe3f8f07fd1b4294a30ef0c09a641eea1e77;hpb=6fd953618853477f6ffe569ce3c9733ca9f9c2d0 diff --git a/src/options_identities.php b/src/options_identities.php index 12cf4de7..6467a0f2 100644 --- a/src/options_identities.php +++ b/src/options_identities.php @@ -3,357 +3,237 @@ /** * options_identities.php * - * Copyright (c) 1999-2004 The SquirrelMail Project Team - * Licensed under the GNU GPL. For full terms see the file COPYING. - * * Display Identities Options * + * @copyright 1999-2017 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail + * @subpackage prefs + * @since 1.1.3 */ +/** This is the options_identities page */ +define('PAGE_NAME', 'options_identities'); + /** - * Path for SquirrelMail required files. - * @ignore + * Include the SquirrelMail initialization file. */ -define('SM_PATH','../'); +require('../include/init.php'); /* SquirrelMail required files. */ -require_once(SM_PATH . 'include/validate.php'); -require_once(SM_PATH . 'functions/global.php'); -require_once(SM_PATH . 'functions/display_messages.php'); -require_once(SM_PATH . 'functions/html.php'); - -/* POST data var names are dynamic because - of the possible multiple idents so lets get - them all - FIXME! This circumvents the benefits of rg=0 -*/ -if (!empty($_POST)) { - extract($_POST); +require_once(SM_PATH . 'functions/identity.php'); +require_once(SM_PATH . 'functions/forms.php'); + +/* make sure that page is not available when $edit_identity is false */ +if (!$edit_identity) { + error_box(_("Editing identities is disabled.")); + $oTemplate->display('footer.tpl'); + die(); } -/* got 'em all */ - if (isset($return)) { - SaveUpdateFunction(); - header('Location: '.get_location().'/options_personal.php'); - exit(); - } - - displayPageHeader($color, 'None'); - - $Info = do_hook('options_identities_process', 0); - if ($Info[1]) { - SaveUpdateFunction(); - } - - if (CheckAndDoDefault() || CheckAndDoPromote()) { - SaveUpdateFunction(); - } - if (isset($update) || CheckForDelete()) { - SaveUpdateFunction(); - } - - do_hook('options_identities_top'); - LoadInfo($full_name, $email_address, $reply_to, $signature, ''); - $td_str = ''; - $td_str .= '

'; - $td_str .= ShowTableInfo($full_name, $email_address, $reply_to, $signature, ''); - - $num = 1; - while (LoadInfo($full_name, $email_address, $reply_to, $signature, $num)) { - $td_str .= html_tag( 'tr', - html_tag( 'th', sprintf (_("Alternate Identity %d"), $num), 'center', '', 'colspan="2"' ) , - '', $color[9]); - $td_str .= ShowTableInfo($full_name, $email_address, $reply_to, $signature, $num); - $num ++; - } - - echo '
' . - html_tag( 'table', "\n" . - html_tag( 'tr', "\n" . - html_tag( 'td', "\n" . - ''. _("Options") . ' - ' . _("Advanced Identities") .'
' . - html_tag( 'table', "\n" . - html_tag( 'tr', "\n" . - html_tag( 'td', "\n" . - html_tag( 'table', "\n" . - html_tag( 'tr', "\n" . - html_tag( 'th', _("Default Identity"), 'center', '', 'colspan="2"' ) , - '', $color[9]) . "\n" . - $td_str . "\n" . - html_tag( 'tr', - html_tag( 'th', _("Add a New Identity") . ShowTableInfo('', '', '', '', $num), 'center', '', 'colspan="2"' ) , - '', $color[9]) , - '', '', 'width="80%" cellpadding="2" cellspacing="0" border="0"' ) , - 'center', $color[4] ) - ) , - '', '', 'width="100%" border="0" cellpadding="1" cellspacing="1"' ) , - 'center', $color[0] ) - ) , - 'center', '', 'width="95%" border="0" cellpadding="2" cellspacing="0"' ) . - - ''; - - function SaveUpdateFunction() { - global $username, $data_dir, $full_name, $email_address, $reply_to, $signature; - - $i = 1; - $fakeI = 1; - $name = 'form_for_' . $i; - global $$name; - while (isset($$name)) - { - $name = 'delete_' . $i; - global $$name; - if (isset($$name)) { - $fakeI --; - } else { - do_hook('options_identities_renumber', $i, $fakeI); - $filled = 0; - - $name = 'full_name' . $i; - global $$name; - if ($$name != '') - $filled ++; - setPref($data_dir, $username, 'full_name' . $fakeI, $$name); - - $name = 'email_address' . $i; - global $$name; - if ($$name != '') - $filled ++; - setPref($data_dir, $username, 'email_address' . $fakeI, $$name); - - $name = 'reply_to' . $i; - global $$name; - if ($$name != '') - $filled ++; - setPref($data_dir, $username, 'reply_to' . $fakeI, $$name); - - $name = 'signature' . $i; - global $$name; - if ($$name != '') - $filled ++; - setSig($data_dir, $username, $fakeI, $$name); - - if ($filled == 0) - $fakeI --; - } - - $fakeI ++; - $i ++; - $name = 'form_for_' . $i; - global $$name; - } +if (!sqgetGlobalVar('identities', $identities, SQ_SESSION)) { + $identities = get_identities(); +} +sqgetGlobalVar('newidentities', $newidentities, SQ_POST); +sqgetGlobalVar('smaction', $smaction, SQ_POST); +sqgetGlobalVar('return', $return, SQ_POST); +sqgetGlobalVar('smtoken', $submitted_token, SQ_POST, ''); - setPref($data_dir, $username, 'identities', $fakeI); +// First lets see if there are any actions to perform // +if (!empty($smaction) && is_array($smaction)) { - while ($fakeI != $i) - { - removePref($data_dir, $username, 'full_name' . $fakeI); - removePref($data_dir, $username, 'email_address' . $fakeI); - removePref($data_dir, $username, 'reply_to' . $fakeI); - setSig($data_dir, $username, $fakeI, ""); - $fakeI ++; - } + // first do a security check + sm_validate_security_token($submitted_token, -1, TRUE); - setPref($data_dir, $username, 'full_name', $full_name); - setPref($data_dir, $username, 'email_address', $email_address); - setPref($data_dir, $username, 'reply_to', $reply_to); - setSig($data_dir, $username, "g", $signature); - - } + $doaction = ''; + $identid = 0; - function CheckAndDoDefault() { - global $username, $data_dir, $full_name, $email_address, $reply_to, $signature; - - $i = 1; - $name = 'form_for_' . $i; - global $$name; - while (isset($$name)) - { - $name = 'make_default_' . $i; - global $$name; - if (isset($$name)) { - do_hook('options_identities_renumber', $i, 'default'); - global $full_name, $email_address, $reply_to, $signature; - - $name = 'full_name' . $i; - global $$name; - $temp = $full_name; - $full_name = $$name; - $$name = $temp; - - $name = 'email_address' . $i; - global $$name; - $temp = $email_address; - $email_address = $$name; - $$name = $temp; - - $name = 'reply_to' . $i; - global $$name; - $temp = $reply_to; - $reply_to = $$name; - $$name = $temp; - - $name = 'signature' . $i; - global $$name; - $temp = $signature; - $signature = $$name; - $$name = $temp; - - - return true; - } - - $i ++; - $name = 'form_for_' . $i; - global $$name; - } - return FALSE; - } + foreach($smaction as $action=>$row) { + // we only need to extract the action and the identity we are + // altering - function CheckForDelete() { - global $username, $data_dir, $full_name, $email_address, $reply_to, $signature; - - $i = 1; - $name = 'form_for_' . $i; - global $$name; - while (isset($$name)) - { - $name = 'delete_' . $i; - global $$name; - if (isset($$name)) { - return true; - } - - $i ++; - $name = 'form_for_' . $i; - global $$name; + foreach($row as $iKey=>$data) { + $identid = $iKey; } - return false; + + $doaction = $action; } - function CheckAndDoPromote() { - global $username, $data_dir, $full_name, $email_address, $reply_to; - - $i = 1; - $name = 'form_for_' . $i; - global $$name; - while (isset($$name)) { - $name = 'promote_' . $i; - global $$name; - if (isset($$name) && $i > 1) { - do_hook('options_identities_renumber', $i, $i - 1); - - $nameA = 'full_name' . $i; - $nameB = 'full_name' . ($i - 1); - global $$nameA, $$nameB; - $temp = $$nameA; - $$nameA = $$nameB; - $$nameB = $temp; - - $nameA = 'email_address' . $i; - $nameB = 'email_address' . ($i - 1); - global $$nameA, $$nameB; - $temp = $$nameA; - $$nameA = $$nameB; - $$nameB = $temp; - - $nameA = 'reply_to' . $i; - $nameB = 'reply_to' . ($i - 1); - global $$nameA, $$nameB; - $temp = $$nameA; - $$nameA = $$nameB; - $$nameB = $temp; - - $nameA = 'signature' . $i; - $nameB = 'signature' . ($i - 1); - global $$nameA, $$nameB; - $temp = $$nameA; - $$nameA = $$nameB; - $$nameB = $temp; - - return true; - } - - $i ++; - $name = 'form_for_' . $i; - global $$name; - } - return false; + $identities = sqfixidentities( $newidentities , $identid , $action ); + save_identities($identities); +} + +if (!empty($return)) { + header('Location: ' . get_location() . '/options_personal.php'); + exit; +} + +displayPageHeader($color); + +/* since 1.1.3 */ +do_hook('options_identities_top', $null); + +$i = array(); +foreach ($identities as $key=>$ident) { + $a = array(); + $a['Title'] = $key==0 ? _("Default Identity") : sprintf(_("Alternate Identity %d"), $key); + $a['New'] = false; + $a['Default'] = $key==0; + $a['FullName'] = sm_encode_html_special_chars($ident['full_name']); + $a['Email'] = sm_encode_html_special_chars($ident['email_address']); + $a['ReplyTo'] = sm_encode_html_special_chars($ident['reply_to']); + $a['Signature'] = sm_encode_html_special_chars($ident['signature']); + $i[$key] = $a; +} + +$a = array(); +$a['Title'] = _("Add New Identity"); +$a['New'] = true; +$a['Default'] = false; +$a['FullName'] = ''; +$a['Email'] = ''; +$a['ReplyTo'] = ''; +$a['Signature'] = ''; +$i[count($i)] = $a; + +//FIXME: NO HTML IN THE CORE +echo '' . "\n" + . addHidden('smtoken', sm_generate_security_token()) . "\n"; + +$oTemplate->assign('identities', $i); +$oTemplate->display('options_advidentity_list.tpl'); + +//FIXME: NO HTML IN THE CORE +echo "
\n"; + +$oTemplate->display('footer.tpl'); + +/** + * The functions below should not be needed with the additions of templates, + * however they will remain in case plugins use them. + */ + +/** + * Returns html formated identity form fields + * + * Contains options_identities_buttons and options_identities_table hooks. + * Before 1.4.5/1.5.1 hooks were placed in ShowTableInfo() function. + * In 1.1.3-1.4.1 they were called in do_hook function with two or + * three arguments. Since 1.4.1 hooks are called in concat_hook_function. + * Arguments are moved to array. + * + * options_identities_buttons hook uses array with two keys. First array key is + * boolean variable used to indicate empty identity field. Second array key + * is integer variable used to indicate identity number + * + * options_identities_table hook uses array with three keys. First array key is + * a string containing background color style CSS (1.4.1-1.4.4/1.5.0 uses only + * html color code). Second array key is boolean variable used to indicate empty + * identity field. Third array key is integer variable used to indicate identity + * number + * @param string $title Name displayed in header row + * @param array $identity Identity information + * @param integer $id identity ID + * @return string html formatted table rows with form fields for identity management + * @since 1.5.1 and 1.4.5 (was called ShowTableInfo() in 1.1.3-1.4.4 and 1.5.0) + */ +function ShowIdentityInfo($title, $identity, $id ) { + global $color; + + if (empty($identity['full_name']) && empty($identity['email_address']) && empty($identity['reply_to']) && empty($identity['signature'])) { + $bg = ''; + $empty = true; + } else { + $bg = ' style="background-color:' . $color[0] . ';"'; + $empty = false; } - function LoadInfo(&$n, &$e, &$r, &$s, $post) { - global $username, $data_dir; + $name = 'newidentities[%d][%s]'; + + + $return_str = ''; + +//FIXME: NO HTML IN THE CORE + $return_str .= '' . "\n"; + $return_str .= ' ' . $title . ' '. "\n"; + $return_str .= '' . "\n"; + $return_str .= sti_input( _("Full Name") , sprintf($name, $id, 'full_name'), $identity['full_name'], $bg); + $return_str .= sti_input( _("E-Mail Address") , sprintf($name, $id, 'email_address'), $identity['email_address'], $bg); + $return_str .= sti_input( _("Reply To"), sprintf($name, $id, 'reply_to'), $identity['reply_to'], $bg); + $return_str .= sti_textarea( _("Signature"), sprintf($name, $id, 'signature'), $identity['signature'], $bg); + $temp = array(&$bg, &$empty, &$id); + $return_str .= concat_hook_function('options_identities_table', $temp); + $return_str .= ' ' . "\n"; + $return_str .= '   ' . "\n"; + $return_str .= ' ' . "\n"; + $return_str .= ' ' . "\n"; + + if (!$empty && $id > 0) { + $return_str .= ' ' . "\n"; + $return_str .= ' ' . "\n"; - $n = getPref($data_dir, $username, 'full_name' . $post); - $e = getPref($data_dir, $username, 'email_address' . $post); - $r = getPref($data_dir, $username, 'reply_to' . $post); - if ($post == '') - $post = 'g'; - $s = getSig($data_dir,$username,$post); + if ($id > 1) { + $return_str .= ' ' . "\n"; + } - if ($n != '' || $e != '' || $r != '' || $s != '') - return true; } -function sti_input( $title, $hd, $data, $post, $bg ) { - $return_val = html_tag( 'tr', - html_tag( 'td', $title . ':', 'right', '', 'nowrap' ) . - html_tag( 'td', '' , 'left' ) , - '', $bg ); - return ($return_val); + $temp = array(&$empty, &$id); + $return_str .= concat_hook_function('options_identities_buttons', $temp); + $return_str .= ' ' . "\n"; + $return_str .= '' . "\n"; + $return_str .= '' . "\n"; + $return_str .= '   ' . "\n"; + $return_str .= ''; + + return $return_str; + } -function sti_textarea( $title, $hd, $data, $post, $bg ) { - $return_val = html_tag( 'tr', - html_tag( 'td', $title . ':', 'right', '', 'nowrap' ) . - html_tag( 'td', '' , 'left' ) , - '', $bg ); - return ($return_val); +/** + * Creates html formated table row with input field + * @param string $title Name displayed next to input field + * @param string $name Name of input field + * @param string $data Default value of input field (data is sanitized with sm_encode_html_special_chars) + * @param string $bgcolor html attributes added to row element (tr) + * @return string html formated table row with text input field + * @since 1.2.0 (arguments differ since 1.4.5/1.5.1) + * @todo check right-to-left language issues + * @access private + */ +function sti_input( $title, $name, $data, $bgcolor ) { +//FIXME: NO HTML IN THE CORE + $str = ''; + $str .= '\n"; + $str .= ' ' . $title . ' ' . "\n"; + $str .= ' ' . "\n"; + $str .= ''; + + return $str; + } -function ShowTableInfo($full_name, $email_address, $reply_to, $signature, $post) { - global $color; +/** + * Creates html formated table row with textarea field + * @param string $title Name displayed next to textarea field + * @param string $name Name of textarea field + * @param string $data Default value of textarea field (data is sanitized with sm_encode_html_special_chars) + * @param string $bgcolor html attributes added to row element (tr) + * @return string html formated table row with textarea + * @since 1.2.5 (arguments differ since 1.4.5/1.5.1) + * @todo check right-to-left language issues + * @access private + */ +function sti_textarea( $title, $name, $data, $bgcolor ) { +//FIXME: NO HTML IN THE CORE + $str = ''; + $str .= '\n"; + $str .= ' ' . $title . ' ' . "\n"; + $str .= ' ' . "\n"; + $str .= ''; - $OtherBG = $color[0]; - if ($full_name == '' && $email_address == '' && $reply_to == '' && $signature == '') - $OtherBG = ''; - - if ($full_name == '' && $email_address == '' && $reply_to == '' && $signature == '') - $isEmptySection = true; - else - $isEmptySection = false; - - $return_val = ''; - $return_val .= sti_input( _("Full Name"), 'full_name', $full_name, $post, $OtherBG ); - $return_val .= sti_input( _("E-Mail Address"), 'email_address', $email_address, $post, $OtherBG ); - $return_val .= sti_input( _("Reply To"), 'reply_to', $reply_to, $post, $OtherBG ); - $return_val .= sti_textarea( _("Signature"), 'signature', $signature, $post, $OtherBG ); - - $return_val .= concat_hook_function('options_identities_table', array($OtherBG, $isEmptySection, $post)); - $return_val .= html_tag( 'tr', '', '', $OtherBG); - $return_val .= html_tag( 'td', ' ', 'left' ); - $return_val .= html_tag( 'td', '', 'left' ); - $return_val .= ''; - $return_val .= ''; - - - if (! $isEmptySection && $post != '') { - $return_val .= ''. - ''; - } - if (! $isEmptySection && $post != '' && $post > 1) { - $return_val .= ''; - } - $return_val .= concat_hook_function('options_identities_buttons', array($isEmptySection, $post)); - $return_val .= ''. - html_tag( 'tr', html_tag( 'td', ' ', 'left', '', 'colspan="2"' )); + return $str; - return ($return_val); } -?> \ No newline at end of file +