ticket_details.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. <?php
  2. $language_file= array('messages','userInfo', 'admin');
  3. $cidReset = true;
  4. require_once '../config.php';
  5. $plugin = TicketPlugin::create();
  6. api_block_anonymous_users();
  7. $interbreadcrumb[]= array ('url' =>'myticket.php','name' => get_lang('MisTickets'));
  8. $interbreadcrumb[]= array ('url' =>'#','name' => get_lang('TicketDetail'));
  9. $htmlHeadXtra[]='
  10. <script src="/pie/PIE_IE678.js"></script>
  11. <script language="javascript">
  12. $(document).ready(function(){
  13. $( "#dialog-form" ).dialog({
  14. autoOpen: false,
  15. height: 450,
  16. width: 600,
  17. modal: true,
  18. buttons: {
  19. Asignar: function(){
  20. $("#genesis").submit()
  21. },
  22. Close: function() {
  23. $( this ).dialog( "close" );
  24. }
  25. }
  26. });
  27. $("a#assign").click(function () {
  28. $( "#dialog-form" ).dialog( "open" );
  29. });
  30. $("input#respuestasi").click(function () {
  31. if(!confirm("Confirma que su respuesta es : SI ?. Si est\u00e1 seguro el ticket ser\u00e1 cerrado")){
  32. return false;
  33. }
  34. });
  35. $("input#respuestano").click(function () {
  36. if(!confirm("Confirma que su respuesta es : NO ?")){
  37. return false;
  38. }
  39. });
  40. $("#unassign").click(function () {
  41. if (!confirm("Estas seguro de Desasignarte")) {
  42. return false
  43. }
  44. });
  45. $("#close").click(function () {
  46. if (!confirm("Estas seguro de Cerrar el Ticket")) {
  47. return false
  48. }
  49. });
  50. });
  51. function validate() {
  52. fckEditor1val = FCKeditorAPI.__Instances["content"].GetHTML();
  53. document.getElementById("content").value= fckEditor1val;
  54. if(fckEditor1val ==""){
  55. alert("Debe escribir un mensaje");
  56. return false;
  57. }
  58. }
  59. var counter_image = 1;
  60. function remove_image_form(id_elem1) {
  61. var elem1 = document.getElementById(id_elem1);
  62. elem1.parentNode.removeChild(elem1);
  63. counter_image = counter_image - 1;
  64. }
  65. function add_image_form() {
  66. // Multiple filepaths for image form
  67. var filepaths = document.getElementById("filepaths");
  68. if (document.getElementById("filepath_"+counter_image)) {
  69. counter_image = counter_image + 1;
  70. } else {
  71. counter_image = counter_image;
  72. }
  73. var elem1 = document.createElement("div");
  74. elem1.setAttribute("id","filepath_"+counter_image);
  75. filepaths.appendChild(elem1);
  76. id_elem1 = "filepath_"+counter_image;
  77. id_elem1 = "\'"+id_elem1+"\'";
  78. 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>";
  79. //document.getElementById("filepath_"+counter_image).innerHTML = "<input type=\"file\" name=\"attach_"+counter_image+"\" size=\"20\" />&nbsp;<input type=\"text\" name=\"legend[]\" size=\"20\" />";
  80. if (filepaths.childNodes.length == 6) {
  81. var link_attach = document.getElementById("link-more-attach");
  82. if (link_attach) {
  83. link_attach.innerHTML="";
  84. }
  85. }
  86. }
  87. </script>';
  88. $htmlHeadXtra[] = '
  89. <style>
  90. div.row div.label2 {
  91. float:left;
  92. text-align: right;
  93. width:22%;
  94. }
  95. div.row div.formw2 {
  96. width:50%;
  97. margin-left: 2%;
  98. margin-right: 16%;
  99. float:left;
  100. }
  101. .messageuser, .messagesupport {
  102. border: 1px solid;
  103. margin: 10px 0px;
  104. padding:15px 10px 15px 50px;
  105. background-repeat: no-repeat;
  106. background-position: 10px center;
  107. width:50%;
  108. behavior: url(/pie/PIE.htc);
  109. }
  110. .messageuser {
  111. color: #00529B;
  112. -moz-border-radius: 15px 15px 15px 15px;
  113. -webkit-border-radius: 15px 15px 15px 15px;
  114. background-color: #BDE5F8;
  115. margin-left:20%;
  116. border-radius:15px;
  117. float: left;
  118. }
  119. .messagesupport {
  120. color: #4F8A10;
  121. -moz-border-radius: 15px 15px 15px 15px;
  122. -webkit-border-radius: 15px 15px 15px 15px;
  123. background-color: #DFF2BF;
  124. margin-right: 20%;
  125. float: right;
  126. border-radius:15px;
  127. }
  128. </style>';
  129. $user_id = api_get_user_id();
  130. $isAdmin = api_is_platform_admin();
  131. $ticket_id = $_GET['ticket_id'];
  132. $ticket = TicketManager::get_ticket_detail_by_id($ticket_id,$user_id);
  133. if(!isset($ticket['ticket'])){
  134. api_not_allowed();
  135. }
  136. if(!isset($_GET['ticket_id'])){
  137. header('location:myticket.php');
  138. }
  139. if(isset($_POST['respuesta'])){
  140. if($user_id == $ticket['ticket']['request_user']){
  141. $respuesta = ($_POST['respuesta']=='si')?true:(($_POST['respuesta']=='no'?false:null));
  142. if ($respuesta && $ticket['ticket']['status_id'] == 'XCF' ){
  143. TicketManager::close_ticket($_GET['ticket_id'], $user_id);
  144. $ticket['ticket']['status_id'] = 'CLS';
  145. $ticket['ticket']['status'] = 'CERRADO';
  146. }else if(!is_null($respuesta) && $ticket['ticket']['status_id'] == 'XCF'){
  147. TicketManager::update_ticket_status('PND',$_GET['ticket_id'], $user_id);
  148. $ticket['ticket']['status_id'] = 'PND';
  149. $ticket['ticket']['status'] = 'PENDIENTE';
  150. }
  151. }
  152. }
  153. if (isset($_REQUEST['action'])){
  154. $action = $_REQUEST['action'];
  155. switch ($action){
  156. case 'assign':
  157. if(api_is_platform_admin() && isset($_GET['ticket_id']) )
  158. TicketManager::assign_ticket_user($_GET['ticket_id'], $_POST['admins']);
  159. $ticket['ticket']['assigned_last_user'] = $_POST['admins'];
  160. break;
  161. case 'unassign':
  162. if(api_is_platform_admin() && isset($_GET['ticket_id']) )
  163. TicketManager::assign_ticket_user($_GET['ticket_id'], 0);
  164. $ticket['ticket']['assigned_last_user'] = 0;
  165. break;
  166. default:
  167. break;
  168. }
  169. }
  170. if(!isset($_POST['compose'])){
  171. if(isset($_POST['close'])){
  172. $_GET['ticket_id'] = $_POST['ticket_id'] ;
  173. TicketManager::close_ticket($_GET['ticket_id'], $user_id);
  174. $ticket['ticket']['status_id'] = 'CLS';
  175. $ticket['ticket']['status'] = 'CERRADO';
  176. }
  177. $ticket['ticket']['request_user'] = intval($ticket['ticket']['request_user']);
  178. if($ticket['ticket']['request_user'] == $user_id || intval($ticket['ticket']['assigned_last_user']) == $user_id ){
  179. TicketManager::update_message_status($ticket_id, $ticket['ticket']['request_user']);
  180. }
  181. Display::display_header();
  182. $form_close_ticket = "";
  183. if($ticket['ticket']['status_id'] != 'REE' AND $ticket['ticket']['status_id'] != 'CLS' AND $isAdmin ){
  184. if(intval($ticket['ticket']['assigned_last_user']) == $user_id){
  185. if($ticket['ticket']['status_id']!='CLS'){
  186. $form_close_ticket.= '<form enctype="multipart/form-data" action="'.api_get_self().'?ticket_id='.$ticket['ticket']['ticket_id'].'" method="post" name="close_ticket" id="close_ticket" >';
  187. $form_close_ticket.= '<input type="hidden" name="ticket_id" value="'.$ticket['ticket']['ticket_id'].'"/>
  188. <button class="minus" name="close" type="submit" id="close" >Cerrar</button>';
  189. $form_close_ticket.= '</form>';
  190. }
  191. }
  192. }
  193. $titulo = '<center><h1>Ticket #'.$ticket['ticket']['ticket_code'].'</h1></center>';
  194. if($isAdmin && $ticket['ticket']['status_id'] != 'CLS' && $ticket['ticket']['status_id'] != 'REE'){
  195. if( $ticket['ticket']['assigned_last_user'] != 0 && $ticket['ticket']['assigned_last_user'] == $user_id ){
  196. $img_assing = '<a href="'.api_get_self().'?ticket_id='.$ticket['ticket']['ticket_id'].'&amp;action=unassign" id="unassign"><img src="../../../main/img/admin_star.png" border="0" title="Desasignarme" align="center"/></a>';
  197. }else{
  198. $img_assing .= '<a href="#" id="assign"><img src="../../../main/img/admin_star_na.png" border="0" title="Asignar" align="center"/></a>';
  199. }
  200. }
  201. $negrita = ($ticket['ticket']['status_id'] == 'CLS')?'style = "font-weight: bold;"':'';
  202. $cadena = ($ticket['ticket']['status_id'] != 'CLS')?"sas":"";
  203. echo '<div style="margin-left:20%;margin-right:20%;">
  204. <table width="100%" >
  205. <tr>
  206. <td colspan="3" style="width:65%">'.$titulo.'</td>
  207. <td >'.$img_assing.'</td>
  208. <td>'.$form_close_ticket.'</td>
  209. </tr>
  210. <tr>
  211. <td style="width:45%;" ><p>Enviado : '.$ticket['ticket']['start_date'].'</p></td>
  212. <td style="width:50px;"></td>
  213. <td style="width:45%;" ><p>Ultima Respuesta : '.$ticket['ticket']['sys_lastedit_datetime'].'</p></td>
  214. <td colspan="2"></td>
  215. </tr>
  216. <tr>
  217. <td><p>Asunto : '.$ticket['messages'][0]['subject'].'</p></td>
  218. <td></td>
  219. <td><p '.$negrita.'>Estado : '.$ticket['ticket']['status'].'</p></td>
  220. <td colspan="2"></td>
  221. </tr>
  222. <tr>
  223. <td><p>Categoria : '.$ticket['ticket']['name'].'</p></td>
  224. <td></td>
  225. <td ><p>Prioridad :'.$ticket['ticket']['priority'].'<p></td>
  226. <td colspan="2"></td>
  227. </tr>';
  228. if($ticket['ticket']['course_url']!=null){
  229. echo '<tr>
  230. <td><p>Curso:</p></td>
  231. <td></td>
  232. <td>'.$ticket['ticket']['course_url'].'</td>
  233. <td colspan="2"></td>
  234. </tr>';
  235. }
  236. if ($isAdmin){
  237. echo '<tr>
  238. <td><p>Usuario:</p></td>
  239. <td></td>
  240. <td>'.$user_info = $ticket['ticket']['user_url'].' ('.$ticket['usuario']['username'].')</td>
  241. <td colspan="2"></td>
  242. </tr>';
  243. }
  244. //select admins
  245. $select_admins .= '<select class ="chzn-select" style="width: 350px; " name = "admins" id="admins" ">';
  246. $admins = UserManager::get_user_list_like(array("status"=>"1"),array("username"),true);
  247. foreach ($admins as $admin) {
  248. $select_admins.= "<option value = '".$admin['user_id']."' ".(($user_id==$admin['user_id'])?("selected='selected'"):"").">".$admin['lastname']." ,".$admin['firstname']."</option>";
  249. }
  250. $select_admins .= "</select>";
  251. echo '<div id="dialog-form" title="Asignar Ticket" >';
  252. echo '<form id="genesis" method="POST" action="ticket_details.php?ticket_id='.$ticket['ticket']['ticket_id'].'">
  253. <input type="hidden" name ="action" id="action" value="assign"/>
  254. <div class="row">
  255. <div class="label">Responsable:</div>
  256. <div class="formw">'.$select_admins.'</div>
  257. </div>
  258. </form>';
  259. echo '</div>';
  260. echo '</table></div>';
  261. $messages = $ticket['messages'];
  262. foreach($messages as $message){
  263. $class ="messageuser";
  264. if($message['admin']){
  265. $class ="messagesupport";
  266. if($isAdmin)$message['message'].="<br/><b>Atendido por: ".$message['user_created']." - ".api_convert_and_format_date(api_get_local_time($message['sys_insert_datetime']), DATE_TIME_FORMAT_LONG,_api_get_timezone())."</b>";
  267. }else{
  268. $message['message'].="<b>Enviado: ".api_convert_and_format_date(api_get_local_time($message['sys_insert_datetime']), DATE_TIME_FORMAT_LONG,_api_get_timezone())."</b>";
  269. }
  270. echo '<div class="'.$class.'" ><b>Asunto: </b> '.$message['subject'].'<br/> <b> Mensaje:</b>'.$message['message'].'<br/>';
  271. if(isset($message['atachments'])){
  272. foreach($message['atachments'] as $attach){
  273. echo $attach['attachment_link'];
  274. }
  275. }
  276. echo '</div>';
  277. }
  278. $asunto = "RE: ".$message['subject'];
  279. $user_admin = api_is_platform_admin();
  280. if($ticket['ticket']['status_id'] != 'REE' AND $ticket['ticket']['status_id'] != 'CLS' ){
  281. if(!$isAdmin && $ticket['ticket']['status_id'] != 'XCF'){
  282. show_form_send_message();
  283. }else{
  284. if(intval($ticket['ticket']['assigned_last_user']) == $user_id){
  285. show_form_send_message();
  286. $cheked ="";
  287. }
  288. }
  289. }
  290. }else{
  291. $ticket_id = $_POST['ticket_id'];
  292. $content = $_POST['content'];
  293. $subject = $_POST['subject'];
  294. $mensajeconfirmacion = isset($_POST['confirmacion'])?true:false ;
  295. $file_attachments = $_FILES;
  296. $user_id = api_get_user_id();
  297. TicketManager::insert_message($ticket_id, $subject, $content, $file_attachments, $user_id,'NOL',$mensajeconfirmacion);
  298. header("location:".api_get_self()."?ticket_id=".$ticket_id);
  299. }
  300. function show_form_send_message(){
  301. global $isAdmin;
  302. global $ticket;
  303. global $asunto;
  304. echo '<form enctype="multipart/form-data" action="'.api_get_self().'?ticket_id='.$ticket['ticket']['ticket_id'].'" method="post" name="send_ticket" id="send_ticket"
  305. onsubmit="return validate()" style="width:100%">';
  306. echo '<div class="row" ><div class ="label">Asunto:</div>
  307. <div class="formw"><input type = "text" id ="subject" name="subject" value="'.$asunto.'" required ="" style="width:60%"/></div>
  308. </div>';
  309. echo '<div class="row">
  310. <div class="label2">mensaje
  311. </div>
  312. <div class="formw2">
  313. <input type="hidden" id="content" name="content" value="" style="display:none">
  314. <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=/main/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">
  315. <iframe id="content___Frame" src="/main/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;">
  316. </iframe>
  317. </div>
  318. </div>
  319. ';
  320. echo '<input type="hidden" id="ticket_id" name="ticket_id" value="'.$_GET['ticket_id'].'">';
  321. echo '<div class="row">
  322. <div class="label">'.get_lang('FilesAttachment').'</div>
  323. <div class="formw">
  324. <span id="filepaths">
  325. <div id="filepath_1">
  326. <input type="file" name="attach_1" id="attach_1" size="20" style="width:59%;"/>
  327. </div></span>
  328. </div>
  329. </div>';
  330. echo '<div class="row">
  331. <div class="formw">
  332. <span id="link-more-attach">
  333. <a href="javascript://" onclick="return add_image_form()">'.get_lang('AddOneMoreFile').'</a></span>&nbsp;
  334. ('.sprintf(get_lang('MaximunFileSizeX'),format_file_size(api_get_setting('message_max_upload_filesize'))).')
  335. </div>
  336. </div>';
  337. echo '<div class="row">
  338. <div class="label"></div>
  339. <div class="formw"> <button class="save" name="compose" type="submit">Enviar mensaje</button>'.($isAdmin?'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="confirmacion"/>Solicitar confirmaci&oacute;n':"").
  340. '</div>
  341. </div>';
  342. echo '</form>';
  343. }
  344. Display::display_footer();
  345. ?>