OSDN Git Service

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