PluginProbe
wpDataTables – WordPress Data Table, Dynamic Tables & Table Charts Plugin / 6.5.1.7
wpDataTables – WordPress Data Table, Dynamic Tables & Table Charts Plugin v6.5.1.7
6.5.1.7 6.5.1.6 6.5.1.5 6.5.1.4 6.5.1.3 6.5.1.2 6.5.1.1 6.5.0.9 6.5.0.8 6.5.0.7 6.5.0.6 trunk 3.4.2.40 3.4.2.41 3.4.2.42 3.4.2.43 3.4.2.44 3.4.2.45 3.4.2.46 3.4.2.47 3.4.2.48 3.4.2.49 3.4.2.50 6.3.2 6.3.3.1 All 47 releases
wpdatatables / lib / phpoffice / phpspreadsheet / src / PhpSpreadsheet / CellReferenceHelper.php

CellReferenceHelper.php in wpDataTables – WordPress Data Table, Dynamic Tables & Table Charts Plugin 6.5.1.7, at lib/phpoffice/phpspreadsheet/src/PhpSpreadsheet/CellReferenceHelper.php

132 lines 4.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace PhpOffice\PhpSpreadsheet;
4
5 use PhpOffice\PhpSpreadsheet\Cell\AddressRange;
6 use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
7
8 class CellReferenceHelper
9 {
10 /**
11 * @var string
12 */
13 protected $beforeCellAddress;
14
15 /**
16 * @var int
17 */
18 protected $beforeColumn;
19
20 /**
21 * @var int
22 */
23 protected $beforeRow;
24
25 /**
26 * @var int
27 */
28 protected $numberOfColumns;
29
30 /**
31 * @var int
32 */
33 protected $numberOfRows;
34
35 public function __construct(string $beforeCellAddress = 'A1', int $numberOfColumns = 0, int $numberOfRows = 0)
36 {
37 $this->beforeCellAddress = str_replace('$', '', $beforeCellAddress);
38 $this->numberOfColumns = $numberOfColumns;
39 $this->numberOfRows = $numberOfRows;
40
41 // Get coordinate of $beforeCellAddress
42 [$beforeColumn, $beforeRow] = Coordinate::coordinateFromString($beforeCellAddress);
43 $this->beforeColumn = (int) Coordinate::columnIndexFromString($beforeColumn);
44 $this->beforeRow = (int) $beforeRow;
45 }
46
47 public function beforeCellAddress(): string
48 {
49 return $this->beforeCellAddress;
50 }
51
52 public function refreshRequired(string $beforeCellAddress, int $numberOfColumns, int $numberOfRows): bool
53 {
54 return $this->beforeCellAddress !== $beforeCellAddress ||
55 $this->numberOfColumns !== $numberOfColumns ||
56 $this->numberOfRows !== $numberOfRows;
57 }
58
59 public function updateCellReference(string $cellReference = 'A1', bool $includeAbsoluteReferences = false): string
60 {
61 if (Coordinate::coordinateIsRange($cellReference)) {
62 throw new Exception('Only single cell references may be passed to this method.');
63 }
64
65 // Get coordinate of $cellReference
66 [$newColumn, $newRow] = Coordinate::coordinateFromString($cellReference);
67 $newColumnIndex = (int) Coordinate::columnIndexFromString(str_replace('$', '', $newColumn));
68 $newRowIndex = (int) str_replace('$', '', $newRow);
69
70 $absoluteColumn = $newColumn[0] === '$' ? '$' : '';
71 $absoluteRow = $newRow[0] === '$' ? '$' : '';
72 // Verify which parts should be updated
73 if ($includeAbsoluteReferences === false) {
74 $updateColumn = (($absoluteColumn !== '$') && $newColumnIndex >= $this->beforeColumn);
75 $updateRow = (($absoluteRow !== '$') && $newRowIndex >= $this->beforeRow);
76 } else {
77 $updateColumn = ($newColumnIndex >= $this->beforeColumn);
78 $updateRow = ($newRowIndex >= $this->beforeRow);
79 }
80
81 // Create new column reference
82 if ($updateColumn) {
83 $newColumn = $this->updateColumnReference($newColumnIndex, $absoluteColumn);
84 }
85
86 // Create new row reference
87 if ($updateRow) {
88 $newRow = $this->updateRowReference($newRowIndex, $absoluteRow);
89 }
90
91 // Return new reference
92 return "{$newColumn}{$newRow}";
93 }
94
95 public function cellAddressInDeleteRange(string $cellAddress): bool
96 {
97 [$cellColumn, $cellRow] = Coordinate::coordinateFromString($cellAddress);
98 $cellColumnIndex = Coordinate::columnIndexFromString($cellColumn);
99 // Is cell within the range of rows/columns if we're deleting
100 if (
101 $this->numberOfRows < 0 &&
102 ($cellRow >= ($this->beforeRow + $this->numberOfRows)) &&
103 ($cellRow < $this->beforeRow)
104 ) {
105 return true;
106 } elseif (
107 $this->numberOfColumns < 0 &&
108 ($cellColumnIndex >= ($this->beforeColumn + $this->numberOfColumns)) &&
109 ($cellColumnIndex < $this->beforeColumn)
110 ) {
111 return true;
112 }
113
114 return false;
115 }
116
117 protected function updateColumnReference(int $newColumnIndex, string $absoluteColumn): string
118 {
119 $newColumn = Coordinate::stringFromColumnIndex(min($newColumnIndex + $this->numberOfColumns, AddressRange::MAX_COLUMN_INT));
120
121 return "{$absoluteColumn}{$newColumn}";
122 }
123
124 protected function updateRowReference(int $newRowIndex, string $absoluteRow): string
125 {
126 $newRow = $newRowIndex + $this->numberOfRows;
127 $newRow = ($newRow > AddressRange::MAX_ROW) ? AddressRange::MAX_ROW : $newRow;
128
129 return "{$absoluteRow}{$newRow}";
130 }
131 }
132