[DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
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.
Benutzeravatar
MartectX
Ehemaliger Übersetzer
Beiträge: 648
Registriert: 10.05.2008 17:08
Wohnort: Marienplatz

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von MartectX »

Mahony hat geschrieben:
MartectX hat geschrieben:Sind das alle Bugfixes für 0.2.0?
Nein, nicht ganz. Ich muss das alles noch ordnen, zusammen bringen, noch einmal testen und in eine MODX schreiben.
Hab' Ende nächster Woche Geburtstag und das wäre das perfekte Geschenk *türülü* :wink:
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von Mahony »

Hallo Schmischi

Mach mal diese Änderung wieder rückgängig (das war nicht optimal gelöst).
Mahony hat geschrieben: Öffne die includes/functions_user.php


Suche in der includes/functions_user.php

Code: Alles auswählen

function user_delete($mode, $user_id, $post_username = false)
{
    global $cache, $config, $db, $user, $auth;
    global $phpbb_root_path, $phpEx; 
Füge danach ein

Code: Alles auswählen

//Begin Thanks Post MOD
    $sql = 'DELETE
        FROM ' . THANKS_TABLE . '
    WHERE thanks_from = ' . $user_id;
    $db->sql_query($sql);
    //End Thanks Post MOD             
Jetzt folgt die optimale Lösung.

Suche in der includes/functions_user.php

Code: Alles auswählen

function user_delete($mode, $user_id, $post_username = false)
{
    global $cache, $config, $db, $user, $auth;
    global $phpbb_root_path, $phpEx; 
Füge danach ein

Code: Alles auswählen

//Begin Thanks Post MOD
    $sql = 'UPDATE ' . THANKS_TABLE . '
                    SET thanks_from = ' . ANONYMOUS . "
                    WHERE thanks_from = $user_id";
                $db->sql_query($sql);
                
    $sql = 'UPDATE ' . THANKS_TABLE . '
                    SET thanks_to = ' . ANONYMOUS . "
                    WHERE thanks_to = $user_id";
                $db->sql_query($sql);
    //End Thanks Post MOD          
Suche

Code: Alles auswählen

$sql = 'SELECT *
        FROM ' . USERS_TABLE . '
        WHERE user_id = ' . $user_id;
    $result = $db->sql_query($sql);
    $user_row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);

    if (!$user_row)
    {
        return false;
    } 
Füge danach ein

Code: Alles auswählen

//Begin Thanks Post MOD
    if ($user_row['user_thanked'])
                {
                    $sql = 'UPDATE ' . USERS_TABLE . '
                        SET user_thanked = user_thanked + ' . $user_row['user_thanked'] . '
                        WHERE user_id = ' . ANONYMOUS;
                    $db->sql_query($sql);
                }
                
                if ($user_row['user_thanks'])
                {
                    $sql = 'UPDATE ' . USERS_TABLE . '
                        SET user_thanks = user_thanks + ' . $user_row['user_thanks'] . '
                        WHERE user_id = ' . ANONYMOUS;
                    $db->sql_query($sql);
                }
                
                if ($user_row['user_thanks_post'])
                {
                    $sql = 'UPDATE ' . USERS_TABLE . '
                        SET user_thanks_post = user_thanks_post + ' . $user_row['user_thanks_post'] . '
                        WHERE user_id = ' . ANONYMOUS;
                    $db->sql_query($sql);
                }
                //End Thanks Post MOD          
Öffne viewtopic.php

Suche nach

Code: Alles auswählen

if ($poster_id == ANONYMOUS)
        {
            $user_cache[$poster_id] = array(
                'joined'        => '',
                'posts'            => '',
                'from'            => '', 
Füge danach ein

Code: Alles auswählen

//Begin Thank Post MOD
                'thanks'        => (isset($row['user_thanks'])) ? $row['user_thanks'] : '',
                'thanked'        => (isset($row['user_thanked'])) ? $row['user_thanked'] : '',
                'thanks_post'    => (isset($row['user_thanks_post'])) ? $row['user_thanks_post'] : '',
                //End Thank Post MOD          
Suche

Code: Alles auswählen

//Begin Thank Post MOD
                'thanks'        => $row['user_thanks'],
                'thanked'        => $row['user_thanked'],
                'thanks_post'    => $row['user_thanks_post'],
                //End Thank Post MOD          
Ersetze mit

Code: Alles auswählen

//Begin Thank Post MOD
                'thanks'        => (isset($row['user_thanks'])) ? $row['user_thanks'] : '',
                'thanked'        => (isset($row['user_thanked'])) ? $row['user_thanked'] : '',
                'thanks_post'    => (isset($row['user_thanks_post'])) ? $row['user_thanks_post'] : '',
                //End Thank Post MOD          
Mit diesen Änderungen sind dann die Probleme mit gelöschten Usern vollständig beseitigt.

Hier noch ein Bugfix, damit sich ein User nicht über die URL bei sich selbst bedanken kann.

Öffne thanks.php
Suche nach

Code: Alles auswählen

$sql = 'SELECT thanks_from
    FROM ' . THANKS_TABLE . '
    WHERE post_id = ' . $post_id . '
        AND thanks_from = ' . $user->data['user_id'];
$result = $db->sql_query($sql);
$thanked_post = $db->sql_fetchfield('thanks_from');
$db->sql_freeresult($result); 
Füge danach ein

Code: Alles auswählen

//Begin NEW The user can not thank himself.
$poster_id = $row['poster_id'];
//End NEW The user can not thank himself.       
Suche nach

Code: Alles auswählen

switch ($mode)
{
    case 'thanks':
        if($thanked_post)
        {
            trigger_error('THANKS_CANT_ADD');
        } 
Füge danach ein

Code: Alles auswählen

//Begin NEW The user can not thank himself.
        if($user->data['user_id'] == $poster_id)
        {
            trigger_error('THANKS_DISALLOW');
        }
        //End NEW The user can not thank himself.       
Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Benutzeravatar
Schmischi
Mitglied
Beiträge: 30
Registriert: 01.08.2008 09:26
Kontaktdaten:

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von Schmischi »

Hallo Mahony

Ist bei mir eingepflegt und Funktioniert gut.
Gruß Rainer
Benutzeravatar
sepp71
Mitglied
Beiträge: 919
Registriert: 23.12.2006 00:03

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von sepp71 »

Die Mod. läuft auch bei mir und bereitet allen viel Freude - dankeschön!

Habe jetzt nicht den ganzen Thread durchgekämmt, daher nur eine kurze Anregung:
In meinem Forum können sich die User selbst löschen, manche lösche ich nach längerer Inaktivität auch mit einer Mod. Jedenfalls bleibt dann immer anzeigt
"Gast123 ...
Danke gegeben:
Danke bekommen: mal in Posts"
Das sieht immer so unglücklich aus...

Mit if-Abfragen habe ich versucht, das zumindest in der viewtopic_html abzustellen, aber die Formulierung der Bedingungen für postrow.POSTER_THAKED und postrow.POSTER_THANKS habe ich nicht korrekt hinbekommen. Vermutlich ist bei einem Teil der gelöschten Benutzer der Wert leer (''), bei anderen Null und bei wieder anderen womöglich noch auf irgendwelchen größeren Zahlen, da ich den o.a. Bugfix gerade erst gefunden und eingebaut habe.
Charmant an diesem Ansatz fand ich auch, das jeweils leere Zeilen (wenn ein Benutzer sich noch nicht bedankt hatte) einfach wegblieben.
Nun werde ich wohl einen Workaround über das POSTER_JOINED gehen müssen - oder hat jemand eine bessere Idee?

Danke!
Sepp
Zuletzt geändert von sepp71 am 18.04.2009 00:39, insgesamt 1-mal geändert.
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von Mahony »

Hallo
Jedenfalls bleibt dann immer anzeigt
"Gast123 ...
Danke gegeben:
Danke bekommen: mal in Posts"
Das sieht immer so unglücklich aus...
Ich habe gerade erst die Bugfixes gesehen, die sich auf das Löschen von Benutzern beziehen und sie noch nicht ausprobiert, ob das Thema damit besser erledigt wird.
Du solltest besser meine Bugfixes einbauen, denn dadurch dürfte sich das erledigt haben.

P.S. Hier noch zwei Bugfixes:

Bugfix 1. Beschleunigt die Synchronisierung der Bedankungen (wichtig in größeren Foren), wenn Beiträge im Forum gelöscht wurden und man im ACP die Bedankungen synchronisieren möchte.

1. Setze indizes auf die Spalten thanks_from und thanks_to in der Tabelle phpbb_thanks und auf die Spalte post_thanked in der Tabelle phpbb_posts.

Code: Alles auswählen

ALTER TABLE phpbb_thanks ADD INDEX (thanks_from);
ALTER TABLE phpbb_thanks ADD INDEX (thanks_to);
ALTER TABLE phpbb_posts ADD INDEX (post_thanked);
 
Bugfix 2. Fügt eine fehlende Sprachvariable hinzu. Diese wird im ACP -- Wartung -- Administrations-Protokoll verwendet um die Synchronisierung der Bedankungen anzuzeigen.

2. Suche in der language/de/acp/common.php

Code: Alles auswählen

'LOG_DELETE_POST'			=> '<strong>Beitrag gelöscht</strong><br />» %s',
Füge danach ein

Code: Alles auswählen

'LOG_RESYNC_THANKSCOUNTS'			=> '<strong>Benutzer Bedankungen resynchronisiert</strong>',


Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Benutzeravatar
sepp71
Mitglied
Beiträge: 919
Registriert: 23.12.2006 00:03

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von sepp71 »

Hoppla, sorry, habe tatsächlich die Bugfixes probiert - es aber noch nicht korrekt hinbekommen und meinen obigen Beitrag entsprechend editiert. Ich lese jetzt noch einmal nach und probiere weiter.

Sepp

Edit 18.4. 16:55: Habe mittlerweile die Bugfixes eingebaut und meine o.a. Änderungen wieder entfernt. Das "Danke gegeben" und "Danke bekommen" steht aber zumindest bei den Usern, die sich mit dem "Selbst-Löschen-Mod" gelöscht habentrotzdem noch drin.

Ich hätte es gern so, dass jedenfalls in der viewtopic bei den User-Daten nur die Werte >0 angezeigt werden, also keine Anzeige, wenn Danke gegeben bzw. Danke bekommen =0 oder gar undefiniert ist. Besonders wichtig ist mir das bei en bereits in der Vergangenheit (vor dem Bugfixes) gelöschten Usern. Während alle anderen Registrierungsdetails dann nicht mehr angezeigt wird, werden die beiden Danke-Zeilen trotzdem (und mit "0") noch angezeigt.
Ich glaube, dass eine if-Abfrage wie bei den anderen Profildetails hier:

Code: Alles auswählen

<dd><strong>{L_THANKS}:</strong> {postrow.POSTER_THANKS}</dd>
<dd><strong>{L_THANKED}:</strong> {postrow.POSTER_THANKED} {L_IN} {postrow.POSTER_THANKS_POST}</dd>
helfen könnte, weiß aber nicht, auf welche Werte ich sie beziehen sollte.
Hast Du vielleicht doch noch einen Tipp?

Danke!
Sepp
Benutzeravatar
Schmischi
Mitglied
Beiträge: 30
Registriert: 01.08.2008 09:26
Kontaktdaten:

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von Schmischi »

Hallo Mahony

Ich weis ja nicht ob das so einfach möglich ist, aber eine Klasse Erweiterung des Mods wäre es wenn man sich die Posts auf die ein Danke gesetzt wurde mit einem Klick anzeigen lassen könnte.
Also z.B. wenn man in der Forenübersicht die zusätzliche Anzeige eingebaut hat und man klickt auf die Anzahl der Danke eines Users.
Als Ergebnis werden dann die Posts mit Danke angezeigt.
Gruß Rainer
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12178
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von Mahony »

Hallo sepp71
Was genau möchtest du nun haben? Soll bei den gelöschten Usern überhaupt nichts mehr in der viewtopic_body.html im Profil angezeigt werden, oder soll dort alles (Danke gegeben, Danke bekommen) mit 0 angezeigt werden?


@Schmischi - Nein, solch eine Funktion ist im Moment nicht geplant. Das mag vielleicht bei einem kleinen Forum noch ganz gut (übersichtlich) funktionieren, bei einem großen Forum (wo sich Tausende User Bedanken) würde das allerdings total unübersichtlich werden.



Grüße: Mahony
Taekwondo in Berlin
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Benutzeravatar
Schmischi
Mitglied
Beiträge: 30
Registriert: 01.08.2008 09:26
Kontaktdaten:

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von Schmischi »

Mahony hat geschrieben:
@Schmischi - Nein, solch eine Funktion ist im Moment nicht geplant. Das mag vielleicht bei einem kleinen Forum noch ganz gut (übersichtlich) funktionieren, bei einem großen Forum (wo sich Tausende User Bedanken) würde das allerdings total unübersichtlich werden.
Grüße: Mahony
Hallo Mahony

Schade, ich hatte nach dem Einbau in meinem Forum schon einige Anfragen nach genau solch einer Funktion.
Die Leute freuen sich natürlich über ein Danke, wissen aber nicht für welchen Post sie es bekommen haben.
Da wäre eine solche Funktion sehr hilfreich.
Evtl. ja über ACP zu und abschaltbar.

Ich gebe mal die Hoffnung nicht auf. :D

Ansonsten Funktioniert alles super.
Vielen Dank noch mal für diesen Mod.
Gruß Rainer
Leinad3000
Mitglied
Beiträge: 200
Registriert: 02.09.2007 14:57
Kontaktdaten:

Re: [DEV] Thank Post Mod (hide MOD compatible ) 0.2.0

Beitrag von Leinad3000 »

Muss ich irgendwelche Berechtigungen festlegen? Der zeigt bei mir keinen Thank post Button an, alles andere läuft einwandfrei.

Wenn ich mich über nen URL bedanken will kommt "Es ist nicht erlaubt dich in diesem Beitrag zu zu bedanken."
eAgora.de der "elektronische Diskussionsplatz" - hier wird über absolut alles diskutiert!
Antworten

Zurück zu „[3.0.x] Mods in Entwicklung“