OSDN Git Service

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