Implements an image recognition captcha.

"; break; case 'admin/modules#description': case 'admin/modules/textimage': case 'admin/textimage': $output = t('Implements an image recognition captcha.'); break; } return $output; } function textimage_captchachallenge(&$form) { $form['captcha_response'] = array ( '#type' => 'textfield', '#title' => t('Captcha Validation'), '#default_value' => '', '#required' => TRUE, '#validate' => array('_captcha_validate' => array()), '#description' => t('Please type in the letters/numbers that are shown in the image above.'), '#prefix' => 'Captcha Image: you will need to recognize the text in it.', ); return $form; } function textimage_captchavalidate(&$captcha_word, &$correct) { $captcha_word = drupal_strtolower($captcha_word); if (($_SESSION['captcha'] != '') && $captcha_word == $_SESSION['captcha']) { $correct = true; } else { $correct = false; form_set_error('captcha_response', t('The image verification code you entered is incorrect.')); } } /** * Implementation of hook_menu(). */ function textimage_menu($may_cache) { $items = array(); $suffix = ''; if (arg(2)!=null) $suffix='/'.arg(2); $items[] = array( 'path' => '_textimage/image'.$suffix, 'title' => t('textimage'), 'callback' => '_textimage_image', 'access' => user_access('access textimages'), 'type' => MENU_CALLBACK ); return $items; } function textimage_perm() { return array('access textimages'); } function textimage_settings() { $fonts_path = variable_get("textimage_fonts_path", ""); $images_path = variable_get("textimage_images_path", ""); //check for GD if (!function_exists(imagecreate)) drupal_set_message(t('Image library not available. Textimage needs the GD library extension to be installed. Please install GD.')); //check for TTF support elseif (!function_exists(imagettftext)) drupal_set_message(t('Your image library does not seem to have TrueType font support. Textimage will work, but will use the default inbuilt font.'),'status'); //check for valid font path elseif ($fonts_path!="" && !is_dir($fonts_path)) drupal_set_message(t('The current font path is invalid. The default font will be used.')); //check for valid image path if ($images_path!="" && !is_dir($images_path)) drupal_set_message(t('The current images path is invalid. No images will be used.')); //Fonts settings $form['fonts'] = array( '#type' => 'fieldset', '#title' => t('Fonts settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['fonts']['textimage_use_only_upper'] = array( '#type' => 'checkbox', '#title' => t('Use only Uppercase'), '#default_value' => variable_get('textimage_use_only_upper',0) ); $form['fonts']['textimage_fonts_path'] = array( '#type' => 'textfield', '#title' => t('TrueType Fonts Path'), '#default_value' => $fonts_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the Truetype (.ttf) fonts are stored. If you do not provide any fonts, the module will use the default font for text. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['fonts']['textimage_font_size'] = array( '#type' => 'textfield', '#title' => t('Font Size'), '#default_value' => variable_get('textimage_font_size',24), '#size' => 5, '#maxlength' => 2, '#description' => t('Font size of Captcha text (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_font_size")), ); $form['fonts']['textimage_char_spacing_max'] = array( '#type' => 'textfield', '#title' => t('Character Spacing'), '#default_value' => variable_get('textimage_char_spacing_max',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the kerning between letters in Captcha. Higher numbers indicate more spacing.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_spacing_max")), ); $form['fonts']['textimage_char_jiggle_amount'] = array( '#type' => 'textfield', '#title' => t('Character Jiggle'), '#default_value' => variable_get('textimage_char_jiggle_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of up and down movement in the Captcha letters. Higher numbers indicate more jiggling.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_jiggle_amount")), ); $form['fonts']['textimage_char_rotate_amount'] = array( '#type' => 'textfield', '#title' => t('Character Rotation'), '#default_value' => variable_get('textimage_char_rotate_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of rotation in the Captcha letters (in degrees, only works with non-default fonts).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_rotate_amount")), ); $form['fonts']['textimage_char_size_amount'] = array( '#type' => 'textfield', '#title' => t('Character Size Adjustment'), '#default_value' => variable_get('textimage_char_size_amount',2), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of variation in size between the different letters in the Captcha (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_size_amount")), ); //Image settings $form['images'] = array( '#type' => 'fieldset', '#title' => t('Image settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['images']['textimage_images_path'] = array( '#type' => 'textfield', '#title' => t('Background Images Path'), '#default_value' => $images_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the background images are stored. If you do not provide a directory, solid colors will be used. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['images']['textimage_image_noise'] = array( '#type' => 'textfield', '#title' => t('Image Noise (pixels)'), '#default_value' => variable_get('textimage_image_noise',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random pixels) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_noise")), ); $form['images']['textimage_image_lines'] = array( '#type' => 'textfield', '#title' => t('Image Noise (lines)'), '#default_value' => variable_get('textimage_image_lines',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random lines) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_lines")), ); $form['images']['textimage_image_margin'] = array( '#type' => 'textfield', '#title' => t('Image Margin'), '#default_value' => variable_get('textimage_image_margin',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Set a distance between the Captcha letters and the edges of the image.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_margin")), ); $form['info'] = array( '#type' => 'fieldset', '#title' => t('Image and font information'), '#collapsible' => TRUE, '#collapsed' => FALSE ); if (isset($fonts_path)) { $imagefontinfo .= t('Number of fonts found: ').count(_textimage_font_list()); } if (isset($images_path)) { $imagefontinfo .= '
'.t('Number of background images found: ').count(_textimage_image_list()); } $gdinfo = gd_info(); $imagefontinfo .= '
'.t('GD Version: ').$gdinfo["GD Version"]; $imagefontinfo .= '
'.t(' FreeType Support: '); $imagefontinfo .= ($gdinfo["FreeType Support"]==true) ? 'True' : 'False'; $imagefontinfo .= '
'; $form['info']['captcha_info'] = array ( '#type' => 'item', '#value' => $imagefontinfo, ); return $form; } function textimage_settings_form_validate ($form_id,$form) { //check for valid font path if ($form['textimage_fonts_path'] !="" && !is_dir($form['textimage_fonts_path'])) form_set_error('textimage_fonts_path', t('The entered font path is invalid')); //check for valid image path if ($form['textimage_images_path'] !="" && !is_dir($form['textimage_images_path'])) form_set_error('textimage_images_path', t('The entered image path is invalid')); } function _textimage_number_validate ($field,$fieldName) { if (!is_numeric($field['#value'])) { form_set_error($fieldName,t("The value for")." ".t($field['#title'])." ".t("must be a number")); } } /** * Prints an image containing a textimage code. */ function _textimage_image() { //if we don't have GD2 functions, we can't generate the image if (!function_exists('imagecreatetruecolor')) return; // Set headers header('Expires: Mon, 01 Jan 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); header('Content-type: image/png'); $string = _textimage_code(); // Get truetype font list $fonts = _textimage_font_list(); // Get the background images list $images = _textimage_image_list(); // Randomization amounts: $charSpacingMax = variable_get('textimage_char_spacing_max',10); // Letter spacing max (pixels) $charSpacingMin = max($charSpacingMax*.5,0); // Letter spacing minimum (pixels) $charJiggleAmount = variable_get('textimage_char_jiggle_amount',5); // Up and down randomization (pixels) $charRotateAmount = variable_get('textimage_char_rotate_amount',5); // Character rotation amount (degrees) $charSizeAmount = variable_get('textimage_char_size_amount',2); // Character size amount (pixels) $imageRotateAmount = variable_get('captcha_image_rotate_amount',12); // Image rotation amount (degrees) // Static amounts: $charInitialSize = variable_get('textimage_font_size',24); // Initial Font $imageNoise = variable_get('textimage_image_noise',4); // Amount of noise added to image $imageLines = variable_get('textimage_image_lines',4); // Amount of noise added to image $imageMargin = variable_get('textimage_image_margin',10); // Margin around image (pixels) // write text using a truetype font if (function_exists(imagettftext) && count($fonts) > 0) { // Initialize variables for the loop $characterDetails = array(); // contains the final info about each character // Build a list of character settings for the captcha string for ($i=0;$i $charSize, "angle" => $charAngle, "x" => $x, "y" => $y, "color" => $foreground, "font" => $font, "char" => $char ); // Increment the image size $imageWidth = $x + $charWidth; $imageHeight = max($imageHeight,$y+$charJiggleAmount); } // Create the image based off the string length and margin if (count($images) > 0) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Specify colors to be used in the image $foreground = imagecolorallocate($im, rand(0, 80), rand(0, 80), rand(0, 80)); foreach($characterDetails as $char) { // draw character imagettftext($im,$char['size'],$char['angle'],$char['x']+$imageMargin,$char['y']+$imageMargin,$foreground,$char['font'],$char['char']); } } else { // write text using a built-in font $x = 0; $y = 0; $imageWidth = 60 + drupal_strlen($string)*$charSpacingMax*.35; $imageHeight = 30 + $charJiggleAmount; // Create the image if (count($images) > 0 && function_exists(imagecolorallocatealpha)) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth, $imageHeight); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth, $imageHeight); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Add the text for ($i=0;$i 0) { // Prepare a larger image with a background image $im2 = _textimage_create_transparent_image($imageWidth, $imageHeight); } else { // Prepare a larger image with a solid color $im2 = imagecreatetruecolor($imageWidth, $imageHeight); imagefill($im2, 0, 0, $background); } $result = imagecopyresampled ($im2, $im, $imageMargin, $imageMargin, 0, 0, $imageWidth, $imageHeight, imagesx($im), imagesy($im)); $im = $im2; } // strikethrough imageline($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $foreground); // Add Noise for ($x=0; $x<$imageWidth; $x++) { for ($row=0; $row<$imageNoise;$row++) { $y = rand(0,$imageHeight); imagesetpixel($im, $x, $y, $noisecolor); } } // Add Lines and Ellipses for ($x=0; $x<$imageLines;$x++) { imageline($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); imageellipse($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); } // Fill image with a random background image if available if (count($images) > 0) { $image = $images[rand(0,count($images)-1)]; _textimage_apply_background_image($im,$image); } //output to browser imagepng($im); imagedestroy($im); } /** * Returns a random string for use in a captcha */ function _textimage_code() { $consts='bcdgjxvmnprst'; $vowels='aeiou'; for ($x=0; $x < 6; $x++) { mt_srand ((double) microtime() * 1000000); $const[$x] = drupal_substr($consts,mt_rand(0,drupal_strlen($consts)-1),1); $vow[$x] = drupal_substr($vowels,mt_rand(0,drupal_strlen($vowels)-1),1); } $string = $const[0] . $vow[0] .$const[2] . $const[1] . $vow[1] . $const[3] . $vow[3] . $const[4]; $string = drupal_substr($string,0,rand(4,6)); //everytime we create a new code, we write it to session $_SESSION['captcha'] = drupal_strtolower($string); if(variable_get('textimage_use_only_upper',0)) $string = drupal_strtoupper($string); return $string; } /** * Returns an array of files with TTF extensions in the specified directory. */ function _textimage_font_list() { $fontdir = variable_get("textimage_fonts_path", ""); $filelist = array(); if (is_dir($fontdir) && $handle = opendir($fontdir)) { while ($file = readdir($handle)) { if (preg_match("/\.ttf$/i",$file) == 1) $filelist[] = $fontdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Returns an array of files with jpg, png, and gif extensions in the specified directory. */ function _textimage_image_list() { $imagesdir = variable_get("textimage_images_path", ""); $filelist = array(); if (is_dir($imagesdir) && $handle = opendir($imagesdir)) { while ($file = readdir($handle)) { if (preg_match("/\.gif|\.png|\.jpg$/i",$file) == 1) $filelist[] = $imagesdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Overlays an image to the supplied image resource */ function _textimage_apply_background_image (&$imageResource,$imageFile) { $backgroundResource = image_gd_open($imageFile,substr($imageFile,-3)); // Copy the text onto the background $backX = imagesx($backgroundResource); $backY = imagesy($backgroundResource); $textX = imagesx($imageResource); $textY = imagesy($imageResource); $randomBackX = rand(0,$backX-$textX); $randomBackY = rand(0,$backY-$textY); // Place the text onto a random location of the background image imagecopyresampled($backgroundResource,$imageResource,$randomBackX,$randomBackY,0,0,$textX,$textY,$textX,$textY); // Crop the background image to the original image size imagecopyresampled($imageResource,$backgroundResource,0,0,$randomBackX,$randomBackY,$textX,$textY,$textX,$textY); } /** * Creates transparent image resources for images with graphic backgrounds */ function _textimage_create_transparent_image($x, $y) { $i = imagecreatetruecolor($x, $y); $b = imagecreatefromstring(base64_decode(_text_image_blankpng())); imagealphablending($i, false); imagesavealpha($i, true); imagecopyresized($i, $b ,0 ,0 ,0 ,0 ,$x, $y, imagesx($b), imagesy($b)); return $i; } function _text_image_blankpng() { $c = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m"; $c .= "dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBNCg"; $c .= "dyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAAN"; $c .= "egcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQ"; $c .= "oHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAA"; $c .= "DXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII="; return $c; } ?> Tallahassee Network for Justice & Peace - Focus on Nelson http://www.tnjp.org/taxonomy/term/48/0 Campaign to Pressure FL Senator Bill Nelson to End Wars en Mukasey Confirmed 53-40 - Nelson votes NAY http://www.tnjp.org/Mukasey-Confirmed-53-40-Nelson-votes-NAY <blockquote><p><img src="http://www.tnjp.org/images/Nelson-Focus-BW2.JPG" width="150" height="163" align="left"><a href="http://www.msnbc.msn.com/id/21698732/">Senate confirms Mukasey as attorney general</a><br /> Bush nominee wins backing for post despite waterboarding flap<br /> updated 12:56 a.m. ET, Fri., Nov. 9, 2007<br /> WASHINGTON - The Senate confirmed retired judge Michael Mukasey as attorney general Thursday night to replace Alberto Gonzales, who was forced from office in a scandal over his handling of the Justice Department.</p> <p>Mukasey was confirmed as the nation’s 81st attorney general after a sharp debate over his refusal to say whether the waterboarding interrogation technique is torture.</p> <p>President Bush thanked the Senate, even though the margin had been whittled down from nearly unanimous by a sharp debate over Mukasey’s refusal to say whether the waterboarding interrogation technique is torture.....</p></blockquote> <p><a href="http://www.senate.gov/legislative/LIS/roll_call_lists/roll_call_vote_cfm.cfm?congress=110&amp;session=1&amp;vote=00407">Roll Call Vote</a>...</p> <p>I guess this means no water-boarding simulations in front of Bill Nelson's offices!</p> <p><a href="http://www.tnjp.org/Mukasey-Confirmed-53-40-Nelson-votes-NAY">read more</a></p> http://www.tnjp.org/Mukasey-Confirmed-53-40-Nelson-votes-NAY#comment Activism Civil Liberties Focus on Nelson Human Rights Issues Politics Torture Fri, 09 Nov 2007 15:46:07 -0500 tnjp 241 at http://www.tnjp.org Dems pressured to temper war protests - Time to Pressure the DEMS! http://www.tnjp.org/node/222 <p><a href="http://www.politico.com/news/stories/0907/6048.html">Dems pressured to temper war protests</a><br /> By: Jim VandeHei and John F. Harris<br /> September 27, 2007 07:32 AM EST</p> <p>The vast majority of Democrats in Congress are powerfully clear about what they think about the war in Iraq. It is the greatest strategic blunder of a generation.</p> <p>It is a lost cause. Above all, it is immoral — with more men and women dying each day for a war that many Democrats concluded years ago was a terrible mistake.</p> <p><a href="http://www.tnjp.org/node/222">read more</a></p> http://www.tnjp.org/node/222#comment Activism Florida For Peace Focus on Nelson Iraq National Protests Politics Thu, 27 Sep 2007 07:49:16 -0400 Carol 222 at http://www.tnjp.org Focus on Nelson Update http://www.tnjp.org/node/219 <p> <object width="425" height="350"><br /> <param name="movie" value="http://www.youtube.com/v/H337V_pwnbw"></param> <param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/H337V_pwnbw" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p> http://www.tnjp.org/node/219#comment Florida For Peace Focus on Nelson National Protests Mon, 24 Sep 2007 06:31:56 -0400 Carol 219 at http://www.tnjp.org Focus on Nelson - Nelson Votes for 9/20 http://www.tnjp.org/node/218 <p>Feingold Amdt. No. 2924; To safely redeploy United States troops from Iraq. </p> <p>Senator Nelson votes against safe deployment of troops from Iraq. What is this man thinking? The votes by Nelson for 9/19/07 were encouraging and then he bursts the bubble the very next day.</p> http://www.tnjp.org/node/218#comment Florida For Peace Focus on Nelson Sun, 23 Sep 2007 09:29:00 -0400 Carol 218 at http://www.tnjp.org Senator Nelson Votes to Denounce MoveOn Ad http://www.tnjp.org/Senator-Nelson-Votes-to-Denounce-MoveOn-Ad <p>Florida's Joe Leiberman, aka Senator Bill Nelson, joined with twenty-two other candy-assed Democrats to condemn MoveOn.org's ad. Check the roll call vote <a href="http://www.senate.gov/legislative/LIS/roll_call_lists/roll_call_vote_cfm.cfm?congress=110&amp;session=1&amp;vote=00344">here</a>....<br /> <br><a href="https://pol.moveon.org/petraeus.html"><img src="https://pol.moveon.org/images/PetraeusNYTad.jpg" align="left"></a><a href="http://www.nytimes.com/2007/09/21/us/politics/21moveon.html">Senate Approves Resolution Denouncing MoveOn.org Ad</a><br /> By David M. Herszenhorn / New York Times<br /> WASHINGTON, Sept. 20 — The Senate approved a resolution on Thursday denouncing the liberal antiwar group MoveOn.org over an advertisement that questioned the credibility of Gen. David H. Petraeus, the American commander in Iraq.</p> <p>MoveOn.org, with 3.2 million members, has become a powerful force in Democratic politics and the advertisement it paid for, which appeared in The New York Times, has come under sharp attack from Congressional Republicans and others as unpatriotic and impugning the integrity of General Petraeus.</p> <p>Senator Hillary Rodham Clinton of New York and Senator Christopher J. Dodd of Connecticut, both Democratic candidates for president, voted against the resolution, which passed 72 to 25.</p> <p>But curiously absent from the vote was Senator Barack Obama of Illinois, also a Democratic candidate for president, who had canceled a campaign appearance in South Carolina so he could be in Washington for votes.</p> <p>Mr. Obama issued a statement calling the resolution, put forward by Senator John Cornyn, Republican of Texas, “a stunt.” Mr. Obama said, “By not casting a vote, I registered my protest against these empty politics.”...</p> <p><a href="http://www.tnjp.org/Senator-Nelson-Votes-to-Denounce-MoveOn-Ad">read more</a></p> http://www.tnjp.org/Senator-Nelson-Votes-to-Denounce-MoveOn-Ad#comment Florida For Peace Focus on Nelson Iraq Local Actions National Protests Politics Sun, 23 Sep 2007 09:23:05 -0400 Carol 217 at http://www.tnjp.org Focus on Nelson - Voting Summary for 9/19 - Restore Habeas Corpus http://www.tnjp.org/node/216 <p>U.S. Senate Roll Call Votes 110th Congress - 1st Session</p> <p>as compiled through Senate LIS by the Senate Bill Clerk under the direction of the Secretary of the Senate</p> <p>Vote Summary</p> <p>Question: On the Cloture Motion (Motion to Invoke Cloture on the Specter Amdt. No. 2022 )<br /> Vote Number: 340 Vote Date: September 19, 2007, 10:47 AM<br /> Required For Majority: 3/5 Vote Result: Cloture Motion Rejected<br /> Amendment Number: S.Amdt. 2022 to S.Amdt. 2011 to H.R. 1585 (National Defense Authorization Act for Fiscal Year 2008)</p> <p><a href="http://www.tnjp.org/node/216">read more</a></p> http://www.tnjp.org/node/216#comment Florida For Peace Focus on Nelson Wed, 19 Sep 2007 19:16:25 -0400 Carol 216 at http://www.tnjp.org Focus on Nelson - Voting Summary for 9/19 - Deployment Periods http://www.tnjp.org/node/215 <p>U.S. Senate Roll Call Votes 110th Congress - 1st Session</p> <p>as compiled through Senate LIS by the Senate Bill Clerk under the direction of the Secretary of the Senate</p> <p>Vote Summary</p> <p>Question: On the Amendment (Webb Amdt. No. 2909 )<br /> Vote Number: 341 Vote Date: September 19, 2007, 05:30 PM<br /> Required For Majority: 3/5 Vote Result: Amendment Rejected<br /> Amendment Number: S.Amdt. 2909 to S.Amdt. 2011 to H.R. 1585 (National Defense Authorization Act for Fiscal Year 2008)</p> <p><a href="http://www.tnjp.org/node/215">read more</a></p> http://www.tnjp.org/node/215#comment Florida For Peace Focus on Nelson Wed, 19 Sep 2007 19:12:19 -0400 Carol 215 at http://www.tnjp.org Senator Bill Nelson's Staff Blocking Access to the Senator http://www.tnjp.org/Senator-Bill-Nelson-Staff-Blocking-Access-to-the-Senator <p><A href="http://www.tnjp.org/Focus+On+Nelson"><IMG src="http://www.tnjp.org/images/Nelson-Focus3.jpg" align="left" width="150" height="163" alt="Click Pic for info on FOCUS ON NELSON"></A>FOR IMMEDIATE DELIVERY TO THE SENATOR'S DESK</p> <p>August 28, 2007</p> <p>FAX TO: Senator Bill Nelson<br /> All District Offices and<br /> Washington, D. C.</p> <p>FAX FROM: Lydia Vickers, CODEPINK<br /> Florida For Peace/Focus on Nelson<br /> Phone: 850-385-5322</p> <p>Dear Senator Nelson,</p> <p>Thank you again for welcoming Pat, Mary and I to your Lafayette County town halls August 22nd.. We met some very nice people, lots of true "Nelson" supporters. Unfortunately it wasn't easy finding where you would be.</p> <p>Senator Nelson, we believe that it's important for you to hear what Floridians are thinking and talking about regarding the war in Iraq. Staff in 3 of your district offices refused to give Florida For Peace members any information about <a href="http://roskampinstitute.wordpress.com/2007/08/22/senator-nelson-visit-roskamp-institute/">where you were going to be</a> and told us to call your Washington, D.C. office. The D.C. office was completely surprised and we were told that we should, indeed, be getting the<br /> local meeting schedules from the district offices....</p> <p><a href="http://www.tnjp.org/Senator-Bill-Nelson-Staff-Blocking-Access-to-the-Senator">read more</a></p> http://www.tnjp.org/Senator-Bill-Nelson-Staff-Blocking-Access-to-the-Senator#comment Activism Florida For Peace Focus on Nelson Iraq Local Actions Wed, 29 Aug 2007 22:38:19 -0400 Lydia Vickers 191 at http://www.tnjp.org FFP Member Conference Call - Thursday August 30th http://www.tnjp.org/FFP-Member-Conference-Call-Thursday-August-30th <p><A href="http://www.tnjp.org/Focus+On+Nelson"><IMG src="http://www.tnjp.org/images/Nelson-Focus3.jpg" align="left" width="150" height="163" alt="Click Pic for info on FOCUS ON NELSON"></A>FFP member conference call - Thursday, August 30th, 8:30 PM (EDT)</p> <p>Please join FFP members on the call Thursday night. Lydia Vickers, Cactus Pat, Mystic Mary and Beverley Wiscow and many others will be in Washington, D.C. in September. Could we take your personal message to your district representative? (details below the fold)...</p> <p><a href="http://www.tnjp.org/FFP-Member-Conference-Call-Thursday-August-30th">read more</a></p> http://www.tnjp.org/FFP-Member-Conference-Call-Thursday-August-30th#comment Activism Florida For Peace Florida Politics Focus on Nelson Iraq Local Actions Wed, 29 Aug 2007 22:20:18 -0400 Lydia Vickers 190 at http://www.tnjp.org Aug. 28th Vigil in Front Of Old Capitol http://www.tnjp.org/node/181 <p>National Take A Stand Day -- Come join Florida For Peace, MoveOn.org, Tallahassee Network for Justice and Peace, Code Pink, Veterans For Peace, Vietnam Veterans Against The War, Tallahassee Now, Military Families Speak Out, True Majority, United for Peace and Justice, USAction, Working Assets and Americans Against Escalation in Iraq. Go to <a href="http://political.moveon.org/event/septembervigil/40436" title="http://political.moveon.org/event/septembervigil/40436">http://political.moveon.org/event/septembervigil/40436</a> to sign up.</p> <p>Please come join us on August 28th at 7:00 pm in front of the old Capitol Building at the corner of Apalachee Parkway and Monroe Street. We will be holding a candlelight vigil to let our congressmen know "Enough is enough".</p> <p>When most members of Congress get back to DC this September, what do you think they're going to remember about their August vacation? That day out on the fairway with the oil and gas lobbyists? The fat check they got from that big developer? The 100th baby they kissed?...</p> <p><a href="http://www.tnjp.org/node/181">read more</a></p> http://www.tnjp.org/node/181#comment Activism Florida For Peace Focus on Nelson Iraq Local Actions National Protests Peace &amp; Justice Politics Tue, 21 Aug 2007 21:58:37 -0400 Carol 181 at http://www.tnjp.org