Advertisement
Golden_Rus

timetable core v1.0

Feb 19th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 14.98 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 `$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.                 //Пустая нулевая пара
  167.                     $groups[]=get_group_id($arr[$x][$line]);
  168.                     $days[]=get_day($arr[0][$day]);
  169.                     $num[]=0;
  170.                     $sub_1[]='';
  171.                     $sub_2[]='';
  172.                     $teach_1[]='';
  173.                     $teach_2[]='';
  174.                     $hall_1[]='';
  175.                     $hall_2[]='';
  176.                 //-------------------
  177.                 for($i=$y; $i<=$y+6; $i+=2)
  178.                 {
  179.                     $groups[]=get_group_id($arr[$x][$line]);
  180.                     $days[]=get_day($arr[0][$day]);
  181.                     $num[]=$counter;
  182.                     $sub_1[]=(empty($arr[$x][$i])) ? '' : $arr[$x][$i];
  183.                     $sub_2[]=(empty($arr[$x+2][$i])) ? $arr[$x][$i] : $arr[$x+2][$i];
  184.                     $teach_1[]=(empty($arr[$x][$i+1])) ? '' : $arr[$x][$i+1];
  185.                     $teach_2[]=(empty($arr[$x+2][$i+1])) ? $arr[$x][$i+1] : $arr[$x+2][$i+1];
  186.                     $hall_1[]=(empty($arr[$x+3][$i])) ? '' : $arr[$x+3][$i];
  187.                     $hall_2[]=(empty($arr[$x+1][$i])) ? $arr[$x+3][$i] : $arr[$x+1][$i];
  188.                     $counter++;
  189.                 }
  190.                 //Пустая пятая пара
  191.                     $groups[]=get_group_id($arr[$x][$line]);
  192.                     $days[]=get_day($arr[0][$day]);
  193.                     $num[]=5;
  194.                     $sub_1[]='';
  195.                     $sub_2[]='';
  196.                     $teach_1[]='';
  197.                     $teach_2[]='';
  198.                     $hall_1[]='';
  199.                     $hall_2[]='';
  200.                 //-------------------
  201.                 $x+=4;
  202.             }
  203.             $y+=$day_offset;  
  204.         }
  205.         $line+=$line_offset;
  206.         $y=$line+2;
  207.     }
  208.     add_table($del, $name, $week, $groups, $days, $num, $sub_1, $sub_2, $teach_1, $teach_2, $hall_1, $hall_2);
  209. }
  210.  
  211.  
  212. function gen_changes($patch)
  213. {
  214.     $name='changes';
  215.     include('Classes/StrLevel.php');
  216.     $arr = get_from_excel($patch);
  217.     $title = $arr[0][1];
  218.     preg_match_all('/\((.+)\)/', $title, $day);
  219.     $day=get_day(_strtoupper($day[1][0]));//номер дня недели
  220.     preg_match_all('/(Неделя )(?:([0-9]{1}))/', $title, $week);
  221.     $week=$week[2][0];//номер недели
  222.     preg_match_all('/\S+[.\]\.[0-9]{2}\.[0-9]{4}/', $title, $date);
  223.     $date=$date[0][0];
  224.     $y=5;
  225.     $groups=Array();//группа
  226.     $num=Array();//номер пары
  227.     $lessons=Array();//предмет(замененный)
  228.     $teachers=Array();//преподаватель(замененный)
  229.     $removesubs=Array();//снятая подгруппы
  230.     $subgroups=Array();//добавленная подгруппа
  231.     $hall=Array();//дабавленная аудитория
  232.     while(!empty($arr[0][$y]) && $arr[0][$y] != '')
  233.     {
  234.         $groups[]=get_group_id($arr[0][$y]);
  235.         $num[]=$arr[1][$y];
  236.         $removesubs[]=$arr[2][$y];
  237.         $subgroups[]=$arr[5][$y];
  238.         $lessons[]=$arr[6][$y];
  239.         $teachers[]=$arr[7][$y];
  240.         $hall[]=$arr[8][$y];
  241.         $y++;
  242.     }
  243.     /*print_r($groups);
  244.     print_r($num);
  245.     print_r($removesubs);
  246.     print_r($subgroups);
  247.     print_r($lessons);
  248.     print_r($teachers);
  249.     print_r($hall);*/
  250.     add_changetable($name, $week, $day, $date, $num, $groups, $subgroups, $removesubs, $lessons, $teachers, $hall);
  251. }
  252.  
  253. function generate_table($group)
  254. {
  255.     //`week`, `group`, `day`, `num`, `subj_1`, `subj_2`, `teach_1`, `teach_2`, `hall_1`, `hall_2`
  256.     include("Classes/sql.php");
  257.     $group_id=get_group_id($group);
  258.     $tmp = mysqli_query($sql, "SELECT `week`, `day`, `date` FROM `changes` WHERE 1");
  259.     $row = $tmp->fetch_row();
  260.     $week = $row[0][0];
  261.     $day = $row[0][1];
  262.     $date = $row[0][2];
  263.     $tmp = mysqli_query($sql, "DROP TABLE `daychanges`;
  264.    CREATE TABLE `daychanges` SELECT * FROM `const_table` WHERE `week` = '$week', `group` = '$group_id', `day` = '$day'; INSERT INTO ");
  265.    
  266.    
  267.     return $row[0];
  268. }
  269.  
  270. function gen_changed()
  271. {
  272.     include("Classes/sql.php");
  273.     mysqli_query($sql, "
  274.        DROP TABLE `changed`;
  275.    ");
  276.     $tmp =  mysqli_query($sql, "
  277.        SELECT  `week`
  278.        FROM  `changes`
  279.        LIMIT 0 , 1");
  280.     $week = $tmp->fetch_row()[0];
  281.     $tmp = mysqli_query($sql, "
  282.        SELECT  `day`
  283.        FROM  `changes`
  284.        LIMIT 0 , 1");
  285.     $day = $tmp->fetch_row()[0];
  286.     $q="
  287.        CREATE TABLE  `changed` AS SELECT  `group`, `num` , `subj_1` ,  `subj_2` ,  `teach_1` ,  `teach_2` ,  `hall_1` ,  `hall_2`
  288.        FROM  `const_table`
  289.        WHERE  `day` = '$day' AND `week` = '$week'
  290.    ";
  291.     mysqli_query($sql, $q);
  292.     $tmp = mysqli_query($sql, "SELECT `num`, `groups` FROM `changes` WHERE 1");
  293.     $num = Array();
  294.     $group = Array();
  295.     while($row = $tmp->fetch_row())
  296.     {
  297.     $num[] = $row[0];
  298.     $group[] = $row[1];
  299.     }
  300.     for ($i=0; $i<count($num); $i++)
  301.     {
  302.         $tmp = mysqli_query($sql, "
  303.        SELECT `subgroups`, `removesubs`, `lessons`, `teachers`, `hall`
  304.        FROM `changes`
  305.        WHERE `num`='$num[$i]' AND `groups`='$group[$i]'");
  306.         $row = $tmp->fetch_row();
  307.  
  308.         $sub = $row[0];
  309.         $resub = $row[1];
  310.         $lesson = $row[2];
  311.         $teacher = $row[3];
  312.         $hall = $row[4];
  313.        
  314.         if($resub = 0)
  315.         {
  316.             mysqli_query($sql, "
  317.            UPDATE `changed`
  318.            SET `subj_1` = '', `subj_2` = '', `teach_1` = '', `teach_2` = '', `hall_1` = '', `hall_2` = ''
  319.            WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  320.         }
  321.         if($resub = 1)
  322.         {
  323.             mysqli_query($sql, "
  324.            UPDATE `changed`
  325.            SET `subj_1` = '', `teach_1` = '', `hall_1` = ''
  326.            WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  327.         }
  328.         if($resub = 2)
  329.         {
  330.             mysqli_query($sql, "
  331.            UPDATE `changed`
  332.            SET `subj_2` = '', `teach_2` = '', `hall_2` = ''
  333.            WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  334.         }
  335.        
  336.         if($sub == 0)
  337.         {
  338.             mysqli_query($sql, "
  339.            UPDATE `changed`
  340.            SET `subj_1` = '$lesson', `subj_2` = '$lesson', `teach_1` = '$teacher', `teach_2` = '$teacher', `hall_1` = '$hall', `hall_2` = '$hall'
  341.            WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  342.            
  343.         }
  344.         if($sub == 1)
  345.         {
  346.             mysqli_query($sql, "
  347.            UPDATE `changed`
  348.            SET `subj_1` = '$lesson', `subj_2` = '', `teach_1` = '$teacher', `teach_2` = '', `hall_1` = '$hall', `hall_2` = ''
  349.            WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  350.            
  351.         }
  352.         if($sub == 2)
  353.         {
  354.             mysqli_query($sql, "
  355.            UPDATE `changed`
  356.            SET `subj_1` = '', `subj_2` = '$lesson', `teach_1` = '', `teach_2` = '$teacher', `hall_1` = '', `hall_2` = '$hall'
  357.            WHERE `num`='$num[$i]' AND `group`='$group[$i]';");
  358.            
  359.         }
  360.     }
  361. }
  362.  
  363. function get_groups()
  364. {
  365.     include("Classes/sql.php");
  366.     return mysqli_query($sql, "SELECT * FROM groups WHERE 1");
  367. }
  368.  
  369. function get_timetable($group, $subgroup)
  370. {
  371.     include("Classes/sql.php");
  372.     $tmp = mysqli_query($sql, "SELECT `date` FROM `changes` LIMIT 0, 1;");
  373.     $date = $tmp->fetch_row()[0];
  374.     $tmp = mysqli_query($sql, "SELECT subj_$subgroup, teach_$subgroup, hall_$subgroup FROM changed WHERE `group`=$group");
  375.     echo '
  376.    <div align="center">
  377.        <div align="center">Расписание на '.$date.'</div>
  378.    ';
  379.     while($row = $tmp->fetch_row())
  380.     {
  381.         echo '<p>'.$row[0].'('.$row[1].') ауд. №'.$row[2];
  382.     }
  383.     echo '
  384.    </div>
  385.    ';
  386. }
  387.  
  388. /*gen_days('1week.xls');
  389. gen_groups('1week.xls');
  390. create_timetable('1week.xls', 1, true);
  391. create_timetable('2week.xls', 2, false);*/
  392. function static_table($name1, $name2)
  393. {
  394.     gen_days($name1);
  395.     gen_groups($name1);
  396.     create_timetable($name1, 1, true);
  397.     create_timetable($name2, 2, false);
  398. }
  399.  
  400. function change_table($name)
  401. {
  402.     gen_changes($name);
  403.     gen_changed();
  404. }
  405.  
  406. ?>
  407.  
  408. //load.php
  409. <?php
  410. require_once('timetable.php');
  411. if(isset($_FILES['first']) && isset($_FILES['second']))
  412. {
  413.     static_table($_FILES['first']['tmp_name'], $_FILES['second']['tmp_name']);
  414. }
  415. else if(isset($_FILES['changes']))
  416. {
  417.     change_table($_FILES['changes']['tmp_name']);
  418. }
  419.  
  420.  
  421. echo '
  422. <div>
  423. <form action="load.php" method="post" enctype="multipart/form-data">
  424. <p>Основное расписание:
  425. <p><input type="file" name="first" />
  426. <p><input type="file" name="second" />
  427. <p><input type="submit" value="Отправить" />
  428. </form>
  429. </div>
  430. <p>
  431. <div>
  432. <form action="load.php" method="post" enctype="multipart/form-data">
  433. <p>Лист замен:
  434. <p><input type="file" name="changes" />
  435. <p><input type="submit" value="Отправить" />
  436. </form>
  437. </div>
  438. ';
  439. ?>
  440.  
  441. //get.php
  442. <?php
  443. include('timetable.php');
  444. $groups = get_groups();
  445.  
  446. echo '
  447. <div>
  448. <form action="get.php" method="post" enctype="multipart/form-data">
  449. Расписание:
  450. <p><select name="group">
  451.   <option selected disabled>Выберите группу</option>
  452. ';
  453. while($row = $groups->fetch_row())
  454. {
  455.     echo '<option value="'.$row[0].'">'.$row[1].'</option>';
  456. }
  457. echo '   </select>
  458. <select name="subgroup">
  459.   <option selected disabled>Выберите подгруппу</option>
  460. <option value="1">1</option>
  461. <option value="2">2</option>
  462. </select>
  463. <input type="submit" value="Получить" />
  464. </form>
  465. </div>
  466. ';
  467. if (isset($_POST['group']) && isset($_POST['subgroup']))
  468. {
  469.     get_timetable($_POST['group'], $_POST['subgroup']);
  470. }
  471. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement