changed git call from https to git readonly
[atutor.git] / mods / wiki / tools / t_commander / edit.php
1 <?php
2   include("t_config.php");
3
4   #-- get current page id
5   $id = $_REQUEST["id"];
6 ?>
7 <html>
8 <head>
9  <title>WikiCommander:PageDetails:<?php echo $id; ?></title>
10  <link rel="stylesheet" type="text/css" href="80x25.css">
11 </head>
12 <body bgcolor="#0000c0" text="#eeeeee" class="Edit PageDetails Panel">
13 <?php
14
15    #-- get current page data
16    ($version = $_REQUEST["version"])
17    or ($version = $_REQUEST["new"]["version"]);
18    $data = ewiki_db::GET($id, $version);
19    $version = $data["version"];
20
21
22    #--  single-version page deletion --------------------------------------
23    if ($_REQUEST["delete"] && $version) {
24       {
25          ewiki_db::DELETE($id, $version);
26          echo '<div class="msg">deleted version #'.$version.'</div>'."\n";
27       }
28       $data = ewiki_db::GET($id);
29       $id = $data["id"];
30       $version = $data["version"];
31    }
32
33
34    #-- show errors
35    if (!$data || !$version) {
36       echo "<div class=\"msg\">page does not exist</div>\n";
37    }
38
39
40    #-- save edited page data --------------------------------------------
41    if ($_REQUEST["save"] && $_REQUEST["new"]["id"]) {
42
43       // read in given fields as-is
44       $data;
45       foreach ($_REQUEST["new"] as $field=>$value) {
46          $data[$field] = $value;
47       }
48       // {id}
49       $id = $data["id"];
50       // {meta}
51       $data["meta"] = recreate_meta($_REQUEST["new"]["meta"]);
52       // {flags}
53       $data["flags"] = 0x0000;
54       foreach ($_REQUEST["new_flags"] as $bit=>$state) {
55          if ($state) {
56             $data["flags"] += (1<<$bit);
57          }
58       }
59       // {lastmodified}
60       if ($_REQUEST["update"]["lastmodified"]) {
61          $data["lastmodified"] = time();
62       }
63       // {refs}
64       if ($_REQUEST["update"]["refs"]) {
65          ewiki_scan_wikiwords($data["content"], $links, "_STRIP_EMAIL=1");
66          $data["refs"] = "\n\n" . implode("\n", array_keys($links)) . "\n\n";
67       }
68       else {
69          $data["refs"] = "\n\n" . trim(trim($data["refs"], "\n"), "\r") . "\n\n";
70       }
71       // {content}
72       if ($data["flags"] & EWIKI_DB_F_TEXT) {
73          $data["content"] = preg_replace("/\r*(\n)\r?/", "$1", $data["content"]);
74       }
75
76       #-- ok, throw into DB
77       if (ewiki_db::WRITE($data, $overwrite=1)) {
78          echo "<div class=\"msg\">page written into database</div>\n\n";
79       }
80       else {
81          echo "<div class=\"msg\">error writing entry to db</div>\n\n";
82       }
83    }
84    
85    
86    #-- fill with inital data
87    if ($_REQUEST["create"] && !$data) {
88       $data = ewiki_db::CREATE($id);
89    }
90
91       
92    #-- start output
93    echo '<form action="edit.php" method="POST" enctype="multipart/form-data">';
94    echo '<input type="hidden" name="id" value="'.htmlentities($id).'">';
95
96    #-- {id}
97    print_field($data, "id", 32);
98    
99    #-- {version}
100    print_field($data, "version", 3, "", "");
101    echo ' <input type="submit" name="refresh" value="refr" title="refresh view, show given version"> ';
102    echo ' <a href="list_vers.php?id='.urlencode($id).'">...</a> ';
103    echo '<input type="submit" name="delete" value="del" title="delete current page version"><br>' . "\n";
104    
105    #-- {flags}
106    print_flags($data);
107    
108    #-- {author} and {hits}, {created}, {lastmodified}
109    print_field($data, "author", 26);
110    print_field($data, "hits", 4);
111    print_field($data, "created", 11);
112    print_field($data, "lastmodified", 11, "", "");
113    echo '<input type="checkbox" name="update[lastmodified]" value="1" title=":= time()"><br>';
114   
115    #-- [save]
116    echo "\n<small><br>\n"
117       . '<input type="submit" name="save" value="update database entry">'
118       . "\n<br></small><br>\n";
119       
120    #-- {content}
121    if (($data["flags"]&EWIKI_DB_F_BINARY) && !$_REQUEST["show_content"]) {
122       echo '<label for="show_content">content</label><br>'
123          . '<input id="show_content" type="submit" name="show_content" value="show" title="contains binary data, beware!"><br><br>';
124    }
125    else {
126       print_textfield($data["content"], "content", 16);
127    }
128    
129    #-- {meta}
130    print_textfield(flatten_meta($data["meta"]), "meta", 5);
131
132    #-- {refs}   
133    $inj = ' &nbsp;<input type="checkbox" checked name="update[refs]" value="1" id="update_refs">'
134         . '<label for="update_refs"> update automatically</label><br>';
135    print_textfield(ltrim($data["refs"]), "refs", 4, $inj);
136    
137    // done
138
139
140    
141
142 #------------------------------------------------------- helper functions ---   
143
144    #-- output <input> tag for one of the database {field}s
145    function print_field(&$data, $name, $size, $inj="", $add="<br>") {
146       echo "<nobr><label for=\"d_$name\">$name&nbsp;</label>"
147       . "<input id=\"d_$name\" type=\"text\" size=\"$size\" name=\"new[$name]\" value=\""
148       . htmlentities($data[$name]) . "\"$inj></nobr>$add\n";
149    }
150    
151    #-- output checkboxes for {flags}
152    function print_flags(&$data) {
153       $names = array("txt", "bin", "off", "htm", "ro", "wr", "app", "sys",
154       "prt", "min", "hid",
155       "arv", "u12",
156       // 13=>"u13", "u14", "u15", "u16",
157       17=>"exe",
158       // 18=>"u18", "u19", "u20"
159       );
160       echo "<label for=\"d_flags\">flags</label>&nbsp;<small id=\"d_flags\">";
161       foreach ($names as $i=>$str) {
162          echo "<input type=\"checkbox\" id=\"d_f_$i\" name=\"new_flags[$i]\""
163             . " value=\"1\"" . (($data["flags"] & (1<<$i)) ? " checked": "")
164             . "><label for=\"d_f_$i\">$str</label> ";
165       }
166       echo "</small><br>\n";
167    }
168
169    #-- output <textarea> for bit database {field}
170    function print_textfield($text, $name, $rows, $inj="<br>", $add="<br><br>") {
171       echo "<label for=\"d_$name\">$name</label>$inj"
172       . "<textarea id=\"d_$name\" cols=\"32\" rows=\"$rows\""
173       . " name=\"new[$name]\" wrap=\"soft\" style=\"width:95%\">"
174       . htmlentities($text) . "</textarea>$add\n";
175    }
176    
177    #-- fold {meta} array into block
178    function flatten_meta(&$a, $base="") {
179       $text = "";
180       $a = (array)$a;
181       foreach ($a as $name=>$value) {
182          if (is_array($value) && is_int($name)) {
183             $value = implode(", ", $value);  // for {meta}{meta} fields
184          }
185          if (is_array($value)) {
186             $text .= flatten_meta($value, "$base$name:");
187          }
188          else {
189             $text .= "$base$name: $value\n";
190          }
191       }
192    }
193
194
195    #-- fold {meta} array into block
196    function recreate_meta($text) {
197       $m = array();
198       foreach (explode("\n", $text) as $line) {
199          $line = preg_replace("/\s+/", " ", rtrim($line));
200          if ($r = strpos($line, " ")) {
201             $l = strrpos(substr($line, 0, $r), ":");
202          }
203          else {
204             $l = strrpos($line, ":");
205          }
206          if (!$l) {
207             continue;
208          }
209          $name = substr($line, 0, $l);
210          $line = substr($line, $l + 1);
211          $sub = explode(":", $name);
212          if ($sub[0] == "meta") {
213             $m["meta"][$sub[1]] = preg_split("/\s*,\s*/", $line);
214          }
215          else {
216             $p = & $m;
217             foreach ($sub as $name) {
218                if (!isset($m[$name])) {
219                   $p[$name] = array();
220                }
221                $p = & $p[$name];
222             }
223             $p[$name] = $line;
224          }
225       }
226       return $m;
227    }
228         
229 ?>
230 </table>
231 </body>
232 </html>