<?php
/* For licensing terms, see /license.txt */

/**
 *
 * @package chamilo.plugin.ticket
 */
require_once __DIR__.'/../inc/global.inc.php';

api_block_anonymous_users();

$user_id = api_get_user_id();
$isAdmin = api_is_platform_admin();
$interbreadcrumb[] = array(
    'url' => api_get_path(WEB_CODE_PATH).'ticket/tickets.php',
    'name' => get_lang('MyTickets')
);
$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('TicketDetail'));

$disableReponseButtons = '';
$htmlHeadXtra[] = '<script>
$(document).ready(function() {
	$("#dialog-form").dialog({
		autoOpen: false,
		height: 450,
		width: 600,
		modal: true,
		buttons: {
            ' . get_lang('Accept').': function(){
                $("#frmResponsable").submit()
            },
            ' . ucfirst(get_lang('Close')).': function() {
                $(this).dialog("close");
            }
            }
        });

        $("a#assign").click(function () {
            $( "#dialog-form" ).dialog( "open" );
        });

        $(".responseyes").click(function () {
            if(!confirm("' . get_lang('AreYouSure').' : '.strtoupper(get_lang('Yes')).'. '.get_lang('IfYouAreSureTheTicketWillBeClosed').'")){
                return false;
            }
        });

        $("input#responseno").click(function () {
            if(!confirm("' . get_lang('AreYouSure').' : '.strtoupper(get_lang('No')).'")){
                return false;
            }
        });     
       
        '.$disableReponseButtons.'
});

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

$htmlHeadXtra[] = '<style>
div.row div.label2 {
	float:left;
	text-align: right;
	width:22%;
}
div.row div.formw2 {
    width:50%;
	margin-left: 2%;
	margin-right: 16%;
	float:left;
}
.messageuser, .messagesupport {
    border: 1px solid;
    margin: 10px 0px;
    padding:15px 10px 15px 50px;
    background-repeat: no-repeat;
    background-position: 10px center;
    width:50%;
	behavior: url(/pie/PIE.htc);
}
.messageuser {
    color: #00529B;
    -moz-border-radius: 15px 15px 15px 15px;
    -webkit-border-radius: 15px 15px 15px 15px;
    background-color: #BDE5F8;
    margin-left:20%;
    border-radius:15px;
    float: left;
}
.messagesupport {
    color: #4F8A10;
    -moz-border-radius: 15px 15px 15px 15px;
    -webkit-border-radius: 15px 15px 15px 15px;
    background-color: #DFF2BF;
    margin-right: 20%;
    float: right;
    border-radius:15px;
}
.attachment-link {
    margin: 12px;
}
#link-more-attach {
    color: white;
    cursor: pointer;
    width: 120px;
}
</style>';

$ticket_id = $_GET['ticket_id'];
$ticket = TicketManager::get_ticket_detail_by_id($ticket_id);
if (!isset($ticket['ticket'])) {
    api_not_allowed();
}
if (!isset($_GET['ticket_id'])) {
    header('Location: '.api_get_path(WEB_CODE_PATH).'ticket/tickets.php');
    exit;
}

if (isset($_POST['response'])) {
    if ($user_id == $ticket['ticket']['assigned_last_user'] || api_is_platform_admin()) {
        $response = $_POST['response'] === '1' ? true : false;
        $newStatus = TicketManager::STATUS_PENDING;
        if ($response) {
            $newStatus = TicketManager::STATUS_CLOSE;
        }
        TicketManager::update_ticket_status(
            TicketManager::getStatusIdFromCode($newStatus),
            $ticket_id,
            $user_id
        );
        Display::addFlash(Display::return_message(get_lang('Updated')));
        header("Location:".api_get_self()."?ticket_id=".$ticket_id);
        exit;

    }
}

$title = 'Ticket #'.$ticket['ticket']['code'];

if (!isset($_POST['compose'])) {
    if (isset($_REQUEST['close'])) {
        TicketManager::close_ticket($_REQUEST['ticket_id'], $user_id);
        $ticket['ticket']['status_id'] = TicketManager::STATUS_CLOSE;
        $ticket['ticket']['status'] = get_lang('Closed');
    }

    Display::display_header();
    $projectId = $ticket['ticket']['project_id'];
    echo '<div class="actions">';
    echo Display::url(
        Display::return_icon('back.png', get_lang('Tickets'), [], ICON_SIZE_MEDIUM),
        api_get_path(WEB_CODE_PATH).'ticket/tickets.php?project_id='.$projectId
    );
    echo '</div>';
    $bold = '';
    if ($ticket['ticket']['status_id'] == TicketManager::STATUS_CLOSE) {
        $bold = 'style = "font-weight: bold;"';
        echo "<style>
                #confirmticket {
                    display: none;
                }
              </style>";
    }
    if ($isAdmin) {
        $senderData = get_lang('AddedBy').' '.$ticket['ticket']['user_url'].' ('.$ticket['usuario']['username'].').';
    } else {
        $senderData = get_lang('AddedBy').' '.$ticket['usuario']['complete_name'].' ('.$ticket['usuario']['username'].').';
    }

    echo '<table width="100%" >
            <tr>
              <td colspan="3">
              <h1>'.$title.'</h1>
              <h2>'.$ticket['ticket']['subject'].'</h2>
              <p>
                '.$senderData.' '.
                get_lang('Created').' '.
                Display::url(
                    date_to_str_ago($ticket['ticket']['start_date_from_db']),
                    '#',
                    ['title' => $ticket['ticket']['start_date'], 'class' => 'boot-tooltip']
                ).'. '.
                get_lang('TicketUpdated').' '.
                Display::url(
                    date_to_str_ago($ticket['ticket']['sys_lastedit_datetime_from_db']),
                    '#',
                    ['title' => $ticket['ticket']['sys_lastedit_datetime'], 'class' => 'boot-tooltip']
                ).'
              </p>
              </td>
            </tr>
            <tr>
               <td><p><b>' . get_lang('Category').': </b>'.$ticket['ticket']['name'].'</p></td>
            </tr>
            <tr>
               <td><p ' . $bold.'><b>'.get_lang('Status').':</b> '.$ticket['ticket']['status'].'</p></td>
            </tr>
            <tr>
                <td><p><b>' . get_lang('Priority').': </b>'.$ticket['ticket']['priority'].'<p></td>
            </tr>';

    if (!empty($ticket['ticket']['assigned_last_user'])) {
        $assignedUser = api_get_user_info($ticket['ticket']['assigned_last_user']);
        echo '<tr>
                <td><p><b>' . get_lang('AssignedTo').': </b>'.$assignedUser['complete_name'].'<p></td>
            </tr>';
    } else {
        echo '<tr>
                <td><p><b>' . get_lang('AssignedTo').': </b>-<p></td>
            </tr>';
    }
    if ($ticket['ticket']['course_url'] != null) {
        if (!empty($ticket['ticket']['session_id'])) {
            $sessionInfo = api_get_session_info($ticket['ticket']['session_id']);
            echo '<tr>
				<td><b>' . get_lang('Session').':</b> '.$sessionInfo['name'].' </td>
			    <td></td>
	            <td colspan="2"></td>
	          </tr>';
        }

        echo '<tr>
				<td><b>' . get_lang('Course').':</b> '.$ticket['ticket']['course_url'].' </td>
			    <td></td>
	            <td colspan="2"></td>
	          </tr>';
    }
    echo '<tr>
            <td>
            <hr />
            <b>' . get_lang('Description').':</b> <br />
            '.$ticket['ticket']['message'].'
            <hr />
            </td>            
         </tr>
        ';
    echo '</table>';
    $messages = $ticket['messages'];
    $counter = 1;
    foreach ($messages as $message) {
        $date = Display::url(
            date_to_str_ago($message['sys_insert_datetime']),
            '#',
            ['title' => api_get_local_time($message['sys_insert_datetime']), 'class' => 'boot-tooltip']
        );

        $receivedMessage = '';
        if (!empty($message['subject'])) {
            $receivedMessage = '<b>'.get_lang('Subject').': </b> '.$message['subject'].'<br/>';
        }

        if (!empty($message['message'])) {
            $receivedMessage = '<b>'.get_lang('Message').':</b><br/>'.$message['message'].'<br/>';
        }

        $attachmentLinks = '';
        if (isset($message['attachments'])) {
            $attributeClass = array(
                'class' => 'attachment-link'
            );
            foreach ($message['attachments'] as $attach) {
                $attachmentLinks .= Display::tag('div', $attach['attachment_link'], $attributeClass);
            }
        }

        $entireMessage = $receivedMessage.$attachmentLinks;
        $counterLink = Display::url('#'.$counter, api_get_self().'?ticket_id='.$ticket_id.'#note-'.$counter);
        echo '<a id="note-'.$counter.'"> </a><h4>'.sprintf(get_lang('UpdatedByX'), $message['user_created']).' '.$date.
            ' <span class="pull-right">'.$counterLink.'</span></h4>';
        echo '<hr />';

        if (!empty($entireMessage)) {
            echo Display::div(
                $entireMessage,
                ['class' => 'well']
            );
        }

        $counter++;
    }

    $subject = get_lang('ReplyShort').': '.$ticket['ticket']['subject'];

    if ($ticket['ticket']['status_id'] != TicketManager::STATUS_FORWARDED &&
        $ticket['ticket']['status_id'] != TicketManager::STATUS_CLOSE
    ) {
        if (!$isAdmin && $ticket['ticket']['status_id'] != TicketManager::STATUS_UNCONFIRMED) {
            show_form_send_message($ticket['ticket']);
        } else {
            if (
                $ticket['ticket']['assigned_last_user'] == $user_id ||
                $ticket['ticket']['sys_insert_user_id'] == $user_id ||
                $isAdmin
            ) {
                show_form_send_message($ticket['ticket']);
            }
        }
    }

    Display::display_footer();
} else {
    $ticket_id = $_POST['ticket_id'];
    $content = $_POST['content'];
    $messageToSend = '';
    $subject = $_POST['subject'];
    $message = isset($_POST['confirmation']) ? true : false;
    $file_attachments = $_FILES;
    $user_id = api_get_user_id();

    if ($isAdmin) {
        $oldUserId = $ticket['ticket']['assigned_last_user'];
        if (isset($_POST['assigned_last_user']) && !empty($_POST['assigned_last_user']) &&
            $_POST['assigned_last_user'] != $oldUserId
        ) {
            TicketManager::assignTicketToUser(
                $ticket_id,
                $_POST['assigned_last_user']
            );
            $oldUserName = '-';
            if (!empty($oldUserId)) {
                $oldUserInfo = api_get_user_info($oldUserId);
                $oldUserName = $oldUserInfo['complete_name'];
            }

            $userCompleteName = '-';
            if (!empty($_POST['assigned_last_user'])) {
                $userInfo = api_get_user_info($_POST['assigned_last_user']);
                $userCompleteName = $userInfo['complete_name'];
            }

            $messageToSend .= sprintf(
                get_lang('AssignedChangeFromXToY'),
                $oldUserName,
                $userCompleteName
            ).'<br />';
        }

        TicketManager::updateTicket(
            [
                'priority_id' => $_POST['priority_id'],
                'status_id' => $_POST['status_id']
            ],
            $ticket_id,
            api_get_user_id()
        );

        if ($_POST['priority_id'] != $ticket['ticket']['priority_id']) {
            $newPriority = TicketManager::getPriority($_POST['priority_id']);
            $newPriorityTitle = '-';
            if ($newPriority) {
                $newPriorityTitle = $newPriority->getName();
            }
            $oldPriority = TicketManager::getPriority($ticket['ticket']['priority_id']);
            $oldPriorityTitle = '-';
            if ($oldPriority) {
                $oldPriorityTitle = $oldPriority->getName();
            }
            $messageToSend .= sprintf(
                get_lang('PriorityChangeFromXToY'),
                $oldPriorityTitle,
                $newPriorityTitle
            ).'<br />';
        }

        if ($_POST['status_id'] != $ticket['ticket']['status_id']) {
            $newStatus = TicketManager::getStatus($_POST['status_id']);
            $newTitle = '-';
            if ($newStatus) {
                $newTitle = $newStatus->getName();
            }
            $oldStatus = TicketManager::getStatus($ticket['ticket']['status_id']);
            $oldStatusTitle = '-';
            if ($oldStatus) {
                $oldStatusTitle = $oldStatus->getName();
            }

            $messageToSend .= sprintf(
                get_lang('StatusChangeFromXToY'),
                $oldStatusTitle,
                $newTitle
            ).'<br />';
        }
    }

    $messageToSend .= $content;

    TicketManager::insertMessage(
        $ticket_id,
        $subject,
        $messageToSend,
        $file_attachments,
        $user_id,
        'NOL',
        $message
    );

    TicketManager::sendNotification(
        $ticket_id,
        get_lang('TicketUpdated'),
        $messageToSend
    );

    Display::addFlash(Display::return_message(get_lang('Saved')));
    header("Location:".api_get_self()."?ticket_id=".$ticket_id);
    exit;
}

/**
 * @param array $ticket
 */
function show_form_send_message($ticket)
{
    global $isAdmin;
    global $subject;

    $form = new FormValidator(
        'send_ticket',
        'POST',
        api_get_self().'?ticket_id='.$ticket['id'],
        '',
        array(
            'enctype' => 'multipart/form-data',
            'class' => 'form-horizontal'
        )
    );

    if ($isAdmin) {
        $statusList = TicketManager::getStatusList();
        $form->addElement(
            'select',
            'status_id',
            get_lang('Status'),
            $statusList
        );

        $priorityList = TicketManager::getPriorityList();
        $form->addElement(
            'select',
            'priority_id',
            get_lang('Priority'),
            $priorityList,
            array(
                'id' => 'priority_id',
                'for' => 'priority_id'
            )
        );

        $form->addSelectAjax(
            'assigned_last_user',
            get_lang('Assign'),
            null,
            ['url' => api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?a=get_user_like']
        );

        $form->setDefaults(
            [
                'priority_id' =>  $ticket['priority_id'],
                'status_id' =>  $ticket['status_id'],
                'assigned_last_user' => $ticket['assigned_last_user']
            ]
        );
    }

    $form->addElement(
        'text',
        'subject',
        get_lang('Subject'),
        array(
            'for' => 'subject',
            'value' => $subject,
            'style' => 'width: 540px;'
        )
    );

    $form->addElement('hidden', 'ticket_id', $ticket['id']);

    $form->addHtmlEditor(
        'content',
        get_lang('Message'),
        false,
        false,
        array(
            'ToolbarSet' => 'Profile',
            'Width' => '550',
            'Height' => '250'
        )
    );

    if ($isAdmin) {
        $form->addElement(
            'checkbox',
            'confirmation',
            null,
            get_lang('RequestConfirmation')
        );
    }

    $form->addElement('file', 'attach_1', get_lang('FilesAttachment'));
    $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('AddOneMoreFile').'</span>
         </span>
         ('.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'),
        null,
        null,
        null,
        'btn btn-primary'
    );

    $form->display();
}