$field){$ref=(int)($field['conditionField']??0)-1;$show=true; if($ref>=0){$raw=$values['f'.$ref]??'';$value=is_scalar($raw)?trim(sanitize_textarea_field((string)$raw)):'';$match=trim($field['conditionValue']??'');$op=$field['conditionOperator']??'equals';$show=$ref<$i&&!empty($visible[$ref])&&($op==='not-empty'?$value!=='':($op==='not-equals'?$value!==$match:$value===$match));} $visible[$i]=$show; }return $visible; } public static function validate_file($file,string $label,bool $required) { if(!is_array($file)||($file['error']??UPLOAD_ERR_NO_FILE)===UPLOAD_ERR_NO_FILE){return $required?new \WP_Error('digibl_file',Language::text('Choose a file: ').$label,['status'=>400]):null;} if(($file['error']??1)!==UPLOAD_ERR_OK||!is_scalar($file['tmp_name']??null)||!is_scalar($file['name']??null)||!is_uploaded_file($file['tmp_name'])){return new \WP_Error('digibl_file',Language::text('The upload failed: ').$label,['status'=>400]);} if(filesize($file['tmp_name'])>2*1024*1024||filesize($file['tmp_name'])<1){return new \WP_Error('digibl_file',Language::text('Files must be no larger than 2 MB: ').$label,['status'=>400]);} if(!class_exists('finfo')){return new \WP_Error('digibl_file','File uploads require the PHP fileinfo extension.',['status'=>503]);} $name=sanitize_file_name($file['name']);$mime=(new \finfo(FILEINFO_MIME_TYPE))->file($file['tmp_name']);$ext=strtolower(pathinfo($name,PATHINFO_EXTENSION));$allow=['pdf'=>'application/pdf','jpg'=>'image/jpeg','jpeg'=>'image/jpeg','png'=>'image/png']; if(!isset($allow[$ext])||$mime!==$allow[$ext]){return new \WP_Error('digibl_file',Language::text('Choose a PDF, JPEG or PNG file: ').$label,['status'=>400]);} if(in_array($ext,['jpg','jpeg','png'],true)&&!@getimagesize($file['tmp_name'])){return new \WP_Error('digibl_file',Language::text('The image file is invalid: ').$label,['status'=>400]);} return ['name'=>$name,'tmp_name'=>$file['tmp_name']]; } public static function markup(array $p,string $id): string { $h='';$step=0;$titles=preg_split('/\r?\n/',$p['stepTitles']??'');$multi=count(array_unique(array_column($p['fields'],'step')))>1; foreach($p['fields'] as $i=>$field){$fieldStep=(int)($field['step']??1); if($fieldStep!==$step){if($step){$h.='';}$step=$fieldStep;$h.='
'.($multi?''.esc_html(trim($titles[$step-1]??'')?:'Step '.$step).'':'');} $fid=$id.'-f'.$i;$required='yes'===$field['required']?' required':'';$type=$field['type'];$label='';$attrs=' id="'.$fid.'" name="f'.$i.'"'.$required; if($type==='textarea'){$input='';} elseif($type==='select'){$input='';foreach(array_slice(array_filter(array_map('trim',preg_split('/\r?\n/',$field['options'])),'strlen'),0,100) as $option){$input.='';}$input.='';} elseif($type==='checkbox'){$input='';} elseif($type==='file'){$input='PDF, JPEG or PNG · maximum 2 MB';} else{$input='';} $condition=['field'=>(int)($field['conditionField']??0),'operator'=>$field['conditionOperator']??'equals','value'=>trim($field['conditionValue']??'')]; $h.='
'.($type==='checkbox'?$input.$label:$label.$input).'
'; } return $h.($step?'
':''); } }