1: <?php
2:
3: $post_to_list = 0;
4:
5: // $Id: annotate.html,v 1.29 2003/03/23 20:31:07 cdn Exp $
6:
7: function cleanse ($message, $name = false) {
8:
9: // censor before sending to author/NG
10:
11: if ( ! $name )
12: {
13: $message = str_replace("\r\n", "[r[n ", $message); // kludge around
14: }
15:
16: $message = ' ' . $message;
17: $replacements = array('"', "'", '*', '#', '&', '$', '£', '?', '%', '@', '+', 'X', 'x', );
18: srand ((float)microtime()*1000000);
19: shuffle($replacements);
20:
21: $cursed = array("m[0ou]th[3e]r[\ ]?f[cu]+[c]?k[3e]r",
22: "f[\ \.]*[cu]+[\ \.]*[c]?[\ \.]*k",
23: "[4a]+[5s$]+[5s$]hole",
24: "[ck]unt",
25: "pu[5s]+[5s]y",
26: "c[o0]ck",
27: "tw[4a]t",
28: "cl[1i]t",
29: "s[\ \.]*h[\ \.]*[1i]+[\ \.]*t[\ \.]*[e]?",
30: "b[1!i]tch",
31: "cum", // not strictly an obscenity
32: );
33:
34: // too indiscriminant /Documents goes to /Do*#&$%ents
35:
36: for ($i=0; $cursed[$i] != ''; $i++) {
37: // whitespace, however currently turns '\n' to ' '
38: $cursed[$i] = '[\ ]+' . $cursed[$i];
39: shuffle($replacements);
40: $repstring = $replacements[0] . $replacements[2] . $replacements[5] .
41: $replacements[1] . $replacements[3];
42:
43: if ($i == 0)
44: // might as well educate the miscreants
45: $message = eregi_replace($cursed[0], ' oedipus', $message);
46: else if ($i == 1)
47: $message = eregi_replace($cursed[1], ' frell', $message);
48: else
49: $message = eregi_replace($cursed[$i], ' ' . $repstring, $message);
50: }
51:
52: $message = substr($message, 1);
53:
54: $message = stripslashes($message);
55:
56: if ( ! $name )
57: {
58:
59: $message = str_replace("[r[n ", "\r\n", $message); // losing \r\n to [\ ] or [[:space:]]
60:
61: }
62:
63: return $message;
64:
65: }
66:
67:
68: function findBugs($text)
69: {
70:
71: // find and 'linkify' mozdev bug references in posts
72: //
73: // Initial version, only places links into html, mail and NG miss out : )
74:
75: // bug[\ ]?[#%]?[0-9]{1,}
76: // bug 2345
77: // bug #2345
78: // bug %2345 -> http://mozdev.org/bugs/show_bug.cgi?id=2345
79:
80: $text = eregi_replace("(bug[\ ]+[#%]?[0-9]{1,})",
81: "<a href=\"\\1\">\\1</a>",$text);
82:
83: $text = eregi_replace('"bug[\ ]+[#%]?', '"http://' . HOST . '/bugs/show_bug.cgi?id=', $text);
84:
85: return $text;
86:
87: }
88:
89:
90: function slash($_page)
91: {
92:
93: // if no leading slash - add one
94:
95: if ( !ereg('^/', $_page) )
96: {
97: return '/';
98: }
99:
100: }
101:
102:
103: function findComments($text)
104: {
105:
106: // find and 'linkify' mozdev comment references in posts
107: //
108: // Initial version, only places links into html, mail and NG miss out : )
109:
110: // comment[\ ]?[#%]?[0-9]{1,}
111: // comment 2345
112: // comment #2345
113: // comment %2345 -> http://PROJECT.mozdev.org/PAGE#2345
114:
115: $text = eregi_replace("(comment[\ ]+[#%]?[0-9]{1,})",
116: "<a href=\"\\1\">\\1</a>",$text);
117:
118: $text = eregi_replace('"comment[\ ]+[#%]?', '"' . THIS_PAGE, $text);
119:
120: return $text;
121:
122: }
123:
124:
125: function findLinks($text)
126: {
127:
128: // find and 'linkify' links
129:
130: $text = eregi_replace("((http|https|ftp):\/\/[^[:space:]<>]{1,})",
131: "<a href=\"\\1\">\\1</a>",$text);
132: /*
133:
134: find name@host.tld, where no mailto:
135:
136: $regExp = "^[\+\&_\.0-9a-z-]+@([0-9a-z]+-*[0-9a-z]+[^-]*[.]?)+([a-z]{2,4}[.]?$)";
137:
138: eregi_replace $regExp, mailto:$regExp
139:
140: */
141:
142: $text = eregi_replace("(mailto:[^[:space:]<>]{1,})",
143: "<a href=\"\\1\">\\1</a>",$text);
144:
145: // tidy email references
146: $text = str_replace('>mailto:', '>', $text);
147:
148: return $text;
149:
150: }
151:
152:
153: function htmlise($text)
154: {
155:
156: $text = htmlspecialchars(str_replace("\\", "", $text));
157:
158: $text = findLinks($text);
159:
160: $text = findBugs($text);
161:
162: $text = findComments($text);
163:
164: $text = ereg_replace("\r\n\r\n", "\n<p/>", $text);
165:
166: $text = ereg_replace("\r\n", "\n<br/>", $text);
167:
168:
169: return $text;
170: }
171:
172: ?><!-- ********************* START NOTES ******************** -->
173:
174: <div id="NOTESheader"><a name="NOTES"><strong>User Notes:</strong></a> <a href="http://<?php echo HOST; ?>/docs/notes.html">[?]</a></div>
175:
176: <div id="NOTESnotes"><acronym class="cdn" title="HyperText Markup Language">HTML</acronym> is not allowed in posts.<br/>
177: <acronym class="cdn" title="Uniform Resource Locator">URL</acronym>s in the text that use mailto:, https://, http:// and ftp:// will be converted into hyperlinks.</div>
178:
179: <p id="NOTESdisclaimer">If you do not get a response to a question posted in this forum, please try sending a message to the project's <a href="http://www.<?php echo HOST; ?>/mailman/listinfo/<?php echo PROJECT_DIR;
180: ?>">mailing list</a> or to the <a href="http://www.<?php echo HOST; ?>/contact.html">project owner</a> directly.</p>
181:
182: <p />
183:
184: <?php
185:
186: $pat = "^\/";
187: $target_dir = ANNOTATE_DIR.PROJECT_DIR."/";
188: $target_page = ereg_replace($pat, "", PAGE); // only themes.m.o sets constant PAGE ?
189: $target_page = ereg_replace("\/", ".", $target_page);
190: $readfile = $target_dir.basename($target_page) . ".comment";
191: $target_page = ucwords(ereg_replace("\.html?", "", substr(strrchr($page, "/"), 1)));
192:
193: $_page .= slash(PAGE) . PAGE;
194:
195: define ('THIS_PAGE', 'http://' . PROJECT_DIR . '.' . HOST . $_page . '#');
196:
197: if ( $_POST['message'] && $_POST['name'] && !$hide_text_control )
198: {
199: // censor name to be on safe side
200: $name = trim( cleanse($name), true );
201:
202:
203: // censor message text
204: $message = cleanse($message);
205:
206:
207: // 0 has neglible effect ; 1 will split words
208: // $message = wordwrap($message, 100, "\r\n", 1);
209:
210:
211: // -- make link to this comment
212:
213: // make file into variable to play with
214: if ( file_exists($readfile) ) // can't do this if it doesn't exist : )
215: {
216: $file = implode('', file($readfile));
217: }
218:
219: $start = str_replace("\r\n", "\n", $file); // lineendings fun ? fix
220: $start = str_replace("\n\r", "\n", $start); // lineendings fun ? fix
221:
222: $start = eregi_replace("\n{4,}", "\n\n\n", $start); // may fix the count problem - or not
223:
224: $_NOTES = explode("\n\n\n", $start);
225: $_NOTES = array_reverse($_NOTES);
226:
227: $NOTE_date = $_NOTES[count($_NOTES)-1];
228: $_one = strpos($NOTE_date, '[');
229: $_two = strpos($NOTE_date, ']');
230: $NOTE_date_ = substr($file, $_one, $_two);
231:
232: // increment count
233: $NOTE_date = intval($NOTE_date_) + 1;
234:
235: $message .= "\n $_one : $_two";
236: $message .= "\ns'" . $NOTE_date_ . '" i' . intval($NOTE_date_);
237: $message .= ' n' . $NOTE_date;
238:
239: $author_prepend .= THIS_PAGE . $NOTE_date;
240:
241: // -- /make link to this comment
242:
243:
244: if ( $post_to_list )
245: {
246: $mailto = $project . '@' . HOST;
247:
248: if ( isset($author) )
249: {
250: $extra = 'Bcc: ' . base64_decode($_POST['author']) . "\n";
251: }
252: }
253: elseif ( isset($author) )
254: {
255: $mailto = base64_decode($_POST['author']);
256: }
257:
258:
259: if ( $target_page == 'Index' && $page != '/index.html' )
260: {
261: // if [Index] try subdirectory above : e.g. games.m.o/xultris/index.html -> Xultris
262:
263: $target_page = ucwords( substr($page, 0, strrpos($page, "/")) );
264: $target_page = str_replace('/', '', $target_page);
265: }
266:
267:
268: if ( isset($target_page_override) )
269: {
270: // if author / developer has something else in mind use that :
271:
272: $target_page = ucwords($target_page_override);
273: }
274:
275:
276: if ( !empty($target_page) ): $target_page = ' [' . $target_page . ']'; endif;
277:
278:
279: // pre-process name
280: $name_html = htmlspecialchars($name);
281:
282: // pre-process entry
283: $message_html = htmlise($message);
284:
285:
286: if(!file_exists($target_dir))
287: mkdir($target_dir, 0755);
288:
289: // link placement subject to committee
290:
291: $c_link = '<a class="NOTE-date" href="';
292:
293: // create name link : PAGE#number
294: $c_link .= $author_prepend . '">[';
295: $c_link .= $NOTE_date . ']</a> ';
296:
297: // $c_link should be <a class="NOTE-date" href="[/]?PAGE#$NOTE_date">[$NOTE_date]</a>
298:
299: // create start of entry
300: $start = "\n\n" . '<tr><td class="NOTEheader">';
301:
302: // Pointless options if to be globally accepted
303:
304: if ( !$hide_c_link )
305: {
306: $start .= $c_link . ' ';
307: }
308:
309: $start .= '<a name="';
310: $start .= $NOTE_date;
311: $start .= '">' . "\nSubmitted by: ";
312:
313: // Pointless options if to be globally accepted
314:
315: $head = "<strong>$name</strong></a>";
316:
317: if ( $not_bugzilla_format )
318: {
319: $head .= '<br/>';
320: }
321: else
322: {
323: $head .= ' ';
324: }
325:
326: $head .= DATE . "\n</td></tr>\n";
327: $head .= '<tr class="NOTEbody"><td class="NOTEbodyText">' . "\n";
328:
329: // pre-process entry
330:
331: // fin
332: $end = "<br/>\n</td></tr>\n\n";
333:
334:
335: // trying to prevent reload from adding (yet) another post/email/NG post
336: $already_posted = false;
337:
338: $already_posted = strstr($file, $head . $message_html . $end);
339:
340:
341: if( ($post_to_list || isset($author) ) && !empty($name) && !empty($message) && !$already_posted)
342: {
343: mail($mailto, PROJECT.":$target_page New Feedback from $name",
344: $author_prepend . "\n\n" . $message, "From: notes@mozdev.org\n" . $extra);
345: }
346:
347:
348: // write to file if fields not left blank
349:
350: if(!empty($name) && !empty($message) && !$already_posted) {
351: // open file handle to append
352: $fp = fopen ($readfile, "a");
353: fwrite ($fp, $start.$head.$message_html.$end);
354: fclose ($fp);
355: }
356:
357: }// /if ($_POST['message'])
358:
359:
360: function new_notes($file)
361: {
362:
363: $start = implode('', file($file));
364:
365: $start = str_replace("\r\n", "\n", $start); // lineendings fun ? fix
366: $start = str_replace("\n\r", "\n", $start); // lineendings fun ? fix
367:
368: $start = eregi_replace("\n{4,}", "\n\n\n", $start); // may fix the count problem - or not
369:
370: $start = str_replace("<tr><td class=\"NOTEheader\">\n\n", "<tr><td class=\"NOTEheader\">\n", $start);
371:
372: if ( ereg("<tr><td class=\"NOTEheader\">\r\n", $start) ||
373: ereg("<tr><td class=\"NOTEheader\">\n", $start)
374: )
375: {
376:
377: $middle = explode('<tr><td class="NOTEheader"><a', $start);
378:
379: if (ereg("\r\n\r\n\r\n", $middle[0]))
380: $second = explode("\r\n\r\n\r\n", $middle[0]);
381: elseif (ereg("\n\n\n", $middle[0]))
382: $second = explode("\n\n\n", $middle[0]);
383:
384: $end = '';
385:
386: for ( $i = 0; $second[$i] != ''; ++$i )
387: {
388:
389: $j = $i + 1; //echo $j;
390:
391: $second[$i] = str_replace("<td class=\"NOTEheader\">",
392: '<td class="NOTEheader"><a class="NOTE_link" href="' . $page_name .
393: '#' . $j . '">[' . $j . ']</a> <a name="' . $j . '">',
394: $second[$i]);
395:
396: $second[$i] = eregi_replace("</b><br[\/]?>", '</b></a> ', $second[$i]);
397:
398: $end .= $second[$i] . "\n\n\n";
399:
400: }
401:
402: for ( $i = 1; $middle[$i] != ''; ++$i )
403: {
404: $end .= '<tr><td class="NOTEheader"><a' . $middle[$i];
405: }
406:
407: $fw = fwrite(fopen($file, "w"), $end);
408:
409: }
410:
411: }
412:
413:
414: if ( file_exists($readfile) && filesize($readfile) ) {
415: echo '<table border="0" cellpadding="3" cellspacing="3" id="NOTES-table" width="90%">' . "\n";
416: // new_notes($readfile);
417: readfile($readfile);
418: echo '<tr id="dummy"><td></td></tr>';
419: echo '</table>' . "\n";
420:
421: if ( !$hide_text_control )
422: {
423: echo '<div id="NOTESnotes2"><acronym class="cdn" title="HyperText Markup Language">HTML</acronym> is not allowed';
424: echo ' in posts.<br/>' . "\n";
425: echo '<acronym class="cdn" title="Uniform Resource Locator">URL</acronym>s in the text that use mailto:,';
426: echo ' https://, http:// and ftp:// will be converted into hyperlinks.</div>' . "\n";
427: }
428: }
429:
430:
431: if (!$hide_text_control)
432: {
433:
434: echo '<div id="NOTEStextControl">' . "\n";
435: echo '<form action="' . $_page . '" method="post">' . "\n";
436: echo '<p>';
437:
438: if ( isset($author) )
439: echo '<input type="hidden" name="author" value="' . base64_encode($author) . '">' . "\n";
440:
441: ?>
442: <br/>To add your own comment, fill in the form below. <a href="http://mozdev.org/docs/notes.html">[?]</a><br/>
443: <em>(Note: use two carriage returns to start a new paragraph.)</em>
444: </p>
445:
446: <p>
447: <b><label for="mozdevNOTES-name">Your name:</label></b><br/>
448: <input id="mozdevNOTES-name" name="name" type="text" size="20" maxlength="20">
449: </p>
450:
451: <p>
452: <b><label for="mozdevNOTES-message">Your comment:</label></b><br/>
453:
454: <textarea id="mozdevNOTES-message" name="message" rows="6" cols="55" style="white-space: nowrap"></textarea>
455: </p>
456:
457: <p>
458: <input id="NOTESsubmit" name="submit" type="submit" value="Add Note">
459: </p>
460:
461: </form>
462: </div>
463: <?php }
464:
465: clearstatcache();
466:
467: ?>
468:
469: <!-- ********************* END NOTES ******************** -->
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>