Passed
Push — master ( 0e236c...ba5c72 )
by Jens
04:12
created

PublicationRouting::getPublicationDate()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 5
nc 4
nop 0
dl 0
loc 9
rs 9.2
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by jensk on 11-5-2018.
4
 */
5
6
namespace CloudControl\Cms\components\cms\document;
7
8
9
use CloudControl\Cms\cc\Request;
10
use CloudControl\Cms\components\cms\CmsConstants;
11
use CloudControl\Cms\components\cms\CmsRouting;
12
use CloudControl\Cms\components\CmsComponent;
13
use CloudControl\Cms\storage\Cache;
14
15
class PublicationRouting extends CmsRouting
16
{
17
    protected static $routes = array(
18
        '/documents/publish-document' => 'publishDocumentRoute',
19
        '/documents/unpublish-document' => 'unpublishDocumentRoute',
20
    );
21
22
    const GET_PARAMETER_PUBLISHED = 'published';
23
    const GET_PARAMETER_UNPUBLISHED = 'unpublished';
24
    const GET_PARAMETER_SCHEDULED = 'scheduled';
25
26
    /**
27
     * CmsRouting constructor.
28
     *
29
     * @param Request $request
30
     * @param string $relativeCmsUri
31
     * @param CmsComponent $cmsComponent
32
     * @throws \Exception
33
     */
34
    public function __construct(Request $request, $relativeCmsUri, CmsComponent $cmsComponent)
35
    {
36
        $this->doRouting($request, $relativeCmsUri, $cmsComponent);
37
    }
38
39
    /**
40
     * @param $request
41
     * @param CmsComponent $cmsComponent
42
     * @throws \Exception
43
     */
44
    protected function publishDocumentRoute($request, $cmsComponent)
45
    {
46
        $publicationDate = $this->getPublicationDate();
47
        $cmsComponent->storage->getDocuments()->publishDocumentBySlug($request::$get[CmsConstants::GET_PARAMETER_SLUG],
48
            $publicationDate);
49
        $scheduled = $publicationDate > time();
50
        $this->logPublicationActivity($request, $cmsComponent, $scheduled);
51
        $this->doAfterPublishRedirect($request, $cmsComponent, $scheduled ? self::GET_PARAMETER_SCHEDULED : self::GET_PARAMETER_PUBLISHED);
52
    }
53
54
    /**
55
     * @param $request
56
     * @param CmsComponent $cmsComponent
57
     * @throws \Exception
58
     */
59
    protected function unpublishDocumentRoute($request, $cmsComponent)
60
    {
61
        $cmsComponent->storage->getDocuments()->unpublishDocumentBySlug($request::$get[CmsConstants::GET_PARAMETER_SLUG]);
62
        $this->clearCacheAndLogActivity($request, $cmsComponent, 'times-circle-o', self::GET_PARAMETER_UNPUBLISHED);
63
        $this->doAfterPublishRedirect($request, $cmsComponent, self::GET_PARAMETER_UNPUBLISHED);
64
    }
65
66
    /**
67
     * @param $request
68
     * @param CmsComponent $cmsComponent
69
     * @param string $param
70
     */
71
    private function doAfterPublishRedirect($request, $cmsComponent, $param = 'published')
72
    {
73
        if ($cmsComponent->autoUpdateSearchIndex) {
74
            header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsConstants::PARAMETER_CMS_PREFIX) . '/search/update-index?returnUrl=' . urlencode($request::$subfolders . $cmsComponent->getParameter(CmsConstants::PARAMETER_CMS_PREFIX) . '/documents?' . $param . '=' . urlencode($request::$get[CmsConstants::GET_PARAMETER_SLUG]) . '&path=' . $this->getReturnPath($request)));
75
        } else {
76
            header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsConstants::PARAMETER_CMS_PREFIX) . '/documents?' . $param . '=' . urlencode($request::$get[CmsConstants::GET_PARAMETER_SLUG]) . '&path=' . $this->getReturnPath($request));
77
        }
78
        exit;
79
    }
80
81
    /**
82
     * @param $request
83
     * @param CmsComponent $cmsComponent
84
     * @param string $icon
85
     * @param string $activity
86
     */
87
    private function clearCacheAndLogActivity(
88
        $request,
89
        $cmsComponent,
90
        $icon = 'check-circle-o',
91
        $activity = 'published'
92
    ) {
93
        Cache::getInstance()->clearCache();
94
        $path = $request::$get[CmsConstants::GET_PARAMETER_SLUG];
95
        $docLink = $request::$subfolders . $cmsComponent->getParameter(CmsConstants::PARAMETER_CMS_PREFIX) . '/documents/edit-document?slug=' . $path;
96
        $cmsComponent->storage->getActivityLog()->add($activity . ' document <a href="' . $docLink . '">' . $request::$get[CmsConstants::GET_PARAMETER_SLUG] . '</a>',
97
            $icon);
98
    }
99
100
    /**
101
     * @return int
102
     */
103
    private function getPublicationDate()
104
    {
105
        if (isset($_GET['publicationDate'])) {
106
            return intval($_GET['publicationDate']);
107
        }
108
109
        if (isset($_GET['date'], $_GET['time'])) {
110
            $time = strtotime($_GET['date'] . ' ' . $_GET['time']);
111
            return $time === false ? time() : $time;
112
        }
113
    }
114
115
    /**
116
     * @param Request $request
117
     * @param CmsComponent $cmsComponent
118
     * @param bool $scheduled
119
     */
120
    private function logPublicationActivity($request, $cmsComponent, $scheduled)
121
    {
122
        if ($scheduled) {
123
            $this->clearCacheAndLogActivity($request, $cmsComponent, 'clock-o', 'scheduled publication for');
124
        } else {
125
            $this->clearCacheAndLogActivity($request, $cmsComponent);
126
        }
127
    }
128
}