*/ require_once ("domframework/output.php"); /** Display in HTML the data provided, with the layout support */ class outputhtml extends output { /** Data is printed by viewClass->viewmethod, in the middle of $layout * title is put in the title of the HTML page * $replacement modify the result (it can do title too : * array ("{title}"=>"title to display") * @param mixed $data Data to display on the page * @param string|null $title Title to put on head of page * @param string|null $viewClass Class in views to use to display * @param string|null $viewMethod Method in the class in views * @param string|null $layout Layout file in views * @param array|null $replacement Replace the {key}=>value * @param array|null $variable PHP variables send to the view and to layout * (can be processed by foreach, if...) * @param string|null $module The module name to use if needed * @return Exit from PHP at the end of HTML display */ public function out ($data, $title = FALSE, $viewClass = FALSE, $viewMethod = FALSE, $layout = FALSE, $replacement = array(), $variable = array (), $module = "") { @header("Cache-Control: no-store, no-cache, must-revalidate"); @header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); @header('Last-Modified: '.gmdate ('D, d M Y H:i:s').' GMT'); @header('Cache-Control: post-check=0, pre-check=0', false); @header('Pragma: no-cache'); @header ("Content-Type: text/html"); $resView = $data; if ($viewClass !== FALSE && $viewMethod !== FALSE) { if (! class_exists ($viewClass)) { if ($module !== "" && file_exists ("modules/$module/views/$viewClass.php")) require_once ("modules/$module/views/$viewClass.php"); elseif (file_exists ("views/$viewClass.php")) require_once ("views/$viewClass.php"); // If the file doesn't exists, an autoloader maybe exists. If it is not // the case, the class will not be found } $obj = new $viewClass; $resView = $obj->$viewMethod ($data, $variable); if (is_array ($resView)) { if (isset ($resView["title"])) $title = $resView["title"]; if (! isset ($resView["content"])) throw new \Exception (sprintf ( dgettext("domframework", "No data provided from view %s::%s"), $viewClass,$viewMethod), 500); } } if ($layout !== FALSE) { if (! file_exists ($layout) && file_exists ("views/$layout.html")) $layout = "views/$layout.html"; $layoutPage = $this->layoutVariables ($layout, $variable); } else { // No layout : display a very basic HTML page $layoutPage = <<< EOT {title} {flash} {content} EOT; } // All the entries coming from views in array are substitute in layout // {content}, {title} if (is_array ($resView)) { foreach ($resView as $key => $val) { $layoutPage = str_replace ("{".$key."}", $val, $layoutPage); } } else $layoutPage = str_replace ("{content}", $resView, $layoutPage); // Do the title replacement in the replacement structure if (! isset ($replacement["{flash}"])) $replacement["{flash}"] = ""; foreach ($replacement as $key=>$val) $layoutPage = str_replace ($key, $val, $layoutPage); // Remove the not used {XXX} $layoutPage = preg_replace ("~({[\w_-]+})~", "", $layoutPage); //echo $layoutPage;exit; // Manage the timestamp/md5sum for the external files managed by this // server. $dom = new \DOMDocument (); libxml_use_internal_errors (true); $dom->loadHTML ($layoutPage); $errors = libxml_get_errors (); foreach ($errors as $key => $err) { // Tag YYY invalid : code 801 // Like in