Archive for January, 2007

PHP 5 Email Class

by Matt Danger on Jan.25, 2007, under PHP

Here is an example class that you can use to send email to users. It includes a properly formatted email body meta information that should avoid most spam filters.

<?php
 
/****************************************************
*
* File:     class.email.php
* Purpose:  Email Class
* Author:   Matt West, http://mattdanger.net
* Date:     January 25, 2007
*
****************************************************/
 
class Email {
 
    // Public variables
    public $recipient;
    public $sender;
    public $reply_to;
    public $subject;
    public $body;
    public $cc;
    public $bcc;
    public $headers;
 
    /**
     * Constructor: Read in $file.
     * @param string $to        Recipient
     * @param array $from       "Sender's Name" => "Sender's Email"
     * @param string $subject   Email subject
     * @param string $body      Email body
     */
    public function __construct ($to, $from = array(), $subject, $body) {
 
        // Set receiver
        $this->receiver($to);
 
        // Set sender
        if ( !empty($from) ) {
 
            $this->sender = array( key($from) => $from[ key($from) ] );
 
        } else {
 
            $this->sender = array( $_SERVER['SERVER_ADMIN'] => $_SERVER['SERVER_ADMIN'] . '@' . $_SERVER['SERVER_NAME'] );
 
        }
 
        // Set subject
        $this->subject($subject);
 
        // Set body
        $this->body($body);
 
    }
 
    /**
     * receiver(): Set receiver of the email
     * @param array $send_to List of Names & Email addresses
     */
    public function receiver ($send_to) {
 
        foreach ($send_to as $name => $email) {
 
            if ( $this->email_is_valid($email) ) {
 
                if ( !is_numeric($name) ) { 
 
                    $this->recipient = ucfirst($name) . ' <' . $email . '>';
 
                } else {
 
                    $this->recipient = $email;
 
                }
 
                $this->recipient .= ', ';
 
            } else { 
 
                exit( $email . " is not a valid email address." ); 
 
            }
 
        }
 
        $this->recipient = preg_replace('/, $/', '', $this->recipient);
 
    }
 
    /**
     * sender(): Set send of the email
     * @param array $sender Name & Email address
     */
    public function sender ($sender) {
 
        if ( email_is_valid($sender[0]) ) {
 
            if ( !is_numeric( key($sender) ) ) { 
 
                $this->sender = ucfirst( key($sender) ) . ' <' . $email . '>';
 
            } else {
 
                $this->sender = $sender[0];
 
            }
 
        } else {
 
            exit( $sender[0] . " is not a valid email address." ); 
 
        }
 
    }
 
    /**
     * reply_to(): Set send of the email
     * @param array $reply_to Name & Email address
     */
    public function reply_to ($reply_to) {
 
        if ( email_is_valid($reply_to[0]) ) {
 
            if ( !is_numeric( key($reply_to) ) ) { 
 
                $this->reply_to = ucfirst( key($reply_to) ) . ' <' . $email . '>';
 
            } else {
 
                $this->reply_to = $sender[ key($reply_to) ];
 
            }
 
        } else {
 
            exit( $reply_to[0] . " is not a valid email address." ); 
 
        }
 
    }
 
    /**
     * cc(): Set Cc of the email
     * @param array $cc List of Names & Email addresses
     */
    public function cc ($cc) {
 
        foreach ($cc as $name => $email) {
 
            if ( email_is_valid($email) ) {
 
                if ( !is_numeric($name) ) { 
 
                    $this->cc = ucfirst($name) . ' <' . $email . '>';
 
                } else {
 
                    $this->cc = $email;
 
                }
 
                $this->cc .= ', ';
 
            } else { 
 
                exit( $email . " is not a valid email address." ); 
 
            }
 
        }
 
        $this->cc = preg_replace('/, $/', '', $this->to);
 
    }
 
    /**
     * bcc(): Set Bcc of the email
     * @param array $bcc List of Names & Email addresses
     */
    public function bcc ($bcc) {
 
        foreach ($bcc as $name => $email) {
 
            if ( !is_numeric($name) ) { 
 
                $this->bcc = ucfirst($name) . ' <' . $email . '>';
 
            } else {
 
                $this->bcc = $email;
 
            }
 
            $this->bcc .= ', ';
 
        }
 
        $this->bcc = preg_replace('/, $/', '', $this->to);
 
    }
 
    /**
     * set_headers(): Set email headers
     */
    public function set_headers () {
 
        $this->set_from();
 
        $this->headers  = "MIME-Version: 1.0rn"
                        . "From: ". $this->sender . "rn"
                        . "To: " . $this->recipient . "rn";
 
        if ( !empty($this->reply_to) ) $this->headers .= "Reply-To: " . $this->reply_to . "rn";
        if ( !empty($this->cc) ) $this->headers .= "Cc: " . $this->cc . "rn"; 
        if ( !empty($this->bcc) ) $this->headers .= "Bcc: " . $this->bcc . "rn"; 
 
        $this->headers .= "X-Priority: 1rn"
                        . "X-Mailer: PHP/" . phpversion() . "rn"
                        . "Content-type: text/html; charset=iso-8859-1rn";
 
    }
 
    /**
     * subject(): Sets the subject of the email.
     * @param string $subject The subject message.
     */
    public function subject ($subject) {
 
        // Strip any newlines
        $this->subject = str_replace('n', '', $subject);
 
    }
 
    /**
     * body(): Sets the body message of the email.
     * @param string $body The body message.
     */
    public function body ($body) {
 
        $this->body = $body;
 
    }
 
    /**
     * send(): Send the email
     * @returns boolean True if successful, false if not.
     */
    public function send () {
 
        if (mail ( $this->recipient, $this->subject, $this->body, $this->headers)) {
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * email_is_valid():    Check whether email address is valid
     * @param string $email Email address to check
     * @returns boolean     True if address is valid, false if not.
     */
    private function email_is_valid ($email) {
 
        if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$", $email)) {
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
}
 
?>
Leave a Comment :, , more...

PHP Login Class

by Matt Danger on Jan.15, 2007, under PHP

Here is an example of a PHP 4.2 Login class that you can use when writing your own CMS.

<?php
 
/****************************************************
*
* File:    class.login.php
* Author:  Matt West, 2007
* Purpose: Login class
*
*****************************************************/
 
class Login {
 
    // Public variables
    var $username;
    var $cookie;
 
    function Login() { }
 
    /**
     * login(): Authenticate the user's username & password
     * @param string $username User's username in the DB
     * @param string $password User's password in the DB
     * @param object $DB    MySQL database class object
     * @param string $table Table to query from
     * @returns bool        True if login successful, false if not
     */
 
    function login ($username, $password, $DB, $table = 'users') {
 
        $this->username = $username;
 
        $DB->query("SELECT `username`, `salt`, `password` FROM `$table` WHERE `username` = '$username' LIMIT 1");
 
        return ( $DB->result['password'] == sha1($DB->result['salt'] . $password) ) ? true : false ;
 
    }
 
    /**
     * login_admin(): Authenticate the an admin's username & password
     * @param string $username User's username in the DB
     * @param string $password User's password in the DB
     * @param object $DB    MySQL database class object
     * @param string $table Table to query from
     * @returns bool        True if login successful, false if not
     */
    function login_admin ($username, $password, $DB, $table = 'users') {
 
        $this->username = $username;
 
        $DB->query("SELECT `username`, `salt`, `password`, `user_level` FROM `$table` WHERE `username` = '$username' LIMIT 1");
 
        if ( ( $DB->result['password'] == sha1($DB->result['salt'] . $password) ) && ( $DB->result['user_level'] ) == '3') {
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * set_cookie():        Set the user's cookie
     * @param string $cookie_name   Name of the cookie
     * @param object $DB    MySQL database class object
     * @param bool $remember Whether to set for 30 days or just this session
     * @param string $table Table to query from
     * @returns bool        True if cookie was sent, false if not
     */
    function set_cookie ($cookie_name, $DB, $remember = true, $table = 'users') {
 
        $expiration = ( $remember ) ? ( time() + (60 * 60 * 24 * 30) ) : null ;
 
        $DB->query("SELECT * FROM `$table` WHERE `username` = '" . $this->username . "' LIMIT 1");
 
        return ( setcookie($cookie_name, base64_encode( 
                                $DB->result['username'] . ":" .
                                $DB->result['id'] . ":" .
                                $DB->result['user_level'] . ":" .
                                $DB->result['first_name'] . ":" .
                                $DB->result['last_name'] ), $expiration) ) ? true : false ;
 
    }
 
    /**
     * is_logged_in():      Check if user is currently logged in
     * @param string $cookie_name   Name of the cookie
     * @returns bool        True if cookie was sent, false if not
     */
    function is_logged_in ($cookie_name) {
 
        $this->cookie = explode(':', base64_decode($_COOKIE[$cookie_name]) );
 
    }
 
    /**
     * is_admin_logged_in(): Check if user is currently logged in
     * @param string $cookie_name   Name of the cookie
     * @returns bool True if cookie was sent, false if not
     */
    function is_admin_logged_in ($cookie_name) {
 
        if ( isset($_COOKIE[$cookie_name]) ) {
 
            $this->cookie = explode(':', base64_decode($_COOKIE[$cookie_name]) );
 
            if ( $this->cookie[2] == 3 ) {
 
                return true;
 
            } else {
 
                return false;
 
            }
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * logout(): Clear the user's cookie
     * @param string $cookie_name   Name of the cookie
     */
    function logout ($cookie_name) {
 
        setcookie($cookie_name, '');
 
    }
 
}
 
?>
Leave a Comment :, more...

PHP photo resizing class example

by Matt Danger on Jan.12, 2007, under PHP

Here is an example of a PHP class that manages simple photo resizing and saving using the GD library.

<?php
 
/****************************************************
*
* Purpose: Photo Resizing Class
* Author:  Matt West, http://mattdanger.net
* Date:    January 12th, 2007
*
****************************************************/
 
class Photo {
 
    // Private variables
    private $orig_image;
    private $portrait_frame;    // 1 = Landscape, 2 = Portrait
    private $image_size;
    private $src_width;
    private $src_height;
    private $src_image;
    private $dest_height;
    private $dest_width;
    private $dest_image;
    private $ratio;
    private $scale;
 
    // Public variables
    public $allowed_types = array('jpeg', 'jpg', 'png', 'gif');
 
    /**
     * Constructor:         Contruct the photo object
     * @param array $photo  Array of photo data, usually $_FILES['photo_name']
     */
    public function __construct($photo) {
 
        $this->photo($photo);
 
    }
 
    /**
     * photo():             Create new image resource
     * @param string $photo Array of photo data
     */
    public function photo($photo) {
 
        $this->orig_image = $photo;
 
        // Confirm photo is an allowed type;
        if ( !in_array(ereg_replace('image/', '', $this->orig_image['type']), $this->allowed_types) ) {
 
            exit("Photo type is '" . $this->orig_image['type'] . "' which is not allowed");
 
        }
 
        // Get image X and Y values in order to determine photo framing
        $this->image_size = getimagesize($this->orig_image['tmp_name']);
        $this->src_width = $this->image_size[0];
        $this->src_height = $this->image_size[1];
        $this->dest_height = 0;
 
        // 1 = Landscape, 2 = Portrait
        $this->photo_framing = ($this->src_width > $this->src_height) ? 1 : 2 ;
 
        // Calculate the ratio at which to resize based on the dimentions
        $this->ratio = $this->src_width / $this->src_height;
 
    }
 
    /**
     * scale_to_width():    Sets the width of the resize value
     * @param int $width    Width in pixels
     * @returns boolean     Returns true if successful, false if it was not.
     */
    public function scale_to_width($width) {
 
        // Set the destination width value
        $this->dest_width = $width;
 
        // Calculate the value at which to scale the image
        $this->scale = ($this->ratio) ? $this->dest_width / $this->src_width : $this->dest_height / $this->src_height; 
 
        if ($this->scale_image()) {
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * scale_to_height():   Sets the height of the resize value
     * @param int $height   Height in pixels
     * @returns boolean     Returns true if successful, false if it was not.
     */
    public function scale_to_height($height) {
 
        // Set the destination height value
        $this->dest_height = $height;
 
        // Calculate the ratio at which to resize based on the dimentions
        $this->ratio = $this->src_width / $this->src_height;
 
        // Calculate the value at which to scale the image
        $this->scale = ($this->ratio) ? $this->dest_height / $this->src_height : $this->dest_width / $this->src_width ; 
 
        if ($this->scale_image()) {
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * scale_image():   Resize image proportionally
     * @returns boolean Returns true if successful, false if it was not.
     */
    private function scale_image () {
 
        if ($this->scale > 1) {
 
            exit ("The scale width supplied is larger than the original image. Please try a smaller number.");
 
        }
 
        $this->dest_width = $this->src_width * $this->scale;
        $this->dest_height = $this->src_height * $this->scale;
 
        if ( $this->dest_width >= $this->src_width && $this->dest_width >= $this->src_width ) $this->scale = 1;
 
        $this->src_image = imagecreatefromjpeg ($this->orig_image['tmp_name']);
 
        $this->dest_image = imagecreatetruecolor ($this->src_width * $this->scale, $this->src_height * $this->scale);
 
        if ( imagecopyresampled(   $this->dest_image, 
                                    $this->src_image, 
                                    0, 0, 0, 0, 
                                    $this->dest_width, 
                                    $this->dest_height, 
                                    $this->src_width, 
                                    $this->src_height) ) { 
 
            return true;
 
        } else {
 
            return false;
 
        }
 
    }
 
    /**
     * save_photo():            Saves the resized photo
     * @param string $filename  The path and filename to save the file (ex: "/path/to/image.jpg")
     * @param int $compression  A number from 1-100 representing the level of compression. 100 is the least compression.
     * @returns boolean         Returns true if save was successful, false if it was not.
     */
    public function save_photo ($filename, $compression = 80) {
 
        if ( imagejpeg($this->dest_image, $filename, $compression) ) {
 
            $return_value = true;
 
        } else {
 
            $return_value = false;
 
        }
 
        imagedestroy($this->src_image);
        imagedestroy($this->dest_image);
        return $return_value;
 
    }
 
}
 
?>
Leave a Comment :, , , , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Send me a message on AIM!

Friends

Read what I read...