spec/inc/functions.cfm
2025-06-19 16:31:34 +03:00

185 lines
5.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<cfscript>
/* Все глобальные функции экспортированы в request scope */
function plain2htm(s) {
return replace(replace(s, chr(13),'',"ALL"),chr(10),'<br/>', "ALL");
}
request.plain2htm = plain2htm;
function htm2plain(s) {
return replaceNoCase(s, '<br/>', '#chr(13)##chr(10)#', "ALL");
}
request.htm2plain = htm2plain;
function cleanHtm(s) {
return replaceList(s, '<,>,"', '&lt;,&gt;,&quot;');
}
request.cleanHtm = cleanHtm;
function clean4CDATA(s) {
LF = chr(10);
return replaceNoCase(replaceList(s, '[,]', '&91;,&93;'),"<br>",LF,"ALL");
}
request.clean4CDATA = clean4CDATA;
function numFmt(num, decimalPlaces = 0){
var sFormat = ",";
if (decimalPlaces GT 0) {sFormat = sFormat & "." & repeatString("0", decimalPlaces);}
return replace(NumberFormat(num, sFormat), ",", " ", "ALL");
}
request.numFmt = numFmt;
function nFmt(num, decimalPlaces = 2){
if (num EQ 0) return "";
return numFmt(num, decimalPlaces);
}
request.nFmt = nFmt;
function dateFmt(date, sFormat = 'DD.MM.YYYY'){
return dateFormat(date, sFormat);
}
request.dateFmt = dateFmt;
function dateTimeFmt(date, sDateFormat = 'DD.MM.YYYY', sTimeFormat='HH:MM'){
return dateFormat(date, sDateFormat) & ' ' & timeFormat(date, sTimeFormat);
}
request.dateTimeFmt = dateTimeFmt;
function timeFmt(date, sFormat = 'HH:MM'){
return timeFormat(date, sFormat);
}
request.timeFmt = timeFmt;
function usrAuthenticated() {
return request.usr_id GT 0 AND NOT (request.usr_id EQ request.ANONYMOUS_USR_ID);
}
request.usrAuthenticated = usrAuthenticated;
function filterOn(filter) {
return (isStruct(filter) AND NOT structIsEmpty(filter));
}
request.filterOn = filterOn;
function stripWhiteSpace(sNumber) {
function hexToChar( required string hexEncoded ) {
return( chr( inputBaseN( hexEncoded, 16 ) ) );/*https://www.bennadel.com/blog/4516-which-whitespace-characters-does-trim-remove-in-coldfusion.htm*/
}
return reReplace(sNumber, "[[:space:]"
& hexToChar('00A0') & hexToChar('180E')
& hexToChar('2000')& hexToChar('2001')& hexToChar('2002')& hexToChar('2003')& hexToChar('2004') & hexToChar('2005')
& hexToChar('2006')& hexToChar('2007')& hexToChar('2008')& hexToChar('2009')& hexToChar('200A')
& hexToChar('200B') & hexToChar('202F') & hexToChar('205F') & hexToChar('3000') & hexToChar('FEFF') &
"]", "", "ALL");
/*return reReplace(sNumber, "[[:space:]"& chr(0x00A0) & "]", "", "ALL");*/
}
request.stripWhiteSpace = stripWhiteSpace;
/*
// never used
function cleanNumber(sNumber) {
var s = reReplace(sNumber, "[[:space:]]", "", "ALL");
if ( find(",", s) ) { //watch argument order!!!
// assume Russian format with decimal comma and spaces for thousand separator
return replace(s, ",", ".");
} else {
// assume English format with decimal point and commas for thousand separator
return replace(s, ",", "", "ALL");
}
}
request.cleanNumber = cleanNumber;
*/
/*https://cflib.org/udf/queryColumnToArray*/
/**
* Takes a selected column of data from a query and converts it into an array.
*
* @param query The query to scan. (Required)
* @param column The name of the column to return data from. (Required)
* @return Returns an array.
* @author Peter J. Farrell (pjf@maestropublishing.com)
* @version 1, July 22, 2005
*/
function queryColumnToArray(qry, column) {
var arr = arrayNew(1);
var ii = "";
var loop_len = arguments.qry.recordcount;
for (ii=1; ii lte loop_len; ii=ii+1) {
arrayAppend(arr, arguments.qry[arguments.column][ii]);
}
return arr;
}
request.queryColumnToArray = queryColumnToArray;
/* ************************************* */
function loginPasswordPolicyCheck(usr_id, login, passwd, passwd2) {
msg = "";
// для старого логина длина не проверяется, все равно ничего не поделаешь
if (NOT(usr_id GT 0) AND len(login) LE 3) {
msg="Слишком короткий логин (минимальная длина логина 3 символа)";
} else {
if (passwd NEQ passwd2) {
msg="Пароль и подтверждение не совпадают";
} else {
if (len(passwd) LT "8") msg="Слишком короткий пароль (минимальная длина пароля 8 символов)";
}
}
return msg;
}
request.loginPasswordPolicyCheck = loginPasswordPolicyCheck;
function i18(label,label_en=label) {
//примитивная 2-язычная версия
if (request.language EQ 'en') {
return label_en;
} else {
return label;
};
}
request.i18 = i18;
function passwordHashCreate(password) {
return GenerateArgon2Hash('#ARGUMENTS.password#', 'argon2id', 1, 16000, 2);
}
request.passwordHashCreate = passwordHashCreate;
function passwordHashCheck(password, passwordHash) {
/*dirty hack for Lucee 6*/
try {
return evaluate("Argon2CheckHash('#ARGUMENTS.password#', ARGUMENTS.passwordHash, 'argon2id')");
} catch(e) {} // for lucee 5 compatibility
return evaluate("Argon2CheckHash('#ARGUMENTS.password#', ARGUMENTS.passwordHash)"); //lucee 6
}
request.passwordHashCheck = passwordHashCheck;
function skuCode(area_code="", abstract_service_code="") {
var s="#arguments[1]#.#arguments[2]#";
if (arrayLen(arguments) GE 3) {
if (len(arguments[3]) GT 0) {
s="#s#.#arguments[3]#";
} else {
s="#s#.0";
};
};
if (arrayLen(arguments) GE 4) {
if (len(arguments[4]) GT 0) {
s="#s#.#arguments[4]#"
}
};
if (arrayLen(arguments) GE 5) {
var pricingModelSuffix=arguments[5];
s="#s#-#pricingModelSuffix#";
}
return s;
}
request.skuCode = skuCode;
function roundSafe(a, precision) {
return (isNumeric(a) AND isNumeric(precision)) ? round(a,precision) : a;
}
request.roundSafe = roundSafe;
</cfscript>