Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

Smarty Validate Plugin for validation with MIME (isMimeType)

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
iarfhlaith
Smarty Rookie


Joined: 20 Dec 2006
Posts: 13
Location: Dublin, Ireland

PostPosted: Thu Dec 21, 2006 12:45 pm    Post subject: Smarty Validate Plugin for validation with MIME (isMimeType) Reply with quote

Hi All,

I have written a plugin for Smarty Validate that will validate an uploaded file based on its MIME type rather than it's file extension.

There is already an in-built plugin packaged with Smarty Validate to check a file's extension and compare it against a list of accepted extensions. This is called isFileType.

My new plugin (which is based on isFileType) is called isMimeType and it uses a list of accepted MIME types and compares it against the MIME type of the uploaded file.

Here's an example of how to use it:

Register it with Smarty Validator with:

Code:

SmartyValidate::register_validator('msg', 'field', 'isMimeType', true, null);


Where:

msg is the ID of {validate} placeholder that displays the error message.

field is the name of the field in the form that needs to be validated

isMimeType is the name of my plugin

true, this marks the field as optional

null, don't trim

Here's how to call it in the template:

Code:
{validate id="msg" message="File must be either JPG, GIF or PNG" type="image/pjpeg, image/jpeg, image/gif, image/png"}


And here's the plugin code:

Code:

<?php

/**
 * Project:     SmartyValidate: Form Validator for the Smarty Template Engine
 * File:        validate_criteria.isMimeType.php
 * Author:      Iarfhlaith Kelly <ik at webstrong dot net>
 * Company:      Webstrong Internet Solutions
 * Link:      www.webstrong.net
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * @link http://www.phpinsider.com/php/code/SmartyValidate/
 * @copyright 2001-2005 New Digital Group, Inc.
 * @author Monte Ohrt <monte at newdigitalgroup dot com>
 * @package SmartyValidate
 */

/**
 * test if a value is a valid MIME type. This checks the actual MIME
 * type of the file.
 *
 * @param string $value the value being tested
 * @param boolean $empty if field can be empty
 * @param array params validate parameter values
 * @param array formvars form var values
 */
function smarty_validate_criteria_isMimeType($value, $empty, &$params, &$formvars) {
   
   $_field = $params['field'];
    $_type  = isset($params['field2']) ? $params['field2'] : $params['type'];
   
    if(!isset($_FILES[$_field]))
        // nothing in the form
        return false;
   
    if($_FILES[$_field]['error'] == 4)
        // no file uploaded
        return $empty;

    $_types = preg_split('![\s,]+!', $_type, -1, PREG_SPLIT_NO_EMPTY);
   
    foreach($_types as $_key => $_val) {
        $_types[$_key] = strtolower($_types[$_key]);
    }
       
    if(!in_array(strtolower($_FILES[$_field]['type']),$_types))
        // not valid MIME type
        return false;
       
    return true;
}

?>


I hope this is useful for other people. Many thanks to Monte Ohrt as he did most of the work. (I just changed it around a bit).

Iarfhlaith
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Plugins All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP