/**
  * Base filter, allows logged in and non-logged in users to cache the page
  */
 public function filters()
 {
     $id = Yii::app()->getRequest()->getQuery('id');
     if ($id != NULL) {
         $lastModified = Yii::app()->db->createCommand("SELECT UNIX_TIMESTAMP(GREATEST( (SELECT IFNULL(MAX(updated), 0) FROM categories WHERE categories.id = {$id}),(SELECT IFNULL(MAX(content.updated), 0) FROM categories LEFT JOIN content ON categories.id = content.category_id WHERE categories.id = {$id} AND vid = (SELECT MAX(vid) FROM content AS content2 WHERE content2.id = content.id)),(SELECT IFNULL(MAX(comments.updated), 0) FROM categories LEFT JOIN content ON categories.id = content.category_id LEFT JOIN comments ON content.id = comments.content_id WHERE categories.id = {$id} AND vid = (SELECT MAX(vid) FROM content AS content2 WHERE content2.id = content.id) )))")->queryScalar();
         $eTag = $this->id . Cii::get($this->action, 'id', NULL) . $id . Cii::get(Yii::app()->user->id, 0) . $lastModified;
         return array(array('CHttpCacheFilter + index', 'cacheControl' => Cii::get(Yii::app()->user->id) == NULL ? 'public' : 'private' . ', no-cache, must-revalidate', 'etagSeed' => $eTag));
     }
     return parent::filters();
 }
Example #2
0
 /**
  * Base filter, allows logged in and non-logged in users to cache the page
  */
 public function filters()
 {
     $id = Yii::app()->getRequest()->getQuery('id');
     $key = false;
     if ($id != NULL) {
         $lastModified = Yii::app()->db->createCommand("SELECT UNIX_TIMESTAMP(GREATEST((SELECT IFNULL(MAX(updated),0) FROM content WHERE id = :id2 AND vid = (SELECT MAX(vid) FROM content AS content2 WHERE content2.id = content.id)), (SELECT IFNULL(MAX(updated), 0) FROM comments WHERE content_id = :id)))")->bindParam(':id2', $id)->bindParam(':id', $id)->queryScalar();
         $theme = Cii::getConfig('theme', 'default');
         $keyFile = ContentMetadata::model()->findByAttributes(array('content_id' => $id, 'key' => 'view'));
         if ($keyFile != NULL) {
             $key = dirname(__FILE__) . '/../../themes/' . $theme . '/views/content/' . $keyFile->value . '.php';
         }
         if ($key && file_exists($key)) {
             $lastModified = filemtime($key) >= $lastModified ? filemtime($key) : $lastModified;
         }
         $eTag = $this->id . Cii::get($this->action, 'id', NULL) . $id . Cii::get(Yii::app()->user->id, 0) . $lastModified;
         return array('accessControl', array('CHttpCacheFilter + index', 'cacheControl' => Cii::get(Yii::app()->user->id) == NULL ? 'public' : 'private' . ', no-cache, must-revalidate', 'etagSeed' => YII_DEBUG ? mt_rand() : $eTag), array('COutputCache + index', 'duration' => YII_DEBUG ? 0 : 3600, 'varyByParam' => array('id'), 'varyByExpression' => 'Yii::app()->controller->getTheme()'));
     }
     return parent::filters();
 }
Example #3
0
 /**
  * @return array action filters
  */
 public function filters()
 {
     return CMap::mergeArray(parent::filters(), array('accessControl'));
 }
Example #4
0
 /**
  * beforeAction method, performs operations before an action is presented
  * @param $action, the action being called
  * @see http://www.yiiframework.com/doc/api/1.1/CController#beforeAction-detail
  * @return CiiController::beforeAction
  */
 public function beforeAction($action)
 {
     $this->breadcrumbs[] = ucwords(Yii::app()->controller->action->id);
     return parent::beforeAction($action);
 }