]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Sitemap/sitemapindex.php
Merge branch '0.9.x' into emailsummary
[quix0rs-gnu-social.git] / plugins / Sitemap / sitemapindex.php
index 09aebe0d8f41efcf355e08dab4c78ca889b46d54..ab89c2156c936afd18b52f6ea5b64502bd6b80e0 100644 (file)
@@ -40,8 +40,7 @@ if (!defined('STATUSNET')) {
  * @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
@@ -50,7 +49,6 @@ class SitemapAction extends Action
      *
      * @return void
      */
-
     function handle($args)
     {
         header('Content-Type: text/xml; charset=UTF-8');
@@ -58,8 +56,8 @@ class SitemapAction extends Action
 
         $this->elementStart('sitemapindex', array('xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9'));
 
-        $this->showUserSitemaps();
         $this->showNoticeSitemaps();
+        $this->showUserSitemaps();
 
         $this->elementEnd('sitemapindex');
 
@@ -68,8 +66,61 @@ class SitemapAction extends Action
 
     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');
     }
 }