diff --git a/pandora_console/include/functions_messages.php b/pandora_console/include/functions_messages.php index dec3dc2b62..675b9c2a38 100644 --- a/pandora_console/include/functions_messages.php +++ b/pandora_console/include/functions_messages.php @@ -1,321 +1,451 @@ $usuario_origen, + 'subject' => $subject, + 'mensaje' => $mensaje, + 'id_source' => get_notification_source_id('message'), + 'timestamp' => get_system_time(), + ] + ); + + // Update URL + // Update targets. + if ($message_id !== false) { + $return = db_process_sql_insert( + 'tnotification_user', + [ + 'id_mensaje' => $message_id, + 'id_user' => $usuario_destino, + ] + ); + } + + if ($return === false) { + return false; + } else { + return true; + } } -/** + +/** * Creates private messages to be forwarded to groups - * - * @param string The sender of the message - * @param string The receivers (group) of the message - * @param string Subject of the message (much like E-Mail) - * @param string The actual message. This message will be cleaned by io_safe_input - * (html is allowed but loose html chars will be translated) * - * @return bool true when delivered, false in case of error + * @param string $usuario_origen The sender of the message. + * @param string $dest_group The receivers (group) of the message. + * @param string $subject Subject of the message (much like E-Mail). + * @param string $mensaje The actual message. This message will be + * cleaned by io_safe_input (html is allowed but + * loose html chars will be translated). + * + * @return boolean true when delivered, false in case of error */ -function messages_create_group ($usuario_origen, $dest_group, $subject, $mensaje) { - $users = users_get_info (); - $group_users = groups_get_users ($dest_group); - - if (! array_key_exists ($usuario_origen, $users)) { - //Users don't exist in the system - return false; - } - elseif (empty ($group_users)) { - //There are no users in the group, so it hasn't failed although it hasn't done anything. - return true; - } - - // array unique - foreach ($group_users as $user) { - foreach ($user as $key=>$us) { - if ($key == 'id_user') { - $group_user[$us] = $us; - } - } - } - - foreach ($group_user as $user) { - $return = messages_create_message ($usuario_origen, get_user_id ($user), $subject, $mensaje); - if ($return === false) { - //Error sending message - return false; - } - } - - return true; +function messages_create_group( + string $usuario_origen, + string $dest_group, + string $subject, + string $mensaje +) { + $users = users_get_info(); + $group_users = groups_get_users($dest_group); + + if (! array_key_exists($usuario_origen, $users)) { + // Users don't exist in the system. + return false; + } else if (empty($group_users)) { + /* + There are no users in the group, so it hasn't failed + although it hasn't done anything. + */ + + return true; + } + + // Array unique. + foreach ($group_users as $user) { + foreach ($user as $key => $us) { + if ($key == 'id_user') { + $group_user[$us] = $us; + } + } + } + + foreach ($group_user as $user) { + $return = messages_create_message( + $usuario_origen, + get_user_id($user), + $subject, + $mensaje + ); + if ($return === false) { + // Error sending message. + return false; + } + } + + return true; } -/** + +/** * Deletes a private message - * - * @param int $id_message * - * @return bool true when deleted, false in case of error + * @param integer $id_message Message to be deleted. + * + * @return boolean true when deleted, false in case of error */ -function messages_delete_message ($id_message) { - global $config; - - $where = array( - //'id_usuario_destino' => $config["id_user"], - 'id_mensaje' => $id_message); - return (bool)db_process_sql_delete('tmensajes', $where); +function messages_delete_message(int $id_message) +{ + global $config; + // 'id_usuario_destino' => $config["id_user"], + $where = ['id_mensaje' => $id_message]; + return (bool) db_process_sql_delete('tmensajes', $where); } -/** + +/** * Marks a private message as read/unread - * - * @param int $message_id The message to modify - * @param bool $read To set unread pass 0, false or empty value * - * @return bool true when marked, false in case of error + * @param integer $message_id The message to modify. + * @param boolean $read To set unread pass 0, false or empty value. + * + * @return boolean true when marked, false in case of error */ -function messages_process_read ($message_id, $read = true) { - if (empty ($read)) { - $read = 0; - } - else { - $read = 1; - } - - return (bool) db_process_sql_update('tmensajes', array('estado' => $read), array('id_mensaje' => $message_id)); +function messages_process_read( + int $message_id, + bool $read=true +) { + if (empty($read)) { + $read = 0; + } else { + $read = 1; + } + + return (bool) db_process_sql_update( + 'tmensajes', + ['estado' => $read], + ['id_mensaje' => $message_id] + ); } -/** + +/** * Gets a private message * - * This function abstracts the database backend so it can simply be replaced with another system - * - * @param int $message_id + * This function abstracts the database backend so it can simply be + * replaced with another system + * + * @param integer $message_id Message to be retrieved. * * @return mixed False if it doesn't exist or a filled array otherwise */ -function messages_get_message ($message_id) { - global $config; - - $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); - - if (empty ($row)) { - return false; - } - - return $row; +function messages_get_message(int $message_id) +{ + global $config; + + $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); + + if (empty($row)) { + return false; + } + + 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 + * This function abstracts the database backend so it can simply be + * replaced with another system + * + * @param integer $message_id Message to be retrieved. * * @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; +function messages_get_message_sent(int $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 * - * @param string $user - * @param bool $incl_read Whether or not to include read messages + * @param string $user Target user. + * @param boolean $incl_read Whether or not to include read messages. * - * @return int The number of messages this user has + * @return integer The number of messages this user has */ -function messages_get_count ($user = false, $incl_read = false) { - if (empty ($user)) { - global $config; - $user = $config["id_user"]; - } - - if (empty ($incl_read)) { - $filter = "AND estado = 0"; - } - else { - $filter = ""; - } - $sql = sprintf("SELECT COUNT(*) - FROM tmensajes WHERE id_usuario_destino='%s' %s", $user, $filter); - - return (int) db_get_sql ($sql); -} +function messages_get_count( + string $user='', + bool $incl_read=false +) { + if (empty($user)) { + global $config; + $user = $config['id_user']; + } -/** - * 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); + if (!empty($incl_read)) { + // Retrieve only unread messages. + $filter = 'AND nu.uptimestap_read == NULL'; + } else { + // Do not filter. + $filter = ''; + } + + $sql = sprintf( + "SELECT count(*) FROM tmensajes tm + left join tnotification_user nu + ON tm.id_mensaje=nu.id_mensaje + left join tnotification_group ng + ON tm.id_mensaje=ng.id_mensaje + left join tusuario_perfil up + ON tm.id_mensaje=ng.id_mensaje + AND ng.id_group=up.id_grupo + WHERE (nu.id_user='%s' OR ng.id_group=0 OR up.id_grupo=ng.id_group) + %s", + $config['id_user'], + $filter + ); + + return (int) db_get_sql($sql); } -/** +/** + * Counts messages sent. + * + * @param string $user Target user. + * + * @return integer The number of messages this user has sent + */ +function messages_get_count_sent(string $user='') +{ + 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 * - * @param string $order How to order them valid: - * (status (default), subject, timestamp, sender) - * @param string $order_dir Direction of order (ASC = Ascending, DESC = Descending) + * @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 + * @return integer The number of messages this user has */ -function messages_get_overview ($order = "status", $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_destino', $config["id_user"], $order); - - if ($return === false) { - return $result; - } - - foreach ($return as $message) { - $result[$message["id_mensaje"]]["sender"] = $message["id_usuario_origen"]; - $result[$message["id_mensaje"]]["subject"] = $message["subject"]; - $result[$message["id_mensaje"]]["timestamp"] = $message["timestamp"]; - $result[$message["id_mensaje"]]["status"] = $message["estado"]; - } - - return $result; +function messages_get_overview( + string $order='status', + string $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'; + } + + $sql = sprintf( + "SELECT * FROM tmensajes tm + left join tnotification_user nu + ON tm.id_mensaje=nu.id_mensaje + left join tnotification_group ng + ON tm.id_mensaje=ng.id_mensaje + left join tusuario_perfil up + ON tm.id_mensaje=ng.id_mensaje + AND ng.id_group=up.id_grupo + WHERE (nu.id_user='%s' OR ng.id_group=0 OR up.id_grupo=ng.id_group) + ORDER BY %s", + $config['id_user'], + $order + ); + + $result = []; + $return = db_get_all_rows_sql($sql); + + if ($return === false) { + return $result; + } + + foreach ($return as $message) { + $id_message = $message['id_mensaje']; + $result[$id_message]['sender'] = $message['id_usuario_origen']; + $result[$id_message]['subject'] = $message['subject']; + $result[$id_message]['timestamp'] = $message['timestamp']; + $result[$id_message]['status'] = $message['estado']; + } + + 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) + * @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 + * @return integer 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; -} +function messages_get_overview_sent( + string $order='timestamp', + string $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 = []; + $return = db_get_all_rows_field_filter( + 'tmensajes', + 'id_usuario_origen', + $config['id_user'], + $order + ); + + if ($return === false) { + return $result; + } + + foreach ($return as $message) { + $id_message = $message['id_mensaje']; + $result[$id_message]['dest'] = $message['id_usuario_destino']; + $result[$id_message]['subject'] = $message['subject']; + $result[$id_message]['timestamp'] = $message['timestamp']; + $result[$id_message]['status'] = $message['estado']; + } + + return $result; +} diff --git a/pandora_console/include/functions_notifications.php b/pandora_console/include/functions_notifications.php new file mode 100644 index 0000000000..8372f54bf0 --- /dev/null +++ b/pandora_console/include/functions_notifications.php @@ -0,0 +1,53 @@ + $active_list, - 'text' => '' . - html_print_image("images/email_inbox.png", true, array ("title" => __('Received messages'))) .''); +$buttons['message_list'] = [ + 'active' => $active_list, + 'text' => ''.html_print_image('images/email_inbox.png', true, ['title' => __('Received messages')]).'', +]; -$buttons['sent_messages'] = array('active' => $active_sent, - 'text' => '' . - html_print_image("images/email_outbox.png", true, array ("title" => __('Sent messages'))) .''); +$buttons['sent_messages'] = [ + 'active' => $active_sent, + 'text' => ''.html_print_image('images/email_outbox.png', true, ['title' => __('Sent messages')]).'', +]; -$buttons['create_message'] = array('active' => false, - 'text' => '' . - html_print_image("images/new_message.png", true, array ("title" => __('Create message'))) .''); +$buttons['create_message'] = [ + 'active' => false, + 'text' => ''.html_print_image( + 'images/new_message.png', + true, + ['title' => __('Create message')] + ).'', +]; -if (!is_ajax ()) { - ui_print_page_header (__('Messages'), "images/email_mc.png", false, "", false, $buttons); +if (!is_ajax()) { + ui_print_page_header( + __('Messages'), + 'images/email_mc.png', + false, + '', + false, + $buttons + ); } if ($mark_unread) { - $message_id = get_parameter('id_message'); - messages_process_read ($message_id, false); + $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')); + $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()); - - foreach ($ids as $id) { - $result = db_process_sql_delete ('tmensajes', - array ('id_mensaje' => $id)); - - if ($result === false) { - break; - } - } - - ui_print_result_message ($result, - __('Successfully deleted'), - __('Not deleted. Error deleting messages')); + $ids = (array) get_parameter('delete_multiple', []); + + foreach ($ids as $id) { + $result = db_process_sql_delete( + 'tmensajes', + ['id_mensaje' => $id] + ); + + if ($result === false) { + break; + } + } + + 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 '

' . __('You have') . ' ' . $num_messages . ' ' . - ' ' . __('sent message(s)') . '.

'; - } - $messages = messages_get_overview_sent ('', 'DESC'); -} -else { //messages received - $num_messages = messages_get_count ($config["id_user"]); - if ($num_messages > 0 && !is_ajax()) { - echo '

' . __('You have') . ' ' . $num_messages . ' ' . - ' ' . __('unread message(s)') . '.

'; - } - $messages = messages_get_overview (); +if ($show_sent) { + // Sent view. + $num_messages = messages_get_count_sent($config['id_user']); + if ($num_messages > 0 && !is_ajax()) { + echo '

'.__('You have').' '.$num_messages.''.__('sent message(s)').'.

'; + } + + $messages = messages_get_overview_sent('', 'DESC'); +} else { + // Messages received. + $num_messages = messages_get_count($config['id_user']); + if ($num_messages > 0 && !is_ajax()) { + echo '

'.__('You have').' '.$num_messages.''.__('unread message(s)').'.

'; + } + + $messages = messages_get_overview(); } -if (empty ($messages)) { - ui_print_info_message ( - array('no_close'=>true, - 'message'=> __('There are no messages.') ) ); -} -else { - $table = new stdClass(); - $table->width = '100%'; - $table->class = 'databox data'; - $table->cellpadding = 4; - $table->cellspacing = 4; - $table->head = array (); - $table->data = array (); - $table->align = array (); - $table->size = array (); - - $table->align[0] = "left"; - $table->align[1] = "left"; - $table->align[2] = "left"; - $table->align[3] = "left"; - $table->align[4] = "right"; - - $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] = __('Destination'); - else - $table->head[1] = __('Sender'); - $table->head[2] = __('Subject'); - $table->head[3] = __('Timestamp'); - $table->head[4] = __('Delete'). html_print_checkbox('all_delete_messages', 0, false, true, false); - - foreach ($messages as $message_id => $message) { - $data = array (); - $data[0] = ''; - if ($message["status"] == 1) { - if ($show_sent) { - $data[0] .= ''; - $data[0] .= html_print_image ("images/email_open.png", true, array ("border" => 0, "title" => __('Click to read'))); - $data[0] .= ''; - } - else { - $data[0] .= ''; - $data[0] .= html_print_image ("images/email_open.png", true, array ("border" => 0, "title" => __('Mark as unread'))); - $data[0] .= ''; - } - } - else { - if ($show_sent) { - $data[0] .= ''; - $data[0] .= html_print_image ("images/email.png", true, array ("border" => 0, "title" => __('Message unread - click to read'))); - $data[0] .= ''; - } - else { - $data[0] .= ''; - $data[0] .= html_print_image ("images/email.png", true, array ("border" => 0, "title" => __('Message unread - click to read'))); - $data[0] .= ''; - } - } - - 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] = ''; - } - else { - $data[2] = ''; - } - if ($message["subject"] == "") { - $data[2] .= __('No Subject'); - } - else { - $data[2] .= $message["subject"]; - } - $data[2] .= ''; - - $data[3] = ui_print_timestamp( - $message["timestamp"], true, - array ("prominent" => "timestamp")); - - if ($show_sent) { - $data[4] = '' . - html_print_image ('images/cross.png', true, array("title" => __('Delete'))) . ''. - html_print_checkbox_extended ('delete_multiple_messages[]', $message_id, false, false, '', 'class="check_delete_messages"', true); - } - else { - $data[4] = '' . - html_print_image ('images/cross.png', true, array("title" => __('Delete'))) . ''. - html_print_checkbox_extended ('delete_multiple_messages[]', $message_id, false, false, '', 'class="check_delete_messages"', true); - } - array_push ($table->data, $data); - } - +if (empty($messages)) { + ui_print_info_message( + [ + 'no_close' => true, + 'message' => __('There are no messages.'), + ] + ); +} else { + $table = new stdClass(); + $table->width = '100%'; + $table->class = 'databox data'; + $table->cellpadding = 4; + $table->cellspacing = 4; + $table->head = []; + $table->data = []; + $table->align = []; + $table->size = []; + + $table->align[0] = 'left'; + $table->align[1] = 'left'; + $table->align[2] = 'left'; + $table->align[3] = 'left'; + $table->align[4] = 'right'; + + $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] = __('Destination'); + } else { + $table->head[1] = __('Sender'); + } + + $table->head[2] = __('Subject'); + $table->head[3] = __('Timestamp'); + $table->head[4] = __('Delete').html_print_checkbox('all_delete_messages', 0, false, true, false); + + foreach ($messages as $message_id => $message) { + $data = []; + $data[0] = ''; + if ($message['status'] == 1) { + if ($show_sent) { + $data[0] .= ''; + $data[0] .= html_print_image('images/email_open.png', true, ['border' => 0, 'title' => __('Click to read')]); + $data[0] .= ''; + } else { + $data[0] .= ''; + $data[0] .= html_print_image('images/email_open.png', true, ['border' => 0, 'title' => __('Mark as unread')]); + $data[0] .= ''; + } + } else { + if ($show_sent) { + $data[0] .= ''; + $data[0] .= html_print_image('images/email.png', true, ['border' => 0, 'title' => __('Message unread - click to read')]); + $data[0] .= ''; + } else { + $data[0] .= ''; + $data[0] .= html_print_image('images/email.png', true, ['border' => 0, 'title' => __('Message unread - click to read')]); + $data[0] .= ''; + } + } + + 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] = ''; + } else { + $data[2] = ''; + } + + if ($message['subject'] == '') { + $data[2] .= __('No Subject'); + } else { + $data[2] .= $message['subject']; + } + + $data[2] .= ''; + + $data[3] = ui_print_timestamp( + $message['timestamp'], + true, + ['prominent' => 'timestamp'] + ); + + if ($show_sent) { + $data[4] = ''.html_print_image('images/cross.png', true, ['title' => __('Delete')]).''.html_print_checkbox_extended('delete_multiple_messages[]', $message_id, false, false, '', 'class="check_delete_messages"', true); + } else { + $data[4] = ''.html_print_image('images/cross.png', true, ['title' => __('Delete')]).''.html_print_checkbox_extended('delete_multiple_messages[]', $message_id, false, false, '', 'class="check_delete_messages"', true); + } + + array_push($table->data, $data); + } } if (!empty($messages)) { - if ($show_sent) { - echo '
'; - } - else { - echo ''; - } - html_print_input_hidden('multiple_delete', 1); - html_print_table($table); - echo "
"; - html_print_submit_button(__('Delete'), 'delete_btn', - false, 'class="sub delete"'); - echo "
"; - echo "
"; + if ($show_sent) { + echo '
'; + } else { + echo ''; + } + + html_print_input_hidden('multiple_delete', 1); + html_print_table($table); + echo "
"; + html_print_submit_button( + __('Delete'), + 'delete_btn', + false, + 'class="sub delete"' + ); + echo '
'; + echo '
'; } echo "
"; - echo '
'; - html_print_submit_button (__('Create message'), 'create', false, 'class="sub next" style="margin-right:5px;"'); - echo "
"; -echo "
"; + echo '
'; + html_print_submit_button(__('Create message'), 'create', false, 'class="sub next" style="margin-right:5px;"'); + echo '
'; +echo ''; ?>