Skip to content
Snippets Groups Projects
Commit f5a6dd96 authored by Hotte's avatar Hotte
Browse files

+lsfview minimal parser TODO:Json&View

parent f295e988
No related branches found
No related tags found
No related merge requests found
config.php
<?php
// Universal
$SEARCH_URL = "https://www.lsf.tu-dortmund.de/qisserver/rds?state=wsearchv&search=1";
$SUBJECT_LIST_SS = array (
"Datenstrukturen, Algorithmen und Programmierung 1",
"Mathematik für Informatik II",
"Datenstrukturen, Algorithmen und Programmierung 2",
"Betriebssysteme",
"Elektrotechnik und Nachrichtentechnik",
"Softwaretechnik",
"Informationssysteme",
"Grundbegriffe der Theoretischen Informatik",
"Höhere Mathematik II (ET/IT)"
);
$SUBJECT_LIST_WS = array (
"Datenstrukturen, Algorithmen und Programmierung 1",
"Rechnerstrukturen",
"Mathematik für Informatik I",
"Logik für Informatiker",
"Funktionale Programmierung",
"Rechnernetze und verteilte Systeme",
"Wahrscheinlichkeitsrechnung und Mathematische Statistik für Informatiker",
"Höhere Mathematik I (ET/IT/I-I)",
"Höhere Mathematik III (P/ET/ITMP/I-I)"
);
// JSON
$JSON_NAME = "../../tmp/lsfView.json";
$JSON_INC_NR = false;
$JSON_INC_SHORT = false;
?>
\ No newline at end of file
<?php
class EVENT {
private $day = "";
private $startTime = 0;
private $endTime = 0;
private $room = "";
function __construct($day,$startTime,$endTime,$room) {
$this->day = $day;
$this->startTime = $startTime;
$this->endTime = $endTime;
$this->room = $room;
}
public function getDay() {
return $this->day;
}
public function getStartTime() {
return $this->startTime;
}
public function getEndTime() {
return $this->endTime;
}
public function getRoom() {
return $this->room;
}
public function setDay($day) {
$this->day = $day;
}
public function setStartTime($startTime) {
$this->startTime = $startTime;
}
public function setEndTime($endTime) {
$this->endTime = $endTime;
}
public function setRoom($room) {
$this->room = $room;
}
public function toJson() {
$json = '{\n';
$json = '"Day": '.$this->day;
$json = '"StartTime": '.$this->startTime;
$json = '"EndTime": '.$this->endTime;
$json = '"Room": '.$this->room;
$json = '}\n';
return $json;
}
public function __toString() {
return "\nDay: " . $this->day . ", StartTime: " . $this->startTime . ", EndTime: ". $this->endTime . ", Room: ".$this->room;
}
}
?>
\ No newline at end of file
<?php
function booleanToString($bool) {
if ($bool) {
return "True";
} else {
return "False";
}
}
//TODO:
function toJson($subjects, $jsonName, $inc_nr = true, $inc_short = true) {
$kommata = false;
$json = '{';
foreach ( $subjects as $subject ) {
if ($kommata) {
$json .= ',';
} else {
$kommata = true;
}
$json .= $subject->toJson ( $inc_nr, $inc_short);
}
$json .= "}";
file_put_contents ( $jsonName, $json );
}
function parsSubject($html,$subjectName) {
$subject = new SUBJECT($subjectName);
$subject->setNr($html->find('td',2)->innertext);
$subject->setShort($html->find('td',3)->innertext);
$html = $html->find('table[summary="Übersicht über alle Veranstaltungstermine"]',0);
$html = $html->find('tr');
array_shift($html);
foreach($html as $event) {
$subject->addEvent(new EVENT(fixDay($event->children()[1]->innertext),fixTimeStart($event->children()[2]->innertext),fixTimeEnd($event->children()[2]->innertext),$event->children()[5]->first_child()->innertext));
}
return $subject;
}
function fixDay($day){
$day = str_replace(' ',"",$day);
$day = str_replace(' ',"",$day);
switch($day){
case "Mo.":
$day = 0;
break;
case "Di.":
$day = 1;
break;
case "Mi.":
$day = 2;
break;
case "Do.":
$day = 3;
break;
case "Fr.":
$day = 4;
break;
case "Sa.":
$day = 5;
break;
case "So.":
$day = 6;
break;
default:
$day = -1;
}
return $day;
}
function fixTimeStart($time){
$time = str_replace(' ',"",$time);
$time = str_replace(' ',"",$time);
$time = html_entity_decode($time);
$time = substr ( $time , 0 , 5 );
return $time;
}
function fixTimeEnd($time){
$time = str_replace(' ',"",$time);
$time = str_replace(' ',"",$time);
$time = html_entity_decode($time);
$time = substr ( $time , 12 , 15);
return $time;
}
?>
\ No newline at end of file
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
require 'config.php';
require 'simple_html_dom.php';
require 'subject.php';
require 'event.php';
require 'helper.php';
// check semester
switch (date("n")) {
case 1:
$SEMESTER = "2";
break;
case 2:
$SEMESTER = "2";
break;
case 3:
$SEMESTER = "2";
break;
case 4:
$SEMESTER = "1";
break;
case 5:
$SEMESTER = "1";
break;
case 6:
$SEMESTER = "1";
break;
case 7:
$SEMESTER = "1";
break;
case 8:
$SEMESTER = "1";
break;
case 9:
$SEMESTER = "1";
break;
case 10:
$SEMESTER = "2";
break;
case 11:
$SEMESTER = "2";
break;
case 12:
$SEMESTER = "2";
break;
}
// choose correct subject_list
if($SEMESTER == 1){
$SUBJECT_LIST = $SUBJECT_LIST_SS;
echo "SS\n";
} else {
$SUBJECT_LIST = $SUBJECT_LIST_WS;
echo "WS\n";
}
// search subject
$subjects = array ();
foreach ( $SUBJECT_LIST as $SUBJECT ) {
$html = file_get_html ( $SEARCH_URL."&veranstaltung.dtxt=".str_replace(' ',"+",$SUBJECT)."&veranstaltung.semester=".date("Y").$SEMESTER);
if ($html != null) {
$html = $html->find('a[title="Mehr Informationen zu '.$SUBJECT.'"]',0);
if ($html != null) {
$HREF = $html->href;
$html->clear();
unset($html);
$html = file_get_html ( html_entity_decode($HREF) );
if ($html != null) {
array_push ( $subjects, parsSubject ($html,$SUBJECT) );
} else {
echo "\"".$SUBJECT."\"-Site nicht aufrufbar\n";
}
} else {
echo "\"".$SUBJECT."\"-Search liefert kein passendes Ergebnis\n";
}
} else {
echo "\"".$SUBJECT."\"-Search nicht aufrufbar.\n";
}
}
echo $subjects[1].toJson();
toJson ( $subjects, $JSON_NAME, $JSON_INC_NR, $JSON_INC_SHORT);
?>
\ No newline at end of file
this.tabtime=20;
this.checkShowCondition = function() {
return 3*this.tabtime;
}
this.show = function() {
// switch tabs
this.interval=setInterval(function() {
var currentTab = $("#tabs").tabs('option', 'active');
switch (currentTab) {
case 0:
currentTab = 1;
break;
case 1:
currentTab = 2;
break;
case 2:
currentTab = 0;
break;
default:
currentTab = 0;
}
$("#tabs").tabs({
active : currentTab
});
}, this.tabtime*1000);
}
this.hide = function() {
clearInterval(this.interval);
}
this.loaded = function(panel, config) {
// reload data
setInterval(function() {
getMensaPlan();
}, 30*60*1000);
function getMensaPlan() {
$.getJSON("tmp/mensaPlan.json?"+( new Date().getTime()) ).done(function(json) {
fillTable(json);
}).fail(function(jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
});
}
function fillTable(json) {
var date = new Date();
var next = 0;
if (date.getHours() >= 15) {
next = 1;
}
switch (date.getDay() + next) {
case 0:
var day = json.montag;
break;
case 1:
var day = json.montag;
break;
case 2:
var day = json.dienstag;
break;
case 3:
var day = json.mittwoch;
break;
case 4:
var day = json.donnerstag;
break;
case 5:
var day = json.freitag;
break;
case 6:
var day = json.montag;
break;
case 7:
var day = json.montag;
break;
}
if (next) {
document.getElementById("mensaPlanTitleBar").innerHTML = "Mensaplan von MORGEN dem "
+ day[0].date;
} else {
document.getElementById("mensaPlanTitleBar").innerHTML = "Mensaplan von HEUTE dem "
+ day[0].date;
}
var tableBody1 = document.getElementById("mensaPlanTable1Body");
var tableBody2 = document.getElementById("mensaPlanTable2Body");
var tableBody3 = document.getElementById("mensaPlanTable3Body");
tableBody1.innerHTML = ""; // clear
tableBody2.innerHTML = ""; // clear
tableBody3.innerHTML = ""; // clear
var a = 0;
var b = 0;
var c = 0;
for (var i = 0; i < day.length; i++) {
var gericht = day[i];
var row = "";
switch (gericht.counter) {
case 1:
var row = tableBody1.insertRow(a);
a++;
break;
case 2:
var row = tableBody1.insertRow(a);
a++;
break;
case 3:
var row = tableBody1.insertRow(a);
a++;
break;
case 4:
var row = tableBody3.insertRow(c);
c++;
break;
case 5:
var row = tableBody1.insertRow(a);
a++;
break;
case 6:
var row = tableBody2.insertRow(b);
b++;
break;
case 7:
var row = tableBody3.insertRow(c);
c++;
break;
case 8:
var row = tableBody3.insertRow(c);
c++;
break;
default:
var row = tableBody3.insertRow(c);
c++;
}
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
cell1.innerHTML = gericht.shortText;
var art = "";
var first = true;
if (gericht.rind) {
art += "R";
}
if (!first) {
art += " ";
first = false;
}
if (gericht.schwein) {
art += "S";
}
if (!first) {
art += " ";
first = false;
}
if (gericht.gefluegel) {
art += "G";
}
if (!first) {
art += " ";
first = false;
}
if (gericht.fisch) {
art += "F";
}
if (!first) {
art += " ";
first = false;
}
if (gericht.vegetarisch) {
art += "V";
}
if (!first) {
art += " ";
first = false;
}
if (gericht.vegan) {
art += "N";
}
cell2.innerHTML = art;
var img = "";
switch (gericht.counter) {
case 1:
img = "icon-menue-1.png";
break;
case 2:
img = "icon-menue-2.png";
break;
case 3:
img = "icon-tagesgericht.png";
break;
case 4:
img = "icon-vegetarisch.png";
break;
case 5:
img = "icon-aktionsteller.png";
break;
case 6:
img = "icon-grillstation.png";
break;
case 7:
img = "icon-fisch.png";
break;
case 8:
img = "icon-vegan.png";
break;
default:
img = "ERROR";
}
if (gericht.counter != 0) {
gericht.counter = cell3.innerHTML = '<img src="panels/mensaPlan/img/'
+ img + '" />';
}
}
}
getMensaPlan();
$(function() {
$("#tabs").tabs();
});
}
This diff is collapsed.
/* Table */
#mensaPlanTable {
font-weight: bold;
}
#mensaPlanTableHead {
background-color: #0000f0;
color: #000000;
}
#mensaPlanTableBody {
background-color: #ffffff;
color: #000000;
}
#mensaPlanTitleBar {
text-align: center;
}
\ No newline at end of file
<?php
class SUBJECT {
private $name = "";
private $nr = 0;
private $short = "";
private $events = array ();
function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
public function getNr() {
return $this->nr;
}
public function getShort() {
return $this->short;
}
public function getEvents() {
return $this->events;
}
public function setName($name) {
$this->name = $name;
}
public function setNr($nr) {
$this->nr = $nr;
}
public function setShort($short) {
$this->short = $short;
}
public function addEvent($event) {
array_push ( $this->events, $event );
}
public function addEvents($events) {
foreach ( $events as $event ) {
array_push ( $this->events, $event );
}
}
//TODO
public function toJson($inc_nr = true, $inc_short = true) {
$kommata = false;
$json = '"Name": '. $this->name;
$json = '"Nr": '. $this->nr;
$json = '"Short": '. $this->short;
$json .= '"Events": [';
foreach ( $this->events as $event ) {
if ($kommata) {
$json .= ',';
} else {
$kommata = true;
}
$json .= $event->toJson ();
}
$json .= ']';
return $json;
}
public function __toString() {
$string = "\nName: " . $this->name . ", Nr: " . $this->nr . ", Short: ".$this->short. ", Events: ";
foreach ( $this->events as $event ) {
$string .= $event;
}
return $string."\n";
}
}
?>
\ No newline at end of file
<div id="tabs">
<div id="mensaPlanTitleBar"></div>
<ul>
<li><a href="#tab-1">Normale Counter</a></li>
<li><a href="#tab-2">Grill Counter</a></li>
<li><a href="#tab-3">Sonstige Counter</a></li>
</ul>
<div id="tab-1">
<table id="mensaPlanTable1" style="width:100%;height:100%">
<tbody id="mensaPlanTable1Body">
</tbody>
</table>
</div>
<div id="tab-2">
<table id="mensaPlanTable2" style="width:100%;height:100%">
<tbody id="mensaPlanTable2Body">
</tbody>
</table>
</div>
<div id="tab-3">
<table id="mensaPlanTable3" style="width:100%;height:100%">
<tbody id="mensaPlanTable3Body">
</tbody>
</table>
</div>
</div>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment