Issues (112)

src/Tasks/LocationPublishTask.php (1 issue)

Severity
1
<?php
2
3
namespace Dynamic\Locator\Tasks;
4
5
use Dynamic\Locator\Model\Location;
6
use SilverStripe\Control\Director;
7
use SilverStripe\Dev\BuildTask;
8
9
/**
10
 * Class LocationPublishTask
11
 */
12
class LocationPublishTask extends BuildTask
13
{
14
    /**
15
     * @var string
16
     */
17
    protected $title = 'Publish all Locations';
18
    /**
19
     * @var string
20
     */
21
    protected $description = 'Migration task - pre versioning on Location';
22
    /**
23
     * @var bool
24
     */
25
    protected $enabled = true;
26
27
    /**
28
     * @param $request
29
     */
30
    public function run($request)
31
    {
32
        $class = ($request->getVar('locationclass')) ? $request->getVar('locationclass') : 'Location';
33
        $this->publishLocations($class);
34
    }
35
36
    /**
37
     * @param string $class
38
     * @return \Generator
39
     */
40
    protected function iterateLocations($class)
41
    {
42
        foreach ($class::get()->filter('ShowInLocator', true) as $location) {
43
            yield $location;
44
        }
45
    }
46
47
    /**
48
     * mark all ProductDetail records as ShowInMenus = 0.
49
     *
50
     * @param string $class
51
     */
52
    public function publishLocations($class)
53
    {
54
        if (!isset($class) || !class_exists($class) || !$class instanceof Location) {
0 ignored issues
show
$class is never a sub-type of Dynamic\Locator\Model\Location.
Loading history...
55
            $class = 'Location';
56
        }
57
        $ct = 0;
58
        $publish = function ($location) use (&$ct) {
59
            if (!$location->isPublished()) {
60
                $title = $location->Title;
61
                $location->writeToStage('Stage');
62
                $location->publish('Stage', 'Live');
63
                static::write_message($title);
64
                ++$ct;
65
            }
66
        };
67
68
        foreach ($this->iterateLocations($class) as $location) {
69
            $publish($location);
70
        }
71
72
        static::write_message("{$ct} locations updated.");
73
    }
74
75
    /**
76
     * @param $message
77
     */
78
    protected static function write_message($message)
79
    {
80
        if (Director::is_cli()) {
81
            echo "{$message}\n";
82
        } else {
83
            echo "{$message}<br><br>";
84
        }
85
    }
86
}
87