Revision | 32c7cdee02d7c2d5e71a384ad7377bcbf26b0b3d (tree) |
---|---|
Zeit | 2017-06-13 03:40:00 |
Autor | umorigu <umorigu@gmai...> |
Commiter | umorigu |
BugTrack/782 Numbering tracker issue naturally : the biggest one + 1
@@ -18,6 +18,7 @@ | ||
18 | 18 | /wiki.en/*.txt |
19 | 19 | |
20 | 20 | /nbproject/** |
21 | +/.vscode/ | |
21 | 22 | |
22 | 23 | # Composer files |
23 | 24 | /vendor/ |
@@ -1,7 +1,7 @@ | ||
1 | 1 | <?php |
2 | 2 | // PukiWiki - Yet another WikiWikiWeb clone |
3 | 3 | // tracker.inc.php |
4 | -// Copyright 2003-2016 PukiWiki Development Team | |
4 | +// Copyright 2003-2017 PukiWiki Development Team | |
5 | 5 | // License: GPL v2 or (at your option) any later version |
6 | 6 | // |
7 | 7 | // Issue tracker plugin (See Also bugtrack plugin) |
@@ -121,26 +121,30 @@ function plugin_tracker_action() | ||
121 | 121 | 'body'=>'page name ('.htmlsc($base).') is not valid.' |
122 | 122 | ); |
123 | 123 | } |
124 | - $num = 0; | |
125 | 124 | $name = (array_key_exists('_name',$post)) ? $post['_name'] : ''; |
126 | - if (array_key_exists('_page',$post)) | |
127 | - { | |
128 | - $page = $real = $post['_page']; | |
129 | - } | |
130 | - else | |
131 | - { | |
132 | - $real = is_pagename($name) ? $name : ++$num; | |
133 | - $page = get_fullname('./'.$real,$base); | |
134 | - } | |
135 | - if (!is_pagename($page)) | |
136 | - { | |
137 | - $page = $base; | |
138 | - } | |
139 | - | |
140 | - while (is_page($page)) | |
141 | - { | |
142 | - $real = ++$num; | |
143 | - $page = "$base/$real"; | |
125 | + $_page = (array_key_exists('_page',$post)) ? $post['_page'] : ''; | |
126 | + if (is_pagename($_page)) { | |
127 | + // Create _page page if _page is in parameters | |
128 | + $page = $real = $_page; | |
129 | + } else if (is_pagename($name)) { | |
130 | + // Create "$base/$name" page if _name is in parameters | |
131 | + $real = $name; | |
132 | + $page = get_fullname('./' . $name, $base); | |
133 | + } else { | |
134 | + $page = ''; | |
135 | + } | |
136 | + if (!is_pagename($page) || is_page($page)) { | |
137 | + // Need new page name => Get last article number + 1 | |
138 | + $page_list = plugin_tracker_get_page_list($base, false); | |
139 | + usort($page_list, '_plugin_tracker_list_paganame_compare'); | |
140 | + if (count($page_list) === 0) { | |
141 | + $num = 1; | |
142 | + } else { | |
143 | + $latest_page = $page_list[count($page_list) - 1]['name']; | |
144 | + $num = intval(substr($latest_page, strlen($base) + 1)) + 1; | |
145 | + } | |
146 | + $real = '' . $num; | |
147 | + $page = $base . '/' . $num; | |
144 | 148 | } |
145 | 149 | // ページデータを生成 |
146 | 150 | $postdata = plugin_tracker_get_source($source); |
@@ -187,6 +191,35 @@ function plugin_tracker_action() | ||
187 | 191 | header('Location: ' . get_script_uri() . '?' . $r_page); |
188 | 192 | exit; |
189 | 193 | } |
194 | + | |
195 | +/** | |
196 | + * Page_list comparator | |
197 | + */ | |
198 | +function _plugin_tracker_list_paganame_compare($a, $b) | |
199 | +{ | |
200 | + return strnatcmp($a['name'], $b['name']); | |
201 | +} | |
202 | + | |
203 | +/** | |
204 | + * Get page list for "$page/" | |
205 | + */ | |
206 | +function plugin_tracker_get_page_list($page, $needs_filetime) { | |
207 | + $page_list = array(); | |
208 | + $pattern = $page . '/'; | |
209 | + $pattern_len = strlen($pattern); | |
210 | + foreach (get_existpages() as $p) { | |
211 | + if (strncmp($p, $pattern, $pattern_len) === 0 && pkwk_ctype_digit(substr($p, $pattern_len))) { | |
212 | + if ($needs_filetime) { | |
213 | + $page_list[] = array('name'=>$p,'filetime'=>get_filetime($p)); | |
214 | + } else { | |
215 | + $page_list[] = array('name'=>$p); | |
216 | + } | |
217 | + } | |
218 | + } | |
219 | + return $page_list; | |
220 | +} | |
221 | + | |
222 | + | |
190 | 223 | /* |
191 | 224 | function plugin_tracker_inline() |
192 | 225 | { |
@@ -1,6 +1,8 @@ | ||
1 | 1 | <?php |
2 | 2 | // PukiWiki - Yet another WikiWikiWeb clone |
3 | -// $Id: tracker_list.inc.php,v 1.2 2005/01/23 08:30:14 henoheno Exp $ | |
3 | +// tracker_list.inc.php | |
4 | +// Copyright 2003-2017 PukiWiki Development Team | |
5 | +// License: GPL v2 or (at your option) any later version | |
4 | 6 | // |
5 | 7 | // Issue tracker list plugin (a part of tracker plugin) |
6 | 8 |
@@ -11,4 +13,3 @@ function plugin_tracker_list_init() | ||
11 | 13 | if (function_exists('plugin_tracker_init')) |
12 | 14 | plugin_tracker_init(); |
13 | 15 | } |
14 | -?> |