31 Commits
dev ... dev_DTD

Author SHA1 Message Date
cc12e79986 Update 'views/config/reset.tpl' 2022-03-07 07:58:51 +00:00
e4829d7f78 update multi language login site
CR: sonhh (fake)
2021-09-23 11:38:22 +07:00
61e82f68ca update alert when reset device failed
CR: sonhh (fake)
2021-09-20 15:11:00 +07:00
66357b25d5 task: encode RSA data sync to server
CR: sonhh (fake)
2021-09-09 17:08:56 +07:00
a27bf65303 update multi language Login site 2021-08-30 17:21:11 +07:00
f9f32878cd db: empty list_management 2021-08-27 10:38:14 +07:00
22f6d0c158 bug: remove default config server_api, device_id 2021-08-27 10:29:54 +07:00
f41cb233c5 fix commit 14467d53b5 2021-08-26 17:11:23 +07:00
14467d53b5 Bug: catch excrption request to engine fail
CR: sonhh (fake)
2021-08-26 16:51:36 +07:00
b207d54462 Feature: auto get server_api & device_id from engine.json
CR: sonhh (fake)
2021-08-26 11:34:27 +07:00
6c4190372e Feature: update language file for en, ja
CR: sonhh (fake)
2021-08-25 17:35:28 +07:00
0b50249cdf Feature: auto update 512 feature statistic
CR: sonhh (fake)
2021-08-23 15:27:25 +07:00
eb88996797 Feature: multi language (VI, EN, JA)
CR: sonh (fake)
2021-08-23 15:19:49 +07:00
7057e5b35c fix bug confidence 2021-06-17 17:43:44 +07:00
5598e1f3ad auto sync list management from server 2021-06-09 13:36:11 +07:00
1e3f0bef13 fix filters multi people 2021-06-07 13:55:54 +07:00
821cf9463d fix send logs realtime 2021-06-04 11:24:03 +07:00
08266f3a5f update save serverKey, staff_id 2021-06-03 09:46:52 +07:00
9ceb3567c9 Update 'controllers/ApiController.php'
fix bug regenfeature
2021-05-19 10:31:09 +00:00
2c722a1ee9 Merge branch 'dev_DTD' of http://gitea.beetai.com/dongpd/BiFace_Server_Lite into dev_DTD 2021-04-26 14:23:04 +07:00
70d60ff51e fix bug token - version 2021-04-26 14:22:57 +07:00
c02733be18 Update 'config/params.php' 2021-04-26 03:48:02 +00:00
924d23dad0 fix bug confidence 2021-04-26 10:24:53 +07:00
b006af4e1f update confidence + version 2021-04-23 16:58:19 +07:00
1b1162f3c2 get config to gen 512 feature 2021-04-20 10:33:22 +07:00
bf93f6c9d0 update version 2021-03-15 09:45:50 +07:00
aaa6de6f9c fix bug reset thiet bi 2021-03-03 14:08:46 +07:00
e45e08f372 upda ngon ngu tieng Viet cho nhung cho tieng Anh 2021-02-18 17:44:18 +07:00
c353c25abf fix bug idStaff co dau cach 2021-02-04 17:59:25 +07:00
92541936d1 hien thi anh mau moi nhat 2021-01-27 10:26:05 +07:00
6d87d47d68 update new feature 2021-01-22 16:16:18 +07:00
45 changed files with 1623 additions and 576 deletions

View File

@@ -3,5 +3,6 @@
return [ return [
'adminEmail' => 'admin@example.com', 'adminEmail' => 'admin@example.com',
"maxLogs" => 100000, "maxLogs" => 100000,
"maxPicture" => 2 "maxPicture" => 9999,
"version" => "1.0.7"
]; ];

View File

@@ -78,15 +78,15 @@ class ApiController extends Controller {
"Staff" => $post["id"], "Staff" => $post["id"],
"Time" => $time, "Time" => $time,
"Image" => $fileName, "Image" => $fileName,
"Confidence" => strval($post["confidence"]) "Confidence" => json_encode($post["confidence"])
]); ]);
$server_ip = \app\models\SyncUrl::findOne(['key_config' => 'server_api']); $server_ip = \app\models\SyncUrl::findOne(['key_config' => 'server_api']);
$ip = "https://dev-dc.beetai.com"; $ip = "https://dev-dc.beetai.com";
if ($server_ip) if ($server_ip)
$ip = $server_ip->data; $ip = $server_ip->data;
if ($this->is_connected($ip) && $logs) { if ($this->is_connected() && $logs) {
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']); $device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
$id_camera = 209; $id_camera = 0;
if ($device_id) if ($device_id)
$id_camera = intval($device_id->data); $id_camera = intval($device_id->data);
$logsInfo = CaptureLogs::findOne($logs); $logsInfo = CaptureLogs::findOne($logs);
@@ -95,17 +95,21 @@ class ApiController extends Controller {
$token = \app\models\SyncUrl::findOne(['key_config' => 'token']); $token = \app\models\SyncUrl::findOne(['key_config' => 'token']);
if ($token) if ($token)
$tk = $token->data; $tk = $token->data;
$res = json_decode(file_get_contents($ip . "/api/oem/face_recognition?token=" . $tk, false, stream_context_create([ $data = [];
$data[] = strval($id_camera); //camera_id
$data[] = date("Y-m-d H:i:s", $time); //frametime
$data[] = $staffInfo ? strval($staffInfo->code) : "0"; //idCard
$data[] = $staffInfo ? $staffInfo->staff_id : ""; //idObject
$data[] = "123"; //person_id
$data[] = "+7"; //timezone
$text = implode("|", $data);
$res = json_decode(file_get_contents($ip . "/api/box/face_recognition_auth_v2?token=" . $tk, false, stream_context_create([
'http' => [ 'http' => [
'header' => "Content-Type: application/json", 'header' => "Content-Type: application/json",
'method' => "POST", 'method' => "POST",
'content' => json_encode([ 'content' => json_encode([
'image' => base64_encode(file_get_contents("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName)), 'image' => base64_encode(file_get_contents("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName)),
'camera_id' => strval($id_camera), 'data' => common::rsaEncode($text)
'frametime' => date("Y-m-d H:i:s", $time),
'idCard' => $staffInfo ? strval($staffInfo->code) : "0",
"person_id" => "123",
"timezone" => "+7"
]) ])
] ]
])), true); ])), true);
@@ -124,17 +128,30 @@ class ApiController extends Controller {
$allFeatures = []; $allFeatures = [];
foreach ($listManagement as $key => $value) { foreach ($listManagement as $key => $value) {
$features = json_decode($value->image, true); $features = json_decode($value->image, true);
$f = []; // $f = [];
// foreach ($features as $k => $v) {
// $f[] = $v['features'];
// if (isset($v['features512']))
// if (count($v['features512']))
// $f[] = $v['features512'];
// }
// $allFeatures[] = [
// "id" => $value->id,
// "name" => $this->convert_vi_to_en($value->name),
// "features" => $f
// ];
$feature1 = $feature2 = [];
foreach ($features as $k => $v) { foreach ($features as $k => $v) {
$f[] = $v['features']; $feature1[] = $v['features'];
if (isset($v['features512'])) if (isset($v['features512']))
if (count($v['features512'])) if (count($v['features512']))
$f[] = $v['features512']; $feature2[] = $v['features512'];
} }
$allFeatures[] = [ $allFeatures[] = [
"id" => $value->id, "id" => $value->id,
"name" => $this->convert_vi_to_en($value->name), "name" => $this->convert_vi_to_en($value->name),
"features" => $f "feature1" => $feature1,
"feature2" => $feature2
]; ];
} }
Yii::$app->response->format = "json"; Yii::$app->response->format = "json";
@@ -223,7 +240,7 @@ class ApiController extends Controller {
$str = preg_replace("/(Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ)/", "U", $str); $str = preg_replace("/(Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ)/", "U", $str);
$str = preg_replace("/(Ỳ|Ý|Ỵ|Ỷ|Ỹ)/", "Y", $str); $str = preg_replace("/(Ỳ|Ý|Ỵ|Ỷ|Ỹ)/", "Y", $str);
$str = preg_replace("/(Đ)/", "D", $str); $str = preg_replace("/(Đ)/", "D", $str);
//$str = str_replace(" ", "-", str_replace("&*#39;","",$str)); //$str = str_replace(" ", "-", str_replace("&*#39;","",$str));
return $str; return $str;
} }
@@ -235,6 +252,8 @@ class ApiController extends Controller {
public function actionAutoGenFeature() { public function actionAutoGenFeature() {
Yii::$app->response->format = "json"; Yii::$app->response->format = "json";
if (!$this->check512())
return ["status" => false];
$updating = \app\models\SyncUrl::findOne(['key_config' => 'updating']); $updating = \app\models\SyncUrl::findOne(['key_config' => 'updating']);
if (!$updating) { if (!$updating) {
$model = new \app\models\SyncUrl(); $model = new \app\models\SyncUrl();
@@ -244,13 +263,21 @@ class ApiController extends Controller {
]); ]);
$updating = \app\models\SyncUrl::findOne(['key_config' => 'updating']); $updating = \app\models\SyncUrl::findOne(['key_config' => 'updating']);
} }
$currentCache = json_decode(@file_get_contents("http://localhost:2305/current-cache"), true);
if ($updating->data === "true") { if ($updating->data === "true") {
$txt = "\n" . date("H:i:s d/m/Y") . " " . "updating"; if ($currentCache['n_128'] == $currentCache['n_512']) {
file_put_contents(date('Ymd') . "_logs.txt", $txt, FILE_APPEND); $updating->data = "false";
return ["status" => false]; $updating->save();
$txt = "\n" . date("H:i:s d/m/Y") . " " . "success";
file_put_contents(date('Ymd') . "_logs.txt", $txt, FILE_APPEND);
return ["status" => false];
} else {
$txt = "\n" . date("H:i:s d/m/Y") . " " . "updating";
file_put_contents(date('Ymd') . "_logs.txt", $txt, FILE_APPEND);
return ["status" => false];
}
} }
$currentCache = json_decode(file_get_contents("http://localhost:2305/current-cache"), true);
if ($currentCache['n_128'] == $currentCache['n_512']) { if ($currentCache['n_128'] == $currentCache['n_512']) {
$txt = "\n" . date("H:i:s d/m/Y") . " " . "success"; $txt = "\n" . date("H:i:s d/m/Y") . " " . "success";
file_put_contents(date('Ymd') . "_logs.txt", $txt, FILE_APPEND); file_put_contents(date('Ymd') . "_logs.txt", $txt, FILE_APPEND);
@@ -271,12 +298,15 @@ class ApiController extends Controller {
foreach ($images as $k => $v) { foreach ($images as $k => $v) {
if (!isset($v['features512']) || (isset($v['features512']) && count($v['features512']) == 0)) { if (!isset($v['features512']) || (isset($v['features512']) && count($v['features512']) == 0)) {
$start = $this->getCurrentTime(); $start = $this->getCurrentTime();
$features = json_decode(common::requestToEngine("/get-feature", [ $features = common::requestToEngine("/get-feature", [
"image_paths" => [ "image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $v['url'], "type" => "raw"] ["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $v['url'], "type" => "raw"]
], ],
"type" => "512" "type" => "512"
]), true); ]);
if (!$features['status'])
return ["status" => false];
$features = json_decode($features['data'], true);
$finish = $this->getCurrentTime(); $finish = $this->getCurrentTime();
$temp[] = round(($finish - $start), 4); $temp[] = round(($finish - $start), 4);
$v['features512'] = $features['results'][0]['feature512']; $v['features512'] = $features['results'][0]['feature512'];
@@ -296,7 +326,7 @@ class ApiController extends Controller {
} }
} }
file_get_contents("http://localhost:2305/update-feature"); @file_get_contents("http://localhost:2305/update-feature");
$updating->data = "false"; $updating->data = "false";
$updating->save(); $updating->save();
return ["status" => true]; return ["status" => true];
@@ -310,7 +340,7 @@ class ApiController extends Controller {
if ($server_ip) if ($server_ip)
$ip = $server_ip->data; $ip = $server_ip->data;
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']); $device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
$id_camera = 209; $id_camera = 0;
if ($device_id) if ($device_id)
$id_camera = intval($device_id->data); $id_camera = intval($device_id->data);
$ls = CaptureLogs::find()->andWhere(['sync_status' => null])->all(); $ls = CaptureLogs::find()->andWhere(['sync_status' => null])->all();
@@ -321,17 +351,21 @@ class ApiController extends Controller {
$tk = $token->data; $tk = $token->data;
foreach ($ls as $key => $value) { foreach ($ls as $key => $value) {
$staffInfo = ListManagement::findOne($value->staff_id); $staffInfo = ListManagement::findOne($value->staff_id);
$res = json_decode(file_get_contents($ip . "/api/oem/face_recognition?token=" . $tk, false, stream_context_create([ $data = [];
$data[] = strval($id_camera); //camera_id
$data[] = date("Y-m-d H:i:s", $value->time); //frametime
$data[] = $staffInfo ? strval($staffInfo->code) : "0"; //idCard
$data[] = $staffInfo ? $staffInfo->staff_id : ""; //idObject
$data[] = "123"; //person_id
$data[] = "+7"; //timezone
$text = implode("|", $data);
$res = json_decode(file_get_contents($ip . "/api/box/face_recognition_auth_v2?token=" . $tk, false, stream_context_create([
'http' => [ 'http' => [
'header' => "Content-Type: application/json", 'header' => "Content-Type: application/json",
'method' => "POST", 'method' => "POST",
'content' => json_encode([ 'content' => json_encode([
'image' => base64_encode(file_get_contents("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value->image)), 'image' => base64_encode(file_get_contents("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value->image)),
'camera_id' => strval($id_camera), 'data' => common::rsaEncode($text)
'frametime' => date("Y-m-d H:i:s", $value->time),
'idCard' => $staffInfo ? strval($staffInfo->code) : "0",
"person_id" => "123",
"timezone" => "+7"
]) ])
] ]
])), true); ])), true);
@@ -346,7 +380,7 @@ class ApiController extends Controller {
function is_connected($ip = "google.com") { function is_connected($ip = "google.com") {
$connected = @fsockopen($ip, 80); $connected = @fsockopen($ip, 80);
//website, port (try 80 or 443) //website, port (try 80 or 443)
if ($connected) { if ($connected) {
$is_conn = true; //action when connected $is_conn = true; //action when connected
fclose($connected); fclose($connected);
@@ -375,7 +409,7 @@ class ApiController extends Controller {
} }
public function actionCurrentCache() { public function actionCurrentCache() {
return file_get_contents("http://localhost:2305/current-cache"); return @file_get_contents("http://localhost:2305/current-cache");
} }
public function actionSaveToken() { public function actionSaveToken() {
@@ -392,31 +426,80 @@ class ApiController extends Controller {
'data' => $post['token'] 'data' => $post['token']
]); ]);
} }
$version = \app\models\SyncUrl::findOne(['key_config' => 'version']);
if ($version) {
$version->data = $post['version'];
$version->save();
} else {
$model = new \app\models\SyncUrl();
$model->create([
'key_config' => "version",
'data' => $post['version']
]);
}
Yii::$app->response->format = "json"; Yii::$app->response->format = "json";
return ["status" => true]; return ["status" => true];
} }
} }
public function actionTest() { public function check512() {
$check = \app\models\SyncUrl::findOne(['key_config' => 'updating']); $tempConfig = json_decode(file_get_contents("http://localhost:4004/ReadEngineConfig", false, stream_context_create([
$check->data = "false"; 'http' => [
$check->save(); 'header' => "Content-Type: application/json",
return var_dump($check); 'method' => "POST"
// file_get_contents("http://localhost:2305/update-feature"); ]
// return; ])), true);
set_time_limit(0); if (!$tempConfig['status'])
$lists = ListManagement::find()->all(); return false;
foreach ($lists as $key => $value) {
$extract = false; $engineConfig = json_decode($tempConfig['data'], true);
$images = json_decode($value->image, true); if (count($engineConfig['data']['engines']) == 0)
$newImgs = []; return false;
foreach ($images as $k => $v) {
$v['features512'] = []; $checkConfig = json_decode(file_get_contents("http://localhost:4004/ReadConfig", false, stream_context_create([
$newImgs[] = $v; 'http' => [
} 'header' => "Content-Type: application/json",
$value->image = json_encode($newImgs); 'method' => "POST",
$value->save(); 'content' => json_encode([
'path' => $engineConfig['data']['engines'][0]['path']
])
]
])), true);
if (!$checkConfig['status'])
return false;
$config_json = "";
if ($checkConfig['status']) {
$config_json = json_decode($checkConfig['data'], true);
$check512 = $config_json['feature']['type2']['enable'];
if ($check512 !== "0")
return true;
} }
return false;
}
public function actionTest() {
// $key = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCXB8c44cboYsGG6IzISqxf8W7q3AN0mGmekDYpBWpz9udif+jwK6h7NuOZvFDeB/32TVrtvaGDmExCeBerpcoOvGh4eUXyke2lSLzrg7pc/wD0KproEGoAAFDB0Pr5bZhg6ELp3Sk++0MPyxH6u1pgtHDxEnMwXV8cxw/rSCM+wIDAQAB';
// $rsa = new \phpseclib3\Crypt\RSA;
// $rsa->loadKey($key);
// $rsa->setPublicKey($key);
//
// echo $rsa->getPublicKey();
// exit();
$test = "10|2021-07-27 19:16:25|211155|1|2021-07-27 19:16:25";
$encode = common::rsaEncode($test);
$res = json_decode(file_get_contents("http://192.168.0.9:6004/api/box/face_recognition_auth_v2", false, stream_context_create([
'http' => [
'header' => "Content-Type: application/json",
'method' => "POST",
'content' => json_encode([
'image' => 'abc',
'data' => $encode
])
]
])), true);
return var_dump($res);
} }
public function actionReGenFeature() { public function actionReGenFeature() {
@@ -428,11 +511,207 @@ class ApiController extends Controller {
'data' => "false" 'data' => "false"
]); ]);
} else { } else {
$updating->data = "false"; if ($this->check512()) {
$currentCache = json_decode(file_get_contents("http://localhost:2305/current-cache"), true);
if ($currentCache['n_128'] == $currentCache['n_512']) {
$updating->data = "true";
} else {
$updating->data = "false";
}
} else
$updating->data = "false";
$updating->save(); $updating->save();
} }
Yii::$app->response->format = "json"; Yii::$app->response->format = "json";
return ["data" => "reset updating flag"]; return ["data" => "reset updating flag"];
} }
public function actionCheckLogs() {
Yii::$app->response->format = "json";
$server_ip = \app\models\SyncUrl::findOne(['key_config' => 'server_api']);
$ip = "https://dev-dc.beetai.com";
if ($server_ip)
$ip = $server_ip->data;
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
if (!$device_id)
return ["data" => "check logs fail"];
$id_camera = intval($device_id->data);
$datas = json_decode(file_get_contents($ip . "/api/model/get_log_model", false, stream_context_create([
'http' => [
'header' => "Content-Type: application/json",
'method' => "POST",
'content' => json_encode([
"idCamera" => $id_camera
])
]
])), true);
if ($datas['status'] == 10000) {
$logs = $datas['data'];
$infomation = [];
foreach ($logs as $key => $value) {
if ($value['action'] == "insert_image")
$this->insertImage($value['images'][0], $value['id'], $value['files_name'][0]);
if ($value['action'] == "remove_image")
$this->removeImage($value['id'], $value['files_name'][0]);
if ($value['action'] == "insert_info")
$this->insertInfo($value);
if ($value['action'] == "remove_info")
$this->removeInfo($value);
if ($value['action'] == "reset_all") {
\Yii::$app->db->createCommand()->truncateTable('capture_logs')->execute();
\Yii::$app->db->createCommand()->truncateTable('list_management')->execute();
array_map('unlink', glob("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/*.*"));
}
if (in_array($value['action'], ['insert_image', 'remove_image', 'insert_info', 'remove_info', 'reset_all'])) {
$infomation[] = [
"obj_Log" => $value['obj_Log'],
"action" => $value['action'],
"idCamera" => $id_camera
];
}
}
if (count($infomation) > 0)
file_get_contents($ip . "/api/model/set_log_model", false, stream_context_create([
'http' => [
'header' => "Content-Type: application/json",
'method' => "POST",
'content' => json_encode([
"infomation" => $infomation
])
]
]));
@file_get_contents("http://localhost:2305/update-feature?total=" . ListManagement::find()->count());
}
return ["data" => "check logs"];
}
public function insertImage($image, $staff_id, $files_name) {
$model = ListManagement::findOne(['staff_id' => $staff_id]);
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
$targetPath = $RootFolder . "/face";
FileHelper::createDirectory($targetPath, 0777);
$ft = [];
$currentArr = [];
$currentImg = json_decode($model->image, true);
if ($currentImg) {
foreach ($currentImg as $key => $value) {
if (isset($value['serverKey']))
$currentArr[] = $value['serverKey'];
}
$ft = $currentImg;
}
if (!in_array($files_name, $currentArr)) {
$fileName = "face_" . $staff_id . "_" . common::generateRandomString() . "_" . time() . ".png";
$img = false;
try {
$img = file_get_contents(str_replace("&", "&", $image));
} catch (\Exception $e) {
}
if ($img && $img !== "null") {
$fileTarget = $targetPath . "/" . $fileName;
if (!$this->resizeImg($img, $fileTarget)) {
file_put_contents($fileTarget, $img);
}
$features = common::requestToEngine("/get-feature", [
"image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
],
"type" => "128"
]);
if (!$features['status'])
return false;
$features = json_decode($features['data'], true);
$ft[] = [
"serverKey" => $files_name,
"url" => $fileName,
"urlOld" => $fileName,
"features" => $features['results'][0]['feature'],
"features512" => []
];
$model->image = json_encode($ft);
$model->last_modified = time();
$model->save();
}
}
}
public function removeImage($staff_id, $files_name) {
$model = ListManagement::findOne(['staff_id' => $staff_id]);
$images = json_decode($model->image, true);
$ft = [];
foreach ($images as $key => $value) {
if ($value['serverKey'] !== $files_name)
$ft[] = $value;
else
unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value['url']);
}
$model->image = json_encode($ft);
$model->last_modified = time();
$model->save();
}
public function insertInfo($data) {
$model = ListManagement::findOne(['staff_id' => $data['id']]);
if ($model) {
$model->name = $data['name'];
$model->abbreviated_name = $data['abbreviated_name'];
$model->code = $data['code'];
$model->address = $data['department'];
$model->last_modified = time();
$model->save();
} else {
$model = new ListManagement();
$model->create([
'staff_id' => $data['id'],
'code' => $data['code'],
'type' => 'wl',
'name' => $data['name'],
'image' => json_encode([]),
'gender' => "Male",
'birthday' => "",
'telephone' => "",
'address' => $data['department'],
'abbreviated_name' => $data['abbreviated_name'],
]);
}
}
public function removeInfo($data) {
$model = ListManagement::findOne(['staff_id' => $data['id']]);
if ($model) {
$images = json_decode($model->image, true);
foreach ($images as $k => $v) {
unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $v['url']);
}
$model->delete();
}
return;
}
public function resizeImg($img, $fileTarget) {
$im = imagecreatefromstring($img);
$width = imagesx($im);
$height = imagesy($im);
$newwidth = 224;
$newheight = 224;
if ($width > $newwidth && $height > $newheight) {
$thumb = imagecreatetruecolor($newwidth, $newheight);
imagecopyresized($thumb, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($thumb, $fileTarget);
imagedestroy($thumb);
imagedestroy($im);
return true;
}
return false;
}
} }

View File

@@ -15,9 +15,13 @@ use app\models\ListManagement;
*/ */
class CaptureLogsController extends Controller { class CaptureLogsController extends Controller {
/** public function init() {
* {@inheritdoc} parent::init();
*/ Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : Yii::$app->language;
if (Yii::$app->user->isGuest)
return $this->redirect(['/site/login']);
}
public function behaviors() { public function behaviors() {
return [ return [
'verbs' => [ 'verbs' => [
@@ -37,7 +41,7 @@ class CaptureLogsController extends Controller {
$t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U'); $t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U');
} }
$this->view->title = "Lịch sử hệ thống"; $this->view->title = Yii::t("app", "LICH_SU_HE_THONG");
$searchModel = new CaptureLogsSearch(); $searchModel = new CaptureLogsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
if (!$all) if (!$all)
@@ -63,7 +67,9 @@ class CaptureLogsController extends Controller {
'f' => $f, 'f' => $f,
't' => $t, 't' => $t,
// 'idAuto' => $idAuto, // 'idAuto' => $idAuto,
"staffArray" => ListManagement::staffArray() "staffArray" => ListManagement::staffArray(),
"typeArray" => ListManagement::typeArray(),
"genderArray" => ListManagement::genderArray(),
]); ]);
} }
@@ -108,7 +114,7 @@ class CaptureLogsController extends Controller {
return $model; return $model;
} }
throw new NotFoundHttpException('The requested page does not exist.'); throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN"));
} }
} }

View File

@@ -14,9 +14,9 @@ class ConfigController extends Controller {
public function init() { public function init() {
parent::init(); parent::init();
if (Yii::$app->user->isGuest) { Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : Yii::$app->language;
if (Yii::$app->user->isGuest)
return $this->redirect(['/site/login']); return $this->redirect(['/site/login']);
}
} }
/** /**
@@ -157,12 +157,8 @@ class ConfigController extends Controller {
] ]
]; ];
/**
* Lists all Script models.
* @return mixed
*/
public function actionIndex() { public function actionIndex() {
$this->view->title = "Cấu hình máy chủ"; $this->view->title = Yii::t("app", "CAU_HINH_MAY_CHU");
$options = [ $options = [
'http' => [ 'http' => [
'header' => "Content-Type: application/json", 'header' => "Content-Type: application/json",
@@ -262,7 +258,7 @@ class ConfigController extends Controller {
])); ]));
return true; return true;
} else { } else {
$this->view->title = "Cấu hình nhận diện"; $this->view->title = Yii::t("app", "CAU_HINH_NHAN_DIEN");
$tempConfig = json_decode(file_get_contents("http://localhost:4004/ReadEngineConfig", false, stream_context_create([ $tempConfig = json_decode(file_get_contents("http://localhost:4004/ReadEngineConfig", false, stream_context_create([
'http' => [ 'http' => [
'header' => "Content-Type: application/json", 'header' => "Content-Type: application/json",
@@ -300,7 +296,48 @@ class ConfigController extends Controller {
} }
public function actionReset() { public function actionReset() {
Yii::$app->response->format = "json";
if (Yii::$app->request->post()) { if (Yii::$app->request->post()) {
if (Yii::$app->request->post("deleteDB") === "true") {
\Yii::$app->db->createCommand()->truncateTable('capture_logs')->execute();
\Yii::$app->db->createCommand()->truncateTable('list_management')->execute();
array_map('unlink', glob("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/*.*"));
try {
file_get_contents("http://localhost:2305/update-feature");
} catch (\Exception $exc) {
}
$server_ip = \app\models\SyncUrl::findOne(['key_config' => 'server_api']);
$ip = "https://dev-dc.beetai.com";
if ($server_ip)
$ip = $server_ip->data;
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
$id_camera = 0;
if ($device_id)
$id_camera = intval($device_id->data);
try {
$res = json_decode(file_get_contents($ip . "/api/model/reset_log_model", false, stream_context_create([
'http' => [
'header' => "Content-Type: application/json",
'method' => "POST",
'content' => json_encode([
"idCamera" => $id_camera,
"isCloud" => 0
])
]
])), true);
if ($res['status'] != 10000)
return [
"status" => false,
"btnText" => Yii::t("app", "THU_LAI")
];
} catch (Exception $ex) {
return [
"status" => false,
"btnText" => Yii::t("app", "THU_LAI")
];
}
}
if (Yii::$app->request->post("resetDevice") === "true") { if (Yii::$app->request->post("resetDevice") === "true") {
$tempConfig = json_decode(file_get_contents("http://localhost:4004/ReadEngineConfig", false, stream_context_create([ $tempConfig = json_decode(file_get_contents("http://localhost:4004/ReadEngineConfig", false, stream_context_create([
'http' => [ 'http' => [
@@ -332,21 +369,14 @@ class ConfigController extends Controller {
] ]
])); ]));
} }
if (Yii::$app->request->post("deleteDB") === "true") { \app\models\SyncUrl::deleteAll(['IN', 'key_config', ['server_api', 'device_id']]);
\Yii::$app->db->createCommand()->truncateTable('capture_logs')->execute();
\Yii::$app->db->createCommand()->truncateTable('list_management')->execute();
array_map('unlink', glob("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/*.*"));
try {
file_get_contents("http://localhost:2305/update-feature");
} catch (\Exception $exc) {
// echo $exc->getTraceAsString();
}
}
return Url::to(['/config']);
} else {
Yii::$app->response->format = "json";
return [ return [
"title" => "Reset thiết bị", "status" => true,
"url" => Url::to(['/config/cau-hinh-thiet-bi'])
];
} else {
return [
"title" => Yii::t("app", "RESET_THIET_BI"),
"form" => $this->renderPartial("reset") "form" => $this->renderPartial("reset")
]; ];
} }
@@ -365,7 +395,7 @@ class ConfigController extends Controller {
return ['status' => false, 'text' => 'error']; return ['status' => false, 'text' => 'error'];
if ($tempConfig['data'] === "") if ($tempConfig['data'] === "")
return ['status' => false, 'text' => 'Cấu hình ip chưa đúng!']; return ['status' => false, 'text' => Yii::t("app", "CAU_HINH_IP_CHUA_DUNG")];
$engineConfig = json_decode($tempConfig['data'], true); $engineConfig = json_decode($tempConfig['data'], true);
if (count($engineConfig['data']['engines']) == 0) if (count($engineConfig['data']['engines']) == 0)
@@ -384,13 +414,41 @@ class ConfigController extends Controller {
if (!$checkConfig['status']) { if (!$checkConfig['status']) {
return ['status' => false, 'text' => '']; return ['status' => false, 'text' => ''];
} else { } else {
return ['status' => true, 'url' => Url::to(['cau-hinh-nhan-dien'])]; return ['status' => true, 'url' => Url::to(['cau-hinh-thiet-bi'])];
} }
} }
} }
public function actionCauHinhThietBi() { public function actionCauHinhThietBi() {
$this->view->title = "Cấu hình thiết bị"; $this->view->title = Yii::t("app", "CAU_HINH_THIET_BI");
$tempConfig = json_decode(file_get_contents("http://localhost:4004/ReadEngineConfig", false, stream_context_create([
'http' => [
'header' => "Content-Type: application/json",
'method' => "POST"
]
])), true);
if (!$tempConfig['status'])
return $this->redirect(['/config']);
$engineConfig = json_decode($tempConfig['data'], true);
$server_api = \app\models\SyncUrl::findOne(['key_config' => 'server_api']);
if (!$server_api) {
$model = new \app\models\SyncUrl();
$model->create([
'key_config' => 'server_api',
'data' => $engineConfig['data']['engines'][0]['url']
]);
}
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
if (!$device_id) {
$model = new \app\models\SyncUrl();
$model->create([
'key_config' => 'device_id',
'data' => strval($engineConfig['data']['engines'][0]['id'])
]);
}
return $this->render('device', [ return $this->render('device', [
"server_api" => \app\models\SyncUrl::findOne(['key_config' => 'server_api']), "server_api" => \app\models\SyncUrl::findOne(['key_config' => 'server_api']),
"device_id" => \app\models\SyncUrl::findOne(['key_config' => 'device_id']) "device_id" => \app\models\SyncUrl::findOne(['key_config' => 'device_id'])

View File

@@ -17,9 +17,13 @@ use app\models\common;
*/ */
class ControlLogsController extends Controller { class ControlLogsController extends Controller {
/** public function init() {
* {@inheritdoc} parent::init();
*/ Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : Yii::$app->language;
if (Yii::$app->user->isGuest)
return $this->redirect(['/site/login']);
}
public function behaviors() { public function behaviors() {
return [ return [
'verbs' => [ 'verbs' => [
@@ -39,7 +43,7 @@ class ControlLogsController extends Controller {
$t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U'); $t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U');
} }
$this->view->title = "Danh sách nhận diện"; $this->view->title = Yii::t("app", "DANH_SACH_NHAN_DIEN");
$searchModel = new CaptureLogsSearch(); $searchModel = new CaptureLogsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(["<>", "capture_logs.staff_id", 0]); $dataProvider->query->andWhere(["<>", "capture_logs.staff_id", 0]);
@@ -56,11 +60,10 @@ class ControlLogsController extends Controller {
return $this->render('index', [ return $this->render('index', [
'searchModel' => $searchModel, 'searchModel' => $searchModel,
'dataProvider' => $dataProvider, 'dataProvider' => $dataProvider,
'statusArray' => CaptureLogs::$statusArray,
'f' => $f, 'f' => $f,
't' => $t, 't' => $t,
'typeArray' => ListManagement::$typeArray, 'typeArray' => ListManagement::typeArray(),
'genderArray' => ListManagement::$genderArray 'genderArray' => ListManagement::genderArray()
]); ]);
} }
@@ -69,7 +72,7 @@ class ControlLogsController extends Controller {
return $model; return $model;
} }
throw new NotFoundHttpException('The requested page does not exist.'); throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN"));
} }
public function actionUseFeature($id) { public function actionUseFeature($id) {
@@ -81,7 +84,7 @@ class ControlLogsController extends Controller {
$url = $model->image; $url = $model->image;
$images = json_decode($listManagement->image, true); $images = json_decode($listManagement->image, true);
if (count($images) >= \Yii::$app->params['maxPicture']) if (count($images) >= \Yii::$app->params['maxPicture'])
return ["status" => false, "text" => "Mỗi đối tượng chỉ nhận tối đa " . \Yii::$app->params['maxPicture'] . " hình ảnh mẫu"]; return ["status" => false, "text" => Yii::t("app", "SO_ANH_MAU_TOI_DA", ["maxPicture" => \Yii::$app->params['maxPicture']])];
$add = true; $add = true;
foreach ($images as $key => $value) { foreach ($images as $key => $value) {
if (isset($value['urlOld']) && $value['urlOld'] === $url) if (isset($value['urlOld']) && $value['urlOld'] === $url)
@@ -97,11 +100,14 @@ class ControlLogsController extends Controller {
if (!$this->resizeImg($img, $fileTarget)) if (!$this->resizeImg($img, $fileTarget))
$fileName = $url; $fileName = $url;
$features = json_decode(common::requestToEngine("/get-feature", [ $features = common::requestToEngine("/get-feature", [
"image_paths" => [ "image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"] ["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
] ]
]), true); ]);
if (!$features['status'])
return ["status" => false, "text" => Yii::t("app", "ENGINE_KHONG_HOAT_DONG")];
$features = json_decode($features['data'], true);
$images[] = [ $images[] = [
"url" => $fileName, "url" => $fileName,
"urlOld" => $url, "urlOld" => $url,
@@ -119,9 +125,9 @@ class ControlLogsController extends Controller {
]); ]);
return ["status" => true]; return ["status" => true];
} }
return ["status" => false, "text" => "Hình ảnh này đã được chọn làm mẫu cho đối tượng này!"]; return ["status" => false, "text" => Yii::t("app", "ANH_MAU_DA_DUOC_CHON")];
} }
return ["status" => false, "text" => "Đối tượng không tồn tại!"]; return ["status" => false, "text" => Yii::t("app", "DOI_TUONG_KHONG_TON_TAI")];
} }
} }

View File

@@ -14,13 +14,6 @@ use yii\helpers\Url;
*/ */
class DashboardController extends Controller { class DashboardController extends Controller {
public function init() {
parent::init();
if (Yii::$app->user->isGuest) {
return $this->redirect(['/site/login']);
}
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@@ -147,4 +140,22 @@ class DashboardController extends Controller {
return $this->redirect(Yii::$app->request->hostInfo . "/BiFace_Server_Lite/web/du-lieu.xlsx"); return $this->redirect(Yii::$app->request->hostInfo . "/BiFace_Server_Lite/web/du-lieu.xlsx");
} }
public function actionChangeLanguage($lang) {
if (Yii::$app->request->isAjax) {
$language = \app\models\common::allLanguage();
foreach ($language as $key => $value) {
if ($value['name'] === $lang)
return Yii::$app->session->set("language", $value);
}
}
}
public function actionChangeLanguageLogin($lang) {
$language = \app\models\common::allLanguage();
foreach ($language as $key => $value) {
if ($value['name'] === $lang)
return $this->redirect(['/site/login', 'lang' => $lang]);
}
}
} }

View File

@@ -17,9 +17,13 @@ use yii\helpers\FileHelper;
*/ */
class ListManagementController extends Controller { class ListManagementController extends Controller {
/** public function init() {
* {@inheritdoc} parent::init();
*/ Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : Yii::$app->language;
if (Yii::$app->user->isGuest)
return $this->redirect(['/site/login']);
}
public function behaviors() { public function behaviors() {
return [ return [
'verbs' => [ 'verbs' => [
@@ -34,7 +38,7 @@ class ListManagementController extends Controller {
public function actionIndex($from = "", $to = "", $name = "", $type = "all", $gender = "all", $id = "") { public function actionIndex($from = "", $to = "", $name = "", $type = "all", $gender = "all", $id = "") {
$f = date_format(date_create_from_format('H:i d/m/Y', "00:00 " . date("d/m/Y")), 'U'); $f = date_format(date_create_from_format('H:i d/m/Y', "00:00 " . date("d/m/Y")), 'U');
$t = date_format(date_create_from_format('H:i d/m/Y', "23:59 " . date("d/m/Y")), 'U'); $t = date_format(date_create_from_format('H:i d/m/Y', "23:59 " . date("d/m/Y")), 'U');
$this->view->title = "Quản lý mẫu"; $this->view->title = Yii::t("app", "QUAN_LY_MAU");
$searchModel = new ListManagementSearch(); $searchModel = new ListManagementSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
if ($from !== "" && $to !== "") { if ($from !== "" && $to !== "") {
@@ -77,8 +81,8 @@ class ListManagementController extends Controller {
'dataProvider' => $dataProvider, 'dataProvider' => $dataProvider,
'f' => $f, 'f' => $f,
't' => $t, 't' => $t,
'typeArray' => ListManagement::$typeArray, 'typeArray' => ListManagement::typeArray(),
'genderArray' => ListManagement::$genderArray, 'genderArray' => ListManagement::genderArray(),
// 'idAuto' => $idAuto, // 'idAuto' => $idAuto,
"staffArray" => ListManagement::staffArray(), "staffArray" => ListManagement::staffArray(),
"updating" => $updating "updating" => $updating
@@ -93,11 +97,14 @@ class ListManagementController extends Controller {
$check = ListManagement::findOne(['code' => $data['code']]); $check = ListManagement::findOne(['code' => $data['code']]);
if ($check) if ($check)
return ["status" => false]; return ["status" => false];
$features = json_decode(common::requestToEngine("/get-feature", [ $features = common::requestToEngine("/get-feature", [
"image_paths" => [ "image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $data['image'], "type" => "raw"] ["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $data['image'], "type" => "raw"]
] ]
]), true); ]);
if (!$features['status'])
return ["status" => false];
$features = json_decode($features['data'], true);
$data['image'] = json_encode([ $data['image'] = json_encode([
[ [
"url" => $data['image'], "url" => $data['image'],
@@ -121,7 +128,7 @@ class ListManagementController extends Controller {
if ($listManagement) { if ($listManagement) {
$images = json_decode($listManagement->image, true); $images = json_decode($listManagement->image, true);
if (count($images) >= \Yii::$app->params['maxPicture']) if (count($images) >= \Yii::$app->params['maxPicture'])
return ["status" => false, "text" => "Mỗi đối tượng chỉ nhận tối đa " . \Yii::$app->params['maxPicture'] . " hình ảnh mẫu"]; return ["status" => false, "text" => Yii::t("app", "SO_ANH_MAU_TOI_DA", ["maxPicture" => \Yii::$app->params['maxPicture']])];
$add = true; $add = true;
foreach ($images as $key => $value) { foreach ($images as $key => $value) {
if (isset($value['urlOld']) && $value['urlOld'] === $url) if (isset($value['urlOld']) && $value['urlOld'] === $url)
@@ -137,11 +144,14 @@ class ListManagementController extends Controller {
if (!$this->resizeImg($img, $fileTarget)) if (!$this->resizeImg($img, $fileTarget))
$fileName = $url; $fileName = $url;
$features = json_decode(common::requestToEngine("/get-feature", [ $features = common::requestToEngine("/get-feature", [
"image_paths" => [ "image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"] ["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
] ]
]), true); ]);
if (!$features['status'])
return ["status" => false, "text" => Yii::t("app", "ENGINE_KHONG_HOAT_DONG")];
$features = json_decode($features['data'], true);
$images[] = [ $images[] = [
"url" => $fileName, "url" => $fileName,
"urlOld" => $url, "urlOld" => $url,
@@ -150,6 +160,7 @@ class ListManagementController extends Controller {
]; ];
$listManagement->type = $data['type']; $listManagement->type = $data['type'];
$listManagement->name = $data['name']; $listManagement->name = $data['name'];
$listManagement->abbreviated_name = $data['abbreviated_name'];
$listManagement->gender = $data['gender']; $listManagement->gender = $data['gender'];
$listManagement->birthday = $data['birthday'] === "" ? 0 : date_format(date_create_from_format('d/m/Y', $data['birthday']), 'U'); $listManagement->birthday = $data['birthday'] === "" ? 0 : date_format(date_create_from_format('d/m/Y', $data['birthday']), 'U');
$listManagement->telephone = $data['telephone']; $listManagement->telephone = $data['telephone'];
@@ -165,7 +176,7 @@ class ListManagementController extends Controller {
]); ]);
return ["status" => true]; return ["status" => true];
} }
return ["status" => false, "text" => "Hình ảnh này đã được chọn làm mẫu cho đối tượng này!"]; return ["status" => false, "text" => Yii::t("app", "ANH_MAU_DA_DUOC_CHON")];
} else { } else {
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads"; $RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
$targetPath = $RootFolder . "/face"; $targetPath = $RootFolder . "/face";
@@ -176,11 +187,14 @@ class ListManagementController extends Controller {
if (!$this->resizeImg($img, $fileTarget)) if (!$this->resizeImg($img, $fileTarget))
$fileName = $url; $fileName = $url;
$features = json_decode(common::requestToEngine("/get-feature", [ $features = common::requestToEngine("/get-feature", [
"image_paths" => [ "image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"] ["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
] ]
]), true); ]);
if (!$features['status'])
return ["status" => false, "text" => Yii::t("app", "ENGINE_KHONG_HOAT_DONG")];
$features = json_decode($features['data'], true);
$data['image'] = json_encode([ $data['image'] = json_encode([
[ [
"url" => $fileName, "url" => $fileName,
@@ -206,6 +220,7 @@ class ListManagementController extends Controller {
"type" => $ListManagement->type, "type" => $ListManagement->type,
"code" => $ListManagement->code, "code" => $ListManagement->code,
"name" => $ListManagement->name, "name" => $ListManagement->name,
"abbreviated_name" => $ListManagement->abbreviated_name,
"gender" => $ListManagement->gender, "gender" => $ListManagement->gender,
"birthday" => date("d/m/Y", $ListManagement->birthday), "birthday" => date("d/m/Y", $ListManagement->birthday),
"telephone" => $ListManagement->telephone, "telephone" => $ListManagement->telephone,
@@ -233,11 +248,14 @@ class ListManagementController extends Controller {
if (!$this->resizeImg($img, $fileTarget)) if (!$this->resizeImg($img, $fileTarget))
$fileName = $data['image']; $fileName = $data['image'];
$features = json_decode(common::requestToEngine("/get-feature", [ $features = common::requestToEngine("/get-feature", [
"image_paths" => [ "image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"] ["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
] ]
]), true); ]);
if (!$features['status'])
return ["status" => false, "text" => Yii::t("app", "ENGINE_KHONG_HOAT_DONG")];
$features = json_decode($features['data'], true);
$images = json_decode($model->image, true); $images = json_decode($model->image, true);
$images[] = [ $images[] = [
"url" => $fileName, "url" => $fileName,
@@ -250,6 +268,7 @@ class ListManagementController extends Controller {
$model->code = $data['code']; $model->code = $data['code'];
$model->type = $data['type']; $model->type = $data['type'];
$model->name = $data['name']; $model->name = $data['name'];
$model->abbreviated_name = $data['abbreviated_name'];
$model->gender = $data['gender']; $model->gender = $data['gender'];
$model->birthday = $data['birthday'] === "" ? 0 : date_format(date_create_from_format('d/m/Y', $data['birthday']), 'U'); $model->birthday = $data['birthday'] === "" ? 0 : date_format(date_create_from_format('d/m/Y', $data['birthday']), 'U');
$model->telephone = $data['telephone']; $model->telephone = $data['telephone'];
@@ -315,7 +334,7 @@ class ListManagementController extends Controller {
return $model; return $model;
} }
throw new NotFoundHttpException('The requested page does not exist.'); throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN"));
} }
public function actionBatchDelete() { public function actionBatchDelete() {
@@ -350,11 +369,14 @@ class ListManagementController extends Controller {
$model = new common(); $model = new common();
Yii::$app->response->format = "json"; Yii::$app->response->format = "json";
$url = $model->UploadFile("AnhNhanVien", ["PNG", "JPG", "JPEG", "GIF"], "temp"); $url = $model->UploadFile("AnhNhanVien", ["PNG", "JPG", "JPEG", "GIF"], "temp");
$features = json_decode(common::requestToEngine("/get-feature", [ $features = common::requestToEngine("/get-feature", [
"image_paths" => [ "image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/" . $url, "type" => "crop"] ["url" => "/var/www/html/BiFace_Server_Lite/web/" . $url, "type" => "crop"]
] ]
]), true); ]);
if (!$features['status'])
return ["status" => false];
$features = json_decode($features['data'], true);
unlink("/var/www/html/BiFace_Server_Lite/web/" . $url); unlink("/var/www/html/BiFace_Server_Lite/web/" . $url);
if ($features['results'][0]['crop'] === "") { if ($features['results'][0]['crop'] === "") {
return ["status" => false]; return ["status" => false];
@@ -389,7 +411,7 @@ class ListManagementController extends Controller {
"title" => $data['ip'], "title" => $data['ip'],
"form" => $this->renderPartial("list", [ "form" => $this->renderPartial("list", [
"results" => $results, "results" => $results,
"typeArray" => ListManagement::$typeArray, "typeArray" => ListManagement::typeArray(),
"filters" => $filters, "filters" => $filters,
"ip" => $data['ip'] "ip" => $data['ip']
]) ])
@@ -404,7 +426,7 @@ class ListManagementController extends Controller {
if ($server_ip) if ($server_ip)
$ip = $server_ip->data; $ip = $server_ip->data;
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']); $device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
$id_camera = 209; $id_camera = 0;
if ($device_id) if ($device_id)
$id_camera = intval($device_id->data); $id_camera = intval($device_id->data);
@@ -414,17 +436,18 @@ class ListManagementController extends Controller {
'method' => "POST", 'method' => "POST",
'content' => json_encode([ 'content' => json_encode([
"id_camera" => $id_camera, "id_camera" => $id_camera,
"ids_staff" => [] "ids_staff" => [],
"objs_staff" => []
]) ])
] ]
])), true); ])), true);
$filters = []; $filters = [];
foreach ($datas['data'] as $key => $value) { foreach ($datas['data'] as $key => $value) {
$filters[$value['code']] = $value['code'] . " - " . $value['name'] . " - " . $value['department']; $filters[$value['id']] = $value['code'] . " - " . $value['name'] . " - " . $value['department'];
} }
Yii::$app->response->format = "json"; Yii::$app->response->format = "json";
return [ return [
"title" => "<i class='fa fa-download'></i> Đồng bộ từ máy chủ", "title" => "<i class='fa fa-download'></i> " . Yii::t("app", "DONG_BO_TU_MAY_CHU"),
"form" => $this->renderPartial("list-server", [ "form" => $this->renderPartial("list-server", [
"datas" => $datas['data'], "datas" => $datas['data'],
"filters" => $filters, "filters" => $filters,
@@ -440,107 +463,122 @@ class ListManagementController extends Controller {
return $time[1] + $time[0]; return $time[1] + $time[0];
} }
public function extractFeature($images, $files_name, $staff_id, $currentImg = false) {
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
$targetPath = $RootFolder . "/face";
FileHelper::createDirectory($targetPath, 0777);
$extractFeature = [];
$ft = [];
$currentArr = [];
if ($currentImg) {
foreach ($currentImg as $key => $value) {
if (isset($value['serverKey']))
$currentArr[] = $value['serverKey'];
}
$ft = $currentImg;
}
foreach ($images as $key => $value) {
if ($key < Yii::$app->params['maxPicture'] && !in_array($files_name[$key], $currentArr)) {
$fileName = "face_" . $staff_id . "_" . common::generateRandomString() . "_" . time() . ".png";
$start = $this->getCurrentTime();
$img = false;
try {
$img = file_get_contents(str_replace("&amp;", "&", $value));
} catch (\Exception $e) {
}
$finish = $this->getCurrentTime();
$temp["getIMG"] = round(($finish - $start), 4);
if ($img && $img !== "null") {
$fileTarget = $targetPath . "/" . $fileName;
$start = $this->getCurrentTime();
if (!$this->resizeImg($img, $fileTarget)) {
file_put_contents($fileTarget, $img);
}
$finish = $this->getCurrentTime();
$temp["saveIMG"] = round(($finish - $start), 4);
$start = $this->getCurrentTime();
$features = common::requestToEngine("/get-feature", [
"image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
],
"type" => "128"
]);
if (!$features['status'])
return false;
$features = json_decode($features['data'], true);
$finish = $this->getCurrentTime();
$temp["extract"] = round(($finish - $start), 4);
$ft[] = [
"serverKey" => $files_name[$key],
"url" => $fileName,
"urlOld" => $fileName,
"features" => $features['results'][0]['feature'],
"features512" => []//isset($features['results'][0]['feature512']) ? $features['results'][0]['feature512'] : []
];
}
$extractFeature[] = $temp;
}
}
return [
"time" => $extractFeature,
"features" => $ft
];
}
public function actionSyncFeature() { public function actionSyncFeature() {
if (Yii::$app->request->post()) { if (Yii::$app->request->post()) {
Yii::$app->response->format = "json"; Yii::$app->response->format = "json";
$processTime = []; $processTime = [];
$totalStart = $this->getCurrentTime(); $totalStart = $this->getCurrentTime();
$totals = intval(Yii::$app->request->post("totals")); $totals = intval(Yii::$app->request->post("totals"));
// $server_ip = \app\models\SyncUrl::findOne(['key_config' => 'server_api']);
// $ip = "https://dev-dc.beetai.com";
// if ($server_ip)
// $ip = $server_ip->data;
// $device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
// $id_camera = 209;
// if ($device_id)
// $id_camera = intval($device_id->data);
// $start = $this->getCurrentTime();
// $res = json_decode(file_get_contents($ip . "/api/oem/get_all_image", false, stream_context_create([
// 'http' => [
// 'header' => "Content-Type: application/json",
// 'method' => "POST",
// 'content' => json_encode([
// "id_camera" => $id_camera,
// "ids_staff" => [strval(Yii::$app->request->post("id"))]
// ])
// ]
// ])), true);
// $finish = $this->getCurrentTime();
// $processTime["requestToAPI"] = round(($finish - $start), 4);
$data = Yii::$app->request->post("id"); //$res['data'][0]; $data = Yii::$app->request->post("id"); //$res['data'][0];
$ft = [];
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
$targetPath = $RootFolder . "/face";
FileHelper::createDirectory($targetPath, 0777);
$extractFeature = [];
if (isset($data['images'])) {
foreach ($data['images'] as $key => $value) {
if ($key < Yii::$app->params['maxPicture']) {
$fileName = "face_" . common::generateRandomString() . "_" . time() . ".png";
$start = $this->getCurrentTime();
$img = false;
try {
$img = file_get_contents(str_replace("&amp;", "&", $value));
// $img = file_get_contents($value);
} catch (\Exception $e) {
}
$finish = $this->getCurrentTime();
$temp["getIMG"] = round(($finish - $start), 4);
if ($img && $img !== "null") {
$fileTarget = $targetPath . "/" . $fileName;
$start = $this->getCurrentTime();
if (!$this->resizeImg($img, $fileTarget)) {
file_put_contents($fileTarget, $img);
}
$finish = $this->getCurrentTime();
$temp["saveIMG"] = round(($finish - $start), 4);
$start = $this->getCurrentTime();
$features = json_decode(common::requestToEngine("/get-feature", [
"image_paths" => [
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
],
"type" => "128"
]), true);
$finish = $this->getCurrentTime();
$temp["extract"] = round(($finish - $start), 4);
$ft[] = [
"url" => $fileName,
"urlOld" => $fileName,
"features" => $features['results'][0]['feature'],
"features512" => []//isset($features['results'][0]['feature512']) ? $features['results'][0]['feature512'] : []
];
}
$extractFeature[] = $temp;
}
}
}
$processTime["extractFeature"] = $extractFeature;
$start = $this->getCurrentTime(); $start = $this->getCurrentTime();
$model = ListManagement::findOne(['code' => $data['idStaff']]); $model = ListManagement::findOne(['staff_id' => $data['id']]);
$finish = $this->getCurrentTime(); $finish = $this->getCurrentTime();
$processTime["getLM"] = round(($finish - $start), 4); $processTime["getLM"] = round(($finish - $start), 4);
$ft = [];
if ($model) { if ($model) {
if (isset($data['images'])) {
$extractFeature = $this->extractFeature($data['images'], $data['files_name'], $data['id'], json_decode($model->image, true));
if (!$extractFeature)
return false;
$processTime["extractFeature"] = $extractFeature['time'];
$ft = $extractFeature['features'];
}
$model->abbreviated_name = $data['abbreviated_name'];
$model->code = $data['code'];
$model->name = $data['name']; $model->name = $data['name'];
$model->address = $data['department']; $model->address = $data['department'];
$model->image = json_encode($ft); $model->image = json_encode($ft);
$model->last_modified = time(); $model->last_modified = time();
$model->save(); $model->save();
if ($totals <= 10) // if ($totals <= 10)
common::updateFeature([ // common::updateFeature([
"cmd" => "update", // "cmd" => "update",
"id" => $model->id, // "id" => $model->id,
"name" => common::convert_vi_to_en($model->name), // "name" => common::convert_vi_to_en($model->name),
"features" => $model->allFeatures // "features" => $model->allFeatures
]); // ]);
} else { } else {
if (isset($data['images'])) {
$extractFeature = $this->extractFeature($data['images'], $data['files_name'], $data['id']);
if (!$extractFeature)
return false;
$processTime["extractFeature"] = $extractFeature['time'];
$ft = $extractFeature['features'];
}
$start = $this->getCurrentTime(); $start = $this->getCurrentTime();
$model = new ListManagement(); $model = new ListManagement();
$model->create([ $model->create([
'code' => strval($data['idStaff']), 'code' => strval($data['code']),
'type' => "wl", 'type' => "wl",
'name' => $data['name'], 'name' => $data['name'],
'abbreviated_name' => $data['abbreviated_name'],
'staff_id' => $data['id'],
'image' => json_encode($ft), 'image' => json_encode($ft),
'gender' => "Male", 'gender' => "Male",
'birthday' => "", 'birthday' => "",
@@ -549,17 +587,17 @@ class ListManagementController extends Controller {
]); ]);
$finish = $this->getCurrentTime(); $finish = $this->getCurrentTime();
$processTime["insertDB"] = round(($finish - $start), 4); $processTime["insertDB"] = round(($finish - $start), 4);
if ($totals <= 10) // if ($totals <= 10)
common::updateFeature([ // common::updateFeature([
"cmd" => "create", // "cmd" => "create",
"id" => $model->id, // "id" => $model->id,
"name" => common::convert_vi_to_en($model->name), // "name" => common::convert_vi_to_en($model->name),
"features" => $model->allFeatures // "features" => $model->allFeatures
]); // ]);
} }
$totalFinish = $this->getCurrentTime(); $totalFinish = $this->getCurrentTime();
$processTime["total"] = round(($totalFinish - $totalStart), 4); $processTime["total"] = round(($totalFinish - $totalStart), 4);
$processTime["id"] = strval($data['idStaff']); $processTime["id"] = strval($data['code']);
return $processTime; //["status" => true]; return $processTime; //["status" => true];
} }
} }
@@ -578,7 +616,8 @@ class ListManagementController extends Controller {
])), true); ])), true);
foreach ($results as $key => $value) { foreach ($results as $key => $value) {
$images = []; $images = [];
foreach ($value['images'] as $k => $v) { $imagesReverse = array_reverse($value['images']);
foreach ($imagesReverse as $k => $v) {
if ($k < Yii::$app->params['maxPicture']) { if ($k < Yii::$app->params['maxPicture']) {
$key = common::generateRandomString(); $key = common::generateRandomString();
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads"; $RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
@@ -655,7 +694,8 @@ class ListManagementController extends Controller {
"gender" => $staff->gender, "gender" => $staff->gender,
"birthday" => date("d/m/Y", $staff->birthday), "birthday" => date("d/m/Y", $staff->birthday),
"telephone" => $staff->telephone, "telephone" => $staff->telephone,
"department" => $staff->address "department" => $staff->address,
"abbreviated_name" => $staff->abbreviated_name
]; ];
} }
} }
@@ -666,10 +706,10 @@ class ListManagementController extends Controller {
$datas = ListManagement::find()->orderBy(["code" => SORT_ASC])->all(); $datas = ListManagement::find()->orderBy(["code" => SORT_ASC])->all();
$filters = []; $filters = [];
foreach ($datas as $key => $value) { foreach ($datas as $key => $value) {
$filters[$value->code] = $value->code . " - " . $value->name . " - " . $value->address; $filters[$value->staff_id] = $value->code . " - " . $value->name . " - " . $value->address;
} }
return [ return [
"title" => "<i class='fa fa-upload'></i> Đồng bộ lên máy chủ", "title" => "<i class='fa fa-upload'></i> " . Yii::t("app", "DONG_BO_LEN_MAY_CHU"),
"form" => $this->renderPartial("list-to-server", [ "form" => $this->renderPartial("list-to-server", [
"datas" => $datas, "datas" => $datas,
"filters" => $filters "filters" => $filters
@@ -686,22 +726,29 @@ class ListManagementController extends Controller {
if ($server_ip) if ($server_ip)
$ip = $server_ip->data; $ip = $server_ip->data;
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']); $device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
$id_camera = 209; $id_camera = 0;
if ($device_id) if ($device_id)
$id_camera = intval($device_id->data); $id_camera = intval($device_id->data);
$StaffInfo = ListManagement::findOne(["code" => Yii::$app->request->post("id")]); $StaffInfo = ListManagement::findOne(["staff_id" => Yii::$app->request->post("id")]);
$lsImgs = json_decode($StaffInfo->image, true); $lsImgs = json_decode($StaffInfo->image, true);
$images = []; $images = [];
foreach ($lsImgs as $key => $value) { foreach ($lsImgs as $key => $value) {
try { if (!isset($value['serverKey']) || (isset($value['serverKey']) && $value['serverKey'] == "")) {
$images[] = base64_encode(file_get_contents("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value['url'])); try {
} catch (\Exception $e) { $images[] = base64_encode(file_get_contents("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value['url']));
} catch (\Exception $e) {
}
} }
} }
if (count($images) == 0)
return ["status" => true, "text" => Yii::t("app", "DU_LIEU_KHONG_DOI")];
$items = [ $items = [
"id" => $StaffInfo->staff_id,
"name" => $StaffInfo->name, "name" => $StaffInfo->name,
"abbreviated_name" => $StaffInfo->abbreviated_name,
"code" => $StaffInfo->code, "code" => $StaffInfo->code,
"department" => $StaffInfo->address, "department" => $StaffInfo->address,
"birthday" => date("Y-m-d", $StaffInfo->birthday), "birthday" => date("Y-m-d", $StaffInfo->birthday),
@@ -721,6 +768,14 @@ class ListManagementController extends Controller {
]) ])
] ]
])), true); ])), true);
if ($res['status'] == 10000) {
$resData = $res['data'];
for ($i = 0; $i < count($lsImgs); $i++) {
$lsImgs[$i]['serverKey'] = isset($resData[$i]) ? $resData[$i] : "";
}
$StaffInfo->image = json_encode($lsImgs);
$StaffInfo->save();
}
} catch (\Exception $e) { } catch (\Exception $e) {
} }

View File

@@ -66,13 +66,20 @@ class SiteController extends Controller {
* *
* @return Response|string * @return Response|string
*/ */
public function actionLogin() { public function actionLogin($lang = "vi-VI") {
if (!Yii::$app->user->isGuest) { if (!Yii::$app->user->isGuest) {
return $this->goHome(); return $this->goHome();
} }
Yii::$app->language = $lang;
$model = new LoginForm(); $model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) { if ($model->load(Yii::$app->request->post()) && $model->login()) {
$lang = Yii::$app->request->post('lang');
$language = \app\models\common::allLanguage();
foreach ($language as $key => $value) {
if ($value['name'] === $lang)
Yii::$app->session->set("language", $value);
}
return $this->redirect(["/config"]); return $this->redirect(["/config"]);
} }
@@ -88,9 +95,10 @@ class SiteController extends Controller {
* @return Response * @return Response
*/ */
public function actionLogout() { public function actionLogout() {
$lang = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : Yii::$app->language;
Yii::$app->user->logout(); Yii::$app->user->logout();
return $this->goHome(); return $this->redirect(['/site/login', 'lang' => $lang]); //$this->goHome();
} }
/** /**

View File

@@ -19,12 +19,12 @@ class UserController extends Controller {
public function init() { public function init() {
parent::init(); parent::init();
if (Yii::$app->user->isGuest) { Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : Yii::$app->language;
if (Yii::$app->user->isGuest)
return $this->redirect(['/site/login']); return $this->redirect(['/site/login']);
}
if (!Yii::$app->user->can("administrator")) { if (!Yii::$app->user->can("administrator"))
return $this->redirect(["/dashboard"]); return $this->redirect(["/dashboard"]);
}
} }
/** /**
@@ -86,11 +86,6 @@ class UserController extends Controller {
} }
} }
/**
* Creates a new User model.
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
public function actionCreate() { public function actionCreate() {
if (!Yii::$app->user->can("administrator")) { if (!Yii::$app->user->can("administrator")) {
Yii::$app->response->format = "json"; Yii::$app->response->format = "json";
@@ -142,13 +137,6 @@ class UserController extends Controller {
} }
} }
/**
* Updates an existing User model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id
* @return mixed
* @throws NotFoundHttpException if the model cannot be found
*/
public function actionUpdate($id) { public function actionUpdate($id) {
if (!Yii::$app->user->can("administrator")) { if (!Yii::$app->user->can("administrator")) {
Yii::$app->response->format = "json"; Yii::$app->response->format = "json";
@@ -196,13 +184,6 @@ class UserController extends Controller {
} }
} }
/**
* Deletes an existing User model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
* @throws NotFoundHttpException if the model cannot be found
*/
public function actionDelete($id) { public function actionDelete($id) {
if (!Yii::$app->user->can("administrator")) { if (!Yii::$app->user->can("administrator")) {
throw new \yii\web\ForbiddenHttpException(Yii::t("app", "Bạn không có quyền truy cập!")); throw new \yii\web\ForbiddenHttpException(Yii::t("app", "Bạn không có quyền truy cập!"));
@@ -213,19 +194,12 @@ class UserController extends Controller {
return $this->redirect(['index']); return $this->redirect(['index']);
} }
/**
* Finds the User model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return User the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel($id) { protected function findModel($id) {
if (($model = User::findOne($id)) !== null) { if (($model = User::findOne($id)) !== null) {
return $model; return $model;
} }
throw new NotFoundHttpException('The requested page does not exist.'); throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN"));
} }
public function actionProfiles() { public function actionProfiles() {
@@ -234,7 +208,7 @@ class UserController extends Controller {
} }
$model = $this->findModel(Yii::$app->user->id); $model = $this->findModel(Yii::$app->user->id);
$this->view->title = Yii::t("app", "Thông tin cá nhân"); $this->view->title = Yii::t("app", "THONG_TIN_CA_NHAN");
$this->view->params['breadcrumbs'][] = $this->view->title; $this->view->params['breadcrumbs'][] = $this->view->title;
return $this->render('profiles', [ return $this->render('profiles', [
@@ -264,7 +238,7 @@ class UserController extends Controller {
if (Yii::$app->user->isGuest) { if (Yii::$app->user->isGuest) {
return $this->redirect(['/site/login']); return $this->redirect(['/site/login']);
} }
$this->view->title = Yii::t("app", "Đổi mật khẩu"); $this->view->title = Yii::t("app", "DOI_MAT_KHAU");
$this->view->params['breadcrumbs'][] = $this->view->title; $this->view->params['breadcrumbs'][] = $this->view->title;
return $this->render('password', [ return $this->render('password', [

BIN
db/app.db

Binary file not shown.

View File

@@ -63,11 +63,62 @@ class CaptureLogsGrid {
public static function confidence() { public static function confidence() {
return function($model) { return function($model) {
return number_format($model->confidence, 2); $confidence = json_decode($model->confidence, true);
// $person1_html = $person2_html = "";
// $person1 = \app\models\ListManagement::findOne($confidence['id1']);
// if ($person1) {
// $images = json_decode($person1->image, true);
// $person1_html = "<div class='feature-img'>" . Html::img("/data/uploads/face/" . $images[0]['url'], [
// "class" => "img-thumbnail",
// "style" => "width: 100px;height:100px;"
// ]) . "<br>" . $person1->name . " [" . $confidence['percent1'] . "]" . "</div>";
// }
// if ($confidence['id2'] !== "0" && $confidence['id2'] != $confidence['id1']) {
// $person2 = \app\models\ListManagement::findOne($confidence['id2']);
// if ($person2) {
// $images = json_decode($person2->image, true);
// $person2_html = "<div class='feature-img'>" . Html::img("/data/uploads/face/" . $images[0]['url'], [
// "class" => "img-thumbnail",
// "style" => "width: 100px;height:100px;"
// ]) . "<br>" . $person2->name . " [" . $confidence['percent2'] . "]" . "</div>";
// }
// }
return $confidence['percent1']; //$person1_html . $person2_html;
};
}
public static function confidenceControlLogs() {
return function($model) {
$confidence = json_decode($model->confidence, true);
return $confidence['percent1'] . ($confidence['percent2'] > 0 ? " [" . $confidence['percent2'] . "]" : "");
}; };
} }
public static function rows() { public static function rows() {
return function($model, $index, $widget, $grid) {
$confidence = json_decode($model->confidence, true);
$person = isset($confidence['id1']) ? \app\models\ListManagement::findOne($confidence['id1']) : false;
$images = false;
if ($person) {
$images = json_decode($person->image, true);
}
return [
"ondblclick" => "_form(this);",
"style" => "cursor: pointer;",
"data" => [
"id" => $model->id,
"img" => "/data/uploads/face/" . $model->image,
"confidence" => json_encode([
"name" => $person ? $person->name : "",
"score" => isset($confidence['percent1']) ? $confidence['percent1'] : "",
"img" => isset($images[0]) ? "/data/uploads/face/" . $images[0]['url'] : ""
])
]
];
};
}
public static function rowsControlLogs() {
return function($model, $index, $widget, $grid) { return function($model, $index, $widget, $grid) {
return [ return [
"ondblclick" => "_form(this);", "ondblclick" => "_form(this);",

140
messages/en/app.php Normal file
View File

@@ -0,0 +1,140 @@
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
return [
"CAU_HINH" => "Configuration",
"CAU_HINH_THIET_BI" => "Device Configuration",
"CAU_HINH_MAY_CHU" => "Server Configuration",
"CAU_HINH_NHAN_DIEN" => "Recognition Configuration",
"DEVICE_CONFIG" => "",
"SERVER_CONFIG" => "",
"ENGINE_CONFIG" => "",
"SERVER_MQTT" => "server_mqtt",
"URL" => "url",
"LUU_LAI" => "Save",
"HAY_NHAP_THONG_TIN" => "Please enter the required information",
"BOX_CHUA_DUOC_DANG_KI_TREN_CMS" => "This box is not yet registered on CMS",
"DA_LUU_CAU_HINH" => "Configuration saved",
"LUU_CAU_HINH_THAT_BAI" => "Unable to save this configuration",
"RESET_THIET_BI" => "Reset the device",
"XOA_DU_LIEU_LUU_TRU_TRONG_THIET_BI" => "Delete the data stored in the device",
"RESET_CAU_HINH_THIET_BI" => "Reset to default configuration",
"DONG_Y" => "Confirm",
"HUY_BO" => "Cancel",
"HAY_LUA_CHON_THAO_TAC" => "Please select an operation",
"DELETE_DB_CONFIRM" => "Please confirm to delete all the data stored in the device?",
"RESET_DB_CONFIRM" => "Please confirm to reset the to default configuration?",
"CAU_HINH_IP_CHUA_DUNG" => "IP Configuration is not correct",
"SERVER_API" => "Server API",
"DEVICE_ID" => "Device ID",
"QUAN_LY_MAU" => "Face Sample Management",
"LICH_SU_HE_THONG" => "System history",
"DANH_SACH_NHAN_DIEN" => "Recognition log",
"ONLINE" => "Online",
"THONG_TIN_CA_NHAN" => "Personal Information",
"DOI_MAT_KHAU" => "Change Password",
"DANG_XUAT" => "Log out",
"PHIEN_BAN" => "Version",
"ID" => "ID",
"LOAI" => "Type",
"TEN" => "Name",
"HINH_ANH_DANG_KI" => "Sample Images",
"GIOI_TINH" => "Sex",
"NGAY_SINH" => "DOB",
"DIEN_THOAI" => "Phone Nnumber",
"DON_VI" => "Departement",
"THOI_GIAN_DANG_KI" => "Registration time",
"TEN_HIEN_THI" => "Display Name",
"WHITE_LIST" => "Whitelist",
"BLACK_LIST" => "Blacklist",
"MALE" => "Male",
"FEMALE" => "Female",
"TIM_KIEM_DU_LIEU" => "Search the data",
"TAT_CA" => "All",
"TIM_KIEM" => "Search",
"XOA_NHIEU_DU_LIEU" => "Delete multiple data",
"CHON_TOAN_BO_TRANG" => "Select all data",
"BO_CHON" => "Unselect",
"XAC_NHAN_XOA" => "Deletion Confirm",
"DONG_BO_VOI_MAY_CHU" => "Data Synchronization",
"DONG_BO_TU_MAY_CHU" => "Synchronize data from server",
"DONG_BO_LEN_MAY_CHU" => "Synchronize data to server",
"DONG_BO_TU_THIET_BI_KHAC" => "Synchronize data from other device",
"NHAP_IP_THIET_BI" => "Insert device's ip",
"SO_NGUOI_CO_ANH_TREN_TONG" => "Users with face samples/ Total",
"DAC_TRUNG_1" => "Face Feature 1",
"DAC_TRUNG_2" => "Face Feature 2",
"DANG_CAP_NHAT" => "Loading ...",
"THAO_TAC" => "Action",
"SUA" => "Edit",
"XOA" => "Delete",
"DANH_SACH" => "List",
"LUU" => "Save",
"HUY" => "Cancel",
"HAY_CHON_DOI_TUONG" => "Please choose objects",
"HAY_NHAP_TEN" => "Please insert name",
"HAY_NHAP_TEN_HIEN_THI" => "Please insert display name",
"CAP_NHAT_DU_LIEU_THANH_CONG" => "The data is updated successfully",
"MA_DOI_TUONG_DA_TON_TAI" => "Object code existed",
"DELETE_CONFIRM" => "Dele confirm?",
"HAY_CHON_DU_LIEU_DE_XOA" => "Please select data to delete",
"DA_XOA_DU_LIEU" => "Data is deleted",
"CHON_HINH_ANH" => "Please select an image",
"HINH_ANH_KHONG_NHAN_DIEN_DUOC_KHUON_MAT" => "Unable to recognize faces in the image",
"HAY_TAI_LEN_HINH_ANH" => "Please upload sample pictures",
"HAY_NHAP_DIA_CHI_IP_DONG_BO" => "Please enter the ip address of the device you want to synchronize",
"SAI_DINH_DANG_IP" => "IP address is not correct",
"TIM_KIEM_THEO_ID_HOAC_TEN" => "Search by ID/Name",
"KHONG_CO_KET_NOI_TOI_THIET_BI" => "No connection to the device",
"KHONG_CO_DU_LIEU_DONG_BO" => "Sychonozation data is blank",
"DONG_BO_DU_LIEU_HOAN_THANH" => "Data synchronization is completed",
"SO_ANH_MAU_TOI_DA" => "Each person can take up to {maxPicture} sample images",
"ANH_MAU_DA_DUOC_CHON" => "This image is selected as the sample for this person",
"KHONG_TIM_THAY_THONG_TIN" => "No information found",
"HUY_BO_TIM_KIEM" => "Cancel search",
"DA_LUA_CHON_X_DOI_TUONG" => "Selected <b class='text-red' id='totals-choose'>0</b> object.",
"DONG_BO_X_Y_DOI_TUONG" => "Synchronize <b id='progress-current' class='text-green'>0</b>/<b id='progress-totals' class='text-red'>0</b> object.",
"CHON_TAT_CA" => "Select all",
"BO_CHON_TAT_CA" => "Deselect all",
"DONG_BO" => "Synchronized",
"DONG_LAI" => "Close",
"COMPANY_ID" => "Company ID",
"CHON_DOI_TUONG_CHUA_TON_TAI" => "Selected object does not exist",
"DU_LIEU_KHONG_DOI" => "Data unchanged",
"THOI_GIAN" => "Time",
"HINH_ANH" => "Image",
"TRANG_THAI" => "Status",
"REMARK" => "Remark",
"DO_TIN_CAY" => "Reliability",
"TRANG_THAI_DONG_BO" => "Synchronization status",
"FROM" => "From",
"TO" => "To",
"HIEN_THI_TOAN_BO_DU_LIEU" => "Show all data",
"DOI_TUONG_KHONG_TON_TAI" => "Object does not exist",
"DA_THEM_HINH_ANH_MAU" => "Added sample images",
"XUAT_DU_LIEU" => "Export data",
"TEN_DANG_NHAP" => "Username",
"HO_TEN" => "Fullname",
"EMAIL" => "Email",
"LOAI_NGUOI_DUNG" => "User Type",
"THONG_TIN_DA_DUOC_LUU_LAI" => "Information saved",
"DOI_MAT_KHAU" => "Change Password",
"MAT_KHAU_CU" => "Old password",
"MAT_KHAU_MOI" => "New password",
"NHAC_LAI_MAT_KHAU_MOI" => "Retype new password",
"DOI_MAT_KHAU_THANH_CONG" => "Change password successfully",
"DANG_XU_LY" => "Loading ...",
"THONG_BAO" => "Notify",
"CO_LOI_XAY_RA_HAY_THU_LAI" => "An error occurred, check the network connection and try again",
"ENGINE_KHONG_HOAT_DONG" => "Engine is not running",
"DANG_NHAP" => "Login",
"MAT_KHAU" => "Password",
"RESET_THIET_BI_LOI" => "Error connecting to the server. Please check your internet connection and try again.",
"THU_LAI" => "Try again",
"TEN_DANG_NHAP_HOAC_MAT_KHAU_KHONG_DUNG" => "Incorrect username or password."
];

140
messages/ja/app.php Normal file
View File

@@ -0,0 +1,140 @@
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
return [
"CAU_HINH" => "構成",
"CAU_HINH_THIET_BI" => "デバイス構成",
"CAU_HINH_MAY_CHU" => " サーバ構成",
"CAU_HINH_NHAN_DIEN" => "認識構成",
"DEVICE_CONFIG" => "Device config",
"SERVER_CONFIG" => "Server config",
"ENGINE_CONFIG" => "Engine config",
"SERVER_MQTT" => "server_mqtt",
"URL" => "url",
"LUU_LAI" => "保存する",
"HAY_NHAP_THONG_TIN" => "情報を入力してください",
"BOX_CHUA_DUOC_DANG_KI_TREN_CMS" => "CMSでBox に登録されていません",
"DA_LUU_CAU_HINH" => "構成が保存されました",
"LUU_CAU_HINH_THAT_BAI" => "構成の保存に失敗しました",
"RESET_THIET_BI" => "デバイスをリセット",
"XOA_DU_LIEU_LUU_TRU_TRONG_THIET_BI" => "デバイスに保存されているデータを消去します",
"RESET_CAU_HINH_THIET_BI" => "デバイス構成をリセットする",
"DONG_Y" => "同意",
"HUY_BO" => "キャンセル",
"HAY_LUA_CHON_THAO_TAC" => "アクションを選択してください",
"DELETE_DB_CONFIRM" => "デバイスに保存されているデータをクリアしてもよろしいですか?",
"RESET_DB_CONFIRM" => "デバイス構成をリセットしてもよろしいですか?",
"CAU_HINH_IP_CHUA_DUNG" => "IP構成が違います",
"SERVER_API" => "Server API",
"DEVICE_ID" => "Device ID",
"QUAN_LY_MAU" => "テンプレート管理",
"LICH_SU_HE_THONG" => "システム履歴",
"DANH_SACH_NHAN_DIEN" => "認識リスト",
"ONLINE" => "オンライン",
"THONG_TIN_CA_NHAN" => "個人情報",
"DOI_MAT_KHAU" => "パスワード変更する",
"DANG_XUAT" => "ログアウト",
"PHIEN_BAN" => "バージョン",
"ID" => "ID",
"LOAI" => "タイプ",
"TEN" => "名前",
"HINH_ANH_DANG_KI" => "登録画像",
"GIOI_TINH" => "",
"NGAY_SINH" => "生年月日",
"DIEN_THOAI" => "電話番号",
"DON_VI" => "部署",
"THOI_GIAN_DANG_KI" => "登録時間",
"TEN_HIEN_THI" => "表示名",
"WHITE_LIST" => "Whitelist",
"BLACK_LIST" => "Blacklist",
"MALE" => "",
"FEMALE" => "",
"TIM_KIEM_DU_LIEU" => "データ検索",
"TAT_CA" => "全部",
"TIM_KIEM" => "検索",
"XOA_NHIEU_DU_LIEU" => "大量のデータを削除する",
"CHON_TOAN_BO_TRANG" => "ページ全体を選択",
"BO_CHON" => "取り消し",
"XAC_NHAN_XOA" => "削除の確認",
"DONG_BO_VOI_MAY_CHU" => "サーバーと同期する",
"DONG_BO_TU_MAY_CHU" => "サーバーから同期する",
"DONG_BO_LEN_MAY_CHU" => "サーバーに同期する",
"DONG_BO_TU_THIET_BI_KHAC" => "他のデバイスから同期する",
"NHAP_IP_THIET_BI" => "デバイスIPを入力してください",
"SO_NGUOI_CO_ANH_TREN_TONG" => "写真を持っている人の数/合計",
"DAC_TRUNG_1" => "特徴 1",
"DAC_TRUNG_2" => "特徴 2",
"DANG_CAP_NHAT" => "更新中 ...",
"THAO_TAC" => "取り扱う",
"SUA" => "修理する",
"XOA" => "消す",
"DANH_SACH" => "リスト",
"LUU" => "保存する",
"HUY" => "キャンセル",
"HAY_CHON_DOI_TUONG" => "オブジェクトを選択してください",
"HAY_NHAP_TEN" => "名前を入力してください",
"HAY_NHAP_TEN_HIEN_THI" => "表示名を入力してください",
"CAP_NHAT_DU_LIEU_THANH_CONG" => "データの更新に成功しました",
"MA_DOI_TUONG_DA_TON_TAI" => "オブジェクトコードはすでに存在します",
"DELETE_CONFIRM" => "消去してもよろしいですか?",
"HAY_CHON_DU_LIEU_DE_XOA" => "削除するデータを選択してください",
"DA_XOA_DU_LIEU" => "削除されたデータ",
"CHON_HINH_ANH" => "画像を選択",
"HINH_ANH_KHONG_NHAN_DIEN_DUOC_KHUON_MAT" => "画像が顔を認識しない",
"HAY_TAI_LEN_HINH_ANH" => "写真をアップロードしてください",
"HAY_NHAP_DIA_CHI_IP_DONG_BO" => "同期するデバイスのIPアドレスを入力してください",
"SAI_DINH_DANG_IP" => "間違ったIP形式",
"TIM_KIEM_THEO_ID_HOAC_TEN" => "ID と名前で検索",
"KHONG_CO_KET_NOI_TOI_THIET_BI" => "デバイスに接続されていません",
"KHONG_CO_DU_LIEU_DONG_BO" => "データ同期なし",
"DONG_BO_DU_LIEU_HOAN_THANH" => "データ同期が完了しました",
"SO_ANH_MAU_TOI_DA" => "各オブジェクトは、最大{maxPicture}のサンプル画像のみを受信できます",
"ANH_MAU_DA_DUOC_CHON" => "この画像は、この主題のモデルとして選択されています",
"KHONG_TIM_THAY_THONG_TIN" => "情報が見つかりません",
"HUY_BO_TIM_KIEM" => "検索をキャンセルする",
"DA_LUA_CHON_X_DOI_TUONG" => "選択された<bclass = 'text-red' id = 'totals-choose'> 0 </ b>オブジェクト.",
"DONG_BO_X_Y_DOI_TUONG" => "Đ同期<bid = 'progress-current' class = 'text-green'> 0 </ b> / <b id = 'progress-totals' class = 'text-red'> 0 </ b>オブジェクト.",
"CHON_TAT_CA" => "すべて選択",
"BO_CHON_TAT_CA" => "すべての選択を解除",
"DONG_BO" => "同期",
"DONG_LAI" => "クローズ",
"COMPANY_ID" => "Company ID",
"CHON_DOI_TUONG_CHUA_TON_TAI" => "存在しないオブジェクトを選択してください",
"DU_LIEU_KHONG_DOI" => "データは変更されていません",
"THOI_GIAN" => "時間",
"HINH_ANH" => "画像",
"TRANG_THAI" => "状態",
"REMARK" => "Remark",
"DO_TIN_CAY" => "信頼性",
"TRANG_THAI_DONG_BO" => "同期ステータス",
"FROM" => "フォーム",
"TO" => "",
"HIEN_THI_TOAN_BO_DU_LIEU" => "すべてのデータを表示",
"DOI_TUONG_KHONG_TON_TAI" => "オブジェクトが存在しません",
"DA_THEM_HINH_ANH_MAU" => "サンプル画像を追加",
"XUAT_DU_LIEU" => "データのエクスポート",
"TEN_DANG_NHAP" => "ユーザー名",
"HO_TEN" => "名前",
"EMAIL" => "メール",
"LOAI_NGUOI_DUNG" => "ユーザータイプ",
"THONG_TIN_DA_DUOC_LUU_LAI" => "情報が保存されました",
"DOI_MAT_KHAU" => "パスワードを変更する",
"MAT_KHAU_CU" => "以前のパスワード",
"MAT_KHAU_MOI" => "新しいパスワード",
"NHAC_LAI_MAT_KHAU_MOI" => "新しいパスワードを繰り返す",
"DOI_MAT_KHAU_THANH_CONG" => "パスワードを正常に変更する",
"DANG_XU_LY" => "処理中 ...",
"THONG_BAO" => "報告",
"CO_LOI_XAY_RA_HAY_THU_LAI" => "おそらくネットワーク接続が原因でエラーが発生しました。再試行してください",
"ENGINE_KHONG_HOAT_DONG" => "Engine不活動",
"DANG_NHAP" => "ログイン",
"MAT_KHAU" => "パスワード",
"RESET_THIET_BI_LOI" => "サーバーへの接続中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください",
"THU_LAI" => "再試行",
"TEN_DANG_NHAP_HOAC_MAT_KHAU_KHONG_DUNG" => "ユーザーネームまたはパスワードが違います"
];

View File

@@ -6,4 +6,135 @@
* and open the template in the editor. * and open the template in the editor.
*/ */
return []; return [
"CAU_HINH" => "Cấu hình",
"CAU_HINH_THIET_BI" => "Cấu hình thiết bị",
"CAU_HINH_MAY_CHU" => "Cấu hình máy chủ",
"CAU_HINH_NHAN_DIEN" => "Cấu hình nhận diện",
"DEVICE_CONFIG" => "Device config",
"SERVER_CONFIG" => "Server config",
"ENGINE_CONFIG" => "Engine config",
"SERVER_MQTT" => "server_mqtt",
"URL" => "url",
"LUU_LAI" => "Lưu lại",
"HAY_NHAP_THONG_TIN" => "Hãy nhập thông tin",
"BOX_CHUA_DUOC_DANG_KI_TREN_CMS" => "Box chưa được đăng kí trên CMS",
"DA_LUU_CAU_HINH" => "Đã lưu cấu hình",
"LUU_CAU_HINH_THAT_BAI" => "Lưu cấu hình thất bại",
"RESET_THIET_BI" => "Reset thiết bị",
"XOA_DU_LIEU_LUU_TRU_TRONG_THIET_BI" => "Xóa dữ liệu lưu trữ trong thiết bị",
"RESET_CAU_HINH_THIET_BI" => "Reset cấu hình thiết bị",
"DONG_Y" => "Đồng ý",
"HUY_BO" => "Hủy bỏ",
"HAY_LUA_CHON_THAO_TAC" => "Hãy lựa chọn thao tác",
"DELETE_DB_CONFIRM" => "Bạn có chắc chắn muốn xóa dữ liệu lưu trữ trong thiết bị không?",
"RESET_DB_CONFIRM" => "Bạn có chắc chắn muốn reset cấu hình thiết bị không?",
"CAU_HINH_IP_CHUA_DUNG" => "Cấu hình ip chưa đúng",
"SERVER_API" => "Server API",
"DEVICE_ID" => "Device ID",
"QUAN_LY_MAU" => "Quản lý mẫu",
"LICH_SU_HE_THONG" => "Lịch sử hệ thống",
"DANH_SACH_NHAN_DIEN" => "Danh sách nhận diện",
"ONLINE" => "Trực tuyến",
"THONG_TIN_CA_NHAN" => "Thông tin cá nhân",
"DOI_MAT_KHAU" => "Đổi mật khẩu",
"DANG_XUAT" => "Đăng xuất",
"PHIEN_BAN" => "Phiên bản",
"ID" => "ID",
"LOAI" => "Loại",
"TEN" => "Tên",
"HINH_ANH_DANG_KI" => "Hình ảnh đăng kí",
"GIOI_TINH" => "Giới tính",
"NGAY_SINH" => "Ngày sinh",
"DIEN_THOAI" => "Điện thoại",
"DON_VI" => "Đơn vị",
"THOI_GIAN_DANG_KI" => "Thời gian đăng kí",
"TEN_HIEN_THI" => "Tên hiển thị",
"WHITE_LIST" => "Whitelist",
"BLACK_LIST" => "Blacklist",
"MALE" => "Nam",
"FEMALE" => "Nữ",
"TIM_KIEM_DU_LIEU" => "Tìm kiếm dữ liệu",
"TAT_CA" => "Tất cả",
"TIM_KIEM" => "Tìm kiếm",
"XOA_NHIEU_DU_LIEU" => "Xóa nhiều dữ liệu",
"CHON_TOAN_BO_TRANG" => "Chọn toàn bộ trang",
"BO_CHON" => "Bỏ chọn",
"XAC_NHAN_XOA" => "Xác nhận xóa",
"DONG_BO_VOI_MAY_CHU" => "Đồng bộ với máy chủ",
"DONG_BO_TU_MAY_CHU" => "Đồng bộ từ máy chủ",
"DONG_BO_LEN_MAY_CHU" => "Đồng bộ lên máy chủ",
"DONG_BO_TU_THIET_BI_KHAC" => "Đồng bộ từ thiết bị khác",
"NHAP_IP_THIET_BI" => "Nhập ip thiết bị",
"SO_NGUOI_CO_ANH_TREN_TONG" => "Số người có ảnh / tổng",
"DAC_TRUNG_1" => "Đặc trưng 1",
"DAC_TRUNG_2" => "Đặc trưng 2",
"DANG_CAP_NHAT" => "Đang cập nhật ...",
"THAO_TAC" => "Thao tác",
"SUA" => "Sửa",
"XOA" => "Xóa",
"DANH_SACH" => "Danh sách",
"LUU" => "Lưu",
"HUY" => "Hủy",
"HAY_CHON_DOI_TUONG" => "Hãy chọn đối tượng",
"HAY_NHAP_TEN" => "Hãy nhập tên",
"HAY_NHAP_TEN_HIEN_THI" => "Hãy nhập tên hiển thị",
"CAP_NHAT_DU_LIEU_THANH_CONG" => "Cập nhật dữ liệu thành công",
"MA_DOI_TUONG_DA_TON_TAI" => "Mã đối tượng đã tồn tại",
"DELETE_CONFIRM" => "Bạn có chắc chắn muốn xóa không",
"HAY_CHON_DU_LIEU_DE_XOA" => "Hãy chọn dữ liệu để xóa",
"DA_XOA_DU_LIEU" => "Đã xóa dữ liệu",
"CHON_HINH_ANH" => "Chọn hình ảnh",
"HINH_ANH_KHONG_NHAN_DIEN_DUOC_KHUON_MAT" => "Hình ảnh không nhận diện được khuôn mặt",
"HAY_TAI_LEN_HINH_ANH" => "Hãy tải lên hình ảnh",
"HAY_NHAP_DIA_CHI_IP_DONG_BO" => "Hãy nhập địa chỉ ip thiết bị muốn đồng bộ",
"SAI_DINH_DANG_IP" => "Sai định dạng ip",
"TIM_KIEM_THEO_ID_HOAC_TEN" => "Tìm kiếm theo ID hoặc tên",
"KHONG_CO_KET_NOI_TOI_THIET_BI" => "Không có kết nối tới thiết bị",
"KHONG_CO_DU_LIEU_DONG_BO" => "Không có dữ liệu đồng bộ",
"DONG_BO_DU_LIEU_HOAN_THANH" => "Đồng bộ dữ liệu hoàn thành",
"SO_ANH_MAU_TOI_DA" => "Mỗi đối tượng chỉ nhận tối đa {maxPicture} hình ảnh mẫu",
"ANH_MAU_DA_DUOC_CHON" => "Hình ảnh này đã được chọn làm mẫu cho đối tượng này",
"KHONG_TIM_THAY_THONG_TIN" => "Không tìm thấy thông tin",
"HUY_BO_TIM_KIEM" => "Hủy bỏ tìm kiếm",
"DA_LUA_CHON_X_DOI_TUONG" => "Đã lựa chọn <b class='text-red' id='totals-choose'>0</b> đối tượng.",
"DONG_BO_X_Y_DOI_TUONG" => "Đồng bộ <b id='progress-current' class='text-green'>0</b>/<b id='progress-totals' class='text-red'>0</b> đối tượng.",
"CHON_TAT_CA" => "Chọn tất cả",
"BO_CHON_TAT_CA" => "Bỏ chọn tất cả",
"DONG_BO" => "Đồng bộ",
"DONG_LAI" => "Đóng lại",
"COMPANY_ID" => "Company ID",
"CHON_DOI_TUONG_CHUA_TON_TAI" => "Chọn đối tượng chưa tồn tại",
"DU_LIEU_KHONG_DOI" => "Dữ liệu không đổi",
"THOI_GIAN" => "Thời gian",
"HINH_ANH" => "Hình ảnh",
"TRANG_THAI" => "Trạng thái",
"REMARK" => "Remark",
"DO_TIN_CAY" => "Độ tin cậy",
"TRANG_THAI_DONG_BO" => "Trạng thái đồng bộ",
"FROM" => "Từ",
"TO" => "Đến",
"HIEN_THI_TOAN_BO_DU_LIEU" => "Hiển thị toàn bộ dữ liệu",
"DOI_TUONG_KHONG_TON_TAI" => "Đối tượng không tồn tại",
"DA_THEM_HINH_ANH_MAU" => "Đã thêm hình ảnh mẫu",
"XUAT_DU_LIEU" => "Xuất dữ liệu",
"TEN_DANG_NHAP" => "Tên đăng nhập",
"HO_TEN" => "Họ tên",
"EMAIL" => "Email",
"LOAI_NGUOI_DUNG" => "Loại người dùng",
"THONG_TIN_DA_DUOC_LUU_LAI" => "Thông tin đã được lưu lại",
"DOI_MAT_KHAU" => "Đổi mật khẩu",
"MAT_KHAU_CU" => "Mật khẩu cũ",
"MAT_KHAU_MOI" => "Mật khẩu mới",
"NHAC_LAI_MAT_KHAU_MOI" => "Nhắc lại mật khẩu mới",
"DOI_MAT_KHAU_THANH_CONG" => "Đổi mật khẩu thành công",
"DANG_XU_LY" => "Đang xử lý ...",
"THONG_BAO" => "Thông báo",
"CO_LOI_XAY_RA_HAY_THU_LAI" => "Có lỗi xảy ra, có thể do đường truyền mạng, xin vui lòng thử lại",
"ENGINE_KHONG_HOAT_DONG" => "Engine không hoạt động",
"DANG_NHAP" => "Đăng nhập",
"MAT_KHAU" => "Mật khẩu",
"RESET_THIET_BI_LOI" => "Lỗi kết nối đến server. Hãy kiểm tra lại kết nối internet và thử lại.",
"THU_LAI" => "Thử lại",
"TEN_DANG_NHAP_HOAC_MAT_KHAU_KHONG_DUNG" => "Tên đăng nhập hoặc mật khẩu không đúng."
];

View File

@@ -40,15 +40,15 @@ class CaptureLogs extends \yii\db\ActiveRecord {
*/ */
public function attributeLabels() { public function attributeLabels() {
return [ return [
'id' => 'ID', 'id' => Yii::t("app", "ID"),
'time' => 'Thời gian', 'time' => Yii::t("app", "THOI_GIAN"),
'image' => 'Hình ảnh', 'image' => Yii::t("app", "HINH_ANH"),
'status' => 'Status', 'status' => Yii::t("app", "TRANG_THAI"),
'remark' => 'Remark', 'remark' => Yii::t("app", "REMARK"),
'staff_name' => "Name", 'staff_name' => Yii::t("app", "TEN"),
'staff_image' => "Hình ảnh đăng kí", 'staff_image' => Yii::t("app", "HINH_ANH_DANG_KI"),
'confidence' => 'Độ tin cậy', 'confidence' => Yii::t("app", "DO_TIN_CAY"),
'sync_status' => 'Trạng thái đồng bộ' 'sync_status' => Yii::t("app", "TRANG_THAI_DONG_BO")
]; ];
} }

View File

@@ -8,9 +8,11 @@ use Yii;
* This is the model class for table "list_management". * This is the model class for table "list_management".
* *
* @property int $id * @property int $id
* @property string $staff_id
* @property string $code * @property string $code
* @property string $type * @property string $type
* @property string $name * @property string $name
* @property string $abbreviated_name
* @property string $image * @property string $image
* @property string $gender * @property string $gender
* @property int $birthday * @property int $birthday
@@ -33,7 +35,7 @@ class ListManagement extends \yii\db\ActiveRecord {
*/ */
public function rules() { public function rules() {
return [ return [
[['type', 'name', 'gender', 'telephone', 'address', 'image', 'code'], 'string'], [['type', 'name', 'gender', 'telephone', 'address', 'image', 'code', 'abbreviated_name', 'staff_id'], 'string'],
[['birthday', 'time', 'last_modified'], 'integer'], [['birthday', 'time', 'last_modified'], 'integer'],
]; ];
} }
@@ -43,22 +45,25 @@ class ListManagement extends \yii\db\ActiveRecord {
*/ */
public function attributeLabels() { public function attributeLabels() {
return [ return [
'id' => 'ID', 'id' => Yii::t("app", "ID"),
'code' => 'ID', 'code' => Yii::t("app", "ID"),
'type' => 'Loại', 'type' => Yii::t("app", "LOAI"),
'name' => 'Tên', 'name' => Yii::t("app", "TEN"),
'image' => 'Hình ảnh đăng kí', 'image' => Yii::t("app", "HINH_ANH_DANG_KI"),
'gender' => 'Giới tính', 'gender' => Yii::t("app", "GIOI_TINH"),
'birthday' => 'Ngày sinh', 'birthday' => Yii::t("app", "NGAY_SINH"),
'telephone' => 'Điện thoại', 'telephone' => Yii::t("app", "DIEN_THOAI"),
'address' => 'Đơn vị', 'address' => Yii::t("app", "DON_VI"),
'time' => 'Thời gian đăng kí', 'time' => Yii::t("app", "THOI_GIAN_DANG_KI"),
'last_modified' => 'Last Modified' 'last_modified' => 'Last Modified',
'abbreviated_name' => Yii::t("app", "TEN_HIEN_THI"),
'staff_id' => Yii::t("app", "ID"),
]; ];
} }
public function create($data) { public function create($data) {
$r = $this->load([ $r = $this->load([
'staff_id' => $data['staff_id'],
'code' => $data['code'], 'code' => $data['code'],
'type' => $data['type'], 'type' => $data['type'],
'name' => $data['name'], 'name' => $data['name'],
@@ -67,6 +72,7 @@ class ListManagement extends \yii\db\ActiveRecord {
'birthday' => $data['birthday'] === "" ? 0 : date_format(date_create_from_format('d/m/Y', $data['birthday']), 'U'), 'birthday' => $data['birthday'] === "" ? 0 : date_format(date_create_from_format('d/m/Y', $data['birthday']), 'U'),
'telephone' => $data['telephone'], 'telephone' => $data['telephone'],
'address' => $data['address'], 'address' => $data['address'],
'abbreviated_name' => $data['abbreviated_name'],
'time' => time(), 'time' => time(),
'last_modified' => time() 'last_modified' => time()
], ''); ], '');
@@ -80,14 +86,19 @@ class ListManagement extends \yii\db\ActiveRecord {
} }
} }
public static $typeArray = [ public static function typeArray() {
"wl" => "Whitelist", return [
"bl" => "Blacklist" "wl" => Yii::t("app", "WHITE_LIST"),
]; "bl" => Yii::t("app", "BLACK_LIST")
public static $genderArray = [ ];
"Male" => "Nam", }
"Female" => "Nữ"
]; public static function genderArray() {
return [
"Male" => Yii::t("app", "MALE"),
"Female" => Yii::t("app", "FEMALE"),
];
}
public static function nameArray() { public static function nameArray() {
$res = [""]; $res = [""];
@@ -102,7 +113,7 @@ class ListManagement extends \yii\db\ActiveRecord {
$res = []; $res = [];
$ls = self::find()->all(); $ls = self::find()->all();
foreach ($ls as $key => $value) { foreach ($ls as $key => $value) {
$res[] = $value->code; $res[] = $value->staff_id;
} }
return $res; return $res;
} }
@@ -118,14 +129,24 @@ class ListManagement extends \yii\db\ActiveRecord {
public function getAllFeatures() { public function getAllFeatures() {
$features = json_decode($this->image, true); $features = json_decode($this->image, true);
$f = []; // $f = [];
// foreach ($features as $k => $v) {
// $f[] = $v['features'];
// if (isset($v['features512']))
// if (count($v['features512']))
// $f[] = $v['features512'];
// }
$feature1 = $feature2 = [];
foreach ($features as $k => $v) { foreach ($features as $k => $v) {
$f[] = $v['features']; $feature1[] = $v['features'];
if (isset($v['features512'])) if (isset($v['features512']))
if (count($v['features512'])) if (count($v['features512']))
$f[] = $v['features512']; $feature2[] = $v['features512'];
} }
return $f; return [
"feature1" => $feature1,
"feature2" => $feature2
];
} }
public static function statisticFeatures() { public static function statisticFeatures() {

View File

@@ -43,11 +43,18 @@ class LoginForm extends Model {
if (!$this->hasErrors()) { if (!$this->hasErrors()) {
$user = $this->getUser(); $user = $this->getUser();
if (!$user || !$user->validatePassword($this->password)) { if (!$user || !$user->validatePassword($this->password)) {
$this->addError($attribute, 'Incorrect username or password.'); $this->addError($attribute, Yii::t("app", "TEN_DANG_NHAP_HOAC_MAT_KHAU_KHONG_DUNG"));
} }
} }
} }
public function attributeLabels() {
return [
'username' => Yii::t("app", "TEN_DANG_NHAP"),
'password' => Yii::t("app", "MAT_KHAU")
];
}
/** /**
* Logs in a user using the provided username and password. * Logs in a user using the provided username and password.
* @return bool whether the user is logged in successfully * @return bool whether the user is logged in successfully

View File

@@ -172,22 +172,25 @@ class common extends \yii\db\ActiveRecord {
} }
public static function requestToEngine($path, $data) { public static function requestToEngine($path, $data) {
return file_get_contents("http://localhost:2305" . $path, false, stream_context_create([ $content = @file_get_contents("http://localhost:2305" . $path, false, stream_context_create([
'http' => [ 'http' => [
'header' => "Content-Type: application/json", 'header' => "Content-Type: application/json",
'method' => "POST", 'method' => "POST",
'content' => json_encode($data) 'content' => json_encode($data)
] ]
])); ]));
if ($content == false)
return ["status" => false];
return ["status" => true, "data" => $content];
} }
public static function updateFeature($datas) { public static function updateFeature($datas) {
return file_get_contents("http://localhost:2305/update-person", false, stream_context_create([ return @file_get_contents("http://localhost:2305/update-person", false, stream_context_create([
'http' => [ 'http' => [
'header' => "Content-Type: application/json", 'header' => "Content-Type: application/json",
'method' => "POST", 'method' => "POST",
'content' => json_encode($datas) 'content' => json_encode($datas)
] ]
])); ]));
} }
@@ -220,4 +223,19 @@ class common extends \yii\db\ActiveRecord {
return $str; return $str;
} }
public static function allLanguage() {
return [
["icon" => "vi.png", "name" => "vi-VI", "description" => "Tiếng Việt"],
["icon" => "en.png", "name" => "en-EN", "description" => "English"],
["icon" => "jp.png", "name" => "ja-JA", "description" => "Japanese"]
];
}
public static function rsaEncode($text) {
$publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCXB8c44cboYsGG6IzISqxf8W7q3AN0mGmekDYpBWpz9udif+jwK6h7NuOZvFDeB/32TVrtvaGDmExCeBerpcoOvGh4eUXyke2lSLzrg7pc/wD0KproEGoAAFDB0Pr5bZhg6ELp3Sk++0MPyxH6u1pgtHDxEnMwXV8cxw/rSCM+wIDAQAB";
$publicKey = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($publicKey, 64, "\n", true) . "\n-----END PUBLIC KEY-----";
openssl_public_encrypt($text, $encrypted, $publicKey, OPENSSL_PKCS1_PADDING);
return base64_encode($encrypted);
}
} }

View File

@@ -4,5 +4,5 @@ copy.src.target=
remote.connection=BiFace-99bab6 remote.connection=BiFace-99bab6
remote.directory=/BiFace_Server_Lite remote.directory=/BiFace_Server_Lite
remote.upload=ON_SAVE remote.upload=ON_SAVE
run.as=LOCAL run.as=REMOTE
url=http://localhost/ url=http://localhost/

View File

@@ -1,16 +1,17 @@
<?php <?php
use yii\widgets\Breadcrumbs; use yii\widgets\Breadcrumbs;
use dmstr\widgets\Alert; use dmstr\widgets\Alert;
?> ?>
<div class="content-wrapper"> <div class="content-wrapper">
<!-- <section class="content-header"> <!-- <section class="content-header">
<?= <?=
Breadcrumbs::widget( Breadcrumbs::widget(
[ [
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
] ]
) ?> )
?>
</section>--> </section>-->
<section class="content" style="padding: 0 0 15px 0;"> <section class="content" style="padding: 0 0 15px 0;">
@@ -21,8 +22,12 @@ use dmstr\widgets\Alert;
</div> </div>
<footer class="main-footer"> <footer class="main-footer">
<div class="pull-right hidden-xs" style="margin-top: 10px;"> <div class="pull-right hidden-xs">
<!--<b>Hotline</b> <a href="tel:0912461556">091.246.1556</a>--> <b><?php echo Yii::t("app", "PHIEN_BAN"); ?>: </b>
<?php
$version = \app\models\SyncUrl::findOne(['key_config' => 'version']);
echo $version ? $version->data : Yii::$app->params["version"];
?>
</div> </div>
<!--<strong>Copyright &copy; 2020 <a href="https://beetinnovators.com/"><img src="/images/BI_Logo.png" width="80px"></a> & <a href="https://tctech.vn/"><img src="/images/TCTech.jpg" width="80px"></a>.</strong> All rights reserved.--> <!--<strong>Copyright &copy; 2020 <a href="https://beetinnovators.com/"><img src="/images/BI_Logo.png" width="80px"></a> & <a href="https://tctech.vn/"><img src="/images/TCTech.jpg" width="80px"></a>.</strong> All rights reserved.-->
<strong>Copyright &copy; 2020 <a href="https://beetinnovators.com/">BEETINNOVATORS</a>.</strong> All rights reserved. <strong>Copyright &copy; 2020 <a href="https://beetinnovators.com/">BEETINNOVATORS</a>.</strong> All rights reserved.

View File

@@ -38,42 +38,68 @@ use yii\widgets\ActiveForm;
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li class="<?php if (Yii::$app->controller->id == "config") echo "active"; ?>"> <li class="<?php if (Yii::$app->controller->id == "config") echo "active"; ?>">
<a href="<?php echo yii\helpers\Url::to(['/config/cau-hinh-thiet-bi']); ?>"> <a href="<?php echo yii\helpers\Url::to(['/config/cau-hinh-thiet-bi']); ?>">
<i class="fa fa-cogs"></i> Cấu hình <i class="fa fa-cogs"></i> <?php echo Yii::t("app", "CAU_HINH"); ?>
</a> </a>
</li> </li>
<li> <li>
<a href="<?php echo yii\helpers\Url::to(['/config/reset']); ?>" onclick="common.resetForm(this);return false;"> <a href="<?php echo yii\helpers\Url::to(['/config/reset']); ?>" onclick="common.resetForm(this);return false;">
<i class="fa fa-refresh"></i> Reset thiết bị <i class="fa fa-refresh"></i> <?php echo Yii::t("app", "RESET_THIET_BI"); ?>
</a> </a>
</li> </li>
<li class="<?php if (Yii::$app->controller->id == "list-management") echo "active"; ?>"> <li class="<?php if (Yii::$app->controller->id == "list-management") echo "active"; ?>">
<a href="<?php echo yii\helpers\Url::to(['/list-management']); ?>"> <a href="<?php echo yii\helpers\Url::to(['/list-management']); ?>">
<i class="fa fa-list"></i> Quản lý mẫu <i class="fa fa-list"></i> <?php echo Yii::t("app", "QUAN_LY_MAU"); ?>
</a> </a>
</li> </li>
<li class="<?php if (Yii::$app->controller->id == "capture-logs") echo "active"; ?>"> <li class="<?php if (Yii::$app->controller->id == "capture-logs") echo "active"; ?>">
<a href="<?php echo yii\helpers\Url::to(['/capture-logs']); ?>"> <a href="<?php echo yii\helpers\Url::to(['/capture-logs']); ?>">
<i class="fa fa-camera"></i> Lịch sử hệ thống <i class="fa fa-camera"></i> <?php echo Yii::t("app", "LICH_SU_HE_THONG"); ?>
</a> </a>
</li> </li>
<li class="<?php if (Yii::$app->controller->id == "control-logs") echo "active"; ?>"> <li class="<?php if (Yii::$app->controller->id == "control-logs") echo "active"; ?>">
<a href="<?php echo yii\helpers\Url::to(['/control-logs']); ?>"> <a href="<?php echo yii\helpers\Url::to(['/control-logs']); ?>">
<i class="fa fa-database"></i> Danh sách nhận diện <i class="fa fa-database"></i> <?php echo Yii::t("app", "DANH_SACH_NHAN_DIEN"); ?>
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
<div class="navbar-custom-menu"> <div class="navbar-custom-menu">
<?php
$languages = app\models\common::allLanguage();
$currentLanguage = ["icon" => "vi.png", "name" => "vi-VI", "description" => "Tiếng Việt"];
if (Yii::$app->session->get("language"))
$currentLanguage = Yii::$app->session->get("language");
else
Yii::$app->session->set("language", $currentLanguage);
?>
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li class="dropdown notifications-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img src="/images/lang/<?php echo $currentLanguage["icon"]; ?>" width="20px">
</a>
<ul class="dropdown-menu" style="width: 150px;">
<li>
<ul class="menu">
<?php foreach ($languages as $key => $value) { ?>
<li>
<a href="<?php echo yii\helpers\Url::to(['/dashboard/change-language', 'lang' => $value['name']]); ?>" onclick="common.changeLanguage(this);return false;">
<img src="/images/lang/<?php echo $value['icon']; ?>" width="20px"> <?php echo $value['description']; ?>
</a>
</li>
<?php } ?>
</ul>
</li>
</ul>
</li>
<li class="dropdown user user-menu"> <li class="dropdown user user-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img src="<?php <img src="<?php
if (Yii::$app->user->isGuest) { if (Yii::$app->user->isGuest) {
echo $directoryAsset . "/img/user2-160x160.jpg"; echo $directoryAsset . "/img/user2-160x160.jpg";
} else { } else {
echo Yii::$app->user->identity->user_image == null ? $directoryAsset . "/img/user2-160x160.jpg" : Yii::getAlias("@images_folder") . Yii::$app->user->identity->user_image; echo Yii::$app->user->identity->user_image == null ? $directoryAsset . "/img/user2-160x160.jpg" : Yii::getAlias("@images_folder") . Yii::$app->user->identity->user_image;
} }
?>" class="user-image user-avatar" alt="User Image"/> ?>" class="user-image user-avatar" alt="User Image"/>
<span class="hidden-xs user-profiles-name"> <span class="hidden-xs user-profiles-name">
<?php <?php
if (Yii::$app->user->isGuest) { if (Yii::$app->user->isGuest) {
@@ -90,26 +116,26 @@ use yii\widgets\ActiveForm;
<div class="user-panel"> <div class="user-panel">
<div class="pull-left image"> <div class="pull-left image">
<img src="<?php <img src="<?php
if (Yii::$app->user->isGuest) { if (Yii::$app->user->isGuest) {
echo $directoryAsset . "/img/user2-160x160.jpg"; echo $directoryAsset . "/img/user2-160x160.jpg";
} else { } else {
echo Yii::$app->user->identity->user_image == null ? $directoryAsset . "/img/user2-160x160.jpg" : Yii::getAlias("@images_folder") . Yii::$app->user->identity->user_image; echo Yii::$app->user->identity->user_image == null ? $directoryAsset . "/img/user2-160x160.jpg" : Yii::getAlias("@images_folder") . Yii::$app->user->identity->user_image;
} }
?>" class="img-circle user-avatar"> ?>" class="img-circle user-avatar">
</div> </div>
<div class="pull-left info"> <div class="pull-left info">
<p style="color: #fff;" class="user-profiles-name"><?= Yii::$app->user->isGuest ? "" : \Yii::$app->user->identity->first_name; ?></p> <p style="color: #fff;" class="user-profiles-name"><?= Yii::$app->user->isGuest ? "" : \Yii::$app->user->identity->first_name; ?></p>
<a href="#" style="color: #fff;"><i class="fa fa-circle text-success"></i> <?php echo Yii::t("app", "Online"); ?></a> <a href="#" style="color: #fff;"><i class="fa fa-circle text-success"></i> <?php echo Yii::t("app", "ONLINE"); ?></a>
</div> </div>
</div> </div>
</li> </li>
<li class="user-body" style="border:none"> <li class="user-body" style="border:none">
<ul style="list-style: none; padding: 0"> <ul style="list-style: none; padding: 0">
<li><a class="text-bold" onclick="user.formInfo(this);return false;" href="<?php echo yii\helpers\Url::to(['/user/profiles']); ?>"><i class="fa fa-user"></i>&nbsp; <?php echo Yii::t("app", "Thông tin cá nhân"); ?></a></li> <li><a class="text-bold" href="<?php echo yii\helpers\Url::to(['/user/profiles']); ?>"><i class="fa fa-user"></i>&nbsp; <?php echo Yii::t("app", "THONG_TIN_CA_NHAN"); ?></a></li>
<li><a class="text-bold" onclick="user.formChangePassword(this);return false;" href="<?php echo yii\helpers\Url::to(['/user/change-password']); ?>"><i class="fa fa-lock"></i>&nbsp; <?php echo Yii::t("app", "Đổi mật khẩu"); ?></a></li> <li><a class="text-bold" href="<?php echo yii\helpers\Url::to(['/user/change-password']); ?>"><i class="fa fa-lock"></i>&nbsp; <?php echo Yii::t("app", "DOI_MAT_KHAU"); ?></a></li>
<li class="separator"><hr style="margin:0;padding:0"></li> <li class="separator"><hr style="margin:0;padding:0"></li>
<li> <li>
<a href="<?php echo yii\helpers\Url::to(["/site/logout"]); ?>" onclick="$(this).parent().find('form').submit();return false;"><i class="fa fa-sign-out"></i>&nbsp; <?php echo Yii::t("app", "Đăng xuất"); ?></a> <a href="<?php echo yii\helpers\Url::to(["/site/logout"]); ?>" onclick="$(this).parent().find('form').submit();return false;"><i class="fa fa-sign-out"></i>&nbsp; <?php echo Yii::t("app", "DANG_XUAT"); ?></a>
<?php <?php
ActiveForm::begin([ ActiveForm::begin([
'action' => yii\helpers\Url::to(["/site/logout"]), 'action' => yii\helpers\Url::to(["/site/logout"]),
@@ -118,7 +144,7 @@ use yii\widgets\ActiveForm;
]); ]);
?> ?>
<div class="pull-right"> <div class="pull-right">
<button name="action" value="logout" class="btn btn-default btn-flat"><?php echo Yii::t("app", "Đăng xuất"); ?></button> <button name="action" value="logout" class="btn btn-default btn-flat"><?php echo Yii::t("app", "DANG_XUAT"); ?></button>
</div> </div>
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
</li> </li>

View File

@@ -7,7 +7,7 @@ use yii\bootstrap\ActiveForm;
/* @var $form yii\bootstrap\ActiveForm */ /* @var $form yii\bootstrap\ActiveForm */
/* @var $model \common\models\LoginForm */ /* @var $model \common\models\LoginForm */
$this->title = 'Sign In'; $this->title = Yii::t("app", "DANG_NHAP");
$fieldOptions1 = [ $fieldOptions1 = [
'options' => ['class' => 'form-group has-feedback'], 'options' => ['class' => 'form-group has-feedback'],
@@ -30,7 +30,7 @@ $fieldOptions2 = [
</div> </div>
<!-- /.login-logo --> <!-- /.login-logo -->
<div class="login-box-body"> <div class="login-box-body">
<p class="login-box-msg"><b>ĐĂNG NHẬP</b></p> <p class="login-box-msg text-uppercase"><b><?php echo Yii::t("app", "DANG_NHAP"); ?></b></p>
<?php $form = ActiveForm::begin(['id' => 'login-form', 'enableClientValidation' => false]); ?> <?php $form = ActiveForm::begin(['id' => 'login-form', 'enableClientValidation' => false]); ?>
@@ -38,32 +38,50 @@ $fieldOptions2 = [
$form $form
->field($model, 'username', $fieldOptions1) ->field($model, 'username', $fieldOptions1)
->label(false) ->label(false)
->textInput(['placeholder' => $model->getAttributeLabel('username')]) ->textInput(['placeholder' => Yii::t("app", "TEN_DANG_NHAP")])
?> ?>
<?= <?=
$form $form
->field($model, 'password', $fieldOptions2) ->field($model, 'password', $fieldOptions2)
->label(false) ->label(false)
->passwordInput(['placeholder' => $model->getAttributeLabel('password')]) ->passwordInput(['placeholder' => Yii::t("app", "MAT_KHAU")])
?> ?>
<div class="row"> <div class="row">
<div class="col-xs-7"> <div class="col-xs-7">
<?= $form->field($model, 'rememberMe')->checkbox() ?> <input type="hidden" value="<?php echo Yii::$app->request->get("lang"); ?>" name="lang">
<?php
$languages = app\models\common::allLanguage();
$currentLanguage = ["icon" => "vi.png", "name" => "vi-VI", "description" => "Tiếng Việt"];
foreach ($languages as $key => $value) {
if ($value['name'] === Yii::$app->request->get('lang'))
$currentLanguage = $value;
}
?>
<div class="btn-group" id="card-picker">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
<img src="/images/lang/<?php echo $currentLanguage["icon"]; ?>" width="20px">
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<?php foreach ($languages as $key => $value) { ?>
<li>
<a href="<?php echo yii\helpers\Url::to(['/dashboard/change-language-login', 'lang' => $value['name']]); ?>">
<img src="/images/lang/<?php echo $value['icon']; ?>" width="20px"> <?php echo $value['description']; ?>
</a>
</li>
<?php } ?>
</ul>
</div>
</div> </div>
<!-- /.col -->
<div class="col-xs-5"> <div class="col-xs-5">
<?= Html::submitButton('Đăng nhập', ['class' => 'btn btn-primary btn-block', 'name' => 'login-button']) ?> <?= Html::submitButton(Yii::t("app", "DANG_NHAP"), ['class' => 'btn btn-primary btn-block', 'name' => 'login-button']) ?>
</div> </div>
<!-- /.col -->
</div> </div>
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
<a href="#">I forgot my password</a><br>
</div> </div>
<!-- /.login-box-body --> </div>
</div><!-- /.login-box -->

View File

@@ -55,6 +55,7 @@
'attribute' => 'confidence', 'attribute' => 'confidence',
'contentOptions' => ['class' => 'text-center'], 'contentOptions' => ['class' => 'text-center'],
'headerOptions' => ['class' => 'text-center'], 'headerOptions' => ['class' => 'text-center'],
'format' => "raw",
'value' => \app\helpers\CaptureLogsGrid::confidence() 'value' => \app\helpers\CaptureLogsGrid::confidence()
], ],
[ [
@@ -66,49 +67,53 @@
])} ])}
</div> </div>
<div class="col-md-2" style="padding-right: 30px;"> <div class="col-md-2" style="padding-right: 30px;">
<h4>Tìm kiếm dữ liệu</h4> <h4>{Yii::t("app", "TIM_KIEM_DU_LIEU")}</h4>
<div class="form-group"> <div class="form-group">
<label class="control-label">Từ</label> <label class="control-label">{Yii::t("app", "FROM")}</label>
<input type="text" class="form-control datepicker" value="{$f|date_format:"H:i d/m/Y"}" name="From"> <input type="text" class="form-control datepicker" value="{$f|date_format:"H:i d/m/Y"}" name="From">
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label">Đến</label> <label class="control-label">{Yii::t("app", "TO")}</label>
<input type="text" class="form-control datepicker" value="{$t|date_format:"H:i d/m/Y"}" name="To"> <input type="text" class="form-control datepicker" value="{$t|date_format:"H:i d/m/Y"}" name="To">
</div> </div>
<div class="text-center"> <div class="text-center">
<button class="btn btn-info" onclick="_search(this);" data-href="{Url::to(['/capture-logs'])}"> <button class="btn btn-info" onclick="_search(this);" data-href="{Url::to(['/capture-logs'])}">
<i class="fa fa-search"></i> Tìm kiếm <i class="fa fa-search"></i> {Yii::t("app", "TIM_KIEM")}
</button> </button>
</div> </div>
<hr style="border-top: 1px solid #000;"> <hr style="border-top: 1px solid #000;">
<div> <div>
<input type="checkbox" name="AllData" style="width: inherit;" {if Yii::$app->request->get("all")}checked=""{/if}> Hiển thị toàn bộ dữ liệu <input type="checkbox" name="AllData" style="width: inherit;" {if Yii::$app->request->get("all")}checked=""{/if}> {Yii::t("app", "HIEN_THI_TOAN_BO_DU_LIEU")}
</div> </div>
</div> </div>
</div> </div>
<div style="width: 500px;position: absolute;right:0;top: 250px;" id='form' class="hidden"> <div style="width: 500px;position: absolute;right:0;top: 250px;" id='form' class="hidden">
<div class="panel panel-info"> <div class="panel panel-info">
<div class="panel-heading text-bold"> <div class="panel-heading text-bold">
List management {Yii::t("app", "QUAN_LY_MAU")}
<i class="fa fa-remove pull-right" style="cursor: pointer;" onclick="_close();"></i> <i class="fa fa-remove pull-right" style="cursor: pointer;" onclick="_close();"></i>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
<div class="col-md-4 text-center"> <div class="col-md-4 text-center">
<img src="" class="img-thumbnail" id="FaceImage" style="width: 150px;height: 150px;"> <img src="" class="img-thumbnail" id="FaceImage" style="width: 150px;height: 150px;">
<div class='feature-img'>
<img src="" class="img-thumbnail" id="closest-img" style="width: 100px;height:100px;">
<br>
<i id="closest-name"></i>
</div>
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Type</div> <div class="col-md-4 text-right">{Yii::t("app", "DANH_SACH")}</div>
<div class="col-md-8"> <div class="col-md-8">
<select style="width: 100%;height: 26px;" name="Type"> <select style="width: 100%;height: 26px;" name="Type">
<option value="wl">White list</option> {html_options options=$typeArray}
<option value="bl">Black list</option>
</select> </select>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">ID</div> <div class="col-md-4 text-right">{Yii::t("app", "ID")}</div>
<div class="col-md-8"> <div class="col-md-8">
<select name='Code' id='Code' onchange="chooseStaff(this);" data-href="{Url::to("/list-management/choose-staff")}"> <select name='Code' id='Code' onchange="chooseStaff(this);" data-href="{Url::to("/list-management/choose-staff")}">
<option value=""></option> <option value=""></option>
@@ -117,34 +122,39 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Name</div> <div class="col-md-4 text-right">{Yii::t("app", "TEN")}</div>
<div class="col-md-8"> <div class="col-md-8">
<input type="text" name="Name"> <input type="text" name="Name">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Gender</div> <div class="col-md-4 text-right">{Yii::t("app", "TEN_HIEN_THI")}</div>
<div class="col-md-8">
<input type="text" name="AbbreviatedName">
</div>
</div>
<div class="row">
<div class="col-md-4 text-right">{Yii::t("app", "GIOI_TINH")}</div>
<div class="col-md-8"> <div class="col-md-8">
<select style="width: 100%;height: 26px;" name="Gender"> <select style="width: 100%;height: 26px;" name="Gender">
<option value="Male">Male</option> {html_options options=$genderArray}
<option value="Female">Female</option>
</select> </select>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Birthday</div> <div class="col-md-4 text-right">{Yii::t("app", "NGAY_SINH")}</div>
<div class="col-md-8"> <div class="col-md-8">
<input type="text" name="Birthday" id="birthday"> <input type="text" name="Birthday" id="birthday">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Telephone</div> <div class="col-md-4 text-right">{Yii::t("app", "DIEN_THOAI")}</div>
<div class="col-md-8"> <div class="col-md-8">
<input type="text" name="Telephone"> <input type="text" name="Telephone">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Department</div> <div class="col-md-4 text-right">{Yii::t("app", "DON_VI")}</div>
<div class="col-md-8"> <div class="col-md-8">
<input type="text" name="Address"> <input type="text" name="Address">
</div> </div>
@@ -153,8 +163,8 @@
</div> </div>
<div class="text-center"> <div class="text-center">
<input type="hidden" value="" name="CaptureLogsID"> <input type="hidden" value="" name="CaptureLogsID">
<button onclick="_save(this);" data-href='{Url::to(["/list-management/create"])}'>Save</button> <button onclick="_save(this);" data-href='{Url::to(["/list-management/create"])}'>{Yii::t("app", "LUU")}</button>
<button onclick="_close();">Cancel</button> <button onclick="_close();">{Yii::t("app", "HUY")}</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -148,23 +148,23 @@
<div class="col-md-4 bg-grey mt-step-col"> <div class="col-md-4 bg-grey mt-step-col">
<div class="mt-step-number bg-white font-grey">1</div> <div class="mt-step-number bg-white font-grey">1</div>
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-thiet-bi'])}';"> <div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-thiet-bi'])}';">
Cấu hình thiết bị {Yii::t("app", "CAU_HINH_THIET_BI")}
</div> </div>
<div class="mt-step-content font-grey-cascade">Device config</div> <div class="mt-step-content font-grey-cascade">{Yii::t("app", "DEVICE_CONFIG")}</div>
</div> </div>
<div class="col-md-4 bg-grey mt-step-col"> <div class="col-md-4 bg-grey mt-step-col">
<div class="mt-step-number bg-white font-grey">2</div> <div class="mt-step-number bg-white font-grey">2</div>
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config'])}';"> <div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config'])}';">
Cấu hình máy chủ {Yii::t("app", "CAU_HINH_MAY_CHU")}
</div> </div>
<div class="mt-step-content font-grey-cascade">Server config</div> <div class="mt-step-content font-grey-cascade">{Yii::t("app", "SERVER_CONFIG")}</div>
</div> </div>
<div class="col-md-4 bg-grey mt-step-col active"> <div class="col-md-4 bg-grey mt-step-col active">
<div class="mt-step-number bg-white font-grey">3</div> <div class="mt-step-number bg-white font-grey">3</div>
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-nhan-dien'])}';"> <div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-nhan-dien'])}';">
Cấu hình nhận diện {Yii::t("app", "CAU_HINH_NHAN_DIEN")}
</div> </div>
<div class="mt-step-content font-grey-cascade">Engine config</div> <div class="mt-step-content font-grey-cascade">{Yii::t("app", "ENGINE_CONFIG")}</div>
</div> </div>
</div> </div>
</div> </div>
@@ -175,7 +175,7 @@
<div class="col-md-6 col-md-push-1"> <div class="col-md-6 col-md-push-1">
{$config_json} {$config_json}
<button style="position: fixed;left: 0;top: 170px;" class="btn btn-primary" onclick="saveStep2(this);" data-href="{Url::to(['/config/cau-hinh-nhan-dien'])}"> <button style="position: fixed;left: 0;top: 170px;" class="btn btn-primary" onclick="saveStep2(this);" data-href="{Url::to(['/config/cau-hinh-nhan-dien'])}">
<i class="fa fa-floppy-o"></i> Lưu lại <i class="fa fa-floppy-o"></i> {Yii::t("app", "LUU_LAI")}
</button> </button>
</div> </div>
</div> </div>

View File

@@ -22,23 +22,23 @@
<div class="col-md-4 bg-grey mt-step-col active"> <div class="col-md-4 bg-grey mt-step-col active">
<div class="mt-step-number bg-white font-grey">1</div> <div class="mt-step-number bg-white font-grey">1</div>
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-thiet-bi'])}';"> <div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-thiet-bi'])}';">
Cấu hình thiết bị {Yii::t("app", "CAU_HINH_THIET_BI")}
</div> </div>
<div class="mt-step-content font-grey-cascade">Device config</div> <div class="mt-step-content font-grey-cascade">{Yii::t("app", "DEVICE_CONFIG")}</div>
</div> </div>
<div class="col-md-4 bg-grey mt-step-col"> <div class="col-md-4 bg-grey mt-step-col">
<div class="mt-step-number bg-white font-grey">2</div> <div class="mt-step-number bg-white font-grey">2</div>
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config'])}';"> <div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config'])}';">
Cấu hình máy chủ {Yii::t("app", "CAU_HINH_MAY_CHU")}
</div> </div>
<div class="mt-step-content font-grey-cascade">Server config</div> <div class="mt-step-content font-grey-cascade">{Yii::t("app", "SERVER_CONFIG")}</div>
</div> </div>
<div class="col-md-4 bg-grey mt-step-col"> <div class="col-md-4 bg-grey mt-step-col">
<div class="mt-step-number bg-white font-grey">3</div> <div class="mt-step-number bg-white font-grey">3</div>
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-nhan-dien'])}';"> <div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-nhan-dien'])}';">
Cấu hình nhận diện {Yii::t("app", "CAU_HINH_NHAN_DIEN")}
</div> </div>
<div class="mt-step-content font-grey-cascade">Engine config</div> <div class="mt-step-content font-grey-cascade">{Yii::t("app", "ENGINE_CONFIG")}</div>
</div> </div>
</div> </div>
</div> </div>
@@ -49,19 +49,19 @@
<div class="col-md-4"> <div class="col-md-4">
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">Server API</div> <div class="input-group-addon">{Yii::t("app", "SERVER_API")}</div>
<input type="input" class="form-control" name="server_api" value="{$server_api->data|default:""}"> <input type="input" class="form-control" name="server_api" value="{$server_api->data|default:""}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">Device ID</div> <div class="input-group-addon">{Yii::t("app", "DEVICE_ID")}</div>
<input type="input" class="form-control" name="device_id" value="{$device_id->data|default:""}"> <input type="input" class="form-control" name="device_id" value="{$device_id->data|default:""}">
</div> </div>
</div> </div>
<div class="text-center"> <div class="text-center">
<button class="btn btn-primary" onclick="SaveConfigDevice(this);" data-href="{Url::to(['save-config'])}"> <button class="btn btn-primary" onclick="SaveConfigDevice(this);" data-href="{Url::to(['save-config'])}">
<i class="fa fa-floppy-o"></i> Lưu lại <i class="fa fa-floppy-o"></i> {Yii::t("app", "LUU_LAI")}
</button> </button>
</div> </div>
</div> </div>

View File

@@ -22,23 +22,23 @@
<div class="col-md-4 bg-grey mt-step-col"> <div class="col-md-4 bg-grey mt-step-col">
<div class="mt-step-number bg-white font-grey">1</div> <div class="mt-step-number bg-white font-grey">1</div>
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-thiet-bi'])}';"> <div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-thiet-bi'])}';">
Cấu hình thiết bị {Yii::t("app", "CAU_HINH_THIET_BI")}
</div> </div>
<div class="mt-step-content font-grey-cascade">Device config</div> <div class="mt-step-content font-grey-cascade">{Yii::t("app", "DEVICE_CONFIG")}</div>
</div> </div>
<div class="col-md-4 bg-grey mt-step-col active"> <div class="col-md-4 bg-grey mt-step-col active">
<div class="mt-step-number bg-white font-grey">2</div> <div class="mt-step-number bg-white font-grey">2</div>
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config'])}';"> <div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config'])}';">
Cấu hình máy chủ {Yii::t("app", "CAU_HINH_MAY_CHU")}
</div> </div>
<div class="mt-step-content font-grey-cascade">Server config</div> <div class="mt-step-content font-grey-cascade">{Yii::t("app", "SERVER_CONFIG")}</div>
</div> </div>
<div class="col-md-4 bg-grey mt-step-col"> <div class="col-md-4 bg-grey mt-step-col">
<div class="mt-step-number bg-white font-grey">3</div> <div class="mt-step-number bg-white font-grey">3</div>
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-nhan-dien'])}';"> <div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-nhan-dien'])}';">
Cấu hình nhận diện {Yii::t("app", "CAU_HINH_NHAN_DIEN")}
</div> </div>
<div class="mt-step-content font-grey-cascade">Engine config</div> <div class="mt-step-content font-grey-cascade">{Yii::t("app", "ENGINE_CONFIG")}</div>
</div> </div>
</div> </div>
</div> </div>
@@ -49,19 +49,19 @@
<div class="col-md-4"> <div class="col-md-4">
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">server_mqtt</div> <div class="input-group-addon">{Yii::t("app", "SERVER_MQTT")}</div>
<input type="input" class="form-control" name="servermqtt" value="{$servermqtt}"> <input type="input" class="form-control" name="servermqtt" value="{$servermqtt}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">url</div> <div class="input-group-addon">{Yii::t("app", "URL")}</div>
<input type="input" class="form-control" name="url" value="{$url}"> <input type="input" class="form-control" name="url" value="{$url}">
</div> </div>
</div> </div>
<div class="text-center"> <div class="text-center">
<button class="btn btn-primary" onclick="saveStep1(this);" data-href="{Url::to(['/config/cau-hinh-may-chu'])}"> <button class="btn btn-primary" onclick="saveStep1(this);" data-href="{Url::to(['/config/cau-hinh-may-chu'])}">
<i class="fa fa-floppy-o"></i> Lưu lại <i class="fa fa-floppy-o"></i> {Yii::t("app", "LUU_LAI")}
</button> </button>
</div> </div>
</div> </div>

View File

@@ -1,11 +1,14 @@
<div class="alert alert-danger hidden" id="reset-error">
<i class="fa fa-info-circle"></i> {Yii::t("app", "RESET_THIET_BI_LOI")}
</div>
<div class="text-left"> <div class="text-left">
<input type="checkbox" name="DeleteDatabase" checked="" style="width: inherit;"> Xóa dữ liệu lưu trữ trong thiết bị <input type="checkbox" name="DeleteDatabase" style="width: inherit;"> {Yii::t("app", "XOA_DU_LIEU_LUU_TRU_TRONG_THIET_BI")}
<br> <br>
<input type="checkbox" name="ResetDevice" checked="" style="width: inherit;"> Reset cấu hình thiết bị <input type="checkbox" name="ResetDevice" style="width: inherit;"> {Yii::t("app", "RESET_CAU_HINH_THIET_BI")}
</div> </div>
<div class="text-center"> <div class="text-center">
<button class="btn btn-danger" onclick="common.reset(this);" data-href="{yii\helpers\Url::to(['/config/reset'])}"> <button class="btn btn-danger" onclick="common.reset(this);" data-href="{yii\helpers\Url::to(['/config/reset'])}" id="reset-accept">
Đồng ý {Yii::t("app", "DONG_Y")}
</button> </button>
<button type="button" class="btn btn-default" data-dismiss="modal">Hủy bỏ</button> <button type="button" class="btn btn-default" data-dismiss="modal" id="reset-close">{Yii::t("app", "HUY_BO")}</button>
</div> </div>

View File

@@ -31,7 +31,7 @@
'class' => 'table table-striped table-bordered', 'class' => 'table table-striped table-bordered',
'style' => 'background:#fff;min-width:700px;' 'style' => 'background:#fff;min-width:700px;'
], ],
'rowOptions' => \app\helpers\CaptureLogsGrid::rows(), 'rowOptions' => \app\helpers\CaptureLogsGrid::rowsControlLogs(),
'columns' => [ 'columns' => [
[ [
'attribute' => 'id', 'attribute' => 'id',
@@ -62,7 +62,7 @@
'attribute' => 'confidence', 'attribute' => 'confidence',
'contentOptions' => ['class' => 'text-center'], 'contentOptions' => ['class' => 'text-center'],
'headerOptions' => ['class' => 'text-center'], 'headerOptions' => ['class' => 'text-center'],
'value' => \app\helpers\CaptureLogsGrid::confidence() 'value' => \app\helpers\CaptureLogsGrid::confidenceControlLogs()
], ],
'listManagement.name', 'listManagement.name',
'listManagement.gender', 'listManagement.gender',
@@ -79,40 +79,40 @@
])} ])}
</div> </div>
<div class="col-md-2" style="padding-right: 30px;"> <div class="col-md-2" style="padding-right: 30px;">
<h4>Tìm kiếm dữ liệu</h4> <h4>{Yii::t("app", "TIM_KIEM_DU_LIEU")}</h4>
<div class="form-group"> <div class="form-group">
<label class="control-label">Từ</label> <label class="control-label">{Yii::t("app", "FROM")}</label>
<input type="text" class="form-control datepicker" value="{$f|date_format:"H:i d/m/Y"}" name="From"> <input type="text" class="form-control datepicker" value="{$f|date_format:"H:i d/m/Y"}" name="From">
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label">Đến</label> <label class="control-label">{Yii::t("app", "TO")}</label>
<input type="text" class="form-control datepicker" value="{$t|date_format:"H:i d/m/Y"}" name="To"> <input type="text" class="form-control datepicker" value="{$t|date_format:"H:i d/m/Y"}" name="To">
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label">ID</label> <label class="control-label">{Yii::t("app", "ID")}</label>
<input type="text" class="form-control" value="{Yii::$app->request->get("id")}" name="IDSearch"> <input type="text" class="form-control" value="{Yii::$app->request->get("id")}" name="IDSearch">
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label">Tên</label> <label class="control-label">{Yii::t("app", "TEN")}</label>
<input type="text" class="form-control" value="{Yii::$app->request->get("name")}" name="NameSearch"> <input type="text" class="form-control" value="{Yii::$app->request->get("name")}" name="NameSearch">
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label">Loại</label> <label class="control-label">{Yii::t("app", "LOAI")}</label>
<select class="form-control" name="TypeSearch"> <select class="form-control" name="TypeSearch">
<option value="all">Tất cả</option> <option value="all">{Yii::t("app", "TAT_CA")}</option>
{html_options options=$typeArray selected=Yii::$app->request->get("type")} {html_options options=$typeArray selected=Yii::$app->request->get("type")}
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label">Giới tính</label> <label class="control-label">{Yii::t("app", "GIOI_TINH")}</label>
<select class="form-control" name="GenderSearch"> <select class="form-control" name="GenderSearch">
<option value="all">Tất cả</option> <option value="all">{Yii::t("app", "TAT_CA")}</option>
{html_options options=$genderArray selected=Yii::$app->request->get("gender")} {html_options options=$genderArray selected=Yii::$app->request->get("gender")}
</select> </select>
</div> </div>
<div class="text-center"> <div class="text-center">
<button class="btn btn-info" onclick="_search(this);" data-href="{Url::to(['/control-logs'])}"> <button class="btn btn-info" onclick="_search(this);" data-href="{Url::to(['/control-logs'])}">
<i class="fa fa-search"></i> Tìm kiếm <i class="fa fa-search"></i> {Yii::t("app", "TIM_KIEM")}
</button> </button>
</div> </div>
</div> </div>

View File

@@ -8,7 +8,7 @@
<div style="margin-top: 20px;"> <div style="margin-top: 20px;">
<div> <div>
<a class="btn btn-success" href='{Url::to(['/dashboard/export'])}'> <a class="btn btn-success" href='{Url::to(['/dashboard/export'])}'>
<i class="fa fa-download"></i> Xuất dữ liệu <i class="fa fa-download"></i> {Yii::t("app", "Xuất dữ liệu")}
</a> </a>
</div> </div>
<br> <br>

View File

@@ -2,6 +2,35 @@
{block name="content"} {block name="content"}
{/block} {/block}
</div> </div>
<input type="hidden" name="HAY_NHAP_THONG_TIN" value="{Yii::t("app", "HAY_NHAP_THONG_TIN")}">
<input type="hidden" name="BOX_CHUA_DUOC_DANG_KI_TREN_CMS" value="{Yii::t("app", "BOX_CHUA_DUOC_DANG_KI_TREN_CMS")}">
<input type="hidden" name="DA_LUU_CAU_HINH" value="{Yii::t("app", "DA_LUU_CAU_HINH")}">
<input type="hidden" name="LUU_CAU_HINH_THAT_BAI" value="{Yii::t("app", "LUU_CAU_HINH_THAT_BAI")}">
<input type="hidden" name="HAY_LUA_CHON_THAO_TAC" value="{Yii::t("app", "HAY_LUA_CHON_THAO_TAC")}">
<input type="hidden" name="DELETE_DB_CONFIRM" value="{Yii::t("app", "DELETE_DB_CONFIRM")}">
<input type="hidden" name="RESET_DB_CONFIRM" value="{Yii::t("app", "RESET_DB_CONFIRM")}">
<input type="hidden" name="HAY_CHON_DOI_TUONG" value="{Yii::t("app", "HAY_CHON_DOI_TUONG")}">
<input type="hidden" name="HAY_NHAP_TEN" value="{Yii::t("app", "HAY_NHAP_TEN")}">
<input type="hidden" name="HAY_NHAP_TEN_HIEN_THI" value="{Yii::t("app", "HAY_NHAP_TEN_HIEN_THI")}">
<input type="hidden" name="CAP_NHAT_DU_LIEU_THANH_CONG" value="{Yii::t("app", "CAP_NHAT_DU_LIEU_THANH_CONG")}">
<input type="hidden" name="MA_DOI_TUONG_DA_TON_TAI" value="{Yii::t("app", "MA_DOI_TUONG_DA_TON_TAI")}">
<input type="hidden" name="DELETE_CONFIRM" value="{Yii::t("app", "DELETE_CONFIRM")}">
<input type="hidden" name="HAY_CHON_DU_LIEU_DE_XOA" value="{Yii::t("app", "HAY_CHON_DU_LIEU_DE_XOA")}">
<input type="hidden" name="DA_XOA_DU_LIEU" value="{Yii::t("app", "DA_XOA_DU_LIEU")}">
<input type="hidden" name="CHON_HINH_ANH" value="{Yii::t("app", "CHON_HINH_ANH")}">
<input type="hidden" name="HINH_ANH_KHONG_NHAN_DIEN_DUOC_KHUON_MAT" value="{Yii::t("app", "HINH_ANH_KHONG_NHAN_DIEN_DUOC_KHUON_MAT")}">
<input type="hidden" name="HAY_TAI_LEN_HINH_ANH" value="{Yii::t("app", "HAY_TAI_LEN_HINH_ANH")}">
<input type="hidden" name="HAY_NHAP_DIA_CHI_IP_DONG_BO" value="{Yii::t("app", "HAY_NHAP_DIA_CHI_IP_DONG_BO")}">
<input type="hidden" name="SAI_DINH_DANG_IP" value="{Yii::t("app", "SAI_DINH_DANG_IP")}">
<input type="hidden" name="TIM_KIEM_THEO_ID_HOAC_TEN" value="{Yii::t("app", "TIM_KIEM_THEO_ID_HOAC_TEN")}">
<input type="hidden" name="KHONG_CO_KET_NOI_TOI_THIET_BI" value="{Yii::t("app", "KHONG_CO_KET_NOI_TOI_THIET_BI")}">
<input type="hidden" name="KHONG_CO_DU_LIEU_DONG_BO" value="{Yii::t("app", "KHONG_CO_DU_LIEU_DONG_BO")}">
<input type="hidden" name="DONG_BO_DU_LIEU_HOAN_THANH" value="{Yii::t("app", "DONG_BO_DU_LIEU_HOAN_THANH")}">
<input type="hidden" name="DA_THEM_HINH_ANH_MAU" value="{Yii::t("app", "DA_THEM_HINH_ANH_MAU")}">
<input type="hidden" name="CO_LOI_XAY_RA_HAY_THU_LAI" value="{Yii::t("app", "CO_LOI_XAY_RA_HAY_THU_LAI")}">
<input type="hidden" name="ENGINE_KHONG_HOAT_DONG" value="{Yii::t("app", "ENGINE_KHONG_HOAT_DONG")}">
<div id="blocking" class="fade modal" role="dialog" tabindex="-1"> <div id="blocking" class="fade modal" role="dialog" tabindex="-1">
<div class="modal-dialog" style="top: 50%;margin-top: -45px;"> <div class="modal-dialog" style="top: 50%;margin-top: -45px;">
<div class="modal-content" style="background-color: transparent;box-shadow: none;"> <div class="modal-content" style="background-color: transparent;box-shadow: none;">
@@ -9,7 +38,7 @@
<div id='modelContent' class="text-center"> <div id='modelContent' class="text-center">
<i class="fa fa-spinner fa-pulse fa-5x fa-fw" style="color: #fff;"></i> <i class="fa fa-spinner fa-pulse fa-5x fa-fw" style="color: #fff;"></i>
<br> <br>
<b style="color: #fff;font-size: 25px;">Đang xử lý ...</b> <b style="color: #fff;font-size: 25px;">{Yii::t("app", "DANG_XU_LY")}</b>
</div> </div>
</div> </div>
</div> </div>
@@ -39,7 +68,7 @@
... ...
</div> </div>
<div class="modal-footer" id='myModalFooter'> <div class="modal-footer" id='myModalFooter'>
<button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> Đóng lại</button> <button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> {Yii::t("app", "DONG_LAI")}</button>
</div> </div>
</div> </div>
</div> </div>
@@ -67,14 +96,14 @@
<div class="modal-content"> <div class="modal-content">
<div class="modal-header" id="alertModalHeader" style="background-color: #ffcc66;color: green;"> <div class="modal-header" id="alertModalHeader" style="background-color: #ffcc66;color: green;">
<h4 class="modal-title" id="alertModalLabel" style="color: #fff;"> <h4 class="modal-title" id="alertModalLabel" style="color: #fff;">
<span class="fa fa-info-circle"></span> <b>Thông báo</b> <span class="fa fa-info-circle"></span> <b>{Yii::t("app", "THONG_BAO")}</b>
</h4> </h4>
</div> </div>
<div class="modal-body c-red" id="alertModalContent" style="font-weight: bold;"> <div class="modal-body c-red" id="alertModalContent" style="font-weight: bold;">
... ...
</div> </div>
<div class="modal-footer" id="alertModalFooter"> <div class="modal-footer" id="alertModalFooter">
<button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> Đồng ý</button> <button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> {Yii::t("app", "DONG_Y")}</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -66,7 +66,10 @@
], ],
[ [
'attribute' => 'name', 'attribute' => 'name',
'contentOptions' => ['class' => 'text-center'], 'headerOptions' => ['class' => 'text-center']
],
[
'attribute' => 'abbreviated_name',
'headerOptions' => ['class' => 'text-center'] 'headerOptions' => ['class' => 'text-center']
], ],
[ [
@@ -86,12 +89,6 @@
'headerOptions' => ['class' => 'text-center'], 'headerOptions' => ['class' => 'text-center'],
'value' => \app\helpers\ListManagementGrid::time() 'value' => \app\helpers\ListManagementGrid::time()
], ],
[
'attribute' => 'birthday',
'contentOptions' => ['class' => 'text-center'],
'headerOptions' => ['class' => 'text-center'],
'value' => \app\helpers\ListManagementGrid::birthday()
],
[ [
'attribute' => 'telephone', 'attribute' => 'telephone',
'contentOptions' => ['class' => 'text-center'], 'contentOptions' => ['class' => 'text-center'],
@@ -113,7 +110,7 @@
])} ])}
</div> </div>
<div class="col-md-2" style="padding-right: 30px;"> <div class="col-md-2" style="padding-right: 30px;">
<h4>Tìm kiếm dữ liệu</h4> <h4>{Yii::t("app", "TIM_KIEM_DU_LIEU")}</h4>
{*<div class="form-group"> {*<div class="form-group">
<label class="control-label">Từ</label> <label class="control-label">Từ</label>
<input type="text" class="form-control datepicker" value="{$f|date_format:"H:i d/m/Y"}" name="From"> <input type="text" class="form-control datepicker" value="{$f|date_format:"H:i d/m/Y"}" name="From">
@@ -123,65 +120,65 @@
<input type="text" class="form-control datepicker" value="{$t|date_format:"H:i d/m/Y"}" name="To"> <input type="text" class="form-control datepicker" value="{$t|date_format:"H:i d/m/Y"}" name="To">
</div>*} </div>*}
<div class="form-group"> <div class="form-group">
<label class="control-label">ID</label> <label class="control-label">{Yii::t("app", "ID")}</label>
<input type="text" class="form-control" value="{Yii::$app->request->get("id")}" name="IDSearch"> <input type="text" class="form-control" value="{Yii::$app->request->get("id")}" name="IDSearch">
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label">Tên</label> <label class="control-label">{Yii::t("app", "TEN")}</label>
<input type="text" class="form-control" value="{Yii::$app->request->get("name")}" name="NameSearch"> <input type="text" class="form-control" value="{Yii::$app->request->get("name")}" name="NameSearch">
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label">Loại</label> <label class="control-label">{Yii::t("app", "LOAI")}</label>
<select class="form-control" name="TypeSearch"> <select class="form-control" name="TypeSearch">
<option value="all">Tất cả</option> <option value="all">{Yii::t("app", "TAT_CA")}</option>
{html_options options=$typeArray selected=Yii::$app->request->get("type")} {html_options options=$typeArray selected=Yii::$app->request->get("type")}
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label">Giới tính</label> <label class="control-label">{Yii::t("app", "GIOI_TINH")}</label>
<select class="form-control" name="GenderSearch"> <select class="form-control" name="GenderSearch">
<option value="all">Tất cả</option> <option value="all">{Yii::t("app", "TAT_CA")}</option>
{html_options options=$genderArray selected=Yii::$app->request->get("gender")} {html_options options=$genderArray selected=Yii::$app->request->get("gender")}
</select> </select>
</div> </div>
<div class="text-center"> <div class="text-center">
<button class="btn btn-info" onclick="_search(this);" data-href="{Url::to(['/list-management'])}"> <button class="btn btn-info" onclick="_search(this);" data-href="{Url::to(['/list-management'])}">
<i class="fa fa-search"></i> Tìm kiếm <i class="fa fa-search"></i> {Yii::t("app", "TIM_KIEM")}
</button> </button>
</div> </div>
<hr style="border-top: 1px solid #000;"> <hr style="border-top: 1px solid #000;">
<div> <div>
<input type="checkbox" name="BatchDelete" style="width: inherit;"> Xóa nhiều dữ liệu <input type="checkbox" name="BatchDelete" style="width: inherit;"> {Yii::t("app", "XOA_NHIEU_DU_LIEU")}
<br> <br>
<div class="hidden" id="delete-btn-group"> <div class="hidden" id="delete-btn-group">
<div class="text-center"> <div class="text-center">
<button onclick="checkAll(true);">Chọn toàn bộ trang</button> <button onclick="checkAll(true);">{Yii::t("app", "CHON_TOAN_BO_TRANG")}</button>
<button onclick="checkAll(false);">Bỏ chọn</button> <button onclick="checkAll(false);">{Yii::t("app", "BO_CHON")}</button>
</div> </div>
<br> <br>
<div class="text-center"> <div class="text-center">
<button class="btn btn-danger" onclick="batchDelete(this);" data-href="{Url::to(['/list-management/batch-delete'])}">Xác nhận xóa</button> <button class="btn btn-danger" onclick="batchDelete(this);" data-href="{Url::to(['/list-management/batch-delete'])}">{Yii::t("app", "XAC_NHAN_XOA")}</button>
</div> </div>
</div> </div>
</div> </div>
<hr style="border-top: 1px solid #000;"> <hr style="border-top: 1px solid #000;">
<h4>Đồng bộ với máy chủ</h4> <h4>{Yii::t("app", "DONG_BO_VOI_MAY_CHU")}</h4>
<div class="text-center"> <div class="text-center">
{*<button class="btn btn-info" onclick="_form();"> {*<button class="btn btn-info" onclick="_form();">
<i class="fa fa-plus-circle"></i> Thêm mới <i class="fa fa-plus-circle"></i> Thêm mới
</button>*} </button>*}
<button class="btn btn-info btn-block" onclick="_syncFromServerForm(this);" data-href="{Url::to(['/list-management/sync-from-server'])}"> <button class="btn btn-info btn-block" onclick="_syncFromServerForm(this);" data-href="{Url::to(['/list-management/sync-from-server'])}">
<i class="fa fa-download"></i> Đồng bộ từ máy chủ <i class="fa fa-download"></i> {Yii::t("app", "DONG_BO_TU_MAY_CHU")}
</button> </button>
<button class="btn btn-success btn-block" onclick="_syncToServerForm(this);" data-href="{Url::to(['/list-management/sync-to-server'])}"> <button class="btn btn-success btn-block" onclick="_syncToServerForm(this);" data-href="{Url::to(['/list-management/sync-to-server'])}">
<i class="fa fa-upload"></i> Đồng bộ lên máy chủ <i class="fa fa-upload"></i> {Yii::t("app", "DONG_BO_LEN_MAY_CHU")}
</button> </button>
</div> </div>
<hr style="border-top: 1px solid #000;"> <hr style="border-top: 1px solid #000;">
<h4>Đồng bộ từ thiết bị khác</h4> <h4>{Yii::t("app", "DONG_BO_TU_THIET_BI_KHAC")}</h4>
<div class="form-group" id="ip"> <div class="form-group" id="ip">
<div class="input-group"> <div class="input-group">
<input type="text" value="" class="form-control" name="SyncIP" placeholder="Nhập ip thiết bị"> <input type="text" value="" class="form-control" name="SyncIP" placeholder="{Yii::t("app", "NHAP_IP_THIET_BI")}">
<div class="input-group-btn"> <div class="input-group-btn">
<button class="btn btn-info" onclick="_syncForm(this);" data-href="{Url::to(['form-sync'])}"> <button class="btn btn-info" onclick="_syncForm(this);" data-href="{Url::to(['form-sync'])}">
<i class="fa fa-search"></i> <i class="fa fa-search"></i>
@@ -193,22 +190,22 @@
<hr style="border-top: 1px solid #000;"> <hr style="border-top: 1px solid #000;">
<table class="table table-bordered" style="background: #fff;"> <table class="table table-bordered" style="background: #fff;">
<tr> <tr>
<td>Số người có ảnh / tổng</td> <td>{Yii::t("app", "SO_NGUOI_CO_ANH_TREN_TONG")}</td>
<td class="text-right" id="totalPeople"> <td class="text-right" id="totalPeople">
{*<b class="text-red">{$statistics.totalImg}</b>/<b>{$statistics.total}</b>*} {*<b class="text-red">{$statistics.totalImg}</b>/<b>{$statistics.total}</b>*}
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Đặc trưng 1</td> <td>{Yii::t("app", "DAC_TRUNG_1")}</td>
<td class="text-right" id="total128"> <td class="text-right" id="total128">
{* <b class="text-red">{$statistics.128}</b>/<b>{$statistics.img}</b>*} {* <b class="text-red">{$statistics.128}</b>/<b>{$statistics.img}</b>*}
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
Đặc trưng 2 {Yii::t("app", "DAC_TRUNG_2")}
{if $updating->data==="true"} {if $updating->data==="true"}
<label class="label label-danger" id="updating-label">Đang cập nhật ...</label> <label class="label label-danger" id="updating-label">{Yii::t("app", "DANG_CAP_NHAT")}</label>
{/if} {/if}
</td> </td>
<td class="text-right" id="total512"> <td class="text-right" id="total512">
@@ -218,22 +215,22 @@
</table> </table>
</div> </div>
</div> </div>
<div style="width: 300px;position: absolute;" id="menu" class="hidden"> <div style="width: 200px;position: absolute;" id="menu" class="hidden">
<div class="panel panel-info"> <div class="panel panel-info">
<div class="panel-heading text-bold"> <div class="panel-heading text-bold">
Operation menu {Yii::t("app", "THAO_TAC")}
<i class="fa fa-remove pull-right" style="cursor: pointer;" onclick="_closeMenu();"></i> <i class="fa fa-remove pull-right" style="cursor: pointer;" onclick="_closeMenu();"></i>
</div> </div>
<div class="panel-body text-center"> <div class="panel-body text-center">
<button onclick="_formModified(this);" data-href='{Url::to(["/list-management/form-update"])}'>Modified list</button> <button onclick="_formModified(this);" data-href='{Url::to(["/list-management/form-update"])}'>{Yii::t("app", "SUA")}</button>
<button onclick="_delete(this);" data-href="{Url::to(["/list-management/delete"])}">Delete list</button> <button onclick="_delete(this);" data-href="{Url::to(["/list-management/delete"])}">{Yii::t("app", "XOA")}</button>
</div> </div>
</div> </div>
</div> </div>
<div style="width: 500px;position: absolute;right:0;top: 250px;" id='form' class="hidden"> <div style="width: 500px;position: absolute;right:0;top: 250px;" id='form' class="hidden">
<div class="panel panel-info"> <div class="panel panel-info">
<div class="panel-heading text-bold"> <div class="panel-heading text-bold">
List management {Yii::t("app", "QUAN_LY_MAU")}
<i class="fa fa-remove pull-right" style="cursor: pointer;" onclick="_close();"></i> <i class="fa fa-remove pull-right" style="cursor: pointer;" onclick="_close();"></i>
</div> </div>
<div class="panel-body"> <div class="panel-body">
@@ -248,7 +245,7 @@
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Type</div> <div class="col-md-4 text-right">{Yii::t("app", "DANH_SACH")}</div>
<div class="col-md-8"> <div class="col-md-8">
<select style="width: 100%;height: 26px;" name="Type"> <select style="width: 100%;height: 26px;" name="Type">
{html_options options=$typeArray} {html_options options=$typeArray}
@@ -256,7 +253,7 @@
</div> </div>
</div> </div>
<div class="row hidden"> <div class="row hidden">
<div class="col-md-4 text-right">ID</div> <div class="col-md-4 text-right">{Yii::t("app", "ID")}</div>
<div class="col-md-8" id="form-add-staff"> <div class="col-md-8" id="form-add-staff">
<select name='Code' id='Code' onchange="chooseStaff(this);" data-href="{Url::to("/list-management/choose-staff")}"> <select name='Code' id='Code' onchange="chooseStaff(this);" data-href="{Url::to("/list-management/choose-staff")}">
<option value=""></option> <option value=""></option>
@@ -265,13 +262,19 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Name</div> <div class="col-md-4 text-right">{Yii::t("app", "TEN")}</div>
<div class="col-md-8"> <div class="col-md-8">
<input type="text" name="Name"> <input type="text" name="Name">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Gender</div> <div class="col-md-4 text-right">{Yii::t("app", "TEN_HIEN_THI")}</div>
<div class="col-md-8">
<input type="text" name="AbbreviatedName">
</div>
</div>
<div class="row">
<div class="col-md-4 text-right">{Yii::t("app", "GIOI_TINH")}</div>
<div class="col-md-8"> <div class="col-md-8">
<select style="width: 100%;height: 26px;" name="Gender"> <select style="width: 100%;height: 26px;" name="Gender">
{html_options options=$genderArray} {html_options options=$genderArray}
@@ -279,19 +282,19 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Birthday</div> <div class="col-md-4 text-right">{Yii::t("app", "NGAY_SINH")}</div>
<div class="col-md-8"> <div class="col-md-8">
<input type="text" name="Birthday" id="birthday"> <input type="text" name="Birthday" id="birthday">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Telephone</div> <div class="col-md-4 text-right">{Yii::t("app", "DIEN_THOAI")}</div>
<div class="col-md-8"> <div class="col-md-8">
<input type="text" name="Telephone"> <input type="text" name="Telephone">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4 text-right">Department</div> <div class="col-md-4 text-right">{Yii::t("app", "DON_VI")}</div>
<div class="col-md-8"> <div class="col-md-8">
<input type="text" name="Address"> <input type="text" name="Address">
</div> </div>
@@ -300,8 +303,8 @@
</div> </div>
<div class="text-center"> <div class="text-center">
<input type="hidden" value="" name="ListManagementID"> <input type="hidden" value="" name="ListManagementID">
<button onclick="_update(this);" data-href='{Url::to(["/list-management/update"])}' id="save-btn">Save</button> <button onclick="_update(this);" data-href='{Url::to(["/list-management/update"])}' id="save-btn">{Yii::t("app", "LUU")}</button>
<button onclick="_close();">Cancel</button> <button onclick="_close();">{Yii::t("app", "HUY")}</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -2,13 +2,13 @@
<div class="col-md-4"> <div class="col-md-4">
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">Tìm kiếm</div> <div class="input-group-addon">{Yii::t("app" ,"TIM_KIEM")}</div>
<select class="form-control" id="filter-from-server" onchange="filters(this);"> <select class="form-control" id="filter-from-server" onchange="filters(this);">
<option value=""></option> <option value=""></option>
{html_options options=$filters} {html_options options=$filters}
</select> </select>
<div class="input-group-btn"> <div class="input-group-btn">
<button class="btn btn-default" data-toggle="tooltip" title="Hủy bỏ tìm kiếm" onclick="removeFilters();"> <button class="btn btn-default" data-toggle="tooltip" title="{Yii::t("app", "HUY_BO_TIM_KIEM")}" onclick="removeFilters();">
<i class="fa fa-remove"></i> <i class="fa fa-remove"></i>
</button> </button>
</div> </div>
@@ -20,25 +20,26 @@
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
<th>ID</th> <th>{Yii::t("app", "ID")}</th>
<th>Tên</th> <th>{Yii::t("app", "TEN")}</th>
<th>Đơn vị</th> <th>{Yii::t("app", "TEN_HIEN_THI")}</th>
<th>Hình ảnh đăng kí</th> <th>{Yii::t("app", "DON_VI")}</th>
<th>Code</th> <th>{Yii::t("app", "HINH_ANH_DANG_KI")}</th>
<th>Company ID</th> <th>{Yii::t("app", "COMPANY_ID")}</th>
</tr> </tr>
</thead> </thead>
<tbody id="sync-lists"> <tbody id="sync-lists">
{foreach from=$datas item=arr} {foreach from=$datas item=arr}
<tr id="filters-{$arr.code}" onclick="choooseToSync(this);" style="cursor: pointer;" class="filters {if !in_array($arr.idStaff,$allID)}not-in-list{/if}" data-stt="false" data-id="{trim($arr.idStaff)}"> <tr id="filters-{$arr.id}" onclick="choooseToSync(this);" style="cursor: pointer;" class="filters {if !in_array($arr.id,$allID)}not-in-list{/if}" data-stt="false" data-id="{trim($arr.id)}">
<td> <td>
<div id="full-data-{trim($arr.idStaff)}" class="hidden">{json_encode($arr)}</div> <div id="full-data-{trim($arr.id)}" class="hidden">{json_encode($arr)}</div>
{$arr.idStaff} {$arr.code}
{if in_array($arr.idStaff,$allID)} {if in_array($arr.id,$allID)}
<i class="fa fa-check-circle text-green"></i> <i class="fa fa-check-circle text-green"></i>
{/if} {/if}
</td> </td>
<td>{$arr.name}</td> <td>{$arr.name}</td>
<td>{$arr.abbreviated_name}</td>
<td>{$arr.department}</td> <td>{$arr.department}</td>
<td> <td>
{foreach from=$arr.images item=img key=k} {foreach from=$arr.images item=img key=k}
@@ -49,7 +50,6 @@
{/if} {/if}
{/foreach} {/foreach}
</td> </td>
<td>{$arr.code}</td>
<td>{$arr.id_company}</td> <td>{$arr.id_company}</td>
</tr> </tr>
{/foreach} {/foreach}
@@ -59,11 +59,11 @@
<br> <br>
<div class="row"> <div class="row">
<div class="col-md-2"> <div class="col-md-2">
<i class="fa fa-info-circle"></i> Đã lựa chọn <b class="text-red" id="totals-choose">0</b> đối tượng. <i class="fa fa-info-circle"></i> {Yii::t("app", "DA_LUA_CHON_X_DOI_TUONG")}
</div> </div>
<div class="col-md-5"> <div class="col-md-5">
<div class="hidden" id="progress-form"> <div class="hidden" id="progress-form">
Đồng bộ <b id="progress-current" class="text-green">0</b>/<b id="progress-totals" class="text-red">0</b> đối tượng. {Yii::t("app", "DONG_BO_X_Y_DOI_TUONG")}
<div class="progress"> <div class="progress">
<div class="progress-bar progress-bar-primary progress-bar-striped" id='progress' role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"> <div class="progress-bar progress-bar-primary progress-bar-striped" id='progress' role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
0% 0%
@@ -73,17 +73,17 @@
</div> </div>
<div class="col-md-5 text-right"> <div class="col-md-5 text-right">
<button class="btn btn-default btn-select" onclick="checkAllNotInList();"> <button class="btn btn-default btn-select" onclick="checkAllNotInList();">
Chọn đối tượng chưa tồn tại {Yii::t("app", "CHON_DOI_TUONG_CHUA_TON_TAI")}
</button> </button>
<button class="btn btn-default btn-select" onclick="checkAllSync(true);"> <button class="btn btn-default btn-select" onclick="checkAllSync(true);">
Chọn tất cả {Yii::t("app", "CHON_TAT_CA")}
</button> </button>
<button class="btn btn-default btn-select" onclick="checkAllSync(false);"> <button class="btn btn-default btn-select" onclick="checkAllSync(false);">
Bỏ chọn tất cả {Yii::t("app", "BO_CHON_TAT_CA")}
</button> </button>
<button class="btn btn-primary" onclick="_syncFromServer();"> <button class="btn btn-primary" onclick="_syncFromServer();">
<i class="fa fa-refresh"></i> Đồng bộ <i class="fa fa-refresh"></i> {Yii::t("app", "DONG_BO")}
</button> </button>
<button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> Đóng lại</button> <button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> {Yii::t("app", "DONG_LAI")}</button>
</div> </div>
</div> </div>

View File

@@ -2,13 +2,13 @@
<div class="col-md-4"> <div class="col-md-4">
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">Tìm kiếm</div> <div class="input-group-addon">{Yii::t("app" ,"TIM_KIEM")}</div>
<select class="form-control" id="filter-from-server" onchange="filters(this);"> <select class="form-control" id="filter-from-server" onchange="filters(this);">
<option value=""></option> <option value=""></option>
{html_options options=$filters} {html_options options=$filters}
</select> </select>
<div class="input-group-btn"> <div class="input-group-btn">
<button class="btn btn-default" data-toggle="tooltip" title="Hủy bỏ tìm kiếm" onclick="removeFilters();"> <button class="btn btn-default" data-toggle="tooltip" title="{Yii::t("app", "HUY_BO_TIM_KIEM")}" onclick="removeFilters();">
<i class="fa fa-remove"></i> <i class="fa fa-remove"></i>
</button> </button>
</div> </div>
@@ -20,20 +20,22 @@
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
<th>ID</th> <th>{Yii::t("app", "ID")}<</th>
<th>Tên</th> <th>{Yii::t("app", "TEN")}<</th>
<th>Giới tính</th> <th>{Yii::t("app", "TEN_HIEN_THI")}</th>
<th>Hình ảnh đăng kí</th> <th>{Yii::t("app", "GIOI_TINH")}</th>
<th>Ngày sinh</th> <th>{Yii::t("app", "HINH_ANH_DANG_KI")}</th>
<th>Điện thoại</th> <th>{Yii::t("app", "NGAY_SINH")}</th>
<th>Đơn vị</th> <th>{Yii::t("app", "DIEN_THOAI")}</th>
<th>{Yii::t("app", "DON_VI")}</th>
</tr> </tr>
</thead> </thead>
<tbody id="sync-lists"> <tbody id="sync-lists">
{foreach from=$datas item=arr} {foreach from=$datas item=arr}
<tr id="filters-{$arr.code}" class="filters" onclick="choooseToSync(this);" style="cursor: pointer;" data-stt="false" data-id="{$arr->code}"> <tr id="filters-{$arr.staff_id}" class="filters" onclick="choooseToSync(this);" style="cursor: pointer;" data-stt="false" data-id="{$arr->staff_id}">
<td>{$arr->code}</td> <td>{$arr->code}</td>
<td>{$arr->name}</td> <td>{$arr->name}</td>
<td>{$arr.abbreviated_name}</td>
<td>{$arr->gender}</td> <td>{$arr->gender}</td>
<td> <td>
{$images = json_decode($arr->image, true)} {$images = json_decode($arr->image, true)}
@@ -54,11 +56,11 @@
<br> <br>
<div class="row"> <div class="row">
<div class="col-md-2"> <div class="col-md-2">
<i class="fa fa-info-circle"></i> Đã lựa chọn <b class="text-red" id="totals-choose">0</b> đối tượng. <i class="fa fa-info-circle"></i> {Yii::t("app", "DA_LUA_CHON_X_DOI_TUONG")}
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="hidden" id="progress-form"> <div class="hidden" id="progress-form">
Đồng bộ <b id="progress-current" class="text-green">0</b>/<b id="progress-totals" class="text-red">0</b> đối tượng. {Yii::t("app", "DONG_BO_X_Y_DOI_TUONG")}
<div class="progress"> <div class="progress">
<div class="progress-bar progress-bar-primary progress-bar-striped" id='progress' role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"> <div class="progress-bar progress-bar-primary progress-bar-striped" id='progress' role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
0% 0%
@@ -68,14 +70,14 @@
</div> </div>
<div class="col-md-4 text-right"> <div class="col-md-4 text-right">
<button class="btn btn-default btn-select" onclick="checkAllSync(true);"> <button class="btn btn-default btn-select" onclick="checkAllSync(true);">
Chọn tất cả {Yii::t("app", "CHON_TAT_CA")}
</button> </button>
<button class="btn btn-default btn-select" onclick="checkAllSync(false);"> <button class="btn btn-default btn-select" onclick="checkAllSync(false);">
Bỏ chọn tất cả {Yii::t("app", "BO_CHON_TAT_CA")}
</button> </button>
<button class="btn btn-primary" onclick="_syncToServer();"> <button class="btn btn-primary" onclick="_syncToServer();">
<i class="fa fa-refresh"></i> Đồng bộ <i class="fa fa-refresh"></i> {Yii::t("app", "DONG_BO")}
</button> </button>
<button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> Đóng lại</button> <button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> {Yii::t("app", "DONG_LAI")}</button>
</div> </div>
</div> </div>

View File

@@ -2,13 +2,13 @@
<div class="col-md-4"> <div class="col-md-4">
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">Tìm kiếm</div> <div class="input-group-addon">{Yii::t("app" ,"TIM_KIEM")}</div>
<select class="form-control" id="filter-from-server" onchange="filters(this);"> <select class="form-control" id="filter-from-server" onchange="filters(this);">
<option value=""></option> <option value=""></option>
{html_options options=$filters} {html_options options=$filters}
</select> </select>
<div class="input-group-btn"> <div class="input-group-btn">
<button class="btn btn-default" data-toggle="tooltip" title="Hủy bỏ tìm kiếm" onclick="removeFilters();"> <button class="btn btn-default" data-toggle="tooltip" title="{Yii::t("app", "HUY_BO_TIM_KIEM")}" onclick="removeFilters();">
<i class="fa fa-remove"></i> <i class="fa fa-remove"></i>
</button> </button>
</div> </div>
@@ -20,15 +20,15 @@
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
<th>ID</th> <th>{Yii::t("app", "ID")}</th>
<th>Loại</th> <th>{Yii::t("app", "LOAI")}</th>
<th>Tên</th> <th>{Yii::t("app", "TEN")}</th>
<th>Giới tính</th> <th>{Yii::t("app", "GIOI_TINH")}</th>
<th>Hình ảnh đăng kí</th> <th>{Yii::t("app", "HINH_ANH_DANG_KI")}</th>
<th>Thời gian đăng kí</th> <th>{Yii::t("app", "THOI_GIAN_DANG_KI")}</th>
<th>Ngày sinh</th> <th>{Yii::t("app", "NGAY_SINH")}</th>
<th>Điện thoại</th> <th>{Yii::t("app", "DIEN_THOAI")}</th>
<th>Đơn vị</th> <th>{Yii::t("app", "DON_VI")}</th>
</tr> </tr>
</thead> </thead>
<tbody id="sync-lists"> <tbody id="sync-lists">
@@ -58,11 +58,11 @@
<br> <br>
<div class="row"> <div class="row">
<div class="col-md-2"> <div class="col-md-2">
<i class="fa fa-info-circle"></i> Đã lựa chọn <b class="text-red" id="totals-choose">0</b> đối tượng. <i class="fa fa-info-circle"></i> {Yii::t("app", "DA_LUA_CHON_X_DOI_TUONG")}
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="hidden" id="progress-form"> <div class="hidden" id="progress-form">
Đồng bộ <b id="progress-current" class="text-green">0</b>/<b id="progress-totals" class="text-red">0</b> đối tượng. {Yii::t("app", "DONG_BO_X_Y_DOI_TUONG")}
<div class="progress"> <div class="progress">
<div class="progress-bar progress-bar-primary progress-bar-striped" id='progress' role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"> <div class="progress-bar progress-bar-primary progress-bar-striped" id='progress' role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
0% 0%
@@ -72,14 +72,14 @@
</div> </div>
<div class="col-md-4 text-right"> <div class="col-md-4 text-right">
<button class="btn btn-default btn-select" onclick="checkAllSync(true);"> <button class="btn btn-default btn-select" onclick="checkAllSync(true);">
Chọn tất cả {Yii::t("app", "CHON_TAT_CA")}
</button> </button>
<button class="btn btn-default btn-select" onclick="checkAllSync(false);"> <button class="btn btn-default btn-select" onclick="checkAllSync(false);">
Bỏ chọn tất cả {Yii::t("app", "BO_CHON_TAT_CA")}
</button> </button>
<button class="btn btn-primary" onclick="_sync();"> <button class="btn btn-primary" onclick="_sync();">
<i class="fa fa-refresh"></i> Đồng bộ <i class="fa fa-refresh"></i> {Yii::t("app", "DONG_BO")}
</button> </button>
<button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> Đóng lại</button> <button type="button" class="btn btn-default" data-dismiss="modal"><span class="fa fa-remove"></span> {Yii::t("app", "DONG_LAI")}</button>
</div> </div>
</div> </div>

View File

@@ -10,26 +10,26 @@
<input type="hidden" value="{$model->password}" name="password"> <input type="hidden" value="{$model->password}" name="password">
<div class="well" style="background: #fff;"> <div class="well" style="background: #fff;">
<div class="form-group" id="old-password"> <div class="form-group" id="old-password">
<label class="control-label">Mật khẩu cũ</label> <label class="control-label">{Yii::t("app", "MAT_KHAU_CU")}</label>
<input type="password" class="form-control" name="OldPassword"> <input type="password" class="form-control" name="OldPassword">
<span class="help-block hidden"></span> <span class="help-block hidden"></span>
</div> </div>
<div class="form-group" id="new-password"> <div class="form-group" id="new-password">
<label class="control-label">Mật khẩu mới</label> <label class="control-label">{Yii::t("app", "MAT_KHAU_MOI")}</label>
<input type="password" class="form-control" name="NewPassword"> <input type="password" class="form-control" name="NewPassword">
<span class="help-block hidden"></span> <span class="help-block hidden"></span>
</div> </div>
<div class="form-group" id="re-new-password"> <div class="form-group" id="re-new-password">
<label class="control-label">Nhắc lại mật khẩu mới</label> <label class="control-label">{Yii::t("app", "NHAC_LAI_MAT_KHAU_MOI")}</label>
<input type="password" class="form-control" name="ReNewPassword"> <input type="password" class="form-control" name="ReNewPassword">
<span class="help-block hidden"></span> <span class="help-block hidden"></span>
</div> </div>
<div class="alert alert-success hidden" id='success' style="padding: 5px;"> <div class="alert alert-success hidden" id='success' style="padding: 5px;">
<i class="fa fa-check"></i> Đổi mật khẩu thành công! <i class="fa fa-check"></i> {Yii::t("app", "DOI_MAT_KHAU_THANH_CONG")}
</div> </div>
<div class="text-center"> <div class="text-center">
<button class="btn btn-primary" onclick="user.changePassword(this);" data-href="{Url::to(['/user/change-password','id'=>$model->id])}"> <button class="btn btn-primary" onclick="user.changePassword(this);" data-href="{Url::to(['/user/change-password','id'=>$model->id])}">
<i class="fa fa-lock"></i> Đổi mật khẩu <i class="fa fa-lock"></i> {Yii::t("app", "DOI_MAT_KHAU")}
</button> </button>
</div> </div>
</div> </div>

View File

@@ -26,37 +26,37 @@
</div> </div>
<br> <br>
<div class="form-group" id="username"> <div class="form-group" id="username">
<label class="control-label" for="user-username">Tên đăng nhập</label> <label class="control-label" for="user-username">{Yii::t("app", "TEN_DANG_NHAP")}</label>
<input type="text" class="form-control" name="Username" readonly="" value="{$model->username}"> <input type="text" class="form-control" name="Username" readonly="" value="{$model->username}">
<span class="help-block hidden"></span> <span class="help-block hidden"></span>
</div> </div>
<div class="form-group" id="name"> <div class="form-group" id="name">
<label class="control-label" for="user-first-name">Họ tên</label> <label class="control-label" for="user-first-name">{Yii::t("app", "HO_TEN")}</label>
<input type="text" class="form-control" name="Name" value="{$model->first_name}"> <input type="text" class="form-control" name="Name" value="{$model->first_name}">
<span class="help-block hidden"></span> <span class="help-block hidden"></span>
</div> </div>
<div class="form-group" id="phone"> <div class="form-group" id="phone">
<label class="control-label" for="user-phone-number">Điện thoại</label> <label class="control-label" for="user-phone-number">{Yii::t("app", "DIEN_THOAI")}</label>
<input type="text" class="form-control" name="PhoneNumber" value="{$model->phone_number}"> <input type="text" class="form-control" name="PhoneNumber" value="{$model->phone_number}">
<span class="help-block hidden"></span> <span class="help-block hidden"></span>
</div> </div>
<div class="form-group" id="email"> <div class="form-group" id="email">
<label class="control-label" for="user-email">Email</label> <label class="control-label" for="user-email">{Yii::t("app", "EMAIL")}</label>
<input type="text" class="form-control" name="Email" value="{$model->email}"> <input type="text" class="form-control" name="Email" value="{$model->email}">
<span class="help-block hidden"></span> <span class="help-block hidden"></span>
</div> </div>
<div class="form-group" id="roles"> <div class="form-group" id="roles">
<label class="control-label" for="user-role">Loại người dùng</label> <label class="control-label" for="user-role">{Yii::t("app", "LOAI_NGUOI_DUNG")}</label>
<br> <br>
{$model->roleName} {$model->roleName}
</div> </div>
<hr> <hr>
<div class="alert alert-success hidden" id='success' style="padding: 5px;"> <div class="alert alert-success hidden" id='success' style="padding: 5px;">
<i class="fa fa-check"></i> Thông tin đã được lưu lại! <i class="fa fa-check"></i> {Yii::t("app", "THONG_TIN_DA_DUOC_LUU_LAI")}
</div> </div>
<div class="text-center"> <div class="text-center">
<button class="btn btn-primary" onclick="user.saveInfo(this);" data-href="{Url::to(['/user/info','id'=>$model->id])}"> <button class="btn btn-primary" onclick="user.saveInfo(this);" data-href="{Url::to(['/user/info','id'=>$model->id])}">
<i class="fa fa-floppy-o"></i> Lưu lại <i class="fa fa-floppy-o"></i> {Yii::t("app", "LUU_LAI")}
</button> </button>
</div> </div>
</div> </div>

BIN
web/images/lang/en.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
web/images/lang/jp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
web/images/lang/vi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@@ -2,7 +2,7 @@
// comment out the following two lines when deployed to production // comment out the following two lines when deployed to production
//defined('YII_DEBUG') or define('YII_DEBUG', true); //defined('YII_DEBUG') or define('YII_DEBUG', true);
//defined('YII_ENV') or define('YII_ENV', 'dev'); //defined('YII_ENV') or define('YII_ENV', 'dev');
require __DIR__ . '/../vendor/autoload.php'; require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php'; require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';

View File

@@ -23,6 +23,9 @@ function _form(e) {
$("#form").removeClass("hidden"); $("#form").removeClass("hidden");
$("input[name='CaptureLogsID']").val($(e).attr("data-id")); $("input[name='CaptureLogsID']").val($(e).attr("data-id"));
$("#FaceImage").attr("src", $(e).attr("data-img")); $("#FaceImage").attr("src", $(e).attr("data-img"));
var confidence = JSON.parse($(e).attr("data-confidence"));
$("#closest-img").attr("src", confidence.img);
$("#closest-name").html(confidence.name + " [" + confidence.score + "]");
} }
function _close() { function _close() {
@@ -32,12 +35,17 @@ function _close() {
function _save(e) { function _save(e) {
var code = $("select[name='Code']").val(); var code = $("select[name='Code']").val();
if (code === "") { if (code === "") {
alert("Hãy chọn đối tượng!"); alert($("input[name='HAY_CHON_DOI_TUONG']").val());
return; return;
} }
var name = $("input[name='Name']").val(); var name = $("input[name='Name']").val();
if (name === "") { if (name === "") {
alert("Hãy nhập tên!"); alert($("input[name='HAY_NHAP_TEN']").val());
return;
}
var abbreviated_name = $("input[name='AbbreviatedName']").val();
if (abbreviated_name === "") {
alert($("input[name='HAY_NHAP_TEN_HIEN_THI']").val());
return; return;
} }
common.modalBlock(true); common.modalBlock(true);
@@ -47,6 +55,7 @@ function _save(e) {
data: { data: {
code: code, code: code,
name: name, name: name,
abbreviated_name: abbreviated_name,
type: $("select[name='Type']").val(), type: $("select[name='Type']").val(),
gender: $("select[name='Gender']").val(), gender: $("select[name='Gender']").val(),
birthday: $("input[name='Birthday']").val(), birthday: $("input[name='Birthday']").val(),
@@ -57,7 +66,7 @@ function _save(e) {
success: function (data) { success: function (data) {
common.modalBlock(false); common.modalBlock(false);
if (data.status) { if (data.status) {
alert("Đã thêm dữ liệu thành công!"); alert($("input[name='CAP_NHAT_DU_LIEU_THANH_CONG']").val());
window.location.reload(true); window.location.reload(true);
} else { } else {
alert(data.text); alert(data.text);
@@ -81,6 +90,7 @@ function chooseStaff(e) {
success: function (data) { success: function (data) {
common.modalBlock(false); common.modalBlock(false);
$("input[name='Name']").val(data.name); $("input[name='Name']").val(data.name);
$("input[name='AbbreviatedName']").val(data.abbreviated_name);
$("select[name='Gender']").val(data.gender); $("select[name='Gender']").val(data.gender);
$("input[name='Birthday']").val(data.birthday); $("input[name='Birthday']").val(data.birthday);
$("input[name='Telephone']").val(data.telephone); $("input[name='Telephone']").val(data.telephone);

View File

@@ -155,7 +155,7 @@ common.modalAlert = function (text, cls, link) {
} }
}; };
common.ajaxError = function () { common.ajaxError = function () {
common.modalAlert("Có lỗi xảy ra, có thể do đường truyền mạng, xin vui lòng thử lại!", "danger", ""); common.modalAlert($("input[name='CO_LOI_XAY_RA_HAY_THU_LAI']").val(), "danger", "");
}; };
common.btnUpload = function (mUrl, className, extension, fileSize) { common.btnUpload = function (mUrl, className, extension, fileSize) {
var fData = { var fData = {
@@ -310,14 +310,14 @@ common.reset = function (e) {
if ($("input[name='ResetDevice']").is(':checked')) if ($("input[name='ResetDevice']").is(':checked'))
resetDevice = true; resetDevice = true;
if (!deleteDB && !resetDevice) { if (!deleteDB && !resetDevice) {
alert("Hãy lựa chọn thao tác!"); alert($("input[name='HAY_LUA_CHON_THAO_TAC']").val());
return; return;
} }
var confirmText = ""; var confirmText = "";
if (deleteDB) if (deleteDB)
confirmText = "Bạn có chắc chắn muốn xóa dữ liệu lưu trữ trong thiết bị không?"; confirmText = $("input[name='DELETE_DB_CONFIRM']").val();
if (resetDevice) if (resetDevice)
confirmText = "Bạn có chắc chắn muốn reset cấu hình thiết bị không?"; confirmText = $("input[name='RESET_DB_CONFIRM']").val();
if (confirm(confirmText)) { if (confirm(confirmText)) {
common.modalBlock(true); common.modalBlock(true);
$.ajax({ $.ajax({
@@ -328,7 +328,14 @@ common.reset = function (e) {
resetDevice: resetDevice resetDevice: resetDevice
}, },
success: function (data) { success: function (data) {
window.location = data; common.modalBlock(false);
if (data.status)
window.location = data.url;
else {
$("#reset-error").removeClass("hidden");
$("#reset-close").addClass("hidden");
$("#reset-accept").html(data.btnText);
}
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false); common.modalBlock(false);
@@ -342,6 +349,17 @@ common.validateIp = function (Ip) {
return true; return true;
} }
return false; return false;
};
common.changeLanguage = function (e) {
$.ajax({
url: $(e).attr("href"),
type: 'POST',
success: function (data) {
window.location.reload(true);
},
error: function (jqXHR, textStatus, errorThrown) {
}
});
} }
/** /**
* ========================= * =========================

View File

@@ -4,12 +4,12 @@ $(function () {
function saveStep1(e) { function saveStep1(e) {
var servermqtt = $("input[name='servermqtt']").val(); var servermqtt = $("input[name='servermqtt']").val();
if (servermqtt === "") { if (servermqtt === "") {
alert("Hãy nhập thông tin!"); alert($("input[name='HAY_NHAP_THONG_TIN']").val());
return; return;
} }
var url = $("input[name='url']").val(); var url = $("input[name='url']").val();
if (url === "") { if (url === "") {
alert("Hãy nhập thông tin!"); alert($("input[name='HAY_NHAP_THONG_TIN']").val());
return; return;
} }
common.modalBlock(true); common.modalBlock(true);
@@ -34,7 +34,7 @@ function saveStep1(e) {
if (data.text === "error") { if (data.text === "error") {
c++; c++;
if (c == 5) { if (c == 5) {
alert("Box chưa được đăng kí trên CMS!"); alert($("input[name='BOX_CHUA_DUOC_DANG_KI_TREN_CMS']").val());
window.location.reload(true); window.location.reload(true);
} }
} else { } else {
@@ -75,11 +75,10 @@ function saveStep2(e) {
config: cfg config: cfg
}, },
success: function (data) { success: function (data) {
if (data) { if (data)
notification.success("Đã lưu cấu hình!", 2000); notification.success($("input[name='DA_LUU_CAU_HINH']").val(), 2000);
} else { else
notification.success("Lưu cấu hình thất bại!", 2000); notification.success($("input[name='LUU_CAU_HINH_THAT_BAI']").val(), 2000);
}
common.modalBlock(false); common.modalBlock(false);
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
@@ -93,7 +92,7 @@ function SaveConfigDevice(e) {
var server_api = $("input[name='server_api']").val(); var server_api = $("input[name='server_api']").val();
var device_id = $("input[name='device_id']").val(); var device_id = $("input[name='device_id']").val();
if (server_api === "" || device_id === "") { if (server_api === "" || device_id === "") {
alert("Hãy nhập đủ thông tin"); alert($("input[name='HAY_NHAP_THONG_TIN']").val());
return; return;
} }
common.modalBlock(true); common.modalBlock(true);
@@ -105,11 +104,10 @@ function SaveConfigDevice(e) {
device_id: device_id device_id: device_id
}, },
success: function (data) { success: function (data) {
if (data) { if (data)
notification.success("Đã lưu cấu hình!", 2000); notification.success($("input[name='DA_LUU_CAU_HINH']").val(), 2000);
} else { else
notification.success("Lưu cấu hình thất bại!", 2000); notification.success($("input[name='LUU_CAU_HINH_THAT_BAI']").val(), 2000);
}
common.modalBlock(false); common.modalBlock(false);
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {

View File

@@ -22,7 +22,7 @@ function _useFeature(e) {
success: function (data) { success: function (data) {
common.modalBlock(false); common.modalBlock(false);
if (data.status) { if (data.status) {
alert("Đã thêm hình ảnh mẫu!"); alert($("input[name='DA_THEM_HINH_ANH_MAU']").val());
} else { } else {
alert(data.text); alert(data.text);
} }

View File

@@ -17,7 +17,14 @@ $(function () {
btnImage(); btnImage();
$("#Code").select2(); $("#Code").select2();
getTotalFeature(); getTotalFeature();
setInterval(function () {
var current = parseInt($("#current-512").html());
var total = parseInt($("#total-512").html());
if (current < total)
getTotalFeature();
}, 5000);
}); });
function _search(e) { function _search(e) {
var location = $(e).attr("data-href"); // + "?from=" + $("input[name='From']").val() + "&to=" + $("input[name='To']").val(); var location = $(e).attr("data-href"); // + "?from=" + $("input[name='From']").val() + "&to=" + $("input[name='To']").val();
location = location + "?id=" + $("input[name='IDSearch']").val(); location = location + "?id=" + $("input[name='IDSearch']").val();
@@ -68,6 +75,7 @@ function _formModified(e) {
$("select[name='Type']").val(data.type); $("select[name='Type']").val(data.type);
$("select[name='Code']").val(data.code); $("select[name='Code']").val(data.code);
$("input[name='Name']").val(data.name); $("input[name='Name']").val(data.name);
$("input[name='AbbreviatedName']").val(data.abbreviated_name);
$("select[name='Gender']").val(data.gender); $("select[name='Gender']").val(data.gender);
$("input[name='Birthday']").val(data.birthday); $("input[name='Birthday']").val(data.birthday);
$("input[name='Telephone']").val(data.telephone); $("input[name='Telephone']").val(data.telephone);
@@ -86,12 +94,17 @@ function _formModified(e) {
function _update(e) { function _update(e) {
var code = $("select[name='Code']").val(); var code = $("select[name='Code']").val();
if (code === "") { if (code === "") {
alert("Hãy chọn đối tượng!"); alert($("input[name='HAY_CHON_DOI_TUONG']").val());
return; return;
} }
var name = $("input[name='Name']").val(); var name = $("input[name='Name']").val();
if (name === "") { if (name === "") {
alert("Hãy nhập tên!"); alert($("input[name='HAY_NHAP_TEN']").val());
return;
}
var abbreviated_name = $("input[name='AbbreviatedName']").val();
if (abbreviated_name === "") {
alert($("input[name='HAY_NHAP_TEN_HIEN_THI']").val());
return; return;
} }
common.modalBlock(true); common.modalBlock(true);
@@ -101,6 +114,7 @@ function _update(e) {
data: { data: {
code: code, code: code,
name: name, name: name,
abbreviated_name: abbreviated_name,
type: $("select[name='Type']").val(), type: $("select[name='Type']").val(),
gender: $("select[name='Gender']").val(), gender: $("select[name='Gender']").val(),
birthday: $("input[name='Birthday']").val(), birthday: $("input[name='Birthday']").val(),
@@ -112,10 +126,10 @@ function _update(e) {
success: function (data) { success: function (data) {
common.modalBlock(false); common.modalBlock(false);
if (data) { if (data) {
alert("Cập nhật dữ liệu thành công!"); alert($("input[name='CAP_NHAT_DU_LIEU_THANH_CONG']").val());
window.location.reload(true); window.location.reload(true);
} else } else
alert("Mã đối tượng đã tồn tại!"); alert($("input[name='MA_DOI_TUONG_DA_TON_TAI']").val());
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false); common.modalBlock(false);
@@ -125,7 +139,7 @@ function _update(e) {
} }
function _delete(e) { function _delete(e) {
if (confirm("Bạn có chắc chắn muốn xóa không?")) { if (confirm($("input[name='DELETE_CONFIRM']").val())) {
common.modalBlock(true); common.modalBlock(true);
$.ajax({ $.ajax({
url: $(e).attr("data-href"), url: $(e).attr("data-href"),
@@ -145,7 +159,7 @@ function _delete(e) {
} }
function _deleteFeature(e) { function _deleteFeature(e) {
if (confirm("Bạn có chắc chắn muốn xóa ảnh này không?")) { if (confirm($("input[name='DELETE_CONFIRM']").val())) {
common.modalBlock(true); common.modalBlock(true);
$.ajax({ $.ajax({
url: $(e).attr("data-href"), url: $(e).attr("data-href"),
@@ -176,7 +190,7 @@ function checkAll(status) {
function batchDelete(e) { function batchDelete(e) {
var check = $(".delete-choose"); var check = $(".delete-choose");
if (check.length == 0) { if (check.length == 0) {
alert("Hãy chọn dữ liệu để xóa!"); alert($("input[name='HAY_CHON_DU_LIEU_DE_XOA']").val());
return; return;
} }
var lists = []; var lists = [];
@@ -184,7 +198,7 @@ function batchDelete(e) {
if ($(this).attr("data-id") !== "") if ($(this).attr("data-id") !== "")
lists.push($(this).attr("data-id")); lists.push($(this).attr("data-id"));
}); });
if (confirm("Bạn có chắc chắn muốn xóa không?")) { if (confirm($("input[name='DELETE_CONFIRM']").val())) {
common.modalBlock(true); common.modalBlock(true);
$.ajax({ $.ajax({
url: $(e).attr("data-href"), url: $(e).attr("data-href"),
@@ -193,7 +207,7 @@ function batchDelete(e) {
lists: lists lists: lists
}, },
success: function (data) { success: function (data) {
alert("Đã xóa dữ liệu!"); alert($("input[name='DA_XOA_DU_LIEU']").val());
window.location.reload(true); window.location.reload(true);
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
@@ -232,7 +246,7 @@ function btnImage() {
fileExtension: '.png,.jpg,.jpeg,.gif', fileExtension: '.png,.jpg,.jpeg,.gif',
fileSizeLimit: 1, fileSizeLimit: 1,
classes: 'btn btn-default btn-xs', classes: 'btn btn-default btn-xs',
fakeInputContent: '<span class=\'fa fa-file-image-o\'></span> Chọn hình ảnh', fakeInputContent: '<span class=\'fa fa-file-image-o\'></span> ' + $("input[name='CHON_HINH_ANH']").val(),
onUploaded: function (data) { onUploaded: function (data) {
var res = JSON.parse(data); var res = JSON.parse(data);
if (res.status) { if (res.status) {
@@ -240,7 +254,7 @@ function btnImage() {
$("input[name='AnhNhanVienUrl']").val(res.url); $("input[name='AnhNhanVienUrl']").val(res.url);
common.uploadBlock(false); common.uploadBlock(false);
} else { } else {
alert("Hình ảnh không nhận diện được khuôn mặt"); alert($("input[name='HINH_ANH_KHONG_NHAN_DIEN_DUOC_KHUON_MAT']").val());
} }
} }
}).addInstance('AnhNhanVien'); }).addInstance('AnhNhanVien');
@@ -249,17 +263,17 @@ function btnImage() {
function _create(e) { function _create(e) {
var code = $("select[name='Code']").val(); var code = $("select[name='Code']").val();
if (code === "") { if (code === "") {
alert("Hãy chọn đối tượng!"); alert($("input[name='HAY_CHON_DOI_TUONG']").val());
return; return;
} }
var name = $("input[name='Name']").val(); var name = $("input[name='Name']").val();
if (name === "") { if (name === "") {
alert("Hãy nhập tên!"); alert($("input[name='HAY_NHAP_TEN']").val());
return; return;
} }
var image = $("input[name='AnhNhanVienUrl']").val(); var image = $("input[name='AnhNhanVienUrl']").val();
if (image === "") { if (image === "") {
alert("Hãy tải lên hình ảnh"); alert($("input[name='HAY_TAI_LEN_HINH_ANH']").val());
return; return;
} }
common.modalBlock(true); common.modalBlock(true);
@@ -279,10 +293,10 @@ function _create(e) {
success: function (data) { success: function (data) {
common.modalBlock(false); common.modalBlock(false);
if (data.status) { if (data.status) {
alert("Cập nhật dữ liệu thành công!"); alert($("input[name='CAP_NHAT_DU_LIEU_THANH_CONG']").val());
window.location.reload(true); window.location.reload(true);
} else } else
alert("Mã đối tượng đã tồn tại!"); alert($("input[name='MA_DOI_TUONG_DA_TON_TAI']").val());
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false); common.modalBlock(false);
@@ -294,11 +308,11 @@ function _create(e) {
function _syncForm(e) { function _syncForm(e) {
var ip = $("input[name='SyncIP']").val(); var ip = $("input[name='SyncIP']").val();
if (ip === "") { if (ip === "") {
common.error("ip", "Hãy nhập địa chỉ ip thiết bị muốn đồng bộ"); common.error("ip", $("input[name='HAY_NHAP_DIA_CHI_IP_DONG_BO']").val());
return; return;
} }
if (!common.validateIp(ip)) { if (!common.validateIp(ip)) {
common.error("ip", "Sai định dạng ip"); common.error("ip", $("input[name='SAI_DINH_DANG_IP']").val());
return; return;
} }
common.success("ip"); common.success("ip");
@@ -313,12 +327,12 @@ function _syncForm(e) {
common.modalBlock(false); common.modalBlock(false);
common.modalOpenFullScreen(data.form, data.title); common.modalOpenFullScreen(data.form, data.title);
$("#filter-from-server").select2({ $("#filter-from-server").select2({
placeholder: "Tìm kiếm theo ID hoặc tên" placeholder: $("input[name='TIM_KIEM_THEO_ID_HOAC_TEN']").val()
}); });
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false); common.modalBlock(false);
alert("Không có kết nối tới thiết bị"); alert($("input[name='KHONG_CO_KET_NOI_TOI_THIET_BI']").val());
} }
}); });
} }
@@ -360,7 +374,7 @@ function _sync() {
lists.push($(this).attr("data-id")); lists.push($(this).attr("data-id"));
}); });
if (lists.length == 0) { if (lists.length == 0) {
alert("Không có dữ liệu đồng bộ!"); alert($("input[name='KHONG_CO_DU_LIEU_DONG_BO']").val());
return; return;
} }
common.modalBlock(true); common.modalBlock(true);
@@ -401,7 +415,7 @@ function syncFeatureFromDevice(id, fullData) {
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false); common.modalBlock(false);
alert("Mất kết nối tới thiết bị"); alert($("input[name='KHONG_CO_KET_NOI_TOI_THIET_BI']").val());
} }
}); });
} }
@@ -415,7 +429,7 @@ function _syncFromServerForm(e) {
common.modalBlock(false); common.modalBlock(false);
common.modalOpenFullScreen(data.form, data.title); common.modalOpenFullScreen(data.form, data.title);
$("#filter-from-server").select2({ $("#filter-from-server").select2({
placeholder: "Tìm kiếm theo ID hoặc tên" placeholder: $("input[name='TIM_KIEM_THEO_ID_HOAC_TEN']").val()
}); });
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
@@ -432,7 +446,7 @@ function _syncFromServer() {
lists.push(JSON.parse($("#full-data-" + id).html())); lists.push(JSON.parse($("#full-data-" + id).html()));
}); });
if (lists.length == 0) { if (lists.length == 0) {
alert("Không có dữ liệu đồng bộ!"); alert($("input[name='KHONG_CO_DU_LIEU_DONG_BO']").val());
return; return;
} }
common.modalBlock(true); common.modalBlock(true);
@@ -451,6 +465,11 @@ function syncFeature(id, fullData) {
totals: totals totals: totals
}, },
success: function (data) { success: function (data) {
if (!data) {
common.modalBlock(false);
common.modalAlert($("input[name='ENGINE_KHONG_HOAT_DONG']").val(), "danger", "");
return;
}
console.log(data, progress); console.log(data, progress);
progress++; progress++;
$("#progress-current").html(parseInt($("#progress-current").html()) + 1); $("#progress-current").html(parseInt($("#progress-current").html()) + 1);
@@ -519,7 +538,7 @@ function _syncToServerForm(e) {
common.modalBlock(false); common.modalBlock(false);
common.modalOpenFullScreen(data.form, data.title); common.modalOpenFullScreen(data.form, data.title);
$("#filter-from-server").select2({ $("#filter-from-server").select2({
placeholder: "Tìm kiếm theo ID hoặc tên" placeholder: $("input[name='TIM_KIEM_THEO_ID_HOAC_TEN']").val()
}); });
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
@@ -537,7 +556,7 @@ function _syncToServer() {
lists.push($(this).attr("data-id")); lists.push($(this).attr("data-id"));
}); });
if (lists.length == 0) { if (lists.length == 0) {
alert("Không có dữ liệu đồng bộ!"); alert($("input[name='KHONG_CO_DU_LIEU_DONG_BO']").val());
return; return;
} }
common.modalBlock(true); common.modalBlock(true);
@@ -569,7 +588,7 @@ function syncFeatureToServer(id, fullData) {
if (percent >= 100) { if (percent >= 100) {
common.modalBlock(false); common.modalBlock(false);
setTimeout(function () { setTimeout(function () {
alert("Đồng bộ dữ liệu hoàn thành"); alert($("input[name='DONG_BO_DU_LIEU_HOAN_THANH']").val());
window.location.reload(true); window.location.reload(true);
}, 2000) }, 2000)
} else { } else {
@@ -586,12 +605,12 @@ function filters(e) {
if (id === "") { if (id === "") {
$(".filters").removeClass("hidden"); $(".filters").removeClass("hidden");
$(".btn-select").removeClass("hidden"); $(".btn-select").removeClass("hidden");
checkAllSync(false); // checkAllSync(false);
} else { } else {
$(".filters").addClass("hidden"); $(".filters").addClass("hidden");
$("#filters-" + id).removeClass("hidden"); $("#filters-" + id).removeClass("hidden");
$(".btn-select").addClass("hidden"); $(".btn-select").addClass("hidden");
checkAllSync(false); // checkAllSync(false);
choooseToSync($("#filters-" + id)); choooseToSync($("#filters-" + id));
} }
} }
@@ -600,7 +619,7 @@ function removeFilters() {
$(".filters").removeClass("hidden"); $(".filters").removeClass("hidden");
$(".btn-select").removeClass("hidden"); $(".btn-select").removeClass("hidden");
$("#filter-from-server").val('').trigger('change'); $("#filter-from-server").val('').trigger('change');
checkAllSync(false); // checkAllSync(false);
} }
function getTotalFeature() { function getTotalFeature() {
@@ -611,7 +630,7 @@ function getTotalFeature() {
console.log(data); console.log(data);
$("#totalPeople").html(`<b class="text-red">` + data.statistics.totalImg + `</b>/<b>` + data.statistics.total + `</b>`); $("#totalPeople").html(`<b class="text-red">` + data.statistics.totalImg + `</b>/<b>` + data.statistics.total + `</b>`);
$("#total128").html(`<b class="text-red">` + data.statistics["128"] + `</b>/<b>` + data.statistics.img + `</b>`); $("#total128").html(`<b class="text-red">` + data.statistics["128"] + `</b>/<b>` + data.statistics.img + `</b>`);
$("#total512").html(`<b class="text-red">` + data.statistics["512"] + `</b>/<b>` + data.statistics.img + `</b>`); $("#total512").html(`<b class="text-red" id="current-512">` + data.statistics["512"] + `</b>/<b id="total-512">` + data.statistics.img + `</b>`);
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
} }