OSDN Git Service

[[pukiwiki:BugTrack/107]] yetlistが、BracketNameをWikiNameとして表示してしまう - ぱんだ
[pukiwiki/pukiwiki.git] / plugin / yetlist.inc.php
1 <?
2 // $Id: yetlist.inc.php,v 1.5 2002/07/29 01:47:24 masui Exp $
3
4 function plugin_yetlist_action()
5 {
6         global $script,$InterWikiName,$WikiName,$BracketName,$defaultpage;
7         
8         if ($dir = @opendir(DATA_DIR))
9         {
10                 while($file = readdir($dir))
11                 {
12                         if($file == ".." || $file == ".") continue;
13                         $cnt++;
14                         $page = decode(trim(preg_replace("/\.txt$/"," ",$file)));
15                         $data[$page] = file(DATA_DIR.$file);
16                 }
17                 closedir($dir);
18         }
19
20         $ret["body"] = "<ul>\n";
21
22         foreach($data as $name => $lines)
23         {
24                 $lines = preg_replace("/^\s(.*)$/","",$lines);
25                 
26                 $line = join("\n",$lines);
27                 
28                 preg_replace("/
29                 (
30                         (\[\[([^\]]+)\:(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\]\])
31                         |
32                         (\[(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\s([^\]]+)\])
33                         |
34                         (https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)
35                         |
36                         ([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)
37                         |
38                         (\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\])
39                         |
40                         ($InterWikiName)
41                         |
42                         ($BracketName)
43                         |
44                         ($WikiName)
45                 )/ex","check_link('$1',\$name,\$_gwbn)",$line);
46         }
47         
48         foreach($_gwbn as $wbn => $refs_arr)
49         {
50
51                 foreach (array_unique($refs_arr) as $name)
52                 {
53
54                 if(preg_match("/^[^>]+>([^\]]+)/",$wbn,$match))
55                 {
56                         $wbn = $match[1];
57                         //ÊĤ¸¥Ö¥é¥±¥Ã¥È¤ÎÊä½¼¡£/^\[\[/¤Ç¤âɬÍ×½½Ê¬¤À¤¬Ç°¤Î¤¿¤á
58                         if(preg_match("/^\[\[[^\]]+$/",$wbn))
59                                 $wbn = "$wbn]]";
60                         if(!preg_match("/($WikiName)|($BracketName)/",$wbn))
61                                 $wbn = "[[$wbn]]";
62                 }
63                 
64                 $keep = $wbn;
65                 
66                 if(preg_match("/^\[\[\.\/([^\]]*)\]\]/",$wbn,$match))
67                 {
68                         if(!$match[1])
69                                 $wbn = $name;
70                         else
71                                 $wbn = "[[".strip_bracket($name)."/$match[1]]]";
72                 }
73                 else if(preg_match("/^\[\[\..\/([^\]]+)\]\]/",$wbn,$match))
74                 {
75                         for($i=0;$i<substr_count($keep,"../");$i++)
76                                 $wbn = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($name));
77
78                         if(!preg_match("/^($BracketName)|($WikiName)$/",$wbn))
79                                 $wbn = "[[$wbn]]";
80                         
81                         if($wbn==$name)
82                                 $wbn = "[[$match[1]]]";
83                         else
84                                 $wbn = "[[".strip_bracket($wbn)."/$match[1]]]";
85                 }
86                 else if($wbn == "[[../]]")
87                 {
88                         $wbn = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($name));
89                         
90                         if(!preg_match("/^($BracketName)|($WikiName)$/",$wbn))
91                                 $wbn = "[[$wbn]]";
92                         if($wbn==$name)
93                                 $wbn = $defaultpage;
94                 }
95
96                 if(!is_page($wbn))
97                 {
98                         $refer[$wbn][] = $name;
99                 }
100
101                         $wbn = $keep; //¤Ò¡¼ ^^;)
102                 }
103         }
104
105         ksort($refer);
106         foreach($refer as $wbn => $refs_arr)
107         {
108                 $url = rawurlencode($wbn);
109                 $name = strip_bracket($wbn);
110                 
111                 $link_ref = "";
112                 foreach(array_unique($refs_arr) as $refs)
113                 {
114                         $ref = strip_bracket($refs);
115                         $refurl = rawurlencode($refs);
116                         
117                         $link_ref .= " <a href=\"$script?$refurl\">$ref</a>";
118                 }
119                 $link_ref = trim($link_ref);
120                 
121                 $ret["body"] .= "<li><a href=\"$script?cmd=edit&amp;page=$url&amp;refer=$refurl\">$name</a> <em>($link_ref)</em></li>\n";
122         }
123
124
125         $ret["body"] .= "</ul>\n";
126
127         $ret["msg"] = "List of pages,are not made yet";
128         
129         return $ret;
130 }
131
132 function check_link($name,$refer,&$_gwbn)
133 {
134         global $BracketName,$WikiName,$InterWikiName;
135
136         if(preg_match("/^\[\[([^\]]+)\:((https?|ftp|news)([^\]]+))\]\]$/",$name))
137         {
138                 return;
139         }
140         else if(preg_match("/^\[((https?|ftp|news)([^\]\s]+))\s([^\]]+)\]$/",$name))
141         {
142                 return;
143         }
144         else if(preg_match("/^(https?|ftp|news).*?(\.gif|\.png|\.jpeg|\.jpg)?$/",$name))
145         {
146                 return;
147         }
148         else if(preg_match("/^\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\]/",$name))
149         {
150                 return;
151         }
152         else if(preg_match("/^([[:alnum:]\-_]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)/",$name))
153         {
154                 return;
155         }
156         else if(preg_match("/^($InterWikiName)$/",$name))
157         {
158                 return;
159         }
160         else if(preg_match("/^($BracketName)|($WikiName)$/",$name))
161         {
162                 $_gwbn[$name][] = $refer;
163                 return;
164         }
165         return;
166 }
167 ?>