Post

SupportSuite – KB bug fixed

I found an issue in SupportSuite (3.0.0.32) where if a client (user) did a KB search they would get the subject line and first 255 characters of each result match – some of these matches would be PRIVATE or DRAFT knowledgebase articles.

I guess this is a bug, but based on the responses (timeframe to even review reported issues) to bugs I reported to Kayako recently, I decided to fix it myself…

Here is what I did :

MODIFIED /modules/core/client_search.php
In the section commented as : // ===== SEARCH ALL MODULES ========

CHANGED

if ($module->isRegistered(MODULE_KNOWLEDGEBASE)) { $_searchresults = searchKnowledgebase($_POST[“searchquery”]); }

TO

if ($module->isRegistered(MODULE_KNOWLEDGEBASE)) { $_searchresults = searchClientKnowledgebase($_POST[“searchquery”]); }

also in the else if block directly below :

CHANGE

} else if ($_POST[“searchtype”] == “knowledgebase” && $module->isRegistered(MODULE_KNOWLEDGEBASE)) { $_searchresults = searchKnowledgebase($_POST[“searchquery”]);

TO } else if ($_POST[“searchtype”] == “knowledgebase” && $module->isRegistered(MODULE_KNOWLEDGEBASE)) { $_searchresults = searchClientKnowledgebase($_POST[“searchquery”]);

So, you’ve now forced the client search functions to use a new function (called seachClientKnowledgebase)
that we will now define…

  • Open the file /modules/core/functions_clientsearch.php

  • Copy the whole function named searchKnowledgebase and paste another copy into the same file.

  • Now rename the function to searchClientKnowledgebase.

In the newly pasted and renamed function look for the section starting with // ========BUILD THE CATEGORY LIST FOR THIS GROUP =====

ADD

// KH get the status of each article and only use the ‘published’ ones $_finalpublishedarticlelist = array(); $dbCore->query(“SELECT * FROM `”. TABLE_PREFIX .”kbarticles` WHERE
(line wrapped) kbarticleid IN (“. buildIN($_finalkbarticleidlist) .”);”); while ($dbCore->nextRecord()) { if ($dbCore->Record[“articlestatus”] == “published”) { $_finalpublishedarticlelist[] = $dbCore->Record[“kbarticleid”]; } }

DIRECTLY AFTER

while ($dbCore->nextRecord()) { if ($dbCore->Record[“categorytype”] == SWIFTPUBLIC) { $_finalkbarticleidlist[] = $dbCore->Record[“kbarticleid”]; } }

Then modify the next block of code to read as follows :

if (!count($_finalpublishedarticlelist)) { return $_queryresult; }

Alternatively simply make a backup of your existing files :

  • /modules/core/functions_clientsearch.php
  • /modules/core/client_search.php

and replace them with the files in php_mods.zip

This post is licensed under CC BY 4.0 by the author.