diff --git a/htdocs/knowledgemanagement/knowledgerecord_list.php b/htdocs/knowledgemanagement/knowledgerecord_list.php index daa0d7b148d..d9fc25fa1fe 100644 --- a/htdocs/knowledgemanagement/knowledgerecord_list.php +++ b/htdocs/knowledgemanagement/knowledgerecord_list.php @@ -246,9 +246,6 @@ $sql .= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; } -if (!empty($searchCategoryKnowledgemanagementList) || !empty($catid)) { - $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_knowledgemanagement as ck ON t.rowid = ck.fk_knowledgemanagement"; // We'll need this table joined to the select in order to filter by categ -} // Add table from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook @@ -287,29 +284,29 @@ foreach ($search as $key => $val) { } } } -//Search for tag/category -$searchCategoryKnowledgemanagementSqlList = array(); -if ($searchCategoryKnowledgemanagementOperator == 1) { + +// Search for tag/category ($searchCategoryKnowledgemanagementList is an array of ID) +if (!empty($searchCategoryKnowledgemanagementList)) { + $searchCategoryKnowledgemanagementSqlList = array(); + $listofcategoryid = ''; foreach ($searchCategoryKnowledgemanagementList as $searchCategoryKnowledgemanagement) { if (intval($searchCategoryKnowledgemanagement) == -2) { - $searchCategoryKnowledgemanagementSqlList[] = "ck.fk_categorie IS NULL"; + $searchCategoryKnowledgemanagementSqlList[] = "NOT EXISTS (SELECT ck.fk_knowledgemanagement FROM ".MAIN_DB_PREFIX."categorie_knowledgemanagement as ck WHERE t.rowid = ck.fk_knowledgemanagement)"; } elseif (intval($searchCategoryKnowledgemanagement) > 0) { - $searchCategoryKnowledgemanagementSqlList[] = "ck.fk_categorie = ".$db->escape($searchCategoryKnowledgemanagement); + $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryKnowledgemanagement); } } - if (!empty($searchCategoryKnowledgemanagementSqlList)) { - $sql .= " AND (".implode(' OR ', $searchCategoryKnowledgemanagementSqlList).")"; + if ($listofcategoryid) { + $searchCategoryKnowledgemanagementSqlList[] = " EXISTS (SELECT ck.fk_knowledgemanagement FROM ".MAIN_DB_PREFIX."categorie_knowledgemanagement as ck WHERE t.rowid = ck.fk_knowledgemanagement AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))"; } -} else { - foreach ($searchCategoryKnowledgemanagementList as $searchCategoryKnowledgemanagement) { - if (intval($searchCategoryKnowledgemanagement) == -2) { - $searchCategoryKnowledgemanagementSqlList[] = "ck.fk_categorie IS NULL"; - } elseif (intval($searchCategoryKnowledgemanagement) > 0) { - $searchCategoryKnowledgemanagementSqlList[] = "t.rowid IN (SELECT fk_knowledgemanagement FROM ".MAIN_DB_PREFIX."categorie_knowledgemanagement WHERE fk_categorie = ".((int) $searchCategoryKnowledgemanagement).")"; + if ($searchCategoryKnowledgemanagementOperator == 1) { + if (!empty($searchCategoryKnowledgemanagementSqlList)) { + $sql .= " AND (".implode(' OR ', $searchCategoryKnowledgemanagementSqlList).")"; + } + } else { + if (!empty($searchCategoryKnowledgemanagementSqlList)) { + $sql .= " AND (".implode(' AND ', $searchCategoryKnowledgemanagementSqlList).")"; } - } - if (!empty($searchCategoryKnowledgemanagementSqlList)) { - $sql .= " AND (".implode(' AND ', $searchCategoryKnowledgemanagementSqlList).")"; } }