Exemple #1
0
 function onJotcacheRecache($starturl, $jcplugin, $jcparams, $jcstates)
 {
     if ($jcplugin != 'recache') {
         return;
     }
     $params = JComponentHelper::getParams('com_jotcache');
     $logging = $params->get('recachelog', 0) == 1 ? true : false;
     $database = JFactory::getDBO();
     $sql = $database->getQuery(true);
     $sql->select('fname,uri,browser')->from('#__jotcache')->where("recache = 1");
     $database->setQuery($sql);
     $rows = $database->loadObjectList();
     $browsers = BrowserAgents::getBrowserAgents();
     $hits = array();
     $warns = 0;
     $delcount = 5;
     $delpages = array();
     $runner = new RecacheRunner();
     foreach ($rows as $row) {
         if (defined('JOTCACHE_RECACHE_BROWSER')) {
             if (!file_exists(JPATH_ROOT . '/cache/page/jotcache_recache_flag_tmp.php')) {
                 return;
             }
         }
         $browser = array_key_exists($row->browser, $browsers) ? $browsers[$row->browser][1] : BrowserAgents::getDefaultAgent();
         $agent = $browser . ' jotcache \\r\\n';
         $pos = strpos(trim($row->uri), 'http');
         if ($pos === 0) {
             $ret = $runner->getData($row->uri, $agent);
         } else {
             preg_match('#http[s]?://[^/\\n]*#', $starturl, $matches);
             $root = $matches[0];
             $ret = $runner->getData($root . $row->uri, $agent);
         }
         if ($ret === false) {
             $warns++;
             if ($logging) {
                 $browser_err = $row->browser == "" ? '' : '(' . $row->browser . ')';
                 JLog::add(sprintf('WARN uri%s `%s` was not accessed during recache', $browser_err, $row->uri), JLog::INFO, 'jotcache.recache');
             }
             if ($warns > 9) {
                 return array("recache", "STOPPED after 10 WARNs", $hits);
             }
         } else {
             if (array_key_exists($row->browser, $hits)) {
                 $hits[$row->browser] += 1;
             } else {
                 $hits[$row->browser] = 1;
             }
         }
         $delpages[] = $row->fname;
         if ($delcount === 0) {
             $this->clearRecacheFlags($delpages);
             $delcount = 6;
         }
         $delcount--;
     }
     $this->clearRecacheFlags($delpages);
     return array("recache", "DONE", $hits);
 }