Compare commits
34 Commits
BiFacePro2
...
BiFacePro2
Author | SHA1 | Date | |
---|---|---|---|
fb9dd6fc89 | |||
e4e080266a | |||
82a5b0d0ad | |||
21cc5f2050 | |||
ea202ccc3f | |||
58a5522642 | |||
476f01098f | |||
5450124be9 | |||
8954a2fc25 | |||
c8e0bb7795 | |||
d6d7dc3719 | |||
982db2b6c8 | |||
1817771d88 | |||
33e439de8f | |||
ac0588b711 | |||
3ecfd63b68 | |||
aba8a19d75 | |||
9aa5b3b03a | |||
c22ce35c48 | |||
7545b93ee7 | |||
11ecb518ef | |||
4a08ad05df | |||
45c9a9f4f1 | |||
64d9ad0b88 | |||
8758bb3692 | |||
26d240b3ad | |||
bd43865bb2 | |||
74d8ab31bf | |||
2b3e30ad0e | |||
ce6bcfabba | |||
3fd18b0d95 | |||
e26819f1fb | |||
7d83a98e21 | |||
8dc6ca8104 |
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,3 +3,4 @@
|
||||||
/web/data
|
/web/data
|
||||||
/vendor/
|
/vendor/
|
||||||
/nbproject/private/
|
/nbproject/private/
|
||||||
|
/db
|
23
assets/FaceComparisonAsset.php
Normal file
23
assets/FaceComparisonAsset.php
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\assets;
|
||||||
|
|
||||||
|
use yii\web\AssetBundle;
|
||||||
|
|
||||||
|
class FaceComparisonAsset extends AssetBundle {
|
||||||
|
|
||||||
|
public $basePath = '@webroot';
|
||||||
|
public $baseUrl = '@web';
|
||||||
|
public $css = [
|
||||||
|
];
|
||||||
|
public $js = [
|
||||||
|
'js/face-comparison.js'
|
||||||
|
];
|
||||||
|
public $depends = [
|
||||||
|
'yii\web\YiiAsset',
|
||||||
|
'app\assets\AppAsset',
|
||||||
|
'yii\jui\JuiAsset',
|
||||||
|
'yii\bootstrap\BootstrapAsset',
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
|
@ -2,7 +2,10 @@
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'adminEmail' => 'admin@example.com',
|
'adminEmail' => 'admin@example.com',
|
||||||
"maxLogs" => 100000,
|
"type" => "BiFace", // BiFace, BiTable
|
||||||
|
"maxLogs" => 50000,
|
||||||
"maxPicture" => 9999,
|
"maxPicture" => 9999,
|
||||||
"version" => "1.0.7"
|
"version" => "1.0.7",
|
||||||
|
"autoSyncLog" => false,
|
||||||
|
"timeoutRequestServer" => 4
|
||||||
];
|
];
|
||||||
|
|
|
@ -9,6 +9,7 @@ use yii\helpers\FileHelper;
|
||||||
use app\models\CaptureLogs;
|
use app\models\CaptureLogs;
|
||||||
use app\models\ListManagement;
|
use app\models\ListManagement;
|
||||||
use app\models\common;
|
use app\models\common;
|
||||||
|
use app\models\Schedule;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CardController implements the CRUD actions for Card model.
|
* CardController implements the CRUD actions for Card model.
|
||||||
|
@ -57,6 +58,7 @@ class ApiController extends Controller {
|
||||||
|
|
||||||
public function actionGetLogs() {
|
public function actionGetLogs() {
|
||||||
if (Yii::$app->request->post()) {
|
if (Yii::$app->request->post()) {
|
||||||
|
Yii::$app->response->format = "json";
|
||||||
$post = Yii::$app->request->bodyParams;
|
$post = Yii::$app->request->bodyParams;
|
||||||
$time = date_format(date_create_from_format('Y-m-d H:i:s', $post['time']), 'U');
|
$time = date_format(date_create_from_format('Y-m-d H:i:s', $post['time']), 'U');
|
||||||
$key = common::generateRandomString();
|
$key = common::generateRandomString();
|
||||||
|
@ -69,9 +71,14 @@ class ApiController extends Controller {
|
||||||
$totalsLogs = CaptureLogs::find()->count();
|
$totalsLogs = CaptureLogs::find()->count();
|
||||||
if ($totalsLogs >= \Yii::$app->params['maxLogs']) {
|
if ($totalsLogs >= \Yii::$app->params['maxLogs']) {
|
||||||
$lastLogs = CaptureLogs::find()->orderBy(["id" => SORT_ASC])->limit(1)->one();
|
$lastLogs = CaptureLogs::find()->orderBy(["id" => SORT_ASC])->limit(1)->one();
|
||||||
unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $lastLogs->image);
|
@unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $lastLogs->image);
|
||||||
$lastLogs->delete();
|
$lastLogs->delete();
|
||||||
}
|
}
|
||||||
|
$lastLogs = CaptureLogs::find()->andWhere(["staff_id" => $post['id']])->orderBy(["time" => SORT_DESC])->limit(1)->one();
|
||||||
|
if ($lastLogs && ($time - $lastLogs->time) < 1) {
|
||||||
|
file_put_contents("log_connect_server.txt", "\n[" . date("H:i:s d/m/Y") . "] duplicate face " . $post["id"], FILE_APPEND);
|
||||||
|
return ["status" => "success"];
|
||||||
|
}
|
||||||
|
|
||||||
$model = new CaptureLogs();
|
$model = new CaptureLogs();
|
||||||
$logs = $model->create([
|
$logs = $model->create([
|
||||||
|
@ -84,7 +91,10 @@ class ApiController extends Controller {
|
||||||
$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() && $logs) {
|
$parseUrl = parse_url($ip);
|
||||||
|
$host = $parseUrl['host'];
|
||||||
|
$port = isset($parseUrl['port']) ? $parseUrl['port'] : 80;
|
||||||
|
if ($this->is_connected($host, $port) && $logs) {
|
||||||
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
|
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
|
||||||
$id_camera = 0;
|
$id_camera = 0;
|
||||||
if ($device_id)
|
if ($device_id)
|
||||||
|
@ -103,22 +113,25 @@ class ApiController extends Controller {
|
||||||
$data[] = "123"; //person_id
|
$data[] = "123"; //person_id
|
||||||
$data[] = "+7"; //timezone
|
$data[] = "+7"; //timezone
|
||||||
$text = implode("|", $data);
|
$text = implode("|", $data);
|
||||||
$res = json_decode(file_get_contents($ip . "/api/box/face_recognition_auth_v2?token=" . $tk, false, stream_context_create([
|
$res = json_decode(@file_get_contents($ip . "/api/box/face_recognition_auth_v2?token=" . $tk, false, stream_context_create([
|
||||||
'http' => [
|
'http' => [
|
||||||
|
'timeout' => Yii::$app->params['timeoutRequestServer'],
|
||||||
'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)),
|
||||||
'data' => common::rsaEncode($text)
|
'data' => common::rsaEncode($text),
|
||||||
|
'confidence' => isset($post["confidence"]["percent1"]) ? $post["confidence"]["percent1"] : 0
|
||||||
])
|
])
|
||||||
]
|
]
|
||||||
])), true);
|
])), true);
|
||||||
if ($res['status'] == 10000) {
|
if ($res && $res['status'] == 10000) {
|
||||||
$logsInfo->sync_status = 1;
|
$logsInfo->sync_status = 1;
|
||||||
$logsInfo->save();
|
$logsInfo->save();
|
||||||
|
} else {
|
||||||
|
file_put_contents("log_connect_server.txt", "\n[" . date("H:i:s d/m/Y") . "] /api/box/face_recognition_auth_v2 timeout " . $ip, FILE_APPEND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Yii::$app->response->format = "json";
|
|
||||||
return ["status" => "success"];
|
return ["status" => "success"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -149,6 +162,7 @@ class ApiController extends Controller {
|
||||||
}
|
}
|
||||||
$allFeatures[] = [
|
$allFeatures[] = [
|
||||||
"id" => $value->id,
|
"id" => $value->id,
|
||||||
|
"object_id" => $value->staff_id,
|
||||||
"name" => $this->convert_vi_to_en($value->name),
|
"name" => $this->convert_vi_to_en($value->name),
|
||||||
"feature1" => $feature1,
|
"feature1" => $feature1,
|
||||||
"feature2" => $feature2
|
"feature2" => $feature2
|
||||||
|
@ -269,18 +283,18 @@ class ApiController extends Controller {
|
||||||
$updating->data = "false";
|
$updating->data = "false";
|
||||||
$updating->save();
|
$updating->save();
|
||||||
$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);
|
||||||
return ["status" => false];
|
return ["status" => false];
|
||||||
} else {
|
} else {
|
||||||
$txt = "\n" . date("H:i:s d/m/Y") . " " . "updating";
|
$txt = "\n" . date("H:i:s d/m/Y") . " " . "updating";
|
||||||
file_put_contents(date('Ymd') . "_logs.txt", $txt, FILE_APPEND);
|
// file_put_contents(date('Ymd') . "_logs.txt", $txt, FILE_APPEND);
|
||||||
return ["status" => false];
|
return ["status" => false];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
return ["status" => false];
|
return ["status" => false];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,7 +336,7 @@ class ApiController extends Controller {
|
||||||
$finish = $this->getCurrentTime();
|
$finish = $this->getCurrentTime();
|
||||||
$processTime["updateDB"] = round(($finish - $start), 4);
|
$processTime["updateDB"] = round(($finish - $start), 4);
|
||||||
$txt = "\n" . json_encode($processTime);
|
$txt = "\n" . json_encode($processTime);
|
||||||
file_put_contents(date('Ymd') . ".txt", $txt, FILE_APPEND);
|
// file_put_contents(date('Ymd') . ".txt", $txt, FILE_APPEND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,17 +348,19 @@ class ApiController extends Controller {
|
||||||
|
|
||||||
public function actionSync() {
|
public function actionSync() {
|
||||||
Yii::$app->response->format = "json";
|
Yii::$app->response->format = "json";
|
||||||
if ($this->is_connected()) {
|
|
||||||
$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;
|
||||||
|
$parseUrl = parse_url($ip);
|
||||||
|
$host = $parseUrl['host'];
|
||||||
|
$port = isset($parseUrl['port']) ? $parseUrl['port'] : 80;
|
||||||
|
if ($this->is_connected($host, $port)) {
|
||||||
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
|
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
|
||||||
$id_camera = 0;
|
$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();
|
||||||
|
|
||||||
$tk = "";
|
$tk = "";
|
||||||
$token = \app\models\SyncUrl::findOne(['key_config' => 'token']);
|
$token = \app\models\SyncUrl::findOne(['key_config' => 'token']);
|
||||||
if ($token)
|
if ($token)
|
||||||
|
@ -352,24 +368,32 @@ class ApiController extends Controller {
|
||||||
foreach ($ls as $key => $value) {
|
foreach ($ls as $key => $value) {
|
||||||
if (file_exists("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value->image)) {
|
if (file_exists("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value->image)) {
|
||||||
$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([
|
$confidence = json_decode($value->confidence, true);
|
||||||
|
$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' => [
|
||||||
|
'timeout' => Yii::$app->params['timeoutRequestServer'],
|
||||||
'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),
|
'confidence' => isset($confidence['percent1']) ? floatval($confidence['percent1']) : 0
|
||||||
'idCard' => $staffInfo ? strval($staffInfo->code) : "0",
|
|
||||||
'idObject' => $staffInfo ? $staffInfo->staff_id : "",
|
|
||||||
"person_id" => "123",
|
|
||||||
"timezone" => "+7"
|
|
||||||
])
|
])
|
||||||
]
|
]
|
||||||
])), true);
|
])), true);
|
||||||
if ($res['status'] == 10000) {
|
if ($res && $res['status'] == 10000) {
|
||||||
$value->sync_status = 1;
|
$value->sync_status = 1;
|
||||||
$value->save();
|
$value->save();
|
||||||
|
} else {
|
||||||
|
file_put_contents("log_connect_server.txt", "\n[" . date("H:i:s d/m/Y") . "][SYNC] face_recognition_auth_v2 timeout " . $ip, FILE_APPEND);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$value->delete();
|
$value->delete();
|
||||||
|
@ -379,14 +403,16 @@ class ApiController extends Controller {
|
||||||
return ["status" => true];
|
return ["status" => true];
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_connected($ip = "google.com") {
|
function is_connected($host, $port) {
|
||||||
$connected = @fsockopen($ip, 80);
|
$connected = @fsockopen($host, $port);
|
||||||
//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);
|
||||||
|
// file_put_contents("log_connect_server.txt", "\n" . date("H:i:s d/m/Y") . " connected " . $host . ":" . $port, FILE_APPEND);
|
||||||
} else {
|
} else {
|
||||||
$is_conn = false; //action in connection failure
|
$is_conn = false; //action in connection failure
|
||||||
|
file_put_contents("log_connect_server.txt", "\n[" . date("H:i:s d/m/Y") . "] disconnected " . $host . ":" . $port, FILE_APPEND);
|
||||||
}
|
}
|
||||||
return $is_conn;
|
return $is_conn;
|
||||||
}
|
}
|
||||||
|
@ -481,15 +507,18 @@ class ApiController extends Controller {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionTest() {
|
public function actionTest() {
|
||||||
// $updating = \app\models\SyncUrl::findOne(['key_config' => 'token']);
|
$server_ip = \app\models\SyncUrl::findOne(['key_config' => 'server_api']);
|
||||||
$updating = \app\models\SyncUrl::find()->all();
|
$ip = "https://dev-dc.beetai.com";
|
||||||
foreach ($updating as $key => $value) {
|
if ($server_ip)
|
||||||
echo $value->key_config . " " . $value->data . "<br>";
|
$ip = $server_ip->data;
|
||||||
}
|
$parseUrl = parse_url($ip);
|
||||||
exit();
|
$host = $parseUrl['host'];
|
||||||
|
$port = isset($parseUrl['port']) ? $parseUrl['port'] : 80;
|
||||||
|
$this->is_connected($host, $port);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionReGenFeature() {
|
public function actionReGenFeature() {
|
||||||
|
\app\models\SyncUrl::deleteAll(['key_config' => 'log_process_status']);
|
||||||
$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();
|
||||||
|
@ -514,7 +543,27 @@ class ApiController extends Controller {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionCheckLogs() {
|
public function actionCheckLogs() {
|
||||||
|
set_time_limit(5000);
|
||||||
Yii::$app->response->format = "json";
|
Yii::$app->response->format = "json";
|
||||||
|
$logProcessStatus = \app\models\SyncUrl::findOne(['key_config' => 'log_process_status']);
|
||||||
|
if (!$logProcessStatus) {
|
||||||
|
$model = new \app\models\SyncUrl();
|
||||||
|
$model->create(['key_config' => 'log_process_status', 'data' => json_encode(["status" => true, "time" => time()])]);
|
||||||
|
$logProcessStatus = \app\models\SyncUrl::findOne(['key_config' => 'log_process_status']);
|
||||||
|
} else {
|
||||||
|
$processStatus = json_decode($logProcessStatus->data, true);
|
||||||
|
if ($processStatus['status']) {
|
||||||
|
if (time() - $processStatus['time'] < 60 * 3) {
|
||||||
|
if (Yii::$app->params['autoSyncLog'])
|
||||||
|
file_put_contents("logs.txt", "CHECK LOGS PROCESSING\n", FILE_APPEND);
|
||||||
|
return ["data" => "check logs processing"];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$logProcessStatus->data = json_encode(["status" => true, "time" => time()]);
|
||||||
|
$logProcessStatus->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$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)
|
||||||
|
@ -534,53 +583,83 @@ class ApiController extends Controller {
|
||||||
])
|
])
|
||||||
]
|
]
|
||||||
])), true);
|
])), true);
|
||||||
|
if (Yii::$app->params['autoSyncLog'])
|
||||||
|
file_put_contents("logs.txt", "START CHECK LOGS\n", FILE_APPEND);
|
||||||
if ($datas['status'] == 10000) {
|
if ($datas['status'] == 10000) {
|
||||||
$logs = $datas['data'];
|
$logs = $datas['data'];
|
||||||
$infomation = [];
|
$infomation = [];
|
||||||
|
$fault_information = [];
|
||||||
|
$count = 0;
|
||||||
foreach ($logs as $key => $value) {
|
foreach ($logs as $key => $value) {
|
||||||
|
$count++;
|
||||||
|
$start = $this->getCurrentTime();
|
||||||
|
$result = true;
|
||||||
if ($value['action'] == "insert_image")
|
if ($value['action'] == "insert_image")
|
||||||
$this->insertImage($value['images'][0], $value['id'], $value['files_name'][0]);
|
$result = $this->insertImage($value['images'][0], $value['id'], $value['files_name'][0]);
|
||||||
|
|
||||||
if ($value['action'] == "remove_image")
|
if ($value['action'] == "remove_image")
|
||||||
$this->removeImage($value['id'], $value['files_name'][0]);
|
$result = $this->removeImage($value['id'], $value['files_name'][0]);
|
||||||
|
|
||||||
if ($value['action'] == "insert_info")
|
if ($value['action'] == "insert_info")
|
||||||
$this->insertInfo($value);
|
$result = $this->insertInfo($value);
|
||||||
|
|
||||||
if ($value['action'] == "remove_info")
|
if ($value['action'] == "remove_info")
|
||||||
$this->removeInfo($value);
|
$result = $this->removeInfo($value);
|
||||||
|
|
||||||
|
if ($value['action'] == "insert_door_open")
|
||||||
|
$result = $this->insertSchedule($value);
|
||||||
|
|
||||||
|
if ($value['action'] == "remove_door_open")
|
||||||
|
$result = $this->removeSchedule($value);
|
||||||
|
|
||||||
if ($value['action'] == "reset_all") {
|
if ($value['action'] == "reset_all") {
|
||||||
\Yii::$app->db->createCommand()->truncateTable('capture_logs')->execute();
|
\Yii::$app->db->createCommand()->truncateTable('capture_logs')->execute();
|
||||||
\Yii::$app->db->createCommand()->truncateTable('list_management')->execute();
|
\Yii::$app->db->createCommand()->truncateTable('list_management')->execute();
|
||||||
array_map('unlink', glob("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/*.*"));
|
array_map('unlink', glob("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/*.*"));
|
||||||
}
|
}
|
||||||
|
$finish = $this->getCurrentTime();
|
||||||
|
$processTime = round(($finish - $start), 4);
|
||||||
|
if (Yii::$app->params['autoSyncLog'])
|
||||||
|
file_put_contents("logs.txt", $count . "\t" . $value['action'] . "\t" . $value['files_name'][0] . "\t" . ($result ? "true" : "false") . "\t" . $processTime . "\t" . $value['name'] . "\n", FILE_APPEND);
|
||||||
|
|
||||||
if (in_array($value['action'], ['insert_image', 'remove_image', 'insert_info', 'remove_info', 'reset_all'])) {
|
if (in_array($value['action'], ['insert_image', 'remove_image', 'insert_info', 'remove_info', 'reset_all', 'insert_door_open', 'remove_door_open'])) {
|
||||||
|
if ($result)
|
||||||
$infomation[] = [
|
$infomation[] = [
|
||||||
"obj_Log" => $value['obj_Log'],
|
"obj_Log" => $value['obj_Log'],
|
||||||
"action" => $value['action'],
|
"action" => $value['action'],
|
||||||
"idCamera" => $id_camera
|
"idCamera" => $id_camera
|
||||||
];
|
];
|
||||||
|
else
|
||||||
|
$fault_information[] = [
|
||||||
|
"obj_Log" => $value['obj_Log'],
|
||||||
|
"action" => $value['action'],
|
||||||
|
"idCamera" => $id_camera
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (count($infomation) > 0)
|
if (count($infomation) > 0 || count($fault_information) > 0) {
|
||||||
file_get_contents($ip . "/api/model/set_log_model", false, stream_context_create([
|
file_get_contents($ip . "/api/model/set_log_model", 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([
|
||||||
"infomation" => $infomation
|
"infomation" => $infomation,
|
||||||
|
"fault_information" => $fault_information
|
||||||
])
|
])
|
||||||
]
|
]
|
||||||
]));
|
]));
|
||||||
@file_get_contents("http://localhost:2305/update-feature?total=" . ListManagement::find()->count());
|
@file_get_contents("http://localhost:2305/update-feature?total=" . ListManagement::find()->count());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
$logProcessStatus->data = json_encode(["status" => false, "time" => time()]);
|
||||||
|
$logProcessStatus->save();
|
||||||
return ["data" => "check logs"];
|
return ["data" => "check logs"];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function insertImage($image, $staff_id, $files_name) {
|
public function insertImage($image, $staff_id, $files_name) {
|
||||||
$model = ListManagement::findOne(['staff_id' => $staff_id]);
|
$model = ListManagement::findOne(['staff_id' => $staff_id]);
|
||||||
|
if (!$model)
|
||||||
|
return false;
|
||||||
|
|
||||||
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
|
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
|
||||||
$targetPath = $RootFolder . "/face";
|
$targetPath = $RootFolder . "/face";
|
||||||
|
@ -614,8 +693,11 @@ class ApiController extends Controller {
|
||||||
],
|
],
|
||||||
"type" => "128"
|
"type" => "128"
|
||||||
]);
|
]);
|
||||||
if (!$features['status'])
|
if (!$features['status']) {
|
||||||
|
if (Yii::$app->params['autoSyncLog'])
|
||||||
|
file_put_contents("logs.txt", "[ERROR] extract feature " . json_encode($features) . "\n", FILE_APPEND);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
$features = json_decode($features['data'], true);
|
$features = json_decode($features['data'], true);
|
||||||
$ft[] = [
|
$ft[] = [
|
||||||
"serverKey" => $files_name,
|
"serverKey" => $files_name,
|
||||||
|
@ -626,24 +708,34 @@ class ApiController extends Controller {
|
||||||
];
|
];
|
||||||
$model->image = json_encode($ft);
|
$model->image = json_encode($ft);
|
||||||
$model->last_modified = time();
|
$model->last_modified = time();
|
||||||
$model->save();
|
return $model->save();
|
||||||
|
} else {
|
||||||
|
if (Yii::$app->params['autoSyncLog'])
|
||||||
|
file_put_contents("logs.txt", "[ERROR] image error" . $image . "\n", FILE_APPEND);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (Yii::$app->params['autoSyncLog'])
|
||||||
|
file_put_contents("logs.txt", "[ERROR] file exists" . $files_name . "\n", FILE_APPEND);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function removeImage($staff_id, $files_name) {
|
public function removeImage($staff_id, $files_name) {
|
||||||
$model = ListManagement::findOne(['staff_id' => $staff_id]);
|
$model = ListManagement::findOne(['staff_id' => $staff_id]);
|
||||||
|
if (!$model)
|
||||||
|
return false;
|
||||||
$images = json_decode($model->image, true);
|
$images = json_decode($model->image, true);
|
||||||
$ft = [];
|
$ft = [];
|
||||||
foreach ($images as $key => $value) {
|
foreach ($images as $key => $value) {
|
||||||
if ($value['serverKey'] !== $files_name)
|
if (isset($value['serverKey']) && $value['serverKey'] !== $files_name)
|
||||||
$ft[] = $value;
|
$ft[] = $value;
|
||||||
else
|
else
|
||||||
unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value['url']);
|
@unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value['url']);
|
||||||
}
|
}
|
||||||
$model->image = json_encode($ft);
|
$model->image = json_encode($ft);
|
||||||
$model->last_modified = time();
|
$model->last_modified = time();
|
||||||
$model->save();
|
return $model->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function insertInfo($data) {
|
public function insertInfo($data) {
|
||||||
|
@ -670,6 +762,7 @@ class ApiController extends Controller {
|
||||||
'abbreviated_name' => $data['abbreviated_name'],
|
'abbreviated_name' => $data['abbreviated_name'],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function removeInfo($data) {
|
public function removeInfo($data) {
|
||||||
|
@ -677,11 +770,11 @@ class ApiController extends Controller {
|
||||||
if ($model) {
|
if ($model) {
|
||||||
$images = json_decode($model->image, true);
|
$images = json_decode($model->image, true);
|
||||||
foreach ($images as $k => $v) {
|
foreach ($images as $k => $v) {
|
||||||
unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $v['url']);
|
@unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $v['url']);
|
||||||
}
|
}
|
||||||
$model->delete();
|
$model->delete();
|
||||||
}
|
}
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function resizeImg($img, $fileTarget) {
|
public function resizeImg($img, $fileTarget) {
|
||||||
|
@ -701,4 +794,92 @@ class ApiController extends Controller {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function insertSchedule($data) {
|
||||||
|
$model = new Schedule();
|
||||||
|
$info = ListManagement::findOne(['staff_id' => $data['id']]);
|
||||||
|
$schedule = Schedule::findOne(['staff_id' => $info->id, 'id_door_calendar' => $data['id_door_calendar']]);
|
||||||
|
if ($schedule) {
|
||||||
|
$schedule->from_time = $data['time_in'];
|
||||||
|
$schedule->to_time = $data['time_out'];
|
||||||
|
$schedule->from_date = $this->formatDateSchedule($data['day_in']);
|
||||||
|
$schedule->to_date = $this->formatDateSchedule($data['day_out']);
|
||||||
|
$schedule->date_of_week = $this->formatDayOfWeekSchedule($data['day_of_week']);
|
||||||
|
return $schedule->save();
|
||||||
|
} else {
|
||||||
|
return $model->create([
|
||||||
|
'staff_id' => $info->id,
|
||||||
|
'from_time' => $data['time_in'],
|
||||||
|
'to_time' => $data['time_out'],
|
||||||
|
'from_date' => $this->formatDateSchedule($data['day_in']),
|
||||||
|
'to_date' => $this->formatDateSchedule($data['day_out']),
|
||||||
|
'date_of_week' => $this->formatDayOfWeekSchedule($data['day_of_week']),
|
||||||
|
'id_door_calendar' => $data['id_door_calendar']
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeSchedule($data) {
|
||||||
|
$info = ListManagement::findOne(['staff_id' => $data['id']]);
|
||||||
|
if ($info) {
|
||||||
|
$schedule = \app\models\Schedule::findOne([
|
||||||
|
'id_door_calendar' => $data['id_door_calendar'],
|
||||||
|
'staff_id' => $info->id
|
||||||
|
]);
|
||||||
|
if ($schedule)
|
||||||
|
$schedule->delete();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function formatDateSchedule($date) {
|
||||||
|
$temp = explode(" ", $date);
|
||||||
|
$parse = explode("-", $temp[0]);
|
||||||
|
return $parse[2] . "/" . $parse[1] . "/" . $parse[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function formatDayOfWeekSchedule($dayOfWeek) {
|
||||||
|
$days = [];
|
||||||
|
$temp = explode("|", $dayOfWeek);
|
||||||
|
foreach ($temp as $key => $value) {
|
||||||
|
if ($value != "")
|
||||||
|
$days[] = intval($value) + 2;
|
||||||
|
}
|
||||||
|
return implode(",", $days);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionCheckOpenDoor() {
|
||||||
|
if (Yii::$app->request->post()) {
|
||||||
|
$post = Yii::$app->request->bodyParams;
|
||||||
|
$info = ListManagement::findOne(["staff_id" => $post["object_id"]]);
|
||||||
|
$timeGet = date_format(date_create_from_format('Y-m-d H:i:s', $post['timeget']), 'U');
|
||||||
|
$openDoor = 0;
|
||||||
|
if ($info) {
|
||||||
|
$schedules = Schedule::find()->andWhere(["staff_id" => $info->id])->all();
|
||||||
|
foreach ($schedules as $key => $value) {
|
||||||
|
$fromDate = date_format(date_create_from_format('H:i:s d/m/Y', "00:00:00 " . $value->from_date), 'U');
|
||||||
|
$toDate = date_format(date_create_from_format('H:i:s d/m/Y', "23:59:59 " . $value->to_date), 'U');
|
||||||
|
if ($timeGet > $fromDate && $timeGet < $toDate) {
|
||||||
|
$dateOfWeek = explode(",", $value->date_of_week);
|
||||||
|
$weekDay = intval(date("w", $timeGet)) + 1;
|
||||||
|
if ($weekDay == 1)
|
||||||
|
$weekDay = 8;
|
||||||
|
if (in_array($weekDay, $dateOfWeek)) {
|
||||||
|
$fromTime = date_format(date_create_from_format('H:i:s d/m/Y', $value->from_time . ":00 " . date("d/m/Y", $timeGet)), 'U');
|
||||||
|
$toTime = date_format(date_create_from_format('H:i:s d/m/Y', $value->to_time . ":59 " . date("d/m/Y", $timeGet)), 'U');
|
||||||
|
if ($timeGet > $fromTime && $timeGet < $toTime)
|
||||||
|
$openDoor = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Yii::$app->response->format = "json";
|
||||||
|
return [
|
||||||
|
"status" => 10000,
|
||||||
|
"data" => [
|
||||||
|
"open_door" => $openDoor
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,4 +117,39 @@ class CaptureLogsController extends Controller {
|
||||||
throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN"));
|
throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function actionFaceComparison() {
|
||||||
|
if (Yii::$app->request->post()) {
|
||||||
|
$post = Yii::$app->request->post();
|
||||||
|
Yii::$app->response->format = "json";
|
||||||
|
$results = json_decode(file_get_contents("http://192.168.1.43:2305/compare", false, stream_context_create([
|
||||||
|
'http' => [
|
||||||
|
'header' => "Content-Type: application/json",
|
||||||
|
'method' => "POST",
|
||||||
|
'content' => json_encode([
|
||||||
|
"type" => "base64",
|
||||||
|
"img0" => base64_encode(file_get_contents("/var/www/html/BiFace_Server_Lite/web" . $post['face1'])),
|
||||||
|
"img1" => base64_encode(file_get_contents("/var/www/html/BiFace_Server_Lite/web" . $post['face2']))
|
||||||
|
])
|
||||||
|
]
|
||||||
|
])), true);
|
||||||
|
return [
|
||||||
|
"type1" => number_format($results['type1']['percent'] * 100, 2),
|
||||||
|
"type2" => number_format($results['type2']['percent'] * 100, 2)
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$this->view->title = Yii::t("app", "SO_SANH_MAT");
|
||||||
|
return $this->render('face-comparison', [
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionUploadFace() {
|
||||||
|
if (Yii::$app->request->post()) {
|
||||||
|
$post = Yii::$app->request->post();
|
||||||
|
$model = new \app\models\UploadForm();
|
||||||
|
$url = $model->UploadGlobal("image" . $post['imageIndex'], ["PNG", "JPG", "JPEG", "GIF"], "comparison");
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,6 +159,8 @@ class ConfigController extends Controller {
|
||||||
|
|
||||||
public function actionIndex() {
|
public function actionIndex() {
|
||||||
$this->view->title = Yii::t("app", "CAU_HINH_MAY_CHU");
|
$this->view->title = Yii::t("app", "CAU_HINH_MAY_CHU");
|
||||||
|
if (Yii::$app->params['type'] != "BiFace")
|
||||||
|
return $this->redirect(['cau-hinh-ip']);
|
||||||
$options = [
|
$options = [
|
||||||
'http' => [
|
'http' => [
|
||||||
'header' => "Content-Type: application/json",
|
'header' => "Content-Type: application/json",
|
||||||
|
@ -174,7 +176,8 @@ class ConfigController extends Controller {
|
||||||
}
|
}
|
||||||
return $this->render('index', [
|
return $this->render('index', [
|
||||||
"servermqtt" => $servermqtt === "" ? $ip . ":1883" : $servermqtt,
|
"servermqtt" => $servermqtt === "" ? $ip . ":1883" : $servermqtt,
|
||||||
"url" => isset($temp[2]) ? $temp[2] : $ip . ":5001"
|
"url" => isset($temp[2]) ? $temp[2] : $ip . ":5001",
|
||||||
|
"menu" => $this->renderPartial("menu", ["tab" => "server_config"])
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,6 +262,8 @@ class ConfigController extends Controller {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
$this->view->title = Yii::t("app", "CAU_HINH_NHAN_DIEN");
|
$this->view->title = Yii::t("app", "CAU_HINH_NHAN_DIEN");
|
||||||
|
if (Yii::$app->params['type'] != "BiFace")
|
||||||
|
return $this->redirect(['cau-hinh-ip']);
|
||||||
$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",
|
||||||
|
@ -290,7 +295,8 @@ class ConfigController extends Controller {
|
||||||
$config_json = json_decode($checkConfig['data'], true);
|
$config_json = json_decode($checkConfig['data'], true);
|
||||||
|
|
||||||
return $this->render('config', [
|
return $this->render('config', [
|
||||||
"config_json" => \app\widgets\ConfigTree::widget(['configLists' => $config_json, 'isRoot' => true, 'parent_id' => 'node', 'parent_key' => ''])
|
"config_json" => \app\widgets\ConfigTree::widget(['configLists' => $config_json, 'isRoot' => true, 'parent_id' => 'node', 'parent_key' => '']),
|
||||||
|
"menu" => $this->renderPartial("menu", ["tab" => "engine_config"])
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -307,6 +313,7 @@ class ConfigController extends Controller {
|
||||||
} catch (\Exception $exc) {
|
} catch (\Exception $exc) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
\app\models\SyncUrl::deleteAll(['key_config' => 'log_process_status']);
|
||||||
$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)
|
||||||
|
@ -421,6 +428,8 @@ class ConfigController extends Controller {
|
||||||
|
|
||||||
public function actionCauHinhThietBi() {
|
public function actionCauHinhThietBi() {
|
||||||
$this->view->title = Yii::t("app", "CAU_HINH_THIET_BI");
|
$this->view->title = Yii::t("app", "CAU_HINH_THIET_BI");
|
||||||
|
if (Yii::$app->params['type'] != "BiFace")
|
||||||
|
return $this->redirect(['cau-hinh-ip']);
|
||||||
|
|
||||||
$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' => [
|
||||||
|
@ -451,7 +460,8 @@ class ConfigController extends Controller {
|
||||||
}
|
}
|
||||||
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']),
|
||||||
|
"menu" => $this->renderPartial("menu", ["tab" => "device_config"])
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,4 +495,72 @@ class ConfigController extends Controller {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public $subnet = [
|
||||||
|
"0.0.0.0" => "/0",
|
||||||
|
"128.0.0.0" => "/1",
|
||||||
|
"192.0.0.0" => "/2",
|
||||||
|
"224.0.0.0" => "/3",
|
||||||
|
"240.0.0.0" => "/4",
|
||||||
|
"248.0.0.0" => "/5",
|
||||||
|
"252.0.0.0" => "/6",
|
||||||
|
"254.0.0.0" => "/7",
|
||||||
|
"255.0.0.0" => "/8",
|
||||||
|
"255.128.0.0" => "/9",
|
||||||
|
"255.192.0.0" => "/10",
|
||||||
|
"255.224.0.0" => "/11",
|
||||||
|
"255.240.0.0" => "/12",
|
||||||
|
"255.248.0.0" => "/13",
|
||||||
|
"255.252.0.0" => "/14",
|
||||||
|
"255.254.0.0" => "/15",
|
||||||
|
"255.255.0.0" => "/16",
|
||||||
|
"255.255.128.0" => "/17",
|
||||||
|
"255.255.192.0" => "/18",
|
||||||
|
"255.255.224.0" => "/19",
|
||||||
|
"255.255.240.0" => "/20",
|
||||||
|
"255.255.248.0" => "/21",
|
||||||
|
"255.255.252.0" => "/22",
|
||||||
|
"255.255.254.0" => "/23",
|
||||||
|
"255.255.255.0" => "/24",
|
||||||
|
"255.255.255.128" => "/25",
|
||||||
|
"255.255.255.192" => "/26",
|
||||||
|
"255.255.255.224" => "/27",
|
||||||
|
"255.255.255.240" => "/28",
|
||||||
|
"255.255.255.248" => "/29",
|
||||||
|
"255.255.255.252" => "/30",
|
||||||
|
"255.255.255.254" => "/31",
|
||||||
|
"255.255.255.255" => "/32"
|
||||||
|
];
|
||||||
|
|
||||||
|
public function actionCauHinhIp() {
|
||||||
|
if (Yii::$app->request->post()) {
|
||||||
|
Yii::$app->response->format = "json";
|
||||||
|
$post = Yii::$app->request->post();
|
||||||
|
if (!$post['dhcp'] && !isset($this->subnet[$post['subnet_mask']]))
|
||||||
|
return ["status" => false];
|
||||||
|
$post['subnet_mask'] = isset($this->subnet[$post['subnet_mask']]) ? $this->subnet[$post['subnet_mask']] : "";
|
||||||
|
$options = [
|
||||||
|
'http' => [
|
||||||
|
'header' => "Content-Type: application/json",
|
||||||
|
'method' => "POST",
|
||||||
|
'content' => json_encode($post),
|
||||||
|
]
|
||||||
|
];
|
||||||
|
json_decode(@file_get_contents("http://localhost:4004/SetIP", false, stream_context_create($options)), true);
|
||||||
|
return ["status" => true, "url" => "http://" . $post['device_ip']];
|
||||||
|
} else {
|
||||||
|
$this->view->title = Yii::t("app", "CAU_HINH_IP");
|
||||||
|
$options = [
|
||||||
|
'http' => [
|
||||||
|
'header' => "Content-Type: application/json",
|
||||||
|
'method' => "POST"
|
||||||
|
]
|
||||||
|
];
|
||||||
|
$network = json_decode(@file_get_contents("http://localhost:4004/Network", false, stream_context_create($options)), true);
|
||||||
|
return $this->render('ip', [
|
||||||
|
"menu" => $this->renderPartial("menu", ["tab" => "ip_config"]),
|
||||||
|
"network" => $network
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,6 +120,7 @@ class ControlLogsController extends Controller {
|
||||||
common::updateFeature([
|
common::updateFeature([
|
||||||
"cmd" => "update",
|
"cmd" => "update",
|
||||||
"id" => $listManagement->id,
|
"id" => $listManagement->id,
|
||||||
|
"object_id" => $listManagement->staff_id,
|
||||||
"name" => common::convert_vi_to_en($listManagement->name),
|
"name" => common::convert_vi_to_en($listManagement->name),
|
||||||
"features" => $listManagement->allFeatures
|
"features" => $listManagement->allFeatures
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -76,6 +76,10 @@ class ListManagementController extends Controller {
|
||||||
]);
|
]);
|
||||||
$updating = \app\models\SyncUrl::findOne(['key_config' => 'updating']);
|
$updating = \app\models\SyncUrl::findOne(['key_config' => 'updating']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$dataProvider->pagination->pageSize = 20;
|
||||||
|
if (Yii::$app->request->get("per-page"))
|
||||||
|
$dataProvider->pagination->pageSize = Yii::$app->request->get("per-page");
|
||||||
return $this->render('index', [
|
return $this->render('index', [
|
||||||
'searchModel' => $searchModel,
|
'searchModel' => $searchModel,
|
||||||
'dataProvider' => $dataProvider,
|
'dataProvider' => $dataProvider,
|
||||||
|
@ -94,7 +98,7 @@ class ListManagementController extends Controller {
|
||||||
Yii::$app->response->format = "json";
|
Yii::$app->response->format = "json";
|
||||||
if (Yii::$app->request->post()) {
|
if (Yii::$app->request->post()) {
|
||||||
$data = Yii::$app->request->post();
|
$data = Yii::$app->request->post();
|
||||||
$check = ListManagement::findOne(['code' => $data['code']]);
|
$check = ListManagement::findOne(['id' => $data['code']]);
|
||||||
if ($check)
|
if ($check)
|
||||||
return ["status" => false];
|
return ["status" => false];
|
||||||
$features = common::requestToEngine("/get-feature", [
|
$features = common::requestToEngine("/get-feature", [
|
||||||
|
@ -123,7 +127,7 @@ class ListManagementController extends Controller {
|
||||||
Yii::$app->response->format = "json";
|
Yii::$app->response->format = "json";
|
||||||
if (Yii::$app->request->post()) {
|
if (Yii::$app->request->post()) {
|
||||||
$data = Yii::$app->request->post();
|
$data = Yii::$app->request->post();
|
||||||
$listManagement = ListManagement::findOne(['code' => $data['code']]);
|
$listManagement = ListManagement::findOne(['id' => $data['code']]);
|
||||||
$url = CaptureLogs::findOne($data['id'])->image;
|
$url = CaptureLogs::findOne($data['id'])->image;
|
||||||
if ($listManagement) {
|
if ($listManagement) {
|
||||||
$images = json_decode($listManagement->image, true);
|
$images = json_decode($listManagement->image, true);
|
||||||
|
@ -171,6 +175,7 @@ class ListManagementController extends Controller {
|
||||||
common::updateFeature([
|
common::updateFeature([
|
||||||
"cmd" => "update",
|
"cmd" => "update",
|
||||||
"id" => $listManagement->id,
|
"id" => $listManagement->id,
|
||||||
|
"object_id" => $listManagement->staff_id,
|
||||||
"name" => common::convert_vi_to_en($listManagement->name),
|
"name" => common::convert_vi_to_en($listManagement->name),
|
||||||
"features" => $listManagement->allFeatures
|
"features" => $listManagement->allFeatures
|
||||||
]);
|
]);
|
||||||
|
@ -278,6 +283,7 @@ class ListManagementController extends Controller {
|
||||||
common::updateFeature([
|
common::updateFeature([
|
||||||
"cmd" => "update",
|
"cmd" => "update",
|
||||||
"id" => $model->id,
|
"id" => $model->id,
|
||||||
|
"object_id" => $model->staff_id,
|
||||||
"name" => common::convert_vi_to_en($model->name),
|
"name" => common::convert_vi_to_en($model->name),
|
||||||
"features" => $model->allFeatures
|
"features" => $model->allFeatures
|
||||||
]);
|
]);
|
||||||
|
@ -296,6 +302,7 @@ class ListManagementController extends Controller {
|
||||||
common::updateFeature([
|
common::updateFeature([
|
||||||
"cmd" => "delete",
|
"cmd" => "delete",
|
||||||
"id" => $model->id,
|
"id" => $model->id,
|
||||||
|
"object_id" => $model->staff_id,
|
||||||
"name" => common::convert_vi_to_en($model->name),
|
"name" => common::convert_vi_to_en($model->name),
|
||||||
"features" => []
|
"features" => []
|
||||||
]);
|
]);
|
||||||
|
@ -322,6 +329,7 @@ class ListManagementController extends Controller {
|
||||||
common::updateFeature([
|
common::updateFeature([
|
||||||
"cmd" => "update",
|
"cmd" => "update",
|
||||||
"id" => $model->id,
|
"id" => $model->id,
|
||||||
|
"object_id" => $model->staff_id,
|
||||||
"name" => common::convert_vi_to_en($model->name),
|
"name" => common::convert_vi_to_en($model->name),
|
||||||
"features" => $model->allFeatures
|
"features" => $model->allFeatures
|
||||||
]);
|
]);
|
||||||
|
@ -352,6 +360,7 @@ class ListManagementController extends Controller {
|
||||||
common::updateFeature([
|
common::updateFeature([
|
||||||
"cmd" => "delete",
|
"cmd" => "delete",
|
||||||
"id" => $staff->id,
|
"id" => $staff->id,
|
||||||
|
"object_id" => $staff->staff_id,
|
||||||
"name" => common::convert_vi_to_en($staff->name),
|
"name" => common::convert_vi_to_en($staff->name),
|
||||||
"features" => []
|
"features" => []
|
||||||
]);
|
]);
|
||||||
|
@ -445,13 +454,15 @@ class ListManagementController extends Controller {
|
||||||
foreach ($datas['data'] as $key => $value) {
|
foreach ($datas['data'] as $key => $value) {
|
||||||
$filters[$value['id']] = $value['code'] . " - " . $value['name'] . " - " . $value['department'];
|
$filters[$value['id']] = $value['code'] . " - " . $value['name'] . " - " . $value['department'];
|
||||||
}
|
}
|
||||||
|
$deviceDatas = ListManagement::getAllID();
|
||||||
Yii::$app->response->format = "json";
|
Yii::$app->response->format = "json";
|
||||||
return [
|
return [
|
||||||
"title" => "<i class='fa fa-download'></i> " . Yii::t("app", "DONG_BO_TU_MAY_CHU"),
|
"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,
|
||||||
"allID" => ListManagement::getAllID()
|
"personImage" => $deviceDatas["imgCountArr"],
|
||||||
|
"allID" => $deviceDatas["idArr"]
|
||||||
])
|
])
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -555,13 +566,14 @@ class ListManagementController extends Controller {
|
||||||
$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),
|
"object_id" => $model->staff_id,
|
||||||
// "features" => $model->allFeatures
|
"name" => common::convert_vi_to_en($model->name),
|
||||||
// ]);
|
"features" => $model->allFeatures
|
||||||
|
]);
|
||||||
} else {
|
} else {
|
||||||
if (isset($data['images'])) {
|
if (isset($data['images'])) {
|
||||||
$extractFeature = $this->extractFeature($data['images'], $data['files_name'], $data['id']);
|
$extractFeature = $this->extractFeature($data['images'], $data['files_name'], $data['id']);
|
||||||
|
@ -587,13 +599,14 @@ 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),
|
"object_id" => $model->staff_id,
|
||||||
// "features" => $model->allFeatures
|
"name" => common::convert_vi_to_en($model->name),
|
||||||
// ]);
|
"features" => $model->allFeatures
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
$totalFinish = $this->getCurrentTime();
|
$totalFinish = $this->getCurrentTime();
|
||||||
$processTime["total"] = round(($totalFinish - $totalStart), 4);
|
$processTime["total"] = round(($totalFinish - $totalStart), 4);
|
||||||
|
@ -647,6 +660,7 @@ class ListManagementController extends Controller {
|
||||||
common::updateFeature([
|
common::updateFeature([
|
||||||
"cmd" => "update",
|
"cmd" => "update",
|
||||||
"id" => $model->id,
|
"id" => $model->id,
|
||||||
|
"object_id" => $model->staff_id,
|
||||||
"name" => common::convert_vi_to_en($model->name),
|
"name" => common::convert_vi_to_en($model->name),
|
||||||
"features" => $model->allFeatures
|
"features" => $model->allFeatures
|
||||||
]);
|
]);
|
||||||
|
@ -667,6 +681,7 @@ class ListManagementController extends Controller {
|
||||||
common::updateFeature([
|
common::updateFeature([
|
||||||
"cmd" => "create",
|
"cmd" => "create",
|
||||||
"id" => $model->id,
|
"id" => $model->id,
|
||||||
|
"object_id" => $model->staff_id,
|
||||||
"name" => common::convert_vi_to_en($model->name),
|
"name" => common::convert_vi_to_en($model->name),
|
||||||
"features" => $model->allFeatures
|
"features" => $model->allFeatures
|
||||||
]);
|
]);
|
||||||
|
@ -687,7 +702,7 @@ class ListManagementController extends Controller {
|
||||||
public function actionChooseStaff() {
|
public function actionChooseStaff() {
|
||||||
if (Yii::$app->request->post()) {
|
if (Yii::$app->request->post()) {
|
||||||
$post = Yii::$app->request->post();
|
$post = Yii::$app->request->post();
|
||||||
$staff = ListManagement::findOne(['code' => $post['code']]);
|
$staff = ListManagement::findOne(['id' => $post['code']]);
|
||||||
Yii::$app->response->format = "json";
|
Yii::$app->response->format = "json";
|
||||||
return [
|
return [
|
||||||
"name" => $staff->name,
|
"name" => $staff->name,
|
||||||
|
@ -806,4 +821,110 @@ class ListManagementController extends Controller {
|
||||||
return file_get_contents("http://minio1.beetai.com/biface-school/origin/385/454_20201126101221879048.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20201230%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20201230T081350Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=df7586a01bb128c0585edd87d1024b1ddb33483fd335e81238103fd2467b4772");
|
return file_get_contents("http://minio1.beetai.com/biface-school/origin/385/454_20201126101221879048.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20201230%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20201230T081350Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=df7586a01bb128c0585edd87d1024b1ddb33483fd335e81238103fd2467b4772");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function actionSchedule() {
|
||||||
|
Yii::$app->response->format = "json";
|
||||||
|
if (Yii::$app->request->post()) {
|
||||||
|
$post = Yii::$app->request->post();
|
||||||
|
$model = new \app\models\Schedule();
|
||||||
|
$datas = [];
|
||||||
|
foreach ($post['lists'] as $key => $value) {
|
||||||
|
$datas[] = [$value, $post['fromTime'], $post['toTime'], $post['fromDate'], $post['toDate'], implode(",", $post['dateOfWeek'])];
|
||||||
|
}
|
||||||
|
$model->multiCreate($datas);
|
||||||
|
return ["status" => true];
|
||||||
|
} else {
|
||||||
|
return [
|
||||||
|
"title" => Yii::t("app", "GAN_LICH_TRINH"),
|
||||||
|
"form" => $this->renderPartial("schedule", ["type" => "create"])
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionEditSchedule($id) {
|
||||||
|
Yii::$app->response->format = "json";
|
||||||
|
$model = \app\models\Schedule::findOne($id);
|
||||||
|
if (Yii::$app->request->post()) {
|
||||||
|
$post = Yii::$app->request->post();
|
||||||
|
$dateOfWeek = implode(",", $post['dateOfWeek']);
|
||||||
|
if ($post['editAll'] == "true" && isset($post['lists'])) {
|
||||||
|
foreach ($post['lists'] as $key => $value) {
|
||||||
|
$schedule = \app\models\Schedule::findOne([
|
||||||
|
'from_time' => $model->from_time,
|
||||||
|
'to_time' => $model->to_time,
|
||||||
|
'from_date' => $model->from_date,
|
||||||
|
'to_date' => $model->to_date,
|
||||||
|
'date_of_week' => $model->date_of_week,
|
||||||
|
'staff_id' => $value
|
||||||
|
]);
|
||||||
|
if ($schedule) {
|
||||||
|
$schedule->from_time = $post['fromTime'];
|
||||||
|
$schedule->to_time = $post['toTime'];
|
||||||
|
$schedule->from_date = $post['fromDate'];
|
||||||
|
$schedule->to_date = $post['toDate'];
|
||||||
|
$schedule->date_of_week = $dateOfWeek;
|
||||||
|
$schedule->save();
|
||||||
|
} else {
|
||||||
|
$modelSchedule = new \app\models\Schedule();
|
||||||
|
$modelSchedule->create([
|
||||||
|
'staff_id' => $value,
|
||||||
|
'from_time' => $post['fromTime'],
|
||||||
|
'to_time' => $post['toTime'],
|
||||||
|
'from_date' => $post['fromDate'],
|
||||||
|
'to_date' => $post['toDate'],
|
||||||
|
'date_of_week' => $dateOfWeek
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$model->from_time = $post['fromTime'];
|
||||||
|
$model->to_time = $post['toTime'];
|
||||||
|
$model->from_date = $post['fromDate'];
|
||||||
|
$model->to_date = $post['toDate'];
|
||||||
|
$model->date_of_week = $dateOfWeek;
|
||||||
|
$model->save();
|
||||||
|
}
|
||||||
|
return ["status" => true];
|
||||||
|
} else {
|
||||||
|
return [
|
||||||
|
"title" => Yii::t("app", "SUA_LICH_TRINH"),
|
||||||
|
"form" => $this->renderPartial("schedule", [
|
||||||
|
"type" => "edit",
|
||||||
|
"model" => $model
|
||||||
|
])
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionDeleteSchedule($id) {
|
||||||
|
Yii::$app->response->format = "json";
|
||||||
|
$model = \app\models\Schedule::findOne($id);
|
||||||
|
if (Yii::$app->request->post()) {
|
||||||
|
$post = Yii::$app->request->post();
|
||||||
|
if ($post['editAll'] == "true" && isset($post['lists'])) {
|
||||||
|
foreach ($post['lists'] as $key => $value) {
|
||||||
|
$schedule = \app\models\Schedule::findOne([
|
||||||
|
'from_time' => $model->from_time,
|
||||||
|
'to_time' => $model->to_time,
|
||||||
|
'from_date' => $model->from_date,
|
||||||
|
'to_date' => $model->to_date,
|
||||||
|
'date_of_week' => $model->date_of_week,
|
||||||
|
'staff_id' => $value
|
||||||
|
]);
|
||||||
|
if ($schedule)
|
||||||
|
$schedule->delete();
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
$model->delete();
|
||||||
|
|
||||||
|
return ["status" => true];
|
||||||
|
} else {
|
||||||
|
return [
|
||||||
|
"title" => Yii::t("app", "XOA_LICH_TRINH"),
|
||||||
|
"form" => $this->renderPartial("schedule-delete", [
|
||||||
|
"model" => $model
|
||||||
|
])
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,24 @@ class ListManagementGrid {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function layout($default = 20, $hiddenText = false) {
|
||||||
|
$pageSize = [10, 20, 50, 100];
|
||||||
|
$options = [];
|
||||||
|
foreach ($pageSize as $key => $value) {
|
||||||
|
$selected = "";
|
||||||
|
if (Yii::$app->request->get("per-page") && Yii::$app->request->get("per-page") == $value)
|
||||||
|
$selected = "selected";
|
||||||
|
if (!Yii::$app->request->get("per-page") && $value == $default)
|
||||||
|
$selected = "selected";
|
||||||
|
$options[] = "<option value='" . $value . "' {$selected}>" . $value . "</options>";
|
||||||
|
}
|
||||||
|
$select = "<select style='width:80px;' onchange='common.changePerPage(this);'>" . implode("", $options) . "</select>";
|
||||||
|
$text = "";
|
||||||
|
if (!$hiddenText)
|
||||||
|
$text = "Hiển thị ";
|
||||||
|
return "{items}<div class='row'><div class='col-md-6'>{summary}</div><div class='col-md-6'><div class='row'><div class='col-md-9 text-right'>{pager}</div><div class='col-md-3'>" . $text . $select . "</div></div></div></div>";
|
||||||
|
}
|
||||||
|
|
||||||
public static function getLayout() {
|
public static function getLayout() {
|
||||||
return "{items}<div class='row'><div class='col-md-4'>{summary}</div><div class='col-md-8 text-right'>{pager}</div></div>";
|
return "{items}<div class='row'><div class='col-md-4'>{summary}</div><div class='col-md-8 text-right'>{pager}</div></div>";
|
||||||
}
|
}
|
||||||
|
@ -86,4 +104,25 @@ class ListManagementGrid {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function schedule() {
|
||||||
|
return function($model) {
|
||||||
|
$schedules = $model->schedule;
|
||||||
|
$html = "<ul style='padding-left:10px;'>";
|
||||||
|
foreach ($schedules as $key => $value) {
|
||||||
|
$btnEdit = "<i class='fa fa-edit text-green' onclick='formEditSchedule(this);' data-href='" . Url::to(['/list-management/edit-schedule', 'id' => $value->id]) . "'></i>";
|
||||||
|
$btnDelete = "<i class='fa fa-remove text-red' onclick='formDeleteSchedule(this);' data-href='" . Url::to(['/list-management/delete-schedule', 'id' => $value->id]) . "'></i>";
|
||||||
|
$btn = "<span class='btn-schedule'>" . $btnEdit . " " . $btnDelete . "</span>";
|
||||||
|
$html .= "<li class='schedule-item'>[" . $value->from_time . "-" . $value->to_time . "] " . $value->from_date . " - " . $value->to_date . " [" . $value->date_of_week . "] " . $btn . "</li>";
|
||||||
|
}
|
||||||
|
$html .= "</ul>";
|
||||||
|
return $html;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function check() {
|
||||||
|
return function($model) {
|
||||||
|
return "<input type='checkbox' value='' name='' onclick='choose(this);'>";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,11 @@ return [
|
||||||
"CAU_HINH_THIET_BI" => "Device Configuration",
|
"CAU_HINH_THIET_BI" => "Device Configuration",
|
||||||
"CAU_HINH_MAY_CHU" => "Server Configuration",
|
"CAU_HINH_MAY_CHU" => "Server Configuration",
|
||||||
"CAU_HINH_NHAN_DIEN" => "Recognition Configuration",
|
"CAU_HINH_NHAN_DIEN" => "Recognition Configuration",
|
||||||
|
"CAU_HINH_IP" => "IP Configuration",
|
||||||
"DEVICE_CONFIG" => "",
|
"DEVICE_CONFIG" => "",
|
||||||
"SERVER_CONFIG" => "",
|
"SERVER_CONFIG" => "",
|
||||||
"ENGINE_CONFIG" => "",
|
"ENGINE_CONFIG" => "",
|
||||||
|
"IP_CONFIG" => "",
|
||||||
"SERVER_MQTT" => "server_mqtt",
|
"SERVER_MQTT" => "server_mqtt",
|
||||||
"URL" => "url",
|
"URL" => "url",
|
||||||
"LUU_LAI" => "Save",
|
"LUU_LAI" => "Save",
|
||||||
|
@ -57,7 +59,7 @@ return [
|
||||||
"TIM_KIEM_DU_LIEU" => "Search the data",
|
"TIM_KIEM_DU_LIEU" => "Search the data",
|
||||||
"TAT_CA" => "All",
|
"TAT_CA" => "All",
|
||||||
"TIM_KIEM" => "Search",
|
"TIM_KIEM" => "Search",
|
||||||
"XOA_NHIEU_DU_LIEU" => "Delete multiple data",
|
"XOA_NHIEU_DU_LIEU" => "Choose multiple data",
|
||||||
"CHON_TOAN_BO_TRANG" => "Select all data",
|
"CHON_TOAN_BO_TRANG" => "Select all data",
|
||||||
"BO_CHON" => "Unselect",
|
"BO_CHON" => "Unselect",
|
||||||
"XAC_NHAN_XOA" => "Deletion Confirm",
|
"XAC_NHAN_XOA" => "Deletion Confirm",
|
||||||
|
@ -136,5 +138,27 @@ return [
|
||||||
"MAT_KHAU" => "Password",
|
"MAT_KHAU" => "Password",
|
||||||
"RESET_THIET_BI_LOI" => "Error connecting to the server. Please check your internet connection and try again.",
|
"RESET_THIET_BI_LOI" => "Error connecting to the server. Please check your internet connection and try again.",
|
||||||
"THU_LAI" => "Try again",
|
"THU_LAI" => "Try again",
|
||||||
"TEN_DANG_NHAP_HOAC_MAT_KHAU_KHONG_DUNG" => "Incorrect username or password."
|
"TEN_DANG_NHAP_HOAC_MAT_KHAU_KHONG_DUNG" => "Incorrect username or password.",
|
||||||
|
"DOI_TUONG_CHUA_DU_ANH_MAU" => "Object does not have enough images",
|
||||||
|
"LICH_TRINH" => "Schedule",
|
||||||
|
"HAY_CHON_DOI_TUONG_DE_GAN_LICH_TRINH" => "Please select the object to assign the schedule",
|
||||||
|
"GAN_LICH_TRINH" => "Assign schedule",
|
||||||
|
"THOI_GIAN_VAO" => "Time in",
|
||||||
|
"THOI_GIAN_RA" => "Time out",
|
||||||
|
"NGAY_BAT_DAU" => "Start date",
|
||||||
|
"NGAY_KET_THUC" => "End date",
|
||||||
|
"NGAY_TRONG_TUAN" => "Day of the week",
|
||||||
|
"THU_HAI" => "Monday",
|
||||||
|
"THU_BA" => "Tuesday",
|
||||||
|
"THU_TU" => "Wednesday",
|
||||||
|
"THU_NAM" => "Thursday",
|
||||||
|
"THU_SAU" => "Friday",
|
||||||
|
"THU_BAY" => "Saturday",
|
||||||
|
"CHU_NHAT" => "Sunday",
|
||||||
|
"SUA_LICH_TRINH" => "Edit schedule",
|
||||||
|
"AP_DUNG_CHO_TAT_CA_DOI_TUONG_DA_CHON" => "Apply to all selected objects",
|
||||||
|
"XOA_LICH_TRINH" => "Delete schedule",
|
||||||
|
"BAN_CO_CHAC_CHAN_MUON_XOA_LICH_TRINH_NAY_KHONG" => "Are you sure you want to delete this schedule?",
|
||||||
|
"SO_SANH_MAT" => "Face comparison",
|
||||||
|
"BAN_CO_CHAC_CHAN_MUON_DOI_IP_KHONG" => "Are you sure you want to change the device's IP address?"
|
||||||
];
|
];
|
||||||
|
|
|
@ -11,9 +11,11 @@ return [
|
||||||
"CAU_HINH_THIET_BI" => "デバイス構成",
|
"CAU_HINH_THIET_BI" => "デバイス構成",
|
||||||
"CAU_HINH_MAY_CHU" => " サーバ構成",
|
"CAU_HINH_MAY_CHU" => " サーバ構成",
|
||||||
"CAU_HINH_NHAN_DIEN" => "認識構成",
|
"CAU_HINH_NHAN_DIEN" => "認識構成",
|
||||||
|
"CAU_HINH_IP" => "IP 構成",
|
||||||
"DEVICE_CONFIG" => "Device config",
|
"DEVICE_CONFIG" => "Device config",
|
||||||
"SERVER_CONFIG" => "Server config",
|
"SERVER_CONFIG" => "Server config",
|
||||||
"ENGINE_CONFIG" => "Engine config",
|
"ENGINE_CONFIG" => "Engine config",
|
||||||
|
"IP_CONFIG" => "IP config",
|
||||||
"SERVER_MQTT" => "server_mqtt",
|
"SERVER_MQTT" => "server_mqtt",
|
||||||
"URL" => "url",
|
"URL" => "url",
|
||||||
"LUU_LAI" => "保存する",
|
"LUU_LAI" => "保存する",
|
||||||
|
@ -57,7 +59,7 @@ return [
|
||||||
"TIM_KIEM_DU_LIEU" => "データ検索",
|
"TIM_KIEM_DU_LIEU" => "データ検索",
|
||||||
"TAT_CA" => "全部",
|
"TAT_CA" => "全部",
|
||||||
"TIM_KIEM" => "検索",
|
"TIM_KIEM" => "検索",
|
||||||
"XOA_NHIEU_DU_LIEU" => "大量のデータを削除する",
|
"XOA_NHIEU_DU_LIEU" => "複数のデータを選択",
|
||||||
"CHON_TOAN_BO_TRANG" => "ページ全体を選択",
|
"CHON_TOAN_BO_TRANG" => "ページ全体を選択",
|
||||||
"BO_CHON" => "取り消し",
|
"BO_CHON" => "取り消し",
|
||||||
"XAC_NHAN_XOA" => "削除の確認",
|
"XAC_NHAN_XOA" => "削除の確認",
|
||||||
|
@ -136,5 +138,27 @@ return [
|
||||||
"MAT_KHAU" => "パスワード",
|
"MAT_KHAU" => "パスワード",
|
||||||
"RESET_THIET_BI_LOI" => "サーバーへの接続中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください",
|
"RESET_THIET_BI_LOI" => "サーバーへの接続中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください",
|
||||||
"THU_LAI" => "再試行",
|
"THU_LAI" => "再試行",
|
||||||
"TEN_DANG_NHAP_HOAC_MAT_KHAU_KHONG_DUNG" => "ユーザーネームまたはパスワードが違います"
|
"TEN_DANG_NHAP_HOAC_MAT_KHAU_KHONG_DUNG" => "ユーザーネームまたはパスワードが違います",
|
||||||
|
"DOI_TUONG_CHUA_DU_ANH_MAU" => "オブジェクトに十分な画像がありません",
|
||||||
|
"LICH_TRINH" => "スケジュール",
|
||||||
|
"HAY_CHON_DOI_TUONG_DE_GAN_LICH_TRINH" => "スケジュールを割り当てるオブジェクトを選択してください",
|
||||||
|
"GAN_LICH_TRINH" => "スケジュールを割り当てる",
|
||||||
|
"THOI_GIAN_VAO" => "の時間",
|
||||||
|
"THOI_GIAN_RA" => "タイムアウト",
|
||||||
|
"NGAY_BAT_DAU" => "開始日",
|
||||||
|
"NGAY_KET_THUC" => "終了日",
|
||||||
|
"NGAY_TRONG_TUAN" => "曜日",
|
||||||
|
"THU_HAI" => "月曜日",
|
||||||
|
"THU_BA" => "火曜日",
|
||||||
|
"THU_TU" => "水曜日",
|
||||||
|
"THU_NAM" => "木曜日",
|
||||||
|
"THU_SAU" => "金曜日",
|
||||||
|
"THU_BAY" => "土曜日",
|
||||||
|
"CHU_NHAT" => "日曜日",
|
||||||
|
"SUA_LICH_TRINH" => "スケジュールを編集",
|
||||||
|
"AP_DUNG_CHO_TAT_CA_DOI_TUONG_DA_CHON" => "選択したすべてのオブジェクトに適用",
|
||||||
|
"XOA_LICH_TRINH" => "スケジュールを削除",
|
||||||
|
"BAN_CO_CHAC_CHAN_MUON_XOA_LICH_TRINH_NAY_KHONG" => "このスケジュールを削除してもよろしいですか?",
|
||||||
|
"SO_SANH_MAT" => "顔比較",
|
||||||
|
"BAN_CO_CHAC_CHAN_MUON_DOI_IP_KHONG" => "デバイスの IP アドレスを変更してもよろしいですか?"
|
||||||
];
|
];
|
||||||
|
|
|
@ -11,9 +11,11 @@ return [
|
||||||
"CAU_HINH_THIET_BI" => "Cấu hình thiết bị",
|
"CAU_HINH_THIET_BI" => "Cấu hình thiết bị",
|
||||||
"CAU_HINH_MAY_CHU" => "Cấu hình máy chủ",
|
"CAU_HINH_MAY_CHU" => "Cấu hình máy chủ",
|
||||||
"CAU_HINH_NHAN_DIEN" => "Cấu hình nhận diện",
|
"CAU_HINH_NHAN_DIEN" => "Cấu hình nhận diện",
|
||||||
|
"CAU_HINH_IP" => "Cấu hình IP",
|
||||||
"DEVICE_CONFIG" => "Device config",
|
"DEVICE_CONFIG" => "Device config",
|
||||||
"SERVER_CONFIG" => "Server config",
|
"SERVER_CONFIG" => "Server config",
|
||||||
"ENGINE_CONFIG" => "Engine config",
|
"ENGINE_CONFIG" => "Engine config",
|
||||||
|
"IP_CONFIG" => "IP config",
|
||||||
"SERVER_MQTT" => "server_mqtt",
|
"SERVER_MQTT" => "server_mqtt",
|
||||||
"URL" => "url",
|
"URL" => "url",
|
||||||
"LUU_LAI" => "Lưu lại",
|
"LUU_LAI" => "Lưu lại",
|
||||||
|
@ -57,7 +59,7 @@ return [
|
||||||
"TIM_KIEM_DU_LIEU" => "Tìm kiếm dữ liệu",
|
"TIM_KIEM_DU_LIEU" => "Tìm kiếm dữ liệu",
|
||||||
"TAT_CA" => "Tất cả",
|
"TAT_CA" => "Tất cả",
|
||||||
"TIM_KIEM" => "Tìm kiếm",
|
"TIM_KIEM" => "Tìm kiếm",
|
||||||
"XOA_NHIEU_DU_LIEU" => "Xóa nhiều dữ liệu",
|
"XOA_NHIEU_DU_LIEU" => "Chọn nhiều dữ liệu",
|
||||||
"CHON_TOAN_BO_TRANG" => "Chọn toàn bộ trang",
|
"CHON_TOAN_BO_TRANG" => "Chọn toàn bộ trang",
|
||||||
"BO_CHON" => "Bỏ chọn",
|
"BO_CHON" => "Bỏ chọn",
|
||||||
"XAC_NHAN_XOA" => "Xác nhận xóa",
|
"XAC_NHAN_XOA" => "Xác nhận xóa",
|
||||||
|
@ -136,5 +138,27 @@ return [
|
||||||
"MAT_KHAU" => "Mật khẩu",
|
"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.",
|
"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",
|
"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."
|
"TEN_DANG_NHAP_HOAC_MAT_KHAU_KHONG_DUNG" => "Tên đăng nhập hoặc mật khẩu không đúng.",
|
||||||
|
"DOI_TUONG_CHUA_DU_ANH_MAU" => "Đối tượng chưa đủ ảnh mẫu",
|
||||||
|
"LICH_TRINH" => "Lịch trình",
|
||||||
|
"HAY_CHON_DOI_TUONG_DE_GAN_LICH_TRINH" => "Hãy chọn đối tượng để gán lịch trình",
|
||||||
|
"GAN_LICH_TRINH" => "Gán lịch trình",
|
||||||
|
"THOI_GIAN_VAO" => "Thời gian vào",
|
||||||
|
"THOI_GIAN_RA" => "Thời gian ra",
|
||||||
|
"NGAY_BAT_DAU" => "Ngày bắt đầu",
|
||||||
|
"NGAY_KET_THUC" => "Ngày kết thúc",
|
||||||
|
"NGAY_TRONG_TUAN" => "Ngày trong tuần",
|
||||||
|
"THU_HAI" => "Thứ hai",
|
||||||
|
"THU_BA" => "Thứ ba",
|
||||||
|
"THU_TU" => "Thứ tư",
|
||||||
|
"THU_NAM" => "Thứ năm",
|
||||||
|
"THU_SAU" => "Thứ sáu",
|
||||||
|
"THU_BAY" => "Thứ bảy",
|
||||||
|
"CHU_NHAT" => "Chủ nhật",
|
||||||
|
"SUA_LICH_TRINH" => "Sửa lịch trình",
|
||||||
|
"AP_DUNG_CHO_TAT_CA_DOI_TUONG_DA_CHON" => "Áp dụng cho tất cả đối tượng đã chọn",
|
||||||
|
"XOA_LICH_TRINH" => "Xóa lịch trình",
|
||||||
|
"BAN_CO_CHAC_CHAN_MUON_XOA_LICH_TRINH_NAY_KHONG" => "Bạn có chắc chắn muốn xóa lịch trình này không?",
|
||||||
|
"SO_SANH_MAT" => "So sánh mặt",
|
||||||
|
"BAN_CO_CHAC_CHAN_MUON_DOI_IP_KHONG" => "Bạn có chắc chắn muốn thay đổi địa chỉ IP của thiết bị không?"
|
||||||
];
|
];
|
||||||
|
|
|
@ -48,7 +48,7 @@ class ListManagement extends \yii\db\ActiveRecord {
|
||||||
'id' => Yii::t("app", "ID"),
|
'id' => Yii::t("app", "ID"),
|
||||||
'code' => Yii::t("app", "ID"),
|
'code' => Yii::t("app", "ID"),
|
||||||
'type' => Yii::t("app", "LOAI"),
|
'type' => Yii::t("app", "LOAI"),
|
||||||
'name' => Yii::t("app", "TEN"),
|
'name' => Yii::t("app", "TEN_HIEN_THI"),
|
||||||
'image' => Yii::t("app", "HINH_ANH_DANG_KI"),
|
'image' => Yii::t("app", "HINH_ANH_DANG_KI"),
|
||||||
'gender' => Yii::t("app", "GIOI_TINH"),
|
'gender' => Yii::t("app", "GIOI_TINH"),
|
||||||
'birthday' => Yii::t("app", "NGAY_SINH"),
|
'birthday' => Yii::t("app", "NGAY_SINH"),
|
||||||
|
@ -56,7 +56,7 @@ class ListManagement extends \yii\db\ActiveRecord {
|
||||||
'address' => Yii::t("app", "DON_VI"),
|
'address' => Yii::t("app", "DON_VI"),
|
||||||
'time' => Yii::t("app", "THOI_GIAN_DANG_KI"),
|
'time' => Yii::t("app", "THOI_GIAN_DANG_KI"),
|
||||||
'last_modified' => 'Last Modified',
|
'last_modified' => 'Last Modified',
|
||||||
'abbreviated_name' => Yii::t("app", "TEN_HIEN_THI"),
|
'abbreviated_name' => Yii::t("app", "TEN"),
|
||||||
'staff_id' => Yii::t("app", "ID"),
|
'staff_id' => Yii::t("app", "ID"),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -110,19 +110,25 @@ class ListManagement extends \yii\db\ActiveRecord {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getAllID() {
|
public static function getAllID() {
|
||||||
$res = [];
|
$idArr = [];
|
||||||
|
$imgCountArr = [];
|
||||||
$ls = self::find()->all();
|
$ls = self::find()->all();
|
||||||
foreach ($ls as $key => $value) {
|
foreach ($ls as $key => $value) {
|
||||||
$res[] = $value->staff_id;
|
$idArr[] = $value->staff_id;
|
||||||
|
$images = json_decode($value->image, true);
|
||||||
|
$imgCountArr[$value->staff_id] = count($images);
|
||||||
}
|
}
|
||||||
return $res;
|
return [
|
||||||
|
"idArr" => $idArr,
|
||||||
|
"imgCountArr" => $imgCountArr
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function staffArray() {
|
public static function staffArray() {
|
||||||
$res = [];
|
$res = [];
|
||||||
$ls = self::find()->all();
|
$ls = self::find()->all();
|
||||||
foreach ($ls as $key => $value) {
|
foreach ($ls as $key => $value) {
|
||||||
$res[$value->code] = $value->code . " - " . $value->name;
|
$res[$value->id] = $value->code . " - " . $value->name;
|
||||||
}
|
}
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
@ -173,4 +179,8 @@ class ListManagement extends \yii\db\ActiveRecord {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getSchedule() {
|
||||||
|
return Schedule::find()->andWhere(['staff_id' => $this->id])->all();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
80
models/Schedule.php
Normal file
80
models/Schedule.php
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\models;
|
||||||
|
|
||||||
|
use Yii;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the model class for table "schedule".
|
||||||
|
*
|
||||||
|
* @property int $id
|
||||||
|
* @property string $staff_id
|
||||||
|
* @property string $from_time
|
||||||
|
* @property string $to_time
|
||||||
|
* @property string $from_date
|
||||||
|
* @property string $to_date
|
||||||
|
* @property string $date_of_week
|
||||||
|
* @property int $id_door_calendar
|
||||||
|
*/
|
||||||
|
class Schedule extends \yii\db\ActiveRecord {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static function tableName() {
|
||||||
|
return 'schedule';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function rules() {
|
||||||
|
return [
|
||||||
|
[['staff_id', 'from_time', 'to_time', 'from_date', 'to_date', 'date_of_week'], 'string'],
|
||||||
|
[['id_door_calendar'], 'integer'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function attributeLabels() {
|
||||||
|
return [
|
||||||
|
'id' => 'ID',
|
||||||
|
'staff_id' => 'Staff ID',
|
||||||
|
'from_time' => 'From Time',
|
||||||
|
'to_time' => 'To Time',
|
||||||
|
'from_date' => 'From Date',
|
||||||
|
'to_date' => 'To Date',
|
||||||
|
'date_of_week' => 'Date Of Week',
|
||||||
|
'id_door_calendar' => 'id_door_calendar'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function multiCreate($datas) {
|
||||||
|
$field = ['staff_id', 'from_time', 'to_time', 'from_date', 'to_date', 'date_of_week'];
|
||||||
|
static::getDb()->createCommand()->batchInsert($this->tableName(), $field, $datas)->execute();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create($data) {
|
||||||
|
$r = $this->load([
|
||||||
|
'staff_id' => strval($data['staff_id']),
|
||||||
|
'from_time' => $data['from_time'],
|
||||||
|
'to_time' => $data['to_time'],
|
||||||
|
'from_date' => $data['from_date'],
|
||||||
|
'to_date' => $data['to_date'],
|
||||||
|
'date_of_week' => $data['date_of_week'],
|
||||||
|
'id_door_calendar' => $data['id_door_calendar']
|
||||||
|
], '');
|
||||||
|
if ($r) {
|
||||||
|
try {
|
||||||
|
$this->save();
|
||||||
|
return $this->id;
|
||||||
|
} catch (\Exception $ex) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -41,6 +41,7 @@ use yii\widgets\ActiveForm;
|
||||||
<i class="fa fa-cogs"></i> <?php echo Yii::t("app", "CAU_HINH"); ?>
|
<i class="fa fa-cogs"></i> <?php echo Yii::t("app", "CAU_HINH"); ?>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<?php if (Yii::$app->params['type'] === "BiFace") { ?>
|
||||||
<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> <?php echo Yii::t("app", "RESET_THIET_BI"); ?>
|
<i class="fa fa-refresh"></i> <?php echo Yii::t("app", "RESET_THIET_BI"); ?>
|
||||||
|
@ -51,16 +52,17 @@ use yii\widgets\ActiveForm;
|
||||||
<i class="fa fa-list"></i> <?php echo Yii::t("app", "QUAN_LY_MAU"); ?>
|
<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="dropdown <?php if (in_array(Yii::$app->controller->id, ['capture-logs', 'control-logs'])) echo "active"; ?>">
|
||||||
<a href="<?php echo yii\helpers\Url::to(['/capture-logs']); ?>">
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
||||||
<i class="fa fa-camera"></i> <?php echo Yii::t("app", "LICH_SU_HE_THONG"); ?>
|
<i class="fa fa-list-alt"></i> <?php echo Yii::t("app", "LICH_SU_HE_THONG"); ?>
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="<?php if (Yii::$app->controller->id == "control-logs") echo "active"; ?>">
|
|
||||||
<a href="<?php echo yii\helpers\Url::to(['/control-logs']); ?>">
|
|
||||||
<i class="fa fa-database"></i> <?php echo Yii::t("app", "DANH_SACH_NHAN_DIEN"); ?>
|
|
||||||
</a>
|
</a>
|
||||||
|
<ul class="dropdown-menu" role="menu">
|
||||||
|
<li><a href="<?php echo \yii\helpers\Url::to(['/capture-logs']); ?>"><i class="fa fa-camera"></i> <?php echo Yii::t("app", "LICH_SU_HE_THONG"); ?></a></li>
|
||||||
|
<li><a href="<?php echo \yii\helpers\Url::to(['/control-logs']); ?>"><i class="fa fa-database"></i> <?php echo Yii::t("app", "DANH_SACH_NHAN_DIEN"); ?></a></li>
|
||||||
|
<li><a href="<?php echo \yii\helpers\Url::to(['/capture-logs/face-comparison']); ?>"><i class="fa fa-users"></i> <?php echo Yii::t("app", "SO_SANH_MAT"); ?></a></li>
|
||||||
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<?php } ?>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="navbar-custom-menu">
|
<div class="navbar-custom-menu">
|
||||||
|
|
27
views/capture-logs/face-comparison.tpl
Normal file
27
views/capture-logs/face-comparison.tpl
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{extends file=$smarty.current_dir|cat:'/../extends.tpl'}
|
||||||
|
{use class="yii\helpers\Url"}
|
||||||
|
{use class="app\assets\FaceComparisonAsset"}
|
||||||
|
{FaceComparisonAsset::register($this)|void}
|
||||||
|
{block name='content'}<br>
|
||||||
|
<input type="hidden" name="url_upload_face" value="{Url::to(['/capture-logs/upload-face'])}">
|
||||||
|
<input type="hidden" name="url_face_comparison" value="{Url::to(['/capture-logs/face-comparison'])}">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-3 col-md-push-2 text-center">
|
||||||
|
<img src="/images/user2-160x160.jpg" class="img-thumbnail" id="face1" style="width: 70%;cursor: pointer;" onclick="$('#image1').trigger('click');">
|
||||||
|
<div class="hidden">
|
||||||
|
<input type="file" name="image1" id="image1">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2 col-md-push-2 text-center">
|
||||||
|
<div style="padding-top: 100px;">
|
||||||
|
<b class="text-red" style="font-size: 40px;" id="percent">0.00%</b>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 col-md-push-2 text-center">
|
||||||
|
<img src="/images/user2-160x160.jpg" class="img-thumbnail" id="face2" style="width: 70%;cursor: pointer;" onclick="$('#image2').trigger('click');">
|
||||||
|
<div class="hidden">
|
||||||
|
<input type="file" name="image2" id="image2">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/block}
|
|
@ -98,7 +98,7 @@
|
||||||
<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'>
|
<div class='feature-img'>
|
||||||
<img src="" class="img-thumbnail" id="closest-img" style="width: 100px;height:100px;">
|
<img src="/images/user2-160x160.jpg" class="img-thumbnail" id="closest-img" style="width: 100px;height:100px;">
|
||||||
<br>
|
<br>
|
||||||
<i id="closest-name"></i>
|
<i id="closest-name"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -142,32 +142,8 @@
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<br>
|
<br>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-10">
|
||||||
<div class="mt-element-step">
|
{$menu}
|
||||||
<div class="row step-thin">
|
|
||||||
<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-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-thiet-bi'])}';">
|
|
||||||
{Yii::t("app", "CAU_HINH_THIET_BI")}
|
|
||||||
</div>
|
|
||||||
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "DEVICE_CONFIG")}</div>
|
|
||||||
</div>
|
|
||||||
<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-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config'])}';">
|
|
||||||
{Yii::t("app", "CAU_HINH_MAY_CHU")}
|
|
||||||
</div>
|
|
||||||
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "SERVER_CONFIG")}</div>
|
|
||||||
</div>
|
|
||||||
<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-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-nhan-dien'])}';">
|
|
||||||
{Yii::t("app", "CAU_HINH_NHAN_DIEN")}
|
|
||||||
</div>
|
|
||||||
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "ENGINE_CONFIG")}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
|
|
|
@ -16,32 +16,8 @@
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<br>
|
<br>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-10">
|
||||||
<div class="mt-element-step">
|
{$menu}
|
||||||
<div class="row step-thin">
|
|
||||||
<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-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-thiet-bi'])}';">
|
|
||||||
{Yii::t("app", "CAU_HINH_THIET_BI")}
|
|
||||||
</div>
|
|
||||||
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "DEVICE_CONFIG")}</div>
|
|
||||||
</div>
|
|
||||||
<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-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config'])}';">
|
|
||||||
{Yii::t("app", "CAU_HINH_MAY_CHU")}
|
|
||||||
</div>
|
|
||||||
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "SERVER_CONFIG")}</div>
|
|
||||||
</div>
|
|
||||||
<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-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-nhan-dien'])}';">
|
|
||||||
{Yii::t("app", "CAU_HINH_NHAN_DIEN")}
|
|
||||||
</div>
|
|
||||||
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "ENGINE_CONFIG")}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
|
|
|
@ -16,32 +16,8 @@
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<br>
|
<br>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-10">
|
||||||
<div class="mt-element-step">
|
{$menu}
|
||||||
<div class="row step-thin">
|
|
||||||
<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-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-thiet-bi'])}';">
|
|
||||||
{Yii::t("app", "CAU_HINH_THIET_BI")}
|
|
||||||
</div>
|
|
||||||
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "DEVICE_CONFIG")}</div>
|
|
||||||
</div>
|
|
||||||
<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-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config'])}';">
|
|
||||||
{Yii::t("app", "CAU_HINH_MAY_CHU")}
|
|
||||||
</div>
|
|
||||||
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "SERVER_CONFIG")}</div>
|
|
||||||
</div>
|
|
||||||
<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-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-nhan-dien'])}';">
|
|
||||||
{Yii::t("app", "CAU_HINH_NHAN_DIEN")}
|
|
||||||
</div>
|
|
||||||
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "ENGINE_CONFIG")}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
|
|
68
views/config/ip.tpl
Normal file
68
views/config/ip.tpl
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
{extends file=$smarty.current_dir|cat:'/../extends.tpl'}
|
||||||
|
{use class="yii\helpers\Url"}
|
||||||
|
{use class="yii\grid\GridView"}
|
||||||
|
{use class="app\assets\ConfigAsset"}
|
||||||
|
{ConfigAsset::register($this)|void}
|
||||||
|
{block name='content'}
|
||||||
|
<style>
|
||||||
|
.input-group-addon{
|
||||||
|
width: 120px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.input-group{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<br>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-10">
|
||||||
|
{$menu}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="form-group" id="dhcp">
|
||||||
|
<input type='checkbox' name='dhcp' id='dhcp_check' value="" {if $network.dhcp=="yes"}checked=""{/if}> DHCP
|
||||||
|
</div>
|
||||||
|
<div class="form-group" id="device_ip">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">{Yii::t("app", "IP Address")}</div>
|
||||||
|
<input type="input" class="form-control" name="device_ip" value="{$network.ip_address|default:""}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group" id="subnet_mask">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">{Yii::t("app", "Subnet Mask")}</div>
|
||||||
|
<input type="input" class="form-control" name="subnet_mask" value="{$network.subnet_mask|default:""}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group" id="gateway">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">{Yii::t("app", "Gateway")}</div>
|
||||||
|
<input type="input" class="form-control" name="gateway" value="{$network.gateway|default:""}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group" id="dns1">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">{Yii::t("app", "DNS1")}</div>
|
||||||
|
<input type="input" class="form-control" name="dns1" value="{$network.dns1|default:""}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group" id="dns2">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">{Yii::t("app", "DNS2")}</div>
|
||||||
|
<input type="input" class="form-control" name="dns2" value="{$network.dns2|default:""}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<button class="btn btn-primary" onclick="changeIP(this);" data-href="{Url::to(['/config/cau-hinh-ip'])}">
|
||||||
|
<i class="fa fa-floppy-o"></i> {Yii::t("app", "LUU_LAI")}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/block}
|
35
views/config/menu.tpl
Normal file
35
views/config/menu.tpl
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{use class="yii\helpers\Url"}
|
||||||
|
{if Yii::$app->params["type"]==="BiFace"}
|
||||||
|
<div class="mt-element-step">
|
||||||
|
<div class="row step-thin">
|
||||||
|
<div class="col-md-3 bg-grey mt-step-col {if $tab=="device_config"}active{/if}">
|
||||||
|
<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'])}';">
|
||||||
|
{Yii::t("app", "CAU_HINH_THIET_BI")}
|
||||||
|
</div>
|
||||||
|
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "DEVICE_CONFIG")}</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 bg-grey mt-step-col {if $tab=="server_config"}active{/if}">
|
||||||
|
<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'])}';">
|
||||||
|
{Yii::t("app", "CAU_HINH_MAY_CHU")}
|
||||||
|
</div>
|
||||||
|
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "SERVER_CONFIG")}</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 bg-grey mt-step-col {if $tab=="engine_config"}active{/if}">
|
||||||
|
<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'])}';">
|
||||||
|
{Yii::t("app", "CAU_HINH_NHAN_DIEN")}
|
||||||
|
</div>
|
||||||
|
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "ENGINE_CONFIG")}</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 bg-grey mt-step-col {if $tab=="ip_config"}active{/if}">
|
||||||
|
<div class="mt-step-number bg-white font-grey">4</div>
|
||||||
|
<div class="mt-step-title uppercase font-grey-cascade" style="cursor: pointer;" onclick="window.location = '{Url::to(['/config/cau-hinh-ip'])}';">
|
||||||
|
{Yii::t("app", "CAU_HINH_IP")}
|
||||||
|
</div>
|
||||||
|
<div class="mt-step-content font-grey-cascade">{Yii::t("app", "IP_CONFIG")}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
|
@ -2,9 +2,9 @@
|
||||||
<i class="fa fa-info-circle"></i> {Yii::t("app", "RESET_THIET_BI_LOI")}
|
<i class="fa fa-info-circle"></i> {Yii::t("app", "RESET_THIET_BI_LOI")}
|
||||||
</div>
|
</div>
|
||||||
<div class="text-left">
|
<div class="text-left">
|
||||||
<input type="checkbox" name="DeleteDatabase" checked="" style="width: inherit;"> {Yii::t("app", "XOA_DU_LIEU_LUU_TRU_TRONG_THIET_BI")}
|
<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;"> {Yii::t("app", "RESET_CAU_HINH_THIET_BI")}
|
<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'])}" id="reset-accept">
|
<button class="btn btn-danger" onclick="common.reset(this);" data-href="{yii\helpers\Url::to(['/config/reset'])}" id="reset-accept">
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
<input type="hidden" name="DA_THEM_HINH_ANH_MAU" value="{Yii::t("app", "DA_THEM_HINH_ANH_MAU")}">
|
<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="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")}">
|
<input type="hidden" name="ENGINE_KHONG_HOAT_DONG" value="{Yii::t("app", "ENGINE_KHONG_HOAT_DONG")}">
|
||||||
|
<input type="hidden" name="HAY_CHON_DOI_TUONG_DE_GAN_LICH_TRINH" value="{Yii::t("app", "HAY_CHON_DOI_TUONG_DE_GAN_LICH_TRINH")}">
|
||||||
|
<input type="hidden" name="BAN_CO_CHAC_CHAN_MUON_XOA_LICH_TRINH_NAY_KHONG" value="{Yii::t("app", "BAN_CO_CHAC_CHAN_MUON_XOA_LICH_TRINH_NAY_KHONG")}">
|
||||||
|
<input type="hidden" name="BAN_CO_CHAC_CHAN_MUON_DOI_IP_KHONG" value="{Yii::t("app", "BAN_CO_CHAC_CHAN_MUON_DOI_IP_KHONG")}">
|
||||||
|
|
||||||
<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;">
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
.row{
|
.row{
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
input{
|
{*input{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}*}
|
||||||
.table-striped > tbody > tr:nth-of-type(odd){
|
.table-striped > tbody > tr:nth-of-type(odd){
|
||||||
background-color: rgb(210, 210, 210);
|
background-color: rgb(210, 210, 210);
|
||||||
}
|
}
|
||||||
|
@ -21,13 +21,21 @@
|
||||||
.feature-img:hover .btn{
|
.feature-img:hover .btn{
|
||||||
visibility: visible !important;
|
visibility: visible !important;
|
||||||
}
|
}
|
||||||
.table > tbody > tr.delete-choose > td{
|
.btn-schedule{
|
||||||
background-color: red;
|
visibility: hidden;
|
||||||
color: #fff;
|
|
||||||
}
|
}
|
||||||
.select2-container {
|
.schedule-item:hover .btn-schedule{
|
||||||
|
visibility: visible !important;
|
||||||
|
}
|
||||||
|
.table > tbody > tr.delete-choose > td{
|
||||||
|
background-color: #F7D3D2;
|
||||||
|
}
|
||||||
|
#filters-face .select2-container {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
}
|
}
|
||||||
|
.pagination {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
#form-add-staff .select2-container--default .select2-selection--single, .select2-selection .select2-selection--single{
|
#form-add-staff .select2-container--default .select2-selection--single, .select2-selection .select2-selection--single{
|
||||||
border-color: green;
|
border-color: green;
|
||||||
}
|
}
|
||||||
|
@ -43,10 +51,10 @@
|
||||||
<input type="hidden" value="{Url::to(["/list-management/update-feature"])}" name="update_feature_url">
|
<input type="hidden" value="{Url::to(["/list-management/update-feature"])}" name="update_feature_url">
|
||||||
<input type="hidden" value="{Url::to(["/api/get-total-feature"])}" name="get_total_feature_url">
|
<input type="hidden" value="{Url::to(["/api/get-total-feature"])}" name="get_total_feature_url">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-10" style="max-height: 850px;overflow-y: auto;">
|
<div class="col-md-10" id="list-face" style="max-height: 850px;overflow-y: auto;">
|
||||||
{GridView::widget([
|
{GridView::widget([
|
||||||
'dataProvider' => $dataProvider,
|
'dataProvider' => $dataProvider,
|
||||||
'layout'=> \app\helpers\ListManagementGrid::getLayout(),
|
'layout'=> \app\helpers\ListManagementGrid::layout(20),
|
||||||
'tableOptions' => [
|
'tableOptions' => [
|
||||||
'class' => 'table table-striped table-bordered',
|
'class' => 'table table-striped table-bordered',
|
||||||
'style' => 'background:#fff;min-width:700px;'
|
'style' => 'background:#fff;min-width:700px;'
|
||||||
|
@ -58,6 +66,12 @@
|
||||||
'contentOptions' => ['class' => 'text-center'],
|
'contentOptions' => ['class' => 'text-center'],
|
||||||
'headerOptions' => ['class' => 'text-center']
|
'headerOptions' => ['class' => 'text-center']
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'contentOptions' => ['class' => 'text-center hidden checkbox-column'],
|
||||||
|
'headerOptions' => ['style' => 'width:3%', 'class' => 'hidden checkbox-column'],
|
||||||
|
'format' => "raw",
|
||||||
|
'value' => \app\helpers\ListManagementGrid::check()
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'attribute' => 'type',
|
'attribute' => 'type',
|
||||||
'contentOptions' => ['class' => 'text-center'],
|
'contentOptions' => ['class' => 'text-center'],
|
||||||
|
@ -84,10 +98,10 @@
|
||||||
'value' => \app\helpers\ListManagementGrid::image()
|
'value' => \app\helpers\ListManagementGrid::image()
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'attribute' => 'time',
|
'label' => Yii::t("app", "LICH_TRINH"),
|
||||||
'contentOptions' => ['class' => 'text-center'],
|
|
||||||
'headerOptions' => ['class' => 'text-center'],
|
'headerOptions' => ['class' => 'text-center'],
|
||||||
'value' => \app\helpers\ListManagementGrid::time()
|
'format' => "raw",
|
||||||
|
'value' => \app\helpers\ListManagementGrid::schedule()
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'attribute' => 'telephone',
|
'attribute' => 'telephone',
|
||||||
|
@ -158,6 +172,7 @@
|
||||||
<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'])}">{Yii::t("app", "XAC_NHAN_XOA")}</button>
|
<button class="btn btn-danger" onclick="batchDelete(this);" data-href="{Url::to(['/list-management/batch-delete'])}">{Yii::t("app", "XAC_NHAN_XOA")}</button>
|
||||||
|
<button class="btn btn-success" onclick="scheduleForm(this);" data-href="{Url::to(['/list-management/schedule'])}">{Yii::t("app", "LICH_TRINH")}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="row">
|
<div class="row" id="filters-face">
|
||||||
<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">
|
||||||
|
@ -15,22 +15,35 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-8 text-right">
|
||||||
|
<button class="btn btn-default btn-select" id="btnCheckLossImage" onclick="filtersLossImage(this);">
|
||||||
|
{Yii::t("app", "DOI_TUONG_CHUA_DU_ANH_MAU")}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="max-height: 750px;overflow-y: auto;">
|
<div style="max-height: 750px;overflow-y: auto;">
|
||||||
<table class="table table-bordered table-striped">
|
<table class="table table-bordered table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{Yii::t("app", "ID")}</th>
|
<th>{Yii::t("app", "ID")}</th>
|
||||||
<th>{Yii::t("app", "TEN")}</th>
|
|
||||||
<th>{Yii::t("app", "TEN_HIEN_THI")}</th>
|
<th>{Yii::t("app", "TEN_HIEN_THI")}</th>
|
||||||
|
<th>{Yii::t("app", "TEN")}</th>
|
||||||
<th>{Yii::t("app", "DON_VI")}</th>
|
<th>{Yii::t("app", "DON_VI")}</th>
|
||||||
<th>{Yii::t("app", "HINH_ANH_DANG_KI")}</th>
|
<th>{Yii::t("app", "HINH_ANH_DANG_KI")}</th>
|
||||||
<th>{Yii::t("app", "COMPANY_ID")}</th>
|
<th>{Yii::t("app", "COMPANY_ID")}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="sync-lists">
|
<tbody id="sync-lists">
|
||||||
|
{$totalDevice=0}
|
||||||
|
{$totalCloud=0}
|
||||||
{foreach from=$datas item=arr}
|
{foreach from=$datas item=arr}
|
||||||
<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)}">
|
{$totalImg=0}
|
||||||
|
{if isset($personImage[$arr.id])}
|
||||||
|
{$totalImg=$personImage[$arr.id]}
|
||||||
|
{/if}
|
||||||
|
{$totalDevice=$totalDevice+$totalImg}
|
||||||
|
{$totalCloud=$totalCloud+count($arr.images)}
|
||||||
|
<tr id="filters-{$arr.id}" onclick="choooseToSync(this);" style="cursor: pointer;" class="filters {if $totalImg!==count($arr.images)}loss-image{/if} {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.id)}" class="hidden">{json_encode($arr)}</div>
|
<div id="full-data-{trim($arr.id)}" class="hidden">{json_encode($arr)}</div>
|
||||||
{$arr.code}
|
{$arr.code}
|
||||||
|
@ -38,7 +51,11 @@
|
||||||
<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>
|
||||||
|
<b class="text-green">[{$totalImg}]</b>
|
||||||
|
<b class="text-red">[{count($arr.images)}]</b>
|
||||||
|
{$arr.name}
|
||||||
|
</td>
|
||||||
<td>{$arr.abbreviated_name}</td>
|
<td>{$arr.abbreviated_name}</td>
|
||||||
<td>{$arr.department}</td>
|
<td>{$arr.department}</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -56,6 +73,8 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<b class="text-green" id="totalDevice">[{$totalDevice}]</b>
|
||||||
|
<b class="text-red" id="totalCloud">[{$totalCloud}]</b>
|
||||||
<br>
|
<br>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-2">
|
<div class="col-md-2">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="row">
|
<div class="row" id="filters-face">
|
||||||
<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">
|
||||||
|
@ -21,8 +21,8 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{Yii::t("app", "ID")}<</th>
|
<th>{Yii::t("app", "ID")}<</th>
|
||||||
<th>{Yii::t("app", "TEN")}<</th>
|
|
||||||
<th>{Yii::t("app", "TEN_HIEN_THI")}</th>
|
<th>{Yii::t("app", "TEN_HIEN_THI")}</th>
|
||||||
|
<th>{Yii::t("app", "TEN")}<</th>
|
||||||
<th>{Yii::t("app", "GIOI_TINH")}</th>
|
<th>{Yii::t("app", "GIOI_TINH")}</th>
|
||||||
<th>{Yii::t("app", "HINH_ANH_DANG_KI")}</th>
|
<th>{Yii::t("app", "HINH_ANH_DANG_KI")}</th>
|
||||||
<th>{Yii::t("app", "NGAY_SINH")}</th>
|
<th>{Yii::t("app", "NGAY_SINH")}</th>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="row">
|
<div class="row" id="filters-face">
|
||||||
<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">
|
||||||
|
|
71
views/list-management/schedule-delete.tpl
Normal file
71
views/list-management/schedule-delete.tpl
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "THOI_GIAN_VAO")}</label>
|
||||||
|
<input type="text" value="{$model->from_time|default:"00:00"}" class="form-control" id="fromTime" disabled="" name="FromTime">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "THOI_GIAN_RA")}</label>
|
||||||
|
<input type="text" value="{$model->to_time|default:"23:59"}" class="form-control" id="toTime" disabled=" name="ToTime">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "NGAY_BAT_DAU")}</label>
|
||||||
|
<input type="text" value="{$model->from_date|default:date("d/m/Y")}" class="form-control" disabled=" id="fromDate" name="FromDate">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "NGAY_KET_THUC")}</label>
|
||||||
|
<input type="text" value="{$model->to_date|default:date("d/m/Y")}" class="form-control" disabled=" id="toDate" name="ToDate">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "NGAY_TRONG_TUAN")}</label>
|
||||||
|
{$dateOfWeek=["1","2","3","4","5","6","7","8"]}
|
||||||
|
{$dateOfWeek=explode(",",$model->date_of_week)}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-3">
|
||||||
|
{if in_array("2",$dateOfWeek)}<i class="fa fa-check text-green"></i>{else}<i class="fa fa-remove text-red"></i>{/if} {Yii::t("app", "THU_HAI")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
{if in_array("3",$dateOfWeek)}<i class="fa fa-check text-green"></i>{else}<i class="fa fa-remove text-red"></i>{/if} {Yii::t("app", "THU_BA")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
{if in_array("4",$dateOfWeek)}<i class="fa fa-check text-green"></i>{else}<i class="fa fa-remove text-red"></i>{/if} {Yii::t("app", "THU_TU")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
{if in_array("5",$dateOfWeek)}<i class="fa fa-check text-green"></i>{else}<i class="fa fa-remove text-red"></i>{/if} {Yii::t("app", "THU_NAM")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
{if in_array("6",$dateOfWeek)}<i class="fa fa-check text-green"></i>{else}<i class="fa fa-remove text-red"></i>{/if} {Yii::t("app", "THU_SAU")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
{if in_array("7",$dateOfWeek)}<i class="fa fa-check text-green"></i>{else}<i class="fa fa-remove text-red"></i>{/if} {Yii::t("app", "THU_BAY")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
{if in_array("8",$dateOfWeek)}<i class="fa fa-check text-green"></i>{else}<i class="fa fa-remove text-red"></i>{/if} {Yii::t("app", "CHU_NHAT")}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<input type='checkbox' value='1' name='editAll' checked=""> {Yii::t("app","AP_DUNG_CHO_TAT_CA_DOI_TUONG_DA_CHON")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-right">
|
||||||
|
<button class="btn btn-danger" onclick="deleteSchedule(this);" data-href="{yii\helpers\Url::to(["/list-management/delete-schedule","id"=>$model->id])}">
|
||||||
|
<i class="fa fa-remove"></i> {Yii::t("app","XOA_LICH_TRINH")}
|
||||||
|
</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>
|
80
views/list-management/schedule.tpl
Normal file
80
views/list-management/schedule.tpl
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "THOI_GIAN_VAO")}</label>
|
||||||
|
<input type="text" value="{$model->from_time|default:"00:00"}" class="form-control" id="fromTime" name="FromTime">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "THOI_GIAN_RA")}</label>
|
||||||
|
<input type="text" value="{$model->to_time|default:"23:59"}" class="form-control" id="toTime" name="ToTime">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "NGAY_BAT_DAU")}</label>
|
||||||
|
<input type="text" value="{$model->from_date|default:date("d/m/Y")}" class="form-control" id="fromDate" name="FromDate">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "NGAY_KET_THUC")}</label>
|
||||||
|
<input type="text" value="{$model->to_date|default:date("d/m/Y")}" class="form-control" id="toDate" name="ToDate">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label">{Yii::t("app", "NGAY_TRONG_TUAN")}</label>
|
||||||
|
{$dateOfWeek=["1","2","3","4","5","6","7","8"]}
|
||||||
|
{if $type=="edit"}
|
||||||
|
{$dateOfWeek=explode(",",$model->date_of_week)}
|
||||||
|
{/if}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type='checkbox' value='2' name="checkbox-date" {if in_array("2",$dateOfWeek)}checked=""{/if}> {Yii::t("app", "THU_HAI")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type='checkbox' value='3' name="checkbox-date" {if in_array("3",$dateOfWeek)}checked=""{/if}> {Yii::t("app", "THU_BA")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type='checkbox' value='4' name="checkbox-date" {if in_array("4",$dateOfWeek)}checked=""{/if}> {Yii::t("app", "THU_TU")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type='checkbox' value='5' name="checkbox-date" {if in_array("5",$dateOfWeek)}checked=""{/if}> {Yii::t("app", "THU_NAM")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type='checkbox' value='6' name="checkbox-date" {if in_array("6",$dateOfWeek)}checked=""{/if}> {Yii::t("app", "THU_SAU")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type='checkbox' value='7' name="checkbox-date" {if in_array("7",$dateOfWeek)}checked=""{/if}> {Yii::t("app", "THU_BAY")}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<input type='checkbox' value='8' name="checkbox-date" {if in_array("8",$dateOfWeek)}checked=""{/if}> {Yii::t("app", "CHU_NHAT")}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
{if $type=="edit"}
|
||||||
|
<input type='checkbox' value='1' name='editAll' checked=""> {Yii::t("app","AP_DUNG_CHO_TAT_CA_DOI_TUONG_DA_CHON")}
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-right">
|
||||||
|
{if $type=="edit"}
|
||||||
|
<button class="btn btn-primary" onclick="editSchedule(this);" data-href="{yii\helpers\Url::to(["/list-management/edit-schedule",'id'=>$model->id])}">
|
||||||
|
<i class="fa fa-floppy-o"></i> {Yii::t("app","LUU_LAI")}
|
||||||
|
</button>
|
||||||
|
{else}
|
||||||
|
<button class="btn btn-primary" onclick="addSchedule(this);" data-href="{yii\helpers\Url::to(["/list-management/schedule"])}">
|
||||||
|
<i class="fa fa-floppy-o"></i> {Yii::t("app","LUU_LAI")}
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -24,7 +24,7 @@ function _form(e) {
|
||||||
$("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"));
|
var confidence = JSON.parse($(e).attr("data-confidence"));
|
||||||
$("#closest-img").attr("src", confidence.img);
|
$("#closest-img").attr("src", confidence.img != "" ? confidence.img : "/images/user2-160x160.jpg");
|
||||||
$("#closest-name").html(confidence.name + " [" + confidence.score + "]");
|
$("#closest-name").html(confidence.name + " [" + confidence.score + "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ $(document).on('focusin', function (e) {
|
||||||
/**
|
/**
|
||||||
* Các hàm sử dụng chung
|
* Các hàm sử dụng chung
|
||||||
*/
|
*/
|
||||||
|
$('select').select2();
|
||||||
var common = {};
|
var common = {};
|
||||||
common.csrf = $('meta[name="csrf-token"]').attr("content");
|
common.csrf = $('meta[name="csrf-token"]').attr("content");
|
||||||
common.csrfParam = $('meta[name="csrf-param"]').attr("content");
|
common.csrfParam = $('meta[name="csrf-param"]').attr("content");
|
||||||
|
@ -360,7 +361,26 @@ common.changeLanguage = function (e) {
|
||||||
error: function (jqXHR, textStatus, errorThrown) {
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
common.changePerPage = function (e) {
|
||||||
|
if (window.location.search !== "") {
|
||||||
|
var perPage = common.getUrlParameter("per-page");
|
||||||
|
if (perPage) {
|
||||||
|
var sPageURL = decodeURIComponent(window.location.search.substring(1));
|
||||||
|
var sURLVariables = sPageURL.split('&');
|
||||||
|
var newUrl = [];
|
||||||
|
for (var i = 0; i < sURLVariables.length; i++) {
|
||||||
|
var temp = sURLVariables[i].split('=');
|
||||||
|
if (temp[0] !== "per-page")
|
||||||
|
newUrl.push(sURLVariables[i]);
|
||||||
|
}
|
||||||
|
newUrl.push("per-page=" + $(e).val());
|
||||||
|
window.location = window.location.origin + window.location.pathname + "?" + newUrl.join("&");
|
||||||
|
} else
|
||||||
|
window.location = window.location + "&per-page=" + $(e).val();
|
||||||
|
} else
|
||||||
|
window.location = window.location + "?per-page=" + $(e).val();
|
||||||
|
};
|
||||||
/**
|
/**
|
||||||
* =========================
|
* =========================
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -116,3 +116,65 @@ function SaveConfigDevice(e) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ValidateIPaddress(ipaddress) {
|
||||||
|
if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ipaddress))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function validData(inputName) {
|
||||||
|
var ip = $("input[name='" + inputName + "']").val();
|
||||||
|
if (ip == "" && document.getElementById('dhcp_check').checked)
|
||||||
|
return true;
|
||||||
|
if (!ValidateIPaddress(ip)) {
|
||||||
|
common.error(inputName, "");
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
common.success(inputName);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function validDNS(inputName) {
|
||||||
|
var dns = $("input[name='" + inputName + "']").val();
|
||||||
|
if (dns == "")
|
||||||
|
return true;
|
||||||
|
return validData(inputName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeIP(e) {
|
||||||
|
var valid = validData("device_ip");
|
||||||
|
valid = validData("subnet_mask");
|
||||||
|
valid = validData("gateway");
|
||||||
|
valid = validDNS("dns1");
|
||||||
|
valid = validDNS("dns2");
|
||||||
|
if (!valid)
|
||||||
|
return;
|
||||||
|
if (confirm($("input[name='BAN_CO_CHAC_CHAN_MUON_DOI_IP_KHONG']").val())) {
|
||||||
|
common.modalBlock(true);
|
||||||
|
$.ajax({
|
||||||
|
url: $(e).attr("data-href"),
|
||||||
|
type: 'POST',
|
||||||
|
data: {
|
||||||
|
device_ip: $("input[name='device_ip']").val(),
|
||||||
|
subnet_mask: $("input[name='subnet_mask']").val(),
|
||||||
|
gateway: $("input[name='gateway']").val(),
|
||||||
|
dns1: $("input[name='dns1']").val(),
|
||||||
|
dns2: $("input[name='dns2']").val(),
|
||||||
|
dhcp: document.getElementById('dhcp_check').checked
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
if (!data.status)
|
||||||
|
common.error("subnet_mask", "");
|
||||||
|
else
|
||||||
|
window.location = data.url;
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.ajaxError();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
53
web/js/face-comparison.js
Normal file
53
web/js/face-comparison.js
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
$(function () {
|
||||||
|
btnFace("1");
|
||||||
|
btnFace("2");
|
||||||
|
});
|
||||||
|
|
||||||
|
function btnFace(imageIndex) {
|
||||||
|
var fData = {
|
||||||
|
UploadImage: true,
|
||||||
|
imageIndex: imageIndex
|
||||||
|
};
|
||||||
|
fData[common.csrfParam] = common.csrf;
|
||||||
|
new afuButton({
|
||||||
|
uploadURI: $("input[name='url_upload_face']").val(),
|
||||||
|
formData: fData,
|
||||||
|
wrap: {
|
||||||
|
tagName: 'div',
|
||||||
|
classes: ''
|
||||||
|
},
|
||||||
|
fileExtension: '.png,.jpg,.jpeg,.gif',
|
||||||
|
fileSizeLimit: 1,
|
||||||
|
classes: 'btn btn-default',
|
||||||
|
fakeInputContent: '<span class=\'fa fa-file-image-o\'></span> Chọn hình ảnh',
|
||||||
|
onUploaded: function (data) {
|
||||||
|
$("#face" + imageIndex).attr("src", "/data/uploads" + data);
|
||||||
|
common.uploadBlock(false);
|
||||||
|
compareFace();
|
||||||
|
}
|
||||||
|
}).addInstance('image' + imageIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
function compareFace() {
|
||||||
|
var face1 = $("#face1").attr("src");
|
||||||
|
var face2 = $("#face2").attr("src");
|
||||||
|
if (face1 == "/images/user2-160x160.jpg" || face2 == "/images/user2-160x160.jpg")
|
||||||
|
return;
|
||||||
|
common.modalBlock(true);
|
||||||
|
$.ajax({
|
||||||
|
url: $("input[name='url_face_comparison']").val(),
|
||||||
|
type: 'POST',
|
||||||
|
data: {
|
||||||
|
face1: face1,
|
||||||
|
face2: face2
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
$("#percent").html(data.type1 + "%<br>[" + data.type2 + "%]");
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.ajaxError();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
var x = 0, y = 0;
|
var x = 0, y = 0;
|
||||||
|
var multiChoose = false;
|
||||||
$(function () {
|
$(function () {
|
||||||
common.dateTimePickerByClass("datepicker", "HH:mm DD/MM/YYYY");
|
common.dateTimePickerByClass("datepicker", "HH:mm DD/MM/YYYY");
|
||||||
common.dateTimePickerDay("birthday");
|
common.dateTimePickerDay("birthday");
|
||||||
|
@ -9,9 +10,13 @@ $(function () {
|
||||||
$("input[name='BatchDelete']").change(function () {
|
$("input[name='BatchDelete']").change(function () {
|
||||||
if (this.checked) {
|
if (this.checked) {
|
||||||
$("#delete-btn-group").removeClass("hidden");
|
$("#delete-btn-group").removeClass("hidden");
|
||||||
|
multiChoose = true;
|
||||||
|
$(".checkbox-column").removeClass("hidden");
|
||||||
} else {
|
} else {
|
||||||
$("tr").removeClass("delete-choose");
|
$("tr").removeClass("delete-choose");
|
||||||
$("#delete-btn-group").addClass("hidden");
|
$("#delete-btn-group").addClass("hidden");
|
||||||
|
multiChoose = false;
|
||||||
|
$(".checkbox-column").addClass("hidden");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
btnImage();
|
btnImage();
|
||||||
|
@ -181,10 +186,22 @@ function _deleteFeature(e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkAll(status) {
|
function checkAll(status) {
|
||||||
if (status)
|
if (status) {
|
||||||
$("tr").addClass("delete-choose");
|
$("#list-face").find("tr").addClass("delete-choose");
|
||||||
|
$(".checkbox-column").find("input").prop('checked', true);
|
||||||
|
} else {
|
||||||
|
$("#list-face").find("tr").removeClass("delete-choose");
|
||||||
|
$(".checkbox-column").find("input").prop('checked', false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function choose(e) {
|
||||||
|
if (!multiChoose)
|
||||||
|
return false;
|
||||||
|
if ($(e).closest("tr").hasClass("delete-choose"))
|
||||||
|
$(e).closest("tr").removeClass("delete-choose");
|
||||||
else
|
else
|
||||||
$("tr").removeClass("delete-choose");
|
$(e).closest("tr").addClass("delete-choose");
|
||||||
}
|
}
|
||||||
|
|
||||||
function batchDelete(e) {
|
function batchDelete(e) {
|
||||||
|
@ -361,6 +378,8 @@ function checkAllSync(stt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkAllNotInList() {
|
function checkAllNotInList() {
|
||||||
|
$(".filters").addClass("hidden");
|
||||||
|
$(".not-in-list").removeClass("hidden");
|
||||||
$("#sync-lists").find("tr").removeClass("success").attr("data-stt", "false");
|
$("#sync-lists").find("tr").removeClass("success").attr("data-stt", "false");
|
||||||
$(".not-in-list").addClass("success").attr("data-stt", "true");
|
$(".not-in-list").addClass("success").attr("data-stt", "true");
|
||||||
$("#totals-choose").html($(".not-in-list").length);
|
$("#totals-choose").html($(".not-in-list").length);
|
||||||
|
@ -431,6 +450,8 @@ function _syncFromServerForm(e) {
|
||||||
$("#filter-from-server").select2({
|
$("#filter-from-server").select2({
|
||||||
placeholder: $("input[name='TIM_KIEM_THEO_ID_HOAC_TEN']").val()
|
placeholder: $("input[name='TIM_KIEM_THEO_ID_HOAC_TEN']").val()
|
||||||
});
|
});
|
||||||
|
if ($("#totalDevice").html() === $("#totalCloud").html())
|
||||||
|
$("#btnCheckLossImage").addClass("hidden");
|
||||||
},
|
},
|
||||||
error: function (jqXHR, textStatus, errorThrown) {
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
common.modalBlock(false);
|
common.modalBlock(false);
|
||||||
|
@ -650,3 +671,181 @@ function reGenFeature(e) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function filtersLossImage(e) {
|
||||||
|
if ($(e).hasClass("btn-danger")) {
|
||||||
|
$(e).addClass("btn-default").removeClass("btn-danger");
|
||||||
|
$(".filters").removeClass("hidden");
|
||||||
|
$("#sync-lists").find("tr").removeClass("success").attr("data-stt", "false");
|
||||||
|
$("#totals-choose").html("0");
|
||||||
|
} else {
|
||||||
|
$(e).removeClass("btn-default").addClass("btn-danger");
|
||||||
|
$(".filters").addClass("hidden");
|
||||||
|
$(".loss-image").removeClass("hidden");
|
||||||
|
$("#sync-lists").find("tr").removeClass("success").attr("data-stt", "false");
|
||||||
|
$(".loss-image").addClass("success").attr("data-stt", "true");
|
||||||
|
$("#totals-choose").html($(".loss-image").length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function scheduleForm(e) {
|
||||||
|
var check = $(".delete-choose");
|
||||||
|
if (check.length == 0) {
|
||||||
|
alert($("input[name='HAY_CHON_DOI_TUONG_DE_GAN_LICH_TRINH']").val());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
common.modalBlock(true);
|
||||||
|
$.ajax({
|
||||||
|
url: $(e).attr("data-href"),
|
||||||
|
type: 'POST',
|
||||||
|
success: function (data) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.modalOpen(data.form, false, data.title);
|
||||||
|
common.dateTimePickerDay("fromDate");
|
||||||
|
common.dateTimePickerDay("toDate");
|
||||||
|
common.dateTimePickerHour("fromTime");
|
||||||
|
common.dateTimePickerHour("toTime");
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.ajaxError();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSchedule(e) {
|
||||||
|
var lists = [];
|
||||||
|
$.each($(".delete-choose"), function () {
|
||||||
|
if ($(this).attr("data-id") !== "")
|
||||||
|
lists.push($(this).attr("data-id"));
|
||||||
|
});
|
||||||
|
if (lists.length == 0) {
|
||||||
|
alert($("input[name='HAY_CHON_DOI_TUONG_DE_GAN_LICH_TRINH']").val());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var dateOfWeek = [];
|
||||||
|
$.each($("input[name='checkbox-date']:checked"), function () {
|
||||||
|
dateOfWeek.push($(this).val());
|
||||||
|
});
|
||||||
|
common.modalBlock(true);
|
||||||
|
$.ajax({
|
||||||
|
url: $(e).attr("data-href"),
|
||||||
|
type: 'POST',
|
||||||
|
data: {
|
||||||
|
fromTime: $("input[name='FromTime']").val(),
|
||||||
|
toTime: $("input[name='ToTime']").val(),
|
||||||
|
fromDate: $("input[name='FromDate']").val(),
|
||||||
|
toDate: $("input[name='ToDate']").val(),
|
||||||
|
dateOfWeek: dateOfWeek,
|
||||||
|
lists: lists
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
window.location.reload(true);
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
console.log(errorThrown);
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.ajaxError();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function formEditSchedule(e) {
|
||||||
|
common.modalBlock(true);
|
||||||
|
$.ajax({
|
||||||
|
url: $(e).attr("data-href"),
|
||||||
|
type: 'POST',
|
||||||
|
success: function (data) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.modalOpen(data.form, false, data.title);
|
||||||
|
common.dateTimePickerDay("fromDate");
|
||||||
|
common.dateTimePickerDay("toDate");
|
||||||
|
common.dateTimePickerHour("fromTime");
|
||||||
|
common.dateTimePickerHour("toTime");
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.ajaxError();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function editSchedule(e) {
|
||||||
|
var lists = [];
|
||||||
|
$.each($(".delete-choose"), function () {
|
||||||
|
if ($(this).attr("data-id") !== "")
|
||||||
|
lists.push($(this).attr("data-id"));
|
||||||
|
});
|
||||||
|
var dateOfWeek = [];
|
||||||
|
$.each($("input[name='checkbox-date']:checked"), function () {
|
||||||
|
dateOfWeek.push($(this).val());
|
||||||
|
});
|
||||||
|
common.modalBlock(true);
|
||||||
|
$.ajax({
|
||||||
|
url: $(e).attr("data-href"),
|
||||||
|
type: 'POST',
|
||||||
|
data: {
|
||||||
|
fromTime: $("input[name='FromTime']").val(),
|
||||||
|
toTime: $("input[name='ToTime']").val(),
|
||||||
|
fromDate: $("input[name='FromDate']").val(),
|
||||||
|
toDate: $("input[name='ToDate']").val(),
|
||||||
|
dateOfWeek: dateOfWeek,
|
||||||
|
lists: lists,
|
||||||
|
editAll: $("input[name='editAll']").is(":checked")
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
window.location.reload(true);
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
console.log(errorThrown);
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.ajaxError();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function formDeleteSchedule(e) {
|
||||||
|
common.modalBlock(true);
|
||||||
|
$.ajax({
|
||||||
|
url: $(e).attr("data-href"),
|
||||||
|
type: 'POST',
|
||||||
|
success: function (data) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.modalOpen(data.form, false, data.title);
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.ajaxError();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteSchedule(e) {
|
||||||
|
if (confirm($("input[name='BAN_CO_CHAC_CHAN_MUON_XOA_LICH_TRINH_NAY_KHONG']").val())) {
|
||||||
|
var lists = [];
|
||||||
|
$.each($(".delete-choose"), function () {
|
||||||
|
if ($(this).attr("data-id") !== "")
|
||||||
|
lists.push($(this).attr("data-id"));
|
||||||
|
});
|
||||||
|
common.modalBlock(true);
|
||||||
|
$.ajax({
|
||||||
|
url: $(e).attr("data-href"),
|
||||||
|
type: 'POST',
|
||||||
|
data: {
|
||||||
|
editAll: $("input[name='editAll']").is(":checked"),
|
||||||
|
lists: lists
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
common.modalBlock(false);
|
||||||
|
window.location.reload(true);
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
console.log(errorThrown);
|
||||||
|
common.modalBlock(false);
|
||||||
|
common.ajaxError();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,8 +17,8 @@ class ConfigTree extends Widget {
|
||||||
|
|
||||||
public function run() {
|
public function run() {
|
||||||
|
|
||||||
$public_root = ['engine', 'recognition', 'open_door', 'screen', 'lang'];
|
$public_root = ['engine', 'recognition', 'open_door', 'screen', 'lang', 'camera'];
|
||||||
$public_cfg = ['engine|cam_id', 'engine|server_authen', 'recognition|server_recog', 'open_door|enable', 'open_door|port_name', 'screen|banner', 'lang'];
|
$public_cfg = ['engine|cam_id', 'engine|server_authen', 'recognition|server_recog', 'open_door|enable', 'open_door|port_name', 'screen|banner', 'lang', 'camera|rgb', 'camera|ir', 'camera|rgb|url', 'camera|ir|url'];
|
||||||
|
|
||||||
return $this->render("config-tree", [
|
return $this->render("config-tree", [
|
||||||
"configLists" => $this->configLists,
|
"configLists" => $this->configLists,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user