|
155 | 155 | <code>$uris</code> |
156 | 156 | </MoreSpecificImplementedParamType> |
157 | 157 | <NullableReturnStatement> |
158 | | - <code><![CDATA[$this->atomic(function () use ($calendarId, $syncToken, $syncLevel, $limit, $calendarType) { |
159 | | - // Current synctoken |
160 | | - $qb = $this->db->getQueryBuilder(); |
161 | | - $qb->select('synctoken') |
162 | | - ->from('calendars') |
163 | | - ->where( |
164 | | - $qb->expr()->eq('id', $qb->createNamedParameter($calendarId)) |
165 | | - ); |
166 | | - $stmt = $qb->executeQuery(); |
167 | | - $currentToken = $stmt->fetchOne(); |
168 | | -
|
169 | | - if ($currentToken === false) { |
170 | | - return null; |
171 | | - } |
172 | | -
|
173 | | - $result = [ |
174 | | - 'syncToken' => $currentToken, |
175 | | - 'added' => [], |
176 | | - 'modified' => [], |
177 | | - 'deleted' => [], |
178 | | - ]; |
179 | | -
|
180 | | - if ($syncToken) { |
181 | | - $qb = $this->db->getQueryBuilder(); |
182 | | -
|
183 | | - $qb->select('uri', 'operation') |
184 | | - ->from('calendarchanges') |
185 | | - ->where( |
186 | | - $qb->expr()->andX( |
187 | | - $qb->expr()->gte('synctoken', $qb->createNamedParameter($syncToken)), |
188 | | - $qb->expr()->lt('synctoken', $qb->createNamedParameter($currentToken)), |
189 | | - $qb->expr()->eq('calendarid', $qb->createNamedParameter($calendarId)), |
190 | | - $qb->expr()->eq('calendartype', $qb->createNamedParameter($calendarType)) |
191 | | - ) |
192 | | - )->orderBy('synctoken'); |
193 | | - if (is_int($limit) && $limit > 0) { |
194 | | - $qb->setMaxResults($limit); |
195 | | - } |
196 | | -
|
197 | | - // Fetching all changes |
198 | | - $stmt = $qb->executeQuery(); |
199 | | - $changes = []; |
200 | | -
|
201 | | - // This loop ensures that any duplicates are overwritten, only the |
202 | | - // last change on a node is relevant. |
203 | | - while ($row = $stmt->fetch()) { |
204 | | - $changes[$row['uri']] = $row['operation']; |
205 | | - } |
206 | | - $stmt->closeCursor(); |
207 | | -
|
208 | | - foreach ($changes as $uri => $operation) { |
209 | | - switch ($operation) { |
210 | | - case 1: |
211 | | - $result['added'][] = $uri; |
212 | | - break; |
213 | | - case 2: |
214 | | - $result['modified'][] = $uri; |
215 | | - break; |
216 | | - case 3: |
217 | | - $result['deleted'][] = $uri; |
218 | | - break; |
219 | | - } |
220 | | - } |
221 | | - } else { |
222 | | - // No synctoken supplied, this is the initial sync. |
223 | | - $qb = $this->db->getQueryBuilder(); |
224 | | - $qb->select('uri') |
225 | | - ->from('calendarobjects') |
226 | | - ->where( |
227 | | - $qb->expr()->andX( |
228 | | - $qb->expr()->eq('calendarid', $qb->createNamedParameter($calendarId)), |
229 | | - $qb->expr()->eq('calendartype', $qb->createNamedParameter($calendarType)) |
230 | | - ) |
231 | | - ); |
232 | | - $stmt = $qb->executeQuery(); |
233 | | - $result['added'] = $stmt->fetchAll(\PDO::FETCH_COLUMN); |
234 | | - $stmt->closeCursor(); |
235 | | - } |
236 | | - return $result; |
237 | | - }, $this->db)]]></code> |
238 | 158 | <code>null</code> |
239 | 159 | </NullableReturnStatement> |
240 | 160 | </file> |
|
516 | 436 | <file src="apps/dav/lib/Connector/Sabre/FilesReportPlugin.php"> |
517 | 437 | <InvalidArgument> |
518 | 438 | <code>0</code> |
519 | | - <code>200</code> |
520 | 439 | </InvalidArgument> |
521 | 440 | <InvalidNullableReturnType> |
522 | 441 | <code>bool</code> |
|
0 commit comments