@@ -322,7 +322,7 @@ discard block |
||
| 322 | 322 | |
| 323 | 323 | /** |
| 324 | 324 | * NOTE: this will break if applied to something that's not a SiteTree subclass. |
| 325 | - * @param DataList|PaginatedList $matches |
|
| 325 | + * @param SS_List $matches |
|
| 326 | 326 | * @param array $facet |
| 327 | 327 | * @param int $typeID |
| 328 | 328 | */ |
@@ -359,7 +359,7 @@ discard block |
||
| 359 | 359 | |
| 360 | 360 | /** |
| 361 | 361 | * Builds facets from all attributes present in the data set. |
| 362 | - * @param DataList|PaginatedList $matches |
|
| 362 | + * @param SS_List $matches |
|
| 363 | 363 | * @return array |
| 364 | 364 | */ |
| 365 | 365 | protected function buildAllAttributeFacets($matches) { |
@@ -59,7 +59,7 @@ discard block |
||
| 59 | 59 | * @param DataObject|string $sing - just a singleton object we can get information off of |
| 60 | 60 | * @return DataList |
| 61 | 61 | */ |
| 62 | - public function addFiltersToDataList($list, array $filters, $sing=null) { |
|
| 62 | + public function addFiltersToDataList($list, array $filters, $sing = null) { |
|
| 63 | 63 | if (!$sing) $sing = singleton($list->dataClass()); |
| 64 | 64 | if (is_string($sing)) $sing = singleton($sing); |
| 65 | 65 | |
@@ -148,7 +148,7 @@ discard block |
||
| 148 | 148 | } |
| 149 | 149 | |
| 150 | 150 | if (empty($facets[$field]['Source'])) $facets[$field]['Source'] = $field; |
| 151 | - if (empty($facets[$field]['Type'])) $facets[$field]['Type'] = ShopSearch::FACET_TYPE_LINK; |
|
| 151 | + if (empty($facets[$field]['Type'])) $facets[$field]['Type'] = ShopSearch::FACET_TYPE_LINK; |
|
| 152 | 152 | |
| 153 | 153 | if (empty($facets[$field]['Values'])) { |
| 154 | 154 | $facets[$field]['Values'] = array(); |
@@ -197,7 +197,7 @@ discard block |
||
| 197 | 197 | * @param bool $autoFacetAttributes [optional] |
| 198 | 198 | * @return ArrayList |
| 199 | 199 | */ |
| 200 | - public function buildFacets(SS_List $matches, array $facetSpec, $autoFacetAttributes=false) { |
|
| 200 | + public function buildFacets(SS_List $matches, array $facetSpec, $autoFacetAttributes = false) { |
|
| 201 | 201 | $facets = $this->expandFacetSpec($facetSpec); |
| 202 | 202 | if (!$autoFacetAttributes && (empty($facets) || !$matches || !$matches->count())) return new ArrayList(); |
| 203 | 203 | $fasterMethod = (bool)$this->config()->faster_faceting; |
@@ -340,9 +340,9 @@ discard block |
||
| 340 | 340 | $q = $q->setSelect(array()) |
| 341 | 341 | ->selectField('"ProductAttributeValue"."ID"', 'Value') |
| 342 | 342 | ->selectField('"ProductAttributeValue"."Value"', 'Label') |
| 343 | - ->selectField('count(distinct '.$baseTable.'."ID")', 'Count') |
|
| 343 | + ->selectField('count(distinct ' . $baseTable . '."ID")', 'Count') |
|
| 344 | 344 | ->selectField('"ProductAttributeValue"."Sort"') |
| 345 | - ->addInnerJoin('Product_StaticAttributeValues', $baseTable.'."ID" = "Product_StaticAttributeValues"."ProductID"') |
|
| 345 | + ->addInnerJoin('Product_StaticAttributeValues', $baseTable . '."ID" = "Product_StaticAttributeValues"."ProductID"') |
|
| 346 | 346 | ->addInnerJoin('ProductAttributeValue', '"Product_StaticAttributeValues"."ProductAttributeValueID" = "ProductAttributeValue"."ID"') |
| 347 | 347 | ->addWhere(sprintf("\"ProductAttributeValue\".\"TypeID\" = '%d'", $typeID)) |
| 348 | 348 | ->setOrderBy('"ProductAttributeValue"."Sort"', 'ASC') |
@@ -352,7 +352,7 @@ discard block |
||
| 352 | 352 | |
| 353 | 353 | $facet['Values'] = array(); |
| 354 | 354 | foreach ($q as $row) { |
| 355 | - $facet['Values'][ $row['Value'] ] = new ArrayData($row); |
|
| 355 | + $facet['Values'][$row['Value']] = new ArrayData($row); |
|
| 356 | 356 | } |
| 357 | 357 | } |
| 358 | 358 | |
@@ -374,11 +374,11 @@ discard block |
||
| 374 | 374 | ->selectField('"ProductAttributeType"."Label"', 'TypeLabel') |
| 375 | 375 | ->selectField('"ProductAttributeValue"."ID"', 'Value') |
| 376 | 376 | ->selectField('"ProductAttributeValue"."Value"', 'Label') |
| 377 | - ->selectField('count(distinct '.$baseTable.'."ID")', 'Count') |
|
| 377 | + ->selectField('count(distinct ' . $baseTable . '."ID")', 'Count') |
|
| 378 | 378 | ->selectField('"ProductAttributeValue"."Sort"') |
| 379 | - ->addInnerJoin('Product_StaticAttributeTypes', $baseTable.'."ID" = "Product_StaticAttributeTypes"."ProductID"') |
|
| 379 | + ->addInnerJoin('Product_StaticAttributeTypes', $baseTable . '."ID" = "Product_StaticAttributeTypes"."ProductID"') |
|
| 380 | 380 | ->addInnerJoin('ProductAttributeType', '"Product_StaticAttributeTypes"."ProductAttributeTypeID" = "ProductAttributeType"."ID"') |
| 381 | - ->addInnerJoin('Product_StaticAttributeValues', $baseTable.'."ID" = "Product_StaticAttributeValues"."ProductID"') |
|
| 381 | + ->addInnerJoin('Product_StaticAttributeValues', $baseTable . '."ID" = "Product_StaticAttributeValues"."ProductID"') |
|
| 382 | 382 | ->addInnerJoin('ProductAttributeValue', '"Product_StaticAttributeValues"."ProductAttributeValueID" = "ProductAttributeValue"."ID"' |
| 383 | 383 | . ' AND "ProductAttributeValue"."TypeID" = "ProductAttributeType"."ID"') |
| 384 | 384 | ->setOrderBy(array( |
@@ -395,11 +395,11 @@ discard block |
||
| 395 | 395 | $curFacet = null; |
| 396 | 396 | foreach ($q as $row) { |
| 397 | 397 | if ($curType != $row['TypeID']) { |
| 398 | - if ($curType > 0) $facets['ATT'.$curType] = $curFacet; |
|
| 398 | + if ($curType > 0) $facets['ATT' . $curType] = $curFacet; |
|
| 399 | 399 | $curType = $row['TypeID']; |
| 400 | 400 | $curFacet = array( |
| 401 | 401 | 'Label' => $row['TypeLabel'], |
| 402 | - 'Source' => 'ATT'.$curType, |
|
| 402 | + 'Source' => 'ATT' . $curType, |
|
| 403 | 403 | 'Type' => ShopSearch::FACET_TYPE_LINK, |
| 404 | 404 | 'Values' => array(), |
| 405 | 405 | ); |
@@ -407,10 +407,10 @@ discard block |
||
| 407 | 407 | |
| 408 | 408 | unset($row['TypeID']); |
| 409 | 409 | unset($row['TypeLabel']); |
| 410 | - $curFacet['Values'][ $row['Value'] ] = new ArrayData($row); |
|
| 410 | + $curFacet['Values'][$row['Value']] = new ArrayData($row); |
|
| 411 | 411 | } |
| 412 | 412 | |
| 413 | - if ($curType > 0) $facets['ATT'.$curType] = $curFacet; |
|
| 413 | + if ($curType > 0) $facets['ATT' . $curType] = $curFacet; |
|
| 414 | 414 | return $facets; |
| 415 | 415 | } |
| 416 | 416 | |
@@ -532,7 +532,7 @@ discard block |
||
| 532 | 532 | * @param bool $filterOnlyLeaves [optional] |
| 533 | 533 | * @return bool - true if any of the children are true, false if all children are false |
| 534 | 534 | */ |
| 535 | - protected function updateCheckboxFacetState(ArrayList $values, array $filterVals, $filterOnlyLeaves=false) { |
|
| 535 | + protected function updateCheckboxFacetState(ArrayList $values, array $filterVals, $filterOnlyLeaves = false) { |
|
| 536 | 536 | $out = false; |
| 537 | 537 | |
| 538 | 538 | foreach ($values as $value) { |
@@ -576,14 +576,14 @@ discard block |
||
| 576 | 576 | |
| 577 | 577 | // Look for the most recent parent that matches the beginning of this one |
| 578 | 578 | while (count($parentStack) > 0) { |
| 579 | - $curParent = $parentStack[ count($parentStack)-1 ]; |
|
| 579 | + $curParent = $parentStack[count($parentStack) - 1]; |
|
| 580 | 580 | if (strpos($value->Label, $curParent->FullLabel) === 0) { |
| 581 | 581 | if (!isset($curParent->Children)) $curParent->Children = new ArrayList(); |
| 582 | 582 | |
| 583 | 583 | // Modify the name so we only show the last component |
| 584 | 584 | $value->FullLabel = $value->Label; |
| 585 | 585 | $p = strrpos($value->Label, $facet->HierarchyDivider); |
| 586 | - if ($p > -1) $value->Label = trim( substr($value->Label, $p + 1) ); |
|
| 586 | + if ($p > -1) $value->Label = trim(substr($value->Label, $p + 1)); |
|
| 587 | 587 | |
| 588 | 588 | $curParent->Children->push($value); |
| 589 | 589 | break; |
@@ -41,12 +41,18 @@ discard block |
||
| 41 | 41 | * @return array |
| 42 | 42 | */ |
| 43 | 43 | public function scrubFilters($filters) { |
| 44 | - if (!is_array($filters)) $filters = array(); |
|
| 44 | + if (!is_array($filters)) { |
|
| 45 | + $filters = array(); |
|
| 46 | + } |
|
| 45 | 47 | |
| 46 | 48 | foreach ($filters as $k => $v) { |
| 47 | - if (empty($v)) unset($filters[$k]); |
|
| 49 | + if (empty($v)) { |
|
| 50 | + unset($filters[$k]); |
|
| 51 | + } |
|
| 48 | 52 | // this allows you to send an array as a comma-separated list, which is easier on the query string length |
| 49 | - if (is_string($v) && strpos($v, 'LIST~') === 0) $filters[$k] = explode(',', substr($v, 5)); |
|
| 53 | + if (is_string($v) && strpos($v, 'LIST~') === 0) { |
|
| 54 | + $filters[$k] = explode(',', substr($v, 5)); |
|
| 55 | + } |
|
| 50 | 56 | } |
| 51 | 57 | |
| 52 | 58 | return $filters; |
@@ -60,8 +66,12 @@ discard block |
||
| 60 | 66 | * @return DataList |
| 61 | 67 | */ |
| 62 | 68 | public function addFiltersToDataList($list, array $filters, $sing=null) { |
| 63 | - if (!$sing) $sing = singleton($list->dataClass()); |
|
| 64 | - if (is_string($sing)) $sing = singleton($sing); |
|
| 69 | + if (!$sing) { |
|
| 70 | + $sing = singleton($list->dataClass()); |
|
| 71 | + } |
|
| 72 | + if (is_string($sing)) { |
|
| 73 | + $sing = singleton($sing); |
|
| 74 | + } |
|
| 65 | 75 | |
| 66 | 76 | if (!empty($filters)) { |
| 67 | 77 | foreach ($filters as $filterField => $filterVal) { |
@@ -105,7 +115,9 @@ discard block |
||
| 105 | 115 | // Lists have to be handled a little differently |
| 106 | 116 | $f = $rec->getVFIFieldName($filterField) . ':PartialMatch'; |
| 107 | 117 | if (is_array($filterVal)) { |
| 108 | - foreach ($filterVal as &$val) $val = '|' . $val . '|'; |
|
| 118 | + foreach ($filterVal as &$val) { |
|
| 119 | + $val = '|' . $val . '|'; |
|
| 120 | + } |
|
| 109 | 121 | return array($f => $filterVal); |
| 110 | 122 | } else { |
| 111 | 123 | return array($f => '|' . $filterVal . '|'); |
@@ -137,7 +149,9 @@ discard block |
||
| 137 | 149 | * @return array |
| 138 | 150 | */ |
| 139 | 151 | public function expandFacetSpec(array $facetSpec) { |
| 140 | - if (is_null($facetSpec)) return array(); |
|
| 152 | + if (is_null($facetSpec)) { |
|
| 153 | + return array(); |
|
| 154 | + } |
|
| 141 | 155 | $facets = array(); |
| 142 | 156 | |
| 143 | 157 | foreach ($facetSpec as $field => $label) { |
@@ -147,14 +161,20 @@ discard block |
||
| 147 | 161 | $facets[$field] = array('Label' => $label); |
| 148 | 162 | } |
| 149 | 163 | |
| 150 | - if (empty($facets[$field]['Source'])) $facets[$field]['Source'] = $field; |
|
| 151 | - if (empty($facets[$field]['Type'])) $facets[$field]['Type'] = ShopSearch::FACET_TYPE_LINK; |
|
| 164 | + if (empty($facets[$field]['Source'])) { |
|
| 165 | + $facets[$field]['Source'] = $field; |
|
| 166 | + } |
|
| 167 | + if (empty($facets[$field]['Type'])) { |
|
| 168 | + $facets[$field]['Type'] = ShopSearch::FACET_TYPE_LINK; |
|
| 169 | + } |
|
| 152 | 170 | |
| 153 | 171 | if (empty($facets[$field]['Values'])) { |
| 154 | 172 | $facets[$field]['Values'] = array(); |
| 155 | 173 | } else { |
| 156 | 174 | $vals = $facets[$field]['Values']; |
| 157 | - if (is_string($vals)) $vals = eval('return ' . $vals . ';'); |
|
| 175 | + if (is_string($vals)) { |
|
| 176 | + $vals = eval('return ' . $vals . ';'); |
|
| 177 | + } |
|
| 158 | 178 | $facets[$field]['Values'] = array(); |
| 159 | 179 | foreach ($vals as $val => $lbl) { |
| 160 | 180 | $facets[$field]['Values'][$val] = new ArrayData(array( |
@@ -199,7 +219,9 @@ discard block |
||
| 199 | 219 | */ |
| 200 | 220 | public function buildFacets(SS_List $matches, array $facetSpec, $autoFacetAttributes=false) { |
| 201 | 221 | $facets = $this->expandFacetSpec($facetSpec); |
| 202 | - if (!$autoFacetAttributes && (empty($facets) || !$matches || !$matches->count())) return new ArrayList(); |
|
| 222 | + if (!$autoFacetAttributes && (empty($facets) || !$matches || !$matches->count())) { |
|
| 223 | + return new ArrayList(); |
|
| 224 | + } |
|
| 203 | 225 | $fasterMethod = (bool)$this->config()->faster_faceting; |
| 204 | 226 | |
| 205 | 227 | // fill them in |
@@ -212,8 +234,12 @@ discard block |
||
| 212 | 234 | // NOTE: using this method range and checkbox facets don't get counts |
| 213 | 235 | if ($fasterMethod && $facet['Type'] != ShopSearch::FACET_TYPE_LINK) { |
| 214 | 236 | if ($facet['Type'] == ShopSearch::FACET_TYPE_RANGE) { |
| 215 | - if (isset($facet['RangeMin'])) $facet['MinValue'] = $facet['RangeMin']; |
|
| 216 | - if (isset($facet['RangeMax'])) $facet['MaxValue'] = $facet['RangeMax']; |
|
| 237 | + if (isset($facet['RangeMin'])) { |
|
| 238 | + $facet['MinValue'] = $facet['RangeMin']; |
|
| 239 | + } |
|
| 240 | + if (isset($facet['RangeMax'])) { |
|
| 241 | + $facet['MaxValue'] = $facet['RangeMax']; |
|
| 242 | + } |
|
| 217 | 243 | } |
| 218 | 244 | |
| 219 | 245 | continue; |
@@ -222,25 +248,37 @@ discard block |
||
| 222 | 248 | foreach ($matches as $rec) { |
| 223 | 249 | // If it's a range facet, set up the min/max |
| 224 | 250 | if ($facet['Type'] == ShopSearch::FACET_TYPE_RANGE) { |
| 225 | - if (isset($facet['RangeMin'])) $facet['MinValue'] = $facet['RangeMin']; |
|
| 226 | - if (isset($facet['RangeMax'])) $facet['MaxValue'] = $facet['RangeMax']; |
|
| 251 | + if (isset($facet['RangeMin'])) { |
|
| 252 | + $facet['MinValue'] = $facet['RangeMin']; |
|
| 253 | + } |
|
| 254 | + if (isset($facet['RangeMax'])) { |
|
| 255 | + $facet['MaxValue'] = $facet['RangeMax']; |
|
| 256 | + } |
|
| 227 | 257 | } |
| 228 | 258 | |
| 229 | 259 | // If the field is accessible via normal methods, including |
| 230 | 260 | // a user-defined getter, prefer that |
| 231 | 261 | $fieldValue = $rec->relObject($field); |
| 232 | - if (is_null($fieldValue) && $rec->hasMethod($meth = "get{$field}")) $fieldValue = $rec->$meth(); |
|
| 262 | + if (is_null($fieldValue) && $rec->hasMethod($meth = "get{$field}")) { |
|
| 263 | + $fieldValue = $rec->$meth(); |
|
| 264 | + } |
|
| 233 | 265 | |
| 234 | 266 | // If not, look for a VFI field |
| 235 | - if (!$fieldValue && $rec->hasExtension('VirtualFieldIndex')) $fieldValue = $rec->getVFI($field); |
|
| 267 | + if (!$fieldValue && $rec->hasExtension('VirtualFieldIndex')) { |
|
| 268 | + $fieldValue = $rec->getVFI($field); |
|
| 269 | + } |
|
| 236 | 270 | |
| 237 | 271 | // If we found something, process it |
| 238 | 272 | if (!empty($fieldValue)) { |
| 239 | 273 | // normalize so that it's iterable |
| 240 | - if (!is_array($fieldValue) && !$fieldValue instanceof SS_List) $fieldValue = array($fieldValue); |
|
| 274 | + if (!is_array($fieldValue) && !$fieldValue instanceof SS_List) { |
|
| 275 | + $fieldValue = array($fieldValue); |
|
| 276 | + } |
|
| 241 | 277 | |
| 242 | 278 | foreach ($fieldValue as $obj) { |
| 243 | - if (empty($obj)) continue; |
|
| 279 | + if (empty($obj)) { |
|
| 280 | + continue; |
|
| 281 | + } |
|
| 244 | 282 | |
| 245 | 283 | // figure out the right label |
| 246 | 284 | if (is_object($obj) && $obj->hasMethod('Nice')) { |
@@ -311,7 +349,9 @@ discard block |
||
| 311 | 349 | $out = new ArrayList(); |
| 312 | 350 | $sortValues = self::config()->sort_facet_values; |
| 313 | 351 | foreach ($facets as $f) { |
| 314 | - if ($sortValues) ksort($f['Values']); |
|
| 352 | + if ($sortValues) { |
|
| 353 | + ksort($f['Values']); |
|
| 354 | + } |
|
| 315 | 355 | $f['Values'] = new ArrayList($f['Values']); |
| 316 | 356 | $out->push(new ArrayData($f)); |
| 317 | 357 | } |
@@ -335,7 +375,9 @@ discard block |
||
| 335 | 375 | } |
| 336 | 376 | |
| 337 | 377 | $baseTable = $q->getFrom(); |
| 338 | - if (is_array($baseTable)) $baseTable = reset($baseTable); |
|
| 378 | + if (is_array($baseTable)) { |
|
| 379 | + $baseTable = reset($baseTable); |
|
| 380 | + } |
|
| 339 | 381 | |
| 340 | 382 | $q = $q->setSelect(array()) |
| 341 | 383 | ->selectField('"ProductAttributeValue"."ID"', 'Value') |
@@ -367,7 +409,9 @@ discard block |
||
| 367 | 409 | |
| 368 | 410 | // this is the easiest way to get SiteTree vs SiteTree_Live |
| 369 | 411 | $baseTable = $q->getFrom(); |
| 370 | - if (is_array($baseTable)) $baseTable = reset($baseTable); |
|
| 412 | + if (is_array($baseTable)) { |
|
| 413 | + $baseTable = reset($baseTable); |
|
| 414 | + } |
|
| 371 | 415 | |
| 372 | 416 | $q = $q->setSelect(array()) |
| 373 | 417 | ->selectField('"ProductAttributeType"."ID"', 'TypeID') |
@@ -395,7 +439,9 @@ discard block |
||
| 395 | 439 | $curFacet = null; |
| 396 | 440 | foreach ($q as $row) { |
| 397 | 441 | if ($curType != $row['TypeID']) { |
| 398 | - if ($curType > 0) $facets['ATT'.$curType] = $curFacet; |
|
| 442 | + if ($curType > 0) { |
|
| 443 | + $facets['ATT'.$curType] = $curFacet; |
|
| 444 | + } |
|
| 399 | 445 | $curType = $row['TypeID']; |
| 400 | 446 | $curFacet = array( |
| 401 | 447 | 'Label' => $row['TypeLabel'], |
@@ -410,7 +456,9 @@ discard block |
||
| 410 | 456 | $curFacet['Values'][ $row['Value'] ] = new ArrayData($row); |
| 411 | 457 | } |
| 412 | 458 | |
| 413 | - if ($curType > 0) $facets['ATT'.$curType] = $curFacet; |
|
| 459 | + if ($curType > 0) { |
|
| 460 | + $facets['ATT'.$curType] = $curFacet; |
|
| 461 | + } |
|
| 414 | 462 | return $facets; |
| 415 | 463 | } |
| 416 | 464 | |
@@ -432,7 +480,9 @@ discard block |
||
| 432 | 480 | switch ($facet->Type) { |
| 433 | 481 | case ShopSearch::FACET_TYPE_RANGE: |
| 434 | 482 | $params = array_merge($baseParams, array()); |
| 435 | - if (!isset($params[$qs_f])) $params[$qs_f] = array(); |
|
| 483 | + if (!isset($params[$qs_f])) { |
|
| 484 | + $params[$qs_f] = array(); |
|
| 485 | + } |
|
| 436 | 486 | $params[$qs_f][$facet->Source] = 'RANGEFACETVALUE'; |
| 437 | 487 | $params[$qs_t] = $facet->Label . ': RANGEFACETLABEL'; |
| 438 | 488 | $facet->Link = $baseLink . '?' . http_build_query($params); |
@@ -453,7 +503,9 @@ discard block |
||
| 453 | 503 | $params = array_merge($baseParams, array()); |
| 454 | 504 | |
| 455 | 505 | // add the filter for this value |
| 456 | - if (!isset($params[$qs_f])) $params[$qs_f] = array(); |
|
| 506 | + if (!isset($params[$qs_f])) { |
|
| 507 | + $params[$qs_f] = array(); |
|
| 508 | + } |
|
| 457 | 509 | if ($facet->Type == ShopSearch::FACET_TYPE_CHECKBOX) { |
| 458 | 510 | unset($params[$qs_f][$facet->Source]); // this will be figured out via javascript |
| 459 | 511 | $params[$qs_t] = ($value->Active ? 'Remove ' : '') . $facet->Label . ': ' . $value->Label; |
@@ -481,7 +533,9 @@ discard block |
||
| 481 | 533 | |
| 482 | 534 | foreach ($children as $child) { |
| 483 | 535 | $out[$child->Value] = $child->Value; |
| 484 | - if (!empty($child->Children)) $out += $this->getRecursiveChildValues($child->Children); |
|
| 536 | + if (!empty($child->Children)) { |
|
| 537 | + $out += $this->getRecursiveChildValues($child->Children); |
|
| 538 | + } |
|
| 485 | 539 | } |
| 486 | 540 | |
| 487 | 541 | return $out; |
@@ -507,7 +561,9 @@ discard block |
||
| 507 | 561 | } |
| 508 | 562 | } else { |
| 509 | 563 | $filterVals = $filters[$facet->Source]; |
| 510 | - if (!is_array($filterVals)) $filterVals = array($filterVals); |
|
| 564 | + if (!is_array($filterVals)) { |
|
| 565 | + $filterVals = array($filterVals); |
|
| 566 | + } |
|
| 511 | 567 | $this->updateCheckboxFacetState( |
| 512 | 568 | !empty($facet->NestedValues) ? $facet->NestedValues : $facet->Values, |
| 513 | 569 | $filterVals, |
@@ -541,7 +597,9 @@ discard block |
||
| 541 | 597 | // This wouldn't be normal, but even if it's not a leaf, we want to handle |
| 542 | 598 | // the case where a filter might be set for this node. It should still show up correctly. |
| 543 | 599 | $value->Active = true; |
| 544 | - foreach ($value->Children as $c) $c->Active = true; |
|
| 600 | + foreach ($value->Children as $c) { |
|
| 601 | + $c->Active = true; |
|
| 602 | + } |
|
| 545 | 603 | // TODO: handle more than one level of recursion here |
| 546 | 604 | } else { |
| 547 | 605 | $value->Active = $this->updateCheckboxFacetState($value->Children, $filterVals, $filterOnlyLeaves); |
@@ -550,7 +608,9 @@ discard block |
||
| 550 | 608 | $value->Active = in_array($value->Value, $filterVals); |
| 551 | 609 | } |
| 552 | 610 | |
| 553 | - if ($value->Active) $out = true; |
|
| 611 | + if ($value->Active) { |
|
| 612 | + $out = true; |
|
| 613 | + } |
|
| 554 | 614 | } |
| 555 | 615 | |
| 556 | 616 | return $out; |
@@ -571,19 +631,25 @@ discard block |
||
| 571 | 631 | $parentStack = array(); |
| 572 | 632 | |
| 573 | 633 | foreach ($facet->Values as $value) { |
| 574 | - if (empty($value->Label)) continue; |
|
| 634 | + if (empty($value->Label)) { |
|
| 635 | + continue; |
|
| 636 | + } |
|
| 575 | 637 | $value->FullLabel = $value->Label; |
| 576 | 638 | |
| 577 | 639 | // Look for the most recent parent that matches the beginning of this one |
| 578 | 640 | while (count($parentStack) > 0) { |
| 579 | 641 | $curParent = $parentStack[ count($parentStack)-1 ]; |
| 580 | 642 | if (strpos($value->Label, $curParent->FullLabel) === 0) { |
| 581 | - if (!isset($curParent->Children)) $curParent->Children = new ArrayList(); |
|
| 643 | + if (!isset($curParent->Children)) { |
|
| 644 | + $curParent->Children = new ArrayList(); |
|
| 645 | + } |
|
| 582 | 646 | |
| 583 | 647 | // Modify the name so we only show the last component |
| 584 | 648 | $value->FullLabel = $value->Label; |
| 585 | 649 | $p = strrpos($value->Label, $facet->HierarchyDivider); |
| 586 | - if ($p > -1) $value->Label = trim( substr($value->Label, $p + 1) ); |
|
| 650 | + if ($p > -1) { |
|
| 651 | + $value->Label = trim( substr($value->Label, $p + 1) ); |
|
| 652 | + } |
|
| 587 | 653 | |
| 588 | 654 | $curParent->Children->push($value); |
| 589 | 655 | break; |
@@ -380,7 +380,7 @@ |
||
| 380 | 380 | ->addInnerJoin('ProductAttributeType', '"Product_StaticAttributeTypes"."ProductAttributeTypeID" = "ProductAttributeType"."ID"') |
| 381 | 381 | ->addInnerJoin('Product_StaticAttributeValues', $baseTable.'."ID" = "Product_StaticAttributeValues"."ProductID"') |
| 382 | 382 | ->addInnerJoin('ProductAttributeValue', '"Product_StaticAttributeValues"."ProductAttributeValueID" = "ProductAttributeValue"."ID"' |
| 383 | - . ' AND "ProductAttributeValue"."TypeID" = "ProductAttributeType"."ID"') |
|
| 383 | + . ' AND "ProductAttributeValue"."TypeID" = "ProductAttributeType"."ID"') |
|
| 384 | 384 | ->setOrderBy(array( |
| 385 | 385 | '"ProductAttributeType"."Label"' => 'ASC', |
| 386 | 386 | '"ProductAttributeValue"."Sort"' => 'ASC', |
@@ -49,7 +49,7 @@ |
||
| 49 | 49 | |
| 50 | 50 | /** |
| 51 | 51 | * @param $typeID |
| 52 | - * @return callable |
|
| 52 | + * @return Closure |
|
| 53 | 53 | */ |
| 54 | 54 | protected function getValuesClosure($typeID) { |
| 55 | 55 | return function() use ($typeID) { |
@@ -1,14 +1,14 @@ |
||
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | - * Extension for Product that allows static attributes in the same way |
|
| 4 | - * they're used for variations. I'm separating this out because it will |
|
| 5 | - * probably be useful in other projects. |
|
| 6 | - * |
|
| 7 | - * @author Mark Guinn <[email protected]> |
|
| 8 | - * @date 01.21.2014 |
|
| 9 | - * @package Daywind |
|
| 10 | - * @subpackage extensions |
|
| 11 | - */ |
|
| 3 | + * Extension for Product that allows static attributes in the same way |
|
| 4 | + * they're used for variations. I'm separating this out because it will |
|
| 5 | + * probably be useful in other projects. |
|
| 6 | + * |
|
| 7 | + * @author Mark Guinn <[email protected]> |
|
| 8 | + * @date 01.21.2014 |
|
| 9 | + * @package Daywind |
|
| 10 | + * @subpackage extensions |
|
| 11 | + */ |
|
| 12 | 12 | class HasStaticAttributes extends DataExtension |
| 13 | 13 | { |
| 14 | 14 | private static $many_many = array( |
@@ -38,8 +38,8 @@ discard block |
||
| 38 | 38 | |
| 39 | 39 | $newValReq = RequiredFields::create('Value'); |
| 40 | 40 | |
| 41 | - $valuesField = HasStaticAttributes_CheckboxSetField::create('StaticAttributeValues-'.$type->ID, $type->Title, $source()); |
|
| 42 | - $valuesField->setValue( $this->owner->StaticAttributeValues()->filter('TypeID', $type->ID)->getIDList() ); |
|
| 41 | + $valuesField = HasStaticAttributes_CheckboxSetField::create('StaticAttributeValues-' . $type->ID, $type->Title, $source()); |
|
| 42 | + $valuesField->setValue($this->owner->StaticAttributeValues()->filter('TypeID', $type->ID)->getIDList()); |
|
| 43 | 43 | $valuesField->useAddNew('ProductAttributeValue', $source, $newValFields, $newValReq); |
| 44 | 44 | |
| 45 | 45 | $fields->addFieldToTab('Root.Attributes', $valuesField); |
@@ -141,8 +141,8 @@ discard block |
||
| 141 | 141 | // make a list of id's that should be there |
| 142 | 142 | $idList = array(); |
| 143 | 143 | if (!empty($this->value) && is_array($this->value)) { |
| 144 | - foreach($this->value as $id => $bool) { |
|
| 145 | - if($bool) { |
|
| 144 | + foreach ($this->value as $id => $bool) { |
|
| 145 | + if ($bool) { |
|
| 146 | 146 | $idList[$id] = $id; |
| 147 | 147 | } |
| 148 | 148 | } |
@@ -70,7 +70,9 @@ discard block |
||
| 70 | 70 | } |
| 71 | 71 | |
| 72 | 72 | foreach ($this->owner->StaticAttributeValues() as $val) { |
| 73 | - if (!isset($list[$val->TypeID])) continue; |
|
| 73 | + if (!isset($list[$val->TypeID])) { |
|
| 74 | + continue; |
|
| 75 | + } |
|
| 74 | 76 | $list[$val->TypeID]->ActiveValues->push($val); |
| 75 | 77 | } |
| 76 | 78 | |
@@ -86,7 +88,9 @@ discard block |
||
| 86 | 88 | $defaultAttributes = Config::inst()->get($this->owner->ClassName, 'default_attributes'); |
| 87 | 89 | if (!empty($defaultAttributes)) { |
| 88 | 90 | $types = $this->owner->StaticAttributeTypes(); |
| 89 | - foreach ($defaultAttributes as $typeID) $types->add($typeID); |
|
| 91 | + foreach ($defaultAttributes as $typeID) { |
|
| 92 | + $types->add($typeID); |
|
| 93 | + } |
|
| 90 | 94 | } |
| 91 | 95 | } |
| 92 | 96 | } |
@@ -131,11 +135,17 @@ discard block |
||
| 131 | 135 | */ |
| 132 | 136 | public function saveInto(DataObjectInterface $record) { |
| 133 | 137 | $fieldname = $this->getFieldName(); |
| 134 | - if (empty($fieldname)) return; |
|
| 138 | + if (empty($fieldname)) { |
|
| 139 | + return; |
|
| 140 | + } |
|
| 135 | 141 | $typeID = $this->getAttributeTypeID(); |
| 136 | - if (empty($typeID)) return; |
|
| 142 | + if (empty($typeID)) { |
|
| 143 | + return; |
|
| 144 | + } |
|
| 137 | 145 | $relation = $record->$fieldname(); |
| 138 | - if (!$relation) return; |
|
| 146 | + if (!$relation) { |
|
| 147 | + return; |
|
| 148 | + } |
|
| 139 | 149 | $relation = $relation->filter('TypeID', $typeID); |
| 140 | 150 | |
| 141 | 151 | // make a list of id's that should be there |
@@ -160,10 +170,14 @@ discard block |
||
| 160 | 170 | } |
| 161 | 171 | |
| 162 | 172 | // add |
| 163 | - foreach ($idList as $id) $relation->add($id); |
|
| 173 | + foreach ($idList as $id) { |
|
| 174 | + $relation->add($id); |
|
| 175 | + } |
|
| 164 | 176 | |
| 165 | 177 | // remove |
| 166 | - foreach ($toDelete as $id) $relation->removeByID($id); |
|
| 178 | + foreach ($toDelete as $id) { |
|
| 179 | + $relation->removeByID($id); |
|
| 180 | + } |
|
| 167 | 181 | } |
| 168 | 182 | |
| 169 | 183 | |
@@ -214,7 +214,7 @@ |
||
| 214 | 214 | } |
| 215 | 215 | |
| 216 | 216 | /** |
| 217 | - * @param $name |
|
| 217 | + * @param string $name |
|
| 218 | 218 | * @return string |
| 219 | 219 | */ |
| 220 | 220 | public function getVFIFieldName($name) { |
@@ -57,14 +57,14 @@ |
||
| 57 | 57 | |
| 58 | 58 | public static $disable_building = false; |
| 59 | 59 | |
| 60 | - /** |
|
| 61 | - * @return array |
|
| 62 | - */ |
|
| 63 | - public static function get_classes_with_vfi() { |
|
| 64 | - $vfi_def = Config::inst()->get('VirtualFieldIndex', 'vfi_spec'); |
|
| 65 | - if (!$vfi_def || !is_array($vfi_def)) return array(); |
|
| 66 | - return array_keys($vfi_def); |
|
| 67 | - } |
|
| 60 | + /** |
|
| 61 | + * @return array |
|
| 62 | + */ |
|
| 63 | + public static function get_classes_with_vfi() { |
|
| 64 | + $vfi_def = Config::inst()->get('VirtualFieldIndex', 'vfi_spec'); |
|
| 65 | + if (!$vfi_def || !is_array($vfi_def)) return array(); |
|
| 66 | + return array_keys($vfi_def); |
|
| 67 | + } |
|
| 68 | 68 | |
| 69 | 69 | /** |
| 70 | 70 | * Define extra db fields and indexes. |
@@ -143,7 +143,7 @@ discard block |
||
| 143 | 143 | * |
| 144 | 144 | * @param string $class [optional] - if not given all indexes will be rebuilt |
| 145 | 145 | */ |
| 146 | - public static function build($class='') { |
|
| 146 | + public static function build($class = '') { |
|
| 147 | 147 | if ($class) { |
| 148 | 148 | $list = DataObject::get($class); |
| 149 | 149 | $count = $list->count(); |
@@ -168,12 +168,12 @@ discard block |
||
| 168 | 168 | $val = $this->getVFI($field, true); |
| 169 | 169 | |
| 170 | 170 | if ($spec['Type'] == self::TYPE_LIST) { |
| 171 | - if (is_object($val)) $val = $val->toArray(); // this would be an ArrayList or DataList |
|
| 172 | - if (!is_array($val)) $val = array($val); // this would be a scalar value |
|
| 171 | + if (is_object($val)) $val = $val->toArray(); // this would be an ArrayList or DataList |
|
| 172 | + if (!is_array($val)) $val = array($val); // this would be a scalar value |
|
| 173 | 173 | $val = self::encode_list($val); |
| 174 | 174 | } else { |
| 175 | - if (is_array($val)) $val = (string)$val[0]; // if they give us an array, just take the first value |
|
| 176 | - if (is_object($val)) $val = (string)$val->first(); // if a SS_List, take the first as well |
|
| 175 | + if (is_array($val)) $val = (string)$val[0]; // if they give us an array, just take the first value |
|
| 176 | + if (is_object($val)) $val = (string)$val->first(); // if a SS_List, take the first as well |
|
| 177 | 177 | } |
| 178 | 178 | |
| 179 | 179 | if (Config::inst()->get('VirtualFieldIndex', 'fast_writes_enabled')) { |
@@ -242,7 +242,7 @@ discard block |
||
| 242 | 242 | * @param bool $forceIDs [optional] - if true, it will return an ID even if the norm is to return a DataObject |
| 243 | 243 | * @return string|array|SS_List |
| 244 | 244 | */ |
| 245 | - public function getVFI($field, $fromSource=false, $forceIDs=false) { |
|
| 245 | + public function getVFI($field, $fromSource = false, $forceIDs = false) { |
|
| 246 | 246 | $spec = $this->getVFISpec($field); |
| 247 | 247 | if (!$spec) return null; |
| 248 | 248 | if ($fromSource) { |
@@ -306,11 +306,11 @@ discard block |
||
| 306 | 306 | * @param bool $forceIDs [optional] - if true encoded objects will not be returned as objects but as id's |
| 307 | 307 | * @return array |
| 308 | 308 | */ |
| 309 | - protected static function decode_list($val, $forceIDs=false) { |
|
| 309 | + protected static function decode_list($val, $forceIDs = false) { |
|
| 310 | 310 | if ($val[0] == '>') { |
| 311 | 311 | $firstBar = strpos($val, '|'); |
| 312 | 312 | if ($firstBar < 3) return array(); |
| 313 | - $className = substr($val, 1, $firstBar-1); |
|
| 313 | + $className = substr($val, 1, $firstBar - 1); |
|
| 314 | 314 | $ids = explode('|', trim(substr($val, $firstBar), '|')); |
| 315 | 315 | return $forceIDs ? $ids : DataObject::get($className)->filter('ID', $ids)->toArray(); |
| 316 | 316 | } else { |
@@ -345,7 +345,7 @@ discard block |
||
| 345 | 345 | // Select db object |
| 346 | 346 | $component = $dbObject; |
| 347 | 347 | } else { |
| 348 | - user_error("$relation is not a relation/field on ".get_class($component), E_USER_ERROR); |
|
| 348 | + user_error("$relation is not a relation/field on " . get_class($component), E_USER_ERROR); |
|
| 349 | 349 | } |
| 350 | 350 | } |
| 351 | 351 | } |
@@ -62,7 +62,9 @@ discard block |
||
| 62 | 62 | */ |
| 63 | 63 | public static function get_classes_with_vfi() { |
| 64 | 64 | $vfi_def = Config::inst()->get('VirtualFieldIndex', 'vfi_spec'); |
| 65 | - if (!$vfi_def || !is_array($vfi_def)) return array(); |
|
| 65 | + if (!$vfi_def || !is_array($vfi_def)) { |
|
| 66 | + return array(); |
|
| 67 | + } |
|
| 66 | 68 | return array_keys($vfi_def); |
| 67 | 69 | } |
| 68 | 70 | |
@@ -75,7 +77,9 @@ discard block |
||
| 75 | 77 | */ |
| 76 | 78 | public static function get_extra_config($class, $extension, $args) { |
| 77 | 79 | $vfi_def = self::get_vfi_spec($class); |
| 78 | - if (!$vfi_def || !is_array($vfi_def)) return array(); |
|
| 80 | + if (!$vfi_def || !is_array($vfi_def)) { |
|
| 81 | + return array(); |
|
| 82 | + } |
|
| 79 | 83 | |
| 80 | 84 | $out = array( |
| 81 | 85 | 'db' => array(), |
@@ -99,7 +103,9 @@ discard block |
||
| 99 | 103 | */ |
| 100 | 104 | public static function get_vfi_spec($class) { |
| 101 | 105 | $vfi_master = Config::inst()->get('VirtualFieldIndex', 'vfi_spec'); |
| 102 | - if (!$vfi_master || !is_array($vfi_master)) return array(); |
|
| 106 | + if (!$vfi_master || !is_array($vfi_master)) { |
|
| 107 | + return array(); |
|
| 108 | + } |
|
| 103 | 109 | |
| 104 | 110 | // merge in all the vfi's from ancestors as well |
| 105 | 111 | $vfi_def = array(); |
@@ -109,7 +115,9 @@ discard block |
||
| 109 | 115 | $vfi_def = $vfi_master[$c] + $vfi_def; |
| 110 | 116 | } |
| 111 | 117 | } |
| 112 | - if (empty($vfi_def)) return array(); |
|
| 118 | + if (empty($vfi_def)) { |
|
| 119 | + return array(); |
|
| 120 | + } |
|
| 113 | 121 | |
| 114 | 122 | // convert shorthand to longhand |
| 115 | 123 | foreach ($vfi_def as $k => $v) { |
@@ -129,8 +137,12 @@ discard block |
||
| 129 | 137 | 'Source' => $v, |
| 130 | 138 | ); |
| 131 | 139 | } else { |
| 132 | - if (!isset($v['Type'])) $vfi_def[$k]['Type'] = is_array($v['Source']) ? self::TYPE_LIST : self::TYPE_SIMPLE; |
|
| 133 | - if (!isset($v['DependsOn'])) $vfi_def[$k]['DependsOn'] = self::DEPENDS_ALL; |
|
| 140 | + if (!isset($v['Type'])) { |
|
| 141 | + $vfi_def[$k]['Type'] = is_array($v['Source']) ? self::TYPE_LIST : self::TYPE_SIMPLE; |
|
| 142 | + } |
|
| 143 | + if (!isset($v['DependsOn'])) { |
|
| 144 | + $vfi_def[$k]['DependsOn'] = self::DEPENDS_ALL; |
|
| 145 | + } |
|
| 134 | 146 | } |
| 135 | 147 | } |
| 136 | 148 | |
@@ -150,10 +162,14 @@ discard block |
||
| 150 | 162 | for ($i = 0; $i < $count; $i += 10) { |
| 151 | 163 | $chunk = $list->limit(10, $i); |
| 152 | 164 | // if (Controller::curr() instanceof TaskRunner) echo "Processing VFI #$i...\n"; |
| 153 | - foreach ($chunk as $rec) $rec->rebuildVFI(); |
|
| 165 | + foreach ($chunk as $rec) { |
|
| 166 | + $rec->rebuildVFI(); |
|
| 167 | + } |
|
| 154 | 168 | } |
| 155 | 169 | } else { |
| 156 | - foreach (self::get_classes_with_vfi() as $c) self::build($c); |
|
| 170 | + foreach (self::get_classes_with_vfi() as $c) { |
|
| 171 | + self::build($c); |
|
| 172 | + } |
|
| 157 | 173 | } |
| 158 | 174 | } |
| 159 | 175 | |
@@ -168,12 +184,24 @@ discard block |
||
| 168 | 184 | $val = $this->getVFI($field, true); |
| 169 | 185 | |
| 170 | 186 | if ($spec['Type'] == self::TYPE_LIST) { |
| 171 | - if (is_object($val)) $val = $val->toArray(); // this would be an ArrayList or DataList |
|
| 172 | - if (!is_array($val)) $val = array($val); // this would be a scalar value |
|
| 187 | + if (is_object($val)) { |
|
| 188 | + $val = $val->toArray(); |
|
| 189 | + } |
|
| 190 | + // this would be an ArrayList or DataList |
|
| 191 | + if (!is_array($val)) { |
|
| 192 | + $val = array($val); |
|
| 193 | + } |
|
| 194 | + // this would be a scalar value |
|
| 173 | 195 | $val = self::encode_list($val); |
| 174 | 196 | } else { |
| 175 | - if (is_array($val)) $val = (string)$val[0]; // if they give us an array, just take the first value |
|
| 176 | - if (is_object($val)) $val = (string)$val->first(); // if a SS_List, take the first as well |
|
| 197 | + if (is_array($val)) { |
|
| 198 | + $val = (string)$val[0]; |
|
| 199 | + } |
|
| 200 | + // if they give us an array, just take the first value |
|
| 201 | + if (is_object($val)) { |
|
| 202 | + $val = (string)$val->first(); |
|
| 203 | + } |
|
| 204 | + // if a SS_List, take the first as well |
|
| 177 | 205 | } |
| 178 | 206 | |
| 179 | 207 | if (Config::inst()->get('VirtualFieldIndex', 'fast_writes_enabled')) { |
@@ -244,7 +272,9 @@ discard block |
||
| 244 | 272 | */ |
| 245 | 273 | public function getVFI($field, $fromSource=false, $forceIDs=false) { |
| 246 | 274 | $spec = $this->getVFISpec($field); |
| 247 | - if (!$spec) return null; |
|
| 275 | + if (!$spec) { |
|
| 276 | + return null; |
|
| 277 | + } |
|
| 248 | 278 | if ($fromSource) { |
| 249 | 279 | if (is_array($spec['Source'])) { |
| 250 | 280 | $out = array(); |
@@ -291,7 +321,9 @@ discard block |
||
| 291 | 321 | // If we've got objects, encode them a little differently |
| 292 | 322 | if (count($list) > 0 && is_object($list[0])) { |
| 293 | 323 | $ids = array(); |
| 294 | - foreach ($list as $rec) $ids[] = $rec->ID; |
|
| 324 | + foreach ($list as $rec) { |
|
| 325 | + $ids[] = $rec->ID; |
|
| 326 | + } |
|
| 295 | 327 | $val = '>' . $list[0]->ClassName . '|' . implode('|', $ids) . '|'; |
| 296 | 328 | } else { |
| 297 | 329 | $val = '|' . implode('|', $list) . '|'; |
@@ -309,7 +341,9 @@ discard block |
||
| 309 | 341 | protected static function decode_list($val, $forceIDs=false) { |
| 310 | 342 | if ($val[0] == '>') { |
| 311 | 343 | $firstBar = strpos($val, '|'); |
| 312 | - if ($firstBar < 3) return array(); |
|
| 344 | + if ($firstBar < 3) { |
|
| 345 | + return array(); |
|
| 346 | + } |
|
| 313 | 347 | $className = substr($val, 1, $firstBar-1); |
| 314 | 348 | $ids = explode('|', trim(substr($val, $firstBar), '|')); |
| 315 | 349 | return $forceIDs ? $ids : DataObject::get($className)->filter('ID', $ids)->toArray(); |
@@ -248,7 +248,7 @@ |
||
| 248 | 248 | |
| 249 | 249 | /** |
| 250 | 250 | * @param string $str |
| 251 | - * @return SS_Query |
|
| 251 | + * @return SQLQuery |
|
| 252 | 252 | */ |
| 253 | 253 | public function getSuggestQuery($str='') { |
| 254 | 254 | $hasResults = 'CASE WHEN max("SearchLog"."NumResults") > 0 THEN 1 ELSE 0 END'; |
@@ -171,12 +171,12 @@ discard block |
||
| 171 | 171 | * @param int $limit [optional] |
| 172 | 172 | * @return ArrayData |
| 173 | 173 | */ |
| 174 | - public function search(array $vars, $logSearch=true, $useFacets=true, $start=-1, $limit=-1) { |
|
| 174 | + public function search(array $vars, $logSearch = true, $useFacets = true, $start = -1, $limit = -1) { |
|
| 175 | 175 | $qs_q = $this->config()->get('qs_query'); |
| 176 | 176 | $qs_f = $this->config()->get('qs_filters'); |
| 177 | 177 | $qs_ps = $this->config()->get('qs_parent_search'); |
| 178 | 178 | $qs_t = $this->config()->get('qs_title'); |
| 179 | - $qs_sort= $this->config()->get('qs_sort'); |
|
| 179 | + $qs_sort = $this->config()->get('qs_sort'); |
|
| 180 | 180 | if ($limit < 0) $limit = $this->config()->get('page_size'); |
| 181 | 181 | if ($start < 0) $start = !empty($vars['start']) ? (int)$vars['start'] : 0; // as far as i can see, fulltextsearch hard codes 'start' |
| 182 | 182 | $facets = $useFacets ? $this->config()->get('facets') : array(); |
@@ -187,7 +187,7 @@ discard block |
||
| 187 | 187 | $sortOptions = $this->config()->get('sort_options'); |
| 188 | 188 | $sort = !empty($vars[$qs_sort]) ? $vars[$qs_sort] : ''; |
| 189 | 189 | if (!isset($sortOptions[$sort])) { |
| 190 | - $sort = current(array_keys($sortOptions)); |
|
| 190 | + $sort = current(array_keys($sortOptions)); |
|
| 191 | 191 | } |
| 192 | 192 | |
| 193 | 193 | // figure out and scrub the filters |
@@ -198,7 +198,7 @@ discard block |
||
| 198 | 198 | if ($keywordRegex = $this->config()->get('keyword_filter_regex')) { |
| 199 | 199 | $keywords = preg_replace($keywordRegex, '', $keywords); |
| 200 | 200 | } |
| 201 | - $results = self::adapter()->searchFromVars($keywords, $filters, $facets, $start, $limit, $sort); |
|
| 201 | + $results = self::adapter()->searchFromVars($keywords, $filters, $facets, $start, $limit, $sort); |
|
| 202 | 202 | |
| 203 | 203 | // massage the results a bit |
| 204 | 204 | if (!empty($keywords) && !$results->hasValue('Query')) $results->Query = $keywords; |
@@ -250,7 +250,7 @@ discard block |
||
| 250 | 250 | * @param string $str |
| 251 | 251 | * @return SS_Query |
| 252 | 252 | */ |
| 253 | - public function getSuggestQuery($str='') { |
|
| 253 | + public function getSuggestQuery($str = '') { |
|
| 254 | 254 | $hasResults = 'CASE WHEN max("SearchLog"."NumResults") > 0 THEN 1 ELSE 0 END'; |
| 255 | 255 | $searchCount = 'count(distinct "SearchLog"."ID")'; |
| 256 | 256 | $q = new SQLQuery(); |
@@ -281,7 +281,7 @@ discard block |
||
| 281 | 281 | * @param string $str |
| 282 | 282 | * @return array |
| 283 | 283 | */ |
| 284 | - public function suggest($str='') { |
|
| 284 | + public function suggest($str = '') { |
|
| 285 | 285 | $adapter = self::adapter(); |
| 286 | 286 | if ($adapter->hasMethod('suggest')) { |
| 287 | 287 | return $adapter->suggest($str); |
@@ -327,7 +327,7 @@ discard block |
||
| 327 | 327 | ? $results['products']->getTotalItems() |
| 328 | 328 | : $results['products']->count(); |
| 329 | 329 | |
| 330 | - $products = array(); |
|
| 330 | + $products = array(); |
|
| 331 | 331 | foreach ($results['products'] as $prod) { |
| 332 | 332 | if (!$prod || !$prod->exists()) continue; |
| 333 | 333 | $img = $prod->hasMethod('ProductImage') ? $prod->ProductImage() : $prod->Image(); |
@@ -177,11 +177,20 @@ discard block |
||
| 177 | 177 | $qs_ps = $this->config()->get('qs_parent_search'); |
| 178 | 178 | $qs_t = $this->config()->get('qs_title'); |
| 179 | 179 | $qs_sort= $this->config()->get('qs_sort'); |
| 180 | - if ($limit < 0) $limit = $this->config()->get('page_size'); |
|
| 181 | - if ($start < 0) $start = !empty($vars['start']) ? (int)$vars['start'] : 0; // as far as i can see, fulltextsearch hard codes 'start' |
|
| 180 | + if ($limit < 0) { |
|
| 181 | + $limit = $this->config()->get('page_size'); |
|
| 182 | + } |
|
| 183 | + if ($start < 0) { |
|
| 184 | + $start = !empty($vars['start']) ? (int)$vars['start'] : 0; |
|
| 185 | + } |
|
| 186 | + // as far as i can see, fulltextsearch hard codes 'start' |
|
| 182 | 187 | $facets = $useFacets ? $this->config()->get('facets') : array(); |
| 183 | - if (!is_array($facets)) $facets = array(); |
|
| 184 | - if (empty($limit)) $limit = -1; |
|
| 188 | + if (!is_array($facets)) { |
|
| 189 | + $facets = array(); |
|
| 190 | + } |
|
| 191 | + if (empty($limit)) { |
|
| 192 | + $limit = -1; |
|
| 193 | + } |
|
| 185 | 194 | |
| 186 | 195 | // figure out and scrub the sort |
| 187 | 196 | $sortOptions = $this->config()->get('sort_options'); |
@@ -201,9 +210,15 @@ discard block |
||
| 201 | 210 | $results = self::adapter()->searchFromVars($keywords, $filters, $facets, $start, $limit, $sort); |
| 202 | 211 | |
| 203 | 212 | // massage the results a bit |
| 204 | - if (!empty($keywords) && !$results->hasValue('Query')) $results->Query = $keywords; |
|
| 205 | - if (!empty($filters) && !$results->hasValue('Filters')) $results->Filters = new ArrayData($filters); |
|
| 206 | - if (!$results->hasValue('Sort')) $results->Sort = $sort; |
|
| 213 | + if (!empty($keywords) && !$results->hasValue('Query')) { |
|
| 214 | + $results->Query = $keywords; |
|
| 215 | + } |
|
| 216 | + if (!empty($filters) && !$results->hasValue('Filters')) { |
|
| 217 | + $results->Filters = new ArrayData($filters); |
|
| 218 | + } |
|
| 219 | + if (!$results->hasValue('Sort')) { |
|
| 220 | + $results->Sort = $sort; |
|
| 221 | + } |
|
| 207 | 222 | if (!$results->hasValue('TotalMatches')) { |
| 208 | 223 | $results->TotalMatches = $results->Matches->hasMethod('getTotalItems') |
| 209 | 224 | ? $results->Matches->getTotalItems() |
@@ -329,7 +344,9 @@ discard block |
||
| 329 | 344 | |
| 330 | 345 | $products = array(); |
| 331 | 346 | foreach ($results['products'] as $prod) { |
| 332 | - if (!$prod || !$prod->exists()) continue; |
|
| 347 | + if (!$prod || !$prod->exists()) { |
|
| 348 | + continue; |
|
| 349 | + } |
|
| 333 | 350 | $img = $prod->hasMethod('ProductImage') ? $prod->ProductImage() : $prod->Image(); |
| 334 | 351 | $thumb = ($img && $img->exists()) ? $img->getThumbnail() : null; |
| 335 | 352 | |
@@ -20,7 +20,7 @@ |
||
| 20 | 20 | |
| 21 | 21 | /** |
| 22 | 22 | * @param SS_HTTPRequest $req |
| 23 | - * @return string |
|
| 23 | + * @return SS_HTTPResponse |
|
| 24 | 24 | */ |
| 25 | 25 | public function search_suggest(SS_HTTPRequest $req) { |
| 26 | 26 | /** @var SS_HTTPResponse $response */ |
@@ -30,7 +30,7 @@ discard block |
||
| 30 | 30 | // convert the search results into usable json for search-as-you-type |
| 31 | 31 | if (ShopSearch::config()->search_as_you_type_enabled) { |
| 32 | 32 | $searchVars = $req->requestVars(); |
| 33 | - $searchVars[ ShopSearch::config()->qs_query ] = $searchVars['term']; |
|
| 33 | + $searchVars[ShopSearch::config()->qs_query] = $searchVars['term']; |
|
| 34 | 34 | unset($searchVars['term']); |
| 35 | 35 | $results = ShopSearch::inst()->suggestWithResults($searchVars); |
| 36 | 36 | } else { |
@@ -56,7 +56,7 @@ discard block |
||
| 56 | 56 | */ |
| 57 | 57 | public function onAfterInit() { |
| 58 | 58 | $req = $this->owner->getRequest(); |
| 59 | - $src = $req->requestVar( Config::inst()->get('ShopSearch', 'qs_source') ); |
|
| 59 | + $src = $req->requestVar(Config::inst()->get('ShopSearch', 'qs_source')); |
|
| 60 | 60 | if ($src) { |
| 61 | 61 | $qs_q = Config::inst()->get('ShopSearch', 'qs_query'); |
| 62 | 62 | $qs_f = Config::inst()->get('ShopSearch', 'qs_filters'); |
@@ -1,11 +1,11 @@ |
||
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | - * Interface for shop search drivers. |
|
| 4 | - * |
|
| 5 | - * @author Mark Guinn <[email protected]> |
|
| 6 | - * @date 09.03.2013 |
|
| 7 | - * @package shop_search |
|
| 8 | - */ |
|
| 3 | + * Interface for shop search drivers. |
|
| 4 | + * |
|
| 5 | + * @author Mark Guinn <[email protected]> |
|
| 6 | + * @date 09.03.2013 |
|
| 7 | + * @package shop_search |
|
| 8 | + */ |
|
| 9 | 9 | interface ShopSearchAdapter |
| 10 | 10 | { |
| 11 | 11 | /** |
@@ -17,5 +17,5 @@ |
||
| 17 | 17 | * @param string $sort [optional] |
| 18 | 18 | * @return ArrayData - must contain at least 'Matches' with an list of data objects that match the search |
| 19 | 19 | */ |
| 20 | - function searchFromVars($keywords, array $filters=array(), array $facetSpec=array(), $start=-1, $limit=-1, $sort=''); |
|
| 20 | + function searchFromVars($keywords, array $filters = array(), array $facetSpec = array(), $start = -1, $limit = -1, $sort = ''); |
|
| 21 | 21 | } |
@@ -17,7 +17,9 @@ |
||
| 17 | 17 | */ |
| 18 | 18 | public function updateSearchResultsResponse(&$request, &$response, $results, $data) { |
| 19 | 19 | if ($request->isAjax() && $this->owner->hasExtension('AjaxControllerExtension')) { |
| 20 | - if (!$response) $response = $this->owner->getAjaxResponse(); |
|
| 20 | + if (!$response) { |
|
| 21 | + $response = $this->owner->getAjaxResponse(); |
|
| 22 | + } |
|
| 21 | 23 | $response->addRenderContext('RESULTS', $results); |
| 22 | 24 | $response->pushRegion('SearchResults', $results); |
| 23 | 25 | $response->pushRegion('SearchHeader', $results); |
@@ -38,7 +38,7 @@ |
||
| 38 | 38 | |
| 39 | 39 | $emptyString = self::config()->category_empty_string; |
| 40 | 40 | if ($emptyString !== 'NONE') { |
| 41 | - $catField->setEmptyString(_t('ShopSearch.'.$emptyString, $emptyString)); |
|
| 41 | + $catField->setEmptyString(_t('ShopSearch.' . $emptyString, $emptyString)); |
|
| 42 | 42 | } |
| 43 | 43 | |
| 44 | 44 | $fields->push($catField); |
@@ -29,7 +29,9 @@ discard block |
||
| 29 | 29 | function __construct($controller, $method, $suggestURL = '') { |
| 30 | 30 | $searchField = TextField::create('q', ''); |
| 31 | 31 | $searchField->setAttribute('placeholder', _t('ShopSearch.SEARCH', 'Search')); |
| 32 | - if ($suggestURL) $searchField->setAttribute('data-suggest-url', $suggestURL); |
|
| 32 | + if ($suggestURL) { |
|
| 33 | + $searchField->setAttribute('data-suggest-url', $suggestURL); |
|
| 34 | + } |
|
| 33 | 35 | |
| 34 | 36 | $fields = FieldList::create($searchField); |
| 35 | 37 | if (!self::config()->disable_category_dropdown) { |
@@ -48,7 +50,9 @@ discard block |
||
| 48 | 50 | |
| 49 | 51 | $this->setFormMethod('GET'); |
| 50 | 52 | $this->disableSecurityToken(); |
| 51 | - if ($c = self::config()->css_classes) $this->addExtraClass($c); |
|
| 53 | + if ($c = self::config()->css_classes) { |
|
| 54 | + $this->addExtraClass($c); |
|
| 55 | + } |
|
| 52 | 56 | |
| 53 | 57 | Requirements::css(SHOP_SEARCH_FOLDER . '/css/ShopSearch.css'); |
| 54 | 58 | |
@@ -1,11 +1,11 @@ |
||
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | - * Form object for shop search. |
|
| 4 | - * |
|
| 5 | - * @author Mark Guinn <[email protected]> |
|
| 6 | - * @date 09.23.2013 |
|
| 7 | - * @package shop_search |
|
| 8 | - */ |
|
| 3 | + * Form object for shop search. |
|
| 4 | + * |
|
| 5 | + * @author Mark Guinn <[email protected]> |
|
| 6 | + * @date 09.23.2013 |
|
| 7 | + * @package shop_search |
|
| 8 | + */ |
|
| 9 | 9 | class ShopSearchForm extends Form |
| 10 | 10 | { |
| 11 | 11 | /** @var bool - setting this to true will remove the category dropdwon from the form */ |
@@ -18,7 +18,7 @@ discard block |
||
| 18 | 18 | * @param string $sort [optional] |
| 19 | 19 | * @return ArrayData |
| 20 | 20 | */ |
| 21 | - function searchFromVars($keywords, array $filters=array(), array $facetSpec=array(), $start=-1, $limit=-1, $sort='') { |
|
| 21 | + function searchFromVars($keywords, array $filters = array(), array $facetSpec = array(), $start = -1, $limit = -1, $sort = '') { |
|
| 22 | 22 | $searchable = ShopSearch::get_searchable_classes(); |
| 23 | 23 | $matches = new ArrayList; |
| 24 | 24 | |
@@ -32,13 +32,13 @@ discard block |
||
| 32 | 32 | $filter = array(); |
| 33 | 33 | |
| 34 | 34 | // Use parametrized query if SilverStripe >= 3.2 |
| 35 | - if(SHOP_SEARCH_IS_SS32){ |
|
| 36 | - foreach($keywordFields as $indexFields){ |
|
| 35 | + if (SHOP_SEARCH_IS_SS32) { |
|
| 36 | + foreach ($keywordFields as $indexFields) { |
|
| 37 | 37 | $filter[] = array("MATCH ($indexFields) AGAINST (?)" => $keywords); |
| 38 | 38 | } |
| 39 | 39 | $list = $list->whereAny($filter); |
| 40 | 40 | } else { |
| 41 | - foreach($keywordFields as $indexFields){ |
|
| 41 | + foreach ($keywordFields as $indexFields) { |
|
| 42 | 42 | $filter[] = sprintf("MATCH ($indexFields) AGAINST ('%s')", Convert::raw2sql($keywords)); |
| 43 | 43 | } |
| 44 | 44 | // join all the filters with an "OR" statement |
@@ -78,7 +78,7 @@ discard block |
||
| 78 | 78 | } |
| 79 | 79 | } |
| 80 | 80 | |
| 81 | - if(count($indexList) === 0){ |
|
| 81 | + if (count($indexList) === 0) { |
|
| 82 | 82 | throw new Exception("Class $className does not appear to have any fulltext indexes"); |
| 83 | 83 | } |
| 84 | 84 | |
@@ -1,12 +1,12 @@ |
||
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | - * Adapter that will use MySQL's full text search features. |
|
| 4 | - * |
|
| 5 | - * @author Mark Guinn <[email protected]> |
|
| 6 | - * @date 11.13.2013 |
|
| 7 | - * @package shop_search |
|
| 8 | - * @subpackage adapters |
|
| 9 | - */ |
|
| 3 | + * Adapter that will use MySQL's full text search features. |
|
| 4 | + * |
|
| 5 | + * @author Mark Guinn <[email protected]> |
|
| 6 | + * @date 11.13.2013 |
|
| 7 | + * @package shop_search |
|
| 8 | + * @subpackage adapters |
|
| 9 | + */ |
|
| 10 | 10 | class ShopSearchMysql extends Object implements ShopSearchAdapter |
| 11 | 11 | { |
| 12 | 12 | /** |