Aktion: Wiki-Messenger

Compatible with: R6.x
Current version: 0.4
Credits: AhA, WikiAdmin

{{messenger}}

1. 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 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.


2. Download

  1. Repo for R6.1 (switch branch for previous versions)
    1. action/messenger.php (add here: action/)
    2. action/template/messenger.tpl (add here: action/template/)

3. 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}}

3.1. Action

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

3.2. Template

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

3.3. 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.


CREATE TABLE wacko_messenger (
  message_id INT(10NOT NULL AUTO_INCREMENT,
  user_to_id INT(10) UNSIGNED NOT NULL DEFAULT '0',
  repliedto TINYINT(1DEFAULT '0',
  folder TINYTEXT NOT NULL,
  user_from_id INT(10) UNSIGNED NOT NULL DEFAULT '0',
  urgent TINYINT(1DEFAULT NULL,
  subject MEDIUMTEXT NOT NULL,
  message LONGTEXT NOT NULL,
  status TINYINT(1DEFAULT '0',
  datesent DATETIME NULL DEFAULT NULL,
  viewrecipient TINYINT(1DEFAULT '1',
PRIMARY KEY (message_id),
KEY idx_user_to_id (user_to_id),
KEY idx_user_from_id (user_from_id)
);

CREATE TABLE wacko_messenger_info (
  msg_info_id INT(10NOT NULL AUTO_INCREMENT,
  owner_id INT(10) UNSIGNED NOT NULL DEFAULT '0',
  type TINYTEXT NOT NULL,
  info TINYTEXT NOT NULL,
  notes TINYTEXT,
PRIMARY KEY (msg_info_id),
KEY idx_owner_id (owner_id)
);

3.4. Message sets

en

// 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 no 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',
	'Read'						=> 'Read?',
	'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'				=> 'Um einen Benutzer zu Deiner Kontaktliste hinzuzufügen bitte hier klicken!',
	'CreateFolder'				=> 'Create folder:',
	'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.',

	'MessageStatus'=> [
		'1'		=> 'pending',
		'2'		=> 'read',
	],	

de

// 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',
	'Read'						=> 'Gelesen',
	'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.',
	'MessageStatus'=> [
		'1'		=> 'ungelesen',
		'2'		=> 'gelesen',
	],	

3.5. 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	

4. 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
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 = 'pending'
             AND viewrecipient = '1'
         LIMIT 1"
)) != 0)
{
         echo 
'<a title="Du hast neue Nachrichten."><span class="cite"><strong>Neue Nachricht</strong></span></a>';
}

5. 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

6. ToDo

  • localization
  • refactoring
  • table optimization
  • use template
  • using wacko internal pagination
  • put it in community repo

Read comments (3 comments)