Added "List all" button to javascript address book.
authorpallo <pallo@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 21 Jun 2000 11:13:26 +0000 (11:13 +0000)
committerpallo <pallo@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 21 Jun 2000 11:13:26 +0000 (11:13 +0000)
List all addresses in the personal address book when window is opened.

git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@550 7612ce4b-ef26-0410-bec9-ea0150e637f0

doc/addressbook.txt
functions/addressbook.php
src/addrbook_search.php

index fe746d584f484bdb2ba4c7e10185f1dba893fe07..f0521e853e07c02850d1a466ab009d02fb78a2ae 100644 (file)
@@ -59,20 +59,19 @@ methods are provided:
    moment), or false if it failed.
 
 
-  search(QUERY, [BTYPE])
+  search(QUERY, [BNUM])
 
      QUERY - Something to search for. At the moment, only 
      a string is allowed here, but advanced expressions
      will be supported through an array of parameters.
 
-     BTYPE - Optional backend type to search. Either "local"
-     or "remote".
+     BNUM  - Optional backend number to search.
 
    This method will return an array of result arrays (see below), an
    empty array if nothing was found, or false if the search failed.
 
 
-  s_search(QUERY, [BTYPE])
+  s_search(QUERY, [BNUM])
 
    The same as search(), but the result array is sorted by backend and
    fullname before it is returned.
@@ -163,3 +162,6 @@ In addition, the following keys may exist for some backends:
 ----------------------
 
 ... more later ...
+
+Ask pallo@squirrelmail.org if you have any questions on how to build
+new address book backends.
index bafa53be7a4e8aeb18e96195a2afe4c1bdb34a56..45f586b38b7e0d9da0a5709349c1e5feebe8b429 100644 (file)
 
       // Return a list of addresses matching expression in
       // all backends of a given type.
-      function search($expression, $btype = "") {
+      function search($expression, $bnum = -1) {
         $ret = array();
         $this->error = "";
 
-        $sel = $this->get_backend_list($btype);
-        $failed = 0;
-        for($i = 0 ; $i < sizeof($sel) ; $i++) {
-           $backend = &$sel[$i];
-           $backend->error = "";
-           $res = $backend->search($expression);
-           if(is_array($res)) {
-              $ret = array_merge($ret, $res);
-           } else {
-              $this->error = $this->error . "<br>\n". $backend->error;
-              $failed++;
+        // Search all backends
+        if($bnum == -1) {
+           $sel = $this->get_backend_list("");
+           $failed = 0;
+           for($i = 0 ; $i < sizeof($sel) ; $i++) {
+              $backend = &$sel[$i];
+              $backend->error = "";
+              $res = $backend->search($expression);
+              if(is_array($res)) {
+                 $ret = array_merge($ret, $res);
+              } else {
+                 $this->error = $this->error . "<br>\n". $backend->error;
+                 $failed++;
+              }
            }
+
+           // Only fail if all backends failed
+           if($failed >= sizeof($sel))
+              return false;
+
         }
 
-        // Only fail if all backends failed
-        if($failed >= sizeof($sel))
-           return false;
+        // Search only one backend
+        else {
+           $ret = $this->backends[$bnum]->search($expression);
+           if(!is_array($ret)) {
+              $this->error = $this->error . "<br>\n". $this->backends[$bnum]->error;
+              return false;
+           }
+        }
 
         return $ret;
       }
 
 
       // Return a sorted search
-      function s_search($expression, $btype = "") {
+      function s_search($expression, $bnum = -1) {
 
-        $ret = $this->search($expression, $btype);
+        $ret = $this->search($expression, $bnum);
         if(!is_array($ret))
            return $ret;
 
 
 
       // Return all addresses
-      function list_addr() {
+      function list_addr($bnum = -1) {
         $ret = array();
 
-        $sel = $this->get_backend_list("local");
+        if($bnum == -1) 
+           $sel = $this->get_backend_list("local");
+        else
+           $sel = array(0 => &$this->backends[$bnum]);
+
         for($i = 0 ; $i < sizeof($sel) ; $i++) {
            $backend = &$sel[$i];
            $backend->error = "";
index ad41bfefa0b50e08634bd5cfd8aabd299b67c530..48e20ed828cd0d3e90f2a7497549e951dd69f414 100644 (file)
@@ -6,76 +6,8 @@
     **
     **/
 
-   session_start();
-
-   if(!isset($logged_in)) {
-      echo _("You must login first.");
-      exit;
-   }
-   if(!isset($username) || !isset($key)) {
-      echo _("You need a valid user and password to access this page!");
-      exit;
-   }
-
-   if (!isset($config_php))
-      include("../config/config.php");
-   if (!isset($array_php))
-      include("../functions/array.php");
-   if (!isset($strings_php))
-      include("../functions/strings.php");
-   if (!isset($imap_php))
-      include("../functions/imap.php");
-   if (!isset($page_header_php))
-      include("../functions/page_header.php");
-   if (!isset($addressbook_php))
-      include("../functions/addressbook.php");
-
-   // Authenticate user and load prefs
-   $imapConnection = sqimap_login($username, $key, 
-                                 $imapServerAddress, $imapPort, 10);
-   include("../src/load_prefs.php");
-   sqimap_logout ($imapConnection);
-
-   displayHtmlHeader();
-
-   // Choose correct colors for top and bottom frame
-   if($show == "form") {
-      echo "<BODY BGCOLOR=\"$color[3]\" TEXT=\"$color[6]\" ";
-      echo "LINK=\"$color[6]\" VLINK=\"$color[6]\" ALINK=\"$color[6]\" ";
-      echo "OnLoad=\"document.sform.query.focus();\">";  
-   } else {
-      echo "<BODY TEXT=\"$color[8]\" BGCOLOR=\"$color[4]\" ";
-      echo "LINK=\"$color[7]\" VLINK=\"$color[7]\" ALINK=\"$color[7]\">\n";
-   }
-
-   // Just make a blank page and exit
-   if(($show == "blank") || (empty($query) && empty($show)))  {
-      printf("<P ALIGN=center><BR>%s</P>\n</BODY></HTML>\n",
-            _("Search results will display here"));
-      exit;
-   }
-
-   // Create search form 
-   if($show == "form") {
-      printf("<FORM NAME=sform TARGET=abookres ACTION=\"%s\" METHOD=\"POST\">\n",
-            $PHP_SELF);
-      printf("<TABLE BORDER=0 WIDTH=\"100%%\" HEIGHT=\"100%%\">");
-      printf("<TR><TD NOWRAP VALIGN=middle>\n");
-      printf("  <STRONG>%s:</STRONG>\n</TD><TD VALIGN=middle>\n",
-            _("Search for"));
-      printf("  <INPUT TYPE=text NAME=query VALUE=\"%s\" SIZE=30>\n",
-            htmlspecialchars($query));
-      printf("</TD><TD VALIGN=middle>\n");
-      printf("  <INPUT TYPE=submit VALUE=\"%s\">",
-            _("Search"));
-      printf("</TD><TD WIDTH=\"50%%\" VALIGN=middle ALIGN=right>\n");
-      printf("<INPUT TYPE=button VALUE=\"%s\" onclick=\"parent.close();\">\n",
-             _("Close window"));
-      printf("</TD></TR></TABLE></FORM>\n");
-   }
-
-   // Include JavaScript code if this is search results
-   if(!empty($query)) {
+   // Function to include JavaScript code
+   function insert_javascript() {
 ?>
 <SCRIPT LANGUAGE="Javascript"><!--
 
@@ -139,12 +71,172 @@ function bcc_address($addr) {
 // --></SCRIPT>
 
 <?php 
-   } // End of included JavaScript code
+   } // End of included JavaScript
+
+
+   // List search results
+   function display_result($res, $includesource = true) {
+      global $color;
+
+      if(sizeof($res) <= 0) return;
+
+      insert_javascript();
+
+      $line = 0;
+      print "<TABLE BORDER=0 WIDTH=\"98%\" ALIGN=center>";
+      printf("<TR BGCOLOR=\"$color[9]\"><TH ALIGN=left>&nbsp;".
+            "<TH ALIGN=left>&nbsp;%s<TH ALIGN=left>&nbsp;%s".
+            "<TH ALIGN=left>&nbsp;%s",
+            _("Name"), _("E-mail"), _("Info"));
+
+      if($includesource)
+        printf("<TH ALIGN=left WIDTH=\"10%%\">&nbsp;%s", _("Source"));
+
+      print "</TR>\n";
+      
+      while(list($key, $row) = each($res)) {
+        printf("<tr%s nowrap><td nowrap align=center width=\"5%%\">".
+               "<small><a href=\"javascript:to_address('%s');\">To</A> | ".
+               "<a href=\"javascript:cc_address('%s');\">Cc</A> | ".
+               "<a href=\"javascript:bcc_address('%s');\">Bcc</A></small>".
+               "<td nowrap>&nbsp;%s&nbsp;<td nowrap>&nbsp;".
+               "<a href=\"javascript:to_and_close('%s');\">%s</A>&nbsp;".
+               "<td nowrap>&nbsp;%s&nbsp;", 
+               ($line % 2) ? " bgcolor=\"$color[0]\"" : "", 
+               $row["email"], $row["email"], $row["email"], 
+               $row["name"],  $row["email"], $row["email"],
+               $row["label"]);
+
+        if($includesource)
+           printf("<td nowrap>&nbsp;%s", $row["source"]);
+
+        print "</TR>\n";
+        $line++;
+      }
+      print "</TABLE>";
+   }
+
+   /* ================= End of functions ================= */
+
+   session_start();
+
+   if(!isset($logged_in)) {
+      echo _("You must login first.");
+      exit;
+   }
+   if(!isset($username) || !isset($key)) {
+      echo _("You need a valid user and password to access this page!");
+      exit;
+   }
+
+   if (!isset($config_php))
+      include("../config/config.php");
+   if (!isset($array_php))
+      include("../functions/array.php");
+   if (!isset($strings_php))
+      include("../functions/strings.php");
+   if (!isset($imap_php))
+      include("../functions/imap.php");
+   if (!isset($page_header_php))
+      include("../functions/page_header.php");
+   if (!isset($addressbook_php))
+      include("../functions/addressbook.php");
+
+   // Authenticate user and load prefs
+   $imapConnection = sqimap_login($username, $key, 
+                                 $imapServerAddress, $imapPort, 10);
+   include("../src/load_prefs.php");
+   sqimap_logout ($imapConnection);
+
+   displayHtmlHeader();
+
+   // Choose correct colors for top and bottom frame
+   if($show == "form") {
+      echo "<BODY BGCOLOR=\"$color[3]\" TEXT=\"$color[6]\" ";
+      echo "LINK=\"$color[6]\" VLINK=\"$color[6]\" ALINK=\"$color[6]\" ";
+      echo "OnLoad=\"document.sform.query.focus();\">";  
+   } else {
+      echo "<BODY TEXT=\"$color[8]\" BGCOLOR=\"$color[4]\" ";
+      echo "LINK=\"$color[7]\" VLINK=\"$color[7]\" ALINK=\"$color[7]\">\n";
+   }
+
+   // Empty search
+   if(empty($query) && empty($show) && empty($listall))  {
+      printf("<P ALIGN=center><BR>%s</P>\n</BODY></HTML>\n",
+            _("No persons matching your search was found"));
+      exit;
+   }
+
+   // Initialize addressbook
+   $abook = addressbook_init();
+
+   // Create search form 
+   if($show == "form") {
+      printf("<FORM NAME=sform TARGET=abookres ACTION=\"%s\" METHOD=\"POST\">\n",
+            $PHP_SELF);
+      printf("<TABLE BORDER=0 WIDTH=\"100%%\" HEIGHT=\"100%%\">");
+      printf("<TR><TD NOWRAP VALIGN=middle NOWRAP>\n");
+      printf("  <STRONG>%s</STRONG>\n", _("Search for"));
+      printf("  <INPUT TYPE=text NAME=query VALUE=\"%s\" SIZE=26>\n",
+            htmlspecialchars($query));
+
+      // List all backends to allow the user to choose where to search
+      if($abook->numbackends > 1) {
+        printf("<STRONG>%s</STRONG>&nbsp;<SELECT NAME=backend>\n", 
+               _("in"));
+        printf("<OPTION VALUE=-1 SELECTED>%s\n", 
+               _("All address books"));
+        $ret = $abook->get_backend_list();
+        while(list($k,$v) = each($ret)) 
+           printf("<OPTION VALUE=%d SELECTED>%s\n", $v->bnum, $v->sname);
+        printf("</SELECT>\n");
+      } else {
+        printf("<INPUT TYPE=hidden NAME=backend VALUE=-1>\n");
+      }
+
+      printf("<INPUT TYPE=submit VALUE=\"%s\">",
+            _("Search"));
+      printf("&nbsp;|&nbsp;<INPUT TYPE=submit VALUE=\"%s\" NAME=listall>\n",
+             _("List all"));
+      printf("</TD><TD ALIGN=right>\n");
+      printf("<INPUT TYPE=button VALUE=\"%s\" onclick=\"parent.close();\">\n",
+             _("Close window"));
+      printf("</TD></TR></TABLE></FORM>\n");
+   } else
+
+   // Show personal addressbook
+   if($show == "blank" || !empty($listall)) {
+
+      if($backend != -1 || $show == "blank") {
+        if($show == "blank") 
+           $backend = $abook->localbackend;
+
+        //printf("<H3 ALIGN=center>%s</H3>\n", $abook->backends[$backend]->sname);
+
+        $res = $abook->list_addr($backend);
+
+        if(is_array($res)) {
+           display_result($res, false);
+        } else {
+           printf("<P ALIGN=center><STRONG>"._("Unable to list addresses from %s").
+                  "</STRONG></P>\n", $abook->backends[$backend]->sname);
+        }
+
+      } else {
+        $res = $abook->list_addr();
+        display_result($res, true);
+      }
+
+   } else
 
    // Do the search
-   if(!empty($query)) {
-      $abook = addressbook_init();
-      $res = $abook->s_search($query);
+   if(!empty($query) && empty($listall)) {
+
+      if($backend == -1) {
+        $res = $abook->s_search($query);
+      } else {
+        $res = $abook->s_search($query, $backend);
+      }
 
       if(!is_array($res)) {
         printf("<P ALIGN=center><BR>%s:<br>%s</P>\n</BODY></HTML>\n",
@@ -159,28 +251,7 @@ function bcc_address($addr) {
         exit;
       }
 
-      // List search results
-      $line = 0;
-      print "<table border=0 width=\"98%\" align=center>";
-      printf("<tr bgcolor=\"$color[9]\"><TH align=left>&nbsp;".
-             "<TH align=left>&nbsp;%s<TH align=left>&nbsp;%s".
-            "<TH align=left>&nbsp;%s<TH align=left width=\"10%%\">".
-            "&nbsp;%s</tr>\n",
-             _("Name"), _("E-mail"), _("Info"), _("Source"));
-
-      while(list($key, $row) = each($res)) {
-        printf("<tr%s nowrap><td nowrap align=center width=\"5%%\">".
-               "<a href=\"javascript:to_address('%s');\">To</A> | ".
-               "<a href=\"javascript:cc_address('%s');\">Cc</A>".
-               "<td nowrap>&nbsp;%s&nbsp;<td nowrap>&nbsp;".
-                "<a href=\"javascript:to_and_close('%s');\">%s</A>&nbsp;".
-               "<td nowrap>&nbsp;%s&nbsp;<td nowrap>&nbsp;%s</tr>\n", 
-               ($line % 2) ? " bgcolor=\"$color[0]\"" : "", $row["email"],
-               $row["email"], $row["name"], $row["email"], $row["email"],
-                $row["label"], $row["source"]);
-        $line++;
-      }
-      print "</TABLE>";
+      display_result($res);
    }
 ?>