%PDF- %PDF-
| Direktori : /var/www/crm/modules/Import/ |
| Current File : /var/www/crm/modules/Import/ImportFieldSanitize.php |
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
/*********************************************************************************
* SugarCRM Community Edition is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2012 SugarCRM Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program 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 Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo. If the display of the logo is not reasonably feasible for
* technical reasons, the Appropriate Legal Notices must display the words
* "Powered by SugarCRM".
********************************************************************************/
/*********************************************************************************
* Description: class for sanitizing field values
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
********************************************************************************/
require_once('modules/Import/sources/ImportFile.php');
class ImportFieldSanitize
{
/**
* properties set to handle locale formatting
*/
public $dateformat;
public $timeformat;
public $timezone;
public $currency_symbol;
public $default_currency_significant_digits;
public $num_grp_sep;
public $dec_sep;
public $default_locale_name_format;
/**
* array of modules/users_last_import ids pairs that are created in this class
* needs to be reset after the row is imported
*/
public static $createdBeans = array();
/**
* true if we will create related beans during the sanitize process
*/
public $addRelatedBean = false;
/**
* Checks the SugarField defintion for an available santization method.
*
* @param $value string
* @param $vardef array
* @param $focus object bean of the module we're importing into
* @return string sanitized and validated value on success, bool false on failure
*/
public function __call(
$name,
$params
)
{
static $sfh;
if(!isset($sfh)) {
require_once('include/SugarFields/SugarFieldHandler.php');
$sfh = new SugarFieldHandler();
}
$value = $params[0];
$vardef = $params[1];
if ( isset($params[2]) )
$focus = $params[2];
else
$focus = null;
if ( $name == 'relate' && !empty($params[3]) )
$this->addRelatedBean = true;
else
$this->addRelatedBean = false;
$field = $sfh->getSugarField(ucfirst($name));
if ( $field instanceOf SugarFieldBase ) {
$value = $field->importSanitize($value,$vardef,$focus,$this);
}
return $value;
}
/**
* Validate date fields
*
* @param $value string
* @param $vardef array
* @param $focus object bean of the module we're importing into
* @return string sanitized and validated value on success, bool false on failure
*/
public function date(
$value,
$vardef,
&$focus
)
{
global $timedate;
$format = $this->dateformat;
if ( !$timedate->check_matching_format($value, $format) )
return false;
if ( !$this->isValidTimeDate($value, $format) )
return false;
$value = $timedate->swap_formats(
$value, $format, $timedate->get_date_format());
return $value;
}
/**
* Validate email fields
*
* @param $value string
* @param $vardef array
* @param $focus object bean of the module we're importing into
* @return string sanitized and validated value on success, bool false on failure
*/
public function email(
$value,
$vardef
)
{
// cache $sea instance
static $sea;
if ( !($sea instanceof SugarEmailAddress) ) {
$sea = new SugarEmailAddress;
}
if ( !empty($value) && !preg_match($sea->regex,$value) ) {
return false;
}
return $value;
}
/**
* Validate sync_to_outlook field
*
* @param $value string
* @param $vardef array
* @param $bad_names array used to return list of bad users/teams in $value
* @return string sanitized and validated value on success, bool false on failure
*/
public function synctooutlook(
$value,
$vardef,
&$bad_names
)
{
static $focus_user;
// cache this object since we'll be reusing it a bunch
if ( !($focus_user instanceof User) ) {
$focus_user = new User();
}
if ( !empty($value) && strtolower($value) != "all" ) {
$theList = explode(",",$value);
$isValid = true;
$bad_names = array();
foreach ($theList as $eachItem) {
if ( $focus_user->retrieve_user_id($eachItem)
|| $focus_user->retrieve($eachItem)
) {
// all good
}
else {
$isValid = false;
$bad_names[] = $eachItem;
continue;
}
}
if(!$isValid) {
return false;
}
}
return $value;
}
/**
* Validate time fields
*
* @param $value string
* @param $vardef array
* @param $focus object bean of the module we're importing into
* @return string sanitized and validated value on success, bool false on failure
*/
public function time(
$value,
$vardef,
$focus
)
{
global $timedate;
$format = $this->timeformat;
if ( !$timedate->check_matching_format($value, $format) )
return false;
if ( !$this->isValidTimeDate($value, $format) )
return false;
$value = $timedate->swap_formats(
$value, $format, $timedate->get_time_format());
$value = $timedate->handle_offset(
$value, $timedate->get_time_format(), false, $GLOBALS['current_user'], $this->timezone);
$value = $timedate->handle_offset(
$value, $timedate->get_time_format(), true);
return $value;
}
/**
* Added to handle Bug 24104, to make sure the date/time value is correct ( i.e. 20/20/2008 doesn't work )
*
* @param $value string
* @param $format string
* @return string sanitized and validated value on success, bool false on failure
*/
public function isValidTimeDate(
$value,
$format
)
{
global $timedate;
$dateparts = array();
$reg = $timedate->get_regular_expression($format);
preg_match('@'.$reg['format'].'@', $value, $dateparts);
if ( empty($dateparts) )
return false;
if ( isset($reg['positions']['a'])
&& !in_array($dateparts[$reg['positions']['a']], array('am','pm')) )
return false;
if ( isset($reg['positions']['A'])
&& !in_array($dateparts[$reg['positions']['A']], array('AM','PM')) )
return false;
if ( isset($reg['positions']['h']) && (
!is_numeric($dateparts[$reg['positions']['h']])
|| $dateparts[$reg['positions']['h']] < 1
|| $dateparts[$reg['positions']['h']] > 12 ) )
return false;
if ( isset($reg['positions']['H']) && (
!is_numeric($dateparts[$reg['positions']['H']])
|| $dateparts[$reg['positions']['H']] < 0
|| $dateparts[$reg['positions']['H']] > 23 ) )
return false;
if ( isset($reg['positions']['i']) && (
!is_numeric($dateparts[$reg['positions']['i']])
|| $dateparts[$reg['positions']['i']] < 0
|| $dateparts[$reg['positions']['i']] > 59 ) )
return false;
if ( isset($reg['positions']['s']) && (
!is_numeric($dateparts[$reg['positions']['s']])
|| $dateparts[$reg['positions']['s']] < 0
|| $dateparts[$reg['positions']['s']] > 59 ) )
return false;
if ( isset($reg['positions']['d']) && (
!is_numeric($dateparts[$reg['positions']['d']])
|| $dateparts[$reg['positions']['d']] < 1
|| $dateparts[$reg['positions']['d']] > 31 ) )
return false;
if ( isset($reg['positions']['m']) && (
!is_numeric($dateparts[$reg['positions']['m']])
|| $dateparts[$reg['positions']['m']] < 1
|| $dateparts[$reg['positions']['m']] > 12 ) )
return false;
if ( isset($reg['positions']['Y']) &&
!is_numeric($dateparts[$reg['positions']['Y']]) )
return false;
return true;
}
}