From a3bcb57bcab2866447b0b4dbed13ed8b71cd2975 Mon Sep 17 00:00:00 2001
From: vgilc <noreply@pandorafms.org>
Date: Wed, 28 Mar 2012 14:54:27 +0000
Subject: [PATCH] 2012-03-28  Vanessa Gil  <vanessa.gil@artica.es>

	* pandoradb.sql
	  pandoradb.postgreSQL.sql
	  pandoradb.oracle.sql,
	  extras/pandoradb_migrate_4.0.x_to_4.1.mysql.sql,
	  extras/pandoradb_migrate_4.0.x_to_4.1.oracle.sql,
	  extras/pandoradb_migrate_4.0.x_to_4.1.postgreSQL.sql: added 'created_by'
	to tusuario table and modify 'mensaje' field to tmensajes.

	* general/header.php
	  godmode/users/configure_user.php
	  include/functions_groups.php
	  include/functions_messages.php
	  include/javascript/jquery.pandora.js
	  operation/menu.php: Added operation: Fixed several bugs and
	modify sending and receiving messages.

	* images/email_go.png
	  images/email_edit.png
	  operation/messages/message_list.php
	  operation/messages/message_edit.php: Added files.


git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@5844 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
---
 pandora_console/ChangeLog                     |  23 ++
 .../pandoradb_migrate_4.0.x_to_4.1.mysql.sql  |  10 +
 .../pandoradb_migrate_4.0.x_to_4.1.oracle.sql |  12 +-
 ...doradb_migrate_4.0.x_to_4.1.postgreSQL.sql |   9 +
 pandora_console/general/header.php            |   2 +-
 .../godmode/users/configure_user.php          |   1 +
 pandora_console/images/email_edit.png         | Bin 0 -> 763 bytes
 pandora_console/images/email_go.png           | Bin 0 -> 720 bytes
 pandora_console/include/functions_groups.php  |  14 +-
 .../include/functions_messages.php            |  99 ++++++-
 .../include/javascript/jquery.pandora.js      |   2 +-
 pandora_console/operation/menu.php            |   4 +-
 .../operation/messages/message.php            | 273 ------------------
 .../operation/messages/message_edit.php       | 188 ++++++++++++
 .../operation/messages/message_list.php       | 225 +++++++++++++++
 pandora_console/pandoradb.sql                 |   3 +-
 16 files changed, 577 insertions(+), 288 deletions(-)
 create mode 100644 pandora_console/images/email_edit.png
 create mode 100644 pandora_console/images/email_go.png
 delete mode 100644 pandora_console/operation/messages/message.php
 create mode 100644 pandora_console/operation/messages/message_edit.php
 create mode 100644 pandora_console/operation/messages/message_list.php

diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog
index 3532c48dff..3914fc8aac 100644
--- a/pandora_console/ChangeLog
+++ b/pandora_console/ChangeLog
@@ -1,3 +1,26 @@
+2012-03-28  Vanessa Gil  <vanessa.gil@artica.es>
+
+	* pandoradb.sql
+	  pandoradb.postgreSQL.sql
+	  pandoradb.oracle.sql,
+	  extras/pandoradb_migrate_4.0.x_to_4.1.mysql.sql,
+	  extras/pandoradb_migrate_4.0.x_to_4.1.oracle.sql,
+	  extras/pandoradb_migrate_4.0.x_to_4.1.postgreSQL.sql: added 'created_by'
+	to tusuario table and modify 'mensaje' field to tmensajes.
+
+	* general/header.php
+	  godmode/users/configure_user.php
+	  include/functions_groups.php
+	  include/functions_messages.php
+	  include/javascript/jquery.pandora.js
+	  operation/menu.php: Added operation: Fixed several bugs and
+	modify sending and receiving messages.
+
+	* images/email_go.png
+	  images/email_edit.png
+	  operation/messages/message_list.php
+	  operation/messages/message_edit.php: Added files.
+
 2012-03-28  Sergio Martin <sergio.martin@artica.es>
 
 	* include/styles/images/ui-bg_gloss-wave_35_f6a828_500x100.png
diff --git a/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.mysql.sql b/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.mysql.sql
index b6362c0a34..0542a3b253 100644
--- a/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.mysql.sql
+++ b/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.mysql.sql
@@ -192,3 +192,13 @@ ALTER TABLE `tusuario` ADD COLUMN `data_section` TEXT NOT NULL;
 -- Table `treport_content_item`
 -- -----------------------------------------------------
 ALTER TABLE `treport_content_item` ADD COLUMN `operation` TEXT DEFAULT '';
+
+-- -----------------------------------------------------
+-- Table `tusuario`
+-- -----------------------------------------------------
+ALTER TABLE `tusuario` ADD COLUMN `created_by` TEXT NOT NULL DEFAULT '';
+
+-- -----------------------------------------------------
+-- Table `tmensajes`
+-- -----------------------------------------------------
+ALTER TABLE `tmensajes` MODIFY COLUMN `mensaje` TEXT NOT NULL DEFAULT '';
diff --git a/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.oracle.sql b/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.oracle.sql
index 607416355c..6b17473d33 100644
--- a/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.oracle.sql
+++ b/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.oracle.sql
@@ -187,4 +187,14 @@ ALTER TABLE tusuario ADD (data_section VARCHAR2(255) NOT NULL);
 -- -----------------------------------------------------
 -- Table `treport_content_item`
 -- -----------------------------------------------------
-ALTER TABLE `treport_content_item` ADD (operation` CLOB default '');
+ALTER TABLE treport_content_item ADD (operation CLOB default '');
+
+-- -----------------------------------------------------
+-- Table `tusuario`
+-- -----------------------------------------------------
+ALTER TABLE tusuario ADD (created_by VARCHAR2(255) NOT NULL DEFAULT '';
+
+-- -----------------------------------------------------
+-- Table `tmensajes`
+-- -----------------------------------------------------
+ALTER TABLE tmensajes MODIFY mensaje VARCHAR2(255) NOT NULL DEFAULT '';
diff --git a/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.postgreSQL.sql b/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.postgreSQL.sql
index 016f87104d..41ac05b53c 100644
--- a/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.postgreSQL.sql
+++ b/pandora_console/extras/pandoradb_migrate_4.0.x_to_4.1.postgreSQL.sql
@@ -181,3 +181,12 @@ ALTER TABLE "tusuario" ADD COLUMN "data_section" varchar(255) NOT NULL DEFAULT '
 -- -----------------------------------------------------
 ALTER TABLE "treport_content_item" ADD COLUMN "operation" text default '';
 
+-- -----------------------------------------------------
+-- Table `tusuario`
+-- -----------------------------------------------------
+ALTER TABLE "tusuario" ADD COLUMN "created_by" varchar(255) NOT NULL DEFAULT '';
+
+-- -----------------------------------------------------
+-- Table `tmensajes`
+-- -----------------------------------------------------
+ALTER TABLE "tmensajes" ALTER COLUMN "mensaje" TYPE TEXT;
diff --git a/pandora_console/general/header.php b/pandora_console/general/header.php
index 122f47fd65..689ade90f9 100644
--- a/pandora_console/general/header.php
+++ b/pandora_console/general/header.php
@@ -61,7 +61,7 @@ config_check();
 					echo '<div id="dialog_messages" style="display: none"></div>';
 					ui_require_css_file ('dialog');
 					
-					echo '<a href="ajax.php?page=operation/messages/message" title="' . __("Message overview") . '" id="show_messages_dialog">';
+					echo '<a href="ajax.php?page=operation/messages/message_list" title="' . __("Message overview") . '" id="show_messages_dialog">';
 					html_print_image ("images/email.png", false,
 					array ("title" => __('You have %d unread message(s)', $msg_cnt), "id" => "yougotmail", "class" => "bot"));
 					echo '</a>';
diff --git a/pandora_console/godmode/users/configure_user.php b/pandora_console/godmode/users/configure_user.php
index 9006dbef5e..42ac6e204e 100644
--- a/pandora_console/godmode/users/configure_user.php
+++ b/pandora_console/godmode/users/configure_user.php
@@ -125,6 +125,7 @@ if ($create_user) {
 	$values['comments'] = (string) get_parameter ('comments');
 	$values['is_admin'] = (int) get_parameter ('is_admin', 0);
 	$values['language'] = get_parameter ('language', 'default');
+	$values['created by'] = $config['id_user'];
 	if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) {
 		$values['id_skin'] = (int) get_parameter ('skin', 0);
 	}
diff --git a/pandora_console/images/email_edit.png b/pandora_console/images/email_edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..63e026ffe0b439cf4d816e7872c02adb25e3c1a9
GIT binary patch
literal 763
zcmV<X0tEeuP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!ok>JNRCwB?lUqm>VHC&zvpdf2x_Mdi
zva3iJyGrVcS!q;;NCkxyn9xHBQkY0dAW0A5gF#7<LZk_rTVxVJ(St4cV1_9z-d+OT
zj1Ubq%w0_|cAYt$Z`KD3ilTu(b2yy;Z@zQBGZGQue;&Ew@z9IF3KeRahQCEgEQ7%S
zMV3Cu!rXK&3qel)3m}YD<{I28YouYBop)bP<IG+MM&?2!N&4BOcgi_u9MJx51{HaB
zXq+^NVpRjuQtW8!`Gf<BfK>s)`4iSv=`rUHCIM}|6G+=>hbo{(i2?is8M4kK>5!&w
zhB(+{1k9@vvB=$jGl`7U4cKzejoBJEf+i&d&=?@|@$5DW5^NEudo_-I@qk4MNyN9i
zCXkd6hk@p6FlX+7FV=?Y;jvYK7z#%+t7La9q9QD~)%6k1Xy~fz{*0*g@fho<Ls@wx
zT;m<^P5H1gHxmMgIVduaY6EIJ$5D`(r00qo`%&CH1XYPfZpU_1o!y1z2Tzdg%!WJI
ziTWe?KxwOoW`jgNR&A%38ha;c^c&IG5|Q^izj@O<RVhUMc|=b)()(xEsl1|+7CC?Z
z(J;ySHt~>N4ou^4dNLd_X8l%(&qmz;*DITmQ?v<~ngx7*^u2Xqf3;U{n^cv(yisNz
z;PGsSK1^}nE8=DtFm*W@xu=DB8d&&(R!;&>xkmLx5;dZK>7vWCppqd{)ii_#Dj@(1
zS|Uqf$~g(lF9UrIcsQ7d?tC|l0Y4-)pqq`7wkTj3hf1oQYA~Sc0FBh8#f9aod;HI1
zwx!`{dK6p@Ex0pZP-HcSDF$c;aZF>FV(e+VIf6^=!@_4}g|CsRrtAdWxNwZT^@U=I
tvsmU|YOKO5{o$X<S`!ccuIPsV0|2}k3L(q)_80&F002ovPDHLkV1lgqRn`Ci

literal 0
HcmV?d00001

diff --git a/pandora_console/images/email_go.png b/pandora_console/images/email_go.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b3d933ec95cb57a03160c5a83cf87888371893f
GIT binary patch
literal 720
zcmV;>0x$iEP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!a!Eu%RCwB?lS^n5Q51&%JDFtCW@4MP
z*2XFpiY^4xN=+kzkE|4_5AX%HXf}dE2`&{;K|w^2igZ!Ig~22X6%`A$ty(p~g{_aO
z_0?djRS1MYm|83(of*%a86$4Q;=oVt9P)qnKlh$tx~}7Y9<d|-;&x$H-==9A{uRYY
zf*`;lvb4y}-TRwSq~crvcGAJ<^QEGuYnUNt*P{&f27MUGnIy*kG#Q;zt*IJFJk6kE
zgAd#*@IR{>u%e+BR~}Db?Lxri0Lp0#mnFWIskW{Th$cV7-{3Pm+$(T;kruMV3`qAw
zg80Z}1Duv*0?>xIoSeqWW%Y2E0kc*z1E3K=q<FQSGA!`8ajx$ZR@V^3VWw%J*n#5=
zxk)$f4eu~&=3xjHfFBC2L{fNFH9WE#=O1LzSPA$^T`54K6z!qIkcu~PwSPD4l*}eL
zOaSl2Ap*-iz?r+_*c7P2(1%@UImr+tB?g(1k_nY)4eW$nyN=GDHiCE|T1l`(20HuG
zm|r2oLGNF(NnDFu!1v++9~ba}vk6sro4tXp!8Y{0iX)q!G65pRx$`W8kbf~2RXL4z
z_>(V;VR*8)bd{Rk14jM7%f+$1r5#5<#>h((<)i~_4fxEMw3aOB6dQq5VYbNUKrNae
z8{hDCjLvEc*rDi<qUyptRntlrBidx-lmk$vQ>EQiy0`Ei6EyJ^7=6DPb>2$~pSQ;K
z;Ui6Iv7r8*RT~YRXow8z4@H^ruDN(Cybnl^0fPhR)xVueq+%yV5lOt{78j}fFOoK%
zg?{=8^w2Tfr}uhZk0joJ&Ed;!wtn-Z@n6NC0t^6+_RdM=XhQ=40000<MNUMnLSTYd
Ct4ezS

literal 0
HcmV?d00001

diff --git a/pandora_console/include/functions_groups.php b/pandora_console/include/functions_groups.php
index f58ddaa8f0..5d5ddecd2a 100644
--- a/pandora_console/include/functions_groups.php
+++ b/pandora_console/include/functions_groups.php
@@ -565,9 +565,16 @@ function groups_get_name ($id_group, $returnAllGroup = false) {
  * @return array An array with all the users or an empty array
  */
 function groups_get_users ($id_group, $filter = false) {
+	global $config;
+	
 	if (! is_array ($filter))
 		$filter = array ();
 	
+	//Users created by user
+	$filter['created_by'] = $config['id_user']; 
+	$users_created = db_get_all_rows_filter ("tusuario", $filter);
+	unset($filter['created_by']);
+	
 	$filter['id_grupo'] = $id_group;
 	
 	$resulta = array();
@@ -588,7 +595,12 @@ function groups_get_users ($id_group, $filter = false) {
 		$result = array_merge($resulta,$resultb);
 
 	if ($result === false)
-	return array ();
+		return array ();
+	else {
+		if ($users_created !== false) {
+			$result = array_merge($result, $users_created);
+		}
+	}
 	
 	//This removes stale users from the list. This can happen if switched to another auth scheme
 	//(internal users still exist) or external auth has users removed/inactivated from the list (eg. LDAP)
diff --git a/pandora_console/include/functions_messages.php b/pandora_console/include/functions_messages.php
index 4753d80daa..7c404643ad 100644
--- a/pandora_console/include/functions_messages.php
+++ b/pandora_console/include/functions_messages.php
@@ -108,7 +108,7 @@ function messages_delete_message ($id_message) {
 	global $config;
 	
 	$where = array(
-		'id_usuario_destino' => $config["id_user"],
+		//'id_usuario_destino' => $config["id_user"],
 		'id_mensaje' => $id_message);
 	return (bool)db_process_sql_delete('tmensajes', $where);
 }
@@ -144,7 +144,7 @@ function messages_process_read ($message_id, $read = true) {
 function messages_get_message ($message_id) {
 	global $config;
 
-	$sql = sprintf("SELECT id_usuario_origen, subject, mensaje, timestamp
+	$sql = sprintf("SELECT id_usuario_origen, id_usuario_destino, subject, mensaje, timestamp
 		FROM tmensajes
 		WHERE id_usuario_destino='%s' AND id_mensaje=%d" , $config["id_user"], $message_id);
     $row = db_get_row_sql ($sql);
@@ -153,14 +153,34 @@ function messages_get_message ($message_id) {
 		return false;
 	}
 	
-	$return["sender"] = $row["id_usuario_origen"];
-	$return["subject"] = $row["subject"];
-	$return["message"] = $row["mensaje"];
-	$return["timestamp"] = $row["timestamp"];
-	
-	return $return;
+	return $row;
 }
 
+/** 
+ * Gets a sent message
+ *
+ * This function abstracts the database backend so it can simply be replaced with another system
+ * 
+ * @param int $message_id
+ *
+ * @return mixed False if it doesn't exist or a filled array otherwise
+ */
+function messages_get_message_sent ($message_id) {
+	global $config;
+
+	$sql = sprintf("SELECT id_usuario_origen, id_usuario_destino, subject, mensaje, timestamp
+		FROM tmensajes
+		WHERE id_usuario_origen='%s' AND id_mensaje=%d" , $config["id_user"], $message_id);
+    $row = db_get_row_sql ($sql);
+	
+	if (empty ($row)) {
+		return false;
+	}
+	
+	return $row;
+}
+
+
 /** 
  * Counts private messages
  *
@@ -185,6 +205,25 @@ function messages_get_count ($user = false, $incl_read = false) {
 	return (int) db_get_sql ($sql);
 }
 
+/** 
+ * Counts sended messages
+ *
+ * @param string $user
+ *
+ * @return int The number of messages this user has sent
+ */
+function messages_get_count_sent ($user = false) {
+	if (empty ($user)) {
+		global $config;
+		$user = $config["id_user"];
+	}
+	$sql = sprintf("SELECT COUNT(*)
+		FROM tmensajes WHERE id_usuario_origen='%s'", $user);
+    
+	return (int) db_get_sql ($sql);
+}
+
+
 /** 
  * Get message overview in array
  *
@@ -229,4 +268,48 @@ function messages_get_overview ($order = "status", $order_dir = "ASC") {
 	return $result;
 }
 
+/** 
+ * Get sent message overview in array
+ *
+ * @param string $order How to order them valid: 
+ * (status (default), subject, timestamp, sender)
+ * @param string $order_dir Direction of order (ASC = Ascending, DESC = Descending)
+ *
+ * @return int The number of messages this user has
+ */
+function messages_get_overview_sent ($order = "timestamp", $order_dir = "ASC") {
+	global $config;
+	
+	switch ($order) {
+		case "timestamp":
+		case "sender":
+		case "subject":
+		break;
+		case "status":
+		default:
+			$order = "estado, timestamp";
+			break;
+	}
+	
+	if ($order_dir != "ASC") {
+		$order .= " DESC";
+	}
+	
+	$result = array ();
+	$return = db_get_all_rows_field_filter ('tmensajes', 'id_usuario_origen', $config["id_user"], $order);
+	
+	if ($return === false) {
+		return $result;
+	}
+	
+	foreach ($return as $message) {
+		$result[$message["id_mensaje"]]["dest"] = $message["id_usuario_destino"];
+		$result[$message["id_mensaje"]]["subject"] = $message["subject"];
+		$result[$message["id_mensaje"]]["timestamp"] = $message["timestamp"];
+		$result[$message["id_mensaje"]]["status"] = $message["estado"];
+	}
+	
+	return $result;
+}
+
 ?>
diff --git a/pandora_console/include/javascript/jquery.pandora.js b/pandora_console/include/javascript/jquery.pandora.js
index 5f864db67a..0e5290edd0 100644
--- a/pandora_console/include/javascript/jquery.pandora.js
+++ b/pandora_console/include/javascript/jquery.pandora.js
@@ -34,7 +34,7 @@
 $(document).ready (function () {
 	$("a#show_messages_dialog").click (function () {
 		jQuery.get ("ajax.php",
-			{"page": "operation/messages/message"},
+			{"page": "operation/messages/message_list"},
 			function (data, status) {
 				$("#dialog_messages").hide ()
 					.empty ()
diff --git a/pandora_console/operation/menu.php b/pandora_console/operation/menu.php
index f301186ffd..78754fdbc6 100644
--- a/pandora_console/operation/menu.php
+++ b/pandora_console/operation/menu.php
@@ -286,11 +286,11 @@ if (check_acl ($config['id_user'], 0, "AR")) {
 	// Messages
 	$menu["messages"]["text"] = __('Messages');
 	$menu["messages"]["refr"] = 0;
-	$menu["messages"]["sec2"] = "operation/messages/message";
+	$menu["messages"]["sec2"] = "operation/messages/message_list";
 	$menu["messages"]["id"] = "oper-messages";
 	
 	$sub = array ();
-	$sub["operation/messages/message&amp;new_msg=1"]["text"] = __('New message');
+	$sub["operation/messages/message_edit&amp;new_msg=1"]["text"] = __('New message');
 	
 	$menu["messages"]["sub"] = $sub;
 	
diff --git a/pandora_console/operation/messages/message.php b/pandora_console/operation/messages/message.php
deleted file mode 100644
index 08dc190c82..0000000000
--- a/pandora_console/operation/messages/message.php
+++ /dev/null
@@ -1,273 +0,0 @@
-<?php
-
-// Pandora FMS - http://pandorafms.com
-// ==================================================
-// Copyright (c) 2005-2009 Artica Soluciones Tecnologicas
-// Please see http://pandorafms.org for full contribution list
-
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation for version 2.
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-
-
-// Load global vars
-global $config;
-require_once ("include/functions_messages.php");
-require_once ('include/functions_users.php');
-require_once ('include/functions_groups.php');
-
-//First Queries - also inits the variables so it can be passed along
-$dest_user = get_parameter ("dest_user");
-$dest_group = get_parameter ("dest_group");
-$subject = get_parameter ("subject");
-$message = get_parameter ("mensaje");
-$send_message = (bool)get_parameter('send_mes', false);
-
-if (isset ($_GET["new_msg"])) 
-	ui_print_page_header (__('Messages'). " &raquo;  ".__('New message'), "images/email.png", false, "", false, "" );
-elseif (isset ($_GET["read_message"]))
-	ui_print_page_header (__('Messages'). " &raquo;  ".__('Read message'), "images/email.png", false, "", false, "" );
-else
-	if (empty ($config["pure"]) && !is_ajax ())
-		ui_print_page_header (__('Messages'). " &raquo;  ".__('Message overview'), "images/email.png", false, "", false, "" );
-	
-if (isset ($_GET["delete_message"])) {
-	$id = (int) get_parameter ("id");
-	$result = messages_delete_message ($id); //Delete message function will actually check the credentials
-	
-	ui_print_result_message ($result,
-		__('Successfully deleted'),
-		__('Could not be deleted'));
-}
-
-$message_sended = false;
-
-if (!empty ($dest_user) && isset ($_GET["send_message"])) {
-	// Create message
-	$return = messages_create_message ($config["id_user"], $dest_user, $subject, $message);
-	
-	if ($return) {
-		$message_sended = true;
-	}
-	
-	ui_print_result_message ($return,
-		__('Message successfully sent to user %s', get_user_fullname ($dest_user)),
-		__('Error sending message to user %s', get_user_fullname ($dest_user)));
-}
-
-if (!empty ($dest_group) && isset ($_GET["send_message"])) {
-	// Create message to groups
-	$return = messages_create_group ($config["id_user"], $dest_group, $subject, $message);
-	
-	if ($return) {
-		$message_sended = true;
-	}
-	
-	ui_print_result_message ($return,
-		__('Message successfully sent'),
-		__('Error sending message to group %s', groups_get_name ($dest_group)));
-}
-
-$new_msg = (bool) get_parameter("new_msg");
-
-if ($send_message && !$message_sended && !$new_msg) {
-	ui_print_error_message("Error sending message, please choose group or user.");
-}
-
-if (isset ($_GET["mark_read"]) || isset ($_GET["mark_unread"])) {
-	$id_r = (int) get_parameter ("mark_read");
-	$id_u = (int) get_parameter ("mark_unread");
-	if (!empty ($id_r)) {
-		//Set to read
-		messages_process_read ($id_r);
-	} elseif (!empty ($id_u)) {
-		//Set to unread
-		messages_process_read ($id_u, 0);
-	}
-}
-
-if (isset ($_GET["new_msg"]) || ($send_message && !$message_sended)) { //create message
-
-// Header
-//	ui_print_page_header (__('Messages'). " &raquo;  ".__('New message'), "images/email.png", false, "", false, "" );
-
-	echo '<form method="POST" action="index.php?sec=messages&amp;sec2=operation/messages/message&amp;send_message=1">
-	<table width="98%" class="databox_color" cellpadding="4" cellspacing="4">
-	<tr>
-		<td class="datos">'.__('Message from').':</td>
-		<td class="datos"><b>' . ui_print_username ($config["id_user"], true).'</b></td>
-	</tr><tr>
-		<td class="datos2">'.__('Message to').':</td>
-		<td class="datos2">';
-	
-	$users_full = groups_get_users(array_keys(users_get_groups()));
-
-	$users = array();
-	foreach ($users_full as $user_id => $user_info) {
-		$users[$user_info['id_user']] = $user_info['fullname'];
-	}
-		
-	$groups = users_get_groups ($config["id_user"], "AR"); //Get a list of all groups
-		
-	html_print_select ($users, "dest_user", $dest_user, '', __('-Select user-'), false, false, false, '', false);
-	echo ' - '.__('OR').' - ';
-	html_print_select_groups($config["id_user"], "AR", true, "dest_group", $dest_group, '', __('-Select group-'), false, false, false, '', false);
-	
-	echo '</td></tr><tr><td class="datos">'.__('Subject').':</td><td class="datos">';
-	html_print_input_text ("subject", urldecode($subject), '', 50, 70, false);
-	
-	echo '</td></tr><tr><td class="datos2">'.__('Message').':</td><td class="datos">';
-	
-	html_print_textarea ("mensaje", 15, 70, $message, '', false);
-	
-	echo '</td></tr><tr><td></td><td colspan="3">';
-	
-	html_print_submit_button (__('Send message'), 'send_mes', false, 'class="sub wand"', false);
-	
-	echo '</td></tr></table></form>';
-
-} elseif (isset ($_GET["read_message"])) {
-
-//	ui_print_page_header (__('Messages'). " &raquo;  ".__('Read message'), "images/email.png", false, "", false, "" );
-
-	$message_id = (int) get_parameter ("read_message");
-	$message = messages_get_message ($message_id);
-	
-	if ($message == false) {
-		echo '<div>'.__('This message does not exist in the system').'</div>';
-		return; //Move out of this page and go processing other pages
-	}
-	
-	messages_process_read ($message_id);
-	
-	echo '<form method="post" action="index.php?sec=messages&amp;sec2=operation/messages/message&amp;new_msg=1">
-			<table class="databox_color" width="98%" cellpadding="4" cellspacing="4">
-			<tr><td class="datos">'.__('Message from').':</td>
-			<td class="datos"><b>' . ui_print_username ($message["sender"], true).' '.__('at').' ' . ui_print_timestamp ($message["timestamp"], true, array ("prominent" => "timestamp")).'</b></td></tr>';
-	
-	// Subject
-	echo '<tr><td class="datos2">'.__('Subject').':</td>
-	<td class="datos2" valign="top"><b>'.$message["subject"].'</b></td></tr>';
-	
-	// text
-	
-	$order   = array("\r\n", "\n", "\r");
-	$replace = '<br />';
-	$parsed_message = str_replace($order, $replace, $message["message"]);
-
-	echo '<tr><td class="datos" valign="top">'.__('Message').':</td>
-	<td class="datos">'.$parsed_message.'</td></tr></table>';
-	
-	//Prevent RE: RE: RE:
-	if (strstr ($message["subject"], "RE:")) {
-		$new_subj = $message["subject"];
-	} else {
-		$new_subj = "RE: ".$message["subject"];
-	}
-
-
-	//Start the message much like an e-mail reply 
-	$new_msg = "\n\n\nOn ".date ($config["date_format"], $message["timestamp"]).' '.get_user_fullname ($message["sender"]).' '.__('wrote').":\n\n".$message["message"];
-	
-	html_print_input_hidden ("dest_user", $message["sender"]);
-	html_print_input_hidden ("subject", urlencode ($new_subj));
-	html_print_input_hidden ("message", urlencode ($new_msg));
-
-	echo '<div style="text-align:right; width:98%;">';
-	html_print_submit_button (__('Reply'), "reply_btn", false, 'class="sub next"'); 
-	echo '</div></form>';
-	return;
-} 
-
-if (isset ($_GET["read_message"]) || !isset ($_GET["new_msg"]) && !($send_message && !$message_sended)) {	
-//	if (empty ($config["pure"]) && !is_ajax ()) {
-//		ui_print_page_header (__('Messages'). " &raquo;  ".__('Message overview'), "images/email.png", false, "", false, "" );
-//	}
-
-	//Get number of messages
-	$num_messages = messages_get_count ($config["id_user"]);
-
-	$order = get_parameter ("msg_overview_order", "status");
-	$order_dir = get_parameter ("msg_overview_orddir", "ASC");
-	
-	$messages = messages_get_overview ($order, $order_dir);
-	
-	if ($num_messages > 0 && empty ($config["pure"]) && !is_ajax ()) {
-		echo '<p>'.__('You have').' <b>'.$num_messages.'</b> '.html_print_image ("images/email.png", true).' '.__('unread message(s)').'.</p>';
-	}
-	
-	if (empty ($messages)) {
-		echo '<div class="nf">'.__('There are no messages').'</div>';
-	} else {
-		$table->width = "98%";
-		$table->class = "databox";
-		$table->cellpadding = 4;
-		$table->cellspacing = 4;
-		$table->head = array ();
-		$table->data = array ();
-		$table->align = array ();
-		$table->size = array ();
-		
-		$table->head[0] = __('Status');
-		$table->head[1] = __('Sender');
-		$table->head[2] = __('Subject');
-		$table->head[3] = __('Timestamp');
-		$table->head[4] = __('Delete');
-		
-		$table->align[0] = "center";
-		$table->align[1] = "center";
-		$table->align[2] = "center";
-		$table->align[3] = "center";
-		$table->align[4] = "center";
-		
-		$table->size[0] = "20px";
-		$table->size[1] = "120px";
-		$table->size[3] = "80px";
-		$table->size[4] = "20px";
-		
-		foreach ($messages as $message_id => $message) {
-			$data = array ();
-			$data[0] = '';
-			if ($message["status"] == 1) {
-				$data[0] .= '<a href="index.php?sec=messages&amp;sec2=operation/messages/message&amp;mark_unread='.$message_id.'">';
-				$data[0] .= html_print_image ("images/email_open.png", true, array ("border" => 0, "title" => __('Mark as unread')));
-				$data[0] .= '</a>';
-			} else {
-				$data[0] .= '<a href="index.php?sec=messages&amp;sec2=operation/messages/message&amp;read_message='.$message_id.'">';
-				$data[0] .= html_print_image ("images/email.png", true, array ("border" => 0, "title" => __('Message unread - click to read')));
-				$data[0] .= '</a>';
-			}
-			
-			$data[1] = ui_print_username ($message["sender"], true);
-			
-			$data[2] = '<a href="index.php?sec=messages&amp;sec2=operation/messages/message&amp;read_message='.$message_id.'">';
-			if ($message["subject"] == "") {
-				$data[2] .= __('No Subject');
-			} else {
-				$data[2] .= $message["subject"];
-			}
-			$data[2] .= '</a>';
-			
-			$data[3] = ui_print_timestamp ($message["timestamp"], true, array ("prominent" => "timestamp"));
-			
-			$data[4] = '<a href="index.php?sec=messages&amp;sec2=operation/messages/message&delete_message=1&id='.$message_id.'"
-		onClick="javascript:if (!confirm(\''.__('Are you sure?').'\')) return false;">' .
-			html_print_image ('images/cross.png', true, array("title" => __('Delete'))) . '</a>'; //"delete_message", "images/cross.png", $message_id, 'border:0px;', true);
-			array_push ($table->data, $data);
-		}
-
-		echo '<form method="post" action="index.php?sec=messages&amp;sec2=operation/messages/message">';
-		html_print_table ($table);
-		echo '</form>';
-	}
-	echo '<div class="action-buttons" style="width:98%">';
-	echo '<form method="post" action="index.php?sec=messages&amp;sec2=operation/messages/message&amp;new_msg=1">';
-	html_print_submit_button (__('New message'), "send_mes", false, 'class="sub next"');
-	echo '</form></div>';
-}
-?>
diff --git a/pandora_console/operation/messages/message_edit.php b/pandora_console/operation/messages/message_edit.php
new file mode 100644
index 0000000000..48293449d8
--- /dev/null
+++ b/pandora_console/operation/messages/message_edit.php
@@ -0,0 +1,188 @@
+<?php
+
+// Pandora FMS - http://pandorafms.com
+// ==================================================
+// Copyright (c) 2005-2009 Artica Soluciones Tecnologicas
+// Please see http://pandorafms.org for full contribution list
+
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation for version 2.
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// Load global vars
+global $config;
+
+require_once ('include/functions_users.php');
+require_once ('include/functions_groups.php');
+require_once ('include/functions_io.php');
+
+//params
+$new_msg = get_parameter('new_msg', 0);
+$dst_user = get_parameter('dst_user');
+$dst_group = get_parameter('dst_group');
+$subject = get_parameter('subject', '');
+$message = get_parameter('message');
+$read_message = get_parameter('read_message', 0);
+$reply = get_parameter('reply', 0);
+$show_sent = get_parameter('show_sent', 0);
+
+$buttons['message_list'] = array('active' => false,
+		'text' => '<a href="index.php?sec=message&sec2=operation/messages/message_list">' .
+		html_print_image("images/email.png", true, array ("title" => __('Message list'))) .'</a>');
+
+$buttons['sent_messages'] = array('active' => false,
+		'text' => '<a href="index.php?sec=message&sec2=operation/messages/message_list&amp;show_sent=1">' .
+		html_print_image("images/email_go.png", true, array ("title" => __('Sent messages'))) .'</a>');
+			
+$buttons['create_message'] = array('active' => true,
+		'text' => '<a href="index.php?sec=message&sec2=operation/messages/message_edit">' .
+		html_print_image("images/email_edit.png", true, array ("title" => __('Create message'))) .'</a>');
+		
+// Header
+ui_print_page_header (__('Messages'), "images/email.png", false, "", false, $buttons);
+
+//read a message
+if ($read_message) {
+	$message_id = (int) get_parameter ("id_message");
+	if ($show_sent) {
+		$message = messages_get_message_sent ($message_id);
+	} else {
+		$message = messages_get_message ($message_id);
+		messages_process_read ($message_id);
+	}
+	
+	if ($message == false) {
+		echo '<div>'.__('This message does not exist in the system').'</div>';
+		return; //Move out of this page and go processing other pages
+	}
+	
+	$user_name = get_user_fullname ($message["id_usuario_origen"]);
+	if (!$user_name) {
+		$user_name = $message["id_usuario_origen"];
+	}
+	
+	$table->width = '98%';
+	$table->data = array();
+	
+	$table->data[0][0] = __('From:');
+	$table->data[0][1] = $user_name.' '.__('at').' ' . ui_print_timestamp ($message["timestamp"], true, array ("prominent" => "timestamp"));
+	
+	$table->data[1][0] = __('To:');
+	$table->data[1][1] = $message["id_usuario_destino"];
+	
+	$table->data[2][0] = __('Subject');
+	$table->data[2][1] = html_print_input_text_extended ("subject", $message["subject"], 'text-subject', '', 50, 70, true, false, '', 'readonly');
+
+	$order   = array("\r\n", "\n", "\r");
+	$replace = '<br />';
+	$parsed_message = str_replace($order, $replace, $message["mensaje"]);
+	
+	$table->data[3][0] = __('Message');
+	$table->data[3][1] = html_print_textarea ("message", 15, 255, $message["mensaje"], 'readonly', true);
+
+	//Prevent RE: RE: RE:
+	if (strstr ($message["subject"], "RE:")) {
+		$new_subj = $message["subject"];
+	} else {
+		$new_subj = "RE: ".$message["subject"];
+	}
+	
+	//Start the message much like an e-mail reply 
+	$new_msg = "\n\n\nOn ".date ($config["date_format"], $message["timestamp"]).' '.$user_name.' '.__('wrote').":\n\n".$message["mensaje"];
+	
+	echo '<form method="post" action="index.php?sec=messages&amp;sec2=operation/messages/message_list&show_sent=1&amp;delete_message=1&amp;id='.$message_id.'">';
+		html_print_table($table);	
+		echo "<div style='padding-bottom: 20px; text-align: right; width:" . $table->width . "'>";
+			html_print_submit_button(__('Delete'), 'delete_btn', false, 'class="sub delete"');
+		echo "</div>";
+	echo "</form>";	
+	
+	echo '<form method="post" action="index.php?sec=messages&sec2=operation/messages/message_edit&amp;new_msg=1&amp;reply=1">';
+		html_print_input_hidden ("dst_user", $message["id_usuario_origen"]);
+		html_print_input_hidden ("subject", $new_subj);
+		html_print_input_hidden ("message", $new_msg);
+		html_print_input_hidden ("orig_user", $message["id_usuario_destino"]);
+		echo "<div style='padding-bottom: 20px; text-align: right; width:" . $table->width . "'>";
+			html_print_submit_button (__('Reply'), 'reply', false, 'class="sub next"');
+		echo '</div>';
+	echo '</form>';
+	
+	return;
+}
+
+// Create message (destination user)
+if (($new_msg) && (!empty ($dst_user)) && (!$reply)) {
+	$return = messages_create_message ($config["id_user"], $dst_user, $subject, $message);
+
+	$user_name = get_user_fullname ($dst_user);
+	if (!$user_name) {
+		$user_name = $dst_user;
+	}
+	ui_print_result_message ($return,
+		__('Message successfully sent to user %s', $user_name),
+		__('Error sending message to user %s', $user_name));
+}
+
+// Create message (destination group)
+if (($new_msg) && (!empty ($dst_group)) && (!$reply)) {
+	$return = messages_create_group ($config["id_user"], $dst_group, $subject, $message);
+
+	ui_print_result_message ($return,
+		__('Message successfully sent'),
+		__('Error sending message to group %s', groups_get_name ($dst_group)));
+}	
+
+//message creation form
+
+//user info
+$own_info = get_user_info ($config['id_user']);
+
+$table->width = '98%';
+
+$table->data = array();
+
+$table->data[0][0] = __('From:');
+
+if (!empty($own_info['fullname'])) {
+	$table->data[0][1] = $own_info['fullname'];
+} else {
+	$table->data[0][1] = $config['id_user'];
+}
+
+$table->data[1][0] = __('To:');
+
+$users_full = groups_get_users (array_keys(users_get_groups()));
+$users = array();
+foreach ($users_full as $user_id => $user_info) {
+	$users[$user_info['id_user']] = $user_info['fullname'];
+}
+
+if ($own_info['is_admin'] || check_acl ($config['id_user'], 0, "PM"))
+	$return_all_groups = true;
+else	
+	$return_all_groups = false;	
+		
+$groups = users_get_groups ($config["id_user"], "AR"); //Get a list of all groups
+
+$table->data[1][1] = html_print_select ($users, "dst_user", $dst_user, '', __('Select user'), false, true, false, '', false);
+$table->data[1][1] .= '&nbsp;&nbsp;'.__('OR').'&nbsp;&nbsp;';
+$table->data[1][1] .= html_print_select_groups($config['id_user'], "AR", $return_all_groups, 'dst_group', $dst_group, '', __('Select group'), '', true);
+
+$table->data[2][0] = __('Subject');
+$table->data[2][1] = html_print_input_text ("subject", $subject, '', 50, 70, true);
+
+$table->data[3][0] = __('Message');
+$table->data[3][1] = html_print_textarea ("message", 15, 255, $message, '', true);
+
+echo '<form method="post" action="index.php?sec=messages&amp;sec2=operation/messages/message_edit&amp;new_msg=1">';
+html_print_table($table);
+
+echo '<div class="action-buttons" style="width: '.$table->width.'">';
+		html_print_submit_button (__('Send message'), 'send_mes', false, 'class="sub wand"');
+echo '</form>';
+echo '</div>';
+?>
diff --git a/pandora_console/operation/messages/message_list.php b/pandora_console/operation/messages/message_list.php
new file mode 100644
index 0000000000..39b4f3c249
--- /dev/null
+++ b/pandora_console/operation/messages/message_list.php
@@ -0,0 +1,225 @@
+<?php
+
+// Pandora FMS - http://pandorafms.com
+// ==================================================
+// Copyright (c) 2005-2009 Artica Soluciones Tecnologicas
+// Please see http://pandorafms.org for full contribution list
+
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation for version 2.
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+include_once ('include/functions_messages.php');
+
+$delete_msg = get_parameter('delete_message',0);
+$multiple_delete = get_parameter('multiple_delete',0);
+$show_sent = get_parameter('show_sent', 0);
+$mark_unread = get_parameter('mark_unread', 0);
+
+$active_list = true;
+$active_sent = false;
+if ($show_sent) {
+	$active_list = false;
+	$active_sent = true;
+}
+
+$buttons['message_list'] = array('active' => $active_list,
+		'text' => '<a href="index.php?sec=message&sec2=operation/messages/message_list">' .
+		html_print_image("images/email.png", true, array ("title" => __('Message list'))) .'</a>');
+		
+$buttons['sent_messages'] = array('active' => $active_sent,
+		'text' => '<a href="index.php?sec=message&sec2=operation/messages/message_list&amp;show_sent=1">' .
+		html_print_image("images/email_go.png", true, array ("title" => __('Sent messages'))) .'</a>');
+		
+$buttons['create_message'] = array('active' => false,
+		'text' => '<a href="index.php?sec=message&sec2=operation/messages/message_edit">' .
+		html_print_image("images/email_edit.png", true, array ("title" => __('Create message'))) .'</a>');
+
+if (!is_ajax ()) {
+	ui_print_page_header (__('Messages'), "images/email.png", false, "", false, $buttons);
+}
+
+if ($mark_unread) {
+	$message_id = get_parameter('id_message');
+	messages_process_read ($message_id, false);
+}
+
+if ($delete_msg) {
+	$id = (int) get_parameter ("id");
+	$result = messages_delete_message ($id); //Delete message function will actually check the credentials
+	
+	ui_print_result_message ($result,
+		__('Successfully deleted'),
+		__('Could not be deleted'));
+}
+
+if ($multiple_delete) {
+	$ids = (array)get_parameter('delete_multiple', array());
+	
+	db_process_sql_begin();
+	
+	foreach ($ids as $id) {
+		$result = db_process_sql_delete ('tmensajes',
+			array ('id_mensaje' => $id));
+	
+		if ($result === false) {
+			db_process_sql_rollback();
+			break;
+		}
+	}
+	
+	if ($result !== false) {
+		db_process_sql_commit();
+	}
+	
+	ui_print_result_message ($result,
+		__('Successfully deleted'),
+		__('Not deleted. Error deleting messages'));
+}
+
+if ($show_sent) { //sent view
+	$num_messages = messages_get_count_sent($config['id_user']);
+	if ($num_messages > 0 && !is_ajax()) {
+		echo '<p>'.__('You have').' <b>'.$num_messages.'</b> '.' '.__('sent message(s)').'.</p>';
+	}
+	$messages = messages_get_overview_sent ('', 'DESC');
+} else { //messages received
+	$num_messages = messages_get_count ($config["id_user"]);
+	if ($num_messages > 0 && !is_ajax()) {
+		echo '<p>'.__('You have').' <b>'.$num_messages.'</b> '.' '.__('unread message(s)').'.</p>';
+	}
+	$messages = messages_get_overview ();
+}
+
+if (empty ($messages)) {
+	echo '<div class="nf">'.__('There are no messages').'</div>';
+} else {
+	$table->width = "98%";
+	$table->class = "databox";
+	$table->cellpadding = 4;
+	$table->cellspacing = 4;
+	$table->head = array ();
+	$table->data = array ();
+	$table->align = array ();
+	$table->size = array ();
+	
+	$table->align[0] = "center";
+	$table->align[1] = "center";
+	$table->align[2] = "center";
+	$table->align[3] = "center";
+	$table->align[4] = "center";
+	
+	$table->size[0] = "20px";
+	$table->size[1] = "100px";
+	$table->size[3] = "80px";
+	$table->size[4] = "60px";
+	
+	$table->head[0] = __('Status');
+	if ($show_sent)
+		$table->head[1] = __('To');
+	else
+		$table->head[1] = __('From');
+	$table->head[2] = __('Subject');
+	$table->head[3] = __('Timestamp');
+	$table->head[4] = __('Delete'). html_print_checkbox('all_delete', 0, false, true, false, 'check_all_checkboxes();');
+	
+	foreach ($messages as $message_id => $message) {
+		$data = array ();
+		$data[0] = '';
+		if ($message["status"] == 1) {
+			if ($show_sent) {
+				$data[0] .= '<a href="index.php?sec=messages&amp;sec2=operation/messages/message_edit&read_message=1&amp;show_sent=1&amp;id_message='.$message_id.'">';
+				$data[0] .= html_print_image ("images/email_open.png", true, array ("border" => 0, "title" => __('Click to read')));
+				$data[0] .= '</a>';
+			} else { 
+				$data[0] .= '<a href="index.php?sec=messages&amp;sec2=operation/messages/message_list&amp;mark_unread=1&amp;id_message='.$message_id.'">';
+				$data[0] .= html_print_image ("images/email_open.png", true, array ("border" => 0, "title" => __('Mark as unread')));
+				$data[0] .= '</a>';
+			}
+		} else {
+			if ($show_sent) {
+				$data[0] .= '<a href="index.php?sec=messages&amp;sec2=operation/messages/message_edit&amp;read_message=1&amp;show_sent=1&amp;id_message='.$message_id.'">';
+				$data[0] .= html_print_image ("images/email.png", true, array ("border" => 0, "title" => __('Message unread - click to read')));
+				$data[0] .= '</a>';
+			} else {
+				$data[0] .= '<a href="index.php?sec=messages&amp;sec2=operation/messages/message_edit&amp;read_message=1&amp;id_message='.$message_id.'">';
+				$data[0] .= html_print_image ("images/email.png", true, array ("border" => 0, "title" => __('Message unread - click to read')));
+				$data[0] .= '</a>';
+			}
+		}
+		
+		if ($show_sent) {
+			$dest_user = get_user_fullname ($message["dest"]);
+			if (!$dest_user) {
+				$dest_user = $message["dest"];
+			}
+			$data[1] = $dest_user;
+		} else {
+			$orig_user = get_user_fullname ($message["sender"]);
+			if (!$orig_user) {
+				$orig_user = $message["sender"];
+			}
+			$data[1] = $orig_user;
+		}
+		
+		if ($show_sent) {
+			$data[2] = '<a href="index.php?sec=messages&amp;sec2=operation/messages/message_edit&amp;read_message=1&show_sent=1&amp;id_message='.$message_id.'">';
+		} else {
+			$data[2] = '<a href="index.php?sec=messages&amp;sec2=operation/messages/message_edit&amp;read_message=1&amp;id_message='.$message_id.'">';
+		}
+		if ($message["subject"] == "") {
+			$data[2] .= __('No Subject');
+		} else {
+			$data[2] .= $message["subject"];
+		}
+		$data[2] .= '</a>';
+		
+		$data[3] = ui_print_timestamp ($message["timestamp"], true, array ("prominent" => "timestamp"));
+		
+		if ($show_sent) {
+			$data[4] = '<a href="index.php?sec=messages&amp;sec2=operation/messages/message_list&show_sent=1&delete_message=1&id='.$message_id.'"
+						onClick="javascript:if (!confirm(\''.__('Are you sure?').'\')) return false;">' .
+						html_print_image ('images/cross.png', true, array("title" => __('Delete'))) . '</a>'.
+						html_print_checkbox_extended ('delete_multiple[]', $message_id, false, false, '', 'class="check_delete"', true);
+		} else {
+			$data[4] = '<a href="index.php?sec=messages&amp;sec2=operation/messages/message_list&delete_message=1&id='.$message_id.'"
+						onClick="javascript:if (!confirm(\''.__('Are you sure?').'\')) return false;">' .
+						html_print_image ('images/cross.png', true, array("title" => __('Delete'))) . '</a>'.
+						html_print_checkbox_extended ('delete_multiple[]', $message_id, false, false, '', 'class="check_delete"', true);
+		}
+		array_push ($table->data, $data);
+	}
+	if ($show_sent)
+		echo '<form method="post" action="index.php?sec=messages&amp;sec2=operation/messages/message_list&show_sent=1&amp;multiple_delete=1">';
+	else
+		echo '<form method="post" action="index.php?sec=messages&amp;sec2=operation/messages/message_list&amp;multiple_delete=1">';
+			html_print_table($table);
+			echo "<div style='padding-bottom: 20px; text-align: right; width:" . $table->width . "'>";
+				html_print_submit_button(__('Delete'), 'delete_btn', false, 'class="sub delete"');
+			echo "</div>";
+	echo "</form>";	
+}
+
+echo '<form method="post" action="index.php?sec=messages&sec2=operation/messages/message_edit">';
+echo '<div class="action-buttons" style="width: 98%;">';
+html_print_submit_button (__('Create message'), 'create', false, 'class="sub next"');
+echo "</div>";
+echo "</form>";
+?>
+
+<script type="text/javascript">
+
+function check_all_checkboxes() {
+	if ($("input[name=all_delete]").attr('checked')) {
+		$(".check_delete").attr('checked', true);
+	}
+	else {
+		$(".check_delete").attr('checked', false);
+	}
+}
+
+</script>
diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql
index 1e623fdc03..44ec66295e 100644
--- a/pandora_console/pandoradb.sql
+++ b/pandora_console/pandoradb.sql
@@ -516,7 +516,7 @@ CREATE TABLE IF NOT EXISTS `tmensajes` (
   `id_mensaje` int(10) unsigned NOT NULL auto_increment,
   `id_usuario_origen` varchar(60) NOT NULL default '',
   `id_usuario_destino` varchar(60) NOT NULL default '',
-  `mensaje` tinytext NOT NULL,
+  `mensaje` text NOT NULL DEFAULT '',
   `timestamp` bigint (20) unsigned NOT NULL default '0',
   `subject` varchar(255) NOT NULL default '',
   `estado` int(4) unsigned NOT NULL default '0',
@@ -777,6 +777,7 @@ CREATE TABLE IF NOT EXISTS `tusuario` (
   `shortcut_data` text default '',
   `section` TEXT NOT NULL,
   `data_section` TEXT NOT NULL,
+  `created_by` TEXT NOT NULL,
   UNIQUE KEY `id_user` (`id_user`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;