2011-05-02 06:33:05 +02:00
|
|
|
<?php
|
2017-04-26 13:16:32 +02:00
|
|
|
|
2017-04-21 03:26:24 +02:00
|
|
|
namespace SilverStripe\FullTextSearch\Search\Variants;
|
|
|
|
|
2017-04-26 13:16:32 +02:00
|
|
|
use SilverStripe\ORM\DataObject;
|
|
|
|
use SilverStripe\Core\ClassInfo;
|
|
|
|
use SilverStripe\FullTextSearch\Search\SearchIntrospection;
|
|
|
|
use SilverStripe\Versioned\Versioned;
|
|
|
|
use SilverStripe\FullTextSearch\Search\Queries\SearchQuery;
|
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
class SearchVariantVersioned extends SearchVariant
|
|
|
|
{
|
|
|
|
public function appliesTo($class, $includeSubclasses)
|
|
|
|
{
|
2017-12-04 21:11:51 +01:00
|
|
|
if (!$this->appliesToEnvironment()) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2017-04-22 11:24:33 +02:00
|
|
|
return SearchIntrospection::has_extension($class, Versioned::class, $includeSubclasses);
|
2015-11-21 07:19:20 +01:00
|
|
|
}
|
2012-07-19 02:52:37 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
public function currentState()
|
|
|
|
{
|
2017-04-26 13:16:32 +02:00
|
|
|
return Versioned::get_stage();
|
2015-11-21 07:19:20 +01:00
|
|
|
}
|
|
|
|
public function reindexStates()
|
|
|
|
{
|
2017-11-16 01:59:15 +01:00
|
|
|
return [Versioned::DRAFT, Versioned::LIVE];
|
2015-11-21 07:19:20 +01:00
|
|
|
}
|
|
|
|
public function activateState($state)
|
|
|
|
{
|
2017-04-26 13:16:32 +02:00
|
|
|
Versioned::set_stage($state);
|
2015-11-21 07:19:20 +01:00
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2016-04-15 07:59:10 +02:00
|
|
|
public function alterDefinition($class, $index)
|
2015-11-21 07:19:20 +01:00
|
|
|
{
|
2017-11-16 01:59:15 +01:00
|
|
|
$this->addFilterField($index, '_versionedstage', [
|
2015-11-21 07:19:20 +01:00
|
|
|
'name' => '_versionedstage',
|
|
|
|
'field' => '_versionedstage',
|
|
|
|
'fullfield' => '_versionedstage',
|
2017-04-26 13:16:32 +02:00
|
|
|
'base' => DataObject::getSchema()->baseDataClass($class),
|
2016-04-15 07:59:10 +02:00
|
|
|
'origin' => $class,
|
2015-11-21 07:19:20 +01:00
|
|
|
'type' => 'String',
|
2017-11-16 01:59:15 +01:00
|
|
|
'lookup_chain' => [
|
|
|
|
[
|
|
|
|
'call' => 'variant',
|
|
|
|
'variant' => get_class($this),
|
|
|
|
'method' => 'currentState'
|
|
|
|
]
|
|
|
|
]
|
|
|
|
]);
|
2015-11-21 07:19:20 +01:00
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
public function alterQuery($query, $index)
|
|
|
|
{
|
2018-08-24 00:12:18 +02:00
|
|
|
$query->addFilter('_versionedstage', [
|
2017-11-16 01:59:15 +01:00
|
|
|
$this->currentState(),
|
|
|
|
SearchQuery::$missing
|
|
|
|
]);
|
2015-11-21 07:19:20 +01:00
|
|
|
}
|
2016-04-15 07:59:10 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
public function extractManipulationState(&$manipulation)
|
|
|
|
{
|
|
|
|
foreach ($manipulation as $table => $details) {
|
|
|
|
$class = $details['class'];
|
2017-11-16 01:59:15 +01:00
|
|
|
$stage = Versioned::DRAFT;
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2017-11-16 01:59:15 +01:00
|
|
|
if (preg_match('/^(.*)_' . Versioned::LIVE . '$/', $table, $matches)) {
|
2017-04-26 13:17:12 +02:00
|
|
|
$class = DataObject::getSchema()->tableClass($matches[1]);
|
2017-11-16 01:59:15 +01:00
|
|
|
$stage = Versioned::LIVE;
|
2015-11-21 07:19:20 +01:00
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
if (ClassInfo::exists($class) && $this->appliesTo($class, false)) {
|
|
|
|
$manipulation[$table]['class'] = $class;
|
2017-12-04 21:11:51 +01:00
|
|
|
$manipulation[$table]['state'][get_class($this)] = $stage;
|
2015-11-21 07:19:20 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
public function extractStates(&$table, &$ids, &$fields)
|
|
|
|
{
|
|
|
|
$class = $table;
|
|
|
|
$suffix = null;
|
2011-05-02 06:33:05 +02:00
|
|
|
|
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
if (ClassInfo::exists($class) && $this->appliesTo($class, false)) {
|
|
|
|
$table = $class;
|
2011-05-02 06:33:05 +02:00
|
|
|
|
2015-11-21 07:19:20 +01:00
|
|
|
foreach ($ids as $i => $statefulid) {
|
2017-12-04 21:11:51 +01:00
|
|
|
$ids[$i]['state'][get_class($this)] = $suffix ?: Versioned::DRAFT;
|
2015-11-21 07:19:20 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2011-05-02 06:33:05 +02:00
|
|
|
}
|