/** * 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(); }
/** * 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(); }
/** * @return array action filters */ public function filters() { return CMap::mergeArray(parent::filters(), array('accessControl')); }
/** * 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); }