# HG changeset patch
# User Dan
# Date 1213497746 14400
# Node ID c3710cbed6d03dd4886f512ef2e7b11b06e8edf4
# Parent 432eed804b7f48763307d9c6d654eeac7d267e9b
Modified article links and stuff to be more SEO-friendly. Here ends 1.0.x compatibility!
diff -r 432eed804b7f -r c3710cbed6d0 plugins/Newsboy.php
--- a/plugins/Newsboy.php Fri Feb 22 10:46:28 2008 -0500
+++ b/plugins/Newsboy.php Sat Jun 14 22:42:26 2008 -0400
@@ -24,7 +24,7 @@
$plugins->attachHook('acl_rule_init', 'NewsBoy_namespace_setup($this);');
// Hook into page rendering
-$plugins->attachHook('page_not_found', 'NewsBoy_namespace_handler();');
+$plugins->attachHook('page_not_found', 'NewsBoy_namespace_handler($this);');
$plugins->attachHook('send_page_footers', 'NewsBoy_PortalLink();');
// String to determine page type string
@@ -70,7 +70,7 @@
}
-function NewsBoy_namespace_handler()
+function NewsBoy_namespace_handler($page)
{
global $db, $session, $paths, $template, $plugins; // Common objects
@@ -82,11 +82,7 @@
if ( $paths->namespace != 'NewsBoy' )
return;
- $chk = $paths->page;
- $chk1 = substr($chk, 0, ( strlen($paths->nslist['NewsBoy']) + 8 ));
- $chk2 = substr($chk, 0, ( strlen($paths->nslist['NewsBoy']) + 7 ));
-
- if ( $paths->cpage['urlname_nons'] == 'Portal' || $paths->cpage['urlname_nons'] == 'Archive' || $chk1 == $paths->nslist['NewsBoy'] . 'Archive/' || $chk2 == $paths->nslist['NewsBoy'] . 'Archive' )
+ if ( $paths->cpage['urlname_nons'] == 'Portal' || preg_match('/^Archive(\/|$)/', $page->page_id) || preg_match('/^Article\//', $page->page_id) )
{
// Add admin opener Javascript function
@@ -122,16 +118,60 @@
$x ) :
'News Archive';
- if ( !$session->get_permissions('read') )
+ if ( !$page->perms->get_permissions('read') )
{
- die_friendly('Access denied', '
Access to this page is denied.
This may be because you are not logged in or you have not met certain criteria for viewing this page.
');
+ $page->err_access_denied();
+ return false;
}
$paths->cpage['comments_on'] = 0;
- $template->header();
- ( $paths->cpage['urlname_nons'] == 'Portal' ) ? NewsBoy_portal() : NewsBoy_archive();
- $template->footer();
+ if ( $page->page_id == 'Portal' )
+ {
+ $template->header();
+ NewsBoy_portal();
+ $template->footer();
+ }
+ else if ( preg_match('/^Archive(\/|$)/', $page->page_id) )
+ {
+ $template->header();
+ NewsBoy_archive();
+ $template->footer();
+ }
+ else if ( preg_match('/^Article\//', $page->page_id) )
+ {
+ if ( !preg_match('#^Article/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.+?)$#', $page->page_id, $id_match) )
+ {
+ return;
+ }
+ // look around for this page
+ // int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )
+ $timestamp_min = mktime(0, 0, 0, intval($id_match[2]), intval($id_match[3]), intval($id_match[1]));
+ $timestamp_max = $timestamp_min + 86400;
+ // mysql and postgresql friendly
+ $integer_prepend = ( ENANO_DBLAYER == 'MYSQL' ) ? "unsigned" : '';
+ $q = $db->sql_query('SELECT urlname, name FROM ' . table_prefix . "pages WHERE CAST(urlname AS $integer_prepend integer) >= $timestamp_min AND CAST(urlname AS $integer_prepend integer) <= $timestamp_max AND namespace = 'NewsBoy';");
+ if ( !$q )
+ $db->_die();
+ if ( $db->numrows() < 1 )
+ return;
+ // found a page
+ $row = $db->fetchrow();
+ if ( sanitize_page_id($row['name']) === $id_match[4] )
+ {
+ // we have a definitive match, send the page through
+ $article = new PageProcessor($row['urlname'], 'NewsBoy');
+ $article->send_headers = $page->send_headers;
+ $article->password = $page->password;
+ $article->send(true);
+ }
+ else
+ {
+ // can't find it.
+ return;
+ }
+ return;
+ }
}
}
@@ -377,7 +417,7 @@
$comment_link = 'add a comment';
$parser->assign_vars(array(
'TITLE' => $title,
- 'LINK' => makeUrlNS('NewsBoy', $row['urlname']),
+ 'LINK' => nb_make_article_url($row['urlname'], $row['name']),
'CONTENT' => $content,
'USER_LINK' => $user_link,
'DATE' => $date,
@@ -430,7 +470,7 @@
{
function article_link($name, $row)
{
- $article_link = '' . $row['name'] . '';
+ $article_link = '' . $row['name'] . '';
return $article_link;
}
function format_date($date, $row)
@@ -1086,4 +1126,21 @@
return $text;
}
+/**
+ * Generates a link to the given Newsboy article given the article name and timestamp
+ * @param int Article timestamp
+ * @param string Article title
+ * @return string
+ */
+
+function nb_make_article_url($timestamp, $title = false)
+{
+ if ( !$title )
+ return makeUrlNS('NewsBoy', $timestamp);
+ $day = date('d', $timestamp);
+ $year = date('Y', $timestamp);
+ $month = date('m', $timestamp);
+ return makeUrlNS('NewsBoy', "Article/$year/$month/$day/" . sanitize_page_id($title));
+}
+
?>