]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MLIB/HTML/Link.php
Agrego tareas pendientes al TODO.
[mecon/meconlib.git] / lib / MLIB / HTML / Link.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     meconlib
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
7
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
11 any later version.
12
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA  02111-1307  USA
20 -------------------------------------------------------------------------------
21 Creado: Thu Aug 21 15:09:10 2003
22 Autor:  @@author <@@email>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'HTML/Common.php';
28
29 /**
30  * HTML Link representation.
31 When adding GET variables, if the value is an object, it looks for a toString() method, if it doesn't exists or if is an array, it serializes the object/array to get a string value.
32 This is done in toHtml() method. Object are stored as references.
33  *
34  * @package HTML
35  * @access public
36  */
37 class MECON_HTML_Link extends HTML_Common {
38     /**
39      * Variables to send via GET HTTP method.
40      *
41      * @var    array $getVars
42      * @access protected
43      */
44     var $_getVars = array();
45
46     /**
47      * Link contents.
48      *
49      * @var    array $contents
50      * @access protected
51      */
52     var $_contents = array();
53
54     /**
55      * Gets GetVars.
56      *
57      * @return array
58      * @access public
59      */
60     function getGetVars()
61     {
62         return $this->_getVars;
63     }
64
65     /**
66      * Sets GetVars.
67      *
68      * @param  array $getVars GetVars.
69      *
70      * @return void
71      * @access public
72      */
73     function setGetVars($getVars)
74     {
75         $this->_getVars = $getVars;
76     }
77
78     /**
79      * Constructor.
80      *
81      * @param  string $href Hypertext reference.
82      * @param  mixed $contents Link contents.
83      * @param  array $getVars Array (as key => value pairs) of GET variables to pass to the link.
84      * @param  array $attrs Other links (A tag) attributes.
85      *
86      * @return void
87      * @access public
88      */
89     function MECON_HTML_Link($href = '', $contents = '', $getVars = array(), $attrs = array())
90     {
91         if (is_array($attrs)) {
92             $attrs['href'] = $href;
93             if (!isset($attrs['class'])){
94                 $attrs['class'] = 'mecon_html_link';
95             }
96         } else {
97             $attrs .= " href=$href";
98         }
99         parent::HTML_Common($attrs);
100         $this->_getVars = $getVars;
101         $this->addContents($contents);
102     }
103
104     /**
105      * Converts to HTML output.
106      *
107      * @return string
108      * @access public
109      */
110     function toHtml()
111     {
112         $attrs = '';
113         foreach ($this->getAttributes() as $key => $val) {
114             if ($key == 'href') {
115                 $val = $this->getURI();
116             } else {
117                 $val = htmlentities($val);
118             }
119             $attrs .= ' ' . $key . '="' . $val . '"';
120         }
121         return "<a$attrs>" . $this->getContents() . '</a>';
122     }
123
124     /**
125      * Gets hypertext reference.
126      *
127      * @return string
128      * @access public
129      */
130     function getHref()
131     {
132         return $this->getAttribute('href');
133     }
134
135     /**
136      * Sets hypertext reference.
137      *
138      * @param  string $href Hypertext reference.
139      *
140      * @return void
141      * @access public
142      */
143     function setHref($href)
144     {
145         $this->updateAttributes(array('href' => $href));
146     }
147
148     /**
149      * Set a GET variable.
150      *
151      * @param  string $key Key for the GET variable.
152      * @param  mixed $value Value for the variable.
153      *
154      * @return void
155      * @access public
156      */
157     function setGetVar($key, $value)
158     {
159         $this->_getVars[$key] = $value;
160     }
161
162     /**
163      * Updates GET variables.
164      *
165      * @param  array $vars Array (as key => value pairs) of GET variables to update.
166 If they doesn't exists, they are added, if they exists, they are updated.
167      *
168      * @return void
169      * @access public
170      */
171     function updateGetVars($vars)
172     {
173         foreach ($vars as $key => $value) 
174         {
175             $this->_getVars[$key] = $value;
176         }
177     }
178
179     /**
180      * Unsets (removes) GET variables. This method supports variable arguments.
181      *
182      * @param  string $key Key of the GET variable to remove.
183      *
184      * @return void
185      * @access public
186      */
187     function unsetGetVars($key)
188     {
189         $keys = func_get_args();
190         foreach ($keys as $key) {
191             unset($this->_getVars[$key]);
192         }
193     }
194
195     /**
196      * Adds contents to the link.
197      *
198      * @param  mixed &$contents Contents to add. Can be an object with a toHtml() method.
199      * @param  bool  $front     Tells where to put the new content.
200      *
201      * @return void
202      * @access public
203      */
204     function addContents($contents, $front = false)
205     {
206         if ($front) {
207             array_unshift($this->_contents, $contents);
208         }
209         else {
210             $this->_contents[] = $contents;
211         }
212     }
213
214     /**
215      * @return string
216      * @access public
217      */
218     function getContents()
219     {
220         $html = '';
221         foreach ($this->_contents as $c) {
222             if (is_object($c) and method_exists($c, 'tohtml')) {
223                 $html .= $c->toHtml();
224             } else {
225                 $html .= htmlentities($c);
226             }
227         }
228         return $html;
229     }
230
231     /**
232      * @param  mixed $contents New link contents.
233      *
234      * @return void
235      * @access public
236      */
237     function setContents($contents)
238     {
239         $this->_contents = array($contents);
240     }
241
242     /**
243      * @param  mixed $contents New link contents.
244      *
245      * @return void
246      * @access public
247      */
248     function getCSS()
249     {
250         return '/MECON/css/html/link';
251     }
252
253     /**
254      * Gets the query string generated with the GET vars.
255      * 
256      * @return GET query string.
257      */
258     function getQueryString()
259     {
260         $vars = array();
261         foreach ($this->_getVars as $var => $v) {
262             if (is_object($v) and method_exists($v, 'tostring')) {
263                 $v = $v->tostring();
264             } elseif (is_object($v)) {
265                 $v = serialize($v);
266             }
267             if (is_array($v)) {
268                 foreach ($v as $i) {
269                     $vars[] = urlencode($var) . '[]=' . urlencode($i);
270                 }
271             } else {
272                 $vars[] = urlencode($var) . '=' . urlencode($v);
273             }
274         }
275         return join('&', $vars);
276     }
277
278     /**
279      * Gets the URI (base page with the query string).
280      * 
281      * @return URI string.
282      */
283     function getURI()
284     {
285         $query = $this->getQueryString();
286         return $this->getAttribute('href') . ($query ? "?$query" : '');
287     }
288
289 }
290
291 ?>