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.13 2002/04/09 13:08:21 oes Exp $
14 Revision 1.13 2002/04/09 13:08:21 oes
17 Revision 1.12 2002/04/08 17:04:05 oes
18 Adapt to unified stylesheet
20 Revision 1.11 2002/04/07 15:00:20 oes
21 Descand into framesets to harvest all image URLs
23 Revision 1.10 2002/04/06 15:19:35 oes
24 Cosmetics Clean-up, smarter handling of unreachable URLs
26 Revision 1.9 2002/04/06 11:34:44 oes
27 Reactivating the scripts ,-) Cosmetics
29 Revision 1.7 2002/04/03 19:36:04 swa
32 Revision 1.6 2002/04/02 07:22:19 oes
33 Elimnating duplicate images; using relative link for step3
35 Revision 1.5 2002/04/02 06:14:47 oes
38 Revision 1.4 2002/04/01 19:13:47 oes (based on 1.2)
39 Extended, fixed bugs, beefed up design, made IE-safe
41 Revision 1.3 2002/03/30 20:44:46 swa
42 have consistent look and feel. part 2.
45 Revision 1.2 2002/03/30 19:49:34 swa
46 have consistent look and feel
48 Revision 1.1 2002/03/30 03:20:30 oes
49 Added Feedback mechanism for actions file
52 Copyright (C) 2002 the SourceForge Privoxy team.
53 http://www.privoxy.org/
55 Written by Andreas Oesterhelt
57 This program is free software; you can redistribute it
58 and/or modify it under the terms of the GNU General
59 Public License as published by the Free Software
60 Foundation; either version 2 of the License, or (at
61 your option) any later version.
63 This program is distributed in the hope that it will
64 be useful, but WITHOUT ANY WARRANTY; without even the
65 implied warranty of MERCHANTABILITY or FITNESS FOR A
66 PARTICULAR PURPOSE. See the GNU General Public
67 License for more details.
69 The GNU General Public License should be included with
70 this file. If not, you can view it at
71 http://www.gnu.org/copyleft/gpl.html
72 or write to the Free Software Foundation, Inc., 59
73 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
78 <meta http-equiv="Content-Style-Type" content="text/css">
79 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
80 <meta http-equiv="Content-Script-Type" content="text/javascript">
81 <link rel="stylesheet" type="text/css" href="../privoxy.css">
82 <link rel="stylesheet" type="text/css" href="../p_feedback.css">
84 <script language="javascript" type="text/javascript">
87 // Could be as easy as style="max-wdith: 300px; max-height..." inside the
88 // <img> tag, but IE doesn't understand that. Setting the values directly also
89 // screws IE for some weird reason. All praise MS.
92 function prettyscale(image)
97 if (image.width > 300)
102 if (image.height > 50)
107 if (image.width < 20)
112 if (image.height < 20)
119 image.width = newwidth
124 image.height = newheight
136 //error_reporting(E_ALL);
137 error_reporting(E_NONE);
140 * Function: link_to_absolute
141 * Purpose: Make $link from $base absolute
143 function link_to_absolute($base, $link)
146 * If $link already is absolute, we're done:
148 if (!strncmp("http://", $link, 7) || !strncmp("https://", $link, 8))
154 * Cut the base to it's proto://host/ or to its proto://host/dir/,
155 * depending whether $link is host-relative or path-relative.
162 preg_match('|^(https?://[^/]+)|i', $base, $results);
170 if (strpos($base, '/') != strlen($base))
172 preg_match('|(.*/)|i', $base, $results);
181 * Function: slurp_page
183 * Purpose: Retrieve a URL with curl, and return the contents
184 * or "FAILED" if it fails.
187 function slurp_page($url)
189 $ch = curl_init ($url);
191 curl_setopt ($ch, CURLOPT_HEADER, 0);
192 curl_setopt ($ch, CURLOPT_FAILONERROR, 1);
193 curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
194 curl_setopt ($ch, CURLOPT_TIMEOUT, 20);
197 $success = curl_exec ($ch);
198 $page = ob_get_contents();
203 return $success ? $page : "FAILED";
207 * Function: get_image_urls_sp
209 * Purpose: Return the image URLs from a single page
211 function get_image_urls_sp($page, $url)
213 preg_match_all('|<img\s+[^>]*?src=[\'"]?(.*?)[\'" >]|i', $page, $matches);
215 foreach (array_unique($matches[1]) as $image_link)
217 $result[] = link_to_absolute($url, $image_link);
220 return count($result) ? $result : 0;
224 * Function: get_image_urls
226 * Purpose: If the page is a frameset, rerurn the image URLs from all
227 * its frame SRCes, else from the page itself.
229 function get_image_urls($page, $url)
232 preg_match_all('|<frame\s+[^>]*?src=[\'"]?(.*?)[\'" >]|i', $page, $matches);
234 if (count($matches[1]))
236 foreach(array_unique($matches[1]) as $frame_link)
238 $framebuf = slurp_page(link_to_absolute($url, $frame_link));
239 $result = array_merge($result, get_image_urls_sp($framebuf, link_to_absolute($url, $frame_link)));
244 $result = get_image_urls_sp($page, $url);
247 return array_values(array_unique($result));
252 * Function: error_abort
253 * Purpose: Return an error page with $title and $message
255 function error_abort($title, $message)
257 if ($title == "invalid") /* shortcut */
259 $title = "Invalid Feedback Submission";
262 echo (" <title>Privoxy: $title</title>
265 <div class=\"title\">
267 <a href=\"http://www.privoxy.org/\">Privoxy</a>: $title
271 <div class=\"warning\">
275 <p>Valid <a href=\"http://validator.w3.org/\">HTML 4.01 Transitional</a></p>
282 * Cannot start with step 2:
284 if (!isset($referrer_url))
286 error_abort("invalid", "When submitting your feedback please start with
287 <a href=\"index.php\">step 1</a>.");
292 * Cannot work on unknown problem:
294 if (!isset($problem) || $problem == "INVALID")
296 error_abort("invalid", "You need to select the nature of the problem in
297 <a href=\"javascript:history.back();\">step 1</a>.");
302 * If the protocol is missing from $referrer_url, prepend "http://"
304 if (!preg_match('|^https?://|i', $referrer_url, $dummy))
306 $referrer_url = "http://" . $referrer_url;
311 * Check if URL really exists and buffer its contents:
313 if (($page = slurp_page($referrer_url)) == "FAILED")
317 <p><b>Confirm the URL:</b></p>
321 The URL that you entered could not be retrieved. Please make sure that
323 <p class=\"important\">
324 <a href=\"$referrer_url\">$referrer_url</a>
327 is correct and publicly accssible.
330 <input type=\"checkbox\" name=\"url_confirmed\" value=\"user\"> Yes, I'm sure.
336 $url_confirm = "<input type=\"hidden\" name=\"url_confirmed\" value=\"automatic\">";
340 * Create description from problem code:
344 case "P1": $problem_description="an advertisment was not blocked"; break;
345 case "P2": $problem_description="an innocent image was blocked"; break;
346 case "P3": $problem_description="the whole page was erraneously blocked"; break;
347 case "P4": $problem_description="the page needs popups but they don't work"; break;
348 case "P5": $problem_description="a problem occured"; break;
349 default: $problem_description="AN UNPROCESSABLE PROBLEM OCCURED";
354 <title>Privoxy Action List Feedback - Step 2 of 2</title>
360 <a href="http://www.privoxy.org" target="_blank">Privoxy</a> Action List Feedback - Step 2 of 2
365 <b>You are about to report that <?php echo ($problem_description) ?> on
366 <a href="<?php echo ($referrer_url) ?>"><?php echo ($referrer_url) ?></a>.</b>
370 <form action="step3.php" method="post">
372 <input type="hidden" name="problem" value="<?php echo ($problem) ?>">
373 <input type="hidden" name="referrer_url" value="<?php echo ($referrer_url) ?>">
381 * Include the confirmation for an unretrievable URL if
387 * Create / suppress form elements depending on type of
390 if ($problem != "P1")
396 $image_urls = get_image_urls($page, $referrer_url);
397 $count = count($image_urls);
402 * Open section in <dl>; Open table:
404 echo (" <dt><b>Choose the images you want blocked from the following list:</b></dt>
407 <input type=\"hidden\" name=\"num_images\" value=\"$count\">
408 <table border=\"0\" cellpadding=\"0\" cellspacing=\"4\">\n");
410 * Print one table row for each image found:
412 for ($i=0; $i< $count; $i++)
414 $image_url = link_to_absolute($referrer_url, $image_urls[$i]);
421 <input type=\"checkbox\" name=\"block_image[$i]\" value=\"off\">
424 <a href=\"$image_url\">$image_url</a>:
427 <input type=\"hidden\" name=\"image_url[$i]\" value=\"$image_url\">
432 <img onload=\"prettyscale(this);\" src=\"$image_url\" alt=\"banner or not?\">
440 <b>If the banner that you saw is not listed above, enter the URL here</b>\n");
445 <b>URL of the advertisment image:</b>\n");
451 <br><i>Hint: right-click the image, select "Copy image location" and paste the URL here.</i>
455 <input name="manual_image_url" type="text" size="45" maxlength="255">
459 <?php if($problem != "P1") echo ("-->") ?>
461 <?php if($problem != "P2") echo ("<!--") ?>
464 <p><b>URL of the innocent image:</b>
465 <br><i>Hint: right-click the image, select "Copy image location" and paste the URL here.
466 <br>This may not work if the image was blocked by size or if +image-blocker is set to redirect.</i>
471 <input name="image_url" value="unknown" type="text" size="45" maxlength="255">
475 <?php if($problem != "P2") echo ("-->") ?>
477 <dt><b>Severity:</b></dt>
480 <select name="severity">
481 <option value="3">drives me crazy</option>
482 <option selected value="2">normal</option>
483 <option value="1">cosmetic</option>
489 <b>Remarks:</b> <i>(optional)</i>
493 <textarea wrap="hard" style="font-size: 10px" name="remarks" cols="35" rows="3">None.</textarea>
498 <b>Your Name:</b> <i>(optional, public)</i>
502 <input name="name" size="45">
508 <input type="submit" value="Submit">
515 <p>Valid <a href="http://validator.w3.org/">HTML 4.01 Transitional</a></p>