Passed
Push — develop ( c3333d...72dd24 )
by Jens
04:12
created

PublicationRouting::logPublicationActivity()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nc 2
nop 3
dl 0
loc 6
rs 9.4285
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);
0 ignored issues
show
Bug introduced by
It seems like $publicationDate can also be of type integer; however, parameter $publicationDate of CloudControl\Cms\storage...publishDocumentBySlug() does only seem to accept null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

48
            /** @scrutinizer ignore-type */ $publicationDate);
Loading history...
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
    private function getPublicationDate()
101
    {
102
        if (isset($_GET['publicationDate'])) {
103
            return intval($_GET['publicationDate']);
104
        }
105
106
        if (isset($_GET['date'], $_GET['time'])) {
107
            $time = strtotime($_GET['date'] . ' ' . $_GET['time']);
108
            return $time === false ? time() : $time;
109
        }
110
    }
111
112
    private function logPublicationActivity($request, $cmsComponent, $scheduled)
113
    {
114
        if ($scheduled) {
115
            $this->clearCacheAndLogActivity($request, $cmsComponent, 'clock-o', 'scheduled publication for');
116
        } else {
117
            $this->clearCacheAndLogActivity($request, $cmsComponent);
118
        }
119
    }
120
}