// PukiWiki - Yet another WikiWikiWeb clone.
// func.php
// Copyright
-// 2002-2017 PukiWiki Development Team
+// 2002-2019 PukiWiki Development Team
// 2001-2002 Originally written by yu-ji
// License: GPL v2 or (at your option) any later version
//
return $body;
}
+function _mb_convert_kana__enable($str, $option) {
+ return mb_convert_kana($str, $option, SOURCE_ENCODING);
+}
+function _mb_convert_kana__none($str, $option) {
+ return $str;
+}
+
// Expand all search-words to regexes and push them into an array
function get_search_words($words = array(), $do_escape = FALSE)
{
if (! isset($init)) {
// function: mb_convert_kana() is for Japanese code only
if (LANG == 'ja' && function_exists('mb_convert_kana')) {
- $mb_convert_kana = create_function('$str, $option',
- 'return mb_convert_kana($str, $option, SOURCE_ENCODING);');
+ $mb_convert_kana = '_mb_convert_kana__enable';
} else {
- $mb_convert_kana = create_function('$str, $option',
- 'return $str;');
+ $mb_convert_kana = '_mb_convert_kana__none';
}
if (SOURCE_ENCODING == 'EUC-JP') {
// Perl memo - Correct pattern-matching with EUC-JP
return $regex; // For all words
}
+function get_passage_date_html_span($date_atom)
+{
+ return '<span class="page_passage" data-mtime="' . $date_atom . '"></span>';
+}
+
+function get_passage_mtime_html_span($mtime)
+{
+ $date_atom = get_date_atom($mtime);
+ return get_passage_date_html_span($date_atom);
+}
+
+/**
+ * Get passage span html
+ *
+ * @param $page
+ */
+function get_passage_html_span($page)
+{
+ $date_atom = get_page_date_atom($page);
+ return get_passage_date_html_span($date_atom);
+}
+
+function get_link_passage_class() {
+ return 'link_page_passage';
+}
+
+/**
+ * Get page link general attributes
+ * @param $page
+ * @return array('data_mtime' => page mtime or null, 'class' => additinal classes)
+ */
+function get_page_link_a_attrs($page)
+{
+ global $show_passage;
+ if ($show_passage) {
+ $pagemtime = get_page_date_atom($page);
+ return array(
+ 'data_mtime' => $pagemtime,
+ 'class' => get_link_passage_class(),
+ );
+ }
+ return array(
+ 'data_mtime' => '',
+ 'class' => ''
+ );
+}
+
+/**
+ * Get page link general attributes from filetime
+ * @param $filetime
+ * @return array('data_mtime' => page mtime or null, 'class' => additinal classes)
+ */
+function get_filetime_a_attrs($filetime)
+{
+ global $show_passage;
+ if ($show_passage) {
+ $pagemtime = get_date_atom($filetime + LOCALZONE);
+ return array(
+ 'data_mtime' => $pagemtime,
+ 'class' => get_link_passage_class(),
+ );
+ }
+ return array(
+ 'data_mtime' => '',
+ 'class' => ''
+ );
+}
+
// 'Search' main function
function do_search($word, $type = 'AND', $non_format = FALSE, $base = '')
{
foreach (array_keys($pages) as $page) {
$r_page = rawurlencode($page);
$s_page = htmlsc($page);
- $passage = $show_passage ? ' ' . get_passage(get_filetime($page)) : '';
+ $passage = $show_passage ? ' ' . get_passage_html_span($page) : '';
$retval .= ' <li><a href="' . get_base_uri() . '?cmd=read&page=' .
$r_page . '&word=' . $r_word . '">' . $s_page .
'</a>' . $passage . '</li>' . "\n";
function _pagename_urlencode_callback($matches)
{
- return rawurlencode($matches[0]);
+ return urlencode($matches[0]);
}
function pagename_urlencode($page)
} else {
$href = $script . '?cmd=' . $cmd . '&page=';
}
-
+ uasort($pages, 'strnatcmp');
foreach($pages as $file=>$page) {
$r_page = pagename_urlencode($page);
$s_page = htmlsc($page, ENT_QUOTES);
- $passage = get_pg_passage($page);
-
$str = ' <li><a href="' . $href . $r_page . '">' .
- $s_page . '</a>' . $passage;
-
+ $s_page . '</a> ' . get_pg_passage($page);
if ($withfilename) {
$s_file = htmlsc($file);
$str .= "\n" . ' <ul><li>' . $s_file . '</li></ul>' .
$head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? strtoupper($matches[1]) :
(preg_match('/^([ -~])/', $page) ? $symbol : $other);
}
-
$list[$head][$page] = $str;
}
- uksort($pages, 'strnatcmp');
+ uksort($list, 'strnatcmp');
$cnt = 0;
$arr_index = array();
$retval .= '<ul>' . "\n";
- foreach ($list as $head=>$pages) {
+ foreach ($list as $head=>$sub_pages) {
if ($head === $symbol) {
$head = $_msg_symbol;
} else if ($head === $other) {
'"><strong>' . $head . '</strong></a>' . "\n" .
' <ul>' . "\n";
}
- ksort($pages, SORT_STRING);
- $retval .= join("\n", $pages);
+ $retval .= join("\n", $sub_pages);
if ($list_index)
$retval .= "\n </ul>\n </li>\n";
}
return $paren ? '(' . $date . ')' : $date;
}
+/**
+ * Format date in DATE_ATOM format.
+ */
+function get_date_atom($timestamp)
+{
+ // Compatible with DATE_ATOM format
+ // return date(DATE_ATOM, $timestamp);
+ $zmin = abs(LOCALZONE / 60);
+ return date('Y-m-d\TH:i:s', $timestamp) . sprintf('%s%02d:%02d',
+ (LOCALZONE < 0 ? '-' : '+') , $zmin / 60, $zmin % 60);
+}
+
// Get short string of the passage, 'N seconds/minutes/hours/days/years ago'
function get_passage($time, $paren = TRUE)
{
}
/**
+ * Get JSON string with htmlspecialchars().
+ */
+function htmlsc_json($obj)
+{
+ // json_encode: PHP 5.2+
+ // JSON_UNESCAPED_UNICODE: PHP 5.4+
+ // JSON_UNESCAPED_SLASHES: PHP 5.4+
+ if (defined('JSON_UNESCAPED_UNICODE')) {
+ return htmlsc(json_encode($obj,
+ JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
+ }
+ return '';
+}
+
+/**
* Get redirect page name on Page Redirect Rules
*
* This function returns exactly false if it doesn't need redirection.