Added order:random support to post searching
This commit is contained in:
parent
0049d59354
commit
22e7d3657b
13 changed files with 35 additions and 13 deletions
4
TODO
4
TODO
|
@ -15,7 +15,6 @@ everything related to posts:
|
|||
- search order
|
||||
- order:comment_count
|
||||
- order:comment_time
|
||||
- order:random (at least unstable version)
|
||||
|
||||
- single post view
|
||||
- previous and next post (difficult)
|
||||
|
@ -25,9 +24,6 @@ everything related to posts:
|
|||
- editing
|
||||
- ability to loop video posts
|
||||
|
||||
- random post
|
||||
- regard safety settings
|
||||
|
||||
- ability to paste many urls in post upload
|
||||
|
||||
- post notes
|
||||
|
|
|
@ -7,6 +7,7 @@ abstract class AbstractDao implements ICrudDao
|
|||
protected $fpdo;
|
||||
protected $tableName;
|
||||
protected $entityConverter;
|
||||
protected $driver;
|
||||
|
||||
public function __construct(
|
||||
\Szurubooru\DatabaseConnection $databaseConnection,
|
||||
|
@ -240,6 +241,7 @@ abstract class AbstractDao implements ICrudDao
|
|||
{
|
||||
$this->pdo = $databaseConnection->getPDO();
|
||||
$this->fpdo = new \FluentPDO($this->pdo);
|
||||
$this->driver = $databaseConnection->getDriver();
|
||||
}
|
||||
|
||||
private function decorateQueryFromFilter($query, \Szurubooru\SearchServices\Filters\IFilter $filter)
|
||||
|
@ -250,11 +252,25 @@ abstract class AbstractDao implements ICrudDao
|
|||
}
|
||||
}
|
||||
|
||||
private static function compileOrderBy($order)
|
||||
private function compileOrderBy($order)
|
||||
{
|
||||
$orderByString = '';
|
||||
foreach ($order as $orderColumn => $orderDir)
|
||||
{
|
||||
if ($orderColumn === \Szurubooru\SearchServices\Filters\BasicFilter::ORDER_RANDOM)
|
||||
{
|
||||
$driver = $this->driver;
|
||||
if ($driver === 'sqlite')
|
||||
{
|
||||
$orderColumn = 'RANDOM()';
|
||||
}
|
||||
else
|
||||
{
|
||||
$orderColumn = 'RAND()';
|
||||
}
|
||||
}
|
||||
$orderByString .= $orderColumn . ' ' . ($orderDir === \Szurubooru\SearchServices\Filters\IFilter::ORDER_DESC ? 'DESC' : 'ASC') . ', ';
|
||||
}
|
||||
return substr($orderByString, 0, -2);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,11 @@ class DatabaseConnection
|
|||
return $this->pdo;
|
||||
}
|
||||
|
||||
public function getDriver()
|
||||
{
|
||||
return $this->getPDO()->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
}
|
||||
|
||||
public function close()
|
||||
{
|
||||
$this->pdo = null;
|
||||
|
|
|
@ -3,6 +3,8 @@ namespace Szurubooru\SearchServices\Filters;
|
|||
|
||||
class BasicFilter implements IFilter
|
||||
{
|
||||
const ORDER_RANDOM = 'random';
|
||||
|
||||
private $order = [];
|
||||
private $requirements = [];
|
||||
private $pageNumber;
|
||||
|
|
|
@ -97,6 +97,9 @@ class PostSearchParser extends AbstractSearchParser
|
|||
elseif ($token === 'file_size')
|
||||
return \Szurubooru\SearchServices\Filters\PostFilter::ORDER_FILE_SIZE;
|
||||
|
||||
elseif ($token === 'random')
|
||||
return \Szurubooru\SearchServices\Filters\PostFilter::ORDER_RANDOM;
|
||||
|
||||
throw new \BadMethodCallException('Not supported');
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ class Upgrade01 implements IUpgrade
|
|||
{
|
||||
public function run(\Szurubooru\DatabaseConnection $databaseConnection)
|
||||
{
|
||||
$driver = $databaseConnection->getPDO()->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
$driver = $databaseConnection->getDriver();
|
||||
|
||||
$databaseConnection->getPDO()->exec('
|
||||
CREATE TABLE users
|
||||
|
|
|
@ -6,7 +6,7 @@ class Upgrade03 implements IUpgrade
|
|||
public function run(\Szurubooru\DatabaseConnection $databaseConnection)
|
||||
{
|
||||
$pdo = $databaseConnection->getPDO();
|
||||
$driver = $pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
$driver = $databaseConnection->getDriver();
|
||||
|
||||
$pdo->exec('DROP TABLE IF EXISTS posts');
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ class Upgrade05 implements IUpgrade
|
|||
public function run(\Szurubooru\DatabaseConnection $databaseConnection)
|
||||
{
|
||||
$pdo = $databaseConnection->getPDO();
|
||||
$driver = $pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
$driver = $databaseConnection->getDriver();
|
||||
|
||||
$pdo->exec('
|
||||
CREATE TABLE tags2
|
||||
|
|
|
@ -6,7 +6,7 @@ class Upgrade07 implements IUpgrade
|
|||
public function run(\Szurubooru\DatabaseConnection $databaseConnection)
|
||||
{
|
||||
$pdo = $databaseConnection->getPDO();
|
||||
$driver = $pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
$driver = $databaseConnection->getDriver();
|
||||
|
||||
$pdo->exec('CREATE TABLE globals
|
||||
(
|
||||
|
|
|
@ -6,7 +6,7 @@ class Upgrade08 implements IUpgrade
|
|||
public function run(\Szurubooru\DatabaseConnection $databaseConnection)
|
||||
{
|
||||
$pdo = $databaseConnection->getPDO();
|
||||
$driver = $pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
$driver = $databaseConnection->getDriver();
|
||||
|
||||
$pdo->exec('CREATE TABLE postRelations
|
||||
(
|
||||
|
|
|
@ -17,7 +17,7 @@ class Upgrade09 implements IUpgrade
|
|||
public function run(\Szurubooru\DatabaseConnection $databaseConnection)
|
||||
{
|
||||
$pdo = $databaseConnection->getPDO();
|
||||
$driver = $pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
$driver = $databaseConnection->getDriver();
|
||||
|
||||
$pdo->exec('DROP TABLE IF EXISTS snapshots');
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ class Upgrade10 implements IUpgrade
|
|||
public function run(\Szurubooru\DatabaseConnection $databaseConnection)
|
||||
{
|
||||
$pdo = $databaseConnection->getPDO();
|
||||
$driver = $pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
$driver = $databaseConnection->getDriver();
|
||||
|
||||
$pdo->exec('CREATE TABLE favorites
|
||||
(
|
||||
|
|
|
@ -6,7 +6,7 @@ class Upgrade11 implements IUpgrade
|
|||
public function run(\Szurubooru\DatabaseConnection $databaseConnection)
|
||||
{
|
||||
$pdo = $databaseConnection->getPDO();
|
||||
$driver = $pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
$driver = $databaseConnection->getDriver();
|
||||
|
||||
$pdo->exec('CREATE TABLE postScores
|
||||
(
|
||||
|
|
Loading…
Reference in a new issue