From 9da19fc186eaefe9b6e87b50fc80a60619f36d00 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Thu, 1 Nov 2012 17:03:35 +0100 Subject: [PATCH] fixed invalid tempdir with sys_get_temp_dir() included more details of address in description --- php/campus/cocal.db | Bin 5120 -> 5120 bytes php/campus/cocal.php | 133 ++++++++++++++++++++++++++----------------- 2 files changed, 80 insertions(+), 53 deletions(-) diff --git a/php/campus/cocal.db b/php/campus/cocal.db index e81ca4ce53287b764af8cc9a6396511e8da220ce..c71f666c285b61c55a8f32ed0bde784511db317f 100644 GIT binary patch literal 5120 zcmeHK&5I*N6tC(^W~OH+vm0axqLG3{m}oL~RVO=%IA~|+?TI__qbJU=>|yAc)NF!1 z-Lu^tStJOuN4*N(JPF)XSK;Uhmdb|S2U9DoqKgfRdL0|4atGii{&h-cEK-zQ_Kp6jUn@ng8zl&aUZ33zZ@4_W_nlGXOL<>9v`=J*IPp1= z;1K;OVvvtJ@tU=afsBDipMl)+B6qTgE&}u`+CZP7J@hiVfxbW*x{KaHeRL6hjDAP& zq3_U#k3JijhZzHZ!@v?ML(-($m}+`a3Uwh6?Sd3EB4)^WDd;UR(_EGUsSAM=q!25h zOHvRDG>x2_njwoqpn8LjHA>V(xHQ%p+QQVb^?501d>@^XIVr^2XgR} z_dzj+8%lJd$YnwSp&Bf3hnK-MfWAa7qRJo2r%I$~@Mri5?86ec13uuB|E)Eb)pF(O zf>KgeNWx3Ui{55o6ga0JG2Ga6j!#A*?hd1f<-IM;i32~;wO6ed3TpW|j(nUW6B74M zZ@aF?f(e*TgL6@vaWnyU1iHPXmS5!P6^>3=H;3*~csTF_k6+4${3o`6%$P9$sR1}u^!SZNDd(-!34w}R8#+&;W@`gssKj*E>hUbTV>G_Cex+8}avg9!Lq z7__dcg>_>K?^5o|eA<`wv-?s9-wR(_b1}J(@c<z% zZJQ?pXy_c;$;Z&vUvZ%iiHq%vYxqo5Y`>zI)}>s`Xh{+ylO{#X3;~oA(Aj;;w3_=Nw7xE?qM%)>2h`ee*icTCK4ou7kUB}Q6GnTV>vlW`W=m;_O#1p3Wz z4hPKZ@`ELM;fCY746lmdR=_Q?X1uX&)U4;BT5fQQig1M{dEI5M6G;eSwQmI`~%9!On%anCZL@CRd7w6f-OE f`ImF1oPi(Z=iz)@T8g5i#ut)*FD;!;{9SnfO0w&O delta 261 zcmZqBXwY!f(ozV?$ShV!%gjktNY2kINzBYER!GcK2oChgEJ;-`(lb;@Ni0cBN-R!Q z(9&YiD1Cg3g@J*A5s3e=GBB`g7GychTpz%|!63k3!^pxQ0hC~1Xn?3-04Zf)&;aq7 z*mxAwG&C~vQc^1zG>Y=`bAk4hmgIv46bv;Pz(NeBU>y*1ZiCHX;}MdOx(#$fPAXIl zM5Qr9a#3m`(2XUD%s{!xvdmk6)*WF2y66NG3kSmwW+3Y=^TY;0R%W1~P+kBJl2iaE E09u_t!2kdN diff --git a/php/campus/cocal.php b/php/campus/cocal.php index 9b287b0..ee5ef69 100644 --- a/php/campus/cocal.php +++ b/php/campus/cocal.php @@ -7,7 +7,7 @@ $homePath = 'office/default.asp'; $loginPath = 'office/views/campus/redirect.asp'; $calPath = 'office/views/calendar/iCalExport.asp'; $logoutPath = 'office/system/login/logoff.asp'; -$roomPath = 'rwth/all/room.asp' +$roomPath = 'rwth/all/room.asp'; /* Functions */ function curl_fixcookie($cookieFile) { @@ -61,44 +61,47 @@ function curl_request($method, $url, $cookieFile = false, $params = array()) { } function get_address($db, $room) { - $result = sqlite_query($db, 'SELECT address FROM rooms WHERE id = "' . sqlite_escape_string($room). '";'); - return ($result && sqlite_valid($result)) ? sqlite_fetch_array($result) : false; + return $db->querySingle('SELECT * FROM rooms WHERE id = "' . $db->escapeString($room). '";', true); } function set_address($db, $room, $address) { - sqlite_exec($db, 'INSERT OR REPLACE INTO rooms VALUES ( - "' . sqlite_escape_string($address['id']) . '", - "' . sqlite_escape_string($address['address']) . '", - "' . sqlite_escape_string($address['cluster']) . '", - "' . sqlite_escape_string($address['building']) . '", - "' . sqlite_escape_string($address['building_no']) . '", - "' . sqlite_escape_string($address['room']) . '", - "' . sqlite_escape_string($address['room_no']) . '", - "' . sqlite_escape_string($address['floor']) . '" - );', $error); + $db->exec('INSERT OR REPLACE INTO rooms VALUES ( + "' . $db->escapeString($room) . '", + "' . $db->escapeString(@$address['address']) . '", + "' . $db->escapeString(@$address['cluster']) . '", + "' . $db->escapeString(@$address['building']) . '", + "' . $db->escapeString(@$address['building_no']) . '", + "' . $db->escapeString(@$address['room']) . '", + "' . $db->escapeString(@$address['room_no']) . '", + "' . $db->escapeString(@$address['floor']) . '" + );'); } function crawl_address($room) { - $response = curl_request('GET', $basePath . $roomPath . '?room=' . urlencode($room)); + global $baseUrl, $roomPath; $matches = array(); - preg_match("/H.rsaalgruppe<\/td>(?P[^<]*)<\/td>/", $response, $matches); - preg_match("/Geb.udeanschrift<\/td>(?P
[^<]*)<\/td>/", $response, $matches); - preg_match("/Geb.udebezeichnung<\/td>(?P[^<]*)<\/td>/", $response, $matches); - preg_match("/Geb.udenummer<\/td>(?P[^<]*)<\/td>/", $response, $matches); - preg_match("/Raumname<\/td>(?P[^<]*)<\/td>/", $response, $matches); - preg_match("/Raumnummer<\/td>(?P[^<]*)<\/td>/", $response, $matches); - preg_match("/Geschoss<\/td>(?P[^<]*)<\/td>/", $response, $matches); + $response = curl_request('GET', $baseUrl . $roomPath . '?room=' . urlencode($room)); - foreach ($matches as $key => $value) { - if (is_numeric($key) unset($matches[$key]); + $infos = array( + 'cluster' => 'H.rsaalgruppe', + 'address' => 'Geb.udeanschrift', + 'building' => 'Geb.udebezeichung', + 'building_no' => 'Geb.udenummer', + 'room' => 'Raumname', + 'room_no' => 'Raumnummer', + 'floor' => 'Geschoss' + ); + + foreach ($infos as $index => $pattern) { + $match = array(); + + if (preg_match('/' . $pattern . '<\/td>([^<]*)<\/td>/', $response, $match)) { + $matches[$index] = preg_replace('/[ ]{2,}/sm', ' ', utf8_encode($match[1])); + } } - array_walk($matches, function ($value) { - return preg_replace('/[ ]{2,}/sm', ' ', utf8_encode($value)); - }); - - return (count($matches['address']) ? $matches : false; + return (count($matches)) ? $matches : false; } function error() { @@ -135,13 +138,15 @@ else if (!empty($_GET['u']) && !empty($_GET['p'])) { if (isset($matrnr) && isset($passwd)) { /* perform login to get session cookie */ - $cookieFile = tempnam('/tmp', 'campus_'); + $cookieFile = tempnam(sys_get_temp_dir(), 'campus_'); /* open database */ - $db = sqlite_open('cocal.db'); - $result = sqlite_query($db, "SELECT name FROM sqlite_master WHERE type='table' AND name='rooms';"); - if (!sqlite_valid($result)) { - sqlite_exec($db, 'CREATE TABLE rooms (name VARCHAR(255), address VARCHAR(255));'); + $db = new SQLite3('cocal.db', SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE); + + /* check schema */ + $result = $db->querySingle('SELECT name FROM sqlite_master WHERE type="table" AND name="rooms";'); + if (!$result) { + $db->exec('create table rooms (id VARCHAR(255) PRIMARY KEY, address VARCHAR(255), cluster VARCHAR(255), building VARCHAR(255), building_no INTEGER, room VARCHAR(255), room_no INTEGER, floor VARCHAR(255));'); } curl_request('GET', $baseUrl . $homePath, $cookieFile); @@ -188,7 +193,7 @@ if (isset($matrnr) && isset($passwd)) { } } - $location = ''; + $address = array(); $lines = explode("\r\n", $body); foreach ($lines as $line) { if ($line) { @@ -196,38 +201,60 @@ if (isset($matrnr) && isset($passwd)) { switch ($key) { case 'END': if ($value == 'VEVENT') flush(); - unset($location); + $address = array(); break; case 'LOCATION': - $location = $value; - $room = strtok($location, " "); - $address = get_address($db, $room); + $matches = array(); + if (preg_match('/^([0-9]+\|[0-9]+) /', $value, $matches)) { + $room = $matches[1]; + $address = get_address($db, $room); - if ($address === false) { - $crawled = crawl_address($room); - set_address($db, $room, $address); - } + if (empty($address)) { + $address = crawl_address($room); + set_address($db, $room, $address); + } - if ($address) { - $value = $address['address'] . ', Aachen'; + if (isset($address['address'])) { + $value = $address['address'] . ', Aachen'; + } } break; case 'DESCRIPTION': - if ($value) $value .= '\n'; - $value .= $location; + $additional = $value; + $value = ''; + + if (@$address['building_no'] && @$address['room_no']) + $value .= '\n' . $address['building_no'] . '|' . $address['room_no']; + + if (@$address['room']) + $value .= ' ' . $address['room']; + + if (@$address['building']) + $value .= '\n' . 'Gebäude: ' . $address['building']; + + if (@$address['floor']) + $value .= '\n' . 'Geschoss: ' . $address['floor']; + + if (@$address['cluster']) + $value .= '\n' . 'Campus: ' . preg_replace('/^Campus /', '', $address['cluster']); + + if ($additional && $additional != 'Kommentar') + $value .= '\n' . $additional; + + $value = preg_replace('/^\\\n/', '', $value); + break; } - - echo $key . ':' . $value; + echo $key . ':' . trim($value); } echo "\r\n"; } /* cleanup */ unlink($cookieFile); - sqlite_close($db); + $db->close(); } else { echo ''; @@ -237,9 +264,9 @@ else { /dev/nulll - CampusOffice to Google Sync - - - + + + - +