View source for Aktion: Wiki-Messenger

#||
||
Compatible with: !!(green)**R6.x**!!
Current version: 0.5
Credits: ((user:AhA AhA)), ((user:WikiAdmin WikiAdmin))

|{{toc numerate=1}} ||
||#

##""{{messenger}}""##

===Description===
Ein einfacher Wiki-Messenger, der es registrierten Nutzern ermöglicht sich innerhalb des Wikis Nachrichten zu schreiben.

Desweiteren hat man die Möglichkeit eine Kontaktliste zu führen und eigene Ordner anzulegen, um die erhaltenen Nachrichten ---entsprechend zu verwalten.
Der Absender kann Nachrichten markieren und wird darüber informiert, ob eine Nachricht gelesen wurde. 
Ebenfalls vorbereitet ist eine Codezeile, die in der header.php integriert werden kann - um den Nutzer sofort nach der Anmeldung ---im Wiki anzuzeigen, dass er neue Nachrichten bekommen hat.

Der Code basiert auf dem Script [[http://wikkawiki.org/WikkaMail Wikka Mail]] und wurde nur etwas angepasst und übersetzt.
Die **Filterfunktion** wurde komplett entfernt, da sie nur bedingt brauchbar bzw sinvoll ist. Mail wurde der Verwechslung wegen in Messenger umbenannt. 
Die Funktion Nachrichten löschen wurde ebenfalls überarbeitet, da die Nachrichten im ursprünglichen Code nicht aus der Datenbank ---gelöscht wurden, sondern lediglich nicht mehr im Posteingang angezeigt wurden. Die Nachricht ist dann zwar nicht mehr im ---Posteingang, aber es baut sich eine enorme Datenbank auf - da die Nachrichten ja nicht wirklich gelöscht wurden.

Die implementierte Hilfe für den Wiki-Messenger ist noch nicht ganz fertig, wird aber in kürze vervollständigt. 
Da aber so gut wie alle Funktionen selbsterklärend sind steht einem Einsatz eigentlich nichts im Wege.


===Download===
  1. Repo for R6.1
    1. ((source:master/community/action/messenger.php action/messenger.php)) (add here: ##action/##)
    2. ((source:master/community/action/template/messenger.tpl action/template/messenger.tpl)) (add here: ##action/template/##)

===Installation===
Um das Message-System zu installieren, muss die bestehende Datenbank um 2 Tabellen erweitert werden sowie die nachfolgende PHP-Datei in den Ordner /action kopiert werden.

Aufgerufen wird der Messenger im Wiki mit ##""{{messenger}}""##

====Action====
Dieses Script muss unter dem Namen **messenger.php** gespeichert werden und in den Ordner /action kopiert werden.

====Template====
Dieses Script muss unter dem Namen **messenger.tpl** gespeichert werden und in den Ordner /action/template kopiert werden.

====Database====
Die bestehende Wacko-MySQL-Datenbank muss um die folgenden 2 Tabellen erweitert werden. Den Präfix für die Tabellen entsprechend ändern falls erforderlich.

%%(sql)
CREATE TABLE IF NOT EXISTS {$prefix}messenger (
	message_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
	user_to_id INT(10) UNSIGNED NOT NULL DEFAULT '0',
	repliedto TINYINT(1) UNSIGNED DEFAULT '0',
	folder VARCHAR(255) NOT NULL DEFAULT '',
	user_from_id INT(10) UNSIGNED NOT NULL DEFAULT '0',
	urgent TINYINT(1) UNSIGNED DEFAULT NULL,
	subject VARCHAR(255) NOT NULL DEFAULT '',
	message TEXT NOT NULL,
	status TINYINT(1) UNSIGNED DEFAULT '0',
	datesent DATETIME NULL DEFAULT NULL,
	viewrecipient TINYINT(1) UNSIGNED DEFAULT '1',
PRIMARY KEY (message_id),
KEY idx_user_to_id (user_to_id),
KEY idx_user_from_id (user_from_id)
);

CREATE TABLE IF NOT EXISTS {$prefix}messenger_info (
	msg_info_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
	owner_id INT(10) UNSIGNED NOT NULL DEFAULT '0',
	type VARCHAR(255) NOT NULL DEFAULT '',
	info VARCHAR(255) NOT NULL DEFAULT '',
	notes VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (msg_info_id),
KEY idx_owner_id (owner_id)
);
%%

====Message sets====
Add the message sets to your ##lang/custom.<lang>.php##  file.

en
%%(php)
<?php

$custom_translation = [

	// messenger
	'Inbox'						=> 'Inbox',
	'Compose'					=> 'Compose',
	'View'						=> 'View',
	'SentItems'					=> 'Sent Items',
	'Manage'					=> 'Manage',
	'Folders'					=> 'Folders',
	'Contacts'					=> 'Contacts',
	'Users'						=> 'Users',
	'SentMessage'				=> 'Sent Message',
	'Folder'					=> 'Folder',
	'MessageMoved'				=> 'Message moved to %1 folder.',
	'MessageNotMoved'			=> 'The message wasn\'t moved.',
	'MessageTopic'				=> 'Message Topic',
	'Sender'					=> 'Sender',
	'Date'						=> 'Date',
	'MoveToFolder'				=> 'Move to Folder',
	'Delete'					=> 'Delete',
	'MessageDeleted'			=> 'The message was deleted.',
	'MessageNotDeleted'			=> 'The message was not deleted.',
	'MessageNotRead'			=> 'This message has not been read yet!',
	'UrgentMessage'				=> 'This is an urgent message!',
	'MessageReplied'			=> 'You have replied to this message!',
	'Move'						=> 'Move',
	'DeleteItem'				=> 'Are you sure you want to delete this item?',
	'ClickArrow'				=> 'Clicking on the right arrow indicator [->] will add the users name to the contacts list.',
	'AlreadyReplied'			=> 'A + sign to the right of the message title indicates that you have replied to the message.',
	'NoMessagesInbox'			=> 'There are currently no messages in the in-box.',
	'ComposeMessage'			=> 'Compose a message',
	'Subject'					=> 'Subject',
	'Message'					=> 'Message',
	'CharactersLeft'			=> '%1 characters left.',
	'Urgent'					=> 'Urgent?',
	'ContactList'				=> 'Contact List',
	'ClickName'					=> 'click on name to add to form',
	'ReplyToMessage'			=> 'Reply to the message',
	'OriginalMessage'			=> 'Original Message',
	'Fwd'						=> 'Fwd:',
	'MessageSentTo'				=> 'Message Sent to %1!',
	'MessagingForbidden'		=> 'You must be registered and logged in to use this Private Messaging System.',
	'SentTo'					=> 'Sent to',
	'Status'						=> 'Status',
	'NoMessagesFolder'			=> 'There are no messages currently stored in this folder.',
	'Re'						=> 'Re:',
	'Reply'						=> 'Reply',
	'Forward'					=> 'Forward',
	'ForwardMessage'			=> 'Forward message',
	'Recipient'					=> 'Recipient',
	'ChooseRecipient'			=> 'Choose a recipient',
	'MessageDeleted'			=> 'Message was deleted.',
	'MessageNotDeleted'			=> 'The message was not deleted.',
	'ContactNames'				=> 'Contact Names',
	'Notes'						=> 'Notes',
	'Send'						=> 'Send',
	'Add'						=> 'Add',
	'ClickContact'				=> 'Clicking on the contact name will take you to message entry screen.',
	'ClickContact2'				=> 'Click on the name to add it to the contact list.',
	'FolderList'				=> 'Folder Management',
	'ClickFolder'				=> 'Clicking on the folder name will take you to that folder.',
	'NotYourPost'				=> 'This is not your post!',
	'AddUserToList'				=> 'To add a user to your contact list please click here!',
	'CreateFolder'				=> 'Create folder:',
	'CreateFolderHelp'			=> 'In the empty field under <b>Folder:</b> enter the name for the new folder.<br><br>In the field <b>Description:</b> you can enter a description for the folder.<br><br>Now another click on <b>Add</b> and the new folder is available to you.',
	'NewMessage'					=> 'New message',
	'NewMessageTitle'				=> 'You have new messages.',
	'MessageStatus' => [
		'1'		=> 'pending',
		'2'		=> 'read',
	],
];
%%

de
%%(php)
<?php

$custom_translation = [

	// messenger
	'Inbox'						=> 'Posteingang',
	'Compose'					=> 'Verfassen',
	'View'						=> 'Anzeigen',
	'SentItems'					=> 'Postausgang',
	'Manage'					=> 'Verwalten',
	'Folders'					=> 'Ordner',
	'Contacts'					=> 'Kontaktliste',
	'Users'						=> 'Benutzer',
	'SentMessage'				=> 'gesendete Nachrichten',
	'Folder'					=> 'Ordner',
	'MessageMoved'				=> 'Die Nachricht wurde in Ordner %1 verschoben.',
	'MessageNotMoved'			=> 'Die Nachricht wurde nicht verschoben!',
	'MessageTopic'				=> 'Message Topic',
	'Sender'					=> 'Absender',
	'Date'						=> 'Datum',
	'MoveToFolder'				=> 'Verschieben in Ordner',
	'Delete'					=> 'Löschen',
	'MessageDeleted'			=> 'Die Nachricht wurde gelöscht.',
	'MessageNotDeleted'			=> 'Die Nachricht wurde nicht gelöscht.',
	'MessageNotRead'			=> 'Diese Nachricht wurde noch nicht gelesen!',
	'UrgentMessage'				=> 'Dies ist eine dringende Nachricht!',
	'MessageReplied'			=> 'Auf diese Nachricht wurde bereits geantwortet!',
	'Move'						=> 'Verschieben',
	'DeleteItem'				=> 'Bist Du sicher, dass Du diesen Eintrag löschen möchtest?',
	'ClickArrow'				=> 'Wenn Sie auf die rechte Pfeilanzeige [->] klicken, wird der Name des Benutzers in die Kontaktliste aufgenommen.',
	'AlreadyReplied'			=> 'Ein +-Zeichen rechts neben dem Nachrichtentitel zeigt an, dass du auf die Nachricht geantwortet hast.',
	'NoMessagesInbox'			=> 'Zur Zeit sind keine Nachrichten im Posteingang.',
	'ComposeMessage'			=> 'Nachricht verfassen',
	'Subject'					=> 'Betreff',
	'Message'					=> 'Nachricht',
	'CharactersLeft'			=> '%1 Zeichen stehen noch zur Verfügung.',
	'Urgent'					=> 'Dringend?',
	'ContactList'				=> 'Kontakt-Liste',
	'ClickName'					=> 'Klick auf den Namen um den Benutzer als Empfänger einzusetzen',
	'ReplyToMessage'			=> 'Antwort erstellen',
	'OriginalMessage'			=> 'Ursprüngliche Nachricht',
	'Fwd'						=> 'Fwd:',
	'MessageSentTo'				=> 'Nachricht gesendet an %1!',
	'MessagingForbidden'		=> 'Du must registriert und angemeldet sein um das Message-System nutzen zu können!',
	'SentTo'					=> 'Sent to',
	'Status'						=> 'Status',
	'NoMessagesFolder'			=> 'Zur Zeit sind keine Nachrichten in diesem Ordner!',
	'Re'						=> 'Re:',
	'Reply'						=> 'Antworten',
	'Forward'					=> 'Weiterleiten',
	'ForwardMessage'			=> 'Nachricht weiterleiten',
	'Recipient'					=> 'Empfänger',
	'ChooseRecipient'			=> 'Wähle einen Empfänger',
	'MessageDeleted'			=> 'Nachricht wurde gelöscht.',
	'MessageNotDeleted'			=> 'Die Nachricht wurde nicht gelöscht.',
	'ContactNames'				=> 'Name',
	'Notes'						=> 'Beschreibung',
	'Send'						=> 'Abschicken',
	'Add'						=> 'Hinzufügen',
	'ClickContact'				=> 'Klick auf den Benutzernamen um einem Benutzer aus der Kontaktliste eine Nachricht zu schreiben.',
	'ClickContact2'				=> 'Klick auf den Namen um den User zu Deiner Kontaktliste hinzuzufügen.',
	'FolderList'				=> 'Ordner verwalten',
	'ClickFolder'				=> 'Klick auf den Ordnernamen um einen Ordner zu öffnen!',
	'NotYourPost'				=> 'Das ist nicht Deine Post!',
	'AddUserToList'				=> 'Um einen Benutzer zu Deiner Kontaktliste hinzuzufügen bitte hier klicken!',
	'CreateFolder'				=> 'Ordner erstellen:',
	'CreateFolderHelp'			=> 'Gib in das leere Feld unter <b>Ordner:</b> den Namen für den neuen Ordner ein.<br><br>In das Feld <b>Beschreibung:</b> kannst Du eine Beschreibung für den Ordner eingeben.<br><br>Nun noch ein Klick auf <b>Hinzufügen</b> und der neue Ordner steht Dir zur Verfügung.',
	'NewMessage'					=> 'Neue Nachricht',
	'NewMessageTitle'				=> 'Du hast neue Nachrichten.',
	'MessageStatus' => [
		'1'		=> 'ungelesen',
		'2'		=> 'gelesen',
	],
];
%%

====local usage of repository====
symlink the gallery action from community action folder in **wacko/action** and **wacko/action/template** folder in repo
%%
ln -s ../../community/action/messenger.php messenger.php
ln -s ../../../community/action/template/messenger.tpl messenger.tpl
%%

===Notify there are messages in the Box===

You might wish to have a little icon appearing besite your Username after loging in, if you have still messages in your inbox. Here is a codesnippet wo do this for you.

Die nachfolgende Codezeile kann z.B. in die header.php eingefügt werden. Bekommt der Nutzer eine neue Nachricht, wird das dann an der entsprechende Stelle angezeigt sobald er sich anmeldet.

%%(php)
<?php

	if ($this->db->load_all(
		"SELECT status
			FROM {$this->db->table_prefix}messenger
			WHERE user_to_id = " . (int) $this->get_user_id() . "
				AND folder = 'inbox'
				AND status = 1
				AND viewrecipient = 1
			LIMIT 1"))
	{
		$tpl->uare_message_href = $this->href('', 'Messenger', ['action' => 'inbox']);	// $this->db->messenger_page
	}
%%

%%
[= message _ =
	<a href="[ ' link ' ]" title="[ ' _t: NewMessageTitle ' ]"><span class="cite"><strong>[ ' _t: NewMessage ' ]</strong></span></a>
=]
%%

===Changelog===
0.1	Intitial version
0.2  Ported to WackoWiki, removed filter function
0.3  Ported to R6.0
0.4 Adds template  and localizes message sets
0.5 Moved inline CSS to <style> in template

===ToDo===
  * --localization--
  * refactoring
  * table optimization
  * --use template--
  * --using wacko internal pagination--
  * --put it in community repo--

It is now working again, however not very useful  workflow wise.