variables.logFilePrefix = 'ceRecordApi_base'; var retStruct = { 'error_msg': '' }; var ceObj = arguments.ceObject; var fldName = arguments.fieldName; var fldVal = arguments.fieldValue; var fldOpts = arguments.fieldOptions; if ( StructKeyExists(fldOpts,'bypassValidation') AND IsBoolean(fldOpts.bypassValidation) AND fldOpts.bypassValidation EQ true ) ceObj.setRawValue(fldName,fldVal); else ceObj.setValue(fldName,fldVal); return retStruct; var retStruct = {}; var fldStruct = { name: '', valueStr: '', fieldType: '', error: '' }; var fldKey = ''; var fldType = ''; var fldVal = ''; var fldOptions = {}; var fldDataType = ''; var fldValArgs = {}; var fldError = ''; var processFldVal = true; var ceObj = arguments.ceObject; var ceName = ceObj.FormName; var formID = ceObj.FormId; var fldDefsMap = ceObj.FieldDefinitions; var fldRenderer = ''; var fldParams = {}; for ( fldKey IN arguments.fieldValues ) { fldError = ''; fldDataType = ''; fldValArgs = {}; processFldVal = true; // Make sure the fldKey is a field in the CE if ( StructKeyExists(fldDefsMap,fldKey) ) { // Set base values for the field fldType = ceObj.getFieldType(fieldName=fldKey); fldVal = arguments.fieldValues[fldKey]; fldOptions = ( StructKeyExists(arguments.fieldSpecs,fldKey) ? arguments.fieldSpecs[fldKey] : {} ); fldDataType = ( StructKeyExists(fldOptions,'datatype') ) ? fldOptions.datatype : ''; // Get the Field specific Render and Params fldRenderer = ceObj.getFieldRenderer(fldKey); fldParams = ceObj.getFieldParams(fldKey); // Do not process the fldVal if it is empty if ( IsSimpleValue(fldVal) AND TRIM(fldVal) EQ '' ) processFldVal = false; else if ( IsStruct(fldVal) AND StructIsEmpty(fldVal) ) processFldVal = false; else if ( IsArray(fldVal) AND ArrayLen(fldVal) EQ 0 ) processFldVal = false; if ( processFldVal ) { // Convert date/time Object to datetime string for processing if ( isInstanceOf(fldVal, "java.util.Date") ) fldVal = Server.CommonSpot.UDF.util.formatCSDate(fldVal); // (OLD) fldVal = DateTimeFormat(fldVal,'yyyy-mm-dd HH:nn:ss'); // Add additional logic for complex field types: Image, ExtendedURL (with newWindowParams) // - As of 2024-10-17: Taxonomy, Multimedia and Tree are Unsupported // - As of 2024-12-03: Taxonomy and Tree (Supported) - Multimedia (Unsupported) // - As of 2025-02-12: Multimedia (Supported) if ( fldType EQ 'calendar' ) { // Convert the calendar field value to the correct date/time format try { if ( NOT StructKeyExists(fldParams,'timeformat') OR TRIM(fldParams.timeformat) EQ '' ) { // Fix for an empty / no value Date Only calendar field if ( fldVal EQ '00:00:00' ) fldVal = ''; else fldVal = dateFormat(fldVal,'yyyy-mm-dd'); } else if ( NOT StructKeyExists(fldParams,'dateformat') OR TRIM(fldParams.dateformat) EQ '' ) fldVal = timeFormat(fldVal,'HH:nn:ss'); else fldVal = dateTimeFormat(fldVal,'yyyy-mm-dd HH:nn:ss'); // Normalize the fldVal before saving it if ( TRIM(fldVal) NEQ '' ) fldVal = fldRenderer.normalize(fldVal,fldParams); } catch (any ex) { // Error Parsing fldError = 'The Field Value (#fldVal#) for the "#fldKey#" (#fldType#) field is not a valid date/time value.'; } } else if ( fldType EQ 'checkbox' ) { // Make sure that if the fldVal is 0, 'no', or false it gets converted to empty string fldVal = ( IsBoolean(fldVal) AND fldVal EQ false ) ? '' : fldVal; } else if ( fldType EQ 'csextendedurl' ) { // Convert fldVal to formatData function arguments (returns a struct of arguments) dataValArgs = convertExtendedUrlDataValueToArgs(fieldRenderer=fldRenderer,fieldParams=fldParams,dataValue=fldVal); // - Returns: (fieldParams,targetType[r],pageID[r/0],target,bookmark,newWindowParams=formatNewWindowParams()) fldVal = fldRenderer.formatData(argumentCollection=dataValArgs); } else if ( fldType EQ 'date' ) { // Convert the date field value to the correct date format if ( IsDate(fldVal) ) { fldVal = dateFormat(fldVal, 'yyyy-mm-dd'); } } else if ( fldType EQ 'img' ) { // Convert the field value to the image formatData() function arguments dataValArgs = convertImageDataValueToArgs(fieldRenderer=fldRenderer,fieldParams=fldParams,dataValue=fldVal); // - Returns: (imageID[r],altText,titleText,captionText) if ( VAL(dataValArgs.imageID) GT 0 ) { // Format the Image value String from the args fldVal = fldRenderer.formatData(argumentCollection=dataValArgs); } } else if ( fldType EQ 'multimedia' ) { // Convert the field value to the multimedia formatData() function arguments ( mediaid, player, playerParams, fieldParams ) dataValArgs = convertMultimediaDataValueToArgs(fieldRenderer=fldRenderer,fieldParams=fldParams,dataValue=fldVal); // - Returns: (fldParams[r],mediaid[r],player[r],playerParams,playerParams) // Convert the dataValueArgs to the formatted data for setValue() fldVal = fldRenderer.formatData(argumentCollection=dataValArgs); } else if ( fldType EQ 'select' ) { // FIX (2025/8/8): CS11 field validation for the Selection List CFT is not working correctly when set to custom query // - If valSource is 'query', set field to use setRawValue() to skip field type validation /* if ( StructKeyExists(fldParams,'valSource') AND fldParams.valSource EQ 'query' ) { fldOptions.bypassValidation = true; }*/ } else if ( fldType EQ 'taxonomy' ) { if ( fldDataType EQ 'termnames' ) { // The field value is a list of Tax Term Names prep the for the fldRenderer.formatData() function fldVal = convertTaxonomyDataValueToTermList(dataValue=fldVal); // Convert the list of taxonomy term names to a comma-delimited list of ids fldVal = fldRenderer.formatData(fldParams,fldVal); } else { // The field value isa list of Tax Term IDs - fldRenderer.formatData() NOT NEEDED fldVal = convertTaxonomyDataValueToIdList(dataValue=fldVal); } } else if ( fldType EQ 'tree_control' ) { // fldRenderer.formatData() NOT NEEDED for tree_control fldVal = convertTreeControlDataValueToTreeList(dataValue=fldVal); } // Make sure dataVal is a simple string if ( NOT IsSimpleValue(fldVal) ) { fldVal = '{{complex value}}'; fldError = 'The Field Value for the "#fldKey#" (#fldType#) field is a complex value that was unable to be processed.'; } } // END: processFldVal - check fldVal length retStruct[fldKey] = prepareFieldValueHook(ceName=ceName,fieldName=fldKey,fieldValueStr=fldVal,fieldType=fldType,fieldOptions=fldOptions,error=fldError); } // END: fldKey field in CE check } // END: Fields Loop return retStruct; var retStruct = { ceName: arguments.ceName, fieldName: arguments.fieldName, fieldValueStr: arguments.fieldValueStr, fieldType: arguments.fieldType, fieldOptions: arguments.fieldOptions, error: arguments.error }; // Override hook that enables custom logic to be added to modify the field value before it is passed back to the CE Record API call, ensuring the correct data is set. return retStruct; var retStruct = { fieldParams: {}, targetType: '', pageID: 0, target: '', bookmark: '', newWindowParams: '' }; var fldRenderer = arguments.fieldRenderer; var fldParams = arguments.fieldParams; var dVal = arguments.dataValue; var urlData = {}; var newWindowArgs = {}; var targetName = ''; if ( IsStruct(dVal) ) { retStruct.pageID = ( StructKeyExists(dVal,'pageID') ) ? dVal.pageID : 0; retStruct.target = ( StructKeyExists(dVal,'target') ) ? dVal.target : ''; retStruct.bookmark = ( StructKeyExists(dVal,'bookmark') ) ? dVal.bookmark : ''; retStruct.newWindowParams = ( StructKeyExists(dVal,'newWindowParams') ) ? dVal.newWindowParams : ''; targetName = ( StructKeyExists(dVal,'targetName') ) ? dVal.targetName : ''; } else if ( IsSimpleValue(dVal) ) { if ( IsNumeric(dVal) AND VAL(dVal) GT 0 ) { retStruct.target = variables.csData.parseCSURL(str=dVal,useLogging=false); if ( TRIM(retStruct.target) NEQ '' ) retStruct.pageid = dVal; } else { // Parse the dVal as an CSExtURL // - csPage #bookmarks are pulled out and assigned to the 'bookmark' key // - non-csPage #bookmarks pass-thru with the url and assigned to the 'target' key (url#bookmark) // - emails and mailto: links pass through as the url and assigned to the 'target' key urlData = variables.csData.parseCSExtURLProps(str=dVal,useLogging=false); // assign the urlData key to the retStruct retStruct.target = urlData.url; retStruct.pageid = urlData.pageid; retStruct.bookmark = urlData.bookmark; retStruct.newWindowParams = urlData.targetprops; // parseCSExtURLProps:targetprops targetName = urlData.target; // parseCSExtURLProps:target } } // Get the Extended Url TargetType // - Pass the pageid to getCsExtendedUrlTargetType() Function to get the targetType (UDF linkmgt.getTargetType(pageid)) // - Or pass the target url if a pageid=0 if ( TRIM(retStruct.targetType) EQ '' ) retStruct.targetType = getCsExtendedUrlTargetType(pageID=retStruct.pageid,target=retStruct.target); // targetType: MAILTO // - If targetType is 'mailto' remove the 'mailto:' prefix if exists if ( retStruct.targetType EQ 'mailto' AND LEFT(retStruct.target,7) EQ 'mailto:' ) { retStruct.target = ReplaceNoCase(retStruct.target, 'mailto:', '', 'ONE'); } // targetType: OTHER but we have a PageID gt 0... don't return a target if ( retStruct.targetType EQ 'other' AND VAL(retStruct.pageid) GT 0 ) { retStruct.target = ''; } if ( TRIM(retStruct.newWindowParams) NEQ '' ) { newWindowArgs = convertNewWinParamsToArgs(paramsList=retStruct.newWindowParams,targetName=targetName); // - Returns: (targetType,targetName,top,left,height,width,toolbar,loc,directories,status,menubar,scrollbars,resizable) retStruct.newWindowParams = fldRenderer.formatNewWindowParams(argumentCollection=newWindowArgs); } // Add to the return struct retStruct.fieldParams = fldParams; return retStruct; var retStr = 'other'; arguments.target = TRIM(arguments.target); // if pageid greater than 0, get the CS target type if ( arguments.pageid GT 0 ) retStr = Server.CommonSpot.UDF.linkmgt.getTargetType(arguments.pageid); // if arguments.target has mailto: or is an email address else if ( LEFT(arguments.target,7) EQ 'mailto:' OR IsValid('email',arguments.target) ) retStr = 'mailto'; return retStr; var retStruct = { targetType: '', targetName: arguments.targetName, top: 0, left: 0, height: 0, width: 0, toolbar: 0, loc: 0, directories: 0, status: 0, menubar: 0, scrollbars: 0, resizable: 0 }; var paramsArr = []; var propArr = []; var pKey = ''; var pVal = ''; var paramMap = { 'ww':'width' ,'hh':'height' ,'tb':'toolbar' ,'location':'loc' // Reversed (long param becomes short) ,'dir':'directories' ,'stat':'status' ,'mb':'menubar' ,'sb':'scrollbars' ,'rs':'resizable' }; arguments.paramsList = listChangeDelims(arguments.paramsList, ':', ","); // Convert shorthand props to argument name for ( mKey IN paramMap ) { arguments.paramsList = ReplaceNoCase(arguments.paramsList, mKey, paramMap[mKey], 'ONE'); } // Covert paramsList to an Array paramsArr = listToArray(arguments.paramsList, ":"); // Build the args struct for ( var i=1; i <= ArrayLen(paramsArr); i++ ) { propArr = listToArray(paramsArr[i], "="); pKey = propArr[1]; pVal = ( ArrayLen(propArr) GT 1 ) ? propArr[2] : ''; if ( pKey EQ "popup" OR pKey EQ "usePopup") // ^popup=1 - is the correct CS syntax retStruct.targetType = "popup"; else if ( pKey EQ "useTab" OR pKey EQ "tab" ) // ^useTab=1 - is the correct CS syntax retStruct.targetType = "tab"; else retStruct[pKey] = pVal; } return retStruct; var retStruct = { fieldParams: arguments.fieldParams, imageID: '', altText: '', titleText: '', captionText: '' }; var fldRenderer = arguments.fieldRenderer; var dVal = arguments.dataValue; var imageID = 0; var altText = ''; var titleText = ''; var captionText = ''; var imgArr = []; var imgMetaArr = []; if ( IsStruct(dVal) AND StructKeyExists(dVal,'imageid') ) { imageID = dVal.imageid; altText = ( StructKeyExists(dVal,'altText') ) ? dVal.altText : ''; titleText = ( StructKeyExists(dVal,'titleText') ) ? dVal.titleText : ''; captionText = ( StructKeyExists(dVal,'captionText') ) ? dVal.captionText : ''; } else if ( IsArray(dVal) AND ArrayLen(dVal) GTE 1 ) { imageID = dVal[1]; // ImageID must be first altText = ( ArrayLen(dVal) GTE 2 ) ? dVal[2] : ''; titleText = ( ArrayLen(dVal) GTE 3 ) ? dVal[3] : ''; captionText = ( ArrayLen(dVal) GTE 4 ) ? dVal[4] : ''; } else if ( IsSimpleValue(dVal) AND Find("|",dVal) ) { imgArr = ListToArray(dVal,"|",true); // includeEmptyFields imageID = imgArr[1]; if ( ArrayLen(imgArr) GTE 3 ) // 3+ node - 2+ PIPE delimiters { altText = imgArr[2]; titleText = imgArr[3]; captionText = ( ArrayLen(imgArr) GTE 4 ) ? imgArr[4] : ''; } else if ( ArrayLen(imgArr) GTE 2 ) // 2 nodes - 1 PIPE Delimiter { if ( Find("::",imgArr[2]) ) // CS style double colon "::" delimiter { imgMetaArr = ListToArray(imgArr[2],"::",true,true); // includeEmptyFields, multiCharacterDelimiter (::) altText = imgMetaArr[1]; titleText = ( ArrayLen(imgMetaArr) GTE 2 ) ? imgMetaArr[2] : ''; captionText = ( ArrayLen(imgMetaArr) GTE 3 ) ? imgMetaArr[3] : ''; } else altText = imgArr[2]; } } else if ( IsSimpleValue(dVal) ) imageID = dVal; // No altText or titleText // Remove the 'CPIMAGE:' prefix from ImageID if exists if ( LEFT(imageID,8) EQ 'CPIMAGE:' ) imageID = replaceNoCase(imageID,'CPIMAGE:','','ONE'); retStruct.imageID = imageID; retStruct.altText = altText; retStruct.titleText = titleText; retStruct.captionText = captionText; return retStruct; var retStr = ''; var dataArgs = convertImageDataValueToArgs(dataValue=arguments.dataValue); var ceObj = CreateObject("component", "commonspot.components.mdform-base"); if ( VAL(dataArgs.imageID) GT 0 ) retStr = ceObj.formatValue_Image(dataArgs.imageID, dataArgs.altText, dataArgs.titleText, dataArgs.captionText); return retStr; var retStruct = { fldParams: {}, mediaId : '', player: '', playerParams: {} }; var fldRenderer = arguments.fieldRenderer; var fldParams = arguments.fieldParams; var mmSrcXml = {}; var serviceArr = []; var serviceid = ''; var mediaArr = []; var mediaId = ''; var mediaStr = ''; var playerArr = []; var playerIdOrName = ''; var playerDataArr = []; var playerParamArr = []; var sKey = ''; var sVal = ''; var playerData = {}; var playerParams = {}; if ( IsStruct(dataValue) ) { // Get the mediaId if ( StructKeyExists(dataValue,'mediaid') ) mediaId = dataValue.mediaid; else if ( StructKeyExists(dataValue,'videoid') ) mediaId = dataValue.videoid; else if ( StructKeyExists(dataValue,'pageid') ) mediaId = dataValue.pageid; // Get the 'player' id or name if ( StructKeyExists(dataValue,'player') ) playerIdOrName = dataValue.player; else if ( StructKeyExists(dataValue,'playerName') ) playerIdOrName = dataValue.playerName; else if ( StructKeyExists(dataValue,'playerId') ) playerIdOrName = dataValue.playerId; // Get the playerData struct if ( StructKeyExists(dataValue,'playerData') AND IsStruct(dataValue.playerData) ) playerData = dataValue.playerData; } else if ( IsXML(dataValue) ) { mmSrcXml = xmlParse(dataValue); // Get the ServiceID - so we know what service to determine where to get the media ID serviceArr = xmlSearch(mmSrcXml,'ElementData//serviceid'); serviceId = ( ArrayLen(serviceArr) ) ? serviceArr[1].XmlText : 0; switch (serviceID) { case 1: // Local // Get the MediaID Array from Src or the mediaID_mp4 node mediaArr = xmlSearch(mmSrcXml,'ElementData//Src'); mediaStr = ( ArrayLen(mediaArr) ) ? mediaArr[1].XmlText : ''; // if srcMediaId equals 0, now look in the mediaID_mp4 node if ( TRIM(mediaStr) EQ '' OR mediaStr EQ 0 ) mediaArr = xmlSearch(mmSrcXml,'ElementData//mediaID_mp4'); // check if SRC has a value greater than 0 mediaStr = ( ArrayLen(mediaArr) ) ? mediaArr[1].XmlText : ''; // if srcMediaId equals 0, now look in the src_mp4 node if ( TRIM(mediaStr) EQ '' OR mediaStr EQ 0 ) mediaArr = xmlSearch(mmSrcXml,'ElementData//src_mp4'); break; case 2: // Brightcove // Get the MediaID Array from data-video-id node mediaArr = xmlSearch(mmSrcXml,'ElementData//data-video-id'); break; case 3: // YouTube // Get the PlayerID mediaArr = xmlSearch(mmSrcXml,'ElementData//videoId'); break; } // Get the MediaID from the mediaArr mediaId = ( ArrayLen(mediaArr) ) ? mediaArr[1].XmlText : 0; // Remove the 'CP___PAGEID' if ( NOT IsNumeric(mediaId) AND mediaId contains "CP___PAGEID=" ) mediaId = replaceNoCase(mediaId,"CP___PAGEID=",""); // Get the PlayerID playerArr = xmlSearch(mmSrcXml,'ElementData//playerid'); playerIdOrName = ( ArrayLen(playerArr) ) ? playerArr[1].XmlText : 0; // Get the playerParams from the XML object playerDataArr = xmlSearch(mmSrcXml,'ElementData//playerData'); playerParamArr = ( ArrayLen(playerDataArr) && StructKeyExists(playerDataArr[1],'XmlChildren') ) ? playerDataArr[1].XmlChildren: {}; // Build the playerParams data struct for ( var i=1; i <= ArrayLen(playerParamArr); i++ ) { sKey = playerParamArr[i].xmlName; sVal = playerParamArr[i].xmlText; playerData[sKey] = sVal; } } // Get the Player Params playerParams = fldRenderer.getPlayerDefaultParams(fldParams,playerIdOrName); // Update the default playerParams with the passed in playerData values if ( NOT StructIsEmpty(playerData) ) { for ( var dKey IN playerParams ) { if ( StructKeyExists(playerData,dKey) ) playerParams[dKey] = playerData[dKey]; } } // Build the return struct retStruct.fieldParams = fldParams; retStruct.mediaId = mediaId; retStruct.player = playerIdOrName; retStruct.playerParams = playerParams; return retStruct; var retStr = ''; if ( IsArray(arguments.dataValue) ) retStr = ArrayToList(arguments.dataValue,','); else if ( IsSimpleValue(arguments.dataValue) ) retStr = arguments.dataValue; retStr = listChangeDelims(retStr, ',', ',', false); retStr = listRemoveDuplicates(retStr, ',', true); return retStr; var retStr = ''; var dValArr = []; var retArr = []; var i = 1; if ( IsArray(arguments.dataValue) ) dValArr = arguments.dataValue; else if ( IsSimpleValue(arguments.dataValue) ) dValArr = ListToArray(arguments.dataValue, ','); for ( i=1; i <= ArrayLen(dValArr); i++ ) { dValArr[i] = server.CommonSpot.api.unescapeHTML(dValArr[i]); if ( arrayFindNoCase(retArr,dValArr[i]) EQ 0 ) ArrayAppend(retArr, dValArr[i]); } retStr = ArrayToList(retArr,','); return retStr; var retStr = ''; if ( IsArray(arguments.dataValue) ) retStr = ArrayToList(arguments.dataValue,'~'); else if ( IsSimpleValue(arguments.dataValue) ) retStr = arguments.dataValue; retStr = listChangeDelims(retStr, '~', '/', false); // Convert slashes to tildes retStr = listChangeDelims(retStr, '~', ',', false); // Convert commas to tildes retStr = listChangeDelims(retStr, '~', '~', false); // Remove any empty list items return retStr;