Contao-Camp 2024
Ergebnis 1 bis 6 von 6

Thema: calendar-event-booking-bundle: PDF als Anhang im Event als Datei ausgewählt funzt net

  1. #1
    Contao-Nutzer
    Registriert seit
    28.06.2010.
    Beiträge
    55

    Standard calendar-event-booking-bundle: PDF als Anhang im Event als Datei ausgewählt funzt net

    Hi,
    ich habe im Event ein Feld für die Auswahl einer PDF-Datei aus den Dateien auf dem Server hinzugefügt.
    Dieses ist in der Tabelle tl_calendar_events im Feld nb_confirmation_pdf (blob) gespeichert.
    Ich hätte jetzt entweder gerne den Pfad um ihn als Link in der Mail einzubauen oder das PDF als Anhanh in der Mail.
    Wenn ich das token ##event_nb_confirmation_pdf## im Mail-Body einfüge, kommen ein paar kryptische Zeichen dabei raus.
    Wenn ich das token ##event_nb_confirmation_pdf## bei Dateianhänge via Tokens eintrage, hat das leider auch nicht zur Folge, dass ein Anhang in der Mail erscheint.
    Ich habe in der Datei /vendor/markocupic/calendar-event-booking-bundle/src/Resources/contao/config/config.php (leider habe ich auch noch nicht rausgefunden wo ich diese Anpassungen an den config.php updatesicher hinzufügen, so dass sie auch funktionieren) den Eintrag
    $GLOBALS['NOTIFICATION_CENTER']['NOTIFICATION_TYPE']['calendar-event-booking-bundle'] = array(
    // Type
    'booking-notification' => array(...
    'attachment_tokens' => array('event_*')
    hinzugefügt, so dass der token auch akzeptiert wird.

    Hilfe nötig....!
    Vielen Dank für Eure Unterstützung,
    sven

  2. #2
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Hi
    Das liegt daran, dass der "Dateipfad" als binary uuid übermittelt wird. Ich denke, du musst dafür einen Hook bauen, der den binary-String umwandelt.
    Ungefähr so:
    Code:
    if (!empty($arrTokens['attachment'])) {
      $objFiles = \FilesModel::findMultipleByUuid($arrTokens['attachment']);
    
      if ($objFiles !== null) {
        $arrTokens['attachment'] = TL_ROOT . '/' . $objFiles->path;
      }
    }
    Geändert von markocupic (06.08.2021 um 12:47 Uhr)
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  3. #3
    Contao-Nutzer
    Registriert seit
    28.06.2010.
    Beiträge
    55

    Standard

    Danke dir Marco für deine schnelle Antwort.
    Das klingt plausibel für den Weg, dass ich den Pfad in die Mail als Link einbauen will.
    Der Hook ist auch nötig, wenn die Datei als attachment token übergeben wird und angehängt werden soll?

    Und da ich mich bisher vor den Hooks gedrückt habe und ich ja immer noch den richtigen Ordner für die richtige config.php gefunden habe:
    Deinen Schnipsel bau ich eine config.php wie in deinem Hook-Link beschrieben und muss dann wo abgelegt werden? In /config oder /contao oder ...?

    Vielen Dank und beste Grüße
    sven

  4. #4
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Ok.

    in src/EventListener/SendNotificationMessage im Root kommt deine Hook-Klasse. Wichtig ist, dass du den zweiten Parameter ($arrTokens) per Referenz übergibst -> deswegen das "&" davor:

    Code:
    <?php
    // src/EventListener/SendNotificationMessage.php
    
    declare(strict_types=1);
    
    namespace App\EventListener;
    
    use Contao\CoreBundle\ServiceAnnotation\Hook;
    use Contao\FilesModel;
    use NotificationCenter\Model\Message;
    use NotificationCenter\Model\Gateway;
    
    /**
     * @Hook("sendNotificationMessage")
     */
    class SendNotificationMessage
    {
    
        public function __invoke(Message $objMessage, array &$arrTokens, ?string $language, Gateway $objGatewayModel)
        {
            $intMessageId = 2; // Vorausgesetzt die id deiner NC Message ist 2.
    
            if ((int)$objMessage->id === $intMessageId) {
                
                $objFiles = FilesModel::findByUuid($arrTokens['document']);
    
                if(null !== $objFiles){
                    // file path relative to the document root
                    $arrTokens['document'] = $objFiles->path;
                }
     
                return true;
            }
    
            return false;
        }
    }
    Das zusätzliche Attachment Token hast du ja schon registriert, wenn nein, musst du das in contao/config/config.php noch tun:
    Code:
    <?php
    
    // contao/config/config.php
    
    // notification center
    if (isset($GLOBALS['NOTIFICATION_CENTER']['NOTIFICATION_TYPE']['calendar-event-booking-bundle'])) {
        $GLOBALS['NOTIFICATION_CENTER']['NOTIFICATION_TYPE']['calendar-event-booking-bundle']['booking-notification']['attachment_tokens'] = ['document'];
    }

    Danach ein composer install und fertig is. ;-)

    Das Ganze noch als Gist

    Liebe Grüsse und viel Spass mit markocupic/calendar-event-booking-bundle

    Marko
    Geändert von markocupic (07.08.2021 um 23:58 Uhr)
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  5. #5
    Contao-Nutzer
    Registriert seit
    28.06.2010.
    Beiträge
    55

    Standard

    Hi Marco,
    sehr cool, danke - mein erster Hook läuft.
    Allerdings (korrigiere mich gerne):
    * da ich contao 4.11 einsetze ist der Pfad zu config.php inzwischen: /contao/config/config.php
    * ich musste den Weg über diese config.php gehen um den Hook erfolgreich zu aktivieren (wie hier beschrieben: https://github.com/terminal42/contao...ication_center), die Aktivierung des Hook über die Annotation hat - warum auch immer - nicht funktioniert

    Aber was zählt ist - zumindest für den Moment - das Ergebnis: Das PDF wird als Anhang mitgesendet und auch der Pfad in der Mail (als Link) würde funktionieren.
    Danke Dir vielmals!

    Beste Grüße
    sven

  6. #6
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Zitat Zitat von dragstar Beitrag anzeigen
    Hi Marco,
    sehr cool, danke - mein erster Hook läuft.
    Allerdings (korrigiere mich gerne):
    * da ich contao 4.11 einsetze ist der Pfad zu config.php inzwischen: /contao/config/config.php
    Ja, du hast recht! Ab Contao 4.9 sind die Contao Konfigurationsdateien, sprich dca, config.php und languages in TL_ROOT/contao. Ist korrigiert ;-)
    https://docs.contao.org/dev/getting-...ent/#structure

    Zitat Zitat von dragstar Beitrag anzeigen
    * ich musste den Weg über diese config.php gehen um den Hook erfolgreich zu aktivieren (wie hier beschrieben: https://github.com/terminal42/contao...ication_center), die Aktivierung des Hook über die Annotation hat - warum auch immer - nicht funktioniert
    Code:
    use Contao\CoreBundle\ServiceAnnotation\Hook;
    hast du eingebunden?
    Geändert von markocupic (07.08.2021 um 23:57 Uhr)
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •