summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2010-04-12 11:04:56 -0400
committerEvan Prodromou <evan@status.net>2010-06-01 13:52:27 -0700
commit4b321f96fc9b45ae3000088b8cfd856f9ffe1529 (patch)
tree9e298d663060a720a66a42cf177ccb1020a3a7ec
parentb73c8ff441008a4fa09eef66871f2cfebc0569b5 (diff)
show sitemapindex with user and notice sitemaps
-rw-r--r--plugins/Sitemap/sitemapindex.php93
1 files changed, 91 insertions, 2 deletions
diff --git a/plugins/Sitemap/sitemapindex.php b/plugins/Sitemap/sitemapindex.php
index 09aebe0d8..7942bc3bd 100644
--- a/plugins/Sitemap/sitemapindex.php
+++ b/plugins/Sitemap/sitemapindex.php
@@ -41,7 +41,7 @@ if (!defined('STATUSNET')) {
* @link http://status.net/
*/
-class SitemapAction extends Action
+class SitemapindexAction extends Action
{
/**
* handle the action
@@ -68,8 +68,97 @@ class SitemapAction extends Action
function showUserSitemaps()
{
+ $userCounts = $this->getUserCounts();
+
+ foreach ($userCounts as $dt => $cnt) {
+ $cnt = $cnt+0;
+ assert($cnt != 0);
+ $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 = $this->getNoticeCounts();
+
+ foreach ($noticeCounts as $dt => $cnt) {
+ assert($cnt != 0);
+ $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 getUserCounts()
+ {
+ // XXX: cachemeplease
+
$user = new User();
- $cnt = $user->count();
+ $user->selectAdd();
+ $user->selectAdd('date(created) as regdate, count(*) as regcount');
+ $user->groupBy('regdate');
+
+ $user->find();
+
+ $userCounts = array();
+
+ while ($user->fetch()) {
+ $userCounts[$user->regdate] = $user->regcount;
+ }
+
+ return $userCounts;
+ }
+
+ function getNoticeCounts()
+ {
+ // XXX: cachemeplease
+
+ $notice = new Notice();
+
+ $notice->selectAdd();
+ $notice->selectAdd('date(created) as postdate, count(*) as postcount');
+ $notice->groupBy('postdate');
+
+ $notice->find();
+
+ $noticeCounts = array();
+
+ while ($notice->fetch()) {
+ $noticeCounts[$notice->postdate] = $notice->postcount;
+ }
+
+ return $noticeCounts;
+ }
+
+ 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');
}
}