$end = new Horde_Date(Util::getFormData('end'));
$cal = Util::getFormData('cal');
list($driver, $calendar) = explode('|', $cal);
- $kronolith_driver = Kronolith::getDriver($driver, $calendar);
switch ($driver) {
- case 'Ical':
- $kronolith_driver->setParam('timeout', 15);
- break;
- case '':
+ case 'internal':
if (!array_key_exists($calendar,
Kronolith::listCalendars(false, PERMS_READ))) {
$notification->push(_("Permission Denied"), 'horde.error');
$result = false;
break 2;
}
+ $driver = '';
+ break;
+ case 'external':
+ $driver = 'Horde';
+ break;
+ case 'remote':
+ $driver = 'Ical';
+ break;
+ case 'holiday':
+ $driver = 'Holiday';
+ break;
+ }
+ $kronolith_driver = Kronolith::getDriver($driver, $calendar);
+ switch ($driver) {
+ case 'Ical':
+ $kronolith_driver->setParam('timeout', 15);
break;
}
$events = $kronolith_driver->listEvents($start, $end, true, false, true);
view: '',
calendars: [],
- ecache: {},
+ ecache: $H(),
efifo: {},
eventsLoading: $H(),
date: new Date(),
shared++;
div = $('kronolithSharedCalendars');
}
- div.appendChild(new Element('DIV', { 'class': cal.value.show ? 'kronolithCalOn' : 'kronolithCalOff' }).setStyle({ backgroundColor: cal.value.bg, color: cal.value.fg }).update(cal.value.name));
+ div.appendChild(new Element('DIV', { 'calendar': cal.key, 'calendarClass': 'internal', 'class': cal.value.show ? 'kronolithCalOn' : 'kronolithCalOff' }).setStyle({ backgroundColor: cal.value.bg, color: cal.value.fg }).update(cal.value.name));
});
if (my) {
$('kronolithMyCalendars').show();
}
remote.each(function(cal) {
- $('kronolithRemoteCalendars').appendChild(new Element('DIV', { 'class': cal.value.show ? 'kronolithCalOn' : 'kronolithCalOff' }).setStyle({ backgroundColor: cal.value.bg, color: cal.value.fg }).update(cal.value.name));
+ $('kronolithRemoteCalendars').appendChild(new Element('DIV', { 'calendar': cal.key, 'calendarClass': 'remote', 'class': cal.value.show ? 'kronolithCalOn' : 'kronolithCalOff' }).setStyle({ backgroundColor: cal.value.bg, color: cal.value.fg }).update(cal.value.name));
});
if (remote.size()) {
$('kronolithRemoteCalendars').show();
}
calendars = $H(calendars);
calendars.each(function(type) {
- switch (type.key) {
- case 'internal':
- driver = '';
- break;
- case 'external':
- driver = 'Horde';
- break;
- case 'remote':
- driver = 'Ical';
- break;
- case 'holiday':
- driver = 'Holiday';
- break;
- }
$H(type.value).each(function(cal) {
if (cal.value.show) {
- calendar = driver + '|' + cal.key;
+ calendar = type.key + '|' + cal.key;
this.eventsLoading[calendar] = start + end;
this.doAction('ListEvents', { start: start, end: end, cal: calendar }, callback);
}
}
if (r.response.events) {
+ this._storeCache(r.response.events, r.response.cal);
$H(r.response.events).each(function(date) {
$H(date.value).each(function(event) {
- div = new Element('DIV', { 'class': 'kronolithEvent', 'style': 'background-color:' + event.value.bg + ';color:' + event.value.fg, 'calendar': event.value.c });
+ div = new Element('DIV', { 'id' : 'kronolithEventM' + event.key, 'class': 'kronolithEvent', 'style': 'background-color:' + event.value.bg + ';color:' + event.value.fg, 'calendar': event.value.c });
div.setText(event.value.t)
.observe('mouseover', div.addClassName.curry('kronolithSelected'))
.observe('mouseout', div.removeClassName.curry('kronolithSelected'));
return new Date(date.substr(0, 4), date.substr(4, 2) - 1, date.substr(6, 2));
},
+ _storeCache: function(events, calendar)
+ {
+ if (typeof calendar == 'string') {
+ calendar = calendar.split('|');
+ }
+ if (!this.ecache[calendar[0]]) {
+ this.ecache[calendar[0]] = $H();
+ }
+ if (!this.ecache[calendar[0]][calendar[1]]) {
+ this.ecache[calendar[0]][calendar[1]] = $H();
+ }
+ this.ecache[calendar[0]][calendar[1]] = this.ecache[calendar[0]][calendar[1]].merge(events);
+ },
+
_addHistory: function(loc, data)
{
if (Horde.dhtmlHistory.getCurrentLocation() != loc) {
var elt = e.element(),
orig = e.element(),
- id, tmp;
+ id, tmp, calendar, calendarClass;
if (this.alertrequest) {
this.alertsFade(this.alertrequest);
e.stop();
return;
- case 'kronolithMenu':
- if (orig.match('div.kronolithCalendars div')) {
- this.toggleCalendar(orig);
- }
- e.stop();
- return;
-
case 'kronolithMinicalDate':
this.go('month:' + orig.readAttribute('date'));
e.stop();
break;
}
+ calClass = elt.readAttribute('calendarClass');
+ if (calClass) {
+ var calendar = elt.readAttribute('calendar');
+ this.ecache[calClass][calendar].each(function(day) {
+ $H(day.value).each(function(event) {
+ $('kronolithEventM' + event.key).toggle();
+ });
+ });
+ elt.toggleClassName('kronolithCalOn');
+ elt.toggleClassName('kronolithCalOff');
+ }
+
elt = elt.up();
}
Prototype.emptyFunction();