diff options
-rw-r--r-- | mod/blog/blog_lib.php | 31 | ||||
-rw-r--r-- | mod/blog/views/default/blog/sidebar_menu.php | 40 |
2 files changed, 55 insertions, 16 deletions
diff --git a/mod/blog/blog_lib.php b/mod/blog/blog_lib.php index 7f83d0dc3..8c09260a3 100644 --- a/mod/blog/blog_lib.php +++ b/mod/blog/blog_lib.php @@ -174,6 +174,37 @@ function blog_make_excerpt($text) { } /** + * Returns a list of years and months for all blogs optionally for a user. + * Very similar to get_entity_dates() except uses a metadata field. + * + * @param mixed $user_guid + */ +function blog_get_blog_months($user_guid = NULL, $container_guid = NULL) { + global $CONFIG; + + $subtype = get_subtype_id('blog'); + + $q = "SELECT DISTINCT EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(mdv.string)) AS yearmonth + FROM {$CONFIG->dbprefix}entities e, {$CONFIG->dbprefix}metadata, {$CONFIG->dbprefix}metastrings mdn, {$CONFIG->dbprefix}metastrings mdv + WHERE e.guid = {$CONFIG->dbprefix}metadata.entity_guid + AND {$CONFIG->dbprefix}metadata.name_id = mdn.id + AND {$CONFIG->dbprefix}metadata.value_id = mdv.id + AND mdn.string = 'publish_date'"; + + if ($user_guid) { + $user_guid = (int)$user_guid; + $q .= " AND e.owner_guid = $user_guid"; + } + + if ($container_guid) { + $container_guid = (int)$container_guid; + $q .= " AND e.container_guid = $container_guid"; + } + + return get_data($q); +} + +/** * Extended class to override the time_created */ class ElggBlog extends ElggObject { diff --git a/mod/blog/views/default/blog/sidebar_menu.php b/mod/blog/views/default/blog/sidebar_menu.php index bd348c7e6..a3fe1c181 100644 --- a/mod/blog/views/default/blog/sidebar_menu.php +++ b/mod/blog/views/default/blog/sidebar_menu.php @@ -35,24 +35,32 @@ echo elgg_view("blogs/sidebar", array("object_type" => 'blog')); $comments = get_annotations(0, "object", "blog", "generic_comment", "", 0, 4, 0, "desc"); echo elgg_view('annotation/latest_comments', array('comments' => $comments)); -if ($dates = get_entity_dates('object', 'blog', page_owner())) { - echo elgg_view_title(elgg_echo('blog:archives')); - - echo '<ul>'; - foreach($dates as $date) { - $timestamplow = mktime(0,0,0,substr($date,4,2),1,substr($date,0,4)); - $timestamphigh = mktime(0,0,0,((int) substr($date,4,2)) + 1,1,substr($date,0,4)); - - if (!isset($page_owner)) $page_owner = page_owner_entity(); - $link = $CONFIG->wwwroot . 'pg/blog/' . $page_owner->username . '/archive/' . $timestamplow . '/' . $timestamphigh; - //add_submenu_item(sprintf(elgg_echo('date:month:' . substr($date,4,2)), substr($date, 0, 4)), $link, 'filter'); - $month = sprintf(elgg_echo('date:month:' . substr($date,4,2)), substr($date, 0, 4)); - echo "<li><a href=\"$link\" title=\"$month\">$month</a><li>"; - } - echo '</ul>'; -} +// only show archives for users or groups. +// This is a limitation of the URL schema. +if ($page_owner) { + $dates = blog_get_blog_months($user); + + if ($dates) { + echo elgg_view_title(elgg_echo('blog:archives')); + + echo '<ul>'; + foreach($dates as $date) { + $date = $date->yearmonth; + $timestamplow = mktime(0,0,0,substr($date,4,2),1,substr($date,0,4)); + $timestamphigh = mktime(0,0,0,((int) substr($date,4,2)) + 1,1,substr($date,0,4)); + + if (!isset($page_owner)) $page_owner = page_owner_entity(); + $link = $CONFIG->wwwroot . 'pg/blog/' . $page_owner->username . '/archive/' . $timestamplow . '/' . $timestamphigh; + //add_submenu_item(sprintf(elgg_echo('date:month:' . substr($date,4,2)), substr($date, 0, 4)), $link, 'filter'); + $month = sprintf(elgg_echo('date:month:' . substr($date,4,2)), substr($date, 0, 4)); + echo "<li><a href=\"$link\" title=\"$month\">$month</a><li>"; + } + + echo '</ul>'; + } +} // temporarily force tag-cloud display $tags = display_tagcloud(0, 100, 'tags'); |