* Addressbook - When viewing a user account's calendar or next/previous dates, use the account calendar over the contact calendar

This commit is contained in:
nathangray 2017-03-08 09:53:52 -07:00
parent 53d0ef7705
commit 4195fdb306
4 changed files with 29 additions and 25 deletions

View File

@ -251,11 +251,11 @@ class addressbook_export_contacts_csv implements importexport_iface_export_plugi
{ {
if(is_array($_contact) && $_contact['id']) if(is_array($_contact) && $_contact['id'])
{ {
$contact_ids[] = $_contact['id']; $contact_ids[] = $_contact['account_id'] ? $_contact['account_id'] : 'c'.$_contact['id'];
} }
else else
{ {
$contact_ids[] = $contact; $contact_ids[] = 'c'.$contact;
} }
} }
$events = $this->ui->read_calendar($contact_ids, false); $events = $this->ui->read_calendar($contact_ids, false);

View File

@ -1640,6 +1640,7 @@ window.egw_LAB.wait(function() {
$columsel = $this->prefs['nextmatch-addressbook.'.($do_email ? 'email' : 'index').'.rows']; $columsel = $this->prefs['nextmatch-addressbook.'.($do_email ? 'email' : 'index').'.rows'];
$available_distib_lists=$this->get_lists(Acl::READ); $available_distib_lists=$this->get_lists(Acl::READ);
$columselection = $columsel && !$query['csv_export'] ? explode(',',$columsel) : array(); $columselection = $columsel && !$query['csv_export'] ? explode(',',$columsel) : array();
$ids = $calendar_participants = array();
if (!$id_only && $rows) if (!$id_only && $rows)
{ {
$show_custom_fields = (!$columselection || in_array('customfields',$columselection) || $query['csv_export']) && $this->customfields; $show_custom_fields = (!$columselection || in_array('customfields',$columselection) || $query['csv_export']) && $this->customfields;
@ -1650,6 +1651,7 @@ window.egw_LAB.wait(function() {
foreach($rows as $val) foreach($rows as $val)
{ {
$ids[] = $val['id']; $ids[] = $val['id'];
$calendar_participants[$val['id']] = $val['account_id'] ? $val['account_id'] : 'c'.$val['id'];
} }
if ($show_custom_fields) if ($show_custom_fields)
{ {
@ -1659,7 +1661,7 @@ window.egw_LAB.wait(function() {
} }
$customfields = $this->read_customfields($ids,$selected_cfs); $customfields = $this->read_customfields($ids,$selected_cfs);
} }
if ($show_calendar && !empty($ids)) $calendar = $this->read_calendar($ids); if ($show_calendar && !empty($ids)) $calendar = $this->read_calendar($calendar_participants);
// distributionlist memership for the entrys // distributionlist memership for the entrys
//_debug_array($this->get_lists(Acl::EDIT)); //_debug_array($this->get_lists(Acl::EDIT));
if ($show_distributionlist && $available_distib_lists) if ($show_distributionlist && $available_distib_lists)
@ -1766,9 +1768,9 @@ window.egw_LAB.wait(function() {
$row['distrib_lists'] = implode("\n",array_values($distributionlist[$row['id']])); $row['distrib_lists'] = implode("\n",array_values($distributionlist[$row['id']]));
//if ($show_distributionlist) $readonlys['distrib_lists'] =true; //if ($show_distributionlist) $readonlys['distrib_lists'] =true;
} }
if (isset($calendar[$row['id']])) if (isset($calendar[$calendar_participants[$row['id']]]))
{ {
foreach($calendar[$row['id']] as $name => $data) foreach($calendar[$calendar_participants[$row['id']]] as $name => $data)
{ {
$row[$name] = $data; $row[$name] = $data;
} }
@ -2234,7 +2236,7 @@ window.egw_LAB.wait(function() {
if ($content['id']) if ($content['id'])
{ {
// last and next calendar date // last and next calendar date
list(,$dates) = each($this->read_calendar(array($content['id']),false)); list(,$dates) = each($this->read_calendar(array($content['account_id'] ? $content['account_id'] : 'c'.$content['id']),false));
if(is_array($dates)) $content += $dates; if(is_array($dates)) $content += $dates;
} }
// Avoid ID conflict with tree & selectboxes // Avoid ID conflict with tree & selectboxes
@ -2738,7 +2740,7 @@ window.egw_LAB.wait(function() {
if ($this->config['private_cf_tab']) $content['no_private_cfs'] = 0; if ($this->config['private_cf_tab']) $content['no_private_cfs'] = 0;
// last and next calendar date // last and next calendar date
if (!empty($content['id'])) list(,$dates) = each($this->read_calendar(array($content['id']),false)); if (!empty($content['id'])) list(,$dates) = each($this->read_calendar(array($content['account_id'] ? $content['account_id'] : 'c'.$content['id']),false));
if(is_array($dates)) $content += $dates; if(is_array($dates)) $content += $dates;
// Disable importexport // Disable importexport

View File

@ -253,7 +253,17 @@ app.classes.addressbook = AppJS.extend(
} }
else else
{ {
extras.owner.push('c'+ids); // Check to see if this is a user account, we prefer to use
// account ID in calendar
var data = this.egw.dataGetUIDdata(_senders[i].id);
if(data && data.data && data.data.account_id)
{
extras.owner.push(data.data.account_id);
}
else
{
extras.owner.push('c'+ids);
}
} }
} }

View File

@ -1601,21 +1601,14 @@ class Contacts extends Contacts\Storage
/** /**
* Read the next and last event of given contacts * Read the next and last event of given contacts
* *
* @param array $ids contact_id's * @param array $uids participant IDs. Contacts should be c<contact_id>, user accounts <account_id>
* @param boolean $extra_title =true if true, use a short date only title and put the full title as extra_title (tooltip) * @param boolean $extra_title =true if true, use a short date only title and put the full title as extra_title (tooltip)
* @return array * @return array
*/ */
function read_calendar($ids,$extra_title=true) function read_calendar($uids,$extra_title=true)
{ {
if (!$GLOBALS['egw_info']['user']['apps']['calendar']) return array(); if (!$GLOBALS['egw_info']['user']['apps']['calendar']) return array();
$uids = array();
foreach($ids as $id)
{
if (is_numeric($id)) $uids[] = 'c'.$id;
}
if (!$uids) return array();
$bocal = new calendar_bo(); $bocal = new calendar_bo();
$events = $bocal->search(array( $events = $bocal->search(array(
'users' => $uids, 'users' => $uids,
@ -1629,17 +1622,16 @@ class Contacts extends Contacts\Storage
{ {
foreach($event['participants'] as $uid => $status) foreach($event['participants'] as $uid => $status)
{ {
if ($uid[0] != 'c' || ($status == 'R' && !$GLOBALS['egw_info']['user']['preferences']['calendar']['show_rejected'])) if ($status == 'R' && !$GLOBALS['egw_info']['user']['preferences']['calendar']['show_rejected'])
{ {
continue; continue;
} }
$id = (int)substr($uid,1);
if ($event['start'] < $this->now_su) // past event --> check for last event if ($event['start'] < $this->now_su) // past event --> check for last event
{ {
if (!isset($calendars[$id]['last_event']) || $event['start'] > $calendars[$id]['last_event']) if (!isset($calendars[$uid]['last_event']) || $event['start'] > $calendars[$uid]['last_event'])
{ {
$calendars[$id]['last_event'] = $event['start']; $calendars[$uid]['last_event'] = $event['start'];
$link = array( $link = array(
'id' => $event['id'], 'id' => $event['id'],
'app' => 'calendar', 'app' => 'calendar',
@ -1653,14 +1645,14 @@ class Contacts extends Contacts\Storage
$link['extra_title'] = $link['title']; $link['extra_title'] = $link['title'];
$link['title'] = date($GLOBALS['egw_info']['user']['preferences']['common']['dateformat'],$event['start']); $link['title'] = date($GLOBALS['egw_info']['user']['preferences']['common']['dateformat'],$event['start']);
} }
$calendars[$id]['last_link'] = $link; $calendars[$uid]['last_link'] = $link;
} }
} }
else // future event --> check for next event else // future event --> check for next event
{ {
if (!isset($calendars[$id]['next_event']) || $event['start'] < $calendars[$id]['next_event']) if (!isset($calendars[$uid]['next_event']) || $event['start'] < $calendars[$uid]['next_event'])
{ {
$calendars[$id]['next_event'] = $event['start']; $calendars[$uid]['next_event'] = $event['start'];
$link = array( $link = array(
'id' => $event['id'], 'id' => $event['id'],
'app' => 'calendar', 'app' => 'calendar',
@ -1674,7 +1666,7 @@ class Contacts extends Contacts\Storage
$link['extra_title'] = $link['title']; $link['extra_title'] = $link['title'];
$link['title'] = date($GLOBALS['egw_info']['user']['preferences']['common']['dateformat'],$event['start']); $link['title'] = date($GLOBALS['egw_info']['user']['preferences']['common']['dateformat'],$event['start']);
} }
$calendars[$id]['next_link'] = $link; $calendars[$uid]['next_link'] = $link;
} }
} }
} }