Esempio n. 1
0
 /**
  * @param HttpRequestA $oRequest
  * @param ProcessorA $oProcessor
  * @returns HttpResponseA
  */
 public function getResponse(HttpRequestA $oRequest, $oProcessor = null)
 {
     $oResponse = parent::getResponse($oRequest, $oProcessor);
     if (!($oResponse->isRedirect() || $oResponse->isError())) {
         $iExpireTime = 600;
         // ten minute
         $oNow = new \DateTime('now', new \DateTimeZone('GMT'));
         $oResponse->setDate($oNow->format('r'));
         try {
             $oModel = $this->getView()->getModel();
         } catch (ExceptionView $v) {
             $oModel = null;
         }
         if (CacheableModelA::isValid($oModel)) {
             try {
                 /** @var CacheableModelA $oModel */
                 $sLastModified = $oModel->getLastModified();
                 $oLastModified = new \DateTime($sLastModified, new \DateTimeZone('GMT'));
                 $oResponse->setLastModified($oLastModified->format('r'));
                 $oMax = $oLastModified->getTimestamp() > $oNow->getTimestamp() ? $oLastModified : $oNow;
                 $sModifiedSince = $oRequest->getIfModifiedSince();
                 if (!empty($sModifiedSince)) {
                     $oModifiedSince = new \DateTime($sModifiedSince, new \DateTimeZone('GMT'));
                     if ($oLastModified->getTimestamp() <= $oModifiedSince->getTimestamp()) {
                         $oResponse->setStatus(HttpResponseType::NOT_MODIFIED);
                     }
                 }
             } catch (\Exception $e) {
                 $oMax = $oNow;
             }
             $oResponse->setExpires($oMax->add(new \DateInterval('P2W'))->format('r'));
             // adding 2 weeks
         } else {
             try {
                 $oResponse->setETag(substr(sha1($oResponse->getOutput()), 0, 8));
                 $oResponse->setCacheControl('public, max-age=' . $iExpireTime);
             } catch (ExceptionView $v) {
                 //
             }
             if ($oRequest->getIfNoneMatch() == '"' . $oResponse->getETag() . '"') {
                 $oResponse->setStatus(HttpResponseType::NOT_MODIFIED);
             }
         }
     }
     return $oResponse;
 }