* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
-
-class SitemapAction extends Action
+class SitemapindexAction extends Action
{
/**
* handle the action
*
* @return void
*/
-
function handle($args)
{
header('Content-Type: text/xml; charset=UTF-8');
$this->elementStart('sitemapindex', array('xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9'));
- $this->showUserSitemaps();
$this->showNoticeSitemaps();
+ $this->showUserSitemaps();
$this->elementEnd('sitemapindex');
function showUserSitemaps()
{
- $user = new User();
- $cnt = $user->count();
+ $userCounts = Sitemap_user_count::getAll();
+
+ foreach ($userCounts as $dt => $cnt) {
+ $cnt = $cnt+0;
+
+ if ($cnt == 0) {
+ continue;
+ }
+
+ $n = (int)$cnt / (int)SitemapPlugin::USERS_PER_MAP;
+ if (($cnt % SitemapPlugin::USERS_PER_MAP) != 0) {
+ $n++;
+ }
+ for ($i = 1; $i <= $n; $i++) {
+ $this->showSitemap('user', $dt, $i);
+ }
+ }
+ }
+
+ function showNoticeSitemaps()
+ {
+ $noticeCounts = Sitemap_notice_count::getAll();
+
+ foreach ($noticeCounts as $dt => $cnt) {
+ if ($cnt == 0) {
+ continue;
+ }
+ $n = $cnt / SitemapPlugin::NOTICES_PER_MAP;
+ if ($cnt % SitemapPlugin::NOTICES_PER_MAP) {
+ $n++;
+ }
+ for ($i = 1; $i <= $n; $i++) {
+ $this->showSitemap('notice', $dt, $i);
+ }
+ }
+ }
+
+ function showSitemap($prefix, $dt, $i)
+ {
+ list($y, $m, $d) = explode('-', $dt);
+
+ $this->elementStart('sitemap');
+ $this->element('loc', null, common_local_url($prefix.'sitemap',
+ array('year' => $y,
+ 'month' => $m,
+ 'day' => $d,
+ 'index' => $i)));
+
+ $begdate = strtotime("$y-$m-$d 00:00:00");
+ $enddate = $begdate + (24 * 60 * 60);
+
+ if ($enddate < time()) {
+ $this->element('lastmod', null, date(DATE_W3C, $enddate));
+ }
+ $this->elementEnd('sitemap');
}
}