From b26e9be36fda9a0b9cd28d42179e95e06db60d6e Mon Sep 17 00:00:00 2001 From: lmarcouiller Date: Wed, 15 Sep 2021 15:36:57 +0200 Subject: [PATCH 1/2] Close #18677 : new show articles of KM --- htdocs/core/ajax/fetchKnowledgeRecord.php | 80 +++++++++++++++++++++ htdocs/core/class/html.formticket.class.php | 59 +++++++++++++++ htdocs/langs/en_US/ticket.lang | 3 +- htdocs/langs/fr_FR/ticket.lang | 1 + 4 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 htdocs/core/ajax/fetchKnowledgeRecord.php diff --git a/htdocs/core/ajax/fetchKnowledgeRecord.php b/htdocs/core/ajax/fetchKnowledgeRecord.php new file mode 100644 index 00000000000..a1f8ae6a1e9 --- /dev/null +++ b/htdocs/core/ajax/fetchKnowledgeRecord.php @@ -0,0 +1,80 @@ +. + */ + +/** + * \file /htdocs/core/ajax/fetchKnowledgeRecord.php + * \brief File to make Ajax action on Knowledge Management + */ + +if (!defined('NOTOKENRENEWAL')) { + define('NOTOKENRENEWAL', '1'); // Disables token renewal +} +if (!defined('NOREQUIREMENU')) { + define('NOREQUIREMENU', '1'); +} +if (!defined('NOREQUIREHTML')) { + define('NOREQUIREHTML', '1'); +} +if (!defined('NOREQUIREAJAX')) { + define('NOREQUIREAJAX', '1'); +} +if (!defined('NOREQUIRESOC')) { + define('NOREQUIRESOC', '1'); +} + +include '../../main.inc.php'; + +$action = GETPOST('action', 'aZ09'); +$idticketgroup = GETPOST('idticketgroup', 'aZ09'); +$idticketgroup = GETPOST('idticketgroup', 'aZ09'); +$lang = GETPOST('lang', 'aZ09'); + +/* + * Actions + */ + +// None + + +/* + * View + */ + +if ($action == "getKnowledgeRecord") { + $response = ''; + $sql = "SELECT kr.rowid, kr.ref, kr.question, kr.answer,l.url,ctc.code"; + $sql .= " FROM ".MAIN_DB_PREFIX."links as l"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."knowledgemanagement_knowledgerecord as kr ON kr.rowid = l.objectid"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."c_ticket_category as ctc ON ctc.rowid = kr.fk_c_ticket_category"; + $sql .= " WHERE ctc.code = '".$db->escape($idticketgroup)."'"; + $sql .= " AND ctc.active = 1 AND ctc.public = 1 AND (kr.lang = '".$db->escape($lang)."' OR kr.lang = 0)"; + $sql .= " AND kr.status = 1"; + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + $response = array(); + while ($i < $num) { + $obj = $db->fetch_object($resql); + $response[] = array('title'=>$obj->question,'ref'=>$obj->url,'answer'=>$obj->answer,'url'=>$obj->url); + $i++; + } + } else { + dol_print_error($db); + } + $response =json_encode($response); + echo $response; +} diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index d486805cf46..496778525d1 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -243,6 +243,65 @@ class FormTicket } } + if ($conf->knowledgemanagement->enabled) { + // KM Articles + print ''; + print ' + '."\n"; + } + // MESSAGE $msg = GETPOSTISSET('message') ? GETPOST('message', 'restricthtml') : ''; print ''; diff --git a/htdocs/langs/en_US/ticket.lang b/htdocs/langs/en_US/ticket.lang index 6243e98fdc9..cad00ad21f9 100644 --- a/htdocs/langs/en_US/ticket.lang +++ b/htdocs/langs/en_US/ticket.lang @@ -318,4 +318,5 @@ BoxNoTicketLastXDays=No new tickets the last %s days BoxNumberOfTicketByDay=Number of new tickets by day BoxNewTicketVSClose=Number of today's new tickets versus today's closed tickets TicketCreatedToday=Ticket created today -TicketClosedToday=Ticket closed today \ No newline at end of file +TicketClosedToday=Ticket closed today +KMFoundForTicketGroup=We found topics and FAQs that may answers your question, thanks to check them before submitting the ticket diff --git a/htdocs/langs/fr_FR/ticket.lang b/htdocs/langs/fr_FR/ticket.lang index b166e963caf..4b777ff33ca 100644 --- a/htdocs/langs/fr_FR/ticket.lang +++ b/htdocs/langs/fr_FR/ticket.lang @@ -319,3 +319,4 @@ BoxNumberOfTicketByDay=Nombre de nouveaux tickets par jour BoxNewTicketVSClose=Nombre de nouveaux tickets aujourd’hui par rapport aux tickets fermés aujourd’hui TicketCreatedToday=Ticket créé aujourd'hui TicketClosedToday=Ticket fermé aujourd'hui +KMFoundForTicketGroup=Nous avons trouvé des sujets et des FAQ susceptibles de répondre à votre question, merci de les vérifier avant de soumettre le ticket From 04a024570c99432b09a8245bfd88505769447d0e Mon Sep 17 00:00:00 2001 From: lmarcouiller Date: Thu, 16 Sep 2021 13:19:43 +0200 Subject: [PATCH 2/2] update fetchKnowledge and html.formticket --- htdocs/core/ajax/fetchKnowledgeRecord.php | 50 ++++++++++++++++++--- htdocs/core/class/html.formticket.class.php | 4 +- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/htdocs/core/ajax/fetchKnowledgeRecord.php b/htdocs/core/ajax/fetchKnowledgeRecord.php index a1f8ae6a1e9..00294d1b3c9 100644 --- a/htdocs/core/ajax/fetchKnowledgeRecord.php +++ b/htdocs/core/ajax/fetchKnowledgeRecord.php @@ -22,9 +22,6 @@ if (!defined('NOTOKENRENEWAL')) { define('NOTOKENRENEWAL', '1'); // Disables token renewal } -if (!defined('NOREQUIREMENU')) { - define('NOREQUIREMENU', '1'); -} if (!defined('NOREQUIREHTML')) { define('NOREQUIREHTML', '1'); } @@ -34,13 +31,30 @@ if (!defined('NOREQUIREAJAX')) { if (!defined('NOREQUIRESOC')) { define('NOREQUIRESOC', '1'); } - +if (!defined('NOCSRFCHECK')) { + define('NOCSRFCHECK', '1'); +} +// Do not check anti CSRF attack test +if (!defined('NOREQUIREMENU')) { + define('NOREQUIREMENU', '1'); +} +// If there is no need to load and show top and left menu +if (!defined("NOLOGIN")) { + define("NOLOGIN", '1'); +} +if (!defined('NOIPCHECK')) { + define('NOIPCHECK', '1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip +} +if (!defined('NOBROWSERNOTIF')) { + define('NOBROWSERNOTIF', '1'); +} include '../../main.inc.php'; $action = GETPOST('action', 'aZ09'); $idticketgroup = GETPOST('idticketgroup', 'aZ09'); $idticketgroup = GETPOST('idticketgroup', 'aZ09'); $lang = GETPOST('lang', 'aZ09'); +$popupurl = GETPOST('popupurl', 'bool'); /* * Actions @@ -69,7 +83,33 @@ if ($action == "getKnowledgeRecord") { $response = array(); while ($i < $num) { $obj = $db->fetch_object($resql); - $response[] = array('title'=>$obj->question,'ref'=>$obj->url,'answer'=>$obj->answer,'url'=>$obj->url); + if ($popupurl == "false") { + $url = "url. "\" target=\"_blank\">".$obj->url.""; + $response[] = array('title'=>$obj->question,'ref'=>$obj->url,'answer'=>$obj->answer,'url'=>$url); + } else { + $name = $obj->ref; + $buttonstring = $obj->url; + $url = $obj->url; + $urltoprint = ''.$buttonstring.''; + $urltoprint .= ''; + $urltoprint .= ''; + $response[] = array('title'=>$obj->question,'ref'=>$obj->url,'answer'=>$obj->answer,'url'=>$urltoprint); + } $i++; } } else { diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index 496778525d1..a4774898018 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -258,7 +258,7 @@ class FormTicket if (idgroupticket != "") { $.ajax({ url: \''.DOL_URL_ROOT.'/core/ajax/fetchKnowledgeRecord.php\', - data: { action: \'getKnowledgeRecord\', idticketgroup: idgroupticket, token: \''.newToken().'\', lang:\''.$langs->defaultlang.'\'}, + data: { action: \'getKnowledgeRecord\', idticketgroup: idgroupticket, token: \''.newToken().'\', lang:\''.$langs->defaultlang.'\', popupurl:false}, type: \'GET\', success: function(response) { var urllist = \'\'; @@ -266,7 +266,7 @@ class FormTicket response = JSON.parse(response) for (key in response) { console.log(response[key]) - urllist += "
  • " + response[key].title + ": " + \'"+response[key].url+"
  • "; + urllist += "
  • " + response[key].title + ": " +response[key].url+"
  • "; } if (urllist != "") { console.log(urllist)