Source of file LocationCategoriesTask.php
Size: 2,112 Bytes - Last Modified: 2021-12-24T06:46:21+00:00
/var/www/docs.ssmods.com/process/src/tasks/LocationCategoriesTask.php
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | <?php namespace Dynamic\Locator\Tasks; use Dynamic\Locator\Location; use Dynamic\Locator\LocationCategory; use SilverStripe\Dev\BuildTask; use SilverStripe\ORM\DataObject; /** * Class LocationCategoriesTask * @package Dynamic\Locator\Tasks */ class LocationCategoriesTask extends BuildTask { /** * @var string */ protected $title = 'Location categories to many_many'; /** * @var string */ protected $description = 'Migration task - Converts locations to have multiple categories'; /** * @var bool */ protected $enabled = true; /** * @param $request */ public function run($request) { /** @var DataObject $class */ $class = ($request->getVar('locationclass')) ? $request->getVar('locationclass') : Location::class; $class::add_extension(LocationCategoryExtension::class); $categories = []; $convert = function (DataObject $location) use (&$categories) { /** @var Location $location */ // skip if no category if ($location->CategoryID > 0) { $categories[$location->CategoryID][] = $location->ID; } }; foreach ($this->iterateLocations($class) as $location) { $convert($location); } $catCt = 0; $locCT = 0; foreach ($categories as $categoryID => $locations) { /** @var LocationCategory $category */ $category = LocationCategory::get()->byID($categoryID); $category->Locations()->addMany($locations); $catCt++; $locCT += count($locations); } echo "{$catCt} categories converted<br />"; echo "{$locCT} location relations converted<br />"; $time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]; echo "Process Time: {$time} seconds"; } /** * @param string $class * @return Generator */ protected function iterateLocations($class) { foreach ($class::get() as $location) { yield $location; } } } |