3 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
\r
4 * Copyright (C) 2002-2011 The Nucleus Group
\r
6 * This program is free software; you can redistribute it and/or
\r
7 * modify it under the terms of the GNU General Public License
\r
8 * as published by the Free Software Foundation; either version 2
\r
9 * of the License, or (at your option) any later version.
\r
10 * (see nucleus/documentation/index.html#license for more info)
\r
13 * This class is a collections of functions that produce links
\r
15 * All functions in this clss should only be called statically,
\r
16 * for example: Link::create_item_link(...)
\r
18 * @license http://nucleuscms.org/license.txt GNU General Public License
\r
19 * @copyright Copyright (C) 2002-2011 The Nucleus Group
\r
20 * @version $Id: LINK.php 1721 2012-03-31 10:18:25Z sakamocchi $
25 * Link::create_item_link()
\r
26 * Create a link to an item
\r
28 * @param $itemid item id
\r
29 * @param $extra extra parameter
\r
31 static public function create_item_link($itemid, $extra = '') {
\r
32 return self::create_link('item', array('itemid' => $itemid, 'extra' => $extra) );
\r
36 * Link::create_member_link()
\r
37 * Create a link to a member
\r
40 * @param $memberid member id
\r
41 * @param $extra extra parameter
\r
43 static public function create_member_link($memberid, $extra = '') {
\r
44 return self::create_link('member', array('memberid' => $memberid, 'extra' => $extra) );
\r
48 * Link::create_category_link()
\r
49 * Create a link to a category
\r
52 * @param $catid category id
\r
53 * @param $extra extra parameter
\r
55 static public function create_category_link($catid, $extra = '') {
\r
56 return self::create_link('category', array('catid' => $catid, 'extra' => $extra) );
\r
60 * Link::cteate_archive_link()
\r
61 * Create a link to an archive
\r
64 * @param $blogid blog id
\r
65 * @param $archive archive identifier
\r
66 * @param $extra extra parameter
\r
68 static public function create_archive_link($blogid, $archive, $extra = '') {
\r
69 return self::create_link('archive', array('blogid' => $blogid, 'archive' => $archive, 'extra' => $extra) );
\r
73 * Link::create_archivelist_link()
\r
74 * Create a link to an archive list
\r
77 * @param $blogid blog id
\r
78 * @param $extra extra parameter
\r
80 static public function create_archivelist_link($blogid = '', $extra = '') {
\r
81 return self::create_link('archivelist', array('blogid' => $blogid, 'extra' => $extra) );
\r
85 * Link::create_blogid_link()
\r
86 * Create a link to a blog
\r
89 * @param $blogid blog id
\r
90 * @param $extra extra parameter
\r
92 static public function create_blogid_link($blogid, $params = '') {
\r
93 return self::create_link('blog', array('blogid' => $blogid, 'extra' => $params) );
\r
97 * Link::create_link()
\r
100 * Universell function that creates link of different types (like item, blog ...)
\r
101 * and with an array of parameters
\r
104 * @param $type type of the link
\r
105 * @param $params array with parameters
\r
107 static public function create_link($type, $params) {
\r
108 global $manager, $CONF;
\r
110 $generatedURL = '';
\r
111 $usePathInfo = ($CONF['URLMode'] == 'pathinfo');
\r
113 // ask plugins first
\r
122 'params' => $params,
\r
123 'completed' => &$created,
\r
129 // if a plugin created the URL, return it
\r
135 // default implementation
\r
138 if ($usePathInfo) {
\r
139 $url = $CONF['ItemURL'] . '/' . $CONF['ItemKey'] . '/' . $params['itemid'];
\r
141 $url = $CONF['ItemURL'] . '?itemid=' . $params['itemid'];
\r
146 if ($usePathInfo) {
\r
147 $url = $CONF['MemberURL'] . '/' . $CONF['MemberKey'] . '/' . $params['memberid'];
\r
149 $url = $CONF['MemberURL'] . '?memberid=' . $params['memberid'];
\r
154 if ($usePathInfo) {
\r
155 $url = $CONF['CategoryURL'] . '/' . $CONF['CategoryKey'] . '/' . $params['catid'];
\r
157 $url = $CONF['CategoryURL'] . '?catid=' . $params['catid'];
\r
161 case 'archivelist':
\r
162 if (!$params['blogid']) {
\r
163 $params['blogid'] = $CONF['DefaultBlog'];
\r
166 if ($usePathInfo) {
\r
167 $url = $CONF['ArchiveListURL'] . '/' . $CONF['ArchivesKey'] . '/' . $params['blogid'];
\r
169 $url = $CONF['ArchiveListURL'] . '?archivelist=' . $params['blogid'];
\r
174 if ($usePathInfo) {
\r
175 $url = $CONF['ArchiveURL'] . '/' . $CONF['ArchiveKey'] . '/'.$params['blogid'].'/' . $params['archive'];
\r
177 $url = $CONF['ArchiveURL'] . '?blogid='.$params['blogid'].'&archive=' . $params['archive'];
\r
182 if ($usePathInfo) {
\r
183 $url = $CONF['BlogURL'] . '/' . $CONF['BlogKey'] . '/' . $params['blogid'];
\r
185 $url = $CONF['BlogURL'] . '?blogid=' . $params['blogid'];
\r
190 return Link::add_link_params($url, (isset($params['extra'])? $params['extra'] : null));
\r
193 static private function add_link_params($link, $params)
\r
197 if (is_array($params) ) {
\r
199 if ($CONF['URLMode'] == 'pathinfo') {
\r
201 foreach ($params as $param => $value) {
\r
202 // change in 3.63 to fix problem where URL generated with extra params mike look like category/4/blogid/1
\r
203 // but they should use the URL keys like this: category/4/blog/1
\r
204 // if user wants old urls back, set $CONF['NoURLKeysInExtraParams'] = 1; in config.php
\r
205 if (isset($CONF['NoURLKeysInExtraParams']) && $CONF['NoURLKeysInExtraParams'] == 1)
\r
207 $link .= '/' . $param . '/' . urlencode($value);
\r
211 $link .= '/' . $CONF['ItemKey'] . '/' . urlencode($value);
\r
214 $link .= '/' . $CONF['MemberKey'] . '/' . urlencode($value);
\r
217 $link .= '/' . $CONF['CategoryKey'] . '/' . urlencode($value);
\r
219 case 'archivelist':
\r
220 $link .= '/' . $CONF['ArchivesKey'] . '/' . urlencode($value);
\r
223 $link .= '/' . $CONF['ArchiveKey'] . '/' . urlencode($value);
\r
226 $link .= '/' . $CONF['BlogKey'] . '/' . urlencode($value);
\r
229 $link .= '/' . $param . '/' . urlencode($value);
\r
237 foreach ($params as $param => $value) {
\r
238 $link .= '&' . $param . '=' . urlencode($value);
\r
248 * Link::create_blog_link()
\r
249 * Create an link to a blog
\r
251 * This function considers the URLMode of the blog
\r
255 * @param $params parameters
\r
257 static public function create_blog_link($url, $params) {
\r
259 if ($CONF['URLMode'] == 'normal') {
\r
260 if (i18n::strpos($url, '?') === FALSE && is_array($params)) {
\r
261 $fParam = reset($params);
\r
262 $fKey = key($params);
\r
263 array_shift($params);
\r
264 $url .= '?' . $fKey . '=' . $fParam;
\r
266 } elseif ($CONF['URLMode'] == 'pathinfo' && i18n::substr($url, -1) == '/') {
\r
267 $url = i18n::substr($url, 0, -1);
\r
269 return addLinkParams($url, $params);
\r