Added error handling if template.php or requested template is not found.
[squirrelmail.git] / class / template / template.class.php
index 15163375bbc803d9fce8a20be65cf5f5b5d1df16..cd05765018bc43fa9ad84440b1181cebf1ed5589 100755 (executable)
@@ -73,20 +73,24 @@ class Template
    */
   var $additional_css_sheets = array(); 
   
-  /**
-   * Constructor
-   *
-   * @param string $sTplDir where the template set is located
-   */
-  function Template($sTplDir) {
-       $this->template_dir = $sTplDir;
+    /**
+     * Constructor
+     *
+     * @param string $sTplDir where the template set is located
+     */
+    function Template($sTplDir) {
+        $this->template_dir = $sTplDir;
        
-       // Pull in the tempalte config file
-       include ($this->template_dir . 'template.php');
-       $this->templates_provided = is_array($templates_provided) ? $templates_provided : array();
-       $this->required_js_files = is_array($required_js_files) ? $required_js_files : array();
-       $this->provided_js_files = is_array($provided_js_files) ? $provided_js_files: array();
-       $this->additional_css_sheets = is_array($additional_css_sheets) ? $additional_css_sheets : array();
+        // Pull in the tempalte config file
+        if (!file_exists($this->template_dir . 'template.php')) {
+             trigger_error('No template.php could be found in the requested template directory ("'.$this->template_dir.'")', E_USER_ERROR);
+        } else {
+            include ($this->template_dir . 'template.php');
+            $this->templates_provided = is_array($templates_provided) ? $templates_provided : array();
+            $this->required_js_files = is_array($required_js_files) ? $required_js_files : array();
+            $this->provided_js_files = is_array($provided_js_files) ? $provided_js_files: array();
+            $this->additional_css_sheets = is_array($additional_css_sheets) ? $additional_css_sheets : array();
+        }
   }
 
 
@@ -203,9 +207,13 @@ class Template
     $t = &$this->values; // place values array directly in scope
     
     $template = in_array($file, $this->templates_provided) ? $this->template_dir . $file : SM_PATH .'templates/default/'. $file;
-    ob_start();
-    include($template);
-    ob_end_flush();
+    if (!file_exists($template)) {
+        trigger_error('The template "'.htmlspecialchars($file).'" could not be displayed!', E_USER_ERROR);
+    } else {
+        ob_start();
+        include($template);
+        ob_end_flush();
+    }
   }
 
   /**
@@ -220,10 +228,16 @@ class Template
     $t = &$this->values; // place values array directly in scope
 
     $template = in_array($file, $this->templates_provided) ? $this->template_dir . $file : SM_PATH .'templates/default/'. $file;
-    include($template);
-    $contents = ob_get_contents();
-    ob_end_clean();
-    return $contents;
+    if (!file_exists($template)) {
+        trigger_error('The template "'.htmlspecialchars($file).'" could not be fetched!', E_USER_ERROR);
+    } else {
+        ob_start();
+        include($template);
+        $contents = ob_get_contents();
+        ob_end_flush();
+        return $contents;
+    }
+
   }
 
   /**