Add template for address book listings along with required files
authorstevetruckstuff <stevetruckstuff@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Mon, 14 Aug 2006 15:50:43 +0000 (15:50 +0000)
committerstevetruckstuff <stevetruckstuff@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Mon, 14 Aug 2006 15:50:43 +0000 (15:50 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@11584 7612ce4b-ef26-0410-bec9-ea0150e637f0

src/addressbook.php
templates/default/addressbook_list.tpl [new file with mode: 0644]
templates/default/stylesheet.tpl
templates/util_addressbook.php [new file with mode: 0644]

index 7b93392..8b5c68b 100644 (file)
@@ -26,13 +26,14 @@ require_once(SM_PATH . 'functions/forms.php');
 /** lets get the global vars we may need */
 
 /* From the address form */
-sqgetGlobalVar('addaddr',   $addaddr,   SQ_POST);
-sqgetGlobalVar('editaddr',  $editaddr,  SQ_POST);
-sqgetGlobalVar('deladdr',   $deladdr,   SQ_POST);
-sqgetGlobalVar('sel',       $sel,       SQ_POST);
-sqgetGlobalVar('oldnick',   $oldnick,   SQ_POST);
-sqgetGlobalVar('backend',   $backend,   SQ_POST);
-sqgetGlobalVar('doedit',    $doedit,    SQ_POST);
+//sqgetGlobalVar('change_abook',  $change_abook,  SQ_POST);
+sqgetGlobalVar('addaddr',       $addaddr,       SQ_POST);
+sqgetGlobalVar('editaddr',      $editaddr,      SQ_POST);
+sqgetGlobalVar('deladdr',       $deladdr,       SQ_POST);
+sqgetGlobalVar('sel',           $sel,           SQ_POST);
+sqgetGlobalVar('oldnick',       $oldnick,       SQ_POST);
+sqgetGlobalVar('backend',       $backend,       SQ_POST);
+sqgetGlobalVar('doedit',        $doedit,        SQ_POST);
 
 /* Get sorting order */
 $abook_sort_order = get_abook_sort();
@@ -47,12 +48,29 @@ $abook = addressbook_init(true, false);
 
 // FIXME: do we have to stop use of address book, when localbackend is not present.
 if($abook->localbackend == 0) {
-    plain_error_message(
-            _("No personal address book is defined. Contact administrator."),
-            $color);
+    plain_error_message(_("No personal address book is defined. Contact administrator."));
     exit();
 }
 
+$current_backend = $abook->localbackend;
+if (sqgetGlobalVar('new_bnum',$new_backend,SQ_POST) && array_key_exists($new_backend,$abook->backends)) {
+    $current_backend = (int) $new_backend;
+}
+
+$abook_selection = '&nbsp;';
+$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)
+            .addSubmit(_("Change"),'change_abook');
+    }
+}
+
 $defdata   = array();
 $formerror = '';
 $abortform = false;
@@ -61,6 +79,7 @@ $defselected  = array();
 $form_url = 'addressbook.php';
 
 /* Handle user's actions */
+//if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'POST' && !isset($change_abook)) {
 if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'POST') {
 
     /**************************************************
@@ -214,165 +233,56 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P
 
 /* Display error messages */
 if (!empty($formerror)) {
-    echo html_tag( 'table',
-            html_tag( 'tr',
-                html_tag( 'td',
-                    "\n". '<br /><strong><font color="' . $color[2] .
-                    '">' . _("ERROR") . ': ' . nl2br(htmlspecialchars($formerror)) . '</font></strong>' ."\n",
-                    'center' )
-                ),
-            'center', '', 'width="100%"' );
+    plain_error_message(nl2br(htmlspecialchars($formerror)));
 }
 
 
 /* Display the address management part */
-if ($showaddrlist) {
-    /* Get and sort address list */
-    $alist = $abook->list_addr();
-    if(!is_array($alist)) {
-        plain_error_message(nl2br(htmlspecialchars($abook->error)), $color);
-        exit;
-    }
-
+$addresses = array();
+while (list($k, $backend) = each ($abook->backends)) {
+    $a = array();
+    $a['BackendID'] = $backend->bnum;
+    $a['BackendSource'] = $backend->sname;
+    $a['BackendWritable'] = $backend->writeable;
+    $a['Addresses'] = array();
+
+    $alist = $abook->list_addr($backend->bnum);
     usort($alist,'alistcmp');
-    $prevbackend = -1;
-    $headerprinted = false;
-
-    echo html_tag( 'p', '<a href="#AddAddress">' . _("Add address") . '</a>', 'center' ) . "\n";
-
-    /* List addresses */
-    if (count($alist) > 0) {
-        echo addForm($form_url, 'post');
-        if ($abook->add_extra_field) {
-            $abook_fields = 6;
-        } else {
-            $abook_fields = 5;
-        }
-        while(list($undef,$row) = each($alist)) {
-
-            /* New table header for each backend */
-            if($prevbackend != $row['backend']) {
-                if($prevbackend < 0) {
-                    echo html_tag( 'table',
-                            html_tag( 'tr',
-                                html_tag( 'td',
-                                    addSubmit(_("Edit selected"), 'editaddr').
-                                    addSubmit(_("Delete selected"), 'deladdr'),
-                                    'center', '', "colspan=\"$abook_fields\"" )
-                                ) .
-                            html_tag( 'tr',
-                                html_tag( 'td', '&nbsp;<br />', 'center', '', "colspan=\"$abook_fields\"" )
-                                ),
-                            'center' );
-                    echo "\n<!-- start of address book table -->\n" .
-                        html_tag( 'table', '', 'center', '', 'border="0" cellpadding="1" cellspacing="0" width="90%"' ) .
-                        html_tag( 'tr', "\n" .
-                                html_tag( 'th', '&nbsp;', 'left', '', 'width="1%"' ) . "\n" .
-                                html_tag( 'th', _("Nickname") .
-                                    show_abook_sort_button($abook_sort_order, _("sort by nickname"), 0, 1),
-                                    'left', '', 'width="1%"' ) . "\n" .
-                                html_tag( 'th', _("Name") .
-                                    show_abook_sort_button($abook_sort_order, _("sort by name"), 2, 3),
-                                    'left', '', 'width="1%"' ) . "\n" .
-                                html_tag( 'th', _("E-mail") .
-                                    show_abook_sort_button($abook_sort_order, _("sort by email"), 4, 5),
-                                    'left', '', 'width="1%"' ) . "\n" .
-                                html_tag( 'th', _("Info") .
-                                    show_abook_sort_button($abook_sort_order, _("sort by info"), 6, 7),
-                                    'left', '', 'width="1%"' ) .
-                                  ($abook->add_extra_field ? html_tag( 'th', '&nbsp;','left', '', 'width="1%"'): '') .
-                                "\n",
-                                '', $color[9] ) . "\n";
-                }
-
-                // Separate different backends with <hr />
-                if($prevbackend > 0) {
-                    echo  html_tag( 'tr',
-                            html_tag( 'td', "<hr />", 'center', '' ,"colspan=\"$abook_fields\"" )
-                            );
-                }
-
-                // Print backend name
-                echo html_tag( 'tr',
-                        html_tag( 'td', "\n" . '<strong>' . $row['source'] . '</strong>' . "\n", 'center', $color[0] ,"colspan=\"$abook_fields\"" )
-                        );
-
-                $line = 0;
-                $headerprinted = true;
-            } /* End of header */
-
-            $prevbackend = $row['backend'];
-
-            /* Check if this user is selected */
-            $selected = in_array($row['backend'] . ':' . $row['nickname'], $defselected);
-
-            /* Print one row, with alternating color */
-            if ($line % 2) {
-                $tr_bgcolor = $color[12];
-            } else {
-                $tr_bgcolor = $color[4];
-            }
-            echo html_tag( 'tr', '', '', $tr_bgcolor);
-            if ($abook->backends[$row['backend']]->writeable) {
-                $id = $row['backend'].':'.$row['nickname'];
-                echo html_tag( 'td',
-                               '<small>' .
-                               addCheckBox("sel[$id]", $selected, $id).
-                               '</small>' ,
-                               'center', '', 'valign="top" width="1%"' );
-                $label1 = '<label for="sel_'.$id.'_">'; $label2='</label>';
-            } else {
-                echo html_tag( 'td',
-                               '&nbsp;' ,
-                               'center', '', 'valign="top" width="1%"' );
-                $label1 = $label2 = '';
-            }
-            echo html_tag( 'td',
-                           '&nbsp;' . $label1 . htmlspecialchars($row['nickname']) . $label2 . '&nbsp;',
-                           'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' );
-
-            echo html_tag( 'td',
-                           '&nbsp;' . $label1 . htmlspecialchars($row['name']) . $label2 . '&nbsp;',
-                           'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' );
-
-            // email address column
-            echo html_tag( 'td', '', 'left', '', 'valign="top" width="1%" style="white-space: nowrap;"' ) . '&nbsp;';
-            $email = $abook->full_address($row);
-            echo makeComposeLink('src/compose.php?send_to='.rawurlencode($email),
-                    htmlspecialchars($row['email'])).
-                '&nbsp;</td>'."\n";
-
-            // info column
-            echo html_tag( 'td', '&nbsp;' . htmlspecialchars($row['label']) . '&nbsp;', 'left', '', 'valign="top" width="1%"' );
-
-            // add extra column if third party backend needs it
-            if ($abook->add_extra_field) {
-                echo html_tag( 'td',
-                               '&nbsp;' . (isset($row['extra']) ? $row['extra'] : '') . '&nbsp;',
-                               'left', '', 'valign="top" width="1%"' );
-            }
-            echo "</tr>\n";
-            $line++;
-        }
-        echo "</table>" .
-            "\n<!-- end of address book table -->\n";
-
-        /* End of list. Add edit/delete select buttons */
-        if ($headerprinted) {
-            echo html_tag( 'table',
-                    html_tag( 'tr',
-                        html_tag( 'td',
-                            addSubmit(_("Edit selected"), 'editaddr') .
-                            addSubmit(_("Delete selected"), 'deladdr'),
-                            'center', '', "colspan=\"$abook_fields\"" )
-                        ),
-                    'center' );
-        }
-        echo "</form>\n";
+    $start = 200;
+    $count = count($alist);
+    if ($start >= $count) $start = 0;
+    $alist = array_slice($alist,$start,15);
+   
+    while(list($undef,$row) = each($alist)) {
+        $contact = array (
+                            'FirstName'     => htmlspecialchars($row['firstname']),
+                            'LastName'      => htmlspecialchars($row['lastname']),
+                            'FullName'      => htmlspecialchars($row['name']),
+                            'NickName'      => htmlspecialchars($row['nickname']),
+                            'Email'         => htmlspecialchars($row['email']),
+                            'FullAddress'   => htmlspecialchars($abook->full_address($row)),
+                            'Info'          => htmlspecialchars($row['label']),
+                            'Extra'         => (isset($row['extra']) ? $row['extra'] : NULL),
+                         );
+        $a['Addresses'][] = $contact;
     }
-} /* end of addresslist */
+  
+    $addresses[$backend->bnum] = $a;
+}
 
 
+if ($showaddrlist) {
+    echo addForm($form_url, 'post');
+    
+    $oTemplate->assign('addresses', $addresses);
+    $oTemplate->assign('current_backend', $current_backend);
+    $oTemplate->assign('backends', $list_backends);
+        
+    $oTemplate->display('addressbook_list.tpl');
+    
+    echo "</form>\n";
+}
+
 /* Display the "new address" form */
 echo '<a name="AddAddress"></a>' . "\n";
 abook_create_form($form_url,'addaddr',_("Add to address book"),_("Add address"),$defdata);
@@ -382,5 +292,6 @@ echo "</form>\n";
 echo "<!-- start of addressbook_bottom hook-->\n";
 do_hook('addressbook_bottom');
 echo "\n<!-- end of addressbook_bottom hook-->\n";
+
 $oTemplate->display('footer.tpl');
-?>
+?>
\ No newline at end of file
diff --git a/templates/default/addressbook_list.tpl b/templates/default/addressbook_list.tpl
new file mode 100644 (file)
index 0000000..4561647
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+/**
+ * addressbook_list.tpl
+ *
+ * Template for the basic address book list
+ * 
+ * The following variables are available in this template:
+ *      $current_backend - integer containing backend currently displayed.
+ *      $abook_select    - string containing HTML to display the address book
+ *                         selection drop down
+ *      $backends        - array containing all available backends for selection.
+ *                         This will be empty if only 1 backend is available! 
+ *      $addresses - array of addresses in the address book.  Each element
+ *                   is an array containing the following fields:
+ *          $el['BackendID']     - integer unique identifier for each source of 
+ *                                 addresses in the book
+ *          $el['BackendSource'] - description of each source of addresses
+ *          $el['BackendWritable'] - boolean TRUE if the address book can be
+ *                                 modified.  FALSE otherwise.
+ *          $el['Addresses']     - array containing address from this source.
+ *                                 Each array element contains the following:
+ *              $el['FirstName'] - The entry's first name
+ *              $el['LastName']  - The entry's last name (surname)
+ *              $el['FullName']  - The entry's full name (first + last)
+ *              $el['NickName']  - The entry's nickname
+ *              $el['Email']     - duh
+ *              $el['FullAddress'] - Email with full name or nick name
+ *                                 optionally prepended.
+ *              $el['Info']      - Additional info about this contact
+ *              $el['Extra']     - Additional field, if provided.  NULL if this
+ *                                 field is not provided by the book.
+ *
+ * @copyright &copy; 1999-2006 The SquirrelMail Project Team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * @version $Id$
+ * @package squirrelmail
+ * @subpackage templates
+ */
+
+/** add required includes **/
+include_once(SM_PATH . 'templates/util_addressbook.php');
+
+/** extract template variables **/
+extract($t);
+
+#echo dump_array($addresses).'<br>';
+/** Begin template **/
+$source = $addresses[$current_backend];
+$abook_has_extra_field = isset($source['Addresses'][0]) && !is_null($source['Addresses'][0]['Extra']);
+$colspan = $abook_has_extra_field ? 6 : 5;
+?>
+<div id="addressList">
+<table cellspacing="0">
+ <tr>
+  <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" />
+  </td>
+  <td colspan=<?php echo '"'.($colspan - 3).'"'; ?> class="abookSwitch">
+   <select name="new_bnum">
+    <?php
+        foreach ($backends as $id=>$name) {
+            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" />
+  </td>
+ </tr>
+ <tr>
+  <td class="colHeader" style="width:1%"></td>
+  <td class="colHeader" style="width:15%"><?php echo addAbookSort('nickname'); ?></td>
+  <td class="colHeader"><?php echo addAbookSort('fullname'); ?></td>
+  <td class="colHeader"><?php echo addAbookSort('email'); ?></td>
+  <td class="colHeader"><?php echo addAbookSort('info'); ?></td>
+  <?php
+   if ($abook_has_extra_field) {
+    echo '<td class="colHeader"></td>';
+   }
+  ?>
+ </tr>
+ <?php
+    $count = 1;
+    if (count($source['Addresses']) == 0) {
+        echo '<tr><td class="abookEmpty" colspan="'.$colspan.'">'._("Address book is empty").'</td></tr>'."\n";
+    }
+    foreach ($source['Addresses'] as $contact) {
+        $id = $current_backend.':'.$contact['NickName'];
+        ?>
+ <tr class=<?php echo '"'.($count%2 ? 'even' : 'odd').'"'; ?>>
+  <td class="abookField" style="width:1%"><?php echo ($source['BackendWritable'] ? '<input type="checkbox" name="sel[]" value="'.$id.'" id="'.$id.'" />' : ''); ?></td>
+  <td class="abookField" style="width:15%"><label for=<?php echo '"'.$id.'"'; ?>><?php echo $contact['NickName']; ?></lable></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>
+        <?php 
+        if ($abook_has_extra_field) {
+            echo '<td class="abookField">'.$contact['Extra'].'</td>'."\n";
+        }
+        ?>
+ </tr>
+        <?php
+        $count++;
+    }
+?>
+</table>
+</div>
\ No newline at end of file
index ff073b3..14dd669 100644 (file)
@@ -136,6 +136,13 @@ td.header2  {
     padding-bottom: 4px;
 }
 
+tr.even {
+    background: <?php echo $color[12]; ?>;
+}
+tr.odd  {
+    background: <?php echo $color[4]; ?>;
+}
+
 .table_standard {
     border:1px solid <?php echo $color[0]; ?>;
 }
@@ -207,12 +214,6 @@ td.header2  {
 .table_messageList td.spacer {
     background: <?php echo $color[0]; ?>;
 }
-.table_messageList     tr.even {
-    background: <?php echo $color[12]; ?>;
-}
-.table_messageList     tr.odd  {
-    background: <?php echo $color[4]; ?>;
-}
 .table_messageList     tr.mouse_over   {
     background: <?php echo $color[5]; ?>;
 }
@@ -302,4 +303,63 @@ td.header2  {
     margin-right: auto;
     width: 80%;
     text-align: left;
+}
+
+/* addressbook_list.tpl defs */
+#addressList    {
+    text-align: center;
+}
+
+#addressList    input   {
+    font-size: 75%;
+}
+
+#addressList    select  {
+    font-size: 75%;
+}
+
+#addressList    table   {
+    margin-left: auto;
+    margin-right: auto;
+    width: 90%;
+    border: 1px solid <?php echo $color[9]; ?>;
+    margin-top: 8px;
+    margin-bottom: 8px;
+}
+
+#addressList    td  {
+    text-align: left;
+    padding: 2px;
+}
+
+#addressList    td.header1  {
+    text-align: center;
+    background: <?php echo $color[9]; ?>;
+}
+#addressList    td.abookSwitch  {
+    background: <?php echo $color[0]; ?>;
+    text-align: right;
+}
+
+#addressList    td.abookButtons  {
+    background: <?php echo $color[0]; ?>;
+}
+
+#addressList    td.abookField   {
+    border-left: 1px solid <?php echo $color[9]; ?>;
+    border-right: 1px solid <?php echo $color[9]; ?>;
+}
+
+#addressList    td.colHeader {
+    text-align: center;
+    font-weight: bold;
+    font-size: 98%;
+    background: <?php echo $color[9]; ?>;
+    padding-top: 0px;
+    padding-bottom: 0px;
+}
+
+#addressList    td.abookEmpty   {
+    text-align:center;
+    font-weight: bold;
 }
\ No newline at end of file
diff --git a/templates/util_addressbook.php b/templates/util_addressbook.php
new file mode 100644 (file)
index 0000000..ca2967b
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+/**
+ * util_addressbook.php
+ *
+ * Functions to make working with address books easier
+ * 
+ * @copyright &copy; 1999-2006 The SquirrelMail Project Team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * @version $Id$
+ * @package squirrelmail
+ * @subpackage templates
+ */
+
+/**
+ * Display a column header with sort buttons
+ * 
+ * @param string $field which field to display
+ * @author Steve Brown
+ * @since 1.5.2
+ */
+function addAbookSort ($field) {
+    global $abook_sort_order;
+    
+    switch ($field) {
+        case 'nickname':
+            $str = _("Nickname");
+            $alt = _("sort by nickname");
+            $down = 0;
+            $up = 1;
+            $has_sort = true;
+            break;
+        case 'fullname':
+            $str = _("Name");
+            $alt = _("sort by name");
+            $down = 2;
+            $up = 3;
+            $has_sort = true;
+            break;
+        case 'email':
+            $str = _("E-mail");
+            $alt = _("sort by email");
+            $down = 4;
+            $up = 5;
+            $has_sort = true;
+            break;
+        case 'info':
+            $str = _("Info");
+            $alt = _("sort by info");
+            $down = 6;
+            $up = 7;
+            $has_sort = true;
+            break;
+        default:
+            return 'BAD SORT FIELD GIVEN: "'.$field.'"';
+    }
+    
+    return $str . ($has_sort ? show_abook_sort_button($abook_sort_order, $alt, $down, $up) : '');
+}
+
+/**
+ * Create a link to compose an email to the email address given.
+ * 
+ * @param array $row contact as given to the addressbook_list.tpl template
+ * @author Steve Brown
+ * @since 1.5.2
+ */
+function composeLink ($row) {
+    return makeComposeLink('src/compose.php?send_to=' .
+                           rawurlencode($row['FullAddress']),
+                           htmlspecialchars($row['Email']));
+}
+?>
\ No newline at end of file