Merge branch 'dev/kolab3' of ssh://git.kolabsys.com/git/roundcube into dev/kolab3
This commit is contained in:
commit
6fe30d09c6
5 changed files with 22 additions and 79 deletions
|
@ -25,13 +25,13 @@
|
||||||
+ View: 3.9: Alter event with drag/drop
|
+ View: 3.9: Alter event with drag/drop
|
||||||
+ Option: 4.12: Set default reminder time
|
+ Option: 4.12: Set default reminder time
|
||||||
+ Option: 3.23: Specify folder for new event (prefs)
|
+ Option: 3.23: Specify folder for new event (prefs)
|
||||||
- Option: Set date/time format in prefs
|
+ Option: Set date/time format in prefs
|
||||||
+ Receive: 1.20: Invitation handling
|
+ Receive: 1.20: Invitation handling
|
||||||
- Jump to calendar view from mail ("Show event")
|
- Jump to calendar view from mail ("Show event")
|
||||||
- Allow to re-send invitations
|
- Allow to re-send invitations
|
||||||
- Implement iTIP delegation
|
- Implement iTIP delegation
|
||||||
|
|
||||||
- View: 3.4: Fish-Eye View For Busy Days
|
+ View: 3.4: Fish-Eye View For Busy Days
|
||||||
+ View: 3.8: Color according to calendar and category (similar to Kontact)
|
+ View: 3.8: Color according to calendar and category (similar to Kontact)
|
||||||
|
|
||||||
+ Support for multiple calendars (replace categories)
|
+ Support for multiple calendars (replace categories)
|
||||||
|
@ -40,8 +40,8 @@
|
||||||
+ ICS parser/generator (http://code.google.com/p/qcal/)
|
+ ICS parser/generator (http://code.google.com/p/qcal/)
|
||||||
|
|
||||||
- Export *with* attachments
|
- Export *with* attachments
|
||||||
- Importing ICS files (upload, drag & drop)
|
|
||||||
- Remember last visited view
|
- Remember last visited view
|
||||||
- Create/manage invdividual views
|
- Create/manage invdividual views
|
||||||
- Support for tasks/todos with task list view (ordered by date/time)
|
+ Importing ICS files (upload, drag & drop)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2349,7 +2349,7 @@ function rcube_calendar_ui(settings)
|
||||||
event.end = new Date(event.start.getTime() + (allDay ? DAY_MS : HOUR_MS));
|
event.end = new Date(event.start.getTime() + (allDay ? DAY_MS : HOUR_MS));
|
||||||
}
|
}
|
||||||
// moved to all-day section: set times to 12:00 - 13:00
|
// moved to all-day section: set times to 12:00 - 13:00
|
||||||
if (allDay && !event.allday) {
|
if (allDay && !event.allDay) {
|
||||||
event.start.setHours(12);
|
event.start.setHours(12);
|
||||||
event.start.setMinutes(0);
|
event.start.setMinutes(0);
|
||||||
event.start.setSeconds(0);
|
event.start.setSeconds(0);
|
||||||
|
@ -2358,7 +2358,7 @@ function rcube_calendar_ui(settings)
|
||||||
event.end.setSeconds(0);
|
event.end.setSeconds(0);
|
||||||
}
|
}
|
||||||
// moved from all-day section: set times to working hours
|
// moved from all-day section: set times to working hours
|
||||||
else if (event.allday && !allDay) {
|
else if (event.allDay && !allDay) {
|
||||||
var newstart = event.start.getTime();
|
var newstart = event.start.getTime();
|
||||||
revertFunc(); // revert to get original duration
|
revertFunc(); // revert to get original duration
|
||||||
var numdays = Math.max(1, Math.round((event.end.getTime() - event.start.getTime()) / DAY_MS)) - 1;
|
var numdays = Math.max(1, Math.round((event.end.getTime() - event.start.getTime()) / DAY_MS)) - 1;
|
||||||
|
|
|
@ -60,7 +60,7 @@ class kolab_calendar
|
||||||
|
|
||||||
// fetch objects from the given IMAP folder
|
// fetch objects from the given IMAP folder
|
||||||
$this->storage = kolab_storage::get_folder($this->imap_folder);
|
$this->storage = kolab_storage::get_folder($this->imap_folder);
|
||||||
$this->ready = !PEAR::isError($this->storage);
|
$this->ready = $this->storage && !PEAR::isError($this->storage);
|
||||||
|
|
||||||
// Set readonly and alarms flags according to folder permissions
|
// Set readonly and alarms flags according to folder permissions
|
||||||
if ($this->ready) {
|
if ($this->ready) {
|
||||||
|
@ -70,7 +70,7 @@ class kolab_calendar
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$rights = $this->storage->get_acl();
|
$rights = $this->storage->get_acl();
|
||||||
if (!PEAR::isError($rights)) {
|
if ($rights && !PEAR::isError($rights)) {
|
||||||
if (strpos($rights, 'i') !== false)
|
if (strpos($rights, 'i') !== false)
|
||||||
$this->readonly = false;
|
$this->readonly = false;
|
||||||
}
|
}
|
||||||
|
@ -271,7 +271,7 @@ class kolab_calendar
|
||||||
$object = $this->_from_rcube_event($event);
|
$object = $this->_from_rcube_event($event);
|
||||||
$saved = $this->storage->save($object, 'event');
|
$saved = $this->storage->save($object, 'event');
|
||||||
|
|
||||||
if (PEAR::isError($saved)) {
|
if (!$saved || PEAR::isError($saved)) {
|
||||||
raise_error(array(
|
raise_error(array(
|
||||||
'code' => 600, 'type' => 'php',
|
'code' => 600, 'type' => 'php',
|
||||||
'file' => __FILE__, 'line' => __LINE__,
|
'file' => __FILE__, 'line' => __LINE__,
|
||||||
|
@ -297,15 +297,15 @@ class kolab_calendar
|
||||||
public function update_event($event)
|
public function update_event($event)
|
||||||
{
|
{
|
||||||
$updated = false;
|
$updated = false;
|
||||||
$old = $this->storage->getObject($event['id']);
|
$old = $this->storage->get_object($event['id']);
|
||||||
if (PEAR::isError($old))
|
if (!$old || PEAR::isError($old))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$old['recurrence'] = ''; # clear old field, could have been removed in new, too
|
$old['recurrence'] = ''; # clear old field, could have been removed in new, too
|
||||||
$object = $this->_from_rcube_event($event, $old);
|
$object = $this->_from_rcube_event($event, $old);
|
||||||
$saved = $this->storage->save($object, 'event', $event['id']);
|
$saved = $this->storage->save($object, 'event', $event['id']);
|
||||||
|
|
||||||
if (PEAR::isError($saved)) {
|
if (!$saved || PEAR::isError($saved)) {
|
||||||
raise_error(array(
|
raise_error(array(
|
||||||
'code' => 600, 'type' => 'php',
|
'code' => 600, 'type' => 'php',
|
||||||
'file' => __FILE__, 'line' => __LINE__,
|
'file' => __FILE__, 'line' => __LINE__,
|
||||||
|
@ -328,29 +328,15 @@ class kolab_calendar
|
||||||
*/
|
*/
|
||||||
public function delete_event($event, $force = true)
|
public function delete_event($event, $force = true)
|
||||||
{
|
{
|
||||||
$deleted = false;
|
$deleted = $this->storage->delete($event['id'], $force);
|
||||||
|
|
||||||
if (!$force) {
|
if (!$deleted || PEAR::isError($deleted)) {
|
||||||
// Get IMAP object ID
|
|
||||||
$imap_uid = $this->storage->_getStorageId($event['id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$deleteme = $this->storage->delete($event['id'], $force);
|
|
||||||
|
|
||||||
if (PEAR::isError($deleteme)) {
|
|
||||||
raise_error(array(
|
raise_error(array(
|
||||||
'code' => 600, 'type' => 'php',
|
'code' => 600, 'type' => 'php',
|
||||||
'file' => __FILE__, 'line' => __LINE__,
|
'file' => __FILE__, 'line' => __LINE__,
|
||||||
'message' => "Error deleting event object from Kolab server:" . $deleteme->getMessage()),
|
'message' => "Error deleting event object from Kolab server"),
|
||||||
true, false);
|
true, false);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// Save IMAP object ID in session, will be used for restore action
|
|
||||||
if ($imap_uid)
|
|
||||||
$_SESSION['kolab_delete_uids'][$event['id']] = $imap_uid;
|
|
||||||
|
|
||||||
$deleted = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $deleted;
|
return $deleted;
|
||||||
}
|
}
|
||||||
|
@ -363,48 +349,8 @@ class kolab_calendar
|
||||||
*/
|
*/
|
||||||
public function restore_event($event)
|
public function restore_event($event)
|
||||||
{
|
{
|
||||||
$imap_uid = $_SESSION['kolab_delete_uids'][$event['id']];
|
// TODO: re-implement this with new kolab_storege backend
|
||||||
|
return false;
|
||||||
if (!$imap_uid)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
$session = &Horde_Kolab_Session::singleton();
|
|
||||||
$imap = &$session->getImap();
|
|
||||||
|
|
||||||
if (is_object($imap) && is_a($imap, 'PEAR_Error')) {
|
|
||||||
$error = $imap;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$result = $imap->select($this->imap_folder);
|
|
||||||
if (is_object($result) && is_a($result, 'PEAR_Error')) {
|
|
||||||
$error = $result;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$result = $imap->undeleteMessages($imap_uid);
|
|
||||||
if (is_object($result) && is_a($result, 'PEAR_Error')) {
|
|
||||||
$error = $result;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// re-sync the cache
|
|
||||||
$this->storage->synchronize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($error) {
|
|
||||||
raise_error(array(
|
|
||||||
'code' => 600, 'type' => 'php',
|
|
||||||
'file' => __FILE__, 'line' => __LINE__,
|
|
||||||
'message' => "Error undeleting an event object(s) from the Kolab server:" . $error->getMessage()),
|
|
||||||
true, false);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$rcmail = rcmail::get_instance();
|
|
||||||
$rcmail->session->remove('kolab_delete_uids');
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -161,8 +161,8 @@ class kolab_driver extends calendar_driver
|
||||||
}
|
}
|
||||||
|
|
||||||
// subscribe to new calendar by default
|
// subscribe to new calendar by default
|
||||||
$storage = $this->rc->get_storage();
|
$storage = kolab_storage::get_folder($folder);
|
||||||
$storage->subscribe($folder);
|
$storage->subscribe($prop['active'], kolab_storage::SERVERSIDE_SUBSCRIPTION);
|
||||||
|
|
||||||
// create ID
|
// create ID
|
||||||
$id = kolab_storage::folder_id($folder);
|
$id = kolab_storage::folder_id($folder);
|
||||||
|
@ -227,11 +227,7 @@ class kolab_driver extends calendar_driver
|
||||||
public function subscribe_calendar($prop)
|
public function subscribe_calendar($prop)
|
||||||
{
|
{
|
||||||
if ($prop['id'] && ($cal = $this->calendars[$prop['id']])) {
|
if ($prop['id'] && ($cal = $this->calendars[$prop['id']])) {
|
||||||
$storage = $this->rc->get_storage();
|
return $cal->storage->subscribe($prop['active'], kolab_storage::SERVERSIDE_SUBSCRIPTION);
|
||||||
if ($prop['active'])
|
|
||||||
return $storage->subscribe($cal->get_realname());
|
|
||||||
else
|
|
||||||
return $storage->unsubscribe($cal->get_realname());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -157,6 +157,7 @@
|
||||||
|
|
||||||
<file name="config.inc.php.dist" role="data"></file>
|
<file name="config.inc.php.dist" role="data"></file>
|
||||||
<file name="LICENSE" role="data"></file>
|
<file name="LICENSE" role="data"></file>
|
||||||
|
<file name="README" role="data"></file>
|
||||||
<file name="TODO" role="data"></file>
|
<file name="TODO" role="data"></file>
|
||||||
|
|
||||||
<file name="localization/bg_BG.inc" role="data"></file>
|
<file name="localization/bg_BG.inc" role="data"></file>
|
||||||
|
|
Loading…
Add table
Reference in a new issue