Advertisement
Guest User

timetable

a guest
Feb 19th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.18 KB | None | 0 0
  1. //timetable.php
  2. <?php
  3.  
  4. function get_from_excel($patch)//возвращает первый лист книги в виде двумерного размера массива. [n][m], n - столбец, m - строка. $patch - путь к файлу
  5. {
  6.     require_once "Classes/PHPExcel.php";
  7.     $ar=array();
  8.     $inputFileType = PHPExcel_IOFactory::identify($patch);
  9.     $objReader = PHPExcel_IOFactory::createReader($inputFileType);
  10.     $objPHPExcel = $objReader->load($patch);
  11.     $ar = $objPHPExcel->getActiveSheet()->toArray();
  12.     array_unshift($ar, null);
  13.     $ar = call_user_func_array("array_map", $ar);
  14.     return $ar;
  15. }
  16.  
  17. function add_table($del, $name, $week, $groups, $days, $num, $sub_1, $sub_2, $teach_1, $teach_2, $hall_1, $hall_2)
  18. {
  19.     include("Classes/sql.php");
  20.     if($del)
  21.     {
  22.     mysqli_query($sql, "DROP TABLE `$db.$name`;");
  23.     }
  24.     mysqli_query($sql, "
  25.        create table $db.$name(
  26.             `week` int (1) NOT NULL,
  27.             `group` int (2) NOT NULL,
  28.             `day` int (1) NOT NULL,
  29.             `num` int (1) NOT NULL,
  30.             `subj_1` text NOT NULL,
  31.             `subj_2` text NOT NULL,
  32.             `teach_1` text NOT NULL,
  33.             `teach_2` text NOT NULL,
  34.             `hall_1` text NOT NULL,
  35.             `hall_2` text NOT NULL);
  36.    ");
  37.     for($i = 0; $i<count($num); $i++)
  38.     {
  39.         mysqli_query($sql, "INSERT INTO `$db`.`$name` (`week`, `group`, `day`, `num`, `subj_1`, `subj_2`, `teach_1`, `teach_2`, `hall_1`, `hall_2`)
  40.         VALUES ('$week', '$groups[$i]', '$days[$i]', '$num[$i]', '$sub_1[$i]', '$sub_2[$i]', '$teach_1[$i]', '$teach_2[$i]', '$hall_1[$i]', '$hall_2[$i]');");
  41.     }
  42. }  
  43.  
  44. function add_changetable($name, $week, $day, $date, $num, $groups, $subgroups, $removesubs, $lessons, $teachers, $hall)
  45. {
  46.     include("Classes/sql.php");
  47.     mysqli_query($sql, "DROP TABLE `$db`.`$name`;");
  48.     mysqli_query($sql, "
  49.        create table $db.$name(
  50.             `week` int (1) NOT NULL,
  51.             `day` int (1) NOT NULL,
  52.             `date` text NOT NULL,
  53.             `num` int (1) NOT NULL,
  54.             `groups` text NOT NULL,
  55.             `subgroups` int (1) NOT NULL,
  56.             `removesubs` int (1) NOT NULL,
  57.             `lessons` text NOT NULL,
  58.             `teachers` text NOT NULL,
  59.             `hall` text NOT NULL);
  60.    ");
  61.    
  62.     for($i = 0; $i<count($num); $i++)
  63.     {
  64.         mysqli_query($sql, "INSERT INTO `$db`.`$name` (`week`, `day`, `date`, `num`, `groups`, `subgroups`, `removesubs`, `lessons`, `teachers`, `hall`)
  65.         VALUES ('$week', '$day', '$date', '$num[$i]', '$groups[$i]', '$subgroups[$i]', '$removesubs[$i]', '$lessons[$i]', '$teachers[$i]', '$hall[$i]');");
  66.     }
  67. }
  68.  
  69. function gen_groups($patch)//генерация списка групп из расписания на неделю
  70. {
  71.     $arr = get_from_excel($patch);
  72.     $y_def = 9;
  73.     $y = $y_def;
  74.     $x_step = 4;
  75.     $y_offset = 52;
  76.     $dbname="news";//Имя БД
  77.     include("Classes/sql.php");
  78.     mysqli_query($sql, "DROP TABLE `groups`;");
  79.     mysqli_query($sql, "
  80.    CREATE TABLE `groups` (
  81.     id INT PRIMARY KEY NOT NULL AUTO_INCREMENT ,
  82.     name TEXT NOT NULL
  83.     );
  84.     ");
  85.     for($y; $y<=$y_def+$y_offset; $y+=$y_offset)//семещение на 52 строки для прохода по нижнему блоку
  86.     {
  87.         $end = false;
  88.         $x = 4;
  89.         while ($group=(empty($arr[$x][$y])) ? FALSE : $arr[$x][$y])//проверка выхода из массива по x
  90.         {
  91.             mysqli_query($sql, "INSERT INTO `groups` (`name`) VALUE('$group');");
  92.             $x+=$x_step;
  93.         }
  94.     }
  95. }
  96.  
  97. function gen_days($patch)
  98. {
  99.     $arr = get_from_excel($patch);
  100.     $dbname="u4730742_kgdt";//Имя БД
  101.     include("Classes/sql.php");
  102.     mysqli_query($sql, "DROP TABLE `days`;");
  103.     mysqli_query($sql, "
  104.    CREATE TABLE `days` (
  105.     id INT PRIMARY KEY NOT NULL AUTO_INCREMENT ,
  106.     name TEXT NOT NULL
  107.     );
  108.     ");
  109.     for($y=11; $y<=51; $y+=8)
  110.     {
  111.         $name= $arr[0][$y];
  112.         mysqli_query($sql, "INSERT INTO `days` (`name`) VALUE('$name');");
  113.     }
  114. }
  115.  
  116. function get_group_id($name)
  117. {
  118.     include("Classes/sql.php");
  119.     $id = mysqli_query($sql, "SELECT id FROM `groups` WHERE name='$name'");
  120.     $row = $id->fetch_row();
  121.     return $row[0];
  122. }
  123.  
  124.  
  125. function get_day($name)
  126. {
  127.     include("Classes/sql.php");
  128.     $id = mysqli_query($sql, "SELECT id FROM `days` WHERE name='$name'");
  129.     $row = $id->fetch_row();
  130.     return $row[0];
  131. }
  132.  
  133. function create_timetable($patch, $week, $del) //Генерирует таблицу недельного расписания(путь_к_расписанию, неделя(1 2), удалять_ли_существующую)
  134. {
  135.     //include("PHPDebug.php");
  136.     //$dbg = new PHPDebug();
  137.     $arr = get_from_excel($patch);
  138.     $day = 11;
  139.     $day_offset = 8;
  140.     $line = 9;
  141.     $line_offset = 52;
  142.     $y=11;
  143.     $x=4;
  144.     //структура
  145.     $groups=Array();
  146.     $days=Array();
  147.     $num=Array();
  148.     $group=Array();
  149.     $sub_1=Array();
  150.     $sub_2=Array();
  151.     $teach_1=Array();
  152.     $teach_2=Array();
  153.     $hall_1=Array();
  154.     $hall_2=Array();
  155.     //
  156.     $name='const_table';
  157.     for($j=0; $j<2; $j++)
  158.     {
  159.         while(!empty($arr[0][$y]) && $arr[0][$y] != '')
  160.         {
  161.             $x=4;
  162.             while (!empty($arr[$x][$line]))
  163.             {
  164.                 $counter=1;
  165.                 $day=$y;
  166.                 for($i=$y; $i<=$y+6; $i+=2)
  167.                 {
  168.                     $groups[]=get_group_id($arr[$x][$line]);
  169.                     $days[]=get_day($arr[0][$day]);
  170.                     $num[]=$counter;
  171.                     $sub_1[]=(empty($arr[$x][$i])) ? '' : $arr[$x][$i];
  172.                     $sub_2[]=(empty($arr[$x+2][$i])) ? $arr[$x][$i] : $arr[$x+2][$i];
  173.                     $teach_1[]=(empty($arr[$x][$i+1])) ? '' : $arr[$x][$i+1];
  174.                     $teach_2[]=(empty($arr[$x+2][$i+1])) ? $arr[$x][$i+1] : $arr[$x+2][$i+1];
  175.                     $hall_1[]=(empty($arr[$x+3][$i])) ? '' : $arr[$x+3][$i];
  176.                     $hall_2[]=(empty($arr[$x+1][$i])) ? $arr[$x+3][$i] : $arr[$x+1][$i];
  177.                     $counter++;
  178.                 }
  179.                 $x+=4;
  180.             }
  181.             $y+=$day_offset;   
  182.         }
  183.         $line+=$line_offset;
  184.         $y=$line+2;
  185.     }
  186.     add_table($del, $name, $week, $groups, $days, $num, $sub_1, $sub_2, $teach_1, $teach_2, $hall_1, $hall_2);
  187. }
  188.  
  189.  
  190. function gen_changes($patch)
  191. {
  192.     $name='changes';
  193.     include('Classes/StrLevel.php');
  194.     $arr = get_from_excel($patch);
  195.     $title = $arr[0][1];
  196.     preg_match_all('/\((.+)\)/', $title, $day);
  197.     $day=get_day(_strtoupper($day[1][0]));//номер дня недели
  198.     preg_match_all('/(Неделя )(?:([0-9]{1}))/', $title, $week);
  199.     $week=$week[2][0];//номер недели
  200.     preg_match_all('/\S+[.\]\.[0-9]{2}\.[0-9]{4}/', $title, $date);
  201.     $date=$date[0][0];
  202.     $y=5;
  203.     $groups=Array();//группа
  204.     $num=Array();//номер пары
  205.     $lessons=Array();//предмет(замененный)
  206.     $teachers=Array();//преподаватель(замененный)
  207.     $removesubs=Array();//снятая подгруппы
  208.     $subgroups=Array();//добавленная подгруппа
  209.     $hall=Array();//дабавленная аудитория
  210.     while(!empty($arr[0][$y]) && $arr[0][$y] != '')
  211.     {
  212.         $groups[]=get_group_id($arr[0][$y]);
  213.         $num[]=$arr[1][$y];
  214.         $removesubs[]=$arr[2][$y];
  215.         $subgroups[]=$arr[5][$y];
  216.         $lessons[]=$arr[6][$y];
  217.         $teachers[]=$arr[7][$y];
  218.         $hall[]=$arr[8][$y];
  219.         $y++;
  220.     }
  221.     /*print_r($groups);
  222.     print_r($num);
  223.     print_r($removesubs);
  224.     print_r($subgroups);
  225.     print_r($lessons);
  226.     print_r($teachers);
  227.     print_r($hall);*/
  228.     add_changetable($name, $week, $day, $date, $num, $groups, $subgroups, $removesubs, $lessons, $teachers, $hall);
  229. }
  230.  
  231. function generate_table($group)
  232. {
  233.     //`week`, `group`, `day`, `num`, `subj_1`, `subj_2`, `teach_1`, `teach_2`, `hall_1`, `hall_2`
  234.     include("Classes/sql.php");
  235.     $group_id=get_group_id($group);
  236.     $tmp = mysqli_query($sql, "SELECT `week`, `day`, `date` FROM `changes` WHERE 1");
  237.     $row = $tmp->fetch_row();
  238.     $week = $row[0][0];
  239.     $day = $row[0][1];
  240.     $date = $row[0][2];
  241.     $tmp = mysqli_query($sql, "DROP TABLE `daychanges`;
  242.     CREATE TABLE `daychanges` SELECT * FROM `const_table` WHERE `week` = '$week', `group` = '$group_id', `day` = '$day'; INSERT INTO ");
  243.    
  244.    
  245.     return $row[0];
  246. }
  247.  
  248. function gen_changed()
  249. {
  250.     include("Classes/sql.php");
  251.     mysqli_query($sql, "
  252.         DROP TABLE `changed`;
  253.     ");
  254.     $tmp =  mysqli_query($sql, "
  255.         SELECT  `week`
  256.         FROM  `changes`
  257.         LIMIT 0 , 1");
  258.     $week = $tmp->fetch_row()[0];
  259.     $tmp = mysqli_query($sql, "
  260.         SELECT  `day`
  261.         FROM  `changes`
  262.         LIMIT 0 , 1");
  263.     $day = $tmp->fetch_row()[0];
  264.     $q="
  265.         CREATE TABLE  `changed` AS SELECT  `group`, `num` , `subj_1` ,  `subj_2` ,  `teach_1` ,  `teach_2` ,  `hall_1` ,  `hall_2`
  266.         FROM  `const_table`
  267.         WHERE  `day` = '$day' AND `week` = '$week'
  268.     ";
  269.     mysqli_query($sql, $q);
  270.     $tmp = mysqli_query($sql, "SELECT `num`, `groups` FROM `changes` WHERE 1");
  271.     $num = Array();
  272.     $group = Array();
  273.     while($row = $tmp->fetch_row())
  274.     {
  275.     $num[] = $row[0];
  276.     $group[] = $row[1];
  277.     }
  278.     for ($i=0; $i<count($num); $i++)
  279.     {
  280.         $tmp = mysqli_query($sql, "
  281.         SELECT `subgroups`, `removesubs`, `lessons`, `teachers`, `hall`
  282.         FROM `changes`
  283.         WHERE `num`='$num[$i]' AND `groups`='$group[$i]'");
  284.         $row = $tmp->fetch_row();
  285.  
  286.         $sub = $row[0];
  287.         $resub = $row[1];
  288.         $lesson = $row[2];
  289.         $teacher = $row[3];
  290.         $hall = $row[4];
  291.        
  292.         if($resub = 0)
  293.         {
  294.             mysqli_query($sql, "
  295.             UPDATE `changed`
  296.             SET `subj_1` = '', `subj_2` = '', `teach_1` = '', `teach_2` = '', `hall_1` = '', `hall_2` = ''
  297.             WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  298.         }
  299.         if($resub = 1)
  300.         {
  301.             mysqli_query($sql, "
  302.             UPDATE `changed`
  303.             SET `subj_1` = '', `teach_1` = '', `hall_1` = ''
  304.             WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  305.         }
  306.         if($resub = 2)
  307.         {
  308.             mysqli_query($sql, "
  309.             UPDATE `changed`
  310.             SET `subj_2` = '', `teach_2` = '', `hall_2` = ''
  311.             WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  312.         }
  313.        
  314.         if($sub == 0)
  315.         {
  316.             mysqli_query($sql, "
  317.             UPDATE `changed`
  318.             SET `subj_1` = '$lesson', `subj_2` = '$lesson', `teach_1` = '$teacher', `teach_2` = '$teacher', `hall_1` = '$hall', `hall_2` = '$hall'
  319.             WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  320.            
  321.         }
  322.         if($sub == 1)
  323.         {
  324.             mysqli_query($sql, "
  325.             UPDATE `changed`
  326.             SET `subj_1` = '$lesson', `subj_2` = '', `teach_1` = '$teacher', `teach_2` = '', `hall_1` = '$hall', `hall_2` = ''
  327.             WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  328.            
  329.         }
  330.         if($sub == 2)
  331.         {
  332.             mysqli_query($sql, "
  333.             UPDATE `changed`
  334.             SET `subj_1` = '', `subj_2` = '$lesson', `teach_1` = '', `teach_2` = '$teacher', `hall_1` = '', `hall_2` = '$hall'
  335.             WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  336.            
  337.         }
  338.     }
  339. }
  340.  
  341. function get_groups()
  342. {
  343.     include("Classes/sql.php");
  344.     return mysqli_query($sql, "SELECT * FROM groups WHERE 1");
  345. }
  346.  
  347. function get_timetable($group, $subgroup)
  348. {
  349.     include("Classes/sql.php");
  350.     $tmp = mysqli_query($sql, "SELECT `date` FROM `changes` LIMIT 0, 1;");
  351.     $date = $tmp->fetch_row()[0];
  352.     $tmp = mysqli_query($sql, "SELECT subj_$subgroup, teach_$subgroup, hall_$subgroup FROM changed WHERE `group`=$group");
  353.     echo '
  354.     <div align="center">
  355.         <div align="center">Расписание на '.$date.'</div>
  356.     ';
  357.     while($row = $tmp->fetch_row())
  358.     {
  359.         echo '<p>'.$row[0].'('.$row[1].') ауд. №'.$row[2];
  360.     }
  361.     echo '
  362.     </div>
  363.     ';
  364. }
  365.  
  366. /*gen_days('1week.xls');
  367. gen_groups('1week.xls');
  368. create_timetable('1week.xls', 1, true);
  369. create_timetable('2week.xls', 2, false);*/
  370. function static_table($name1, $name2)
  371. {
  372.     gen_days($name1);
  373.     gen_groups($name1);
  374.     create_timetable($name1, 1, true);
  375.     create_timetable($name2, 2, false);
  376. }
  377.  
  378. function change_table($name)
  379. {
  380.     gen_changes($name);
  381.     gen_changed();
  382. }
  383.  
  384. ?>
  385. //load.php
  386. <?php
  387. require_once('timetable.php');
  388. if(isset($_FILES['first']) && isset($_FILES['second']))
  389. {
  390.     static_table($_FILES['first']['tmp_name'], $_FILES['second']['tmp_name']);
  391. }
  392. else if(isset($_FILES['changes']))
  393. {
  394.     change_table($_FILES['changes']['tmp_name']);
  395. }
  396.  
  397.  
  398. echo '
  399. <div>
  400. <form action="load.php" method="post" enctype="multipart/form-data">
  401. <p>Основное расписание:
  402. <p><input type="file" name="first" />
  403. <p><input type="file" name="second" />
  404. <p><input type="submit" value="Отправить" />
  405. </form>
  406. </div>
  407. <p>
  408. <div>
  409. <form action="load.php" method="post" enctype="multipart/form-data">
  410. <p>Лист замен:
  411. <p><input type="file" name="changes" />
  412. <p><input type="submit" value="Отправить" />
  413. </form>
  414. </div>
  415. ';
  416. ?>
  417. //get.php
  418. <?php
  419. include('timetable.php');
  420. $groups = get_groups();
  421.  
  422. echo '
  423. <div>
  424. <form action="get.php" method="post" enctype="multipart/form-data">
  425. Расписание:
  426. <p><select name="group">
  427.    <option selected disabled>Выберите группу</option>
  428. ';
  429. while($row = $groups->fetch_row())
  430. {
  431.     echo '<option value="'.$row[0].'">'.$row[1].'</option>';
  432. }
  433. echo '   </select>
  434. <select name="subgroup">
  435.    <option selected disabled>Выберите подгруппу</option>
  436. <option value="1">1</option>
  437. <option value="2">2</option>
  438. </select>
  439. <input type="submit" value="Получить" />
  440. </form>
  441. </div>
  442. ';
  443. if (isset($_POST['group']) && isset($_POST['subgroup']))
  444. {
  445.     get_timetable($_POST['group'], $_POST['subgroup']);
  446. }
  447. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement