OSDN Git Service

主だったスクリプトの改行コードを統一
[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 1674 2012-02-26 05:25:02Z sakamocchi $\r
21  */\r
22 class LINK\r
23 {\r
24 \r
25         /**\r
26          * LINK::create_item_link()\r
27          * Create a link to an item\r
28          * @static\r
29          * @param $itemid       item id\r
30          * @param $extra        extra parameter\r
31          */\r
32         static public function create_item_link($itemid, $extra = '') {\r
33                 return self::create_link('item', array('itemid' => $itemid, 'extra' => $extra) );\r
34         }\r
35 \r
36         /**\r
37          * LINK::create_member_link()\r
38          * Create a link to a member\r
39          * \r
40          * @static\r
41          * @param $memberid     member id\r
42          * @param $extra        extra parameter\r
43          */\r
44         static public function create_member_link($memberid, $extra = '') {\r
45                 return self::create_link('member', array('memberid' => $memberid, 'extra' => $extra) );\r
46         }\r
47         \r
48         /**\r
49          * LINK::create_category_link()\r
50          * Create a link to a category\r
51          * \r
52          * @static\r
53          * @param $catid        category id\r
54          * @param $extra        extra parameter\r
55          */\r
56         static public function create_category_link($catid, $extra = '') {\r
57                 return self::create_link('category', array('catid' => $catid, 'extra' => $extra) );\r
58         }\r
59 \r
60         /**\r
61          * LINK::cteate_archive_link()\r
62          * Create a link to an archive\r
63          * \r
64          * @static\r
65          * @param $blogid       blog id\r
66          * @param $archive      archive identifier\r
67          * @param $extra        extra parameter\r
68          */\r
69         static public function create_archive_link($blogid, $archive, $extra = '') {\r
70                 return self::create_link('archive', array('blogid' => $blogid, 'archive' => $archive, 'extra' => $extra) );\r
71         }\r
72 \r
73         /**\r
74          * LINK::create_archivelist_link()\r
75          * Create a link to an archive list\r
76          * \r
77          * @static\r
78          * @param $blogid       blog id\r
79          * @param $extra        extra parameter\r
80          */\r
81         static public function create_archivelist_link($blogid = '', $extra = '') {\r
82                 return self::create_link('archivelist', array('blogid' => $blogid, 'extra' => $extra) );\r
83         }\r
84 \r
85         /**\r
86          * LINK::create_blogid_link()\r
87          * Create a link to a blog\r
88          * \r
89          * @static\r
90          * @param $blogid       blog id\r
91          * @param $extra        extra parameter\r
92          */\r
93         static public function create_blogid_link($blogid, $params = '') {\r
94                 return self::create_link('blog', array('blogid' => $blogid, 'extra' => $params) );\r
95         }\r
96 \r
97         /**\r
98          * LINK::create_link()\r
99          * Create a link\r
100          * \r
101          * Universell function that creates link of different types (like item, blog ...)\r
102          * and with an array of parameters\r
103          * \r
104          * @static\r
105          * @param $type         type of the link\r
106          * @param $params       array with parameters\r
107          */\r
108         static public function create_link($type, $params) {\r
109                 global $manager, $CONF;\r
110         \r
111                 $generatedURL = '';\r
112                 $usePathInfo = ($CONF['URLMode'] == 'pathinfo');\r
113         \r
114                 // ask plugins first\r
115                 $created = false;\r
116         \r
117                 if ($usePathInfo)\r
118                 {\r
119                         $manager->notify(\r
120                                 'GenerateURL',\r
121                                 array(\r
122                                         'type' => $type,\r
123                                         'params' => $params,\r
124                                         'completed' => &$created,\r
125                                         'url' => &$url\r
126                                 )\r
127                         );\r
128                 }\r
129         \r
130                 // if a plugin created the URL, return it\r
131                 if ($created)\r
132                 {\r
133                         return $url;\r
134                 }\r
135         \r
136                 // default implementation\r
137                 switch ($type) {\r
138                         case 'item':\r
139                                 if ($usePathInfo) {\r
140                                         $url = $CONF['ItemURL'] . '/' . $CONF['ItemKey'] . '/' . $params['itemid'];\r
141                                 } else {\r
142                                         $url = $CONF['ItemURL'] . '?itemid=' . $params['itemid'];\r
143                                 }\r
144                                 break;\r
145         \r
146                         case 'member':\r
147                                 if ($usePathInfo) {\r
148                                         $url = $CONF['MemberURL'] . '/' . $CONF['MemberKey'] . '/' . $params['memberid'];\r
149                                 } else {\r
150                                         $url = $CONF['MemberURL'] . '?memberid=' . $params['memberid'];\r
151                                 }\r
152                                 break;\r
153         \r
154                         case 'category':\r
155                                 if ($usePathInfo) {\r
156                                         $url = $CONF['CategoryURL'] . '/' . $CONF['CategoryKey'] . '/' . $params['catid'];\r
157                                 } else {\r
158                                         $url = $CONF['CategoryURL'] . '?catid=' . $params['catid'];\r
159                                 }\r
160                                 break;\r
161         \r
162                         case 'archivelist':\r
163                                 if (!$params['blogid']) {\r
164                                         $params['blogid'] = $CONF['DefaultBlog'];\r
165                                 }\r
166         \r
167                                 if ($usePathInfo) {\r
168                                         $url = $CONF['ArchiveListURL'] . '/' . $CONF['ArchivesKey'] . '/' . $params['blogid'];\r
169                                 } else {\r
170                                         $url = $CONF['ArchiveListURL'] . '?archivelist=' . $params['blogid'];\r
171                                 }\r
172                                 break;\r
173         \r
174                         case 'archive':\r
175                                 if ($usePathInfo) {\r
176                                         $url = $CONF['ArchiveURL'] . '/' . $CONF['ArchiveKey'] . '/'.$params['blogid'].'/' . $params['archive'];\r
177                                 } else {\r
178                                         $url = $CONF['ArchiveURL'] . '?blogid='.$params['blogid'].'&amp;archive=' . $params['archive'];\r
179                                 }\r
180                                 break;\r
181         \r
182                         case 'blog':\r
183                                 if ($usePathInfo) {\r
184                                         $url = $CONF['BlogURL'] . '/' . $CONF['BlogKey'] . '/' . $params['blogid'];\r
185                                 } else {\r
186                                         $url = $CONF['BlogURL'] . '?blogid=' . $params['blogid'];\r
187                                 }\r
188                                 break;\r
189                 }\r
190         \r
191                 return LINK::add_link_params($url, (isset($params['extra'])? $params['extra'] : null));\r
192         }\r
193         \r
194         static private function add_link_params($link, $params)\r
195         {\r
196                 global $CONF;\r
197         \r
198                 if (is_array($params) ) {\r
199         \r
200                         if ($CONF['URLMode'] == 'pathinfo') {\r
201         \r
202                                 foreach ($params as $param => $value) {\r
203                                         // change in 3.63 to fix problem where URL generated with extra params mike look like category/4/blogid/1\r
204                                         // but they should use the URL keys like this: category/4/blog/1\r
205                                         // if user wants old urls back, set $CONF['NoURLKeysInExtraParams'] = 1; in config.php\r
206                                         if (isset($CONF['NoURLKeysInExtraParams']) && $CONF['NoURLKeysInExtraParams'] == 1) \r
207                                         {\r
208                                                 $link .= '/' . $param . '/' . urlencode($value);\r
209                                         } else {\r
210                                                 switch ($param) {\r
211                                                         case 'itemid':\r
212                                                                 $link .= '/' . $CONF['ItemKey'] . '/' . urlencode($value);\r
213                                                         break;\r
214                                                         case 'memberid':\r
215                                                                 $link .= '/' . $CONF['MemberKey'] . '/' . urlencode($value);\r
216                                                         break;\r
217                                                         case 'catid':\r
218                                                                 $link .= '/' . $CONF['CategoryKey'] . '/' . urlencode($value);\r
219                                                         break;\r
220                                                         case 'archivelist':\r
221                                                                 $link .= '/' . $CONF['ArchivesKey'] . '/' . urlencode($value);\r
222                                                         break;\r
223                                                         case 'archive':\r
224                                                                 $link .= '/' . $CONF['ArchiveKey'] . '/' . urlencode($value);\r
225                                                         break;\r
226                                                         case 'blogid':\r
227                                                                 $link .= '/' . $CONF['BlogKey'] . '/' . urlencode($value);\r
228                                                         break;\r
229                                                         default:\r
230                                                                 $link .= '/' . $param . '/' . urlencode($value);\r
231                                                         break;\r
232                                                 }\r
233                                         }\r
234                                 }\r
235         \r
236                         } else {\r
237         \r
238                                 foreach ($params as $param => $value) {\r
239                                         $link .= '&amp;' . $param . '=' . urlencode($value);\r
240                                 }\r
241         \r
242                         }\r
243                 }\r
244         \r
245                 return $link;\r
246         }\r
247 \r
248         /**\r
249          * LINK::create_blog_link()\r
250          * Create an link to a blog\r
251          * \r
252          * This function considers the URLMode of the blog\r
253          * \r
254          * @static\r
255          * @param $url          url\r
256          * @param $params       parameters\r
257          */\r
258         static public function create_blog_link($url, $params) {\r
259                 global $CONF;\r
260                 if ($CONF['URLMode'] == 'normal') {\r
261                         if (i18n::strpos($url, '?') === FALSE && is_array($params)) {\r
262                                 $fParam = reset($params);\r
263                                 $fKey   = key($params);\r
264                                 array_shift($params);\r
265                                 $url .= '?' . $fKey . '=' . $fParam;\r
266                         }\r
267                 } elseif ($CONF['URLMode'] == 'pathinfo' && i18n::substr($url, -1) == '/') {\r
268                         $url = i18n::substr($url, 0, -1);\r
269                 }\r
270                 return addLinkParams($url, $params);\r
271         }\r
272 \r
273 }\r