OSDN Git Service

FIX:変数名の誤記を修正
[nucleus-jp/nucleus-next.git] / nucleus / libs / LINK.php
1 <?php \r
2 /*\r
3  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
4  * Copyright (C) 2002-2011 The Nucleus Group\r
5  *\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
11  */\r
12 /**\r
13  * This class is a collections of functions that produce links\r
14  * \r
15  * All functions in this clss should only be called statically,\r
16  * for example: Link::create_item_link(...)\r
17  * \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 $
21  */\r
22 class Link\r
23 {\r
24         /**\r
25          * Link::create_item_link()\r
26          * Create a link to an item\r
27          * @static\r
28          * @param $itemid       item id\r
29          * @param $extra        extra parameter\r
30          */\r
31         static public function create_item_link($itemid, $extra = '') {\r
32                 return self::create_link('item', array('itemid' => $itemid, 'extra' => $extra) );\r
33         }\r
34 \r
35         /**\r
36          * Link::create_member_link()\r
37          * Create a link to a member\r
38          * \r
39          * @static\r
40          * @param $memberid     member id\r
41          * @param $extra        extra parameter\r
42          */\r
43         static public function create_member_link($memberid, $extra = '') {\r
44                 return self::create_link('member', array('memberid' => $memberid, 'extra' => $extra) );\r
45         }\r
46         \r
47         /**\r
48          * Link::create_category_link()\r
49          * Create a link to a category\r
50          * \r
51          * @static\r
52          * @param $catid        category id\r
53          * @param $extra        extra parameter\r
54          */\r
55         static public function create_category_link($catid, $extra = '') {\r
56                 return self::create_link('category', array('catid' => $catid, 'extra' => $extra) );\r
57         }\r
58 \r
59         /**\r
60          * Link::cteate_archive_link()\r
61          * Create a link to an archive\r
62          * \r
63          * @static\r
64          * @param $blogid       blog id\r
65          * @param $archive      archive identifier\r
66          * @param $extra        extra parameter\r
67          */\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
70         }\r
71 \r
72         /**\r
73          * Link::create_archivelist_link()\r
74          * Create a link to an archive list\r
75          * \r
76          * @static\r
77          * @param $blogid       blog id\r
78          * @param $extra        extra parameter\r
79          */\r
80         static public function create_archivelist_link($blogid = '', $extra = '') {\r
81                 return self::create_link('archivelist', array('blogid' => $blogid, 'extra' => $extra) );\r
82         }\r
83 \r
84         /**\r
85          * Link::create_blogid_link()\r
86          * Create a link to a blog\r
87          * \r
88          * @static\r
89          * @param $blogid       blog id\r
90          * @param $extra        extra parameter\r
91          */\r
92         static public function create_blogid_link($blogid, $params = '') {\r
93                 return self::create_link('blog', array('blogid' => $blogid, 'extra' => $params) );\r
94         }\r
95 \r
96         /**\r
97          * Link::create_link()\r
98          * Create a link\r
99          * \r
100          * Universell function that creates link of different types (like item, blog ...)\r
101          * and with an array of parameters\r
102          * \r
103          * @static\r
104          * @param $type         type of the link\r
105          * @param $params       array with parameters\r
106          */\r
107         static public function create_link($type, $params) {\r
108                 global $manager, $CONF;\r
109         \r
110                 $generatedURL = '';\r
111                 $usePathInfo = ($CONF['URLMode'] == 'pathinfo');\r
112         \r
113                 // ask plugins first\r
114                 $created = false;\r
115         \r
116                 if ($usePathInfo)\r
117                 {\r
118                         $manager->notify(\r
119                                 'GenerateURL',\r
120                                 array(\r
121                                         'type' => $type,\r
122                                         'params' => $params,\r
123                                         'completed' => &$created,\r
124                                         'url' => &$url\r
125                                 )\r
126                         );\r
127                 }\r
128         \r
129                 // if a plugin created the URL, return it\r
130                 if ($created)\r
131                 {\r
132                         return $url;\r
133                 }\r
134         \r
135                 // default implementation\r
136                 switch ($type) {\r
137                         case 'item':\r
138                                 if ($usePathInfo) {\r
139                                         $url = $CONF['ItemURL'] . '/' . $CONF['ItemKey'] . '/' . $params['itemid'];\r
140                                 } else {\r
141                                         $url = $CONF['ItemURL'] . '?itemid=' . $params['itemid'];\r
142                                 }\r
143                                 break;\r
144         \r
145                         case 'member':\r
146                                 if ($usePathInfo) {\r
147                                         $url = $CONF['MemberURL'] . '/' . $CONF['MemberKey'] . '/' . $params['memberid'];\r
148                                 } else {\r
149                                         $url = $CONF['MemberURL'] . '?memberid=' . $params['memberid'];\r
150                                 }\r
151                                 break;\r
152         \r
153                         case 'category':\r
154                                 if ($usePathInfo) {\r
155                                         $url = $CONF['CategoryURL'] . '/' . $CONF['CategoryKey'] . '/' . $params['catid'];\r
156                                 } else {\r
157                                         $url = $CONF['CategoryURL'] . '?catid=' . $params['catid'];\r
158                                 }\r
159                                 break;\r
160         \r
161                         case 'archivelist':\r
162                                 if (!$params['blogid']) {\r
163                                         $params['blogid'] = $CONF['DefaultBlog'];\r
164                                 }\r
165         \r
166                                 if ($usePathInfo) {\r
167                                         $url = $CONF['ArchiveListURL'] . '/' . $CONF['ArchivesKey'] . '/' . $params['blogid'];\r
168                                 } else {\r
169                                         $url = $CONF['ArchiveListURL'] . '?archivelist=' . $params['blogid'];\r
170                                 }\r
171                                 break;\r
172         \r
173                         case 'archive':\r
174                                 if ($usePathInfo) {\r
175                                         $url = $CONF['ArchiveURL'] . '/' . $CONF['ArchiveKey'] . '/'.$params['blogid'].'/' . $params['archive'];\r
176                                 } else {\r
177                                         $url = $CONF['ArchiveURL'] . '?blogid='.$params['blogid'].'&amp;archive=' . $params['archive'];\r
178                                 }\r
179                                 break;\r
180         \r
181                         case 'blog':\r
182                                 if ($usePathInfo) {\r
183                                         $url = $CONF['BlogURL'] . '/' . $CONF['BlogKey'] . '/' . $params['blogid'];\r
184                                 } else {\r
185                                         $url = $CONF['BlogURL'] . '?blogid=' . $params['blogid'];\r
186                                 }\r
187                                 break;\r
188                 }\r
189         \r
190                 return Link::add_link_params($url, (isset($params['extra'])? $params['extra'] : null));\r
191         }\r
192         \r
193         static private function add_link_params($link, $params)\r
194         {\r
195                 global $CONF;\r
196         \r
197                 if (is_array($params) ) {\r
198         \r
199                         if ($CONF['URLMode'] == 'pathinfo') {\r
200         \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
206                                         {\r
207                                                 $link .= '/' . $param . '/' . urlencode($value);\r
208                                         } else {\r
209                                                 switch ($param) {\r
210                                                         case 'itemid':\r
211                                                                 $link .= '/' . $CONF['ItemKey'] . '/' . urlencode($value);\r
212                                                         break;\r
213                                                         case 'memberid':\r
214                                                                 $link .= '/' . $CONF['MemberKey'] . '/' . urlencode($value);\r
215                                                         break;\r
216                                                         case 'catid':\r
217                                                                 $link .= '/' . $CONF['CategoryKey'] . '/' . urlencode($value);\r
218                                                         break;\r
219                                                         case 'archivelist':\r
220                                                                 $link .= '/' . $CONF['ArchivesKey'] . '/' . urlencode($value);\r
221                                                         break;\r
222                                                         case 'archive':\r
223                                                                 $link .= '/' . $CONF['ArchiveKey'] . '/' . urlencode($value);\r
224                                                         break;\r
225                                                         case 'blogid':\r
226                                                                 $link .= '/' . $CONF['BlogKey'] . '/' . urlencode($value);\r
227                                                         break;\r
228                                                         default:\r
229                                                                 $link .= '/' . $param . '/' . urlencode($value);\r
230                                                         break;\r
231                                                 }\r
232                                         }\r
233                                 }\r
234         \r
235                         } else {\r
236         \r
237                                 foreach ($params as $param => $value) {\r
238                                         $link .= '&amp;' . $param . '=' . urlencode($value);\r
239                                 }\r
240         \r
241                         }\r
242                 }\r
243         \r
244                 return $link;\r
245         }\r
246 \r
247         /**\r
248          * Link::create_blog_link()\r
249          * Create an link to a blog\r
250          * \r
251          * This function considers the URLMode of the blog\r
252          * \r
253          * @static\r
254          * @param $url          url\r
255          * @param $params       parameters\r
256          */\r
257         static public function create_blog_link($url, $params) {\r
258                 global $CONF;\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
265                         }\r
266                 } elseif ($CONF['URLMode'] == 'pathinfo' && i18n::substr($url, -1) == '/') {\r
267                         $url = i18n::substr($url, 0, -1);\r
268                 }\r
269                 return addLinkParams($url, $params);\r
270         }\r
271 \r
272 }\r