1 <?xml version=
"1.0" encoding=
"iso-8859-1"?>
2 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml">
5 <!-- template designed by Marco Von Ballmoos -->
6 <title>Docs for page AWLUtilities.php
</title>
7 <link rel=
"stylesheet" href=
"../../media/stylesheet.css" />
8 <script src=
"../../media/lib/classTree.js"></script>
9 <script language=
"javascript" type=
"text/javascript">
10 var imgPlus = new Image();
11 var imgMinus = new Image();
12 imgPlus.src =
"../../media/images/plus.png";
13 imgMinus.src =
"../../media/images/minus.png";
15 function showNode(Node){
16 switch(navigator.family){
18 // Nav
4.x code fork...
19 var oTable = document.layers[
"span" + Node];
20 var oImg = document.layers[
"img" + Node];
23 // IE
4/
5 code fork...
24 var oTable = document.all[
"span" + Node];
25 var oImg = document.all[
"img" + Node];
28 // Standards Compliant code fork...
29 var oTable = document.getElementById(
"span" + Node);
30 var oImg = document.getElementById(
"img" + Node);
33 oImg.src = imgMinus.src;
34 oTable.style.display =
"block";
37 function hideNode(Node){
38 switch(navigator.family){
40 // Nav
4.x code fork...
41 var oTable = document.layers[
"span" + Node];
42 var oImg = document.layers[
"img" + Node];
45 // IE
4/
5 code fork...
46 var oTable = document.all[
"span" + Node];
47 var oImg = document.all[
"img" + Node];
50 // Standards Compliant code fork...
51 var oTable = document.getElementById(
"span" + Node);
52 var oImg = document.getElementById(
"img" + Node);
55 oImg.src = imgPlus.src;
56 oTable.style.display =
"none";
59 function nodeIsVisible(Node){
60 switch(navigator.family){
62 // Nav
4.x code fork...
63 var oTable = document.layers[
"span" + Node];
66 // IE
4/
5 code fork...
67 var oTable = document.all[
"span" + Node];
70 // Standards Compliant code fork...
71 var oTable = document.getElementById(
"span" + Node);
74 return (oTable && oTable.style.display ==
"block");
77 function toggleNodeVisibility(Node){
78 if (nodeIsVisible(Node)){
87 <div class=
"page-body">
88 <h2 class=
"file-name"><img src=
"../../media/images/Page_logo.png" alt=
"File" style=
"vertical-align: middle">/AWLUtilities.php
</h2>
90 <a name=
"sec-description"></a>
91 <div class=
"info-box">
92 <div class=
"info-box-title">Description
</div>
94 <span class=
"disabled">Description
</span> |
95 <a href=
"#sec-includes">Includes
</a>
96 |
<a href=
"#sec-functions">Functions
</a>
98 <div class=
"info-box-body">
99 <!-- ========== Info from phpDoc block ========= -->
100 <p class=
"short-description">Utility functions of a general nature which are used by most AWL library classes.
</p>
102 <li><span class=
"field">author:
</span> Andrew McMillan
<<a href=
"mailto:andrew@mcmillan.net.nz">andrew@mcmillan.net.nz
</a>></li>
103 <li><span class=
"field">copyright:
</span> Catalyst IT Ltd, Morphoss Ltd
<http://www.morphoss.com/
></li>
104 <li><span class=
"field">license:
</span> <a href=
"http://www.gnu.org/licenses/lgpl-3.0.txt">GNU LGPL version
3 or later
</a></li>
111 <a name=
"sec-includes"></a>
112 <div class=
"info-box">
113 <div class=
"info-box-title">Includes
</div>
114 <div class=
"nav-bar">
115 <a href=
"#sec-description">Description
</a> |
116 <span class=
"disabled">Includes
</span>
117 |
<a href=
"#sec-functions">Functions
</a>
119 <div class=
"info-box-body">
120 <a name=
"_Translation_php"><!-- --></a>
121 <div class=
"evenrow">
124 <img src=
"../../media/images/Page.png" alt=
" " />
125 <span class=
"include-title">
126 <span class=
"include-type">require
</span>
127 (
<span class=
"include-name"><a href=
"../../awl/Translation/_Translation.php.html">"Translation.php"</a></span>)
128 (line
<span class=
"line-number">367</span>)
132 <!-- ========== Info from phpDoc block ========= -->
140 <a name=
"sec-functions"></a>
141 <div class=
"info-box">
142 <div class=
"info-box-title">Functions
</div>
143 <div class=
"nav-bar">
144 <a href=
"#sec-description">Description
</a> |
145 <a href=
"#sec-includes">Includes
</a>
146 |
<span class=
"disabled">Functions
</span>
148 <div class=
"info-box-body">
149 <a name=
"functionawl_version" id=
"functionawl_version"><!-- --></a>
153 <img src=
"../../media/images/Function.png" />
154 <span class=
"method-title">awl_version
</span> (line
<span class=
"line-number">675</span>)
157 <!-- ========== Info from phpDoc block ========= -->
158 <p class=
"short-description">Return the AWL version
</p>
159 <div class=
"method-signature">
160 <span class=
"method-result">void
</span>
161 <span class=
"method-name">
170 <a name=
"functioncheck_by_regex" id=
"functioncheck_by_regex"><!-- --></a>
171 <div class=
"evenrow">
174 <img src=
"../../media/images/Function.png" />
175 <span class=
"method-title">check_by_regex
</span> (line
<span class=
"line-number">397</span>)
178 <!-- ========== Info from phpDoc block ========= -->
179 <p class=
"short-description">Verify a value is OK by testing a regex against it. If it is an array apply it to each element in the array recursively. If it is an object we don't mess with it.
</p>
180 <div class=
"method-signature">
181 <span class=
"method-result">void
</span>
182 <span class=
"method-name">
185 (
<span class=
"var-type"></span> <span class=
"var-name">$val
</span>,
<span class=
"var-type"></span> <span class=
"var-name">$regex
</span>)
188 <ul class=
"parameters">
190 <span class=
"var-type"></span>
191 <span class=
"var-name">$val
</span> </li>
193 <span class=
"var-type"></span>
194 <span class=
"var-name">$regex
</span> </li>
199 <a name=
"functiondbg_error_log" id=
"functiondbg_error_log"><!-- --></a>
203 <img src=
"../../media/images/Function.png" />
204 <span class=
"method-title">dbg_error_log
</span> (line
<span class=
"line-number">27</span>)
207 <!-- ========== Info from phpDoc block ========= -->
208 <p class=
"short-description">Writes a debug message into the error log using printf syntax. If the first parameter is
"ERROR
" then the message will _always_ be logged.
</p>
209 <p class=
"description"><p>Otherwise, the first parameter is a
"component
" name, and will only be logged if $c-
>dbg[
"component
"] is set to some non-null value.
</p><p>If you want to see every log message then $c-
>dbg[
"ALL
"] can be set, to override the debugging status of the individual components.
</p></p>
211 <li><span class=
"field">var:
</span> The component to identify itself, or
"ERROR
", or
"LOG:component
"</li>
213 <div class=
"method-signature">
214 <span class=
"method-result">void
</span>
215 <span class=
"method-name">
224 <a name=
"functiondbg_log_array" id=
"functiondbg_log_array"><!-- --></a>
225 <div class=
"evenrow">
228 <img src=
"../../media/images/Function.png" />
229 <span class=
"method-title">dbg_log_array
</span> (line
<span class=
"line-number">151</span>)
232 <!-- ========== Info from phpDoc block ========= -->
233 <p class=
"short-description">Function to dump an array to the error log, possibly recursively
</p>
235 <li><span class=
"field">var:
</span> Which component should this log message identify itself from
</li>
237 <div class=
"method-signature">
238 <span class=
"method-result">void
</span>
239 <span class=
"method-name">
242 (
<span class=
"var-type"></span> <span class=
"var-name">$component
</span>,
<span class=
"var-type"></span> <span class=
"var-name">$name
</span>,
<span class=
"var-type"></span> <span class=
"var-name">$arr
</span>, [
<span class=
"var-type"></span> <span class=
"var-name">$recursive
</span> =
<span class=
"var-default">false
</span>])
245 <ul class=
"parameters">
247 <span class=
"var-type"></span>
248 <span class=
"var-name">$component
</span> </li>
250 <span class=
"var-type"></span>
251 <span class=
"var-name">$name
</span> </li>
253 <span class=
"var-type"></span>
254 <span class=
"var-name">$arr
</span> </li>
256 <span class=
"var-type"></span>
257 <span class=
"var-name">$recursive
</span> </li>
262 <a name=
"functiondefine_byte_mappings" id=
"functiondefine_byte_mappings"><!-- --></a>
266 <img src=
"../../media/images/Function.png" />
267 <span class=
"method-title">define_byte_mappings
</span> (line
<span class=
"line-number">498</span>)
270 <!-- ========== Info from phpDoc block ========= -->
271 <div class=
"method-signature">
272 <span class=
"method-result">void
</span>
273 <span class=
"method-name">
282 <a name=
"functiondeprecated" id=
"functiondeprecated"><!-- --></a>
283 <div class=
"evenrow">
286 <img src=
"../../media/images/Function.png" />
287 <span class=
"method-title">deprecated
</span> (line
<span class=
"line-number">623</span>)
290 <!-- ========== Info from phpDoc block ========= -->
291 <div class=
"method-signature">
292 <span class=
"method-result">void
</span>
293 <span class=
"method-name">
296 (
<span class=
"var-type"></span> <span class=
"var-name">$method
</span>)
299 <ul class=
"parameters">
301 <span class=
"var-type"></span>
302 <span class=
"var-name">$method
</span> </li>
307 <a name=
"functionfatal" id=
"functionfatal"><!-- --></a>
311 <img src=
"../../media/images/Function.png" />
312 <span class=
"method-title">fatal
</span> (line
<span class=
"line-number">58</span>)
315 <!-- ========== Info from phpDoc block ========= -->
316 <div class=
"method-signature">
317 <span class=
"method-result">void
</span>
318 <span class=
"method-name">
327 <a name=
"functionforce_utf8" id=
"functionforce_utf8"><!-- --></a>
328 <div class=
"evenrow">
331 <img src=
"../../media/images/Function.png" />
332 <span class=
"method-title">force_utf8
</span> (line
<span class=
"line-number">550</span>)
335 <!-- ========== Info from phpDoc block ========= -->
336 <div class=
"method-signature">
337 <span class=
"method-result">void
</span>
338 <span class=
"method-name">
341 (
<span class=
"var-type"></span> <span class=
"var-name">$input
</span>)
344 <ul class=
"parameters">
346 <span class=
"var-type"></span>
347 <span class=
"var-name">$input
</span> </li>
352 <a name=
"functionget_fields" id=
"functionget_fields"><!-- --></a>
356 <img src=
"../../media/images/Function.png" />
357 <span class=
"method-title">get_fields
</span> (line
<span class=
"line-number">477</span>)
360 <!-- ========== Info from phpDoc block ========= -->
361 <p class=
"short-description">Get the names of the fields for a particular table
</p>
363 <li><span class=
"field">return:
</span> of string The public fields in the table.
</li>
365 <div class=
"method-signature">
366 <span class=
"method-result">array
</span>
367 <span class=
"method-name">
370 (
<span class=
"var-type">string
</span> <span class=
"var-name">$tablename
</span>)
373 <ul class=
"parameters">
375 <span class=
"var-type">string
</span>
376 <span class=
"var-name">$tablename
</span><span class=
"var-description">: The name of the table.
</span> </li>
381 <a name=
"functiongzdecode" id=
"functiongzdecode"><!-- --></a>
382 <div class=
"evenrow">
385 <img src=
"../../media/images/Function.png" />
386 <span class=
"method-title">gzdecode
</span> (line
<span class=
"line-number">639</span>)
389 <!-- ========== Info from phpDoc block ========= -->
390 <div class=
"method-signature">
391 <span class=
"method-result">void
</span>
392 <span class=
"method-name">
395 (
<span class=
"var-type"></span> <span class=
"var-name">$instring
</span>)
398 <ul class=
"parameters">
400 <span class=
"var-type"></span>
401 <span class=
"var-name">$instring
</span> </li>
406 <a name=
"functionolson_from_tzstring" id=
"functionolson_from_tzstring"><!-- --></a>
410 <img src=
"../../media/images/Function.png" />
411 <span class=
"method-title">olson_from_tzstring
</span> (line
<span class=
"line-number">584</span>)
414 <!-- ========== Info from phpDoc block ========= -->
415 <p class=
"short-description">Try and extract something like
"Pacific/Auckland
" or
"America/Indiana/Indianapolis
" if possible.
</p>
416 <div class=
"method-signature">
417 <span class=
"method-result">void
</span>
418 <span class=
"method-name">
421 (
<span class=
"var-type"></span> <span class=
"var-name">$tzstring
</span>)
424 <ul class=
"parameters">
426 <span class=
"var-type"></span>
427 <span class=
"var-name">$tzstring
</span> </li>
432 <a name=
"functionparam_to_global" id=
"functionparam_to_global"><!-- --></a>
433 <div class=
"evenrow">
436 <img src=
"../../media/images/Function.png" />
437 <span class=
"method-title">param_to_global
</span> (line
<span class=
"line-number">431</span>)
440 <!-- ========== Info from phpDoc block ========= -->
441 <p class=
"short-description">Convert a parameter to a global. We first look in _POST and then in _GET, and if they passed in a bunch of valid characters, we will make sure the incoming is cleaned to only match that set.
</p>
442 <div class=
"method-signature">
443 <span class=
"method-result">void
</span>
444 <span class=
"method-name">
447 (
<span class=
"var-type">string
</span> <span class=
"var-name">$varname
</span>,
<span class=
"var-type">string
</span> <span class=
"var-name">$match_regex
</span>,
<span class=
"var-type">string
</span> <span class=
"var-name">$alias1
</span>,
<span class=
"var-type">"</span> <span class="var-name
">3</span>)
450 <ul class="parameters
">
452 <span class="var-type
">string</span>
453 <span class="var-name
">$varname</span><span class="var-description
">: The name of the global variable to put the answer in</span> </li>
455 <span class="var-type
">string</span>
456 <span class="var-name
">$match_regex</span><span class="var-description
">: The part of the parameter matching this regex will be returned</span> </li>
458 <span class="var-type
">string</span>
459 <span class="var-name
">$alias1</span><span class="var-description
">: An alias for the name that we should look for first.</span> </li>
461 <span class="var-type
">"</span>
462 <span class=
"var-name">3</span><span class=
"var-description">: ... More aliases, in the order which they should be examined. $varname will be appended to the end.
</span> </li>
467 <a name=
"functionquoted_printable_encode" id=
"functionquoted_printable_encode"><!-- --></a>
471 <img src=
"../../media/images/Function.png" />
472 <span class=
"method-title">quoted_printable_encode
</span> (line
<span class=
"line-number">385</span>)
475 <!-- ========== Info from phpDoc block ========= -->
476 <p class=
"short-description">Process a string to fit the requirements of RFC2045 section
6.7. Note that this works, but replaces more characters than the minimum set. For readability the spaces aren't encoded as =
20 though.
</p>
477 <div class=
"method-signature">
478 <span class=
"method-result">void
</span>
479 <span class=
"method-name">
480 quoted_printable_encode
482 (
<span class=
"var-type"></span> <span class=
"var-name">$string
</span>)
485 <ul class=
"parameters">
487 <span class=
"var-type"></span>
488 <span class=
"var-name">$string
</span> </li>
493 <a name=
"functionreplace_uri_params" id=
"functionreplace_uri_params"><!-- --></a>
494 <div class=
"evenrow">
497 <img src=
"../../media/images/Function.png" />
498 <span class=
"method-title">replace_uri_params
</span> (line
<span class=
"line-number">296</span>)
501 <!-- ========== Info from phpDoc block ========= -->
502 <p class=
"short-description">Given a URL (presumably the current one) and a parameter, replace the value of parameter, extending the URL as necessary if the parameter is not already there.
</p>
504 <li><span class=
"field">return:
</span> The URI with the replacements done.
</li>
506 <div class=
"method-signature">
507 <span class=
"method-result">string
</span>
508 <span class=
"method-name">
511 (
<span class=
"var-type">string
</span> <span class=
"var-name">$uri
</span>,
<span class=
"var-type">array
</span> <span class=
"var-name">$replacements
</span>)
514 <ul class=
"parameters">
516 <span class=
"var-type">string
</span>
517 <span class=
"var-name">$uri
</span><span class=
"var-description">: The URI we will be replacing parameters in.
</span> </li>
519 <span class=
"var-type">array
</span>
520 <span class=
"var-name">$replacements
</span><span class=
"var-description">: An array of replacement pairs array(
"replace_this
" =
> "with this
" )
</span> </li>
525 <a name=
"functionsession_salted_md5" id=
"functionsession_salted_md5"><!-- --></a>
529 <img src=
"../../media/images/Function.png" />
530 <span class=
"method-title">session_salted_md5
</span> (line
<span class=
"line-number">194</span>)
533 <!-- ========== Info from phpDoc block ========= -->
534 <p class=
"short-description">Make a salted MD5 string, given a string and (possibly) a salt.
</p>
535 <p class=
"description"><p>If no salt is supplied we will generate a random one.
</p></p>
537 <li><span class=
"field">return:
</span> The salt, a * and the MD5 of the salted string, as in SALT*SALTEDHASH
</li>
539 <div class=
"method-signature">
540 <span class=
"method-result">string
</span>
541 <span class=
"method-name">
544 (
<span class=
"var-type">string
</span> <span class=
"var-name">$instr
</span>, [
<span class=
"var-type">string
</span> <span class=
"var-name">$salt
</span> =
<span class=
"var-default">&quot;
&quot;
</span>])
547 <ul class=
"parameters">
549 <span class=
"var-type">string
</span>
550 <span class=
"var-name">$instr
</span><span class=
"var-description">: The string to be salted and MD5'd
</span> </li>
552 <span class=
"var-type">string
</span>
553 <span class=
"var-name">$salt
</span><span class=
"var-description">: Some salt to sprinkle into the string to be MD5'd so we don't get the same PW always hashing to the same value.
</span> </li>
558 <a name=
"functionsession_salted_sha1" id=
"functionsession_salted_sha1"><!-- --></a>
559 <div class=
"evenrow">
562 <img src=
"../../media/images/Function.png" />
563 <span class=
"method-title">session_salted_sha1
</span> (line
<span class=
"line-number">218</span>)
566 <!-- ========== Info from phpDoc block ========= -->
567 <p class=
"short-description">Make a salted SHA1 string, given a string and (possibly) a salt. PHP5 only (although it could be made to work on PHP4 (@see http://www.openldap.org/faq/data/cache/
347.html). The algorithm used here is compatible with OpenLDAP so passwords generated through this function should be able to be migrated to OpenLDAP by using the part following the second '*', i.e.
</p>
568 <p class=
"description"><p>the '{SSHA}....' part.
</p><p>If no salt is supplied we will generate a random one.
</p></p>
570 <li><span class=
"field">return:
</span> A *, the salt, a * and the SHA1 of the salted string, as in *SALT*SALTEDHASH
</li>
572 <div class=
"method-signature">
573 <span class=
"method-result">string
</span>
574 <span class=
"method-name">
577 (
<span class=
"var-type">string
</span> <span class=
"var-name">$instr
</span>, [
<span class=
"var-type">string
</span> <span class=
"var-name">$salt
</span> =
<span class=
"var-default">&quot;
&quot;
</span>])
580 <ul class=
"parameters">
582 <span class=
"var-type">string
</span>
583 <span class=
"var-name">$instr
</span><span class=
"var-description">: The string to be salted and SHA1'd
</span> </li>
585 <span class=
"var-type">string
</span>
586 <span class=
"var-name">$salt
</span><span class=
"var-description">: Some salt to sprinkle into the string to be SHA1'd so we don't get the same PW always hashing to the same value.
</span> </li>
591 <a name=
"functionsession_simple_md5" id=
"functionsession_simple_md5"><!-- --></a>
595 <img src=
"../../media/images/Function.png" />
596 <span class=
"method-title">session_simple_md5
</span> (line
<span class=
"line-number">175</span>)
599 <!-- ========== Info from phpDoc block ========= -->
600 <p class=
"short-description">Make a plain MD5 hash of a string, identifying the type of hash it is
</p>
602 <li><span class=
"field">return:
</span> The *MD5* and the MD5 of the string
</li>
604 <div class=
"method-signature">
605 <span class=
"method-result">string
</span>
606 <span class=
"method-name">
609 (
<span class=
"var-type">string
</span> <span class=
"var-name">$instr
</span>)
612 <ul class=
"parameters">
614 <span class=
"var-type">string
</span>
615 <span class=
"var-name">$instr
</span><span class=
"var-description">: The string to be salted and MD5'd
</span> </li>
620 <a name=
"functionsession_validate_password" id=
"functionsession_validate_password"><!-- --></a>
621 <div class=
"evenrow">
624 <img src=
"../../media/images/Function.png" />
625 <span class=
"method-title">session_validate_password
</span> (line
<span class=
"line-number">234</span>)
628 <!-- ========== Info from phpDoc block ========= -->
629 <p class=
"short-description">Checks what a user entered against the actual password on their account.
</p>
631 <li><span class=
"field">return:
</span> Whether or not the users attempt matches what is already on file.
</li>
633 <div class=
"method-signature">
634 <span class=
"method-result">boolean
</span>
635 <span class=
"method-name">
636 session_validate_password
638 (
<span class=
"var-type">string
</span> <span class=
"var-name">$they_sent
</span>,
<span class=
"var-type">string
</span> <span class=
"var-name">$we_have
</span>)
641 <ul class=
"parameters">
643 <span class=
"var-type">string
</span>
644 <span class=
"var-name">$they_sent
</span><span class=
"var-description">: What the user entered.
</span> </li>
646 <span class=
"var-type">string
</span>
647 <span class=
"var-name">$we_have
</span><span class=
"var-description">: What we have in the database as their password. Which may (or may not) be a salted MD5.
</span> </li>
652 <a name=
"functiontrace_bug" id=
"functiontrace_bug"><!-- --></a>
656 <img src=
"../../media/images/Function.png" />
657 <span class=
"method-title">trace_bug
</span> (line
<span class=
"line-number">93</span>)
660 <!-- ========== Info from phpDoc block ========= -->
661 <p class=
"short-description">Not as sever as a fatal() call, but we want to log and trace it
</p>
662 <div class=
"method-signature">
663 <span class=
"method-result">void
</span>
664 <span class=
"method-name">
673 <a name=
"functionuuid" id=
"functionuuid"><!-- --></a>
674 <div class=
"evenrow">
677 <img src=
"../../media/images/Function.png" />
678 <span class=
"method-title">uuid
</span> (line
<span class=
"line-number">349</span>)
681 <!-- ========== Info from phpDoc block ========= -->
682 <p class=
"short-description">Generates a Universally Unique IDentifier, version
4.
</p>
683 <p class=
"description"><p>RFC
4122 (http://www.ietf.org/rfc/rfc4122.txt) defines a special type of Globally Unique IDentifiers (GUID), as well as several methods for producing them. One such method, described in section
4.4, is based on truly random or pseudo-random number generators, and is therefore implementable in a language like PHP.
</p><p>We choose to produce pseudo-random numbers with the Mersenne Twister, and to always limit single generated numbers to
16 bits (ie. the decimal value
65535). That is because, even on
32-bit systems, PHP's RAND_MAX will often be the maximum *signed* value, with only the equivalent of
31 significant bits. Producing two
16-bit random numbers to make up a
32-bit one is less efficient, but guarantees that all
32 bits are random.
</p><p>The algorithm for version
4 UUIDs (ie. those based on random number generators) states that all
128 bits separated into the various fields (
32 bits,
16 bits,
16 bits,
8 bits and
8 bits,
48 bits) should be random, except : (a) the version number should be the last
4 bits in the
3rd field, and (b) bits
6 and
7 of the
4th field should be
01. We try to conform to that definition as efficiently as possible, generating smaller values where possible, and minimizing the number of base conversions.
</p></p>
685 <li><span class=
"field">return:
</span> A UUID, made up of
32 hex digits and
4 hyphens.
</li>
686 <li><span class=
"field">author:
</span> David Holmes
<<a href=
"mailto:dholmes@cfdsoftware.net">dholmes@cfdsoftware.net
</a>></li>
687 <li><span class=
"field">copyright:
</span> Copyright (c) CFD Labs,
2006. This function may be used freely for any purpose ; it is distributed without any form of warranty whatsoever.
</li>
689 <div class=
"method-signature">
690 <span class=
"method-result">string
</span>
691 <span class=
"method-name">
703 <p class=
"notes" id=
"credit">
704 Documentation generated on Mon,
24 Oct
2011 20:
10:
10 +
1300 by
<a href=
"http://www.phpdoc.org" target=
"_blank">phpDocumentor
1.4.3</a>