Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- error_reporting(-1);
- ini_set('display_errors', 1);
- ini_set('date.timezone', 'Etc/GMT-3'); //часовой пояс. -3 = мск
- $db = new mysqli('localhost', 'root', '', 'mysql');
- $db->set_charset('utf8');
- $db->query("CREATE TABLE IF NOT EXISTS day_events ("
- . "id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,"
- . "name varchar(255) NOT NULL UNIQUE"
- . ") ENGINE=MyISAM DEFAULT CHARSET=utf8");
- $db->query("CREATE TABLE IF NOT EXISTS day_current ("
- . "id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,"
- . "event_id int NOT NULL,"
- . "active bool NOT NULL,"
- . "ts_start int NOT NULL,"
- . "ts_end int NOT NULL"
- . ") ENGINE=MyISAM DEFAULT CHARSET=utf8");
- if (isset($_POST['action'])) {
- if ($_POST['action'] == 'add') {
- $db->query("INSERT day_events SET name='$_POST[name]'");
- }
- } elseif (isset($_GET['action'])) {
- if ($_GET['action'] == 'delete') {
- $db->query("DELETE FROM day_events WHERE id='$_GET[id]'");
- } elseif ($_GET['action'] == 'start') {
- $db->query("UPDATE day_current SET ts_end=UNIX_TIMESTAMP() WHERE ts_end=0");
- $db->query("INSERT day_current SET event_id='$_GET[id]', ts_start=UNIX_TIMESTAMP()");
- }
- header('location: /day/');
- exit();
- }
- $events = $db->query("SELECT * FROM day_events ORDER BY id DESC")->fetch_all(MYSQLI_ASSOC);
- $log = $db->query("SELECT * FROM day_current ORDER BY id DESC LIMIT 100")->fetch_all(MYSQLI_ASSOC);
- foreach ($events as &$e) {
- $e['time'] = 0;
- $e['time2'] = 0;
- }
- //echo '<plaintext>';
- $date = new DateTime(date('Y-m-d'));
- $ts_day = $date->getTimestamp();
- for ($i = 0; $i < count($log); $i++) {
- $ultra = 0;
- if ($log[$i]['ts_end'] != 0) {
- if ($log[$i]['ts_end'] > ($ts_day)) {
- if ($log[$i]['ts_start'] > $ts_day) {
- $ultra = $log[$i]['ts_end']-$log[$i]['ts_start'];
- } else {
- //начало в прошлом дне
- $ultra = $log[$i]['ts_end']-$ts_day;
- }
- } else {
- break;
- //вышли за пределы т.к. desc
- }
- } else {
- $ultra = microtime(1) - $log[$i]['ts_start'];
- }
- foreach ($events as &$e) {
- if ($log[$i]['event_id'] == $e['id']) {
- $e['time'] += $ultra;
- break;
- }
- }
- }
- $sum = microtime(1) - $ts_day;
- foreach ($events as &$e) {
- $e['time2'] = gmdate('H:i:s', $e['time']);
- $e['time'] = floor($e['time']/($sum/100));
- }
- usort($events, function($a,$b){
- return ($b['time']-$a['time']);
- });
- //exit();
- ?>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>Day</title>
- <link rel="stylesheet" href="main.css?<?=microtime(1)?>" type="text/css">
- </head>
- <body>
- <div id="wrap">
- <div id="col1" class="col">
- <div id="add-event" class="block">
- <div class="block-title">Добавление действия</div>
- <div class="block-body">
- <form method="post">
- <input type="hidden" name="action" value="add">
- <input name="name">
- <button type="submit">Добавить</button>
- </form>
- </div>
- </div>
- <div id="events-manager" class="block">
- <div class="block-title">Управление действиями</div>
- <div class="block-body">
- <table>
- <tr>
- <th>Имя</th>
- <th>Время</th>
- </tr>
- <?php foreach ($events as $event): ?>
- <tr>
- <td><a href="?action=start&id=<?=$event['id']?>"><?=$event['name']?></a>
- <div class="progress-wrap"><div class="progress" style="width:<?=$event['time']?>%"></div></div></td>
- <td><?=$event['time2']?></td>
- <!-- | <a href="?action=delete&id=<?=$event['id']?>">Удалить</a-->
- </tr>
- <?php endforeach; ?>
- </table>
- </div>
- </div>
- </div>
- <div id="col2" class="col">
- <div id="events-log" class="block">
- <div class="block-title">Лог действий</div>
- <div class="block-body">
- <table>
- <tr>
- <th>Имя</th>
- <th >Выполнялось</th>
- <th>Начато</th>
- <th>Окончено</th>
- </tr>
- <?php foreach ($log as $v): ?>
- <?php
- $name = $db->query("SELECT name FROM day_events WHERE id='$v[event_id]'")->fetch_assoc()['name'];
- $time = ($v['ts_end'] ==0 ? microtime(true) - $v['ts_start'] : $v['ts_end'] - $v['ts_start']);
- $hour = floor($time/3600);
- $min = floor(($time % 3600)/60);
- //$sec = ($time % 3600) % 60;
- $proshlo = ($hour == 0 ? '' : $hour . ' час. ') . $min . ' мин.';
- $start = (date('d.m.Y', $v['ts_start']) === date('d.m.Y', microtime(1)) ? date('H:i', $v['ts_start']) : date('H:i d.m', $v['ts_start']));
- if ($v['ts_end'] ==0) {
- $end = '-';
- } else {
- $end = (date('d.m.Y', $v['ts_end']) === date('d.m.Y', microtime(1)) ? date('H:i', $v['ts_end']) : date('H:i d.m', $v['ts_end']));
- }
- ?>
- <tr>
- <td><?=$name?></td>
- <td style="text-align: right"><?=$proshlo?></td>
- <td> <?=$start?></td>
- <td><?=$end?></td>
- </tr>
- <?php endforeach; ?>
- </table>
- </div>
- </div>
- </div>
- </div>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement