From: <pdo...@us...> - 2008-05-15 19:00:21
|
Revision: 13146 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13146&view=rev Author: pdontthink Date: 2008-05-15 12:00:03 -0700 (Thu, 15 May 2008) Log Message: ----------- Allow underscores in nicknames by changing id used in forms, add more labels for easy checkbox clicking, add compose to selected button Modified Paths: -------------- trunk/squirrelmail/src/addressbook.php trunk/squirrelmail/templates/default/addrbook_addedit.tpl trunk/squirrelmail/templates/default/addressbook_list.tpl Modified: trunk/squirrelmail/src/addressbook.php =================================================================== --- trunk/squirrelmail/src/addressbook.php 2008-05-15 16:28:58 UTC (rev 13145) +++ trunk/squirrelmail/src/addressbook.php 2008-05-15 19:00:03 UTC (rev 13146) @@ -34,6 +34,7 @@ sqgetGlobalVar('addaddr', $addaddr, SQ_POST); sqgetGlobalVar('editaddr', $editaddr, SQ_POST); sqgetGlobalVar('deladdr', $deladdr, SQ_POST); +sqgetGlobalVar('compose_to', $compose_to, SQ_POST); sqgetGlobalVar('sel', $sel, SQ_POST); sqgetGlobalVar('oldnick', $oldnick, SQ_POST); sqgetGlobalVar('backend', $backend, SQ_POST); @@ -115,14 +116,14 @@ $orig_sel = $sel; sort($sel); - /* The selected addresses are identidied by "nickname_backend". * + /* The selected addresses are identified by "backend_nickname". * * Sort the list and process one backend at the time */ $prevback = -1; $subsel = array(); $delfailed = false; for ($i = 0 ; (($i < sizeof($sel)) && !$delfailed) ; $i++) { - list($snick, $sbackend) = explode('_', $sel[$i]); + list($sbackend, $snick) = explode('_', $sel[$i], 2); /* When we get to a new backend, process addresses in * * previous one. */ @@ -156,6 +157,47 @@ $defselected = $orig_sel; } + /************************************************ + * Compose to selected address(es) * + ************************************************/ + } else if ((!empty($compose_to)) && sizeof($sel) > 0) { + $orig_sel = $sel; + sort($sel); + + // The selected addresses are identified by "backend_nickname" + $lookup_failed = false; + $send_to = ''; + + for ($i = 0 ; (($i < sizeof($sel)) && !$lookup_failed) ; $i++) { + list($sbackend, $snick) = explode('_', $sel[$i], 2); + + $data = $abook->lookup($snick, $sbackend); + + if (!$data) { + $formerror = $abook->error; + $lookup_failed = true; + break; + } else { + $addr = $abook->full_address($data); + if (!empty($addr)) + $send_to .= $addr . ', '; + } + } + + + if ($lookup_failed || empty($send_to)) { + $showaddrlist = true; + $defselected = $sel; + } + + + // send off to compose screen + else { + $send_to = trim($send_to, ', '); + header('Location: ' . $base_uri . 'src/compose.php?send_to=' . rawurlencode($send_to)); + exit; + } + } else { /*********************************************** @@ -170,7 +212,7 @@ $defselected = $sel; } else { $abortform = true; - list($enick, $ebackend) = explode('_', current($sel)); + list($ebackend, $enick) = explode('_', current($sel), 2); $olddata = $abook->lookup($enick, $ebackend); // Test if $olddata really contains anything and return an error message if it doesn't if (!$olddata) { @@ -219,9 +261,10 @@ $formerror = _("Please select address that you want to edit"); $showaddrlist = true; } /* end of edit stage detection */ - } /* !empty($editaddr) - Update/modify address */ - } /* (!empty($deladdr)) && sizeof($sel) > 0 - Delete address(es) */ - } /* !empty($addaddr['nickname']) - Add new address */ + } /* !empty($editaddr) - Update/modify address */ + } /* (!empty($deladdr)) && sizeof($sel) > 0 - Delete address(es) + or (!empty($compose_to)) && sizeof($sel) > 0 - Compose to address(es) */ + } /* !empty($addaddr['nickname']) - Add new address */ // Some times we end output before forms are printed if($abortform) { @@ -271,6 +314,9 @@ //FIXME: Remove HTML from here! echo addForm($form_url, 'post', 'address_book_form'); + $oTemplate->assign('compose_new_win', $compose_new_win); + $oTemplate->assign('compose_height', $compose_height); + $oTemplate->assign('compose_width', $compose_width); $oTemplate->assign('addresses', $addresses); $oTemplate->assign('current_backend', $current_backend); $oTemplate->assign('backends', $list_backends); Modified: trunk/squirrelmail/templates/default/addrbook_addedit.tpl =================================================================== --- trunk/squirrelmail/templates/default/addrbook_addedit.tpl 2008-05-15 16:28:58 UTC (rev 13145) +++ trunk/squirrelmail/templates/default/addrbook_addedit.tpl 2008-05-15 19:00:03 UTC (rev 13146) @@ -5,6 +5,7 @@ * Display the form elements to add/edit an entry in the address book * * The following variables are available in this template: + * $current_backend - integer containing backend currently displayed. * $edit - boolean TRUE if we are editing an existing address. * FALSE if the form is blank for adding a new address. * $writable_backends - array of address book backends that can be written @@ -60,6 +61,7 @@ if (is_array($values['Email'])) { echo '<select name="'.$formname.'[email]" id="email">'."\n"; foreach ($values['Email'] as $email) { +//FIXME: htmlspecialchars should not be needed inside any template files - I think values are already sanitized by the time they get here echo '<option value="'.htmlspecialchars($email).'">'.htmlspecialchars($email).'</option>'."\n"; } echo '</select>'."\n"; @@ -105,7 +107,10 @@ <select name="backend" id="backend"> <?php foreach ($writable_backends as $id=>$name) { - echo '<option value="'.$id.'">'.htmlspecialchars($name).'</option>'."\n"; +//FIXME: htmlspecialchars should not be needed inside any template files - I think values are already sanitized by the time they get here + echo '<option value="' . $id + . ($current_backend == $id ? '" selected="selected"' : '"') + . '>' . htmlspecialchars($name) . '</option>' . "\n"; } ?> </select> Modified: trunk/squirrelmail/templates/default/addressbook_list.tpl =================================================================== --- trunk/squirrelmail/templates/default/addressbook_list.tpl 2008-05-15 16:28:58 UTC (rev 13145) +++ trunk/squirrelmail/templates/default/addressbook_list.tpl 2008-05-15 19:00:03 UTC (rev 13146) @@ -5,6 +5,10 @@ * Template for the basic address book list * * The following variables are available in this template: + * $compose_new_win - whether or not the user prefs are set to compose + * messages in a popup window + * $compose_width - width of popup compose window if needed + * $compose_height - height of popup compose window if needed * $current_backend - integer containing backend currently displayed. * $abook_select - string containing HTML to display the address book * selection drop down @@ -55,28 +59,29 @@ <div id="addressList"> <table cellspacing="0"> <tr> - <td colspan=<?php echo '"'.$colspan.'"'; ?> class="header1"> + <td colspan="<?php echo $colspan; ?>" class="header1"> <?php echo $source['BackendSource']; ?> </td> </tr> <tr> <td colspan="3" class="abookButtons"> - <input type="submit" value=<?php echo '"'._("Edit Selected").'"'; ?> name="editaddr" id="editaddr" /> - <input type="submit" value=<?php echo '"'._("Delete Selected").'"'; ?> name="deladdr" id="deladdr" /> + <input type="submit" value="<?php echo _("Edit Selected"); ?>" name="editaddr" id="editaddr" /> + <input type="submit" value="<?php echo _("Delete Selected"); ?>" name="deladdr" id="deladdr" /> + <input type="submit" value="<?php echo _("Compose to Selected") . ($javascript_on && $compose_new_win ? '" onclick="var send_to = \'\'; var f = document.forms.length; var i = 0; var grab_next_hidden = \'\'; while (i < f) { var e = document.forms[i].elements.length; var j = 0; while (j < e) { if (document.forms[i].elements[j].type == \'checkbox\' && document.forms[i].elements[j].checked) { var pos = document.forms[i].elements[j].value.indexOf(\'_\'); if (pos >= 1) { grab_next_hidden = document.forms[i].elements[j].value; } } else if (document.forms[i].elements[j].type == \'hidden\' && grab_next_hidden == document.forms[i].elements[j].name) { if (send_to != \'\') { send_to += \', \'; } send_to += document.forms[i].elements[j].value; } j++; } i++; } if (send_to != \'\') { comp_in_new(\''. $base_uri . 'src/compose.php?send_to=\' + send_to, ' . $compose_width . ', ' . $compose_height . '); } return false;"' : '"'); ?> name="compose_to" id="compose_to" /> <?php if (!empty($plugin_output['address_book_navigation'])) echo $plugin_output['address_book_navigation']; ?> </td> - <td colspan=<?php echo '"'.($colspan - 3).'"'; ?> class="abookSwitch"> + <td colspan="<?php echo ($colspan - 3); ?>" class="abookSwitch"> <?php if (count($backends) > 0) { ?> <select name="new_bnum"> <?php foreach ($backends as $id=>$name) { - echo '<option value="'.$id.'"'.($id==$current_backend ? ' selected="selected"' : '').'>'.$name.'</option>'."\n"; + echo '<option value="' . $id . '"' . ($id == $current_backend ? ' selected="selected"' : '') . '>' . $name . '</option>' . "\n"; } ?> </select> - <input type="submit" value=<?php echo '"'._("Change").'"'; ?> name="change_abook" id="change_abook" /> + <input type="submit" value="<?php echo _("Change"); ?>" name="change_abook" id="change_abook" /> <?php } else { echo ' '; @@ -102,14 +107,14 @@ echo '<tr><td class="abookEmpty" colspan="'.$colspan.'">'._("Address book is empty").'</td></tr>'."\n"; } foreach ($source['Addresses'] as $contact) { - $id = $contact['NickName'] .'_'. $current_backend; + $id = $current_backend . '_' . $contact['NickName']; ?> - <tr class=<?php echo '"'.($count%2 ? 'even' : 'odd').'"'; ?>> + <tr class="<?php echo ($count%2 ? 'even' : 'odd'); ?>"> <td class="abookField" style="width:1%"><?php echo ($source['BackendWritable'] ? '<input type="checkbox" name="sel[' . $count . ']" value="'.$id.'" id="'.$id.'" ' . (!empty($plugin_output['address_book_checkbox_extra']) ? $plugin_output['address_book_checkbox_extra'] : '') . ' />' : ''); ?></td> - <td class="abookField" style="width:15%"><label for=<?php echo '"'.$id.'"'; ?>><?php echo $contact['NickName']; ?></label></td> - <td class="abookField"><?php echo $contact['FullName']; ?></td> - <td class="abookField"><?php echo composeLink($contact); ?></td> - <td class="abookField"><?php echo $contact['Info']; ?></td> + <td class="abookField" style="width:15%"><label for="<?php echo $id . '">' . $contact['NickName']; ?></label></td> + <td class="abookField"><label for="<?php echo $id . '">' . $contact['FullName']; ?></label></td> + <td class="abookField"><input type="hidden" name="<?php echo $id; ?>" value="<?php echo rawurlencode($contact['FullAddress']); ?>" /><?php echo composeLink($contact); ?></td> + <td class="abookField"><label for="<?php echo $id . '">' . $contact['Info']; ?></label></td> <?php if ($abook_has_extra_field) { echo '<td class="abookField">'.$contact['Extra'].'</td>'."\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |