Passed
Push — develop ( 5c0545...627810 )
by Jens
02:44
created

SearchRouting   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Importance

Changes 0
Metric Value
dl 0
loc 86
rs 10
c 0
b 0
f 0
wmc 18
lcom 0
cbo 5

6 Methods

Rating   Name   Duplication   Size   Complexity  
B __construct() 0 9 5
A overviewRoute() 0 9 1
A updateIndexRoute() 0 5 1
A ajaxUpdateIndexRoute() 0 13 2
A showJson() 0 6 1
B stepRouting() 0 17 8
1
<?php
2
/**
3
 * User: jensk
4
 * Date: 21-2-2017
5
 * Time: 10:22
6
 */
7
8
namespace CloudControl\Cms\components\cms;
9
10
11
use CloudControl\Cms\components\CmsComponent;
12
use CloudControl\Cms\search\Indexer;
13
use CloudControl\Cms\search\Search;
14
15
class SearchRouting implements CmsRouting
16
{
17
18
    /**
19
     * SearchRouting constructor.
20
     *
21
     * @param \CloudControl\Cms\cc\Request $request
22
     * @param                                  $relativeCmsUri
23
     * @param \CloudControl\Cms\components\CmsComponent $cmsComponent
24
     */
25
    public function __construct($request, $relativeCmsUri, $cmsComponent)
26
    {
27
        switch ($relativeCmsUri) {
28
            case '/search': $this->overviewRoute($cmsComponent); break;
29
            case '/search/update-index' : $this->updateIndexRoute($cmsComponent); break;
30
            case '/search/ajax-update-index': $this->ajaxUpdateIndexRoute($request, $cmsComponent); break;
31
            case '/search/manual-update-index' : $indexer = new Indexer($cmsComponent->storage); $indexer->updateIndex(); break;
32
        }
33
    }
34
35
    /**
36
     * @param \CloudControl\Cms\components\CmsComponent $cmsComponent
37
     */
38
    private function overviewRoute($cmsComponent)
39
    {
40
        $cmsComponent->subTemplate = 'search';
41
        $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_SEARCH);
42
        $documentCount = $cmsComponent->storage->getDocuments()->getTotalDocumentCount();
43
        $indexer = new Search($cmsComponent->storage);
44
        $indexedDocuments = $indexer->getIndexedDocuments();
45
        $cmsComponent->setParameter(CmsComponent::PARAMETER_SEARCH_NEEDS_UPDATE, $documentCount !== $indexedDocuments);
46
    }
47
48
    /**
49
     * @param \CloudControl\Cms\components\CmsComponent $cmsComponent
50
     */
51
    private function updateIndexRoute($cmsComponent)
52
    {
53
        $cmsComponent->subTemplate = 'search/update-index';
54
        $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_SEARCH);
55
    }
56
57
    private function ajaxUpdateIndexRoute($request, $cmsComponent)
58
    {
59
        $cmsComponent->subTemplate = 'search/update-index';
60
        if (isset($request::$get['step'])) {
61
            \set_time_limit(0); // Set max excecution time infinite
62
            \session_write_close(); // Close the session, so it doesnt create a lock on the sessionstorage, block other requests.
63
            $indexer = new Indexer($cmsComponent->storage);
64
            $step = $request::$get['step'];
65
            $this->stepRouting($step, $cmsComponent, $indexer);
66
        } else {
67
            $this->showJson('No step defined.', 'HTTP/1.0 500 Internal Server Error');
68
        }
69
    }
70
71
    private function showJson($obj, $httpHeader = 'HTTP/1.0 200 OK')
72
    {
73
        header($_SERVER['SERVER_PROTOCOL'] . $httpHeader, true);
74
        header('Content-type: application/json');
75
        die(json_encode($obj));
76
    }
77
78
    /**
79
     * @param CmsComponent $cmsComponent
80
     * @param string $step
81
     * @param Indexer $indexer
82
     */
83
    private function stepRouting($step, $cmsComponent, $indexer)
84
    {
85
        switch ($step) {
86
            case 'resetIndex': $indexer->resetIndex(); break;
87
            case 'cleanPublishedDeletedDocuments': $cmsComponent->storage->getDocuments()->cleanPublishedDeletedDocuments(); break;
88
            case 'createDocumentTermCount':
89
                $documents = $cmsComponent->storage->getDocuments()->getPublishedDocumentsNoFolders();
90
                $indexer->createDocumentTermCount($documents);
91
                break;
92
            case 'createDocumentTermFrequency': $indexer->createDocumentTermFrequency(); break;
93
            case 'createTermFieldLengthNorm': $indexer->createTermFieldLengthNorm(); break;
94
            case 'createInverseDocumentFrequency': $indexer->createInverseDocumentFrequency(); break;
95
            case 'replaceOldIndex': $indexer->replaceOldIndex(); break;
96
            default : $this->showJson('Invalid step: ' . $step . '.', 'HTTP/1.0 500 Internal Server Error'); break;
97
        }
98
        $this->showJson('done');
99
    }
100
}