|
123 | 123 | <code>VCalendar</code> |
124 | 124 | </MoreSpecificReturnType> |
125 | 125 | <NullableReturnStatement> |
126 | | - <code><![CDATA[$this->atomic(function () use ($calendarId, $syncToken, $syncLevel, $limit, $calendarType) { |
127 | | - // Current synctoken |
128 | | - $qb = $this->db->getQueryBuilder(); |
129 | | - $qb->select('synctoken') |
130 | | - ->from('calendars') |
131 | | - ->where( |
132 | | - $qb->expr()->eq('id', $qb->createNamedParameter($calendarId)) |
133 | | - ); |
134 | | - $stmt = $qb->executeQuery(); |
135 | | - $currentToken = $stmt->fetchOne(); |
136 | | -
|
137 | | - if ($currentToken === false) { |
138 | | - return null; |
139 | | - } |
140 | | -
|
141 | | - $result = [ |
142 | | - 'syncToken' => $currentToken, |
143 | | - 'added' => [], |
144 | | - 'modified' => [], |
145 | | - 'deleted' => [], |
146 | | - ]; |
147 | | -
|
148 | | - if ($syncToken) { |
149 | | - $qb = $this->db->getQueryBuilder(); |
150 | | -
|
151 | | - $qb->select('uri', 'operation') |
152 | | - ->from('calendarchanges') |
153 | | - ->where( |
154 | | - $qb->expr()->andX( |
155 | | - $qb->expr()->gte('synctoken', $qb->createNamedParameter($syncToken)), |
156 | | - $qb->expr()->lt('synctoken', $qb->createNamedParameter($currentToken)), |
157 | | - $qb->expr()->eq('calendarid', $qb->createNamedParameter($calendarId)), |
158 | | - $qb->expr()->eq('calendartype', $qb->createNamedParameter($calendarType)) |
159 | | - ) |
160 | | - )->orderBy('synctoken'); |
161 | | - if (is_int($limit) && $limit > 0) { |
162 | | - $qb->setMaxResults($limit); |
163 | | - } |
164 | | -
|
165 | | - // Fetching all changes |
166 | | - $stmt = $qb->executeQuery(); |
167 | | - $changes = []; |
168 | | -
|
169 | | - // This loop ensures that any duplicates are overwritten, only the |
170 | | - // last change on a node is relevant. |
171 | | - while ($row = $stmt->fetch()) { |
172 | | - $changes[$row['uri']] = $row['operation']; |
173 | | - } |
174 | | - $stmt->closeCursor(); |
175 | | -
|
176 | | - foreach ($changes as $uri => $operation) { |
177 | | - switch ($operation) { |
178 | | - case 1: |
179 | | - $result['added'][] = $uri; |
180 | | - break; |
181 | | - case 2: |
182 | | - $result['modified'][] = $uri; |
183 | | - break; |
184 | | - case 3: |
185 | | - $result['deleted'][] = $uri; |
186 | | - break; |
187 | | - } |
188 | | - } |
189 | | - } else { |
190 | | - // No synctoken supplied, this is the initial sync. |
191 | | - $qb = $this->db->getQueryBuilder(); |
192 | | - $qb->select('uri') |
193 | | - ->from('calendarobjects') |
194 | | - ->where( |
195 | | - $qb->expr()->andX( |
196 | | - $qb->expr()->eq('calendarid', $qb->createNamedParameter($calendarId)), |
197 | | - $qb->expr()->eq('calendartype', $qb->createNamedParameter($calendarType)) |
198 | | - ) |
199 | | - ); |
200 | | - $stmt = $qb->executeQuery(); |
201 | | - $result['added'] = $stmt->fetchAll(\PDO::FETCH_COLUMN); |
202 | | - $stmt->closeCursor(); |
203 | | - } |
204 | | - return $result; |
205 | | - }, $this->db)]]></code> |
206 | 126 | <code>null</code> |
207 | 127 | </NullableReturnStatement> |
208 | 128 | </file> |
|
1415 | 1335 | <code>isUserScopeEnabled</code> |
1416 | 1336 | </UndefinedInterfaceMethod> |
1417 | 1337 | </file> |
1418 | | - <file src="core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php"> |
1419 | | - <ParamNameMismatch> |
1420 | | - <code>$arguments</code> |
1421 | | - </ParamNameMismatch> |
1422 | | - </file> |
1423 | 1338 | <file src="core/BackgroundJobs/CheckForUserCertificates.php"> |
1424 | 1339 | <ParamNameMismatch> |
1425 | 1340 | <code>$arguments</code> |
1426 | 1341 | </ParamNameMismatch> |
1427 | 1342 | </file> |
1428 | | - <file src="core/BackgroundJobs/LookupServerSendCheckBackgroundJob.php"> |
1429 | | - <ParamNameMismatch> |
1430 | | - <code>$arguments</code> |
1431 | | - </ParamNameMismatch> |
1432 | | - </file> |
1433 | 1343 | <file src="core/Command/App/Install.php"> |
1434 | 1344 | <TypeDoesNotContainType> |
1435 | 1345 | <code>$result === false</code> |
|
0 commit comments