You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							357 lines
						
					
					
						
							9.8 KiB
						
					
					
				
			
		
		
	
	
							357 lines
						
					
					
						
							9.8 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
/* For licensing terms, see /license.txt */
 | 
						|
 | 
						|
use Chamilo\CoreBundle\Component\Utils\ActionIcon;
 | 
						|
 | 
						|
require_once __DIR__.'/../inc/global.inc.php';
 | 
						|
 | 
						|
if (!api_is_platform_admin() && 'true' !== api_get_setting('ticket_allow_student_add')) {
 | 
						|
    header('Location:'.api_get_path(WEB_CODE_PATH).'ticket/tickets.php');
 | 
						|
    exit;
 | 
						|
}
 | 
						|
 | 
						|
api_block_anonymous_users();
 | 
						|
$courseId = api_get_course_int_id();
 | 
						|
 | 
						|
$htmlHeadXtra[] = '<script>
 | 
						|
function updateCourseList(sessionId) {
 | 
						|
    $selectCourse = $("select#course_id");
 | 
						|
    $selectCourse.empty();
 | 
						|
    $.get("'.api_get_path(WEB_AJAX_PATH).'session.ajax.php", {
 | 
						|
        a: "get_courses_inside_session",
 | 
						|
        session_id : sessionId
 | 
						|
    }, function (courseList) {
 | 
						|
        $("<option>", {
 | 
						|
            value: 0,
 | 
						|
            text: "'.get_lang('Select').'"
 | 
						|
        }).appendTo($selectCourse);
 | 
						|
 | 
						|
        if (courseList.length > 0) {
 | 
						|
            $.each(courseList, function (index, course) {
 | 
						|
                $("<option>", {
 | 
						|
                    value: course.id,
 | 
						|
                    text: course.name
 | 
						|
                }).appendTo($selectCourse);
 | 
						|
            });
 | 
						|
            $("select#course_id option[value=\''.$courseId.'\']").attr("selected",true);
 | 
						|
            $("select#course_id").selectpicker("refresh");
 | 
						|
        }
 | 
						|
    }, "json");
 | 
						|
}
 | 
						|
 | 
						|
$(function() {
 | 
						|
    $("select#session_id").on("change", function () {
 | 
						|
        var sessionId = parseInt(this.value, 10);
 | 
						|
        updateCourseList(sessionId);
 | 
						|
    });
 | 
						|
 | 
						|
    var sessionId = $("select#session_id").val();
 | 
						|
    updateCourseList(sessionId);
 | 
						|
});
 | 
						|
 | 
						|
var 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 = $("#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: "'.Display::returnIconPath('delete.png').'"
 | 
						|
    });
 | 
						|
 | 
						|
    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>';
 | 
						|
 | 
						|
$projectId = isset($_GET['project_id']) ? (int) $_GET['project_id'] : 0;
 | 
						|
 | 
						|
$types = TicketManager::get_all_tickets_categories($projectId, 'category.name ASC');
 | 
						|
$htmlHeadXtra[] = '<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>';
 | 
						|
 | 
						|
/**
 | 
						|
 * @param $array
 | 
						|
 * @param $name
 | 
						|
 * @param $key
 | 
						|
 *
 | 
						|
 * @return string
 | 
						|
 */
 | 
						|
function js_array($array, $name, $key)
 | 
						|
{
 | 
						|
    $return = 'new Array(); ';
 | 
						|
    foreach ($array as $value) {
 | 
						|
        $return .= $name."['".$value['category_id']."'] ='".$value[$key]."'; ";
 | 
						|
    }
 | 
						|
 | 
						|
    return $return;
 | 
						|
}
 | 
						|
 | 
						|
function save_ticket()
 | 
						|
{
 | 
						|
    $content = $_POST['content'];
 | 
						|
    if (!empty($_POST['phone'])) {
 | 
						|
        $content .= '<p style="color:red"> '.get_lang('Phone').': '.Security::remove_XSS($_POST['phone']).'</p>';
 | 
						|
    }
 | 
						|
    $course_id = isset($_POST['course_id']) ? (int) $_POST['course_id'] : '';
 | 
						|
    $sessionId = isset($_POST['session_id']) ? (int) $_POST['session_id'] : '';
 | 
						|
    $category_id = isset($_POST['category_id']) ? (int) $_POST['category_id'] : '';
 | 
						|
 | 
						|
    $project_id = (int) $_POST['project_id'];
 | 
						|
    $subject = $_POST['subject'];
 | 
						|
    $other_area = (int) $_POST['other_area'];
 | 
						|
    $personal_email = $_POST['personal_email'];
 | 
						|
    $source = (int) $_POST['source_id'];
 | 
						|
    $user_id = isset($_POST['user_id']) ? (int) $_POST['user_id'] : null;
 | 
						|
    $priority = isset($_POST['priority_id']) ? (int) $_POST['priority_id'] : '';
 | 
						|
    $status = isset($_POST['status_id']) ? (int) $_POST['status_id'] : '';
 | 
						|
    $file_attachments = $_FILES;
 | 
						|
 | 
						|
    if (TicketManager::add(
 | 
						|
        $category_id,
 | 
						|
        $course_id,
 | 
						|
        $sessionId,
 | 
						|
        $project_id,
 | 
						|
        $other_area,
 | 
						|
        $subject,
 | 
						|
        $content,
 | 
						|
        $personal_email,
 | 
						|
        $file_attachments,
 | 
						|
        $source,
 | 
						|
        $priority,
 | 
						|
        $status,
 | 
						|
        $user_id
 | 
						|
    )) {
 | 
						|
        header('Location:'.api_get_path(WEB_CODE_PATH).'ticket/tickets.php');
 | 
						|
        exit;
 | 
						|
    } else {
 | 
						|
        Display::addFlash(Display::return_message(get_lang('There was an error registering your ticket')));
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
$interbreadcrumb[] = [
 | 
						|
    'url' => api_get_path(WEB_CODE_PATH).'ticket/tickets.php',
 | 
						|
    'name' => get_lang('My tickets'),
 | 
						|
];
 | 
						|
 | 
						|
$userId = api_get_user_id();
 | 
						|
 | 
						|
// Category List
 | 
						|
$categoryList = [];
 | 
						|
foreach ($types as $type) {
 | 
						|
    $categoryList[$type['category_id']] = $type['name'].': '.$type['description'];
 | 
						|
}
 | 
						|
 | 
						|
// Status List
 | 
						|
$statusAttributes = [
 | 
						|
    'style' => 'display: none;',
 | 
						|
    'id' => 'status_id',
 | 
						|
    'for' => 'status_id',
 | 
						|
];
 | 
						|
 | 
						|
$statusList = TicketManager::getStatusList();
 | 
						|
 | 
						|
// Source List
 | 
						|
$sourceList = [];
 | 
						|
$sourceAttributes = [
 | 
						|
    'style' => 'display: none;',
 | 
						|
    'id' => 'source_id',
 | 
						|
    'for' => 'source_id',
 | 
						|
];
 | 
						|
$sourceList[TicketManager::SOURCE_PLATFORM] = get_lang('Platform');
 | 
						|
if (api_is_platform_admin()) {
 | 
						|
    $sourceAttributes = [
 | 
						|
        'id' => 'source_id',
 | 
						|
        'for' => 'source_id',
 | 
						|
    ];
 | 
						|
    $sourceList[TicketManager::SOURCE_EMAIL] = get_lang('E-mail');
 | 
						|
    $sourceList[TicketManager::SOURCE_PHONE] = get_lang('Phone');
 | 
						|
    $sourceList[TicketManager::SOURCE_PRESENTIAL] = get_lang('Presential');
 | 
						|
}
 | 
						|
 | 
						|
// Priority List
 | 
						|
$priorityList = TicketManager::getPriorityList();
 | 
						|
 | 
						|
$projectId = isset($_GET['project_id']) ? (int) $_GET['project_id'] : 0;
 | 
						|
 | 
						|
$form = new FormValidator(
 | 
						|
    'send_ticket',
 | 
						|
    'POST',
 | 
						|
    api_get_self().'?project_id='.$projectId,
 | 
						|
    '',
 | 
						|
    [
 | 
						|
        'enctype' => 'multipart/form-data',
 | 
						|
    ]
 | 
						|
);
 | 
						|
 | 
						|
$form->addHidden('user_id_request', '', ['id' => 'user_id_request']);
 | 
						|
$form->addHidden('project_id', $projectId);
 | 
						|
$form->addHidden('other_area', '', ['id' => 'other_area']);
 | 
						|
$form->addHidden('email', '', ['id' => 'email']);
 | 
						|
$form->addSelect('category_id', get_lang('Category'), $categoryList, ['id' => 'category_id', 'for' => 'category_id']);
 | 
						|
$form->addElement('text', 'subject', get_lang('Subject'), ['id' => 'subject']);
 | 
						|
$form->addHtmlEditor(
 | 
						|
    'content',
 | 
						|
    get_lang('Message'),
 | 
						|
    false,
 | 
						|
    false,
 | 
						|
    [
 | 
						|
        'ToolbarSet' => 'Profile',
 | 
						|
        'Height' => '250',
 | 
						|
    ]
 | 
						|
);
 | 
						|
 | 
						|
if (api_is_platform_admin()) {
 | 
						|
    $form->addSelectAjax(
 | 
						|
        'user_id',
 | 
						|
        get_lang('Assign'),
 | 
						|
        [],
 | 
						|
        ['url' => api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?a=get_user_like']
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
$form->addElement('text', 'personal_email', get_lang('Personal e-mail'), ['id' => 'personal_email']);
 | 
						|
$form->addLabel(
 | 
						|
    '',
 | 
						|
    Display::div(
 | 
						|
        '',
 | 
						|
        [
 | 
						|
            'id' => 'user_request',
 | 
						|
        ]
 | 
						|
    )
 | 
						|
);
 | 
						|
 | 
						|
$form->addSelect('status_id', get_lang('Status'), $statusList, $statusAttributes);
 | 
						|
$form->addSelect('priority_id', get_lang('Priority'), $priorityList, ['id' => 'priority_id', 'for' => 'priority_id']);
 | 
						|
$form->addSelect('source_id', get_lang('Source'), $sourceList, $sourceAttributes);
 | 
						|
$form->addElement(
 | 
						|
    'text',
 | 
						|
    'phone',
 | 
						|
    get_lang('Phone').' ('.get_lang('Optional').')',
 | 
						|
    [
 | 
						|
        'id' => 'phone',
 | 
						|
    ]
 | 
						|
);
 | 
						|
 | 
						|
$sessionList = SessionManager::get_sessions_by_user($userId);
 | 
						|
 | 
						|
if (api_is_platform_admin() || !empty($sessionList)) {
 | 
						|
    $sessionListToSelect = [get_lang('Select')];
 | 
						|
    // Course List
 | 
						|
    foreach ($sessionList as $sessionInfo) {
 | 
						|
        $sessionListToSelect[$sessionInfo['session_id']] = $sessionInfo['session_name'];
 | 
						|
    }
 | 
						|
    $form->addSelect('session_id', get_lang('Session'), $sessionListToSelect, ['id' => 'session_id']);
 | 
						|
} else {
 | 
						|
    $form->addHidden('session_id', 0);
 | 
						|
}
 | 
						|
 | 
						|
$form->addSelect('course_id', get_lang('Course'), [], ['id' => 'course_id']);
 | 
						|
 | 
						|
$courseInfo = api_get_course_info();
 | 
						|
$params = [];
 | 
						|
 | 
						|
if (!empty($courseInfo)) {
 | 
						|
    $params = [
 | 
						|
        'course_id' => $courseInfo['real_id'],
 | 
						|
    ];
 | 
						|
 | 
						|
    $sessionInfo = api_get_session_info(api_get_session_id());
 | 
						|
    if (!empty($sessionInfo)) {
 | 
						|
        $params['session_id'] = $sessionInfo['id'];
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
$form->setDefaults($params);
 | 
						|
 | 
						|
$form->addElement('file', 'attach_1', get_lang('Files attachments'));
 | 
						|
$form->addLabel('', '<span id="filepaths"><div id="filepath_1"></div></span>');
 | 
						|
 | 
						|
$form->addLabel(
 | 
						|
    '',
 | 
						|
    '<span id="link-more-attach">
 | 
						|
         <span class="btn btn--success" onclick="return add_image_form()">'
 | 
						|
    .get_lang('Add one more file')
 | 
						|
    .'</span></span>('
 | 
						|
    .sprintf(
 | 
						|
        get_lang('Maximun file size: %s'),
 | 
						|
        format_file_size((int) api_get_setting('message_max_upload_filesize'))
 | 
						|
    ).')'
 | 
						|
);
 | 
						|
 | 
						|
$form->addElement('html', '<br/>');
 | 
						|
$form->addElement(
 | 
						|
    'button',
 | 
						|
    'compose',
 | 
						|
    get_lang('Send message'),
 | 
						|
    null,
 | 
						|
    null,
 | 
						|
    null,
 | 
						|
    'btn btn--primary',
 | 
						|
    [
 | 
						|
        'id' => 'btnsubmit',
 | 
						|
    ]
 | 
						|
);
 | 
						|
 | 
						|
$form->addRule('content', get_lang('Required field'), 'required');
 | 
						|
$form->addRule('category_id', get_lang('Required field'), 'required');
 | 
						|
$form->addRule('subject', get_lang('Required field'), 'required');
 | 
						|
 | 
						|
if ($form->validate()) {
 | 
						|
    save_ticket();
 | 
						|
}
 | 
						|
 | 
						|
Display::display_header(get_lang('Compose message'));
 | 
						|
 | 
						|
echo '<div class="actions">';
 | 
						|
echo Display::url(
 | 
						|
    Display::getMdiIcon(ActionIcon::BACK, 'ch-tool-icon', null, ICON_SIZE_MEDIUM, get_lang('Tickets')),
 | 
						|
    api_get_path(WEB_CODE_PATH).'ticket/tickets.php'
 | 
						|
);
 | 
						|
echo '</div>';
 | 
						|
 | 
						|
$form->display();
 | 
						|
Display::display_footer();
 | 
						|
 |