Contact groups can have direct email addresses => distribution lists; enable 'compose' command for the selected group

release-0.7
thomascube 13 years ago
parent a3148236eb
commit dc6c4f4a28

@ -295,6 +295,18 @@ abstract class rcube_addressbook
return array();
}
/**
* Get group properties such as name and email address(es)
*
* @param string Group identifier
* @return array Group properties as hash array
*/
function get_group($group_id)
{
/* empty for address books don't supporting groups */
return null;
}
/**
* Create a contact group with the given name
*

@ -163,6 +163,29 @@ class rcube_contacts extends rcube_addressbook
}
/**
* Get group properties such as name and email address(es)
*
* @param string Group identifier
* @return array Group properties as hash array
*/
function get_group($group_id)
{
$sql_result = $this->db->query(
"SELECT * FROM ".get_table_name($this->db_groups).
" WHERE del<>1".
" AND contactgroup_id=?".
" AND user_id=?",
$group_id, $this->user_id);
if ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result))) {
$sql_arr['ID'] = $sql_arr['contactgroup_id'];
return $sql_arr;
}
return null;
}
/**
* List the current set of contact records
*
@ -774,8 +797,9 @@ class rcube_contacts extends rcube_addressbook
$sql_result = $this->db->query(
"UPDATE ".get_table_name($this->db_groups).
" SET del=1, changed=".$this->db->now().
" WHERE contactgroup_id=?",
$gid
" WHERE contactgroup_id=?".
" AND user_id=?",
$gid, $this->user_id
);
$this->cache = null;
@ -799,8 +823,9 @@ class rcube_contacts extends rcube_addressbook
$sql_result = $this->db->query(
"UPDATE ".get_table_name($this->db_groups).
" SET name=?, changed=".$this->db->now().
" WHERE contactgroup_id=?",
$name, $gid
" WHERE contactgroup_id=?".
" AND user_id=?",
$name, $gid, $this->user_id
);
return $this->db->affected_rows() ? $name : false;

@ -845,7 +845,9 @@ function rcube_webmail()
}
if (a_cids.length)
this.http_post('mailto', {_cid: a_cids.join(','), _source: this.env.source}, true);
this.http_post('mailto', { _cid: a_cids.join(','), _source: this.env.source}, true);
else if (this.env.group)
this.http_post('mailto', { _gid: this.env.group, _source: this.env.source}, true);
break;
}
@ -3882,7 +3884,7 @@ function rcube_webmail()
}
}
this.enable_command('compose', list.selection.length > 0);
this.enable_command('compose', this.env.group || list.selection.length > 0);
this.enable_command('edit', id && writable);
this.enable_command('delete', list.selection.length && writable);
@ -3968,7 +3970,8 @@ function rcube_webmail()
{
this.contact_list.clear(true);
this.show_contentframe(false);
this.enable_command('delete', 'compose', false);
this.enable_command('delete', false);
this.enable_command('compose', this.env.group ? true : false);
};
// load contact record

@ -21,6 +21,7 @@
$cids = rcmail_get_cids();
$mailto = array();
$recipients = null;
foreach ($cids as $source => $cid)
{
@ -31,11 +32,34 @@ foreach ($cids as $source => $cid)
$CONTACTS->set_page(1);
$CONTACTS->set_pagesize(count($cid) + 2); // +2 to skip counting query
$recipients = $CONTACTS->search($CONTACTS->primary_key, $cid, false, true, true, 'email');
}
}
if (!empty($_REQUEST['_gid']) && isset($_REQUEST['_source']))
{
$source = get_input_value('_source', RCUBE_INPUT_GPC);
$CONTACTS = $RCMAIL->get_address_book($source);
$group_id = get_input_value('_gid', RCUBE_INPUT_GPC);
$group_data = $CONTACTS->get_group($group_id);
while (is_object($recipients) && ($rec = $recipients->iterate())) {
$emails = $CONTACTS->get_col_values('email', $rec, true);
$mailto[] = format_email_recipient($emails[0], $rec['name']);
}
// group has an email address assigned: use that
if ($group_data['email']) {
$mailto[] = format_email_recipient($group_data['email'][0], $group_data['name']);
}
else if ($CONTACTS->ready) {
$CONTACTS->set_group($group_id);
$CONTACTS->set_page(1);
$CONTACTS->set_pagesize(200); // limit somehow
$recipients = $CONTACTS->list_records();
}
}
if ($recipients)
{
while (is_object($recipients) && ($rec = $recipients->iterate())) {
$emails = $CONTACTS->get_col_values('email', $rec, true);
$mailto[] = format_email_recipient($emails[0], $rec['name']);
}
}

@ -85,9 +85,18 @@ if (!empty($book_types) && strlen($search)) {
foreach ($abook->list_groups($search) as $group) {
$abook->reset();
$abook->set_group($group['ID']);
$result = $abook->count();
if ($result->count) {
$group_prop = $abook->get_group($group['ID']);
// group (distribution list) with email address(es)
if ($group_prop['email']) {
foreach ((array)$group_prop['email'] as $email) {
$contacts[] = format_email_recipient($email, $group['name']);
if (count($contacts) >= $MAXNUM)
break 2;
}
}
// show group with count
else if (($result = $abook->count()) && $result->count) {
$contacts[] = array('name' => $group['name'] . ' (' . intval($result->count) . ')', 'id' => $group['ID'], 'source' => $id);
if (count($contacts) >= $MAXNUM)
break;

Loading…
Cancel
Save