From 61b08c208054faefd38b47a96a9a83f7751edacb Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+github@gmail.com>
Date: Mon, 11 May 2015 17:02:14 +0200
Subject: [PATCH] make rules editable

---
 assets/schwarzesbrett.less     |  4 ++--
 controllers/admin/settings.php |  5 +++++
 migrations/14_add_rules.php    | 40 ++++++++++++++++++++++++++++++++++
 plugin.manifest                |  2 +-
 views/admin/settings/index.php | 25 ++++++++++++++++-----
 views/category/list.php        | 22 +------------------
 6 files changed, 68 insertions(+), 30 deletions(-)
 create mode 100644 migrations/14_add_rules.php

diff --git a/assets/schwarzesbrett.less b/assets/schwarzesbrett.less
index 2656ca5..c1f0cdd 100644
--- a/assets/schwarzesbrett.less
+++ b/assets/schwarzesbrett.less
@@ -113,8 +113,8 @@
     color: red;
 }
 
-.studip_form {
-    input[type=text], textarea, select {
+.studip_form, #bb-config {
+    input[type=text], input[type=number], textarea, select {
         .box-sizing(border-box);
         width: 100%;
     }
diff --git a/controllers/admin/settings.php b/controllers/admin/settings.php
index 2c49c32..4ca8f22 100644
--- a/controllers/admin/settings.php
+++ b/controllers/admin/settings.php
@@ -98,6 +98,11 @@ class Admin_SettingsController extends SchwarzesBrettController
             'key'  => 'cacheMediaProxy',
             'type' => 'checkbox',
         );
+
+        $options['BULLETIN_BOARD_RULES'] = array(
+            'key'  => 'rules',
+            'type' => 'textarea',
+        );
         
         foreach ($options as $key => $data) {
             $options[$key]['description'] = $this->getConfig($key, 'description');
diff --git a/migrations/14_add_rules.php b/migrations/14_add_rules.php
new file mode 100644
index 0000000..92958ce
--- /dev/null
+++ b/migrations/14_add_rules.php
@@ -0,0 +1,40 @@
+<?php
+class AddRules extends Migration
+{
+    public function description()
+    {
+        return 'Adds the config entry for the now editable rules of the bulletin board.';
+    }
+    
+    public function up()
+    {
+        $query = "INSERT IGNORE INTO `config` (`config_id`, `parent_id`, `field`, `value`, `is_default`, `type`,
+                                               `range`, `section`, `position`, `mkdate`, `chdate`, `description`, `comment`, `message_template`)
+                  VALUES (MD5(:id), '', :id, :value, '1', 'string',
+                          'global', 'SchwarzesBrettPlugin', '0', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), :description, '', '')";
+        $statement = DBManager::get()->prepare($query);
+
+        $statement->bindValue(':id', 'BULLETIN_BOARD_RULES');
+        $statement->bindValue(':value', $this->getRules());
+        $statement->bindValue('description', 'Die angezeigten Regeln des Schwarzen Bretts');
+        $statement->execute();
+    }
+    
+    public function down()
+    {
+        DBManager::get()->exec("DELETE FROM `config` WHERE `config_id` = MD5('BULLETIN_BOARD_RULES')");
+    }
+    
+    private function getRules()
+    {
+        $rules  = '!!!Allgemeine Hinweise:' . "\n";
+        $rules .= '- Sie k�nnen nur in Themen eine Anzeige erstellen, in denen Sie die n�tigen Rechte haben.' . "\n";
+        $rules .= '- Mit der Suche werden sowohl Titel als auch Beschreibung aller Anzeigen durchsucht.' . "\n";
+        $rules .= '- Sie k�nnen Ihre eigenen Anzeigen jederzeit nachtr�glich %%bearbeiten%% oder %%l�schen%%.' . "\n";
+        $rules .= '- Bitte stellen Sie Ihre Anzeigen in die richtige Kategorie ein. Damit das Schwarze Brett �bersichtlich bleibt, %%l�schen%% Sie bitte Ihre Anzeigen umgehend nach Abschluss/Verkauf.' . "\n";
+        $rules .= '- **Bitte Artikel nur in %%eine%% Kategorie einstellen!**' . "\n";
+        $rules .= '- **Kommerzielle Angebote sind __nicht__ erlaubt (dazu geh�ren auch solche Anzeigen die einen Link enthalten, der dem Einstellenden eine Provision verspricht). Sie werden gel�scht!**' . "\n";
+
+        return $rules;
+    }
+}
diff --git a/plugin.manifest b/plugin.manifest
index 926155e..ecad72c 100644
--- a/plugin.manifest
+++ b/plugin.manifest
@@ -2,6 +2,6 @@ pluginname=SchwarzesBrettPlugin
 pluginclassname=SchwarzesBrettPlugin
 pluginclassname=SchwarzesBrettWidget
 origin=IBIT
-version=3.6.2
+version=3.6.3
 studipMinVersion=3.1
 description=Globales Schwarzes Brett f�r Kleinanzeigen mit Kategorien (Gesuche/Angebote)
diff --git a/views/admin/settings/index.php b/views/admin/settings/index.php
index 2c363d8..74951e4 100644
--- a/views/admin/settings/index.php
+++ b/views/admin/settings/index.php
@@ -10,7 +10,7 @@
     <?= CSRFProtection::tokenTag() ?>
     <input type="hidden" name="studip_ticket" value="<?= get_ticket() ?>">
 
-    <table class="default">
+    <table class="default" id="bb-config">
         <thead>
             <tr>
                 <th><?= _('Einstellung') ?></th>
@@ -18,16 +18,28 @@
             </tr>
         </thead>
         <tbody>
-        <? foreach ($options as $key => $option): ?>
+    <? foreach ($options as $key => $option): ?>
+        <? if ($option['type'] === 'textarea'): ?>
+            <tr>
+                <td colspan="2">
+                    <label for="option-<?= md5($key) ?>">
+                        <?= htmlReady($option['description']) ?>
+                    </label><br>
+
+                    <textarea name="<?= htmlReady($option['key']) ?>" class="add_toolbar"><?= htmlReady($option['value']) ?></textarea>
+                </td>
+            </tr>
+        <? else: ?>
             <tr>
                 <td>
                     <label for="option-<?= md5($key) ?>">
-                    <?= htmlReady($option['description']) ?>
+                        <?= htmlReady($option['description']) ?>
+                    </label>
                 </td>
                 <td>
                 <? if ($option['type'] === 'checkbox'): ?>
-                    <input type="hidden" name="<?= $option['key'] ?>" value="0">
-                    <input type="checkbox" name="<?= $option['key'] ?>"
+                    <input type="hidden" name="<?= htmlReady($option['key']) ?>" value="0">
+                    <input type="checkbox" name="<?= htmlReady($option['key']) ?>"
                            id="option-<?= md5($key) ?>" value="1"
                            <? if ((bool)$option['value']) echo 'checked'; ?>
                            <? if ($option['activates']) printf('data-activates="#option-%s"', md5($option['activates'])); ?>>
@@ -38,7 +50,8 @@
                 <? endif; ?>
                 </td>
             </tr>
-        <? endforeach; ?>
+        <? endif; ?>
+    <? endforeach; ?>
         </tbody>
         <tfoot>
             <tr>
diff --git a/views/category/list.php b/views/category/list.php
index e5d159d..8ce7e78 100644
--- a/views/category/list.php
+++ b/views/category/list.php
@@ -15,24 +15,4 @@
 </ul>
 <? endif; ?>
 
-<h3>Allgemeine Hinweise:</h3>
-<ul>
-    <li>
-        Eine Anzeige hat zur Zeit eine Laufzeit von <b><?= $expire_days ?> Tagen</b>.
-        Nach Ablauf dieser Frist wird die Anzeige automatisch nicht mehr angezeigt.
-    </li>
-    <li>Sie k�nnen nur in Themen eine Anzeige erstellen, in denen Sie die n�tigen Rechte haben.</li>
-    <li>Mit der Suche werden sowohl Titel als auch Beschreibung aller Anzeigen durchsucht.</li>
-    <li>
-        Sie k�nnen Ihre eigenen Anzeigen jederzeit nachtr�glich <em>bearbeiten</em>
-        oder <em>l�schen</em>. Die Buttons befinden sich unter dem Text.
-    </li>
-    <li>
-        Bitte stellen Sie Ihre Anzeigen in die richtigen Kategorien ein.
-        Damit das Schwarze Brett �bersichtlich bleibt, <em>l�schen</em> Sie
-        bitte Ihre Anzeigen umgehend nach Abschluss/Verkauf.
-    </li>
-    <li><b>Bitte Artikel nur in <em>eine</em> Kategorie einstellen!</b></li>
-    <li><b>Bitte keine kommerziellen Angebote einstellen (dazu geh�ren auch solche Anzeigen die einen Link enthalten, der dem Einstellenden eine Provision verspricht). Sie werden gel�scht!</b></li>
-</ul>
-<br/>
+<?= formatReady(Config::get()->BULLETIN_BOARD_RULES) ?>
-- 
GitLab