JFIF $ d d 7 * Z qn )ZP 0 !1 A "#a$2Qr D8 a Ri [f \m I ykI w0 c u F c Rı?lO7 к _f˓ [C $殷WF< _W ԣ s Kc ëI zyQy /_LK ℂ ;C",p F A : /] =H ~ , l s / 9 ć: [=/#f ; ) x { ٛE Q )~ = 𘙲r*2~ a _V = ' ku m F D } KYYC )( { * g& f `툪 r y ` = ^ c J. I ]( * `wq 1dđ #̩ ͑ 0 ; H ] u 搂 @:~ ו K L N s h } O I R* 8 :2 ! lD JV o ( 3 = M ( z Ȱ+i *N A r6K n S l ) ! J J Ӂ* % ݉?|D } d5: eP0 R; {$X' x F @ .ÊB {,WJ uQ ɲRI ;9 Q E琯 6 2fT .DU J ;*c P A\IL Nj! J ۱+ O\ ͔ ] ޒ S J ȧ c%A N ol ՎprU L Zԛe r E2= X D Xg VQeӓ k y P7 U* o m Q I s ,K `) 6\G3t?pgjr m ۛجw luGt f h 9uyP 0D;Uڽ"OXl i f $ ) &|ML 0 Z rm1 [ H XP l P R0 'G=i 2N +0 e 2 ]] 9 VT P O 7 h(F * 癈 ' = Q VZD F,d ߬ ~ T X G[ `le 69C R(!S2! P < 0 x < !1AQ "Raq 02Br #S CTb ? Ζ "]mH5WR 7 k.ۛ ! } Q~ + yԏ z |@ T20 S~ K e k *zF f^2X *( @ 8 r ? C I uI|֓>^Ex LgNU Y+{.R Ѫ τV YT D I 6 2 '8Y2 7'\T P.6 d &˦ @V q i |8 -O Ε ] ʔ U= T L 8= ;6c | !qfF3 a ů& ~$ l} 'NW U s$U k^S V : U#6w + +s &r+n ڐ { @ 29gL u " T Ù M=6 (^ "7 r}=6Yݾ lC u hquymp Ǧ G jhs ǜNl ɻ} o 7 #S6 a w 4 ! OS r D 5 7 % | ?x> L | / nD 6?/8 w # [ ) L 7 +6〼T A T g ! %5 Mm Z /c -{1_Je "| ^$ 'O & ޱմ < H vNqϡQ$ < 6 &Nݛ ֨tǻN (9 n ru~'όN sMG& ,uH Kw *Ī 5@ u6 BԒ i YN * f 0 _ GhKW u lT <nj- 0{ M L~ | /a v\ E = ?1 \ɟuq Ђ Y O a K ޡP q $ H8o Q˼EV ~ k 0 h' L Pp M -M" m^ !6l nմ 쮝C U T . ! :vMǨb h ډ Vc r @~p # !1QAa q ? AL0L x LU 4 d ; x " 16ad0 7.\ߋ 0 = P l v/ " c A Ay A|2pO8"d MV #1] = \ " ˡ ] k v I9 d ۓ & q ) ǐq E ꞅ v "P )q X &Q З non]я u ג./ ; gZ$ M QР 2M ]h ni 0 P $ێ 3CɏGjώy : m c # S_ l@ '_ \m|C 2`K _ 1 cIvGc $? PCQ S+D ? K aײ k Fr b 8 ύ NEدg ĝ U 3 6 #Ik+ v { v i ( ވ ? a e) X xy/*@Q Ǽ Ծ ) $ IWO l c G; !i k{ gOŀ L ('x T rb $ w) R $ & N1E td U3Uȉ1p M"N* (DNy d96.(jQ) X 5 c QɎMy W ? Q *!R > 6=7)Xj 5`J ] e 8%t ! + ' ! 1Q 5 !1 AQaq ё #2 "0BRb ? G t^ ## .l lQ T $ v , ,m 㵜5u bV =sY+ @d { N ! dn O < .- B; _w J t 6;Q Jd. Q c%p{ 1 ,sND dF H I0 Гo X ш e黅X ۢ F :)[ F G X ƹ / w _c MeD ,ʡc c . W D tA $ j@ : ) - #u c1< @ۗ9F ) KJ- hpP] _ x [ q B lb p ʖ w q " LFGd ƶ * s +ډ_Zc " ? % t[I P 6 J ]# =ɺ V v v CGs Gh1 > )6 |e y ? L ӣ m,4 G W Ui ` ] uJVo VDG< SB 6ϏQ @ TiU l y O U 0 kfV ~ ~}S Z @ *WU Ui ## ; s /[ = ! 7}" W N ] ' (L ! ~ y5 g9T̅J kbM' +s :S +B) v @ M j e C f j E 0 Y\Qn z G 1 д~ W o{T 9?` Rm yhsy3 !HAD ] m c1 ~ 2 L S u7x T ;j$ `} 4-> L# vzŏ I L S ֭ T { r jGK C ; b pU= - ` Bs K. S F w4 M q] Z dH S 0 ) tLg
<?php
namespace WPForms\Admin\Education;
/**
* Fields data holder.
*
* @since 1.6.6
*/
class Fields {
/**
* All fields data.
*
* @since 1.6.6
*
* @var array
*/
protected $fields;
/**
* All fields data.
*
* @since 1.6.6
*
* @return array All possible fields.
*/
private function get_all(): array {
if ( ! empty( $this->fields ) ) {
return $this->fields;
}
$this->fields = [
[
'icon' => 'fa-phone',
'name' => esc_html__( 'Phone', 'wpforms-lite' ),
'name_en' => 'Phone',
'type' => 'phone',
'group' => 'fancy',
'order' => '50',
],
[
'icon' => 'fa-map-marker',
'name' => esc_html__( 'Address', 'wpforms-lite' ),
'name_en' => 'Address',
'type' => 'address',
'group' => 'fancy',
'order' => '70',
],
[
'icon' => 'fa-map-location-dot',
'name' => esc_html__( 'Map', 'wpforms-lite' ),
'name_en' => 'Map',
'type' => 'Map',
'group' => 'fancy',
'addon' => 'wpforms-geolocation',
'order' => '75',
],
[
'icon' => 'fa-calendar-o',
'name' => esc_html__( 'Date / Time', 'wpforms-lite' ),
'name_en' => 'Date / Time',
'type' => 'date-time',
'group' => 'fancy',
'order' => '60',
],
[
'icon' => 'fa-link',
'name' => esc_html__( 'Website / URL', 'wpforms-lite' ),
'name_en' => 'Website / URL',
'type' => 'url',
'group' => 'fancy',
'order' => '90',
],
[
'icon' => 'fa-upload',
'name' => esc_html__( 'File Upload', 'wpforms-lite' ),
'keywords' => esc_html__( 'attach, attachment, document, upload, resume, cv', 'wpforms-lite' ),
'name_en' => 'File Upload',
'type' => 'file-upload',
'group' => 'fancy',
'order' => '100',
],
[
'icon' => 'fa-camera',
'name' => esc_html__( 'Camera', 'wpforms-lite' ),
'name_en' => 'Camera',
'type' => 'camera',
'group' => 'fancy',
'order' => '105',
],
[
'icon' => 'fa-lock',
'name' => esc_html__( 'Password', 'wpforms-lite' ),
'name_en' => 'Password',
'type' => 'password',
'group' => 'fancy',
'order' => '95',
],
[
'icon' => 'fa-columns',
'name' => esc_html__( 'Layout', 'wpforms-lite' ),
'keywords' => esc_html__( 'column, row, side by side, side-by-side, multi-column, multi column, two-column, two column, grid, arrange', 'wpforms-lite' ),
'name_en' => 'Layout',
'type' => 'layout',
'group' => 'fancy',
'order' => '140',
],
[
'icon' => 'fa-list',
'name' => esc_html__( 'Repeater', 'wpforms-lite' ),
'name_en' => 'Repeater',
'type' => 'repeater',
'group' => 'fancy',
'order' => '150',
],
[
'icon' => 'fa-files-o',
'name' => esc_html__( 'Page Break', 'wpforms-lite' ),
'name_en' => 'Page Break',
'type' => 'pagebreak',
'group' => 'fancy',
'order' => '160',
],
[
'icon' => 'fa-arrows-h',
'name' => esc_html__( 'Section Divider', 'wpforms-lite' ),
'name_en' => 'Section Divider',
'type' => 'divider',
'group' => 'fancy',
'order' => '170',
],
[
'icon' => 'fa-pencil-square-o',
'name' => esc_html__( 'Rich Text', 'wpforms-lite' ),
'name_en' => 'Rich Text',
'type' => 'richtext',
'group' => 'fancy',
'order' => '170',
],
[
'icon' => 'fa-file-image-o',
'name' => esc_html__( 'Content', 'wpforms-lite' ),
'name_en' => 'Content',
'type' => 'content',
'group' => 'fancy',
'order' => '180',
],
[
'icon' => 'fa-code',
'name' => esc_html__( 'HTML', 'wpforms-lite' ),
'name_en' => 'HTML',
'type' => 'html',
'group' => 'fancy',
'order' => '185',
],
[
'icon' => 'fa-file-text-o',
'name' => esc_html__( 'Entry Preview', 'wpforms-lite' ),
'name_en' => 'Entry Preview',
'type' => 'entry-preview',
'group' => 'fancy',
'order' => '190',
],
[
'icon' => 'fa-star',
'name' => esc_html__( 'Rating', 'wpforms-lite' ),
'name_en' => 'Rating',
'type' => 'rating',
'group' => 'fancy',
'order' => '310',
],
[
'icon' => 'fa-eye-slash',
'name' => esc_html__( 'Hidden Field', 'wpforms-lite' ),
'name_en' => 'Hidden Field',
'type' => 'hidden',
'group' => 'fancy',
'order' => '305',
],
[
'icon' => 'fa-question-circle',
'name' => esc_html__( 'Custom Captcha', 'wpforms-lite' ),
'keywords' => esc_html__( 'spam, math, maths, question', 'wpforms-lite' ),
'name_en' => 'Custom Captcha',
'type' => 'captcha',
'group' => 'fancy',
'addon' => 'wpforms-captcha',
'order' => '300',
],
[
'icon' => 'fa-pencil',
'name' => esc_html__( 'Signature', 'wpforms-lite' ),
'keywords' => esc_html__( 'user, e-signature', 'wpforms-lite' ),
'name_en' => 'Signature',
'type' => 'signature',
'group' => 'fancy',
'addon' => 'wpforms-signatures',
'order' => '200',
],
[
'icon' => 'fa-ellipsis-h',
'name' => esc_html__( 'Likert Scale', 'wpforms-lite' ),
'keywords' => esc_html__( 'survey, rating scale', 'wpforms-lite' ),
'name_en' => 'Likert Scale',
'type' => 'likert_scale',
'group' => 'fancy',
'addon' => 'wpforms-surveys-polls',
'order' => '400',
],
[
'icon' => 'fa-tachometer',
'name' => esc_html__( 'Net Promoter Score', 'wpforms-lite' ),
'keywords' => esc_html__( 'survey, nps', 'wpforms-lite' ),
'name_en' => 'Net Promoter Score',
'type' => 'net_promoter_score',
'group' => 'fancy',
'addon' => 'wpforms-surveys-polls',
'order' => '410',
],
[
'icon' => 'fa-chart-simple',
'name' => esc_html__( 'Ranking', 'wpforms-lite' ),
'keywords' => esc_html__( 'rank, order, priority, survey', 'wpforms-lite' ),
'name_en' => 'Ranking',
'type' => 'ranking',
'group' => 'fancy',
'addon' => 'wpforms-surveys-polls',
'order' => '307',
],
[
'icon' => 'fa-credit-card',
'name' => esc_html__( 'Authorize.Net', 'wpforms-lite' ),
'keywords' => esc_html__( 'store, ecommerce, credit card, pay, payment, debit card', 'wpforms-lite' ),
'name_en' => 'Authorize.Net',
'type' => 'authorize_net',
'group' => 'payment',
'addon' => 'wpforms-authorize-net',
'order' => '95',
],
[
'icon' => 'fa-credit-card',
'name' => esc_html__( 'Mercado Pago', 'wpforms-lite' ),
'keywords' => esc_html__( 'store, ecommerce, credit card, pay, payment, debit card, installments, latam', 'wpforms-lite' ),
'name_en' => 'Mercado Pago',
'type' => 'mercado_pago',
'group' => 'payment',
'addon' => 'wpforms-mercado-pago',
'order' => '96',
],
[
'icon' => 'fa-ticket',
'name' => esc_html__( 'Coupon', 'wpforms-lite' ),
'keywords' => esc_html__( 'discount, sale', 'wpforms-lite' ),
'name_en' => 'Coupon',
'type' => 'payment-coupon',
'group' => 'payment',
'addon' => 'wpforms-coupons',
'order' => '100',
],
];
$captcha = $this->get_captcha();
if ( ! empty( $captcha ) ) {
$this->fields[] = $captcha;
}
return $this->fields;
}
/**
* Get Captcha field data.
*
* @since 1.6.6
*
* @return array Captcha field data.
*/
private function get_captcha(): array {
$captcha_settings = wpforms_get_captcha_settings();
if ( empty( $captcha_settings['provider'] ) ) {
return [];
}
$captcha = [
'hcaptcha' => [
'name' => 'hCaptcha',
'icon' => 'fa-question-circle-o',
],
'recaptcha' => [
'name' => 'reCAPTCHA',
'icon' => 'fa-google',
],
'turnstile' => [
'name' => 'Turnstile',
'icon' => 'fa-question-circle-o',
],
];
if ( ! empty( $captcha_settings['site_key'] ) || ! empty( $captcha_settings['secret_key'] ) ) {
$captcha_name = $captcha[ $captcha_settings['provider'] ]['name'];
$captcha_icon = $captcha[ $captcha_settings['provider'] ]['icon'];
} else {
$captcha_name = 'CAPTCHA';
$captcha_icon = 'fa-question-circle-o';
}
return [
'icon' => $captcha_icon,
'name' => $captcha_name,
'name_en' => $captcha_name,
'keywords' => esc_html__( 'captcha, spam, antispam', 'wpforms-lite' ),
'type' => 'captcha_' . $captcha_settings['provider'],
'group' => 'standard',
'order' => 180,
'class' => 'not-draggable',
];
}
/**
* Get filtered fields data.
*
* Usage:
* get_filtered( [ 'group' => 'payment' ] ) - fields from the 'payment' group.
* get_filtered( [ 'addon' => 'surveys-polls' ] ) - fields of the addon 'surveys-polls'.
* get_filtered( [ 'type' => 'payment-total' ] ) - field 'payment-total'.
*
* @since 1.6.6
*
* @param array $args Arguments array.
*
* @return array Fields data filtered according to given arguments.
*/
private function get_filtered( array $args = [] ): array {
$default_args = [
'group' => '',
'addon' => '',
'type' => '',
];
$args = array_filter( wp_parse_args( $args, $default_args ) );
$fields = $this->get_all();
$filtered_fields = [];
foreach ( $args as $prop => $prop_val ) {
foreach ( $fields as $field ) {
if ( ! empty( $field[ $prop ] ) && $field[ $prop ] === $prop_val ) {
$filtered_fields[] = $field;
}
}
}
return $filtered_fields;
}
/**
* Get fields by group.
*
* @since 1.6.6
*
* @param string $group Fields group (standard, fancy or payment).
*
* @return array.
*/
public function get_by_group( string $group ): array {
return $this->get_filtered( [ 'group' => $group ] );
}
/**
* Get fields by addon.
*
* @since 1.6.6
*
* @param string $addon Addon slug.
*
* @return array.
*/
public function get_by_addon( string $addon ): array {
return $this->get_filtered( [ 'addon' => $addon ] );
}
/**
* Get field by type.
*
* @since 1.6.6
*
* @param string $type Field type.
*
* @return array Single field data. Empty array if field is not available.
*/
public function get_field( string $type ): array {
$fields = $this->get_filtered( [ 'type' => $type ] );
return ! empty( $fields[0] ) ? $fields[0] : [];
}
/**
* Set key value of each field (conditionally).
*
* @since 1.6.6
*
* @param array $fields Fields data.
* @param string $key Key.
* @param string $value Value.
* @param string $condition Condition.
*
* @return array Updated field data.
*/
public function set_values( array $fields, string $key, string $value, string $condition ): array {
if ( empty( $fields ) || empty( $key ) ) {
return $fields;
}
foreach ( $fields as $f => $field ) {
switch ( $condition ) {
case 'empty':
$fields[ $f ][ $key ] = empty( $field[ $key ] ) ? $value : $field[ $key ];
break;
default:
$fields[ $f ][ $key ] = $value;
}
}
return $fields;
}
}