return $list;
}
+
+ /**
+ * Inserts a new keyword if it does not already exist, or updates it if it does.
+ */
+ public function upsert() {
+ $sql = "INSERT INTO wcf".WCF_N."_search_keyword
+ (keyword, searches, lastSearchTime)
+ VALUES (?, ?, ?)
+ ON DUPLICATE KEY UPDATE searches = searches + VALUES(searches),
+ lastSearchTime = VALUES(lastSearchTime)";
+ $statement = WCF::getDB()->prepareStatement($sql);
+ $statement->execute([
+ mb_substr($this->parameters['data']['keyword'], 0, 191),
+ ($this->parameters['data']['searches'] ?? 1),
+ ($this->parameters['data']['lastSearchTime'] ?? TIME_NOW),
+ ]);
+ }
}
<?php
namespace wcf\form;
+use wcf\data\search\keyword\SearchKeywordAction;
use wcf\data\search\Search;
use wcf\data\search\SearchAction;
use wcf\system\exception\IllegalLinkException;
}
// save keyword
if (!empty($this->query)) {
- SearchKeywordManager::getInstance()->add($this->query);
+ (new SearchKeywordAction([], 'upsert', ['data' => [
+ 'keyword' => $this->query,
+ ]]))->executeAction();
}
$this->saved();
<?php
namespace wcf\system\search;
-use wcf\data\search\keyword\SearchKeyword;
use wcf\data\search\keyword\SearchKeywordAction;
use wcf\system\SingletonFactory;
-use wcf\system\WCF;
/**
* Manages the search keywords.
* @copyright 2001-2019 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @package WoltLabSuite\Core\System\Search
+ * @deprecated 5.2
*/
class SearchKeywordManager extends SingletonFactory {
/**
* @param string $keyword
*/
public function add($keyword) {
- $keyword = mb_substr($keyword, 0, 191);
-
- // search existing entry
- $sql = "SELECT *
- FROM wcf".WCF_N."_search_keyword
- WHERE keyword = ?";
- $statement = WCF::getDB()->prepareStatement($sql);
- $statement->execute([$keyword]);
- if (($object = $statement->fetchObject(SearchKeyword::class)) !== null) {
- $action = new SearchKeywordAction([$object], 'update', ['data' => [
- 'searches' => $object->searches + 1,
- 'lastSearchTime' => TIME_NOW
- ]]);
- $action->executeAction();
- }
- else {
- $action = new SearchKeywordAction([], 'create', ['data' => [
- 'keyword' => $keyword,
- 'searches' => 1,
- 'lastSearchTime' => TIME_NOW
- ]]);
- $action->executeAction();
- }
+ (new SearchKeywordAction([], 'upsert', ['data' => [
+ 'keyword' => $keyword,
+ ]]))->executeAction();
}
}