Commit 6e811ad3 by NGUYEN HOANG SON

Merge branch 'feature/1.0_check_web_dev' into feature/1.0_check_web_dev_duyen

# Conflicts:
#	abweb/js/operationList/operationList.js
parents e25da2b5 234a1a65
...@@ -292,8 +292,7 @@ ...@@ -292,8 +292,7 @@
COMMON.checkAuth = function (async = true) { COMMON.checkAuth = function (async = true) {
let params = {}; let params = {};
params.sid = COMMON.getSid; params.sid = COMMON.getSid;
var urlPath = ClientData.userInfo_accountPath(); const url = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.AUTH_SESSION;
const url = CONSTANT.URL.CMS.BASE + urlPath + CONSTANT.URL.CMS.API.BASE + CONSTANT.URL.CMS.API.AUTH_SESSION;
COMMON.cmsAjax(url, params, async, null, function () { COMMON.cmsAjax(url, params, async, null, function () {
COMMON.goUrlWithCurrentParams(CONSTANT.PAGE_NAME.LOGIN); COMMON.goUrlWithCurrentParams(CONSTANT.PAGE_NAME.LOGIN);
}); });
...@@ -418,11 +417,11 @@ ...@@ -418,11 +417,11 @@
return SessionStorageUtils.get(CONSTANT.KEYS.conf_apiLoginUrl); return SessionStorageUtils.get(CONSTANT.KEYS.conf_apiLoginUrl);
} }
}, },
conf_checkApiLoginUrl: function (data) { conf_checkApiUrl: function (data) {
if (arguments.length > 0) { if (arguments.length > 0) {
SessionStorageUtils.set(CONSTANT.KEYS.conf_checkApiLoginUrl, data); SessionStorageUtils.set(CONSTANT.KEYS.conf_checkApiUrl, data);
} else { } else {
return SessionStorageUtils.get(CONSTANT.KEYS.conf_checkApiLoginUrl); return SessionStorageUtils.get(CONSTANT.KEYS.conf_checkApiUrl);
} }
}, },
conf_apiResourceDlUrl: function (data) { conf_apiResourceDlUrl: function (data) {
......
...@@ -48,21 +48,28 @@ CONSTANT.REPLY_NO = { ...@@ -48,21 +48,28 @@ CONSTANT.REPLY_NO = {
CONSTANT.URL = { CONSTANT.URL = {
CMS: { CMS: {
// BASE_CMS: 'https://' + location.host + '/checkapi/web/',
BASE: 'http://localhost:8080/acms/',
//BASE: 'https://chatdev2.agentec.jp/acms/',
API: { API: {
BASE: '/checkapi/web/',
ALL_OPERATION_LIST: 'operationListWeb/getOperationList', ALL_OPERATION_LIST: 'operationListWeb/getOperationList',
AUTH_SESSION: 'getSession/checkAuthUser', AUTH_SESSION: 'getSession/checkAuthUser',
OPERATION_VIEW_LOG: 'operationViewLog/saveLog', OPERATION_VIEW_LOG: 'operationViewLog/saveLog',
PASSWORD_CHANGE: 'passwordChangeWeb/', PASSWORD_CHANGE: 'passwordChangeWeb/',
LOGIN: 'webClientLogin/', LOGIN: 'webClientLogin/',
LOGOUT: 'logoutWeb/', LOGOUT: 'logoutWeb/',
DASHBOARD: 'dashboard/',
DASHBOARD_SETTING: 'dashboardSetting/',
SAVE_DASHBOARD_SETTING: 'saveDashboardSetting/',
PUSH_MESSAGE_TEMPLATE: 'pushMessageTemplate/',
OPERATION_SELECT: 'operationSelect/',
NEW_REPORT: 'newReport/',
WORKING_FLOW: 'workingFlow/',
WARNING_WITH_REPORT: 'warningWithReport/',
PUSH_MESSAGE_DETAIL: 'pushMessageDetail/',
PUSH_MESSAGE_LIST: 'pushMessageList/',
SEND_PUSH_MESSAGE: 'sendPushMessage/',
}, },
HTML: { HTML: {
BASE: '/checkapi/web/html/', BASE: 'html/',
TASK_REPORT_LIST: 'getTaskReport/', TASK_REPORT_LIST: 'getTaskReport/',
LIST_REPORT_FORM: 'listReportForm/showReport', LIST_REPORT_FORM: 'listReportForm/showReport',
REPORT_LIST: 'reportList', REPORT_LIST: 'reportList',
...@@ -115,7 +122,7 @@ CONSTANT.KEYS = { ...@@ -115,7 +122,7 @@ CONSTANT.KEYS = {
pushInfo_newMsgNumber: 'pushInfo_newMsgNumber', pushInfo_newMsgNumber: 'pushInfo_newMsgNumber',
conf_apiUrl: 'conf_apiUrl', conf_apiUrl: 'conf_apiUrl',
conf_apiLoginUrl: 'conf_apiLoginUrl', conf_apiLoginUrl: 'conf_apiLoginUrl',
conf_checkApiLoginUrl: 'conf_checkApiLoginUrl', conf_checkApiUrl: 'conf_checkApiUrl',
conf_apiResourceDlUrl: 'conf_apiResourceDlUrl', conf_apiResourceDlUrl: 'conf_apiResourceDlUrl',
// Session :ABookCheck:Char (Y: Yes, N: No) // Session :ABookCheck:Char (Y: Yes, N: No)
serviceOpt_abook_check: 'abook_check', serviceOpt_abook_check: 'abook_check',
......
{ {
"apiUrl" : "http://localhost:8080/acms/{0}/abvapi", "apiUrl" : "http://localhost:8080/acms/{0}/abvapi",
"checkApiLoginUrl" : "http://localhost:8080/acms/{0}/checkapi/web", "checkApiUrl" : "http://localhost:8080/acms/{0}/checkapi/web/",
"apiLoginUrl" : "http://localhost:8080/acms/nuabvapi", "apiLoginUrl" : "http://localhost:8080/acms/nuabvapi",
"apiResourceDlUrl" : "http://localhost:8080/acms/{0}/dl", "apiResourceDlUrl" : "http://localhost:8080/acms/{0}/dl",
"1apiUrl" : "https://chatdev2.agentec.jp/acms/{0}/abvapi", "1apiUrl" : "https://chatdev2.agentec.jp/acms/{0}/abvapi",
"1checkApiLoginUrl" : "https://chatdev2.agentec.jp/acms/{0}/checkapi/web", "1checkApiUrl" : "https://chatdev2.agentec.jp/acms/{0}/checkapi/web/",
"1apiLoginUrl" : "https://chatdev2.agentec.jp/acms/nuabvapi", "1apiLoginUrl" : "https://chatdev2.agentec.jp/acms/nuabvapi",
"1apiResourceDlUrl" : "https://chatdev2.agentec.jp/acms/{0}/dl", "1apiResourceDlUrl" : "https://chatdev2.agentec.jp/acms/{0}/dl",
"bookShelfCount" : 15, "bookShelfCount" : 15,
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
<script type="text/javascript" src="../js/dashboardSetting/dashboard-setting.js"></script> <script type="text/javascript" src="../js/dashboardSetting/dashboard-setting.js"></script>
<script type="text/javascript" src="../js/template/template.js"></script> <script type="text/javascript" src="../js/template/template.js"></script>
<script type="text/javascript" src="../js/dashboard/dashboard.js"></script> <script type="text/javascript" src="../js/dashboard/dashboard.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gasparesganga-jquery-loading-overlay@2.1.7/dist/loadingoverlay.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function(){ $(document).ready(function(){
......
...@@ -22,6 +22,9 @@ ...@@ -22,6 +22,9 @@
<script type="text/javascript" src="../common/js/common.js?__UPDATEID__"></script> <script type="text/javascript" src="../common/js/common.js?__UPDATEID__"></script>
<script type="text/javascript" src="../js/header/header.js?__UPDATEID__"></script> <script type="text/javascript" src="../js/header/header.js?__UPDATEID__"></script>
<script type="text/javascript" src="../js/reportList/reportList.js?__UPDATEID__"></script> <script type="text/javascript" src="../js/reportList/reportList.js?__UPDATEID__"></script>
<script src="https://cdn.jsdelivr.net/npm/gasparesganga-jquery-loading-overlay@2.1.7/dist/loadingoverlay.min.js"></script>
</head> </head>
<body onload="RL.init();"> <body onload="RL.init();">
...@@ -56,8 +59,8 @@ ...@@ -56,8 +59,8 @@
<!-- confirm --> <!-- confirm -->
<div id="includedConfirmModal"></div> <div id="includedConfirmModal"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="text/javascript" src="../common/js/web/app.js?__UPDATEID__"></script> <script type="text/javascript" src="../common/js/newdash/app.js?__UPDATEID__"></script>
<script type="text/javascript" src="../common/js/web/common.js?__UPDATEID__"></script> <script type="text/javascript" src="../common/js/newdash/common.js?__UPDATEID__"></script>
</body> </body>
</html> </html>
...@@ -27,7 +27,7 @@ DASHBOARD.defaultDashboard = { ...@@ -27,7 +27,7 @@ DASHBOARD.defaultDashboard = {
pushMesage: 0, pushMesage: 0,
}; };
DASHBOARD.getDataApiUrl = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + 'dashboard/'; DASHBOARD.getDataApiUrl = COMMON.format(ClientData.conf_checkApiUrl(), urlPath) + CONSTANT.URL.CMS.API.DASHBOARD;
/** /**
* Call api get data * Call api get data
......
...@@ -17,7 +17,7 @@ DashboardSetting.elementItems = { ...@@ -17,7 +17,7 @@ DashboardSetting.elementItems = {
dashboardHome: { id: 'settingDashboardHome', name: 'chk-home', enabled: false }, dashboardHome: { id: 'settingDashboardHome', name: 'chk-home', enabled: false },
}; };
DashboardSetting.baseApiUrl = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + 'dashboardSetting/'; DashboardSetting.baseApiUrl = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.DASHBOARD_SETTING;
/** /**
* default setting * default setting
...@@ -122,7 +122,7 @@ DashboardSetting.saveSetting = function () { ...@@ -122,7 +122,7 @@ DashboardSetting.saveSetting = function () {
const element = DashboardSetting.elementItems[key]; const element = DashboardSetting.elementItems[key];
param[key] = element.enabled ? 1 : 0; param[key] = element.enabled ? 1 : 0;
} }
const url = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + 'saveDashboardSetting/'; const url = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.SAVE_DASHBOARD_SETTING;
COMMON.cmsAjax(url, param, false, function (json) { COMMON.cmsAjax(url, param, false, function (json) {
DashboardSetting.closeModal(); DashboardSetting.closeModal();
if (DashboardSetting.changeSettingCallback && typeof DashboardSetting.changeSettingCallback === 'function') { if (DashboardSetting.changeSettingCallback && typeof DashboardSetting.changeSettingCallback === 'function') {
......
...@@ -20,7 +20,7 @@ HEADER.processLogout = function() { ...@@ -20,7 +20,7 @@ HEADER.processLogout = function() {
var params = { var params = {
sid: ClientData.userInfo_sid() sid: ClientData.userInfo_sid()
}; };
const url = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + CONSTANT.URL.CMS.API.LOGOUT; const url = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.LOGOUT;
COMMON.cmsAjax(url, params, false, COMMON.cmsAjax(url, params, false,
function (data) { function (data) {
if (data.httpStatus == CONSTANT.HTTP_STATUS.OK) { if (data.httpStatus == CONSTANT.HTTP_STATUS.OK) {
......
...@@ -185,9 +185,8 @@ LOGIN.processLogin = function() { ...@@ -185,9 +185,8 @@ LOGIN.processLogin = function() {
if (ClientData.userInfo_sid_local()) { if (ClientData.userInfo_sid_local()) {
params.previousSid = ClientData.userInfo_sid_local(); params.previousSid = ClientData.userInfo_sid_local();
} }
// Get url to login // Get url to login
url = CONSTANT.URL.CMS.BASE + accountPath + CONSTANT.URL.CMS.API.BASE + CONSTANT.URL.CMS.API.LOGIN; url = COMMON.format(ClientData.conf_checkApiUrl(), accountPath) + CONSTANT.URL.CMS.API.LOGIN;
COMMON.cmsAjax(url, params, true, function(data) { COMMON.cmsAjax(url, params, true, function(data) {
LOGIN.userinfo_sid = data.sid; LOGIN.userinfo_sid = data.sid;
...@@ -335,7 +334,7 @@ LOGIN.changePasswordProcess = function() { ...@@ -335,7 +334,7 @@ LOGIN.changePasswordProcess = function() {
params.language = I18N.getCurrentLanguage(); params.language = I18N.getCurrentLanguage();
} }
const url = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + CONSTANT.URL.CMS.API.PASSWORD_CHANGE; const url = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.PASSWORD_CHANGE;
COMMON.cmsAjax(url, params, false, function(result) { COMMON.cmsAjax(url, params, false, function(result) {
if (result.httpStatus == '200') { if (result.httpStatus == '200') {
...@@ -548,7 +547,7 @@ LOGIN.ready = function() { ...@@ -548,7 +547,7 @@ LOGIN.ready = function() {
// set api connection // set api connection
ClientData.conf_apiUrl(siteUrl + "{0}/abvapi"); ClientData.conf_apiUrl(siteUrl + "{0}/abvapi");
ClientData.conf_apiLoginUrl(siteUrl + "nuabvapi"); ClientData.conf_apiLoginUrl(siteUrl + "nuabvapi");
ClientData.conf_checkApiLoginUrl(siteUrl + "checkapi/web"); ClientData.conf_checkApiUrl(siteUrl + "checkapi/web");
ClientData.conf_apiResourceDlUrl(siteUrl + "{0}/dl"); ClientData.conf_apiResourceDlUrl(siteUrl + "{0}/dl");
// set account setting value // set account setting value
ClientData.userInfo_accountPath(urlPath); ClientData.userInfo_accountPath(urlPath);
...@@ -561,7 +560,7 @@ LOGIN.ready = function() { ...@@ -561,7 +560,7 @@ LOGIN.ready = function() {
} else { } else {
// conf parameter set // conf parameter set
ClientData.conf_apiUrl(sysSettings.apiUrl); ClientData.conf_apiUrl(sysSettings.apiUrl);
ClientData.conf_checkApiLoginUrl(sysSettings.checkApiLoginUrl); ClientData.conf_checkApiUrl(sysSettings.checkApiUrl);
ClientData.conf_apiLoginUrl(sysSettings.apiLoginUrl); ClientData.conf_apiLoginUrl(sysSettings.apiLoginUrl);
ClientData.conf_apiResourceDlUrl(sysSettings.apiResourceDlUrl); ClientData.conf_apiResourceDlUrl(sysSettings.apiResourceDlUrl);
} }
......
...@@ -20,7 +20,7 @@ NotificationSelect.getNotificationSelectData = function (callback) { ...@@ -20,7 +20,7 @@ NotificationSelect.getNotificationSelectData = function (callback) {
let param = { let param = {
sid: COMMON.getSid(), sid: COMMON.getSid(),
}; };
const url = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + 'pushMessageTemplate/'; const url = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.PUSH_MESSAGE_TEMPLATE;
COMMON.cmsAjax(url, param, false, function (json) { COMMON.cmsAjax(url, param, false, function (json) {
if (callback) { if (callback) {
callback(json); callback(json);
......
...@@ -22,7 +22,7 @@ OperationSelect.getOperationSelectData = function (callback) { ...@@ -22,7 +22,7 @@ OperationSelect.getOperationSelectData = function (callback) {
let param = { let param = {
sid: COMMON.getSid(), sid: COMMON.getSid(),
}; };
const url = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + 'operationSelect/'; const url = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.OPERATION_SELECT;
COMMON.cmsAjax(url, param, false, function (json) { COMMON.cmsAjax(url, param, false, function (json) {
if (callback) { if (callback) {
callback(json); callback(json);
......
...@@ -47,10 +47,10 @@ PICKUP.defaultPickupList = { ...@@ -47,10 +47,10 @@ PICKUP.defaultPickupList = {
operationList:[] operationList:[]
} }
PICKUP.baseApiUrl = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE ; PICKUP.baseApiUrl = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath);
PICKUP.getNewReportListApiUrl = PICKUP.baseApiUrl + 'newReport/'; PICKUP.getNewReportListApiUrl = PICKUP.baseApiUrl + CONSTANT.URL.CMS.API.NEW_REPORT;
PICKUP.getContinuousWorkListApiUrl = PICKUP.baseApiUrl + 'workingFlow/'; PICKUP.getContinuousWorkListApiUrl = PICKUP.baseApiUrl + CONSTANT.URL.CMS.API.WORKING_FLOW;
PICKUP.getReportWithWarningsListApiUrl = PICKUP.baseApiUrl + 'warningWithReport/'; PICKUP.getReportWithWarningsListApiUrl = PICKUP.baseApiUrl + CONSTANT.URL.CMS.API.WARNING_WITH_REPORT;
/** /**
* Call get new report list api get data * Call get new report list api get data
......
var PushMessageDetail = {}; var PushMessageDetail = {};
PushMessageDetail.baseApiUrl = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + 'pushMessageDetail/'; PushMessageDetail.baseApiUrl = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.PUSH_MESSAGE_DETAIL;
/** /**
* dummy json for test * dummy json for test
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* @since cms:1.4.3.2&1.4.3.3 web:1.0 * @since cms:1.4.3.2&1.4.3.3 web:1.0
*/ */
var PushMessageList = {}; var PushMessageList = {};
PushMessageList.baseApiUrl = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + 'pushMessageList/'; PushMessageList.baseApiUrl = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + '';
/** /**
* Init when html onload * Init when html onload
......
...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
var RL = {}; var RL = {};
RL.init = function() { RL.init = function() {
COMMON.checkAuth(false); console.log("kdh check ok");
// COMMON.checkAuth(true);
RL.loadCommon(); RL.loadCommon();
RL.initTaskReportList(); RL.initTaskReportList();
...@@ -25,7 +26,7 @@ RL.initTaskReportList = function() { ...@@ -25,7 +26,7 @@ RL.initTaskReportList = function() {
params.sid = COMMON.getSid(); params.sid = COMMON.getSid();
params.operationId = sessionStorage.OL_operationId; params.operationId = sessionStorage.OL_operationId;
params.returnUrl = CONSTANT.URL.WEB.BASE + CONSTANT.URL.WEB.OPERATION_LIST; params.returnUrl = CONSTANT.URL.WEB.BASE + CONSTANT.URL.WEB.OPERATION_LIST;
let url = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.HTML.BASE + CONSTANT.URL.CMS.HTML.TASK_REPORT_LIST; let url = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.HTML.BASE + CONSTANT.URL.CMS.HTML.TASK_REPORT_LIST;
// COMMON.postCommunication(url, params); // COMMON.postCommunication(url, params);
$("#task-list").load(url, params); $("#task-list").load(url, params);
// COMMON.cmsAjax(url, params, false, function(result) { // COMMON.cmsAjax(url, params, false, function(result) {
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
*/ */
var SendMessage = {}; var SendMessage = {};
SendMessage.baseApiUrl = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + 'sendPushMessage/'; SendMessage.baseApiUrl = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.SEND_PUSH_MESSAGE;
/** /**
* Get input content * Get input content
......
...@@ -77,7 +77,7 @@ SETTINGS.dspPwdUpd1_Click = function(e) { ...@@ -77,7 +77,7 @@ SETTINGS.dspPwdUpd1_Click = function(e) {
language: I18N.getCurrentLanguage(), language: I18N.getCurrentLanguage(),
appId: 4 appId: 4
}; };
const url = CONSTANT.URL.CMS.BASE + ClientData.userInfo_accountPath() + CONSTANT.URL.CMS.API.BASE + CONSTANT.URL.CMS.API.PASSWORD_CHANGE; const url = COMMON.format(ClientData.conf_checkApiUrl(), ClientData.userInfo_accountPath) + CONSTANT.URL.CMS.API.PASSWORD_CHANGE;
COMMON.cmsAjax(url, params, false, COMMON.cmsAjax(url, params, false,
SETTINGS.avwCmsApi_passwordChange_success, SETTINGS.avwCmsApi_passwordChange_success,
SETTINGS.avwCmsApi_passwordChange_fail); SETTINGS.avwCmsApi_passwordChange_fail);
......
...@@ -25,6 +25,7 @@ modify_api() ...@@ -25,6 +25,7 @@ modify_api()
"apiUrl" : "$URI_PREFIX/{0}/abvapi", "apiUrl" : "$URI_PREFIX/{0}/abvapi",
"apiLoginUrl" : "$URI_PREFIX/nuabvapi", "apiLoginUrl" : "$URI_PREFIX/nuabvapi",
"apiResourceDlUrl" : "$URI_PREFIX/{0}/dl", "apiResourceDlUrl" : "$URI_PREFIX/{0}/dl",
"checkApiUrl" : "$URI_PREFIX/{0}/checkapi/web/",
"bookShelfCount" : 15, "bookShelfCount" : 15,
"bookListCount" : 15, "bookListCount" : 15,
"screenlockTimeDefault" : 30, "screenlockTimeDefault" : 30,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment