Seite 1 von 2

PN Nachrichten auf den Pc speichern

Verfasst: 15.04.2005 13:16
von Andi-2k3
Hi!
meine frage ist folgende:
gibt es einen mod , der es den usern ermöglicht seine privaten nachrichten auf seinen pc zu speicehrn?
vielen dank
für die wahrscheinlich wie immer schnelle und hilfreichen antowrten!

Verfasst: 15.04.2005 13:21
von Mario Siebert
Ka ob der im 2.0.13 noch funzt, hab ihn lange nicht eingebaut:

##############################################################################
## Mod Title: download PM
##
## Mod Version: 1.0
##
## Author: makue <makue@nena.de> - http://www.nena.de
##
## Beschreibung: Erlaubt es, PN's downloaden zu können. Es wird ein
## zusätzlicher Knopf "download" im PN-Bereich erzeugt.
## Das Download-File ist reines Textformat, die PM's
## sind durch eine Trennlinie getrennt.
##
## Installation Level: leicht
## Installation Time: 5 Minuten
##
## Files zum editieren: 4
## + 1 je zusätzliche Sprache (hier deutsch und englisch)
## + 1 je zusätzliches Template (hier nur subSilver)
##
## /prvmsg.php
## /language/lang_english/lang_main.php
## /language/lang_german/lang_main.php
## /templates/subSilver/prvmsgs_body.tpl
##
## zusätzliche Files: keine
##
##############################################################################
##
## Hinweis:
##
## Bei Fehlern, Hinweisen, Wünschen bitte Mail an makue@nena.de
##
## Bevor Änderungen an den Files vorgenommen werden empfiehlt es
## sich, backups der betroffenen Files vorzunehmen. Änderungen
## an der Datenbank sind nicht notwendig.
##
##############################################################################

#
#-----[ ÖFFNE ]------------------------------------------
#

/prvmsg.php

#
#-----[ SUCHE ]---------------------------------------------------------------
#

$delete_all = ( isset($HTTP_POST_VARS['deleteall']) ) ? TRUE : 0;

#
#-----[ DANACH EINFÜGEN ]-----------------------------------------------------
#

$download = ( isset($HTTP_POST_VARS['download']) ) ? TRUE : 0;

#
#-----[ SUCHE ]---------------------------------------------------------------
#

else if ( $save && $mark_list && $folder != 'savebox' && $folder != 'outbox' )

#
#-----[ DAVOR EINFÜGEN ]------------------------------------------------------
#

else if ( $download && $mark_list )
{
if ( !$userdata['session_logged_in'] )
{
$header_location = ( @preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')) ) ? 'Refresh: 0; URL=' : 'Location: ';
header($header_location . append_sid("login.$phpEx?redirect=privmsg.$phpEx&folder=inbox", true));
exit;
}

switch($folder)
{
case 'inbox':
$disp_folder = $lang['Inbox'];
break;

case 'outbox':
$disp_folder = $lang['Outbox'];
break;

case 'sentbox':
$disp_folder = $lang['Sentbox'];
break;

case 'savebox':
$disp_folder = $lang['Savebox'];
break;
}

if (count($mark_list))
{
$i=0;
$pmtext = $lang['Private_Messaging']." (".$board_config['sitename'].")\n";
$user_dateformat = ($userdata['user_dateformat']) ? $userdata['user_dateformat'] : $board_config['default_dateformat'];
$pmtext .= $disp_folder . " (". date($user_dateformat,time()). ")\n";
while($mark_list[$i] != "")
{
$sql = "SELECT pt.privmsgs_text, us.username, us.user_id, pm.privmsgs_date, pm.privmsgs_subject
FROM " . PRIVMSGS_TEXT_TABLE . " pt, " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " us
WHERE pt.privmsgs_text_id = " . $mark_list[$i] . " AND pm.privmsgs_id = " . $mark_list[$i] . "
AND us.user_id = pm.privmsgs_from_userid";
if ( $result = $db->sql_query($sql) )
{
$db_row = $db->sql_fetchrow($result);
$from = ($folder=='inbox' || $folder=='savebox') ? $lang['From'] : $lang['To'];
$pmtext .= "----------------------------------------------------------------------------\n";
$pmtext .= $lang['Mailbox'].": ".$userdata['username']."\n";
$pmtext .= $from.": ".$db_row['username']."\n";
$pmtext .= $lang['Posted'].": ".date($user_dateformat,time($db_row['privmsgs_date']))."\n";
$pmtext .= $lang['Subject'].": ".$db_row['privmsgs_subject']."\n\n";
$pmtext .= $db_row['privmsgs_text']."\n";
}
else
{
print $sql."<p>";
message_die(GENERAL_ERROR, 'Could not read private message info', '', __LINE__, __FILE__, $sql);
}
$i++;
}
$filename = $board_config['sitename']."_".$disp_folder."_".date("Ymd",time()).".txt";
header('Content-Type: text/x-delimtext; name="' . $file_name . '"');
header("Content-Disposition: attachment;filename=".$filename);
header("Content-Transfer-Encoding: plain/text");
header("Content-Length: ".strlen($pmtext));
print $pmtext;
exit;
}
}

#
#-----[ SUCHE ]---------------------------------------------------------------
#

'L_SAVE_MARKED' => $lang['Save_marked'],

#
#-----[ DANACH EINFÜGEN ]-----------------------------------------------------
#

'L_DOWNLOAD_MARKED' => $lang['Download_marked'],

#
#-----[ ÖFFNE ]------------------------------------------
#

/language/lang_english/lang_main.php

#
#-----[ SUCHE ]---------------------------------------------------------------
#

$lang['Save_marked'] = 'Save Marked';

#
#-----[ DANACH EINFÜGEN ]-----------------------------------------------------
#

$lang['Download_marked'] = 'Download Marked';
$lang['Mailbox'] = 'Mailbox';

#
#-----[ ÖFFNE ]------------------------------------------
#

/language/lang_german/lang_main.php

#
#-----[ SUCHE ]---------------------------------------------------------------
#

$lang['Save_marked'] = "Markierte speichern";

#
#-----[ DANACH EINFÜGEN ]-----------------------------------------------------
#

$lang['Download_marked'] = 'Markierte downloaden';
$lang['Mailbox'] = 'Postfach';

#
#-----[ ÖFFNE ]---------------------------------------------------------------
#

/templates/subSilver/prvmsgs_body.tpl

#
#-----[ SUCHE ]---------------------------------------------------------------
#

<td class="catBottom" colspan="5" height="28" align="right"> {S_HIDDEN_FIELDS}

#
#-----[ DANACH EINFÜGEN ]-----------------------------------------------------
#

<input type="submit" name="download" value="{L_DOWNLOAD_MARKED}" class="liteoption" />
&nbsp;

# Ich empfehle die &nbsp; zwischen den Input-Tags zu löschen, die verursachen nur
# einen zu großen Button-Abstand!

#
#-----[ ALLE DATEIEN SPEICHERN ]----------------------------------------------
#

Grüße Mario

Verfasst: 15.04.2005 21:31
von Budman
Hallo!

Ja, er funktioniert mit der .13 immer noch bestens! Den hattest Du mir dankenswerter Weise auch mal empfohlen, und er ist der Hit! Danke nochmal!

Gruss Bud

Verfasst: 11.05.2005 21:53
von Christian Benz
Hallo,

[quote]$filename = $board_config['sitename']."_".$disp_folder."_".date("Ymd",time()).".txt";
header('Content-Type: text/x-delimtext; name="' . $file_name . '"');
header("Content-Disposition: attachment;filename=".$filename);[/quote]

Ist das Absicht oder ein Fehler dass es da einmal $filename und dann wieder $file_name heißt?

Gruß,
Chris

Verfasst: 12.05.2005 10:25
von John Doe
Der Mod funktioniert so problemlos, wenn man aber z.B die gesendeten Nachrichten speichert, müssen die nicht von einem sein, sondern an jemanden.
Ich hab das mit meinen Newbiephp Skill erstmal so gelöst:

Code: Alles auswählen

if ($folder == 'sentbox')
{
$sql = "SELECT pt.privmsgs_text, us.username, us.user_id, pm.privmsgs_date, pm.privmsgs_subject
FROM " . PRIVMSGS_TEXT_TABLE . " pt, " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " us
WHERE pt.privmsgs_text_id = " . $mark_list[$i] . " AND pm.privmsgs_id = " . $mark_list[$i] . "
AND us.user_id = pm.privmsgs_to_userid";
}
else
{
$sql = "SELECT pt.privmsgs_text, us.username, us.user_id, pm.privmsgs_date, pm.privmsgs_subject
FROM " . PRIVMSGS_TEXT_TABLE . " pt, " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " us
WHERE pt.privmsgs_text_id = " . $mark_list[$i] . " AND pm.privmsgs_id = " . $mark_list[$i] . "
AND us.user_id = pm.privmsgs_from_userid";
}
Gespeicherte Dateien aus dem Archiv korrekt zu speichern, ist dann wohl schwieriger, weil die aus verschieden Boxen kommen können.

Und noch ne Newbiefrage hintendran ;):
Seit der Sichheitslücke in dem einen downloadmod ist mir etwas unwohl, was Downloads angeht. Wäre das bei diesem Mod eher Paranoia?

// Nachtrag: Firefox hat wohl leider manchmal einige Schwierigkeiten beim Speichern mit dem korrekten Dateinamen.

Verfasst: 12.05.2005 12:59
von Christian Benz
Hallo,
Der Mod funktioniert so problemlos, wenn man aber z.B die gesendeten Nachrichten speichert, müssen die nicht von einem sein, sondern an jemanden.
Stimmt, danke für den Hinweis. Das gilt aber nicht nur für die PNs unter "Gesendete Nachrichten" sondern auch für den "Postausgang". Ich habe daher die vorgeschlagene Codeänderung entsprechend um ...

Code: Alles auswählen

if ($folder == 'sentbox' || $folder == 'outbox')
... erweitert.
// Nachtrag: Firefox hat wohl leider manchmal einige Schwierigkeiten beim Speichern mit dem korrekten Dateinamen.
Ist mir auch schon aufgefallen. Das könnte u.a. daran liegen, weil der Dateiname ja aus den "Ordner-Namen" gebildet wird und bei "Gesendete Nachrichten" ist ein Leerzeichen enthalten. Bei der Bildung des Dateinamens wird dann alles nach dem Leerzeichen abgeschnitten. Ich habe das ganz einfach folgendermaßen behoben:

Code: Alles auswählen

#-----[ SUCHE ]-----

$filename = $board_config['sitename']."_".$disp_folder."_".date("Ymd",time()).".txt";

#-----[ DAVOR EINFÜGEN ]-----

$disp_folder = str_replace(' ', '_', $disp_folder);
Zu bedenken ist, dass evtl. auch bereits der Boardname (Variable $board_config['sitename']) Probleme bereiten kann, falls dort Leerzeichen oder sonstige unerlaubte (Dateinamen-)Zeichen enthalten sind. Dann sollte man auch diesbezüglich geeignete Maßnahmen treffen.

Gruß,
Chris

Verfasst: 12.05.2005 14:13
von John Doe
Danke, habe

Code: Alles auswählen

$disp_folder = str_replace(' ', '_', $disp_folder);
analog auch für $board_config['sitename'] benutzt, weil ich da ein Leerzeichen drin hab, und nun speichert auch Firefox die Dateien richtig ab.

Das ist imo ein sehr nützlicher Mod, den Pm Boxen sind schnell voll.

Verfasst: 12.05.2005 18:05
von Christian Benz
Hallo,

noch ein kleiner Nachtrag. :D

Die bbcodes werden wie's scheint nicht umgesetzt, bzw. verbleiben in der Datei samt der bbcode_uid. Da das irgendwie unschön aussieht, habe ich noch ein bischen weitergebastelt.

Code: Alles auswählen

#-----[ FIND ]-----------------------------------------
# (Hinweis: Falls die von John Doe vorgeschlagene Erweiterung eingebaut
# wurde, gibt's die zu findende Stelle nun natürlich zweimal.)

$sql = "SELECT pt.privmsgs_text, us.username, us.user_id, pm.privmsgs_date, pm.privmsgs_subject

#-----[ IN-LINE FIND ]---------------------------------

pm.privmsgs_subject

#-----[ IN-LINE AFTER, ADD ]---------------------------

, pt.privmsgs_bbcode_uid

#-----[ FIND ]-----------------------------------------

$pmtext .= $db_row['privmsgs_text']."\n";

#-----[ REPLACE WITH ]---------------------------------

$privbbcode_uid = $db_row['privmsgs_bbcode_uid'];
$privmesstext = preg_replace('/\[img:[a-z0-9]{10,}\].*?\[\/img:[a-z0-9]{10,}\]/', ' ', strip_tags($db_row['privmsgs_text']));
$privmesstext = preg_replace('/\[url\]|\[\/url\]/si', '', $privmesstext);
$privmesstext = preg_replace('/\[\/?url(=.*?)?\]/', '', $privmesstext);
$privmesstext = preg_replace("/\[.*?:$privbbcode_uid:?.*?\]/si", '', $privmesstext);
$pmtext .= $privmesstext."\r\n";
Da ich leider nur wenig Ahnung davon habe: Anwendung auf eigene Gefahr - und vielleicht kann mir/uns ein php-Coder sagen, wie man das besser/richtig(er) machen kann. Bitteee ... *liebschau* :roll:

So etwas a la "strip_bbcode()" gibt's ja leider nicht oder doch?

Noch ein kleiner Hinweis am Rande: Unter Windoof reicht das \n möglicherweise nicht aus für die Zeilenschaltung. Daher habe ich diese Stellen im Mod alle durch \r\n ersetzt.

Gruß,
Chris

Verfasst: 10.12.2005 09:58
von makue
Ich habe den Mod mal überarbeitet. Da ist jetzt alles mit eingeflossen, was Ihr so erwähnt habt. Scheint soweit alles korrekt zu funktionieren, jedenfalls bei mir! Falls Ihr Fehler feststellt, bitte melden. Danke!

Die neue Version 1.3 findet Ihr hier: http://www.nenafan.de/mods/downloadpm13.txt

Für ein update von der vorherigen Version einfach den Block

Code: Alles auswählen

if (count($mark_list))
{ 
... 
}
ersetzten. An anderen Stellen habe ich nichts geändert.

Verfasst: 10.12.2005 12:40
von modbo

Code: Alles auswählen

Leider hast Du keinen Zugriff auf diesen Datenbereich.
:(