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 - Tom&#039;s List http://tnjp.org/taxonomy/term/9/0 Tallahassee's Progressive Calender en Happy Fourth Of July http://tnjp.org/Happy-Fourth-Of-July-2011 <p>Happy Fourth Of July!!!!!</p> <p>I’ve always been a history buff, even before I went to Vietnam.</p> <p>Reading history was one of the reasons, I went from a supporter of the war, even so far as to become a US Army NCO to a dissident speaking out and even a criminal committing civil disobedience in opposition.</p> <p>Some reasons that are overlooked in US War of Independence revolve around ‘The Proclamation Line of 1763’ and the unwillingness of the colonists to pay taxes for current and past wars against the First Nations.</p> <p>When the colonists refused to pay current and past wars, the Brits made ‘The Proclamation Line of 1763,’ which was the limit of colonial expansion West. This was based on the simple proven theory that if you didn’t invade another’s land, they won’t attack you. This displeased two sets of colonists, the rugged frontiersman looking to steal land to own and more importantly the land speculators, the Banksters of the day. The main problem in turning a claim to cash was ethnically cleansing the natives. One of the most notable of the speculators was George Washington, who had been trading in First Nations land for decades. He made and lost several fortunes trading and finally gave up...</p> <p><a href="http://tnjp.org/Happy-Fourth-Of-July-2011">read more</a></p> http://tnjp.org/Happy-Fourth-Of-July-2011#comment Florida Politics Peace &amp; Justice Tom&#039;s List Mon, 04 Jul 2011 16:01:29 -0400 Tom Baxter 410 at http://tnjp.org Tom's List 02SEPT2007 http://tnjp.org/Toms-List-02SEPT2007 <p>9 ITEMS 2 NEW + 14 Links </p> <p>Friends Committee on National Legislation [The Quakers] WAR IS NOT THE ANSWER yard signs are now available in Tallahassee at the Eternal Peace Vigil and Quarter Moon Imports<br /> FMI - <a href="http://tinyurl.com/ywmft7" title="http://tinyurl.com/ywmft7">http://tinyurl.com/ywmft7</a></p> <p>*********************************</p> <p>New/Changed items indicated with =</p> <p>item 1 Eternal Capitol Vigil Sunday &amp; Thursday</p> <p>item 2 Big Bend Chapter NW FL Federation of Labor annual Labor Day Picnic 03SEP2007</p> <p>item 3 John McCutcheon Benefit for Grassroots 09SEP2007</p> <p>item 4 "The Fairness for All Families Coalition” Benefit 10SEP2007</p> <p>=item 5 Big Bend Farmworker Alliance 10SEP2007</p> <p>=item 6 Anti-War Demonstration Washington DC 15SEP2007 / Tallahassee 16SEP2007</p> <p>item 7 2000 Peace Cranes 02NOV2007<br /> “Tom, Could you please send out an email to your group asking for the person on your list who contacted Su Ecenia by phone about making the cranes please call her again as she misplaced her contact information. Hate to ask you to go through this trouble but this woman was very interested in participating and even offered to help financially (not too many people these days volunteer unsolicited). I would hate for her to think I just blew her off. My home phone is 668-2755 cell 545-3869. Thank-you! Su Ecenia”</p> <p><a href="http://tnjp.org/Toms-List-02SEPT2007">read more</a></p> http://tnjp.org/Toms-List-02SEPT2007#comment Activism Local Actions Tom&#039;s List Sun, 02 Sep 2007 20:00:35 -0400 Tom Baxter 197 at http://tnjp.org Tom's List 23AUG2007 http://tnjp.org/Toms-List-23AUG2007 <p>8 ITEMS 4 NEW + 21 Links</p> <p>Friends Committee on National Legislation [The Quakers] WAR IS NOT THE ANSWER yard signs are now available in Tallahassee at the Eternal Peace Vigil and Quarter Moon Imports<br /> FMI - <a href="http://tinyurl.com/ywmft7" title="http://tinyurl.com/ywmft7">http://tinyurl.com/ywmft7</a></p> <p>New/Changed items indicated with =</p> <p>item 1 1 Eternal Capitol Vigil Sunday &amp; Thursday</p> <p>=item 2 EVENING WITH DICK 24AUG2007<br /> Evening with Dick will arouse only ONCE in 2007!</p> <p>=item 3 Stand Up In September Vigil 28AUG2007</p> <p>item 4 2000 Peace Cranes 29AUG2007 - 02NOV2007</p> <p>=item 5 Big Bend Chapter Northwest Florida Federation of Labor annual Labor Day Picnic 03SEP2007</p> <p>item 6 John McCutcheon Benefit for Grassroots 09SEP2007</p> <p>=item 7 "The Fairness for All Families Coalition” Benefit 01SEP2007...</p> <p><a href="http://tnjp.org/Toms-List-23AUG2007">read more</a></p> http://tnjp.org/Toms-List-23AUG2007#comment Activism Florida Politics Local Actions Tom&#039;s List Fri, 24 Aug 2007 22:00:20 -0400 Tom Baxter 183 at http://tnjp.org Tom's List 15AUG2007 http://tnjp.org/Toms-List-15AUG2007 <p>7 ITEMS - 5 NEW +13 Links 15AUG2007</p> <p>Friends Committee on National Legislation [The Quakers] WAR IS NOT THE ANSWER yard signs are now available in Tallahassee at the Eternal Peace Vigil and Quarter Moon Imports<br /> FMI<br /> <a href="http://tinyurl.com/ywmft7" title="http://tinyurl.com/ywmft7">http://tinyurl.com/ywmft7</a></p> <p>New/Changed items indicated with =</p> <p>item 1 1 Eternal Capitol Vigil Sunday &amp; Thursday</p> <p>=item 2 War at Home Report Release at the Capitol Courtyard 16AUG2007</p> <p>=item 3 True Majority - GreenPeace Delivery Event to Boyd Volunteer Needed</p> <p>=item 4 2000 Peace Cranes 29AUG2007 - 02NOV2007</p> <p>=item 5 John McCutcheon Benefit for Grassroots 09SEP2007</p> <p>item 6 Removal and Submission Instructions</p> <p>=item 7 13 Items of Interest...</p> <p><a href="http://tnjp.org/Toms-List-15AUG2007">read more</a></p> http://tnjp.org/Toms-List-15AUG2007#comment Activism Local Actions Tom&#039;s List Wed, 15 Aug 2007 06:57:36 -0400 Tom Baxter 175 at http://tnjp.org Tom's List 22JUL2077 http://tnjp.org/Toms-List-22JUL2077 <p>4 ITEMS 2 NEW + 25 Links 22JUL2077</p> <p>Friends Committee on National Legislation [The Quakers] WAR IS NOT THE ANSWER yard signs are now available in Tallahassee at the Eternal Peace Vigil and Quarter Moon Imports<br /> FMI - <a href="http://tinyurl.com/ywmft7" title="http://tinyurl.com/ywmft7">http://tinyurl.com/ywmft7</a></p> <p>New/Changed items indicated with =</p> <p>item 1 Eternal Capitol Peace Vigil<br /> <a href="http://www.honk4peace.org" title="www.honk4peace.org">www.honk4peace.org</a></p> <p>=item 2 "Sustainable Big Bend Living Center" 28 JUL2007<br /> Planning Meeting</p> <p>=item 3 25 links of interest</p> <p>item 4 Removal and Submission Instructions</p> <p><a href="http://tnjp.org/Toms-List-22JUL2077">read more</a></p> http://tnjp.org/Toms-List-22JUL2077#comment Issues Local Actions Peace &amp; Justice Tom&#039;s List Sun, 22 Jul 2007 21:37:44 -0400 Tom Baxter 151 at http://tnjp.org Tom's List 14JUL2007 http://tnjp.org/Toms-List-14JUL2007 <p>13 ITEMS 4 NEW + 12 Links 14JUL2007</p> <p>Friends Committee on National Legislation [The Quakers] WAR IS NOT THE ANSWER yard signs are now available in Tallahassee at the Eternal Peace Vigil and Quarter Moon Imports<br /> FMI - <a href="http://tinyurl.com/ywmft7" title="http://tinyurl.com/ywmft7">http://tinyurl.com/ywmft7</a></p> <p>New/Changed items indicated with =</p> <p>item 1 Eternal Capitol Peace Vigil<br /> <a href="http://www.honk4peace.org" title="www.honk4peace.org">www.honk4peace.org</a></p> <p>item 2 Call for WOMEN artists for Healing Night 14JUL2007</p> <p>=item 3 An Evening of Chanting with Om Sweet Om 14JUL2007</p> <p>item 4 Recycling Presentation 16JUL2007</p> <p>=item 5 STOP THE WAR Planning Meeting 17JUL2007<br /> Help plan the Seventy Percent Solution Sunday Extravaganza !!</p> <p>item 6 Diane Roberts 18JUL2007</p> <p>=item 7 7th Annual Democratic Political Rally and Picnic 21JUL2007</p> <p>item 8 NAACP ACT-SO Program Awards and Recognition Banquet 21JUL2007</p> <p>item 9 33 links of interest...</p> <p><a href="http://tnjp.org/Toms-List-14JUL2007">read more</a></p> http://tnjp.org/Toms-List-14JUL2007#comment Local Actions Tom&#039;s List Sat, 14 Jul 2007 00:00:00 -0400 Tom Baxter 142 at http://tnjp.org Tom's List 06JUL2007 http://tnjp.org/Toms-List-06JUL2007 <p>13 ITEMS 4 NEW + 12 Links 06JUL2007</p> <p>Friends Committee on National Legislation [The Quakers] WAR IS NOT THE ANSWER yard signs are now available in Tallahassee at the Eternal Peace Vigil and Quarter Moon Imports<br /> FMI - <a href="http://tinyurl.com/ywmft7" title="http://tinyurl.com/ywmft7">http://tinyurl.com/ywmft7</a></p> <p>New/Changed items indicated with =</p> <p>item 1 Eternal Capitol Peace Vigil<br /> <a href="http://www.honk4peace.org" title="www.honk4peace.org">www.honk4peace.org</a></p> <p>item 2 "Keep It Sassy Tallahassee" party 07JUL2007</p> <p>item 3 Live Earth Concert House Parties 07JUL2007</p> <p>item 4 Pastors for Peace U.S./Cuba Friendshipment Caravan 09JUL2007</p> <p>=item 5 Carol Kresge - The Laos Language Project 10JUL2007</p> <p>=item 6 Tibetan Lama in Tallahassee 10JUL2007</p> <p>item 7 Diane Roberts 11/18JUL2007</p> <p>item 8 Call for WOMEN artists for Healing Night 14JUL2007</p> <p>=item 9 Recycling Presentation 16JUL2007</p> <p>=item 10 NAACP ACT-SO Program Awards and Recognition Banquet 21JUL2007</p> <p>item 11 Survey for Arts Related Folks</p> <p>item 12 12 links of interest</p> <p><a href="http://tnjp.org/Toms-List-06JUL2007">read more</a></p> http://tnjp.org/Toms-List-06JUL2007#comment Local Actions Tom&#039;s List Fri, 06 Jul 2007 01:16:18 -0400 Tom Baxter 141 at http://tnjp.org Tom's List 14JUN2007 http://tnjp.org/Toms-List-14JUN2007 <p>12 ITEMS 5 NEW 17 Links of Interest 14JUN2007</p> <p>WAR IS NOT THE ANSWER yard signs are in available Tallahassee at: </p> <p>Eternal Capitol Vigil Sunday &amp; Thursday<br /> Sundays 12:30-2:30<br /> Thursdays 4:00-6:00<br /> in front of the Old Capitol<br /> Park off Calhoun Street, behind the Vietnam Veterans Memorial's flag..<br /> <a href="http://www.tnjp.org" title="www.tnjp.org">www.tnjp.org</a><br /> 850-893-7390 [leave message]</p> <p>and</p> <p>Quarter Moon Imports<br /> 1641 North Monroe Street<br /> The Cottages at Lake Ella<br /> Tallahassee, Florida 32303<br /> Mon-Sat 10-6:30 and Sundays 12-5<br /> <a href="http://www.quartermoonimports.com" title="www.quartermoonimports.com">www.quartermoonimports.com</a></p> <p><a href="http://tnjp.org/Toms-List-14JUN2007">read more</a></p> http://tnjp.org/Toms-List-14JUN2007#comment Local Actions Tom&#039;s List Fri, 15 Jun 2007 16:50:49 -0400 Tom Baxter 113 at http://tnjp.org Tom's List 30MAY2007 http://tnjp.org/Toms-List-30MAY2007 <p>34 ITEMS 6 NEW 24 Links of Interest 30MAY2007</p> <p>Tallahassee Progressive Center Closing Report<br /> <a href="http://tinyurl.com/2c8o5f" title="http://tinyurl.com/2c8o5f">http://tinyurl.com/2c8o5f</a><br /> FMI Rich Templin rtemplin(at)flaflcio.org<br /> (850)224-6926 / (850)5664348 cell </p> <p>Friends Committee on National Legislation now has a local distributor in Tallahassee for their “WAR IS NOT THE ANSWER “ signs.<br /> See <a href="http://www.fcnl.org/forms/forms.php?type=signs" title="www.fcnl.org/forms/forms.php?type=signs">www.fcnl.org/forms/forms.php?type=signs</a></p> <p>New/Changed items indicated with =</p> <p>item 1 Eternal Capitol Peace Vigil<br /> <a href="http://www.honk4peace.org" title="www.honk4peace.org">www.honk4peace.org</a></p> <p>=item 2 Apalachicola and Carrabelle Rivers Clean-Up</p> <p>=item 3 Planning Meeting 03JUN2007 for Boyd Meeting 04JUN2007</p> <p>item 4 Friends of Wakulla Springs Clean Up 07JUN2007</p> <p>=item 5 Tallahassee Gay Pride Festival 09JUN2007</p> <p>=item 6 Ten Thousand Villages World Caravan Sale 15-23JUN2007</p> <p>=item 7 Democracy for America Training Academy 30JUN-01JUL2007</p> <p>item 8 Call for WOMEN artists for Healing Night 01JUL2007</p> <p>=item 9 24 links of interest</p> <p><a href="http://tnjp.org/Toms-List-30MAY2007">read more</a></p> http://tnjp.org/Toms-List-30MAY2007#comment Local Actions Tom&#039;s List Thu, 31 May 2007 05:56:47 -0400 Tom Baxter 86 at http://tnjp.org Tom's List 15MAY2007 http://tnjp.org/Toms-List-15MAY2007 <p>10 ITEMS 4 NEW 8 Links of Interest 15MAY2007</p> <p>New/Changed items indicated with =</p> <p>item 1 Eternal Capitol Peace Vigil<br /> <a href="http://www.honk4peace.org" title="www.honk4peace.org">www.honk4peace.org</a></p> <p>=item 2 Finley/John Sims: The Art Not Hate Workshop 17-18MAY2007</p> <p>item 3 Disaster Animal Response Team Training 18-20MAY2007</p> <p>item 4 Jazz for Justice 20MAY2007</p> <p>item 5 Tallahassee Equality Florida Meet-up Social 22MAY2007</p> <p>=item 6 Memorial Day 27MAY2007</p> <p>=item 7 Friends of Wakulla Springs Clean Up 07JUN2007</p> <p>item 8 Call for WOMEN artists for Healing Night 01JUL2007</p> <p>=item 9 Links of interest<br /> 1 WHY I FIGHT - Tom Baxter<br /> 2-6 Iraq<br /> 7 Coalition of Immokalee Workers<br /> 8 Tallahassee Network for Justice and Peace Website Update</p> <p><a href="http://tnjp.org/Toms-List-15MAY2007">read more</a></p> http://tnjp.org/Toms-List-15MAY2007#comment Activism Local Actions Tom&#039;s List Wed, 16 May 2007 21:08:48 -0400 Tom Baxter 56 at http://tnjp.org