From da0f3d5ea085356bd7d05fd310b9914a2245abbf Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 10 Dec 2024 12:23:08 +0100 Subject: [PATCH 01/24] Added release notes for Forms 13.4-rc1 and 15.1-rc1 --- 13/umbraco-forms/SUMMARY.md | 1 + .../developer/configuration/README.md | 11 ++- .../editor/creating-a-form/form-advanced.md | 65 ++++++++++++++++++ .../editor/creating-a-form/form-settings.md | 2 +- .../images/validation-rules.png | Bin 0 -> 57534 bytes 13/umbraco-forms/release-notes.md | 32 +++++++++ 15/umbraco-forms/SUMMARY.md | 1 + .../developer/configuration/README.md | 12 +++- .../editor/creating-a-form/form-advanced.md | 65 ++++++++++++++++++ .../editor/creating-a-form/form-settings.md | 2 +- .../images/validation-rules.png | Bin 0 -> 68811 bytes 15/umbraco-forms/release-notes.md | 34 +++++++++ 12 files changed, 221 insertions(+), 4 deletions(-) create mode 100644 13/umbraco-forms/editor/creating-a-form/form-advanced.md create mode 100644 13/umbraco-forms/editor/creating-a-form/images/validation-rules.png create mode 100644 15/umbraco-forms/editor/creating-a-form/form-advanced.md create mode 100644 15/umbraco-forms/editor/creating-a-form/images/validation-rules.png diff --git a/13/umbraco-forms/SUMMARY.md b/13/umbraco-forms/SUMMARY.md index d83fc0d19dc..1da9595efad 100644 --- a/13/umbraco-forms/SUMMARY.md +++ b/13/umbraco-forms/SUMMARY.md @@ -19,6 +19,7 @@ * [Creating a Form - The basics](editor/creating-a-form/README.md) * [Form Settings](editor/creating-a-form/form-settings.md) + * [Form Advanced Options](editor/creating-a-form/form-advanced.md) * [Form Information](editor/creating-a-form/form-info.md) * [Overview Of The Field Types](editor/creating-a-form/fieldtypes/README.md) * [Date](editor/creating-a-form/fieldtypes/date.md) diff --git a/13/umbraco-forms/developer/configuration/README.md b/13/umbraco-forms/developer/configuration/README.md index f7b1cd11540..63fce530c13 100644 --- a/13/umbraco-forms/developer/configuration/README.md +++ b/13/umbraco-forms/developer/configuration/README.md @@ -94,7 +94,8 @@ For illustration purposes, the following structure represents the full set of op "DisableClientSideValidationDependencyCheck": false, "DisableRelationTracking": false, "TrackRenderedFormsStorageMethod": "TempData", - "EnableMultiPageFormSettings": false + "EnableMultiPageFormSettings": false, + "EnableAdvancedValidationRules": false }, "Security": { "DisallowedFileUploadExtensions": "config,exe,dll,asp,aspx", @@ -456,6 +457,14 @@ By default the value is `false`. This ensures that, in an upgrade scenario, befo To make the feature available to editors set the value to `true`. +## EnableAdvancedValidationRules + +This setting determines whether [advanced form validation rules](../../editor/creating-a-form/form-advanced.md) are available to editors. + +By default the value is `false`. This partly because the feature is considered something only for "power users", comfortable with crafting rules using the JSON syntax required. And partly as validating the rules on the client requires an additional front-end dependency. + +To make the feature available to editors and including the dependency when using `@Html.RenderUmbracoFormDependencies(Url)`, set the value to `true`. + ## Security configuration ### DisallowedFileUploadExtensions diff --git a/13/umbraco-forms/editor/creating-a-form/form-advanced.md b/13/umbraco-forms/editor/creating-a-form/form-advanced.md new file mode 100644 index 00000000000..64e23637270 --- /dev/null +++ b/13/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -0,0 +1,65 @@ +# Form Advanced Options + +In this article, you will find information about accessing the Forms Advanced Options and the features available to customize your Form. + +To access the Form Advanced Options: + +1. Navigate to the **Forms** section. +2. Open a Form you wish to customize. +3. Click **Advanced** in the top-right corner of the screen. + +{% hint style="info" %} +The advanced options for forms are only available when [configured to display](../../developer/configuration/README.md#enableadvancedvalidationrules). +{% endhint %} + +## Validation Rules + +When creating forms you are able to add validation to individual fields, making them mandatory or applying a regular expression pattern. Via the advanced options, you can provide validation rules for the entire form. This allows you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". + +![Validation rules](./images/validation-rules.png) + +To add new rules, you need to provide the rule definition, an error message and select a field to which the message will be associated. Once created you can click to edit or delete them from the list. + +Crafting the rule definition itself requires use of [JSON logic](https://jsonlogic.com/) along with placeholders for the field or fields that are being validated. + +One example use case would be ensuring that two fields match each other, perhaps when asking for a user's email address. Given two fields on the form, one with the alias of `email` and the other `compareEmail`, the rule would be: + +```json +{ + "==": [ + "{email}", + "{compareEmail}" + ] +} +``` + +A slightly more complex example could be with two dates, where, if provided, you want to ensure the second date is later than the first. So given fields with aliases of `startDate` and `endDate` a rule would look like this: + +```json +{ + "or": [ + { + "==": [ + "{startDate}", + "" + ] + }, + { + "==": [ + "{endDate}", + "" + ] + }, + { + ">": [ + "{endDate}", + "{startDate}" + ] + } + ] +} +``` + +Overall you should be able to create simple or more complex rules as needed, using comparisons between fields and with static values. + +When the form is rendered, these validation rules will be applied both client and server-side. In this way you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file diff --git a/13/umbraco-forms/editor/creating-a-form/form-settings.md b/13/umbraco-forms/editor/creating-a-form/form-settings.md index 11b62c35322..2599e5bd375 100644 --- a/13/umbraco-forms/editor/creating-a-form/form-settings.md +++ b/13/umbraco-forms/editor/creating-a-form/form-settings.md @@ -1,6 +1,6 @@ # Form Settings -In this article, you will find information about accessing the Forms Settings and the validations available to customize your Form. +In this article, you will find information about accessing the Forms Settings and the options available to customize your Form. To access the Form Settings: diff --git a/13/umbraco-forms/editor/creating-a-form/images/validation-rules.png b/13/umbraco-forms/editor/creating-a-form/images/validation-rules.png new file mode 100644 index 0000000000000000000000000000000000000000..ade66436e2d18c22393564a387fe3324c01c3dea GIT binary patch literal 57534 zcmeFYcUV*1_BCn&K|p$Mp(sU~^bR6T1*y`JNE49WJ5fM71Ox=BN>_UCL^{%uUPB2* zS|F5AQf_?DJ?DMT_xSV~riHqosb2h>_^VjT`r#Jyp@W zaRYzg#*Ld-gm-Z7hz?ec;+}4L>Zw1uQ8CK=8}|awPU(fxjT_ZqVw5F5?)6=_rzV~^ zZrtDb^LI1U8lU;bjaB_;DoQW?EcVg9#xET@;P-ryfun(EImle;YqZ^Y$LNWI-MPZH z|M_rMd+yIx?)|&V$pJ-n+P+M>9(o>${13l;dB>)tGkljM$|UZK3e_7`RZW#t9hlBL zD6(VL6yHFVLi4F4bj%wqSYAKFGW*@YAh+dmI*=`#{0SlZUk^5vzsASI-@m_kKp{Ln zHy4fx8I6_BN~?Boa-#K|s+8xTB=Y$8vEk$*ykFTGNmQ$BrG%`Nl@yr&U;i1`UfWU| zlDWM-S^2qsB3Wc;)_<-%T=O}XX`&FJ=?9Y;%O?Npo94^;!k#WXE=%8;QINPF#?jn+9YIF?FUS5K%Jh(6ypSdx=feMjf8uu9)q1pFyNjT=Zxk<6J z$c~qI{z2rf4Vs&u3^s;CSLq4io8pKEH{enEW6n*|=5=sbWg;KasN%Fj=4nlq-z-;?M=!2Y?As8E0%%!aI^%L5nyu!j)r3VM140xAMJ%VPx zdOR2zJn8do{S{Jk7h&D6aR=h{vD&#`*UQJpF_8PtKVgno2x7r&)~xn;2oJ5HT%ep5 zA3ILYT_hcpW56htj{lNzr!*Ex;_y4mkiS?Vd-FNYzm47Kqjtf5&}?Xsm^9{RR+;4@ z6hB#*;IgPZG9^XcQN&|>X6CDNw$y)Lswj~HyN>m+Fn*VfA;(D z?>_N1Q3^qv;-8);xH8YWt{ABt&6*@?lsR=Bk3lbk(($m<{S_DOn$1=zhP~vh9mn=F z^$y~iB=F~nOt1@WYy*D9*Z%PmeNfaSTYoKhrJ839cS)*=+pK)=GiQlVLy#9n6>0vg zL#oh~5i+P=BGrF#NYICg<))a3lR|qbBgC(Xmp(UdUrE+_ob0g;C}Jju?jl-|te^w@ z%WPTjk#%jIh=|rUFx)~zHQ9HIGURBoxjW(8x8S1vT%MIwHt=)7KBuwU1AP8*KhlGS zfqu-TjTVNReupg7S(RNAsOPB8tz`{_ufPBw;AQu+EbWQ>rwv)`SX`&$W*{{8!}s0d z1zjp)eChvSf50fQuZFmZf+hhqrqKCY5!GMX3jlo>dcRUKrugCg%51WaK6`JBbT%%w z9%qN)#gXZR6z2LTB#S<$R2rQ!7_89$9x8Vns{EPS> zQoU6VnnHutapOdt0A(`YElHz|?FP#d3;OO|6>X{)x0s^Dgm<~NU>)8M8EW_`U%=AWfKg?rv}!3E5o zL8R*r%8`cMJ;#Fhm(?4E_VAr28X5#4mu7a!dz{wY3SLpc@X)(dFb5Du9n}rO(sqdJ z1!cq#R2~a#HtkHV4Q|~CLS$njkkCLfcsr84X`f%~7OI%`&oxNC+J3i7nX&>Wi`U7p@RjlnZ8gxh}lWkIKW>KB4ffArQMI)gS{ zlYJiyJlOguC%DnZ(f=yclK>Zk_H`z2#u0(#izRQNL6@nouA$em3?T)gcA$=DqgO!G z!d)=yZ2Yx9vdCXD6s62ttQus0|1D5G5#ZTJ00$8qBkw%2x);3p^x~30*~;7jnfX>x z1;t-}?kM1LFLc3XwBC;?wCy^b7-K<%fa?6cR$Up15RJEuaAi~Rmvl(ngUhgoET8Vv za@;>BA3V&i zE0t|_c`5207*bj$h8=Z9S7X#p5|3t5t@E+m7ZsXR2q8c>Xv0=)Z!d`s@J_n}-BI%p zMKH;-2CE@a-?d1OL0rXOz`~Hnn7~{s_2hX4&nqvU7v6o`&`W}#JqU;ZAX}UVyVQxk zvYv4BS$;QUApI7o3hY9tD0&w@twpnAluotJgI!ag+Z~D74@=tE# zRa)`EvJRr;laRk%c?R%t2+nG`QbV1lopU|$lw*fTm4FsXrbUD`?a{CEegMtFZ$=%(q<8(qtV!#-Oo4&yd$^Q;ZP6&jvgv@ z^K$RX#i|k=xOTPcR1j76_knE#Qe4;UYFXA!X925l%pMszsFGBjPP>~7>q4R=xQlr_ zgPte#O7ICwb}$b4USxSW<65?Ae$Y83Kl z@|PhL`OILOSezGPCdSuTm~*gU>ikl6U)Itw&@Gk+@E!!a_-%# zo6v55<;A)=u+K#BgI6ih0D-L2QTNK6EvX&65VMp8`OI zPO>NS@E&&usconDHbrzs=+Z6XP{XhL9?kUq7kE|%XZn7A{dwQMsV?I1UO-4{(Zq;F zLbL$X8IWXNgW-_6N%FsX%XyyVm=lz({acsmw*l9|uGu8N)enyGgGBE)v5N2>xz#TGC zLKg#SvY3^y1>qP%T5mq|OX6>QT_bqS6PQjJXl<8e^^4_&d#{3}5jCDw0SPUPW~s9o zY?6HNvJ^?wTnQr-C8QTHBojFn_7w`v$c|}m^-Qc)kLNSkO;WyPMg{xSXKTkb@E|x3 z3a(%?I+a~jRLSkZNHypFBa1lFoSix2sZtX|(J_jSpC zePuV;aD~#RA4ld@*53Y5t7z2l+hzIj=Uf8(<~#aj#&4cY$?(U|mz1Tac^D*Isw>tq zq-5!3&{13HBAyPV@F!`^TIZ+_hZB$CGP>(ZV1o96Z~pnW79vvxOsyZvs92t-P3OVZ z_VT|X9ay8icKt?i>*2|)P=fIg;5RO^t$MGqzo05B58W#)Qmai#5uhts=d%;gC4(OP zS+g9el1pMcJor6J`J3NHafw#f=+4x|J7S;FUu9$BRpCt3uo1gkNBOP;7>BNFW$(EB zyB@ZSjb(`~ftA05Hb3S2mz;#rU&-r{B8(_tn|s9@04#K!{vh_A!MOfE>TISFCCr~1 zW_|pJ0U}~?46y!h2I$p;#Sx<}2zqYU5zCqVsmk44r0JvFBeBiwg1$#~BEv(7Q@sLL zNT_F;BRPFCcs_@~?eO`%(_nZ5@D7d+K)kPSVwQPw(KwoBi|;>%2kNvLz5lFQ?|YHH zuvWDQ$8sKOEEVxw@Q`kU92UX6l{YL|j?8=J8k9m>n2G$_wujGJah0S8ANv@O@MBUr zcAd$eF+S}`V5`*X7E<|)w2euf(bP=FVxb!D8rSbN^i7IssPWqPq7ExKR)kD@ME`N?XNs>qn(_Gc^GPu}z{D4Pi)5wuc4aN-Z|&REMUY?#ct-1YUl89;=E0ktGg{F#enl+Gd(1y{&uV(?P_24 z_PW2YG^`2s3j1{XGFGyhbC3Svp;5eS>crxkU#O?s-3E#;8-h=emUHYzNv>v55LEZ| zh0?wN$<9#HQ6!+t0qHz7t*Bx#?t6^62E0{Vy}O^uX?q-bAr?SjSOohzuk%f~1y@3@ zkzWfOE{_&3%2CzYX^I;J*n?o(`t!!ETs6BB-Gg+%kKjFv{pDK5QLKgnhKm{O^)NWt zRtdAxxR&mNr|u!Tc1cwa7zBIGIQPKClq?L*A|o&FUa0JC4}>!BC~U<+(he}%>drLH zJA1w>{h(UuI47(R=Inw$J&QM`ve0vcEfY;?nAtz4&x+s0El z)-=S08e8CI7h(-Ik5Zrd>fXSZ6xkAVk*Ph+|D_Wnwg^~<-`Pv*2QdNZr$6il zyJ0$^yrHJc*xOQDQ>4)-BN`a=>ZZcgOrU9d4YoI90N&TkRX{XNecc@j6ROT zrIEAi?D{EwW!nvnjQA}tLS+a6Se$5nG^{C&8s--j54!B{lu<-=DApun>vJvMl`9slB_|^tm^i@1xrV0ffBN~A8~@#PUK$a^ydHA1=!*yq zl1kP~1hrQshW)K5!NmRaLzi$g9wMWIXBKfHB0&x7{>ld0Gw)P0vXfG0QOYh{`cF$s z$S!mj|8gpVV@?F8w|!*;kp34Bjq8iu)_HU=_7{~nsP3lUIhZ!}^XI|wq`${N4f}V4 zOvnxtzH@cu<~dIZ!){u~)?C{vV|47a^*N6iL1--{1^0gr>F+^Y68$pvxha{~m4uz= zrY%G^t%D(5n~zsjxV*B0>(smJ`iGgVN3Vu%dDe#J1aGe zir{}%2oVc9iQ3G6Ptt#D5~BY2{>0B4oPMnL@)DYssO^7>ZJH=ihw>Gg&u+Zw6S;st zRQH^1rHHTO4wXITktEPfD(y9Q>TS@d-X5k~0O)kv|cFvV)F*_p&lICa4109R+6WlFgs2&Vt3Nk+)URktv0&EDq zykgR+@~0_tYRF%8kX`BB|EGSDIQs@cgfO*{nfvkfx8=UPA8o(Km{lN(1GQCLK{#Bl zOs2$`nyf{3$p< z$L#cObRgv1VkKNVq=VWF(2zI8wiO^dF*ob{f* zuEyW}VMGV3AMhaR+^ylNi}(88W1QKea>nG{Al660uAbu<+IG{V;;XUmG~0msnG{IU`J4t4@FK2ZV%@)QC`c2tWUGk0~*eDUH46RTO zObfX%zG|JA_?5uw{vz}6SL}gI-C24(5E}jFm2Arh*l5>572H944S62g2F%*-)AEY- zEJ!H6*}B9`QB_HL@73U))D=N7-ZAbI{{Y#4klFCW*{xEp0o&bFCtum&#aEF_mf#z6eF4M@3~i?i$~zvmA+$BGSqb;X5P(WBpK z?CEq(B$L?Pa3Fe`SfQ0w**D;x0>bp}81^(Wxs(8NrY;yIwHV$YSv7byjl(o4{=!C@ zg)~q3frN(eWGI#H&5IsEq7{YC3!A>T%)xUBHT9hrmte(y>_xSB$dRKN>O!*NA`Ond zhn*cOKUO{lbz7%7@s1b1BkK+QqJ#R$drK5+{{hg#+&5C>a@q*&^WXyxpPJwGmGwof zkGWhpz7{-unfChg(qT1agJ_l|V=DCd@TyXF@Zg=YP^((hnu`GZ2x`=9g8RSg z8zq&KN{{_ad~R*o6(SV?SD!hP*bJD03cT-c;~zE)xN)cy_}aFXX|F=tMJdGP1996e z>tprO!Ya%!A}pe~UdmuOf-h6~7@#O_ZuU&dcrm7RUgLNVEdMAFa|?ws$|00TshAs8 z29nWd&r-tvqq6@?bB|!}Fb!qq5so@64Lm9w@iF(CxoeBp*sw7)K3Oue`~lRmiKSM4t) z_D~w~E*SOfMRrKCK(Ed4^oVySCa!O_+kHH`9uImchI~A;l*0rT(y!cbSfsL%p1170 z*-hl(O>@=4r_5^@abAkeZ9EfZlm+tKlJPc_nlX3mYR^te|Lm?Y#Z4@))K})k3|fe} zGch`rr=iQay)W+n+rRlE7@|tO*1+sJCQz2{dqdVn!BzJIX2}8N9NnPJ{2ju>T0BSt zE9ZHY9Uo+{D~|C&HpqxmHW4!bJD6i?4jd#(Ks>69}D;qia;P#)Fk; z{b%!0vWtQh{fssdhus-9hIJ1c%!PLS-qRUuKN4yqw;gMl-a8JtyH);>YIZ|;pKzpa zFqGE2Fc5UFh7R!K{8>k+IT1p!k2)4Jq~x>qG)k0~<(sm#5sObVV>w%;+&hz6$u&)b z(u`Qt<+G;X8s~B3e_c}MsA7HMnPpPTBw=>A{+Zr*zOUVF>^u3k zvFKQz^nfd!m5U9RH4x z0v7Co9@8g8TgOo*t^Q8pyeLJJQkYyU>4u|yP{W)6qd|?;4Vxg85hp=2HEeRS@=Jrk z0j!y(f>55nu<09H<&Z^8u8^EV$|u$R-0k-R$=d8iSLI6ooCU52t_F#XbX`~@izwc= zeakEwN3lD4Q>8QRq$VA?OyeaJ)hxZXOiXoiixG^E=_%?5L!LB^WI< zzF62FOXu;zQ$S)7pL64_sFoV(T|^C@QBboDz@t(@b$RklotJ}RofHGU|Fvy_pltZw zSj!Y@V+`EAxAD}e<6BsT8%v11FY)tT*{M3#_IrM(Wx(P0wn_@8%DEfVux*Kr?HS%V zFBI+fJ;viU)$5yM7V-hTa(tzI#FIy{s+T1$A@$M$pZ${*N2T?%x&x96j`V`;tZgm% zSOG)5KLr_U*l4br zGAW$J{34N$*RY1d9rZa~b^?x(5Nq5K*72mk`9b%pprw2>ho7LK98ZexF~_p`eFt=2Z)5-3Mj&CF9l zGO7tZA#OdcU0Ul(jzTd6`emmZ6Nd)rfRu22OI|_*S*K9Qer%5jiwqIhS2nookNF-Q z)HRviItXjU*nxIEA@``eBOw2)%V&M7&-P-(mF0-@(mD%d9Nr`9ZI7e+3-S~fzg_o_ z+jG@8wx8WbP@#{yfeY&dpy$e+wM0%VU^bB3t*;8lgoMx3#=ADtF9Z2d4>n~gw(f77 zK!*ECw(&1UxZgi*`?Bc?!taw8Qd1oL_8h~Wq0Q0_Ov_bP-LT#_YhcP|gR+O|gQ$^h7t@nUyms7F*6M>6sL!DI+Or)UN! zC1|De;IAsa5sdKFp$ytzK05BwFL9biBtjl^#BemV+pyq<jkVs);`UoeZ{O`_$%RxfK z-T#?s;l`(vX!d{NGa*qSp$@f=7q)#*{zoeXezR?#sL&NH%L41mFTZym$nnX96@Tyt zUfT1>Mt*8-oR~af7V7is(D~nd4Lkz^%1SPukB2oJdtb@%DLCqifu{2>`wU1<&);&^ zll*TX4G&!sp@w~87;6(V=db2Tg9uJQmkZ;kaBt!W?B8sWJsD>Q8Tu2i(5z6DfggOn z_Rc@t4FC2v2v4uKk0y}*kDr8wX8o4~;;(b`MR*1n{+D*`PMGk6u>b$ye>+9~Pej8) zBXRF6pv~|2*55J%?!SRWm6n~34h1i7AJfz6O3F(9fxy7PdKZfSZ1Vpx*-(X6;${S73j}dA`kuxrvG1f!{+13dN1(-=pR#~`C{c0XFeOZ4W;O#M_6IaimyCev*}}|m zekqTd?wajOZ{2mAhvSlQVmX@j6+ytYnt$+QthK4v&Q8e94kF4YQ4v0_%&0hF`t_Wv zb^KFp_-cSH)zwvhi|4McFIw(-%;6U$sOy>n-#K*r9BI0sO~?-0(*i-7u#isG!oLQ# zQo&Z)X94|ufjIenVfCo&k>Y)-w2VHaB^LGFB>nsYnU5mFYNj3zT0o|^9-)r{uSkaD z`JS|P02kkC5^M2)j{OYOinM$4AV7`kHx2=*JZ1#f(uQieLL?O6wogNIus4w=zzb_+ zyU%G{%TXn1B%REUx2AGhdosd7yko}KxS#|r<8WjX^GG;UjyiLcHt$OnA%W3#jAYsR zy)vYQ90UC|m-3(P7`7Lsln6R*W}1N>D&>CenE+~rO%9t3rVam*p{O~a(Y;|T$XFyZ)nuA)M zu~#BE62YCsq6U{rt>ZV9p^XhS=i|i2{aVkH#Rb6TV?Gf=I$b(Yrh`x+yqF8rfu(P4 z-+JBWad z<5?8horOLnwciBn;cYL(ln$%UNEccn`P}@0`g+C;(53(q2a~u)GuqXw(K|~JEMYmz zv=p`4pBU&f;4o7}NF_8-?>yPlU{QS#L{tQlzJ2!rdV#>x8Pd>&%KFSUn_Be4A;R3f z7|mOVreyZNf8O4FO@mvqh#6h{W-`5BPlSUr2;ZAj1YIrpz1;@>YSwel0wrwDp;->VvU{MubrLF8@oxmeJIZFez4b5 z3BHH0UJ}-CQ(!v(wiaJD$a*RcWHhw92&wSk4%Z~d15O8Rmj8a9zWqz$KgKEG zU6RlsyIy&xrYCFlBLo=4=8nxUV<@n0dgz6 zyXp0K&1dZ;OKa@AW}#v0*x=xRsih`x@zqVa;nTV%v?}NxqH$ks4NdE{=gsrXqqoe# zWiFtY=}O~wy6EIhVLQf&MeMEY%OM)eT#v8!uHMsT#Z?(zv+usVs@6E@pSWTjPojFV zB9pIU@r}xx@@S@ZjJj?@lan$ zFyX8!=k^}WWy#ygjSo^j^-?}tbbkjqpa8vpyA8WCmUv}zk(=TJ&x#;h0Rf<-5b=F& z0|IF|Bk3*K>eTggJ--m;8RYFAMIED`83^*bST3a5T2zVK@Fd6P^-mA4d#qB1e}$ct zOfv$b>CA;um&vZ?sAQFopu$pywqYJuNzD+&iV#!J3wqvTjq|0sjyEd#6Y=C+B_+%k zg7Qm`-V03?R>!UrPKtDSWiwriVDg)Hlq`brzOG|yX`Pi<7zDNtzp6BirhiDqUoIIq zr8*n=(YCY9Q)aIUKIb|;7Th=x*kN58`PQLwYPrSVL+AAsnfGu&U(lztbYYA;w!gv{ zq#;)^qPpY6R|qH`qfS3l9^|c8ctYs!NFP$*`H5 z>w8#n67Wk%$Xvq!ZEdiK?#ekiK^)%YS-C~k=il-1jSFnAWIX?DG5#)Q17u&F<*tSy zq1}z$u9?q{CN?kGaAY7d2n$#TgaE*c9tQi5EVL5Sgs`j%7qfmZNqx$g3Y8SQd?Chv zfQxIvZLB!-%ccNC{dGciJbXVENoKb-2oc}qL-N{KP@jq|>l^e`;?3pg`#r;OMdvd= zJu#w#PJ9j^MJH-b_hUAIt4NhuJzvvX&+-01F0&5Cb))tc?@whuE?eerk9+I?IBu4!Nc5@Bi4Wo)K-U zLTfQiz2(LEN^QR5r~>T)uDEnw`(e#2d6=jtLNnJc?5ff2W4>SXKR^DQu*qHl19mEJ zr10ZH#{59PW@@izLfLCirCDQhygtp09L71t*8tDtO+cqTqMn_Jma%P*cvKEJX!&~3 zmr$oYQ|`Pslfb~49ar%RrJhm>@xtF+$1cm%o~OvvZ>Uki`p^>+3_5#M!lnz1i07J4 zq#i5@0x62)4w2y>B@Ch<;cV~`v#-odsk7xQ8h?5pabX&mRd@WETaL6w+nW|kv_SQX zK?ZB3m5@8twdIcl9s->61tw>F*N=btNsXpETy5mMSp@8pQXedGV!UW%0(*rAzq>o* z-+s)JzKYh6*zCY zluSCc?P6R~`ms+wgF7*(SVb-IduP)&P$9i|!~W!1+b&Rn{uTutU=&hEv$)XH5GlLH zZj`Fd`q+QucGe;V{-V&ERbmb4f!0d4pGu!zg)STIPMG_W6&n$B%bqQb$9Ung1B~y- zBc%k|lro}l=q|CnB+9h7nhn0!J1zE^dx>=IbDHk*1vL^e!#>B&qWU7BZdoeoMPx;O zQ9eNn@!p!KCoL@tO=YSP+3U%*wMC%<@i$`?u{U>?(lSD!y z$}>8Ca8eH?`>tvlq6nO@1&17rpBzjxLF&_U8%;cdd=4f%ke@EPg_?OIPT;@#Cabh9@}$-1hrv=91P1n^d@_(ym>U|zJTSek zx5Q`|i`?uyVS;a<$(G$sD|#k2*%v_Kh@Qy1UTK_Hz(Q)wEm>3GYVTKFJpUwa3iaCPE^mFmyT7x@EE-yjOv&3Gru~%4& zeXP!YTJWUJc_4O@CDJi|(T$mUUzz?2!`gA#`e=VHJB-gj$ZhKU0iJ*LLM}iBN_oPQ zK(kSg=_9ys?dYYqAL_9K1if>O#tumzRzN~gnVjf!UVj=c^TeTYg3#%geAR{aEcX2) z@geEuX#d9U_1kk4cK-OydYF0qvf~WC-6;%nPy?CBsHDjSBH~Z7Y9pb8(LSPpt$)F6 zH#JF+dlozV)+;jU^gNK3+dJ&c&*xinegO2`+{>rg>Sa+k@Rej8Jn$TD@Qs$dGH52O zZ|D+h4vvu2OE~PTnXgS^!}mu&C_DG)3#Iw?_IYSwNL2>=LRKqnTFV*z_?4ye5?Flu zsLpJv)H|E}$qJ(o=RohL(HKtSHJ5mXh3)vyqq=j!wfOSr`Zs(%vbr7C?96XQULK}Z z41re%cKy?3Js*`(slT~xQ94{CFCn}<7tBu zPsUv@+eLD&GsXlo6sIr8f2b?G>ZK?Rx!=%E(9da=89i)>+B zEKrDdAk`WY50#Pa`q}Hilb7&C%RIbAbnRjp>&jCYxA{^CW`J`;{I!{%d<(tl^#E|C z$;3S;E8X20LfVma7=97Tbt)1`^cRQy%<*SA>-c&k~dqfp@RfYp>oTHfs{d)-2c>UR1FeU7t9I zzmlw6OgY>Q!lO@RIxrRq`4{1}O6d5lP_cE;-&Yqu=ZRuu^*w5*`_~9e|BL`|)-SWU z`(^{M9~2dy8}tqd*#u9PzuKu7Rld-MJ>0=L!(v5qE+XcTYp$QxPrDbTS}v$ilE=pA zq)`InOZ}4oTN6$tK_uvccP3XMG|N*2*jSxNdj{410ahSCL(j29x=yWGhKMO7eZ+#o zziMu2fo_MIqpN?B9Xoh1ur5i(94VsOMbtmxUA_ikiaBd4XTKg6NnwWI>r~Bp=D-Ag ztQ%~}Ud<>_`j-O5X2)-^l{9I&03zU@iX*wzb4C114K`4jKG6!JzSIuwQPHGstCa4q8+nKIwk?TgUp{@swFvk+e$i&j%YnR=wB+l5QKLtp5c9SXmpV~FKK5p?rsh4+LW--?_r_nW> zEknY)skW{4Sg=~FONzwGje|VE0;s?DDVkzqqJ3BHqwas{6Ft;_QKvsWFRq^a>mePt zQ9nTa{=a|cFM{~ru_D4Pe|6I&(b%OtZU<}Z==;EU5E zE^}_rgmM525kI4tT@ACEiuYANShW3|l+ael+32aU9Vq_=lCLfEUKCBOjth={N`x3)*wcw9nk9T8Ho2O*Dq?NV=Wov9Lp_Xu}?cjJ(GC->C zHY4D*$9Lcr6F%meALyh_ilk8 z;$7?z$9^gK>>&N@dOQmzO5yazK{u(>V~ZeW55C3z5@puy*!V($onMZbD?BwJicb6v zO50}NpmD{QQOM;u%2(Vn@O>q(rDsddd+#ruH`LzTkjR~FH_v6=SMOQpH+ML^mD?4b z82v6ZE0MQrkqQ>@63DBjYe_*w+{k{aLDzFA^!R;HP%}}x`1R_EE#-6WC*j%JonFv( zza{MY^uqULG9Z*$jv>FYB|r8x9Wbgd=eWU&YoOGp(|5X=UD(X~)-m77k&0YMVF);a zIT@Ico;=a-<(W+t)Bsg)#Ka?SY$w05HgJIMJ*#SD8_=Kyg*Rsc^5O9d&3gP--|jUi z_`Uj#Ou+NUGVs@|yytc`EweC=H>o(D^Hpn=v`0qfNM3D*+qyWrMZnLAyv`G91?G() z?SA%_q=NUyl=Pm#3us|TiPj&k*8)2&+=woJnzvO#Y&Yh?0g#zcbD%fP1Jzw|i1;wk zX!Ug>s7ObyBaS=uy85-DNK8vF`iU&2+(Vef6NSvHDRz9R6e2u*=V$M$9hO3U@%hfD zyuVrHinjbjD78&1z?zS|Bgv^#!meKhoVL}lRrYq0o870WQ>G5q7?21}dNm(yQ9C+) zc&~T&<7k@8VqI2=;>)--r$sa7+y13uM(gGd(H>a2xduMZoojB7(%(6K7$a^`d$)}0P zh8W4Pc4$VSmWRru$L$kn+K70mQfxPmx1@`E)D z73W<}IE-T`W>k#c?cD|Tm0C`&OdYSjHr{)|WvfO7YqxiNt75i&l%eL_{m!Yh`W|P% zN{B8fzXa6AVa(R=^ecCle{Og=q5q9XQ)BObQ<^RH?=rTESz7;5{)3e3o)2P8rNCA? zd!|zsfptduZ?58Vo2@vcsAIaGK;IgM7z0%U1rVko!kURg4Vx!U1v3QKZ`Vx4;Ef&5 zb?)}*@vlBJ&0}6yZ%a{%5tPP^-0$$yiW7qfO_JF{tDZ+}^@k@dq*&WiEM6Byut{!N z#fYPP4D$Nfk{ro69#g^O7uv`&V-B@yJ>^13wmqtLzOcb--9~mNcvsYYqpth$MU^Vx zP84HG?jVteVht*@yR~9m@5?+3g2UpZd`ueKA|ia!XSw@bR_t!)*E`o}o0mS9-Adh2 zh4h?ToE+3Z)-xpMT^urB&ow8}@7A9_P#$~gX&JtjzQC@eFnsybn*VHh2UQx#Pl!nB zlc(flaZNXJC!>Fs2z*|v{yeEUYxZjH!Ijh#I?W*loP1BQ1-I?D=^{iklxs<25oh}b z8JX)-tR#^K-)rp|>elL|>U5}J2-F}_M<_5vsHl^@kgz3*r1b-$8?V_zKGv~G`@Fw~ zO~`C7ZtBUIe04M%9onUS+%?#YPo}l!`n>a?Ca!F;hRtYK=urib3g-M4-Mz9H>s~+T z-rmK5A8c3Z;mX4Q_WnR*D_p^A5NW)A*P>xYGZA_3%(99uZMK`Yp8N%lXS`PsmVA3n zdnLH{vQKufiNC&dg1c{qS8L_9`*D!7_*=)ihR9U$z5-ThZbX2vE6Bb=b2rg;q_mp| zdM&-p>6e0LHcT^hA=IZ$&AotHmaZxe2@;ILVb%Gk%}w{3wls&!nVUny`la%;(h@AP0u3L;{PPYvA5 ze7`l2vf_#3TAE8>}@nW8H*DK7PX@?wr=4BQ| z!+T8V?%Npze|#S%{_uL3ffDA-6OFlr{mmHh0ONTa2o5eu+paCA)=<1=QOKkt!b$@+ zMB&UYPX|18BQ^Kt31hP&g_duvA#x!<;3(2kTb%X+u3bGn=1xCgBAUgb=z)EydCz>l zV<|*lg@7F}6mJ(n83`t%d+vpmjEm)pPmFUO$^dMe*EgWU?}6h%LFdOoHVP7%+9p`I zU6&#UNd<8D$KWs0EHexNO5lL&G~zbAymuQ|u(pLhsLEkUcyRLObq-c8=)6|33+pC- zwX4N;QH%XS20}3fp?(9`s!xPZ$w)ilL(tAa*PCy!SJrbb&D^_to%!)T7y5oTGin8d}y>dzC-12K~>Tuc;=v*V%6=%2gLM?c^)%t!oLnQC;KkMUn zKd2;$d0c{Ima346-uQ+gG-kY4Y2vvCfv=4l)0ieU{$el$#yBpHIvg!vemQ~{z(thz z{rsZ$oWu?B0%LGy`5l{23UKIx>|OdS+Jka*5)_(;l6l~Y{$jsh!%l+%v- zJ6**d{{tHI)4D0LiSzxE`vrb?EI%_3@%uWpKG=Fp+OW&>#K~!uh9Z`HqA@W{e4Y7p zeS%fPIVP~LT$8`bU3GxSJ?M+jQdw}--r7q#80HAb0|Y3qNoXt$X(^~yim(gtJUjhh z=T_#EFuUeaYtagPZtCWh#P@5cgD)@K016MT5`1hZnneBY}Nh~SN768HB!5j#KMuqaY= zdK0}j+;{gpVph16;b?dYL-b9C&eEr0y~X(b>LuxsMIghAykwyszuRc4Dv>4arPli6 zoD%i1D&og+!Kr|@o;m%VIeFYY>}Ai)x$7gz>6`92cClD)@5GlkK1>qGN&D@X_G7e@ zCMOgA#mx6+>Goo$ybV4_F!Nf+1^GkS&E4Oo%!I!ZykCM37>D=Rk^XElA;M3(d-mG> zIu7M($&xx^tHj1t+j5HX>P+f{EPwzzq0m}wF+EuQ0mFM`n&m!x=hU8VWN(4~1X*)IA zeDKCRq^UWbL{+>@ z^utYJZ}}XY+bIZY`_z=?wqoVeeLA?V<}ZAMeYHftN*U(}fqjp7fKPM*naRABZH zT9G123%f$d6MA~6yPbNt%U|=&dTz1kD_Jzl;w5;J%x*GL*T1v^Hr=MBKU);s#mjm6 z-ZU93b=)y*_l&x&tXDpu*r}KS|7S>5F8gkkcX;qc$dW6Z0flfZ38{9i3h7@vYmB|x zY}*HiWO$GuRI}|xs>V_<+($#4g{-S>r^E34ehzvOgyRLhWm%PClgt;_0TwOkKD#Yy`b6Npl~ zNB-*grfwsoL{?aBsj=65sSdSC%&vd$-`$J)x=m@r!6=uMkW_ffdkbm-Ulnur%=7n< z+r^ynNhS^rF(yO^2iAcm+X3jS`1TBPBeGilfipX!AA%TW)A~UfE!9rzz(R+P-|DTa zmdOc@>yxoH267T*Y=GuAC+$I(@?4P*KgD=mR9R|*)9y8uPtUr)IQ z^SuAGN3Z%-c_2@{23d@uvGx47nNBi@TwcykNOLyu` zr%ozWFf>XWYS|28+C6-1k&-3>rAw4sCJQ9t8z`hU+R{yUh5{x$E3Mo()f-N<-UUTv zA7TcAN>Y>1?!fn<2`G4&!zgK+%EXDR%OZ!ZcopKT*B!pc(e^q7{DJ1DF87FFk zd!lJ48kT(RM9puJ<~6{1N%0329J~!(B8R?vau(^}ZtQ(Quy(yCl_g4%)jmLmrnv={ z;6*5Vxc9=3a~&GLz$;aY&eV?dtW5Tv`MyM~sMoS{KlN5TiR>!NrCP)O9w0T%+}nn!(BTn z8h>lg!NIxW4hOIONExk`1O^z&|EV;>aPdL{A%Hr3AwC>7uIgXgtiBeP$$r!8MNKz+ zLC({oy6;F$wA86=J7dSGlyee3JDCb|tY&*X(6wetpsyAmViiPq$u`iczOtv#<3Js@ zJ8TzvD-$2(P`&R+v&SR$mO0GD@>dVH=5Tg^q%WQ|1iyU}ccHGLPmK64(&EC|S4q(J z+`3%V^2#Wn?l&JBDP;>JIpb-uV64jZIV)f3mzNodaM(a3z;!mtodu#pH_-AQEzVf)XzF_pj%FPjY}};s(^EzX5!B} z74q3YuGu>?ae}2YeLi8trvSP?*s#r(I+F3_4$mE6pMyNwm;3URJ9OOysbyT3XD)F; zBQfvhUw%La(W`vG3!QU<$AdRlOe%;1ePUT!Xxd{5!8PPIUBU&$*?u9>(LrYfcy%T5 z%UKoR$g^PCS|Y>SIZz;BpBWWK#O6c>5dwTpD;Ag;ZRm=0ux;LWSw){q8g3E0OtZQc zbt{doJ~s~EbadX`AdZcXMh%vn7B&yz4Gu2JW>=az#CvkA()KgF9 zb}}5I+^Wa_4voA`mYNLBmsb&1N!VpNqNo3!m(HQQ&q_jh`Ec-QMemFx0wrGdk=MRP z%9iKbPuT@YwS{Bs!H_llsmdUT#Cq4F{|f!7Rd)p;x5>hnGCW4tCJL9(3YlY~ZBKkj z$m_Kt&gE+$rt3#GxdPVrVwY)sx-p&i$oIlJwL?_{F4icD^!&MzpYd4mD*av84B@D% zAkM_a$@S${r}D_TeZ57j`cdSB1L1DJ%!PsE0s}7jN`F=!u}$iVxs~+mFC6t-cqLJKX;5AMc&eZhz484p}#299N(6 zpTsY^Yl_jmkq)bfz*4J;tt;hr>nr8~X8z8N=_HFVICiyLG!T}5)Tj39lT zQ=l}K6r@JRffI7L?sYSi3sll&se9aGdJJLZxCbzay`fn8JFc6MS#3f-bbD)YsT{iL z*i(xk)}Q4lG`dw$Nde$0mW&gJYtg*ETQ`lYT;E#c)vb^k>3O*%KkY38AcsgEe)^^# z&jroA?3eI4v6>a6Rs|6dI2!Hap|W`%l1fY3{8876b{O)x8@@rF*7CGfp%0_zzJbm6 z+=EY1URUDF;9m(`t8xX(vxV$Lu^V9f=q#hE%9+!Q z^Z9+Mi)64ZSSuOY-QR0vDU52N+sYDYr^n~q7GhLtS`qw=%rXfJVtapY zZ*a3>5Z=O}iq&;gV&F09b7?3UQZS7FokRNaMIby)!a%hmw5jV`%0bbuNSMEQ6#(sp0UVyjn1G zji&14@@C;(!!G0xru5PliZcss* zuH(9lW84AnbK)b>aiSflKUvEfjZyHjY4P=GV-I$suO?V!iEruohc>jjJ3?7Z!k??MZN2;d&$n_Z4#S5==Gb88TED+g(0ehZdHh_3|)@h^lcmc zJBXEju7AZ(4Zh?*nj(9s0JQ3Wj}Sy}U3-+sFuRx=;c36hRH1&cU*P4;@1-$*f9t6cV+zD}#LFZx5lRjfyeWW&b^ zQT2yO55!zyD#Xcu3!+Gncg5vrEA?BwxLVaf%+0Wt`m(Hr?6~mJ2r&z6_>;l0+bwCJ zWWWmz#M+?y?&P{s?G+PyTkIY8?nTFA$ys?1UcuZNyicL1k-JGESz|T?Nt}d?tM+Qw zRydWdIfLUZs^6P-y~>?jgGAx+rLI#e)WQ3@ia{z7sJBU#UN;|of?21zXAQr9m3oA! zx<)RB)TbCPXEkm4OjQ&5bkGKz*bqDv`y?w4v(J`L{2damjB2G%gZ}1DNlOUgpv03B z;`r->?HG8g8Xs66Fl;mV*lf9vZ;7Tb92gXa?2f#V5A9H2hT9q z2ZVwQokp40KAya|nN*Owcw;8|b(@`$95?*$(-#FTZyNr>^*eFnVA&u%7JDA}QaMT+p0+J&9yVa8qz+g<%D zo*N#nxL6&9yDllNlfa0yBs0_s&}qhbUoV4@A8QpyI?6^Lv%g=RvA=&<)gozQ?-uzY`255PFS< zb^@c)uuo=O)rcZ(T`M^$9wLy`O?D7SCYFZ?83~L`IfMAM8Ju~bU{C@+=Bd1hSxwW_ zP&!$~?wTt+zx-finZL^Q4xte8@MKcEHVC?nekJ`ROs?dp=_a?po^zt;#I!^I z?zaO6R2e{BsG9f}{My^KidpFvbm@3mjtS4B*^#-HTJ6U062hwypjr^*t6HgCCVzod zDO~#-+hOw0)KcJ!a-$j7CUv9B5y|Q1;*=JX@6pVY^v7)i-{`v`ZzmWQJ^f0$_e7xg zqSUU>BO)})2)VE6lc`lt>Zq+HlPp@li>q362%JQKbb|%+VBrSn$CzeJdp=K~55l;> z0!?wP33R+yJ`33V@zHllS9e#wI7NH0CD^mh$*HlqcNf={%tdkGGc_P00Ul; zX&|B7f8;5OMYWRBS|Qeeiudu>wju$xO4x)abN0u2{Cu#<5Vxgb*|N}$SR0e86)XI#Ich=jB;2sbm~dhI_FMJ{dG#&s$pM=&?%B`TvI7@(xwxf_)LFieQGvh)IRo`>%sob%PYd)4rBiyj$AbxB(ze#hYWZFh2s7V zmc6#%bJs3KlMWf1x79C8`$7 z`KJm)>RhX|{nGrqPj>83)oOiF7O>5Lkh zC^&4@H%p1ikE6Sa7P27Y>3zBXUe<}{gLc}Te|yuQ${4V+?d2EL!Pn5a+Jj6E^)}8| zDh5GU`~y+7^e!T?3dm<%GkO*Hgkg{w+Tp&-wn7*7)%fq6_AzL{_vVGss6NgHt#`81 zWIRvsQQK&~l=USu@Gmpr&Reh*0C>CAG!4nyo_orWAUo5vccJUE?{2LzbtlCKk(sSy zcp`~klAY=yWTNwM4s77Qd(s>taUBp-fY&bzxs!upe5;k_~(Q@birD4BaKo zOkNEG5rgy!l1Q%`gNfCpG4zvSlUSP7o0xEV+D|(?rJo)aHGC@Czgl~0#3T%L%SfB} zq9&eZx~h!j`c5(jjN`jXis4;WFu88#rK|cnT{q^#A0#VW>w91*`0A!@bPU0qwcDTR zsA&_yX-;Z?%>Nxp6_eWp8$y5VoOM7H4A4*~d$Ap_? z8SY}7RlGjTJ;J>5ob$22vX(PTrw@vd!KO*@0utA>nfI^UnZ^4eZG1su8(iXqXQ;`b zJDU>Uh`hj$&dwp(qpy-3h7O{LWGS^@QIC}0cB6&vZWPg{asIIBd969R8;h4^`Ug^j z!Vhk;`%b1F4V2~?vUEw_1L`K1#FnD(C(*HeKi~y?>AmG~AfMjelOXyN z_japWcP9M`7kO3;azj%{IJ;#QKguYk$}d_zid6`|jw_vvm>rUa3j0xO-WEq1Wa#JgN72;xlik+fBs11i!yK$Sv4wWn*%Wre5IP zvkHDxBzfl$aO5Jb902~3h19|vg3aE3yYSZ|*-?xlwds$93+LZ}+Y88dhd z>7*9-xE(=R@tzB~3!0cjwEe9aa1kgsHhewW&J{7)AF6T^oz~;d1)#`F#+0uy7K9Hx z7MKf6Tt%y-tNYR>AdTVgM$pm!M@#&AH!$F=SYgJL9t-D}Hgu*qj>Q!Gf-E4yRI z=`?=EGyMCRS0Qox5)&mjuSbYcV&F#_LvGEA7;flwel8C-znkgmues4n5&MBfbo)Uf zr2aOFVgWA$+c@>Oe_-cUuc6x{CT~zHB=e1=^!oM9KOtE}YKv0^CiSr8D$)hSSD&rl z(e5RTgVY3J$LPifB)hmPmQ`2BBVTBYY&n;wHNqRR?a%(LDsBApjOWj#d;a> zHxD+4jciq=#{?N=z~gr!Y2OI|VEVI4kr;wB*{pzht9f~=5J9T`d&+kei6>Av_kJRb z3Svx}-;u85CZI2f(@N- z0d8L98wXe*_ImOORoTEwGownfeYD4Xi8Qt_?(=>fWt@%0oruls=4lSV!P#eU5Sv$g zOUMJe%7C!Nk{LIP;s!Ab@0V}KnoBxk*u#TP8M-t9E%i>pCEgXJ|Nir_Lz*@;;*$O% zM*plspuRElr&IzxPWlN2lH^;?fD1CN#-(mc=kqomR+{T3|Rk+y!Z z@iSi0j`yBO8r?!2OirW{*{UJRsuB=@vOEATF}X0PjA|1-Hl>J@@b)+$I>Wr{7qU7E zX2Dnqz-;fMN&Lne^wX3~GBhQwTw6NOoqF}dtlN*DG?P@BKa#4M>LmHdqa}10stxY9 zf<(wCcZ^C-i1}0g*A=PN=eK$=*G18^T+t%|pA?99WaT&cqjUr&Nd4F!E6ZkF{fTRg z6C^>@5dg-7lOO!*{B$w6pz`Sc7QNZ_xYY{k?fgTg<4*>7Ns)sTz)S<}HwSp4-9mS9 z^O2er5&L)u{;m7gX9qATaE+ow2m_>EwM`~;W9QC@m^AfO)JLntx^Tk)UGklfTToTB zzZ4sw)-pt|Rn2g@c%?mz`^*tyB>pAv)v$AZ^+@i1q^NnU0mVWW9g!5pW16+S)n@PJq4{^Ty~4%-HW3RER7vO#6$=rsyBoZIp}7b%rB@O{242M|9DZn@jw=IdkHun-p>;@vJhmw z(77Kp5PP`LM8CNo?>XzzGpoyQ7aAp%!W514YOF87hEHg4-OmPXE(AT`T35D%hs2D} zFLL*p7F{IwD%YdZyTc29G*beVo?bRPa__e?K0GttEr&%UjlP*RlW@+6ban3$lSOxS zHu%TSw^MAXXZbDRki%T<#}`isWJw?+4)BV^2YQ80qTlAJIKGoCI%Esk*TXj%z29jx z%9l4ip=9eQ}3|TWK_-652740orw7VKt{s(gN*$Kgx*Qp<*J|$pVO7){xm_1H; zapGi3xdn|70jg+>UY)77J41O3$52~0monzgK^|)H^?#-9rDGR$omio0ic(qNYm4^{ z$R{T{MEi9LfKU7E#i^dJ(Qod(9#AH%3d!JSGMxs*!9)PvfEA{P#K)Gjkkt_SAO^`W z-Q$?A+nXXL5!nk?RbMWLHQfDIqWz*c!UyKO1!;sP%pj2%G6#DSdMB)>X=_Z#uehlv z&xZktF}bHdzBgVwkcEVwFlP@VBm8%UQnEazAyX}nixi}cIZB6$m*4yHajD7mRtEFm z`*T!}@L_=TH`x1qMf!9Qh8=NeE?sKwBRqw46(2ZWEGR&-y zo(_lG9<)T$_E@jT?!Ik}Hrvn7&Q$hGILrxwP0)#pe1lkV&en(mJG=(KeZF4wi1jon zD)v2dZ<4IoJ;o#Zq@~9q;K-{8;p- zTG#=aDX+J%DDu;C#hTy{fyFX=4!w1B_5SM8kHv)*J=7J;hp~K(j7Y&MzZ&&)F#^WR z!gYL1YRCe4WG<7lo@HBYJWLF*@u{iZ@LfY}jPRP|Q0WZ~=WIWnOtaK9r!1uTNX&W` zRNo2e+_n5tX)g*9GS=Li^&w*}+HKH2PepCDRYgp13}D7ZNbX6H4P_Wd=6B~b83ZxS zn-^9~c}2tLV08OZlh{2LB96rlDRRgy^(vA=9I74+ex5vL*vQ z??k!3zQ~Xniw#(`K2|}zSInbuU%^Gj%B;Fs_%O)-CUsJ$GFj?|bF3c$DcyoR>uP~l z!~3>D<^((WT`F#>xPJ+%Bl9H<{l*O4DE_ASKksq=k|)>+*#}Y+2%E+jcg+vi=2pnc zSGRr!XV8;FngoC=DsoP`4Yo-5lb$@DDyo*}mvWY=dbiK>Zbkw)YEW#k6^egJE^8J! z>F-l9BBShwerm%T(R|ZUXIaZ@B(CY&)mJJv9# z4ukgXV{VGxfjt<_Ac!jJ9pmD-l`D@O?CSg3zw<3LFwS^qnVl$ z#mjR^2zi3$(osUkk@)wG&G2j17T-67M^Q%uXr`e8h6@b)CTZa!{!s#%LUCu}lN}PeQ;l(kQf3~^P?aGJk zoo0`w!$MDkdZOIroc<+I#06>ldeOwxm)<5n-)Yp*YA80Q%)1aH(S^CK!?YK?s@N*P zR$!hgEWVMh3Lf zi|EbWl&IMV667z4Mv6ruIiSrSDa)J^uh!OL(@VJ7-kR*LExa&x7}~^#vKcK!l~mMC z50r8(I4fA&Pxyp60hSFtr((~oKARSY2cWFwSBo~p@9`&J9DI8IbUg1YTSz0HGVsE< zZ-Naw;Dq!fb29ox>*NjiLvkQ4twZhEwlsCF+Xfi5wW%k)XB#}(JcC{j5J>cNYDe}W z!IxP3J4k7VN)gT)Z2hgl)5S-5-sSI9vG8~#!0rXlMfyh$sjNfmk)Mq+YParrHTtSmR- zz4;tmkyZ)U6XS58makS}{Turs1lSv#X)EwMu>np0C@G-{SmhHxFsNi;K&EdEB;rRv z_%T5&59cYr=WP0Y%x4m6Ws;4nDpOs!2a8DgATe4)N$SkADYj@oWTp`539O)R+67t{%__kd)HA->yPo%zmuIkdoow#3MiM#CDX*z{;E_2()^lH-qL z+sj{3`PO#?tj!J6z*p(UEqpEf4b=Ox_xj!@KgxWVU^{Yg%}Bu)9^(HAnJ4@;kjDj{*fSLnBlBg8&AjQ3jffb3GsjF^L(ZXm*K`$1Wrfyy zd^B}c78O^g}1x{Cz&UB=^Patw=dc( z7m>i0^>(e7oufqKGEb8{?akZo=bihxmEJGsY_}LK z6rR4ze~NL-WvO#Q--7?P&A=Z~M+pIXc>HIuch5XfqVfq6yfoqv z`Kgw1(7oqP&Rv1Izd_eo8o|HKkb>U=C%R2|RX2eGAx6Zrl#~!1jb%uuvM=k?@hLer~xq3v!~-Zc3;@%lw{fUyk;w)i9L z8apele5>~S$A(ognVI!`q}k#@PZTB#*p1g4WId)L+LF^sa|Etpd5TYu3b-Bwvu>Gw zNI;=Qp4PN{Bk}qplGgb@)YslIm#3hZ>L+lv4l%`mAkn_!DRkhLw;50<^!>yiV+9KB zgy?8Q#3zx0xVH>PBzTp&-3bTZN^Q-*CDdA=%y`kr$EEZ3E$+mp%MCzV2_FxA&6uGB zD!W|cFO0z^e($>!55x?nrX~1-aAp4|%C$589|mlz z5)0n84RKxiTK5#ZW#?*=VIxfTC(6_6k)mW+{;IdKW&M`*DEC;r@1lflXC879?>EJi zT#7`p7Ghg||BXYY^;f#(TSM5C5@gF2Bx41lWt!7Jumum7vF1h)&PVNzjr=1w4FX^GGdB%UB ztL-@+771sk_+M~h{Aq`WRY36f0zSQjz!xX5ob#gArU7DgaQW2i-$T{IiS|~#W?|IG zTh*brIl9GUHs(w<*Pu*W`8D{lzmU0%OwGOXyQ_k%7ze}7nyV>dkE0FiXRRuyYceN^ zz}==Qr^~^?={x zWv3vqgjW);HRa@>l>Gy2hPLJRRCrqFZIaUwfC_2mYK6e1~c+ z98@bjLXmeHPn`)!`1jR+F?wb6)l2BPyh&3Z>JI0ux>8=frr6*zF@vYX_`C7F6Sy}hl*YC$@dityA7bIT< zt~PoN{NxuWa0j}I17sFLy?CNbl@d&4M`C;-Yu;ow*imYFY}@>0CWp63S;%dhXG~h+ z@?p>T1qK|uoNv^Hmo7>~K&RUbKgp5LBJZp@&s zUJm`bqj5!1aW>$AYAHpPJpcA~STE82e%z>eZV7|L$^Tho@pmySt##h?~ z*&V4rHT1?Cg2)T#sZh%+OV}5S{qu#-d=o#CH9YL*Z(#O@d=pWagiUEWD`vrt<$vdv z+mfxp$@zG0PmQ>#2fRZ%&Gg4DOHpp`ELf3Mei-AvS+PzRadR_^`F%=LE$}`asnzLD zri#cyr$t)#N7b@J6XsYBd<48wF=Ehe!{4f4tm?-#oxVt>d<=q!(wH0|*((=ClF_@~ zgn(+?wQ2_F=)5S?n{t}UwdzM^%EY=xBs4V@(|kD;Rs9-zgy0?g4kK&$Yfp{5jnN{} zOXTb!A1SB+sr)z+DywqKfO@b{La_5xPTrIN+&Ze7Cp=DQ zh8}bH7MbN>wcwgao5A0%Rg^xBmx#aPQsU%`=dRmeIw2-1D$LFm`o4Pmg zhBtJ#f19kp0)6Gp8#zN(XxolnEFKLj6dcD#z7uy;h1_5eeIRByHM7jQ?%_Z!*NX(i zApHEElQoPmktz0S-%5V{=7DWy@>#yurKrZ=8v?zAX|TPdC<3&byELz~#ld5E)6J25 z9x?o{>YI?GCtWcE*&shKY4SEfz!`1cS=ub0x3th{bnBZyo!I$!GxurkLB=!mkylRZ zgJxAZwEAHpuSG(wF599k}r#P?_3i=%L)7(~(~MaPgsncsq!jMDtjVfQ;?- z8Icq2DbXW7t~BCt8trzok##gytGm!Wh#kd?eZaPmK8TY->4FcOc<1nigu8jLPP3BrW%Hda$?A!JjUcklsCZfXoao0^d zf5J-rJ~nL@eyz)0PkUZB6P|5v3l5x4k-AAn!MysGGIrb5=|B)`yh*c;gh8m8iyb z$4n)fD@c9eu+XENg>tl8tmZ3>MTd}t@EeKYH_Xkz{9lV1_Wdt_DuB@VvD2JR#%!N7 zRIA>%LWBa#uT??_$2sT7tX*EM8e2#^KRlNaLqOhP-al>o6dP)F4Yj!^ z0ul-U`QHXwz5fCSt=vvckgXvxSF=Xyy)oqIczd~X~);m94w{?~L`ZMuw z@(J^A!M$(1tAvX=`&$YAhBsO*U$X(P6@86Getk639XdM+KkL|4(4&c%Qo|pEkIJd5 zkoc1i()XM3&?NC9hqXOOU+Hn$SrvGsbE=A7bAsws>i)MmJ~Trb=V$tcp9(=V9;F2xb;|f{`*5@pl{2X8DcjeW+nv`WR;-JbD>^G% zGiawNri-s9?^$|HH9X9Bei8GlCu-}D!Otrdy?V0KxJxtQ032>$X^jdG9m#o1gPh;0 z4I}g#A7P$%^pX!;YL3@gMVe51=`sxz*Ao1_Gl7m@27v{&D9z8OK$s{o$ z(<6%Sez8h+2y?vCyn<$963nlv3S1hDkDGNn1aw{*ff*q7@fS+O-?nHQXc9+SmqIuz zB@Rt(v;gug1wLm@mLehh(F@&g$uByJF>Q!C%^VJ%^Fw_W?Tm_(_tznjrZH3Duv?LL z1p2-rkSo)e!r-bJ&?jj(nPwl8qYGvmOrwB-R@JEBYT>`=r(XGgCwNeWCwc@=?mqIW z?}x>_zr^IKR~=X?Qn_#>T5vSuKb8>MmUCzZ;W^+(^tm5#H;`2a2Tai=H($s2q1}eK zy5aH?o{{gZ{IU;bTVbrmc3VdP&AZO{nJc4$b9I>!Y0dceqv!#*bYUW`Ou}D8kfhQU zl2jTK1EJljhb8vN&^~lN)D|^h8p9;!dVk3Nlm|0`>?l?%`#TK~ zs)C=nphqf|vR}&qjHx%D<2?WITCa2)P7>OnzgQeHHP`W}T~lKl5K}o=t>Bmpof4s-Jn>Hj>RrF~x&q zh&GWpKaJKXPK1w&``m_ocGst-qfvVQOMJR}z~I@rDZkxx?1)jGdGyY2_nF+>s@MD? zhs!{`+tG~NlO}$}4@tZxK?rh#BlZdj-|@?A33{_yFAGQQ14XfRAM84rkV1q1eJ&;n zFO?0?$gvM5sV}dD_U_gbeEFfCk_x(is4O7?Y{s~V-3{7I*||u1f_wQST5%pxn2^~F z+8iN!m&`jCvskA$cv?tbycS8tj0*&m>S9Yf@^oZ`rND6M z97AkPy!JLHuL2J&V`HY@CESJVjGorLXl^8>qb*L2x-j{$@k>TMmuaTT_WC;dt`lhb z^Ej{to32aWry`{%Tlrkigl#=Wa%#j@W3eR$^drJC$bea;0dfL&EAR=G)Eu*k7nb6* z=H!eaeZk%wjgLr)@FJ1TJ~dhNUr;Ni`y%pKH!+QRJ4Qj{GPO*6kHfC>1>2ktnewAb zezlu5+=d*#sG+u|7tmFn9#Pi(U5g$HK#8KyrSl}h&5tJv*mie2DGB!klbc1PD+L7c zM(HlnFDqPe1_U->=LDM5;a;yV;i&S(8$Wv2PP-A}Q4}*$5{dwjgpF=of~&_R&5}yR^3=71_~dAx71G z0<^z<6FtXO27$GYr>r(yf+oRL^k}V2Wc?L`_A)AGtBM}Ekprt%#XkgSxF#|~Gbz9& z`~Gm6F@pV*RXpF>Uqr3W#bx_2K1bg#;;*%Z7h4@Ed%I_C1s2xv+3f zI6^uM$8Kr3NcKOZY{Hcy^N@@}aRDLogjsQ2JV9(zy`FV5neHbYX=+TjT@do(tS&rX zvI}w^8GwnfvmFvF6p`#mX0#M2Y*8H}a-(YkuFJ%`+ew{ao-k?E+?H_r5F^LxVa(p+ zeprw88oc%bxi%swkrlen$cW^C7J>ko61}dQi3hWV9%CQhRNyRZe{v*1NPZ(yD>YB} z9?(;xaj3EKjT36Tur~G6>GeeaB7LdW$llQ6HZ9~+C>NQN(?#5nel{x)u92XLbd~(D zqCA(>^qa-MD@Xf%ek-&df6CqHp;S2z)dk9aPHH-yF2vOfbuTjRtPqSlTG0sE>8MH* zy##%`)cih$glLuDr`VKkXsu?s7g%uLqpAW;JHr_FR_<>~vJ&`p{~{#!QC#G!E3dj+ zUN(HERA=wB;T;E7wxqE$QIo(7kb%Ej8O!@u43|0Ss`{hhTaX*BL8?RkRA&3O=egVC1~etXloSJh+3XDZY9U=Xy#zlT$=O1No=ZxCb6^gRE5Xh-$@6r zv72Z*YD^Za`F9~5q!(PNVpcysHHbWLl`2R}2CZpplSR3^dxcAUi(Z-H9_(Ilc_Fkx z;GRd~jO0oDkUR;Q1@U7uX78yVXs%+_CWd6k3nH?{97l{la1>gpNj1SaqwyQy5Fb|W zbWk=X{oa*~qhBwXGvlb_%Pts5JybxG=--5vopMh=@-4hw^yGUPRCa1a zz?PqH1j&wU2488ob%=*Q!rTB`n%raSMW9XIbe%hsQzerlmxx( zOYk)uOFVA4ajapYC%lCz8=HL-NZk>iAFL)n8^}tuH$(Gv2>n$2b3*;r8o;&cXL_|w z#h*3c-X<-M-|rQmjzwmz3ptvv2zs5`C;exGSU~y|QV6#HeK9I|%iHthSJ~3IhOT}O zh`v*v98LtPDC+;a=Bz{Mzf8K0cyRf}Lk?iQkAIMu_?}IkhW|`Z`k%;}P~}t>OK)^K zV_vzfz3}u@S7%GM9-1S|?J|JN5q%@#(c{~13 z{qgU)Kz^jLA>3PtP8aauR}KI6ur$xaq`30W(aUXC$zRa{_yV2%w|s`X;(9v7sjqer z)2OW%6a$i>^g+|S%U*v!>^({XAN(TdJ`{WmeOdYN84rFc0GS@iRr-#bYiuo2(CAQX z>n>dMI{Cv!5Z$oAL(P7zZQsG0j6utYaNp#*Tg5wnJ&`a*PaF0ek2tu^+K3(!{HVFp z=pVC_Ty&aAr5oVPA_&rXgh_jglJQWVmcUnt+Bo&7k?9|h$_|4@!aZ*6^M`Mw-xRM7 zeW&*{5|>lNHrXe#Nv81YJ8I8=aMS@JpI3^FWo0Y`JVa?vt)kq9vb1$Isngy)bsx)j z`k+O{#s<6JrnWC+nr_3-t}!$ z6v^zC@LdOf;YS(HMlhn(Q;=%z;_5S-HESwGA$w_07n+J*kao;-mVOyAFd_QsucAI% z+$!}y-D~j;Lcj0kw6_fm7nE1N$>U*7V46kH(tCU8!Zz7XW%^_HkN)~{HrFDPxhPvy8ehVkC`bkpg9=P4FDYF5t zVTQ)KCyWja59B|Ug~F~Eb;LJ*laBCPEB}>CHJWoWDvqS@j+hgAvFOwRH#{}Wy#MC*@e6Xj9D1vNmeKD>@Di*=1Tms$W|f6- zKQCP1(Mqod2`RYr{TgI~0s!x)vbNmQeY;0(!|&eyTzX~RJl)hov!e|r5Fc{(@nvu1 zjp2bNVd0eL#A=ix^C7ylMlX-F!{ufS=lK9fypfXGrVcYzb@@gyezMX$ckYh0#E#-= z=9h_?KI?V}Ng&d4_!U&KOn56?s1P-_jggxf6(Y1`nzH<8<~q(sd}2(Yneh4}CJ**J zt(<~u+_!s!jB<~qbz`k#yx?o2OLyKJ8CZ)w(jJ(<>x0wLv@TbE%0J7>_Lg=rk|v?OeQwQC?{k&&E7Vj9ok&h<%YXBC49hL0iL24&kS0Z47^(34U**>5nam6Nijs>N9 zpN$#)^p|NZ;^Ho6{jHWRmPP~?CEq+nf6ezCw2JppuZ%_~9utHZ?}9v=4R&ospx4>B zEkV09ajd=!^ha?ALo&xnutzzjw*LFRkud@;Dc10Ap)}S=4Z3E+=x?w66lleH;3;SkcaO z_@=!TcSTAric}_3amyRoti%svyT-d`==oBK&uWGIdJNpw5_@tE4QsE)DM$sWX8}A} z8a{H?;VP?SI;MGcMbVSv?<%_7Un#Yu??Db8@;o?0)3HHom|VX{GO<8zCqKVLJG`cT zJu%{76P~Wb4&`O?op+Uf`c$MoOmK;$9+aowY5x!w!15AcjL_-MWZGkbIx|&$p9G7T zkE!=yZ=I1q3JsOiIVG*)zjP$S$}Km5<=dn?Ahf`A;+e@v_kH?_Y@?HkN8$Yty@I)! z(nQxx!idLf^X`@^Bw6h>T~zEX?gileb&c)|NxiIWV3=y&G`ZlB6&>q^S%3!a(4yIO zs;UBgrJZvSJ4<;r&8$#)ZT5fs=sIMipYnkXq`~KJOntyrauc2zBg4nT%oNS^)x*H_Sveyi z;(@-KC~SBcO7!M8H_Ge?mDpdLm>~9ntatepGPFrna>(TVPy^h$9Kn*`Ssg*I%ekN%3n{a87t!->9EShM_CEi-LDW*&9+o;iF)obOTBq6(R3@Gln(jNV=YNj53;+lb z?|9d&Nuai$A$`n3d|97S2TuDFJIY&vI9@ajhey%NKhrvT#rJkai|Fk%6E_?5``Iq# z-e$T=|F&B`qK3NCAyc*0eUVW5u!`Zq;cqK!D}+%$jJ;EQojM!nM#;c^D*`yfepPwW z;^d}3h|?CpkSD9HbGxN(*+mwmU@1xIs;k0k(v*Go8vm}WG-}nnRpn>G|6V>t6tj13T zU+4B$3xe!roQhwwr77Z>q3F)$p_QETYczShO`PiH3TCs_GRnr_7GI@lCj;xkynidW z`Q+;&kKzGwq{jOr~thmwk&H z#XmTWCejv7Xkitr-(=UaY#}W;3OC^&fEYY2Z2{AXHNWzx=OP!dvq7oj=@p1u;lgW? zg~*!+yH3Ab#;e3Ca8;>H)`w|)F=Qv-AQMD)v@0IP)P|c&*6(|jXv%+;_veXp)lcXO zMUew0dhShh$(P&()V-&ng&|Y=GDD^xo5Nj}KN?j!%GIa8=>rpPTf|K75B0k2Z|9M4 zZWHa~XFc#uEWuU_O|<)K{KW-!=yNjl3^K4}m4-B|J|?__sX<6}NFAIGROsy^SfK+Q zI1^*ep@0`f}JpE8hEXEv}2te0KcUb>YDcflk>7)qx&$R231q~&39TA>ir_$10FK?a7 zZhmj*;oHQ2T0J3LXhk9jtf;>8N?7ngqcG9RUsbS`5-0lz=P-aQO*8#jnn<59VNjF$ zgJ~u7++U#7OD~F4eFIM>AiE`993Sa~m|oK@_^FrS7-Cd4g9lQ4FD(;~xLXP_xcDyc z86hh6DZ$hPurAa-Xvq$}%0E6#T$ zOyP`6RJy#5Po#AWWoAKdg{O*YaYfGDU4s3^TCC`Eejuo00?5EO(!P!LdQ(tDz`1St^^f|MXhAks-_32FDm z?>pQ5{mwn(oO8!Hp^#)>m~P|U#1ryXbxd+CUDfin18+< zFE@Ded_61W+}?cxM>-Y#RZ{azWpDc%uWJZ#q)JfI%jyH6$fDRIzQ$eOOYIib=9;5F zz`}vMNK}Hx1y~Yh zkW$z zd!Db0t<}=u`ad3OgJN1?u4T>LAsyP)e^!~;5+BD_Y&m)`2Gm6GPm2v756O?@{Vcc- zyjhd+woaw3I&*6LN$BVAi#H;M9H|Wlk6_PRq^shuya1UmpX;hern;VB+>T1GrJg-g z$Lv+Co0tAH`{+QZOF@XqyPfyI%ZWTKG*0W54*(0D$fvsgE|5Y~0iHyJ-bzPYhvn1BoM6j26{t_byu)Y zAZ?`WWXSkrSv1&fEq3&3;FqA{eviIKhn_!~veDETT%>-lVyG2AQPb%igN^&nl;_0& zNrr&jva}Jb$WiH~F6#5LM&jo$t|?f@6hL1*k$JD;GZW>&JMN4kKfiu$D;<+5Qf@bL ztNgkrF93mhXSs#c+%SVBc5XhI{_l@`u^IpAl=^+U20eHLdjTAf@Tcj9nK7~YR!Z@X zXaf};n@MJKm-jI`ua``@{~V+!6tv{U<>1StAJ3Q;si$&p$fs4U@QGbHGm0-3uTU3A zMo|I+`GTh|s|_COiX!d9zc44JpEG~H;9$=0E|w1PLu819J?xqn-j=KE`kLU;PfkdR zQOxgZp<>o9>R}-tI^Vp)3p|^{QF&U_h02IVde~IWNzkWm#amRKyN1DATIbZ;4JpqD zp-}!$_JhrS*b}~O4W`W{&#u(H`Ggv7ky7P^aW1OYG;r`$ffl*ya_N>OTI;FD{Hpcy zFekYT#{~!7{f<5+WMAr8F&DYIF6_QF6~Fcge$v9%^y{5+6yE&hg|eAPV6qkGlCRn3 zK>77QN8jlrUn!vaa9KUOA8he-Ir8S~Tv*cp-^xU&Q|ExF)*xWxy%Em> zjj~V6Ng7kjUOciN`^dL5p%R;_B0h1fwpzraOwH}Ap1i1*!l%ayF5_-!RrK34T0?MP ze_lyv*YI`%xIfFnS56J}(3|juDS7PYr=(5Ni&h0XJi669yVTHih3Bp}Jkm=~E<_Jj z##Gf7ZRg?v4!Y?fMBc@Vz$=cJGr`X#%3q2#AJ+}DzT_;GOB4qolhkkWR$1x$TP7g$ zop>E+GaQ2kUOQ5AA4(pqb+ zYwIjhVg8)!i1MX`Oew^RCioazP}*abw;S2!QQi~VwjeD9)L)3?OfuXOMkBN#7q={f zg_FBz+@Xvvf_6uB@wU&GrpLbZ>bKu(b8}8!B!OGn4V&RF#g+o>?|@-h)h&I|7dYjB;;)QC>K*KK1SA$(7K_?;m#7#yva|k95IkJx|&W z&b4;VE(rd0gan`ZE&*JN&Hsw|5^xT_egacbl$`9xSc6wEkNo@!2{6Zpyp@@H;>gV- zn8u-bXI63*QgNtk+GoF!FwUpOzR#)BL*{bN6Y4~yfmSx}#_jJ?t59WW?%A_g42l>% z&cAFDWa#%G88B4MF$3Vib(<5h>mNgwr@3R(?fAaj*cO7~c`{oB-;>*yYYu)4x~cnl zgr;^v-P@97-6M$-^7SX42{|?2ZPssO2QX=$XlOP$Ru1^(MMa4~+eLWZm&>c>hyP2R zLZINf#>M;O-N$K?de}YcZG7+JL)RTjIWCVeE9zp=fp?;ZENlIZ~n0GMM1| zll9C8cLHzbrir7Zji|S8>kqLXHNU1&b=`~oryrZ77~~%$AuCdc~4EJ zCh;yLT*v-Zt}T?F_i-OJu;%7r`BjrEQ@J-EdS2IG-mMMsQelmD3-L5+ah!6D4hRtR zd+E1FPDPD}|KaAYA}*oK|Gc`@=Z*gA^T=yGJ&`u)4N+{vxFVjMAmMv=>I8Nc4EPI= z*VqJ$Ld~Vlcp~LJY%-q`*i?t4%1$ugp=zfTs{xv>1Y7U>>j@?*AOgp^30T5A$stFR z6Wp!0jX&RsG)Pf3*tB_(YzKR)9Xt^q>2pEn!eZJA}?zQez%~o!wvp;0glENBK zzA*}yeH7NyE#LN2wsWvat;_l01t-XKh=E9fdVaQ{nu)fl)nOHJ>$-fOO?cD#=$RAW zO?De@Dn>i@4;@9d+hxBn`t9`%AP2r5j1Sh=H^Vj{*@uG<57X$Kz zBk23>Ow-Oh+G8g#pNQmP@!x~isSmYj>S1F>`h-7zsGB4&J|w3t=-Sswn7<5YZ#xoo zRfFvGpujSzGV$^H%ddEBoQ-RAadHD2=uZ0sB5&$l-??XTv=5OQK6OI`k9_nG^Q z;_P$+ZmL@?(I2B;7$VKvSy8di@>SRgK0AGfByMv38x7DKdF&CZ(-tS>;~^uL33oS- zvyAuvR=31P%abh1KgtN<`;v0Y5=(jL|h@;9NXB6j9>0ObpV!J$vL!&|bOIa&|%BGaHv`EInIk zOc$x;q{@+fCAW*q^{vT=PJZ!YYy7C>Ttq=E10nlDg!Lo8<-}&L!(wFt_^AZs`xU7K zsuCeq$>13I^KKV3yDQ;%o~t>{GD?jnQF=~Gr(?G3Awf%J(=MNwn%zeTh#&r>B%YT5aI<;pFY#BC{EF)m#x1X0kg0a}`BU3~9?j-AXi@m!tjqVZ z&dyfi?XYufx2+z1iRU?w%H%s;DLNeKThxHI)hLsx<_qT{s-LX94{MYgA8Fekz?zch8FStA=% zw{oIc!Fk5GE#$+B(AVwrm?y8CI;q+I!a2{1dLp6s|2w9-to`kDpnj8YSl=}P=&)Th zyL7Omgdf#@N=5ye@#l<>c(r3yQyrZfHo)Dc7F;0kBn*^RKRU;Mu=!-~sfiDsW_O3Q ztDgu52TM59LZ{R+o|U&cw%Vq`YmYZV&VInr%K)g_)z-b-%~9kuqx>IiV4%nWn7{J? z)lAq%B)(iTm*SxVF;;W~o{2t_<<#(_Fhj!j;%ogt{dkJ0SPO^Fs@kn*#!`Xox#XJ@ zBYZ;UiDgeBE^?qgndMo7VpIK!>!tElv)mT6cfB4EkI4Z6=mLO7miiIPZVI(^fB% zUv8~7zh!(Zxe)DSrj#x|d4hImss0?Qo29viTW?WQ9!N@fDu?v7c|N&#Z2O&S4*%Js zlgA+9PUDb(8!f+>)>+cx8e3|j35-!m8=l6?BHo+i$@|*82 zTOC_`)vkJ&c$r!~c)W-Ym*1G)ZoO0`9B$47(TrFs4V(FDAWO#*SHm>!hW7~G+{b~KhS9qV@B}4(FG%e z1cF>Ut;#1a!8DG9*8X>Q2Gm^7*~h;U=?zE+1$vHp(m91Ul=R|A$;S=mnrhNKq@g+|pUJJFDi%cxY_wLo>O=m@i2k&=z zq_-ArJK%*&68aG|-QDss%P3H$0@^TjrMji@o9*xyj#l#^?`h^s>&K7H`I`ci%)VdY z2l3y&%dM=e&!eYuaNqarQvv`U-HC?z4}KCBXu$7#MhrzbRIM#(_-Cp6d%+%nwZMn} z_~Vb)dAjg@PKU697zcklTmMcuU#GC7mqOkt?omT>_UE+R{Bg}*h*Tl(HU8;V?5Re2 zb#R+?b`;!A+~Gu#==D{6k0u^V&}d|mc6_HRigm$GKJ-}(0-_lnm@MB&2Zy!WBUX=a zt!3zP0=@k)cYw^1%g+WC<$%G?%q@D69LaCxLKk37@Fk<_kDGM4FlHrX<2x-rIbHRbh}ba^l*6)bB=9Wa0*V}< zY74>yu)?jx3z!5?U(cQF3^dzf=Q?2Y@DiFkY-_kZh3SO=7%~O zBfR(Bm!pJq-u>!(|9ruVIxXFBSG+*AN~Ppx4xe|s@<@Mw`Jz#D&s!b$57fh!fBYei zIN*m$l;c5-+*b_Weq!0ybUI7c>anx4`Bt%x({O?E8K5cXJv+~Sn7Wd4|0|viP-VhP z=Fc1}p!cq4_8`4)JZzP!yhTh6i$IS|8INz47`Vs8$W7_>) z4xbY78}dfHk9p-A73a|xu+A2eBK=J%uD;pGDYVvf!NzxoPY3c~wb7?b4xi>oGgo#>hUnm$3pbv=aRp~<>l;b zHKD?bI&3e{x?1Pt(KsD6NBa~=n!r7}UEz>?*rCOyE^IAyD10`T%beMcdM z5WLQjOQ+$TvNvcw9jVRa`HSm?hc;K|8av_Wh z9s;4DI3%1N#J<{RV`5Baph3v%wB?hUUJhZ5scPd0DlryUG4bfMsb}tKi&ao~y@t#x z)Sj0k(+iThtu0>}=@s-%d4oLjb*<2KXHK5^j5W8B5vJtEumn

%&u~f7-8%r#9ILDb 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 literal 0 HcmV?d00001 diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index feb57ba941d..cb9a2aa2a57 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -16,6 +16,38 @@ If you are upgrading to a new major version, you can find information about the This section contains the release notes for Umbraco Forms 13 including all changes for this version. +#### [**13.4.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.4.0) **(December 17th 2024)** + +##### Validation rules across form fields + +When creating forms you are able to add validation to individual fields, making them mandatory or applying a regular expression pattern. With the 13.4 release we are looking to make this significantly more powerful, but allowing the addition of validation rules for the entire form. The idea is that this will allow you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". + +Crafting these rules requires use of [JSON logic](https://jsonlogic.com/) so is considered a "power user" feature. They also require an additional front-end dependency for the rendering of forms on the website. As such they are surfaced on a new "Advanced" tab and only visible and used if enabled in configuration. We don't have, and it seems difficult to provide, an intuitive user interface for rule creation taking into account all the flexibility available. Nonetheless, having the ability to use more complex validation rules seems a valuable addition. + +When the form is rendered, the validation rules will be applied on the client, where we support both the `aspnet-client-validation` and `jquery.validate` libraries. They are also verified server-side. In this way you can ensure the submission is only accepted if it meets the requirements. + +Feedback on this feature in particular is very welcome. + +Read more about [editing advanced validation rules](./editor/creating-a-form/form-advanced.md) as well as the [configuration option required to enable them](./developer/configuration/README.md#enableadvancedvalidationrules). + +##### Tracking editor activity + +Whilst previously we tracked and displayed the date and time a form was created and last edited, we didn't show who had made these updates. With 13.4 installed we will start to track this and display the information where available. You'll find this on the form, data source or prevalue source's "Info" tab [#1315](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1315). + +##### Copy of workflows + +Forms allows you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 13.4 release we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. + +We've also resolved an edge case around copying a form. It's possible to [define workflows as mandatory](./developer/extending/customize-default-workflows.md#setting-a-mandatory-default-workflow). But if you copied the form and chose to exclude copying workflows, you would have a form that didn't contain the workflow you wanted to be included on all. This has been tightened up now and mandatory workflows will always be assigned to the copied form [#1331](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1331). + +##### Form picker enhancements + +In the 14.2 release we enhanced the [form picker property editors](./developer/property-editors.md). We introduced support for restriction of which forms can be selected by folder rather than only by individual forms. This has now been backported to Forms 13 [#891](https://github.com/umbraco/Umbraco.Forms.Issues/issues/891). + +##### File upload validation messages + +Previously the validation messages presented on the website front end when uploading files were hardcoded and always provided in English. We've added settings now to the "File Upload" field type allowing you to customize these. Dictionary keys can be used in order to provide the information in the user's preferred language [#1327](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1327). + #### [**13.3.3**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.3.3) **(December 5th 2024)** * Fixed regression introduced in 13.3.1 that caused issues for custom field types overriding the `ProcessSubmittedValue` method [#1328](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1328). diff --git a/15/umbraco-forms/SUMMARY.md b/15/umbraco-forms/SUMMARY.md index cb515773668..2814763d750 100644 --- a/15/umbraco-forms/SUMMARY.md +++ b/15/umbraco-forms/SUMMARY.md @@ -19,6 +19,7 @@ * [Creating a Form - The basics](editor/creating-a-form/README.md) * [Form Settings](editor/creating-a-form/form-settings.md) + * [Form Advanced Options](editor/creating-a-form/form-advanced.md) * [Form Information](editor/creating-a-form/form-info.md) * [Overview Of The Field Types](editor/creating-a-form/fieldtypes/README.md) * [Date](editor/creating-a-form/fieldtypes/date.md) diff --git a/15/umbraco-forms/developer/configuration/README.md b/15/umbraco-forms/developer/configuration/README.md index 4cb0987cfc7..87f634d41dd 100644 --- a/15/umbraco-forms/developer/configuration/README.md +++ b/15/umbraco-forms/developer/configuration/README.md @@ -93,7 +93,8 @@ For illustration purposes, the following structure represents the full set of op "DisableClientSideValidationDependencyCheck": false, "DisableRelationTracking": false, "TrackRenderedFormsStorageMethod": "HttpContextItems", - "EnableMultiPageFormSettings": true + "EnableMultiPageFormSettings": true, + "EnableAdvancedValidationRules": false }, "Security": { "DisallowedFileUploadExtensions": "config,exe,dll,asp,aspx", @@ -446,6 +447,15 @@ This setting determines whether [multi-page form settings](../../editor/creating By default the value is `true`. To disable the feature, set the value to `false`. +## EnableAdvancedValidationRules + +This setting determines whether [advanced form validation rules](../../editor/creating-a-form/form-advanced.md) are available to editors. + +By default the value is `false`. This partly because the feature is considered something only for "power users", comfortable with crafting rules using the JSON syntax required. And partly as validating the rules on the client requires an additional front-end dependency. + +To make the feature available to editors and including the dependency when using `@Html.RenderUmbracoFormDependencies(Url)`, set the value to `true`. + + ## Security configuration ### DisallowedFileUploadExtensions diff --git a/15/umbraco-forms/editor/creating-a-form/form-advanced.md b/15/umbraco-forms/editor/creating-a-form/form-advanced.md new file mode 100644 index 00000000000..64e23637270 --- /dev/null +++ b/15/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -0,0 +1,65 @@ +# Form Advanced Options + +In this article, you will find information about accessing the Forms Advanced Options and the features available to customize your Form. + +To access the Form Advanced Options: + +1. Navigate to the **Forms** section. +2. Open a Form you wish to customize. +3. Click **Advanced** in the top-right corner of the screen. + +{% hint style="info" %} +The advanced options for forms are only available when [configured to display](../../developer/configuration/README.md#enableadvancedvalidationrules). +{% endhint %} + +## Validation Rules + +When creating forms you are able to add validation to individual fields, making them mandatory or applying a regular expression pattern. Via the advanced options, you can provide validation rules for the entire form. This allows you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". + +![Validation rules](./images/validation-rules.png) + +To add new rules, you need to provide the rule definition, an error message and select a field to which the message will be associated. Once created you can click to edit or delete them from the list. + +Crafting the rule definition itself requires use of [JSON logic](https://jsonlogic.com/) along with placeholders for the field or fields that are being validated. + +One example use case would be ensuring that two fields match each other, perhaps when asking for a user's email address. Given two fields on the form, one with the alias of `email` and the other `compareEmail`, the rule would be: + +```json +{ + "==": [ + "{email}", + "{compareEmail}" + ] +} +``` + +A slightly more complex example could be with two dates, where, if provided, you want to ensure the second date is later than the first. So given fields with aliases of `startDate` and `endDate` a rule would look like this: + +```json +{ + "or": [ + { + "==": [ + "{startDate}", + "" + ] + }, + { + "==": [ + "{endDate}", + "" + ] + }, + { + ">": [ + "{endDate}", + "{startDate}" + ] + } + ] +} +``` + +Overall you should be able to create simple or more complex rules as needed, using comparisons between fields and with static values. + +When the form is rendered, these validation rules will be applied both client and server-side. In this way you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file diff --git a/15/umbraco-forms/editor/creating-a-form/form-settings.md b/15/umbraco-forms/editor/creating-a-form/form-settings.md index 2139b30efed..9266930d56f 100644 --- a/15/umbraco-forms/editor/creating-a-form/form-settings.md +++ b/15/umbraco-forms/editor/creating-a-form/form-settings.md @@ -1,6 +1,6 @@ # Form Settings -In this article, you will find information about accessing the Form Settings and the validations available to customize your Form. +In this article, you will find information about accessing the Form Settings and the options available to customize your Form. To access the Form Settings: diff --git a/15/umbraco-forms/editor/creating-a-form/images/validation-rules.png b/15/umbraco-forms/editor/creating-a-form/images/validation-rules.png new file mode 100644 index 0000000000000000000000000000000000000000..97452dfa8e79b5b00e0d253ac9f0336efc275a19 GIT binary patch literal 68811 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 Date: Tue, 10 Dec 2024 12:25:17 +0100 Subject: [PATCH 02/24] Correction --- 15/umbraco-forms/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/release-notes.md b/15/umbraco-forms/release-notes.md index f58aade39b6..60526cb9e78 100644 --- a/15/umbraco-forms/release-notes.md +++ b/15/umbraco-forms/release-notes.md @@ -34,7 +34,7 @@ Read more about [editing advanced validation rules](./editor/creating-a-form/for ##### Tracking editor activity -Whilst previously we tracked and displayed the date and time a form was created and last edited, we didn't show who had made these updates. With 13.4 installed we will start to track this and display the information where available. You'll find this on the form, data source or prevalue source's "Info" tab [#1315](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1315). +Whilst previously we tracked and displayed the date and time a form was created and last edited, we didn't show who had made these updates. With 15.1 installed we will start to track this and display the information where available. You'll find this on the form, data source or prevalue source's "Info" tab [#1315](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1315). ##### Copy of workflows From 05b631b66e51a5033476a9f66155eff10554bbc3 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 10 Dec 2024 12:29:37 +0100 Subject: [PATCH 03/24] Linting --- 13/umbraco-forms/release-notes.md | 6 +++--- 15/umbraco-forms/release-notes.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index cb9a2aa2a57..a05c9c64e78 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -20,19 +20,19 @@ This section contains the release notes for Umbraco Forms 13 including all chang ##### Validation rules across form fields -When creating forms you are able to add validation to individual fields, making them mandatory or applying a regular expression pattern. With the 13.4 release we are looking to make this significantly more powerful, but allowing the addition of validation rules for the entire form. The idea is that this will allow you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". +When creating forms you are able to add validation to individual fields, making them mandatory or applying a regular expression pattern. With the 13.4 release we are looking to make this more powerful, by allowing the addition of validation rules for the entire form. The idea is that this will allow you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". Crafting these rules requires use of [JSON logic](https://jsonlogic.com/) so is considered a "power user" feature. They also require an additional front-end dependency for the rendering of forms on the website. As such they are surfaced on a new "Advanced" tab and only visible and used if enabled in configuration. We don't have, and it seems difficult to provide, an intuitive user interface for rule creation taking into account all the flexibility available. Nonetheless, having the ability to use more complex validation rules seems a valuable addition. When the form is rendered, the validation rules will be applied on the client, where we support both the `aspnet-client-validation` and `jquery.validate` libraries. They are also verified server-side. In this way you can ensure the submission is only accepted if it meets the requirements. -Feedback on this feature in particular is very welcome. +Feedback on this feature in particular is welcome. Read more about [editing advanced validation rules](./editor/creating-a-form/form-advanced.md) as well as the [configuration option required to enable them](./developer/configuration/README.md#enableadvancedvalidationrules). ##### Tracking editor activity -Whilst previously we tracked and displayed the date and time a form was created and last edited, we didn't show who had made these updates. With 13.4 installed we will start to track this and display the information where available. You'll find this on the form, data source or prevalue source's "Info" tab [#1315](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1315). +Whilst previously we tracked and displayed the date a form was created and last edited, we didn't show who had made these updates. With 13.4 installed we will start to track this and display the information where available. You'll find this on the form, data source or prevalue source's "Info" tab [#1315](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1315). ##### Copy of workflows diff --git a/15/umbraco-forms/release-notes.md b/15/umbraco-forms/release-notes.md index 60526cb9e78..a242b099499 100644 --- a/15/umbraco-forms/release-notes.md +++ b/15/umbraco-forms/release-notes.md @@ -22,19 +22,19 @@ This section contains the release notes for Umbraco Forms 15 including all chang ##### Validation rules across form fields -When creating forms you are able to add validation to individual fields, making them mandatory or applying a regular expression pattern. With the 13.4 release we are looking to make this significantly more powerful, but allowing the addition of validation rules for the entire form. The idea is that this will allow you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". +When creating forms you are able to add validation to individual fields, making them mandatory or applying a regular expression pattern. With the 13.4 release we are looking to make this more powerful, by allowing the addition of validation rules for the entire form. The idea is that this will allow you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". Crafting these rules requires use of [JSON logic](https://jsonlogic.com/) so is considered a "power user" feature. They also require an additional front-end dependency for the rendering of forms on the website. As such they are surfaced on a new "Advanced" tab and only visible and used if enabled in configuration. We don't have, and it seems difficult to provide, an intuitive user interface for rule creation taking into account all the flexibility available. Nonetheless, having the ability to use more complex validation rules seems a valuable addition. When the form is rendered, the validation rules will be applied on the client, where we support both the `aspnet-client-validation` and `jquery.validate` libraries. They are also verified server-side. In this way you can ensure the submission is only accepted if it meets the requirements. -Feedback on this feature in particular is very welcome. +Feedback on this feature in particular is welcome. Read more about [editing advanced validation rules](./editor/creating-a-form/form-advanced.md) as well as the [configuration option required to enable them](./developer/configuration/README.md#enableadvancedvalidationrules). ##### Tracking editor activity -Whilst previously we tracked and displayed the date and time a form was created and last edited, we didn't show who had made these updates. With 15.1 installed we will start to track this and display the information where available. You'll find this on the form, data source or prevalue source's "Info" tab [#1315](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1315). +Whilst previously we tracked and displayed the date a form was created and last edited, we didn't show who had made these updates. With 15.1 installed we will start to track this and display the information where available. You'll find this on the form, data source or prevalue source's "Info" tab [#1315](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1315). ##### Copy of workflows From 535ab3d554cd906f5a70766681873532724d3f2b Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:56:48 +0100 Subject: [PATCH 04/24] Update 13/umbraco-forms/developer/configuration/README.md --- 13/umbraco-forms/developer/configuration/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/developer/configuration/README.md b/13/umbraco-forms/developer/configuration/README.md index 63fce530c13..17ad0239f8a 100644 --- a/13/umbraco-forms/developer/configuration/README.md +++ b/13/umbraco-forms/developer/configuration/README.md @@ -461,7 +461,7 @@ To make the feature available to editors set the value to `true`. This setting determines whether [advanced form validation rules](../../editor/creating-a-form/form-advanced.md) are available to editors. -By default the value is `false`. This partly because the feature is considered something only for "power users", comfortable with crafting rules using the JSON syntax required. And partly as validating the rules on the client requires an additional front-end dependency. +By default, the value is `false`. This is partly because the feature is only considered for "power users", comfortable with crafting rules using the required JSON syntax. And partly as validating the rules on the client requires an additional front-end dependency. To make the feature available to editors and including the dependency when using `@Html.RenderUmbracoFormDependencies(Url)`, set the value to `true`. From 86a32564241aca2756d9e0d3a302c6904821db2c Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:56:53 +0100 Subject: [PATCH 05/24] Update 13/umbraco-forms/developer/configuration/README.md --- 13/umbraco-forms/developer/configuration/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/developer/configuration/README.md b/13/umbraco-forms/developer/configuration/README.md index 17ad0239f8a..3a797df736f 100644 --- a/13/umbraco-forms/developer/configuration/README.md +++ b/13/umbraco-forms/developer/configuration/README.md @@ -463,7 +463,7 @@ This setting determines whether [advanced form validation rules](../../editor/cr By default, the value is `false`. This is partly because the feature is only considered for "power users", comfortable with crafting rules using the required JSON syntax. And partly as validating the rules on the client requires an additional front-end dependency. -To make the feature available to editors and including the dependency when using `@Html.RenderUmbracoFormDependencies(Url)`, set the value to `true`. +To make the feature available to editors and include the dependency when using `@Html.RenderUmbracoFormDependencies(Url)`, set the value to `true`. ## Security configuration From 36b82b9e674c467a01f0f83f64543cf59b48cba8 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:57:04 +0100 Subject: [PATCH 06/24] Update 13/umbraco-forms/editor/creating-a-form/form-advanced.md --- 13/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/editor/creating-a-form/form-advanced.md b/13/umbraco-forms/editor/creating-a-form/form-advanced.md index 64e23637270..4eabd1d266b 100644 --- a/13/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/13/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -14,7 +14,7 @@ The advanced options for forms are only available when [configured to display](. ## Validation Rules -When creating forms you are able to add validation to individual fields, making them mandatory or applying a regular expression pattern. Via the advanced options, you can provide validation rules for the entire form. This allows you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". +When creating forms you can add validation to individual fields, making them mandatory or applying a regular expression pattern. You can provide validation rules for the entire form via the advanced options. This allows you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". ![Validation rules](./images/validation-rules.png) From af72df4f83322d71a59124779c3e3e6d5ba9253e Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:57:10 +0100 Subject: [PATCH 07/24] Update 13/umbraco-forms/editor/creating-a-form/form-advanced.md --- 13/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/editor/creating-a-form/form-advanced.md b/13/umbraco-forms/editor/creating-a-form/form-advanced.md index 4eabd1d266b..7479e2af300 100644 --- a/13/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/13/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -18,7 +18,7 @@ When creating forms you can add validation to individual fields, making them man ![Validation rules](./images/validation-rules.png) -To add new rules, you need to provide the rule definition, an error message and select a field to which the message will be associated. Once created you can click to edit or delete them from the list. +To add new rules, you need to provide the rule definition, an error message, and select a field to which the message will be associated. Once created you can click to edit or delete them from the list. Crafting the rule definition itself requires use of [JSON logic](https://jsonlogic.com/) along with placeholders for the field or fields that are being validated. From de356338f8e9a1be9408e57c68fc8a013b72a64a Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:57:19 +0100 Subject: [PATCH 08/24] Update 13/umbraco-forms/editor/creating-a-form/form-advanced.md --- 13/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/editor/creating-a-form/form-advanced.md b/13/umbraco-forms/editor/creating-a-form/form-advanced.md index 7479e2af300..52db50a69f9 100644 --- a/13/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/13/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -62,4 +62,4 @@ A slightly more complex example could be with two dates, where, if provided, you Overall you should be able to create simple or more complex rules as needed, using comparisons between fields and with static values. -When the form is rendered, these validation rules will be applied both client and server-side. In this way you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file +When the form is rendered, these validation rules will be applied to both client and server-side. In this way, you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file From 12da1158c4526e3651734e3da995272939ce6d14 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:57:30 +0100 Subject: [PATCH 09/24] Update 13/umbraco-forms/editor/creating-a-form/form-advanced.md --- 13/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/editor/creating-a-form/form-advanced.md b/13/umbraco-forms/editor/creating-a-form/form-advanced.md index 52db50a69f9..1a301911c6d 100644 --- a/13/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/13/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -60,6 +60,6 @@ A slightly more complex example could be with two dates, where, if provided, you } ``` -Overall you should be able to create simple or more complex rules as needed, using comparisons between fields and with static values. +Overall, you can create rules of varying complexity, using comparisons between fields and static values When the form is rendered, these validation rules will be applied to both client and server-side. In this way, you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file From 56284c428d26344f8c0f741206493e87df84faac Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:57:42 +0100 Subject: [PATCH 10/24] Update 13/umbraco-forms/release-notes.md --- 13/umbraco-forms/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index a05c9c64e78..966243ecf40 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -36,7 +36,7 @@ Whilst previously we tracked and displayed the date a form was created and last ##### Copy of workflows -Forms allows you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 13.4 release we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. +Forms allow you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 13.4 release, we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. We've also resolved an edge case around copying a form. It's possible to [define workflows as mandatory](./developer/extending/customize-default-workflows.md#setting-a-mandatory-default-workflow). But if you copied the form and chose to exclude copying workflows, you would have a form that didn't contain the workflow you wanted to be included on all. This has been tightened up now and mandatory workflows will always be assigned to the copied form [#1331](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1331). From 03bd8e42c47a9851a929540098f423bd7a917500 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:57:54 +0100 Subject: [PATCH 11/24] Update 13/umbraco-forms/release-notes.md --- 13/umbraco-forms/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index 966243ecf40..3d87985346c 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -38,7 +38,7 @@ Whilst previously we tracked and displayed the date a form was created and last Forms allow you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 13.4 release, we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. -We've also resolved an edge case around copying a form. It's possible to [define workflows as mandatory](./developer/extending/customize-default-workflows.md#setting-a-mandatory-default-workflow). But if you copied the form and chose to exclude copying workflows, you would have a form that didn't contain the workflow you wanted to be included on all. This has been tightened up now and mandatory workflows will always be assigned to the copied form [#1331](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1331). +We've also resolved an edge case around copying a form. It's possible to [define workflows as mandatory](./developer/extending/customize-default-workflows.md#setting-a-mandatory-default-workflow). Copying the form without workflows excludes the desired workflow. You would have a form that didn't contain the workflow you wanted to be included on all. This has been tightened up now and mandatory workflows will always be assigned to the copied form [#1331](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1331). ##### Form picker enhancements From a5fcad4bd2c1af7b9cd9d10f280c56b8167c494b Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:58:08 +0100 Subject: [PATCH 12/24] Update 15/umbraco-forms/developer/configuration/README.md --- 15/umbraco-forms/developer/configuration/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/developer/configuration/README.md b/15/umbraco-forms/developer/configuration/README.md index 87f634d41dd..54ca0ec28ae 100644 --- a/15/umbraco-forms/developer/configuration/README.md +++ b/15/umbraco-forms/developer/configuration/README.md @@ -451,7 +451,7 @@ By default the value is `true`. To disable the feature, set the value to `false` This setting determines whether [advanced form validation rules](../../editor/creating-a-form/form-advanced.md) are available to editors. -By default the value is `false`. This partly because the feature is considered something only for "power users", comfortable with crafting rules using the JSON syntax required. And partly as validating the rules on the client requires an additional front-end dependency. +By default, the value is `false`. This is partly because the feature is only considered for "power users", comfortable with crafting rules using the required JSON syntax. And partly as validating the rules on the client requires an additional front-end dependency. To make the feature available to editors and including the dependency when using `@Html.RenderUmbracoFormDependencies(Url)`, set the value to `true`. From 059a7e2a804f45c44b62a871c338dca3915692ea Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:58:16 +0100 Subject: [PATCH 13/24] Update 15/umbraco-forms/editor/creating-a-form/form-advanced.md --- 15/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/editor/creating-a-form/form-advanced.md b/15/umbraco-forms/editor/creating-a-form/form-advanced.md index 64e23637270..79254c1d315 100644 --- a/15/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/15/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -18,7 +18,7 @@ When creating forms you are able to add validation to individual fields, making ![Validation rules](./images/validation-rules.png) -To add new rules, you need to provide the rule definition, an error message and select a field to which the message will be associated. Once created you can click to edit or delete them from the list. +To add new rules, you need to provide the rule definition, an error message, and select a field to which the message will be associated. Once created you can click to edit or delete them from the list. Crafting the rule definition itself requires use of [JSON logic](https://jsonlogic.com/) along with placeholders for the field or fields that are being validated. From 0001dcfc510a7b47ebbb28cdfb998a67c2180c88 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:58:27 +0100 Subject: [PATCH 14/24] Update 15/umbraco-forms/developer/configuration/README.md --- 15/umbraco-forms/developer/configuration/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/developer/configuration/README.md b/15/umbraco-forms/developer/configuration/README.md index 54ca0ec28ae..1d925967aff 100644 --- a/15/umbraco-forms/developer/configuration/README.md +++ b/15/umbraco-forms/developer/configuration/README.md @@ -453,7 +453,7 @@ This setting determines whether [advanced form validation rules](../../editor/cr By default, the value is `false`. This is partly because the feature is only considered for "power users", comfortable with crafting rules using the required JSON syntax. And partly as validating the rules on the client requires an additional front-end dependency. -To make the feature available to editors and including the dependency when using `@Html.RenderUmbracoFormDependencies(Url)`, set the value to `true`. +To make the feature available to editors and include the dependency when using `@Html.RenderUmbracoFormDependencies(Url)`, set the value to `true`. ## Security configuration From 1d2dcaaf48c3a9b864ea63ff6e33f838a6ed988e Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:58:40 +0100 Subject: [PATCH 15/24] Update 15/umbraco-forms/editor/creating-a-form/form-advanced.md --- 15/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/editor/creating-a-form/form-advanced.md b/15/umbraco-forms/editor/creating-a-form/form-advanced.md index 79254c1d315..7479e2af300 100644 --- a/15/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/15/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -14,7 +14,7 @@ The advanced options for forms are only available when [configured to display](. ## Validation Rules -When creating forms you are able to add validation to individual fields, making them mandatory or applying a regular expression pattern. Via the advanced options, you can provide validation rules for the entire form. This allows you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". +When creating forms you can add validation to individual fields, making them mandatory or applying a regular expression pattern. You can provide validation rules for the entire form via the advanced options. This allows you to validate expressions based on multiple fields. For example, "these two email fields should be the same", or "this date should be after this other one". ![Validation rules](./images/validation-rules.png) From 96c8dd93a7aae8643b5a332ee894bfb959151a88 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:58:49 +0100 Subject: [PATCH 16/24] Update 15/umbraco-forms/editor/creating-a-form/form-advanced.md --- 15/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/editor/creating-a-form/form-advanced.md b/15/umbraco-forms/editor/creating-a-form/form-advanced.md index 7479e2af300..e79834998e0 100644 --- a/15/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/15/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -60,6 +60,6 @@ A slightly more complex example could be with two dates, where, if provided, you } ``` -Overall you should be able to create simple or more complex rules as needed, using comparisons between fields and with static values. +Overall, you can create rules of varying complexity, using comparisons between fields and static values When the form is rendered, these validation rules will be applied both client and server-side. In this way you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file From aec7c7c9c43d123234304662fa3ce44db00ae5b6 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:58:59 +0100 Subject: [PATCH 17/24] Update 15/umbraco-forms/editor/creating-a-form/form-advanced.md --- 15/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/editor/creating-a-form/form-advanced.md b/15/umbraco-forms/editor/creating-a-form/form-advanced.md index e79834998e0..1a301911c6d 100644 --- a/15/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/15/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -62,4 +62,4 @@ A slightly more complex example could be with two dates, where, if provided, you Overall, you can create rules of varying complexity, using comparisons between fields and static values -When the form is rendered, these validation rules will be applied both client and server-side. In this way you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file +When the form is rendered, these validation rules will be applied to both client and server-side. In this way, you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file From d78f72a8465f358c16d9eb2a57315d7ea9998240 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:59:11 +0100 Subject: [PATCH 18/24] Update 15/umbraco-forms/release-notes.md --- 15/umbraco-forms/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/release-notes.md b/15/umbraco-forms/release-notes.md index a242b099499..6cacfd946e5 100644 --- a/15/umbraco-forms/release-notes.md +++ b/15/umbraco-forms/release-notes.md @@ -38,7 +38,7 @@ Whilst previously we tracked and displayed the date a form was created and last ##### Copy of workflows -Forms allows you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 15.1 release we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. +Forms allow you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 15.1 release, we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. We've also resolved an edge case around copying a form. It's possible to [define workflows as mandatory](./developer/extending/customize-default-workflows.md#setting-a-mandatory-default-workflow). But if you copied the form and chose to exclude copying workflows, you would have a form that didn't contain the workflow you wanted to be included on all. This has been tightened up now and mandatory workflows will always be assigned to the copied form [#1331](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1331). From cd1d8b85be8dac986edd0b5f26ed47f18cf0d14b Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:59:19 +0100 Subject: [PATCH 19/24] Update 15/umbraco-forms/release-notes.md --- 15/umbraco-forms/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/release-notes.md b/15/umbraco-forms/release-notes.md index 6cacfd946e5..44657130bd7 100644 --- a/15/umbraco-forms/release-notes.md +++ b/15/umbraco-forms/release-notes.md @@ -40,7 +40,7 @@ Whilst previously we tracked and displayed the date a form was created and last Forms allow you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 15.1 release, we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. -We've also resolved an edge case around copying a form. It's possible to [define workflows as mandatory](./developer/extending/customize-default-workflows.md#setting-a-mandatory-default-workflow). But if you copied the form and chose to exclude copying workflows, you would have a form that didn't contain the workflow you wanted to be included on all. This has been tightened up now and mandatory workflows will always be assigned to the copied form [#1331](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1331). +We've also resolved an edge case around copying a form. It's possible to [define workflows as mandatory](./developer/extending/customize-default-workflows.md#setting-a-mandatory-default-workflow). Copying the form without workflows excludes the desired workflow. You would have a form that didn't contain the workflow you wanted to be included on all. This has been tightened up now and mandatory workflows will always be assigned to the copied form [#1331](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1331). ##### File upload validation messages From b9a52b9ed315d713827395254b8ba2e0c3ab8be9 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:14:14 +0100 Subject: [PATCH 20/24] Update 13/umbraco-forms/release-notes.md --- 13/umbraco-forms/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index 3d87985346c..51cb246ef19 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -36,7 +36,7 @@ Whilst previously we tracked and displayed the date a form was created and last ##### Copy of workflows -Forms allow you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 13.4 release, we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. +Forms allows you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 13.4 release, we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. We've also resolved an edge case around copying a form. It's possible to [define workflows as mandatory](./developer/extending/customize-default-workflows.md#setting-a-mandatory-default-workflow). Copying the form without workflows excludes the desired workflow. You would have a form that didn't contain the workflow you wanted to be included on all. This has been tightened up now and mandatory workflows will always be assigned to the copied form [#1331](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1331). From d9907024014c8738304acaf1675a6a7f2ec6af0f Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:14:25 +0100 Subject: [PATCH 21/24] Update 13/umbraco-forms/editor/creating-a-form/form-advanced.md --- 13/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-forms/editor/creating-a-form/form-advanced.md b/13/umbraco-forms/editor/creating-a-form/form-advanced.md index 1a301911c6d..98e6aee0162 100644 --- a/13/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/13/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -62,4 +62,4 @@ A slightly more complex example could be with two dates, where, if provided, you Overall, you can create rules of varying complexity, using comparisons between fields and static values -When the form is rendered, these validation rules will be applied to both client and server-side. In this way, you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file +When the form is rendered, these validation rules will be applied on both the client and server-side. In this way, you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file From 128f29c2dea7caf5a3d026a447ee1a7e74620ee1 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:14:38 +0100 Subject: [PATCH 22/24] Update 15/umbraco-forms/editor/creating-a-form/form-advanced.md --- 15/umbraco-forms/editor/creating-a-form/form-advanced.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/editor/creating-a-form/form-advanced.md b/15/umbraco-forms/editor/creating-a-form/form-advanced.md index 1a301911c6d..98e6aee0162 100644 --- a/15/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/15/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -62,4 +62,4 @@ A slightly more complex example could be with two dates, where, if provided, you Overall, you can create rules of varying complexity, using comparisons between fields and static values -When the form is rendered, these validation rules will be applied to both client and server-side. In this way, you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file +When the form is rendered, these validation rules will be applied on both the client and server-side. In this way, you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file From 9d3d02bc3006125a5c97811cffe8089d5cb9beb8 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:14:48 +0100 Subject: [PATCH 23/24] Update 15/umbraco-forms/release-notes.md --- 15/umbraco-forms/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-forms/release-notes.md b/15/umbraco-forms/release-notes.md index 44657130bd7..305313760c2 100644 --- a/15/umbraco-forms/release-notes.md +++ b/15/umbraco-forms/release-notes.md @@ -38,7 +38,7 @@ Whilst previously we tracked and displayed the date a form was created and last ##### Copy of workflows -Forms allow you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 15.1 release, we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. +Forms allows you to make a copy of a form to use as a starting point for a new one. You can choose whether or not to copy workflows along with the form. With the 15.1 release, we've made available a second dialog allowing you to copy workflows to an existing form [#1185](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1185). You can select any or all of the workflows on the current form and copy them to the selected destination form. We've also resolved an edge case around copying a form. It's possible to [define workflows as mandatory](./developer/extending/customize-default-workflows.md#setting-a-mandatory-default-workflow). Copying the form without workflows excludes the desired workflow. You would have a form that didn't contain the workflow you wanted to be included on all. This has been tightened up now and mandatory workflows will always be assigned to the copied form [#1331](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1331). From d68c0b04db1f811c3ba68cfe4fd4d98f286bde97 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 11 Dec 2024 15:18:49 +0100 Subject: [PATCH 24/24] Further advanced validation rule example --- .../editor/creating-a-form/form-advanced.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/13/umbraco-forms/editor/creating-a-form/form-advanced.md b/13/umbraco-forms/editor/creating-a-form/form-advanced.md index 64e23637270..073d1b1179c 100644 --- a/13/umbraco-forms/editor/creating-a-form/form-advanced.md +++ b/13/umbraco-forms/editor/creating-a-form/form-advanced.md @@ -22,6 +22,8 @@ To add new rules, you need to provide the rule definition, an error message and Crafting the rule definition itself requires use of [JSON logic](https://jsonlogic.com/) along with placeholders for the field or fields that are being validated. +### Examples + One example use case would be ensuring that two fields match each other, perhaps when asking for a user's email address. Given two fields on the form, one with the alias of `email` and the other `compareEmail`, the rule would be: ```json @@ -60,6 +62,37 @@ A slightly more complex example could be with two dates, where, if provided, you } ``` +Rules can be nested too. In this final illustrative example, we have two fields. One with the alias `choose` is a drop-down list with two values: `A` and `B`. The second field with alias `test` we want to be completed only if the user selects `B`. So we craft a rule that is valid only if A is selected OR B is selected AND `test` is completed. + +```json +{ + "or": [ + { + "==": [ + "{choose}", + "A" + ] + }, + { + "and": [ + { + "==": [ + "{choose}", + "B" + ] + }, + { + "!=": [ + "{test}", + "" + ] + } + ] + } + ] +} +``` + Overall you should be able to create simple or more complex rules as needed, using comparisons between fields and with static values. When the form is rendered, these validation rules will be applied both client and server-side. In this way you can ensure the submission is only accepted if it meets the requirements. \ No newline at end of file