summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/update.d/01_faq.php14
-rw-r--r--includes/pages/admin_faq.php114
-rw-r--r--templates/admin_faq.html56
-rw-r--r--templates/admin_faq_edit_form.html37
4 files changed, 85 insertions, 136 deletions
diff --git a/db/update.d/01_faq.php b/db/update.d/01_faq.php
index 1e32f1ad..759cc109 100644
--- a/db/update.d/01_faq.php
+++ b/db/update.d/01_faq.php
@@ -1,16 +1,20 @@
<?php
-if(sql_num_query("DESCRIBE `FAQ` `Sprache`") === 0) {
+if(sql_num_query("DESCRIBE `FAQ` `Sprache`") === 0 && sql_num_query("DESCRIBE `FAQ` `QID`") == 0) {
sql_query("ALTER TABLE `FAQ`
ADD `Sprache` SET('de', 'en') NOT NULL,
+ ADD `QID` INT NOT NULL,
ADD INDEX(`Sprache`)");
$res = sql_query("SELECT * FROM `FAQ` WHERE `Sprache` = ''");
+ $i = 0;
while($row = mysql_fetch_assoc($res)) {
- $question = explode('<br>', $row['Frage'], 2);
- $answer = explode('<br>', $row['Antwort'], 2);
+ $question = preg_split('#(?:<|&lt;)br(?:>|&gt;)#i', $row['Frage'], 2, PREG_SPLIT_NO_EMPTY);
+ $answer = preg_split('#(?:<|&lt;)br(?:>|&gt;)#i', $row['Antwort'], 2, PREG_SPLIT_NO_EMPTY);
if(count($question) == 2 && count($answer) == 2)
- sql_query("INSERT INTO `FAQ` (`Frage`, `Antwort`, `Sprache`) VALUES ('" . sql_escape(trim($question[1])) . "', '" . sql_escape(trim($answer[1])) . "', 'en')");
- sql_query("UPDATE `FAQ` SET `Frage` = '" . sql_escape(trim($question[0])) . "', `Antwort` = '" . sql_escape(trim($answer[0])) . "', `Sprache` = 'de' WHERE `FID` = " . $row['FID']);
+ sql_query("INSERT INTO `FAQ` (`Frage`, `Antwort`, `Sprache`, `QID`) VALUES ('" . sql_escape(trim($question[1])) . "', '" . sql_escape(trim($answer[1])) . "', 'en', $i)");
+ sql_query("UPDATE `FAQ` SET `Frage` = '" . sql_escape(trim($question[0])) . "', `Antwort` = '" . sql_escape(trim($answer[0])) . "', `Sprache` = 'de', `QID` = $i WHERE `FID` = " . $row['FID']);
+ $i++;
}
+ _add_index('FAQ', array('QID', 'Sprache'), 'UNIQUE');
$applied = true;
}
diff --git a/includes/pages/admin_faq.php b/includes/pages/admin_faq.php
index 2cd75955..4a0a1170 100644
--- a/includes/pages/admin_faq.php
+++ b/includes/pages/admin_faq.php
@@ -1,48 +1,79 @@
<?php
+function admin_faq_create_edit_table($languages, $prefills = array()) {
+ $form_questions = array('Question');
+ $form_answers = array('Answer');
+ foreach ($languages as $language) {
+ $form_questions[] = '<textarea name="question[' . $language . ']" style="height: 4em;">'
+ . (!empty($prefills[$language])? $prefills[$language]['question'] : '')
+ . '</textarea>';
+ $form_answers[] = '<textarea name="answer[' . $language . ']" style="height: 4em;">'
+ . (!empty($prefills[$language])? $prefills[$language]['answer'] : '')
+ . '</textarea>';
+ }
+
+ return table(
+ array_merge(array(''), $languages),
+ array($form_questions, $form_answers),
+ false);
+}
+
function admin_faq() {
+ $languages = sql_select("SELECT DISTINCT `Sprache` FROM `FAQ`");
+ $languages = array_map('array_shift', $languages);
if (!isset ($_REQUEST['action'])) {
- $faqs_html = "";
- $faqs = sql_select("SELECT * FROM `FAQ`");
- foreach ($faqs as $faq) {
- $faqs_html .= sprintf('<tr><td> <dl><dt>%s</dt><dd>%s</dd></dl> </td>' . '<td> <dl><dt>%s</dt><dd>%s</dd></dl> </td>' . '<td><a href="%s&action=edit&id=%s">Edit</a></td></tr>', $faq['Frage_de'], $faq['Antwort_de'], $faq['Frage_en'], $faq['Antwort_en'], page_link_to('admin_faq'), $faq['FID']);
+ $faqs = array();
+ foreach ($languages as $language) {
+ $lang_html .= '<th>' . $language . "</th>\n";
+ $langfaqs = sql_select("SELECT `QID`, `Frage`, `Antwort` FROM `FAQ` WHERE `Sprache` = '" . sql_escape($language) . "'");
+ foreach ($langfaqs as $langfaq) {
+ if (!isset($faqs[$langfaq['QID']]))
+ $faqs[$langfaq['QID']] = array();
+ $faqs[$langfaq['QID']][$language] = sprintf('<dl><dt>%s</dt><dd>%s</dd></dl>', $langfaq['Frage'], $langfaq['Antwort']);
+ $faqs[$langfaq['QID']]['edit'] = sprintf('<a href="%s&action=edit&id=%s">Edit</a>', page_link_to('admin_faq'), $langfaq['QID']);
+ }
}
+ $faqs_html = table(array_merge(array_combine($languages, $languages), array('edit' => '')), $faqs);
return template_render('../templates/admin_faq.html', array (
'link' => page_link_to("admin_faq"),
- 'faqs' => $faqs_html
+ 'faqs' => $faqs_html,
+ 'new_form' => admin_faq_create_edit_table($languages)
));
} else {
switch ($_REQUEST['action']) {
case 'create' :
- $frage = strip_request_item_nl('frage');
- $antwort = strip_request_item_nl('antwort');
- $question = strip_request_item_nl('question');
- $answer = strip_request_item_nl('answer');
-
- sql_query("INSERT INTO `FAQ` SET `Frage_de`='" . sql_escape($frage) . "', `Frage_en`='" . sql_escape($question) . "', `Antwort_de`='" . sql_escape($antwort) . "', `Antwort_en`='" . sql_escape($answer) . "'");
-
- header("Location: " . page_link_to("admin_faq"));
- break;
-
case 'save' :
- if (isset ($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id']))
- $id = $_REQUEST['id'];
- else
- return error("Incomplete call, missing FAQ ID.", true);
-
- $faq = sql_select("SELECT * FROM `FAQ` WHERE `FID`=" . sql_escape($id) . " LIMIT 1");
- if (count($faq) > 0) {
- list ($faq) = $faq;
-
- $frage = strip_request_item_nl('frage');
- $antwort = strip_request_item_nl('antwort');
- $question = strip_request_item_nl('question');
- $answer = strip_request_item_nl('answer');
+ if ($_REQUEST['action'] == 'create') {
+ sql_query("START TRANSACTION");
+ $qid = sql_select("SELECT MAX(`QID`)+1 AS QID FROM `FAQ`");
+ $qid = $qid[0]['QID'];
+ }
+ else {
+ if (isset ($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id']))
+ $qid = $_REQUEST['id'];
+ else
+ return error("Incomplete call, missing FAQ ID.", true);
- sql_query("UPDATE `FAQ` SET `Frage_de`='" . sql_escape($frage) . "', `Frage_en`='" . sql_escape($question) . "', `Antwort_de`='" . sql_escape($antwort) . "', `Antwort_en`='" . sql_escape($answer) . "' WHERE `FID`=" . sql_escape($id) . " LIMIT 1");
+ $faq = sql_select("SELECT `QID` FROM `FAQ` WHERE `QID`=" . sql_escape($qid));
+ if (count($faq) == 0)
+ return error("No FAQ found.", true);
+ }
+ $values = array();
+ foreach ($_POST['question'] as $lang => $question) {
+ if (!in_array($lang, $languages))
+ continue;
+ if (empty($question))
+ sql_query("DELETE IGNORE FROM `FAQ` WHERE `QID` = $qid AND `Sprache` = '" . sql_escape($lang) . "'");
+ else {
+ $question = strip_item($question);
+ $answer = strip_item($_POST['answer'][$lang]);
+ $values[] = "('" . sql_escape($lang) . "', '" . sql_escape($question) . "', '" . sql_escape($answer) . "', $qid)";
+ }
+ }
+ if (!empty($values))
+ sql_query("REPLACE INTO `FAQ` (`Sprache`, `Frage`, `Antwort`, `QID`) VALUES " . implode(', ', $values));
+ sql_query("COMMIT");
- header("Location: " . page_link_to("admin_faq"));
- } else
- return error("No FAQ found.", true);
+ header("Location: " . page_link_to("admin_faq"));
break;
case 'edit' :
@@ -51,17 +82,17 @@ function admin_faq() {
else
return error("Incomplete call, missing FAQ ID.", true);
- $faq = sql_select("SELECT * FROM `FAQ` WHERE `FID`=" . sql_escape($id) . " LIMIT 1");
+ $faq = sql_select("SELECT `Sprache`, `Frage`, `Antwort` FROM `FAQ` WHERE `QID`=" . sql_escape($id));
if (count($faq) > 0) {
- list ($faq) = $faq;
+ $prefills = array();
+ foreach ($faq as $row) {
+ $prefills[$row['Sprache']] = array('question' => $row['Frage'], 'answer' => $row['Antwort']);
+ }
return template_render('../templates/admin_faq_edit_form.html', array (
'link' => page_link_to("admin_faq"),
'id' => $id,
- 'frage' => $faq['Frage_de'],
- 'antwort' => $faq['Antwort_de'],
- 'question' => $faq['Frage_en'],
- 'answer' => $faq['Antwort_en']
+ 'form' => admin_faq_create_edit_table($languages, $prefills)
));
} else
return error("No FAQ found.", true);
@@ -73,11 +104,8 @@ function admin_faq() {
else
return error("Incomplete call, missing FAQ ID.", true);
- $faq = sql_select("SELECT * FROM `FAQ` WHERE `FID`=" . sql_escape($id) . " LIMIT 1");
- if (count($faq) > 0) {
- list ($faq) = $faq;
-
- sql_query("DELETE FROM `FAQ` WHERE `FID`=" . sql_escape($id) . " LIMIT 1");
+ $deleted = sql_query("DELETE FROM `FAQ` WHERE `QID`=" . sql_escape($id));
+ if ($deleted) {
header("Location: " . page_link_to("admin_faq"));
} else
return error("No FAQ found.", true);
diff --git a/templates/admin_faq.html b/templates/admin_faq.html
index 5dacf522..0eee8d20 100644
--- a/templates/admin_faq.html
+++ b/templates/admin_faq.html
@@ -1,56 +1,6 @@
-<table>
- <thead>
- <tr>
- <th>
- Deutsch
- </th>
- <th>
- English
- </th>
- <th>
- &nbsp;
- </th>
- </tr>
- </thead>
- <tbody>
- %faqs%
- </tbody>
-</table>
+%faqs%
<hr/>Create new FAQ:
<form action="%link%&action=create" method="post">
- <table>
- <tr>
- <td>
- Frage
- </td>
- <td>
- <textarea name="frage"></textarea>
- </td>
- </tr>
- <tr>
- <td>
- Antwort
- </td>
- <td>
- <textarea name="antwort"></textarea>
- </td>
- </tr>
- <tr>
- <td>
- Question
- </td>
- <td>
- <textarea name="question"></textarea>
- </td>
- </tr>
- <tr>
- <td>
- Answer
- </td>
- <td>
- <textarea name="answer"></textarea>
- </td>
- </tr>
- </table>
+%new_form%
<input type="submit" name="submit" value="Create" />
-</form> \ No newline at end of file
+</form>
diff --git a/templates/admin_faq_edit_form.html b/templates/admin_faq_edit_form.html
index 1ef791aa..2159a82d 100644
--- a/templates/admin_faq_edit_form.html
+++ b/templates/admin_faq_edit_form.html
@@ -1,41 +1,8 @@
Edit FAQ:
<form action="%link%&action=save" method="post">
- <table>
- <tr>
- <td>
- Frage
- </td>
- <td>
- <textarea name="frage">%frage%</textarea>
- </td>
- </tr>
- <tr>
- <td>
- Antwort
- </td>
- <td>
- <textarea name="antwort">%antwort%</textarea>
- </td>
- </tr>
- <tr>
- <td>
- Question
- </td>
- <td>
- <textarea name="question">%question%</textarea>
- </td>
- </tr>
- <tr>
- <td>
- Answer
- </td>
- <td>
- <textarea name="answer">%answer%</textarea>
- </td>
- </tr>
- </table>
+%form%
<input type="hidden" name="id" value="%id%" /><input type="submit" name="submit" value="Save" />
</form><hr/>
<form action="%link%&action=delete" method="post">
Delete FAQ: <input type="hidden" name="id" value="%id%" /><input type="submit" name="submit" value="Delete" />
-</form> \ No newline at end of file
+</form>