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