Thông báo: Nâng cấp EzyPlatform lên 0.3.6
EzyPlatform 0.3.6 được nâng cấp và bổ sung thêm các tính năng:
Cập nhật tính năng import người dùng từ tập tin.
Nâng cấp phiên bản các thư viện.
Cho phép một admin xem được toàn bộ media hay không.
Cập nhật lớp PaginationParameters.
Bổ sung ngôn ngữ tiếng Trung.
Cập nhật lớp Numbers.
Bổ sung phương thức javascript flattenObject.
Bổ sung phương thức javascript để đọc tập tin csv.
Bổ sung lớp LocalDateTimeRangeModel.
Cập nhật tính năng import người dùng từ tập tin
Cho phép cập nhật thông tin địa chỉ của người dùng.
Nâng cấp phiên bản các thư viện
Nâng cấp các thư viện thuộc hệ sinh thái ezyfox lên 1.2.9
Cho phép một admin xem được toàn bộ media hay không
Mặc định một quản trị viên sẽ không được phép truy cập vào toàn bộ media mà phải được cấp quyền.
Cập nhật lớp PaginationParameters
Bổ sung 2 hàm mới:
public static String makeOrderBy(
SortOrder sortOrder,
boolean nextPage,
String[] entityNames,
String[] fieldNames
)
public static String makePaginationCondition(
SortOrder sortOrder,
boolean nextPage,
String[] entityNames,
String[] fieldNames,
String[] parameterNames
)
Để cho phép truyền tên các tham số và entity thay vì mặc định là e.[field name].
Bổ sung ngôn ngữ tiếng Trung
Đã bổ sung ngôn ngữ tiếng trung cho phần core cho giao diện quản trị.
Cập nhật lớp Numbers
Bổ sung thêm hai hàm mới:
public static String toRandomText(long number, int minLength) {
String suffix = String.valueOf(number);
if (suffix.length() >= minLength - 1) {
return "0" + suffix;
}
int randomLength = minLength - suffix.length() - 1;
if (randomLength > 9) {
randomLength = 9;
}
StringBuilder randomNumber = new StringBuilder();
for (int i = 0; i < randomLength; ++i) {
randomNumber.append(
ThreadLocalRandom.current().nextInt(1, 9)
);
}
int zeroLength = minLength - randomLength - suffix.length() - 1;
if (zeroLength > 0) {
for (int i = 0; i < zeroLength; ++i) {
randomNumber.append("0");
}
}
return String.valueOf(randomLength) + randomNumber + suffix;
}
public static long fromRandomText(String randomText) {
int randomLength = Integer.parseInt(
randomText.substring(0, 1)
);
if (randomLength == 0) {
return Long.parseLong(randomText);
}
return Long.parseLong(
randomText.substring(randomLength + 1)
);
}
Để cho phép tạo ra một chuỗi ngẫu nhiên có kiểm soát nhằm mục đích giữ nguyên được ý nghĩa của một chuỗi số với độ dài tối thiểu.
Bổ sung phương thức javascript flattenObject
Cho phép làm phẳng các đối tượng javascript lồng nhau thằng một đối tượng, ví dụ:
{
"user": {
"id": 1,
"name": "Dzung",
"address": {
"street": "Do Duc Duc",
"city": "Ha Noi",
"country": {
"name": "Viet Nam",
"code": "VN"
}
}
}
}
Sẽ được làm phẳng thông qua hàm flattenObject để trở thành:
{
"user.id": 1,
"user.name": "Dzung",
"user.address.street": "Do Duc Duc",
"user.address.city": "Ha Noi",
"user.address.country.name": "Viet Nam",
"user.address.country.code": "VN"
}
Bổ sung phương thức javascript để đọc tập tin csv
Bổ sung thêm các hàm:
ezyadmin.onCsvFileChanged = function(input, callback, includeFirstLine) {
var file = input.files[0];
if (file) {
var reader = new FileReader();
reader.onload = function(e) {
var content = e.target.result;
var rowsList = ezyadmin.parseCsvContent(
content
);
callback(file, rowsList);
};
reader.readAsText(file);
}
}
ezyadmin.parseCsvContent = function(content, includeFirstLine) {
var lines = content.split('n');
var rows = [];
if (lines.length) {
var firstLine = lines[0];
var commas = firstLine.indexOf(',') >= 0 ? ',' : ';';
if (!includeFirstLine) {
lines = lines.slice(1);
}
lines.forEach((line) => {
rows.push(ezyadmin.readCsvLine(line, commas));
});
}
return rows;
}
ezyadmin.readCsvLine = function (line, commas) {
var cells = [];
var cell = '';
var strs = line.split(commas);
for (var i = 0; i < strs.length; ++i) {
var str = strs[i].trim();
if (cell.startsWith('"')) {
if (str.endsWith('"')) {
cell += strs[i].slice(0, strs[i].lastIndexOf('"') + 1);
cell = cell.slice(1, cell.length - 1);
cells.push(cell.trim());
cell = '';
} else {
cell += strs[i] + commas;
}
} else {
if (str.startsWith('"')) {
cell = strs[i].slice(strs[i].indexOf('"'));
} else {
cells.push(str);
cell = '';
}
}
}
return cells;
};
Để đọc và bóc tách dữ liệu từ tập tin csv.
Bổ sung lớp LocalDateTimeRangeModel
Lớp này cho phép phân tích các khoảng thời gian từ dạng chuỗi sang dạng LocalDateTime.
Posted date:
1734271857000