2 /*=====================================================================*
3 || ###################################################################
4 || # Blue Static ISSO Framework
5 || # Copyright (c)2005-2008 Blue Static
7 || # This program is free software; you can redistribute it and/or modify
8 || # it under the terms of the GNU General Public License as published by
9 || # the Free Software Foundation; version 2 of the License.
11 || # This program is distributed in the hope that it will be useful, but
12 || # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 || # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 || # You should have received a copy of the GNU General Public License along
17 || # with this program; if not, write to the Free Software Foundation, Inc.,
18 || # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 || ###################################################################
20 \*=====================================================================*/
23 * Printer Root Element: Page (PrinterRootPage.php)
28 require_once(ISSO
. '/PrinterRootAbstract.php');
31 * Printer Root Element: Page
33 * This root element represents the entire page and is usually used for all
34 * printer applications
37 * @copyright Copyright (c)2005 - 2008, Blue Static
41 class BSPrinterRootPage
extends BSPrinterRootAbstract
51 * @var BSPrinterNavigation
55 // ###################################################################
59 * @param string Page title
61 function __construct($title)
63 $this->title
= $title;
67 * Makes a new instance of the object in a static fashion
71 public static function make()
73 $obj = new ReflectionClass(__CLASS__
);
74 $args = func_get_args();
75 return $obj->newInstanceArgs($args);
79 * Sets the navigation object
81 * @param BSPrinterNavigation Navigator
83 * @return fluent interface
85 public function setNavigator(BSPrinterNavigation
$nav)
87 $this->navigator
= $nav;
92 * Returns the printer navigation object
94 * @return BSPrinterNavigation Navigation object
96 public function getNavigatior()
98 return $this->navigatior
;
101 // ###################################################################
103 * Creates a redirect to another page; constructs the header and footer
104 * (therefore execution stops)
106 * @param string Location
107 * @param string Redirect message to be shown
108 * @param array An aray of POST variables to send through on the redirect
110 public static function redirect($location, $message = null
, $postvars = array())
112 if (!defined('ISSO_PRINTER_NO_NAVIGATION'))
114 define('ISSO_PRINTER_NO_NAVIGATION', 1);
117 $page = new BSPrinterRootPage(_('Redirect'));
119 $page->addChild(new BSPrinterElementLabel('
120 <script type="text/javascript">
126 setTimeout("redirect()", timeout);
135 ' . ($postvars ?
'document.forms.postvars.submit();' : 'window.location = "' . $location . '";') . '
143 $vars = new BSPrinterRootForm($location, $postvars['do'], 'postvars');
144 unset($postvars['do']);
146 foreach ($postvars as $key => $value)
148 $vars->addChild(new BSPrinterElement('hidden', $key, $value));
151 $page->addChild($vars);
154 $redir = _('Please wait to be redirected. This page will load in a few seconds.');
155 if ($message == null
)
157 $showmessage = $redir;
161 $showmessage = '<blockquote>' . $message . '</blockquote>';
162 $showmessage .= "\n<p>" . $redir . "</p>";
165 $page->addChild(BSPrinterRootPage
::message(_('Redirect'), $showmessage));
171 // ###################################################################
173 * Prints a complete table message
175 * @param string Message title
176 * @param string Message text
178 * @return BSPrinterRootTable A table
180 public static function message($title, $message)
182 $table = new BSPrinterRootTable();
184 $head = new BSPrinterElementTable();
185 $head->setCssClass('tcat');
186 $head->addChild(new BSPrinterElementLabel($title));
187 $table->addHeadingChild($head);
189 $msg = new BSPrinterElementTable();
190 $msg->addChild(new BSPrinterElementLabel((strpos($message, '<blockquote') === false ?
"<blockquote>$message</blockquote>" : $message)));
191 $table->addChild($msg);
196 // ###################################################################
198 * Produces an entire page layout that asks the user whether or not
199 * they want to perform X action and provides a link to the YES and NO
202 * @param string Message that asks if they want to do X
203 * @param string Location to go to if the user confirms
204 * @param string Form 'do' value
205 * @param array Hidden parameters to pass to the next page
207 public static function confirm($message, $action, $do, $params)
209 if (!defined('ISSO_PRINTER_NO_NAVIGATION'))
211 define('ISSO_PRINTER_NO_NAVIGATION', 1);
214 $page = new BSPrinterRootPage(_('Confirm'));
216 $form = new BSPrinterRootForm($action, $do);
217 foreach ($params as $key => $value)
219 $form->addChild(new BSPrinterElement('hidden', $key, $value));
221 $page->addChild($form);
223 $table = new BSPrinterRootTable();
224 $table->setWidth('75%');
226 $head = new BSPrinterElementTable();
227 $head->addChild(new BSPrinterElementLabel(_('Confirm')));
228 $head->setCssClass('tcat');
229 $table->addChild($head);
231 $table->addChild(new BSPrinterElementTable(new BSPrinterElementLabel("<blockquote>$message</blockquote>")));
232 $no = new BSPrinterElement('button', '__no__', _('No'));
233 $no->setOnClick('history.back(1); return false;');
234 $table->addChild(BSPrinterElementTable
::row_submit(array($no), _('Yes'), null
));
236 $form->addChild($table);
242 // ###################################################################
244 * Throws a fatal error message
246 * @param string Error string
248 public static function error($message)
250 if (!defined('ISSO_PRINTER_NO_NAVIGATION'))
252 define('ISSO_PRINTER_NO_NAVIGATION', 1);
255 $page = new BSPrinterRootPage(_('Error'));
256 $page->addChild(BSPrinterRootPage
::message(_('Error'), $message));
262 // ###################################################################
264 * Returns the HTML for all printed children elements
266 * @return string Printed HTML
268 protected function _paintChildren()
272 foreach ($this->children
as $child)
274 $builder .= "\n" . $child->paint() . "\n";
280 // ###################################################################
282 * Tells the element to paint itself (and any children)
284 public function paint()
286 $language = BSPrinter
::get_language_information();
288 echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
289 echo "<html xml:lang=\"" . $language['langcode'] . "\" lang=\"" . $language['langcode'] . "\" dir=\"" . $language['direction'] . "\">\n<head>";
290 echo "\n\t<title>" . BSPrinter
::get_realm() . " - " . $this->title
. "</title>";
291 echo "\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . $language['charset'] . "\" />";
292 echo "\n\t<link rel=\"stylesheet\" href=\"" . BSPrinter
::get_stylesheet() . "\" />";
293 echo "\n</head>\n<body>\n";
295 if ($this->navigator
&& (!defined('ISSO_PRINTER_NO_NAVIGATION') ||
!constant('ISSO_PRINTER_NO_NAVIGATION')))
297 echo $this->navigator
->constructHeaderHtml();
300 echo $this->_paintChildren();
302 if ($this->navigator
&& (!defined('ISSO_PRINTER_NO_NAVIGATION') ||
!constant('ISSO_PRINTER_NO_NAVIGATION')))
304 echo $this->navigator
->constructFooterHtml();
307 $copyright = "\n<br />\n<p align=\"center\" class=\"copyright\">\n\t" . BSPrinter
::get_copyright() . "\n</p>";
309 if (!defined('ISSO_PRINTER_HIDE_SETUP'))
315 if (BSApp
::get_debug())
317 if (defined('SVN') && preg_match('#^\$Id:?#', constant('SVN')))
319 echo preg_replace('#\$' . 'Id: (.+?) ([0-9].+?) [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}(.+?) (.+?) \$#', "\n<br />\n" . '<div align="center"><strong>\1</strong> — r\2</div>', constant('SVN'));
322 if (defined('ISSO_MT_START'))
324 echo "\n<div align=\"center\">Executed in " . round(BSFunctions
::fetch_microtime_diff(ISSO_MT_START
), 10) . ' seconds</div>';
327 echo "\n<br /><div align=\"center\">" . BSApp
::get_debug_list() . "</div>\n";
331 $queries = BSApp
::$db->getHistory();
333 $table = new BSPrinterRootTable();
334 $head = new BSPrinterElementTable();
335 $head->addChild(new BSPrinterElementLabel('Query Debug'));
336 $head->setCssClass('thead');
337 $table->addHeadingChild($head);
339 foreach ($queries as $query)
341 $tr = new BSPrinterElementTable();
342 $tr->addChild(new BSPrinterElementLabel("\n\t\t\t" . $query['query'] . "\n\n\t\t\t<div class=\"smallfont\">(" . $query['time'] . ")</div>\n<!--\n" . $query['trace'] . "\n-->\n\t\t"));
343 $table->addChild($tr);
346 $table->setWidth('30%');
348 echo $table->paint();
353 echo "\n\n</body>\n</html>";