Advertisement
Guest User

index.php

a guest
Feb 26th, 2018
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.65 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.     $e['time2'] = 0;
  44. }
  45.  
  46. //echo '<plaintext>';
  47.  
  48. $date = new DateTime(date('Y-m-d'));
  49. $ts_day = $date->getTimestamp();
  50.  
  51.  
  52. for ($i = 0; $i < count($log); $i++) {
  53.     $ultra = 0;
  54.    
  55.     if ($log[$i]['ts_end'] != 0) {
  56.         if ($log[$i]['ts_end'] > ($ts_day)) {
  57.             if ($log[$i]['ts_start'] > $ts_day) {
  58.                 $ultra = $log[$i]['ts_end']-$log[$i]['ts_start'];
  59.             } else {
  60.                 //начало в прошлом дне
  61.                 $ultra = $log[$i]['ts_end']-$ts_day;
  62.             }
  63.         } else {
  64.             break;
  65.             //вышли за пределы т.к. desc
  66.         }
  67.     } else {
  68.         $ultra = microtime(1) - $log[$i]['ts_start'];
  69.     }
  70.    
  71.     foreach ($events as &$e) {
  72.         if ($log[$i]['event_id'] == $e['id']) {
  73.             $e['time'] += $ultra;
  74.             break;
  75.         }
  76.     }
  77. }
  78. $sum = microtime(1) - $ts_day;
  79. foreach ($events as &$e) {
  80.     $e['time2'] = gmdate('H:i:s', $e['time']);
  81.         $e['time'] = floor($e['time']/($sum/100));
  82.        
  83. }
  84.  
  85. usort($events, function($a,$b){
  86.     return ($b['time']-$a['time']);
  87. });
  88.  
  89. //exit();
  90. ?>
  91.  
  92. <!DOCTYPE html>
  93. <html>
  94. <head>
  95.     <meta charset="utf-8">
  96.     <title>Day</title>
  97.     <link rel="stylesheet" href="main.css?<?=microtime(1)?>" type="text/css">
  98. </head>
  99. <body>
  100.     <div id="wrap">
  101.         <div id="col1" class="col">
  102.             <div id="add-event" class="block">
  103.                 <div class="block-title">Добавление действия</div>
  104.  
  105.                 <div class="block-body">
  106.                     <form method="post">
  107.                         <input type="hidden" name="action" value="add">
  108.                         <input name="name">
  109.                         <button type="submit">Добавить</button>
  110.                     </form>
  111.                 </div>
  112.             </div>
  113.  
  114.             <div id="events-manager" class="block">
  115.                 <div class="block-title">Управление действиями</div>
  116.                
  117.                 <div class="block-body">
  118.                     <table>
  119.                         <tr>
  120.                             <th>Имя</th>
  121.                             <th>Время</th>
  122.                         </tr>
  123.                         <?php foreach ($events as $event): ?>
  124.                             <tr>
  125.                                 <td><a href="?action=start&id=<?=$event['id']?>"><?=$event['name']?></a>
  126.                                     <div class="progress-wrap"><div class="progress" style="width:<?=$event['time']?>%"></div></div></td>
  127.                                 <td><?=$event['time2']?></td>
  128.                                 <!-- | <a href="?action=delete&id=<?=$event['id']?>">Удалить</a-->
  129.                             </tr>
  130.                         <?php endforeach; ?>
  131.                     </table>
  132.                 </div>
  133.             </div>
  134.         </div>
  135.  
  136.         <div id="col2" class="col">
  137.             <div id="events-log" class="block">
  138.                 <div class="block-title">Лог действий</div>
  139.  
  140.                 <div class="block-body">
  141.                     <table>
  142.                         <tr>
  143.                             <th>Имя</th>
  144.                             <th >Выполнялось</th>
  145.                             <th>Начато</th>
  146.                             <th>Окончено</th>
  147.                         </tr>
  148.  
  149.                         <?php foreach ($log as $v): ?>
  150.                             <?php
  151.                                 $name = $db->query("SELECT name FROM day_events WHERE id='$v[event_id]'")->fetch_assoc()['name'];
  152.                                 $time = ($v['ts_end'] ==0 ? microtime(true) - $v['ts_start'] : $v['ts_end'] - $v['ts_start']);
  153.                                 $hour = floor($time/3600);
  154.                                 $min =  floor(($time % 3600)/60);
  155.                                 //$sec = ($time % 3600) % 60;
  156.                                 $proshlo = ($hour == 0 ? '' : $hour . ' час. ') . $min . ' мин.';
  157.                                
  158.                                
  159.                                 $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']));
  160.                                 if ($v['ts_end'] ==0) {
  161.                                     $end = '-';
  162.                                 } else {
  163.                                     $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']));
  164.                                 }
  165.                             ?>
  166.  
  167.                                 <tr>
  168.                                     <td><?=$name?></td>
  169.                                     <td style="text-align: right"><?=$proshlo?></td>
  170.                                     <td> <?=$start?></td>
  171.                                     <td><?=$end?></td>
  172.                                 </tr>
  173.  
  174.                         <?php endforeach; ?>
  175.                     </table>
  176.                 </div>
  177.             </div>
  178.         </div>
  179.     </div>
  180. </body>
  181. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement