Merge branch 'FraGoTe-6715' into 1.9.x

1.9.x
Yannick Warnier 11 years ago
commit 456ab557e7
  1. 8
      main/inc/lib/display.lib.php
  2. 1
      main/inc/lib/formvalidator/FormValidator.class.php
  3. 10
      plugin/ticket/database.php
  4. 14
      plugin/ticket/lang/english.php
  5. 14
      plugin/ticket/lang/french.php
  6. 13
      plugin/ticket/lang/spanish.php
  7. 57
      plugin/ticket/src/course_user_list.php
  8. 487
      plugin/ticket/src/new_ticket.php
  9. 2
      plugin/ticket/src/report.php
  10. 2
      plugin/ticket/src/send_ticket.php
  11. 303
      plugin/ticket/src/ticket_details.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()) {

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

@ -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;

@ -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";

@ -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";

@ -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";

@ -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;

@ -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[] = "

@ -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'));

@ -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>

@ -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();

Loading…
Cancel
Save