fixed handling of groups:

- groups can now be selected as participants again
- groups need to have calendar run-rights, to be selectable in the calendar (as it was in 1.0)
- groups will NOT be enumerated as users anymore
--> new or removed members are taken into account as participants
- error messages: if no participant selected or startdate behind enddate (no more automatic swapping)
- pushing the version to 1.2
This commit is contained in:
Ralf Becker 2005-11-23 14:21:20 +00:00
parent 199278aef0
commit b111419c1b
12 changed files with 241 additions and 88 deletions

View File

@ -194,6 +194,34 @@ class bocal
unset($config); unset($config);
} }
/**
* Add group-members as participants with status 'G'
*
* @param array $event event-array
* @return int number of added participants
*/
function enum_groups(&$event)
{
$added = 0;
foreach($event['participants'] as $uid => $status)
{
if (is_numeric($uid) && $GLOBALS['egw']->accounts->get_type($uid) == 'g' &&
($members = $GLOBALS['egw']->accounts->member($uid)))
{
foreach($members as $member)
{
$member = $member['account_id'];
if (!isset($event['participants'][$member]))
{
$event['participants'][$member] = 'G';
++$added;
}
}
}
}
return $added;
}
/** /**
* Searches / lists calendar entries, including repeating ones * Searches / lists calendar entries, including repeating ones
* *
@ -217,6 +245,7 @@ class bocal
* order column-names plus optional DESC|ASC separted by comma * order column-names plus optional DESC|ASC separted by comma
* show_rejected if set rejected invitation are shown only when true, otherwise it depends on the cal-pref or a running query * show_rejected if set rejected invitation are shown only when true, otherwise it depends on the cal-pref or a running query
* ignore_acl if set and true no check_perms for a general EGW_ACL_READ grants is performed * ignore_acl if set and true no check_perms for a general EGW_ACL_READ grants is performed
* enum_groups boolean if set and true, group-members will be added as participants with status 'G'
* @return array of events or array with YYYYMMDD strings / array of events pairs (depending on $daywise param) * @return array of events or array with YYYYMMDD strings / array of events pairs (depending on $daywise param)
*/ */
function &search($params) function &search($params)
@ -236,6 +265,8 @@ class bocal
$users = array(); $users = array();
foreach($params['users'] as $user) foreach($params['users'] as $user)
{ {
if (in_array($user,$users)) continue; // already added
if ($params['ignore_acl'] || $this->check_perms(EGW_ACL_READ,0,$user)) if ($params['ignore_acl'] || $this->check_perms(EGW_ACL_READ,0,$user))
{ {
$users[] = $user; $users[] = $user;
@ -257,6 +288,20 @@ class bocal
} }
} }
} }
else // for users we have to include all the memberships, to get the group-events
{
$memberships = $GLOBALS['egw']->accounts->membership($user);
if (is_array($memberships))
{
foreach($memberships as $group)
{
if (!in_array($group['account_id'],$users))
{
$users[] = $group['account_id'];
}
}
}
}
} }
} }
// if we have no grants from the given user(s), we directly return no events / an empty array, // if we have no grants from the given user(s), we directly return no events / an empty array,
@ -291,6 +336,10 @@ class bocal
foreach($events as $id => $event) foreach($events as $id => $event)
{ {
if ($params['enum_groups'] && $this->enum_groups($event))
{
$events[$id] = $event;
}
if (!$this->check_perms(EGW_ACL_READ,$event)) if (!$this->check_perms(EGW_ACL_READ,$event))
{ {
$this->clear_private_infos($events[$id],$users); $this->clear_private_infos($events[$id],$users);
@ -1225,16 +1274,18 @@ class bocal
/** /**
* Converts participants array of an event into array of (readable) participant-names with status * Converts participants array of an event into array of (readable) participant-names with status
* *
* @param $event array of an event * @param array $event event-data
* @param $long_status boolean should the long/verbose status or only the one letter shortcut be used * @param boolean $long_status=false should the long/verbose status or only the one letter shortcut be used
* @return array with id / names with status pairs * @return array with id / names with status pairs
*/ */
function participants($event,$long_status=False,$use_type=false) function participants($event,$long_status=False)
{ {
//_debug_array($event); //_debug_array($event);
$names = array(); $names = array();
foreach($event['participants'] as $id => $status) foreach($event['participants'] as $id => $status)
{ {
if ($status == 'G') continue; // dont show group-invitation
$status = $this->verbose_status[$status]; $status = $this->verbose_status[$status];
if (!$long_status) if (!$long_status)

View File

@ -386,9 +386,10 @@ class bocalupdate extends bocal
* @param int $msg_type type of the notification: MSG_ADDED, MSG_MODIFIED, MSG_ACCEPTED, ... * @param int $msg_type type of the notification: MSG_ADDED, MSG_MODIFIED, MSG_ACCEPTED, ...
* @param array $to_notify numerical user-ids as keys (!) (value is not used) * @param array $to_notify numerical user-ids as keys (!) (value is not used)
* @param array $old_event Event before the change * @param array $old_event Event before the change
* @param array $new_event Event after the change * @param array $new_event=null Event after the change
* @param int $user=0 User who started the notify, default current user
*/ */
function send_update($msg_type,$to_notify,$old_event,$new_event=False,$user=False) function send_update($msg_type,$to_notify,$old_event,$new_event=null,$user=0)
{ {
if (!is_array($to_notify)) if (!is_array($to_notify))
{ {
@ -490,12 +491,26 @@ class bocalupdate extends bocal
} }
$send = &$GLOBALS['egw']->send; $send = &$GLOBALS['egw']->send;
// add all group-members to the notification, unless they are already participants
foreach($to_notify as $userid => $statusid)
{
if (is_numeric($userid) && $GLOBALS['egw']->accounts->get_type($userid) == 'g' &&
($members = $GLOBALS['egw']->accounts->member($userid)))
{
foreach($members as $member)
{
$member = $member['account_id'];
if (!isset($to_notify[$member]))
{
$to_notify[$member] = 'G'; // Group-invitation
}
}
}
}
foreach($to_notify as $userid => $statusid) foreach($to_notify as $userid => $statusid)
{ {
if (!is_numeric($userid)) continue; // eg. a resource, ToDo notify the responsible of the resource if (!is_numeric($userid)) continue; // eg. a resource, ToDo notify the responsible of the resource
$userid = (int)$userid;
if ($statusid == 'R' || $GLOBALS['egw']->accounts->get_type($userid) == 'g') if ($statusid == 'R' || $GLOBALS['egw']->accounts->get_type($userid) == 'g')
{ {
continue; // dont notify rejected participants or groups continue; // dont notify rejected participants or groups
@ -702,7 +717,7 @@ class bocalupdate extends bocal
$this->send_update($status2msg[$status],$event['participants'],$event); $this->send_update($status2msg[$status],$event['participants'],$event);
} }
} }
return Ok; return $Ok;
} }
/** /**

View File

@ -265,7 +265,7 @@ class socal
* @param int/array $users user-id or array of user-id's, !$users means all entries regardless of users * @param int/array $users user-id or array of user-id's, !$users means all entries regardless of users
* @param int $cat_id=0 mixed category-id or array of cat-id's, default 0 = all * @param int $cat_id=0 mixed category-id or array of cat-id's, default 0 = all
* Please note: only a single cat-id, will include all sub-cats (if the common-pref 'cats_no_subs' is False) * Please note: only a single cat-id, will include all sub-cats (if the common-pref 'cats_no_subs' is False)
* @param string $filter='' string space delimited filter-names, atm. 'all' or 'private' * @param string $filter='' string space delimited filter-names, NOT used atm.
* @param string $query='' pattern so search for, if unset or empty all matching entries are returned (no search) * @param string $query='' pattern so search for, if unset or empty all matching entries are returned (no search)
* Please Note: a search never returns repeating events more then once AND does not honor start+end date !!! * Please Note: a search never returns repeating events more then once AND does not honor start+end date !!!
* @param int/bool $offset=False offset for a limited query or False (default) * @param int/bool $offset=False offset for a limited query or False (default)
@ -707,6 +707,14 @@ ORDER BY cal_user_type, cal_usre_id
{ {
//echo "<p>socal::participants($cal_id,".print_r($participants,true).",$change_since)</p>\n"; //echo "<p>socal::participants($cal_id,".print_r($participants,true).",$change_since)</p>\n";
// remove group-invitations, they are NOT stored in the db
foreach($participants as $uid => $status)
{
if ($status == 'G')
{
unset($participants[$uid]);
}
}
$where = array('cal_id' => $cal_id); $where = array('cal_id' => $cal_id);
if ((int) $change_since) if ((int) $change_since)
@ -716,14 +724,13 @@ ORDER BY cal_user_type, cal_usre_id
if ($change_since !== false) // existing entries only if ($change_since !== false) // existing entries only
{ {
// delete not longer set participants // delete not longer set participants
$parts = $deleted = array(); $deleted = array();
$this->db->select($this->user_table,'DISTINCT cal_user_type,cal_user_id,cal_quantity',$where,__LINE__,__FILE__); $this->db->select($this->user_table,'DISTINCT cal_user_type,cal_user_id,cal_quantity',$where,__LINE__,__FILE__);
while (($row = $this->db->row(true))) while (($row = $this->db->row(true)))
{ {
$uid = $this->combine_user($row['cal_user_type'],$row['cal_user_id']); $uid = $this->combine_user($row['cal_user_type'],$row['cal_user_id']);
if (!isset($participants[$uid])) if (!isset($participants[$uid])) // delete group-invitations
{ {
$parts[] = $uid;
$deleted[$row['cal_user_type']][] = $row['cal_user_id']; $deleted[$row['cal_user_type']][] = $row['cal_user_id'];
} }
elseif($row['cal_quantity'] == (substr($participants[$uid],1) ? substr($participants[$uid],1) : 1)) elseif($row['cal_quantity'] == (substr($participants[$uid],1) ? substr($participants[$uid],1) : 1))
@ -815,8 +822,16 @@ ORDER BY cal_user_type, cal_usre_id
{ {
$where[] = '(cal_recur_date=0 OR cal_recur_date >= '.time().')'; $where[] = '(cal_recur_date=0 OR cal_recur_date >= '.time().')';
} }
$this->db->update($this->user_table,array('cal_status' => $status),$where,__LINE__,__FILE__); if ($status == 'G') // remove group invitations, as we dont store them in the db
{
$this->db->delete($this->user_table,$where,__LINE__,__FILE__);
}
else
{
$this->db->insert($this->user_table,array(
'cal_status' => $status,
),$where,__LINE__,__FILE__);
}
return $this->db->affected_rows(); return $this->db->affected_rows();
} }
@ -840,6 +855,8 @@ ORDER BY cal_user_type, cal_usre_id
foreach($participants as $uid => $status) foreach($participants as $uid => $status)
{ {
if ($status == 'G') continue; // dont save group-invitations
$this->split_user($uid,$type,$id); $this->split_user($uid,$type,$id);
$this->db->insert($this->user_table,array( $this->db->insert($this->user_table,array(
'cal_status' => $status !== true ? $status{0} : 'U', 'cal_status' => $status !== true ? $status{0} : 'U',

View File

@ -72,7 +72,7 @@ class uical
*/ */
var $cat_id; var $cat_id;
/** /**
* @var int $filter session-state: selected filter * @var int $filter session-state: selected filter, NOT used at the moment (was all or private)
*/ */
var $filter; var $filter;
/** /**
@ -158,7 +158,7 @@ class uical
* - cat_id: the selected category * - cat_id: the selected category
* - owner: the owner of the displayed calendar * - owner: the owner of the displayed calendar
* - save_owner: the overriden owner of the planner * - save_owner: the overriden owner of the planner
* - filter: the used filter: no filter / all or only privat * - filter: the used filter: no filter / all or only privat, NOT used atm.
* - sortby: category or user of planner * - sortby: category or user of planner
* - view: the actual view, where dialogs should return to or which they refresh * - view: the actual view, where dialogs should return to or which they refresh
* @param set_states array to manualy set / change one of the states, default NULL = use $_REQUEST * @param set_states array to manualy set / change one of the states, default NULL = use $_REQUEST
@ -235,12 +235,7 @@ class uical
$this->view = $states['view'] = $func; $this->view = $states['view'] = $func;
} }
$this->view_menuaction = $this->view == 'listview' ? 'calendar.uilist.listview' : 'calendar.uiviews.'.$this->view; $this->view_menuaction = $this->view == 'listview' ? 'calendar.uilist.listview' : 'calendar.uiviews.'.$this->view;
// deal with group-owners
if (substr($this->owner,0,2) == 'g_' || $GLOBALS['egw']->accounts->get_type($this->owner) == 'g')
{
$this->set_owner_to_group($this->owner);
$states['owner'] = $this->owner;
}
$states['multiple'] = $this->multiple = $_GET['multiple'] || count(explode(',',$this->owner)) > 1; $states['multiple'] = $this->multiple = $_GET['multiple'] || count(explode(',',$this->owner)) > 1;
if ($this->debug > 0 || $this->debug == 'menage_states') $this->bo->debug_message('uical::manage_states(%1) session was %2, states now %3, is_group=%4, g_owner=%5',True,$set_states,$states_session,$states,$this->is_group,$this->g_owner); if ($this->debug > 0 || $this->debug == 'menage_states') $this->bo->debug_message('uical::manage_states(%1) session was %2, states now %3, is_group=%4, g_owner=%5',True,$set_states,$states_session,$states,$this->is_group,$this->g_owner);
@ -248,32 +243,6 @@ class uical
$GLOBALS['egw']->session->appsession('session_data','calendar',$states); $GLOBALS['egw']->session->appsession('session_data','calendar',$states);
} }
/**
* Sets a group as owner (of the events to show)
*
* It set $this->is_group and $this->g_owner - array with user-id's of the group-members who gave read-grants
* @param group-id or 'g_'+group-id
*/
function set_owner_to_group($owner)
{
$this->owner = (int) (substr($owner,0,2) == 'g_' ? substr($owner,2) : $owner);
$this->is_group = True;
$this->g_owner = Array();
$members = $GLOBALS['egw']->accounts->member($this->owner);
if (is_array($members))
{
foreach($members as $user)
{
// use only members which gave the user a read-grant
if ($this->bo->check_perms(EGW_ACL_READ,0,$user['account_id']))
{
$this->g_owner[] = $user['account_id'];
}
}
}
if ($this->debug > 2 || $this->debug == 'set_owner_to_group') $this->bo->debug_message('uical::set_owner_to_group(%1): owner=%2, g_owner=%3',True,$owner,$this->owner,$this->g_owner);
}
/** /**
* gets the icons displayed for a given event * gets the icons displayed for a given event
* *
@ -295,7 +264,9 @@ class uical
{ {
$icons[] = $this->html->image('calendar','recur',lang('recurring event')); $icons[] = $this->html->image('calendar','recur',lang('recurring event'));
} }
$icons[] = $this->html->image('calendar',count($event['participants']) > 1 ? 'users' : 'single'); list($first_part) = each($event['participants']);
$icons[] = $this->html->image('calendar',count($event['participants']) > 1 ||
$GLOBALS['egw']->accounts->get_type($first_part) == 'g' ? 'users' : 'single');
} }
if($event['public'] == 0) if($event['public'] == 0)
{ {
@ -537,13 +508,14 @@ class uical
$file[$n]['text']; $file[$n]['text'];
// Filter all or private // Filter all or private
/* NOT used at the moment
if(is_numeric($this->owner) && $this->bo->check_perms(EGW_ACL_PRIVATE,0,$this->owner)) if(is_numeric($this->owner) && $this->bo->check_perms(EGW_ACL_PRIVATE,0,$this->owner))
{ {
$file[] = $this->_select_box('Filter','filter', $file[] = $this->_select_box('Filter','filter',
'<option value=" all "'.($this->filter==' all '?' selected="1"':'').'>'.lang('No filter').'</option>'."\n". '<option value=" all "'.($this->filter==' all '?' selected="1"':'').'>'.lang('No filter').'</option>'."\n".
'<option value=" private "'.($this->filter==' private '?' selected="1"':'').'>'.lang('Private Only').'</option>'."\n"); '<option value=" private "'.($this->filter==' private '?' selected="1"':'').'>'.lang('Private Only').'</option>'."\n");
} }
*/
// Calendarselection: User or Group // Calendarselection: User or Group
if(count($this->bo->grants) > 0 && (!isset($GLOBALS['egw_info']['server']['deny_user_grants_access']) || if(count($this->bo->grants) > 0 && (!isset($GLOBALS['egw_info']['server']['deny_user_grants_access']) ||
!$GLOBALS['egw_info']['server']['deny_user_grants_access'])) !$GLOBALS['egw_info']['server']['deny_user_grants_access']))
@ -576,7 +548,7 @@ function load_cal(url,id) {
} }
</script> </script>
". ".
$this->accountsel->selection('owner','uical_select_owner',$accounts,'calendar+',$this->multiple ? 3 : 1,False, $this->accountsel->selection('owner','uical_select_owner',$accounts,'calendar+',$this->multiple ? 4 : 1,False,
' style="width: '.($this->multiple && $this->common_prefs['account_selection']=='selectbox' ? 185 : 165).'px;"'. ' style="width: '.($this->multiple && $this->common_prefs['account_selection']=='selectbox' ? 185 : 165).'px;"'.
' title="'.lang('select a %1',lang('user')).'" onchange="load_cal(\''. ' title="'.lang('select a %1',lang('user')).'" onchange="load_cal(\''.
$GLOBALS['egw']->link('/index.php',array( $GLOBALS['egw']->link('/index.php',array(

View File

@ -66,10 +66,23 @@ class uiforms extends uical
*/ */
function &default_add_event() function &default_add_event()
{ {
$extra_participants = $_GET['participants'] ? explode(',',$_GET['participants']) : array();
$owner = (int) (isset($_GET['owner']) ? $_GET['owner'] : $this->owner); $owner = (int) (isset($_GET['owner']) ? $_GET['owner'] : $this->owner);
if (!$owner || !$this->bo->check_perms(EGW_ACL_ADD,0,$owner)) $owner = $this->user; if (!$owner || !is_numeric($owner) || $GLOBALS['egw']->accounts->get_type($owner) != 'u' ||
!$this->bo->check_perms(EGW_ACL_ADD,0,$owner))
{
if ($owner) // make an owner who is no user or we have no add-rights a participant
{
$extra_participants[] = $owner;
}
$owner = $this->user;
}
//echo "<p>this->owner=$this->owner, _GET[owner]=$_GET[owner], user=$this->user => owner=$owner</p>\n"; //echo "<p>this->owner=$this->owner, _GET[owner]=$_GET[owner], user=$this->user => owner=$owner</p>\n";
// by default include the owner as participant (the user can remove him)
$extra_participants[] = $owner;
$start = $this->bo->date2ts(array( $start = $this->bo->date2ts(array(
'full' => isset($_GET['date']) && (int) $_GET['date'] ? (int) $_GET['date'] : $this->date, 'full' => isset($_GET['date']) && (int) $_GET['date'] ? (int) $_GET['date'] : $this->date,
'hour' => (int) (isset($_GET['hour']) && (int) $_GET['hour'] ? $_GET['hour'] : $this->bo->cal_prefs['workdaystarts']), 'hour' => (int) (isset($_GET['hour']) && (int) $_GET['hour'] ? $_GET['hour'] : $this->bo->cal_prefs['workdaystarts']),
@ -77,12 +90,11 @@ class uiforms extends uical
)); ));
//echo "<p>_GET[date]=$_GET[date], _GET[hour]=$_GET[hour], _GET[minute]=$_GET[minute], this->date=$this->date ==> start=$start=".date('Y-m-d H:i',$start)."</p>\n"; //echo "<p>_GET[date]=$_GET[date], _GET[hour]=$_GET[hour], _GET[minute]=$_GET[minute], this->date=$this->date ==> start=$start=".date('Y-m-d H:i',$start)."</p>\n";
$participant_types = array('u' => array($owner => $owner == $this->user ? 'A' : 'U')); $participant_types['u'] = $participant_types = $participants = array();
$participants = array($owner => $owner == $this->user ? 'A' : 'U'); foreach($extra_participants as $uid)
if ($_GET['participants'])
{
foreach(explode(',',$_GET['participants']) as $uid)
{ {
if (isset($participants[$uid])) continue; // already included
if (is_numeric($uid)) if (is_numeric($uid))
{ {
$participants[$uid] = $participant_types['u'][$uid] = $uid == $this->user ? 'A' : 'U'; $participants[$uid] = $participant_types['u'][$uid] = $uid == $this->user ? 'A' : 'U';
@ -101,7 +113,6 @@ class uiforms extends uical
} }
} }
} }
}
return array( return array(
'participant_types' => $participant_types, 'participant_types' => $participant_types,
'participants' => $participants, 'participants' => $participants,
@ -209,11 +220,6 @@ class uiforms extends uical
// ToDo: move this logic into bocal // ToDo: move this logic into bocal
} }
} }
if ($event['start'] > $event['end']) // end need to be after start, otherwise swap them
{
$event['start'] = $content['end'];
$event['end'] = $content['start'];
}
if ($content['whole_day']) if ($content['whole_day'])
{ {
$event['start'] = $this->bo->date2array($event['start']); $event['start'] = $this->bo->date2array($event['start']);
@ -314,6 +320,18 @@ class uiforms extends uical
$msg = lang('Permission denied'); $msg = lang('Permission denied');
break; break;
} }
if ($event['start'] > $event['end'])
{
$msg = lang('Error: Starttime has to be before the endtime !!!');
$button = '';
break;
}
if (!$event['participants'])
{
$msg = lang('Error: no participants selected !!!');
$button = '';
break;
}
if ($content['edit_single']) // we edited a single event from a series if ($content['edit_single']) // we edited a single event from a series
{ {
$event['reference'] = $event['id']; $event['reference'] = $event['id'];
@ -516,6 +534,11 @@ class uiforms extends uical
{ {
$etpl =& CreateObject('etemplate.etemplate','calendar.edit'); $etpl =& CreateObject('etemplate.etemplate','calendar.edit');
$sel_options = array(
'recur_type' => &$this->bo->recur_types,
'accounts_status' => $this->bo->verbose_status,
'owner' => array(),
);
if (!is_array($event)) if (!is_array($event))
{ {
$preserv = array( $preserv = array(
@ -581,8 +604,29 @@ class uiforms extends uical
if ($view) if ($view)
{ {
$content['participants'][$name][$name.'_status'] = $participants; $stati =& $content['participants'][$name][$name.'_status'];
$stati = $participants;
// enumerate group-invitations, so people can accept/reject them
if ($name == 'accounts')
{
foreach($participants as $id => $status) foreach($participants as $id => $status)
{
if ($GLOBALS['egw']->accounts->get_type($id) == 'g' &&
($members = $GLOBALS['egw']->accounts->member($id)))
{
$sel_options['accounts_status']['G'] = lang('Select one');
foreach($members as $member)
{
if (!isset($stati[$member['account_id']]) && $this->bo->check_perms(EGW_ACL_EDIT,0,$member['account_id']))
{
$stati[$member['account_id']] = 'G'; // status for invitation via membership in group
$content['participants'][$name][] = $member['account_id'];
}
}
}
}
}
foreach($stati as $id => $status)
{ {
$readonlys[$name.'_status['.$id.']'] = !$this->bo->check_perms(EGW_ACL_EDIT,0,($type != 'u' ? $type : '').$id); $readonlys[$name.'_status['.$id.']'] = !$this->bo->check_perms(EGW_ACL_EDIT,0,($type != 'u' ? $type : '').$id);
} }
@ -657,11 +701,6 @@ class uiforms extends uical
{ {
$readonlys['button[delete_series]'] = !$view || $event['recur_type'] == MCAL_RECUR_NONE; $readonlys['button[delete_series]'] = !$view || $event['recur_type'] == MCAL_RECUR_NONE;
} }
$sel_options = array(
'recur_type' => &$this->bo->recur_types,
'accounts_status' => &$this->bo->verbose_status,
'owner' => array(),
);
if ($event['id'] || $this->bo->check_perms(EGW_ACL_EDIT,$event)) // new event or edit rights to the event ==> allow to add alarm for all users if ($event['id'] || $this->bo->check_perms(EGW_ACL_EDIT,$event)) // new event or edit rights to the event ==> allow to add alarm for all users
{ {
$sel_options['owner'][0] = lang('All participants'); $sel_options['owner'][0] = lang('All participants');

View File

@ -192,6 +192,7 @@ class uiviews extends uical
$search_params['daywise'] = false; $search_params['daywise'] = false;
$search_params['start'] = $this->first; $search_params['start'] = $this->first;
$search_params['end'] = $this->last; $search_params['end'] = $this->last;
$search_params['enum_groups'] = $this->sortby == 'user';
$events = $this->bo->search($search_params); $events = $this->bo->search($search_params);
if ($this->debug > 0) $this->bo->debug_message('uiviews::planner() date=%1: first=%2, last=%3',False,$this->date,$this->bo->date2string($this->first),$this->bo->date2string($this->last)); if ($this->debug > 0) $this->bo->debug_message('uiviews::planner() date=%1: first=%2, last=%3',False,$this->date,$this->bo->date2string($this->first),$this->bo->date2string($this->last));

View File

@ -1,5 +1,5 @@
<?php <?php
// eTemplates for Application 'calendar', generated by soetemplate::dump4setup() 2005-11-12 18:04 // eTemplates for Application 'calendar', generated by soetemplate::dump4setup() 2005-11-23 11:13
/* $Id$ */ /* $Id$ */
@ -25,6 +25,8 @@ $templ_data[] = array('name' => 'calendar.edit.participants','template' => '','l
$templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:5:{s:2:"c1";s:7:"row,top";s:1:"A";s:2:"95";s:2:"h1";s:6:",@view";s:2:"h2";s:7:",!@view";s:2:"c2";s:4:",top";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:15:",,,participants";s:5:"label";s:12:"Participants";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"size";s:2:"14";s:4:"name";s:22:"participants[accounts]";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Resources";s:5:"align";s:5:"right";}s:1:"D";a:3:{s:4:"type";s:16:"resources_select";s:4:"size";s:2:"14";s:4:"name";s:23:"participants[resources]";}}i:2;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"B";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"participants[accounts]";s:7:"options";a:0:{}}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Resources";s:5:"align";s:5:"right";}s:1:"D";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:23:"participants[resources]";s:7:"options";a:0:{}}}}s:4:"rows";i:2;s:4:"cols";i:4;s:4:"size";s:23:"100%,200,,row_on,,,auto";s:7:"options";a:4:{i:3;s:6:"row_on";i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,row_on,,,auto','style' => '','modified' => '1129665796',); $templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:5:{s:2:"c1";s:7:"row,top";s:1:"A";s:2:"95";s:2:"h1";s:6:",@view";s:2:"h2";s:7:",!@view";s:2:"c2";s:4:",top";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:15:",,,participants";s:5:"label";s:12:"Participants";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"size";s:2:"14";s:4:"name";s:22:"participants[accounts]";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Resources";s:5:"align";s:5:"right";}s:1:"D";a:3:{s:4:"type";s:16:"resources_select";s:4:"size";s:2:"14";s:4:"name";s:23:"participants[resources]";}}i:2;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"B";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"participants[accounts]";s:7:"options";a:0:{}}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Resources";s:5:"align";s:5:"right";}s:1:"D";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:23:"participants[resources]";s:7:"options";a:0:{}}}}s:4:"rows";i:2;s:4:"cols";i:4;s:4:"size";s:23:"100%,200,,row_on,,,auto";s:7:"options";a:4:{i:3;s:6:"row_on";i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,row_on,,,auto','style' => '','modified' => '1129665796',);
$templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.0.1.003','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:5:{s:2:"c1";s:7:"row,top";s:1:"A";s:2:"95";s:2:"h1";s:6:",@view";s:2:"h2";s:7:",!@view";s:2:"c2";s:4:",top";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:15:",,,participants";s:5:"label";s:12:"Participants";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"size";s:12:"14,calendar+";s:4:"name";s:22:"participants[accounts]";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Resources";s:5:"align";s:5:"right";}s:1:"D";a:3:{s:4:"type";s:16:"resources_select";s:4:"size";s:2:"14";s:4:"name";s:23:"participants[resources]";}}i:2;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"B";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"participants[accounts]";s:7:"options";a:0:{}}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Resources";s:5:"align";s:5:"right";}s:1:"D";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:23:"participants[resources]";s:7:"options";a:0:{}}}}s:4:"rows";i:2;s:4:"cols";i:4;s:4:"size";s:23:"100%,200,,row_on,,,auto";s:7:"options";a:4:{i:3;s:6:"row_on";i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,row_on,,,auto','style' => '','modified' => '1129665796',);
$templ_data[] = array('name' => 'calendar.edit.recurrence','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:2:{s:2:"c1";s:3:"row";s:1:"A";s:2:"95";}i:1;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118737412',); $templ_data[] = array('name' => 'calendar.edit.recurrence','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:2:{s:2:"c1";s:3:"row";s:1:"A";s:2:"95";}i:1;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118737412',);
$templ_data[] = array('name' => 'calendar.edit.recurrence','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:6:{s:2:"c1";s:2:"th";s:1:"A";s:2:"95";s:2:"c2";s:3:"row";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:1:"D";s:3:"50%";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:27:"Repeating Event Information";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"be back soon ;-)";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_type";s:5:"label";s:11:"Repeat type";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:10:"recur_type";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:4:"size";s:17:",,,recur_interval";s:5:"label";s:8:"Interval";}s:1:"D";a:4:{s:4:"type";s:13:"select-number";s:4:"name";s:14:"recur_interval";s:4:"help";s:53:"repeating interval, eg. 2 to repeat every second week";s:4:"size";s:9:"None,2,10";}}i:3;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:16:",,,recur_enddate";s:5:"label";s:8:"End date";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:13:"recur_enddate";s:4:"help";s:57:"repeat the event until which date (empty means unlimited)";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_data";s:5:"label";s:11:"Repeat days";}s:1:"B";a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:3:"5,1";s:4:"name";s:10:"recur_data";s:4:"help";s:44:"Days of the week for a weekly repeated event";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:4;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118737412',); $templ_data[] = array('name' => 'calendar.edit.recurrence','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:6:{s:2:"c1";s:2:"th";s:1:"A";s:2:"95";s:2:"c2";s:3:"row";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:1:"D";s:3:"50%";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:27:"Repeating Event Information";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"be back soon ;-)";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_type";s:5:"label";s:11:"Repeat type";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:10:"recur_type";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:4:"size";s:17:",,,recur_interval";s:5:"label";s:8:"Interval";}s:1:"D";a:4:{s:4:"type";s:13:"select-number";s:4:"name";s:14:"recur_interval";s:4:"help";s:53:"repeating interval, eg. 2 to repeat every second week";s:4:"size";s:9:"None,2,10";}}i:3;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:16:",,,recur_enddate";s:5:"label";s:8:"End date";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:13:"recur_enddate";s:4:"help";s:57:"repeat the event until which date (empty means unlimited)";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_data";s:5:"label";s:11:"Repeat days";}s:1:"B";a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:3:"5,1";s:4:"name";s:10:"recur_data";s:4:"help";s:44:"Days of the week for a weekly repeated event";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:4;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118737412',);

View File

@ -88,7 +88,9 @@ enddate of the export calendar de Enddatum des Exports
ends calendar de endet ends calendar de endet
error adding the alarm calendar de Fehler beim Zufügen des Alarms error adding the alarm calendar de Fehler beim Zufügen des Alarms
error: importing the ical calendar de Fehler: beim Importieren des iCal error: importing the ical calendar de Fehler: beim Importieren des iCal
error: no participants selected !!! calendar de Fehler: keine Teilnehmer ausgewählt !!!
error: saving the event !!! calendar de Fehler: beim Speichern des Termins !!! error: saving the event !!! calendar de Fehler: beim Speichern des Termins !!!
error: starttime has to be before the endtime !!! calendar de Fehler: Startzeit muß vor Endzeit liegen !!!
event copied - the copy can now be edited calendar de Termin kopiert - die Kopie kann jetzt bearbeitet werden event copied - the copy can now be edited calendar de Termin kopiert - die Kopie kann jetzt bearbeitet werden
event deleted calendar de Termin gelöscht event deleted calendar de Termin gelöscht
event details follow calendar de Details zum Termin folgen event details follow calendar de Details zum Termin folgen

View File

@ -88,7 +88,9 @@ enddate of the export calendar en Enddate of the export
ends calendar en ends ends calendar en ends
error adding the alarm calendar en Error adding the alarm error adding the alarm calendar en Error adding the alarm
error: importing the ical calendar en Error: importing the iCal error: importing the ical calendar en Error: importing the iCal
error: no participants selected !!! calendar en Error: no participants selected !!!
error: saving the event !!! calendar en Error: saving the event !!! error: saving the event !!! calendar en Error: saving the event !!!
error: starttime has to be before the endtime !!! calendar en Error: Starttime has to be before the endtime !!!
event copied - the copy can now be edited calendar en Event copied - the copy can now be edited event copied - the copy can now be edited calendar en Event copied - the copy can now be edited
event deleted calendar en Event deleted event deleted calendar en Event deleted
event details follow calendar en Event Details follow event details follow calendar en Event Details follow

View File

@ -12,7 +12,7 @@
/* $Id$ */ /* $Id$ */
$setup_info['calendar']['name'] = 'calendar'; $setup_info['calendar']['name'] = 'calendar';
$setup_info['calendar']['version'] = '1.0.1.009'; $setup_info['calendar']['version'] = '1.2';
$setup_info['calendar']['app_order'] = 3; $setup_info['calendar']['app_order'] = 3;
$setup_info['calendar']['enable'] = 1; $setup_info['calendar']['enable'] = 1;
@ -67,3 +67,4 @@

View File

@ -18,7 +18,6 @@
'cal_uid' => array('type' => 'varchar','precision' => '255','nullable' => False), 'cal_uid' => array('type' => 'varchar','precision' => '255','nullable' => False),
'cal_owner' => array('type' => 'int','precision' => '4','nullable' => False), 'cal_owner' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_category' => array('type' => 'varchar','precision' => '30'), 'cal_category' => array('type' => 'varchar','precision' => '30'),
'cal_groups' => array('type' => 'varchar','precision' => '255'),
'cal_modified' => array('type' => 'int','precision' => '8'), 'cal_modified' => array('type' => 'int','precision' => '8'),
'cal_priority' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '2'), 'cal_priority' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '2'),
'cal_public' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '1'), 'cal_public' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '1'),

View File

@ -38,7 +38,6 @@
$GLOBALS['egw_setup']->oProc->AlterColumn($table, $field, array('type' => 'int', 'precision' => 4, 'nullable' => false, 'default' => 0)); $GLOBALS['egw_setup']->oProc->AlterColumn($table, $field, array('type' => 'int', 'precision' => 4, 'nullable' => false, 'default' => 0));
} }
$test[] = '0.9.3pre1'; $test[] = '0.9.3pre1';
function calendar_upgrade0_9_3pre1() function calendar_upgrade0_9_3pre1()
{ {
@ -47,66 +46,77 @@
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre2'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre2';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3pre2"; $test[] = "0.9.3pre2";
function calendar_upgrade0_9_3pre2() function calendar_upgrade0_9_3pre2()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre3'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre3';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3pre3"; $test[] = "0.9.3pre3";
function calendar_upgrade0_9_3pre3() function calendar_upgrade0_9_3pre3()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre4'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre4';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3pre4"; $test[] = "0.9.3pre4";
function calendar_upgrade0_9_3pre4() function calendar_upgrade0_9_3pre4()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre5'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre5';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3pre5"; $test[] = "0.9.3pre5";
function calendar_upgrade0_9_3pre5() function calendar_upgrade0_9_3pre5()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre6'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre6';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3pre6"; $test[] = "0.9.3pre6";
function calendar_upgrade0_9_3pre6() function calendar_upgrade0_9_3pre6()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre7'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre7';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3pre7"; $test[] = "0.9.3pre7";
function calendar_upgrade0_9_3pre7() function calendar_upgrade0_9_3pre7()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre8'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre8';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3pre8"; $test[] = "0.9.3pre8";
function calendar_upgrade0_9_3pre8() function calendar_upgrade0_9_3pre8()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre9'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre9';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3pre9"; $test[] = "0.9.3pre9";
function calendar_upgrade0_9_3pre9() function calendar_upgrade0_9_3pre9()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre10'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3pre10';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3pre10"; $test[] = "0.9.3pre10";
function calendar_upgrade0_9_3pre10() function calendar_upgrade0_9_3pre10()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.3';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.3"; $test[] = "0.9.3";
function calendar_upgrade0_9_3() function calendar_upgrade0_9_3()
{ {
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.4pre1'; $GLOBALS['setup_info']['calendar']['currentver'] = '0.9.4pre1';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = "0.9.4pre1"; $test[] = "0.9.4pre1";
function calendar_upgrade0_9_4pre1() function calendar_upgrade0_9_4pre1()
{ {
@ -1446,4 +1456,46 @@
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.009'; $GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.009';
return $GLOBALS['setup_info']['calendar']['currentver']; return $GLOBALS['setup_info']['calendar']['currentver'];
} }
$test[] = '1.0.1.009';
function calendar_upgrade1_0_1_009()
{
$db2 = clone($GLOBALS['egw_setup']->db);
$add_groups = array();
$GLOBALS['egw_setup']->db->select('egw_cal','DISTINCT egw_cal.cal_id,cal_groups,cal_recur_date',"cal_groups != ''",__LINE__,__FILE__,
False,'','calendar',0,',egw_cal_user WHERE egw_cal.cal_id=egw_cal_user.cal_id');
while(($row = $GLOBALS['egw_setup']->db->row(true)))
{
$row['cal_user_type'] = 'u';
foreach(explode(',',$row['cal_groups']) as $group)
{
$row['cal_user_id'] = $group;
$db2->insert('egw_cal_user',array('cal_status' => 'U'),$row,__LINE__,__FILE__,'calendar');
}
}
$GLOBALS['egw_setup']->oProc->DropColumn('egw_cal',array(
'fd' => array(
'cal_id' => array('type' => 'auto','nullable' => False),
'cal_uid' => array('type' => 'varchar','precision' => '255','nullable' => False),
'cal_owner' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_category' => array('type' => 'varchar','precision' => '30'),
'cal_modified' => array('type' => 'int','precision' => '8'),
'cal_priority' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '2'),
'cal_public' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '1'),
'cal_title' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '1'),
'cal_description' => array('type' => 'text'),
'cal_location' => array('type' => 'varchar','precision' => '255'),
'cal_reference' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'),
'cal_modifier' => array('type' => 'int','precision' => '4'),
'cal_non_blocking' => array('type' => 'int','precision' => '2','default' => '0')
),
'pk' => array('cal_id'),
'fk' => array(),
'ix' => array(),
'uc' => array()
),'cal_groups');
return $GLOBALS['setup_info']['calendar']['currentver'] = '1.2';
}
?> ?>