Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische PN

Einklappen
X
Einklappen
Momentan aktive Benutzer in diesem Thema: 1 (0 Benutzer und 1 Gäste)
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Automatische PN

    Folgendes Szenario: Bei uns im Forum findet jedes Jahr ein Weihnachtswichteln statt. Dazu erstellen wir uns gegenseitig Bilder, die uns dann am 24.12. zugesandt werden. Bisher wurde das alles von Hand gemacht. Das möchte ich nun automatisieren. Dazu brauche ich aber ein Skript, welches private Nachrichten intern verschickt. So ein Skript sollte bereits im Core enthalten sein.

    Mein Plan: Das vorhandene Skript dupliziere ich und wandle es soweit ab, dass es auch ohne Login PN verschicken kann.

    Weiß zufällig jemand, wo ich dieses Skript finde oder kennt jemand eine andere Möglichkeit das zu erledigen? Ich bin Webprogrammierer und könnte das Skript auch selbst schreiben, wenn ich wüsste, wo in der DB die PN hingehören.
    Zuletzt geändert von Hero; 27.10.2017, 13:46.
    https://blendpolis.de

    #2
    Die PN werden wie alles als Node abgespeichert. Der Contenttype 27 ist eine Private Nachricht.
    Fasst alle Funktionen und Klassen, welche Du für PM verwenden kannst, findest Du in \core\vb\api\content\privatemessage.php und \core\vb\library\content\privatemessage.php
    Bei Erfolg wäre es schön hier über die Funktionen zu lesen.
    It`s nice to be important but it`s more important to be nice!

    Kommentar


      Themenstarter
      #3
      Sehe ich mir an die Klasse. Danke bis hierhin. Falls ich es nicht hinbekomme, dann gibt es die Info eben per E-Mail.
      https://blendpolis.de

      Kommentar


        Themenstarter
        #4
        So sieht meine Lösung aus. Funktioniert...

        PHP-Code:
        <?php

        //Skript für den automatischen Versand von Privaten Nachrichten

        $recipients = array(1,2,3,4...); // <-- Anpassen (userid)

        $vbpath '<PATH_TO_VB_BASE>'// <-- Anpassen

        require_once($vbpath.'/includes/vb5/autoloader.php');
        vB5_Autoloader::register($vbpath);
        vB5_Frontend_Application::init('config.php');

        require_once(
        $vbpath.'/core/vb/library/content/privatemessage.php');

        $subject 'Betreff';
        $message 'Nachricht';

        $sender $vbulletin->userinfo['userid'];

        foreach(
        $recipients as $recipient)
        {
            
        $data['msgtype'] = 'message';
            
        $data['sender'] = $sender;
            
        $data['sentto'] = $recipient;
            
        $data['title'] = $subject;
            
        $data['rawtext'] = $message;

            
        $options['skipNonExistentRecipients'] = true;

            
        $pm vB_Api_Content_Privatemessage::instance('Content_Privatemessage');
            
        $pm->add($data,$options,true);
        }

        ?>
        Zuletzt geändert von Hero; 28.10.2017, 13:07.
        https://blendpolis.de

        Kommentar


          #5
          Hey, schön das es funktioniert hat und danke für das Skript.
          Das kann man bestimmt irgendwann mal verwenden.
          It`s nice to be important but it`s more important to be nice!

          Kommentar


            Themenstarter
            #6
            Ja, ich bin auch froh, dass ich es hinbekommen habe. Einziger Wermutstropfen ist, dass man das Skript nicht betrügen und als Absender eine andere userid angeben kann.
            https://blendpolis.de

            Kommentar


              #7
              Zitat von Hero Beitrag anzeigen
              Einziger Wermutstropfen ist, dass man das Skript nicht betrügen und als Absender eine andere userid angeben kann.
              Hintergrund ist, das in /core/vb/api/content/privatemessage.php

              bei Zeile 642 bzw. 654

              PHP-Code:
              642 $sender intval($userInfo['userid']);

               
              654 $data['sender'] = $sender
              der "sender" fest auf die ID des eingeloggten Nutzers gesetzt wird.

              Abhilfe schaft hier nur, die Lib zu hacken...

              Füge hinter Zeile 642


              PHP-Code:
              if($data['sender']!=0)$sender=intval($data['sender']); 

              ein.

              "Rumfummeln" an Lib's kann die Sicherheit und/oder Stabilität gefährden. Ohne Gewähr.

              Die Lib muss bei Updates überprüft werden.

              Kommentar


                Themenstarter
                #8
                Hm... ich habe gedacht, dass die '/core/vb/library/content/privatemessage.php' dafür zuständig ist. Die includiere ich ja auch in meinem Skript. Du sagst nun, ich soll die '/core/vb/api/content/privatemessage.php' editieren. Ich frage mich jetzt wirklich, welches Skript welche Aufgabe hat. Ich probiere mal die API-Klasse. Vielleicht geht das damit wirklich (besser).
                https://blendpolis.de

                Kommentar


                  Themenstarter
                  #9
                  Zitat von AScherff Beitrag anzeigen
                  Abhilfe schaft hier nur, die Lib zu hacken...
                  Funktioniert tatsächlich. Ich habe das so gelöst, weil ich das eleganter finde:
                  Code:
                  $sender = intval($userInfo['userid']);
                  if(isset($data['sender']))$sender=intval($data['sender']);
                  Zuletzt geändert von Hero; 31.10.2017, 09:35.
                  https://blendpolis.de

                  Kommentar

                  Lädt...
                  X