/**
  * Cleans up the expired tokens after writing
  */
 protected function onAfterWrite()
 {
     parent::onAfterWrite();
     //Clean up the expired tokens
     $expiredTokens = KapostPreviewToken::get()->filter('Created:LessThan', date('Y-m-d H:i:s', strtotime('-' . KapostService::config()->preview_token_expiry . ' minutes')));
     if ($expiredTokens->count() > 0) {
         foreach ($expiredTokens as $token) {
             $token->delete();
         }
     }
 }
 /**
  * Handles rendering of the preview for an object
  * @return {string} Response to send to the object
  */
 public function preview()
 {
     $auth = $this->request->getVar('auth');
     $token = KapostPreviewToken::get()->filter('Code', Convert::raw2sql($auth))->first();
     //Verify the token exists and hasn't expired yet
     if (!empty($token) && $token !== false && $token->exists() && time() - strtotime($token->Created) < self::config()->preview_token_expiry * 60 && $token->KapostRefID == $this->urlParams['ID']) {
         $kapostObj = KapostObject::get()->filter('KapostRefID', Convert::raw2sql($this->urlParams['ID']))->sort('"Created" DESC')->first();
         if (!empty($kapostObj) && $kapostObj !== false && $kapostObj->exists()) {
             $previewController = $kapostObj->renderPreview();
             $this->extend('updatePreviewDisplay', $kapostObj, $previewController);
             return $previewController;
         }
     }
     //Token expired or object not found
     if (class_exists('ErrorPage')) {
         $response = ErrorPage::response_for(404);
         if (!empty($response)) {
             return $response;
         }
     }
     return parent::httpError(404);
 }