OSDN Git Service

[[pukiwiki:BugTrack/2]] 各プラグインに$Id$を追加
[pukiwiki/pukiwiki.git] / plugin / yetlist.inc.php
1 <?
2 // $Id: yetlist.inc.php,v 1.3 2002/06/26 06:23:57 masui Exp $
3
4 function plugin_yetlist_action()
5 {
6         global $script,$InterWikiName,$WikiName,$BracketName,$defaultpage,$_gwbn;
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')",$line);
46         }
47         
48         foreach($_gwbn as $tmp)
49         {
50                 $wbn = $tmp["name"];
51                 $name = $tmp["refer"];
52         
53                 if(preg_match("/^[^>]+>([^\]]+)/",$wbn,$match))
54                 {
55                         $wbn = $match[1];
56                         if(!preg_match("/($WikiName)|($BracketName)/",$wbn))
57                                 $wbn = "[[$wbn]]";
58                 }
59                 
60                 $keep = $wbn;
61                 
62                 if(preg_match("/^\[\[\.\/([^\]]*)\]\]/",$wbn,$match))
63                 {
64                         if(!$match[1])
65                                 $wbn = $name;
66                         else
67                                 $wbn = "[[".strip_bracket($name)."/$match[1]]]";
68                 }
69                 else if(preg_match("/^\[\[\..\/([^\]]+)\]\]/",$wbn,$match))
70                 {
71                         for($i=0;$i<substr_count($keep,"../");$i++)
72                                 $wbn = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($name));
73
74                         if(!preg_match("/^($BracketName)|($WikiName)$/",$wbn))
75                                 $wbn = "[[$wbn]]";
76                         
77                         if($wbn==$name)
78                                 $wbn = "[[$match[1]]]";
79                         else
80                                 $wbn = "[[".strip_bracket($wbn)."/$match[1]]]";
81                 }
82                 else if($wbn == "[[../]]")
83                 {
84                         $wbn = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($name));
85                         
86                         if(!preg_match("/^($BracketName)|($WikiName)$/",$wbn))
87                                 $wbn = "[[$wbn]]";
88                         if($wbn==$name)
89                                 $wbn = $defaultpage;
90                 }
91
92                 if(!is_page($wbn))
93                 {
94                         $lists[strip_bracket($wbn)] = strip_bracket($wbn);
95                         $refer[strip_bracket($wbn)][$name] = $name;
96                 }
97         }
98
99         ksort($lists);
100         foreach($lists as $wbn)
101         {
102                 $url = $wbn;
103                 if(!preg_match("/($WikiName)|($BracketName)/",$url))
104                         $url = "[[$url]]";
105                 $url = rawurlencode($url);
106                 
107                 $link_ref = "";
108                 foreach($refer[$wbn] as $refs)
109                 {
110                         $ref = strip_bracket($refs);
111                         $refurl = rawurlencode($refs);
112                         
113                         $link_ref .= " <a href=\"$script?$refurl\">$ref</a>";
114                 }
115                 $link_ref = trim($link_ref);
116                 
117                 $ret["body"] .= "<li><a href=\"$script?cmd=edit&amp;page=$url&amp;refer=$refurl\">$wbn</a> <i>($link_ref)</i></li>\n";
118         }
119
120
121         $ret["body"] .= "</ul>\n";
122
123         $ret["msg"] = "List of pages,are not made yet";
124         
125         return $ret;
126 }
127
128 function check_link($name,$refer)
129 {
130         global $BracketName,$WikiName,$InterWikiName,$_gwbn;
131
132         if(preg_match("/^\[\[([^\]]+)\:((https?|ftp|news)([^\]]+))\]\]$/",$name))
133         {
134                 return;
135         }
136         else if(preg_match("/^\[((https?|ftp|news)([^\]\s]+))\s([^\]]+)\]$/",$name))
137         {
138                 return;
139         }
140         else if(preg_match("/^(https?|ftp|news).*?(\.gif|\.png|\.jpeg|\.jpg)?$/",$name))
141         {
142                 return;
143         }
144         else if(preg_match("/^\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\]/",$name))
145         {
146                 return;
147         }
148         else if(preg_match("/^([[:alnum:]\-_]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)/",$name))
149         {
150                 return;
151         }
152         else if(preg_match("/^($InterWikiName)$/",$name))
153         {
154                 return;
155         }
156         else if(preg_match("/^($BracketName)|($WikiName)$/",$name))
157         {
158                 $_gwbn[$name]["name"] = $name;
159                 $_gwbn[$name]["refer"] = $refer;
160                 return;
161         }
162         else
163         {
164                 return;
165         }
166 }
167 ?>