Seite 1 von 2
Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 04.02.2015 22:01
von freie-bildung
Hi zusammen
Ich glaube ehrlich gesagt nicht, dass so eine Möglichkeit besteht, möchte aber trotzdem nachfragen.
Bis vor kurzem konnte man in meinem Forum Texte nachträglich ändern. Das ging dann aber teilweise so weit, dass Beiträge so krass verändert wurde, dass diese komplett aus dem Zusammenhang gerissen wurden und die darauf folgenden Beiträge schlichtweg keinen Sinn mehr ergaben.
Nun habe ich das komplett deaktiviert, mit der Möglichkeit, dass sich die Nutzer über den "Diesen Beitrag melden" Button an mich wenden können, wenn sie eine nachträgliche Änderung wünschen.
Nun meine Frage: Gibt es die Möglichkeit, dass User ihre Beiträge ergänzen aber nicht verändern können?
Also z.B. als erster Beitrag
Hallo zusammen, meine Packliste besteht aus:
- Rucksack
- Schlafsack
- Matte
Ändern, bzw. löschen daran kann man nix, also an dem was bereits geschrieben wurde.
Ergänzen aber sehr wohl, also z.B.
Hallo zusammen, meine Packliste besteht aus:
- Rucksack
- Schlafsack
- Matte
- Flasche
- Feuerzeug
Gibt es irgendeine Möglichkeit?
Re: Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 05.02.2015 18:20
von paddle
Hi,
Eine Mod ist mir da jetzt nicht bekannt, aber du könntest den Beirag abfragen, bevor er in die Datenbank geschrieben wird.
Dazu suchst du in
includes/functions_posting.php
Code: Alles auswählen
else if ($mode == 'edit')
{
$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
}
und ersetzt es durch:
Code: Alles auswählen
else if ($mode == 'edit')
{
$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
if (!$auth->acl_gets('a_', 'm_'))
{
$cur_post_id = $data['post_id'];
$sql = 'SELECT post_text, post_id FROM ' . POSTS_TABLE . ' WHERE post_id = ' . $cur_post_id;
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result) )
{
$cur_message = $row['post_text'];
}
//check, if user just append something, else forbid the edit
if (stripos( $data['message'], $cur_message) !== 0)
{
trigger_error($user->lang['ONLY_ATTACHING_ALLOWED']);
}
}
}
Um den Error schön auszugeben müssen dann noch die language - Dateien angepasst werden:
Füge am Ende der Datei
language/[sprache]/posting.php
vor
?>
ein:
Code: Alles auswählen
$lang = array_merge($lang, array(
'ONLY_ATTACHING_ALLOWED' => 'Du darfst an deinen ursprünglichen Post nur etwas weiteres anhängen',
));
Man kann die Fehlermeldung sicher schöner gestalten.
Will man das schöner gestalten, muss man aber sicherlich etwas mehr Aufwand betreiben

Re: Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 05.02.2015 18:52
von freie-bildung
Vielen Dank paddle!
Funktioniert - gerade getestet

Das einzige was noch schöner wäre, als diese Lösung, wenn man auch zwischen dem bereits geschriebenen Text ergänzen könnte, statt nur unter dem Text. Dafür hast nicht auch einen Tipp bereit?
Danke nochmals
Re: Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 05.02.2015 19:47
von paddle
Das einzige was mir dazu einfällt, was einfach umzusetzen wäre, wäre zu überprüfen, ob der neue Beitrag länger ist, als der alte, anstatt zu überprüfen, ob der alte Beitrag vorne steht.
Das hat allerdings den Nachteil, dass diejenigen, die Chaos stiften wollen, einfach ein Beitrag mit Zufallszeichen füllen um auf den alten Beitrag zu kommen.
---------------
Und 5 min weiter drüber nachgedacht, könnte man das auch so machen:
Code: Alles auswählen
else if ($mode == 'edit')
{
$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
if (!$auth->acl_gets('a_', 'm_'))
{
$cur_post_id = $data['post_id'];
$sql = 'SELECT post_text, post_id FROM ' . POSTS_TABLE . ' WHERE post_id = ' . $cur_post_id;
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result) )
{
$cur_message = $row['post_text'];
}
//replace all spaces with a placeholder
$message_pattern = str_replace(' ', '.*', $cur_message);
$message_pattern = '/.*' . $message_pattern . '.*/';
print $message_pattern;
//check, if user just append something, else forbid the edit
if(preg_match($message_pattern, $data['message']) !== 1) {
trigger_error($user->lang['ONLY_ATTACHING_ALLOWED']);
}
}
}
Nun muss im neuen Post jedes Wort des alten Posts in der gleichen Reihenfolge vorkommen. Allerdings darf an den Leerzeichen weitere Zeichen eingefügt werden. Ebenso vor und nach dem ursprünglichen Beitrag.
Den Code da ersetzt du mit dem Code, welchen du bereits ersetzt hast.
Re: Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 05.02.2015 20:06
von freie-bildung
Also hab ich dich richtig verstanden, dass ich den Code vom letzten Beitrag "über" den Code den du im ersten Beitrag geschrieben hast ersetzen soll?
Das gibt mir nämlich eine Warnung:
Warning: Cannot modify header information - headers already sent by (....../includes/functions_posting.php:1688) in .... includes/functions.php on line 4785, 4787, 4788, 4789
Re: Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 05.02.2015 20:19
von paddle
Genauso meint ich das.
Damit wir uns nicht missverstehen:
Datei:
includes/functions_posting.php
Suche:
Code: Alles auswählen
else if ($mode == 'edit')
{
$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
if (!$auth->acl_gets('a_', 'm_'))
{
$cur_post_id = $data['post_id'];
$sql = 'SELECT post_text, post_id FROM ' . POSTS_TABLE . ' WHERE post_id = ' . $cur_post_id;
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result) )
{
$cur_message = $row['post_text'];
}
//check, if user just append something, else forbid the edit
if (stripos( $data['message'], $cur_message) !== 0)
{
trigger_error($user->lang['ONLY_ATTACHING_ALLOWED']);
}
}
}
Ersetze mit:
Code: Alles auswählen
else if ($mode == 'edit')
{
$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
if (!$auth->acl_gets('a_', 'm_'))
{
$cur_post_id = $data['post_id'];
$sql = 'SELECT post_text, post_id FROM ' . POSTS_TABLE . ' WHERE post_id = ' . $cur_post_id;
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result) )
{
$cur_message = $row['post_text'];
}
//replace all spaces with a placeholder
$message_pattern = str_replace(' ', '.*', $cur_message);
$message_pattern = '/.*' . $message_pattern . '.*/';
print $message_pattern;
//check, if user just append something, else forbid the edit
if(preg_match($message_pattern, $data['message']) !== 1) {
trigger_error($user->lang['ONLY_ATTACHING_ALLOWED']);
}
}
}
Da sollte eigentlich keine Fehlermeldung erscheinen.
Poste ansonsten mal den eingefügten Code mit 10 Zeilen darüber und darunter.
Re: Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 06.02.2015 08:54
von freie-bildung
Guten Morgen
Okay, das hatte ich auch so gemacht. Der Fehler besteht:
Der Code sieht so aus:
Code: Alles auswählen
sync('topic_reported', 'topic_id', array($topic_id));
}
return $next_post_id;
}
/**
* Submit Post
* @todo Split up and create lightweight, simple API for this.
*/
function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $update_message = true, $update_search_index = true)
{
global $db, $auth, $user, $config, $phpEx, $template, $phpbb_root_path;
// We do not handle erasing posts here
if ($mode == 'delete')
{
return false;
}
$current_time = time();
if ($mode == 'post')
{
$post_mode = 'post';
$update_message = true;
}
else if ($mode != 'edit')
{
$post_mode = 'reply';
$update_message = true;
}
else if ($mode == 'edit')
{
$post_mode = ($data['topic_replies_real'] == 0) ? 'edit_topic' : (($data['topic_first_post_id'] == $data['post_id']) ? 'edit_first_post' : (($data['topic_last_post_id'] == $data['post_id']) ? 'edit_last_post' : 'edit'));
if (!$auth->acl_gets('a_', 'm_'))
{
$cur_post_id = $data['post_id'];
$sql = 'SELECT post_text, post_id FROM ' . POSTS_TABLE . ' WHERE post_id = ' . $cur_post_id;
$result = $db->sql_query($sql);
if ($row = $db->sql_fetchrow($result) )
{
$cur_message = $row['post_text'];
}
//replace all spaces with a placeholder
$message_pattern = str_replace(' ', '.*', $cur_message);
$message_pattern = '/.*' . $message_pattern . '.*/';
print $message_pattern;
//check, if user just append something, else forbid the edit
if(preg_match($message_pattern, $data['message']) !== 1) {
trigger_error($user->lang['ONLY_ATTACHING_ALLOWED']);
}
}
}
// First of all make sure the subject and topic title are having the correct length.
// To achieve this without cutting off between special chars we convert to an array and then count the elements.
$subject = truncate_string($subject);
$data['topic_title'] = truncate_string($data['topic_title']);
// Collect some basic information about which tables and which rows to update/insert
$sql_data = $topic_row = array();
$poster_id = ($mode == 'edit') ? $data['poster_id'] : (int) $user->data['user_id'];
// Retrieve some additional information if not present
if ($mode == 'edit' && (!isset($data['post_approved']) || !isset($data['topic_approved']) || $data['post_approved'] === false || $data['topic_approved'] === false))
{
$sql = 'SELECT p.post_approved, t.topic_type, t.topic_replies, t.topic_replies_real, t.topic_approved
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p
WHERE t.topic_id = p.topic_id
AND p.post_id = ' . $data['post_id'];
$result = $db->sql_query($sql);
$topic_row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$data['topic_approved'] = $topic_row['topic_approved'];
$data['post_approved'] = $topic_row['post_approved'];
}
Re: Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 06.02.2015 10:54
von paddle
Das verstehe ich nicht.
Bei mir lokal läuft das ohne Probleme.
Da ist noch eine Zeile zu viel sehe ich gerade, die ich zu Debug-Zwecken eingebaut hatte.
Die Zeile: print $message_pattern;
kannst du getrost löschen, auch wenn sie nicht den Fehler verursachen sollte.
Der Code ist richtig eingefügt.
Welche Version von PHP und phpBB nutzt du denn?
Re: Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 15.02.2015 09:22
von freie-bildung
Hallo
Also ich nutze momentan noch 3.0.12 und PHP 5 läuft.
Re: Beitrag nachträglich ergänzen aber nicht ändern?
Verfasst: 17.02.2015 15:40
von paddle
Wann genau wird denn die Warnung ausgegeben?
Wenn du versuchst einen modifizierten Beitrag abzuschicken, oder schon beim Aufruf des Forums?
Ich kann die Warnung hier grad nicht nachvollziehen, dass macht ein Fehlerfinden recht schwer.