converted to unix-style eol
[www-register-wizard.git] / plugins / captcha_pi.php
index 0484a6f..4a09dcb 100644 (file)
-<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');\r
-/**\r
- * CodeIgniter\r
- *\r
- * An open source application development framework for PHP 4.3.2 or newer\r
- *\r
- * @package            CodeIgniter\r
- * @author             ExpressionEngine Dev Team\r
- * @copyright  Copyright (c) 2008, EllisLab, Inc.\r
- * @license            http://codeigniter.com/user_guide/license.html\r
- * @link               http://codeigniter.com\r
- * @since              Version 1.0\r
- * @filesource\r
- */\r
-\r
-// ------------------------------------------------------------------------\r
-\r
-/*\r
-Instructions:\r
-\r
-Load the plugin using:\r
-\r
-       $this->load->plugin('captcha');\r
-\r
-Once loaded you can generate a captcha like this:\r
-       \r
-       $vals = array(\r
-                                       'word'           => 'Random word',\r
-                                       'img_path'       => './captcha/',\r
-                                       'img_url'        => 'http://example.com/captcha/',\r
-                                       'font_path'      => './system/fonts/texb.ttf',\r
-                                       'img_width'      => '150',\r
-                                       'img_height' => 30,\r
-                                       'expiration' => 7200\r
-                               );\r
-       \r
-       $cap = create_captcha($vals);\r
-       echo $cap['image'];\r
-       \r
-\r
-NOTES:\r
-       \r
-       The captcha function requires the GD image library.\r
-       \r
-       Only the img_path and img_url are required.\r
-       \r
-       If a "word" is not supplied, the function will generate a random\r
-       ASCII string.  You might put together your own word library that\r
-       you can draw randomly from.\r
-       \r
-       If you do not specify a path to a TRUE TYPE font, the native ugly GD\r
-       font will be used.\r
-       \r
-       The "captcha" folder must be writable (666, or 777)\r
-       \r
-       The "expiration" (in seconds) signifies how long an image will\r
-       remain in the captcha folder before it will be deleted.  The default\r
-       is two hours.\r
-\r
-RETURNED DATA\r
-\r
-The create_captcha() function returns an associative array with this data:\r
-\r
-  [array]\r
-  (\r
-       'image' => IMAGE TAG\r
-       'time'  => TIMESTAMP (in microtime)\r
-       'word'  => CAPTCHA WORD\r
-  )\r
-\r
-The "image" is the actual image tag:\r
-<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />\r
-\r
-The "time" is the micro timestamp used as the image name without the file\r
-extension.  It will be a number like this:  1139612155.3422\r
-\r
-The "word" is the word that appears in the captcha image, which if not\r
-supplied to the function, will be a random string.\r
-\r
-\r
-ADDING A DATABASE\r
-\r
-In order for the captcha function to prevent someone from posting, you will need\r
-to add the information returned from create_captcha() function to your database.\r
-Then, when the data from the form is submitted by the user you will need to verify\r
-that the data exists in the database and has not expired.\r
-\r
-Here is a table prototype:\r
-\r
-       CREATE TABLE captcha (\r
-        captcha_id bigint(13) unsigned NOT NULL auto_increment,\r
-        captcha_time int(10) unsigned NOT NULL,\r
-        ip_address varchar(16) default '0' NOT NULL,\r
-        word varchar(20) NOT NULL,\r
-        PRIMARY KEY `captcha_id` (`captcha_id`),\r
-        KEY `word` (`word`)\r
-       )\r
-\r
-\r
-Here is an example of usage with a DB.\r
-\r
-On the page where the captcha will be shown you'll have something like this:\r
-\r
-       $this->load->plugin('captcha');\r
-       $vals = array(\r
-                                       'img_path'       => './captcha/',\r
-                                       'img_url'        => 'http://example.com/captcha/'\r
-                               );\r
-       \r
-       $cap = create_captcha($vals);\r
-\r
-       $data = array(\r
-                                       'captcha_id'    => '',\r
-                                       'captcha_time'  => $cap['time'],\r
-                                       'ip_address'    => $this->input->ip_address(),\r
-                                       'word'                  => $cap['word']\r
-                               );\r
-\r
-       $query = $this->db->insert_string('captcha', $data);\r
-       $this->db->query($query);\r
-               \r
-       echo 'Submit the word you see below:';\r
-       echo $cap['image'];\r
-       echo '<input type="text" name="captcha" value="" />';\r
-\r
-\r
-Then, on the page that accepts the submission you'll have something like this:\r
-\r
-       // First, delete old captchas\r
-       $expiration = time()-7200; // Two hour limit\r
-       $DB->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);            \r
-\r
-       // Then see if a captcha exists:\r
-       $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND date > ?";\r
-       $binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);\r
-       $query = $this->db->query($sql, $binds);\r
-       $row = $query->row();\r
-\r
-       if ($row->count == 0)\r
-       {\r
-               echo "You must submit the word that appears in the image";\r
-       }\r
-\r
-*/\r
-\r
-\r
-       \r
-/**\r
-|==========================================================\r
-| Create Captcha\r
-|==========================================================\r
-|\r
-*/\r
-function create_captcha($data = '', $img_path = '', $img_url = '', $font_path = '')\r
-{              \r
-       $defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200);                \r
-       \r
-       foreach ($defaults as $key => $val)\r
-       {\r
-               if ( ! is_array($data))\r
-               {\r
-                       if ( ! isset($$key) OR $$key == '')\r
-                       {\r
-                               $$key = $val;\r
-                       }\r
-               }\r
-               else\r
-               {                       \r
-                       $$key = ( ! isset($data[$key])) ? $val : $data[$key];\r
-               }\r
-       }\r
-       \r
-       if ($img_path == '' OR $img_url == '')\r
-       {\r
-               return FALSE;\r
-       }\r
-\r
-       if ( ! @is_dir($img_path))\r
-       {\r
-               return FALSE;\r
-       }\r
-       \r
-       if ( ! is_really_writable($img_path))\r
-       {\r
-               return FALSE;\r
-       }\r
-                       \r
-       if ( ! extension_loaded('gd'))\r
-       {\r
-               return FALSE;\r
-       }               \r
-       \r
-       // -----------------------------------\r
-       // Remove old images    \r
-       // -----------------------------------\r
-                       \r
-       list($usec, $sec) = explode(" ", microtime());\r
-       $now = ((float)$usec + (float)$sec);\r
-                       \r
-       $current_dir = @opendir($img_path);\r
-       \r
-       while($filename = @readdir($current_dir))\r
-       {\r
-               if ($filename != "." and $filename != ".." and $filename != "index.html")\r
-               {\r
-                       $name = str_replace(".jpg", "", $filename);\r
-               \r
-                       if (($name + $expiration) < $now)\r
-                       {\r
-                               @unlink($img_path.$filename);\r
-                       }\r
-               }\r
-       }\r
-       \r
-       @closedir($current_dir);\r
-\r
-       // -----------------------------------\r
-       // Do we have a "word" yet?\r
-       // -----------------------------------\r
-       \r
-   if ($word == '')\r
-   {\r
-               $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r
-\r
-               $str = '';\r
-               for ($i = 0; $i < 8; $i++)\r
-               {\r
-                       $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);\r
-               }\r
-               \r
-               $word = $str;\r
-   }\r
-       \r
-       // -----------------------------------\r
-       // Determine angle and position \r
-       // -----------------------------------\r
-       \r
-       $length = strlen($word);\r
-       $angle  = ($length >= 6) ? rand(-($length-6), ($length-6)) : 0;\r
-       $x_axis = rand(6, (360/$length)-16);                    \r
-       $y_axis = ($angle >= 0 ) ? rand($img_height, $img_width) : rand(6, $img_height);\r
-       \r
-       // -----------------------------------\r
-       // Create image\r
-       // -----------------------------------\r
-                       \r
-       // PHP.net recommends imagecreatetruecolor(), but it isn't always available\r
-       if (function_exists('imagecreatetruecolor'))\r
-       {\r
-               $im = imagecreatetruecolor($img_width, $img_height);\r
-       }\r
-       else\r
-       {\r
-               $im = imagecreate($img_width, $img_height);\r
-       }\r
-                       \r
-       // -----------------------------------\r
-       //  Assign colors\r
-       // -----------------------------------\r
-       \r
-       $bg_color               = imagecolorallocate ($im, 255, 255, 255);\r
-       $border_color   = imagecolorallocate ($im, 153, 102, 102);\r
-       $text_color             = imagecolorallocate ($im, 204, 153, 153);\r
-       $grid_color             = imagecolorallocate($im, 255, 182, 182);\r
-       $shadow_color   = imagecolorallocate($im, 255, 240, 240);\r
-\r
-       // -----------------------------------\r
-       //  Create the rectangle\r
-       // -----------------------------------\r
-       \r
-       ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $bg_color);\r
-       \r
-       // -----------------------------------\r
-       //  Create the spiral pattern\r
-       // -----------------------------------\r
-       \r
-       $theta          = 1;\r
-       $thetac         = 7;\r
-       $radius         = 16;\r
-       $circles        = 20;\r
-       $points         = 32;\r
-\r
-       for ($i = 0; $i < ($circles * $points) - 1; $i++)\r
-       {\r
-               $theta = $theta + $thetac;\r
-               $rad = $radius * ($i / $points );\r
-               $x = ($rad * cos($theta)) + $x_axis;\r
-               $y = ($rad * sin($theta)) + $y_axis;\r
-               $theta = $theta + $thetac;\r
-               $rad1 = $radius * (($i + 1) / $points);\r
-               $x1 = ($rad1 * cos($theta)) + $x_axis;\r
-               $y1 = ($rad1 * sin($theta )) + $y_axis;\r
-               imageline($im, $x, $y, $x1, $y1, $grid_color);\r
-               $theta = $theta - $thetac;\r
-       }\r
-\r
-       // -----------------------------------\r
-       //  Write the text\r
-       // -----------------------------------\r
-       \r
-       $use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE;\r
-               \r
-       if ($use_font == FALSE)\r
-       {\r
-               $font_size = 5;\r
-               $x = rand(0, $img_width/($length/3));\r
-               $y = 0;\r
-       }\r
-       else\r
-       {\r
-               $font_size      = 16;\r
-               $x = rand(0, $img_width/($length/1.5));\r
-               $y = $font_size+2;\r
-       }\r
-\r
-       for ($i = 0; $i < strlen($word); $i++)\r
-       {\r
-               if ($use_font == FALSE)\r
-               {\r
-                       $y = rand(0 , $img_height/2);\r
-                       imagestring($im, $font_size, $x, $y, substr($word, $i, 1), $text_color);\r
-                       $x += ($font_size*2);\r
-               }\r
-               else\r
-               {               \r
-                       $y = rand($img_height/2, $img_height-3);\r
-                       imagettftext($im, $font_size, $angle, $x, $y, $text_color, $font_path, substr($word, $i, 1));\r
-                       $x += $font_size;\r
-               }\r
-       }\r
-       \r
-\r
-       // -----------------------------------\r
-       //  Create the border\r
-       // -----------------------------------\r
-\r
-       imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);          \r
-\r
-       // -----------------------------------\r
-       //  Generate the image\r
-       // -----------------------------------\r
-       \r
-       $img_name = $now.'.jpg';\r
-\r
-       ImageJPEG($im, $img_path.$img_name);\r
-       \r
-       $img = "<img src=\"$img_url$img_name\" width=\"$img_width\" height=\"$img_height\" style=\"border:0;\" alt=\" \" />";\r
-       \r
-       ImageDestroy($im);\r
-               \r
-       return array('word' => $word, 'time' => $now, 'image' => $img);\r
-}\r
-\r
-\r
-/* End of file captcha_pi.php */\r
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+/**
+ * CodeIgniter
+ *
+ * An open source application development framework for PHP 4.3.2 or newer
+ *
+ * @package            CodeIgniter
+ * @author             ExpressionEngine Dev Team
+ * @copyright  Copyright (c) 2008, EllisLab, Inc.
+ * @license            http://codeigniter.com/user_guide/license.html
+ * @link               http://codeigniter.com
+ * @since              Version 1.0
+ * @filesource
+ */
+
+// ------------------------------------------------------------------------
+
+/*
+Instructions:
+
+Load the plugin using:
+
+       $this->load->plugin('captcha');
+
+Once loaded you can generate a captcha like this:
+       
+       $vals = array(
+                                       'word'           => 'Random word',
+                                       'img_path'       => './captcha/',
+                                       'img_url'        => 'http://example.com/captcha/',
+                                       'font_path'      => './system/fonts/texb.ttf',
+                                       'img_width'      => '150',
+                                       'img_height' => 30,
+                                       'expiration' => 7200
+                               );
+       
+       $cap = create_captcha($vals);
+       echo $cap['image'];
+       
+
+NOTES:
+       
+       The captcha function requires the GD image library.
+       
+       Only the img_path and img_url are required.
+       
+       If a "word" is not supplied, the function will generate a random
+       ASCII string.  You might put together your own word library that
+       you can draw randomly from.
+       
+       If you do not specify a path to a TRUE TYPE font, the native ugly GD
+       font will be used.
+       
+       The "captcha" folder must be writable (666, or 777)
+       
+       The "expiration" (in seconds) signifies how long an image will
+       remain in the captcha folder before it will be deleted.  The default
+       is two hours.
+
+RETURNED DATA
+
+The create_captcha() function returns an associative array with this data:
+
+  [array]
+  (
+       'image' => IMAGE TAG
+       'time'  => TIMESTAMP (in microtime)
+       'word'  => CAPTCHA WORD
+  )
+
+The "image" is the actual image tag:
+<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
+
+The "time" is the micro timestamp used as the image name without the file
+extension.  It will be a number like this:  1139612155.3422
+
+The "word" is the word that appears in the captcha image, which if not
+supplied to the function, will be a random string.
+
+
+ADDING A DATABASE
+
+In order for the captcha function to prevent someone from posting, you will need
+to add the information returned from create_captcha() function to your database.
+Then, when the data from the form is submitted by the user you will need to verify
+that the data exists in the database and has not expired.
+
+Here is a table prototype:
+
+       CREATE TABLE captcha (
+        captcha_id bigint(13) unsigned NOT NULL auto_increment,
+        captcha_time int(10) unsigned NOT NULL,
+        ip_address varchar(16) default '0' NOT NULL,
+        word varchar(20) NOT NULL,
+        PRIMARY KEY `captcha_id` (`captcha_id`),
+        KEY `word` (`word`)
+       )
+
+
+Here is an example of usage with a DB.
+
+On the page where the captcha will be shown you'll have something like this:
+
+       $this->load->plugin('captcha');
+       $vals = array(
+                                       'img_path'       => './captcha/',
+                                       'img_url'        => 'http://example.com/captcha/'
+                               );
+       
+       $cap = create_captcha($vals);
+
+       $data = array(
+                                       'captcha_id'    => '',
+                                       'captcha_time'  => $cap['time'],
+                                       'ip_address'    => $this->input->ip_address(),
+                                       'word'                  => $cap['word']
+                               );
+
+       $query = $this->db->insert_string('captcha', $data);
+       $this->db->query($query);
+               
+       echo 'Submit the word you see below:';
+       echo $cap['image'];
+       echo '<input type="text" name="captcha" value="" />';
+
+
+Then, on the page that accepts the submission you'll have something like this:
+
+       // First, delete old captchas
+       $expiration = time()-7200; // Two hour limit
+       $DB->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);            
+
+       // Then see if a captcha exists:
+       $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND date > ?";
+       $binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
+       $query = $this->db->query($sql, $binds);
+       $row = $query->row();
+
+       if ($row->count == 0)
+       {
+               echo "You must submit the word that appears in the image";
+       }
+
+*/
+
+
+       
+/**
+|==========================================================
+| Create Captcha
+|==========================================================
+|
+*/
+function create_captcha($data = '', $img_path = '', $img_url = '', $font_path = '')
+{              
+       $defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200);                
+       
+       foreach ($defaults as $key => $val)
+       {
+               if ( ! is_array($data))
+               {
+                       if ( ! isset($$key) OR $$key == '')
+                       {
+                               $$key = $val;
+                       }
+               }
+               else
+               {                       
+                       $$key = ( ! isset($data[$key])) ? $val : $data[$key];
+               }
+       }
+       
+       if ($img_path == '' OR $img_url == '')
+       {
+               return FALSE;
+       }
+
+       if ( ! @is_dir($img_path))
+       {
+               return FALSE;
+       }
+       
+       if ( ! is_really_writable($img_path))
+       {
+               return FALSE;
+       }
+                       
+       if ( ! extension_loaded('gd'))
+       {
+               return FALSE;
+       }               
+       
+       // -----------------------------------
+       // Remove old images    
+       // -----------------------------------
+                       
+       list($usec, $sec) = explode(" ", microtime());
+       $now = ((float)$usec + (float)$sec);
+                       
+       $current_dir = @opendir($img_path);
+       
+       while($filename = @readdir($current_dir))
+       {
+               if ($filename != "." and $filename != ".." and $filename != "index.html")
+               {
+                       $name = str_replace(".jpg", "", $filename);
+               
+                       if (($name + $expiration) < $now)
+                       {
+                               @unlink($img_path.$filename);
+                       }
+               }
+       }
+       
+       @closedir($current_dir);
+
+       // -----------------------------------
+       // Do we have a "word" yet?
+       // -----------------------------------
+       
+   if ($word == '')
+   {
+               $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
+
+               $str = '';
+               for ($i = 0; $i < 8; $i++)
+               {
+                       $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
+               }
+               
+               $word = $str;
+   }
+       
+       // -----------------------------------
+       // Determine angle and position 
+       // -----------------------------------
+       
+       $length = strlen($word);
+       $angle  = ($length >= 6) ? rand(-($length-6), ($length-6)) : 0;
+       $x_axis = rand(6, (360/$length)-16);                    
+       $y_axis = ($angle >= 0 ) ? rand($img_height, $img_width) : rand(6, $img_height);
+       
+       // -----------------------------------
+       // Create image
+       // -----------------------------------
+                       
+       // PHP.net recommends imagecreatetruecolor(), but it isn't always available
+       if (function_exists('imagecreatetruecolor'))
+       {
+               $im = imagecreatetruecolor($img_width, $img_height);
+       }
+       else
+       {
+               $im = imagecreate($img_width, $img_height);
+       }
+                       
+       // -----------------------------------
+       //  Assign colors
+       // -----------------------------------
+       
+       $bg_color               = imagecolorallocate ($im, 255, 255, 255);
+       $border_color   = imagecolorallocate ($im, 153, 102, 102);
+       $text_color             = imagecolorallocate ($im, 204, 153, 153);
+       $grid_color             = imagecolorallocate($im, 255, 182, 182);
+       $shadow_color   = imagecolorallocate($im, 255, 240, 240);
+
+       // -----------------------------------
+       //  Create the rectangle
+       // -----------------------------------
+       
+       ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $bg_color);
+       
+       // -----------------------------------
+       //  Create the spiral pattern
+       // -----------------------------------
+       
+       $theta          = 1;
+       $thetac         = 7;
+       $radius         = 16;
+       $circles        = 20;
+       $points         = 32;
+
+       for ($i = 0; $i < ($circles * $points) - 1; $i++)
+       {
+               $theta = $theta + $thetac;
+               $rad = $radius * ($i / $points );
+               $x = ($rad * cos($theta)) + $x_axis;
+               $y = ($rad * sin($theta)) + $y_axis;
+               $theta = $theta + $thetac;
+               $rad1 = $radius * (($i + 1) / $points);
+               $x1 = ($rad1 * cos($theta)) + $x_axis;
+               $y1 = ($rad1 * sin($theta )) + $y_axis;
+               imageline($im, $x, $y, $x1, $y1, $grid_color);
+               $theta = $theta - $thetac;
+       }
+
+       // -----------------------------------
+       //  Write the text
+       // -----------------------------------
+       
+       $use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE;
+               
+       if ($use_font == FALSE)
+       {
+               $font_size = 5;
+               $x = rand(0, $img_width/($length/3));
+               $y = 0;
+       }
+       else
+       {
+               $font_size      = 16;
+               $x = rand(0, $img_width/($length/1.5));
+               $y = $font_size+2;
+       }
+
+       for ($i = 0; $i < strlen($word); $i++)
+       {
+               if ($use_font == FALSE)
+               {
+                       $y = rand(0 , $img_height/2);
+                       imagestring($im, $font_size, $x, $y, substr($word, $i, 1), $text_color);
+                       $x += ($font_size*2);
+               }
+               else
+               {               
+                       $y = rand($img_height/2, $img_height-3);
+                       imagettftext($im, $font_size, $angle, $x, $y, $text_color, $font_path, substr($word, $i, 1));
+                       $x += $font_size;
+               }
+       }
+       
+
+       // -----------------------------------
+       //  Create the border
+       // -----------------------------------
+
+       imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);          
+
+       // -----------------------------------
+       //  Generate the image
+       // -----------------------------------
+       
+       $img_name = $now.'.jpg';
+
+       ImageJPEG($im, $img_path.$img_name);
+       
+       $img = "<img src=\"$img_url$img_name\" width=\"$img_width\" height=\"$img_height\" style=\"border:0;\" alt=\" \" />";
+       
+       ImageDestroy($im);
+               
+       return array('word' => $word, 'time' => $now, 'image' => $img);
+}
+
+
+/* End of file captcha_pi.php */
 /* Location: ./system/plugins/captcha_pi.php */
\ No newline at end of file