* * http://www.radix.net/~cknudsen * * Modified by Mark Peters * * -------------------------------------------- * * This program is free software; you can redistribute it and/or modify it * * under the terms of the GNU General Public License as published by the * * Free Software Foundation; either version 2 of the License, or (at your * * option) any later version. * \**************************************************************************/ /* $Id$ */ class uicalendar { var $template; var $template_dir; var $bo; var $cat; var $holidays; var $holiday_color; var $debug = False; var $cat_id; var $public_functions = array( 'mini_calendar' => True, 'index' => True, 'month' => True, 'week' => True, 'year' => True, 'view' => True, 'add' => True, 'edit' => True, 'update' => True, 'delete' => True, 'preferences' => True, 'day' => True, 'edit_status' => True, 'set_action' => True, 'header' => True, 'footer' => True ); function uicalendar() { global $phpgw, $phpgw_info; $phpgw->browser = CreateObject('phpgwapi.browser'); $this->bo = CreateObject('calendar.bocalendar',1); if($this->debug) { echo "BO Owner : ".$this->bo->owner."
\n"; } $this->template = $phpgw->template; $this->template_dir = $phpgw->common->get_tpl_dir('calendar'); $this->cat = CreateObject('phpgwapi.categories'); $this->holiday_color = (substr($phpgw_info['theme']['bg07'],0,1)=='#'?'':'#').$phpgw_info['theme']['bg07']; $this->cat_id = $this->bo->cat_id; if($this->bo->use_session) { $this->save_sessiondata(); } if($this->debug) { $this->_debug_sqsof(); } } /* Public functions */ function mini_calendar($day,$month,$year,$link='',$buttons="none",$outside_month=True) { global $phpgw, $phpgw_info; $this->bo->read_holidays(); $date = $this->bo->datetime->makegmttime(0,0,0,$month,$day,$year); $month_ago = intval(date('Ymd',mktime(0,0,0,$month - 1,$day,$year))); $month_ahead = intval(date('Ymd',mktime(0,0,0,$month + 1,$day,$year))); $monthstart = intval(date('Ymd',mktime(0,0,0,$month,1,$year))); $monthend = intval(date('Ymd',mktime(0,0,0,$month + 1,0,$year))); $weekstarttime = $this->bo->datetime->get_weekday_start($year,$month,1); $p = CreateObject('phpgwapi.Template',$this->template_dir); $p->set_unknowns('remove'); $templates = Array( 'mini_calendar' => 'mini_cal.tpl' ); $p->set_file($templates); $p->set_block('mini_calendar','mini_cal','mini_cal'); $p->set_block('mini_calendar','mini_week','mini_week'); $p->set_block('mini_calendar','mini_day','mini_day'); if($this->bo->printer_friendly == False) { $month = '' . lang($phpgw->common->show_date($date['raw'],'F')).' '.$phpgw->common->show_date($date['raw'],'Y').''; } else { $month = lang($phpgw->common->show_date($date['raw'],'F')).' '.$phpgw->common->show_date($date['raw'],'Y'); } $var = Array( 'cal_img_root' => $phpgw->common->image('calendar','mini-calendar-bar.gif'), 'bgcolor' => $phpgw_info['theme']['bg_color'], 'bgcolor1' => $phpgw_info['theme']['bg_color'], 'month' => $month, 'bgcolor2' => $phpgw_info['theme']['cal_dayview'], 'holiday_color' => $this->holiday_color ); $p->set_var($var); switch(strtolower($buttons)) { case 'right': $var = Array( 'nextmonth' => '' ); break; case 'left': $var = Array( 'prevmonth' => '' ); break; case 'both': $var = Array( 'prevmonth' => '', 'nextmonth' => '' ); break; case 'none': default: $var = Array( 'prevmonth' => '', 'nextmonth' => '' ); break; } $p->set_var($var); for($i=0;$i<7;$i++) { $p->set_var('dayname','' . substr(lang($this->bo->datetime->days[$i]),0,2) . ''); $p->parse('daynames','mini_day',True); } $today = date('Ymd',time()); unset($date); for($i=$weekstarttime;date('Ymd',$i)<=$monthend;$i += (24 * 3600 * 7)) { unset($var); $daily = $this->bo->set_week_array($i,$cellcolor,$weekly); @reset($daily); while(list($date,$day_params) = each($daily)) { // echo 'Mini-Cal Date : '.$date."
\n"; $year = intval(substr($date,0,4)); $month = intval(substr($date,4,2)); $day = intval(substr($date,6,2)); $str = ''; if(($date >= $monthstart && $date <= $monthend) || $outside_month == True) { if(!$this->bo->printer_friendly) { $str = ''.$day.''; } else { $str = $day; } } $var[] = Array( 'day_image' => $day_params['day_image'], 'dayname' => $str ); } for($l=0;$loutput_template_array($p,'monthweek_day','mini_day',$var[$l]); } $p->parse('display_monthweek','mini_week',True); $p->set_var('dayname',''); $p->set_var('monthweek_day',''); } $return_value = $p->fp('out','mini_cal'); unset($p); return $return_value; } function index() { global $phpgw; Header('Location: '. $this->page()); $phpgw_info['flags']['nofooter'] = True; $phpgw->common->phpgw_exit(); } function month() { global $phpgw, $phpgw_info; $this->bo->read_holidays(); $p = CreateObject('phpgwapi.Template',$this->template_dir); $p->set_unknowns('remove'); $templates = Array( 'index_t' => 'index.tpl' ); $p->set_file($templates); $m = mktime(0,0,0,$this->bo->month,1,$this->bo->year); if (!$this->bo->printer_friendly) { unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw->common->phpgw_header(); $printer = ''; $param = '&year='.$this->bo->year.'&month='.$this->bo->month.'&friendly=1'; $print = '[".lang('Printer Friendly').']'; $minical_prev = $this->mini_calendar(1,$this->bo->month - 1,$this->bo->year,'day'); $minical_next = $this->mini_calendar(1,$this->bo->month + 1,$this->bo->year,'day'); } else { $printer = ''; $print = ''; if($this->bo->prefs['calendar']['display_minicals'] == 'Y' || $this->bo->prefs['calendar']['display_minicals']) { $minical_prev = $this->mini_calendar(1,$this->bo->month - 1,$this->bo->year,'day'); $minical_next = $this->mini_calendar(1,$this->bo->month + 1,$this->bo->year,'day'); } else { $minical_prev = ''; $minical_next = ''; } } $var = Array( 'printer_friendly' => $printer, 'bg_text' => $phpgw_info['theme']['bg_text'], 'small_calendar_prev' => $minical_prev, 'month_identifier' => lang(strftime("%B",$m)) . ' ' . $this->bo->year, 'username' => $phpgw->common->grab_owner_name($this->bo->owner), 'small_calendar_next' => $minical_next, 'large_month' => $this->display_month($this->bo->month,$this->bo->year,True,$this->bo->owner), 'print' => $print ); $p->set_var($var); $p->pparse('out','index_t'); if($this->bo->printer_friendly) { $phpgw_info['flags']['nofooter'] = True; } } function week() { global $phpgw, $phpgw_info; $this->bo->read_holidays(); $next = $this->bo->datetime->makegmttime(0,0,0,$this->bo->month,$this->bo->day + 7,$this->bo->year); $prev = $this->bo->datetime->makegmttime(0,0,0,$this->bo->month,$this->bo->day - 7,$this->bo->year); $nextmonth = $this->bo->datetime->makegmttime(0,0,0,$this->bo->month + 1,1,$this->bo->year); $prevmonth = $this->bo->datetime->makegmttime(0,0,0,$this->bo->month - 1,1,$this->bo->year); $first = $this->bo->datetime->gmtdate($this->bo->datetime->get_weekday_start($this->bo->year, $this->bo->month, $this->bo->day)); $last = $this->bo->datetime->gmtdate($first['raw'] + 518400); // Week Label $week_id = lang(strftime("%B",$first['raw'])).' '.$first['day']; if($first['month'] <> $last['month'] && $first['year'] <> $last['year']) { $week_id .= ', '.$first['year']; } $week_id .= ' - '; if($first['month'] <> $last['month']) { $week_id .= lang(strftime("%B",$last['raw'])).' '; } $week_id .= $last['day'].', '.$last['year']; $p = CreateObject('phpgwapi.Template',$this->template_dir); $templates = Array( 'week_t' => 'week.tpl' ); $p->set_file($templates); if (!$this->bo->printer_friendly) { unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw->common->phpgw_header(); $printer = ''; $prev_week_link = '<<'; $next_week_link = '>>'; $param = '&year='.$this->bo->year.'&month='.$this->bo->month.'&day='.$this->bo->day.'&friendly=1'; $print = '[".lang('Printer Friendly').']'; $minical_this = $this->mini_calendar($this->bo->day,$this->bo->month,$this->bo->year,'day','none',False); $minical_prev = $this->mini_calendar(1,$this->bo->month - 1,$this->bo->year,'day','left',False); $minical_next = $this->mini_calendar(1,$this->bo->month + 1,$this->bo->year,'day','right',False); } else { $printer = ''; $prev_week_link = '<<'; $next_week_link = '>>'; $print = ''; if($this->bo->prefs['calendar']['display_minicals'] == 'Y' || $this->bo->prefs['calendar']['display_minicals']) { $minical_this = $this->mini_calendar($this->bo->day,$this->bo->month,$this->bo->year,'day'); $minical_prev = $this->mini_calendar(1,$this->bo->month - 1,$this->bo->year,'day'); $minical_next = $this->mini_calendar(1,$this->bo->month + 1,$this->bo->year,'day'); } else { $minical_this = ''; $minical_prev = ''; $minical_next = ''; } } $var = Array( 'printer_friendly' => $printer, 'bg_text' => $phpgw_info['themem']['bg_text'], 'small_calendar_prev' => $minical_prev, 'prev_week_link' => $prev_week_link, 'small_calendar_this' => $minical_this, 'week_identifier' => $week_id, 'next_week_link' => $next_week_link, 'username' => $phpgw->common->grab_owner_name($this->bo->owner), 'small_calendar_next' => $minical_next, 'week_display' => $this->display_weekly($this->bo->day,$this->bo->month,$this->bo->year,true,$this->bo->owner), 'print' => $print ); $p->set_var($var); $p->pparse('out','week_t'); flush(); if($this->bo->printer_friendly) { $phpgw_info['flags']['nofooter'] = True; } } function year() { global $phpgw, $phpgw_info; if ($this->bo->printer_friendly) { echo ''; } else { unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw->common->phpgw_header(); } ?>
bo->printer_friendly) { echo 'bo->printer_friendly) { echo 'bo->printer_friendly) { $link = 'day.php'; } else { $link = ''; } for($i=1;$i<13;$i++) { echo ''; } } ?>
<<'; } ?> bo->year; ?> >>'; } ?>
'; echo $this->mini_calendar($i,$i,$this->bo->year,$link,'none',False); if($i % 3 == 0) { echo '
bo->printer_friendly) { $phpgw_info['flags']['nofooter'] = True; } else { echo ' ['.lang('Printer Friendly').']'; } } function view() { global $phpgw,$phpgw_info,$cal_id,$submit,$referer; unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw->common->phpgw_header(); // First, make sure they have permission to this entry if ($cal_id < 1) { echo lang('Invalid entry id.'); $phpgw->common->phpgw_footer(); $phpgw->common->phpgw_exit(); } if($this->bo->check_perms(PHPGW_ACL_READ) == False) { echo lang('You do not have permission to read this record!'); $phpgw->common->phpgw_footer(); $phpgw->common->phpgw_exit(); } $event = $this->bo->read_entry($cal_id); echo '
'; if(isset($event->id)) { echo $this->view_event($event); $thisyear = $event->start->year; $thismonth = $event->start->month; $thisday = $event->start->mday; $p = CreateObject('phpgwapi.Template',$this->template_dir); $templates = Array( 'form_button' => 'form_button_script.tpl' ); $p->set_file($templates); if ($this->bo->owner == $event->owner && $this->bo->check_perms(PHPGW_ACL_EDIT) == True) { $var = Array( 'action_url_button' => $this->page('edit','&cal_id='.$cal_id), 'action_text_button' => lang('Edit'), 'action_confirm_button' => '', 'action_extra_field' => '' ); $p->set_var($var); echo $p->fp('out','form_button'); } if ($this->bo->owner == $event->owner && $this->bo->check_perms(PHPGW_ACL_DELETE) == True) { $var = Array( 'action_url_button' => $this->page('delete','&cal_id='.$cal_id), 'action_text_button' => lang('Delete'), 'action_confirm_button' => "onClick=\"return confirm('".lang("Are you sure\\nyou want to\\ndelete this entry ?\\n\\nThis will delete\\nthis entry for all users.")."')\"", 'action_extra_field' => '' ); $p->set_var($var); echo $p->fp('out','form_button'); } } else { echo lang("Sorry, the owner has just deleted this event").'.'; } echo '
'; } function edit() { global $phpgw, $phpgw_info, $cal_id, $readsess, $hour, $minute, $cd; $sb = CreateObject('phpgwapi.sbox'); if ($this->bo->prefs['common']['timeformat'] == '12') { $hourformat = 'h'; } else { $hourformat = 'H'; } if ($cal_id > 0) { $event = $this->bo->read_entry(intval($cal_id)); $can_edit = $this->bo->can_user_edit($event); if($can_edit == False) { header('Location: '.$this->page('view','&cal_id='.$cal_id)); } } elseif(isset($readsess)) { $event = $this->bo->restore_from_appsession; if($event->owner == 0) { $this->bo->add_attribute('owner',$this->bo->owner); } $can_edit = True; } else { if(!$this->bo->check_perms(PHPGW_ACL_ADD)) { header('Location: '.$this->page('view','&cal_id='.$cal_id)); } $this->bo->event_init(); $this->bo->add_attribute('id',0); $can_edit = True; if (!isset($hour)) { $thishour = 0; } else { $thishour = (int)$hour; } if (!isset($minute)) { $thisminute = 00; } else { $thisminute = (int)$minute; } $this->bo->set_start($this->bo->year,$this->bo->month,$this->bo->day,$thishour,$thisminute,0); $this->bo->set_end($this->bo->year,$this->bo->month,$this->bo->day,$thishour,$thisminute,0); $this->bo->set_title(''); $this->bo->set_description(''); $this->bo->add_attribute('priority',2); if($this->bo->prefs['calendar']['default_private'] == 'Y' || $this->bo->prefs['calendar']['default_private'] == True) { $this->bo->set_class(False); } else { $this->bo->set_class(True); } $this->bo->set_recur_none(); $event = $this->bo->get_cached_event(); } $start = mktime($event->start->hour,$event->start->min,$event->start->sec,$event->start->month,$event->start->mday,$event->start->year) - $this->bo->datetime->tz_offset; $end = mktime($event->end->hour,$event->end->min,$event->end->sec,$event->end->month,$event->end->mday,$event->end->year) - $this->bo->datetime->tz_offset; unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw->common->phpgw_header(); $p = CreateObject('phpgwapi.Template',$this->template_dir); $templates = Array( 'edit' => 'edit.tpl', 'form_button' => 'form_button_script.tpl' ); $p->set_file($templates); $p->set_block('edit','edit_entry','edit_entry'); $p->set_block('edit','list','list'); $p->set_block('edit','hr','hr'); if($cal_id > 0) { $action = lang('Calendar - Edit'); } else { $action = lang('Calendar - Add'); } if($cd) { $errormsg = $phpgw->common->check_code($cd); } else { $errormsg = ''; } $common_hidden = ''."\n" . ''."\n"; $vars = Array( 'font' => $phpgw_info['theme']['font'], 'bg_color' => $phpgw_info['theme']['bg_text'], 'calendar_action' => $action, 'action_url' => $this->page('update'), 'common_hidden' => $common_hidden, 'errormsg' => $errormsg ); $p->set_var($vars); // Brief Description $var[] = Array( 'field' => lang('Title'), 'data' => '' ); // Full Description $var[] = Array( 'field' => lang('Full Description'), 'data' => '' ); // Display Categories $var[] = Array( 'field' => lang('Category'), 'data' => '' ); // Date $day_html = $sb->getDays('start[mday]',intval($phpgw->common->show_date($start,'d'))); $month_html = $sb->getMonthText('start[month]',intval($phpgw->common->show_date($start,'n'))); $year_html = $sb->getYears('start[year]',intval($phpgw->common->show_date($start,'Y')),intval($phpgw->common->show_date($start,'Y'))); $var[] = Array( 'field' => lang('Start Date'), 'data' => $phpgw->common->dateformatorder($year_html,$month_html,$day_html) ); // Time $amsel = ' checked'; $pmsel = ''; if ($this->bo->prefs['common']['timeformat'] == '12') { if ($event->start->hour >= 12) { $amsel = ''; $pmsel = ' checked'; } } $str = ':'; if ($this->bo->prefs['common']['timeformat'] == '12') { $str .= 'am'; $str .= 'pm'; } $var[] = Array( 'field' => lang('Start Time'), 'data' => $str ); // End Date $day_html = $sb->getDays('end[mday]',intval($phpgw->common->show_date($end,'d'))); $month_html = $sb->getMonthText('end[month]',intval($phpgw->common->show_date($end,'n'))); $year_html = $sb->getYears('end[year]',intval($phpgw->common->show_date($end,'Y')),intval($phpgw->common->show_date($end,'Y'))); $var[] = Array( 'field' => lang('End Date'), 'data' => $phpgw->common->dateformatorder($year_html,$month_html,$day_html) ); // End Time $amsel = ' checked'; $pmsel = ''; if ($this->bo->prefs['common']['timeformat'] == '12') { if ($event->end->hour >= 12) { $amsel = ''; $pmsel = ' checked'; } } $str = ':'; if ($this->bo->prefs['common']['timeformat'] == '12') { $str .= 'am'; $str .= 'pm'; } $var[] = Array( 'field' => lang("End Time"), 'data' => $str ); // Priority $var[] = Array( 'field' => lang('Priority'), 'data' => $sb->getPriority('cal[priority]',$event->priority) ); // Access $str = 'public != True) { $str .= ' checked'; } $str .= '>'; $var[] = Array( 'field' => lang('Private'), 'data' => $str ); function build_part_list(&$users,$accounts,$owner) { global $phpgw; if($accounts == False) { return; } while(list($index,$id) = each($accounts)) { if(intval($id) == $owner) { continue; } if(!isset($users[intval($id)])) { if($phpgw->accounts->exists(intval($id)) == True) { $users[intval($id)] = $phpgw->common->grab_owner_name(intval($id)); } if($phpgw->accounts->get_type(intval($id)) == 'g') { build_part_list($users,$phpgw->acl->get_ids_for_location(intval($id),1,'phpgw_group'),$owner); } } } } // Participants $accounts = $phpgw->acl->get_ids_for_location('run',1,'calendar'); $users = Array(); build_part_list($users,$accounts,$owner); while(list($key,$status) = each($event->participants)) { $parts[$key] = ' selected'; } $str = "\n".' '; $var[] = Array( 'field' => lang('Participants'), 'data' => $str ); // I Participate $str = ' 0) && isset($event->participants[$this->bo->owner])) || !isset($cal_id)) { $str .= ' checked'; } $str .= '>'; $var[] = Array( 'field' => $phpgw->common->grab_owner_name($this->bo->owner).' '.lang('Participates'), 'data' => $str ); for($i=0;$ioutput_template_array($p,'row','list',$var[$i]); } unset($var); // Repeat Type $p->set_var('hr_text','
'); $p->parse('row','hr',True); $p->set_var('hr_text','
'.lang('Repeating Event Information').'

'); $p->parse('row','hr',True); $rpt_type = Array( MCAL_RECUR_NONE, MCAL_RECUR_DAILY, MCAL_RECUR_WEEKLY, MCAL_RECUR_MONTHLY_WDAY, MCAL_RECUR_MONTHLY_MDAY, MCAL_RECUR_YEARLY ); $rpt_type_out = Array( MCAL_RECUR_NONE => 'None', MCAL_RECUR_DAILY => 'Daily', MCAL_RECUR_WEEKLY => 'Weekly', MCAL_RECUR_MONTHLY_WDAY => 'Monthly (by day)', MCAL_RECUR_MONTHLY_MDAY => 'Monthly (by date)', MCAL_RECUR_YEARLY => 'Yearly' ); $str = ''; $var[] = Array( 'field' => lang('Repeat Type'), 'data' => $str ); $str = 'recur_enddate->year != 0 && $event->recur_enddate->month != 0 && $event->recur_enddate->mday != 0) { $str .= ' checked'; $recur_end = mktime($event->recur_enddate->hour,$event->recur_enddate->min,$event->recur_enddate->sec,$event->recur_enddate->month,$event->recur_enddate->mday,$event->recur_enddate->year) - $this->bo->datetime->tz_offset; } else { $recur_end = mktime($event->start->hour,$event->start->min,$event->start->sec,$event->start->month,$event->start->mday,$event->start->year) + 86400 - $this->bo->datetime->tz_offset; } $str .= '>'.lang('Use End Date').' '; $day_html = $sb->getDays('recur_enddate[mday]',intval($phpgw->common->show_date($recur_end,'d'))); $month_html = $sb->getMonthText('recur_enddate[month]',intval($phpgw->common->show_date($recur_end,'n'))); $year_html = $sb->getYears('recur_enddate[year]',intval($phpgw->common->show_date($recur_end,'Y')),intval($phpgw->common->show_date($recur_end,'Y'))); $str .= $phpgw->common->dateformatorder($year_html,$month_html,$day_html); $var[] = Array( 'field' => lang('Repeat End Date'), 'data' => $str ); $str = 'recur_data & MCAL_M_SUNDAY) ?' checked':'').'> '.lang('Sunday').' '; $str .= 'recur_data & MCAL_M_MONDAY) ?' checked':'').'> '.lang('Monday').' '; $str .= 'recur_data & MCAL_M_TUESDAY) ?' checked':'').'> '.lang('Tuesday').' '; $str .= 'recur_data & MCAL_M_WEDNESDAY) ?' checked':'').'> '.lang('Wednesday').'
'; $str .= 'recur_data & MCAL_M_THURSDAY) ?' checked':'').'> '.lang('Thursday').' '; $str .= 'recur_data & MCAL_M_FRIDAY) ?' checked':'').'> '.lang('Friday').' '; $str .= 'recur_data & MCAL_M_SATURDAY) ?' checked':'').'> '.lang('Saturday').' '; $var[] = Array( 'field' => lang('Repeat Day').'
'.lang('(for weekly)'), 'data' => $str ); $var[] = Array( 'field' => lang('Frequency'), 'data' => '' ); for($i=0;$ioutput_template_array($p,'row','list',$var[$i]); } $p->set_var('submit_button',lang('Submit')); if ($cal_id > 0) { $action_url_button = $this->page('delete','&cal_id='.$cal_id); $action_text_button = lang('Delete'); $action_confirm_button = "onClick=\"return confirm('".lang("Are you sure\\nyou want to \\ndelete this entry?\\n\\nThis will delete\\nthis entry for all users.")."')\""; $var = Array( 'action_url_button' => $action_url_button, 'action_text_button' => $action_text_button, 'action_confirm_button' => $action_confirm_button, 'action_extra_field' => '' ); $p->set_var($var); $p->parse('delete_button','form_button'); } else { $p->set_var('delete_button',''); } $p->pparse('out','edit_entry'); } function update() { global $phpgw, $phpgw_info, $readsess, $cal, $participants, $start, $end, $recur_enddate; if(!isset($readsess)) { $this->bo->fix_update_time($start); $this->bo->fix_update_time($end); if(!isset($cal[private])) { $cal[private] = 'public'; } $is_public = ($private == 'public'?1:0); $this->bo->event_init(); $this->bo->set_category($cal[category]); $this->bo->set_title($cal[title]); $this->bo->set_description($cal[description]); $this->bo->set_start($start[year],$start[month],$start[mday],$start[hour],$start[min],0); $this->bo->set_end($end[year],$end[month],$end[mday],$end[hour],$end[min],0); $this->bo->set_class($is_public); if($cal[id] != 0) { $this->bo->add_attribute('id',$cal[id]); } if($cal[rpt_use_end] != 'y') { $recur_enddate[year] = 0; $recur_enddate[month] = 0; $recur_enddate[mday] = 0; } $cal[recur_data] = $cal[rpt_sun] + $cal[rpt_mon] + $cal[rpt_tue] + $cal[rpt_wed] + $cal[rpt_thu] + $cal[rpt_fri] + $cal[rpt_sat]; switch($cal[recur_type]) { case MCAL_RECUR_NONE: $this->bo->set_recur_none(); break; case MCAL_RECUR_DAILY: $this->bo->set_recur_daily($recur_enddate[year],$recur_enddate[month],$recur_enddate[mday],$cal[recur_interval]); break; case MCAL_RECUR_WEEKLY: $this->bo->set_recur_weekly($recur_enddate[year],$recur_enddate[month],$recur_enddate[mday],$cal[recur_interval],$cal[recur_data]); break; case MCAL_RECUR_MONTHLY_MDAY: $this->bo->set_recur_monthly_mday($recur_enddate[year],$recur_enddate[month],$recur_enddate[mday],$cal[recur_interval]); break; case MCAL_RECUR_MONTHLY_WDAY: $this->bo->set_recur_monthly_wday($recur_enddate[year],$recur_enddate[month],$recur_enddate[mday],$cal[recur_interval]); break; case MCAL_RECUR_YEARLY: $this->bo->set_recur_yearly($recur_enddate[year],$recur_enddate[month],$recur_enddate[mday],$cal[recur_interval]); break; } $parts = $participants; $minparts = min($participants); $part = Array(); for($i=0;$iaccounts->get_type(intval($parts[$i])); if($acct_type == 'u') { $part[$parts[$i]] = 1; } elseif($acct_type == 'g') { /* This pulls ALL users of a group and makes them as participants to the event */ /* I would like to turn this back into a group thing. */ $acct = CreateObject('phpgwapi.accounts',intval($parts[$i])); $members = $acct->members(intval($parts[$i])); unset($acct); if($members == False) { continue; } while($member = each($members)) { $part[$member[1]['account_id']] = 1; } } } @reset($part); while(list($key,$value) = each($part)) { $this->bo->add_attribute('participants['.$key.']','U'); } reset($participants); $event = $this->bo->get_cached_event(); if(!@$event->participants[$cal[owner]]) { $this->bo->add_attribute('owner',$minparts); } $this->bo->add_attribute('priority',$cal[priority]); $event = $this->bo->get_cached_event(); $this->bo->store_to_appsession($event); $datetime_check = $this->bo->validate_update($event); if($datetime_check) { Header('Location: '.$this->page('edit','&readsess='.$event->id.'&cd='.$datetime_check)); } $start = mktime($event->start->hour,$event->start->min,$event->start->sec,$event->start->month,$event->start->mday,$event->start->year) - $this->bo->datetime->tz_offset; $end = mktime($event->end->hour,$event->end->min,$event->end->sec,$event->end->month,$event->end->mday,$event->end->year) - $this->bo->datetime->tz_offset; $overlapping_events = $this->bo->overlap($start,$end,$event->participants,$event->owner,$event->id); } else { $event = $this->bo->restore_from_appsession(); $datetime_check = $this->bo->validate_update($event); $overlapping_events = False; if($datetime_check) { Header('Location: '.$this->page('edit','&readsess='.$event->id.'&cd='.$datetime_check)); } } if(count($overlapping_events) > 0 && $overlapping_events != False) { unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw->common->phpgw_header(); $p = CreateObject('phpgwapi.Template',$phpgw->common->get_tpl_dir('calendar')); $templates = Array( 'overlap' => 'overlap.tpl', 'form_button' => 'form_button_script.tpl' ); $p->set_file($templates); $p->set_var('color',$phpgw_info['theme']['bg_text']); $p->set_var('overlap_title',lang('Scheduling Conflict')); $overlap = ''; for($i=0;$ibo->read_entry($overlapping_events[$i]); $overlap .= '
  • '.$this->link_to_entry($over,$event->start->month,$event->start->mday,$event->start->year); } if(strlen($overlap) > 0) { $var = Array( 'overlap_text' => lang('Your suggested time of x - x conflicts with the following existing calendar entries:',$phpgw->common->show_date($start),$phpgw->common->show_date($end)), 'overlap_list' => $overlap ); } else { $var = Array( 'overlap_text' => '', 'overlap_list' => '' ); } $p->set_var($var); // $phpgw->calendar->event = $event; $var = Array( 'action_url_button' => $this->page('update','&readsess='.$event->id.'&year='.$event->start->year.'&month='.$event->start->month.'&day='.$event->start->mday), 'action_text_button' => lang('Ignore Conflict'), 'action_confirm_button' => '', 'action_extra_field' => '' ); $p->set_var($var); $p->parse('resubmit_button','form_button'); $var = Array( 'action_url_button' => $this->page('update','&readsess='.$event->id.'&year='.$event->start->year.'&month='.$event->start->month.'&day='.$event->start->mday), 'action_text_button' => lang('Re-Edit Event'), 'action_confirm_button' => '', 'action_extra_field' => '' ); $p->set_var($var); $p->parse('reedit_button','form_button'); $p->pparse('out','overlap'); } else { if(!$event->id) { $this->bo->add_entry($event); } elseif($event->id) { $this->bo->update_entry($event); } Header('Location: '.$this->page('','&year='.$event->start->year.'&month='.$event->start->month.'&day='.$event->start->mday.'&cd=14&owner='.$this->bo->owner)); } } function delete() { global $cal_id; $event = $this->bo->read_entry(intval($cal_id)); if(($cal_id > 0) && ($event->owner == $this->bo->owner) && ($this->bo->check_perms(PHPGW_ACL_DELETE) == True)) { $date = sprintf("%04d%02d%02d",$event->start->year,$event->start->month,$event->start->mday); $this->bo->delete_entry(intval($cal_id)); $this->bo->expunge(); } else { $date = sprintf("%04d%02d%02d",$this->bo->year,$this->bo->month,$this->bo->day); } Header('Location: '.$this->page('','&date='.$date)); } function preferences() { global $phpgw, $phpgw_info, $submit, $prefs; if ($submit) { $phpgw->preferences->read_repository(); $phpgw->preferences->add('calendar','weekdaystarts',$prefs[weekdaystarts]); $phpgw->preferences->add('calendar','workdaystarts',$prefs[workdaystarts]); $phpgw->preferences->add('calendar','workdayends',$prefs[workdayends]); $phpgw->preferences->add('calendar','defaultcalendar',$prefs[defaultcalendar]); $phpgw->preferences->add('calendar','defaultfilter',$prefs[defaultfilter]); $phpgw->preferences->add('calendar','interval',$prefs[interval]); if ($prefs[mainscreen_showevents] == True) { $phpgw->preferences->add('calendar','mainscreen_showevents',$prefs[mainscreen_showevents]); } else { $phpgw->preferences->delete('calendar','mainscreen_showevents'); } if ($prefs[send_updates] == True) { $phpgw->preferences->add('calendar','send_updates',$prefs[send_updates]); } else { $phpgw->preferences->delete('calendar','send_updates'); } if ($prefs[display_status] == True) { $phpgw->preferences->add('calendar','display_status',$prefs[display_status]); } else { $phpgw->preferences->delete('calendar','display_status'); } if ($prefs[default_private] == True) { $phpgw->preferences->add('calendar','default_private',$prefs[default_private]); } else { $phpgw->preferences->delete('calendar','default_private'); } if ($prefs[display_minicals] == True) { $phpgw->preferences->add('calendar','display_minicals',$prefs[display_minicals]); } else { $phpgw->preferences->delete('calendar','display_minicals'); } if ($prefs[print_black_white] == True) { $phpgw->preferences->add('calendar','print_black_white',$prefs[print_black_white]); } else { $phpgw->preferences->delete('calendar','print_black_white'); } $phpgw->preferences->save_repository(True); Header('Location: '.$phpgw->link('/preferences/index.php')); $phpgw->common->phpgw_exit(); } unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw_info['flags']['noappheader'] = True; $phpgw->common->phpgw_header(); $p = CreateObject('phpgwapi.Template',$this->template_dir); $templates = Array( 'pref' => 'pref.tpl', 'pref_colspan' => 'pref_colspan.tpl', 'pref_list' => 'pref_list.tpl' ); $p->set_file($templates); $var = Array( 'title' => lang('Calendar preferences'), 'action_url' => $this->page('preferences'), 'bg_color' => $phpgw_info['theme']['th_bg'], 'submit_lang' => lang('submit'), 'text' => ' ' ); $this->output_template_array($p,'row','pref_colspan',$var); // if ($totalerrors) // { // echo '

    ' . $phpgw->common->error_list($errors) . '
    '; // } $str = 'bo->prefs['calendar']['mainscreen_showevents'] == 'Y' || $this->bo->prefs['calendar']['mainscreen_showevents'] == True?' checked':'').'>'; $this->display_item($p,lang('show day view on main screen'),$str); $t_weekday[$this->bo->prefs['calendar']['weekdaystarts']] = ' selected'; $str = ''; $this->display_item($p,lang('weekday starts on'),$str); $t_workdaystarts[$this->bo->prefs['calendar']['workdaystarts']] = ' selected'; $str = ''; $this->display_item($p,lang('work day starts on'),$str); $t_workdayends[$this->bo->prefs['calendar']['workdayends']] = ' selected'; $str = ''; $this->display_item($p,lang('work day ends on'),$str); if(strpos('.',$this->bo->prefs['calendar']['defaultcalendar'])) { $temp = explode('.',$this->bo->prefs['calendar']['defaultcalendar']); $this->bo->prefs['calendar']['defaultcalendar'] = $temp[0]; } $selected[$this->bo->prefs['calendar']['defaultcalendar']] = ' selected'; if (!isset($this->bo->prefs['calendar']['defaultcalendar'])) { $selected['month'] = ' selected'; } $str = ''; $this->display_item($p,lang('default calendar view'),$str); $selected = array(); $selected[$this->bo->prefs['calendar']['defaultfilter']] = ' selected'; if (! isset($this->bo->prefs['calendar']['defaultfilter']) || $this->bo->prefs['calendar']['defaultfilter'] == 'private') { $selected['private'] = ' selected'; } $str = ''; $this->display_item($p,lang('Default calendar filter'),$str); $selected = array(); $selected[intval($this->bo->prefs['calendar']['interval'])] = ' selected'; if (! isset($this->bo->prefs['calendar']['interval'])) { $selected[60] = ' selected'; } $var = Array( 5 => '5', 10 => '10', 15 => '15', 20 => '20', 30 => '30', 45 => '45', 60 => '60' ); $str = ''; $this->display_item($p,lang('Display interval in Day View'),$str); $str = 'bo->prefs['calendar']['send_updates'] == 'Y' || $this->bo->prefs['calendar']['send_updates'] == True?' checked':'').'>'; $this->display_item($p,lang('Send/receive updates via email'),$str); $str = 'bo->prefs['calendar']['display_status'] == 'Y' || $this->bo->prefs['calendar']['display_status'] == True?' checked':'').'>'; $this->display_item($p,lang('Display status of events'),$str); $str = 'bo->prefs['calendar']['default_private'] == 'Y' || $this->bo->prefs['calendar']['default_private'] == True?' checked':'').'>'; $this->display_item($p,lang('When creating new events default set to private'),$str); $str = 'bo->prefs['calendar']['display_minicals'] == 'Y' || $this->bo->prefs['calendar']['display_minicals'] == True?' checked':'').'>'; $this->display_item($p,lang('Display mini calendars when printing'),$str); $str = 'bo->prefs['calendar']['print_black_white'] == 'Y' || $this->bo->prefs['calendar']['print_black_white'] == True?' checked':'').'>'; $this->display_item($p,lang('Print calendars in black & white'),$str); $p->pparse('out','pref'); $phpgw_info['flags']['noappfooter'] = True; } function day() { global $phpgw, $phpgw_info; $this->bo->read_holidays(); if (!$this->bo->printer_friendly) { unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw->common->phpgw_header(); $printer = ''; $param = '&year='.$this->bo->year.'&month='.$this->bo->month.'&day='.$this->bo->day.'&friendly=1'; $print = '[".lang('Printer Friendly').']'; $minical = $this->mini_calendar($this->bo->day,$this->bo->month,$this->bo->year,'day'); } else { $printer = ''; $print = ''; if($this->bo->prefs['calendar']['display_minicals'] == 'Y' || $this->bo->prefs['calendar']['display_minicals']) { $minical = $this->mini_calendar($this->bo->day,$this->bo->month,$this->bo->year,'day'); } else { $minical = ''; } } $now = $this->bo->datetime->makegmttime(0, 0, 0, $this->bo->month, $this->bo->day, $this->bo->year); $now['raw'] += $this->bo->datetime->tz_offset; $m = mktime(0,0,0,$this->bo->month,1,$this->bo->year); $p = CreateObject('phpgwapi.Template',$this->template_dir); $template = Array( 'day_t' => 'day.tpl' ); $p->set_file($template); $var = Array( 'printer_friendly' => $printer, 'bg_text' => $phpgw_info['themem']['bg_text'], 'daily_events' => $this->print_day($this->bo->year,$this->bo->month,$this->bo->day), 'small_calendar' => $minical, 'date' => lang(date('F',$m)).' '.sprintf("%02d",$this->bo->day).', '.$this->bo->year, 'username' => $phpgw->common->grab_owner_name($owner), 'print' => $print ); $p->set_var($var); $p->pparse('out','day_t'); if($this->bo->printer_friendly) { $phpgw_info['flags']['nofooter'] = True; } } function edit_status() { global $phpgw, $phpgw_info, $cal_id; unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw_info['flags']['noappheader'] = True; $phpgw->common->phpgw_header(); $event = $this->bo->read_entry($cal_id); reset($event->participants); if(!$event->participants[$this->bo->owner]) { echo '
    The user '.$phpgw->common->grab_owner_name($this->bo->owner).' is not participating in this event!
    '; $phpgw->common->footer(); } if(!$this->bo->check_perms(PHPGW_ACL_EDIT)) { echo '
    You do not have permission to edit this appointment!
    '; $phpgw->common->footer(); } $freetime = $this->bo->datetime->localdates(mktime(0,0,0,$event->start->month,$event->start->mday,$event->start->year) - $this->bo->datetime->tz_offset); echo $this->timematrix($freetime,$this->bo->splittime('000000',False),0,$event->participants); echo $this->view_event($event); echo $this->get_response($event->id); $phpgw_info['flags']['noappfooter'] = True; } function set_action() { global $phpgw, $cal_id, $action; if(!$this->bo->check_perms(PHPGW_ACL_EDIT)) { unset($phpgw_info['flags']['noheader']); unset($phpgw_info['flags']['nonavbar']); $phpgw->common->phpgw_header(); echo '
    You do not have permission to edit this appointment!
    '; $phpgw->common->phpgw_exit(); } $this->bo->set_status(intval($cal_id),intval($action)); Header('Location: '.$this->page('','')); } /* Private functions */ function _debug_sqsof() { $data = array( 'filter' => $this->bo->filter, 'cat_id' => $this->bo->cat_id, 'owner' => $this->bo->owner, 'year' => $this->bo->year, 'month' => $this->bo->month, 'day' => $this->bo->day ); echo '
    UI:'; _debug_array($data); } /* Called only by get_list(), just prior to page footer. */ function save_sessiondata() { $data = array( 'filter' => $this->bo->filter, 'cat_id' => $this->bo->cat_id, 'owner' => $this->bo->owner, 'year' => $this->bo->year, 'month' => $this->bo->month, 'day' => $this->bo->day ); $this->bo->save_sessiondata($data); } function output_template_array(&$p,$row,$list,$var) { $p->set_var($var); $p->parse($row,$list,True); } function display_item(&$p,$field,$data) { global $phpgw, $tr_color; $tr_color = $phpgw->nextmatchs->alternate_row_color($tr_color); $var = Array( 'bg_color' => $tr_color, 'field' => $field, 'data' => $data ); $this->output_template_array($p,'row','pref_list',$var); } function page($page='',$params='') { global $phpgw, $phpgw_info; if($page == '') { $page_ = explode('.',$this->bo->prefs['calendar']['defaultcalendar']); $page = $page_[0]; if ($page=='index' || ($page != 'day' && $page != 'week' && $page != 'month' && $page != 'year')) { $page = 'month'; $phpgw->preferences->add('calendar','defaultcalendar','month'); $phpgw->preferences->save_repository(); } } return $phpgw->link('/index.php','menuaction='.$phpgw_info['flags']['currentapp'].'.ui'.$phpgw_info['flags']['currentapp'].'.'.$page.$params); } function header() { global $phpgw, $cal_id, $date, $keywords, $matrixtype, $participants, $tpl, $menuaction; $cols = 8; if($this->bo->check_perms(PHPGW_ACL_PRIVATE) == True) { $cols++; } $tpl = CreateObject('phpgwapi.Template',$this->template_dir); $tpl->set_unknowns('remove'); include($this->template_dir.'/header.inc.php'); $header = $tpl->fp('out','head'); unset($tpl); echo $header; } function footer() { global $phpgw; if (@$this->bo->printer_friendly) { $phpgw->common->phpgw_footer(); $phpgw->common->phpgw_exit(); } $p = CreateObject('phpgwapi.Template',$this->template_dir); $templates = Array( 'footer' => 'footer.tpl' ); $p->set_file($templates); $p->set_block('footer','footer_table','footer_table'); $p->set_block('footer','footer_row','footer_row'); $m = $this->bo->month; $y = $this->bo->year; $d_time = mktime(0,0,0,$m,1,$y); $thisdate = date('Ymd', $d_time); $y--; $str = ''; for ($i = 0; $i < 25; $i++) { $m++; if ($m > 12) { $m = 1; $y++; } $d = mktime(0,0,0,$m,1,$y); $str .= ''."\n"; } $var = Array( 'action_url' => $this->page('week',''), 'form_name' => 'SelectWeek', 'label' => lang('Week'), 'form_label' => 'date', 'form_onchange' => 'document.SelectWeek.submit()', 'row' => $str, 'go' => lang('Go!') ); $this->output_template_array($p,'table_row','footer_row',$var); $str = ''; for ($i = ($y - 3); $i < ($y + 3); $i++) { $str .= '