Code merge from latest ship-simu code
[mailer.git] / inc / classes / main / response / class_HttpResponse.php
index 05e6f987cf659ca54c4639d52806628649f287cd..52ad2a76db0ad226d10c7312a8e3ec5445d6e769 100644 (file)
@@ -20,6 +20,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The extended headers are taken from phpMyAdmin setup tool, written by
+ * Michal Cihar <michal@cihar.com>, licensed under GNU GPL 2.0.
  */
 class HttpResponse extends BaseFrameworkSystem implements Responseable {
        /**
@@ -42,6 +45,11 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
         */
        private $templateEngine = null;
 
+       /**
+        * Fatal resolved messages from filters and so on
+        */
+       private $fatalMessages = array();
+
        /**
         * Protected constructor
         *
@@ -52,7 +60,7 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
                parent::__construct(__CLASS__);
 
                // Set part description
-               $this->setObjectDescription("HTTP-Antwort");
+               $this->setObjectDescription("HTTP response");
 
                // Create unique ID number
                $this->createUniqueID();
@@ -72,6 +80,9 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
                // Get a new instance
                $responseInstance = new HttpResponse();
 
+               // Set the application instance
+               $responseInstance->setApplicationInstance($appInstance);
+
                // Initialize the template engine here
                $responseInstance->initTemplateEngine($appInstance);
 
@@ -100,6 +111,15 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
                $this->responseHeaders[$name] = $value;
        }
 
+       /**
+        * Reset the header array
+        *
+        * @return      void
+        */
+       public final function resetResponseHeaders () {
+               $this->responseHeaders = array();
+       }
+
        /**
         * "Writes" data to the response body
         *
@@ -110,6 +130,16 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
                $this->responseBody .= $output;
        }
 
+       /**
+        * Sets the response body to something new
+        *
+        * @param       $output         Output we shall sent in the HTTP response
+        * @return      void
+        */
+       public function setReponseBody ($output) {
+               $this->responseBody = $output;
+       }
+
        /**
         * Flushs the cached HTTP response to the outer world
         *
@@ -125,16 +155,40 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
                        throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
                } elseif (!headers_sent()) {
                        // Send headers out
-                       header("HTTP/1.0 {$this->responseStatus}");
+                       header("HTTP/1.1 {$this->responseStatus}");
+
+                       // Used later
+                       $now = gmdate('D, d M Y H:i:s') . ' GMT';
+
+                       // General header for no caching
+                       $this->addHeader('Expired', $now); // rfc2616 - Section 14.21
+                       $this->addHeader('Last-Modified', $now);
+                       $this->addHeader('Cache-Control:', 'no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
+                       $this->addHeader('Pragma:', 'no-cache'); // HTTP/1.0
+
+                       // Define the charset to be used
+                       $this->addHeader('Content-Type:', 'text/html; charset=utf-8');
+
                        foreach ($this->responseHeaders as $name=>$value) {
                                header("{$name}: {$value}");
                        }
                }
 
-               // Flush the output to the world
-               $this->getWebOutputInstance()->output($this->responseBody);
-               $this->reponseBody = "";
-               $this->responseHeaders = array();
+               // Are there some error messages?
+               if (count($this->fatalMessages) == 0) {
+                       // Flush the output to the world
+                       $this->getWebOutputInstance()->output($this->responseBody);
+               } else {
+                       // Display all error messages
+                       $this->getApplicationInstance()->handleFatalMessages($this->fatalMessages);
+
+                       // Send the error messages out to the world
+                       $this->getWebOutputInstance()->output($this->responseBody);
+               }
+
+               // Clear response header and body
+               $this->setReponseBody("");
+               $this->resetResponseHeaders();
        }
 
        /**
@@ -155,6 +209,18 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
        public final function getTemplateEngine () {
                return $this->templateEngine;
        }
+
+       /**
+        * Adds a fatal message id to the response. The added messages can then be
+        * processed and outputed to the world
+        *
+        * @param       $messageId      The message id we shall add
+        * @return      void
+        */
+       public final function addFatalMessage ($messageId) {
+               // Adds the resolved message id to the fatal message list
+               $this->fatalMessages[] = $this->getApplicationInstance()->getLanguageInstance()->getMessage($messageId);
+       }
 }
 
 // [EOF]