From 0c259682f65eaaf23ea4ccb56a706d6baf3007e4 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 13 Apr 2012 04:52:02 -0400
Subject: [PATCH] - Merge devel-framework branch, resolved conflicts

---
 program/steps/addressbook/func.inc |   77 +++++++++++++++++++++++---------------
 1 files changed, 46 insertions(+), 31 deletions(-)

diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc
index 52819c0..e52da39 100644
--- a/program/steps/addressbook/func.inc
+++ b/program/steps/addressbook/func.inc
@@ -5,8 +5,11 @@
  | program/steps/addressbook/func.inc                                    |
  |                                                                       |
  | This file is part of the Roundcube Webmail client                     |
- | Copyright (C) 2005-2007, The Roundcube Dev Team                       |
- | Licensed under the GNU GPL                                            |
+ | Copyright (C) 2005-2012, The Roundcube Dev Team                       |
+ |                                                                       |
+ | Licensed under the GNU General Public License version 3 or            |
+ | any later version with exceptions for skins & plugins.                |
+ | See the README file for a full license statement.                     |
  |                                                                       |
  | PURPOSE:                                                              |
  |   Provide addressbook functionality and GUI objects                   |
@@ -56,6 +59,7 @@
   // TODO: define fields for vcards like GEO, KEY
 );
 
+$PAGE_SIZE = $RCMAIL->config->get('addressbook_pagesize', $RCMAIL->config->get('pagesize', 50));
 
 // Addressbook UI
 if (!$RCMAIL->action && !$OUTPUT->ajax_call) {
@@ -108,7 +112,7 @@
 // instantiate a contacts object according to the given source
 function rcmail_contact_source($source=null, $init_env=false, $writable=false)
 {
-    global $RCMAIL, $OUTPUT, $CONFIG, $CONTACT_COLTYPES;
+    global $RCMAIL, $OUTPUT, $CONTACT_COLTYPES, $PAGE_SIZE;
 
     if (!strlen($source)) {
         $source = get_input_value('_source', RCUBE_INPUT_GPC);
@@ -116,7 +120,7 @@
 
     // Get object
     $CONTACTS = $RCMAIL->get_address_book($source, $writable);
-    $CONTACTS->set_pagesize($CONFIG['pagesize']);
+    $CONTACTS->set_pagesize($PAGE_SIZE);
 
     // set list properties and session vars
     if (!empty($_GET['_page']))
@@ -199,7 +203,7 @@
             'rel' => '%s',
             'onclick' => "return ".JS_OBJECT_NAME.".command('list','%s',this)"), '%s'));
 
-    $sources = (array) $OUTPUT->env['address_sources'];
+    $sources = (array) $OUTPUT->get_env('address_sources');
     reset($sources);
 
     // currently selected source
@@ -335,6 +339,7 @@
 
     while ($row = $result->next()) {
         $a_row_cols = array();
+        $classes = array('person');  // org records will follow some day
 
         // build contact ID with source ID
         if (isset($row['sourceid'])) {
@@ -343,15 +348,14 @@
 
         // format each col
         foreach ($a_show_cols as $col) {
-            $val = $row[$col];
-            if ($val == '' && $col == 'name') {
-                $val = rcube_addressbook::compose_display_name($row, true);
-            }
-
+            $val = $col == 'name' ? rcube_addressbook::compose_list_name($row) : $row[$col];
             $a_row_cols[$col] = Q($val);
-	}
+        }
 
-        $OUTPUT->command($prefix.'add_contact_row', $row['ID'], $a_row_cols);
+        if ($row['readonly'])
+            $classes[] = 'readonly';
+
+        $OUTPUT->command($prefix.'add_contact_row', $row['ID'], $a_row_cols, join(' ', $classes));
     }
 }
 
@@ -382,13 +386,16 @@
 
     $OUTPUT->add_gui_object('countdisplay', $attrib['id']);
 
+    if ($attrib['label'])
+      $_SESSION['contactcountdisplay'] = $attrib['label'];
+
     return html::span($attrib, rcube_label('loading'));
 }
 
 
 function rcmail_get_rowcount_text($result=null)
 {
-    global $CONTACTS, $CONFIG;
+    global $CONTACTS, $PAGE_SIZE;
 
     // read nr of contacts
     if (!$result) {
@@ -399,10 +406,10 @@
         $out = rcube_label('nocontactsfound');
     else
         $out = rcube_label(array(
-            'name'  => 'contactsfromto',
+            'name'  => $_SESSION['contactcountdisplay'] ? $_SESSION['contactcountdisplay'] : 'contactsfromto',
             'vars'  => array(
             'from'  => $result->first + 1,
-            'to'    => min($result->count, $result->first + $CONFIG['pagesize']),
+            'to'    => min($result->count, $result->first + $PAGE_SIZE),
             'count' => $result->count)
         ));
 
@@ -427,7 +434,6 @@
 function rcmail_contact_form($form, $record, $attrib = null)
 {
     global $RCMAIL, $CONFIG;
-    static $jqueryui_loaded = 0;
 
     // Allow plugins to modify contact form content
     $plugin = $RCMAIL->plugins->exec_hook('contact_form', array(
@@ -614,17 +620,11 @@
                         if ($colprop['subtypes'] || $colprop['limit'] != 1)
                             $colprop['array'] = true;
 
-                        // load jquery UI datepickert for date fields
+                        // load jquery UI datepicker for date fields
                         if ($colprop['type'] == 'date') {
-                            if (!$jqueryui_loaded++) {
-                                $RCMAIL->plugins->load_plugin('jqueryui');
-                                $RCMAIL->output->set_env('date_format', strtr($RCMAIL->config->get('date_format', 'Y-m-d'), array('y'=>'y', 'Y'=>'yy', 'm'=>'mm', 'n'=>'m', 'd'=>'dd', 'j'=>'d')));
-                                foreach (array('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec') as $month)
-                                    $month_names[] = rcube_label($month);
-                                $RCMAIL->output->set_env('month_names', $month_names);
-                            }
                             $colprop['class'] .= ($colprop['class'] ? ' ' : '') . 'datepicker';
-                            $val = format_date($val, $RCMAIL->config->get('date_format', 'Y-m-d'), false);
+                            if (!$colprop['render_func'])
+                                $val = rcmail_format_date_col($val);
                         }
 
                         $val = rcmail_get_edit_field($col, $val, $colprop, $colprop['type']);
@@ -669,7 +669,7 @@
                 }
             }
 
-            if (!$content)
+            if (!$content && (!$edit_mode || !$select_add->_count))
                 continue;
 
             // also render add-field selector
@@ -700,9 +700,6 @@
 {
     global $SOURCE_ID, $CONTACTS, $CONTACT_COLTYPES, $RCMAIL, $CONFIG;
 
-    if (!$CONTACT_COLTYPES['photo'])
-        return '';
-
     if ($result = $CONTACTS->get_result())
         $record = $result->first();
 
@@ -710,7 +707,7 @@
     $RCMAIL->output->set_env('photo_placeholder', $photo_img);
     unset($attrib['placeholder']);
 
-    if (strpos($record['photo'], 'http:') === 0)
+    if (preg_match('!^https?://!i', $record['photo']))
         $photo_img = $record['photo'];
     else if ($record['photo'])
         $photo_img = $RCMAIL->url(array('_action' => 'photo', '_cid' => $record['ID'], '_source' => $SOURCE_ID));
@@ -720,7 +717,7 @@
     $img = html::img(array('src' => $photo_img, 'border' => 1, 'alt' => ''));
     $content = html::div($attrib, $img);
 
-    if ($RCMAIL->action == 'edit' || $RCMAIL->action == 'add') {
+    if ($CONTACT_COLTYPES['photo'] && ($RCMAIL->action == 'edit' || $RCMAIL->action == 'add')) {
         $RCMAIL->output->add_gui_object('contactphoto', $attrib['id']);
         $hidden = new html_hiddenfield(array('name' => '_photo', 'id' => 'ff_photo', 'value' => $ff_value));
         $content .= $hidden->show();
@@ -737,6 +734,24 @@
 }
 
 
+function rcmail_contact_key($row, $sort_col)
+{
+    $key = $row[$sort_col] . ':' . $row['sourceid'];
+
+    // add email to a key to not skip contacts with the same name (#1488375)
+    if (!empty($row['email'])) {
+         if (is_array($row['email'])) {
+             $key .= ':' . implode(':', $row['email']);
+         }
+         else {
+             $key .= ':' . $row['email'];
+         }
+     }
+
+     return $key;
+}
+
+
 /**
  * Returns contact ID(s) and source(s) from GET/POST data
  *

--
Gitblit v1.9.1