10 define(
'CH_SITE_MAPS_URLS_PER_FILE', 20000);
11 define(
'CH_SITE_MAPS_FILES_PREFIX',
'sitemap_');
12 define(
'CH_SITE_MAPS_FILE_INDEX',
'sitemap.xml');
33 static protected $BASE_PATH = CH_DIRECTORY_PATH_CACHE_PUBLIC;
34 static protected $BASE_URL = CH_WSB_URL_CACHE_PUBLIC;
43 'field_date_type' =>
"timestamp",
52 $this->_aSystem = $aSystem;
63 if (isset(
$GLOBALS[
'chWsbClasses'][
'ChWsbSiteMaps!'.$sObject]))
64 return $GLOBALS[
'chWsbClasses'][
'ChWsbSiteMaps!'.$sObject];
72 if (!($sClass = $aObject[
'class_name']))
75 if (!
empty($aObject[
'class_file']))
76 require_once(CH_DIRECTORY_PATH_ROOT . $aObject[
'class_file']);
80 $o =
new $sClass($aObject);
82 return (
$GLOBALS[
'chWsbClasses'][
'ChWsbSiteMaps!'.$sObject] =
$o);
89 if (!isset(
$GLOBALS[
'ch_dol_site_maps_systems']))
91 return $GLOBALS[
'ch_dol_site_maps_systems'];
99 if (!self::deleteAllSiteMaps ())
102 if (!
getParam(
'sys_sitemap_enable'))
108 if (!(
$o = self::getObjectInstance($sSystem)))
110 $aFiles = array_merge($aFiles,
$o->generate());
115 $sFileContents =
'<' .
'?xml version="1.0" encoding="UTF-8"?' .
">\n";
116 $sFileContents .=
'<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' .
"\n";
119 $sFileContents .=
"\t<sitemap>\n";
122 $sFileContents .=
"\t</sitemap>\n";
125 $sFileContents .=
'</sitemapindex>';
141 if (!($rHandler = opendir(self::$BASE_PATH)))
145 while ((
$sFile = readdir($rHandler)) !==
false)
147 @unlink (self::$BASE_PATH .
$sFile);
175 if (!
getParam(
'sys_sitemap_enable'))
192 if (!(
$f = fopen (self::$BASE_PATH . $sFileName,
'w')))
196 foreach ($aRows
as $aRow)
202 @chmod (self::$BASE_PATH . $sFileName, 0666);
204 $aFiles[] = $sFileName;
208 }
while ($iStart < $iCount);
215 $s =
'<' .
'?xml version="1.0" encoding="UTF-8"?' .
">\n";
216 $s .=
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' .
"\n";
238 if (!
empty($a[$this->_aQueryParts[
'field_date']]))
239 $s .=
"\t\t<lastmod>" . $this->
_genDate ($a) .
"</lastmod>\n";
241 if (!
empty($this->_aSystem[
'changefreq']))
244 if (!
empty($this->_aSystem[
'priority']))
245 $s .=
"\t\t<priority>" . $this->_aSystem[
'priority'] .
"</priority>\n";
265 if (
'auto' != $this->_aSystem[
'changefreq'])
266 return $this->_aSystem[
'changefreq'];
268 if (
empty($a[$this->_aQueryParts[
'field_date']]))
273 if ($iTimestamp < 2*86400)
275 elseif ($iTimestamp < 14*86400)
277 elseif ($iTimestamp < 60*86400)
285 return $this->_oQuery->getCount($this->_aQueryParts);
295 return date(
'Y-m-d', $iTimestamp);
300 if (
'datetime' == $this->_aQueryParts[
'field_date_type'])
301 return 0 === strncmp(
'0000-00-00', $a[$this->_aQueryParts[
'field_date']], 10) ?
time() : strtotime($a[$this->_aQueryParts[
'field_date']]);
303 return 0 == $this->_aQueryParts[
'field_date'] ?
time() : $a[$this->_aQueryParts[
'field_date']];
308 return htmlspecialchars (
$s, ENT_COMPAT|ENT_HTML401,
'UTF-8');