Beitrag nachträglich ergänzen aber nicht ändern?

Du suchst einen bestimmten Mod, weißt aber nicht genau wo bzw. ob er überhaupt existiert? Wenn dir dieser Artikel nicht weiterhilft, kannst du hier den von dir gewünschten/gesuchten Mod beschreiben ...
Falls ein Mod-Autor eine der Anfragen hier aufnimmt, um einen neuen Mod zu entwickeln, geht's in [3.0.x] Mods in Entwicklung weiter.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
freie-bildung
Mitglied
Beiträge: 325
Registriert: 05.05.2012 08:57

Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag 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?
Meine Website: http://www.freie-bildung.ch
Mein Forum: http://www.freie-bildung.ch/forum
Version: 3.0.11 / Style prosilver
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag 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 ;)
freie-bildung
Mitglied
Beiträge: 325
Registriert: 05.05.2012 08:57

Re: Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag 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
Meine Website: http://www.freie-bildung.ch
Mein Forum: http://www.freie-bildung.ch/forum
Version: 3.0.11 / Style prosilver
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag 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.
freie-bildung
Mitglied
Beiträge: 325
Registriert: 05.05.2012 08:57

Re: Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag 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
Meine Website: http://www.freie-bildung.ch
Mein Forum: http://www.freie-bildung.ch/forum
Version: 3.0.11 / Style prosilver
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag 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.
freie-bildung
Mitglied
Beiträge: 325
Registriert: 05.05.2012 08:57

Re: Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag 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'];
    } 
Meine Website: http://www.freie-bildung.ch
Mein Forum: http://www.freie-bildung.ch/forum
Version: 3.0.11 / Style prosilver
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag 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?
freie-bildung
Mitglied
Beiträge: 325
Registriert: 05.05.2012 08:57

Re: Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag von freie-bildung »

Hallo

Also ich nutze momentan noch 3.0.12 und PHP 5 läuft.
Meine Website: http://www.freie-bildung.ch
Mein Forum: http://www.freie-bildung.ch/forum
Version: 3.0.11 / Style prosilver
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Beitrag nachträglich ergänzen aber nicht ändern?

Beitrag 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.
Antworten

Zurück zu „[3.0.x] Mod Suche/Anfragen“