Brand new link abstraction allowing link format customization
authorx2003bruneau <x2003bruneau@9869982d-c50d-0410-be91-f2a2ec7c7c7b>
Sat, 8 Jul 2006 20:22:42 +0000 (20:22 +0000)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 4 Jan 2008 23:34:46 +0000 (00:34 +0100)
git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@61 9869982d-c50d-0410-be91-f2a2ec7c7c7b

Changelog
banana/groups.inc.php
banana/misc.inc.php
banana/post.inc.php
banana/spool.inc.php

index d473269..6e53e82 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -2,6 +2,7 @@ Sat, 08 Jul 2006                    Florent Bruneau <florent.bruneau@m4x.org>
 
        * Automatically set fup for crossposts
        * Full URL redirection
+       * Link abstraction
 
 ================================================================================
 VERSION 1.3
index 9c65478..9a008e2 100644 (file)
@@ -119,7 +119,7 @@ class BananaGroups {
             } elseif ($this->type == BANANA_GROUP_SUB) {
                 $html .= '<td class="new">'.($new ? $new : '-').'</td>';
             }
-            $html .= "<td class='grp'><a href='?group=$g'>$g</a></td><td class='dsc'>{$d[0]}</td></tr>";
+            $html .= '<td class="grp">' . makeHREF(Array('group' => $g), $g) . '</td><td class="dsc">' . $d[0] . '</td></tr>';
         }
 
         $html .= '</table>';
index bea2223..8d905e3 100644 (file)
@@ -30,18 +30,65 @@ function textFormat_translate($format)
     }
 }
 
+/** Redirect to the page with the given parameter
+ * @ref makeLink
+ */
 function redirect($params)
 {
        header('Location: ' . makeLink($params));
 }
 
+/** Make a link using the given parameters
+ * @param ARRAY params, the parameters with
+ *       key => value
+ * Known key are:
+ *  - group       = group name
+ *  - artid/first = article id the the group
+ *  - subscribe   = to show the subscription page
+ *  - action      = action to do (new, cancel, view)
+ *  - part        = to show the given MIME part of the article
+ *  - pj          = to get the given attachment
+ *
+ * Can be overloaded by defining a hook_makeLink function
+ */
 function makeLink($params)
 {
-    $proto = empty($_SERVER['HTTPS']) ? 'http://' : 'http://';
+       if (function_exists('hook_makeLink')
+                       && $res = hook_makeLink($params)) {
+               return $res;
+       }
+    $proto = empty($_SERVER['HTTPS']) ? 'http://' : 'https://';
     $host  = $_SERVER['HTTP_HOST'];
     $file  = $_SERVER['PHP_SELF'];
 
-       return $proto . $host . $file . '?' . $params;
+       if (count($params) != 0) {
+               $get = '?';
+               foreach ($params as $key=>$value) {
+                       if (strlen($get) != 1) {
+                               $get .= '&';
+                       }
+                       $get .= $key . '=' . $value;
+               }
+       } else {
+               $get = '';
+       }
+
+       return $proto . $host . $file . $get;
+}
+
+/** Format a link to be use in a link
+ * @ref makeLink
+ */
+function makeHREF($params, $text = null)
+{
+       $link = makeLink($params);
+       if (is_null($text)) {
+               $text = $link;
+       }
+       if ($params['action'] == 'view') {
+               $target = ' target="_blank"';
+       }
+       return '<a href="' . htmlentities($link) . $target . '">' . $text . '</a>';
 }
 
 /********************************************************************************
@@ -177,7 +224,7 @@ function formatDisplayHeader($_header,$_text) {
             $res = "";
             $groups = preg_split("/[\t ]*,[\t ]*/",$_text);
             foreach ($groups as $g) {
-                $res.="<a href='?group=$g'>$g</a>, ";
+                $res .= makeHREF(Array('group' => $g), $g) . ', ';
             }
             return substr($res,0, -2);
 
@@ -198,7 +245,7 @@ function formatDisplayHeader($_header,$_text) {
                 $p = $banana->spool->overview[$p]->parent;
             }
             foreach (array_reverse($par_ok) as $p) {
-                $rsl .= "<a href=\"?group={$banana->spool->group}&amp;artid=$p\">$ndx</a> ";
+                $rsl .= makeHREF(Array('group' => $banana->spool->group), $ndx);
                 $ndx++;
             }
             return $rsl;
@@ -264,15 +311,18 @@ function displayshortcuts($first = -1) {
     extract($banana->state);
 
     $res  = '<div class="banana_scuts">';
-    $res .= '[<a href="?">'._b_('Liste des forums').'</a>] ';
+    $res .= '[' . makeHREF(Array(), _b_('Liste des forums')) . '] ';
     if (is_null($group)) {
-        return $res.'[<a href="?subscribe=1">'._b_('Abonnements').'</a>]</div>';
+        return $res.'[' . makeHREF(Array('subscribe' => 1), _b_('Abonnements')) . ']</div>';
     }
    
-    $res .= "[<a href=\"?group=$group\">$group</a>] ";
+    $res .= '[' . makeHREF(Array('group' => $group), $group) . '] ';
 
     if (is_null($artid)) {
-        $res .= "[<a href=\"?group=$group&amp;action=new\">"._b_('Nouveau message')."</a>] ";
+        $res .= '[' . makeHREF(Array('group'  => $group,
+                                                                        'action' => 'new'),
+                                                          _b_('Nouveau message'))
+                         . '] ';
         if (sizeof($banana->spool->overview)>$banana->tmax) {
             $res .= '<br />';
             $n = intval(log(count($banana->spool->overview), 10))+1;
@@ -280,17 +330,26 @@ function displayshortcuts($first = -1) {
                 if ($first==$ndx) {
                     $fmt = "[%0{$n}u-%0{$n}u] ";
                 } else {
-                    $fmt = "[<a href=\"?group=$group&amp;first=$ndx\">%0{$n}u-%0{$n}u</a>] ";
+                    $fmt = '[' . makeHREF(Array('group' => $group,
+                                                                   'first' => $ndx),
+                                                                                 '%0' . $n . 'u-%0' . $n . 'u')
+                                                . '] ';
                 }
                 $res .= sprintf($fmt, $ndx, min($ndx+$banana->tmax-1,sizeof($banana->spool->overview)));
             }
         }
     } else {
-        $res .= "[<a href=\"?group=$group&amp;artid=$artid&amp;action=new\">"
-             ._b_('Répondre')."</a>] ";
+        $res .= '[' . makeHREF(Array('group'  => $group,
+                                            'artid'  => $artid,
+                                                                        'action' => 'new'),
+                                                          _b_('Répondre'))
+                         . '] ';
         if ($banana->post && $banana->post->checkcancel()) {
-            $res .= "[<a href=\"?group=$group&amp;artid=$artid&amp;action=cancel\">"
-                 ._b_('Annuler ce message')."</a>] ";
+            $res .= '[' . makeHREF(Array('group'  => $group,
+                                                    'artid'  => $artid,
+                                                                                'action' => 'cancel'), 
+                                                                  _b_('Annuler ce message'))
+                                 . '] ';
         }
     }
     return $res.'</div>';
index b240ca2..996e9ca 100644 (file)
@@ -373,7 +373,10 @@ class BananaPost
                 preg_match("@text/([^;]+);@", $this->messages[$i]['headers']['content-type'], $format);
                 $format = textFormat_translate($format[1]);
                 if ($i != $partid) {
-                    $res .= '<a href="?group='.$banana->state['group'].'&artid='.$this->id.'&part='.$i.'">'.$format.'</a>';
+                    $res .= makeHREF(Array('group' => $banana->state['group'],
+                                                                                  'artid' => $this->id,
+                                                                                  'part'  => $i),
+                                                                        $format);
                 } else {
                     $res .= $format;
                 }
@@ -400,8 +403,16 @@ class BananaPost
             $i = 0;
             foreach ($this->pj as $file) {
                 $res .= $file['filename'].' ('.$file['MIME'].') : ';
-                $res .= '<a href="?group='.$banana->state['group'].'&artid='.$this->id.'&pj='.$i.'">télécharger</a>';
-                $res .= ' . <a href="?group='.$banana->state['group'].'&artid='.$this->id.'&pj='.$i.'&action=view" target="_blank">aperçu</a>';
+                $res .= makeHREF(Array('group' => $banana->state['group'],
+                                                      'artid' => $this->id,
+                                                                          'pj'    => $i),
+                                                                _b_('télécharger'));
+                               $res .= ' . ';
+                $res .= makeHREF(Array('group' => $banana->state['group'],
+                                       'artid' => $this->id,
+                                       'pj'    => $i,
+                                                                          'action'=> 'view'),
+                                 _b_('aperçu'));
                 $res .=  '<br/>';
                 $i++;
             }
index 17296b1..7c70727 100644 (file)
@@ -341,7 +341,9 @@ class BananaSpool
             if ($_index == $_ref) {
                 $res .= '<span class="cur">'.htmlentities($subject).'</span>';
             } else {
-                $res .= "<a href='?group={$this->group}&amp;artid=$_id'>".htmlentities($subject).'</a>';
+                $res .= makeHREF(Array('group' => $this->group,
+                                                                          'artid' => $_id),
+                                                                htmlentities($subject));
             }
             $res .= "</td>\n<td class='from'>".formatFrom($this->overview[$_id]->from)."</td>\n</tr>";