Seite 1 von 2

[3.3] EOL-Zeichen für text in submit_post

Verfasst: 04.01.2022 12:22
von mbld
Hallo,

ich versuche verzweifelt mit der Funktion submit_post einen mehrzeiligen Post programmatisch zu erstellen.
Bevor ich meinen Text an das data-array von submit_post() übergebe lasse ich ihn durch generate_text_for_storage "laufen".

Also ungefähr so:

Code: Alles auswählen

$my_text    = 'First line<br/>Next line';
generate_text_for_storage($my_text, $uid, $bitfield, $options, true, true, true);
$data = array( 
   ...
    'message'       => $my_text,
    'message_md5'   => md5($my_text),
    ...
);
submit_post('reply', $my_subject, '', POST_NORMAL, $poll, $data);

Ich habe dabei versucht ein Zeilenende per \n oder \r\n oder <br\> einzufügen. In allen Fällen erscheint das eingefügte Zeichen schlicht im Text und wird nicht als EOL interpretiert.

Was muss ich also einfügen, um einen Zeileumbruch zu erhalten.

Vielen Dank

Re: [3.3] EOL-Zeichen für text in submit_post

Verfasst: 04.01.2022 12:36
von mbld
Es scheint, dass es mit <br> und ohne "generate_text_for_storage" funktionieren würde.

generate_text_for_storage habe ich aus diesem Beispiel entnommen, und weiß nicht genau, wozu man es braucht:

https://wiki.phpbb.com/Using_phpBB3%27s ... post.28.29

Re: [3.3] EOL-Zeichen für text in submit_post

Verfasst: 04.01.2022 20:13
von Scanialady
Ich verstehe nichts von Programmierung, aber ich kann Google bedienen ;-)
Es scheint, dass diese Anweisungen von 2013 sind - damit 8 Jahre alt, und zweifellos überholt. Irgendetwas schwirrt mir auch im Kopf herum bezüglich Problemen mit generate_text_for_storage - aber ich kann grad den Finger nicht drauflegen.

Ich fand ein Script für automatische Beiträge von einem spanischen phpBB-Nutzer, welches erst zwei Jahre alt ist - vielleicht hilft dir das weiter.

Ansonsten gibts noch ein weiteres Script aus einem Blog und Hinweise bei Stack Overflow

Re: [3.3] EOL-Zeichen für text in submit_post

Verfasst: 05.01.2022 01:23
von 3Di
Versuchen Sie es so

Code: Alles auswählen

$my_text = 'First line
Next line';
Oder so

Code: Alles auswählen

$my_text = 'First line' . PHP_EOL . 'Next line';

Re: [3.3] EOL-Zeichen für text in submit_post

Verfasst: 05.01.2022 11:01
von mbld
@Scanialady: Danke für die Mühe. Aber alle genannten neueren Beispiele sind praktisch nur eine Kopie von dem "alten" Beispiel-Code den ich nutze. Jedenfalls wird in allen Fällen auch ein generate_text_for_storage vorgeschaltet.

@3Di: Hilft leider auch nicht. generate_text_for_storage entfernt dann einfach diese Art von EOL-Zeichen. Ich kann natürlich einfach generate_text_for_storage weglassen. Aber ich dachte dass es wohl schon einen Grund hat, dass alle Beispiele den Text erst mal damit aufbereiten. Wahrscheinlich um den Text so aufzubereiten, dass er später korrekt angezeigt wird. (Vermutlich BB-Code, Smilies u.ä.).

Re: [3.3] EOL-Zeichen für text in submit_post

Verfasst: 05.01.2022 11:32
von Dr.Death
Was passiert, wenn du zwei EOL hinzufügst? "Überlebt" dann einer ?

Re: [3.3] EOL-Zeichen für text in submit_post

Verfasst: 05.01.2022 13:24
von 69bruno
Ich bin ja kein Profi,
aber wenn ich mir die Funktion ansehe, die Du aufrufst (generate_text_for_storage()):

Code: Alles auswählen

676  function generate_text_for_storage(&$text, &$uid, &$bitfield, &$flags, $allow_bbcode = false, $allow_urls = false, $allow_smilies = false, $allow_img_bbcode = true, $allow_flash_bbcode = true, $allow_quote_bbcode = true, $allow_url_bbcode = true, $mode = 'post')
 677  {
 678      global $phpbb_root_path, $phpEx, $phpbb_dispatcher;
 679  
 680      /**
 681      * Use this event to modify the text before it is prepared for storage
 682      *
 683      * @event core.modify_text_for_storage_before
 684      * @var string    text            The text to parse
 685      * @var string    uid                The BBCode UID
 686      * @var string    bitfield        The BBCode Bitfield
 687      * @var int        flags            The BBCode Flags
 688      * @var bool        allow_bbcode    Whether or not to parse BBCode
 689      * @var bool        allow_urls        Whether or not to parse URLs
 690      * @var bool        allow_smilies    Whether or not to parse Smilies
 691      * @var bool        allow_img_bbcode    Whether or not to parse the img] BBCode
 692      * @var bool        allow_flash_bbcode    Whether or not to parse the flash] BBCode
 693      * @var bool        allow_quote_bbcode    Whether or not to parse the quote] BBCode
 694      * @var bool        allow_url_bbcode    Whether or not to parse the url] BBCode
 695      * @var string    mode                Mode to parse text as, e.g. post or sig
 696      * @since 3.1.0-a1
 697      * @changed 3.2.0-a1 Added mode
 698      */
 699      $vars = array(
 700          'text',
 701          'uid',
 702          'bitfield',
 703          'flags',
 704          'allow_bbcode',
 705          'allow_urls',
 706          'allow_smilies',
 707          'allow_img_bbcode',
 708          'allow_flash_bbcode',
 709          'allow_quote_bbcode',
 710          'allow_url_bbcode',
 711          'mode',
 712      );
 713      extract($phpbb_dispatcher->trigger_event('core.modify_text_for_storage_before', compact($vars)));
 714  
 715      $uid = $bitfield = '';
 716      $flags = (($allow_bbcode) ? OPTION_FLAG_BBCODE : 0) + (($allow_smilies) ? OPTION_FLAG_SMILIES : 0) + (($allow_urls) ? OPTION_FLAG_LINKS : 0);
 717  
 718      if (!class_exists('parse_message'))
 719      {
 720          include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
 721      }
 722  
 723      $message_parser = new parse_message($text);
 724      $message_parser->parse($allow_bbcode, $allow_urls, $allow_smilies, $allow_img_bbcode, $allow_flash_bbcode, $allow_quote_bbcode, $allow_url_bbcode, true, $mode);
 725  
 726      $text = $message_parser->message;
 727      $uid = $message_parser->bbcode_uid;
 728  
 729      // If the bbcode_bitfield is empty, there is no need for the uid to be stored.
 730      if (!$message_parser->bbcode_bitfield)
 731      {
 732          $uid = '';
 733      }
 734  
 735      $bitfield = $message_parser->bbcode_bitfield;
 736  
 737      /**
 738      * Use this event to modify the text after it is prepared for storage
 739      *
 740      * @event core.modify_text_for_storage_after
 741      * @var string    text            The text to parse
 742      * @var string    uid                The BBCode UID
 743      * @var string    bitfield        The BBCode Bitfield
 744      * @var int        flags            The BBCode Flags
 745      * @var string    message_parser    The message_parser object
 746      * @since 3.1.0-a1
 747      * @changed 3.1.11-RC1            Added message_parser to vars
 748      */
 749      $vars = array('text', 'uid', 'bitfield', 'flags', 'message_parser');
 750      extract($phpbb_dispatcher->trigger_event('core.modify_text_for_storage_after', compact($vars)));
 751  
 752      return $message_parser->warn_msg;
 753  }
dann dienst sie dazu
Use this event to modify the text before it is prepared for storage
den Text zu modifizieren, bevor er geparsed wird.
Neben des Löschens der uid, wenn bitfield leer ist
If the bbcode_bitfield is empty, there is no need for the uid to be stored.
gibt die Funktion
return $message_parser->warn_msg
Warnmeldungen aus, wenn beim parsen Fehler auftreten.

Wenn Du eine programmtechnisch erzeugte Mail versenden willst, die du ja sicher testen wirst und diese nicht ständig geändert wird,..... wozu diese Funktion überhaupt verwenden ? es klingt so, als wenn Du reinen Text versenden willst, der vlt. einen Zeilenumbruch enthält. Muss der dann so explizit getestet werden ?

Bin gespannt, ob ich jetzt lerne, dass man das so macht..... :cookie: :geek:

Re: [3.3] EOL-Zeichen für text in submit_post

Verfasst: 05.01.2022 13:58
von mbld
Sorry, ich muss mich korrigieren:
Das mit PHP_EOL funktioniert, und wird von "generate_text_for_storage" in ein <br/> umgewandelt.
(Das hatte ich dann in meiner debug-Ausgabe falsch interpretiert).

Also erst mal vielen Dank an 3Di.

Was ich ganz grob machen will, ist, das Antworten auf eine Notifikations-Email erlauben.
D.h. der User antwortet auf eine Notifikations-Email, die Forums-ID und Themen-ID enthält, und markiert dabei das Ende seiner Antwort mit einem vereinbarten Schlüsselwort.
Die Email landet per Reply-To in einem speziellen Postfach, das ich per Cronjob beobachte.
Den Inhalt der Email würde ich dann nehmen und als Post an ein vorhandenes Thema anhängen.

Insofern weiß ich nicht allzuviel über den Inhalt des Posts.
Aber ich möchte schon, dass Zeilenumbrüche erhalten bleiben.

Ich bin aber noch ganz am Anfang mit meinen Experimenten....

Re: [3.3] EOL-Zeichen für text in submit_post

Verfasst: 06.01.2022 02:23
von 3Di
Ich denke, dass Sie sich von dieser Erweiterung inspirieren lassen können.
https://www.phpbb.com/community/viewtopic.php?t=2525596 ?

Re: [3.3] EOL-Zeichen für text in submit_post

Verfasst: 06.01.2022 07:23
von 69bruno
mbld hat geschrieben: 05.01.2022 13:58 Was ich ganz grob machen will, ist, das Antworten auf eine Notifikations-Email erlauben.
D.h. der User antwortet auf eine Notifikations-Email, die Forums-ID und Themen-ID enthält, und markiert dabei das Ende seiner Antwort mit einem vereinbarten Schlüsselwort.
Die Email landet per Reply-To in einem speziellen Postfach, das ich per Cronjob beobachte.
Den Inhalt der Email würde ich dann nehmen und als Post an ein vorhandenes Thema anhängen.
Das klingt interessant, aber wie willst Du verhindern, dass der Inhalt der Notifikations-Email wieder mit zurückkommt ?
Je nachdem wie der User sein Mailprogramm konfiguriert hat, ist der Ausgangstext ggfls. vor oder nach seiner Antwort wieder mit dabei. Zudem kommen ggfls. unterschiedliche Mailheader mit, die Du sicher auch nicht in deinem Forum haben möchtest.

Obwohl.... wenn man ein spezielles Tag für Antwortbeginn und -ende vereinbart, könnte das gehen wenn du eine Funktion schreibst, die die Mail auf den Text in den Tags trimmt.....klingt immer interessanter. Am Forum teilnehmen, ohne sich im Forum anmelden zu müssen.....