* @package AgileBill * @version 1.4.93 */ class CORE_validate { function convert($field, $data, $type) { switch($type) { case "date": return $this->convert_date ($data,$field); break; case "time": return $this->convert_time ($data,$field); break; case "date-time": return $this->convert_date_time ($data,$field); break; case "date-now": return $this->convert_date_now($data,$field); break; case "md5": return $this->convert_md5 ($data,$field); break; case "sha": return $this->convert_sha ($data,$field); break; case "rc5": return $this->convert_rc5 ($data,$field); break; case "crypt": return $this->convert_crypt ($data,$field); break; case "encrypt": return $this->convert_encrypt ($data,$field); break; case "gpg": return $this->convert_gpg ($data,$field); break; case "pgp": return $this->convert_pgp ($data,$field); break; case "array": return $this->convert_array ($data,$field); break; case "html": return $this->convert_html ($data,$field); break; } } # convert DEFAULT_TIME_FORMT to unix time stamp function convert_time ($data,$field) { return strtotime($data); } # convert DEFAULT_DATE_FORMT to unix time stamp function convert_date ($date,$field) { if($date == '0' || $date == '') return ''; $Arr_format = split(DEFAULT_DATE_DIVIDER, UNIX_DATE_FORMAT); $Arr_date = split(DEFAULT_DATE_DIVIDER, $date); for($i=0; $i<3; $i++) { if($Arr_format[$i] == 'd') $day = $Arr_date[$i]; if($Arr_format[$i] == 'm') $month = $Arr_date[$i]; if($Arr_format[$i] == 'Y') $year = $Arr_date[$i]; } $timestamp = mktime(0, 0, 0, $month, $day, $year); return $timestamp; } # convert DEFAULT_DATE_TIME_FORMT to unix time stamp function convert_date_time ($date,$field) { if($date == '0' || $date == '') return ''; $Arr_format = split(DEFAULT_DATE_DIVIDER, UNIX_DATE_FORMAT); $Arr_date = split(DEFAULT_DATE_DIVIDER, $date); for($i=0; $i<3; $i++) { if($Arr_format[$i] == 'd') if(!empty($Arr_date[$i])) $day = $Arr_date[$i]; if($Arr_format[$i] == 'm') if(!empty($Arr_date[$i])) $month = $Arr_date[$i]; if($Arr_format[$i] == 'Y') if(!empty($Arr_date[$i])) $year = $Arr_date[$i]; } if(empty($day)) $day = date('d'); if(empty($month)) $month = date('m'); if(empty($year)) $year = date('Y'); @$timestamp = mktime( date("H"), date("i"), date("s"), $month, $day, $year); return $timestamp; } function convert_date_now ($data,$field) { return time(); } function convert_md5 ($data,$field) { if($data != "") return md5($data); else return ''; } function convert_rc5 ($data,$field) { if($data != "") return rc5($data); else return ''; } function convert_sha ($data, $field) { if($data != "") return sha1($data); else return ''; } function convert_crypt ($data,$field) { if($data != "") return crypt($data); else return ''; } function convert_encrypt ($data,$field) { if($data != "") { include_once(PATH_CORE.'crypt.inc.php'); return CORE_encrypt ($data); } else { return ''; } } function convert_gpg ($data,$field) { if($data != "") return gpg($data); else return ''; } function convert_pgp ($data,$field) { if($data != "") return pgp($data); else return ''; } function convert_array ($data,$field) { if($data != "") return serialize($data); else return serialize(Array("")); } function convert_html ($data,$field) { if($data == "") return ""; else return htmlspecialchars($data);; } function validate($field, $arr, $data, $type) { if(isset($arr["min_len"])) { if($arr["min_len"] > 1) { global $C_translate; if (strlen($data) < $arr["min_len"]) { $C_translate->value["CORE"]["min_length"] = $arr["min_len"]; $this->error[$field] = $C_translate->translate('validate_min_length','CORE',''); return FALSE; } } } if(isset($arr["max_len"])) { if($arr["max_len"] > 1) { global $C_translate; if (strlen($data) > $arr["max_len"]) { $C_translate->value["CORE"]["max_length"] = $arr["max_len"]; $this->error[$field] = $C_translate->translate('validate_max_length','CORE',''); return FALSE; } } } switch($type) { case "email": return $this->validate_email ($data,$field); break; case "date": return $this->validate_date ($data,$field); break; case "time": return $this->validate_time ($data,$field); break; case "date-time": return $this->validate_date_time ($data,$field); break; case "address": return $this->validate_address ($data,$field); break; case "zip": return $this->validate_zip ($data,$field); break; case "phone": return $this->validate_phone ($data,$field); break; case "cc": return $this->validate_cc ($data,$field, false, false); break; case "check": return $this->validate_check ($data,$field); break; case "numeric": return $this->validate_numeric ($data,$field); break; case "alphanumeric": return $this->validate_alphanumeric ($data,$field); break; case "non_numeric": return $this->validate_non_numeric ($data,$field); break; case "float": return $this->validate_float ($data,$field); break; case "any": return $this->validate_any ($data,$field); break; case "domain": return $this->validate_domain ($data,$field); break; case "ip": return $this->validate_ip ($data,$field); break; case "password": return $this->validate_password ($data,$field); break; } } function validate_email($data,$field) { if(eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $data)) { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_email','CORE',''); return FALSE; } } function validate_ip($data,$field) { $ip = $data; $valid = TRUE; if(preg_match("/^((127)|(192)|(10).*)$/", "$ip")) { global $C_translate; $this->error[$field] = $C_translate->translate('validate_ip','CORE',''); return FALSE; } $ip = explode(".", $ip); if(count($ip)!=4) { global $C_translate; $this->error[$field] = $C_translate->translate('validate_ip','CORE',''); return FALSE; } foreach($ip as $block) if(!is_numeric($block) || $block>255 || $block<1) $valid = FALSE; if($valid == FALSE) { global $C_translate; $this->error[$field] = $C_translate->translate('validate_ip','CORE',''); return FALSE; } else { return TRUE; } } function validate_domain($data,$field) { if (!preg_match('#^[a-z0-9\-]+\.([a-z0-9\-]+\.)?[a-z]+#i', $data)) { global $C_translate; $this->error[$field] = $C_translate->translate('validate_domain','CORE',''); return FALSE; } else { return true; } } function validate_date($data,$field) { if($data == '0' || $data == '') { global $C_translate; $this->error[$field] = $C_translate->translate('validate_date','CORE',''); return false; } $Arr_format = split(DEFAULT_DATE_DIVIDER, UNIX_DATE_FORMAT); $Arr_date = split(DEFAULT_DATE_DIVIDER, $data); if(!gettype($Arr_date) == 'array' || count($Arr_date) != 3) { global $C_translate; $this->error[$field] = $C_translate->translate('validate_date','CORE',''); return false; } for($i=0; $i<3; $i++) { if($Arr_format[$i] == 'd') $day = $Arr_date[$i]; if($Arr_format[$i] == 'm') $month = $Arr_date[$i]; if($Arr_format[$i] == 'Y') $year = $Arr_date[$i]; } @$timestamp = mktime(0, 0, 0, $month, $day, $year); $check_ts = mktime(0,0,0,"1","1","1979"); if($timestamp >= $check_ts) { return true; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_date','CORE',''); return false; } } function validate_time($data,$field) { return TRUE; } function validate_date_time($data,$field) { return TRUE; } function validate_address($data,$field) { if(@strlen($data) >= 2 && eregi('[0-9]{1,}', $data) && eregi('[a-z]{1,}', $data)) { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_address','CORE',''); return FALSE; } } function validate_zip($data,$field) { if(@strlen($data) >= 4 && eregi('[0-9a-zA-Z-]{4,}', $data)) { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_zip','CORE',''); return FALSE; } } function validate_phone($data,$field) { if(@strlen($data) > 9 && eregi('[0-9()-]{10,}', $data)) { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_phone','CORE',''); return FALSE; } } function validate_fax($data,$field) { if(@strlen($data) > 9 && eregi('[0-9()-]{10,}', $data)) { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_fax','CORE',''); return FALSE; } } function validate_check($data,$field) { return TRUE; } function validate_numeric($data,$field) { if(eregi("^[0-9]{1,}$", $data)) { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_numeric','CORE',''); return FALSE; } } function validate_alphanumeric($data,$field) { if(eregi("^[0-9a-zA-Z-]{1,}$", $data)) { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_alphanumeric','CORE',''); return FALSE; } } function validate_non_numeric($data,$field) { if(!eregi("[0-9]{1,}", $data)) { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_non_numeric','CORE',''); return FALSE; } } function validate_float($data,$field) { if(eregi("^[0-9\.]{1,}$", $data)) { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_float','CORE',''); return FALSE; } } function validate_any ($data,$field) { if($data != "") { return TRUE; } else { global $C_translate; $this->error[$field] = $C_translate->translate('validate_any','CORE',''); return FALSE; } } function validate_unique ($table, $field, $id, $value) { if($value == '') return TRUE; $db = &DB(); $value = $db->qstr($value); $q = "SELECT $field FROM ".AGILE_DB_PREFIX."$table WHERE $field = ".$value." "; if($id != '' && $id != 'record_id') $q .= "AND id != " . $db->qstr($id); $q .= "AND site_id = " . $db->qstr(DEFAULT_SITE); $result = $db->Execute($q); if ($result === false) { global $C_debug; $C_debug->error('validate.inc.php','validate_unique', $db->ErrorMsg()); return FALSE; } else { if($result->RecordCount() == 0) return TRUE; else return FALSE; } } function validate_cc_exp($month, $year) { if (eregi_replace("^0", "", $year) > eregi_replace("^0","", date("y"))) return true; elseif ( eregi_replace("^0","", $year) == eregi_replace("^0","", date("y")) && eregi_replace("^0","", $month) >= eregi_replace("^0","", date("m"))) return true; else return false; } function validate_cc( $ccNum, $field, $card_type, $card_type_accepted_arr ) { $v_ccNum = false; if ($card_type == "visa" || !$card_type) { // VISA if ( ereg("^4[0-9]{12}([0-9]{3})?$", $ccNum) ) { $v_ccNum = true; $c_type = 'visa'; } } else if ($card_type == "mc" || !$card_type) { // MC if ( ereg("^5[1-5][0-9]{14}$", $ccNum) ) { $v_ccNum = true; $c_type = 'mc'; } } else if ($card_type == "amex" || !$card_type) { // AMEX if ( ereg("^3[47][0-9]{13}$", $ccNum) ) { $v_ccNum = true; $c_type = 'amex'; } } else if ($card_type == "discover" || !$card_type) { // DISCOVER if ( ereg("^6011[0-9]{12}$", $ccNum) ) { $v_ccNum = true; $c_type = 'discover'; } } else if ($card_type == "delta" || !$card_type) { // DELTA ? if ( eregi ( "^4(1373[3-7]|462[0-9]{2}|5397[8-9]|". "54313|5443[2-5]|54742|567(2[5-9]|3[0-9]|4[0-5])|". "658[3-7][0-9]|659(0[1-9]|[1-4][0-9]|50)|844(09|10)|". "909[6-7][0-9]|9218[1-2]|98824)[0-9]{10}$" ) ) { $v_ccNum = true; $c_type = 'delta'; } } else if ($card_type == "solo" || !$card_type) { // SOLO ? if ( ereg("^6(3(34[5-9][0-9])|767[0-9]{2})[0-9]{10}([0-9]{2,3})?$") ) { $v_ccNum = true; $c_type = 'solo'; } } else if ($card_type == "switch" || !$card_type) { // SWITCH ? if ( ereg('^49(03(0[2-9]|3[5-9])|11(0[1-2]|7[4-9]|8[1-2])|36[0-9]{2})[0-9]{10}([0-9]{2,3})?$', $ccNum) || ereg('^564182[0-9]{10}([0-9]{2,3})?$', $ccNum) || ereg('^6(3(33[0-4][0-9])|759[0-9]{2})[0-9]{10}([0-9]{2,3})?$', $ccNum) ) { $v_ccNum = true; $c_type = 'switch'; } } else if ($card_type == "jcb" || !$card_type) { // JCB if ( ereg("^(3[0-9]{4}|2131|1800)[0-9]{11}$", $ccNum) ) { $v_ccNum = true; $c_type = 'jcb'; } } else if ($card_type == "diners" || !$card_type) { // DINERS if ( ereg("^3(0[0-5]|[68][0-9])[0-9]{11}$", $ccNum) ) { $v_ccNum = true; $c_type = 'diners'; } } else if ($card_type == "carteblanche" || !$card_type) { // CARTEBLANCHE if ( ereg("^3(0[0-5]|[68][0-9])[0-9]{11}$", $ccNum) ) { $v_ccNum = true; $c_type = 'carteblanche'; } } else if ($card_type == "enroute" || !$card_type) { // ENROUTE if (( (substr($ccNum, 0, 4) == "2014" || substr($ccNum, 0, 4) == "2149") && (strlen($ccNum) == 15) )) { $v_ccNum = true; $c_type = 'enroute'; } } // validate accepted card type if ($card_type_accepted_arr != false & $v_ccNum) { $v_ccNum = false; for($i=0; $ierror[$field] = $C_translate->translate('validate_cc','CORE',''); return FALSE; } } /** * Strong password validation */ function validate_password($data, $field) { // force numbers and letters if(!eregi("[0-9]{1,}", $data) || !eregi("[a-z]{1,}", $data)) { global $C_translate; $this->error[$field] = $C_translate->translate('validate_password','CORE',''); return false; } global $VAR; $exclude = array(); // not in email eq to email if(!empty($VAR['account_email'])) { @$e=explode("@",$VAR['account_email']); @$exclude[] = $e[0]; @$exclude[] = $VAR['account_email']; } elseif(!empty($VAR['account_admin_email'])) { @$e=explode("@",$VAR['account_admin_email']); @$exclude[] = $e[0]; @$exclude[] = $VAR['account_admin_email']; } // not eq to name (first or last) @$exclude[] = $VAR['account_username']; @$exclude[] = $VAR['account_admin_username']; @$exclude[] = $VAR['account_admin_first_name']; @$exclude[] = $VAR['account_admin_last_name']; // not eq to initials if(!empty($VAR['account_first_name']) && !empty($VAR['account_last_name'])) { @$exclude[] = $VAR['account_first_name']; @$exclude[] = $VAR['account_last_name']; @$exclude[] = substr($VAR['account_first_name'], 0, 1) . substr($VAR['account_middle_name'], 0, 1). substr($VAR['account_last_name'], 0, 1); } else if(!empty($VAR['account_admin_first_name']) && !empty($VAR['account_admin_last_name'])) { @$exclude[] = $VAR['account_admin_first_name']; @$exclude[] = $VAR['account_admin_last_name']; @$exclude[] = substr($VAR['account_admin_first_name'], 0, 1) . substr($VAR['account_admin_middle_name'], 0, 1). substr($VAR['account_admin_last_name'], 0, 1); } // check against data foreach($exclude as $bad_data) { if(!empty($bad_data) && eregi($bad_data,$data)) { global $C_translate; $this->error[$field] = $C_translate->translate('validate_password','CORE',''); return false; } } return true; } function DateToEpoch($format,$date) { $Arr_format = split(DEFAULT_DATE_DIVIDER, UNIX_DATE_FORMAT); $Arr_date = split(DEFAULT_DATE_DIVIDER, $date); for($i=0; $i<3; $i++) { if($Arr_format[$i] == 'd') $day = $Arr_date[$i]; if($Arr_format[$i] == 'm') $month = $Arr_date[$i]; if($Arr_format[$i] == 'Y') $year = $Arr_date[$i]; } $timestamp = mktime(0, 0, 0, $month, $day, $year); return $timestamp; } function EpochToDate($epoch) { return date(UNIX_DATE_FORMAT,$epoch); } } ?>