Generate non-volatile data outside of loops. (patrick.abiven@apitech.fr).
authorJan Schneider <jan@horde.org>
Sat, 7 Nov 2009 17:43:52 +0000 (18:43 +0100)
committerJan Schneider <jan@horde.org>
Sat, 7 Nov 2009 17:43:52 +0000 (18:43 +0100)
kronolith/docs/CHANGES
kronolith/lib/Event.php
kronolith/lib/View/Month.php

index 2c5b813..0407fcd 100644 (file)
@@ -25,6 +25,7 @@ v3.0-git
 v2.3.3-cvs
 ----------
 
+[jan] Optimize event link generation (patrick.abiven@apitech.fr).
 [jan] Fix Oracle SQL scripts.
 [jan] Fix charset of ajax responses.
 [jan] Add Croatian translation (Matej Vela <matej.vela@carnet.hr>).
index 88ff1c9..4bc9f41 100644 (file)
@@ -2294,13 +2294,16 @@ abstract class Kronolith_Event
             $from_url = Horde::selfUrl(true, false, true);
         }
 
-        $link = '';
         $event_title = $this->getTitle();
+        $view_url = $this->getViewUrl(array('datetime' => $datetime->strftime('%Y%m%d%H%M%S'), 'url' => $from_url), $full);
+        $read_permission = $this->hasPermission(PERMS_READ);
+
+        $link = '';
         if (isset($this->external) && !empty($this->external_link)) {
             $link = $this->external_link;
             $link = Horde::linkTooltip(Horde::url($link), '', 'event-tentative', '', '', Horde_String::wrap($this->description));
-        } elseif (isset($this->eventID) && $this->hasPermission(PERMS_READ)) {
-            $link = Horde::linkTooltip($this->getViewUrl(array('datetime' => $datetime->strftime('%Y%m%d%H%M%S'), 'url' => $from_url), $full),
+        } elseif (isset($this->eventID) && $read_permission) {
+            $link = Horde::linkTooltip($view_url,
                                        $event_title,
                                        $this->getStatusClass(), '', '',
                                        $this->getTooltip(),
@@ -2310,9 +2313,7 @@ abstract class Kronolith_Event
 
         $link .= @htmlspecialchars($event_title, ENT_QUOTES, Horde_Nls::getCharset());
 
-        if ($this->hasPermission(PERMS_READ) &&
-            (isset($this->eventID) ||
-             isset($this->external))) {
+        if ($read_permission && (isset($this->eventID) || isset($this->external))) {
             $link .= '</a>';
         }
 
@@ -2364,15 +2365,13 @@ abstract class Kronolith_Event
             $delete = '';
             if ((!$this->isPrivate() || $this->getCreatorId() == Horde_Auth::getAuth())
                 && $this->hasPermission(PERMS_EDIT)) {
-                $editurl = $this->getEditUrl(array('datetime' => $datetime->strftime('%Y%m%d%H%M%S'),
-                                                   'url' => $from_url));
+                $editurl = Horde_Util::addParameter($view_url, 'view', 'EditEvent', !$full);
                 $edit = Horde::link($editurl, sprintf(_("Edit %s"), $event_title), 'iconEdit')
                     . Horde::fullSrcImg('edit-' . $icon_color . '.png', array('attr' => 'alt="' . _("Edit") . '"'))
                     . '</a>';
             }
             if ($this->hasPermission(PERMS_DELETE)) {
-                $delurl = $this->getDeleteUrl(array('datetime' => $datetime->strftime('%Y%m%d%H%M%S'),
-                                                    'url' => $from_url));
+                $delurl = Horde_Util::addParameter($view_url, 'view', 'DeleteEvent', !$full);
                 $delete = Horde::link($delurl, sprintf(_("Delete %s"), $event_title), 'iconDelete')
                     . Horde::fullSrcImg('delete-' . $icon_color . '.png', array('attr' => 'alt="' . _("Delete") . '"'))
                     . '</a>';
index 795306f..909748e 100644 (file)
@@ -135,6 +135,10 @@ class Kronolith_View_Month {
 
         $showLocation = Kronolith::viewShowLocation();
         $showTime = Kronolith::viewShowTime();
+        $day_url = Horde::applicationUrl('day.php');
+        $this_link = $this->link(0, true);
+        $new_url = Horde_Util::addParameter(Horde::applicationUrl('new.php'), 'url', $this_link);
+        $new_img = Horde::img('new_small.png', '+');
 
         foreach ($this->_currentCalendars as $id => $cal) {
             if ($sidebyside) {
@@ -166,19 +170,16 @@ class Kronolith_View_Month {
 
                 $html .= '<td class="' . $style . '" height="70" width="14%" valign="top"><div>';
 
-                $url = Horde_Util::addParameter(Horde::applicationUrl('day.php'),
-                                          'date', $date->dateString());
+                $url = Horde_Util::addParameter($day_url, 'date', $date->dateString());
                 $html .= '<a class="day" href="' . $url . '">' . $date->mday . '</a>';
 
                 if ($addLinks) {
-                    $url = Horde_Util::addParameter(Horde::applicationUrl('new.php'),
-                                              array('date' => $date->dateString(),
-                                                    'url' => $this->link(0, true)));
+                    $url = Horde_Util::addParameter($new_url, 'date', $date->dateString());
                     if ($sidebyside) {
                         $url = Horde_Util::addParameter($url, 'calendar', $id);
                     }
                     $html .= Horde::link($url, _("Create a New Event"), 'newEvent') .
-                        Horde::img('new_small.png', '+') . '</a>';
+                        $new_img . '</a>';
                 }
 
                 if ($date->dayOfWeek() == Horde_Date::DATE_MONDAY) {
@@ -193,7 +194,7 @@ class Kronolith_View_Month {
                     foreach ($this->_events[$date_stamp] as $event) {
                         if (!$sidebyside || $event->getCalendar() == $id) {
                             $html .= '<div class="month-eventbox"' . $event->getCSSColors() . '>'
-                                . $event->getLink($date, true, $this->link(0, true));
+                                . $event->getLink($date, true, $this_link);
                             if ($showTime) {
                                 $html .= '<div class="event-time">' . htmlspecialchars($event->getTimeRange()) . '</div>';
                             }