瀏覽代碼

moving functions from src/addressbook.php to functions/addressbook.php - possible code reuse
rearranged functions in functions/addressbook.php (functions first, classes next)
added abook_create_form function
if value of address book field contains array, create select box instead of input field.

tokul 21 年之前
父節點
當前提交
7d8e72b675
共有 2 個文件被更改,包括 225 次插入225 次删除
  1. 220 106
      functions/addressbook.php
  2. 5 119
      src/addressbook.php

+ 220 - 106
functions/addressbook.php

@@ -1,5 +1,4 @@
 <?php
-
 /**
  * addressbook.php
  *
@@ -87,15 +86,15 @@ function addressbook_init($showerr = true, $onlylocal = false) {
     if (isset($addrbook_global_dsn) && !empty($addrbook_global_dsn)) {
       /* Database configured */
       if (!isset($addrbook_global_table) || empty($addrbook_global_table)) {
-	$addrbook_global_table = 'global_abook';
+          $addrbook_global_table = 'global_abook';
       }
       $r = $abook->add_backend('database',
-			       Array('dsn' => $addrbook_global_dsn,
-				     'owner' => 'global',
-				     'name' => _("Global address book"),
-				     'writeable' => $addrbook_global_writeable,
-				     'listing' => $addrbook_global_listing,
-				     'table' => $addrbook_global_table));
+                               Array('dsn' => $addrbook_global_dsn,
+                                     'owner' => 'global',
+                                     'name' => _("Global address book"),
+                                     'writeable' => $addrbook_global_writeable,
+                                     'listing' => $addrbook_global_listing,
+                                     'table' => $addrbook_global_table));
     }
 
     /*
@@ -131,6 +130,30 @@ function addressbook_init($showerr = true, $onlylocal = false) {
     return $abook;
 }
 
+/**
+ * Display the "new address" form
+ *
+ * Form is not closed and you must add closing form tag.
+ * @since 1.5.1
+ * @param string $form_url form action url
+ * @param string $name form name
+ * @param string $title form title
+ * @param string $button form button name
+ * @param array $defdata values of form fields
+ */
+function abook_create_form($form_url,$name,$title,$button,$defdata=array()) {
+    global $color;
+    echo addForm($form_url, 'post', 'f_add').
+        html_tag( 'table',
+                  html_tag( 'tr',
+                            html_tag( 'td', "\n". '<strong>' . $title . '</strong>' . "\n",
+                                      'center', $color[0]
+                                      )
+                            )
+                  , 'center', '', 'width="100%"' ) ."\n";
+    address_form($name, $button, $defdata);
+}
+
 
 /*
  *   Had to move this function outside of the Addressbook Class
@@ -149,13 +172,200 @@ function addressbook_cmp($a,$b) {
 
 }
 
+/**
+ * Make an input field
+ * @param string $label
+ * @param string $field
+ * @param string $name
+ * @param string $size
+ * @param array $values
+ * @param string $add
+ */
+function addressbook_inp_field($label, $field, $name, $size, $values, $add='') {
+    global $color;
+    $value = ( isset($values[$field]) ? $values[$field] : '');
+
+    if (is_array($value)) {
+        $td_str = addSelect($name.'['.$field.']', $value);
+    } else {
+        $td_str = addInput($name.'['.$field.']', $value, $size);
+    }
+    $td_str .= $add ;
+
+    return html_tag( 'tr' ,
+            html_tag( 'td', $label . ':', 'right', $color[4]) .
+            html_tag( 'td', $td_str, 'left', $color[4])
+            )
+        . "\n";
+}
+
+/**
+ * Output form to add and modify address data
+ */
+function address_form($name, $submittext, $values = array()) {
+    global $color, $squirrelmail_language;
+
+    if ($squirrelmail_language == 'ja_JP') {
+        echo html_tag( 'table',
+                addressbook_inp_field(_("Nickname"),     'nickname', $name, 15, $values,
+                    ' <small>' . _("Must be unique") . '</small>') .
+                addressbook_inp_field(_("E-mail address"),  'email', $name, 45, $values, '') .
+                addressbook_inp_field(_("Last name"),    'lastname', $name, 45, $values, '') .
+                addressbook_inp_field(_("First name"),  'firstname', $name, 45, $values, '') .
+                addressbook_inp_field(_("Additional info"), 'label', $name, 45, $values, '') .
+                list_writable_backends($name) .
+                html_tag( 'tr',
+                    html_tag( 'td',
+                        addSubmit($submittext, $name.'[SUBMIT]'),
+                        'center', $color[4], 'colspan="2"')
+                    )
+                , 'center', '', 'border="0" cellpadding="1" width="90%"') ."\n";
+    } else {
+        echo html_tag( 'table',
+                addressbook_inp_field(_("Nickname"),     'nickname', $name, 15, $values,
+                    ' <small>' . _("Must be unique") . '</small>') .
+                addressbook_inp_field(_("E-mail address"),  'email', $name, 45, $values, '') .
+                addressbook_inp_field(_("First name"),  'firstname', $name, 45, $values, '') .
+                addressbook_inp_field(_("Last name"),    'lastname', $name, 45, $values, '') .
+                addressbook_inp_field(_("Additional info"), 'label', $name, 45, $values, '') .
+                list_writable_backends($name) .
+                html_tag( 'tr',
+                    html_tag( 'td',
+                        addSubmit($submittext, $name.'[SUBMIT]') ,
+                        'center', $color[4], 'colspan="2"')
+                    )
+                , 'center', '', 'border="0" cellpadding="1" width="90%"') ."\n";
+    }
+}
+
+function list_writable_backends($name) {
+    global $color, $abook;
+    if ( $name != 'addaddr' ) { return; }
+    if ( $abook->numbackends > 1 ) {
+        $ret = '<select name="backend">';
+        $backends = $abook->get_backend_list();
+        while (list($undef,$v) = each($backends)) {
+            if ($v->writeable) {
+                $ret .= '<option value="' . $v->bnum;
+                $ret .= '">' . $v->sname . "</option>\n";
+            }
+        }
+        $ret .= "</select>";
+        return html_tag( 'tr',
+                html_tag( 'td', _("Add to:"),'right', $color[4] ) .
+                html_tag( 'td', $ret, 'left', $color[4] )) . "\n";
+    } else {
+        return html_tag( 'tr',
+                html_tag( 'td',
+                    addHidden('backend', '1'),
+                    'center', $color[4], 'colspan="2"')) . "\n";
+    }
+}
+
+/**
+ * Sort array by the key "name"
+ */
+function alistcmp($a,$b) {
+    $abook_sort_order=get_abook_sort();
+
+    switch ($abook_sort_order) {
+    case 0:
+    case 1:
+      $abook_sort='nickname';
+      break;
+    case 4:
+    case 5:
+      $abook_sort='email';
+      break;
+    case 6:
+    case 7:
+      $abook_sort='label';
+      break;
+    case 2:
+    case 3:
+    case 8:
+    default:
+      $abook_sort='name';
+    }
+
+    if ($a['backend'] > $b['backend']) {
+        return 1;
+    } else {
+        if ($a['backend'] < $b['backend']) {
+            return -1;
+        }
+    }
+
+    if( (($abook_sort_order+2) % 2) == 1) {
+      return (strtolower($a[$abook_sort]) < strtolower($b[$abook_sort])) ? 1 : -1;
+    } else {
+      return (strtolower($a[$abook_sort]) > strtolower($b[$abook_sort])) ? 1 : -1;
+    }
+}
+
+/**
+ * Address book sorting options
+ *
+ * returns address book sorting order
+ * @return integer book sorting options order
+ */
+function get_abook_sort() {
+    global $data_dir, $username;
+
+    /* get sorting order */
+    if(sqgetGlobalVar('abook_sort_order', $temp, SQ_GET)) {
+      $abook_sort_order = (int) $temp;
+
+      if ($abook_sort_order < 0 or $abook_sort_order > 8)
+        $abook_sort_order=8;
+
+      setPref($data_dir, $username, 'abook_sort_order', $abook_sort_order);
+    } else {
+      /* get previous sorting options. default to unsorted */
+      $abook_sort_order = getPref($data_dir, $username, 'abook_sort_order', 8);
+    }
+
+    return $abook_sort_order;
+}
+
+/**
+ * This function shows the address book sort button.
+ *
+ * @param integer $abook_sort_order current sort value
+ * @param string $alt_tag alt tag value (string visible to text only browsers)
+ * @param integer $Down sort value when list is sorted ascending
+ * @param integer $Up sort value when list is sorted descending
+ * @return string html code with sorting images and urls
+ */
+function show_abook_sort_button($abook_sort_order, $alt_tag, $Down, $Up ) {
+    global $form_url;
+
+     /* Figure out which image we want to use. */
+    if ($abook_sort_order != $Up && $abook_sort_order != $Down) {
+        $img = 'sort_none.png';
+        $which = $Up;
+    } elseif ($abook_sort_order == $Up) {
+        $img = 'up_pointer.png';
+        $which = $Down;
+    } else {
+        $img = 'down_pointer.png';
+        $which = 8;
+    }
+
+      /* Now that we have everything figured out, show the actual button. */
+    return ' <a href="' . $form_url .'?abook_sort_order=' . $which
+         . '"><img src="../images/' . $img
+         . '" border="0" width="12" height="10" alt="' . $alt_tag . '" title="'
+         . _("Click here to change the sorting of the address list") .'" /></a>';
+}
+
 
 /**
  * This is the main address book class that connect all the
  * backends and provide services to the functions above.
  * @package squirrelmail
+ * @subpackage addressbook
  */
-
 class AddressBook {
 
     var $backends    = array();
@@ -490,6 +700,7 @@ class AddressBook {
 /**
  * Generic backend that all other backends extend
  * @package squirrelmail
+ * @subpackage addressbook
  */
 class addressbook_backend {
 
@@ -546,103 +757,6 @@ class addressbook_backend {
 
 }
 
-/**
- * Sort array by the key "name"
- */
-function alistcmp($a,$b) {
-    $abook_sort_order=get_abook_sort();
-
-    switch ($abook_sort_order) {
-    case 0:
-    case 1:
-      $abook_sort='nickname';
-      break;
-    case 4:
-    case 5:
-      $abook_sort='email';
-      break;
-    case 6:
-    case 7:
-      $abook_sort='label';
-      break;
-    case 2:
-    case 3:
-    case 8:
-    default:
-      $abook_sort='name';
-    }
-
-    if ($a['backend'] > $b['backend']) {
-        return 1;
-    } else {
-        if ($a['backend'] < $b['backend']) {
-            return -1;
-        }
-    }
-
-    if( (($abook_sort_order+2) % 2) == 1) {
-      return (strtolower($a[$abook_sort]) < strtolower($b[$abook_sort])) ? 1 : -1;
-    } else {
-      return (strtolower($a[$abook_sort]) > strtolower($b[$abook_sort])) ? 1 : -1;
-    }
-}
-
-/**
- * Address book sorting options
- *
- * returns address book sorting order
- * @return integer book sorting options order
- */
-function get_abook_sort() {
-    global $data_dir, $username;
-
-    /* get sorting order */
-    if(sqgetGlobalVar('abook_sort_order', $temp, SQ_GET)) {
-      $abook_sort_order = (int) $temp;
-
-      if ($abook_sort_order < 0 or $abook_sort_order > 8)
-        $abook_sort_order=8;
-
-      setPref($data_dir, $username, 'abook_sort_order', $abook_sort_order);
-    } else {
-      /* get previous sorting options. default to unsorted */
-      $abook_sort_order = getPref($data_dir, $username, 'abook_sort_order', 8);
-    }
-
-    return $abook_sort_order;
-}
-
-/**
- * This function shows the address book sort button.
- *
- * @param integer $abook_sort_order current sort value
- * @param string $alt_tag alt tag value (string visible to text only browsers)
- * @param integer $Down sort value when list is sorted ascending
- * @param integer $Up sort value when list is sorted descending
- * @return string html code with sorting images and urls
- */
-function show_abook_sort_button($abook_sort_order, $alt_tag, $Down, $Up ) {
-    global $form_url;
-
-     /* Figure out which image we want to use. */
-    if ($abook_sort_order != $Up && $abook_sort_order != $Down) {
-        $img = 'sort_none.png';
-        $which = $Up;
-    } elseif ($abook_sort_order == $Up) {
-        $img = 'up_pointer.png';
-        $which = $Down;
-    } else {
-        $img = 'down_pointer.png';
-        $which = 8;
-    }
-
-      /* Now that we have everything figured out, show the actual button. */
-    return ' <a href="' . $form_url .'?abook_sort_order=' . $which
-         . '"><img src="../images/' . $img
-         . '" border="0" width="12" height="10" alt="' . $alt_tag . '" title="'
-         . _("Click here to change the sorting of the address list") .'" /></a>';
-}
-
 /*
   PHP 5 requires that the class be made first, which seems rather
   logical, and should have been the way it was generated the first time.

+ 5 - 119
src/addressbook.php

@@ -20,11 +20,8 @@ define('SM_PATH','../');
 
 /** SquirrelMail required files. */
 require_once(SM_PATH . 'include/validate.php');
-require_once(SM_PATH . 'functions/global.php');
 require_once(SM_PATH . 'functions/display_messages.php');
 require_once(SM_PATH . 'functions/addressbook.php');
-require_once(SM_PATH . 'functions/strings.php');
-require_once(SM_PATH . 'functions/html.php');
 require_once(SM_PATH . 'functions/forms.php');
 
 /** lets get the global vars we may need */
@@ -47,92 +44,6 @@ sqgetGlobalVar('doedit',    $doedit,    SQ_POST);
 /* Get sorting order */
 $abook_sort_order = get_abook_sort();
 
-/**
- * Make an input field
- * @param string $label
- * @param string $field
- * @param string $name
- * @param string $size
- * @param array $values
- * @param string $add
- */
-function addressbook_inp_field($label, $field, $name, $size, $values, $add) {
-    global $color;
-    $value = ( isset($values[$field]) ? $values[$field] : '');
-
-    $td_str = addInput($name.'['.$field.']', $value, $size)
-        . $add ;
-
-    return html_tag( 'tr' ,
-            html_tag( 'td', $label . ':', 'right', $color[4]) .
-            html_tag( 'td', $td_str, 'left', $color[4])
-            )
-        . "\n";
-}
-
-/**
- * Output form to add and modify address data
- */
-function address_form($name, $submittext, $values = array()) {
-    global $color, $squirrelmail_language;
-
-    if ($squirrelmail_language == 'ja_JP') {
-        echo html_tag( 'table',
-                addressbook_inp_field(_("Nickname"),     'nickname', $name, 15, $values,
-                    ' <small>' . _("Must be unique") . '</small>') .
-                addressbook_inp_field(_("E-mail address"),  'email', $name, 45, $values, '') .
-                addressbook_inp_field(_("Last name"),    'lastname', $name, 45, $values, '') .
-                addressbook_inp_field(_("First name"),  'firstname', $name, 45, $values, '') .
-                addressbook_inp_field(_("Additional info"), 'label', $name, 45, $values, '') .
-                list_writable_backends($name) .
-                html_tag( 'tr',
-                    html_tag( 'td',
-                        addSubmit($submittext, $name.'[SUBMIT]'),
-                        'center', $color[4], 'colspan="2"')
-                    )
-                , 'center', '', 'border="0" cellpadding="1" width="90%"') ."\n";
-    } else {
-        echo html_tag( 'table',
-                addressbook_inp_field(_("Nickname"),     'nickname', $name, 15, $values,
-                    ' <small>' . _("Must be unique") . '</small>') .
-                addressbook_inp_field(_("E-mail address"),  'email', $name, 45, $values, '') .
-                addressbook_inp_field(_("First name"),  'firstname', $name, 45, $values, '') .
-                addressbook_inp_field(_("Last name"),    'lastname', $name, 45, $values, '') .
-                addressbook_inp_field(_("Additional info"), 'label', $name, 45, $values, '') .
-                list_writable_backends($name) .
-                html_tag( 'tr',
-                    html_tag( 'td',
-                        addSubmit($submittext, $name.'[SUBMIT]') ,
-                        'center', $color[4], 'colspan="2"')
-                    )
-                , 'center', '', 'border="0" cellpadding="1" width="90%"') ."\n";
-    }
-}
-
-function list_writable_backends($name) {
-    global $color, $abook;
-    if ( $name != 'addaddr' ) { return; }
-    if ( $abook->numbackends > 1 ) {
-        $ret = '<select name="backend">';
-        $backends = $abook->get_backend_list();
-        while (list($undef,$v) = each($backends)) {
-            if ($v->writeable) {
-                $ret .= '<option value="' . $v->bnum;
-                $ret .= '">' . $v->sname . "</option>\n";
-            }
-        }
-        $ret .= "</select>";
-        return html_tag( 'tr',
-                html_tag( 'td', _("Add to:"),'right', $color[4] ) .
-                html_tag( 'td', $ret, 'left', $color[4] )) . "\n";
-    } else {
-        return html_tag( 'tr',
-                html_tag( 'td',
-                    addHidden('backend', '1'),
-                    'center', $color[4], 'colspan="2"')) . "\n";
-    }
-}
-
 /* Open addressbook, with error messages on but without LDAP (the *
  * second "true"). Don't need LDAP here anyway                    */
 $abook = addressbook_init(true, true);
@@ -245,15 +156,7 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P
                         $olddata = $abook->lookup($enick, $ebackend);
 
                         /* Display the "new address" form */
-                        echo addForm($form_url, 'post').
-                            html_tag( 'table',
-                                    html_tag( 'tr',
-                                        html_tag( 'td',
-                                            "\n". '<strong>' . _("Update address") . '</strong>' ."\n",
-                                            'center', $color[0] )
-                                        ),
-                                    'center', '', 'width="100%" ' );
-                        address_form("editaddr", _("Update address"), $olddata);
+			abook_create_form($form_url,'editaddr',_("Update address"),_("Update address"),$olddata);
                         echo addHidden('oldnick', $olddata['nickname']).
                             addHidden('backend', $olddata['backend']).
                             addHidden('doedit', '1').
@@ -279,17 +182,8 @@ if(sqgetGlobalVar('REQUEST_METHOD', $req_method, SQ_SERVER) && $req_method == 'P
                                     'center', '', 'width="100%"' );
 
                             /* Display the "new address" form again */
-                            echo addForm($form_url, 'post').
-                                html_tag( 'table',
-                                        html_tag( 'tr',
-                                            html_tag( 'td',
-                                                "\n". '<strong>' . _("Update address") . '</strong>' ."\n",
-                                                'center', $color[0] )
-                                            ),
-                                        'center', '', 'width="100%"' );
-                            address_form("editaddr", _("Update address"), $newdata);
-                            echo 
-                                addHidden('oldnick', $oldnick).
+			    abook_create_form($form_url,'editaddr',_("Update address"),_("Update address"),$newdata);
+                            echo addHidden('oldnick', $oldnick).
                                 addHidden('backend', $backend).
                                 addHidden('doedit',  '1').
                                 "\n" . '</form>';
@@ -473,16 +367,8 @@ if ($showaddrlist) {
 
 
 /* Display the "new address" form */
-echo '<a name="AddAddress"></a>' . "\n" .
-    addForm($form_url, 'post', 'f_add').
-    html_tag( 'table',  
-        html_tag( 'tr',
-            html_tag( 'td', "\n". '<strong>' . _("Add to address book") . '</strong>' . "\n",
-                'center', $color[0]
-                )
-            )
-        , 'center', '', 'width="100%"' ) ."\n";
-address_form('addaddr', _("Add address"), $defdata);
+echo '<a name="AddAddress"></a>' . "\n";
+abook_create_form($form_url,'addaddr',_("Add to address book"),_("Add address"),$defdata);
 echo "</form>\n";
 
 /* Add hook for anything that wants on the bottom */