Source of file SearchableObjectExtension.php
Size: 2,373 Bytes - Last Modified: 2021-12-24T05:16:56+00:00
/var/www/docs.ssmods.com/process/src/src/Extensions/SearchableObjectExtension.php
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | <?php namespace ilateral\SilverStripe\Searchable\Extensions; use ilateral\SilverStripe\Searchable\Model\SearchTable; use ilateral\SilverStripe\Searchable\Searchable; use SilverStripe\Core\Config\Config; use SilverStripe\ORM\DataExtension; class SearchableObjectExtension extends DataExtension { private static $belongs_to = [ 'SearchRecord' => SearchTable::class . '.BaseObject' ]; public function saveToSearchRecord() { /** * @var \SilverStripe\ORM\DataObject */ $owner = $this->getOwner(); $ancestors = $owner->getClassAncestry(); $search = $owner->SearchRecord(); $objects = Config::inst()->get(Searchable::class, 'objects'); // if objects isn't set cancel if (!is_array($objects)) { return; } $write = false; foreach (array_keys($objects) as $classname) { if (in_array($classname, $ancestors)) { foreach ($objects[$classname] as $field) { if (isset($owner->$field)) { $search->$field = $owner->$field; $write = true; } } } } if ($write) { $search->write(); } } /** * After base object is written, push fields to search table * * @return null */ public function onAfterWrite() { /** * @var \SilverStripe\ORM\DataObject */ $owner = $this->getOwner(); // If this is a versioned record, push to search after publish (not write) if ($owner->hasMethod('isPublished')) { return; } if ($owner->hasMethod('saveToSearchRecord')) { $owner->saveToSearchRecord(); } } /** * After base object is published (if available), push fields to search table * * @return null */ public function onAfterPublish() { /** * @var \SilverStripe\ORM\DataObject */ $owner = $this->getOwner(); if ($owner->hasMethod('saveToSearchRecord')) { $owner->saveToSearchRecord(); } } /** * Delete the linked search record if this record is deleted * * @return null */ public function onAfterDelete() { $this->getOwner()->SearchRecord()->delete(); } } |