Using Gravity Forms "gform_field_validation" - php

I want to validate the field using gform_field_validation I found this documentation
but not that helpful
add_filter("gform_field_validation", "custom_validation", 10, 4);
function custom_validation($result, $value, $form, $field){
$number = GFCommon::to_number($value,"");
if (($field["id"] == 1) && ($field["id"] == 1))
if( ($result["is_valid"]) && ($number >= 1000) && ($number <= 1999)){
$result["is_valid"] = false;
$result["message"] = "INCORRECT NUMBER";
}
return $result;
}
Any suggestions will be appreciated

#GDB Many thanks, here I found the solution as below
add_filter("gform_field_validation", "custom_validation", 10, 4);
function custom_validation($result, $value, $form, $field){
if (($field["id"] == 1) && ($field["id"] == 1))
if( ((intval($value) > 999) || (intval($value) < 2000)){
$result["is_valid"] = false;
$result["message"] = "INCORRECT NUMBER";
}
return $result;
}

Related

PHP Function to detect rar files completion (*.r01) not working with *.s01

I have a php function to detect multiple rar file completion. The problem i have is that when old style rar is used eg:
archive.rar
archive.r01
archive.r02
archive.r03
......
archive.r99
The limit is archive.r99 and then goes to:
archive.s01
archive.s02
archive.s03
I can't do anything about the source.. and I have no idea how to adjust this function.
I tried do a || in strpos:
if (strpos($b[0], '.r') > - 1 || strpos($b[0], '.s') > - 1 ) {
but that doesn't work. It doesn't detect the s01 and keeps saying incomplete archive/missing files s01, s02, s03 etc...
here is the function:
private function detectMissingFiles($array) {
$typ = 0;
$tid = $t["id"];
$breaked = false;
$arr = array();
foreach($array as $b) {
if (stripos($b[0], 'disc') > - 1) {
return false;
}
if (strpos($b[0], '/') > - 1) {
continue;
}
if ($typ == 0) {
if (strpos($b[0], '.part0') > - 1) {
$typ = 2;
}
else
if (strpos($b[0], '.r') > - 1) {
$typ = 1;
}
else {
continue;
}
}
if ($typ == 1) {
if (is_numeric($s = substr($b[0], -2))) {
$arr[] = array(
id => $s,
s => $b[1]
);
}
}
else
if ($typ == 2) {
if (is_numeric($s = substr($b[0], -6, 2)) && substr($b[0], -4) == '.rar') {
$arr[] = array(
id => $s,
s => $b[1]
);
}
}
}
asort($arr);
if ($typ == 1) $sista = - 1;
else
if ($typ == 2) $sista = 0;
$status = "";
$antal = count($arr) - 1;
if ($antal > 30) {
foreach($arr as $ar) {
if ($antal > $ar["id"]) {
if ($ar["s"] < 50000000) {
$status.= L::get("WRONG_RAR_FILE_SIZE", [$ar["id"]]);
}
}
if ($sista + 1 != $ar["id"]) {
$status.= L::get("MISSING_FILE", [$sista + 1]);
}
$sista = $ar["id"];
}
if (strlen($status) > 1 && strlen($status) < 200) return $status;
else return 0;
}
}
I am hoping someone can enlighten me here. Thank you in advance!
my best guess is that the "old style rar" name algorithm is as follows:
function rar_int_to_string(int $i):string{
$c="r";
while($i>99){
++$c;
$i-=99;
}
if($i<10){
$c=$c."0";
}
return $c.$i;
}
which produces
r01>r02>r03>r04>r05>r06>r07>r08>r09>r10>r11>r12>r13>r14>r15>r16>r17>r18>r19>r20>r21>r22>r23>r24>r25>r26>r27>r28>r29>r30>r31>r32>r33>r34>r35>r36>r37>r38>r39>r40>r41>r42>r43>r44>r45>r46>r47>r48>r49>r50>r51>r52>r53>r54>r55>r56>r57>r58>r59>r60>r61>r62>r63>r64>r65>r66>r67>r68>r69>r70>r71>r72>r73>r74>r75>r76>r77>r78>r79>r80>r81>r82>r83>r84>r85>r86>r87>r88>r89>r90>r91>r92>r93>r94>r95>r96>r97>r98>r99>s01>s02>s03>s04>s05>s06>s07>s08>s09>s10>s11>s12>s13>s14>s15>s16>s17>s18>s19>s20>s21>s22>s23>s24>s25>s26>s27>s28>s29>s30>s31>s32>s33>s34>s35>s36>s37>s38>s39>s40>s41>s42>s43>s44>s45>s46>s47>s48>s49>s50>s51>s52>s53>s54>s55>s56>s57>s58>s59>s60>s61>s62>s63>s64>s65>s66>s67>s68>s69>s70>s71>s72>s73>s74>s75>s76>s77>s78>s79>s80>s81>s82>s83>s84>s85>s86>s87>s88>s89>s90>s91>s92>s93>s94>s95>s96>s97>s98>s99>t01>t02>t03>t04>t05>t06>t07>t08>t09>t10>t11>t12>t13>t14>t15>t16>t17>t18>t19>t20>t21>t22>t23>t24>t25>t26>t27>t28>t29>t30>t31>t32>t33>t34>t35>t36>t37>t38>t39>t40>t41>t42>t43>t44>t45>t46>t47>t48>t49>t50>t51>t52>t53>t54>t55>t56>t57>t58>t59>t60>t61>t62>t63>t64>t65>t66>t67>t68>t69>t70>t71>t72>t73>t74>t75>t76>t77>t78>t79>t80>t81>t82>t83>t84>t85>t86>t87>t88>t89>t90>t91>t92>t93>t94>t95>t96>t97>t98>t99>u01>u02>u03>u04>u05>u06>u07>u08>u09>u10>u11>u12>u13>u14>u15>u16>u17>u18>u19>u20>u21>u22>u23>u24>u25>u26>u27>u28>u29>u30>u31>u32>u33>u34>u35>u36>u37>u38>u39>u40>u41>u42>u43>u44>u45>u46>u47>u48>u49>u50>u51>u52>u53>u54>u55>u56>u57>u58>u59>u60>u61>u62>u63>u64>u65>u66>u67>u68>u69>u70>u71>u72>u73>u74>u75>u76>u77>u78>u79>u80>u81>u82>u83>u84>u85>u86>u87>u88>u89>u90>u91>u92>u93>u94>u95>u96>u97>u98>u99>v01>v02>v03>v04>v05>v06>v07>v08>v09>v10>v11>v12>v13>v14>v15>v16>v17>v18>v19>v20>v21>v22>v23>v24>v25>v26>v27>v28>v29>v30>v31>v32>v33>v34>v35>v36>v37>v38>v39>v40>v41>v42>v43>v44>v45>v46>v47>v48>v49>v50>v51>v52>v53>v54>v55>v56>v57>v58>v59>v60>v61>v62>v63>v64>v65>v66>v67>v68>v69>v70>v71>v72>v73>v74>v75>v76>v77>v78>v79>v80>v81>v82>v83>v84>v85>v86>v87>v88>v89>v90>v91>v92>v93>v94>v95>v96>v97>v98>v99>w01>w02>w03>w04>w05>w06>w07>w08>w09>w10>w11>w12>w13>w14>w15>w16>w17>w18>w19>w20>w21>w22>w23>w24>w25>w26>w27>w28>w29>w30>w31>w32>w33>w34>w35>w36>w37>w38>w39>w40>w41>w42>w43>w44>w45>w46>w47>w48>w49>w50>w51>w52>w53>w54>w55>w56>w57>w58>w59>w60>w61>w62>w63>w64>w65>w66>w67>w68>w69>w70>w71>w72>w73>w74>w75>w76>w77>w78>w79>w80>w81>w82>w83>w84>w85>w86>w87>w88>w89>w90>w91>w92>w93>w94>w95>w96>w97>w98>w99>x01>x02>x03>x04>x05>x06>x07>x08>x09>x10>x11>x12>x13>x14>x15>x16>x17>x18>x19>x20>x21>x22>x23>x24>x25>x26>x27>x28>x29>x30>x31>x32>x33>x34>x35>x36>x37>x38>x39>x40>x41>x42>x43>x44>x45>x46>x47>x48>x49>x50>x51>x52>x53>x54>x55>x56>x57>x58>x59>x60>x61>x62>x63>x64>x65>x66>x67>x68>x69>x70>x71>x72>x73>x74>x75>x76>x77>x78>x79>x80>x81>x82>x83>x84>x85>x86>x87>x88>x89>x90>x91>x92>x93>x94>x95>x96>x97>x98>x99>y01>y02>y03>y04>y05>y06>y07>y08>y09>y10>y11>y12>y13>y14>y15>y16>y17>y18>y19>y20>y21>y22>y23>y24>y25>y26>y27>y28>y29>y30>y31>y32>y33>y34>y35>y36>y37>y38>y39>y40>y41>y42>y43>y44>y45>y46>y47>y48>y49>y50>y51>y52>y53>y54>y55>y56>y57>y58>y59>y60>y61>y62>y63>y64>y65>y66>y67>y68>y69>y70>y71>y72>y73>y74>y75>y76>y77>y78>y79>y80>y81>y82>y83>y84>y85>y86>y87>y88>y89>y90>y91>y92>y93>y94>y95>y96>y97>y98>y99>z01>z02>z03>z04>z05>z06>z07>z08>z09>z10>z11>z12>z13>z14>z15>z16>z17>z18>z19>z20>z21>z22>z23>z24>z25>z26>z27>z28>z29>z30>z31>z32>z33>z34>z35>z36>z37>z38>z39>z40>z41>z42>z43>z44>z45>z46>z47>z48>z49>z50>z51>z52>z53>z54>z55>z56>z57>z58>z59>z60>z61>z62>z63>z64>z65>z66>z67>z68>z69>z70>z71>z72>z73>z74>z75>z76>z77>z78>z79>z80>z81>z82>z83>z84>z85>z86>z87>z88>z89>z90>z91>z92>z93>z94>z95>z96>z97>z98>z99>aa01>aa02>aa03>aa04>aa05>aa06>aa07>aa08>aa09>aa10>aa11>aa12>aa13>aa14>aa15>aa16>aa17>aa18>aa19>aa20>aa21>aa22>aa23>aa24>aa25>aa26>aa27>aa28>aa29>aa30>aa31>aa32>aa33>aa34>aa35>aa36>aa37>aa38>aa39>aa40>aa41>aa42>aa43>aa44>aa45>aa46>aa47>aa48>aa49>aa50>aa51>aa52>aa53>aa54>aa55>aa56>aa57>aa58>aa59>aa60>aa61>aa62>aa63>aa64>aa65>aa66>aa67>aa68>aa69>aa70>aa71>aa72>aa73>aa74>aa75>aa76>aa77>aa78>aa79>aa80>aa81>aa82>aa83>aa84>aa85>aa86>aa87>aa88>aa89>aa90>aa91>aa92>aa93>aa94>aa95>aa96>aa97>aa98>aa99>ab01>ab02>ab03>ab04>ab05>ab06>ab07>ab08->ab09
and so on, with "ab09" meaning "file chunk #999"

Recursive function to find the number of ways a number can be generated out of a set of numbers

I had a job interview test and the question I got was about making a function which would return the number of ways a number could be generated by using numbers from a certain set and any number in the set can be used N times.
It is like if I have the number 10 and I want to find out how many ways 10 can be generated using [2,3,5]
2+2+2+2+2 = 10
5+3+2 = 10
2+2+3+3 = 10
5+5 = 10
to solve it I made this function:
function getNumberOfWays($money, $coins) {
static $level = 0;
if (!$level) {
sort($coins);
}
if ($level && !$money) {
return 1;
} elseif (!$level && !$money) {
return 0;
}
if ($money === 1 && array_search(1, $coins) !== false) {
return 1;
} elseif ($money === 1 && array_search(1, $coins) === false) {
return 0;
}
$r = 0;
$tmpCoins = $coins;
foreach ($coins as $index => $coin) {
if (!$coin || $coin > $money) {
continue;
}
$tmpCoins[$index] = 0;
$tmpMoney = $money;
do {
$tmpMoney -= $coin;
if ($tmpMoney >= 0) {
$level++;
$r += getNumberOfWays($tmpMoney, $tmpCoins);
$level--;
} elseif (!$tmpMoney) {
$r++;
}
} while ($tmpMoney >= 0);
}
return $r;
}
This function works ok and returns the right value.
My question is if there is a better way for it.
Thanks

checkinf if date is real using php

I'm trying to check if a date is real, it must return true, and if not, it must return false.
It does not seemes to work when I write 35-02-2012 (Date format dd-mm-yy) it return true, but I was expecting false, I do not know where I'm wrong.
below is my function
function isItRealDate($date) {
if ($date == '') {
return false;
} else {
$rxDatePattern = '/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/'; //Declare Regex
$dtArray = preg_match($rxDatePattern, $date); // is format OK?
if ($dtArray == '0') {
return false;
} else {
$tableau_date = explode('-', $date);
//Checks for dd-mm-yyyy format.
$dtMonth = $tableau_date[1];
$dtDay = $tableau_date[0];
$dtYear = $tableau_date[2];
if ($dtMonth < 1 || $dtMonth > 12) {
return false;
} elseif ($dtDay < 1 || $dtDay > 31) {
return false;
} elseif (($dtMonth == 4 || $dtMonth == 6 || $dtMonth == 9 || $dtMonth == 11) && $dtDay == 31) {
return false;
} elseif ($dtMonth == 2) {
$isleap = ($dtYear % 4 == 0 && ($dtYear % 100 != 0 || $dtYear % 400 == 0));
if ($dtDay > 29 || ($dtDay == 29 && !$isleap)) {
return false;
} else {
return true;
}
}
}
}
}
anykind of help will be much appreciated
If you want something that just works, use checkdate().
As suggested by Ibrahim, use:
function isItRealDate($date) {
if(preg_match("#^(\d{1,2})\-(\d{1,2})\-(\d{1,4})$#", $date, $match)){
//regex could match 99-99-9999 - checkdate will take care.
return checkdate($match[2], $match[1], $match[3]);
}
return false;
}
This will work for ANY (valid) date between 1-1-1 and 31-12-9999

Show 1k instead of 1,000

function restyle_text($input){
$input = number_format($input);
$input_count = substr_count($input, ',');
if($input_count != '0'){
if($input_count == '1'){
return substr($input, +4).'k';
} else if($input_count == '2'){
return substr($input, +8).'mil';
} else if($input_count == '3'){
return substr($input, +12).'bil';
} else {
return;
}
} else {
return $input;
}
}
This is the code I have, I thought it was working. apparently not.. can someone help since I can't figure this out.
Try this:
http://codepad.viper-7.com/jfa3uK
function restyle_text($input){
$input = number_format($input);
$input_count = substr_count($input, ',');
if($input_count != '0'){
if($input_count == '1'){
return substr($input, 0, -4).'k';
} else if($input_count == '2'){
return substr($input, 0, -8).'mil';
} else if($input_count == '3'){
return substr($input, 0, -12).'bil';
} else {
return;
}
} else {
return $input;
}
}
Basically, I think you're using the substr() wrong.
Here's a generic way to do this that doesn't require you to use number_format or do string parsing:
function formatWithSuffix($input)
{
$suffixes = array('', 'k', 'm', 'g', 't');
$suffixIndex = 0;
while(abs($input) >= 1000 && $suffixIndex < sizeof($suffixes))
{
$suffixIndex++;
$input /= 1000;
}
return (
$input > 0
// precision of 3 decimal places
? floor($input * 1000) / 1000
: ceil($input * 1000) / 1000
)
. $suffixes[$suffixIndex];
}
And here's a demo showing it working correctly for several cases.
I re-wrote the function to use the properties of numbers rather than playing with strings.
That should be faster.
Let me know if I missed any of your requirements:
function restyle_text($input){
$k = pow(10,3);
$mil = pow(10,6);
$bil = pow(10,9);
if ($input >= $bil)
return (int) ($input / $bil).'bil';
else if ($input >= $mil)
return (int) ($input / $mil).'mil';
else if ($input >= $k)
return (int) ($input / $k).'k';
else
return (int) $input;
}
I do not want to spoil the moment... but I think this is a little more simplified.
Just improving #Indranil answer
e.g.
function comp_numb($input){
$input = number_format($input);
$input_count = substr_count($input, ',');
$arr = array(1=>'K','M','B','T');
if(isset($arr[(int)$input_count]))
return substr($input,0,(-1*$input_count)*4).$arr[(int)$input_count];
else return $input;
}
echo comp_numb(1000);
echo '<br />';
echo comp_numb(1000000);
echo '<br />';
echo comp_numb(1000000000);
echo '<br />';
echo comp_numb(1000000000000);
Or you can too use library How it works is here
Juste install composer require stillat/numeral.php and
<?php
require_once __DIR__.'/vendor/autoload.php';
$formatter = new Stillat\Numeral\Numeral;
$formatter->setLanguageManager(new Stillat\Numeral\Languages\LanguageManager);
$formatter->format(1532, '0a,0'); //Affiche 1.5K

Function always return null

I'm not sure why, but I've created a function and somehow it never return anything.
It supposed to return a random number generated by using the mt_rand() function.
I modified the code and tried to run it on ideone and the results says runtime error, signal 11 (SIGSEGV)
Can someone tell me what's wrong with this?
<?php
function breedingTree($name, $N, $max)
{
include('config.php');
if ($N < $max AND $name > 0)
{
$sql = 'SELECT sire, dam
FROM '.$prefix.'owned_adoptables
WHERE aid = "'.$name.'"';
$res = mysql_query($sql);
list($s, $d) = mysql_fetch_row($res);
if (mt_rand(0,1) === 1) breedingTree($s, $N+1, $max);
else breedingTree($d, $N+1, $max);
}
elseif ($name <= 0)
{
if ($N === 0) return mt_rand(1,100);
elseif ($N === 1) return mt_rand(5,95);
elseif ($N === 2) return mt_rand(15,85);
elseif ($N === 3) return mt_rand(25,75);
}
}
echo breedingTree(355, 0, 4); // Return nothing
echo breedingTree(0, 0, 4); // Return random number between 1 - 100
?>
What if $N is not 0, 1, 2, or 3, or if ($N < $max AND $name > 0), or if ($N >= max AND $name > 0)? There is no return statement for those code paths.

Categories