Seite 1 von 1

PN per Script (php) automatisch senden

Verfasst: 11.05.2015 12:22
von befubo
Guten Tag liebe phpBB Community

Seit einiger Zeit erweitere ich unser Forum um Funktionen.
Nun habe ich eine Frage bezüglich dem Versenden einer automatischen PN an ein Mitglied via php.
Hintergrund ist:
Mittels eines Scripts prüfe ich, wie lange der User bereits registriert ist und ob er aktiv ist. Wenn ja, wird eine entsprechende Grafik (Medaille) angezeigt.
Jetzt möchte ich, dass wenn der Benutzer eine Auszeichnung erhält auch eine PN kriegt, in welcher er beglückwünscht wird.
Die Prüfung des Ganzen ist kein Problem und habe ich soweit auch schon.
Wie kann ich jetzt aber eine automatische PN an den richtigen User senden?

Folgendes habe ich per SuFu gefunden:
viewtopic.php?f=93&t=224543

Allerdings ist da der Autor selber auf die Lösung gekommen, wirklich durchblicken tu ich aber bei dem Script nicht (Und ich möchte ja nicht den toten Thread ausgraben).
Mir ist nicht klar, was die einzelnen Codeteile machen und wie sie funktionieren.
Vor allem in der Userverwaltung und den Zugriffen darauf blicke ich inzwischen gut durch bei phpBB, aber das hier ist grad etwas kryptisch für mich :)
Könntet ihr mir da vielleicht etwas auf die Sprünge helfen?

Vielen Dank und liebe Grüsse
befubo

Re: PN per Script (php) automatisch senden

Verfasst: 19.05.2015 15:15
von befubo
Guten Tag zusammen

Wollt nur mal kurz anklopfen, ob vielleicht schon jemand eine Idee hatte?
Habe selber noch weiter versucht den Code von oben weiter zu deuten, aber ich weiss einfach nicht wie das alles zusammen passt.
Folgendes habe ich mal noch gefunden:
https://wiki.phpbb.com/Using_phpBB3's_B ... e_Messages

Das klingt eigentlich ganz vielversprechend, ich scheitere aber wieder an der praktischen Ausführung. Ich hab dann mal folgendes zusammengeschustert:

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('viewforum');

if($user->data['is_registered'])
{
echo "registriert!";
}
else
{
echo "nicht registriert!";
}

$db = @new mysqli( "localhost", "XXX", "XXX", "XXX" );


$betreff = "Testbetreff";
$inhalt = "Testinhalt";

// note that multibyte support is enabled here 
$my_subject = utf8_normalize_nfc($betreff);
$my_text    = utf8_normalize_nfc($inhalt);

echo "$my_subject<br>$my_text<hr>";

// variables to hold the parameters for submit_pm
$poll = $uid = $bitfield = $options = ''; 
generate_text_for_storage($my_subject, $uid, $bitfield, $options, false, false, false);
generate_text_for_storage($my_text, $uid, $bitfield, $options, true, true, true);

$data = array( 
    'address_list'      => array ('u' => array(2 => 'to')), //Verstehe ich nicht, was das macht
    'from_user_id'      => 156, //ID des Senders
    'from_username'     => 'befubo', //Username des Senders
    'icon_id'           => 0, //Titelicon der Nachricht
    'from_user_ip'      => $user->data['user_ip'], //Liest IP des Users (welcher?) aus
     
    'enable_bbcode'     => true,
    'enable_smilies'    => true,
    'enable_urls'       => true,
    'enable_sig'        => true,

    'message'           => $my_text,
    'bbcode_bitfield'   => $bitfield,
    'bbcode_uid'        => $uid,
);

submit_pm('post', $my_subject, $data, false);
?>
Natürlich klappt das nicht, schliesslich verstehe ich auch alle komponenten nicht ganz:
Folgendes: 'address_list'      => array ('u' => array(2 => 'to')), erschliesst sich mir einfach nicht. Diese Kurzbeschreibung hat mir irgendwie nicht weitergeholfen:
This value holds the recipients. It's a nested array of the following structure array ('u' => array(2 => 'to' 3 => ' bcc'), ('g' => array(2 => 'to' 3 => ' bcc'))) Meaning, the first level array has two subarrays: 'u' for users and 'g' for groups. Each of these hold arrays mapping the recipients user_id to the type of recipient he is ('to' or 'bcc').
Ich verstehe diese Formulierung nicht ganz.

Ebenfalls kommen die Variablen $uid, $bitfield und $options vor. Ich kann aber nicht erschliessen woher er diese holt, bzw was für Inhalt diese haben sollten.
Ich hoffe ihr könnt mir etwas unter die Arme greifen :)
Vielen Dank und freundliche Grüsse
befubo

Re: PN per Script (php) automatisch senden

Verfasst: 20.05.2015 14:28
von gn#36
Mir ist die Nutzung der eingebauten Funktionen immer zu aufwändig, weshalb ich grundsätzlich die OO Posting API von Pyramide nutze. Einfach die verlinkte Datei ins includes Verzeichnis legen und dann die darin befindlichen Objekte für PN, post oder topic nutzen. Ist eigentlich ziemlich intuitiv nutzbar und sehr einfach:

Code: Alles auswählen

<?php
//Standard phpBB Init Zeugs (spare ich mir mal)
include($phpbb_root_path . 'includes/functions_post_oo.' . $phpEx);

$post = new post();
$post->post_subject = 'Thementitel';
$post->forum_id = 20; //Forum für neues Thema
$post->post_text =  'Hier kommt der komplette Beitragstext rein. Alle normalen bbcodes dürfen verwendet werden.';

//Fertig, jetzt Beitrag absenden
$post->submit();
PN ist ähnlich einfach.

Code: Alles auswählen

$pn = new privmsg();
$pn->to('user', 123); //To user with id 123 (can also handle group with id)
//Add BCC recipient
$pn->to('user', 'bcc', 124);
$pn->message_subject = 'Titel';
$pn->message_text = 'Inhalt der PN';
//ggf. noch Absender o.ä. festlegen (default: aktueller User)

// Absenden
$pn->submit();
Um trotzdem noch auf deine Frage einzugehen: Das ist dort ähnlich wie in der OO Posting API. Es gibt ein Unter-Array u das alle user enthält, die Empfänger sein sollen, es gibt ein Unter-Array g, das alle Gruppen enthält, an die die PN gehen soll. Du kannst ja eine PN an mehrere Gruppen und mehrere User gleichzeitig versenden. Innerhalb des Arrays ist dann die ID des Users bzw. der Gruppe der Schlüssel des Eintrags, während der eintrag selbst entweder "to" ist, wenn die PN direkt an den Empfänger gehen soll (und das für alle anderen sichtbar ist) oder "bcc", sofern es sich um einen versteckten Eintrag handelt.

Zur bbcode UID gibt's: KB:bbcode_uid (allgemein KB:bbcode) Das Bitfield ist so ähnlich und definiert, welche BBcodes überhaupt im Text vorkommen. Die werden von generate_text_for_storage gefüllt und brauchen dich ansonsten nicht zu kümmern.

Aus genau dem Grund nutze ich o.g. OO Posting API. Da muss man mit den Dingern nämlich nicht hantieren, das übernimmt die API.

Re: PN per Script (php) automatisch senden

Verfasst: 21.05.2015 17:33
von befubo
Hey!
Vielen Dank, das hilft mir sehr weiter!!
Das Versenden klappt jetzt wunderbar auf meiner Testseite, werde ich dann direkt integrieren bei mir.

Liebe Grüsse, befubo