diff --git a/lib/Controller/ContactsController.php b/lib/Controller/ContactsController.php index 099fbb01d..91f14806a 100644 --- a/lib/Controller/ContactsController.php +++ b/lib/Controller/ContactsController.php @@ -106,12 +106,13 @@ private function isNewAddress($prevGeo, $geo) { } /** - * get distance between two geo points - * @param GPS coordinates of first point - * @param GPS coordinates of second point + * Get distance between two geo points. + * + * @param array $coordsA GPS coordinates of first point + * @param array $coordsB GPS coordinates of second point * @return float Distance in meters between these two points */ - private function getDistance($coordsA, $coordsB) { + private function getDistance(array $coordsA, array $coordsB) { if (empty($coordsA) || empty($coordsB)) { return 9E999; } @@ -674,7 +675,7 @@ private function setAddressCoordinates(float $lat, float $lng, string $adr, stri ->from('maps_address_geo') ->where($qb->expr()->eq('adr_norm', $qb->createNamedParameter($adr_norm, IQueryBuilder::PARAM_STR))) ->andWhere($qb->expr()->eq('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR))); - $req = $qb->execute(); + $req = $qb->executeQuery(); $result = $req->fetchAll(); $req->closeCursor(); $qb = $this->dbconnection->getQueryBuilder(); @@ -686,8 +687,7 @@ private function setAddressCoordinates(float $lat, float $lng, string $adr, stri ->set('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR)) ->set('looked_up', $qb->createNamedParameter(true, IQueryBuilder::PARAM_BOOL)) ->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_STR))); - $req = $qb->execute(); - + $qb->executeStatement(); } else { $qb->insert('maps_address_geo') ->values([ @@ -698,8 +698,7 @@ private function setAddressCoordinates(float $lat, float $lng, string $adr, stri 'lng' => $qb->createNamedParameter($lng, IQueryBuilder::PARAM_STR), 'looked_up' => $qb->createNamedParameter(true, IQueryBuilder::PARAM_BOOL), ]); - $req = $qb->execute(); - $id = $qb->getLastInsertId(); + $qb->executeStatement(); } } diff --git a/lib/Migration/Version000013Date20190723185417.php b/lib/Migration/Version000013Date20190723185417.php index f4642f34a..19b89a085 100644 --- a/lib/Migration/Version000013Date20190723185417.php +++ b/lib/Migration/Version000013Date20190723185417.php @@ -62,6 +62,6 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) { $query = $this->db->getQueryBuilder(); $query->delete('maps_address_geo'); - $query->execute(); + $query->executeStatement(); } } diff --git a/lib/Service/AddressService.php b/lib/Service/AddressService.php index d641f04b7..23627196b 100644 --- a/lib/Service/AddressService.php +++ b/lib/Service/AddressService.php @@ -81,7 +81,7 @@ public function lookupAddress($adr, $uri): array { ->from('maps_address_geo') ->where($qb->expr()->eq('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR))) ->andWhere($qb->expr()->eq('adr_norm', $qb->createNamedParameter($adr_norm, IQueryBuilder::PARAM_STR))); - $req = $qb->execute(); + $req = $qb->executeQuery(); $lat = null; $lng = null; $inDb = false; @@ -131,7 +131,7 @@ public function lookupAddress($adr, $uri): array { ->set('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR)) ->set('looked_up', $qb->createNamedParameter($lookedUp, IQueryBuilder::PARAM_BOOL)) ->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_STR))); - $req = $qb->execute(); + $qb->executeStatement(); } } @@ -156,7 +156,7 @@ private function lookupAddressInternal($adr): array { ->from('maps_address_geo') ->where($qb->expr()->eq('looked_up', $qb->createNamedParameter(true, IQueryBuilder::PARAM_BOOL))) ->andWhere($qb->expr()->eq('adr_norm', $qb->createNamedParameter($adr_norm, IQueryBuilder::PARAM_STR))); - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { $res[0] = $row['lat']; $res[1] = $row['lng']; @@ -249,7 +249,7 @@ private function cleanUpDBContactAddresses($vCard, $uri) { $qb->select('id', 'adr') ->from('maps_address_geo') ->where($qb->expr()->eq('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR))); - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { if (!in_array($row['adr'], $vCardAddresses)) { array_push($adrIdToDelete, $row['id']); @@ -263,7 +263,7 @@ private function cleanUpDBContactAddresses($vCard, $uri) { ->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); - $req = $qb->execute(); + $qb->executeStatement(); } } @@ -273,7 +273,7 @@ public function deleteDBContactAddresses($uri) { ->where( $qb->expr()->eq('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR)) ); - $req = $qb->execute(); + $qb->executeStatement(); } // schedules the address for an external lookup @@ -294,7 +294,7 @@ private function scheduleForLookup($adr, $uri): array { 'lng' => $qb->createNamedParameter($geo[1], IQueryBuilder::PARAM_STR), 'looked_up' => $qb->createNamedParameter($geo[2], IQueryBuilder::PARAM_BOOL), ]); - $req = $qb->execute(); + $qb->executeStatement(); $id = $qb->getLastInsertId(); if (!$geo[2]) { $this->jobList->add(LookupMissingGeoJob::class, []); @@ -312,7 +312,7 @@ public function lookupMissingGeo($max = 200):bool { ->from('maps_address_geo') ->where($qb->expr()->eq('looked_up', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) ->setMaxResults($max); - $req = $qb->execute(); + $req = $qb->executeQuery(); $result = $req->fetchAll(); $req->closeCursor(); $i = 0; diff --git a/lib/Service/DevicesService.php b/lib/Service/DevicesService.php index 71cb48f97..9f09e1ba7 100644 --- a/lib/Service/DevicesService.php +++ b/lib/Service/DevicesService.php @@ -56,7 +56,7 @@ public function getDevicesFromDB($userId) { ->where( $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { $devices[intval($row['id'])] = [ @@ -88,7 +88,7 @@ public function getDevicesByTokens(array $tokens) { ->where( $qb->expr()->in('s.token', $qb->createNamedParameter($tokens, IQueryBuilder::PARAM_STR_ARRAY)) ); - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { if (array_key_exists(intval($row['id']), $devices)) { @@ -144,7 +144,7 @@ public function getDevicePointsFromDB($userId, $deviceId, ?int $pruneBefore = 0, $qb->setMaxResults($limit); } $qb->orderBy('timestamp', 'DESC'); - $req = $qb->execute(); + $req = $qb->executeQuery(); $points = []; while ($row = $req->fetch()) { @@ -199,7 +199,7 @@ public function getDevicePointsByTokens(array $tokens, ?int $pruneBefore = 0, ?i $qb->setMaxResults($limit); } $qb->orderBy('timestamp', 'DESC'); - $req = $qb->execute(); + $req = $qb->executeQuery(); $points = []; while ($row = $req->fetch()) { @@ -237,7 +237,7 @@ public function getDeviceTimePointsFromDb($userId, $deviceId) { $qb->expr()->eq('d.user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); $qb->orderBy('timestamp', 'ASC'); - $req = $qb->execute(); + $req = $qb->executeQuery(); $points = []; while ($row = $req->fetch()) { @@ -258,7 +258,7 @@ public function getOrCreateDeviceFromDB($userId, $userAgent) { ->andWhere( $qb->expr()->eq('user_agent', $qb->createNamedParameter($userAgent, IQueryBuilder::PARAM_STR)) ); - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { $deviceId = intval($row['id']); @@ -272,7 +272,7 @@ public function getOrCreateDeviceFromDB($userId, $userAgent) { 'user_agent' => $qb->createNamedParameter($userAgent, IQueryBuilder::PARAM_STR), 'user_id' => $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR) ]); - $req = $qb->execute(); + $qb->executeStatement(); $deviceId = $qb->getLastInsertId(); } return $deviceId; @@ -290,7 +290,7 @@ public function addPointToDB($deviceId, $lat, $lng, $ts, $altitude, $battery, $a 'battery' => $qb->createNamedParameter(is_numeric($battery) ? $battery : null, IQueryBuilder::PARAM_STR), 'accuracy' => $qb->createNamedParameter(is_numeric($accuracy) ? $accuracy : null, IQueryBuilder::PARAM_STR) ]); - $req = $qb->execute(); + $qb->executeStatement(); $pointId = $qb->getLastInsertId(); return $pointId; } @@ -332,7 +332,7 @@ public function getDeviceFromDB($id, $userId) { $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); } - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { $device = [ @@ -358,7 +358,7 @@ public function editDeviceInDB($id, $color, $name) { $qb->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); - $req = $qb->execute(); + $qb->executeStatement(); } public function deleteDeviceFromDB($id) { @@ -367,13 +367,13 @@ public function deleteDeviceFromDB($id) { ->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); - $req = $qb->execute(); + $qb->executeStatement(); $qb->delete('maps_device_points') ->where( $qb->expr()->eq('device_id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); - $req = $qb->execute(); + $qb->executeStatement(); } public function countPoints($userId, $deviceIdList, $begin, $end) { @@ -403,7 +403,7 @@ public function countPoints($userId, $deviceIdList, $begin, $end) { $qb->expr()->lt('p.timestamp', $qb->createNamedParameter(intval($end), IQueryBuilder::PARAM_INT)) ); } - $req = $qb->execute(); + $req = $qb->executeQuery(); $count = 0; while ($row = $req->fetch()) { $count = intval($row['co']); @@ -487,7 +487,7 @@ private function getAndWriteDevicePoints($devid, $begin, $end, $fd, $nbPoints, $ $qb->setFirstResult($pointIndex); $qb->setMaxResults($chunkSize); $qb->orderBy('timestamp', 'ASC'); - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { $id = intval($row['id']); diff --git a/lib/Service/FavoritesService.php b/lib/Service/FavoritesService.php index eb6a0c52b..0b225eb0b 100644 --- a/lib/Service/FavoritesService.php +++ b/lib/Service/FavoritesService.php @@ -77,7 +77,7 @@ public function getFavoritesFromDB($userId, $pruneBefore = 0, $filterCategory = $qb->expr()->eq('category', $qb->createNamedParameter($filterCategory, IQueryBuilder::PARAM_STR)) ); } - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { $id = intval($row['id']); @@ -127,7 +127,7 @@ public function getFavoriteFromDB($id, $userId = null, $category = null, $isDele $qb->expr()->eq('category', $qb->createNamedParameter($category, IQueryBuilder::PARAM_STR)) ); } - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { $id = intval($row['id']); @@ -175,7 +175,7 @@ public function addFavoriteToDB($userId, $name, $lat, $lng, $category, $comment, 'comment' => $qb->createNamedParameter($comment, IQueryBuilder::PARAM_STR), 'extensions' => $qb->createNamedParameter($extensions, IQueryBuilder::PARAM_STR) ]); - $req = $qb->execute(); + $qb->executeStatement(); $favoriteId = $qb->getLastInsertId(); return $favoriteId; } @@ -183,37 +183,50 @@ public function addFavoriteToDB($userId, $name, $lat, $lng, $category, $comment, public function addMultipleFavoritesToDB($userId, $favoriteList) { $nowTimeStamp = (new \DateTime())->getTimestamp(); - $values = []; - foreach ($favoriteList as $fav) { - if ( - !isset($fav['lat']) or !is_numeric($fav['lat']) or - !isset($fav['lng']) or !is_numeric($fav['lng']) - ) { - continue; - } else { - $lat = floatval($fav['lat']); - $lng = floatval($fav['lng']); - } - $value = '(' . - $this->db_quote_escape_string($userId) . ', ' . - ((!isset($fav['name']) or !$fav['name']) ? 'NULL' : $this->db_quote_escape_string($fav['name'])) . ', ' . - ((!isset($fav['date_created']) or !is_numeric($fav['date_created'])) ? $this->db_quote_escape_string($nowTimeStamp) : $this->db_quote_escape_string($fav['date_created'])) . ', ' . - $this->db_quote_escape_string($nowTimeStamp) . ', ' . - $this->db_quote_escape_string($lat) . ', ' . - $this->db_quote_escape_string($lng) . ', ' . - ((!isset($fav['category']) or !$fav['category']) ? 'NULL' : $this->db_quote_escape_string($fav['category'])) . ', ' . - ((!isset($fav['comment']) or !$fav['comment']) ? 'NULL' : $this->db_quote_escape_string($fav['comment'])) . ', ' . - ((!isset($fav['extensions']) or !$fav['extensions']) ? 'NULL' : $this->db_quote_escape_string($fav['extensions'])) . ')'; - array_push($values, $value); - } - $valuesStr = implode(', ', $values); - $sql = ' - INSERT INTO *PREFIX*maps_favorites - (user_id, name, date_created, date_modified, lat, lng, category, comment, extensions) - VALUES ' . $valuesStr . ' ;'; - $req = $this->dbconnection->prepare($sql); - $req->execute(); - $req->closeCursor(); + $qb = $this->dbconnection->getQueryBuilder(); + $qb->insert('maps_favorites'); + + try { + $this->dbconnection->beginTransaction(); + foreach ($favoriteList as $fav) { + if ( + !isset($fav['lat']) or !is_numeric($fav['lat']) or + !isset($fav['lng']) or !is_numeric($fav['lng']) + ) { + continue; + } else { + $lat = floatval($fav['lat']); + $lng = floatval($fav['lng']); + } + $values = [ + 'user_id' => $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR), + 'date_modified' => $qb->createNamedParameter($nowTimeStamp, IQueryBuilder::PARAM_INT), + 'lat' => $qb->createNamedParameter($lat, IQueryBuilder::PARAM_INT), + 'lng' => $qb->createNamedParameter($lng, IQueryBuilder::PARAM_INT), + ]; + if (isset($fav['name']) and $fav['name'] !== '') { + $values['name'] = $qb->createNamedParameter($fav['name'], IQueryBuilder::PARAM_STR); + } + if (isset($fav['date_created']) && is_numeric($fav['date_created'])) { + $values['date_created'] = $qb->createNamedParameter($fav['date_created'], IQueryBuilder::PARAM_STR); + } + if (isset($fav['category']) && $fav['category'] !== '') { + $values['category'] = $qb->createNamedParameter($fav['category'], IQueryBuilder::PARAM_STR); + } + if (isset($fav['comment']) && $fav['comment'] !== '') { + $values['comment'] = $qb->createNamedParameter($fav['comment'], IQueryBuilder::PARAM_STR); + } + if (isset($fav['extensions']) && $fav['extensions'] !== '') { + $values['extensions'] = $qb->createNamedParameter($fav['extensions'], IQueryBuilder::PARAM_STR); + } + + $qb->values($values); + $qb->executeStatement(); + } + $this->dbconnection->commit(); + } catch (\Throwable) { + $this->dbconnection->rollback(); + } } public function renameCategoryInDB($userId, $cat, $newName) { @@ -226,7 +239,7 @@ public function renameCategoryInDB($userId, $cat, $newName) { $qb->andWhere( $qb->expr()->eq('category', $qb->createNamedParameter($cat, IQueryBuilder::PARAM_STR)) ); - $req = $qb->execute(); + $qb->executeStatement(); } public function editFavoriteInDB($id, $name, $lat, $lng, $category, $comment, $extensions) { @@ -255,7 +268,7 @@ public function editFavoriteInDB($id, $name, $lat, $lng, $category, $comment, $e $qb->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); - $req = $qb->execute(); + $qb->executeStatement(); } public function deleteFavoriteFromDB($id) { @@ -264,7 +277,7 @@ public function deleteFavoriteFromDB($id) { ->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); - $req = $qb->execute(); + $qb->executeStatement(); } public function deleteFavoritesFromDB($ids, $userId) { @@ -282,7 +295,7 @@ public function deleteFavoritesFromDB($ids, $userId) { } else { return; } - $req = $qb->execute(); + $qb->executeStatement(); } public function countFavorites($userId, $categoryList, $begin, $end) { @@ -319,7 +332,7 @@ public function countFavorites($userId, $categoryList, $begin, $end) { $qb->andWhere($or); } $nbFavorites = 0; - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { $nbFavorites = intval($row['co']); break; @@ -579,7 +592,7 @@ public function exportFavorites($userId, $fileHandler, $categoryList, $begin, $e $qb->orderBy('date_created', 'ASC') ->setMaxResults($chunkSize) ->setFirstResult($favIndex); - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { $name = str_replace('&', '&', $row['name']); diff --git a/lib/Service/TracksService.php b/lib/Service/TracksService.php index 3d43a1902..48c227f25 100644 --- a/lib/Service/TracksService.php +++ b/lib/Service/TracksService.php @@ -259,7 +259,7 @@ public function getTracksFromDB($userId, $folder = null, bool $respectNomediaAnd ->where( $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); - $req = $qb->execute(); + $req = $qb->executeQuery(); if (is_null($folder)) { $folder = $userFolder; @@ -331,7 +331,7 @@ public function getTrackFromDB($id, $userId = null) { $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); } - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { if ($userId !== '' and $userId !== null) { @@ -368,7 +368,7 @@ public function getTrackFromDB($id, $userId = null) { return $track; } - public function getTrackByFileIDFromDB($fileId, $userId = null) { + public function getTrackByFileIDFromDB(int $fileId, ?string $userId = null) { $track = null; $qb = $this->dbconnection->getQueryBuilder(); $qb->select('id', 'file_id', 'color', 'metadata', 'etag') @@ -381,7 +381,7 @@ public function getTrackByFileIDFromDB($fileId, $userId = null) { $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); } - $req = $qb->execute(); + $req = $qb->executeQuery(); while ($row = $req->fetch()) { if ($userId !== '' and $userId !== null) { @@ -429,12 +429,12 @@ public function addTrackToDB($userId, $fileId, $file) { 'metadata' => $qb->createNamedParameter($metadata, IQueryBuilder::PARAM_STR), 'etag' => $qb->createNamedParameter($etag, IQueryBuilder::PARAM_STR) ]); - $req = $qb->execute(); + $qb->executeStatement(); $trackId = $qb->getLastInsertId(); return $trackId; } - public function editTrackInDB($id, $color, $metadata, $etag) { + public function editTrackInDB($id, $color, $metadata, $etag): void { $qb = $this->dbconnection->getQueryBuilder(); $qb->update('maps_tracks'); if ($color !== null) { @@ -449,19 +449,19 @@ public function editTrackInDB($id, $color, $metadata, $etag) { $qb->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); - $req = $qb->execute(); + $qb->executeStatement(); } - public function deleteByFileId($fileId) { + public function deleteByFileId(int $fileId): void { $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( $qb->expr()->eq('file_id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT)) ); - $req = $qb->execute(); + $qb->executeStatement(); } - public function deleteByFileIdUserId($fileId, $userId) { + public function deleteByFileIdUserId(int $fileId, string $userId): void { $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( @@ -470,47 +470,39 @@ public function deleteByFileIdUserId($fileId, $userId) { ->andWhere( $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); - $req = $qb->execute(); - $qb = $this->dbconnection->getQueryBuilder(); + $qb->executeStatement(); } - public function deleteTrackFromDB($id) { + public function deleteTrackFromDB(int $id): void { $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); - $req = $qb->execute(); - $qb = $this->dbconnection->getQueryBuilder(); + $qb->executeStatement(); } - public function deleteAllTracksFromDB($userId) { + public function deleteAllTracksFromDB(string $userId): void { $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); - $req = $qb->execute(); - $qb = $this->dbconnection->getQueryBuilder(); + $qb->executeStatement(); } - public function deleteTracksFromDB($ids, $userId) { + public function deleteTracksFromDB(array $ids, string $userId): void { + if (empty($ids)) { + return; + } + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) - ); - if (count($ids) > 0) { - $or = $qb->expr()->orx(); - foreach ($ids as $id) { - $or->add($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT))); - } - $qb->andWhere($or); - } else { - return; - } - $req = $qb->execute(); - $qb = $this->dbconnection->getQueryBuilder(); + ) + ->andWhere($qb->expr()->in('id', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY))); + $qb->executeStatement(); } public function generateTrackMetadata($file) { diff --git a/tests/psalm-baseline.xml b/tests/psalm-baseline.xml index 5badd4fa5..a91e4890a 100644 --- a/tests/psalm-baseline.xml +++ b/tests/psalm-baseline.xml @@ -1,5 +1,5 @@ - +