Improve UI of ticket plugin db changes needed see BT#11081

pull/2487/head
jmontoyaa 9 years ago
parent 84601d0179
commit 3ba16eea1a
  1. 10
      app/Migrations/Schema/V111/Version111.php
  2. 1
      main/inc/lib/formvalidator/Element/DateTimePicker.php
  3. 4
      main/inc/lib/formvalidator/Element/SelectAjax.php
  4. 240
      main/inc/lib/pear/HTML/QuickForm/select.php
  5. 4
      main/session/session_add.php
  6. 1
      plugin/ticket/README.md
  7. 12
      plugin/ticket/config.install.php
  8. 23
      plugin/ticket/config.php
  9. 48
      plugin/ticket/database.php
  10. 6
      plugin/ticket/lang/english.php
  11. 2
      plugin/ticket/lang/french.php
  12. 2
      plugin/ticket/lang/spanish.php
  13. 1
      plugin/ticket/readme.txt
  14. 2
      plugin/ticket/src/assign_tickets.php
  15. 2
      plugin/ticket/src/categories.php
  16. 2
      plugin/ticket/src/categories_add_user.php
  17. 2
      plugin/ticket/src/course_user_list.php
  18. 2
      plugin/ticket/src/download.php
  19. 4
      plugin/ticket/src/index.php
  20. 277
      plugin/ticket/src/myticket.php
  21. 55
      plugin/ticket/src/new_ticket.php
  22. 3
      plugin/ticket/src/report.php
  23. 15
      plugin/ticket/src/test.html
  24. 576
      plugin/ticket/src/ticket.class.php
  25. 2
      plugin/ticket/src/ticket_assign_log.php
  26. 266
      plugin/ticket/src/ticket_details.php
  27. 6
      plugin/ticket/src/ticket_plugin.class.php
  28. 4
      plugin/ticket/src/tutor.php
  29. 2
      plugin/ticket/src/update_report.php

@ -137,9 +137,15 @@ class Version111 extends AbstractMigrationChamilo
$this->addSql('DROP TABLE group_rel_tag'); $this->addSql('DROP TABLE group_rel_tag');
$this->addSql('DROP TABLE group_rel_group'); $this->addSql('DROP TABLE group_rel_group');
$this->addSql('DROP TABLE groups'); $this->addSql('DROP TABLE groups');
}
/** if ($schema->hasTable('plugin_ticket_ticket')) {
$this->addSql('ALTER TABLE plugin_ticket_ticket ADD COLUMN subject varchar(255) DEFAULT NULL;');
$this->addSql('ALTER TABLE plugin_ticket_ticket ADD COLUMN message text NOT NULL;');
$this->addSql('UPDATE plugin_ticket_ticket t INNER JOIN plugin_ticket_message as m ON(t.ticket_id = m.ticket_id and message_id =1) SET t.subject = m.subject');
$this->addSql('UPDATE plugin_ticket_ticket t INNER JOIN plugin_ticket_message as m ON(t.ticket_id = m.ticket_id and message_id =1) SET t.message = m.message');
$this->addSql('DELETE FROM plugin_ticket_message WHERE message_id = 1');
}
} /**
* @param Schema $schema * @param Schema $schema
*/ */
public function postUp(Schema $schema) public function postUp(Schema $schema)

@ -32,7 +32,6 @@ class DateTimePicker extends HTML_QuickForm_text
$id = $this->getAttribute('id'); $id = $this->getAttribute('id');
$value = $this->getValue(); $value = $this->getValue();
$label = $this->getLabel();
if (!empty($value)) { if (!empty($value)) {
$value = api_format_date($value, DATE_TIME_FORMAT_LONG_24H); $value = api_format_date($value, DATE_TIME_FORMAT_LONG_24H);

@ -7,9 +7,9 @@
class SelectAjax extends HTML_QuickForm_select class SelectAjax extends HTML_QuickForm_select
{ {
/** /**
* Class constructor * @inheritdoc
*/ */
public function __construct($elementName = null, $elementLabel = null, $options = null, $attributes = null) public function __construct($elementName, $elementLabel = '', $options = null, $attributes = null)
{ {
parent::__construct($elementName, $elementLabel, $options, $attributes); parent::__construct($elementName, $elementLabel, $options, $attributes);
} }

@ -54,26 +54,25 @@ class HTML_QuickForm_select extends HTML_QuickForm_element
* @access private * @access private
*/ */
protected $_values = null; protected $_values = null;
private $columnsSize; private $columnsSize;
/** /**
* Class constructor * Class constructor
* *
* @param string Select name attribute * @param string $elementName Select name attribute
* @param mixed Label(s) for the select * @param mixed $elementLabel Label(s) for the select
* @param mixed Data to be used to populate options * @param mixed $options Data to be used to populate options
* @param mixed Either a typical HTML attribute string or an associative array * @param mixed $attributes Either a typical HTML attribute string or an associative array
* @since 1.0 * @since 1.0
* @access public * @access public
* @return void
*/ */
public function __construct( public function __construct(
$elementName = null, $elementName,
$elementLabel = null, $elementLabel = '',
$options = null, $options = null,
$attributes = null $attributes = null
) { ) {
$addBlank = '';
if (is_array($attributes) || empty($attributes)) { if (is_array($attributes) || empty($attributes)) {
$oldClass = ''; $oldClass = '';
if (!empty($attributes['class'])) { if (!empty($attributes['class'])) {
@ -81,17 +80,90 @@ class HTML_QuickForm_select extends HTML_QuickForm_element
} }
$attributes['class'] = $oldClass . ' selectpicker show-tick form-control'; $attributes['class'] = $oldClass . ' selectpicker show-tick form-control';
$attributes['data-live-search'] = 'true'; $attributes['data-live-search'] = 'true';
if (isset($attributes['placeholder'])) {
$addBlank = $attributes['placeholder'];
}
} }
$columnsSize = isset($attributes['cols-size']) ? $attributes['cols-size'] : null; $columnsSize = isset($attributes['cols-size']) ? $attributes['cols-size'] : null;
$this->setColumnsSize($columnsSize); $this->setColumnsSize($columnsSize);
parent::__construct($elementName, $elementLabel, $attributes); parent::__construct($elementName, $elementLabel, $attributes);
$this->_persistantFreeze = true; $this->_persistantFreeze = true;
$this->_type = 'select'; $this->_type = 'select';
if ($addBlank !== '') {
if (isset($options)) {
$options = ['' => $addBlank] + $options;
} else {
$options = ['' => $addBlank];
}
}
if (isset($options)) { if (isset($options)) {
$this->load($options); $this->load($options);
} }
} }
/**
* Loads options from different types of data sources
*
* This method is a simulated overloaded method. The arguments, other than the
* first are optional and only mean something depending on the type of the first argument.
* If the first argument is an array then all arguments are passed in order to loadArray.
* If the first argument is a db_result then all arguments are passed in order to loadDbResult.
* If the first argument is a string or a DB connection then all arguments are
* passed in order to loadQuery.
* @param mixed $options Options source currently supports assoc array or DB_result
* @param mixed $param1 (optional) See function detail
* @param mixed $param2 (optional) See function detail
* @param mixed $param3 (optional) See function detail
* @param mixed $param4 (optional) See function detail
* @since 1.1
* @access public
* @return PEAR_Error on error or true
* @throws PEAR_Error
*/
private function load(&$options, $param1=null, $param2=null, $param3=null, $param4=null)
{
switch (true) {
case is_array($options):
return $this->loadArray($options, $param1);
break;
}
}
/**
* Loads the options from an associative array
*
* @param array $arr Associative array of options
* @param mixed $values (optional) Array or comma delimited string of selected values
* @since 1.0
* @access public
* @return PEAR_Error on error or true
* @throws PEAR_Error
*/
private function loadArray($arr, $values = null)
{
if (!is_array($arr)) {
return false;
}
if (isset($values)) {
$this->setSelected($values);
}
foreach ($arr as $key => $val) {
// Fix in order to use list of entities.
if (is_object($val)) {
$key = $val->getId();
$val = $val->__toString();
}
// Warning: new API since release 2.3
$this->addOption($val, $key);
}
return true;
}
/** /**
* Returns the current API version * Returns the current API version
* *
@ -363,156 +435,6 @@ class HTML_QuickForm_select extends HTML_QuickForm_element
$this->_optgroups[] = array('label' => $label, 'options' => $options); $this->_optgroups[] = array('label' => $label, 'options' => $options);
} }
/**
* Loads the options from an associative array
*
* @param array $arr Associative array of options
* @param mixed $values (optional) Array or comma delimited string of selected values
* @since 1.0
* @access public
* @return PEAR_Error on error or true
* @throws PEAR_Error
*/
function loadArray($arr, $values=null)
{
if (!is_array($arr)) {
return PEAR::raiseError('Argument 1 of HTML_Select::loadArray is not a valid array');
}
if (isset($values)) {
$this->setSelected($values);
}
foreach ($arr as $key => $val) {
// Fix in order to use list of entities.
if (is_object($val)) {
$key = $val->getId();
$val = $val->__toString();
}
// Warning: new API since release 2.3
$this->addOption($val, $key);
}
return true;
} // end func loadArray
// }}}
// {{{ loadDbResult()
/**
* Loads the options from DB_result object
*
* If no column names are specified the first two columns of the result are
* used as the text and value columns respectively
* @param object $result DB_result object
* @param string $textCol (optional) Name of column to display as the OPTION text
* @param string $valueCol (optional) Name of column to use as the OPTION value
* @param mixed $values (optional) Array or comma delimited string of selected values
* @since 1.0
* @access public
* @return PEAR_Error on error or true
* @throws PEAR_Error
*/
function loadDbResult(&$result, $textCol=null, $valueCol=null, $values=null)
{
if (!is_object($result) || !is_a($result, 'db_result')) {
return PEAR::raiseError('Argument 1 of HTML_Select::loadDbResult is not a valid DB_result');
}
if (isset($values)) {
$this->setValue($values);
}
$fetchMode = ($textCol && $valueCol) ? DB_FETCHMODE_ASSOC : DB_FETCHMODE_ORDERED;
while (is_array($row = $result->fetchRow($fetchMode)) ) {
if ($fetchMode == DB_FETCHMODE_ASSOC) {
$this->addOption($row[$textCol], $row[$valueCol]);
} else {
$this->addOption($row[0], $row[1]);
}
}
return true;
} // end func loadDbResult
// }}}
// {{{ loadQuery()
/**
* Queries a database and loads the options from the results
*
* @param mixed $conn Either an existing DB connection or a valid dsn
* @param string $sql SQL query string
* @param string $textCol (optional) Name of column to display as the OPTION text
* @param string $valueCol (optional) Name of column to use as the OPTION value
* @param mixed $values (optional) Array or comma delimited string of selected values
* @since 1.1
* @access public
* @return void
* @throws PEAR_Error
*/
function loadQuery(&$conn, $sql, $textCol=null, $valueCol=null, $values=null)
{
if (is_string($conn)) {
require_once('DB.php');
$dbConn = &DB::connect($conn, true);
if (DB::isError($dbConn)) {
return $dbConn;
}
} elseif (is_subclass_of($conn, "db_common")) {
$dbConn = &$conn;
} else {
return PEAR::raiseError('Argument 1 of HTML_Select::loadQuery is not a valid type');
}
$result = $dbConn->query($sql);
if (DB::isError($result)) {
return $result;
}
$this->loadDbResult($result, $textCol, $valueCol, $values);
$result->free();
if (is_string($conn)) {
$dbConn->disconnect();
}
return true;
} // end func loadQuery
// }}}
// {{{ load()
/**
* Loads options from different types of data sources
*
* This method is a simulated overloaded method. The arguments, other than the
* first are optional and only mean something depending on the type of the first argument.
* If the first argument is an array then all arguments are passed in order to loadArray.
* If the first argument is a db_result then all arguments are passed in order to loadDbResult.
* If the first argument is a string or a DB connection then all arguments are
* passed in order to loadQuery.
* @param mixed $options Options source currently supports assoc array or DB_result
* @param mixed $param1 (optional) See function detail
* @param mixed $param2 (optional) See function detail
* @param mixed $param3 (optional) See function detail
* @param mixed $param4 (optional) See function detail
* @since 1.1
* @access public
* @return PEAR_Error on error or true
* @throws PEAR_Error
*/
function load(&$options, $param1=null, $param2=null, $param3=null, $param4=null)
{
switch (true) {
case is_array($options):
return $this->loadArray($options, $param1);
break;
case (is_a($options, 'db_result')):
return $this->loadDbResult($options, $param1, $param2, $param3);
break;
// Disabled by Chamilo team, 16-MAR-2010.
// TODO: To be verified (why it has been disabled).
//case (is_string($options) && !empty($options) || is_subclass_of($options, "db_common")):
// return $this->loadQuery($options, $param1, $param2, $param3, $param4);
// break;
//
}
} // end func load
// }}}
// {{{ toHtml()
/** /**
* Returns the SELECT in HTML * Returns the SELECT in HTML
* *
@ -520,7 +442,7 @@ class HTML_QuickForm_select extends HTML_QuickForm_element
* @access public * @access public
* @return string * @return string
*/ */
function toHtml() public function toHtml()
{ {
if ($this->_flagFrozen) { if ($this->_flagFrozen) {
return $this->getFrozenHtml(); return $this->getFrozenHtml();

@ -19,8 +19,8 @@ SessionManager::protectSession(null, false);
api_protect_limit_for_session_admin(); api_protect_limit_for_session_admin();
$formSent=0; $formSent = 0;
$errorMsg=''; $errorMsg = '';
// Crop picture plugin for session images // Crop picture plugin for session images
$htmlHeadXtra[] = '<link href="'. api_get_path(WEB_PATH) .'web/assets/cropper/dist/cropper.min.css" rel="stylesheet">'; $htmlHeadXtra[] = '<link href="'. api_get_path(WEB_PATH) .'web/assets/cropper/dist/cropper.min.css" rel="stylesheet">';

@ -0,0 +1 @@
Ticket management system features for Chamilo.

@ -1,12 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Loading of necessary libs
*
* @package chamilo.plugin.ticket
*/
require_once '../../main/inc/global.inc.php';
require_once 'src/ticket.class.php';
require_once 'src/ticket_plugin.class.php';

@ -17,29 +17,6 @@ define('TABLE_TICKET_TICKET', 'plugin_ticket_ticket');
define('TABLE_TICKET_CATEGORY_REL_USER', 'plugin_ticket_category_rel_user'); define('TABLE_TICKET_CATEGORY_REL_USER', 'plugin_ticket_category_rel_user');
define('TABLE_TICKET_MESSAGE_ATTACHMENTS', 'plugin_ticket_message_attachments'); define('TABLE_TICKET_MESSAGE_ATTACHMENTS', 'plugin_ticket_message_attachments');
/* Ticket status constants */
define('NEWTCK', 'NAT'); // New ticket unassigned responsible
define('PENDING', 'PND'); // User waiting answer
define('UNCONFIRMED', 'XCF'); // Waiting for user response
define('CLOSE', 'CLS'); // Close ticket
define('REENVIADO', 'REE'); // @todo delete option. This is a location of USIL
/* Ticket priority constants */
define('NORMAL', 'NRM');
define('HIGH', 'HGH');
define('LOW', 'LOW');
/* Ticket source constants */
define('SRC_EMAIL', 'MAI');
define('SRC_PHONE', 'TEL');
define('SRC_PRESC', 'PRE');
define('SRC_PLATFORM', 'PLA');
/* Ticket category constants */
define('CAT_DOCU', 'DOC');
define('CAT_FORO', 'FOR');
define('CAT_ANNU', 'ANN');
require_once __DIR__ . '/../../main/inc/global.inc.php'; require_once __DIR__ . '/../../main/inc/global.inc.php';
require_once api_get_path(SYS_PLUGIN_PATH) . PLUGIN_NAME . '/src/ticket_plugin.class.php'; require_once api_get_path(SYS_PLUGIN_PATH) . PLUGIN_NAME . '/src/ticket_plugin.class.php';

@ -27,7 +27,7 @@ if (!Database::tableExists($table)) {
$result = Database::query($sql); $result = Database::query($sql);
$tableLog = Database::get_main_table(TABLE_TICKET_ASSIGNED_LOG); $tableLog = Database::get_main_table(TABLE_TICKET_ASSIGNED_LOG);
$sql = "CREATE TABLE IF NOT EXISTS ".$tableLog." ( $sql = "CREATE TABLE IF NOT EXISTS $tableLog (
id int UNSIGNED NOT NULL AUTO_INCREMENT, id int UNSIGNED NOT NULL AUTO_INCREMENT,
ticket_id int UNSIGNED DEFAULT NULL, ticket_id int UNSIGNED DEFAULT NULL,
user_id int UNSIGNED DEFAULT NULL, user_id int UNSIGNED DEFAULT NULL,
@ -76,11 +76,11 @@ if (!Database::tableExists($table)) {
} }
$table = Database::get_main_table(TABLE_TICKET_MESSAGE); $table = Database::get_main_table(TABLE_TICKET_MESSAGE);
$sql = "CREATE TABLE IF NOT EXISTS ".$table." ( $sql = "CREATE TABLE IF NOT EXISTS $table (
id int UNSIGNED NOT NULL AUTO_INCREMENT, id int UNSIGNED NOT NULL AUTO_INCREMENT,
message_id int UNSIGNED NOT NULL, message_id int UNSIGNED NOT NULL,
ticket_id int UNSIGNED NOT NULL, ticket_id int UNSIGNED NOT NULL,
subject varchar(150) DEFAULT NULL, subject varchar(255) DEFAULT NULL,
message text NOT NULL, message text NOT NULL,
status char(3) NOT NULL, status char(3) NOT NULL,
ip_address varchar(16) DEFAULT NULL, ip_address varchar(16) DEFAULT NULL,
@ -89,11 +89,11 @@ $sql = "CREATE TABLE IF NOT EXISTS ".$table." (
sys_lastedit_user_id int UNSIGNED DEFAULT NULL, sys_lastedit_user_id int UNSIGNED DEFAULT NULL,
sys_lastedit_datetime datetime DEFAULT NULL, sys_lastedit_datetime datetime DEFAULT NULL,
PRIMARY KEY (id), PRIMARY KEY (id),
KEY FK_tick_message (ticket_id) )"; KEY FK_tick_message (ticket_id))";
Database::query($sql); Database::query($sql);
$table = Database::get_main_table(TABLE_TICKET_MESSAGE_ATTACHMENTS); $table = Database::get_main_table(TABLE_TICKET_MESSAGE_ATTACHMENTS);
$sql = "CREATE TABLE IF NOT EXISTS ".$table." ( $sql = "CREATE TABLE IF NOT EXISTS $table (
id int UNSIGNED NOT NULL AUTO_INCREMENT, id int UNSIGNED NOT NULL AUTO_INCREMENT,
message_attch_id char(2) NOT NULL, message_attch_id char(2) NOT NULL,
message_id char(2) NOT NULL, message_id char(2) NOT NULL,
@ -113,7 +113,7 @@ Database::query($sql);
$table = Database::get_main_table(TABLE_TICKET_PRIORITY); $table = Database::get_main_table(TABLE_TICKET_PRIORITY);
if (!Database::tableExists($table)) { if (!Database::tableExists($table)) {
$sql = "CREATE TABLE IF NOT EXISTS ".$table." ( $sql = "CREATE TABLE IF NOT EXISTS $table (
id int UNSIGNED NOT NULL AUTO_INCREMENT, id int UNSIGNED NOT NULL AUTO_INCREMENT,
priority_id char(3) NOT NULL, priority_id char(3) NOT NULL,
priority varchar(20) DEFAULT NULL, priority varchar(20) DEFAULT NULL,
@ -127,12 +127,13 @@ if (!Database::tableExists($table)) {
PRIMARY KEY (id))"; PRIMARY KEY (id))";
Database::query($sql); Database::query($sql);
//Default Priorities // Default Priorities
$defaultPriorities = array( $defaultPriorities = array(
'NRM' => $objPlugin->get_lang('PriorityNormal'), TicketManager::PRIORITY_NORMAL => $objPlugin->get_lang('PriorityNormal'),
'HGH' => $objPlugin->get_lang('PriorityHigh'), TicketManager::PRIORITY_HIGH => $objPlugin->get_lang('PriorityHigh'),
'LOW' => $objPlugin->get_lang('PriorityLow') TicketManager::PRIORITY_LOW => $objPlugin->get_lang('PriorityLow')
); );
$i = 1; $i = 1;
foreach ($defaultPriorities as $pId => $priority) { foreach ($defaultPriorities as $pId => $priority) {
$attributes = array( $attributes = array(
@ -148,7 +149,7 @@ if (!Database::tableExists($table)) {
$table = Database::get_main_table(TABLE_TICKET_PROJECT); $table = Database::get_main_table(TABLE_TICKET_PROJECT);
if (!Database::tableExists($table)) { if (!Database::tableExists($table)) {
$sql = "CREATE TABLE IF NOT EXISTS ".$table." ( $sql = "CREATE TABLE IF NOT EXISTS $table (
id int UNSIGNED NOT NULL AUTO_INCREMENT, id int UNSIGNED NOT NULL AUTO_INCREMENT,
project_id char(3) NOT NULL, project_id char(3) NOT NULL,
name varchar(50) DEFAULT NULL, name varchar(50) DEFAULT NULL,
@ -162,7 +163,7 @@ if (!Database::tableExists($table)) {
PRIMARY KEY (id))"; PRIMARY KEY (id))";
Database::query($sql); Database::query($sql);
//Default Project Table Ticket // Default Project Table Ticket
$attributes = array( $attributes = array(
'id' => 1, 'id' => 1,
'project_id' => 1, 'project_id' => 1,
@ -171,10 +172,10 @@ if (!Database::tableExists($table)) {
Database::insert($table, $attributes); Database::insert($table, $attributes);
} }
//STATUS // STATUS
$table = Database::get_main_table(TABLE_TICKET_STATUS); $table = Database::get_main_table(TABLE_TICKET_STATUS);
if (!Database::tableExists($table)) { if (!Database::tableExists($table)) {
$sql = "CREATE TABLE IF NOT EXISTS ".$table." ( $sql = "CREATE TABLE IF NOT EXISTS $table (
id int UNSIGNED NOT NULL AUTO_INCREMENT, id int UNSIGNED NOT NULL AUTO_INCREMENT,
status_id char(3) NOT NULL, status_id char(3) NOT NULL,
name varchar(100) NOT NULL, name varchar(100) NOT NULL,
@ -182,13 +183,13 @@ if (!Database::tableExists($table)) {
PRIMARY KEY (id))"; PRIMARY KEY (id))";
Database::query($sql); Database::query($sql);
//Default status // Default status
$defaultStatus = array( $defaultStatus = array(
'NAT' => $objPlugin->get_lang('StatusNew'), TicketManager::STATUS_NEW => $objPlugin->get_lang('StatusNew'),
'PND' => $objPlugin->get_lang('StatusPending'), TicketManager::STATUS_PENDING => $objPlugin->get_lang('StatusPending'),
'XCF' => $objPlugin->get_lang('StatusUnconfirmed'), TicketManager::STATUS_UNCONFIRMED => $objPlugin->get_lang('StatusUnconfirmed'),
'CLS' => $objPlugin->get_lang('StatusClose'), TicketManager::STATUS_CLOSE => $objPlugin->get_lang('StatusClose'),
'REE' => $objPlugin->get_lang('StatusForwarded') TicketManager::STATUS_FORWARDED => $objPlugin->get_lang('StatusForwarded')
); );
$i = 1; $i = 1;
@ -204,7 +205,7 @@ if (!Database::tableExists($table)) {
} }
$table = Database::get_main_table(TABLE_TICKET_TICKET); $table = Database::get_main_table(TABLE_TICKET_TICKET);
$sql = "CREATE TABLE IF NOT EXISTS ".$table." ( $sql = "CREATE TABLE IF NOT EXISTS $table (
ticket_id int UNSIGNED NOT NULL AUTO_INCREMENT, ticket_id int UNSIGNED NOT NULL AUTO_INCREMENT,
ticket_code char(12) DEFAULT NULL, ticket_code char(12) DEFAULT NULL,
project_id char(3) DEFAULT NULL, project_id char(3) DEFAULT NULL,
@ -212,11 +213,12 @@ $sql = "CREATE TABLE IF NOT EXISTS ".$table." (
priority_id char(3) NOT NULL, priority_id char(3) NOT NULL,
course_id int UNSIGNED NOT NULL, course_id int UNSIGNED NOT NULL,
session_id int UNSIGNED NOT NULL DEFAULT '0', session_id int UNSIGNED NOT NULL DEFAULT '0',
request_user int UNSIGNED NOT NULL,
personal_email varchar(150) DEFAULT NULL, personal_email varchar(150) DEFAULT NULL,
assigned_last_user int UNSIGNED NOT NULL DEFAULT '0', assigned_last_user int UNSIGNED NOT NULL DEFAULT '0',
status_id char(3) NOT NULL, status_id char(3) NOT NULL,
total_messages int UNSIGNED NOT NULL DEFAULT '0', total_messages int UNSIGNED NOT NULL DEFAULT '0',
subject varchar(255) DEFAULT NULL,
message text NOT NULL,
keyword varchar(250) DEFAULT NULL, keyword varchar(250) DEFAULT NULL,
source char(3) NOT NULL, source char(3) NOT NULL,
start_date datetime NOT NULL, start_date datetime NOT NULL,
@ -232,7 +234,7 @@ $sql = "CREATE TABLE IF NOT EXISTS ".$table." (
Database::query($sql); Database::query($sql);
$table = Database::get_main_table(TABLE_TICKET_CATEGORY_REL_USER); $table = Database::get_main_table(TABLE_TICKET_CATEGORY_REL_USER);
$sql = "CREATE TABLE IF NOT EXISTS ".$table." ( $sql = "CREATE TABLE IF NOT EXISTS $table (
id int UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT, id int UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
category_id INT NOT NULL, category_id INT NOT NULL,
user_id INT NOT NULL user_id INT NOT NULL

@ -46,6 +46,7 @@ $strings['Priority'] = "Priority";
$strings['PriorityHigh'] = "High"; $strings['PriorityHigh'] = "High";
$strings['PriorityNormal'] = "Normal"; $strings['PriorityNormal'] = "Normal";
$strings['PriorityLow'] = "Low"; $strings['PriorityLow'] = "Low";
$strings['SrcPlatform'] = "Platforme";
$strings['SrcEmail'] = "E-mail"; $strings['SrcEmail'] = "E-mail";
$strings['SrcPhone'] = "Phone"; $strings['SrcPhone'] = "Phone";
$strings['SrcPresential'] = "In-person"; $strings['SrcPresential'] = "In-person";
@ -87,7 +88,7 @@ $strings['RequestConfirmation'] = "Request confirmation";
$strings['TicketUpdated'] = "Ticket updated"; $strings['TicketUpdated'] = "Ticket updated";
$strings['TicketClosed'] = "Ticket closed"; $strings['TicketClosed'] = "Ticket closed";
$strings['TicketXCreated'] = "Ticket <b>%s</b>created"; $strings['TicketXCreated'] = "Ticket <b>%s</b> created";
$strings['allow_category_edition'] = "Allow category edition"; $strings['allow_category_edition'] = "Allow category edition";
$strings['warn_admin_no_user_in_category'] = "Warn admin if category doesn't have users related"; $strings['warn_admin_no_user_in_category'] = "Warn admin if category doesn't have users related";
$strings['send_warning_to_all_admins'] = "Send warning to all admins, if category doesn't have users related"; $strings['send_warning_to_all_admins'] = "Send warning to all admins, if category doesn't have users related";
@ -97,4 +98,5 @@ $strings['CategoryWithNoUserNotificationSentToAdmins'] = 'Category <b>%s</b> wit
$strings['TicketXAssignedToUserX'] = 'Ticket <b>#%s</b> assigned to user <b>%s</b>'; $strings['TicketXAssignedToUserX'] = 'Ticket <b>#%s</b> assigned to user <b>%s</b>';
$strings['TicketXCreatedWithNoCategory'] = 'Ticket <b>#%s</b> created with no category'; $strings['TicketXCreatedWithNoCategory'] = 'Ticket <b>#%s</b> created with no category';
$strings['UpdatedByX'] = 'Updated by %s';
$strings['AssignedChangeFromXToY'] = 'Assignee changed from %s to %s';

@ -85,3 +85,5 @@ $strings['PleaseBeforeRegisterATicketSelectOneUser'] = "Veuillez sélectionner u
$strings['RequestConfirmation'] = "Demander confirmation"; $strings['RequestConfirmation'] = "Demander confirmation";
$strings['TicketUpdated'] = "Ticket modifié"; $strings['TicketUpdated'] = "Ticket modifié";
$strings['TicketClosed'] = "Ticket fermé"; $strings['TicketClosed'] = "Ticket fermé";
$strings['SrcPlatform'] = "Platforme";
$strings['UpdatedByX'] = 'Updated by %s';

@ -89,3 +89,5 @@ $strings['PleaseBeforeRegisterATicketSelectOneUser'] = "Por favor, antes de regi
$strings['RequestConfirmation'] = "Solicitar confirmación"; $strings['RequestConfirmation'] = "Solicitar confirmación";
$strings['TicketUpdated'] = "Ticket actualizado"; $strings['TicketUpdated'] = "Ticket actualizado";
$strings['TicketClosed'] = "Ticket cerrado"; $strings['TicketClosed'] = "Ticket cerrado";
$strings['SrcPlatform'] = "Plataforma";
$strings['UpdatedByX'] = 'Actualizado por %s';

@ -1 +0,0 @@
This plugin provides the support ticket management system features

@ -6,7 +6,7 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();
api_protect_course_script(); api_protect_course_script();

@ -9,7 +9,7 @@
$cidReset = true; $cidReset = true;
// needed in order to load the plugin lang variables // needed in order to load the plugin lang variables
$course_plugin = 'ticket'; $course_plugin = 'ticket';
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();

@ -6,7 +6,7 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
$cidReset = true; $cidReset = true;
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();
api_protect_admin_script(true); api_protect_admin_script(true);

@ -5,7 +5,7 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();
$userId = intval($_GET['user_id']); $userId = intval($_GET['user_id']);

@ -5,7 +5,7 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();
api_block_anonymous_users(); api_block_anonymous_users();

@ -6,6 +6,6 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
require_once '../config.php'; require_once __DIR__.'/../config.php';
header('location:' . api_get_path(WEB_PLUGIN_PATH) . PLUGIN_NAME . '/src/myticket.php?message=success'); header('Location:' . api_get_path(WEB_PLUGIN_PATH) . PLUGIN_NAME . '/src/myticket.php');
exit; exit;

@ -9,17 +9,17 @@
$cidReset = true; $cidReset = true;
// needed in order to load the plugin lang variables // needed in order to load the plugin lang variables
$course_plugin = 'ticket'; $course_plugin = 'ticket';
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); api_block_anonymous_users();
$plugin = TicketPlugin::create();
$tool_name = $plugin->get_lang('LastEdit'); $tool_name = $plugin->get_lang('LastEdit');
api_block_anonymous_users();
$libPath = api_get_path(LIBRARY_PATH); $libPath = api_get_path(LIBRARY_PATH);
$webLibPath = api_get_path(WEB_LIBRARY_PATH); $webLibPath = api_get_path(WEB_LIBRARY_PATH);
$htmlHeadXtra[] = '<script type="text/javascript"> $htmlHeadXtra[] = '<script>
function load_history_ticket (div_course,ticket_id) { function load_history_ticket(div_course, ticket_id) {
$.ajax({ $.ajax({
contentType: "application/x-www-form-urlencoded", contentType: "application/x-www-form-urlencoded",
beforeSend: function(object) { beforeSend: function(object) {
@ -34,21 +34,16 @@ function load_history_ticket (div_course,ticket_id) {
} }
}); });
} }
function clear_course_list (div_course) { function clear_course_list(div_course) {
$("div#"+div_course).html("&nbsp;"); $("div#"+div_course).html("&nbsp;");
$("div#"+div_course).hide(""); $("div#"+div_course).hide("");
} }
$(function() {
$( "#keyword_start_date_start" ).datepicker({ dateFormat: ' . "'dd/mm/yy'" . ' });
$( "#keyword_start_date_end" ).datepicker({ dateFormat: ' . "'dd/mm/yy'" . ' });
});
$(document).ready(function() { $(document).ready(function() {
$("#advanced_search_form").css("display","none"); $("#advanced_search_form").css("display","none");
}); });
function display_advanced_search_form () { function display_advanced_search_form() {
if ($("#advanced_search_form").css("display") == "none") { if ($("#advanced_search_form").css("display") == "none") {
$("#advanced_search_form").css("display","block"); $("#advanced_search_form").css("display","block");
$("#img_plus_and_minus").html(\'&nbsp;' . Display::return_icon('div_hide.gif', get_lang('Hide'), array('style' => 'vertical-align:middle')) . '&nbsp;' . get_lang('AdvancedSearch') . '\'); $("#img_plus_and_minus").html(\'&nbsp;' . Display::return_icon('div_hide.gif', get_lang('Hide'), array('style' => 'vertical-align:middle')) . '&nbsp;' . get_lang('AdvancedSearch') . '\');
@ -57,70 +52,7 @@ function display_advanced_search_form () {
$("#img_plus_and_minus").html(\'&nbsp;' . Display::return_icon('div_show.gif', get_lang('Show'), array('style' => 'vertical-align:middle')) . '&nbsp;' . get_lang('AdvancedSearch') . '\'); $("#img_plus_and_minus").html(\'&nbsp;' . Display::return_icon('div_show.gif', get_lang('Show'), array('style' => 'vertical-align:middle')) . '&nbsp;' . get_lang('AdvancedSearch') . '\');
} }
} }
</script> </script>';
<style>
.label2 {
float: left;
text-align: left;
width: 75px;
}
.label3 {
margin-left: 20px;
float: left;
text-align: left;
margin-top: 10px;
width: 95px;
}
.label4 {
float: left;
text-align: left;
margin-top: 10px;
width: 75px;
}
.formw2 {
float: left;
margin-left: 4px;
margin-top: 5px;
}
.blackboard_show {
float: left;
position: absolute;
border: 1px solid black;
width: 350px;
background-color: white;
z-index: 99;
padding: 3px;
display: inline;
}
.blackboard_hide {
display: none;
}
.advanced-parameters {
margin-top: 5px;
}
.remove-margin-top {
margin-top: 0px;
}
.select-margin-top {
margin-top: -5px;
}
.input-width {
width: 170px;
}
.fleft {
float: left;
}
</style>';
$this_section = 'tickets'; $this_section = 'tickets';
unset($_SESSION['this_section']); unset($_SESSION['this_section']);
@ -138,21 +70,23 @@ if ($table->per_page == 0) {
$table->per_page = 20; $table->per_page = 20;
} }
if (isset($_GET['action'])) { $action = isset($_GET['action']) ? $_GET['action'] : '';
global $table;
$action = $_GET['action']; switch ($action) {
switch ($action) {
case 'assign': case 'assign':
if ($isAdmin && isset($_GET['ticket_id'])) if ($isAdmin && isset($_GET['ticket_id'])) {
TicketManager::assign_ticket_user($_GET['ticket_id'], $user_id); TicketManager::assign_ticket_user($_GET['ticket_id'], $user_id);
}
break; break;
case 'unassign': case 'unassign':
if ($isAdmin && isset($_GET['ticket_id'])) if ($isAdmin && isset($_GET['ticket_id'])) {
TicketManager::assign_ticket_user($_GET['ticket_id'], 0); TicketManager::assign_ticket_user($_GET['ticket_id'], 0);
}
break; break;
case 'alert': case 'alert':
if (!$isAdmin && isset($_GET['ticket_id'])) if (!$isAdmin && isset($_GET['ticket_id'])) {
TicketManager::send_alert($_GET['ticket_id'], $user_id); TicketManager::send_alert($_GET['ticket_id'], $user_id);
}
break; break;
case 'export': case 'export':
$data = array( $data = array(
@ -192,14 +126,13 @@ if (isset($_GET['action'])) {
break; break;
default: default:
break; break;
}
} }
// $nameTools = api_xml_http_response_encode($plugin->get_lang('MyTickets'));
$user_id = api_get_user_id(); $user_id = api_get_user_id();
$isAdmin = api_is_platform_admin(); $isAdmin = api_is_platform_admin();
Display::display_header($plugin->get_lang('MyTickets')); Display::display_header($plugin->get_lang('MyTickets'));
if ($isAdmin) { if ($isAdmin) {
$getParameters = [ $getParameters = [
'keyword', 'keyword',
@ -236,50 +169,43 @@ if ($isAdmin) {
if (isset($_GET['submit_simple'])) { if (isset($_GET['submit_simple'])) {
$get_parameter .= "&submit_simple="; $get_parameter .= "&submit_simple=";
} }
//select categories
$select_types = '<select class="chzn-select" name = "keyword_category" id="keyword_category" ">'; // Select categories
$select_types .= '<option value="">---' . get_lang('Select') . '---</option>'; $selectTypes = [];
$types = TicketManager::get_all_tickets_categories(); $types = TicketManager::get_all_tickets_categories();
foreach ($types as $type) { foreach ($types as $type) {
$select_types.= "<option value = '" . $type['category_id'] . "'>" . $type['name'] . "</option>"; $selectTypes[$type['category_id']] = $type['name'];
} }
$select_types .= "</select>";
//select admins
$select_admins = '<select class ="chzn-select" name = "keyword_admin" id="keyword_admin" ">';
$select_admins .= '<option value="">---' . get_lang('Select') . '---</option>';
$select_admins .= '<option value = "0">' . $plugin->get_lang('Unassigned') . '</option>';
$admins = UserManager::get_user_list_like(array("status" => "1"), array("username"), true); $admins = UserManager::get_user_list_like(array("status" => "1"), array("username"), true);
$selectAdmins = [
0 => $plugin->get_lang('Unassigned')
];
foreach ($admins as $admin) { foreach ($admins as $admin) {
$select_admins.= "<option value = '" . $admin['user_id'] . "'>" . $admin['lastname'] . " ," . $admin['firstname'] . "</option>"; $selectAdmins[$admin['user_id']] = $admin['complete_name'];
} }
$select_admins .= "</select>";
//select status
$select_status = '<select class ="chzn-select" name = "keyword_status" id="keyword_status" >';
$select_status .= '<option value="">---' . get_lang('Select') . '---</option>';
$status = TicketManager::get_all_tickets_status(); $status = TicketManager::get_all_tickets_status();
$selectStatus = [];
foreach ($status as $stat) { foreach ($status as $stat) {
$select_status.= "<option value = '" . $stat['status_id'] . "'>" . $stat['name'] . "</option>"; $selectStatus[$stat['status_id']] = $stat['name'];
} }
$select_status .= "</select>";
//select priority
$select_priority = '<select name = "keyword_priority" id="keyword_priority" >';
$select_priority .= '<option value="">' . get_lang('All') . '</option>';
$select_priority .= '<option value="NRM">' . $plugin->get_lang('PriorityNormal') . '</option>';
$select_priority .= '<option value="HGH">' . $plugin->get_lang('PriorityHigh') . '</option>';
$select_priority .= '<option value="LOW">' . $plugin->get_lang('PriorityLow') . '</option>';
$select_priority .= "</select>";
//select unread $selectPriority = [
$select_unread = '<select name = "keyword_unread" id="keyword_unread" >'; '' => get_lang('All'),
$select_unread .= '<option value="">' . get_lang('All') . '</option>'; TicketManager::PRIORITY_NORMAL => $plugin->get_lang('PriorityNormal'),
$select_unread .= '<option value="yes">' . $plugin->get_lang('Unread') . '</option>'; TicketManager::PRIORITY_HIGH => $plugin->get_lang('PriorityHigh'),
$select_unread .= '<option value="no">' . $plugin->get_lang('Read') . '</option>'; TicketManager::PRIORITY_LOW => $plugin->get_lang('PriorityLow')
$select_unread .= "</select>"; ];
$selectStatusUnread = [
'' => get_lang('All'),
'yes' => $plugin->get_lang('Unread'),
'no' => $plugin->get_lang('Read')
];
// Create a search-box // Create a search-box
$form = new FormValidator('search_simple', 'get', '', '', null, false); $form = new FormValidator('search_simple', 'get', '', '', array(), FormValidator::LAYOUT_INLINE);
$renderer = & $form->defaultRenderer(); $form->addText('keyword', get_lang('Keyword'), 'size="25"');
$renderer->setCustomElementTemplate('<span>{element}</span> ');
$form->addElement('text', 'keyword', get_lang('Keyword'), 'size="25"');
$form->addButtonSearch(get_lang('Search'), 'submit_simple'); $form->addButtonSearch(get_lang('Search'), 'submit_simple');
$form->addElement('static', 'search_advanced_link', null, $form->addElement('static', 'search_advanced_link', null,
'<a href="javascript://" class = "advanced-parameters" onclick="display_advanced_search_form();">' '<a href="javascript://" class = "advanced-parameters" onclick="display_advanced_search_form();">'
@ -291,11 +217,9 @@ if ($isAdmin) {
if (api_is_platform_admin()) { if (api_is_platform_admin()) {
echo '<span class="left">' . echo '<span class="left">' .
'<a href="' . api_get_path(WEB_PLUGIN_PATH) . 'ticket/src/new_ticket.php">' . '<a href="' . api_get_path(WEB_PLUGIN_PATH) . 'ticket/src/new_ticket.php">' .
Display::return_icon('add.png', $plugin->get_lang('TckNew'), '', '32') . '</a>' . Display::return_icon('add.png', $plugin->get_lang('TckNew'), '', ICON_SIZE_MEDIUM) . '</a>' .
'<a href="' . api_get_self() . '?action=export' . $get_parameter . $get_parameter2 . '">' . '<a href="' . api_get_self() . '?action=export' . $get_parameter . $get_parameter2 . '">' .
Display::return_icon('export_excel.png', get_lang('Export'), '', '32') . '</a>'; Display::return_icon('export_excel.png', get_lang('Export'), '', ICON_SIZE_MEDIUM) . '</a>';
if ($plugin->get('allow_category_edition')) { if ($plugin->get('allow_category_edition')) {
echo Display::url( echo Display::url(
Display::return_icon('folder_document.gif'), Display::return_icon('folder_document.gif'),
@ -308,87 +232,26 @@ if ($isAdmin) {
} }
$form->display(); $form->display();
echo '</div>'; echo '</div>';
echo '<form action="' . api_get_self() . '" method="get" name="advanced_search" id="advanced_search" display:"none">
<div id="advanced_search_form" style="display: block;"> $advancedSearchForm = new FormValidator(
<div> 'advanced_search',
<div class="form_header">' . get_lang('AdvancedSearch') . '</div> 'get',
</div> api_get_self(),
<table > null,
<tbody> ['style' => 'display:"none"', 'id' => 'advanced_search_form']
<tr> );
<td> $advancedSearchForm->addHeader(get_lang('AdvancedSearch'));
<div> $advancedSearchForm->addSelect('keyword_category', get_lang('Category'), $selectTypes, ['placeholder' => get_lang('Select')]);
<div class="label2">' . get_lang('Category') . ': </div> //$advancedSearchForm->addText('keyword_request_user', get_lang('User'), false);
<div class="formw2" style="margin-top: -5px;">' . $select_types . '</div> $advancedSearchForm->addDateTimePicker('keyword_start_date_start', $plugin->get_lang('RegisterDate'));
</div> $advancedSearchForm->addDateTimePicker('keyword_start_date_end', $plugin->get_lang('Untill'));
</td> $advancedSearchForm->addSelect('keyword_admin', $plugin->get_lang('AssignedTo') , $selectAdmins, ['placeholder' => get_lang('All')]);
<td> $advancedSearchForm->addSelect('keyword_status', get_lang('Status'), $selectStatus, ['placeholder' => get_lang('Select')]);
<div> $advancedSearchForm->addSelect('keyword_priority', $plugin->get_lang('Priority'), $selectPriority, ['placeholder' => get_lang('All')]);
<div class="label3">' . get_lang('User') . ': </div> $advancedSearchForm->addSelect('keyword_unread', get_lang('Status'), $selectStatusUnread, ['placeholder' => get_lang('All')]);
<div class="formw2"><input class="input-width" id="keyword_request_user" name="keyword_request_user" type="text"></div> $advancedSearchForm->addText('keyword_course', get_lang('Course'), false);
</div> $advancedSearchForm->addButtonSearch(get_lang('AdvancedSearch'), 'submit_advanced');
</td> $advancedSearchForm->display();
<td>
<div>
<div class="label3">' . $plugin->get_lang('RegisterDate') . ': </div>
<div class="formw2"><input class="input-width" id="keyword_start_date_start" name="keyword_start_date_start" type="text"></div>
</div>
</td>
<td>
<div>
<div class="label3"><input type="checkbox" name="keyword_dates" value="1">' . $plugin->get_lang('Untill') . '</div>
<div class="formw2"><input class="input-width" id="keyword_start_date_end" name="keyword_start_date_end" type="text"></div>
</div>
</td>
</tr>
<tr >
<td>
<div>
<div class="label2">' . $plugin->get_lang('AssignedTo') . ': </div>
<div class="formw2 select-margin-top">' . $select_admins . '</div>
</div>
</td>
<td>
<div>
<div class="label3 remove-margin-top">' . get_lang('Status') . ':</div>
<div class="formw2 select-margin-top">' . $select_status . '</div>
</div>
</td>
<td>
<div>
<div>
<div class="label3">' . $plugin->get_lang('Priority') . ': </div>
<div class="formw2">' . $select_priority . '</div>
</div>
</td>
<td>
<div>
<div>
<div class="label3">' . get_lang('Status') . ': </div>
<div class="formw2">' . $select_unread . '</div>
</div>
</td>
</tr>
<tr>
<td>
<div >
<div class="label4">' . get_lang('Course') . ': </div>
<div class="formw2">
<input id="keyword_course" style="width: 170px;" name="keyword_course" type="text"></div>
</div>
</td>
<td colspan= "3">
<div>
<button name="submit_advanced" type="submit">' . get_lang('AdvancedSearch') . '</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<input name="_qf__advanced_search" type="hidden" value="">
<div class="clear">&nbsp;</div>
</form>';
} else { } else {
if ($plugin->get('allow_student_add') == 'true') { if ($plugin->get('allow_student_add') == 'true') {
echo '<div class="actions" >'; echo '<div class="actions" >';
@ -397,8 +260,6 @@ if ($isAdmin) {
Display::return_icon('add.png', $plugin->get_lang('TckNew'), '', '32') . Display::return_icon('add.png', $plugin->get_lang('TckNew'), '', '32') .
'</a>' . '</a>' .
'</span>'; '</span>';
echo '<span style="float:right;">' .
'</span>';
echo '</div>'; echo '</div>';
} }
} }
@ -408,11 +269,10 @@ if ($isAdmin) {
$table->set_header(1, $plugin->get_lang('Date'), true); $table->set_header(1, $plugin->get_lang('Date'), true);
$table->set_header(2, $plugin->get_lang('DateLastEdition'), true); $table->set_header(2, $plugin->get_lang('DateLastEdition'), true);
$table->set_header(3, $plugin->get_lang('Category'), true); $table->set_header(3, $plugin->get_lang('Category'), true);
$table->set_header(4, $plugin->get_lang('User'), true); $table->set_header(4, $plugin->get_lang('CreatedBy'), true);
$table->set_header(5, $plugin->get_lang('Responsible'), true); $table->set_header(5, $plugin->get_lang('AssignedTo'), true);
$table->set_header(6, $plugin->get_lang('Status'), true); $table->set_header(6, $plugin->get_lang('Status'), true);
$table->set_header(7, $plugin->get_lang('Message'), true); $table->set_header(7, $plugin->get_lang('Message'), true);
$table->set_header(8, get_lang('Actions'), true);
} else { } else {
echo '<center><h1>' . $plugin->get_lang('MyTickets') . '</h1></center>'; echo '<center><h1>' . $plugin->get_lang('MyTickets') . '</h1></center>';
echo '<center><p>' . $plugin->get_lang('MsgWelcome') . '</p></center>'; echo '<center><p>' . $plugin->get_lang('MsgWelcome') . '</p></center>';
@ -424,7 +284,6 @@ if ($isAdmin) {
$table->set_header(2, $plugin->get_lang('DateLastEdition'), true); $table->set_header(2, $plugin->get_lang('DateLastEdition'), true);
$table->set_header(3, $plugin->get_lang('Category')); $table->set_header(3, $plugin->get_lang('Category'));
$table->set_header(4, $plugin->get_lang('Status'), false); $table->set_header(4, $plugin->get_lang('Status'), false);
$table->set_header(5, get_lang('Actions'), false);
} }
$table->display(); $table->display();

@ -6,7 +6,7 @@
*/ */
$cidReset = true; $cidReset = true;
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();
if (!api_is_platform_admin() && if (!api_is_platform_admin() &&
@ -195,7 +195,7 @@ function show_form_send_ticket()
// Category List // Category List
$categoryList = array(); $categoryList = array();
foreach ($types as $type) { foreach ($types as $type) {
$categoryList[$type['category_id']] = $type['name'] . ": " . $type['description']; $categoryList[$type['category_id']] = $type['name'].': '.$type['description'];
} }
// Status List // Status List
@ -205,52 +205,51 @@ function show_form_send_ticket()
'id' => 'status_id', 'id' => 'status_id',
'for' => 'status_id' 'for' => 'status_id'
); );
$statusList[NEWTCK] = $plugin->get_lang('StatusNew');
$statusList[TicketManager::STATUS_NEW] = $plugin->get_lang('StatusNew');
if (api_is_platform_admin()) { if (api_is_platform_admin()) {
$statusAttributes = array( $statusAttributes = array(
'id' => 'status_id', 'id' => 'status_id',
'for' => 'status_id', 'for' => 'status_id',
'style' => 'width: 562px;' 'style' => 'width: 562px;'
); );
$statusList[PENDING] = $plugin->get_lang('StatusPending'); $statusList[TicketManager::STATUS_PENDING] = $plugin->get_lang('StatusPending');
$statusList[UNCONFIRMED] = $plugin->get_lang('StatusUnconfirmed'); $statusList[TicketManager::STATUS_UNCONFIRMED] = $plugin->get_lang('StatusUnconfirmed');
$statusList[CLOSE] = $plugin->get_lang('StatusClose'); $statusList[TicketManager::STATUS_CLOSE] = $plugin->get_lang('StatusClose');
$statusList[REENVIADO] = $plugin->get_lang('StatusForwarded'); $statusList[TicketManager::STATUS_FORWARDED] = $plugin->get_lang('StatusForwarded');
} }
//End Status List //End Status List
//Source List // Source List
$sourceList = array(); $sourceList = array();
$sourceAttributes = array( $sourceAttributes = array(
'style' => 'display: none;', 'style' => 'display: none;',
'id' => 'source_id', 'id' => 'source_id',
'for' => 'source_id' 'for' => 'source_id'
); );
$sourceList[SRC_PLATFORM] = $plugin->get_lang('SrcPlatform'); $sourceList[TicketManager::SOURCE_PLATFORM] = $plugin->get_lang('SrcPlatform');
if (api_is_platform_admin()) { if (api_is_platform_admin()) {
$sourceAttributes = array( $sourceAttributes = array(
'id' => 'source_id', 'id' => 'source_id',
'for' => 'source_id', 'for' => 'source_id',
'style' => 'width: 562px;' 'style' => 'width: 562px;'
); );
$sourceList[SRC_EMAIL] = $plugin->get_lang('SrcEmail'); $sourceList[TicketManager::SOURCE_EMAIL] = $plugin->get_lang('SrcEmail');
$sourceList[SRC_PHONE] = $plugin->get_lang('SrcPhone'); $sourceList[TicketManager::SOURCE_PHONE] = $plugin->get_lang('SrcPhone');
$sourceList[SRC_PRESC] = $plugin->get_lang('SrcPresential'); $sourceList[TicketManager::SOURCE_PRESENTIAL] = $plugin->get_lang('SrcPresential');
} }
//End Source List
//Priority List // Priority List
$priorityList = array(); $priorityList = array();
$priorityList[NORMAL] = $plugin->get_lang('PriorityNormal'); $priorityList[TicketManager::PRIORITY_NORMAL] = $plugin->get_lang('PriorityNormal');
$priorityList[HIGH] = $plugin->get_lang('PriorityHigh'); $priorityList[TicketManager::PRIORITY_HIGH] = $plugin->get_lang('PriorityHigh');
$priorityList[LOW] = $plugin->get_lang('PriorityLow'); $priorityList[TicketManager::PRIORITY_LOW] = $plugin->get_lang('PriorityLow');
//End Priority List
$form = new FormValidator( $form = new FormValidator(
'send_ticket', 'send_ticket',
'POST', 'POST',
api_get_self(), api_get_self(),
"", '',
array( array(
'enctype' => 'multipart/form-data', 'enctype' => 'multipart/form-data',
'onsubmit' => 'return validate()' 'onsubmit' => 'return validate()'
@ -336,8 +335,6 @@ function show_form_send_ticket()
); );
//} //}
$form->addElement( $form->addElement(
'text', 'text',
'personal_email', 'personal_email',
@ -347,7 +344,6 @@ function show_form_send_ticket()
) )
); );
$form->addLabel('', $form->addLabel('',
Display::div( Display::div(
'', '',
@ -393,7 +389,6 @@ function show_form_send_ticket()
) )
); );
$form->addElement('file', 'attach_1', get_lang('FilesAttachment')); $form->addElement('file', 'attach_1', get_lang('FilesAttachment'));
$form->addLabel('', '<span id="filepaths"><div id="filepath_1"></div></span>'); $form->addLabel('', '<span id="filepaths"><div id="filepath_1"></div></span>');
@ -429,7 +424,7 @@ function save_ticket()
global $plugin; global $plugin;
$category_id = $_POST['category_id']; $category_id = $_POST['category_id'];
$content = $_POST['content']; $content = $_POST['content'];
if ($_POST['phone'] != "") { if ($_POST['phone'] != '') {
$content .= '<p style="color:red">&nbsp;' . get_lang('Phone') . ': ' . Security::remove_XSS($_POST['phone']). '</p>'; $content .= '<p style="color:red">&nbsp;' . get_lang('Phone') . ': ' . Security::remove_XSS($_POST['phone']). '</p>';
} }
$course_id = isset($_POST['course_id']) ? $_POST['course_id'] : 0; $course_id = isset($_POST['course_id']) ? $_POST['course_id'] : 0;
@ -443,7 +438,6 @@ function save_ticket()
$priority = $_POST['priority_id']; $priority = $_POST['priority_id'];
$status = $_POST['status_id']; $status = $_POST['status_id'];
$file_attachments = $_FILES; $file_attachments = $_FILES;
$responsible = (api_is_platform_admin() ? api_get_user_id() : 0);
if (TicketManager::insert_new_ticket( if (TicketManager::insert_new_ticket(
$category_id, $category_id,
@ -458,11 +452,12 @@ function save_ticket()
$source, $source,
$priority, $priority,
$status, $status,
$user_id, $user_id
$responsible )) {
) Display::addFlash(
) { Display::return_message($plugin->get_lang('TckSuccessSave'), 'success')
header('location:' . api_get_path(WEB_PLUGIN_PATH) . PLUGIN_NAME . '/src/myticket.php?message=success'); );
header('Location:' . api_get_path(WEB_PLUGIN_PATH) . PLUGIN_NAME . '/src/myticket.php');
exit; exit;
} else { } else {
Display::display_header(get_lang('ComposeMessage')); Display::display_header(get_lang('ComposeMessage'));

@ -5,9 +5,8 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
$language_file = array('trad4all');
$cidReset = true; $cidReset = true;
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();
api_block_anonymous_users(); api_block_anonymous_users();

@ -1,15 +0,0 @@
<div class="actions">
<span style="float: right;">
<a href="/main/admin/user_add.php"><img title="Añadir usuarios" alt="Añadir usuarios" src="/main/img/icons/32/new_user.png"></a>
</span>
<form id="search_simple" name="search_simple" method="get" action="/main/admin/user_list.php" class="form-search">
<fieldset>
<span><input type="text" name="keyword" size="25"></span>
<span><button type="submit" name="submit" class="btn btn">Buscar</button></span>
<span><a onclick="display_advanced_search_form();" class="advanced_parameters" href="javascript://">
<span id="img_plus_and_minus">&nbsp;<img title="Mostrar" alt="Mostrar" src="/main/img/div_show.gif" style="vertical-align: middle">&nbsp;Advanced search</span></a>
</span>
<div class="clear"></div>
</fieldset>
</form>
</div>

File diff suppressed because it is too large Load Diff

@ -5,7 +5,7 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();

@ -6,7 +6,7 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
$cidReset = true; $cidReset = true;
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();
api_block_anonymous_users(); api_block_anonymous_users();
@ -16,15 +16,14 @@ $isAdmin = api_is_platform_admin();
$interbreadcrumb[] = array('url' => 'myticket.php', 'name' => $plugin->get_lang('MyTickets')); $interbreadcrumb[] = array('url' => 'myticket.php', 'name' => $plugin->get_lang('MyTickets'));
$interbreadcrumb[] = array('url' => '#', 'name' => $plugin->get_lang('TicketDetail')); $interbreadcrumb[] = array('url' => '#', 'name' => $plugin->get_lang('TicketDetail'));
$disableReponseButtons = ""; $disableReponseButtons = '';
if ($isAdmin) { if ($isAdmin) {
$disableReponseButtons = "$('#responseyes').attr('disabled', 'disabled'); $disableReponseButtons = "$('#responseyes').attr('disabled', 'disabled');
$('#responseno').attr('disabled', 'disabled');"; $('#responseno').attr('disabled', 'disabled');";
} }
$htmlHeadXtra[] = ' $htmlHeadXtra[] = '<script>
<script language="javascript"> $(document).ready(function() {
$(document).ready(function(){
$("#dialog-form").dialog({ $("#dialog-form").dialog({
autoOpen: false, autoOpen: false,
height: 450, height: 450,
@ -67,8 +66,7 @@ $(document).ready(function(){
return false; return false;
} }
}); });
'.$disableReponseButtons.'
' . $disableReponseButtons . '
}); });
function validate() { function validate() {
@ -133,8 +131,7 @@ function add_image_form() {
} }
</script>'; </script>';
$htmlHeadXtra[] = ' $htmlHeadXtra[] = '<style>
<style>
div.row div.label2 { div.row div.label2 {
float:left; float:left;
text-align: right; text-align: right;
@ -195,13 +192,13 @@ if (!isset($_GET['ticket_id'])) {
if (isset($_POST['response'])) { if (isset($_POST['response'])) {
if ($user_id == $ticket['ticket']['request_user']) { if ($user_id == $ticket['ticket']['request_user']) {
$response = ($_POST['response'] == "1") ? true : ($_POST['response'] == "0" ? false : null); $response = ($_POST['response'] == "1") ? true : ($_POST['response'] == "0" ? false : null);
if ($response && $ticket['ticket']['status_id'] == 'XCF') { if ($response && $ticket['ticket']['status_id'] == TicketManager::STATUS_UNCONFIRMED) {
TicketManager::close_ticket($_GET['ticket_id'], $user_id); TicketManager::close_ticket($_GET['ticket_id'], $user_id);
$ticket['ticket']['status_id'] = 'CLS'; $ticket['ticket']['status_id'] = TicketManager::STATUS_CLOSE;
$ticket['ticket']['status'] = $plugin->get_lang('Closed'); $ticket['ticket']['status'] = $plugin->get_lang('Closed');
} else if (!is_null($response) && $ticket['ticket']['status_id'] == 'XCF') { } else if (!is_null($response) && $ticket['ticket']['status_id'] == TicketManager::STATUS_UNCONFIRMED) {
TicketManager::update_ticket_status('PND', $_GET['ticket_id'], $user_id); TicketManager::update_ticket_status(TicketManager::STATUS_PENDING, $_GET['ticket_id'], $user_id);
$ticket['ticket']['status_id'] = 'PND'; $ticket['ticket']['status_id'] = TicketManager::STATUS_PENDING;
$ticket['ticket']['status'] = $plugin->get_lang('StatusPending'); $ticket['ticket']['status'] = $plugin->get_lang('StatusPending');
} }
} }
@ -210,42 +207,46 @@ if (isset($_REQUEST['action'])) {
$action = $_REQUEST['action']; $action = $_REQUEST['action'];
switch ($action) { switch ($action) {
case 'assign': case 'assign':
if (api_is_platform_admin() && isset($_GET['ticket_id'])) if (api_is_platform_admin() && isset($_GET['ticket_id'])) {
TicketManager::assign_ticket_user($_GET['ticket_id'], $_POST['admins']); TicketManager::assign_ticket_user($_GET['ticket_id'], $_POST['admins']);
$ticket['ticket']['assigned_last_user'] = $_POST['admins']; }
Display::addFlash(Display::return_message(get_lang('Updated')));
header("Location:" . api_get_self() . "?ticket_id=" . $ticket_id);
exit;
break; break;
case 'unassign': case 'unassign':
if (api_is_platform_admin() && isset($_GET['ticket_id'])) if (api_is_platform_admin() && isset($_GET['ticket_id'])) {
TicketManager::assign_ticket_user($_GET['ticket_id'], 0); TicketManager::assign_ticket_user($_GET['ticket_id'], 0);
$ticket['ticket']['assigned_last_user'] = 0; }
Display::addFlash(Display::return_message(get_lang('Updated')));
header("Location:" . api_get_self() . "?ticket_id=" . $ticket_id);
exit;
break; break;
default: default:
break; break;
} }
} }
$titulo = 'Ticket #' . $ticket['ticket']['ticket_code']; $title = 'Ticket #' . $ticket['ticket']['ticket_code'];
$firstMessage = is_array($ticket['messages']) ? $ticket['messages'][0] : '';
$subTitle = '';
if (!empty($firstMessage) && isset($firstMessage['subject'])) {
$subTitle = $firstMessage['subject'];
}
if (!isset($_POST['compose'])) { if (!isset($_POST['compose'])) {
if (isset($_REQUEST['close'])) { if (isset($_REQUEST['close'])) {
TicketManager::close_ticket($_REQUEST['ticket_id'], $user_id); TicketManager::close_ticket($_REQUEST['ticket_id'], $user_id);
$ticket['ticket']['status_id'] = 'CLS'; $ticket['ticket']['status_id'] = TicketManager::STATUS_CLOSE;
$ticket['ticket']['status'] = $plugin->get_lang('Closed'); $ticket['ticket']['status'] = $plugin->get_lang('Closed');
} }
$ticket['ticket']['request_user'] = intval($ticket['ticket']['request_user']); /*$ticket['ticket']['request_user'] = intval($ticket['ticket']['request_user']);
if ($ticket['ticket']['request_user'] == $user_id || intval($ticket['ticket']['assigned_last_user']) == $user_id) { if ($ticket['ticket']['request_user'] == $user_id || intval($ticket['ticket']['assigned_last_user']) == $user_id) {
TicketManager::update_message_status($ticket_id, $ticket['ticket']['request_user']); TicketManager::update_message_status($ticket_id, $ticket['ticket']['request_user']);
} }*/
Display::display_header(); Display::display_header();
$form_close_ticket = ""; $form_close_ticket = '';
if ($ticket['ticket']['status_id'] != 'REE' && $ticket['ticket']['status_id'] != 'CLS' && $isAdmin) { if ($ticket['ticket']['status_id'] != TicketManager::STATUS_FORWARDED &&
$ticket['ticket']['status_id'] != TicketManager::STATUS_CLOSE &&
$isAdmin
) {
if (intval($ticket['ticket']['assigned_last_user']) == $user_id) { if (intval($ticket['ticket']['assigned_last_user']) == $user_id) {
if ($ticket['ticket']['status_id'] != 'CLS') { if ($ticket['ticket']['status_id'] != TicketManager::STATUS_CLOSE) {
$form_close_ticket.= '<a href="' . api_get_self() . '?close=1&ticket_id=' . $ticket['ticket']['ticket_id'] . '" id="close" class="btn btn-danger" >'; $form_close_ticket.= '<a href="' . api_get_self() . '?close=1&ticket_id=' . $ticket['ticket']['ticket_id'] . '" id="close" class="btn btn-danger" >';
$form_close_ticket.= get_lang('Close') . '</a>'; $form_close_ticket.= get_lang('Close') . '</a>';
} }
@ -253,19 +254,18 @@ if (!isset($_POST['compose'])) {
} }
$img_assing = ''; $img_assing = '';
if ($isAdmin && $ticket['ticket']['status_id'] != 'CLS' && $ticket['ticket']['status_id'] != 'REE') { if (empty($ticket['ticket']['assigned_last_user'])) {
if ($ticket['ticket']['assigned_last_user'] != 0 && $ticket['ticket']['assigned_last_user'] == $user_id) {
$img_assing = '<a class="btn btn-warning" href="' . api_get_self() . '?ticket_id=' . $ticket['ticket']['ticket_id'] . '&amp;action=unassign" id="unassign">
'.get_lang('Unassign').'
</a>';
} else {
$img_assing = '<a href="#" id="assign" class="btn btn-success">'.get_lang('Assign').'</a>'; $img_assing = '<a href="#" id="assign" class="btn btn-success">'.get_lang('Assign').'</a>';
} else {
if ($isAdmin) {
$img_assing = '<a class="btn btn-warning" href="#" id="assign">
'.get_lang('ChangeAssign').'
</a>';
} }
} }
$bold = ''; $bold = '';
if ($ticket['ticket']['status_id'] == 'CLS') { if ($ticket['ticket']['status_id'] == TicketManager::STATUS_CLOSE) {
$bold = 'style = "font-weight: bold;"'; $bold = 'style = "font-weight: bold;"';
echo "<style> echo "<style>
#confirmticket { #confirmticket {
@ -274,17 +274,17 @@ if (!isset($_POST['compose'])) {
</style>"; </style>";
} }
if ($isAdmin) { if ($isAdmin) {
$senderData = get_lang('AddedBy') . ' ' . $ticket['ticket']['user_url'] . ' (' . $ticket['usuario']['username'] . ').'; $senderData = get_lang('AddedBy'). ' '.$ticket['ticket']['user_url'].' (' . $ticket['usuario']['username'] . ').';
} else { } else {
$senderData = get_lang('AddedBy') . ' ' . $ticket['usuario']['complete_name'] . ' (' . $ticket['usuario']['username'] . ').'; $senderData = get_lang('AddedBy'). ' '.$ticket['usuario']['complete_name'].' (' . $ticket['usuario']['username']. ').';
} }
echo ' echo '
<table width="100%" > <table width="100%" >
<tr> <tr>
<td colspan="3" style="width:65%"> <td colspan="3">
<h1>' . $titulo . ' '.$form_close_ticket.' '.$img_assing.' </h1> <h1>'.$title.' '.$form_close_ticket.' '.$img_assing.' </h1>
<h2>'.$subTitle.'</h2> <h2>'.$ticket['ticket']['subject'].'</h2>
<p> <p>
'.$senderData.' ' . '.$senderData.' ' .
get_lang('Created') . ' '. get_lang('Created') . ' '.
@ -311,6 +311,17 @@ if (!isset($_POST['compose'])) {
<tr> <tr>
<td><p><b>' . $plugin->get_lang('Priority') . ': </b>' . $ticket['ticket']['priority'] . '<p></td> <td><p><b>' . $plugin->get_lang('Priority') . ': </b>' . $ticket['ticket']['priority'] . '<p></td>
</tr>'; </tr>';
if (!empty($ticket['ticket']['assigned_last_user'])) {
$assignedUser = api_get_user_info($ticket['ticket']['assigned_last_user']);
echo '<tr>
<td><p><b>' . $plugin->get_lang('AssignedTo') . ': </b>' . $assignedUser['complete_name'] . '<p></td>
</tr>';
} else {
echo '<tr>
<td><p><b>' . $plugin->get_lang('AssignedTo') . ': </b>-<p></td>
</tr>';
}
if ($ticket['ticket']['course_url'] != null) { if ($ticket['ticket']['course_url'] != null) {
echo '<tr> echo '<tr>
<td><p>' . get_lang('Course') . ':</p></td> <td><p>' . get_lang('Course') . ':</p></td>
@ -320,17 +331,28 @@ if (!isset($_POST['compose'])) {
</tr>'; </tr>';
} }
echo '<tr> echo '<tr>
<td><b>' . get_lang('Description') . ':</b> <br /> <td>
'.$firstMessage['message'].'</td> <hr />
<b>' . get_lang('Description') . ':</b> <br />
'.$ticket['ticket']['message'].'
<hr />
</td>
</tr> </tr>
'; ';
// select admins // Select admins
$select_admins = '<select class ="chzn-select" style="width: 350px; " name = "admins" id="admins" ">'; $select_admins = '<select class ="chzn-select" style="width: 350px; " name = "admins" id="admins" ">';
$admins = UserManager::get_user_list_like(array("status" => "1"), array("username"), true); $admins = UserManager::get_user_list_like(
array('status' => COURSEMANAGER), array('username'),
true
);
$select_admins .= '<option value="" >'.get_lang('None').'</option>';
foreach ($admins as $admin) { foreach ($admins as $admin) {
$select_admins.= "<option value = '" . $admin['user_id'] . "' " . (($user_id == $admin['user_id']) ? ("selected='selected'") : "") . ">" . $admin['lastname'] . ", " . $admin['firstname'] . "</option>"; $select_admins.= "<option value = '" . $admin['user_id'] . "' " . (($user_id == $admin['user_id']) ? ("selected='selected'") : '') . ">" .
$admin['complete_name'] . "</option>";
} }
$select_admins .= "</select>"; $select_admins .= "</select>";
echo '<div id="dialog-form" title="' . $plugin->get_lang('AssignTicket') . '" >'; echo '<div id="dialog-form" title="' . $plugin->get_lang('AssignTicket') . '" >';
@ -345,84 +367,158 @@ if (!isset($_POST['compose'])) {
echo '</table>'; echo '</table>';
$messages = $ticket['messages']; $messages = $ticket['messages'];
unset($messages[0]); $logs = TicketManager::get_assign_log($ticket_id);
$counter = 1;
foreach ($messages as $message) { foreach ($messages as $message) {
$type = "success"; $date = Display::url(
date_to_str_ago($message['sys_insert_datetime']),
'#',
['title' => api_get_local_time($message['sys_insert_datetime']), 'class' => 'boot-tooltip']
);
if ($message['admin']) { $receivedMessage = '';
$type = "normal"; if (!empty($message['subject'])) {
if ($isAdmin) { $receivedMessage = '<b>'.get_lang('Subject') . ': </b> '.$message['subject'].'<br/>';
$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'] .= '<br /><b>' . get_lang('Sent') . ':</b> ' . api_convert_and_format_date(api_get_local_time($message['sys_insert_datetime']), DATE_TIME_FORMAT_LONG, _api_get_timezone());
} }
$receivedMessage = '<b>'.get_lang('Message') . ':</b><br/>'.$message['message'].'<br/>';
$receivedMessage = '<b>' . get_lang('Subject') . ': </b> ' . $message['subject'] . '<br/> $attachmentLinks = '';
<b>' . get_lang('Message') . ':</b><br/>' . $message['message'] . '<br/>'; if (isset($message['attachments'])) {
$attachementLinks = "";
if (isset($message['atachments'])) {
$attributeClass = array( $attributeClass = array(
'class' => 'attachment-link' 'class' => 'attachment-link'
); );
foreach ($message['atachments'] as $attach) { foreach ($message['attachments'] as $attach) {
$attachementLinks .= Display::tag('div', $attach['attachment_link'], $attributeClass); $attachmentLinks .= Display::tag('div', $attach['attachment_link'], $attributeClass);
} }
} }
$entireMessage = $receivedMessage . $attachementLinks; $entireMessage = $receivedMessage . $attachmentLinks;
echo Display::return_message($entireMessage, $type, false); $counterLink = Display::url('#'.$counter, api_get_self().'?ticket_id='.$ticket_id.'#note-'.$counter);
echo '<a id="note-'.$counter.'"> </a><h4>' . sprintf($plugin->get_lang('UpdatedByX'), $message['user_created']).' '.$date.
' <span class="pull-right">'.$counterLink.'</span></h4>';
echo Display::div(
$entireMessage, ['class' => 'well']
);
$counter++;
} }
$subject = get_lang('ReplyShort') .": " . $firstMessage['subject']; $subject = get_lang('ReplyShort') .': '.$ticket['ticket']['subject'];
$user_admin = api_is_platform_admin();
if ($ticket['ticket']['status_id'] != 'REE' AND $ticket['ticket']['status_id'] != 'CLS') { if ($ticket['ticket']['status_id'] != TicketManager::STATUS_FORWARDED &&
if (!$isAdmin && $ticket['ticket']['status_id'] != 'XCF') { $ticket['ticket']['status_id'] != TicketManager::STATUS_CLOSE
show_form_send_message(); ) {
if (!$isAdmin && $ticket['ticket']['status_id'] != TicketManager::STATUS_UNCONFIRMED) {
show_form_send_message($ticket['ticket']);
} else { } else {
if (intval($ticket['ticket']['assigned_last_user']) == $user_id) { if (
show_form_send_message(); $ticket['ticket']['assigned_last_user'] == $user_id ||
$cheked = ""; $ticket['ticket']['sys_insert_user_id'] == $user_id ||
$isAdmin
) {
show_form_send_message($ticket['ticket']);
} }
} }
} }
Display::display_footer(); Display::display_footer();
} else { } else {
$ticket_id = $_POST['ticket_id']; $ticket_id = $_POST['ticket_id'];
$content = $_POST['content']; $content = $_POST['content'];
$subject = $_POST['subject']; $subject = $_POST['subject'];
$mensajeconfirmacion = isset($_POST['confirmation']) ? true : false; $message = isset($_POST['confirmation']) ? true : false;
$file_attachments = $_FILES; $file_attachments = $_FILES;
$user_id = api_get_user_id(); $user_id = api_get_user_id();
TicketManager::insert_message($ticket_id, $subject, $content, $file_attachments, $user_id, 'NOL', $mensajeconfirmacion);
header("location:" . api_get_self() . "?ticket_id=" . $ticket_id); TicketManager::insert_message(
$ticket_id,
$subject,
$content,
$file_attachments,
$user_id,
'NOL',
$message
);
if ($isAdmin) {
TicketManager::updateTicket(
[
'priority_id' => $_POST['priority_id'],
'status_id' => $_POST['status_id']
],
$ticket_id,
api_get_user_id()
);
}
Display::addFlash(Display::return_message(get_lang('Saved')));
header("Location:" . api_get_self() . "?ticket_id=" . $ticket_id);
exit; exit;
} }
function show_form_send_message() /**
* @param array $ticket
*/
function show_form_send_message($ticket)
{ {
global $isAdmin; global $isAdmin;
global $ticket;
global $subject; global $subject;
global $plugin; global $plugin;
Display::div('', array('span2'));
$form = new FormValidator( $form = new FormValidator(
'send_ticket', 'send_ticket',
'POST', 'POST',
api_get_self() . '?ticket_id=' . $ticket['ticket']['ticket_id'], api_get_self() . '?ticket_id=' . $ticket['ticket_id'],
'', '',
array( array(
'enctype' => 'multipart/form-data', 'enctype' => 'multipart/form-data',
'onsubmit' => 'return validate()', 'onsubmit' => 'return validate()',
'class' => 'span9 offset1 form-horizontal' 'class' => 'form-horizontal'
)
);
if ($isAdmin) {
$statusList[TicketManager::STATUS_NEW] = $plugin->get_lang('StatusNew');
$statusAttributes = array(
'id' => 'status_id',
'for' => 'status_id',
'style' => 'width: 562px;'
);
$statusList[TicketManager::STATUS_PENDING] = $plugin->get_lang('StatusPending');
$statusList[TicketManager::STATUS_UNCONFIRMED] = $plugin->get_lang('StatusUnconfirmed');
$statusList[TicketManager::STATUS_CLOSE] = $plugin->get_lang('StatusClose');
$statusList[TicketManager::STATUS_FORWARDED] = $plugin->get_lang('StatusForwarded');
$form->addElement(
'select',
'status_id',
get_lang('Status'),
$statusList,
$statusAttributes
);
$priorityList = array();
$priorityList[TicketManager::PRIORITY_NORMAL] = $plugin->get_lang('PriorityNormal');
$priorityList[TicketManager::PRIORITY_HIGH] = $plugin->get_lang('PriorityHigh');
$priorityList[TicketManager::PRIORITY_LOW] = $plugin->get_lang('PriorityLow');
$form->addElement(
'select',
'priority_id',
$plugin->get_lang('Priority'),
$priorityList,
array(
'id' => 'priority_id',
'for' => 'priority_id'
) )
); );
$form->setDefaults(
[
'priority_id' => $ticket['priority_id'],
'status_id' => $ticket['status_id'],
]
);
}
$form->addElement( $form->addElement(
'text', 'text',
'subject', 'subject',
@ -434,7 +530,7 @@ function show_form_send_message()
) )
); );
$form->addElement('hidden', 'ticket_id', $_GET['ticket_id']); $form->addElement('hidden', 'ticket_id', $ticket['ticket_id']);
$form->addHtmlEditor( $form->addHtmlEditor(
'content', 'content',

@ -34,7 +34,7 @@ class TicketPlugin extends Plugin
); );
parent::__construct( parent::__construct(
'2.0', '3.0',
'Kenny Rodas Chavez, Genesis Lopez, Francis Gonzales, Yannick Warnier, Julio Montoya', 'Kenny Rodas Chavez, Genesis Lopez, Francis Gonzales, Yannick Warnier, Julio Montoya',
$settings $settings
); );
@ -55,8 +55,6 @@ class TicketPlugin extends Plugin
public function uninstall() public function uninstall()
{ {
$tblSettings = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT); $tblSettings = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT);
$t_options = Database::get_main_table(TABLE_MAIN_SETTINGS_OPTIONS);
$t_tool = Database::get_course_table(TABLE_TOOL_LIST);
$tblTicketTicket = Database::get_main_table(TABLE_TICKET_TICKET); $tblTicketTicket = Database::get_main_table(TABLE_TICKET_TICKET);
$tblTicketStatus = Database::get_main_table(TABLE_TICKET_STATUS); $tblTicketStatus = Database::get_main_table(TABLE_TICKET_STATUS);
$tblTicketProject = Database::get_main_table(TABLE_TICKET_PROJECT); $tblTicketProject = Database::get_main_table(TABLE_TICKET_PROJECT);
@ -97,6 +95,4 @@ class TicketPlugin extends Plugin
echo "<script>location.href = '" . $_SERVER['REQUEST_URI'] . "';</script>"; echo "<script>location.href = '" . $_SERVER['REQUEST_URI'] . "';</script>";
} }
} }
} }

@ -5,10 +5,10 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();
require_once 'tutor_report.lib.php'; require_once __DIR__.'/tutor_report.lib.php';
$htmlHeadXtra[] = ' $htmlHeadXtra[] = '
<script type="text/javascript"> <script type="text/javascript">

@ -5,7 +5,7 @@
* @package chamilo.plugin.ticket * @package chamilo.plugin.ticket
*/ */
require_once '../config.php'; require_once __DIR__.'/../config.php';
$plugin = TicketPlugin::create(); $plugin = TicketPlugin::create();
$work_id = intval($_POST['work_id']); $work_id = intval($_POST['work_id']);

Loading…
Cancel
Save