OSDN Git Service

BugTrack/2513 Bold style Table cell (BOLD:...)
[pukiwiki/pukiwiki.git] / plugin / new.inc.php
index 219576f..957d5fd 100644 (file)
@@ -1,13 +1,23 @@
 <?php
 // PukiWiki - Yet another WikiWikiWeb clone.
-// $Id: new.inc.php,v 1.6 2004/12/25 05:56:50 henoheno Exp $
+// new.inc.php
+// Copyright  2003-2018 PukiWiki Development Team
+// License: GPL v2 or (at your option) any later version
 //
 // New! plugin
+//
+// Usage:
+//     &new([nodate]){date};     // Check the date string
+//     &new(pagename[,nolink]);  // Check the pages's timestamp
+//     &new(pagename/[,nolink]);
+//             // Check multiple pages started with 'pagename/',
+//             // and show the latest one
 
-define('PLUGIN_NEW_FORMAT', '<span class="comment_date">%s</span>');
+define('PLUGIN_NEW_DATE_FORMAT', '<span class="comment_date">%s</span>');
 
 function plugin_new_init()
 {
+       // Backword compatibility: Keep plugin_new_init() and the messages
        // Elapsed time => New! message with CSS
        $messages['_plugin_new_elapses'] = array(
                60 * 60 * 24 * 1 => ' <span class="new1" title="%s">New!</span>',  // 1day
@@ -17,56 +27,71 @@ function plugin_new_init()
 
 function plugin_new_inline()
 {
-       global $vars, $_plugin_new_elapses;
+       global $vars;
 
        $retval = '';
        $args = func_get_args();
-       $date = array_pop($args); // {date} always exists
-
+       $date = strip_autolink(array_pop($args)); // {date} always exists
        if($date !== '') {
-               $usage = '&new([nodate]){date};';
-               if (func_num_args() > 2) return $usage;
-               $timestamp = strtotime($date);
-       } else {
-               $usage = '&new(pagename[,nolink]);';
-               if (func_num_args() > 3) return $usage;
-       }
-
-       if (isset($timestamp) && $timestamp !== -1) {
-               // &new([nodate]){date};
+               // Show 'New!' message by the time of the $date string
+               if (func_num_args() > 2) return '&new([nodate]){date};';
+               $timestamp = -1;
+               $dm = null;
+               if (preg_match('/^\D*(\d{4})\D+(\d{1,2})\D+(\d{1,2})\D+(\d{1,2}:\d{2}:\d{2})\D*$/', $date, $dm)) {
+                       $iso8601_date = $dm[1]
+                               . '-' . substr('0' . $dm[2], -2)
+                               . '-' . substr('0' . $dm[3], -2)
+                               . ' ' . $dm[4];
+                       $timestamp = strtotime($iso8601_date);
+               } else {
+                       $timestamp = strtotime($date);
+               }
+               if ($timestamp === -1 || $timestamp === FALSE) {
+                       return '&new([nodate]){date}: Invalid date string;';
+               }
                $timestamp -= ZONETIME;
-               $nodate = in_array('nodate', $args);
-               $retval = $nodate ? '' : htmlspecialchars($date);
+
+               $retval = in_array('nodate', $args) ? '' : htmlsc($date);
        } else {
-               // &new(pagename[,nolink]);
-               $timestamp = 0;
+               // Show 'New!' message by the timestamp of the page
+               if (func_num_args() > 3) return '&new(pagename[,nolink]);';
+
                $name = strip_bracket(! empty($args) ? array_shift($args) : $vars['page']);
                $page = get_fullname($name, $vars['page']);
                $nolink = in_array('nolink', $args);
+
                if (substr($page, -1) == '/') {
-                       foreach (preg_grep('/^' . preg_quote($page, '/') . '/',
-                           get_existpages()) as $page) {
+                       // Check multiple pages started with "$page"
+                       $timestamp = 0;
+                       $regex = '/^' . preg_quote($page, '/') . '/';
+                       foreach (preg_grep($regex, get_existpages()) as $page) {
+                               // Get the latest pagename and its timestamp
                                $_timestamp = get_filetime($page);
                                if ($timestamp < $_timestamp) {
-                                       // Show the latest page
-                                       $retval    = $nolink ? '' : make_pagelink($page);
                                        $timestamp = $_timestamp;
+                                       $retval    = $nolink ? '' : make_pagelink($page);
                                }
                        }
-               } else if (is_page($page)) {
-                       $retval    = $nolink ? '' : make_pagelink($page, $name);
-                       $timestamp = get_filetime($page);
+                       if ($timestamp == 0)
+                               return '&new(pagename/[,nolink]): No such pages;';
+               } else {
+                       // Check a page
+                       if (is_page($page)) {
+                               $timestamp = get_filetime($page);
+                               $retval    = $nolink ? '' : make_pagelink($page, $name);
+                       } else {
+                               return '&new(pagename[,nolink]): No such page;';
+                       }
                }
-               if ($timestamp == 0) return '';
        }
-
-       $erapse = UTIME - $timestamp;
-       foreach ($_plugin_new_elapses as $limit=>$tag) {
-               if ($erapse <= $limit) {
-                       $retval .= sprintf($tag, get_passage($timestamp));
-                       break;
-               }
+       if($date !== '') {
+               // 1 day hot: <span class="new1">New!</span>
+               // 5 days hot: <span class="new5">New</span>
+               $retval .= '<span class="__plugin_new" data-mtime="' . get_date_atom($timestamp + LOCALZONE) . '"></span>';
+               // Show a date string
+               return sprintf(PLUGIN_NEW_DATE_FORMAT, $retval);
+       } else {
+               // Show a page name
+               return $retval;
        }
-       return sprintf(PLUGIN_NEW_FORMAT, $retval);
 }
-?>