File:  [mozdev] / cdn / www / annotate.html
Revision 1.35: download - view: text, annotated - select for diffs - revision graph
Mon Mar 24 22:25:44 2003 UTC (16 years, 11 months ago) by cdn
Branches: MAIN
CVS tags: HEAD
uh

    1: <?php
    2: 
    3: $post_to_list = 0;
    4: 
    5: // $Id: annotate.html,v 1.35 2003/03/24 22:25:44 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*#&amp;$%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: /*
  220:   $start = str_replace("\r\n", "\n", $file); // lineendings fun ? fix
  221:   $start = str_replace("\n\r", "\n", $start); // lineendings fun ? fix
  222: 
  223:   $start = eregi_replace("\n{4,}", "\n\n\n", $start); // may fix the count problem - or not
  224: 
  225: 	 $_NOTES = explode("\n\n\n", $start);
  226: 	 $_NOTES = array_reverse($_NOTES);
  227: */
  228: 	 $NOTE_date = substr(strrpos($_NOTES, "\n\n\n"), $_NOTES);
  229: 	 $_one = strpos($NOTE_date, '[') + 1; // skip [
  230: 	 $_two = strpos($NOTE_date, ']') - $_one;
  231: 	 $NOTE_date_ = substr($file, $_one, $_two);
  232: 
  233: 	// increment count
  234: 	 $NOTE_date = intval($NOTE_date_) + 1;
  235: 
  236: //	 $message .= "\n $_one : $_two";
  237: //	 $message .= "\ns'" . $NOTE_date_ . '" i' . intval($NOTE_date_);
  238: //	 $message .= ' n' . $NOTE_date;
  239: 
  240:          $author_prepend .= THIS_PAGE . $NOTE_date;
  241: 
  242: 	// -- /make link to this comment
  243: 
  244: 
  245: 	if ( $post_to_list )
  246: 	{
  247: 	  $mailto = $project . '@' . HOST;
  248: 
  249: 	  if ( isset($author) )
  250: 	  {
  251: 	    $extra = 'Bcc: ' . base64_decode($_POST['author']) . "\n";
  252: 	  }
  253: 	}
  254: 	elseif ( isset($author) )
  255: 	{
  256: 	  $mailto = base64_decode($_POST['author']);
  257: 	}
  258: 
  259: 
  260: 	if ( $target_page == 'Index' && $page != '/index.html' )
  261: 	{
  262: 	// if [Index] try subdirectory above : e.g. games.m.o/xultris/index.html -> Xultris
  263: 
  264: 	  $target_page = ucwords( substr($page, 0, strrpos($page, "/")) );
  265: 	  $target_page = str_replace('/', '', $target_page);
  266: 	}
  267: 
  268: 
  269: 	if ( isset($target_page_override) )
  270: 	{
  271: 	// if author / developer has something else in mind use that :
  272: 
  273: 	  $target_page = ucwords($target_page_override);
  274: 	}
  275: 
  276: 
  277: 	if ( !empty($target_page) ): $target_page = ' [' . $target_page . ']'; endif;
  278: 
  279: 
  280: 	// pre-process name
  281: 	$name_html  = htmlspecialchars($name);
  282: 
  283: 	// pre-process entry
  284: 	$message_html = htmlise($message);
  285: 
  286: 
  287: 	if(!file_exists($target_dir))
  288: 	mkdir($target_dir, 0755);
  289: 
  290: 	// link placement subject to committee
  291: 
  292: 	$c_link     = '<a class="NOTE-date" href="';
  293: 
  294: 	// create name link : PAGE#number
  295: 	$c_link    .= $author_prepend . '">[';
  296: 	$c_link    .= $NOTE_date . ']</a> ';
  297: 
  298: 	// $c_link should be <a class="NOTE-date" href="[/]?PAGE#$NOTE_date">[$NOTE_date]</a>
  299: 
  300: 	// create start of entry
  301: 	$start      = "\n\n" . '<tr><td class="NOTEheader">';
  302: 
  303: // Pointless options if to be globally accepted
  304: 
  305: 	if ( !$hide_c_link )
  306: 	{
  307: 	  $start     .= $c_link . ' ';
  308: 	}
  309: 
  310: 	$start     .= '<a name="';
  311: 	$start     .= $NOTE_date;
  312: 	$start     .= '">' . "\nSubmitted by: ";
  313: 
  314: // Pointless options if to be globally accepted
  315: 
  316: 	$head = "<strong>$name</strong></a>";
  317: 
  318: 	if ( $not_bugzilla_format )
  319: 	{
  320: 	  $head .= '<br/>';
  321: 	}
  322: 	else
  323: 	{
  324: 	  $head .= ' ';
  325: 	}
  326: 
  327: 	$head      .= DATE . "\n</td></tr>\n";
  328: 	$head      .= '<tr class="NOTEbody"><td class="NOTEbodyText">' . "\n";
  329: 
  330: 	// pre-process entry
  331: 
  332: 	// fin
  333: 	$end        = "<br/>\n</td></tr>\n\n";
  334: 
  335: 
  336:         // trying to prevent reload from adding (yet) another post/email/NG post
  337: 	$already_posted = false;
  338: 
  339: 	$already_posted = strstr($file, $head . $message_html . $end);
  340: 
  341: 
  342: 	if( ($post_to_list || isset($author) ) && !empty($name) && !empty($message) && !$already_posted)
  343: 	{
  344: 	  mail($mailto, PROJECT.":$target_page New Feedback from $name",
  345: 		$author_prepend . "\n\n" . $message, "From: notes@mozdev.org\n" . $extra);
  346: 	}
  347: 
  348: 
  349: 	// write to file if fields not left blank
  350: 
  351: 	if(!empty($name) && !empty($message) && !$already_posted) {
  352:         // open file handle to append
  353: 	  $fp       = fopen ($readfile, "a");
  354: 	  fwrite ($fp, $start.$head.$message_html.$end);
  355: 	  fclose ($fp);
  356: 	}
  357: 
  358: }// /if ($_POST['message'])
  359: 
  360: 
  361: function new_notes($file)
  362: {
  363: 
  364:   $start = implode('', file($file));
  365: 
  366:   $start = str_replace("\r\n", "\n", $start); // lineendings fun ? fix
  367:   $start = str_replace("\n\r", "\n", $start); // lineendings fun ? fix
  368: 
  369:   $start = eregi_replace("\n{4,}", "\n\n\n", $start); // may fix the count problem - or not
  370: 
  371:   $start = str_replace("<tr><td class=\"NOTEheader\">\n\n", "<tr><td class=\"NOTEheader\">\n", $start);
  372: 
  373:   if ( ereg("<tr><td class=\"NOTEheader\">\r\n", $start) ||
  374:        ereg("<tr><td class=\"NOTEheader\">\n", $start)
  375:      )
  376:   {
  377: 
  378:     $middle = explode('<tr><td class="NOTEheader"><a', $start);
  379: 
  380:     if (ereg("\r\n\r\n\r\n", $middle[0]))
  381:     $second = explode("\r\n\r\n\r\n", $middle[0]);
  382:     elseif (ereg("\n\n\n", $middle[0]))
  383:     $second = explode("\n\n\n", $middle[0]);
  384: 
  385:     $end = '';
  386: 
  387:     for ( $i = 0; $second[$i] != ''; ++$i )
  388:     {
  389: 
  390:       $j = $i + 1; //echo $j;
  391: 
  392:       $second[$i] = str_replace("<td class=\"NOTEheader\">",
  393:                                 '<td class="NOTEheader"><a class="NOTE_link" href="' . $page_name .
  394:                                 '#' . $j . '">[' . $j . ']</a> <a name="' . $j . '">',
  395:                                 $second[$i]);
  396: 
  397:       $second[$i] = eregi_replace("</b><br[\/]?>", '</b></a> ', $second[$i]);
  398: 
  399:       $end .= $second[$i] . "\n\n\n";
  400: 
  401:     }
  402: 
  403:     for ( $i = 1; $middle[$i] != ''; ++$i )
  404:     {
  405:       $end .= '<tr><td class="NOTEheader"><a' . $middle[$i];
  406:     }
  407: 
  408:     $fw = fwrite(fopen($file, "w"), $end);
  409: 
  410:   }
  411: 
  412: }
  413: 
  414: 
  415: if ( file_exists($readfile) && filesize($readfile) ) {
  416:   echo '<table border="0" cellpadding="3" cellspacing="3" id="NOTES-table" width="90%">' . "\n";
  417: //  new_notes($readfile);
  418:   readfile($readfile);
  419:   echo '<tr id="dummy"><td></td></tr>';
  420:   echo '</table>' . "\n";
  421: 
  422:  if ( !$hide_text_control )
  423:  {
  424:   echo '<div id="NOTESnotes2"><acronym class="cdn" title="HyperText Markup Language">HTML</acronym> is not allowed';
  425:   echo ' in posts.<br/>' . "\n";
  426:   echo '<acronym class="cdn" title="Uniform Resource Locator">URL</acronym>s in the text that use mailto:,';
  427:   echo ' https://, http:// and ftp:// will be converted into hyperlinks.</div>' . "\n";
  428:  }
  429: }
  430: 
  431: 
  432: if (!$hide_text_control)
  433: {
  434: 
  435:   echo '<div id="NOTEStextControl">' . "\n";
  436:   echo '<form action="' . $_page . '" method="post">' . "\n";
  437:   echo '<p>';
  438: 
  439:   if ( isset($author) )
  440:     echo '<input type="hidden" name="author" value="' . base64_encode($author) . '">' . "\n";
  441: 
  442: ?>
  443:   <br/>To add your own comment, fill in the form below. <a href="http://mozdev.org/docs/notes.html">[?]</a><br/>
  444:   <em>(Note: use two carriage returns to start a new paragraph.)</em>
  445: </p>
  446: 
  447: <p>
  448:   <b><label for="mozdevNOTES-name">Your name:</label></b><br/>
  449:   <input id="mozdevNOTES-name" name="name" type="text" size="20" maxlength="20">
  450: </p>
  451: 
  452: <p>
  453:   <b><label for="mozdevNOTES-message">Your comment:</label></b><br/>
  454: 
  455:   <textarea id="mozdevNOTES-message" name="message" rows="6" cols="55" style="white-space: nowrap"></textarea>
  456: </p>
  457: 
  458: <p>
  459:   <input id="NOTESsubmit" name="submit" type="submit" value="Add Note">
  460: </p>
  461: 
  462: </form>
  463: </div>
  464: <?php }
  465: 
  466: clearstatcache();
  467: 
  468: ?>
  469: 
  470: <!-- ********************* END NOTES ******************** -->

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>