summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apis/news.inc.php26
-rw-r--r--apis/update.inc.php32
-rw-r--r--inc/message.inc.php4
-rw-r--r--modules/news.inc.php63
-rw-r--r--templates/main-menu.html1
-rw-r--r--templates/page-news.html28
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>