hesabixWCPlugin/includes/class-hesabix-validation.php
2025-08-05 17:24:52 +03:30

407 lines
10 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Hesabix Validation Class
*
* @package Hesabix
* @author Mohammad Rezai
* @author URI https://pirouz.xyz
* @since 1.0.0
*/
class Hesabix_Validation
{
public static function itemCodeValidation($code)
{
$code = preg_replace('/[^0-9]/', '', $code);
$code = self::formatFarsiNumbers($code);
return mb_substr($code, 0, 5);
}
public static function itemNameValidation($name)
{
$name = self::formatFarsiNumbers($name);
return self::remove_emoji($name, 199);
}
public static function formatFarsiNumbers($str)
{
$farsiNumbers = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"];
$englishNumbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
for ($i = 0; $i < 10; $i++)
$str = str_replace($farsiNumbers[$i], $englishNumbers[$i], $str);
return $str;
}
public static function itemBarcodeValidation($barcode)
{
$barcode = self::formatFarsiNumbers($barcode);
return mb_substr($barcode, 0, 999);
}
public static function itemCategoryValidation($category)
{
return $category;
}
public static function itemDescriptionValidation($description)
{
return mb_substr($description, 0, 199);
}
public static function itemMainUnitValidation($mainUnit)
{
return mb_substr($mainUnit, 0, 29);
}
public static function itemSubUnitValidation($subUnit)
{
return mb_substr($subUnit, 0, 29);
}
public static function itemConversionFactorValidation($conversionFactor)
{
if ($conversionFactor < 0) {
return 0;
} else {
return $conversionFactor;
}
}
public static function itemSalesTaxValidation($salesTax)
{
if ($salesTax >= 0 && $salesTax <= 100) {
return $salesTax;
} else {
return 0;
}
}
public static function itemSalesInfoValidation($salesInfo)
{
return mb_substr($salesInfo, 0, 99);
}
public static function itemPurchaseCostValidation($purchaseCost)
{
if ($purchaseCost >= 0) {
return $purchaseCost;
} else {
return 0;
}
}
public static function itemPurchaseInfoValidation($purchaseInfo)
{
return mb_substr($purchaseInfo, 0, 99);
}
public static function itemTagValidation($tag)
{
return mb_substr($tag, 0, 254);
}
public static function contactCodeValidation($code)
{
$code = preg_replace('/[^0-9]/', '', $code);
return mb_substr($code, 0, 5);
}
public static function contactDisplayNameValidation($displayName)
{
return mb_substr($displayName, 0, 99);
}
public static function contactCompanyValidation($company)
{
return mb_substr($company, 0, 99);
}
public static function contactTitleValidation($title)
{
return mb_substr($title, 0, 49);
}
public static function contactFirstNameValidation($firstName)
{
return mb_substr($firstName, 0, 49);
}
public static function contactLastNameValidation($lastName)
{
return mb_substr($lastName, 0, 49);
}
public static function contactAddressValidation($address)
{
return mb_substr($address, 0, 149);
}
public static function contactCountryValidation($country)
{
return mb_substr($country, 0, 49);
}
public static function contactStateValidation($state)
{
if (is_numeric($state)) {
if (is_plugin_active("persian-woocommerce-shipping/woocommerce-shipping.php")) {
$state = PWS()::get_state($state);
}
}
return mb_substr($state, 0, 49);
}
public static function contactCityValidation($city)
{
if (is_numeric($city)) {
if (is_plugin_active("persian-woocommerce-shipping/woocommerce-shipping.php")) {
$city = PWS()::get_city($city);
}
}
return mb_substr($city, 0, 49);
}
public static function contactPostalCodeValidation($postalCode)
{
$postalCode = preg_replace('/[^0-9]/', '', $postalCode);
$postalCode = self::formatFarsiNumbers($postalCode);
return mb_substr($postalCode, 0, 10);
}
public static function contactPhoneValidation($phone)
{
$phone = preg_replace('/[^0-9]/', '', $phone);
$phone = self::formatFarsiNumbers($phone);
return mb_substr($phone, 0, 14);
}
public static function contactMobileValidation($mobile)
{
$mobile = preg_replace('/[^0-9]/', '', $mobile);
return mb_substr($mobile, 0, 14);
}
public static function contactFaxValidation($fax)
{
$fax = preg_replace('/[^0-9]/', '', $fax);
return mb_substr($fax, 0, 14);
}
public static function contactEmailValidation($email)
{
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex) {
$isValid = false;
} else {
$domain = substr($email, $atIndex + 1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen < 1 || $localLen > 64) {
$isValid = false;
} else if ($domainLen < 1 || $domainLen > 255) {
$isValid = false;
} else if ($local[0] == '.' || $local[$localLen - 1] == '.') {
$isValid = false;
} else if (preg_match('/\\.\\./', $local)) {
$isValid = false;
} else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) {
$isValid = false;
} else if (preg_match('/\\.\\./', $domain)) {
$isValid = false;
} else if
(
!preg_match(
'/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
str_replace("\\\\", "", $local)
)
) {
if (
!preg_match(
'/^"(\\\\"|[^"])+"$/',
str_replace("\\\\", "", $local)
)
) {
$isValid = false;
}
}
}
if ($isValid) {
return $email;
} else {
return null;
}
}
public static function contactWebsiteValidation($website)
{
return mb_substr($website, 0, 119);
}
public static function contactNoteValidation($note)
{
return mb_substr($note, 0, 499);
}
public static function contactCategoryValidation($category)
{
return $category;
}
public static function contactTagValidation($tag)
{
return mb_substr($tag, 0, 254);
}
public static function invoiceFinancialYearValidation($financialYear)
{
return $financialYear;
}
public static function invoiceCurrencyRateValidation($currencyRate)
{
if ($currencyRate > 0) {
return $currencyRate;
} else {
return 1;
}
}
public static function invoiceNumberValidation($number)
{
return mb_substr($number, 0, 49);
}
public static function invoiceContactTitleValidation($contactTitle)
{
return mb_substr($contactTitle, 0, 199);
}
public static function invoiceDueDateValidation($dueDate)
{
return $dueDate;
}
public static function invoiceNoteValidation($note)
{
return mb_substr($note, 0, 499);
}
public static function invoiceReferenceValidation($reference)
{
return mb_substr($reference, 0, 49);
}
public static function invoiceTagValidation($tag)
{
return mb_substr($tag, 0, 254);
}
public function invoiceItemsValidation($items)
{
return $items;
}
public static function invoiceItemDescriptionValidation($description)
{
return self::remove_emoji($description, 249);
}
public static function invoiceItemQuantityValidation($quantity)
{
if ($quantity > 0) {
return $quantity;
} else {
return 1;
}
}
public static function invoiceItemUnitValidation($unit)
{
return mb_substr($unit, 0, 29);
}
public static function invoiceItemUnitPriceValidation($unitPrice)
{
if ($unitPrice >= 0) {
return $unitPrice;
} else {
return 0;
}
}
public static function invoiceItemAmountValidation($amount)
{
if ($amount >= 0) {
return $amount;
} else {
return 0;
}
}
public static function invoiceItemDiscountValidation($discount)
{
if ($discount >= 0) {
return $discount;
} else {
return 0;
}
}
public static function invoiceItemTaxValidation($tax)
{
if ($tax >= 0) {
return $tax;
} else {
return 0;
}
}
public static function invoiceItemTotalAmountValidation($totalAmount)
{
if ($totalAmount >= 0) {
return $totalAmount;
} else {
return 0;
}
}
public static function remove_emoji($string, $length = 200): string
{
$regex_alphanumeric = '/[\x{1F100}-\x{1F1FF}]/u';
$clear_string = preg_replace($regex_alphanumeric, '', $string);
$regex_symbols = '/[\x{1F300}-\x{1F5FF}]/u';
$clear_string = preg_replace($regex_symbols, '', $clear_string);
$regex_emoticons = '/[\x{1F600}-\x{1F64F}]/u';
$clear_string = preg_replace($regex_emoticons, '', $clear_string);
$regex_transport = '/[\x{1F680}-\x{1F6FF}]/u';
$clear_string = preg_replace($regex_transport, '', $clear_string);
$regex_supplemental = '/[\x{1F900}-\x{1F9FF}]/u';
$clear_string = preg_replace($regex_supplemental, '', $clear_string);
$regex_misc = '/[\x{2600}-\x{26FF}\x{1F7E9}-\x{1F7EF}]/u';
$clear_string = preg_replace($regex_misc, '', $clear_string);
$regex_dingbats = '/[\x{2700}-\x{27BF}]/u';
$clear_string = preg_replace($regex_dingbats, '', $clear_string);
$truncated_string = mb_substr($clear_string, 0, $length);
return $truncated_string;
}
}