Index: /daten/workspace/TYPO3_4_TRUNK/typo3/sysext/cms/tslib/class.tslib_fe.php =================================================================== --- /daten/workspace/TYPO3_4_TRUNK/typo3/sysext/cms/tslib/class.tslib_fe.php (revision 4059) +++ /daten/workspace/TYPO3_4_TRUNK/typo3/sysext/cms/tslib/class.tslib_fe.php (working copy) @@ -2701,6 +2701,52 @@ */ function setPageCacheContent($content,$data,$tstamp) { $this->clearPageCacheContent(); + + // Call hook for $tstamp calulating + if (is_array($this->TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_cacheexpire_timestamp'])) { + foreach($this->TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_cacheexpire_timestamp'] as $_classRef) { + $_procObj = &t3lib_div::getUserObj($_classRef); + $tstamp = $_procObj->calculateExpireTimestamp(array('tstamp' => $tstamp, 'pid' => $this->id),$this); + } + } + + $sys_page = t3lib_div::makeInstance('t3lib_pageSelect'); + + // Workspace does not matter, because they are on an different page + // so whe can use $this-id to check for content elements on this page + // Versioning does not matter, because they got pid = -1 + $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'tt_content', ' + tt_content.pid='.intval($this->id).' + AND ( + (tt_content.starttime > '.$GLOBALS['EXEC_TIME'].' AND tt_content.starttime < '.$tstamp.') + OR + (tt_content.endtime > '.$GLOBALS['EXEC_TIME'].' AND tt_content.endtime < '.$tstamp.') + ) '.$sys_page->enableFields('tt_content',0,array('starttime' => true,'endtime' => true),FALSE)); + + while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { + // $tstamp is the orignial expire-date of that page + // usually it is calculated by cache-expiredate and + // $GLOBALS['EXEC_TIME'] + // the page starttime/endtime is checked before + // it is requested from cache. So we do not have to care + // of starttime/endtime of the page itself + + // we want to respect the starttime / endtime of the + // content elements + // + // we have to check for each content element only, if it has a starttime + // or an endtime which takes effect betwwen $GLOBALS['EXEC_TIME'] + // and the default-expire date ($tstamp). + if ($row['starttime'] < $tstamp && $row['starttime'] > $GLOBALS['EXEC_TIME']) { + t3lib_div::devLog('Expires was: '.$tstamp.' new Timestamp via starttime is: '.$row['starttime'].' (ID='.$row['id'].')','cacheexpire',0,$row); + $tstamp = $row['starttime']; + } + if ($row['endtime'] < $tstamp && $row['endtime'] > $GLOBALS['EXEC_TIME']) { + t3lib_div::devLog('Expires was: '.$tstamp.' new Timestamp via endtime is: '.$row['endtime'].' (ID='.$row['id'].')','cacheexpire',0,$row); + $tstamp = $row['endtime']; + } + } + $insertFields = array( 'hash' => $this->newHash, 'page_id' => $this->id,