Passed
Push — develop ( 7af1af...b22d40 )
by Jens
02:32
created

PublicationRouting::unpublishDocumentRoute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 2
dl 0
loc 5
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
25
    /**
26
     * CmsRouting constructor.
27
     *
28
     * @param Request $request
29
     * @param string $relativeCmsUri
30
     * @param CmsComponent $cmsComponent
31
     * @throws \Exception
32
     */
33
    public function __construct(Request $request, $relativeCmsUri, CmsComponent $cmsComponent)
34
    {
35
        $this->doRouting($request, $relativeCmsUri, $cmsComponent);
36
    }
37
38
    /**
39
     * @param $request
40
     * @param CmsComponent $cmsComponent
41
     * @throws \Exception
42
     */
43
    protected function publishDocumentRoute($request, $cmsComponent)
44
    {
45
        $cmsComponent->storage->getDocuments()->publishDocumentBySlug($request::$get[CmsConstants::GET_PARAMETER_SLUG]);
46
        $this->clearCacheAndLogActivity($request, $cmsComponent);
47
        $this->doAfterPublishRedirect($request, $cmsComponent);
48
    }
49
50
    /**
51
     * @param $request
52
     * @param CmsComponent $cmsComponent
53
     * @throws \Exception
54
     */
55
    protected function unpublishDocumentRoute($request, $cmsComponent)
56
    {
57
        $cmsComponent->storage->getDocuments()->unpublishDocumentBySlug($request::$get[CmsConstants::GET_PARAMETER_SLUG]);
58
        $this->clearCacheAndLogActivity($request, $cmsComponent, 'times-circle-o', self::GET_PARAMETER_UNPUBLISHED);
59
        $this->doAfterPublishRedirect($request, $cmsComponent, self::GET_PARAMETER_UNPUBLISHED);
60
    }
61
62
    /**
63
     * @param $request
64
     * @param CmsComponent $cmsComponent
65
     * @param string $param
66
     */
67
    private function doAfterPublishRedirect($request, $cmsComponent, $param = 'published')
68
    {
69
        if ($cmsComponent->autoUpdateSearchIndex) {
70
            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)));
71
        } else {
72
            header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsConstants::PARAMETER_CMS_PREFIX) . '/documents?' . $param . '=' . urlencode($request::$get[CmsConstants::GET_PARAMETER_SLUG]) . '&path=' . $this->getReturnPath($request));
73
        }
74
        exit;
75
    }
76
77
    /**
78
     * @param $request
79
     * @param CmsComponent $cmsComponent
80
     * @param string $icon
81
     * @param string $activity
82
     */
83
    private function clearCacheAndLogActivity(
84
        $request,
85
        $cmsComponent,
86
        $icon = 'check-circle-o',
87
        $activity = 'published'
88
    )
89
    {
90
        Cache::getInstance()->clearCache();
91
        $path = $request::$get[CmsConstants::GET_PARAMETER_SLUG];
92
        $docLink = $request::$subfolders . $cmsComponent->getParameter(CmsConstants::PARAMETER_CMS_PREFIX) . '/documents/edit-document?slug=' . $path;
93
        $cmsComponent->storage->getActivityLog()->add($activity . ' document <a href="' . $docLink . '">' . $request::$get[CmsConstants::GET_PARAMETER_SLUG] . '</a>',
94
            $icon);
95
    }
96
}