Completed
Push — master ( 89313f...8b5ee1 )
by Nassif
02:33
created

TranslationsSheet   A

Complexity

Total Complexity 21

Size/Duplication

Total Lines 165
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 98.86%

Importance

Changes 0
Metric Value
wmc 21
lcom 1
cbo 5
dl 0
loc 165
ccs 87
cts 88
cp 0.9886
rs 10
c 0
b 0
f 0

14 Methods

Rating   Name   Duplication   Size   Complexity  
A getId() 0 9 2
A getTitle() 0 4 1
A coordinates() 0 4 1
A emptyCoordinates() 0 4 1
A setup() 0 9 1
A writeTranslations() 0 7 1
A readTranslations() 0 4 1
A styleDocument() 0 51 3
A prepareForWrite() 0 6 1
A lockTranslations() 0 11 1
A unlockTranslations() 0 14 2
A isTranslationsLocked() 0 6 2
A removeAllProtectedRanges() 0 13 3
A updateHeaderRow() 0 7 1
1
<?php
2
3
namespace Nikaia\TranslationSheet\Sheet;
4
5
class TranslationsSheet extends AbstractSheet
6
{
7 11
    public function getId()
8
    {
9
        try {
10 11
            return $this->api()->firstSheetId();
11
        }
12 10
        catch (\Exception $e) {
13 10
            return 0;
14
        }
15
    }
16
17 9
    public function getTitle()
18
    {
19 9
        return 'Translations';
20
    }
21
22 7
    public function coordinates()
23
    {
24 7
        return $this->spreadsheet->translationsSheetCoordinates($this->getId(), $this->getTitle());
25
    }
26
27 3
    public function emptyCoordinates()
28
    {
29 3
        return $this->spreadsheet->translationsSheetCoordinates($this->getId(), $this->getTitle());
30
    }
31
32 2
    public function setup()
33
    {
34 2
        $this->spreadsheet->api()
35 2
            ->addBatchRequests([
36
                // Set properties
37 2
                $this->spreadsheet->api()->setSheetPropertiesRequest($this->getId(), $this->getTitle(), $this->styles()->translationSheetTabColor()),
38
            ])
39 2
            ->sendBatchRequests();
40 2
    }
41
42 2
    public function writeTranslations($translations)
43
    {
44 2
        $this->spreadsheet->setTranslations($translations);
45
46 2
        $this->spreadsheet->api()
47 2
            ->writeCells($this->coordinates()->dataShortRange(), $translations);
48 2
    }
49
50 2
    public function readTranslations()
51
    {
52 2
        return $this->spreadsheet->api()->readCells($this->getId(), $this->coordinates()->dataShortRange(2, true));
53
    }
54
55 2
    public function styleDocument()
56
    {
57 2
        $fullkeyRange = $this->coordinates()->fullKeyColumnRange();
58 2
        $translationsRange = $this->coordinates()->translationsRange();
59 2
        $metaRange = $this->coordinates()->metaColumnsRange();
60
61
        $requests = [
62
            // Header row
63 2
            $this->spreadsheet->api()->frozenRowRequest($this->getId()),
64 2
            $this->spreadsheet->api()->styleArea($this->emptyCoordinates()->headerRange(), $this->styles()->translationsHeader()),
65 2
            $this->spreadsheet->api()->protectRangeRequest($this->emptyCoordinates()->headerRange(), 'HEADER.'),
66
67
            // Full key column
68 2
            $this->spreadsheet->api()->frozenColumnRequest($this->getId()),
69 2
            $this->spreadsheet->api()->protectRangeRequest($fullkeyRange, 'FULL_KEY'),
70 2
            $this->spreadsheet->api()->fixedColumnWidthRequest($this->getId(), 0, 1, 450),
71 2
            $this->spreadsheet->api()->styleArea($fullkeyRange, $this->styles()->fullKeyColumn()),
72
73
            // Translations columns
74 2
            $this->spreadsheet->api()->styleArea($translationsRange, $this->styles()->translationsColumns()),
75
76
            // Meta columns
77 2
            $this->spreadsheet->api()->protectRangeRequest($metaRange, 'META'),
78 2
            $this->spreadsheet->api()->styleArea($metaRange, $this->styles()->metaColumns()),
79 2
            $this->spreadsheet->api()->fixedColumnWidthRequest($this->getId(), $this->coordinates()->namespaceColumnIndex(), $this->coordinates()->namespaceColumnIndex() + 1, 145),
80 2
            $this->spreadsheet->api()->fixedColumnWidthRequest($this->getId(), $this->coordinates()->groupColumnIndex(), $this->coordinates()->groupColumnIndex() + 1, 80),
81 2
            $this->spreadsheet->api()->fixedColumnWidthRequest($this->getId(), $this->coordinates()->keyColumnIndex(), $this->coordinates()->keyColumnIndex() + 1, 240),
82 2
            $this->spreadsheet->api()->fixedColumnWidthRequest($this->getId(), $this->coordinates()->sourceFileColumnIndex(), $this->coordinates()->sourceFileColumnIndex() + 1, 360),
83
        ];
84
85
        // Fixed locales translations column width
86 2
        $beginAt = 1;
87 2
        foreach ($this->spreadsheet->getLocales() as $locale) {
88 2
            $requests[] = $this->spreadsheet->api()->fixedColumnWidthRequest($this->getId(), $beginAt, $beginAt + 1, 350);
89 2
            $beginAt++;
90
        }
91
92
        // Send requests
93 2
        $this->spreadsheet->api()->addBatchRequests($requests)->sendBatchRequests();
94
95
        // Delete extra columns and rows if any
96
        try {
97 2
            $this->spreadsheet->api()->addBatchRequests([
98 2
                $this->spreadsheet->api()->deleteRowsFrom($this->getId(), $this->coordinates()->getRowsCount()),
99 2
                $this->spreadsheet->api()->deleteColumnsFrom($this->getId(), $this->coordinates()->getColumnsCount()),
100 2
            ])->sendBatchRequests();
101
        } catch (\Google_Service_Exception $e) {
0 ignored issues
show
Bug introduced by
The class Google_Service_Exception does not exist. Did you forget a USE statement, or did you not list all dependencies?

Scrutinizer analyzes your composer.json/composer.lock file if available to determine the classes, and functions that are defined by your dependencies.

It seems like the listed class was neither found in your dependencies, nor was it found in the analyzed files in your repository. If you are using some other form of dependency management, you might want to disable this analysis.

Loading history...
102
            // If there is no extra columns or rows Google api will raise an exception :
103
            // ... Invalid requests[xxx].deleteDimension: Cannot delete a column that doesn't exist ...
104
        }
105 2
    }
106
107 2
    public function prepareForWrite()
108
    {
109
        // We need to remove all protected ranges, to avoid any duplicates that may lead to
110
        // some weird behaviours
111 2
        $this->removeAllProtectedRanges();
112 2
    }
113
114 1
    public function lockTranslations()
115
    {
116 1
        $range = $this->coordinates()->translationsRange(1, $this->spreadsheet->api()->getSheetRowCount($this->getId()));
117
118 1
        $this->api()
119 1
            ->addBatchRequests([
120 1
                $this->spreadsheet->api()->protectRangeRequest($range, 'TRANSLATIONS'),
121 1
                $this->spreadsheet->api()->styleArea($range, $this->styles()->lockedTranslationsColumns()),
122
            ])
123 1
            ->sendBatchRequests();
124 1
    }
125
126 1
    public function unlockTranslations()
127
    {
128 1
        $requests = [];
129 1
        $range = $this->coordinates()->translationsRange(1, $this->spreadsheet->api()->getSheetRowCount($this->getId()));
130
131 1
        $protectedRanges = $this->spreadsheet->api()->getSheetProtectedRanges($this->getId(), 'TRANSLATIONS');
132 1
        foreach ($protectedRanges as $protectedRange) {
133 1
            $requests[] = $this->spreadsheet->api()->deleteProtectedRange($protectedRange->protectedRangeId);
134
        }
135
136 1
        $requests[] = $this->spreadsheet->api()->styleArea($range, $this->styles()->translationsColumns());
137
138 1
        $this->spreadsheet->api()->addBatchRequests($requests)->sendBatchRequests();
139 1
    }
140
141 1
    public function isTranslationsLocked()
142
    {
143 1
        $protectedRanges = $this->spreadsheet->api()->getSheetProtectedRanges($this->getId(), 'TRANSLATIONS');
144
145 1
        return ! empty($protectedRanges) && count($protectedRanges) > 0;
146
    }
147
148 2
    public function removeAllProtectedRanges()
149
    {
150 2
        $protectedRanges = $this->spreadsheet->api()->getSheetProtectedRanges($this->getId());
151
152 2
        $requests = [];
153 2
        foreach ($protectedRanges as $protectedRange) {
154 1
            $requests[] = $this->spreadsheet->api()->deleteProtectedRange($protectedRange->protectedRangeId);
155
        }
156
157 2
        if (! empty($requests)) {
158 1
            $this->spreadsheet->api()->addBatchRequests($requests)->sendBatchRequests();
159
        }
160 2
    }
161
162 1
    public function updateHeaderRow()
163
    {
164 1
        $this->api()->writeCells(
165 1
            $this->emptyCoordinates()->headerShortRange(),
166 1
            [$this->spreadsheet->getHeader()]
167
        );
168 1
    }
169
}
170