spec/lib/data/submit_param.cfm
2025-06-02 16:16:51 +03:00

69 lines
2.4 KiB
Plaintext

<cfsilent></cfsilent>
<cfif thisTag.executionMode IS "end" OR !thisTag.hasEndTag>
<cfassociate basetag="cf_submit_collection" datacollection="params" />
<cfparam name="ATTRIBUTES.name"/>
<cfparam name="ATTRIBUTES.type" default="string"/>
<cfparam name="ATTRIBUTES.default" default=""/><!--- не валидируется, что позволяет использовать, например, пустую строку для индикации нулла в числовой колонке --->
<!--- output params --->
<cfparam name="ATTRIBUTES.submittedValue" type="string" default=""/>
<cfparam name="ATTRIBUTES.value" type="any" default=""/>
<cfif structKeyExists(CALLER.VARIABLES, "#ATTRIBUTES.name#")>
<cfset ATTRIBUTES.submittedValue=CALLER.VARIABLES["#ATTRIBUTES.name#"]/>
<cfelseif structKeyExists(FORM, "#ATTRIBUTES.name#")>
<cfset ATTRIBUTES.submittedValue=FORM["#ATTRIBUTES.name#"]/>
<cfelseif structKeyExists(URL, "#ATTRIBUTES.name#")>
<cfset ATTRIBUTES.submittedValue=URL["#ATTRIBUTES.name#"]/>
<cfelse>
<cfset ATTRIBUTES.submittedValue=#ATTRIBUTES.default#/>
</cfif>
<cfif structKeyExists(ATTRIBUTES,"preprocessor")>
<cfset preprocessedValue=#ATTRIBUTES.preprocessor(ATTRIBUTES.submittedValue)#/>
<cfelse>
<cfset preprocessedValue=#ATTRIBUTES.submittedValue#/>
</cfif>
<cfswitch expression=#ATTRIBUTES.type#>
<cfcase value="integer">
<cfif isValid('integer', preprocessedValue)>
<cfset ATTRIBUTES.value=preprocessedValue/>
<cfelseif isValid('number', preprocessedValue)>
<cfset ATTRIBUTES.value=round(preprocessedValue)/>
<cfelse>
<cfset ATTRIBUTES.value=#ATTRIBUTES.default#/>
</cfif>
</cfcase>
<cfcase value="numeric">
<cfif isValid('numeric', preprocessedValue)>
<cfset ATTRIBUTES.value=preprocessedValue/>
<cfelse>
<cfset ATTRIBUTES.value=#ATTRIBUTES.default#/>
</cfif>
</cfcase>
<cfcase value="datetime">
<cfparam name="ATTRIBUTES.locale" default="ru"/>
<cfparam name="ATTRIBUTES.format" default=""/>
<cftry>
<cfset ATTRIBUTES.value=LSParseDateTime(preprocessedValue, #ATTRIBUTES.locale#, #ATTRIBUTES.format#)/>
<cfcatch type="ANY">
<cfset ATTRIBUTES.value=#ATTRIBUTES.default#/>
</cfcatch>
</cftry>
</cfcase>
<cfcase value="string">
<cfset ATTRIBUTES.value=preprocessedValue/>
</cfcase>
</cfswitch>
</cfif>