load_config('config/config.inc.php');
} else {
$this->load_config('config/config.inc.php.dist');
}
$backend_type = $rcmail->config->get('backend', 'database');
require('program/backend/' . $backend_type . '.php');
if($backend_type === "google") {
$this->backend = new Google($rcmail,
$rcmail->config->get('username'),
$rcmail->config->get('password'));
} else {
$this->backend = new Database($rcmail);
}
$this->add_texts('localization/', true);
$this->register_action('plugin.calendar', array($this, 'startup'));
$this->register_action('plugin.getSettings', array($this, 'getSettings'));
$this->add_hook('user_preferences', array($this, 'settingsTable'));
$this->add_hook('save_preferences', array($this, 'saveSettings'));
//backend actions
$this->register_action('plugin.newEvent', array($this, 'newEvent'));
$this->register_action('plugin.editEvent', array($this, 'editEvent'));
$this->register_action('plugin.moveEvent', array($this, 'moveEvent'));
$this->register_action('plugin.resizeEvent', array($this, 'resizeEvent'));
$this->register_action('plugin.removeEvent', array($this, 'removeEvent'));
$this->register_action('plugin.getEvents', array($this, 'getEvents'));
$this->register_action('plugin.exportEvents', array($this, 'exportEvents'));
// add taskbar button
$this->add_button(array(
'name' => 'calendar',
'class' => 'button-calendar',
'label' => 'calendar.calendar',
'href' => './?_task=dummy&_action=plugin.calendar',
), 'taskbar');
// add styles
$skin = $rcmail->config->get('skin');
if(!file_exists('skins/' . $skin . '/calendar.css')) {
$skin = "default";
}
$this->include_stylesheet('skins/' . $skin . '/calendar.css');
}
function startup() {
$rcmail = rcmail::get_instance();
$rcmail->output->set_pagetitle($this->gettext('calendar'));
$skin = $rcmail->config->get('skin');
if(!file_exists('skins/' . $skin . '/jquery-ui.css') || !file_exists('skins/' . $skin . '/fullcalendar.css')) {
$skin = "default";
}
$this->include_stylesheet('skins/' . $skin . '/jquery-ui.css');
$this->include_stylesheet('skins/' . $skin . '/fullcalendar.css');
$this->register_handler('plugin.category_css', array($this, 'generateCSS'));
$this->register_handler('plugin.category_html', array($this, 'generateHTML'));
$this->include_script('program/js/jquery-ui.js');
$this->include_script('program/js/jquery-qtip.js');
$this->include_script('program/js/fullcalendar.js');
$this->include_script('program/js/calendar.js');
$rcmail->output->send('calendar.calendar');
}
function newEvent() {
$start = $this->toGMT(get_input_value('_start', RCUBE_INPUT_POST));
$summary = trim(get_input_value('_summary', RCUBE_INPUT_POST));
$description = trim(get_input_value('_description', RCUBE_INPUT_POST));
$category = trim(get_input_value('_category', RCUBE_INPUT_POST));
$allDay = get_input_value('_allDay', RCUBE_INPUT_POST);
$allDay = ($allDay === "true")?1:0;
$this->backend->newEvent($start, $summary, $description, $category, $allDay);
$rcmail = rcmail::get_instance();
$rcmail->output->command('plugin.reloadCalendar', array());
}
function editEvent() {
$id = get_input_value('_event_id', RCUBE_INPUT_POST);
$summary = trim(get_input_value('_summary', RCUBE_INPUT_POST));
$description = trim(get_input_value('_description', RCUBE_INPUT_POST));
$category = trim(get_input_value('_category', RCUBE_INPUT_POST));
$this->backend->editEvent($id, $summary, $description, $category);
}
function moveEvent() {
$id = get_input_value('_event_id', RCUBE_INPUT_POST);
$start = $this->toGMT(get_input_value('_start', RCUBE_INPUT_POST));
$end = $this->toGMT(get_input_value('_end', RCUBE_INPUT_POST));
$allDay = get_input_value('_allDay', RCUBE_INPUT_POST);
$allDay = ($allDay === "true")?1:0;
$this->backend->moveEvent($id, $start, $end, $allDay);
$rcmail = rcmail::get_instance();
$rcmail->output->command('plugin.reloadCalendar', array());
}
function resizeEvent() {
$id = get_input_value('_event_id', RCUBE_INPUT_POST);
$start = $this->toGMT(get_input_value('_start', RCUBE_INPUT_POST));
$end = $this->toGMT(get_input_value('_end', RCUBE_INPUT_POST));
$this->backend->resizeEvent($id, $start, $end);
}
function removeEvent() {
$id = get_input_value('_event_id', RCUBE_INPUT_POST);
$this->backend->removeEvent($id);
}
function getEvents() {
$start = $this->toGMT(get_input_value('_start', RCUBE_INPUT_POST));
$end = $this->toGMT(get_input_value('_end', RCUBE_INPUT_POST));
echo $this->backend->getEvents($start, $end);
exit;
}
function exportEvents() {
$start = $this->toGMT(get_input_value('_start', RCUBE_INPUT_POST));
$end = $this->toGMT(get_input_value('_end', RCUBE_INPUT_POST));
header("Content-Type: text/calendar");
header("Content-Disposition: inline; filename=calendar.ics");
echo $this->backend->exportEvents($start, $end);
exit;
}
function getSettings() {
$rcmail = rcmail::get_instance();
$settings = array();
// configuration
$settings['default_view'] = $rcmail->config->get('default_view', "agendaWeek");
$settings['time_format'] = $rcmail->config->get('time_format', "HH:mm");
$settings['timeslots'] = $rcmail->config->get('timeslots', 2);
$settings['first_day'] = $rcmail->config->get('first_day', 1);
$settings['first_hour'] = $rcmail->config->get('first_hour', 6);
// localisation
$settings['days'] = array(
rcube_label('sunday'), rcube_label('monday'),
rcube_label('tuesday'), rcube_label('wednesday'),
rcube_label('thursday'), rcube_label('friday'),
rcube_label('saturday')
);
$settings['days_short'] = array(
rcube_label('sun'), rcube_label('mon'),
rcube_label('tue'), rcube_label('wed'),
rcube_label('thu'), rcube_label('fri'),
rcube_label('sat')
);
$settings['months'] = array(
$rcmail->gettext('longjan'), $rcmail->gettext('longfeb'),
$rcmail->gettext('longmar'), $rcmail->gettext('longapr'),
$rcmail->gettext('longmay'), $rcmail->gettext('longjun'),
$rcmail->gettext('longjul'), $rcmail->gettext('longaug'),
$rcmail->gettext('longsep'), $rcmail->gettext('longoct'),
$rcmail->gettext('longnov'), $rcmail->gettext('longdec')
);
$settings['months_short'] = array(
$rcmail->gettext('jan'), $rcmail->gettext('feb'),
$rcmail->gettext('mar'), $rcmail->gettext('apr'),
$rcmail->gettext('may'), $rcmail->gettext('jun'),
$rcmail->gettext('jul'), $rcmail->gettext('aug'),
$rcmail->gettext('sep'), $rcmail->gettext('oct'),
$rcmail->gettext('nov'), $rcmail->gettext('dec')
);
$settings['today'] = rcube_label('today');
$rcmail->output->command('plugin.getSettings', array('settings' => $settings));
}
function settingsTable($args) {
if ($args['section'] == 'server') {
$rcmail = rcmail::get_instance();
$args['blocks']['calendar']['name'] = $this->gettext('calendar');
$default_view = $rcmail->config->get('default_view', "HH:mm");
$field_id = 'rcmfd_default_view';
$select = new html_select(array('name' => '_default_view', 'id' => $field_id));
$select->add($this->gettext('day'), "agendaDay");
$select->add($this->gettext('week'), "agendaWeek");
$select->add($this->gettext('month'), "month");
$args['blocks']['calendar']['options']['default_view'] = array(
'title' => html::label($field_id, Q($this->gettext('default_view'))),
'content' => $select->show($rcmail->config->get('default_view')),
);
$time_format = $rcmail->config->get('time_format', "HH:mm");
$field_id = 'rcmfd_time_format';
$choices = array('HH:mm', 'H:mm', 'h:mmt');
$select = new html_select(array('name' => '_time_format', 'id' => $field_id));
$select->add($choices);
$args['blocks']['calendar']['options']['time_format'] = array(
'title' => html::label($field_id, Q($this->gettext('time_format'))),
'content' => $select->show($rcmail->config->get('time_format')),
);
$timeslots = $rcmail->config->get('timeslots', 2);
$field_id = 'rcmfd_timeslot';
$choices = array('1', '2', '3', '4', '6');
$select = new html_select(array('name' => '_timeslots', 'id' => $field_id));
$select->add($choices);
$args['blocks']['calendar']['options']['timeslots'] = array(
'title' => html::label($field_id, Q($this->gettext('timeslots'))),
'content' => $select->show($rcmail->config->get('timeslots')),
);
$first_day = $rcmail->config->get('first_day', 1);
$field_id = 'rcmfd_timeslot';
$select = new html_select(array('name' => '_first_day', 'id' => $field_id));
$select->add(rcube_label('sunday'), '0');
$select->add(rcube_label('monday'), '1');
$select->add(rcube_label('tuesday'), '2');
$select->add(rcube_label('wednesday'), '3');
$select->add(rcube_label('thursday'), '4');
$select->add(rcube_label('friday'), '5');
$select->add(rcube_label('saturday'), '6');
$args['blocks']['calendar']['options']['first_day'] = array(
'title' => html::label($field_id, Q($this->gettext('first_day'))),
'content' => $select->show($rcmail->config->get('first_day')),
);
}
return $args;
}
function saveSettings($args) {
if ($args['section'] == 'server') {
$rcmail = rcmail::get_instance();
$args['prefs']['default_view'] = get_input_value('_default_view', RCUBE_INPUT_POST);
$args['prefs']['time_format'] = get_input_value('_time_format', RCUBE_INPUT_POST);
$args['prefs']['timeslots'] = get_input_value('_timeslots', RCUBE_INPUT_POST);
$args['prefs']['first_day'] = get_input_value('_first_day', RCUBE_INPUT_POST);
}
return $args;
}
function toGMT($time) {
return date('Y-m-d H:i:s',$time - date('Z'));
}
function generateCSS() {
$rcmail = rcmail::get_instance();
$categories = $rcmail->config->get('categories');
$css = "";
if(!empty($categories)) {
$css .= "";
}
return($css);
}
function generateHTML() {
$rcmail = rcmail::get_instance();
$categories = $rcmail->config->get('categories');
$select = "";
return($select);
}
}
?>