root/trunk/lib/SGL/Output.php

Revision 3125, 29.5 kB (checked in by demian, 1 month ago)

bugfix to trunk merge -3

Line 
1 <?php
2 /* Reminder: always indent with 4 spaces (no tabs). */
3 // +---------------------------------------------------------------------------+
4 // | Copyright (c) 2006, Demian Turner                                         |
5 // | All rights reserved.                                                      |
6 // |                                                                           |
7 // | Redistribution and use in source and binary forms, with or without        |
8 // | modification, are permitted provided that the following conditions        |
9 // | are met:                                                                  |
10 // |                                                                           |
11 // | o Redistributions of source code must retain the above copyright          |
12 // |   notice, this list of conditions and the following disclaimer.           |
13 // | o Redistributions in binary form must reproduce the above copyright       |
14 // |   notice, this list of conditions and the following disclaimer in the     |
15 // |   documentation and/or other materials provided with the distribution.    |
16 // | o The names of the authors may not be used to endorse or promote          |
17 // |   products derived from this software without specific prior written      |
18 // |   permission.                                                             |
19 // |                                                                           |
20 // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       |
21 // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         |
22 // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     |
23 // | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      |
24 // | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     |
25 // | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          |
26 // | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     |
27 // | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     |
28 // | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       |
29 // | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE     |
30 // | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.      |
31 // |                                                                           |
32 // +---------------------------------------------------------------------------+
33 // | Seagull 0.6                                                               |
34 // +---------------------------------------------------------------------------+
35 // | Output.php                                                                |
36 // +---------------------------------------------------------------------------+
37 // | Author:   Demian Turner <demian@phpkitchen.com>                           |
38 // +---------------------------------------------------------------------------+
39 // $Id: Output.php,v 1.22 2005/06/04 23:56:33 demian Exp $
40
41 /**
42  * High level HTML transform methods, 'Template Helpers' in Yahoo speak, 50% html,
43  * 50% php.
44  *
45  * @package SGL
46  * @author  Demian Turner <demian@phpkitchen.com>
47  * @version $Revision: 1.22 $
48  * @todo    look at PEAR::Date to improve various date methods used here
49  */
50 class SGL_Output
51 {
52     var $onLoad = '';
53     var $aOnLoadEvents = array();
54     var $onUnload = '';
55     var $aOnUnloadEvents = array();
56     var $onReadyDom = '';
57     var $aOnReadyDomEvents = array();
58     var $aJavascriptFiles = array();
59     var $aCssFiles = array();
60     var $aHeaders = array();
61
62     /**
63      * Translates source text into target language.
64      *
65      * @access  public
66      * @static
67      * @param   string  $key    translation term
68      * @param   string  $filter optional filter fn, ie, strtoupper()
69      * @return  string          translated text
70      * @see     setLanguage()
71      */
72     function translate($key, $filter = false, $aParams = array())
73     {
74         return SGL_String::translate($key, $filter, $aParams);
75     }
76
77     /**
78      * Generates options for an HTML select object.
79      *
80      * @access  public
81      * @param   array   $array      hash of select values
82      * @param   mixed   $selected   default selected element, array for multiple elements
83      * @param   boolean $multiple   true if multiple
84      * @param   array   $options    attibutes to add to the input tag : array() {"class" => "myClass", "onclick" => "myClickEventHandler()"}
85      * @return  string  select options
86      */
87     function generateSelect($aValues, $selected = null, $multiple = false, $options = null)
88     {
89         SGL::logMessage(null, PEAR_LOG_DEBUG);
90
91         if (!is_array($aValues) || (isset($options) && !is_array($options))) {
92             SGL::raiseError('Incorrect param passed to ' . __CLASS__ . '::' .
93                 __FUNCTION__, SGL_ERROR_INVALIDARGS);
94         }
95         if (is_numeric($selected)) {
96             $selected = (int) $selected;
97         }
98         $optionsString = '';
99         if (isset($options)) {
100             foreach ($options as $k => $v) {
101                 $optionsString .= ' ' . $k . '="' . $v . '"';
102             }
103         }
104         $r = '';
105         if ($multiple && is_array($selected)) {
106             foreach ($aValues as $k => $v) {
107                 $isSelected = in_array($k, $selected) ? ' selected="selected"' : '';
108                 $r .= "\n<option value=\"$k\"" . $isSelected . $optionsString . ">$v</option>";
109             }
110         } else {
111             //  ensure $selected is not the default null arg, allowing
112             //  zeros to be selected array elements
113             $r = '';
114             foreach ($aValues as $k => $v) {
115                 $isSelected = ($k === $selected && !is_null($selected)) ? ' selected="selected"' : '';
116                 $r .= "\n<option value=\"$k\"". $isSelected . $optionsString . ">$v</option>";
117             }
118         }
119         return $r;
120     }
121
122     /**
123      * Generates sequence checkboxes.
124      *
125      * @access  public
126      * @param   array   $hElements  hash of checkbox values
127      * @param   array   $aChecked   array of checked elements
128      * @param   string  $groupName  name of element group
129      * @param   array   $options    attibutes to add to the input tag : array() {"class" => "myClass", "onclick" => "myClickEventHandler()"}
130      * @return  string  html        list of checkboxes
131      */
132     function generateCheckboxList($hElements, $aChecked, $groupName, $options = null)
133     {
134         SGL::logMessage(null, PEAR_LOG_DEBUG);
135         if (!is_array($hElements) || !is_array($aChecked) || (isset($options) && !is_array($options))) {
136             SGL::raiseError('Incorrect param passed to ' . __CLASS__ . '::' .
137                 __FUNCTION__, SGL_ERROR_INVALIDARGS);
138             return false;
139         }
140         $optionsString = '';
141         if (isset($options)) {
142             foreach ($options as $k => $v) {
143                 $optionsString .= ' ' . $k . '="' . $v . '"';
144             }
145         }
146         $html = '';
147         foreach ($hElements as $k => $v) {
148             $isChecked = (in_array($k, $aChecked)) ? ' checked' : '';
149             $html .= "<input class='noBorder' type='checkbox' name='$groupName' " .
150                      "id='$groupName-$k' value='$k'" . $optionsString . " $isChecked><label for='$groupName-$k'>$v</label><br />\n";
151         }
152         return $html;
153     }
154
155     /**
156      * Generate checkbox.
157      *
158      * @access  public
159      * @param   string   $name       element name
160      * @param   string   $value      element value
161      * @param   boolean  $checked    is checked
162      * @param   array   $options     attibutes to add to the input tag : array() {"class" => "myClass", "onclick" => "myClickEventHandler()"}
163      * @return  string  html         checkbox tag w/label
164      */
165     function generateCheckbox($name, $value, $checked, $options = null)
166     {
167         SGL::logMessage(null, PEAR_LOG_DEBUG);
168         if (isset($options) && !is_array($options)) {
169             SGL::raiseError('Incorrect param passed to ' . __CLASS__ . '::' .
170                 __FUNCTION__, SGL_ERROR_INVALIDARGS);
171             return false;
172         }
173         $isChecked = $checked ? ' checked' : '';
174         $optionsString = '';
175         if (isset($options)) {
176             foreach ($options as $k => $v) {
177                 $optionsString .= ' ' . $k . '="' . $v . '"';
178             }
179         }
180         $html = "<input class='noBorder' type='checkbox' name='$name' " .
181             "id= '$name' value='$value'" . $optionsString . " $isChecked><label for='$name'>$value</label><br />\n";
182         return $html;
183     }
184
185     /**
186      * Generates a yes/no radio pair.
187      *
188      * @access  public
189      * @param   string   $radioName  name of radio element
190      * @param   boolean  $checked    is checked
191      * @param   array   $options     attibutes to add to the input tag : array() {"class" => "myClass", "onclick" => "myClickEventHandler()"}
192      * @return  string   html        yes/no radio pair
193      */
194     function generateRadioPair($radioName, $checked, $options = null)
195     {
196         SGL::logMessage(null, PEAR_LOG_DEBUG);
197         if (isset($options) && !is_array($options)) {
198             SGL::raiseError('Incorrect param passed to ' . __CLASS__ . '::' .
199                 __FUNCTION__, SGL_ERROR_INVALIDARGS);
200             return false;
201         }
202         $radioString = '';
203         if ($checked) {
204             $yesChecked = ' checked="checked"';
205             $noChecked = '';
206         } else {
207             $yesChecked = '';
208             $noChecked = ' checked="checked"';
209         }
210         $optionsString = '';
211         if (isset($options)) {
212             foreach ($options as $k => $v) {
213                 $optionsString .= ' ' . $k . '="' . $v . '"';
214             }
215         }
216         $radioString .= "<input type='radio' name='$radioName' value='0'" . $optionsString . " $noChecked />".SGL_String::translate('no')."\n";
217         $radioString .= "<input type='radio' name='$radioName' value='1'" . $optionsString . " $yesChecked />".SGL_String::translate('yes')."\n";
218         return $radioString;
219     }
220
221     /**
222      * Generates sequence of radio button from array.
223      *
224      * @access  public
225      * @param   array   $elements   array of  values or radio button
226      * @param   string  $selected   selected key (there can be only one selected element in a radio list)
227      * @param   string  $groupname  usually an array name that will contain all elements
228      * @param   integer $newline    how many columns to display for this radio group (one if not informed)
229      * @param   array   $options    attibutes to add to the input tag : array() {"class" => "myClass", "onclick" => "myClickEventHandler()"}
230      * @param   boolean $inTable    true for adding table formatting
231      * @return  string  $html       a list of radio buttons
232      */
233     function generateRadioList($elements, $selected, $groupname, $newline = false, $inTable = true, $options = null)
234     {
235         SGL::logMessage(null, PEAR_LOG_DEBUG);
236         if (!is_array($elements) || (isset($options) && !is_array($options))) {
237             SGL::raiseError('Incorrect param passed to ' . __CLASS__ . '::' .
238                 __FUNCTION__, SGL_ERROR_INVALIDARGS);
239             return false;
240         }
241         $elementcount = count($elements);
242         $html = '';
243         $i = 0;
244         $optionsString = '';
245         if (isset($options)) {
246             foreach ($options as $k => $v) {
247                 $optionsString .= ' ' . $k . '="' . $v . '"';
248             }
249         }
250         if ($inTable == false){
251             foreach ($elements as $k => $v) {
252                 $i = $i + 1;
253                 $html .= "<input name='" . $groupname . "' type='radio' value='" . $k . "'" . $optionsString . " ";
254                 if ($selected == $k ){
255                     $html .= " checked";
256                 }
257                 $html .= " />$v ";
258                 if ($newline) {
259                     $modvalue = $i % $newline;
260                     if ($modvalue == 0 ) {
261                         $html .= "<br/>\n";
262                     }
263                 }
264             }
265         } else {
266             $html ="<table>";
267             $html .="<tr>";
268             foreach ($elements as $k => $v) {
269                 $i = $i + 1;
270                 $html .= "<td nowrap='nowrap'><input name='" . $groupname . "' type='radio' value='" . $k . "'" . $optionsString . " ";
271                 if ($selected == $k ) {
272                     $html .= " checked ";
273                 }
274                 $html .= " />$v </td>\n";
275                 if ($newline) {
276                     $modvalue = $i % $newline;
277                     if ( $modvalue == 0 ) {
278                         if ($i < $elementcount){
279                             $html .="</tr>\n<tr>";
280                         } else {
281                             $html .="</tr>\n";
282                         }
283                     }
284                 }
285             }
286             $html .="</table>";
287         }
288         return $html;
289     }
290
291     /**
292      * Wrapper for SGL_String::formatBytes(),
293      * Converts bytes to Kb or MB as appropriate.
294      *
295      * @access  public
296      * @param   int $bytes
297      * @return  int kb/MB
298      */
299     function formatBytes($size)
300     {
301         return SGL_String::formatBytes($size);
302     }
303
304     // +---------------------------------------+
305     // | Date related methods                  |
306     // +---------------------------------------+
307
308     /**
309      * Converts date (may be in the ISO, TIMESTAMP or UNIXTIME format) into dd.mm.yyyy.
310      *
311      * @access  public
312      * @param   string  $input  date (may be in the ISO, TIMESTAMP or UNIXTIME format) value
313      * @return  string  $output user-friendly format (european)
314      */
315     function formatDate($date = '')
316     {
317         if (empty($date)) {
318             $date = SGL_Date::getTime();
319         }
320         return SGL_Date::format($date);
321     }
322
323     /**
324      * Converts date (may be in the ISO, TIMESTAMP or UNIXTIME format) into "Mar 31, 2003 18:29".
325      *
326      * @access  public
327      * @param   string  $date  Date (may be in the ISO, TIMESTAMP or UNIXTIME format) value
328      * @return  string  $formatted  user-friendly format (european)
329      */
330     function formatDatePretty($date = '')
331     {
332         if (empty($date)) {
333             $date = SGL_Date::getTime();
334         }
335         return SGL_Date::formatPretty($date);
336     }
337
338     /**
339      * Gets appropriate date format
340      *
341      * @access  public
342      * @return  string  $date template (e.g. "%d %B %Y, %H:%M" for FR date format)
343      */
344     function getDateFormat()
345     {
346         return SGL_Date::getDateFormat();
347     }
348
349     /**
350      * Wrapper for SGL_Date::showDateSelector(),
351      * Generates date/time selector widget.
352      *
353      * @access  public
354      * @param   array   $aDate
355      * @param   string  $sFormName  name of form
356      * @param   boolean $bShowTime  toggle to display HH:MM:SS
357      * @param   bool    $asc
358      * @param   int     $years      number of years to show
359      * @return  string  $html       html for widget
360     */
361     function showDateSelector($aDate, $sFormName, $bShowTime = true, $asc = true, $years = 5)
362     {
363         return SGL_Date::showDateSelector($aDate, $sFormName, $bShowTime, $asc, $years);
364     }
365
366     /**
367      * Creates a checkbox for infinite Articles (no expiry)
368      *
369      * @access public
370      * @param  array $aDate if NULL checkbox is checked
371      * @param  string $sFormName Name of Date Selector to reset if checkbox is clicked
372      * @return string with checkbox. Name of checkbox will be $sFormName.NoExpire, e.g. ExpiryDateNoExpire
373      */
374     function getNoExpiryCheckbox($aDate,$sFormName)
375     {
376         $checked = ($aDate == null) ? 'checked' : '';
377         return '<input type="checkbox" name="'.$sFormName.'NoExpire" id="'.$sFormName
378             .'NoExpire" value="true" onClick="time_select_reset(\''.$sFormName.'\',true);"  '
379             .$checked.' /> '.SGL_Output::translate('No expire');
380     }
381
382     /**
383      * Generates alternate classes for rows in tables, used to switch
384      * row colors.
385      *
386      * @access  public
387      * @param   boolean $isBold
388      * @param   string  $pColor optional primary color, override default
389      * @param   string  $sColor optional secondary color, override default
390      * @return  string  $curRowClass string representing class found in stylesheet
391      */
392
393     function switchRowClass($isBold = false, $pColor = 'backDark',
394                             $sColor = 'backLight', $id = 'default')
395     {
396         //  remember the last color we used
397         static $curRowClass;
398         static $_id;
399
400         if ($_id != $id) {
401             $curRowClass = '';
402             $_id = $id;
403         }
404
405         if (strpos($curRowClass, $sColor) === false) {
406             $curRowClass = $sColor;
407         } else {
408             $curRowClass = $pColor;
409         }
410
411         if ($isBold) {
412             $curRowClass .= ' bold';
413         }
414         return $curRowClass;
415     }
416
417     /**
418      * Generates alternate value (false/true) to be used in template
419      *
420      * @access  public
421      * @param int $elementsToCount Number of elements to reach to switch from false/true, default 2
422      * @return  bool  $switcher
423      */
424
425     function switchTrueFalse($elementsToCount=2)
426     {
427         static $count;
428         if (empty($elementsToCount)) { // reset counter
429             $count = 0;
430             return;
431         }
432         if ($count % $elementsToCount) {
433             $switcher = false;
434         } else {
435             $switcher = true;
436         }
437         $count++;
438
439         return $switcher;
440     }
441
442     /**
443      * Wrapper for SGL_String::summarise(),
444      * Returns a shortened version of text string.
445      *
446      * @access  public
447      * @param   string  $str    Text to be shortened
448      * @param   integer $limit  Number of characters to cut to
449      * @param   string  $appendString  Trailing string to be appended
450      * @return  string  $processedString    Correctly shortened text
451      */
452     function summarise($str, $limit=50, $element=SGL_WORD, $appendString=' ...')
453     {
454          $ret = SGL_String::summarise($str, $limit, $element, $appendString);
455          return $ret;
456     }
457
458     /**
459      * Prints formatted error message to standard out.
460      *
461      * @return mixed
462      */
463     function msgGet()
464     {
465         SGL::logMessage(null, PEAR_LOG_DEBUG);
466
467         $message     = SGL_Session::get('message');
468         $messageType = SGL_Session::get('messageType');
469         if (isset($message) && $message != '') {
470             SGL_Session::remove('message');
471             SGL_Session::remove('messageType');
472
473             switch ($messageType) {
474
475             case SGL_MESSAGE_INFO:
476                 $class = 'info';
477                 break;
478
479             case SGL_MESSAGE_WARNING:
480                 $class = 'warning';
481                 break;
482
483             default:
484                 $class = 'error';
485             }
486             echo '<div class="' . $class . 'Message">' . $message . '</div>';
487
488             //  required to remove message that persists when register_globals = on
489             unset($GLOBALS['message']);
490             unset($GLOBALS['messageType']);
491         }
492         if (SGL_Error::count()) {
493
494             // get all errors from stack
495             while ($msg = SGL_Error::pop()) {
496                 $msg = SGL_Error::toString($msg);
497                 echo '  <div class="errorContainer">
498                             <div class="errorHeader">Error</div>
499                             <div class="errorContent">' . $msg . '</div>
500                         </div>';
501             }
502         } else {
503             return false;
504         }
505     }
506
507     /**
508      * Returns true if current user or passed role ID is that of an admin.
509      *
510      * @return boolean
511      */
512     function isAdmin($rid = null)
513     {
514         if (is_null($rid)) {
515             $rid = SGL_Session::getRoleId();
516         }
517         return ($rid && $rid == SGL_ADMIN) ? true : false;
518     }
519
520     /**
521      * Returns true if $rid is 1 or -1.
522      *
523      * @return boolean
524      */
525     function isAdminOrUnassigned($rid)
526     {
527         return (abs($rid) == SGL_ADMIN) ? true : false;
528     }
529
530     function isAuthenticated()
531     {
532         $rid = SGL_Session::getRoleId();
533         return ($rid == SGL_GUEST) ? false : true;
534     }
535
536     function addOnLoadEvent($event, $bOnReady = false)
537     {
538         if ($bOnReady) {
539             $this->aOnReadyDomEvents[] = $event;
540         } else {
541             $this->aOnLoadEvents[] = $event;
542         }
543     }
544
545     function addOnUnloadEvent($event)
546     {
547         $this->aOnUnloadEvents[] = $event;
548     }
549
550     function getOnLoadEvents()
551     {
552         $c = & SGL_Config::singleton();
553         $conf = $c->getAll();
554
555         if (!empty($conf['site']['globalJavascriptOnload'])) {
556             $this->aOnLoadEvents[] = $conf['site']['globalJavascriptOnload'];
557         }
558         if (count($this->aOnLoadEvents)) {
559             return $this->aOnLoadEvents;
560         }
561     }
562
563     function getOnUnloadEvents()
564     {
565         $c = & SGL_Config::singleton();
566         $conf = $c->getAll();
567
568         if (!empty($conf['site']['globalJavascriptOnUnload'])) {
569             $this->aOnUnloadEvents[] = $conf['site']['globalJavascriptOnUnload'];
570         }
571         if (count($this->aOnUnloadEvents)) {
572             return $this->aOnUnloadEvents;
573         }
574     }
575
576     function getOnReadyDomEvents()
577     {
578         $c = & SGL_Config::singleton();
579         $conf = $c->getAll();
580
581         if (!empty($conf['site']['globalJavascriptOnReadyDom'])) {
582             $this->aOnReadyDomEvents[] = $conf['site']['globalJavascriptOnReadyDom'];
583         }
584         if (count($this->aOnReadyDomEvents)) {
585             return $this->aOnReadyDomEvents;
586         }
587     }
588
589     /**
590      * For adding JavaScript files to include.
591      *
592      * @param   mixed $file or array $file path/to/jsFile, relative to www/ dir e.g. js/foo.js.
593                 can also be remote js file e.g. http://example.com/foo.js
594      * @return void
595      */
596     function addJavascriptFile($file)
597     {
598         if (is_array($file)) {
599             foreach ($file as $jsFile) {
600                 if (!in_array($jsFile, $this->aJavascriptFiles)) {
601                     $this->aJavascriptFiles[] = (strpos($jsFile, 'http://') === 0)
602                         ? $jsFile
603                         : SGL_BASE_URL . '/' . $jsFile;
604                 }
605             }
606         } else {
607             if (!in_array($file, $this->aJavascriptFiles)) {
608                 $this->aJavascriptFiles[] = (strpos($file, 'http://') === 0)
609                     ? $file
610                     : SGL_BASE_URL . '/' . $file;
611             }
612         }
613     }
614
615     function getJavascriptFiles()
616     {
617         $aFiles = array();
618
619         $c = & SGL_Config::singleton();
620         $conf = $c->getAll();
621         // Check for global files to include
622         if (!empty($conf['site']['globalJavascriptFiles'])) {
623             $aTmp = explode(';', $conf['site']['globalJavascriptFiles']);
624             foreach ($aTmp as $file) {
625                 $aFiles[] = (strpos($file, 'http://') === 0)
626                     ? $file
627                     : SGL_BASE_URL . '/' . $file;
628             }
629         }
630         // BC with old way of including js files
631         if (isset($this->javascriptSrc)) {
632             if (is_array($this->javascriptSrc)) {
633                 foreach ($this->javascriptSrc as $file) {
634                     $aFiles[] = (strpos($file, 'http://') === 0)
635                         ? $file
636                         : SGL_BASE_URL . '/' . $file;
637                 }
638             } else {
639                 $aFiles[] = (strpos($this->javascriptSrc, 'http://') === 0)
640                     ? $this->javascriptSrc
641                     : SGL_BASE_URL . '/' . $this->javascriptSrc;
642             }
643         }
644         // Get files added with $output->addJavascriptFile()
645         if (count($this->aJavascriptFiles)) {
646             $aFiles = array_merge(
647                 $aFiles,
648                 $this->aJavascriptFiles
649             );
650         }
651
652         return $aFiles;
653     }
654
655     /**
656      * For adding CSS files to include.
657      *
658      * @param  mixed $file or array $file path/to/cssFile, relative to www/ dir e.g. css/foo.css
659      * @return void
660      */
661     function addCssFile($file)
662     {
663         if (is_array($file)) {
664             foreach ($file as $cssFile) {
665                 if (!in_array($cssFile, $this->aCssFiles)) {
666                     $this->aCssFiles[] = $cssFile;
667                 }
668             }
669         } else {
670             if (!in_array($file, $this->aCssFiles)) {
671                 $this->aCssFiles[] = $file;
672             }
673         }
674     }
675
676     /**
677      * Wrapper for SGL_Url::makeLink,
678      * Generates URL for easy access to modules and actions.
679      *
680      * @access  public
681      * @param string $action
682      * @param string $mgr
683      * @param string $mod
684      * @param array $aList
685      * @param string $params
686      * @param integer $idx
687      * @return  string
688      */
689     function makeUrl($action = '', $mgr = '', $mod = '', $aList = array(), $params = '', $idx = 0)
690     {
691         return SGL_Url::makeLink($action, $mgr, $mod, $aList, $params, $idx, $this);
692     }
693
694     function getCurrentUrl()
695     {
696         $reg =& SGL_Registry::singleton();
697         $oCurrentUrl = $reg->getCurrentUrl();
698         return $oCurrentUrl->toString();
699     }
700
701     function isVerticalNav($styleSheet)
702     {
703         return in_array($styleSheet, array('SglListamaticSubtle', 'verticalSimple'));
704     }
705
706     function outputBody($templateEngine = null)
707     {
708         if (empty($this->template)) {
709             $this->template = 'docBlank.html';
710         }
711         $this->masterTemplate = $this->template;
712         $view = &new SGL_HtmlSimpleView($this, $templateEngine);
713         echo $view->render();
714
715         //  suppress error notices in templates
716         SGL::setNoticeBehaviour(SGL_NOTICES_DISABLED);
717     }
718
719     /**
720      * Returns true if client OS is windows.
721      *
722      * @return boolean
723      */
724     function isWin()
725     {
726         return SGL_CLIENT_OS == 'Win';
727     }
728
729     /**
730      * Returns true if a and b are equal.
731      *
732      */
733     function isEqual($a, $b)
734     {
735         return $a == $b;
736     }
737
738     /**
739      * Makes new var and assign value.
740      *
741      */
742     function assign(&$a, $b)
743     {
744         $a = $b;
745         return;
746     }
747
748     function increment($int)
749     {
750         return ++ $int;
751     }
752
753     function isChecked($value)
754     {
755         if ($value) {
756             $ret = 'checked="checked"';
757         } else {
758             $ret = '';
759         }
760         return $ret;
761     }
762
763     function getCurrentModule()
764     {
765         $reg =& SGL_Registry::singleton();
766         $req = $reg->getRequest();
767         $frmCallerMod = $req->get('frmCallerMod');
768         $modName = (is_null($frmCallerMod))
769             ? $req->getModuleName()
770             : $frmCallerMod;
771         return $modName;
772     }
773
774     function getCurrentManager()
775     {
776         $reg =& SGL_Registry::singleton();
777         $req = $reg->getRequest();
778         $frmCallerMgr = $req->get('frmCallerMgr');
779         $mgrName = (is_null($frmCallerMgr))
780             ? $req->getManagerName()
781             : $frmCallerMgr;
782         return $mgrName;
783     }
784
785     function getCurrentTemplate()
786     {
787         $reg =& SGL_Registry::singleton();
788         $req = $reg->getRequest();
789         $frmCallerTmpl = $req->get('frmCallerTmpl');
790         $tmplName = (is_null($frmCallerTmpl))
791             ? $this->template
792             : $frmCallerTmpl;
793         return $tmplName;
794     }
795
796     function getCurrentId()
797     {
798         $reg =& SGL_Registry::singleton();
799         $req = $reg->getRequest();
800         $frmCallerId = $req->get('frmCallerId');
801         $id = (is_null($frmCallerId))
802             ? $this->articleID
803             : $frmCallerId;
804         return $id;
805     }
806
807
808     /**
809      * Check permission at the template level and returns true if permission
810      * exists.
811      *
812      * Use as follows in any Flexy template:
813      * <code>
814      * {if:hasPerms(#faqmgr_delete#)} on {else:} off {end:}
815      * </code>
816      *
817      * To get various perm names, select User module then go to 'perms' section.
818      *
819      * @access  public
820      * @param   string  $permName    Name of permission eg. "faqmgr_delete"
821      * @return     boolean
822      *
823      */
824     function hasPerms($permName)
825     {
826         $permId = @constant('SGL_PERMS_' . strtoupper($permName));
827         return (!empty($permId) && SGL_Session::hasPerms($permId) ? true : false);
828     }
829
830     /**
831      * printf function wrapper.
832      *
833      * @return string
834      */
835     function printf()
836     {
837         $argv = func_get_args();
838         return @call_user_func_array('sprintf', $argv);
839     }
840
841     function makeCssLink($theme, $navStylesheet, $moduleName)
842     {
843         //  check first if CSS file exists in module
844         if (is_file(SGL_MOD_DIR . "/$moduleName/www/css/$moduleName.php")) {
845             $ret = SGL_BASE_URL . "/themes/$theme/css/style.php?navStylesheet=$navStylesheet&moduleName=$moduleName&isSymlink=1";
846         //  else default to standard css loading with modulename passed as param
847         } else {
848             $ret = SGL_BASE_URL . "/themes/$theme/css/style.php?navStylesheet=$navStylesheet&moduleName=$moduleName";
849         }
850         return $ret;
851     }
852
853     function humanise($lowerCaseAndUnderscoredWord)
854     {
855         return SGL_Inflector::humanise($lowerCaseAndUnderscoredWord);
856     }
857
858     function camelise($lowerCaseWithSpacesWordsString)
859     {
860         return SGL_Inflector::camelise($lowerCaseWithSpacesWordsString);
861     }
862
863     /**
864      * @return current ms since script start
865      */
866     function getExecutionTime()
867     {
868         return getSystemTime() - @SGL_START_TIME;
869     }
870
871     /**
872      * @return query count
873      */
874     function getQueryCount()
875     {
876         return $GLOBALS['_SGL']['QUERY_COUNT'];
877     }
878
879     /**
880      * @return memory usage
881      */
882     function getMemoryUsage()
883     {
884         if (function_exists('memory_get_usage')) {
885             return number_format(memory_get_usage());
886         } else {
887             return 'unknown';
888         }
889     }
890
891     function addHeader($header)
892     {
893         if (!in_array($header, $this->aHeaders)) {
894             $this->aHeaders[] = $header;
895         }
896     }
897
898     function getHeaders()
899     {
900         return $this->aHeaders;
901     }
902 }
903 ?>
904
Note: See TracBrowser for help on using the browser.