73 lines
1.8 KiB
PHP
73 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Library\ZKTeco\Helper;
|
|
|
|
use App\Library\ZKTeco\ZKTeco;
|
|
|
|
class Attendance
|
|
{
|
|
/**
|
|
* @param ZKTeco $self
|
|
* @return array [uid, id, state, timestamp]
|
|
*/
|
|
static public function get(ZKTeco $self)
|
|
{
|
|
$self->_section = __METHOD__;
|
|
|
|
$command = Util::CMD_ATT_LOG_RRQ;
|
|
$command_string = '';
|
|
|
|
$session = $self->_command($command, $command_string, Util::COMMAND_TYPE_DATA);
|
|
if ($session === false) {
|
|
return [];
|
|
}
|
|
|
|
$attData = Util::recData($self);
|
|
|
|
$attendance = [];
|
|
if (!empty($attData)) {
|
|
$attData = substr($attData, 10);
|
|
|
|
while (strlen($attData) > 40) {
|
|
$u = unpack('H78', substr($attData, 0, 39));
|
|
|
|
$u1 = hexdec(substr($u[1], 4, 2));
|
|
$u2 = hexdec(substr($u[1], 6, 2));
|
|
$uid = $u1 + ($u2 * 256);
|
|
$id = hex2bin(substr($u[1], 8, 18));
|
|
$id = str_replace(chr(0), '', $id);
|
|
$state = hexdec(substr($u[1], 56, 2));
|
|
$timestamp = Util::decodeTime(hexdec(Util::reverseHex(substr($u[1], 58, 8))));
|
|
$type = hexdec(Util::reverseHex(substr($u[1], 66, 2 )));
|
|
|
|
$attendance[] = [
|
|
'uid' => $uid,
|
|
'id' => $id,
|
|
'state' => $state,
|
|
'timestamp' => $timestamp,
|
|
'type' => $type
|
|
];
|
|
|
|
$attData = substr($attData, 40);
|
|
}
|
|
|
|
}
|
|
|
|
return $attendance;
|
|
}
|
|
|
|
/**
|
|
* @param ZKTeco $self
|
|
* @return bool|mixed
|
|
*/
|
|
static public function clear(ZKTeco $self)
|
|
{
|
|
$self->_section = __METHOD__;
|
|
|
|
$command = Util::CMD_CLEAR_ATT_LOG;
|
|
$command_string = '';
|
|
|
|
return $self->_command($command, $command_string);
|
|
}
|
|
}
|