Thomas B.
2013-10-07 a3b85d7b8560cdc1057fcaffa3acbd247b4b5b7a
program/steps/addressbook/func.inc
@@ -26,7 +26,7 @@
  'name'         => array('type' => 'text', 'size' => 40, 'maxlength' => 50, 'limit' => 1, 'label' => rcube_label('name'), 'category' => 'main'),
  'firstname'    => array('type' => 'text', 'size' => 19, 'maxlength' => 50, 'limit' => 1, 'label' => rcube_label('firstname'), 'category' => 'main'),
  'surname'      => array('type' => 'text', 'size' => 19, 'maxlength' => 50, 'limit' => 1, 'label' => rcube_label('surname'), 'category' => 'main'),
  'email'        => array('type' => 'text', 'size' => 40, 'maxlength' => 50, 'label' => rcube_label('email'), 'subtypes' => array('home','work','other'), 'category' => 'main'),
  'email'        => array('type' => 'text', 'size' => 40, 'maxlength' => 254, 'label' => rcube_label('email'), 'subtypes' => array('home','work','other'), 'category' => 'main'),
  'middlename'   => array('type' => 'text', 'size' => 19, 'maxlength' => 50, 'limit' => 1, 'label' => rcube_label('middlename'), 'category' => 'main'),
  'prefix'       => array('type' => 'text', 'size' => 8,  'maxlength' => 20, 'limit' => 1, 'label' => rcube_label('nameprefix'), 'category' => 'main'),
  'suffix'       => array('type' => 'text', 'size' => 8,  'maxlength' => 20, 'limit' => 1, 'label' => rcube_label('namesuffix'), 'category' => 'main'),
@@ -167,7 +167,7 @@
    // get address book name (for display)
    if ($abook && $_SESSION['addressbooks_count'] > 1) {
        $name = $abook->get_name();
        if (!$name && $source == 0) {
        if (!$name) {
            $name = rcube_label('personaladrbook');
        }
        $OUTPUT->set_env('sourcename', html_entity_decode($name, ENT_COMPAT, 'UTF-8'));
@@ -733,30 +733,12 @@
}
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
 *
 * @return array List of contact IDs per-source
 */
function rcmail_get_cids()
function rcmail_get_cids($filter = null)
{
    // contact ID (or comma-separated list of IDs) is provided in two
    // forms. If _source is an empty string then the ID is a string
@@ -764,6 +746,10 @@
    $cid    = get_input_value('_cid', RCUBE_INPUT_GPC);
    $source = (string) get_input_value('_source', RCUBE_INPUT_GPC);
    if (is_array($cid)) {
        return $cid;
    }
    if (!preg_match('/^[a-zA-Z0-9\+\/=_-]+(,[a-zA-Z0-9\+\/=_-]+)*$/', $cid)) {
        return array();
@@ -775,24 +761,29 @@
    // create per-source contact IDs array
    foreach ($cid as $id) {
        // if _source is not specified we'll find it from decoded ID
        // extract source ID from contact ID (it's there in search mode)
        // see #1488959 and #1488862 for reference
        if (!$got_source) {
            if ($sep = strrpos($id, '-')) {
                $contact_id = substr($id, 0, $sep);
                $source_id  = substr($id, $sep+1);
                $source_id  = (string) substr($id, $sep+1);
                if (strlen($source_id)) {
                    $result[(string)$source_id][] = $contact_id;
                    $result[$source_id][] = $contact_id;
                }
            }
        }
        else {
            if (substr($id, -($got_source+1)) === "-$source") {
                $id = substr($id, 0, -($got_source+1));
            }
            $result[$source][] = $id;
        }
    }
    return $result;
    return $filter !== null ? $result[$filter] : $result;
}
// register UI objects
$OUTPUT->add_handlers(array(
    'directorylist' => 'rcmail_directory_list',