add('name', PLUGIN_LINKTOOLBAR_TITLE); $propbag->add('description', PLUGIN_LINKTOOLBAR_TITLE_DESC); $propbag->add('event_hooks', array('frontend_header' => true)); $propbag->add('author', 'Garvin Hicking'); $propbag->add('version', '1.5.1'); $propbag->add('requirements', array( 'serendipity' => '0.7', 'smarty' => '2.6.7', 'php' => '4.1.0' )); $propbag->add('stackable', false); $propbag->add('groups', array('FRONTEND_ENTRY_RELATED')); } function backAndForth($link = null) { global $serendipity; if (!empty($serendipity['GET']['staticid']) || !empty($serendipity['GET']['subpage'])) { // This is actually not used for staticpages/contact forms etc, it has no back/forth. return true; } if (!is_array($link)) { $link = array(); if ($serendipity['GET']['page'] > 1) { $uriArguments = $serendipity['uriArguments']; $uriArguments[] = 'P'. ($serendipity['GET']['page'] - 1); $link['prev'] = array( 'link' => serendipity_rewriteURL(implode('/', $uriArguments) .'.html'), 'title' => PREVIOUS_PAGE ); } $uriArguments = $serendipity['uriArguments']; $uriArguments[] = 'P'. ($serendipity['GET']['page'] + 1); $link['next'] = array( 'link' => serendipity_rewriteURL(implode('/', $uriArguments) .'.html'), 'title' => NEXT_PAGE ); } if (is_array($link['prev'])) { echo '' . "\n"; } if (is_array($link['next'])) { echo '' . "\n"; } return true; } function makeLink($resultset) { if (is_array($resultset) && is_numeric($resultset[0]['id'])) { return array( 'link' => serendipity_archiveURL($resultset[0]['id'], $resultset[0]['title'], 'baseURL', true, array('timestamp' => $resultset[0]['timestamp'])), 'title' => (function_exists('serendipity_specialchars') ? serendipity_specialchars($resultset[0]['title']) : htmlspecialchars($resultset[0]['title'], ENT_COMPAT, LANG_CHARSET)) ); } return false; } function showPaging($id = false) { global $serendipity; if (!$id) { return false; } $links = array(); $cond = array(); $cond['and'] = " AND e.isdraft = 'false' AND e.timestamp <= " . serendipity_serverOffsetHour(time(), true); serendipity_plugin_api::hook_event('frontend_fetchentry', $cond); $querystring = "SELECT e.id, e.title, e.timestamp FROM {$serendipity['dbPrefix']}entries e {$cond['joins']} WHERE e.id [COMP] " . (int) $id . " {$cond['and']} ORDER BY e.id [ORDER] LIMIT 1"; $prevID = serendipity_db_query(str_replace(array('[COMP]', '[ORDER]'), array('<', 'DESC'), $querystring)); $nextID = serendipity_db_query(str_replace(array('[COMP]', '[ORDER]'), array('>', 'ASC'), $querystring)); if ($link = $this->makeLink($prevID)) { $links['prev'] = $link; } if ($link = $this->makeLink($nextID)) { $links['next'] = $link; } return $links; } function getCat($cat) { if (function_exists('serendipity_categoryURL')) { $link = serendipity_categoryURL($cat, 'serendipityHTTPPath'); } else { $link = serendipity_rewriteURL( PATH_CATEGORIES . '/' . serendipity_makePermalink( PERM_CATEGORIES, array( 'id' => $cat['categoryid'], 'title' => $cat['category_name']) ), 'serendipityHTTPPath'); } return array( 'link' => $link, 'title' => (function_exists('serendipity_specialchars') ? serendipity_specialchars($cat['category_name']) : htmlspecialchars($cat['category_name'], ENT_COMPAT, LANG_CHARSET)) ); } function getUser($user) { if (function_exists('serendipity_authorURL')) { $link = serendipity_authorURL($user, 'serendipityHTTPPath'); } else { $link = serendipity_rewriteURL( PATH_CATEGORIES . '/' . serendipity_makePermalink( PERM_CATEGORIES, array( 'id' => $cat['categoryid'], 'title' => $cat['category_name']) ), 'baseURL'); } return array( 'link' => $link, 'title' => AUTHOR . ' ' . (function_exists('serendipity_specialchars') ? serendipity_specialchars($user['realname']) : htmlspecialchars($user['realname'], ENT_COMPAT, LANG_CHARSET)) ); } function getEntry($id) { global $serendipity; $ret = serendipity_db_query("SELECT id, title, timestamp FROM {$serendipity['dbPrefix']}entries WHERE id = " . (int)$id); return serendipity_archiveURL($id, $ret[0]['title'], 'baseURL', true, array('timestamp' => $ret[0]['timestamp'])); } function getArchiveParameters() { global $serendipity; $_args = $serendipity['uriArguments']; $prepend_params = $params = array(); /* Attempt to locate hidden variables within the URI */ foreach ($_args AS $k => $v){ if ($v == PATH_ARCHIVES) { continue; } if ($v[0] == 'C') { /* category */ $cat = substr($v, 1); if (is_numeric($cat)) { $params['C' . $cat] = true; unset($_args[$k]); } } elseif ($v[0] == 'A') { /* Author */ $url_author = substr($v, 1); if (is_numeric($url_author)) { $params['A'. (int)$url_author] = true; unset($_args[$k]); } } elseif ($v[0] == 'W') { /* Week */ if (is_numeric($week)) { $params['W'. substr($v, 1)] = true; unset($_args[$k]); } } elseif ($v == 'summary') { /* Summary */ $params['summary'] = true; unset($_args[$k]); } elseif ($v[0] == 'P') { /* Page */ $page = substr($v, 1); if (is_numeric($page)) { $params['P' . $page] = true; unset($_args[$k]); } } } list(,$year, $month, $day) = $_args; if (isset($year)) { $prepend_params[$year] = true; } if (isset($month)) { $prepend_params[$month] = true; } if (isset($day)) { $prepend_params[$day] = true; } $params = array_merge($prepend_params, $params); return serendipity_rewriteURL(PATH_ARCHIVES . '/' . implode('/', array_keys($params)) . '/', 'baseURL'); } function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; if ($event == 'frontend_header') { $start_url = $serendipity['baseURL']; $start_title = $serendipity['blogTitle']; echo '' . "\n"; if ($serendipity['GET']['action'] == 'read' && !empty($serendipity['GET']['id'])) { // Article detail view echo '' . "\n"; $this->backAndForth( $this->showPaging($serendipity['GET']['id']) ); // END article detail view echo '' . "\n"; } elseif ($serendipity['GET']['action'] == 'read' && is_array($serendipity['range'])) { // Specific Date Archives view echo '' . "\n"; echo '' . "\n"; $links = array(); $add_query = ''; $year = date('Y', $serendipity['range'][0]); $month = date('m', $serendipity['range'][0]); $day = date('d', $serendipity['range'][0]); $pageMonthNext = array( 'day' => '1', 'month' => $month + 1, 'year' => $year ); $pageMonthPrev = array( 'day' => '1', 'month' => $month - 1, 'year' => $year ); $pageDayNext = array( 'day' => $day + 1, 'month' => $month, 'year' => $year ); $pageDayPrev = array( 'day' => $day - 1, 'month' => $month, 'year' => $year ); $diff = $serendipity['range'][1] - $serendipity['range'][0]; if (isset($serendipity['GET']['category'])) { $categoryid = (int)serendipity_db_escape_string($serendipity['GET']['category']); $add_query = '/C' . $categoryid; } if ($diff < 86400) { // Paging day by day $ts = mktime(0, 0, 0, $pageDayPrev['month'], $pageDayPrev['day'], $pageDayPrev['year']); $links['prev'] = array( 'link' => serendipity_archiveDateUrl(sprintf('%4d/%02d/%02d', date('Y', $ts), date('m', $ts), date('d', $ts))), 'title' => sprintf(ENTRIES_FOR, serendipity_formatTime(DATE_FORMAT_ENTRY, $ts, false)) ); $ts = mktime(0, 0, 0, $pageDayNext['month'], $pageDayNext['day'], $pageDayNext['year']); $links['next'] = array( 'link' => serendipity_archiveDateUrl(sprintf('%4d/%02d/%02d', date('Y', $ts), date('m', $ts), date('d', $ts))), 'title' => sprintf(ENTRIES_FOR, serendipity_formatTime(DATE_FORMAT_ENTRY, $ts, false)) ); } elseif ($diff < (86400*28)) { // Paging by week // TODO - Don't know :-) } else { // Paging by month $ts = mktime(0, 0, 0, $pageMonthPrev['month'], $pageMonthPrev['day'], $pageMonthPrev['year']); $links['prev'] = array( 'link' => serendipity_archiveDateUrl(sprintf('%4d/%02d', date('Y', $ts), date('m', $ts))), 'title' => sprintf(ENTRIES_FOR, serendipity_formatTime('%B %Y', $ts, false)) ); $ts = mktime(0, 0, 0, $pageMonthNext['month'], $pageMonthNext['day'], $pageMonthNext['year']); $links['next'] = array( 'link' => serendipity_archiveDateUrl(sprintf('%4d/%02d', date('Y', $ts), date('m', $ts))), 'title' => sprintf(ENTRIES_FOR, serendipity_formatTime('%B %Y', $ts, false)) ); } $this->backAndForth($links); // END Specific Date Archives view } elseif ($serendipity['GET']['action'] == 'archives') { // Full month/year archives overview echo '' . "\n"; // END Full month/year archives overview echo '' . "\n"; } elseif (!empty($serendipity['GET']['category'])) { // Category based view $cInfo = serendipity_fetchCategoryInfo($serendipity['GET']['category']); if (function_exists('serendipity_categoryURL')) { $categories_url = serendipity_categoryURL($cInfo, 'serendipityHTTPPath'); } else { $categories_url = serendipity_rewriteURL( PATH_CATEGORIES . '/' . serendipity_makePermalink( PERM_CATEGORIES, array( 'id' => $cInfo['categoryid'], 'title' => $cInfo['category_name']) ), 'serendipityHTTPPath'); } echo '' . "\n"; echo '' . "\n"; $categories = serendipity_fetchCategories('all'); $links = array(); if (is_array($categories) && count($categories)) { $categories = serendipity_walkRecursive($categories, 'categoryid', 'parentid', VIEWMODE_THREADED); $capture_next = false; foreach ($categories as $cat) { if ($capture_next) { $links['next'] = $this->getCat($cat); break; } if (is_array($prev_cat) && $cat['categoryid'] == $serendipity['GET']['category']) { $links['prev'] = $this->getCat($prev_cat); $capture_next = true; } $prev_cat = $cat; } } $this->backAndForth($links); // END Category based view } elseif (!empty($serendipity['GET']['viewAuthor'])) { // User view $uInfo = serendipity_fetchUsers(); $links = array(); if (is_array($uInfo)) { $capture_next = false; foreach($uInfo AS $user) { if ($capture_next) { $links['next'] = $this->getUser($user); break; } if ($user['authorid'] == $serendipity['GET']['viewAuthor']) { $authors_url = $this->getUser($user); echo '' . "\n"; echo '' . "\n"; if (is_array($prev_user)) { $links['prev'] = $this->getUser($prev_user); $capture_next = true; } } $prev_user = $user; } $this->backAndForth($links); } // END User view } else { // Frontpage $this->backAndForth(); // END Frontpage if ($serendipity['view'] == 'start') { echo '' . "\n"; } } } } } ?>