Source for file addressbook.php

Documentation is available at addressbook.php

  1. <?php
  2.  
  3. /**
  4.  * addressbook.php
  5.  *
  6.  * Manage personal address book.
  7.  *
  8.  * @copyright &copy; 1999-2006 The SquirrelMail Project Team
  9.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  10.  * @version $Id: addressbook.php,v 1.111 2006/08/15 21:31:48 stevetruckstuff Exp $
  11.  * @package squirrelmail
  12.  * @subpackage addressbook
  13.  */
  14.  
  15. /**
  16.  * Include the SquirrelMail initialization file.
  17.  */
  18. include('../include/init.php');
  19.  
  20. /** SquirrelMail required files. */
  21. /* address book functions */
  22. require_once(SM_PATH 'functions/addressbook.php');
  23. include_once(SM_PATH 'templates/util_addressbook.php');
  24. include_once(SM_PATH 'templates/util_global.php');
  25.  
  26. /* form functions */
  27. require_once(SM_PATH 'functions/forms.php');
  28.  
  29. /** lets get the global vars we may need */
  30.  
  31. /* From the address form */
  32. sqgetGlobalVar('addaddr',       $addaddr,       SQ_POST);
  33. sqgetGlobalVar('editaddr',      $editaddr,      SQ_POST);
  34. sqgetGlobalVar('deladdr',       $deladdr,       SQ_POST);
  35. sqgetGlobalVar('sel',           $sel,           SQ_POST);
  36. sqgetGlobalVar('oldnick',       $oldnick,       SQ_POST);
  37. sqgetGlobalVar('backend',       $backend,       SQ_POST);
  38. sqgetGlobalVar('doedit',        $doedit,        SQ_POST);
  39.  
  40. /* Get sorting order */
  41. $abook_sort_order get_abook_sort();
  42.  
  43. /* Create page header before addressbook_init in order to  display error messages correctly. */
  44. displayPageHeader($color'None');
  45.  
  46. /* Open addressbook with error messages on.
  47.  remote backends (LDAP) are enabled because they can be used. (list_addr function)
  48. */
  49. $abook addressbook_init(truefalse);
  50.  
  51. // FIXME: do we have to stop use of address book, when localbackend is not present.
  52. if($abook->localbackend == 0{
  53.     plain_error_message(_("No personal address book is defined. Contact administrator."));
  54.     exit();
  55. }
  56.  
  57. $current_backend $abook->localbackend;
  58. if (sqgetGlobalVar('new_bnum',$new_backend,SQ_POST&& array_key_exists($new_backend,$abook->backends)) {
  59.     $current_backend = (int) $new_backend;
  60. }
  61.  
  62. $abook_selection '&nbsp;';
  63. $list_backends array();
  64. if (count($abook->backends1{
  65.     foreach($abook->get_backend_list(as $oBackend{
  66.         if ($oBackend->listing{
  67.             $list_backends[$oBackend->bnum]=$oBackend->sname;
  68.         }
  69.     }
  70.     if (count($list_backends)>1{
  71.         $abook_selection addSelect('new_bnum',$list_backends,$current_backend,true)
  72.             .addSubmit(_("Change"),'change_abook');
  73.     }
  74. }
  75.  
  76. $defdata   array();
  77. $formerror '';
  78. $abortform false;
  79. $showaddrlist true;
  80. $defselected  array();
  81. $form_url 'addressbook.php';
  82.  
  83. /* Handle user's actions */
  84. if(sqgetGlobalVar('REQUEST_METHOD'$req_methodSQ_SERVER&& $req_method == 'POST'{
  85.  
  86.     /************************************************
  87.      * Add new address                                *
  88.      **************************************************/
  89.  
  90.     if (isset($addaddr)) {
  91.         if (isset($backend)) {
  92.             $r $abook->add($addaddr$backend);
  93.         else {
  94.             $r $abook->add($addaddr$abook->localbackend);
  95.         }
  96.  
  97.         /* Handle error messages */
  98.         if (!$r{
  99.             /* Remove backend name from error string */
  100.             $errstr $abook->error;
  101.             $errstr ereg_replace('^\[.*\] *'''$errstr);
  102.  
  103.             $formerror $errstr;
  104.             $showaddrlist false;
  105.             $defdata $addaddr;
  106.         }
  107.     else {
  108.  
  109.         /**********************************************
  110.          * Delete address(es)                           *
  111.          ************************************************/
  112.  
  113.         if ((!empty($deladdr)) && sizeof($sel0{
  114.             $orig_sel $sel;
  115.             sort($sel);
  116.  
  117.             /* The selected addresses are identidied by "nickname_backend". *
  118.              * Sort the list and process one backend at the time            */
  119.             $prevback  = -1;
  120.             $subsel    array();
  121.             $delfailed false;
  122.  
  123.             for ($i (($i sizeof($sel)) && !$delfailed$i++{
  124.                 list($snick$sbackendexplode('_'$sel[$i]);
  125.  
  126.                 /* When we get to a new backend, process addresses in *
  127.                  * previous one.                                      */
  128.                 if ($prevback != $sbackend && $prevback != -1{
  129.  
  130.                     $r $abook->remove($subsel$prevback);
  131.                     if (!$r{
  132.                         $formerror $abook->error;
  133.                         $i sizeof($sel);
  134.                         $delfailed true;
  135.                         break;
  136.                     }
  137.                     $subsel   array();
  138.                 }
  139.  
  140.                 /* Queue for processing */
  141.                 array_push($subsel$snick);
  142.                 $prevback $sbackend;
  143.             }
  144.  
  145.             if (!$delfailed{
  146.                 $r $abook->remove($subsel$prevback);
  147.                 if (!$r/* Handle errors */
  148.                     $formerror $abook->error;
  149.                     $delfailed true;
  150.                 }
  151.             }
  152.  
  153.             if ($delfailed{
  154.                 $showaddrlist true;
  155.                 $defselected  $orig_sel;
  156.             }
  157.  
  158.         else {
  159.  
  160.             /*********************************************
  161.              * Update/modify address                       *
  162.              ***********************************************/
  163.  
  164.             if (!empty($editaddr)) {
  165.                 /* Stage one: Copy data into form */
  166.                 if (isset($sel&& sizeof($sel0{
  167.                     if(sizeof($sel1{
  168.                         $formerror _("You can only edit one address at the time");
  169.                         $showaddrlist true;
  170.                         $defselected $sel;
  171.                     else {
  172.                         $abortform true;
  173.                         list($enick$ebackendexplode('_'current($sel));
  174.                         $olddata $abook->lookup($enick$ebackend);
  175.                         // Test if $olddata really contains anything and return an error message if it doesn't
  176.                                                 if (!$olddata{
  177.                             error_box(nl2br(htmlspecialchars($abook->error)));
  178.                         else {
  179.                             /* Display the "new address" form */
  180.                             abook_create_form($form_url,'editaddr',_("Update address"),_("Update address"),$olddata);
  181.                             echo addHidden('oldnick'$olddata['nickname']).
  182.                                 addHidden('backend'$olddata['backend']).
  183.                                 addHidden('doedit''1').
  184.                                 '</form>';
  185.                         }
  186.                     }
  187.                 elseif ($doedit == 1{
  188.                     /* Stage two: Write new data */
  189.                     $newdata $editaddr;
  190.                     $r $abook->modify($oldnick$newdata$backend);
  191.  
  192.                     /* Handle error messages */
  193.                     if (!$r{
  194.                         /* Display error */
  195.                         plain_error_messagenl2br(htmlspecialchars($abook->error)));
  196.  
  197.                         /* Display the "new address" form again */
  198.                         abook_create_form($form_url,'editaddr',_("Update address"),_("Update address"),$newdata);
  199.                         echo addHidden('oldnick'$oldnick).
  200.                             addHidden('backend'$backend).
  201.                             addHidden('doedit',  '1').
  202.                             "\n" '</form>';
  203.                         $abortform true;
  204.                     }
  205.                 else {
  206.                     /**
  207.                      * $editaddr is set, but $sel (address selection in address listing)
  208.                      * and $doedit (address edit form) are not set.
  209.                      * Assume that user clicked on "Edit address" without selecting any address.
  210.                      */
  211.                     $formerror _("Please select address that you want to edit");
  212.                     $showaddrlist true;
  213.                 /* end of edit stage detection */
  214.             /* !empty($editaddr)                  - Update/modify address */
  215.         /* (!empty($deladdr)) && sizeof($sel) > 0 - Delete address(es) */
  216.     /* !empty($addaddr['nickname'])               - Add new address */
  217.  
  218.     // Some times we end output before forms are printed
  219.         if($abortform{
  220.         echo "</body></html>\n";
  221.         exit();
  222.     }
  223. }
  224.  
  225.  
  226. /* =================================================================== *
  227.  * The following is only executed on a GET request, or on a POST when  *
  228.  * a user is added, or when "delete" or "modify" was successful.       *
  229.  * =================================================================== */
  230.  
  231. /* Display error messages */
  232. if (!empty($formerror)) {
  233. }
  234.  
  235.  
  236. /* Display the address management part */
  237. $addresses array();
  238. while (list($k$backendeach ($abook->backends)) {
  239.     $a array();
  240.     $a['BackendID'$backend->bnum;
  241.     $a['BackendSource'$backend->sname;
  242.     $a['BackendWritable'$backend->writeable;
  243.     $a['Addresses'array();
  244.  
  245.     $alist $abook->list_addr($backend->bnum);
  246.  
  247.     /* check return (array with data or boolean false) */
  248.     if (is_array($alist)) {
  249.         usort($alist,'alistcmp');
  250.  
  251.         $a['Addresses'formatAddressList($alist);
  252.   
  253.         $addresses[$backend->bnum$a;
  254.     else {
  255.         // list_addr() returns boolean
  256.                 plain_error_message(nl2br(htmlspecialchars($abook->error)));
  257.     }
  258. }
  259.  
  260.  
  261. if ($showaddrlist{
  262.     echo addForm($form_url'post');
  263.     
  264.     $oTemplate->assign('addresses'$addresses);
  265.     $oTemplate->assign('current_backend'$current_backend);
  266.     $oTemplate->assign('backends'$list_backends);
  267.     $oTemplate->assign('abook_has_extra_field'$abook->add_extra_field);
  268.         
  269.     $oTemplate->display('addressbook_list.tpl');
  270.     
  271.     echo "</form>\n";
  272. }
  273.  
  274. /* Display the "new address" form */
  275. echo '<a name="AddAddress"></a>' "\n";
  276. abook_create_form($form_url,'addaddr',_("Add to address book"),_("Add address"),$defdata);
  277. echo "</form>\n";
  278.  
  279. /* Hook for extra address book blocks */
  280. echo "<!-- start of addressbook_bottom hook-->\n";
  281. do_hook('addressbook_bottom');
  282. echo "\n<!-- end of addressbook_bottom hook-->\n";
  283.  
  284. $oTemplate->display('footer.tpl');
  285. ?>

Documentation generated on Sat, 07 Oct 2006 16:08:43 +0300 by phpDocumentor 1.3.0RC6