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.11 2002/04/07 15:00:20 oes Exp $
14 Revision 1.11 2002/04/07 15:00:20 oes
15 Descand into framesets to harvest all image URLs
17 Revision 1.10 2002/04/06 15:19:35 oes
18 Cosmetics Clean-up, smarter handling of unreachable URLs
20 Revision 1.9 2002/04/06 11:34:44 oes
21 Reactivating the scripts ,-) Cosmetics
23 Revision 1.7 2002/04/03 19:36:04 swa
26 Revision 1.6 2002/04/02 07:22:19 oes
27 Elimnating duplicate images; using relative link for step3
29 Revision 1.5 2002/04/02 06:14:47 oes
32 Revision 1.4 2002/04/01 19:13:47 oes (based on 1.2)
33 Extended, fixed bugs, beefed up design, made IE-safe
35 Revision 1.3 2002/03/30 20:44:46 swa
36 have consistent look and feel. part 2.
39 Revision 1.2 2002/03/30 19:49:34 swa
40 have consistent look and feel
42 Revision 1.1 2002/03/30 03:20:30 oes
43 Added Feedback mechanism for actions file
46 Copyright (C) 2002 the SourceForge Privoxy team.
47 http://www.privoxy.org/
49 Written by Andreas Oesterhelt
51 This program is free software; you can redistribute it
52 and/or modify it under the terms of the GNU General
53 Public License as published by the Free Software
54 Foundation; either version 2 of the License, or (at
55 your option) any later version.
57 This program is distributed in the hope that it will
58 be useful, but WITHOUT ANY WARRANTY; without even the
59 implied warranty of MERCHANTABILITY or FITNESS FOR A
60 PARTICULAR PURPOSE. See the GNU General Public
61 License for more details.
63 The GNU General Public License should be included with
64 this file. If not, you can view it at
65 http://www.gnu.org/copyleft/gpl.html
66 or write to the Free Software Foundation, Inc., 59
67 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
72 <meta http-equiv="Content-Style-Type" content="text/css">
73 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
74 <link rel="stylesheet" type="text/css" href="../privoxy.css">
75 <link rel="stylesheet" type="text/css" href="../p_feedback.css">
77 <script language="javascript" type="text/javascript">
80 // Could be as easy as style="max-wdith: 300px; max-height..." inside the
81 // <img> tag, but IE doesn't understand that. Setting the values directly also
82 // screws IE for some weird reason. All praise MS.
85 function prettyscale(image)
90 if (image.width > 300)
95 if (image.height > 50)
100 if (image.width < 20)
105 if (image.height < 20)
112 image.width = newwidth
117 image.height = newheight
129 //error_reporting(E_ALL);
130 error_reporting(E_NONE);
133 * Function: link_to_absolute
134 * Purpose: Make $link from $base absolute
136 function link_to_absolute($base, $link)
139 * If $link already is absolute, we're done:
141 if (!strncmp("http://", $link, 7) || !strncmp("https://", $link, 8))
147 * Cut the base to it's proto://host/ or to its proto://host/dir/,
148 * depending whether $link is host-relative or path-relative.
155 preg_match('|^(https?://[^/]+)|i', $base, $results);
163 if (strpos($base, '/') != strlen($base))
165 preg_match('|(.*/)|i', $base, $results);
174 * Function: slurp_page
176 * Purpose: Retrieve a URL with curl, and return the contents
177 * or "FAILED" if it fails.
180 function slurp_page($url)
182 $ch = curl_init ($url);
184 curl_setopt ($ch, CURLOPT_HEADER, 0);
185 curl_setopt ($ch, CURLOPT_FAILONERROR, 1);
186 curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
187 curl_setopt ($ch, CURLOPT_TIMEOUT, 20);
190 $success = curl_exec ($ch);
191 $page = ob_get_contents();
196 return $success ? $page : "FAILED";
200 * Function: get_image_urls_sp
202 * Purpose: Return the image URLs from a single page
204 function get_image_urls_sp($page, $url)
206 preg_match_all('|<img\s+[^>]*?src=[\'"]?(.*?)[\'" >]|i', $page, $matches);
208 foreach (array_unique($matches[1]) as $image_link)
210 $result[] = link_to_absolute($url, $image_link);
213 return count($result) ? $result : 0;
217 * Function: get_image_urls
219 * Purpose: If the page is a frameset, rerurn the image URLs from all
220 * its frame SRCes, else from the page itself.
222 function get_image_urls($page, $url)
225 preg_match_all('|<frame\s+[^>]*?src=[\'"]?(.*?)[\'" >]|i', $page, $matches);
227 if (count($matches[1]))
229 foreach(array_unique($matches[1]) as $frame_link)
231 $framebuf = slurp_page(link_to_absolute($url, $frame_link));
232 $result = array_merge($result, get_image_urls_sp($framebuf, link_to_absolute($url, $frame_link)));
237 $result = get_image_urls_sp($page, $url);
240 return array_values(array_unique($result));
245 * Function: error_abort
246 * Purpose: Return an error page with $title and $message
248 function error_abort($title, $message)
250 if ($title == "invalid") /* shortcut */
252 $title = "Invalid Feedback Submission";
255 echo (" <title>Privoxy: $title</title>
258 <div class=\"title\">
260 <a href=\"http://www.privoxy.org/\">Privoxy</a>: $title
264 <div class=\"warning\">
268 <p>Valid <a href=\"http://validator.w3.org/\">HTML 4.01 Transitional</a></p>
275 * Cannot start with step 2:
277 if (!isset($referrer_url))
279 error_abort("invalid", "When submitting your feedback please start with
280 <a href=\"index.php\">step 1</a>.");
285 * Cannot work on unknown problem:
287 if (!isset($problem) || $problem == "INVALID")
289 error_abort("invalid", "You need to select the nature of the problem in
290 <a href=\"javascript:history.back();\">step 1</a>.");
295 * If the protocol is missing from $referrer_url, prepend "http://"
297 if (strncmp("http://", $referrer_url, 7))
299 $referrer_url = "http://" . $referrer_url;
304 * Check if URL really exists and buffer its contents:
306 if (($page = slurp_page($referrer_url)) == "FAILED")
310 <p><b>Confirm the URL:</b></p>
314 The URL that you entered could not be retrieved. Please make sure that
316 <p class=\"important\">
317 <a href=\"$referrer_url\">$referrer_url</a>
320 is correct and publicly accssible.
323 <input type=\"checkbox\" name=\"url_confirmed\" value=\"user\"> Yes, I'm sure.
329 $url_confirm = "<input type=\"hidden\" name=\"url_confirmed\" value=\"automatic\">";
333 * Create description from problem code:
337 case "P1": $problem_description="an advertisment was not blocked"; break;
338 case "P2": $problem_description="an innocent image was blocked"; break;
339 case "P3": $problem_description="the whole page was erraneously blocked"; break;
340 case "P4": $problem_description="the page needs popups but they don't work"; break;
341 case "P5": $problem_description="a problem occured"; break;
342 default: $problem_description="AN UNPROCESSABLE PROBLEM OCCURED";
347 <title>Privoxy Action List Feedback - Step 2 of 2</title>
353 <a href="http://www.privoxy.org" target="_blank">Privoxy</a> Action List Feedback - Step 2 of 2
358 <b>You are about to report that <?php echo ($problem_description) ?> on
359 <a href="<?php echo ($referrer_url) ?>"><?php echo ($referrer_url) ?></a>.</b>
363 <form action="step3.php" method="post">
365 <input type="hidden" name="problem" value="<?php echo ($problem) ?>">
366 <input type="hidden" name="referrer_url" value="<?php echo ($referrer_url) ?>">
374 * Include the confirmation for an unretrievable URL if
380 * Create / suppress form elements depending on type of
383 if ($problem != "P1")
389 $image_urls = get_image_urls($page, $referrer_url);
390 $count = count($image_urls);
395 * Open section in <dl>; Open table:
397 echo (" <dt><b>Choose the images you want blocked from the following list:</b></dt>
400 <input type=\"hidden\" name=\"num_images\" value=\"$count\">
401 <table border=\"0\" cellpadding=\"0\" cellspacing=\"4\">\n");
403 * Print one table row for each image found:
405 for ($i=0; $i< $count; $i++)
407 $image_url = link_to_absolute($referrer_url, $image_urls[$i]);
414 <input type=\"checkbox\" name=\"block_image[$i]\" value=\"off\">
417 <a href=\"$image_url\">$image_url</a>:
420 <input type=\"hidden\" name=\"image_url[$i]\" value=\"$image_url\">
425 <img onload=\"prettyscale(this);\" src=\"$image_url\" alt=\"banner or not?\">
433 <b>If the banner that you saw is not listed above, enter the URL here</b>\n");
438 <b>URL of the advertisment image:</b>\n");
444 <br><i>Hint: right-click the image, select "Copy image location" and paste the URL here.</i>
448 <input name="manual_image_url" type="text" size="45" maxlength="255">
452 <?php if($problem != "P1") echo ("-->") ?>
454 <?php if($problem != "P2") echo ("<!--") ?>
457 <p><b>URL of the innocent image:</b>
458 <br><i>Hint: right-click the image, select "Copy image location" and paste the URL here.
459 <br>This may not work if the image was blocked by size or if +image-blocker is set to redirect.</i>
464 <input name="image_url" value="unknown" type="text" size="45" maxlength="255">
468 <?php if($problem != "P2") echo ("-->") ?>
470 <dt><b>Severity:</b></dt>
473 <select name="severity">
474 <option value="3">drives me crazy</option>
475 <option selected value="2">normal</option>
476 <option value="1">cosmetic</option>
482 <b>Remarks:</b> <i>(optional)</i>
486 <textarea wrap="hard" style="font-size: 10px" name="remarks" cols="35" rows="3">None.</textarea>
491 <b>Your Name:</b> <i>(optional, public)</i>
495 <input name="name" size="45">
501 <input type="submit" value="Submit">
508 <p>Valid <a href="http://validator.w3.org/">HTML 4.01 Transitional</a></p>