Make working hours configurable by the user
This commit is contained in:
parent
2408eff2f1
commit
1ea773751f
3 changed files with 47 additions and 10 deletions
|
@ -239,7 +239,7 @@ class calendar extends rcube_plugin
|
|||
$select->add($this->gettext('agenda'), "table");
|
||||
$p['blocks']['view']['options']['default_view'] = array(
|
||||
'title' => html::label($field_id, Q($this->gettext('default_view'))),
|
||||
'content' => $select->show($this->rc->config->get('calendar_default_view', "agendaWeek")),
|
||||
'content' => $select->show($this->rc->config->get('calendar_default_view', $this->defaults['calendar_default_view'])),
|
||||
);
|
||||
/*
|
||||
$field_id = 'rcmfd_time_format';
|
||||
|
@ -257,7 +257,7 @@ class calendar extends rcube_plugin
|
|||
$select->add($choices);
|
||||
$p['blocks']['view']['options']['timeslots'] = array(
|
||||
'title' => html::label($field_id, Q($this->gettext('timeslots'))),
|
||||
'content' => $select->show($this->rc->config->get('calendar_timeslots', 2)),
|
||||
'content' => $select->show($this->rc->config->get('calendar_timeslots', $this->defaults['calendar_timeslots'])),
|
||||
);
|
||||
|
||||
$field_id = 'rcmfd_firstday';
|
||||
|
@ -271,9 +271,27 @@ class calendar extends rcube_plugin
|
|||
$select->add(rcube_label('saturday'), '6');
|
||||
$p['blocks']['view']['options']['first_day'] = array(
|
||||
'title' => html::label($field_id, Q($this->gettext('first_day'))),
|
||||
'content' => $select->show($this->rc->config->get('calendar_first_day', 1)),
|
||||
'content' => $select->show($this->rc->config->get('calendar_first_day', $this->defaults['calendar_first_day'])),
|
||||
);
|
||||
|
||||
$time_format = self::to_php_date_format($this->rc->config->get('calendar_time_format'));
|
||||
$select_hours = new html_select();
|
||||
for ($h = 0; $h < 24; $h++)
|
||||
$select_hours->add(date($time_format, mktime($h, 0, 0)), $h);
|
||||
|
||||
$field_id = 'rcmfd_firsthour';
|
||||
$p['blocks']['view']['options']['first_hour'] = array(
|
||||
'title' => html::label($field_id, Q($this->gettext('first_hour'))),
|
||||
'content' => $select_hours->show($this->rc->config->get('calendar_first_hour', $this->defaults['calendar_first_hour']), array('name' => '_first_hour', 'id' => $field_id)),
|
||||
);
|
||||
|
||||
$field_id = 'rcmfd_workstart';
|
||||
$p['blocks']['view']['options']['workinghours'] = array(
|
||||
'title' => html::label($field_id, Q($this->gettext('workinghours'))),
|
||||
'content' => $select_hours->show($this->rc->config->get('calendar_work_start', $this->defaults['calendar_work_start']), array('name' => '_work_start', 'id' => $field_id)) .
|
||||
' — ' . $select_hours->show($this->rc->config->get('calendar_work_end', $this->defaults['calendar_work_end']), array('name' => '_work_end', 'id' => $field_id)),
|
||||
);
|
||||
|
||||
$field_id = 'rcmfd_alarm';
|
||||
$select_type = new html_select(array('name' => '_alarm_type', 'id' => $field_id));
|
||||
$select_type->add($this->gettext('none'), '');
|
||||
|
@ -372,9 +390,12 @@ class calendar extends rcube_plugin
|
|||
|
||||
$p['prefs'] = array(
|
||||
'calendar_default_view' => get_input_value('_default_view', RCUBE_INPUT_POST),
|
||||
'calendar_time_format' => get_input_value('_time_format', RCUBE_INPUT_POST),
|
||||
# 'calendar_time_format' => get_input_value('_time_format', RCUBE_INPUT_POST),
|
||||
'calendar_timeslots' => get_input_value('_timeslots', RCUBE_INPUT_POST),
|
||||
'calendar_first_day' => get_input_value('_first_day', RCUBE_INPUT_POST),
|
||||
'calendar_first_hour' => intval(get_input_value('_first_hour', RCUBE_INPUT_POST)),
|
||||
'calendar_work_start' => intval(get_input_value('_work_start', RCUBE_INPUT_POST)),
|
||||
'calendar_work_end' => intval(get_input_value('_work_end', RCUBE_INPUT_POST)),
|
||||
'calendar_default_alarm_type' => get_input_value('_alarm_type', RCUBE_INPUT_POST),
|
||||
'calendar_default_alarm_offset' => $default_alam,
|
||||
'calendar_default_calendar' => get_input_value('_default_calendar', RCUBE_INPUT_POST),
|
||||
|
|
|
@ -124,7 +124,21 @@ function rcube_calendar_ui(settings)
|
|||
{
|
||||
ts -= gmt_offset * 3600;
|
||||
return new Date(ts * 1000);
|
||||
}
|
||||
};
|
||||
|
||||
// determine whether the given date is on a weekend
|
||||
var is_weekend = function(date)
|
||||
{
|
||||
return date.getDay() == 0 || date.getDay() == 6;
|
||||
};
|
||||
|
||||
var is_workinghour = function(date)
|
||||
{
|
||||
if (settings['work_start'] > settings['work_end'])
|
||||
return date.getHours() >= settings['work_start'] || date.getHours() < settings['work_end'];
|
||||
else
|
||||
return date.getHours() >= settings['work_start'] && date.getHours() < settings['work_end'];
|
||||
};
|
||||
|
||||
// create a nice human-readable string for the date/time range
|
||||
var event_date_text = function(event)
|
||||
|
@ -448,7 +462,7 @@ function rcube_calendar_ui(settings)
|
|||
for (var j=0; j < event.attendees.length; j++)
|
||||
add_attendee(event.attendees[j], true);
|
||||
}
|
||||
$('#edit-attendee-schedule')[(calendar.freebusy?'show':'hide')]();
|
||||
// $('#edit-attendee-schedule')[(calendar.freebusy?'show':'hide')]();
|
||||
|
||||
// attachments
|
||||
if (calendar.attachments) {
|
||||
|
@ -728,14 +742,14 @@ function rcube_calendar_ui(settings)
|
|||
var lastdate, datestr, css, curdate = new Date(), dates_row = '<tr class="dates">', times_row = '<tr class="times">', slots_row = '';
|
||||
for (var s = 0, t = freebusy_ui.start.getTime(); t < freebusy_ui.end.getTime(); s++) {
|
||||
curdate.setTime(t);
|
||||
datestr = $.fullCalendar.formatDate(curdate, settings['date_format']);
|
||||
datestr = fc.fullCalendar('formatDate', curdate, 'ddd '+settings['date_format']);
|
||||
if (datestr != lastdate) {
|
||||
dates_row += '<th colspan="' + dayslots + '" class="boxtitle date' + $.fullCalendar.formatDate(curdate, 'ddMMyyyy') + '">' + Q(datestr) + '</th>';
|
||||
lastdate = datestr;
|
||||
}
|
||||
|
||||
// set css class according to working hours
|
||||
css = (freebusy_ui.numdays == 1 && (curdate.getHours() < settings['work_start'] || curdate.getHours() > settings['work_end'])) ? 'offhours' : 'workinghours';
|
||||
css = is_weekend(curdate) || (freebusy_ui.interval <= 60 && !is_workinghour(curdate)) ? 'offhours' : 'workinghours';
|
||||
times_row += '<td class="' + css + '">' + Q($.fullCalendar.formatDate(curdate, settings['time_format'])) + '</td>';
|
||||
slots_row += '<td class="' + css + ' unknown"> </td>';
|
||||
|
||||
|
@ -951,9 +965,9 @@ function rcube_calendar_ui(settings)
|
|||
continue;
|
||||
|
||||
// respect workingours setting
|
||||
if (freebusy_ui.workinhoursonly && freebusy_data.interval <= 60) {
|
||||
if (freebusy_ui.workinhoursonly) {
|
||||
curdate = fromunixtime(dir > 0 || !candidateend ? slot : (candidateend - duration));
|
||||
if (curdate.getHours() < settings['work_start'] || curdate.getHours() > settings['work_end']) { // skip off-hours
|
||||
if (is_weekend(curdate) || (freebusy_data.interval <= 60 && !is_workinghour(curdate))) { // skip off-hours
|
||||
candidatestart = candidateend = false;
|
||||
candidatecount = 0;
|
||||
continue;
|
||||
|
|
|
@ -7,6 +7,8 @@ $labels['default_view'] = 'Default view';
|
|||
$labels['time_format'] = 'Time format';
|
||||
$labels['timeslots'] = 'Timeslots per hour';
|
||||
$labels['first_day'] = 'First weekday';
|
||||
$labels['first_hour'] = 'First hour to show';
|
||||
$labels['workinghours'] = 'Working hours';
|
||||
$labels['add_category'] = 'Add category';
|
||||
$labels['remove_category'] = 'Remove category';
|
||||
$labels['add_calendar'] = 'Add calendar';
|
||||
|
|
Loading…
Add table
Reference in a new issue