103 bookmark fixes
This commit is contained in:
+1
-1
@@ -51,7 +51,7 @@
|
||||
|
||||
//variables.framework.docs={};
|
||||
variables.framework.docs.APIName="Deck API";
|
||||
variables.framework.docs.APIVersion="0.102";
|
||||
variables.framework.docs.APIVersion="0.103";
|
||||
|
||||
variables.framework.globalHeaders = structNew();
|
||||
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
||||
|
||||
@@ -3,7 +3,56 @@
|
||||
<cfsilent>
|
||||
<cfimport prefix="m" taglib="../lib"/>
|
||||
<cfset this.helper=CreateObject("component","lib.rest_api_helper")/>
|
||||
</cfsilent>
|
||||
</cfsilent>
|
||||
|
||||
<cffunction name="get" hint="Букмарк">
|
||||
<cfargument name="bookmarkUid" type="string" required=true hint="type:guid"/>
|
||||
|
||||
<cfset var local={}/>
|
||||
<cftry>
|
||||
<cftry>
|
||||
<cfset this.helper.validateField(arguments, "bookmarkUid", "guid")/>
|
||||
<cfcatch type="invalidParamValue">
|
||||
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfset var out={}/>
|
||||
|
||||
<cfset request.locateIamService()/>
|
||||
|
||||
<cfquery name="local.qRead" result="local.result">
|
||||
select
|
||||
<m:field_set titleMapOut="local.titleMap" lengthOut="local.fieldCount">
|
||||
<m:field>b.bookmark_uid::text as bookmark_uid</m:field>
|
||||
<m:field>b.bookmark</m:field>
|
||||
<m:field>b.descr</m:field>
|
||||
<m:field>b.url</m:field>
|
||||
<m:field>b.icon_url</m:field>
|
||||
<m:field>b.contragent_id</m:field>
|
||||
<m:field formatter=#request.castToBool#>b.is_enabled</m:field>
|
||||
<m:field>to_char(b.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created</m:field>
|
||||
<m:field>to_char(b.dt_updated, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_updated</m:field>
|
||||
</m:field_set>
|
||||
from bookmark b
|
||||
where b.bookmark_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.bookmarkUid#" null=#!isValid('guid',arguments.bookmarkUid)#/>
|
||||
AND (b.contragent_id = <cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.contragentId# null=#!isNumeric(arguments.contragentId)#/>)
|
||||
</cfquery>
|
||||
<!--- <cfdump var=#local.qRead#/><cfabort/> --->
|
||||
|
||||
|
||||
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
||||
<cfset "out.bookmark" = this.helper.appendRecord(structNew("linked"), "", local.titleMap, local.qRead, this.helper.snake2camel)/>
|
||||
<cfset "out.runDurationMs"=getTickCount()-request.startTickCount/>
|
||||
|
||||
<cfreturn representationOf(out)/>
|
||||
|
||||
<cfcatch type="any">
|
||||
<cfreturn representationOf(cfcatch)/>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="patch">
|
||||
<cfargument name="bookmarkUid" type="string" required=true hint="type:guid"/>
|
||||
|
||||
@@ -27,8 +27,9 @@
|
||||
<cfargument name="page" type="string" hint="type:integer" default="1"/>
|
||||
<cfargument name="orderBy" type="string" hint="type:string, description:comma-separated list of fields to sort by, example:fld1.ASC,fld2.DESC,fld3.ASC" default=""/>
|
||||
|
||||
<cfset var local={}/>
|
||||
<cftry> <!--- отладка на время проблемы 404 --->
|
||||
<cfset local={}/>
|
||||
|
||||
|
||||
<!---parse and validate request parameters--->
|
||||
<cftry>
|
||||
@@ -39,7 +40,7 @@
|
||||
<cfset var filter=this.helper.parseFilterParams(this.fieldsSpec)/>
|
||||
<!--- <cfset var order=this.helper.parseOrderBy(this.fieldsSpec, arguments.orderBy)/> --->
|
||||
|
||||
<cfcatch type="invalidParamValue"><cfreturn representationOf("Проверка связи 3")>
|
||||
<cfcatch type="invalidParamValue">
|
||||
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||
</cfcatch>
|
||||
<cfcatch type="any">
|
||||
@@ -143,9 +144,9 @@
|
||||
<cfqueryparam cfsqltype="cf_sql_other" value="#local.bookmarkUid#"/>
|
||||
,<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.contragentId#"/>
|
||||
,<cfqueryparam cfsqltype="cf_sql_varchar" value="#cleanInput(arguments.bookmark)#"/>
|
||||
,<cfqueryparam cfsqltype="cf_sql_varchar" value="#cleanInput(arguments.descr)#"/>
|
||||
,<cfqueryparam cfsqltype="cf_sql_varchar" value="#cleanInput(arguments.url)#"/>
|
||||
,<cfqueryparam cfsqltype="cf_sql_varchar" value="#cleanInput(arguments.iconUrl)#"/>
|
||||
,<cfqueryparam cfsqltype="cf_sql_varchar" value="#cleanInput(arguments.descr)#"/>
|
||||
,<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.sort#"/>
|
||||
,<cfqueryparam cfsqltype="cf_sql_bit" value="#arguments.isEnabled#" null=#!isValid("boolean",arguments.isEnabled)#/>
|
||||
,<cfqueryparam cfsqltype="cf_sql_timestamp" value="#Now()#" />
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
<m:field>sop.svc_operation_cfs_param</m:field>
|
||||
<m:field>sop.label</m:field>
|
||||
<m:field>sop.data_type</m:field>
|
||||
<m:field>null as data_descriptor</m:field>
|
||||
<m:field formatter=#function(x){return listToArray(x);}#>sop.value_list</m:field>
|
||||
<m:field>sop.ref_svc_id</m:field>
|
||||
<m:field>sop.func</m:field>
|
||||
@@ -149,9 +150,81 @@
|
||||
<!--- <cfdump var=#local.qCfsParam#/><cfabort/> --->
|
||||
<cfif len(trim(local.qCfsParam.value_list)) AND listLen(local.qCfsParam.value_list) EQ 1>
|
||||
<cfset local.qCfsParam.default_value=local.qCfsParam.value_list/>
|
||||
</cfif>
|
||||
|
||||
</cfif>
|
||||
</cfif>
|
||||
|
||||
<cfif data_type EQ "map">
|
||||
<cfset var map={}/>
|
||||
<cftry>
|
||||
<cfset var map=deserializeJson(param_value)/>
|
||||
<cfcatch type="any"><cfrethrow/></cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfquery name="local.qSubparam">
|
||||
select
|
||||
sp.svc_operation_cfs_param_id
|
||||
,sp.svc_operation_cfs_subparam_id
|
||||
,sp.svc_operation_cfs_subparam
|
||||
,sp.label
|
||||
,sp.data_type
|
||||
,sp.value_list
|
||||
,sp.is_required
|
||||
,sp.descr
|
||||
,sp.man
|
||||
,sp.default_value
|
||||
,sp.minlength
|
||||
,sp.maxlength
|
||||
,sp.regex
|
||||
,sp.sort
|
||||
,sp.is_sensitive
|
||||
from svc_operation_cfs_subparam sp
|
||||
where sp.svc_operation_cfs_param_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#svc_operation_cfs_param_id#"/>
|
||||
order by sp.sort
|
||||
</cfquery>
|
||||
|
||||
<cfquery name="local.qInstSubparam">
|
||||
select
|
||||
sp.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid
|
||||
,sp.instance_operation_cfs_subparam
|
||||
,sp.descr
|
||||
,sp.sort
|
||||
,sp.is_sensitive
|
||||
from instance_operation_cfs_subparam sp
|
||||
where sp.instance_operation_cfs_param_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#instance_operation_cfs_param_uid#" null=#!isValid("guid",instance_operation_cfs_param_uid)#/>
|
||||
order by sp.sort
|
||||
</cfquery>
|
||||
|
||||
<cfset var mapDescriptor=structNew("linked")/>
|
||||
|
||||
<cfloop query="local.qSubparam">
|
||||
<cfset structInsert(mapDescriptor, local.qSubparam.svc_operation_cfs_subparam,
|
||||
{
|
||||
"man":"#local.qSubparam.man#",
|
||||
"isSensitive":#request.castToBool(local.qSubparam.is_sensitive)#
|
||||
}, true
|
||||
)
|
||||
/>
|
||||
<cfif local.qSubparam.is_sensitive AND structKeyExists(map,local.qSubparam.svc_operation_cfs_subparam)>
|
||||
<cfset map["#local.qSubparam.svc_operation_cfs_subparam#"] = "********"/>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
|
||||
<cfloop query="local.qInstSubparam">
|
||||
<cfset structInsert(mapDescriptor, local.qInstSubparam.instance_operation_cfs_subparam,
|
||||
{
|
||||
"note":"#local.qInstSubparam.note#",
|
||||
"isSensitive":#request.castToBool(local.qInstSubparam.is_sensitive)#
|
||||
}, true
|
||||
)
|
||||
/>
|
||||
<cfif local.qInstSubparam.is_sensitive AND structKeyExists(map,local.qInstSubparam.instance_operation_cfs_subparam)>
|
||||
<cfset map["#local.qInstSubparam.instance_operation_cfs_subparam#"] = "********"/>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
|
||||
<cfset local.qCfsParam.data_descriptor = mapDescriptor/>
|
||||
<cfset local.qCfsParam.param_value = serializeJson(map)/>
|
||||
</cfif><!---/map --->
|
||||
</cfloop>
|
||||
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfset local={}/>
|
||||
|
||||
<cfquery name="local.qRead" result="local.result">
|
||||
select
|
||||
<m:field_set titleMapOut="local.titleMap" lengthOut="fieldCount">
|
||||
@@ -32,6 +34,8 @@
|
||||
<m:field>to_char(iop.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created</m:field>
|
||||
<m:field>iop.creator_id</m:field>
|
||||
<m:field>sop.svc_operation_cfs_param</m:field>
|
||||
<m:field>sop.data_type</m:field>
|
||||
<m:field>null as data_descriptor</m:field>
|
||||
<m:field>u.login as creator_login</m:field>
|
||||
<m:field>u.shortname as creator_shortname</m:field>
|
||||
<m:field formatter=#request.castToBool#>sop.is_sensitive</m:field>
|
||||
@@ -50,6 +54,80 @@
|
||||
<cfreturn representationOf(this.helper.formatMessage("Not Found")).withStatus(404)/>
|
||||
</cfif>
|
||||
|
||||
|
||||
<cfif local.qRead.data_type EQ "map">
|
||||
<cfset var map={}/>
|
||||
<cftry>
|
||||
<cfset var map=deserializeJson(local.qRead.param_value)/>
|
||||
<cfcatch type="any"><cfrethrow/></cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfquery name="local.qSubparam">
|
||||
select
|
||||
sp.svc_operation_cfs_param_id
|
||||
,sp.svc_operation_cfs_subparam_id
|
||||
,sp.svc_operation_cfs_subparam
|
||||
,sp.label
|
||||
,sp.data_type
|
||||
,sp.value_list
|
||||
,sp.is_required
|
||||
,sp.descr
|
||||
,sp.man
|
||||
,sp.default_value
|
||||
,sp.minlength
|
||||
,sp.maxlength
|
||||
,sp.regex
|
||||
,sp.sort
|
||||
,sp.is_sensitive
|
||||
from svc_operation_cfs_subparam sp
|
||||
where sp.svc_operation_cfs_param_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#local.qRead.svc_operation_cfs_param_id#"/>
|
||||
order by sp.sort
|
||||
</cfquery>
|
||||
|
||||
<cfquery name="local.qInstSubparam">
|
||||
select
|
||||
sp.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid
|
||||
,sp.instance_operation_cfs_subparam
|
||||
,sp.note
|
||||
,sp.sort
|
||||
,sp.is_sensitive
|
||||
from instance_operation_cfs_subparam sp
|
||||
where sp.instance_operation_cfs_param_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#local.qRead.instance_operation_cfs_param_uid#" null=#!isValid("guid",local.qRead.instance_operation_cfs_param_uid)#/>
|
||||
order by sp.sort
|
||||
</cfquery>
|
||||
|
||||
<cfset var mapDescriptor=structNew("linked")/>
|
||||
|
||||
<cfloop query="local.qSubparam">
|
||||
<cfset structInsert(mapDescriptor, local.qSubparam.svc_operation_cfs_subparam,
|
||||
{
|
||||
"man":"#local.qSubparam.man#",
|
||||
"isSensitive":#request.castToBool(local.qSubparam.is_sensitive)#
|
||||
}, true
|
||||
)
|
||||
/>
|
||||
<cfif local.qSubparam.is_sensitive AND structKeyExists(map,local.qSubparam.svc_operation_cfs_subparam)>
|
||||
<cfset map["#local.qSubparam.svc_operation_cfs_subparam#"] = "********"/>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
|
||||
<cfloop query="local.qInstSubparam">
|
||||
<cfset structInsert(mapDescriptor, local.qInstSubparam.instance_operation_cfs_subparam,
|
||||
{
|
||||
"note":"#local.qInstSubparam.note#",
|
||||
"isSensitive":#request.castToBool(local.qInstSubparam.is_sensitive)#
|
||||
}, true
|
||||
)
|
||||
/>
|
||||
<cfif local.qInstSubparam.is_sensitive AND structKeyExists(map,local.qInstSubparam.instance_operation_cfs_subparam)>
|
||||
<cfset map["#local.qInstSubparam.instance_operation_cfs_subparam#"] = "********"/>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
|
||||
<cfset local.qCfsParam.data_descriptor = mapDescriptor/>
|
||||
<cfset local.qCfsParam.param_value = serializeJson(map)/>
|
||||
</cfif><!---/map --->
|
||||
|
||||
<cfset var out=structNew("linked")/>
|
||||
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
||||
|
||||
|
||||
@@ -0,0 +1,176 @@
|
||||
<cfcomponent extends="taffy.core.resource" taffy:uri="/instanceOperationCfsParams/{instanceOperationCfsParamUid}/subparams/{subparam}">
|
||||
|
||||
|
||||
<cfsilent>
|
||||
<cfimport prefix="m" taglib="../lib"/>
|
||||
<cfset this.helper=CreateObject("component","lib.rest_api_helper")/><!---*** странно, почему мы его видим?---><!---вынести в апп?--->
|
||||
</cfsilent>
|
||||
|
||||
|
||||
<cffunction name="get" hint="Метаданные субпараметра CFS-параметра операции экземпляра (значение субпараметра находится в теле параметра)"><!--- *** спросить, может, метод не нужен, а если нужен - наверно, нужно значение --->
|
||||
<cfargument name="instanceOperationCfsParamUid" type="string" required=true hint="type:guid"/>
|
||||
<cfargument name="subparam" type="string" required=true hint="type:string"/>
|
||||
<cftry>
|
||||
<cfset this.helper.validateField(arguments, "instanceOperationCfsParamUid", "guid")/>
|
||||
<cfcatch type="invalidParamValue">
|
||||
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfset local={}/>
|
||||
|
||||
<cfquery name="local.qRead" result="local.result">
|
||||
select
|
||||
<m:field_set titleMapOut="local.titleMap" lengthOut="fieldCount">
|
||||
<m:field>ios.instance_operation_cfs_param_uid::text as instance_operation_cfs_param_uid</m:field>
|
||||
<m:field>ios.instance_operation_cfs_subparam</m:field>
|
||||
<m:field formatter=#request.castToBool#>ios.is_sensitive</m:field>
|
||||
<m:field>ios.note</m:field>
|
||||
<!--- <m:field>iop.data_type</m:field> --->
|
||||
<m:field>to_char(ios.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_created</m:field>
|
||||
</m:field_set>
|
||||
from instance_operation_cfs_subparam ios
|
||||
join instance_operation_cfs_param iop on (ios.instance_operation_cfs_param_uid=iop.instance_operation_cfs_param_uid)
|
||||
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
|
||||
join instance e on (io.instance_uid=e.instance_uid)
|
||||
join specification_item si on (e.specification_item_id=si.specification_item_id)
|
||||
where ios.instance_operation_cfs_param_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationCfsParamUid#" null=#!isValid('guid',arguments.instanceOperationCfsParamUid)#/>
|
||||
AND ios.instance_operation_cfs_subparam=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.subparam#"/>
|
||||
AND si.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/> /*tenant isolation, из конфиденциального тут заметки... может быть, имена переменных окружения*/
|
||||
</cfquery>
|
||||
|
||||
<cfif local.qRead.recordCount EQ 0>
|
||||
<cfreturn representationOf(this.helper.formatMessage("Not Found")).withStatus(404)/>
|
||||
</cfif>
|
||||
|
||||
<!--- <cfif local.qRead.data_type NEQ 'map'>
|
||||
<cfreturn representationOf(this.helper.formatMessage("Parent parameter type does not have subparameters")).withStatus(400)/>
|
||||
</cfif> --->
|
||||
|
||||
<cfset var out=structNew("linked")/>
|
||||
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
||||
|
||||
<cfset "out.instanceOperationCfsSubparam" = this.helper.appendRecord(
|
||||
structNew("linked"), "", local.titleMap, local.qRead, this.helper.snake2camel
|
||||
)/>
|
||||
|
||||
<cfset "out.runDurationMs"=getTickCount() - request.startTickCount/>
|
||||
<cfreturn representationOf(out) />
|
||||
</cffunction><!---/get --->
|
||||
|
||||
|
||||
<cffunction name="delete" hint="Удаление метаданных субпараметра CFS-параметра операции экземпляра по ключу.">
|
||||
<cfargument name="instanceOperationCfsParamUid" type="string" required=true hint="type:guid"/>
|
||||
<cfargument name="subparam" type="string" required=true hint="type:string"/>
|
||||
|
||||
<cftry>
|
||||
<cfset this.helper.validateField(arguments, "instanceOperationCfsParamUid", "guid")/>
|
||||
|
||||
<cfcatch type="invalidParamValue">
|
||||
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfset local={}/>
|
||||
<cftry>
|
||||
<!--- проверка существования одновременно может служить для изоляции тенантов --->
|
||||
<!--- без проверки стартовавшей операции --->
|
||||
<!--- нужна проверка на изоляцию тенантов --->
|
||||
|
||||
<cfquery name="local.qCheckExistence" result="local.result">
|
||||
select ios.instance_operation_cfs_subparam
|
||||
from instance_operation_cfs_subparam ios
|
||||
where ios.instance_operation_cfs_param_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationCfsParamUid#" null=#!isValid('guid',arguments.instanceOperationCfsParamUid)#/>
|
||||
AND ios.instance_operation_cfs_subparam=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.subparam#"/>
|
||||
</cfquery>
|
||||
<cfif local.qCheck.recordCount EQ 0>
|
||||
<cfreturn representationOf(this.helper.formatMessage("Not Found", "Subparameter specified does not exist")).withStatus(404)/>
|
||||
</cfif>
|
||||
|
||||
<cfquery name="local.qCheckAccess" result="local.result">
|
||||
select iop.instance_operation_cfs_subparam
|
||||
from instance_operation_cfs_subparam ios
|
||||
join instance_operation_cfs_param iop on (ios.instance_operation_cfs_param_uid=iop.instance_operation_cfs_param_uid)
|
||||
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
|
||||
join instance e on (io.instance_uid=e.instance_uid)
|
||||
join specification_item si on (e.specification_item_id=si.specification_item_id)
|
||||
where ios.instance_operation_cfs_param_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationCfsParamUid#" null=#!isValid('guid',arguments.instanceOperationCfsParamUid)#/>
|
||||
AND ios.instance_operation_cfs_subparam=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.subparam#"/>
|
||||
AND si.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/>
|
||||
</cfquery>
|
||||
<cfif local.qCheckAccess.recordCount EQ 0>
|
||||
<cfreturn representationOf(this.helper.formatMessage("Not Accessible", "Subparameter specified is not accessible by the current user")).withStatus(403)/>
|
||||
</cfif>
|
||||
|
||||
<cfquery name="local.qSave">
|
||||
delete from instance_operation_cfs_subparam
|
||||
where instance_operation_cfs_param_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationCfsParamUid#" null=#!isValid('guid',arguments.instanceOperationCfsParamUid)#/>
|
||||
AND instance_operation_cfs_subparam=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.subparam#"/>
|
||||
</cfquery>
|
||||
|
||||
<cfcatch type="any">
|
||||
<cfreturn representationOf(this.helper.formatException(cfcatch, "Internal Error")).withStatus(500)/><!--- *** это не нужно показывать в продуктиве --->
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfreturn noData().withStatus(204, "No Content") />
|
||||
</cffunction><!--- delete --->
|
||||
|
||||
|
||||
<cffunction name="put" hint="запись метаданных субпараметра CFS-параметра операции инстанса">
|
||||
<cfargument name="instanceOperationCfsParamUid" type="string" required=true hint="type:guid"/>
|
||||
<cfargument name="subparam" type="string" required=true hint="type:string"/>
|
||||
|
||||
<cfargument name="isSensitive" type="boolean" required=true/>
|
||||
<cfargument name="note" type="string" required=false default=""/> <!--- *** XSS!!! --->
|
||||
|
||||
<cftry>
|
||||
<cfset this.helper.validateField(arguments, "instanceOperationCfsParamUid", "guid")/>
|
||||
<!--- *** Нужна проверка, что операция не была выполнена, иначе она становится архивной --->
|
||||
|
||||
<cfcatch type="invalidParamValue">
|
||||
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
<cfset var local={}/>
|
||||
|
||||
<cfquery name="local.qCheckExistence" result="local.result">
|
||||
select iop.instance_operation_cfs_subparam
|
||||
from instance_operation_cfs_subparam iop
|
||||
where iop.instance_operation_cfs_param_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationCfsParamUid#" null=#!isValid('guid',arguments.instanceOperationCfsParamUid)#/>
|
||||
AND iop.instance_operation_cfs_subparam=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.subparam#"/>
|
||||
</cfquery>
|
||||
<cfif local.qCheck.recordCount EQ 0>
|
||||
<cfreturn representationOf(this.helper.formatMessage("Not Found", "Subparameter specified does not exist")).withStatus(404)/>
|
||||
</cfif>
|
||||
|
||||
<cfquery name="local.qCheckAccess" result="local.result">
|
||||
select iop.instance_operation_cfs_subparam
|
||||
from instance_operation_cfs_subparam ios
|
||||
join instance_operation_cfs_param iop on (ios.instance_operation_cfs_param_uid=iop.instance_operation_cfs_param_uid)
|
||||
join instance_operation io on (iop.instance_operation_uid=io.instance_operation_uid)
|
||||
join instance e on (io.instance_uid=e.instance_uid)
|
||||
join specification_item si on (e.specification_item_id=si.specification_item_id)
|
||||
where iop.instance_operation_cfs_param_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationCfsParamUid#" null=#!isValid('guid',arguments.instanceOperationCfsParamUid)#/>
|
||||
AND iop.instance_operation_cfs_subparam=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.subparam#"/>
|
||||
AND si.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/>
|
||||
</cfquery>
|
||||
<cfif local.qCheckAccess.recordCount EQ 0>
|
||||
<cfreturn representationOf(this.helper.formatMessage("Not Accessible", "Subparameter specified is not accessible by the current user")).withStatus(403)/>
|
||||
</cfif>
|
||||
|
||||
<cfquery name="local.qSave" result="local.result">
|
||||
update instance_operation_cfs_subparam set
|
||||
dt_updated=<cfqueryparam cfsqltype="cf_sql_timestamp" value="#Now()#" />
|
||||
,updater_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.usrId#" />
|
||||
,is_sensitive=<cfqueryparam cfsqltype="cf_sql_bit" value="#arguments.isSensitive#" />
|
||||
,note=<cfqueryparam cfsqltype="cf_sql_varchar" value="#htmlEditFormat(arguments.note)#" /> <!--- *** XSS!!! --->
|
||||
where instance_operation_cfs_param_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationCfsParamUid#" null=#!isValid('guid',arguments.instanceOperationCfsParamUid)#/>
|
||||
AND iop.instance_operation_cfs_subparam=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.subparam#"/>
|
||||
</cfquery>
|
||||
<!--- *** проверить существование - 404 --->
|
||||
<cfreturn noData().withStatus(204, "No Content") />
|
||||
</cffunction><!--- put --->
|
||||
|
||||
</cfcomponent>
|
||||
@@ -70,6 +70,7 @@
|
||||
<m:field>p.svc_operation_cfs_param</m:field>
|
||||
<m:field>p.label</m:field>
|
||||
<m:field>p.data_type</m:field>
|
||||
<m:field>null as data_descriptor</m:field>
|
||||
<m:field formatter=#function(x){return listToArray(x);}#>p.value_list</m:field>
|
||||
<m:field <!--- formatter=#function(x){return listToArray(generateValueList(x));}# --->>p.func</m:field><!--- *** отчаявшись сделать красиво --->
|
||||
<m:field>p.ref_svc_id</m:field>
|
||||
@@ -116,6 +117,47 @@
|
||||
<cfset local.qCfsParam.default_value=local.qCfsParam.value_list/><!--- *** не очень красиво перетирать query--->
|
||||
</cfif>
|
||||
</cfif>
|
||||
|
||||
|
||||
<cfif data_type EQ "map">
|
||||
<!--- аналогично instance_operation.cfm, только без полей инстанса, только шаблон --->
|
||||
<cfquery name="local.qSubparam">
|
||||
select
|
||||
sp.svc_operation_cfs_param_id
|
||||
,sp.svc_operation_cfs_subparam_id
|
||||
,sp.svc_operation_cfs_subparam
|
||||
,sp.label
|
||||
,sp.data_type
|
||||
,sp.value_list
|
||||
,sp.is_required
|
||||
,sp.descr
|
||||
,sp.man
|
||||
,sp.default_value
|
||||
,sp.minlength
|
||||
,sp.maxlength
|
||||
,sp.regex
|
||||
,sp.sort
|
||||
,sp.is_sensitive
|
||||
from svc_operation_cfs_subparam sp
|
||||
where sp.svc_operation_cfs_param_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#svc_operation_cfs_param_id#"/>
|
||||
order by sp.sort
|
||||
</cfquery>
|
||||
|
||||
<cfset var mapDescriptor=structNew("linked")/>
|
||||
|
||||
<cfloop query="local.qSubparam">
|
||||
<cfset structInsert(mapDescriptor, local.qSubparam.svc_operation_cfs_subparam,
|
||||
{
|
||||
"man":"#local.qSubparam.man#",
|
||||
"isSensitive":#request.castToBool(local.qSubparam.is_sensitive)#
|
||||
}, true
|
||||
)
|
||||
/>
|
||||
</cfloop>
|
||||
|
||||
<cfset local.qCfsParam.data_descriptor = mapDescriptor/>
|
||||
</cfif><!---/map --->
|
||||
|
||||
</cfloop>
|
||||
<cfset queryDeleteColumn(local.qCfsParam, "func")/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user