From: Jan Schneider Date: Thu, 10 Dec 2009 23:07:53 +0000 (+0100) Subject: Add URL field to events. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=73d7a68a4ee4af4f2f8086192cee9d093b29e414;p=horde.git Add URL field to events. --- diff --git a/kronolith/docs/CHANGES b/kronolith/docs/CHANGES index dc0779c50..6d5155cd4 100644 --- a/kronolith/docs/CHANGES +++ b/kronolith/docs/CHANGES @@ -2,6 +2,7 @@ v3.0-git -------- +[jan] Add URL field to events. [jan] Add task management capabilities to the Ajax interface. [jan] Manage holidays like any other calendar driver. [mjr] Add support for resource scheduling. diff --git a/kronolith/js/kronolith.js b/kronolith/js/kronolith.js index d2b91b3ad..29b9a2d16 100644 --- a/kronolith/js/kronolith.js +++ b/kronolith/js/kronolith.js @@ -3221,6 +3221,7 @@ KronolithCore = { $('kronolithEventTarget').setValue(ev.ty + '|' + ev.c); $('kronolithEventTitle').setValue(ev.t); $('kronolithEventLocation').setValue(ev.l); + $('kronolithEventUrl').setValue(ev.u); $('kronolithEventAllday').setValue(ev.al); this.toggleAllDay(ev.al); $('kronolithEventStartDate').setValue(ev.sd); diff --git a/kronolith/lib/Driver/Sql.php b/kronolith/lib/Driver/Sql.php index 0818a67f3..a48503fee 100644 --- a/kronolith/lib/Driver/Sql.php +++ b/kronolith/lib/Driver/Sql.php @@ -118,31 +118,15 @@ class Kronolith_Driver_Sql extends Kronolith_Driver $cond = '(('; $values = array(); - if (!empty($query->title)) { - $binds = Horde_SQL::buildClause($this->_db, 'event_title', 'LIKE', $this->convertToDriver($query->title), true); - if (is_array($binds)) { - $cond .= $binds[0] . ' AND '; - $values = array_merge($values, $binds[1]); - } else { - $cond .= $binds; - } - } - if (!empty($query->location)) { - $binds = Horde_SQL::buildClause($this->_db, 'event_location', 'LIKE', $this->convertToDriver($query->location), true); - if (is_array($binds)) { - $cond .= $binds[0] . ' AND '; - $values = array_merge($values, $binds[1]); - } else { - $cond .= $binds; - } - } - if (!empty($query->description)) { - $binds = Horde_SQL::buildClause($this->_db, 'event_description', 'LIKE', $this->convertToDriver($query->description), true); - if (is_array($binds)) { - $cond .= $binds[0] . ' AND '; - $values = array_merge($values, $binds[1]); - } else { - $cond .= $binds; + foreach (array('title', 'location', 'url', 'description') as $field) { + if (!empty($query->$field)) { + $binds = Horde_SQL::buildClause($this->_db, 'event_' . $field, 'LIKE', $this->convertToDriver($query->$field), true); + if (is_array($binds)) { + $cond .= $binds[0] . ' AND '; + $values = array_merge($values, $binds[1]); + } else { + $cond .= $binds; + } } } if (isset($query->status)) { @@ -154,7 +138,6 @@ class Kronolith_Driver_Sql extends Kronolith_Driver $cond .= $binds; } } - if (!empty($query->creatorID)) { $binds = Horde_SQL::buildClause($this->_db, 'event_creator_id', '=', $query->creatorID, true); if (is_array($binds)) { @@ -313,7 +296,7 @@ class Kronolith_Driver_Sql extends Kronolith_Driver { $q = 'SELECT event_id, event_uid, event_description, event_location,' . ' event_private, event_status, event_attendees,' . - ' event_title, event_recurcount,' . + ' event_title, event_recurcount, event_url,' . ' event_recurtype, event_recurenddate, event_recurinterval,' . ' event_recurdays, event_start, event_end, event_allday,' . ' event_alarm, event_alarm_methods, event_modified,' . @@ -426,7 +409,7 @@ class Kronolith_Driver_Sql extends Kronolith_Driver $query = 'SELECT event_id, event_uid, event_description,' . ' event_location, event_private, event_status, event_attendees,' . - ' event_title, event_recurcount,' . + ' event_title, event_recurcount, event_url,' . ' event_recurtype, event_recurenddate, event_recurinterval,' . ' event_recurdays, event_start, event_end, event_allday,' . ' event_alarm, event_alarm_methods, event_modified,' . @@ -467,7 +450,7 @@ class Kronolith_Driver_Sql extends Kronolith_Driver { $query = 'SELECT event_id, event_uid, calendar_id, event_description,' . ' event_location, event_private, event_status, event_attendees,' . - ' event_title, event_recurcount,' . + ' event_title, event_recurcount, event_url,' . ' event_recurtype, event_recurenddate, event_recurinterval,' . ' event_recurdays, event_start, event_end, event_allday,' . ' event_alarm, event_alarm_methods, event_modified,' . diff --git a/kronolith/lib/Event.php b/kronolith/lib/Event.php index 9ba48e419..0bee658ba 100644 --- a/kronolith/lib/Event.php +++ b/kronolith/lib/Event.php @@ -487,6 +487,11 @@ abstract class Kronolith_Event if (!empty($this->location)) { $vEvent->setAttribute('LOCATION', $v1 ? $this->location : Horde_String::convertCharset($this->location, Horde_Nls::getCharset(), 'utf-8')); } + + // URL + if (!empty($this->url)) { + $vEvent->setAttribute('URL', $this->url); + } } $vEvent->setAttribute('CLASS', $this->isPrivate() ? 'PRIVATE' : 'PUBLIC'); @@ -1106,6 +1111,7 @@ abstract class Kronolith_Event * - id: event id * - ty: calendar type (driver) * - l: location + * - u: url * - sd: formatted start date * - st: formatted start time * - ed: formatted end date @@ -1162,6 +1168,7 @@ abstract class Kronolith_Event $json->ty = $this->_calendarType; $json->d = $this->getDescription(); $json->l = $this->getLocation(); + $json->u = $this->url; $json->sd = $this->start->strftime('%x'); $json->st = $this->start->format($time_format); $json->ed = $this->end->strftime('%x'); @@ -1748,6 +1755,53 @@ abstract class Kronolith_Event $this->setLocation(Horde_Util::getFormData('location', $this->location)); $this->setPrivate(Horde_Util::getFormData('private')); + // URL. + $url = Horde_Util::getFormData('eventurl', $this->url); + if (strlen($url)) { + // Analyze and re-construct. + $url = @parse_url($url); + if ($url) { + if (function_exists('http_build_url')) { + $url = http_build_url($url); + } else { + $new_url = ''; + if (isset($url['scheme'])) { + $new_url .= $url['scheme'] . '://'; + } + if (isset($url['user'])) { + $new_url .= $url['user']; + if (isset($url['pass'])) { + $new_url .= ':' . $url['pass']; + } + $new_url .= '@'; + } + if (isset($url['host'])) { + // Convert IDN hosts to ASCII. + if (Horde_Util::extensionExists('idn')) { + $old_error = error_reporting(0); + $url['host'] = idn_to_ascii(Horde_String::convertCharset($url['host'], Horde_Nls::getCharset(), 'UTF-8')); + error_reporting($old_error); + } elseif (Horde_Mime::is8bit($url['host'])) { + //throw new Kronolith_Exception(_("Invalid character in URL.")); + $url['host'] = ''; + } + $new_url .= $url['host']; + } + if (isset($url['path'])) { + $new_url .= $url['path']; + } + if (isset($url['query'])) { + $new_url .= '?' . $url['query']; + } + if (isset($url['fragment'])) { + $new_url .= '#' . $url['fragment']; + } + $url = $new_url; + } + } + } + $this->url = $url; + // Status. $this->setStatus(Horde_Util::getFormData('status', $this->status)); diff --git a/kronolith/lib/Event/Sql.php b/kronolith/lib/Event/Sql.php index 11b10de52..cfbd753ed 100644 --- a/kronolith/lib/Event/Sql.php +++ b/kronolith/lib/Event/Sql.php @@ -107,6 +107,9 @@ class Kronolith_Event_Sql extends Kronolith_Event if (isset($SQLEvent['event_location'])) { $this->location = $driver->convertFromDriver($SQLEvent['event_location']); } + if (isset($SQLEvent['event_url'])) { + $this->url = $SQLEvent['event_url']; + } if (isset($SQLEvent['event_private'])) { $this->private = (bool)($SQLEvent['event_private']); } @@ -141,6 +144,7 @@ class Kronolith_Event_Sql extends Kronolith_Event $this->_properties['event_title'] = $driver->convertToDriver($this->title); $this->_properties['event_description'] = $driver->convertToDriver($this->getDescription()); $this->_properties['event_location'] = $driver->convertToDriver($this->getLocation()); + $this->_properties['event_url'] = $this->url; $this->_properties['event_private'] = (int)$this->isPrivate(); $this->_properties['event_status'] = $this->getStatus(); $this->_properties['event_attendees'] = serialize($driver->convertToDriver($this->getAttendees())); diff --git a/kronolith/lib/View/Event.php b/kronolith/lib/View/Event.php index 020e8e51e..d3a84ed48 100644 --- a/kronolith/lib/View/Event.php +++ b/kronolith/lib/View/Event.php @@ -75,6 +75,7 @@ class Kronolith_View_Event { $creatorId = $this->event->getCreatorId(); $description = $this->event->getDescription(); $location = $this->event->getLocation(); + $eventurl = $this->event->url; $private = $this->event->isPrivate() && $creatorId != Horde_Auth::getAuth(); $owner = Kronolith::getUserName($creatorId); $status = Kronolith::statusToString($this->event->getStatus()); diff --git a/kronolith/scripts/sql/kronolith.mssql.sql b/kronolith/scripts/sql/kronolith.mssql.sql index 91e0e17e8..2ce2c44e3 100644 --- a/kronolith/scripts/sql/kronolith.mssql.sql +++ b/kronolith/scripts/sql/kronolith.mssql.sql @@ -5,6 +5,7 @@ CREATE TABLE kronolith_events ( event_creator_id VARCHAR(255) NOT NULL, event_description VARCHAR(MAX), event_location VARCHAR(MAX), + event_url VARCHAR(MAX), event_status INT DEFAULT 0, event_attendees VARCHAR(MAX), event_resources VARCHAR(MAX), @@ -93,4 +94,4 @@ CREATE TABLE kronolith_resources ( ); CREATE INDEX kronolith_resources_type_idx ON kronolith_resources (resource_type); -CREATE INDEX kronolith_resources_calendar_idx ON kronolith_resources (resource_calendar); \ No newline at end of file +CREATE INDEX kronolith_resources_calendar_idx ON kronolith_resources (resource_calendar); diff --git a/kronolith/scripts/sql/kronolith.mysql.sql b/kronolith/scripts/sql/kronolith.mysql.sql index 25a1000df..9570ac7b8 100644 --- a/kronolith/scripts/sql/kronolith.mysql.sql +++ b/kronolith/scripts/sql/kronolith.mysql.sql @@ -5,6 +5,7 @@ CREATE TABLE kronolith_events ( event_creator_id VARCHAR(255) NOT NULL, event_description TEXT, event_location TEXT, + event_url TEXT, event_status INT DEFAULT 0, event_attendees TEXT, event_resources TEXT, diff --git a/kronolith/scripts/sql/kronolith.oci8.sql b/kronolith/scripts/sql/kronolith.oci8.sql index 2a6c23eed..f91794a31 100644 --- a/kronolith/scripts/sql/kronolith.oci8.sql +++ b/kronolith/scripts/sql/kronolith.oci8.sql @@ -5,6 +5,7 @@ CREATE TABLE kronolith_events ( event_creator_id VARCHAR2(255) NOT NULL, event_description VARCHAR2(4000), event_location VARCHAR2(4000), + event_url VARCHAR2(4000), event_status NUMBER(8) DEFAULT 0, event_attendees VARCHAR2(4000), event_resources VARCHAR2(4000), @@ -94,4 +95,4 @@ CREATE TABLE kronolith_resources ( ); CREATE INDEX kronolith_resources_type_idx ON kronolith_resources (resource_type); -CREATE INDEX kronolith_resources_calendar_idx ON kronolith_resources (resource_calendar); \ No newline at end of file +CREATE INDEX kronolith_resources_calendar_idx ON kronolith_resources (resource_calendar); diff --git a/kronolith/scripts/sql/kronolith.pgsql.sql b/kronolith/scripts/sql/kronolith.pgsql.sql index 198e4095d..7a90ca767 100644 --- a/kronolith/scripts/sql/kronolith.pgsql.sql +++ b/kronolith/scripts/sql/kronolith.pgsql.sql @@ -5,6 +5,7 @@ CREATE TABLE kronolith_events ( event_creator_id VARCHAR(255) NOT NULL, event_description TEXT, event_location TEXT, + event_url TEXT, event_status INT DEFAULT 0, event_attendees TEXT, event_resources TEXT, @@ -93,4 +94,4 @@ CREATE TABLE kronolith_resources ( ); CREATE INDEX kronolith_resources_type_idx ON kronolith_resources (resource_type); -CREATE INDEX kronolith_resources_calendar_idx ON kronolith_resources (resource_calendar); \ No newline at end of file +CREATE INDEX kronolith_resources_calendar_idx ON kronolith_resources (resource_calendar); diff --git a/kronolith/scripts/sql/kronolith.sql b/kronolith/scripts/sql/kronolith.sql index 08e7fabba..d96bc792f 100644 --- a/kronolith/scripts/sql/kronolith.sql +++ b/kronolith/scripts/sql/kronolith.sql @@ -5,6 +5,7 @@ CREATE TABLE kronolith_events ( event_creator_id VARCHAR(255) NOT NULL, event_description TEXT, event_location TEXT, + event_url TEXT, event_status INT DEFAULT 0, event_attendees TEXT, event_resources TEXT, diff --git a/kronolith/scripts/sql/kronolith.xml b/kronolith/scripts/sql/kronolith.xml index ecdb09080..4007c4868 100644 --- a/kronolith/scripts/sql/kronolith.xml +++ b/kronolith/scripts/sql/kronolith.xml @@ -50,6 +50,11 @@ + event_url + clob + + + event_status integer 0 diff --git a/kronolith/scripts/upgrades/2009-12-09_add_url.mssql.sql b/kronolith/scripts/upgrades/2009-12-09_add_url.mssql.sql new file mode 100644 index 000000000..4dbc1ae77 --- /dev/null +++ b/kronolith/scripts/upgrades/2009-12-09_add_url.mssql.sql @@ -0,0 +1 @@ +ALTER TABLE kronolith_events ADD event_url VARCHAR(MAX); diff --git a/kronolith/scripts/upgrades/2009-12-09_add_url.oci8.sql b/kronolith/scripts/upgrades/2009-12-09_add_url.oci8.sql new file mode 100644 index 000000000..098ee8b5c --- /dev/null +++ b/kronolith/scripts/upgrades/2009-12-09_add_url.oci8.sql @@ -0,0 +1 @@ +ALTER TABLE kronolith_events ADD event_url VARCHAR2(4000); diff --git a/kronolith/scripts/upgrades/2009-12-09_add_url.sql b/kronolith/scripts/upgrades/2009-12-09_add_url.sql new file mode 100644 index 000000000..73ce7a287 --- /dev/null +++ b/kronolith/scripts/upgrades/2009-12-09_add_url.sql @@ -0,0 +1 @@ +ALTER TABLE kronolith_events ADD event_url TEXT; diff --git a/kronolith/templates/edit/edit.inc b/kronolith/templates/edit/edit.inc index 902f2f703..6ae2548ac 100644 --- a/kronolith/templates/edit/edit.inc +++ b/kronolith/templates/edit/edit.inc @@ -232,6 +232,20 @@ if ($event->alarm) { + + + + 'toggle_url'), $GLOBALS['registry']->getImageDir('horde')) . ' ' . Horde::label('url', _("URL")) ?> + url) ?> + + + + + + + + + diff --git a/kronolith/templates/edit/javascript.inc b/kronolith/templates/edit/javascript.inc index 4f3284bdc..c6745328a 100644 --- a/kronolith/templates/edit/javascript.inc +++ b/kronolith/templates/edit/javascript.inc @@ -278,6 +278,7 @@ KronolithEventForm.toggleSection = function(section) Event.observe(window, 'load', function() { KronolithEventForm.toggleSection('alarm'); KronolithEventForm.toggleSection('description'); + KronolithEventForm.toggleSection('url'); KronolithEventForm.toggleSection('attendees'); KronolithEventForm.toggleSection('recurrence'); KronolithEventForm.toggleSection('tags'); diff --git a/kronolith/templates/index/edit.inc b/kronolith/templates/index/edit.inc index 155330c83..a8da2f19a 100644 --- a/kronolith/templates/index/edit.inc +++ b/kronolith/templates/index/edit.inc @@ -145,7 +145,7 @@