1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
5 File : $Source: /cvsroot/ijbswa/current/doc/webserver/actions/step2.php,v $
7 Purpose : Submit form for actions file feedback (step 2)
9 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
11 $Id: step2.php,v 1.6 2002/04/02 07:22:19 oes Exp $
14 Revision 1.10 2002/04/06 15:19:35 oes
15 Cosmetics Clean-up, smarter handling of unreachable URLs
17 Revision 1.9 2002/04/06 11:34:44 oes
18 Reactivating the scripts ,-) Cosmetics
20 Revision 1.7 2002/04/03 19:36:04 swa
23 Revision 1.6 2002/04/02 07:22:19 oes
24 Elimnating duplicate images; using relative link for step3
26 Revision 1.5 2002/04/02 06:14:47 oes
29 Revision 1.4 2002/04/01 19:13:47 oes (based on 1.2)
30 Extended, fixed bugs, beefed up design, made IE-safe
32 Revision 1.3 2002/03/30 20:44:46 swa
33 have consistent look and feel. part 2.
36 Revision 1.2 2002/03/30 19:49:34 swa
37 have consistent look and feel
39 Revision 1.1 2002/03/30 03:20:30 oes
40 Added Feedback mechanism for actions file
43 Copyright (C) 2002 the SourceForge Privoxy team.
44 http://www.privoxy.org/
46 Written by Andreas Oesterhelt
48 This program is free software; you can redistribute it
49 and/or modify it under the terms of the GNU General
50 Public License as published by the Free Software
51 Foundation; either version 2 of the License, or (at
52 your option) any later version.
54 This program is distributed in the hope that it will
55 be useful, but WITHOUT ANY WARRANTY; without even the
56 implied warranty of MERCHANTABILITY or FITNESS FOR A
57 PARTICULAR PURPOSE. See the GNU General Public
58 License for more details.
60 The GNU General Public License should be included with
61 this file. If not, you can view it at
62 http://www.gnu.org/copyleft/gpl.html
63 or write to the Free Software Foundation, Inc., 59
64 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
69 <meta http-equiv="Content-Style-Type" content="text/css">
70 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
71 <link rel="stylesheet" type="text/css" href="../p_feedback.css">
73 <script language="javascript" type="text/javascript">
76 // Could be as easy as style="max-wdith: 300px; max-height..." inside the
77 // <img> tag, but IE doesn't understand that. Setting the values directly also
78 // screws IE for some weird reason. All praise MS.
81 function prettyscale(image)
86 if (image.width > 300)
91 if (image.height > 50)
101 if (image.height < 20)
108 image.width = newwidth
113 image.height = newheight
125 //error_reporting(E_ALL);
126 error_reporting(E_NONE);
129 * Function: link_to_absolute
130 * Purpose: Make $link from $base absolute
132 function link_to_absolute($base, $link)
135 * If $link already is absolute, we're done:
137 if (!strncmp("http://", $link, 7) || !strncmp("https://", $link, 8))
143 * Cut the base to it's proto://host/ or to its proto://host/dir/,
144 * depending whether $link is host-relative or path-relative.
151 preg_match('|^(https?://[^/]+)|i', $base, $results);
159 if (strpos($base, '/') != strlen($base))
161 preg_match('|(.*/)|i', $base, $results);
170 * Function: slurp_page
172 * Purpose: Retrieve a URL with curl, and return the contents
173 * or "FAILED" if it fails.
176 function slurp_page($url)
178 $ch = curl_init ($url);
180 curl_setopt ($ch, CURLOPT_HEADER, 0);
181 curl_setopt ($ch, CURLOPT_FAILONERROR, 1);
182 curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
183 curl_setopt ($ch, CURLOPT_TIMEOUT, 20);
186 $success = curl_exec ($ch);
187 $page = ob_get_contents();
192 return $success ? $page : "FAILED";
196 * Function: get_image_urls_sp
198 * Purpose: Return the image URLs from a single page
200 function get_image_urls_sp($page, $url)
202 preg_match_all('|<img\s+[^>]*?src=[\'"]?(.*?)[\'" >]|i', $page, $matches);
204 foreach (array_unique($matches[1]) as $image_link)
206 $result[] = link_to_absolute($url, $image_link);
209 return count($result) ? $result : 0;
213 * Function: get_image_urls
215 * Purpose: If the page is a frameset, rerurn the image URLs from all
216 * its frame SRCes, else from the page itself.
218 function get_image_urls($page, $url)
221 preg_match_all('|<frame\s+[^>]*?src=[\'"]?(.*?)[\'" >]|i', $page, $matches);
223 if (count($matches[1]))
225 foreach(array_unique($matches[1]) as $frame_link)
227 $framebuf = slurp_page(link_to_absolute($url, $frame_link));
228 $result = array_merge($result, get_image_urls_sp($framebuf, link_to_absolute($url, $frame_link)));
233 $result = get_image_urls_sp($page, $url);
236 return array_values(array_unique($result));
241 * Function: error_abort
242 * Purpose: Return an error page with $title and $message
244 function error_abort($title, $message)
246 if ($title == "invalid") /* shortcut */
248 $title = "Invalid Feedback Submission";
251 echo (" <title>Privoxy: $title</title>
254 <div class=\"title\">
256 <a href=\"http://www.privoxy.org/\">Privoxy</a>: $title
260 <div class=\"errorbox\">
264 <p>Valid <a href=\"http://validator.w3.org/\">HTML 4.01 Transitional</a></p>
271 * Cannot start with step 2:
273 if (!isset($referrer_url))
275 error_abort("invalid", "When submitting your feedback please start with
276 <a href=\"index.php\">step 1</a>.");
281 * Cannot work on unknown problem:
283 if (!isset($problem) || $problem == "INVALID")
285 error_abort("invalid", "You need to select the nature of the problem in
286 <a href=\"javascript:history.back();\">step 1</a>.");
291 * If the protocol is missing from $referrer_url, prepend "http://"
293 if (strncmp("http://", $referrer_url, 7))
295 $referrer_url = "http://" . $referrer_url;
300 * Check if URL really exists and buffer its contents:
302 if (($page = slurp_page($referrer_url)) == "FAILED")
306 <p><b>Confirm the URL:</b></p>
310 The URL that you entered could not be retrieved. Please make sure that
312 <p class=\"important\">
313 <a href=\"$referrer_url\">$referrer_url</a>
316 is correct and publicly accssible.
319 <input type=\"checkbox\" name=\"url_confirmed\" value=\"user\"> Yes, I'm sure.
325 $url_confirm = "<input type=\"hidden\" name=\"url_confirmed\" value=\"automatic\">";
329 * Create description from problem code:
333 case "P1": $problem_description="an advertisment was not blocked"; break;
334 case "P2": $problem_description="an innocent image was blocked"; break;
335 case "P3": $problem_description="the whole page was erraneously blocked"; break;
336 case "P4": $problem_description="the page needs popups but they don't work"; break;
337 case "P5": $problem_description="a problem occured"; break;
338 default: $problem_description="AN UNPROCESSABLE PROBLEM OCCURED";
343 <title>Privoxy Action List Feedback - Step 2 of 2</title>
349 <a href="http://www.privoxy.org" target="_blank">Privoxy</a> Action List Feedback - Step 2 of 2
354 <b>You are about to report that <?php echo ($problem_description) ?> on
355 <a href="<?php echo ($referrer_url) ?>"><?php echo ($referrer_url) ?></a>.</b>
359 <form action="step3.php" method="post">
361 <input type="hidden" name="problem" value="<?php echo ($problem) ?>">
362 <input type="hidden" name="referrer_url" value="<?php echo ($referrer_url) ?>">
370 * Include the confirmation for an unretrievable URL if
376 * Create / suppress form elements depending on type of
379 if ($problem != "P1")
385 $image_urls = get_image_urls($page, $referrer_url);
386 $count = count($image_urls);
391 * Open section in <dl>; Open table:
393 echo (" <dt><b>Choose the images you want blocked from the following list:</b></dt>
396 <input type=\"hidden\" name=\"num_images\" value=\"$count\">
397 <table border=\"0\" cellpadding=\"0\" cellspacing=\"4\">\n");
399 * Print one table row for each image found:
401 for ($i=0; $i< $count; $i++)
403 $image_url = link_to_absolute($referrer_url, $image_urls[$i]);
410 <input type=\"checkbox\" name=\"block_image[$i]\" value=\"off\">
413 <a href=\"$image_url\">$image_url</a>:
416 <input type=\"hidden\" name=\"image_url[$i]\" value=\"$image_url\">
421 <img onload=\"prettyscale(this);\" src=\"$image_url\" alt=\"banner or not?\">
429 <b>If the banner that you saw is not listed above, enter the URL here</b>\n");
434 <b>URL of the advertisment image:</b>\n");
440 <br><i>Hint: right-click the image, select "Copy image location" and paste the URL here.</i>
444 <input name="manual_image_url" type="text" size="45" maxlength="255">
448 <?php if($problem != "P1") echo ("-->") ?>
450 <?php if($problem != "P2") echo ("<!--") ?>
453 <p><b>URL of the innocent image:</b>
454 <br><i>Hint: right-click the image, select "Copy image location" and paste the URL here.
455 <br>This may not work if the image was blocked by size or if +image-blocker is set to redirect.</i>
460 <input name="image_url" value="unknown" type="text" size="45" maxlength="255">
464 <?php if($problem != "P2") echo ("-->") ?>
466 <dt><b>Severity:</b></dt>
469 <select name="severity">
470 <option value="3">drives me crazy</option>
471 <option selected value="2">normal</option>
472 <option value="1">cosmetic</option>
478 <b>Remarks:</b> <i>(optional)</i>
482 <textarea wrap="hard" style="font-size: 10px" name="remarks" cols="35" rows="3">None.</textarea>
487 <b>Your Name:</b> <i>(optional, public)</i>
491 <input name="name" size="45">
497 <input type="submit" value="Submit">
504 <p>Valid <a href="http://validator.w3.org/">HTML 4.01 Transitional</a></p>