Source for file addressbook.php
Documentation is available at addressbook.php
* Manage personal address book.
* @copyright 1999-2020 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: addressbook.php 14845 2020-01-07 08:09:34Z pdontthink $
* @subpackage addressbook
/** This is the addressbook page */
define('PAGE_NAME', 'addressbook');
* Include the SquirrelMail initialization file.
include('../include/init.php');
/** SquirrelMail required files. */
/* address book functions */
require_once(SM_PATH .
'functions/addressbook.php');
include_once(SM_PATH .
'templates/util_addressbook.php');
require_once(SM_PATH .
'functions/forms.php');
/** lets get the global vars we may need */
/* From the address form */
$page_size =
$abook_show_num;
if (!sqGetGlobalVar('page_number', $page_number, SQ_FORM))
if (!sqGetGlobalVar('current_page_number', $page_number, SQ_FORM))
if (!sqGetGlobalVar('show_all', $show_all, SQ_FORM))
// Create page header before addressbook_init in order to
// display error messages correctly, unless we might be
// redirecting the browser to the compose page.
if ((empty($compose_to)) ||
sizeof($sel) <
1)
/* Open addressbook with error messages on.
remote backends (LDAP) are enabled because they can be used. (list_addr function)
// FIXME: do we really have to stop use of address book when localbackend is not present?
if($abook->localbackend ==
0) {
$current_backend =
$abook->localbackend;
$current_backend = (int)
$new_backend;
$abook_selection =
' ';
$list_backends =
array();
if (count($abook->backends) >
1) {
foreach($abook->get_backend_list() as $oBackend) {
if ($oBackend->listing) {
$list_backends[$oBackend->bnum]=
$oBackend->sname;
if (count($list_backends)>
1) {
$abook_selection =
addSelect('new_bnum',$list_backends,$current_backend,true)
$form_url =
'addressbook.php';
/* Handle user's actions */
// first, validate security token
/**************************************************
**************************************************/
$r =
$abook->add($addaddr, $backend);
$r =
$abook->add($addaddr, $abook->localbackend);
/* Handle error messages */
/* Remove backend name from error string */
/************************************************
************************************************/
if ((!empty($deladdr)) &&
sizeof($sel) >
0) {
/* The selected addresses are identified by "backend_nickname". *
* Sort the list and process one backend at the time */
for ($i =
0 ; (($i <
sizeof($sel)) &&
!$delfailed) ; $i++
) {
list
($sbackend, $snick) =
explode('_', $sel[$i], 2);
/* When we get to a new backend, process addresses in *
if ($prevback !=
$sbackend &&
$prevback != -
1) {
$r =
$abook->remove($subsel, $prevback);
$formerror =
$abook->error;
/* Queue for processing */
$r =
$abook->remove($subsel, $prevback);
if (!$r) { /* Handle errors */
$formerror =
$abook->error;
$defselected =
$orig_sel;
/************************************************
* Compose to selected address(es) *
************************************************/
} else if ((!empty($compose_to)) &&
sizeof($sel) >
0) {
// The selected addresses are identified by "backend_nickname"
for ($i =
0 ; (($i <
sizeof($sel)) &&
!$lookup_failed) ; $i++
) {
list
($sbackend, $snick) =
explode('_', $sel[$i], 2);
$data =
$abook->lookup($snick, $sbackend);
$formerror =
$abook->error;
$addr =
$abook->full_address($data);
$send_to .=
$addr .
', ';
if ($lookup_failed ||
empty($send_to)) {
// we skipped the page header above for this functionality, so add it here
// send off to compose screen
$send_to =
trim($send_to, ', ');
/***********************************************
* Update/modify address *
***********************************************/
/* Stage one: Copy data into form */
if (isset
($sel) &&
sizeof($sel) >
0) {
$formerror =
_("You can only edit one address at the time");
$olddata =
$abook->lookup($enick, $ebackend);
// Test if $olddata really contains anything and return an error message if it doesn't
/* Display the "new address" form */
echo
addHidden('oldnick', $olddata['nickname']).
} elseif ($doedit ==
1) {
/* Stage two: Write new data */
$r =
$abook->modify($oldnick, $newdata, $backend);
/* Handle error messages */
/* Display the "new address" form again */
* $editaddr is set, but $sel (address selection in address listing)
* and $doedit (address edit form) are not set.
* Assume that user clicked on "Edit address" without selecting any address.
$formerror =
_("Please select address that you want to edit");
} /* end of edit stage detection */
} /* !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
//FIXME: use footer.tpl; remove HTML from core
/* =================================================================== *
* The following is only executed on a GET request, or on a POST when *
* a user is added, or when "delete" or "modify" was successful. *
* =================================================================== */
/* Display error messages */
if (!empty($formerror)) {
/* Display the address management part */
while (list
($k, $backend) =
each ($abook->backends)) {
$a['BackendID'] =
$backend->bnum;
$a['BackendSource'] =
$backend->sname;
$a['BackendWritable'] =
$backend->writeable;
$a['Addresses'] =
array();
// don't do address lookup if we are not viewing that backend
if ($backend->bnum ==
$current_backend) {
$alist =
$abook->list_addr($backend->bnum);
/* check return (array with data or boolean false) */
usort($alist,'alistcmp');
$addresses[$backend->bnum] =
$a;
// list_addr() returns boolean
$addresses[$backend->bnum] =
$a;
$current_page_args =
array(
'abook_sort_order' =>
$abook_sort_order,
'new_bnum' =>
$current_backend,
'page_number' =>
$page_number,
// note that plugins can add to $current_page_args as well as
// filter the address list
$temp =
array(&$addresses, &$current_backend, &$page_number, &$current_page_args);
do_hook('abook_list_filter', $temp);
// NOTE to address book backend authors and plugin authors: if a backend does
// pagination (which might be more efficient), it needs to place a key
// in every address listing it returns called "paginated", whose value
// should evaluate to boolean TRUE. However, if a plugin will also be
// used on the hook above to filter the addresses (perhaps by group), then
// the backend should be made compatible with the filtering plugin and
// should do the actual filtering too. Otherwise, the backend will paginate
// before filtering has taken place, the output of which is clearly wrong.
// It is proposed that filtering be based on a GET/POST variable called
// "abook_groups_X" where X is the current backend number. The value of
// this varaible would be an array of possible filter names, which the
// plugin and the backend would both know about. The plugin would only
// filter based on that value if the backend didn't already do it. The
// backend can insert a "grouped" key into all address listings, whose
// value evaluates to boolean TRUE, telling the plugin not to do any
// filtering itself. For an example of this implementation, see the
// Address Book Grouping and Pagination plugin.
// if no pagination was done by a plugin or the abook
// backend (which is indicated by the presence of a
// "paginated" key within all of the address entries
// in the list of addresses for the backend currently
// being viewed), then we provide default pagination
&&
is_array($addresses[$current_backend]['Addresses'])
&&
empty($addresses[$current_backend]['Addresses'][0]['paginated'])) {
// at this point, we assume the current list is
$total_addresses =
sizeof($addresses[$current_backend]['Addresses']);
// iterate through all the entries, building list of addresses
// to keep based on current page
$new_address_list =
array();
$total_pages =
ceil($total_addresses /
$page_size);
if ($page_number >
$total_pages) $page_number =
$total_pages;
foreach ($addresses[$current_backend]['Addresses'] as $addr) {
if ($page_item_count >
$page_size) {
if ($page_count ==
$page_number)
$new_address_list[] =
$addr;
$addresses[$current_backend]['Addresses'] =
$new_address_list;
$oTemplate->assign('show_all', $show_all);
$oTemplate->assign('page_number', $page_number);
$oTemplate->assign('page_size', $page_size);
$oTemplate->assign('total_addresses', $total_addresses);
$oTemplate->assign('abook_compact_paginator', $abook_compact_paginator);
$oTemplate->assign('abook_page_selector', $abook_page_selector);
$oTemplate->assign('current_page_args', $current_page_args);
$oTemplate->assign('abook_page_selector_max', $abook_page_selector_max);
$oTemplate->assign('addresses', $addresses);
$oTemplate->assign('current_backend', $current_backend);
$oTemplate->assign('backends', $list_backends);
$oTemplate->assign('abook_has_extra_field', $abook->add_extra_field);
$oTemplate->assign('compose_new_win', $compose_new_win);
$oTemplate->assign('compose_height', $compose_height);
$oTemplate->assign('compose_width', $compose_width);
$oTemplate->assign('form_action', $form_url);
$oTemplate->display('addressbook_list.tpl');
/* Display the "new address" form */
//FIXME: Remove HTML from here! (echo abook_create_form() is OK, since it is all template based output
echo
'<a name="AddAddress"></a>' .
"\n";
_("Add to address book"),
/* Hook for extra address book blocks */
do_hook('addressbook_bottom', $null);
$oTemplate->display('footer.tpl');
Documentation generated on Mon, 13 Jan 2020 04:22:00 +0100 by phpDocumentor 1.4.3