OSDN Git Service

BugTrack2/122: tempnam() fails when open_basedir is specified in php.ini
[pukiwiki/pukiwiki.git] / plugin / yetlist.inc.php
index 42cefc3..bf91d86 100644 (file)
-<?
+<?php
+// PukiWiki - Yet another WikiWikiWeb clone
+// $Id: yetlist.inc.php,v 1.23 2005/06/18 10:44:00 teanan Exp $
+//
+// Yet list plugin - Show a dangling link list (not yet created)
+
 function plugin_yetlist_action()
 {
-       global $script,$InterWikiName,$WikiName,$BracketName,$defaultpage,$_gwbn;
-       
-       if ($dir = @opendir(DATA_DIR))
-       {
-               while($file = readdir($dir))
-               {
-                       if($file == ".." || $file == ".") continue;
-                       $cnt++;
-                       $page = decode(trim(preg_replace("/\.txt$/"," ",$file)));
-                       $data[$page] = file(DATA_DIR.$file);
+       global $script;
+       global $_title_yetlist, $_err_notexist;
+
+       $retval = array(
+               'msg' => $_title_yetlist,
+               'body' => ''
+       );
+
+       $refer = array();
+       $pages = array_diff(get_existpages(CACHE_DIR, '.ref'), get_existpages());
+       foreach ($pages as $page) {
+               foreach (file(CACHE_DIR . encode($page) . '.ref') as $line) {
+                       list($_page) = explode("\t", rtrim($line));
+                       $refer[$page][] = $_page;
                }
-               closedir($dir);
        }
 
-       $ret["body"] = "<ul>\n";
-
-       foreach($data as $name => $lines)
-       {
-               $lines = preg_replace("/^\s(.*)$/","",$lines);
-               
-               $line = join("\n",$lines);
-               
-               preg_replace("/
-               (
-                       (\[\[([^\]]+)\:(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\]\])
-                       |
-                       (\[(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\s([^\]]+)\])
-                       |
-                       (https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)
-                       |
-                       ([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)
-                       |
-                       (\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\])
-                       |
-                       ($InterWikiName)
-                       |
-                       ($BracketName)
-                       |
-                       ($WikiName)
-               )/ex","check_link('$1','$name')",$line);
+       if (empty($refer)) {
+               $retval['body'] = $_err_notexist;
+               return $retval;
        }
-       
-       foreach($_gwbn as $tmp)
-       {
-               $wbn = $tmp["name"];
-               $name = $tmp["refer"];
-       
-               if(preg_match("/^[^>]+>([^\]]+)/",$wbn,$match))
-               {
-                       $wbn = $match[1];
-                       if(!preg_match("/($WikiName)|($BracketName)/",$wbn))
-                               $wbn = "[[$wbn]]";
-               }
-               
-               $keep = $wbn;
-               
-               if(preg_match("/^\[\[\.\/([^\]]*)\]\]/",$wbn,$match))
-               {
-                       if(!$match[1])
-                               $wbn = $name;
-                       else
-                               $wbn = "[[".strip_bracket($name)."/$match[1]]]";
-               }
-               else if(preg_match("/^\[\[\..\/([^\]]+)\]\]/",$wbn,$match))
-               {
-                       for($i=0;$i<substr_count($keep,"../");$i++)
-                               $wbn = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($name));
 
-                       if(!preg_match("/^($BracketName)|($WikiName)$/",$wbn))
-                               $wbn = "[[$wbn]]";
-                       
-                       if($wbn==$name)
-                               $wbn = "[[$match[1]]]";
-                       else
-                               $wbn = "[[".strip_bracket($wbn)."/$match[1]]]";
-               }
-               else if($wbn == "[[../]]")
-               {
-                       $wbn = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($name));
-                       
-                       if(!preg_match("/^($BracketName)|($WikiName)$/",$wbn))
-                               $wbn = "[[$wbn]]";
-                       if($wbn==$name)
-                               $wbn = $defaultpage;
-               }
+       ksort($refer, SORT_STRING);
 
-               if(!is_page($wbn))
-               {
-                       $lists[strip_bracket($wbn)] = strip_bracket($wbn);
-                       $refer[strip_bracket($wbn)][$name] = $name;
-               }
-       }
+       foreach ($refer as $page=>$refs) {
+               $r_page = rawurlencode($page);
+               $s_page = htmlspecialchars($page);
+
+               $link_refs = array();
+               foreach (array_unique($refs) as $_refer) {
+                       $r_refer = rawurlencode($_refer);
+                       $s_refer = htmlspecialchars($_refer);
 
-       ksort($lists);
-       foreach($lists as $wbn)
-       {
-               $url = $wbn;
-               if(!preg_match("/($WikiName)|($BracketName)/",$url))
-                       $url = "[[$url]]";
-               $url = rawurlencode($url);
-               
-               $link_ref = "";
-               foreach($refer[$wbn] as $refs)
-               {
-                       $ref = strip_bracket($refs);
-                       $refurl = rawurlencode($refs);
-                       
-                       $link_ref .= " <a href=\"$script?$refurl\">$ref</a>";
+                       $link_refs[] = "<a href=\"$script?$r_refer\">$s_refer</a>";
                }
-               $link_ref = trim($link_ref);
-               
-               $ret["body"] .= "<li><a href=\"$script?cmd=edit&page=$url&refer=$refurl\">$wbn</a> <i>($link_ref)</i></li>\n";
+               $link_ref = join(' ', $link_refs);
+
+               if (PKWK_READONLY) {
+                       $href = $s_page;
+               } else {
+                       // Show edit link
+                       // »²¾È¸µ¥Ú¡¼¥¸¤¬Ê£¿ô¤¢¤Ã¤¿¾ì¹ç¡¢refer¤ÏºÇ¸å¤Î¥Ú¡¼¥¸¤ò»Ø¤¹(¤¤¤¤¤Î¤«¤Ê)
+                       $href = '<a href="' . $script . '?cmd=edit&amp;page=' . $r_page .
+                               '&amp;refer=' . $r_refer . '">' . $s_page . '</a>';
+               }
+               $retval['body'] .= '<li>' . $href . ' <em>(' . $link_ref . ')</em></li>' . "\n";
        }
 
-
-       $ret["body"] .= "</ul>\n";
-
-       $ret["msg"] = "List of pages,are not made yet";
-       
-       return $ret;
-}
-
-function check_link($name,$refer)
-{
-       global $BracketName,$WikiName,$InterWikiName,$_gwbn;
-
-       if(preg_match("/^\[\[([^\]]+)\:((https?|ftp|news)([^\]]+))\]\]$/",$name))
-       {
-               return;
-       }
-       else if(preg_match("/^\[((https?|ftp|news)([^\]\s]+))\s([^\]]+)\]$/",$name))
-       {
-               return;
-       }
-       else if(preg_match("/^(https?|ftp|news).*?(\.gif|\.png|\.jpeg|\.jpg)?$/",$name))
-       {
-               return;
-       }
-       else if(preg_match("/^\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\]/",$name))
-       {
-               return;
-       }
-       else if(preg_match("/^([[:alnum:]\-_]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)/",$name))
-       {
-               return;
-       }
-       else if(preg_match("/^($InterWikiName)$/",$name))
-       {
-               return;
-       }
-       else if(preg_match("/^($BracketName)|($WikiName)$/",$name))
-       {
-               $_gwbn[$name]["name"] = $name;
-               $_gwbn[$name]["refer"] = $refer;
-               return;
-       }
-       else
-       {
-               return;
+       if ($retval['body'] != '') {
+               $retval['body'] = "<ul>\n" . $retval['body'] . "</ul>\n";
        }
+
+       return $retval;
 }
 ?>