diff options
author | Simon Rettberg | 2014-06-05 18:05:43 +0200 |
---|---|---|
committer | Simon Rettberg | 2014-06-05 18:05:43 +0200 |
commit | e43590efd21454411e221b3f5093c3681aa345d8 (patch) | |
tree | 417d5b578bcf2936047a38d73ee438daa273d636 | |
parent | Handle message rendering a bit different if running in AJAX mode (diff) | |
parent | fancier news page + comments (diff) | |
download | slx-admin-e43590efd21454411e221b3f5093c3681aa345d8.tar.gz slx-admin-e43590efd21454411e221b3f5093c3681aa345d8.tar.xz slx-admin-e43590efd21454411e221b3f5093c3681aa345d8.zip |
Merge branch 'master' of dnbd3:openslx-ng/slx-admin
-rw-r--r-- | apis/news.inc.php | 26 | ||||
-rw-r--r-- | apis/update.inc.php | 32 | ||||
-rw-r--r-- | inc/message.inc.php | 4 | ||||
-rw-r--r-- | modules/news.inc.php | 63 | ||||
-rw-r--r-- | templates/main-menu.html | 1 | ||||
-rw-r--r-- | templates/page-news.html | 28 |
6 files changed, 150 insertions, 4 deletions
diff --git a/apis/news.inc.php b/apis/news.inc.php new file mode 100644 index 00000000..ace41b21 --- /dev/null +++ b/apis/news.inc.php @@ -0,0 +1,26 @@ +<?php + +header('Content-Type: application/xml; charset=utf-8'); + +// Fetch news from DB +$row = Database::queryFirst('SELECT title, content, dateline FROM news ORDER BY dateline DESC LIMIT 1'); +if ($row !== false ) { + + echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n"; + echo "<news>" . "\n"; + echo "\t" . '<headline>' . "\n"; + echo "\t\t" . $row['title'] . "\n"; + echo "\t" . '</headline>' . "\n"; + echo "\t" . "<info>" . "\n"; + echo "\t\t" . $row['content'] . "\n"; + echo "\t" . '</info>' . "\n"; + echo "\t" . "<date>" . "\n"; + echo "\t\t" . $row['dateline'] . "\n"; + echo "\t" . "</date>" . "\n"; + echo "</news>"; + +} else { + // no news in DB, output a 'null' news xml + echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n"; + echo "<news>null</news>"; +} diff --git a/apis/update.inc.php b/apis/update.inc.php index 4ec94882..bab6bcea 100644 --- a/apis/update.inc.php +++ b/apis/update.inc.php @@ -1,6 +1,6 @@ <?php -$targetVersion = 2; +$targetVersion = 3; // ####################### @@ -21,7 +21,7 @@ if (!$function()) $currentVersion++; -$ret = Database::exec("INSERT INTO property (name, value) VALUES ('webif-version', :version)", array('version' => $currentVersion), true); +$ret = Database::exec("INSERT INTO property (name, value) VALUES ('webif-version', :version) ON DUPLICATE KEY UPDATE value = VALUES(value)", array('version' => $currentVersion), false); if ($ret === false) die('Writing version information back to DB failed. Next update will probably break.'); @@ -41,6 +41,7 @@ function update_1() { $res = Database::simpleQuery("DESCRIBE property", array(), false); $type = false; + if ($res === false) return; while ($row = $res->fetch(PDO::FETCH_ASSOC)) { if ($row['Field'] !== 'dateline') continue; $type = $row['Type']; @@ -54,5 +55,30 @@ function update_1() return true; } +// ####################### -// ################
\ No newline at end of file +// ##### 2014-06-05 +// Add 'news' table to database schema +function update_2() +{ + $res = Database::simpleQuery("show tables", array(), false); + $found = false; + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + if ($row['Tables_in_openslx'] !== 'news') continue; + $found = true; + break; + } + if ($found === false) { + // create table + Database::exec("CREATE TABLE `news` ( + `newsid` int(10) unsigned NOT NULL AUTO_INCREMENT, + `dateline` int(10) unsigned NOT NULL, + `title` varchar(200) DEFAULT NULL, + `content` text, + PRIMARY KEY (`newsid`), + KEY `dateline` (`dateline`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 + "); + } + return true; +}
\ No newline at end of file diff --git a/inc/message.inc.php b/inc/message.inc.php index cca54d73..6df7f07a 100644 --- a/inc/message.inc.php +++ b/inc/message.inc.php @@ -35,7 +35,9 @@ $error_text = array( 'taskmanager-error' => 'Verbindung zum Taskmanager fehlgeschlagen', 'taskmanager-format' => 'Taskmanager hat ungültige Daten zurückgeliefert', 'task-error' => 'Ausführung fehlgeschlagen: {{0}}', - 'invalid-ip' => 'Kein Interface ist auf die Adresse {{0}} konfiguriert' + 'invalid-ip' => 'Kein Interface ist auf die Adresse {{0}} konfiguriert', + 'news-success' => 'News erfolgreich aktualisiert.', + 'news-empty' => 'Es wurde keine News in der Datenbank gefunden.', ); class Message diff --git a/modules/news.inc.php b/modules/news.inc.php new file mode 100644 index 00000000..e08006dd --- /dev/null +++ b/modules/news.inc.php @@ -0,0 +1,63 @@ +<?php + +class Page_News extends Page +{ + + protected function doPreprocess() + { + // load user, we will need it later + User::load(); + + // check if news content were set by the user + $newsTitle = Request::post('news-title'); + $newsContent = Request::post('news-content'); + if ($newsContent !== false && $newsTitle !== false) { + + // we got title and content, save it to DB + Database::exec("INSERT INTO news (dateline, title, content) VALUES (:dateline, :title, :content)", array( + 'dateline' => time(), + 'title' => $newsTitle, + 'content' => $newsContent + )); + // all done, redirect to main news page + Message::addSuccess('news-success'); + Util::redirect('?do=News'); + } + + } + + protected function doRender() + { + // user must be logged in + if (!User::isLoggedIn()) { + Render::addTemplate('page-main-guest'); + return; + } + + // only admins should be able to edit news + if (!User::hasPermission('superadmin')) { + Message::addError('no-permission'); + return; + } + + // fetch the latest news + $row = Database::queryFirst('SELECT * FROM news ORDER BY dateline DESC LIMIT 1'); + if ($row !== false) { + $latestTitle = $row['title']; + $latestContent = $row['content']; + $latestDate = $row['dateline']; + } else { + Message::addError('news-empty'); + } + + // show it to the user + Render::addDialog('bwLehrpool News Verwaltung', false, 'page-news', array( + 'token' => Session::get('token'), + 'latestDate' => date('Y-m-d H:i:s (T)', $latestDate), + 'latestContent' => $latestContent, + 'latestTitle' => $latestTitle + )); + + } + +} diff --git a/templates/main-menu.html b/templates/main-menu.html index a419857c..50fdd211 100644 --- a/templates/main-menu.html +++ b/templates/main-menu.html @@ -26,6 +26,7 @@ <li><a href="?do=VmStore">VM Speicherort</a></li> </ul> </li> + <li><a href="?do=News">News</a></li> </ul> <ul class="nav navbar-nav navbar-right"> {{{loginPanel}}} diff --git a/templates/page-news.html b/templates/page-news.html new file mode 100644 index 00000000..bbf9fd6c --- /dev/null +++ b/templates/page-news.html @@ -0,0 +1,28 @@ +<p>Hier haben Sie die Möglichkeit, die von bwLehrpool-Clients angezeigten News zu editieren. +</p> +<form action="?do=News" method="post"> + + <div class="form-group"> + <div class="panel panel-default"> + <div class="panel-heading"> + <label for="news-title-id">Titel</label> + </div> + <div class="panel-body"> + <input type="text" name="news-title" id ="news-title-id" class="form-control" placeholder="Willkommen!" value="{{latestTitle}}"> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"> + <label for="news-content-id">Inhalt</label> + </div> + <div class="panel-body"> + <textarea name="news-content" id ="news-content-id" class="form-control" rows="5" cols="30" placeholder="Willkommen beim bwLehrpool-System!">{{latestContent}}</textarea> + </div> + </div> + </div> + + <div>Letzte Aktualisierung: {{latestDate}}</div> + <br> + <input type="hidden" name="token" value="{{token}}"> + <button class="btn btn-sm btn-primary" type="submit">Speichern</button> +</form> |