Skip to content

Commit 6d40f09

Browse files
committed
Fix bug when multiple keywords are given
1 parent 824c5ac commit 6d40f09

File tree

5 files changed

+169
-122
lines changed

5 files changed

+169
-122
lines changed

Config/module.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<descriptive locale="en_US">
88
<title>Keyword</title>
99
</descriptive>
10-
<version>2.4.0</version>
10+
<version>2.4.1</version>
1111
<author>
1212
<name>Michaël Espeche</name>
1313
<email>mespeche@openstudio.fr</email>

Loop/KeywordCategory.php

+42-30
Original file line numberDiff line numberDiff line change
@@ -104,44 +104,56 @@ public function buildModelCriteria()
104104
$keywordListId = implode(',', $keywordListId);
105105

106106
foreach ($results as $result) {
107-
// If any product is associated with keyword
108-
if (true === $result->getCategories()->isEmpty()) {
109-
return null;
110-
}
111-
112107
foreach ($result->getCategories() as $category) {
113108
$categoryIds[] = $category->getId();
114109
}
115110
}
116111

117112
$categoryIds = implode(',', $categoryIds);
118113

119-
$join = new Join();
120-
$join->addExplicitCondition(CategoryTableMap::TABLE_NAME, 'ID', 'category', CategoryAssociatedKeywordTableMap::TABLE_NAME, 'category_id', 'category_associated_keyword');
121-
$join->setJoinType(Criteria::INNER_JOIN);
122-
123-
$search->addJoinObject($join, 'category_associated_keyword_join');
124-
$search->addJoinCondition('category_associated_keyword_join','category_associated_keyword.keyword_id IN ('.$keywordListId.')');
125-
$search->addJoinCondition('category_associated_keyword_join','category_associated_keyword.category_id IN ('.$categoryIds.')');
126-
$search->withColumn('category_associated_keyword.position', 'category_position');
127-
128-
$orders = $this->getAssociation_order();
129-
130-
foreach ($orders as $order) {
131-
switch ($order) {
132-
case "manual":
133-
$search->clearOrderByColumns();
134-
$search->addAscendingOrderByColumn('category_position');
135-
break;
136-
case "manual_reverse":
137-
$search->clearOrderByColumns();
138-
$search->addDescendingOrderByColumn('category_position');
139-
break;
140-
case "random":
141-
$search->clearOrderByColumns();
142-
$search->addAscendingOrderByColumn('RAND()');
143-
break(2);
114+
if ($categoryIds) {
115+
$join = new Join();
116+
$join->addExplicitCondition(
117+
CategoryTableMap::TABLE_NAME,
118+
'ID',
119+
'category',
120+
CategoryAssociatedKeywordTableMap::TABLE_NAME,
121+
'category_id',
122+
'category_associated_keyword'
123+
);
124+
$join->setJoinType(Criteria::INNER_JOIN);
125+
126+
$search->addJoinObject($join, 'category_associated_keyword_join');
127+
$search->addJoinCondition(
128+
'category_associated_keyword_join',
129+
'category_associated_keyword.keyword_id IN (' . $keywordListId . ')'
130+
);
131+
$search->addJoinCondition(
132+
'category_associated_keyword_join',
133+
'category_associated_keyword.category_id IN (' . $categoryIds . ')'
134+
);
135+
$search->withColumn('category_associated_keyword.position', 'category_position');
136+
137+
$orders = $this->getAssociation_order();
138+
139+
foreach ($orders as $order) {
140+
switch ($order) {
141+
case "manual":
142+
$search->clearOrderByColumns();
143+
$search->addAscendingOrderByColumn('category_position');
144+
break;
145+
case "manual_reverse":
146+
$search->clearOrderByColumns();
147+
$search->addDescendingOrderByColumn('category_position');
148+
break;
149+
case "random":
150+
$search->clearOrderByColumns();
151+
$search->addAscendingOrderByColumn('RAND()');
152+
break(2);
153+
}
144154
}
155+
} else {
156+
return null;
145157
}
146158

147159
return $search;

Loop/KeywordContent.php

+42-30
Original file line numberDiff line numberDiff line change
@@ -103,44 +103,56 @@ public function buildModelCriteria()
103103
$keywordListId = implode(',', $keywordListId);
104104

105105
foreach ($results as $result) {
106-
// If any content is associated with keyword
107-
if (true === $result->getContents()->isEmpty()) {
108-
return null;
109-
}
110-
111106
foreach ($result->getContents() as $content) {
112107
$contentIds[] = $content->getId();
113108
}
114109
}
115110

116111
$contentIds = implode(',', $contentIds);
117112

118-
$join = new Join();
119-
$join->addExplicitCondition(ContentTableMap::TABLE_NAME, 'ID', 'content', ContentAssociatedKeywordTableMap::TABLE_NAME, 'content_id', 'content_associated_keyword');
120-
$join->setJoinType(Criteria::INNER_JOIN);
121-
122-
$search->addJoinObject($join, 'content_associated_keyword_join');
123-
$search->addJoinCondition('content_associated_keyword_join','content_associated_keyword.keyword_id IN ('.$keywordListId.')');
124-
$search->addJoinCondition('content_associated_keyword_join','content_associated_keyword.content_id IN ('.$contentIds.')');
125-
$search->withColumn('content_associated_keyword.position', 'content_position');
126-
127-
$orders = $this->getAssociation_order();
128-
129-
foreach ($orders as $order) {
130-
switch ($order) {
131-
case "manual":
132-
$search->clearOrderByColumns();
133-
$search->addAscendingOrderByColumn('content_position');
134-
break;
135-
case "manual_reverse":
136-
$search->clearOrderByColumns();
137-
$search->addDescendingOrderByColumn('content_position');
138-
break;
139-
case "random":
140-
$search->clearOrderByColumns();
141-
$search->addAscendingOrderByColumn('RAND()');
142-
break(2);
113+
if ($contentIds) {
114+
$join = new Join();
115+
$join->addExplicitCondition(
116+
ContentTableMap::TABLE_NAME,
117+
'ID',
118+
'content',
119+
ContentAssociatedKeywordTableMap::TABLE_NAME,
120+
'content_id',
121+
'content_associated_keyword'
122+
);
123+
$join->setJoinType(Criteria::INNER_JOIN);
124+
125+
$search->addJoinObject($join, 'content_associated_keyword_join');
126+
$search->addJoinCondition(
127+
'content_associated_keyword_join',
128+
'content_associated_keyword.keyword_id IN (' . $keywordListId . ')'
129+
);
130+
$search->addJoinCondition(
131+
'content_associated_keyword_join',
132+
'content_associated_keyword.content_id IN (' . $contentIds . ')'
133+
);
134+
$search->withColumn('content_associated_keyword.position', 'content_position');
135+
136+
$orders = $this->getAssociation_order();
137+
138+
foreach ($orders as $order) {
139+
switch ($order) {
140+
case "manual":
141+
$search->clearOrderByColumns();
142+
$search->addAscendingOrderByColumn('content_position');
143+
break;
144+
case "manual_reverse":
145+
$search->clearOrderByColumns();
146+
$search->addDescendingOrderByColumn('content_position');
147+
break;
148+
case "random":
149+
$search->clearOrderByColumns();
150+
$search->addAscendingOrderByColumn('RAND()');
151+
break(2);
152+
}
143153
}
154+
} else {
155+
return null;
144156
}
145157

146158
return $search;

Loop/KeywordFolder.php

+42-31
Original file line numberDiff line numberDiff line change
@@ -103,45 +103,56 @@ public function buildModelCriteria()
103103
$keywordListId = implode(',', $keywordListId);
104104

105105
foreach ($results as $result) {
106-
107-
// If any content is associated with keyword
108-
if (true === $result->getFolders()->isEmpty()) {
109-
return null;
110-
}
111-
112106
foreach ($result->getFolders() as $folder) {
113107
$folderIds[] = $folder->getId();
114108
}
115109
}
116110

117111
$folderIds = implode(',', $folderIds);
118112

119-
$join = new Join();
120-
$join->addExplicitCondition(FolderTableMap::TABLE_NAME, 'ID', 'folder', FolderAssociatedKeywordTableMap::TABLE_NAME, 'folder_id', 'folder_associated_keyword');
121-
$join->setJoinType(Criteria::INNER_JOIN);
122-
123-
$search->addJoinObject($join, 'folder_associated_keyword_join');
124-
$search->addJoinCondition('folder_associated_keyword_join','folder_associated_keyword.keyword_id IN ('.$keywordListId.')');
125-
$search->addJoinCondition('folder_associated_keyword_join','folder_associated_keyword.folder_id IN ('.$folderIds.')');
126-
$search->withColumn('folder_associated_keyword.position', 'folder_position');
127-
128-
$orders = $this->getAssociation_order();
129-
130-
foreach ($orders as $order) {
131-
switch ($order) {
132-
case "manual":
133-
$search->clearOrderByColumns();
134-
$search->addAscendingOrderByColumn('folder_position');
135-
break;
136-
case "manual_reverse":
137-
$search->clearOrderByColumns();
138-
$search->addDescendingOrderByColumn('folder_position');
139-
break;
140-
case "random":
141-
$search->clearOrderByColumns();
142-
$search->addAscendingOrderByColumn('RAND()');
143-
break(2);
113+
if ($folderIds) {
114+
$join = new Join();
115+
$join->addExplicitCondition(
116+
FolderTableMap::TABLE_NAME,
117+
'ID',
118+
'folder',
119+
FolderAssociatedKeywordTableMap::TABLE_NAME,
120+
'folder_id',
121+
'folder_associated_keyword'
122+
);
123+
$join->setJoinType(Criteria::INNER_JOIN);
124+
125+
$search->addJoinObject($join, 'folder_associated_keyword_join');
126+
$search->addJoinCondition(
127+
'folder_associated_keyword_join',
128+
'folder_associated_keyword.keyword_id IN (' . $keywordListId . ')'
129+
);
130+
$search->addJoinCondition(
131+
'folder_associated_keyword_join',
132+
'folder_associated_keyword.folder_id IN (' . $folderIds . ')'
133+
);
134+
$search->withColumn('folder_associated_keyword.position', 'folder_position');
135+
136+
$orders = $this->getAssociation_order();
137+
138+
foreach ($orders as $order) {
139+
switch ($order) {
140+
case "manual":
141+
$search->clearOrderByColumns();
142+
$search->addAscendingOrderByColumn('folder_position');
143+
break;
144+
case "manual_reverse":
145+
$search->clearOrderByColumns();
146+
$search->addDescendingOrderByColumn('folder_position');
147+
break;
148+
case "random":
149+
$search->clearOrderByColumns();
150+
$search->addAscendingOrderByColumn('RAND()');
151+
break(2);
152+
}
144153
}
154+
} else {
155+
return null;
145156
}
146157

147158
return $search;

Loop/KeywordProduct.php

+42-30
Original file line numberDiff line numberDiff line change
@@ -105,44 +105,56 @@ public function buildModelCriteria()
105105
$keywordListId = implode(',', $keywordListId);
106106

107107
foreach ($results as $result) {
108-
// If any content is associated with keyword
109-
if (true === $result->getProducts()->isEmpty()) {
110-
return null;
111-
}
112-
113108
foreach ($result->getProducts() as $product) {
114109
$productIds[] = $product->getId();
115110
}
116111
}
117112

118113
$productIds = implode(',', $productIds);
119114

120-
$join = new Join();
121-
$join->addExplicitCondition(ProductTableMap::TABLE_NAME, 'ID', 'product', ProductAssociatedKeywordTableMap::TABLE_NAME, 'product_id', 'product_associated_keyword');
122-
$join->setJoinType(Criteria::INNER_JOIN);
123-
124-
$search->addJoinObject($join, 'product_associated_keyword_join');
125-
$search->addJoinCondition('category_associated_keyword_join','category_associated_keyword.keyword_id IN ('.$keywordListId.')');
126-
$search->addJoinCondition('product_associated_keyword_join','product_associated_keyword.product_id IN ('.$productIds.')');
127-
$search->withColumn('product_associated_keyword.position', 'product_position');
128-
129-
$orders = $this->getAssociation_order();
130-
131-
foreach ($orders as $order) {
132-
switch ($order) {
133-
case "manual":
134-
$search->clearOrderByColumns();
135-
$search->addAscendingOrderByColumn('product_position');
136-
break;
137-
case "manual_reverse":
138-
$search->clearOrderByColumns();
139-
$search->addDescendingOrderByColumn('product_position');
140-
break;
141-
case "random":
142-
$search->clearOrderByColumns();
143-
$search->addAscendingOrderByColumn('RAND()');
144-
break(2);
115+
if ($productIds) {
116+
$join = new Join();
117+
$join->addExplicitCondition(
118+
ProductTableMap::TABLE_NAME,
119+
'ID',
120+
'product',
121+
ProductAssociatedKeywordTableMap::TABLE_NAME,
122+
'product_id',
123+
'product_associated_keyword'
124+
);
125+
$join->setJoinType(Criteria::INNER_JOIN);
126+
127+
$search->addJoinObject($join, 'product_associated_keyword_join');
128+
$search->addJoinCondition(
129+
'category_associated_keyword_join',
130+
'category_associated_keyword.keyword_id IN (' . $keywordListId . ')'
131+
);
132+
$search->addJoinCondition(
133+
'product_associated_keyword_join',
134+
'product_associated_keyword.product_id IN (' . $productIds . ')'
135+
);
136+
$search->withColumn('product_associated_keyword.position', 'product_position');
137+
138+
$orders = $this->getAssociation_order();
139+
140+
foreach ($orders as $order) {
141+
switch ($order) {
142+
case "manual":
143+
$search->clearOrderByColumns();
144+
$search->addAscendingOrderByColumn('product_position');
145+
break;
146+
case "manual_reverse":
147+
$search->clearOrderByColumns();
148+
$search->addDescendingOrderByColumn('product_position');
149+
break;
150+
case "random":
151+
$search->clearOrderByColumns();
152+
$search->addAscendingOrderByColumn('RAND()');
153+
break(2);
154+
}
145155
}
156+
} else {
157+
return null;
146158
}
147159

148160
return $search;

0 commit comments

Comments
 (0)