Source of file SlideLinkTask.php
Size: 3,168 Bytes - Last Modified: 2021-12-24T06:45:35+00:00
/var/www/docs.ssmods.com/process/src/src/Task/SlideLinkTask.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | <?php namespace Dynamic\Flexslider\Task; use Dynamic\FlexSlider\Model\SlideImage; use Sheadawson\Linkable\Models\Link; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\Dev\BuildTask; use SilverStripe\ORM\DB; /** * Class SlideLinkTask * @package Dynamic\Flexslider\Task */ class SlideLinkTask extends BuildTask { /** * @var string */ protected $title = 'Flexslider - Slide Link Migration Task'; /** * @var string */ private static $segment = 'slide-link-migration-task'; /** * @var array */ private $known_links = []; /** * @param \SilverStripe\Control\HTTPRequest $request * @throws \SilverStripe\ORM\ValidationException */ public function run($request) { $this->migrateLinks(); } /** * @throws \SilverStripe\ORM\ValidationException */ protected function migrateLinks() { $baseTable = SlideImage::singleton()->baseTable(); $tables = [ $baseTable, "{$baseTable}_Versions", "{$baseTable}_Live", ]; foreach ($tables as $table) { foreach ($this->yieldSingle(DB::query("SELECT * FROM \"{$table}\"")) as $record) { $linkID = $record['PageLinkID']; $linkLabel = isset($record['LinkLabel']) ? $record['LinkLabel'] : null; $slideLink = $this->findOrMakeLink($linkID, $linkLabel); if ($slideLink !== false && $slideLink instanceof Link) { DB::prepared_query( "UPDATE \"{$table}\" SET \"SlideLinkID\" = ? WHERE \"ID\" = ?", [$slideLink->ID, $record['ID']] ); } } } } /** * @param $list * @return \Generator */ private function yieldSingle($list) { foreach ($list as $item) { yield $item; } } /** * @param int $linkID * @param string $linkLabel * @return bool|mixed|Link * @throws \SilverStripe\ORM\ValidationException */ private function findOrMakeLink($linkID = 0, $linkLabel = '') { if (!$linkID || !($page = SiteTree::get()->byID($linkID))) { return false; } if (isset($this->getKnownLinks()[$linkID])) { return $this->getKnownLinks()[$linkID]; } $link = Link::create(); $link->Type = 'SiteTree'; $link->SiteTreeID = $linkID; $link->Template = 'button'; if ($linkLabel !== null && $linkLabel !== '') { $link->Title = $linkLabel; } else { $link->Title = $page->Title; } $link->write(); $this->addKnownLink($linkID, $link); return $link; } /** * @param $linkID * @param $linkableLinkID * @return $this */ private function addKnownLink($linkID, $linkableLinkID) { $this->known_links[$linkID] = $linkableLinkID; return $this; } /** * @return array */ private function getKnownLinks() { return $this->known_links; } } |