Browse Source

Merge branch 'FraGoTe-6715' into 1.9.x

Yannick Warnier 10 years ago
parent
commit
456ab557e7

+ 4 - 4
main/inc/lib/display.lib.php

@@ -418,7 +418,7 @@ class Display
      * @param   bool    Whether to XSS-filter or not
      * @return  string  Message wrapped into an HTML div
      */
-    public static function return_message($message, $type='normal', $filter = true)
+    public static function return_message($message, $type = 'normal', $filter = true)
     {
         if ($filter) {
         	$message = api_htmlentities($message, ENT_QUOTES, api_is_xml_http_request() ? 'UTF-8' : api_get_system_encoding());
@@ -712,9 +712,9 @@ class Display
     /**
      * Returns the htmlcode for a tag (h3, h1, div, a, button), etc
      *
-     * @param string $image the filename of the file (in the main/img/ folder
-     * @param string $alt_text the alt text (probably a language variable)
-     * @param array additional attributes (for instance height, width, onclick, ...)
+     * @param string $tag the tag name
+     * @param string $content the tag's content
+     * @param array $additional_attributes (for instance height, width, onclick, ...)
      * @author Julio Montoya 2010
      */
     public static function tag($tag, $content, $additional_attributes = array()) {

+ 0 - 1
main/inc/lib/formvalidator/FormValidator.class.php

@@ -339,7 +339,6 @@ EOT;
      * A rule is attached to check for unwanted HTML
      * @param string $name
      * @param string $label						The label for the form-element
-     * @param string $name						The element name
      * @param boolean $required	(optional)		Is the form-element required (default=true)
      * @param boolean $full_page (optional)		When it is true, the editor loads completed html code for a full page.
      * @param array $editor_config (optional)	Configuration settings for the online editor.

+ 5 - 5
plugin/ticket/database.php

@@ -170,11 +170,11 @@ $sql = "CREATE TABLE IF NOT EXISTS ".$table." (
 Database::query($sql);
 //Default status
 $defaultStatus = array(
-    'NAT' => $objPlugin->get_lang('StsNew'),
-    'PND' => $objPlugin->get_lang('StsPending'),
-    'XCF' => $objPlugin->get_lang('StsUnconfirmed'),
-    'CLS' => $objPlugin->get_lang('StsClose'),
-    'REE' => $objPlugin->get_lang('StsForwarded')
+    'NAT' => $objPlugin->get_lang('StatusNew'),
+    'PND' => $objPlugin->get_lang('StatusPending'),
+    'XCF' => $objPlugin->get_lang('StatusUnconfirmed'),
+    'CLS' => $objPlugin->get_lang('StatusClose'),
+    'REE' => $objPlugin->get_lang('StatusForwarded')
 );
 
 $i = 1;

+ 8 - 6
plugin/ticket/lang/english.php

@@ -37,11 +37,11 @@ $strings['Optional'] = "Optional";
 $strings['ErrorRegisterMessage'] = "The ticket could not be created";
 $strings['Source'] = "Source";
 $strings['DeniedAccess'] = "Unauthorized access.";
-$strings['StsNew'] = "New";
-$strings['StsPending'] = "Pending";
-$strings['StsUnconfirmed'] = "Unconfirmed";
-$strings['StsClose'] = "Closed";
-$strings['StsForwarded'] = "Resent";
+$strings['StatusNew'] = "New";
+$strings['StatusPending'] = "Pending";
+$strings['StatusUnconfirmed'] = "Unconfirmed";
+$strings['StatusClose'] = "Closed";
+$strings['StatusForwarded'] = "Resent";
 $strings['Priority'] = "Priority";
 $strings['PriorityHigh'] = "High";
 $strings['PriorityNormal'] = "Normal";
@@ -81,4 +81,6 @@ $strings['TicketWasThisAnswerSatisfying'] = "Was this answer satisfactory?";
 $strings['TicketDetail'] = "Ticket details";
 $strings['AreYouSure'] = "Are you sure?";
 $strings['allow_student_add'] = "Allow students to generate tickets";
-?>
+$strings['PleaseBeforeRegisterATicketSelectOneUser'] = "Please select a user before you register a ticket.";
+$strings['RequestConfirmation'] = "Request confirmation";
+

+ 8 - 6
plugin/ticket/lang/french.php

@@ -37,11 +37,11 @@ $strings['Optional'] = "Optionnel";
 $strings['ErrorRegisterMessage'] = "Le ticket n'a pas pu être enregistré";
 $strings['Source'] = "Source";
 $strings['DeniedAccess'] = "Accès non autorisé.";
-$strings['StsNew'] = "Nouveau";
-$strings['StsPending'] = "En attente";
-$strings['StsUnconfirmed'] = "À confirmer";
-$strings['StsClose'] = "Fermé";
-$strings['StsForwarded'] = "Réenvoyé";
+$strings['StatusNew'] = "Nouveau";
+$strings['StatusPending'] = "En attente";
+$strings['StatusUnconfirmed'] = "À confirmer";
+$strings['StatusClose'] = "Fermé";
+$strings['StatusForwarded'] = "Réenvoyé";
 $strings['Priority'] = "Priorité";
 $strings['PriorityHigh'] = "Haute";
 $strings['PriorityNormal'] = "Normale";
@@ -81,4 +81,6 @@ $strings['TicketWasThisAnswerSatisfying'] = "La réponse au ticket est-elle sati
 $strings['TicketDetail'] = "Détails du ticket";
 $strings['AreYouSure'] = "Êtes-vous certain?";
 $strings['allow_student_add'] = "Permettre à l'étudiant de générer des tickets";
-?>
+$strings['PleaseBeforeRegisterATicketSelectOneUser'] = "Veuillez sélectionner un utilisateur avant d'enregistrer un ticket.";
+$strings['RequestConfirmation'] = "Demander confirmation";
+

+ 8 - 5
plugin/ticket/lang/spanish.php

@@ -39,11 +39,11 @@ $strings['ErrorRegisterMessage'] = "No se pudo registrar su ticket";
 $strings['Source'] = "Fuente";
 $strings['DeniedAccess'] = "Acceso denegado.";
 // Status Tickets
-$strings['StsNew'] = "Nuevo";
-$strings['StsPending'] = "Pendiente";
-$strings['StsUnconfirmed'] = "Por Confirmar";
-$strings['StsClose'] = "Cerrado";
-$strings['StsForwarded'] = "Reenviado";
+$strings['StatusNew'] = "Nuevo";
+$strings['StatusPending'] = "Pendiente";
+$strings['StatusUnconfirmed'] = "Por Confirmar";
+$strings['StatusClose'] = "Cerrado";
+$strings['StatusForwarded'] = "Reenviado";
 // Priority
 $strings['Priority'] = "Prioridad";
 $strings['PriorityHigh'] = "Alta";
@@ -86,3 +86,6 @@ $strings['TicketDetail'] = "Detalle del Ticket";
 $strings['AreYouSure'] = "¿Está seguro?";
 
 $strings['allow_student_add'] = "Permitir al studiante generar Tickets";
+$strings['PleaseBeforeRegisterATicketSelectOneUser'] = "Por favor, antes de registrar un Ticket seleccione un usuario.";
+$strings['RequestConfirmation'] = "Solicitar confirmación";
+

+ 35 - 22
plugin/ticket/src/course_user_list.php

@@ -11,25 +11,38 @@ $language_file = array('registration');
 require_once '../config.php';
 $plugin = TicketPlugin::create();
 
-$user_id = intval($_GET['user_id']);
-$user_info = api_get_user_info($user_id);
-$courses_list = CourseManager::get_courses_list_by_user_id($user_id, false, true);
-?>
-<div class="row">
-    <div class="label2"><?php echo get_lang('User') ?>:</div>
-    <div class="formw2" id="user_request"><?php echo $user_info['firstname'] . " " . $user_info['lastname']; ?></div>
-</div>
-<div class="row" id="divCourse">
-    <div class="label2"><?php echo get_lang('Course') ?>:</div>
-    <div class="formw2" id="courseuser">
-        <select  class="chzn-select" name = "course_id" id="course_id"  style="width:95%;">
-            <option value="0">---<?php echo get_lang('Select') ?>---</option>
-            <?php
-            foreach ($courses_list as $key => $course) {
-                $courseinfo = CourseManager::get_course_information($course['code']);
-                echo '<option value="' . $courseinfo['code'] . '"> ' . $courseinfo['title'] . '</option>';
-            }
-            ?>
-        </select>
-    </div>
-</div>
+$userId = intval($_GET['user_id']);
+$userInfo = api_get_user_info($userId);
+
+$coursesList = CourseManager::get_courses_list_by_user_id($userId, false, true);
+$arrCourseList = array(get_lang('Select'));
+//Course List
+foreach ($coursesList as $key => $course) {
+    $courseInfo = CourseManager::get_course_information($course['code']);
+    $arrCourseList[$courseInfo['code']] = $courseInfo['title'];
+}
+//End Course List
+
+
+$userLabel = Display::tag('label', get_lang('User'), array('class' => 'control-label'));
+$personName = api_get_person_name($userInfo['firstname'], $userInfo['lastname']);
+$userInput = Display::tag(
+    'input',
+    '', 
+    array(
+        'disabled' => 'disabled',
+        'type' => 'text',
+        'value' => $personName
+    )
+);
+$userControl = Display::div($userInput, array('class' => 'controls'));
+
+$courseLabel = Display::tag('label', get_lang('Course'), array('class' => 'control-label'));
+$courseSelect = Display::select('course_id', $arrCourseList, 0, array(), false);
+$courseControl = Display::div($courseSelect, array('class' => 'controls'));
+
+$userDiv = Display::div($userLabel . " " . $userControl, array('class' => 'control-group'));
+$courseDiv = Display::div($courseLabel . " " . $courseControl, array('class' => 'control-group'));
+echo $userDiv;
+echo $courseDiv;
+

+ 294 - 193
plugin/ticket/src/new_ticket.php

@@ -21,21 +21,29 @@ api_block_anonymous_users();
 require_once api_get_path(LIBRARY_PATH) . 'formvalidator/FormValidator.class.php';
 require_once api_get_path(LIBRARY_PATH) . 'group_portal_manager.lib.php';
 
+$scrollTop = '';
+if (api_is_platform_admin()) {
+    $scrollTol = '$("html, body").animate({ 
+                    scrollTop: $(".divTicket").offset().top - 20
+                  }, "slow");';
+}
+
 $htmlHeadXtra[] = '
 <script>
 function load_course_list (div_course, my_user_id, user_email) {
-	 $.ajax({
-		contentType: "application/x-www-form-urlencoded",
-		type: "GET",
-		url: "course_user_list.php",
-		data: "user_id="+my_user_id,
-		success: function(datos) {
-			$("div#user_request").html(datos);
-			$("#user_id_request").val(my_user_id);
-                        $("#personal_email").val(user_email);
-			$("#btnsubmit").attr("disabled", false);
-		}
-	});
+    $.ajax({
+            contentType: "application/x-www-form-urlencoded",
+            type: "GET",
+            url: "course_user_list.php",
+            data: "user_id="+my_user_id,
+            success: function(datos) {
+                $("#user_request").html(datos);
+                $("#user_id_request").val(my_user_id);
+                $("#personal_email").val(user_email);
+                $("#btnsubmit").attr("disabled", false);
+                ' . $scrollTol . '
+            }
+    });
 }
 function changeType() {
     var selected = document.getElementById("category_id").selectedIndex;
@@ -90,31 +98,55 @@ function validate() {
 }
 
 var counter_image = 1;
-function remove_image_form(id_elem1) {
-	var elem1 = document.getElementById(id_elem1);
-	elem1.parentNode.removeChild(elem1);
-	counter_image = counter_image - 1;
+
+function remove_image_form(element_id) {
+    $("#" + element_id).remove();
+    counter_image = counter_image - 1;
+    $("#link-more-attach").css("display", "block");
 }
+
 function add_image_form() {
-	// Multiple filepaths for image form
-	var filepaths = document.getElementById("filepaths");
-	if (document.getElementById("filepath_"+counter_image)) {
-		counter_image = counter_image + 1;
-	}  else {
-		counter_image = counter_image;
-	}
-	var elem1 = document.createElement("div");
-	elem1.setAttribute("id","filepath_"+counter_image);
-	filepaths.appendChild(elem1);
-	id_elem1 = "filepath_"+counter_image;
-	id_elem1 = "\'"+id_elem1+"\'";
-	document.getElementById("filepath_"+counter_image).innerHTML = "<input type=\"file\" name=\"attach_"+counter_image+"\"  size=\"20\" />&nbsp;<a href=\"javascript:remove_image_form("+id_elem1+")\"><img src=\"' . api_get_path(WEB_CODE_PATH) . 'img/delete.gif\"></a>";
-	if (filepaths.childNodes.length == 6) {
-		var link_attach = document.getElementById("link-more-attach");
-		if (link_attach) {
-			link_attach.innerHTML="";
-		}
-	}
+    // Multiple filepaths for image form
+    var filepaths = $("#filepaths");
+    var new_elem, input_file, link_remove, img_remove, new_filepath_id;
+
+    if ($("#filepath_"+counter_image)) {
+        counter_image = counter_image + 1;
+    }  else {
+        counter_image = counter_image;
+    }
+
+    new_elem = "filepath_"+counter_image;
+
+    $("<div/>", {
+        id: new_elem,
+        class: "controls"
+    }).appendTo(filepaths);
+    
+    input_file = $("<input/>", {
+        type: "file",
+        name: "attach_" + counter_image,
+        size: 20
+    });
+
+    link_remove = $("<a/>", {
+        onclick: "remove_image_form(\'" + new_elem + "\')",
+        style: "cursor: pointer"
+    });
+
+    img_remove = $("<img/>", {
+        src: "' . api_get_path(WEB_CODE_PATH) . 'img/delete.gif"
+    });
+
+    new_filepath_id = $("#filepath_" + counter_image);
+    new_filepath_id.append(input_file, link_remove.append(img_remove));
+    
+    if (counter_image === 6) {
+        var link_attach = $("#link-more-attach");
+        if (link_attach) {
+            $(link_attach).css("display", "none");
+        }
+    }
 }
 </script>
 
@@ -128,19 +160,16 @@ div.row div.formw2 {
 	float:left
 }
 div.divTicket {
-    width: 70%;
-	float: center;
-	margin-left: 15%;
-
+    padding-top: 100px;
 }
 </style>';
 $types = TicketManager::get_all_tickets_categories();
 $htmlHeadXtra[] = '<script language="javascript">
-		var projects = ' . js_array($types, 'projects', 'project_id') . '
-		var course_required = ' . js_array($types, 'course_required', 'course_required') . '
-		var other_area = ' . js_array($types, 'other_area', 'other_area') . '
-		var email = ' . js_array($types, 'email', 'email') . '
-		 </script>';
+                        var projects = ' . js_array($types, 'projects', 'project_id') . '
+                        var course_required = ' . js_array($types, 'course_required', 'course_required') . '
+                        var other_area = ' . js_array($types, 'other_area', 'other_area') . '
+                        var email = ' . js_array($types, 'email', 'email') . '
+		   </script>';
 $htmlHeadXtra[] = '<script src="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/tag/jquery.fcbkcomplete.js" type="text/javascript" language="javascript"></script>';
 $htmlHeadXtra[] = '<link  href="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/tag/style.css" rel="stylesheet" type="text/css" />';
 
@@ -176,158 +205,224 @@ function show_form_send_ticket()
 {
     global $types, $plugin;
     echo '<div class="divTicket">';
-    echo '<form enctype="multipart/form-data" action="' . api_get_self() . '" method="post" name="send_ticket" id="send_ticket"
- 	onsubmit="return validate()" style="width:100%">';
-    echo '<input name="user_id_request" id="user_id_request" type="hidden" value="">';
-
-    // Category
-    $select_types = '<div class="row">
-	<div class="label2">' . get_lang('Category') . ': </div>
-       <div class="formw2">';
-    $select_types .= '<select style="width: 95%; "   name = "category_id" id="category_id" onChange="changeType();">';
-    $select_types .= '<option value="0">---' . get_lang('Select') . '---</option>';
+    
+    //Category List
+    $categoryList = array();
     foreach ($types as $type) {
-        $select_types.= "<option value = '" . $type['category_id'] . "'>" . $type['name'] . ":  <br/>" . $type['description'] . "</option>";
+        $categoryList[$type['category_id']] = $type['name'] . ": " . $type['description'];
     }
-    $select_types .= "</select>";
-    $select_types .= '</div></div>';
-    echo $select_types;
-
-    $select_course = '<div id="user_request" >
-	 </div>';
-    echo $select_course;
-
-    // Status
-    $status = array();
-    $status[NEWTCK] = $plugin->get_lang('StsNew');
-    $showStatus = "style='display: none;'";
+    //End Category List
+    
+    //Status List
+    $statusList = array();
+    $statusAttributes = array(
+        'style' => 'display: none;',
+        'id' => 'status_id',
+        'for' => 'status_id'
+    );
+    $statusList[NEWTCK] = $plugin->get_lang('StatusNew');
     if (api_is_platform_admin()) {
-        $showStatus = "";
-        $status[PENDING] = $plugin->get_lang('StsPending');
-        $status[UNCONFIRMED] = $plugin->get_lang('StsUnconfirmed');
-        $status[CLOSE] = $plugin->get_lang('StsClose');
-        $status[REENVIADO] = $plugin->get_lang('StsForwarded');
-    }
-    $select_status = '
-	<div class="row" ' . $showStatus . ' >
-		<div class="label2"  >' . get_lang('Status') . ': </div>
-		<div class="formw2">
-			<select style="width: 95%; " name = "status_id" id="status_id">';
-    //$status = TicketManager::get_all_tickets_status();
-    foreach ($status as $sts_key => $sts_name) {
-        if ($sts_key == 'PND') {
-            $select_status .= "<option value = '" . $sts_key . "' selected >" . $sts_name . "</option>";
-        } else {
-            $select_status.= "<option value = '" . $sts_key . "'>" . $sts_name . "</option>";
-        }
+        $statusAttributes = array(
+            'id' => 'status_id',
+            'for' => 'status_id',
+            'style' => 'width: 562px;'
+        );
+        $statusList[PENDING] = $plugin->get_lang('StatusPending');
+        $statusList[UNCONFIRMED] = $plugin->get_lang('StatusUnconfirmed');
+        $statusList[CLOSE] = $plugin->get_lang('StatusClose');
+        $statusList[REENVIADO] = $plugin->get_lang('StatusForwarded');
     }
-    $select_status .= '
-			</select>
-		</div>
-	</div>';
-    echo $select_status;
-
-    // Source
-    $source = array();
+    //End Status List
+    
+    //Source List
+    $sourceList = array();
+    $sourceAttributes = array(
+        'style' => 'display: none;',
+        'id' => 'source_id',
+        'for' => 'source_id'
+    );
+    $sourceList[SRC_PLATFORM] = $plugin->get_lang('SrcPlatform');
     if (api_is_platform_admin()) {
-        $showBlock = "";
-        $source[SRC_EMAIL] = $plugin->get_lang('SrcEmail');
-        $source[SRC_PHONE] = $plugin->get_lang('SrcPhone');
-        $source[SRC_PRESC] = $plugin->get_lang('SrcPresential');
-    } else {
-        $showBlock = "style='display: none;'";
-        $source[SRC_PLATFORM] = $plugin->get_lang('SrcPlatform');
-    }
-
-    $select_source = '
-	<div class="row" ' . $showBlock . '>
-	<div class="label2">' . $plugin->get_lang('Source') . ':</div>
-       <div class="formw2">
-			<select style="width: 95%; " name="source_id" id="source_id" >';
-    foreach ($source as $src_key => $src_name) {
-        $select_source.= "<option value = '" . $src_key . "'>" . $src_name . "</option>";
+        $sourceAttributes = array(
+            'id' => 'source_id',
+            'for' => 'source_id',
+            'style' => 'width: 562px;'
+        );
+        $sourceList[SRC_EMAIL] = $plugin->get_lang('SrcEmail');
+        $sourceList[SRC_PHONE] = $plugin->get_lang('SrcPhone');
+        $sourceList[SRC_PRESC] = $plugin->get_lang('SrcPresential');
     }
-    $select_source .='
-			</select>
-		</div>
-	</div>';
-    echo $select_source;
-
-    // Subject
-    echo '<div class="row" ><div class ="label2">' . get_lang('Subject') . ':</div>
-       		<div class="formw2"><input type = "text" id ="subject" name="subject" value="" required ="" style="width:94%"/></div>
-		  </div>';
-
-    // Email
-    echo '<div class="row" id="divEmail" ><div class ="label2">' . $plugin->get_lang('PersonalEmail') . ':</div>
-       		<div class="formw2"><input type = "email" id ="personal_email" name="personal_email" value=""  style="width:94%"/></div>
-		  </div>';
-    echo '<input name="project_id" id="project_id" type="hidden" value="">';
-    echo '<input name="other_area" id="other_area" type="hidden" value="">';
-    echo '<input name="email" id="email" type="hidden" value="">';
-
-    // Message
-    echo '<div class="row">
-		<div class="label2">' . get_lang('Message') . ':</div>
-		<div class="formw2">
-			<input type="hidden" id="content" name="content" value="" style="display:none">
-		<input type="hidden" id="content___Config" value="&amp;Width=95%25&amp;Height=250&amp;ToolbarSets={ %22Messages%22: [  [ %22Bold%22,%22Italic%22,%22-%22,%22InsertOrderedList%22,%22InsertUnorderedList%22,%22Link%22,%22RemoveLink%22 ] ], %22MessagesMaximized%22: [  ] }&amp;LoadPlugin=[%22customizations%22]&amp;EditorAreaStyles=body { background: #ffffff; }&amp;ToolbarStartExpanded=false&amp;CustomConfigurationsPath='.api_get_path(WEB_CODE_PATH).'inc/lib/fckeditor/myconfig.js&amp;EditorAreaCSS=/main/css/chamilo/default.css&amp;ToolbarComboPreviewCSS='.api_get_path(WEB_CODE_PATH).'main/css/chamilo/default.css&amp;DefaultLanguage=es&amp;ContentLangDirection=ltr&amp;AdvancedFileManager=true&amp;BaseHref=' . api_get_path(WEB_PLUGIN_PATH) . PLUGIN_NAME . '/s/&amp;&amp;UserIsCourseAdmin=true&amp;UserIsPlatformAdmin=true" style="display:none">
-		<iframe id="content___Frame" src="'.api_get_path(WEB_CODE_PATH).'inc/lib/fckeditor/editor/fckeditor.html?InstanceName=content&amp;Toolbar=Messages" width="95%" height="250" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border: 0px; background-color: transparent; background-image: none; width: 95%; height: 250px;">
-		</iframe>
-		</div>
-	</div>';
-
-    // Phone
-    echo '<div class="row" ><div class ="label2">' . get_lang('Phone') . ' (' . $plugin->get_lang('Optional') . '):</div>
-       		<div class="formw2"><input type = "text" id ="phone" name="phone" value="" style="width:94%"/></div>
-		  </div>';
-
-    // Priority
-    $select_priority = '<div class="row"  >
-	<div class="label2"  >' . $plugin->get_lang('Priority') . ':</div>
-	<div class="formw2">';
-
-    $priority = array();
-    $priority[NORMAL] = $plugin->get_lang('PriorityNormal');
-    $priority[HIGH] = $plugin->get_lang('PriorityHigh');
-    $priority[LOW] = $plugin->get_lang('PriorityLow');
-
-    $select_priority .= '<select style="width: 85px; " name = "priority_id" id="priority_id">';
-    foreach ($priority as $prty_key => $prty_name) {
-        if ($sts_key == NORMAL) {
-            $select_priority .= "<option value = '" . $prty_key . "' selected >" . $prty_name . "</option>";
-        } else {
-            $select_priority.= "<option value = '" . $prty_key . "'>" . $prty_name . "</option>";
-        }
-    }
-    $select_priority .= "</select>";
-    $select_priority .= '</div></div>';
-    echo $select_priority;
-
-    // Input file attach
-    echo '<div class="row">
-		<div class="label2">' . get_lang('FilesAttachment') . ':</div>
-		<div class="formw2">
-				<span id="filepaths">
-				<div id="filepath_1">
-					<input type="file" name="attach_1" id="attach_1"  size="20" style="width:94%;"/>
-				</div></span>
-		</div>
-	</div>';
-    echo '<div class="row">
-		<div class="formw2">
-			<span id="link-more-attach">
-				<a href="javascript://" onclick="return add_image_form()">' . get_lang('AddOneMoreFile') . '</a></span>&nbsp;
-					(' . sprintf(get_lang('MaximunFileSizeX'), format_file_size(api_get_setting('message_max_upload_filesize'))) . ')
-			</div>
-		</div>';
-    echo '<div class="row">
-		<div class="label2">
-		</div>
-		<div class="formw2"><button class="save" name="compose"  type="submit" id="btnsubmit">' . get_lang('SendMessage') . '</button>
-		</div>
-	</div>';
-    echo '</form></div>';
+    //End Source List
+    
+    //Priority List
+    $priorityList = array();
+    $priorityList[NORMAL] = $plugin->get_lang('PriorityNormal');
+    $priorityList[HIGH] = $plugin->get_lang('PriorityHigh');
+    $priorityList[LOW] = $plugin->get_lang('PriorityLow');
+    //End Priority List
+    
+    $form = new FormValidator('send_ticket', 
+        'POST',
+        api_get_self(),
+        "",
+        array(
+            'enctype' => 'multipart/form-data',
+            'onsubmit' => 'return validate()',
+            'class' => 'span8 offset1 form-horizontal'
+        )
+    );
+    
+    $form->addElement(
+        'hidden', 
+        'user_id_request', 
+        '', 
+        array(
+            'id' => 'user_id_request'
+        )
+    );
+    
+    $form->addElement(
+        'hidden', 
+        'project_id', 
+        '', 
+        array(
+            'id' => 'project_id'
+        )
+    );
+    
+    $form->addElement(
+        'hidden', 
+        'other_area', 
+        '', 
+        array(
+            'id' => 'other_area'
+        )
+    );
+    
+    $form->addElement(
+        'hidden', 
+        'email', 
+        '', 
+        array(
+            'id' => 'email'
+        )
+    );
+    
+    $form->addElement(
+        'select',
+        'category_id',
+        get_lang('Category'),
+        $categoryList,
+        array(
+            'onchange' => 'changeType()',
+            'id' => 'category_id',
+            'for' => 'category_id',
+            'style' => 'width: 562px;'
+        )
+    );
+    
+    $form->addElement(
+        'html', 
+        Display::div(
+            '', 
+            array(
+                'id' => 'user_request'
+            )
+        )
+    );
+    
+    $form->addElement(
+        'select',
+        'status_id',
+        get_lang('Status'),
+        $statusList,
+        $statusAttributes    
+    );
+    
+    $form->addElement(
+        'select',
+        'source_id',
+        $plugin->get_lang('Source'),
+        $sourceList,
+        $sourceAttributes   
+    );
+    
+    $form->addElement(
+        'text', 
+        'subject', 
+        get_lang('Subject'), 
+        array(
+            'id' => 'subject',
+            'style' => 'width: 550px;'
+        )
+    );
+    
+    $form->addElement(
+        'text', 
+        'personal_email', 
+        $plugin->get_lang('PersonalEmail'), 
+        array(
+            'id' => 'personal_email',
+            'style' => 'width: 550px;'
+        )
+    );
+    
+    $form->add_html_editor(
+        'content', 
+        get_lang('Message'),
+        false, 
+        false, 
+        array(
+            'ToolbarSet' => 'Profile', 
+            'Width' => '600', 
+            'Height' => '250'
+        )
+    );
+
+    $form->addElement(
+        'text', 
+        'phone', 
+        get_lang('Phone') . ' (' . $plugin->get_lang('Optional') . ')', 
+        array(
+            'id' => 'phone'
+        )
+    );
+    
+    $form->addElement(
+        'select', 
+        'priority_id', 
+        $plugin->get_lang('Priority'), 
+        $priorityList,
+        array(
+            'id' => 'priority_id',
+            'for' => 'priority_id'
+        )
+    );
+    
+    $form->addElement('html', '<span id="filepaths">');
+    $form->addElement('html', '<div id="filepath_1">');
+    $form->addElement('file', 'attach_1', get_lang('FilesAttachment'));
+    $form->addElement('html', '</div>');
+    $form->addElement('html', '</span>');
+    
+    $form->addElement('html', '<div class="controls">');
+    $form->addElement('html', '<span id="link-more-attach" >');
+    $form->addElement('html', '<span class="label label-info" onclick="return add_image_form()">' . get_lang('AddOneMoreFile') . '</span>');
+    $form->addElement('html', '</span>');
+    $form->addElement('html', '(' . sprintf(get_lang('MaximunFileSizeX'), format_file_size(api_get_setting('message_max_upload_filesize'))) . ')');
+    
+    $form->addElement('html', '<br/>');
+    $form->addElement(
+        'button', 
+        'compose', 
+        get_lang('SendMessage'), 
+        array(
+            'class' => 'save',
+            'id' => 'btnsubmit'
+        )
+    );
+    
+    $form->display();
 }
 
 /**
@@ -480,6 +575,8 @@ function get_user_data($from, $number_of_items, $column, $direction)
 if (!isset($_POST['compose'])) {
      if (api_is_platform_admin()) {
         Display::display_header(get_lang('ComposeMessage'));
+        $message = $plugin->get_lang('PleaseBeforeRegisterATicketSelectOneUser');
+        Display::display_warning_message($message);
         echo '
             <div class="actions">
               <span style="float: right;">&nbsp;</span>
@@ -491,8 +588,12 @@ if (!isset($_POST['compose'])) {
                 </fieldset>
               </form>
             </div>';
-        if (isset($_GET['keyword'])) {
-            $table = new SortableTable('users', 'get_number_of_users', 'get_user_data', (api_is_western_name_order() xor api_sort_by_first_name()) ? 3 : 2);
+        echo '<div class="users-list">';
+            $order = (api_is_western_name_order() || api_sort_by_first_name()) ? 3 : 2;
+            $table = new SortableTable(
+                        'users', 'get_number_of_users', 
+                        'get_user_data', $order, 10
+                     );
             $table->set_header(0, '', false, 'width="18px"');
             $table->set_header(0, get_lang('Photo'), false);
             $table->set_header(1, get_lang('OfficialCode'));
@@ -507,7 +608,7 @@ if (!isset($_POST['compose'])) {
             $table->set_header(5, get_lang('Email'));
             $table->set_header(6, get_lang('Action'));
             $table->display();
-        }
+        echo '</div>';
      } else {
         $userInfo = api_get_user_info();
         $htmlHeadXtra[] = "

+ 1 - 1
plugin/ticket/src/report.php

@@ -251,7 +251,7 @@ echo '<div class="actions">
         <div class="clear">&nbsp;</div>
     </form></div>';
 if (isset($_GET['keyword'])) {
-    $table = new SortableTable('users', 'get_number_of_users', 'get_user_data', (api_is_western_name_order() xor api_sort_by_first_name()) ? 3 : 2);
+    $table = new SortableTable('users', 'get_number_of_users', 'get_user_data', (api_is_western_name_order() || api_sort_by_first_name()) ? 3 : 2);
     $table->set_header(0, '', false, 'width="18px"');
     $table->set_header(0, get_lang('Photo'), false);
     $table->set_header(1, get_lang('OfficialCode'));

+ 1 - 1
plugin/ticket/src/send_ticket.php

@@ -211,7 +211,7 @@ function show_form_send_ticket()
 		<div class="label2">' . get_lang('Message') . '</div>
 		<div class="formw2">
 			<input type="hidden" id="content" name="content" value="" style="display:none">
-		<input type="hidden" id="content___Config" value="ToolbarSet=Messages&amp;Width=95%25&amp;Height=250&amp;ToolbarSets={ %22Messages%22: [  [ %22Bold%22,%22Italic%22,%22-%22,%22InsertOrderedList%22,%22InsertUnorderedList%22,%22Link%22,%22RemoveLink%22 ] ], %22MessagesMaximized%22: [  ] }&amp;LoadPlugin=[%22customizations%22]&amp;EditorAreaStyles=body { background: #ffffff; }&amp;ToolbarStartExpanded=false&amp;CustomConfigurationsPath='.api_get_path(WEB_CODE_PATH).'inc/lib/fckeditor/myconfig.js&amp;EditorAreaCSS=/main/css/chamilo/default.css&amp;ToolbarComboPreviewCSS='.api_get_path(WEB_CODE_PATH).'css/chamilo/default.css&amp;DefaultLanguage=es&amp;ContentLangDirection=ltr&amp;AdvancedFileManager=true&amp;BaseHref=' . api_get_path(WEB_PLUGIN_PATH) . PLUGIN_NAME . '/s/&amp;&amp;UserIsCourseAdmin=true&amp;UserIsPlatformAdmin=true" style="display:none">
+		<input type="hidden" id="content___Config" value="ToolbarSet=Messages&amp;Width=95%25&amp;Height=250&amp;ToolbarSets={ %22Messages%22: [  [ %22Bold%22,%22Italic%22,%22-%22,%22InsertOrderedList%22,%22InsertUnorderedList%22,%22Link%22,%22RemoveLink%22 ] ], %22MessagesMaximized%22: [  ] }&amp;LoadPlugin=[%22customizations%22]&amp;EditorAreaStyles=body { background: #ffffff; }&amp;ToolbarStartExpanded=false&amp;CustomConfigurationsPath='.api_get_path(WEB_CODE_PATH).'inc/lib/fckeditor/myconfig.js&amp;EditorAreaCSS='.api_get_path(WEB_PATH).'main/css/chamilo/default.css&amp;ToolbarComboPreviewCSS='.api_get_path(WEB_CODE_PATH).'css/chamilo/default.css&amp;DefaultLanguage=es&amp;ContentLangDirection=ltr&amp;AdvancedFileManager=true&amp;BaseHref=' . api_get_path(WEB_PLUGIN_PATH) . PLUGIN_NAME . '/s/&amp;&amp;UserIsCourseAdmin=true&amp;UserIsPlatformAdmin=true" style="display:none">
 		<iframe id="content___Frame" src="'.api_get_path(WEB_CODE_PATH).'inc/lib/fckeditor/editor/fckeditor.html?InstanceName=content&amp;Toolbar=Messages" width="95%" height="250" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border: 0px; background-color: transparent; background-image: none; width: 95%; height: 250px;">
 		</iframe>
 		</div>

+ 192 - 111
plugin/ticket/src/ticket_details.php

@@ -26,85 +26,114 @@ if ($isAdmin) {
 $htmlHeadXtra[] = '
 <script language="javascript">
 $(document).ready(function(){
-	$( "#dialog-form" ).dialog({
+	$("#dialog-form").dialog({
 		autoOpen: false,
 		height: 450,
 		width: 600,
 		modal: true,
 		buttons: {
-			Asignar: function(){
-				$("#genesis").submit()
-				},
-            Close: function() {
-                $( this ).dialog( "close" );
+                    ' . get_lang('Accept') . ': function(){
+                        $("#frmResponsable").submit()
+                    },
+                    ' . ucfirst(get_lang('Close')) . ': function() {
+                        $(this).dialog("close");
+                    }
+                }
+        });
+        
+        $("a#assign").click(function () {
+            $( "#dialog-form" ).dialog( "open" );
+        });
+        
+        $("input#responseyes").click(function () {
+            if(!confirm("' . $plugin->get_lang('AreYouSure') . ' : ' . strtoupper(get_lang('Yes')) . '. ' . $plugin->get_lang('IfYouAreSureTheTicketWillBeClosed') . '")){
+                return false;
             }
-		}
-	});
-    $("a#assign").click(function () {
-    $( "#dialog-form" ).dialog( "open" );
+        });
 
-    });
-    $("input#responseyes").click(function () {
-        if(!confirm("' . $plugin->get_lang('AreYouSure') . ' : ' . strtoupper(get_lang('Yes')) . '. ' . $plugin->get_lang('IfYouAreSureTheTicketWillBeClosed') . '")){
-            return false;
-        }
-    });
-	$("input#responseno").click(function () {
+        $("input#responseno").click(function () {
             if(!confirm("' . $plugin->get_lang('AreYouSure') . ' : ' . strtoupper(get_lang('No')) . '")){
-		return false;
+                return false;
             }
-    	});
-	$("#unassign").click(function () {
-        if (!confirm("' . $plugin->get_lang('AreYouSureYouWantToUnassignTheTicket') . '")) {
-            return false
-        }
-    });
+        });
 
-    $("#close").click(function () {
-           if (!confirm("' . $plugin->get_lang('AreYouSureYouWantToCloseTheTicket') . '")) {
-			return false
-        }
-    });
+        $("#unassign").click(function () {
+            if (!confirm("' . $plugin->get_lang('AreYouSureYouWantToUnassignTheTicket') . '")) {
+                return false;
+            }
+        });
+
+        $("#close").click(function () {
+            if (!confirm("' . $plugin->get_lang('AreYouSureYouWantToCloseTheTicket') . '")) {
+                return false;
+            }
+        });
 
     ' . $disableReponseButtons . '
 });
+
 function validate() {
-	fckEditor1val = FCKeditorAPI.__Instances["content"].GetHTML();
-	document.getElementById("content").value= fckEditor1val;
-	if(fckEditor1val == ""){
-		alert("' . $plugin->get_lang('YouMustWriteAMessage') . '");
-		return false;
-	}
+    fckEditor1val = FCKeditorAPI.__Instances["content"].GetHTML();
+    document.getElementById("content").value= fckEditor1val;
+    if(fckEditor1val == ""){
+        alert("' . $plugin->get_lang('YouMustWriteAMessage') . '");
+        return false;
+    }
 }
+
 var counter_image = 1;
-function remove_image_form(id_elem1) {
-	var elem1 = document.getElementById(id_elem1);
-	elem1.parentNode.removeChild(elem1);
-	counter_image = counter_image - 1;
+
+function remove_image_form(element_id) {
+    $("#" + element_id).remove();
+    counter_image = counter_image - 1;
+    $("#link-more-attach").css("display", "block");
 }
+
 function add_image_form() {
-	// Multiple filepaths for image form
-	var filepaths = document.getElementById("filepaths");
-	if (document.getElementById("filepath_"+counter_image)) {
-		counter_image = counter_image + 1;
-	}  else {
-		counter_image = counter_image;
-	}
-	var elem1 = document.createElement("div");
-	elem1.setAttribute("id","filepath_"+counter_image);
-	filepaths.appendChild(elem1);
-	id_elem1 = "filepath_"+counter_image;
-	id_elem1 = "\'"+id_elem1+"\'";
-	document.getElementById("filepath_"+counter_image).innerHTML = "<input type=\"file\" name=\"attach_"+counter_image+"\"  size=\"20\"  />&nbsp;<a href=\"javascript:remove_image_form("+id_elem1+")\"><img src=\"' . api_get_path(WEB_CODE_PATH) . 'img/delete.gif\"></a>";
-	//document.getElementById("filepath_"+counter_image).innerHTML = "<input type=\"file\" name=\"attach_"+counter_image+"\"  size=\"20\" />&nbsp;<input type=\"text\" name=\"legend[]\" size=\"20\" />";
-	if (filepaths.childNodes.length == 6) {
-		var link_attach = document.getElementById("link-more-attach");
-		if (link_attach) {
-			link_attach.innerHTML="";
-		}
-	}
+    // Multiple filepaths for image form
+    var filepaths = $("#filepaths");
+    var new_elem, input_file, link_remove, img_remove, new_filepath_id;
+
+    if ($("#filepath_"+counter_image)) {
+        counter_image = counter_image + 1;
+    }  else {
+        counter_image = counter_image;
+    }
+
+    new_elem = "filepath_"+counter_image;
+
+    $("<div/>", {
+        id: new_elem,
+        class: "controls"
+    }).appendTo(filepaths);
+    
+    input_file = $("<input/>", {
+        type: "file",
+        name: "attach_" + counter_image,
+        size: 20
+    });
+
+    link_remove = $("<a/>", {
+        onclick: "remove_image_form(\'" + new_elem + "\')",
+        style: "cursor: pointer"
+    });
+
+    img_remove = $("<img/>", {
+        src: "' . api_get_path(WEB_CODE_PATH) . 'img/delete.gif"
+    });
+
+    new_filepath_id = $("#filepath_" + counter_image);
+    new_filepath_id.append(input_file, link_remove.append(img_remove));
+    
+    if (counter_image === 6) {
+        var link_attach = $("#link-more-attach");
+        if (link_attach) {
+            $(link_attach).css("display", "none");
+        }
+    }
 }
 </script>';
+
 $htmlHeadXtra[] = '
 <style>
 div.row div.label2 {
@@ -145,7 +174,14 @@ div.row div.formw2 {
     float: right;
     border-radius:15px;
 }
-
+.attachment-link {
+    margin: 12px;
+}
+#link-more-attach {
+    color: white;
+    cursor: pointer;
+    width: 120px;
+}
 </style>';
 
 $ticket_id = $_GET['ticket_id'];
@@ -167,7 +203,7 @@ if (isset($_POST['response'])) {
         } else if (!is_null($response) && $ticket['ticket']['status_id'] == 'XCF') {
             TicketManager::update_ticket_status('PND', $_GET['ticket_id'], $user_id);
             $ticket['ticket']['status_id'] = 'PND';
-            $ticket['ticket']['status'] = $plugin->get_lang('StsPending');
+            $ticket['ticket']['status'] = $plugin->get_lang('StatusPending');
         }
     }
 }
@@ -188,6 +224,7 @@ if (isset($_REQUEST['action'])) {
             break;
     }
 }
+
 if (!isset($_POST['compose'])) {
     if (isset($_POST['close'])) {
         $_GET['ticket_id'] = $_POST['ticket_id'];
@@ -279,7 +316,7 @@ if (!isset($_POST['compose'])) {
     }
     $select_admins .= "</select>";
     echo '<div id="dialog-form" title="' . $plugin->get_lang('AssignTicket') . '" >';
-    echo '<form id="genesis" method="POST" action="ticket_details.php?ticket_id=' . $ticket['ticket']['ticket_id'] . '">
+    echo '<form id="frmResponsable" method="POST" action="ticket_details.php?ticket_id=' . $ticket['ticket']['ticket_id'] . '">
 			<input type="hidden" name ="action" id="action" value="assign"/>
 			<div>
 				<div class="label">' . get_lang('Responsable') . ':</div>
@@ -289,25 +326,38 @@ if (!isset($_POST['compose'])) {
     echo '</div>';
     echo '</table></div>';
     $messages = $ticket['messages'];
+    echo "<div class='row'>";
+    echo "<div class='span8 offset2'>";
     foreach ($messages as $message) {
-        $class = "messageuser";
+        $type = "success";
+        
         if ($message['admin']) {
-            $class = "messagesupport";
+            $type = "normal";
             if ($isAdmin) {
                 $message['message'].='<br/><b>' . $plugin->get_lang('AttendedBy') . ': ' . $message['user_created'] . " - " . api_convert_and_format_date(api_get_local_time($message['sys_insert_datetime']), DATE_TIME_FORMAT_LONG, _api_get_timezone()) . "</b>";
             }
         }else {
             $message['message'].='<b>' . get_lang('Sent') . ': ' . api_convert_and_format_date(api_get_local_time($message['sys_insert_datetime']), DATE_TIME_FORMAT_LONG, _api_get_timezone()) . "</b>";
         }
-        echo '<div class="' . $class . '" ><b>' . get_lang('Subject') . ': </b> ' . $message['subject'] . '<br/> <b>' . get_lang('Message') . ':</b>' . $message['message'] . '<br/>';
+        
+        $receivedMessage = '<b>' . get_lang('Subject') . ': </b> ' . $message['subject'] . '<br/> <b>' . get_lang('Message') . ':</b>' . $message['message'] . '<br/>';
+        $attachementLinks = "";
+        
         if (isset($message['atachments'])) {
+            $attributeClass = array(
+                'class' => 'attachment-link'
+            );
             foreach ($message['atachments'] as $attach) {
-                echo $attach['attachment_link'];
+                $attachementLinks .= Display::tag('div', $attach['attachment_link'], $attributeClass);
             }
         }
-        echo '</div>';
+        
+        $entireMessage = $receivedMessage . $attachementLinks;
+        echo Display::return_message($entireMessage, $type, false);
     }
-    $asunto = "RE: " . $message['subject'];
+    echo "</div>";
+    echo "</div>";
+    $subject = get_lang('ReplyShort') .": " . $message['subject'];
     $user_admin = api_is_platform_admin();
     if ($ticket['ticket']['status_id'] != 'REE' AND $ticket['ticket']['status_id'] != 'CLS') {
         if (!$isAdmin && $ticket['ticket']['status_id'] != 'XCF') {
@@ -334,49 +384,80 @@ function show_form_send_message()
 {
     global $isAdmin;
     global $ticket;
-    global $asunto;
-    echo '<form enctype="multipart/form-data" action="' . api_get_self() . '?ticket_id=' . $ticket['ticket']['ticket_id'] . '" method="post" name="send_ticket" id="send_ticket"
- 	onsubmit="return validate()" style="width:100%">';
-    echo '<div class="row" ><div class ="label">Asunto:</div>
-       		<div class="formw"><input type = "text" id ="subject" name="subject" value="' . $asunto . '" required ="" style="width:60%"/></div>
-		  </div>';
-    echo '<div class="row">
-		<div class="label2">
-                    ' . get_lang('Message') . '
-		</div>
-		<div class="formw2">
-			<input type="hidden" id="content" name="content" value="" style="display:none">
-		<input type="hidden" id="content___Config" value="ToolbarSet=Messages&amp;Width=95%25&amp;Height=250&amp;ToolbarSets={ %22Messages%22: [  [ %22Bold%22,%22Italic%22,%22-%22,%22InsertOrderedList%22,%22InsertUnorderedList%22,%22Link%22,%22RemoveLink%22 ] ], %22MessagesMaximized%22: [  ] }&amp;LoadPlugin=[%22customizations%22]&amp;EditorAreaStyles=body { background: #ffffff; }&amp;ToolbarStartExpanded=false&amp;CustomConfigurationsPath='.api_get_path(WEB_CODE_PATH).'inc/lib/fckeditor/myconfig.js&amp;EditorAreaCSS=/main/css/chamilo/default.css&amp;ToolbarComboPreviewCSS=/main/css/chamilo/default.css&amp;DefaultLanguage=es&amp;ContentLangDirection=ltr&amp;AdvancedFileManager=true&amp;BaseHref=' . api_get_path(WEB_PLUGIN_PATH) . PLUGIN_NAME . '/s/&amp;&amp;UserIsCourseAdmin=true&amp;UserIsPlatformAdmin=true" style="display:none">
-		<iframe id="content___Frame" src="'.api_get_path(WEB_CODE_PATH).'inc/lib/fckeditor/editor/fckeditor.html?InstanceName=content&amp;Toolbar=Messages" width="95%" height="250" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border: 0px; background-color: transparent; background-image: none; width: 95%; height: 250px;">
-		</iframe>
-		</div>
-	</div>
-';
-    echo '<input type="hidden" id="ticket_id" name="ticket_id" value="' . $_GET['ticket_id'] . '">';
-    echo '<div class="row">
-		<div class="label">' . get_lang('FilesAttachment') . '</div>
-		<div class="formw">
-				<span id="filepaths">
-				<div id="filepath_1">
-					<input type="file" name="attach_1" id="attach_1"  size="20" style="width:59%;"/>
-				</div></span>
-		</div>
-	</div>';
-    echo '<div class="row">
-		<div class="formw">
-			<span id="link-more-attach">
-				<a href="javascript://" onclick="return add_image_form()">' . get_lang('AddOneMoreFile') . '</a></span>&nbsp;
-					(' . sprintf(get_lang('MaximunFileSizeX'), format_file_size(api_get_setting('message_max_upload_filesize'))) . ')
-			</div>
-		</div>';
-    echo '<div class="row">
-		<div class="label"></div>
-		<div class="formw">
-                <button class="save" name="compose" type="submit">' . get_lang('SendMessage') . '</button>' .
-            ($isAdmin ? '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="confirmation"/>Solicitar confirmaci&oacute;n' : "") .
-    '</div>
-	</div>';
-    echo '</form>';
+    global $subject;
+    global $plugin;
+    
+    Display::div('', array('span2'));
+    
+    $form = new FormValidator(
+        'send_ticket', 
+        'POST',
+        api_get_self() . '?ticket_id=' . $ticket['ticket']['ticket_id'],
+        '',
+        array(
+            'enctype' => 'multipart/form-data',
+            'onsubmit' => 'return validate()',
+            'class' => 'span9 offset1 form-horizontal'
+        )
+    );
+    
+    $form->addElement(
+        'text', 
+        'subject', 
+        get_lang('Subject'), 
+        array(
+            'for' => 'subject', 
+            'value' => $subject,
+            'style' => 'width: 540px;'
+        )
+    );
+    
+    $form->addElement('hidden', 'ticket_id', $_GET['ticket_id']);
+    
+    $form->add_html_editor(
+        'content', 
+        get_lang('Message'),
+        false, 
+        false, 
+        array(
+            'ToolbarSet' => 'Profile', 
+            'Width' => '550', 
+            'Height' => '250'
+        )
+    );
+    
+    if ($isAdmin) {
+        $form->addElement(
+            'checkbox',
+            'confirmation',
+             null,
+            $plugin->get_lang('RequestConfirmation')
+        );
+    }
+    
+    $form->addElement('html', '<span id="filepaths">');
+    $form->addElement('html', '<div id="filepath_1">');
+    $form->addElement('file', 'attach_1', get_lang('FilesAttachment'));
+    $form->addElement('html', '</div>');
+    $form->addElement('html', '</span>');
+    
+    $form->addElement('html', '<div class="controls">');
+    $form->addElement('html', '<span id="link-more-attach" >');
+    $form->addElement('html', '<span class="label label-info" onclick="return add_image_form()">' . get_lang('AddOneMoreFile') . '</span>');
+    $form->addElement('html', '</span>');
+    $form->addElement('html', '(' . sprintf(get_lang('MaximunFileSizeX'), format_file_size(api_get_setting('message_max_upload_filesize'))) . ')');
+    
+    $form->addElement('html', '<br/>');
+    $form->addElement(
+        'button', 
+        'compose', 
+        get_lang('SendMessage'), 
+        array(
+            'class' => 'save'
+        )
+    );
+    
+    $form->display();
 }
 
 Display::display_footer();