/** * Creates the edit form for an event */ public static function event_form(Calendar_Event $event, $suggest = false) { Layout::addStyle('calendar'); javascript('datetimepicker'); // the form id is linked to the check_date javascript $form = new PHPWS_Form('event_form'); if (isset($_REQUEST['js'])) { $form->addHidden('js', 1); } $form->addHidden('module', 'calendar'); if ($suggest) { $form->addHidden('uop', 'post_suggestion'); } else { $form->addHidden('aop', 'post_event'); } $form->addHidden('event_id', $event->id); $form->addHidden('sch_id', $event->_schedule->id); $form->addText('summary', $event->summary); $form->setLabel('summary', dgettext('calendar', 'Summary')); $form->setSize('summary', 60); $form->addText('location', $event->location); $form->setLabel('location', dgettext('calendar', 'Location')); $form->setSize('location', 60); $form->addText('loc_link', $event->loc_link); $form->setLabel('loc_link', dgettext('calendar', 'Location link')); $form->setSize('loc_link', 60); $form->addTextArea('description', $event->description); if ($suggest) { $form->setRows('description', 8); $form->setCols('description', 55); } else { $form->useEditor('description'); } $form->setLabel('description', dgettext('calendar', 'Description')); $form->addText('start_date', $event->getStartTime('%Y/%m/%d')); $form->setLabel('start_date', dgettext('calendar', 'Start time')); $form->setExtra('start_date', 'onblur="check_start_date()"'); $form->addText('end_date', $event->getEndTime('%Y/%m/%d')); $form->setLabel('end_date', dgettext('calendar', 'End time')); $form->setExtra('end_date', 'onblur="check_end_date()" onfocus="check_start_date()"'); $event->timeForm('start_time', $event->start_time, $form); $event->timeForm('end_time', $event->end_time, $form); $form->setExtra('start_time_hour', 'onchange="check_start_date()"'); $form->setExtra('end_time_hour', 'onchange="check_end_date()"'); $form->addCheck('all_day', 1); $form->setMatch('all_day', $event->all_day); $form->setLabel('all_day', dgettext('calendar', 'All day event')); $form->setExtra('all_day', 'onchange="alter_date(this)"'); if (!$suggest) { $form->addCheck('show_busy', 1); $form->setMatch('show_busy', $event->show_busy); $form->setLabel('show_busy', dgettext('calendar', 'Show busy')); } if ($suggest) { $form->addSubmit('save', dgettext('calendar', 'Suggest event')); } else { // Suggested events are not allowed repeats /** * Repeat form elements */ $form->addCheck('repeat_event', 1); $form->setLabel('repeat_event', dgettext('calendar', 'Make a repeating event')); $form->addText('end_repeat_date', $event->getEndRepeat('%Y/%m/%d')); $form->setLabel('end_repeat_date', dgettext('calendar', 'Repeat event until:')); $modes = array('daily', 'weekly', 'monthly', 'yearly', 'every'); $modes_label = array(dgettext('calendar', 'Daily'), dgettext('calendar', 'Weekly'), dgettext('calendar', 'Monthly'), dgettext('calendar', 'Yearly'), dgettext('calendar', 'Every')); $form->addRadio('repeat_mode', $modes); $form->setLabel('repeat_mode', $modes_label); $weekdays = array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7); $weekday_labels = array(1 => strftime('%A', mktime(0, 0, 0, 1, 5, 1970)), 2 => strftime('%A', mktime(0, 0, 0, 1, 6, 1970)), 3 => strftime('%A', mktime(0, 0, 0, 1, 7, 1970)), 4 => strftime('%A', mktime(0, 0, 0, 1, 8, 1970)), 5 => strftime('%A', mktime(0, 0, 0, 1, 9, 1970)), 6 => strftime('%A', mktime(0, 0, 0, 1, 10, 1970)), 7 => strftime('%A', mktime(0, 0, 0, 1, 11, 1970))); $form->addCheck('weekday_repeat', $weekdays); $form->setLabel('weekday_repeat', $weekday_labels); $monthly = array('begin' => dgettext('calendar', 'Beginning of each month'), 'end' => dgettext('calendar', 'End of each month'), 'start' => dgettext('calendar', 'Every month on start date')); $form->addSelect('monthly_repeat', $monthly); $every_repeat_week = array(1 => dgettext('calendar', '1st'), 2 => dgettext('calendar', '2nd'), 3 => dgettext('calendar', '3rd'), 4 => dgettext('calendar', '4th'), 5 => dgettext('calendar', 'Last')); $frequency = array('every_month' => dgettext('calendar', 'Every month'), 1 => strftime('%B', mktime(0, 0, 0, 1, 1, 1970)), 2 => strftime('%B', mktime(0, 0, 0, 2, 1, 1970)), 3 => strftime('%B', mktime(0, 0, 0, 3, 1, 1970)), 4 => strftime('%B', mktime(0, 0, 0, 4, 1, 1970)), 5 => strftime('%B', mktime(0, 0, 0, 5, 1, 1970)), 6 => strftime('%B', mktime(0, 0, 0, 6, 1, 1970)), 7 => strftime('%B', mktime(0, 0, 0, 7, 1, 1970)), 8 => strftime('%B', mktime(0, 0, 0, 8, 1, 1970)), 9 => strftime('%B', mktime(0, 0, 0, 9, 1, 1970)), 10 => strftime('%B', mktime(0, 0, 0, 10, 1, 1970)), 11 => strftime('%B', mktime(0, 0, 0, 11, 1, 1970)), 12 => strftime('%B', mktime(0, 0, 0, 12, 1, 1970))); $form->addSelect('every_repeat_number', $every_repeat_week); $form->addSelect('every_repeat_weekday', $weekday_labels); $form->addSelect('every_repeat_frequency', $frequency); /* set repeat form matches */ if (!empty($event->repeat_type)) { $repeat_info = explode(':', $event->repeat_type); $repeat_mode_match = $repeat_info[0]; if (isset($repeat_info[1])) { $repeat_vars = explode(';', $repeat_info[1]); } else { $repeat_vars = null; } $form->setMatch('repeat_mode', $repeat_mode_match); switch ($repeat_mode_match) { case 'weekly': $form->setMatch('weekday_repeat', $repeat_vars); break; case 'monthly': $form->setMatch('monthly_repeat', $repeat_vars[0]); break; case 'every': $form->setMatch('every_repeat_number', $repeat_vars[0]); $form->setMatch('every_repeat_weekday', $repeat_vars[1]); $form->setMatch('every_repeat_frequency', $repeat_vars[2]); break; } $form->setMatch('repeat_event', 1); } if ($event->pid) { $form->addHidden('pid', $event->pid); // This is a repeat copy, if saved it removes it from the copy list $form->addSubmit('save', dgettext('calendar', 'Save and remove repeat')); $form->setExtra('save', sprintf('onclick="return confirm(\'%s\')"', dgettext('calendar', 'Remove event from repeat list?'))); } elseif ($event->id && $event->repeat_type) { // This is event is a source repeating event // Save this // Not sure if coding this portion. commenting for now // $form->addSubmit('save_source', dgettext('calendar', 'Save this event only')); $form->addSubmit('save_copy', dgettext('calendar', 'Save and apply to repeats')); $form->setExtra('save_copy', sprintf('onclick="return confirm(\'%s\')"', dgettext('calendar', 'Apply changes to repeats?'))); } else { // this is a non-repeating event $form->addSubmit('save', dgettext('calendar', 'Save event')); } } $tpl = $form->getTemplate(); if (!$suggest) { $tpl['EVENT_TAB'] = dgettext('calendar', 'Event'); $tpl['REPEAT_TAB'] = dgettext('calendar', 'Repeat'); } if (isset($event->_error)) { $tpl['ERROR'] = implode('<br />', $event->_error); } if ($event->pid) { $linkvar['aop'] = 'edit_event'; $linkvar['sch_id'] = $event->_schedule->id; $linkvar['event_id'] = $event->pid; if (javascriptEnabled()) { $linkvar['js'] = 1; } $source_link = PHPWS_Text::moduleLink(dgettext('calendar', 'Click here if you would prefer to edit the source event.'), 'calendar', $linkvar); $tpl['REPEAT_WARNING'] = dgettext('calendar', 'This is a repeat of another event.') . '<br />' . $source_link; } $tpl['SYNC'] = sprintf('<input type="button" style="display : none" id="sync-dates" onclick="sync_dates(); return false;" name="sync-dates" value="%s" />', dgettext('calendar', 'Sync dates')); if (javascriptEnabled()) { Layout::addJSHeader('<script src="' . PHPWS_SOURCE_HTTP . 'mod/calendar/javascript/edit_event/head.js"></script>'); Layout::addJSHeader('<script src="' . PHPWS_SOURCE_HTTP . 'mod/calendar/javascript/check_date/head.js"></script>'); } return PHPWS_Template::process($tpl, 'calendar', 'admin/forms/edit_event.tpl'); }