2 include("t_config.php");
4 #-- get current page id
9 <title>WikiCommander:PageDetails:<?php echo $id; ?></title>
10 <link rel="stylesheet" type="text/css" href="80x25.css">
12 <body bgcolor="#0000c0" text="#eeeeee" class="Edit PageDetails Panel">
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"];
22 #-- single-version page deletion --------------------------------------
23 if ($_REQUEST["delete"] && $version) {
25 ewiki_db::DELETE($id, $version);
26 echo '<div class="msg">deleted version #'.$version.'</div>'."\n";
28 $data = ewiki_db::GET($id);
30 $version = $data["version"];
35 if (!$data || !$version) {
36 echo "<div class=\"msg\">page does not exist</div>\n";
40 #-- save edited page data --------------------------------------------
41 if ($_REQUEST["save"] && $_REQUEST["new"]["id"]) {
43 // read in given fields as-is
45 foreach ($_REQUEST["new"] as $field=>$value) {
46 $data[$field] = $value;
51 $data["meta"] = recreate_meta($_REQUEST["new"]["meta"]);
53 $data["flags"] = 0x0000;
54 foreach ($_REQUEST["new_flags"] as $bit=>$state) {
56 $data["flags"] += (1<<$bit);
60 if ($_REQUEST["update"]["lastmodified"]) {
61 $data["lastmodified"] = time();
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";
69 $data["refs"] = "\n\n" . trim(trim($data["refs"], "\n"), "\r") . "\n\n";
72 if ($data["flags"] & EWIKI_DB_F_TEXT) {
73 $data["content"] = preg_replace("/\r*(\n)\r?/", "$1", $data["content"]);
77 if (ewiki_db::WRITE($data, $overwrite=1)) {
78 echo "<div class=\"msg\">page written into database</div>\n\n";
81 echo "<div class=\"msg\">error writing entry to db</div>\n\n";
86 #-- fill with inital data
87 if ($_REQUEST["create"] && !$data) {
88 $data = ewiki_db::CREATE($id);
93 echo '<form action="edit.php" method="POST" enctype="multipart/form-data">';
94 echo '<input type="hidden" name="id" value="'.htmlentities($id).'">';
97 print_field($data, "id", 32);
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";
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>';
116 echo "\n<small><br>\n"
117 . '<input type="submit" name="save" value="update database entry">'
118 . "\n<br></small><br>\n";
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>';
126 print_textfield($data["content"], "content", 16);
130 print_textfield(flatten_meta($data["meta"]), "meta", 5);
133 $inj = ' <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);
142 #------------------------------------------------------- helper functions ---
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 </label>"
147 . "<input id=\"d_$name\" type=\"text\" size=\"$size\" name=\"new[$name]\" value=\""
148 . htmlentities($data[$name]) . "\"$inj></nobr>$add\n";
151 #-- output checkboxes for {flags}
152 function print_flags(&$data) {
153 $names = array("txt", "bin", "off", "htm", "ro", "wr", "app", "sys",
156 // 13=>"u13", "u14", "u15", "u16",
158 // 18=>"u18", "u19", "u20"
160 echo "<label for=\"d_flags\">flags</label> <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> ";
166 echo "</small><br>\n";
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";
177 #-- fold {meta} array into block
178 function flatten_meta(&$a, $base="") {
181 foreach ($a as $name=>$value) {
182 if (is_array($value) && is_int($name)) {
183 $value = implode(", ", $value); // for {meta}{meta} fields
185 if (is_array($value)) {
186 $text .= flatten_meta($value, "$base$name:");
189 $text .= "$base$name: $value\n";
195 #-- fold {meta} array into block
196 function recreate_meta($text) {
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), ":");
204 $l = strrpos($line, ":");
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);
217 foreach ($sub as $name) {
218 if (!isset($m[$name])) {