Advertisement
Guest User

index.php

a guest
Feb 26th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.46 KB | None | 0 0
  1. <?php
  2. error_reporting(-1);
  3. ini_set('display_errors', 1);
  4. ini_set('date.timezone', 'Etc/GMT-3'); //часовой пояс. -3 = мск
  5.  
  6. $db = new mysqli('localhost', 'root', '', 'mysql');
  7. $db->set_charset('utf8');
  8.  
  9. $db->query("CREATE TABLE IF NOT EXISTS day_events ("
  10.         . "id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,"
  11.         . "name varchar(255) NOT NULL UNIQUE"
  12.         . ") ENGINE=MyISAM DEFAULT CHARSET=utf8");
  13.  
  14. $db->query("CREATE TABLE IF NOT EXISTS day_current ("
  15.         . "id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,"
  16.         . "event_id int NOT NULL,"
  17.         . "active bool NOT NULL,"
  18.         . "ts_start int NOT NULL,"
  19.         . "ts_end int NOT NULL"
  20.         . ") ENGINE=MyISAM DEFAULT CHARSET=utf8");
  21.  
  22. if (isset($_POST['action'])) {
  23.     if ($_POST['action'] == 'add') {
  24.         $db->query("INSERT day_events SET name='$_POST[name]'");
  25.     }
  26. } elseif (isset($_GET['action'])) {
  27.     if ($_GET['action'] == 'delete') {
  28.         $db->query("DELETE FROM day_events WHERE id='$_GET[id]'");
  29.     } elseif ($_GET['action'] == 'start') {
  30.         $db->query("UPDATE day_current SET ts_end=UNIX_TIMESTAMP() WHERE ts_end=0");
  31.         $db->query("INSERT day_current SET event_id='$_GET[id]', ts_start=UNIX_TIMESTAMP()");
  32.     }
  33.    
  34.     header('location: /day/');
  35.     exit();
  36. }
  37.  
  38. $events = $db->query("SELECT * FROM day_events ORDER BY id DESC")->fetch_all(MYSQLI_ASSOC);
  39. $log = $db->query("SELECT * FROM day_current ORDER BY id DESC LIMIT 100")->fetch_all(MYSQLI_ASSOC);
  40.  
  41. foreach ($events as &$e) {
  42.     $e['time'] = 0;
  43. }
  44.  
  45. //echo '<plaintext>';
  46.  
  47. $date = new DateTime(date('Y-m-d'));
  48. $ts_day = $date->getTimestamp();
  49.  
  50.  
  51. for ($i = 0; $i < count($log); $i++) {
  52.     $ultra = 0;
  53.    
  54.     if ($log[$i]['ts_end'] != 0) {
  55.         if ($log[$i]['ts_end'] > ($ts_day)) {
  56.             if ($log[$i]['ts_start'] > $ts_day) {
  57.                 $ultra = $log[$i]['ts_end']-$log[$i]['ts_start'];
  58.             } else {
  59.                 //начало в прошлом дне
  60.                 $ultra = $log[$i]['ts_end']-$ts_day;
  61.             }
  62.         } else {
  63.             break;
  64.             //вышли за пределы т.к. desc
  65.         }
  66.     } else {
  67.         $ultra = microtime(1) - $log[$i]['ts_start'];
  68.     }
  69.    
  70.     foreach ($events as &$e) {
  71.         if ($log[$i]['event_id'] == $e['id']) {
  72.             $e['time'] += $ultra;
  73.             break;
  74.         }
  75.     }
  76. }
  77. $sum = microtime(1) - $ts_day;
  78. foreach ($events as &$e) {
  79.         $e['time'] = floor($e['time']/($sum/100));
  80. }
  81.  
  82. usort($events, function($a,$b){
  83.     return ($b['time']-$a['time']);
  84. });
  85.  
  86. //exit();
  87. ?>
  88.  
  89. <!DOCTYPE html>
  90. <html>
  91. <head>
  92.     <meta charset="utf-8">
  93.     <title>Day</title>
  94.     <link rel="stylesheet" href="main.css?<?=microtime(1)?>" type="text/css">
  95. </head>
  96. <body>
  97.     <div id="wrap">
  98.         <div id="col1" class="col">
  99.             <div id="add-event" class="block">
  100.                 <div class="block-title">Добавление действия</div>
  101.  
  102.                 <div class="block-body">
  103.                     <form method="post">
  104.                         <input type="hidden" name="action" value="add">
  105.                         <input name="name">
  106.                         <button type="submit">Добавить</button>
  107.                     </form>
  108.                 </div>
  109.             </div>
  110.  
  111.             <div id="events-manager" class="block">
  112.                 <div class="block-title">Управление действиями</div>
  113.                
  114.                 <div class="block-body">
  115.                     <table>
  116.                         <tr>
  117.                             <th>Имя</th>
  118.                         </tr>
  119.                         <?php foreach ($events as $event): ?>
  120.                             <tr>
  121.                                 <td><a href="?action=start&id=<?=$event['id']?>"><?=$event['name']?></a>
  122.                                 <div class="progress-wrap"><div class="progress" style="width:<?=$event['time']?>%"></div></div<</td>
  123.                                 <!-- | <a href="?action=delete&id=<?=$event['id']?>">Удалить</a-->
  124.                             </tr>
  125.                         <?php endforeach; ?>
  126.                     </table>
  127.                 </div>
  128.             </div>
  129.         </div>
  130.  
  131.         <div id="col2" class="col">
  132.             <div id="events-log" class="block">
  133.                 <div class="block-title">Лог действий</div>
  134.  
  135.                 <div class="block-body">
  136.                     <table>
  137.                         <tr>
  138.                             <th>Имя</th>
  139.                             <th >Выполнялось</th>
  140.                             <th>Начато</th>
  141.                             <th>Окончено</th>
  142.                         </tr>
  143.  
  144.                         <?php foreach ($log as $v): ?>
  145.                             <?php
  146.                                 $name = $db->query("SELECT name FROM day_events WHERE id='$v[event_id]'")->fetch_assoc()['name'];
  147.                                 $time = ($v['ts_end'] ==0 ? microtime(true) - $v['ts_start'] : $v['ts_end'] - $v['ts_start']);
  148.                                 $hour = floor($time/3600);
  149.                                 $min =  floor(($time % 3600)/60);
  150.                                 //$sec = ($time % 3600) % 60;
  151.                                 $proshlo = ($hour == 0 ? '' : $hour . ' час. ') . $min . ' мин.';
  152.                                
  153.                                
  154.                                 $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']));
  155.                                 if ($v['ts_end'] ==0) {
  156.                                     $end = '-';
  157.                                 } else {
  158.                                     $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']));
  159.                                 }
  160.                             ?>
  161.  
  162.                                 <tr>
  163.                                     <td><?=$name?></td>
  164.                                     <td style="text-align: right"><?=$proshlo?></td>
  165.                                     <td> <?=$start?></td>
  166.                                     <td><?=$end?></td>
  167.                                 </tr>
  168.  
  169.                         <?php endforeach; ?>
  170.                     </table>
  171.                 </div>
  172.             </div>
  173.         </div>
  174.     </div>
  175. </body>
  176. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement