diff --git a/lib/SP/Infrastructure/Account/Repositories/AccountFileRepository.php b/lib/SP/Infrastructure/Account/Repositories/AccountFileRepository.php index 1fc39671..7ec1d1be 100644 --- a/lib/SP/Infrastructure/Account/Repositories/AccountFileRepository.php +++ b/lib/SP/Infrastructure/Account/Repositories/AccountFileRepository.php @@ -252,7 +252,7 @@ final class AccountFileRepository extends Repository implements AccountFileRepos FROM AccountFile AF INNER JOIN Account A ON A.id = AF.accountId INNER JOIN Client C ON A.clientId = C.id - WHERE AF.id IN ('.$this->getParamsFromArray($ids).')'; + WHERE AF.id IN ('.$this->buildParamsFromArray($ids).')'; $queryData = new QueryData(); $queryData->setMapClassName(FileExtData::class); @@ -300,7 +300,7 @@ final class AccountFileRepository extends Repository implements AccountFileRepos } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM AccountFile WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM AccountFile WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the files')); diff --git a/lib/SP/Infrastructure/Account/Repositories/AccountHistoryRepository.php b/lib/SP/Infrastructure/Account/Repositories/AccountHistoryRepository.php index 2bb464c3..20d3656f 100644 --- a/lib/SP/Infrastructure/Account/Repositories/AccountHistoryRepository.php +++ b/lib/SP/Infrastructure/Account/Repositories/AccountHistoryRepository.php @@ -288,7 +288,7 @@ final class AccountHistoryRepository extends Repository implements AccountHistor } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM AccountHistory WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM AccountHistory WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the accounts')); @@ -311,7 +311,7 @@ final class AccountHistoryRepository extends Repository implements AccountHistor } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM AccountHistory WHERE accountId IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM AccountHistory WHERE accountId IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the accounts')); diff --git a/lib/SP/Infrastructure/Account/Repositories/AccountRepository.php b/lib/SP/Infrastructure/Account/Repositories/AccountRepository.php index 444b7609..9882c122 100644 --- a/lib/SP/Infrastructure/Account/Repositories/AccountRepository.php +++ b/lib/SP/Infrastructure/Account/Repositories/AccountRepository.php @@ -369,7 +369,7 @@ final class AccountRepository extends Repository implements AccountRepositoryInt $optionalCount = 0; foreach ($optional as $field) { - if (isset($itemData->{$field}) && !empty($itemData->{$field})) { + if (!empty($itemData->{$field})) { $query->col($field, $itemData->{$field}); $optionalCount++; } else { @@ -445,7 +445,32 @@ final class AccountRepository extends Repository implements AccountRepositoryInt */ public function getAll(): QueryResult { - $query = $this->queryFactory->newSelect()->from('Account'); + $query = $this->queryFactory + ->newSelect() + ->from('Account') + ->cols([ + 'id', + 'name', + 'categoryId', + 'userId', + 'clientId', + 'userGroupId', + 'userEditId', + 'login', + 'url', + 'notes', + 'countView', + 'countDecrypt', + 'dateAdd', + 'dateEdit', + 'otherUserEdit', + 'otherUserGroupEdit', + 'isPrivate', + 'isPrivateGroup', + 'passDate', + 'passDateChange', + 'parentId', + ]); return $this->db->doSelect(QueryData::build($query)); } @@ -478,7 +503,8 @@ final class AccountRepository extends Repository implements AccountRepositoryInt $query = $this->queryFactory ->newDelete() ->from('Account') - ->where('id IN (:id)', $ids); + ->where(sprintf('id IN (%s)', $this->buildParamsFromArray($ids)), ...$ids); + $queryData = QueryData::build($query)->setOnErrorMessage(__u('Error while deleting the accounts')); return $this->db->doQuery($queryData)->getAffectedNumRows(); @@ -575,7 +601,8 @@ final class AccountRepository extends Repository implements AccountRepositoryInt ->newUpdate() ->table('Account') ->set('countView', '(countView + 1)') - ->where('id = :id', ['id' => $id]); + ->where('id = :id') + ->bindValues(['id' => $id]); return $this->db->doQuery(QueryData::build($query))->getAffectedNumRows() === 1; } @@ -604,7 +631,8 @@ final class AccountRepository extends Repository implements AccountRepositoryInt 'Client.name AS clientName', 'Category.name AS categoryName', ]) - ->where('Account.id = :id', ['id' => $id]); + ->where('Account.id = :id') + ->bindValues(['id' => $id]); $queryData = QueryData::build($query)->setOnErrorMessage(__u('Error while retrieving account\'s data')); @@ -631,8 +659,10 @@ final class AccountRepository extends Repository implements AccountRepositoryInt ->orderBy(['Account.name ASC']); if ($accountId) { - $query->where('Account.id <> :id', ['id' => $accountId]); - $query->where('Account.parentId = 0 OR Account.parentId IS NULL'); + $query + ->where('Account.id <> :id') + ->where('Account.parentId = 0 OR Account.parentId IS NULL') + ->bindValues(['id' => $accountId]); } return $this->db->doSelect(QueryData::build($query)); @@ -655,7 +685,8 @@ final class AccountRepository extends Repository implements AccountRepositoryInt ] ) ->join('INNER', 'Client', 'Account.clientId = Client.id') - ->where('Account.parentId = :parentId', ['parentId' => $accountId]) + ->where('Account.parentId = :parentId') + ->bindValues(['parentId' => $accountId]) ->orderBy(['Account.name ASC']); return $this->db->doSelect(QueryData::build($query)); diff --git a/lib/SP/Infrastructure/Account/Repositories/AccountToTagRepository.php b/lib/SP/Infrastructure/Account/Repositories/AccountToTagRepository.php index 6206c6c2..f12bcb10 100644 --- a/lib/SP/Infrastructure/Account/Repositories/AccountToTagRepository.php +++ b/lib/SP/Infrastructure/Account/Repositories/AccountToTagRepository.php @@ -112,7 +112,7 @@ final class AccountToTagRepository extends Repository implements AccountToTagRep public function add(AccountRequest $accountRequest): int { $query = /** @lang SQL */ - 'INSERT INTO AccountToTag (accountId, tagId) VALUES '.$this->getParamsFromArray( + 'INSERT INTO AccountToTag (accountId, tagId) VALUES '.$this->buildParamsFromArray( $accountRequest->tags, '(?,?)' ); diff --git a/lib/SP/Infrastructure/Account/Repositories/AccountToUserGroupRepository.php b/lib/SP/Infrastructure/Account/Repositories/AccountToUserGroupRepository.php index 0d7eca79..ba6acede 100644 --- a/lib/SP/Infrastructure/Account/Repositories/AccountToUserGroupRepository.php +++ b/lib/SP/Infrastructure/Account/Repositories/AccountToUserGroupRepository.php @@ -156,7 +156,7 @@ final class AccountToUserGroupRepository extends Repository implements AccountTo public function addByType(AccountRequest $accountRequest, bool $isEdit): int { $items = $isEdit ? $accountRequest->userGroupsEdit : $accountRequest->userGroupsView; - $values = $this->getParamsFromArray($items, '(?,?,?)'); + $values = $this->buildParamsFromArray($items, '(?,?,?)'); $query = /** @lang SQL */ 'INSERT INTO AccountToUserGroup (accountId, userGroupId, isEdit) diff --git a/lib/SP/Infrastructure/Account/Repositories/AccountToUserRepository.php b/lib/SP/Infrastructure/Account/Repositories/AccountToUserRepository.php index 7186753b..612836f3 100644 --- a/lib/SP/Infrastructure/Account/Repositories/AccountToUserRepository.php +++ b/lib/SP/Infrastructure/Account/Repositories/AccountToUserRepository.php @@ -92,7 +92,7 @@ final class AccountToUserRepository extends Repository implements AccountToUserR public function addByType(AccountRequest $accountRequest, bool $isEdit): int { $items = $isEdit ? $accountRequest->usersEdit : $accountRequest->usersView; - $values = $this->getParamsFromArray($items, '(?,?,?)'); + $values = $this->buildParamsFromArray($items, '(?,?,?)'); $query = /** @lang SQL */ 'INSERT INTO AccountToUser (accountId, userId, isEdit) diff --git a/lib/SP/Infrastructure/Account/Repositories/PublicLinkRepository.php b/lib/SP/Infrastructure/Account/Repositories/PublicLinkRepository.php index 9047373b..b18fb323 100644 --- a/lib/SP/Infrastructure/Account/Repositories/PublicLinkRepository.php +++ b/lib/SP/Infrastructure/Account/Repositories/PublicLinkRepository.php @@ -141,7 +141,7 @@ final class PublicLinkRepository extends Repository implements RepositoryInterfa FROM PublicLink PL INNER JOIN User U ON PL.userId = U.id INNER JOIN Account A ON itemId = A.id - WHERE PL.id IN ('.$this->getParamsFromArray($ids).') + WHERE PL.id IN ('.$this->buildParamsFromArray($ids).') ORDER BY PL.id'; $queryData = new QueryData(); @@ -168,7 +168,7 @@ final class PublicLinkRepository extends Repository implements RepositoryInterfa } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM PublicLink WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM PublicLink WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); return $this->db->doQuery($queryData)->getAffectedNumRows(); diff --git a/lib/SP/Infrastructure/Auth/Repositories/AuthTokenRepository.php b/lib/SP/Infrastructure/Auth/Repositories/AuthTokenRepository.php index d6f4876f..f68a97c6 100644 --- a/lib/SP/Infrastructure/Auth/Repositories/AuthTokenRepository.php +++ b/lib/SP/Infrastructure/Auth/Repositories/AuthTokenRepository.php @@ -152,7 +152,7 @@ final class AuthTokenRepository extends Repository implements RepositoryInterfac } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM AuthToken WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM AuthToken WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Internal error')); diff --git a/lib/SP/Infrastructure/Category/Repositories/CategoryRepository.php b/lib/SP/Infrastructure/Category/Repositories/CategoryRepository.php index c28eb566..0f7ee949 100644 --- a/lib/SP/Infrastructure/Category/Repositories/CategoryRepository.php +++ b/lib/SP/Infrastructure/Category/Repositories/CategoryRepository.php @@ -225,7 +225,7 @@ final class CategoryRepository extends Repository implements CategoryRepositoryI } $query = /** @lang SQL */ - 'SELECT id, `name`, description FROM Category WHERE id IN ('.$this->getParamsFromArray($ids).')'; + 'SELECT id, `name`, description FROM Category WHERE id IN ('.$this->buildParamsFromArray($ids).')'; $queryData = new QueryData(); $queryData->setMapClassName(CategoryData::class); @@ -251,7 +251,7 @@ final class CategoryRepository extends Repository implements CategoryRepositoryI } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM Category WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM Category WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the categories')); diff --git a/lib/SP/Infrastructure/Client/Repositories/ClientRepository.php b/lib/SP/Infrastructure/Client/Repositories/ClientRepository.php index 75fe2bb5..4506b72f 100644 --- a/lib/SP/Infrastructure/Client/Repositories/ClientRepository.php +++ b/lib/SP/Infrastructure/Client/Repositories/ClientRepository.php @@ -236,7 +236,7 @@ final class ClientRepository extends Repository implements ClientRepositoryInter } $query = /** @lang SQL */ - 'SELECT id, `name`, description, isGlobal FROM Client WHERE id IN ('.$this->getParamsFromArray($ids).')'; + 'SELECT id, `name`, description, isGlobal FROM Client WHERE id IN ('.$this->buildParamsFromArray($ids).')'; $queryData = new QueryData(); $queryData->setMapClassName(ClientData::class); @@ -262,7 +262,7 @@ final class ClientRepository extends Repository implements ClientRepositoryInter } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM Client WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM Client WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the clients')); diff --git a/lib/SP/Infrastructure/Common/Repositories/RepositoryItemTrait.php b/lib/SP/Infrastructure/Common/Repositories/RepositoryItemTrait.php index 539ba80f..67816891 100644 --- a/lib/SP/Infrastructure/Common/Repositories/RepositoryItemTrait.php +++ b/lib/SP/Infrastructure/Common/Repositories/RepositoryItemTrait.php @@ -100,7 +100,7 @@ trait RepositoryItemTrait * * @return string */ - protected function getParamsFromArray( + protected function buildParamsFromArray( array $items, string $placeholder = '?' ): string { diff --git a/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldDefRepository.php b/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldDefRepository.php index e869e998..4ffc2694 100644 --- a/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldDefRepository.php +++ b/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldDefRepository.php @@ -204,7 +204,7 @@ final class CustomFieldDefRepository extends Repository implements CustomFieldDe $query = /** @lang SQL */ 'SELECT id, `name`, moduleId, required, `help`, showInList, typeId, isEncrypted FROM CustomFieldDefinition - WHERE id IN ('.$this->getParamsFromArray($ids).') + WHERE id IN ('.$this->buildParamsFromArray($ids).') ORDER BY id'; $queryData = new QueryData(); @@ -232,7 +232,7 @@ final class CustomFieldDefRepository extends Repository implements CustomFieldDe } $query = /** @lang SQL */ - 'DELETE FROM CustomFieldDefinition WHERE id IN ('.$this->getParamsFromArray($ids).')'; + 'DELETE FROM CustomFieldDefinition WHERE id IN ('.$this->buildParamsFromArray($ids).')'; $queryData = new QueryData(); $queryData->setQuery($query); diff --git a/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldRepository.php b/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldRepository.php index 9865c2e3..32aa26b4 100644 --- a/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldRepository.php +++ b/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldRepository.php @@ -232,7 +232,7 @@ final class CustomFieldRepository extends Repository implements CustomFieldRepos $queryData = new QueryData(); $queryData->setQuery( - 'DELETE FROM CustomFieldData WHERE definitionId IN ('.$this->getParamsFromArray($definitionIds).')' + 'DELETE FROM CustomFieldData WHERE definitionId IN ('.$this->buildParamsFromArray($definitionIds).')' ); $queryData->setParams($definitionIds); @@ -257,7 +257,7 @@ final class CustomFieldRepository extends Repository implements CustomFieldRepos $query = /** @lang SQL */ 'DELETE FROM CustomFieldData - WHERE itemId IN ('.$this->getParamsFromArray($ids).') + WHERE itemId IN ('.$this->buildParamsFromArray($ids).') AND moduleId = ?'; $queryData = new QueryData(); diff --git a/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldTypeRepository.php b/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldTypeRepository.php index 40f4e642..a0368590 100644 --- a/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldTypeRepository.php +++ b/lib/SP/Infrastructure/CustomField/Repositories/CustomFieldTypeRepository.php @@ -176,7 +176,7 @@ final class CustomFieldTypeRepository extends Repository implements CustomFieldT } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM CustomFieldType WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM CustomFieldType WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the field type')); diff --git a/lib/SP/Infrastructure/ItemPreset/Repositories/ItemPresetRepository.php b/lib/SP/Infrastructure/ItemPreset/Repositories/ItemPresetRepository.php index 794f46b6..d00547cd 100644 --- a/lib/SP/Infrastructure/ItemPreset/Repositories/ItemPresetRepository.php +++ b/lib/SP/Infrastructure/ItemPreset/Repositories/ItemPresetRepository.php @@ -245,7 +245,7 @@ class ItemPresetRepository extends Repository implements RepositoryInterface, It $queryData->setMapClassName(ItemPresetData::class); $queryData->setQuery( 'SELECT type, userId, userGroupId, userProfileId, `fixed`, priority, `data` - FROM ItemPreset WHERE id IN ('.$this->getParamsFromArray($ids).')' + FROM ItemPreset WHERE id IN ('.$this->buildParamsFromArray($ids).')' ); $queryData->setParams($ids); @@ -268,7 +268,7 @@ class ItemPresetRepository extends Repository implements RepositoryInterface, It } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM ItemPreset WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM ItemPreset WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while removing the permissions')); diff --git a/lib/SP/Infrastructure/Notification/Repositories/NotificationRepository.php b/lib/SP/Infrastructure/Notification/Repositories/NotificationRepository.php index 94f6fc81..2553181e 100644 --- a/lib/SP/Infrastructure/Notification/Repositories/NotificationRepository.php +++ b/lib/SP/Infrastructure/Notification/Repositories/NotificationRepository.php @@ -176,7 +176,7 @@ final class NotificationRepository extends Repository implements NotificationRep } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM Notification WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM Notification WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the notifications')); @@ -272,7 +272,7 @@ final class NotificationRepository extends Repository implements NotificationRep sticky, onlyAdmin FROM Notification - WHERE id IN ('.$this->getParamsFromArray($ids).') + WHERE id IN ('.$this->buildParamsFromArray($ids).') ORDER BY id'; $queryData = new QueryData(); @@ -300,7 +300,7 @@ final class NotificationRepository extends Repository implements NotificationRep $queryData = new QueryData(); $queryData->setQuery( - 'DELETE FROM Notification WHERE id IN ('.$this->getParamsFromArray($ids).') AND sticky = 0' + 'DELETE FROM Notification WHERE id IN ('.$this->buildParamsFromArray($ids).') AND sticky = 0' ); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the notifications')); diff --git a/lib/SP/Infrastructure/Plugin/Repositories/PluginDataRepository.php b/lib/SP/Infrastructure/Plugin/Repositories/PluginDataRepository.php index 2a1cbcaa..026dfe16 100644 --- a/lib/SP/Infrastructure/Plugin/Repositories/PluginDataRepository.php +++ b/lib/SP/Infrastructure/Plugin/Repositories/PluginDataRepository.php @@ -208,7 +208,7 @@ final class PluginDataRepository extends Repository implements PluginDataReposit `data`, `key` FROM PluginData - WHERE `name` IN ('.$this->getParamsFromArray($ids).') + WHERE `name` IN ('.$this->buildParamsFromArray($ids).') ORDER BY `name`'; $queryData = new QueryData(); @@ -235,7 +235,7 @@ final class PluginDataRepository extends Repository implements PluginDataReposit } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM PluginData WHERE `name` IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM PluginData WHERE `name` IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting plugin\'s data')); diff --git a/lib/SP/Infrastructure/Plugin/Repositories/PluginRepository.php b/lib/SP/Infrastructure/Plugin/Repositories/PluginRepository.php index 46fc3bac..e08a4f4b 100644 --- a/lib/SP/Infrastructure/Plugin/Repositories/PluginRepository.php +++ b/lib/SP/Infrastructure/Plugin/Repositories/PluginRepository.php @@ -200,7 +200,7 @@ final class PluginRepository extends Repository implements PluginRepositoryInter available, versionLevel FROM Plugin - WHERE id IN ('.$this->getParamsFromArray($ids).') + WHERE id IN ('.$this->buildParamsFromArray($ids).') ORDER BY id'; $queryData = new QueryData(); @@ -228,7 +228,7 @@ final class PluginRepository extends Repository implements PluginRepositoryInter } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM Plugin WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM Plugin WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the plugins')); diff --git a/lib/SP/Infrastructure/Tag/Repositories/TagRepository.php b/lib/SP/Infrastructure/Tag/Repositories/TagRepository.php index 951c2f5b..6b9b5f83 100644 --- a/lib/SP/Infrastructure/Tag/Repositories/TagRepository.php +++ b/lib/SP/Infrastructure/Tag/Repositories/TagRepository.php @@ -212,7 +212,7 @@ final class TagRepository extends Repository implements TagRepositoryInterface } $query = /** @lang SQL */ - 'SELECT id, `name` FROM Tag WHERE id IN ('.$this->getParamsFromArray($ids).')'; + 'SELECT id, `name` FROM Tag WHERE id IN ('.$this->buildParamsFromArray($ids).')'; $queryData = new QueryData(); $queryData->setMapClassName(TagData::class); @@ -238,7 +238,7 @@ final class TagRepository extends Repository implements TagRepositoryInterface } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM Tag WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM Tag WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while removing the tags')); diff --git a/lib/SP/Infrastructure/User/Repositories/UserGroupRepository.php b/lib/SP/Infrastructure/User/Repositories/UserGroupRepository.php index 2fd8a288..d1cc2a28 100644 --- a/lib/SP/Infrastructure/User/Repositories/UserGroupRepository.php +++ b/lib/SP/Infrastructure/User/Repositories/UserGroupRepository.php @@ -225,7 +225,7 @@ final class UserGroupRepository extends Repository implements UserGroupRepositor } $query = /** @lang SQL */ - 'SELECT id, name, description FROM UserGroup WHERE id IN ('.$this->getParamsFromArray($ids).')'; + 'SELECT id, name, description FROM UserGroup WHERE id IN ('.$this->buildParamsFromArray($ids).')'; $queryData = new QueryData(); $queryData->setMapClassName(UserGroupData::class); @@ -251,7 +251,7 @@ final class UserGroupRepository extends Repository implements UserGroupRepositor } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM UserGroup WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM UserGroup WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); return $this->db->doQuery($queryData)->getAffectedNumRows(); diff --git a/lib/SP/Infrastructure/User/Repositories/UserProfileRepository.php b/lib/SP/Infrastructure/User/Repositories/UserProfileRepository.php index 1fce5c50..1ec8221e 100644 --- a/lib/SP/Infrastructure/User/Repositories/UserProfileRepository.php +++ b/lib/SP/Infrastructure/User/Repositories/UserProfileRepository.php @@ -150,7 +150,7 @@ final class UserProfileRepository extends Repository implements UserProfileRepos } $query = /** @lang SQL */ - 'SELECT id, `name` FROM UserProfile WHERE id IN ('.$this->getParamsFromArray($ids).')'; + 'SELECT id, `name` FROM UserProfile WHERE id IN ('.$this->buildParamsFromArray($ids).')'; $queryData = new QueryData(); $queryData->setMapClassName(UserProfileData::class); @@ -176,7 +176,7 @@ final class UserProfileRepository extends Repository implements UserProfileRepos } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM UserProfile WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM UserProfile WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while removing the profiles')); diff --git a/lib/SP/Infrastructure/User/Repositories/UserRepository.php b/lib/SP/Infrastructure/User/Repositories/UserRepository.php index 348c9d07..a76829b0 100644 --- a/lib/SP/Infrastructure/User/Repositories/UserRepository.php +++ b/lib/SP/Infrastructure/User/Repositories/UserRepository.php @@ -325,7 +325,7 @@ final class UserRepository extends Repository implements UserRepositoryInterface U.isMigrate FROM User U INNER JOIN UserGroup UG ON U.userGroupId = UG.id - WHERE U.id IN ('.$this->getParamsFromArray($ids).')'; + WHERE U.id IN ('.$this->buildParamsFromArray($ids).')'; $queryData = new QueryData(); $queryData->setMapClassName(UserData::class); @@ -351,7 +351,7 @@ final class UserRepository extends Repository implements UserRepositoryInterface } $queryData = new QueryData(); - $queryData->setQuery('DELETE FROM User WHERE id IN ('.$this->getParamsFromArray($ids).')'); + $queryData->setQuery('DELETE FROM User WHERE id IN ('.$this->buildParamsFromArray($ids).')'); $queryData->setParams($ids); $queryData->setOnErrorMessage(__u('Error while deleting the users')); @@ -782,7 +782,7 @@ final class UserRepository extends Repository implements UserRepositoryInterface FROM User WHERE email IS NOT NULL AND isDisabled = 0 - AND id IN ('.$this->getParamsFromArray($ids).') + AND id IN ('.$this->buildParamsFromArray($ids).') ORDER BY login'; $queryData = new QueryData(); diff --git a/lib/SP/Infrastructure/User/Repositories/UserToUserGroupRepository.php b/lib/SP/Infrastructure/User/Repositories/UserToUserGroupRepository.php index efbb5f57..3ba06ea1 100644 --- a/lib/SP/Infrastructure/User/Repositories/UserToUserGroupRepository.php +++ b/lib/SP/Infrastructure/User/Repositories/UserToUserGroupRepository.php @@ -132,7 +132,7 @@ final class UserToUserGroupRepository extends Repository implements UserToUserGr } $query = /** @lang SQL */ - 'INSERT INTO UserToUserGroup (userId, userGroupId) VALUES '.$this->getParamsFromArray($users, '(?,?)'); + 'INSERT INTO UserToUserGroup (userId, userGroupId) VALUES '.$this->buildParamsFromArray($users, '(?,?)'); $queryData = new QueryData(); $queryData->setQuery($query); diff --git a/tests/SP/Repositories/AccountRepositoryTest.php b/tests/SP/Repositories/AccountRepositoryTest.php index 1d380188..2fffb55e 100644 --- a/tests/SP/Repositories/AccountRepositoryTest.php +++ b/tests/SP/Repositories/AccountRepositoryTest.php @@ -26,8 +26,9 @@ namespace SP\Tests\Repositories; use Aura\SqlQuery\QueryFactory; use PHPUnit\Framework\Constraint\Callback; +use RuntimeException; use SP\DataModel\AccountHistoryData; -use SP\DataModel\AccountVData; +use SP\DataModel\ItemSearchData; use SP\Domain\Account\Services\AccountFilterUser; use SP\Domain\Account\Services\AccountPasswordRequest; use SP\Domain\Account\Services\AccountRequest; @@ -49,10 +50,9 @@ class AccountRepositoryTest extends UnitaryTestCase { private DatabaseInterface $databaseInterface; private AccountRepository $accountRepository; + private QueryFactory $queryFactory; + private AccountFilterUser $accountFilterUser; - /** - * @noinspection ClassMockingCorrectnessInspection - */ protected function setUp(): void { parent::setUp(); @@ -82,8 +82,6 @@ class AccountRepositoryTest extends UnitaryTestCase public function testGetTotalNumAccounts(): void { - $expected = new QueryResult([new SimpleModel(['num' => 1])]); - $callback = new Callback( static function (QueryData $arg) { return $arg->getMapClassName() === SimpleModel::class && !empty($arg->getQuery()); @@ -93,50 +91,54 @@ class AccountRepositoryTest extends UnitaryTestCase $this->databaseInterface->expects(self::once()) ->method('doSelect') ->with($callback, false) - ->willReturn($expected); + ->willReturn(new QueryResult([new SimpleModel(['num' => 1])])); - $this->assertEquals($expected->getData(), $this->accountRepository->getTotalNumAccounts()); + $this->accountRepository->getTotalNumAccounts(); } public function testGetPasswordForId(): void { - $expected = new QueryResult(); - $callback = new Callback( static function (QueryData $arg) { return $arg->getMapClassName() === SimpleModel::class && !empty($arg->getQuery()->getStatement()); } ); + $this->accountFilterUser + ->expects(self::once()) + ->method('buildFilter'); + $this->databaseInterface->expects(self::once()) ->method('doSelect') ->with($callback, false) - ->willReturn($expected); + ->willReturn(new QueryResult()); - $this->assertEquals($expected, $this->accountRepository->getPasswordForId(1)); + $this->accountRepository->getPasswordForId(1); } public function testGetPasswordHistoryForId(): void { - $expected = new QueryResult(); - $callback = new Callback( static function (QueryData $arg) { return $arg->getMapClassName() === SimpleModel::class && !empty($arg->getQuery()); } ); + $this->accountFilterUser + ->expects(self::once()) + ->method('buildFilterHistory'); + $this->databaseInterface->expects(self::once()) ->method('doSelect') ->with($callback, false) - ->willReturn($expected); + ->willReturn(new QueryResult()); - $this->assertEquals($expected, $this->accountRepository->getPasswordHistoryForId(1)); + $this->accountRepository->getPasswordHistoryForId(1); } /** - * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException + * @throws \SP\Core\Exceptions\ConstraintException */ public function testIncrementDecryptCounter(): void { @@ -146,7 +148,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(1); $callback = new Callback( - function (QueryData $arg) use ($id) { + static function (QueryData $arg) use ($id) { return $arg->getQuery()->getBindValues()['id'] === $id && !empty($arg->getQuery()->getStatement()); } ); @@ -171,7 +173,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(0); $callback = new Callback( - function (QueryData $arg) use ($id) { + static function (QueryData $arg) use ($id) { return $arg->getQuery()->getBindValues()['id'] === $id && !empty($arg->getQuery()); } ); @@ -196,7 +198,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setLastId(1); $callback = new Callback( - function (QueryData $arg) use ($accountRequest) { + static function (QueryData $arg) use ($accountRequest) { $params = $arg->getQuery()->getBindValues(); return $params['clientId'] === $accountRequest->clientId @@ -249,8 +251,8 @@ class AccountRepositoryTest extends UnitaryTestCase } /** - * @throws \SP\Core\Exceptions\QueryException * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException */ public function testEditPassword(): void { @@ -260,7 +262,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(1); $callback = new Callback( - function (QueryData $arg) use ($accountRequest) { + static function (QueryData $arg) use ($accountRequest) { $params = $arg->getQuery()->getBindValues(); return $params['pass'] === $accountRequest->pass @@ -295,7 +297,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(1); $callback = new Callback( - function (QueryData $arg) use ($accountPasswordRequest) { + static function (QueryData $arg) use ($accountPasswordRequest) { $params = $arg->getQuery()->getBindValues(); return $params['pass'] === $accountPasswordRequest->pass @@ -314,8 +316,8 @@ class AccountRepositoryTest extends UnitaryTestCase } /** - * @throws \SP\Core\Exceptions\ConstraintException * @throws \SP\Core\Exceptions\QueryException + * @throws \SP\Core\Exceptions\ConstraintException */ public function testEditRestore(): void { @@ -344,7 +346,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(1); $callback = new Callback( - function (QueryData $arg) use ($accountHistoryData, $userId) { + static function (QueryData $arg) use ($accountHistoryData, $userId) { $params = $arg->getQuery()->getBindValues(); return $params['id'] === $accountHistoryData->getAccountId() @@ -385,7 +387,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(1); $callback = new Callback( - function (QueryData $arg) use ($id) { + static function (QueryData $arg) use ($id) { return $arg->getQuery()->getBindValues()['id'] === $id && !empty($arg->getQuery()->getStatement()); } @@ -410,7 +412,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(1); $callback = new Callback( - function (QueryData $arg) use ($accountRequest) { + static function (QueryData $arg) use ($accountRequest) { $params = $arg->getQuery()->getBindValues(); return $params['clientId'] === $accountRequest->clientId @@ -448,7 +450,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(1); $callback = new Callback( - function (QueryData $arg) use ($accountRequest) { + static function (QueryData $arg) use ($accountRequest) { $params = $arg->getQuery()->getBindValues(); return $params['clientId'] === $accountRequest->clientId @@ -487,7 +489,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(1); $callback = new Callback( - function (QueryData $arg) use ($accountRequest) { + static function (QueryData $arg) use ($accountRequest) { $params = $arg->getQuery()->getBindValues(); return $params['clientId'] === $accountRequest->clientId @@ -525,7 +527,7 @@ class AccountRepositoryTest extends UnitaryTestCase $expected->setAffectedNumRows(1); $callback = new Callback( - function (QueryData $arg) use ($accountRequest) { + static function (QueryData $arg) use ($accountRequest) { $params = $arg->getQuery()->getBindValues(); return $params['userEditId'] === $accountRequest->userEditId @@ -547,14 +549,23 @@ class AccountRepositoryTest extends UnitaryTestCase $this->assertEquals($expected->getAffectedNumRows(), $this->accountRepository->updateBulk($accountRequest)); } - public function testgetById() + /** + * @throws \SP\Core\Exceptions\SPException + */ + public function testUpdateBulkNoFieldsToUpdate() + { + $this->databaseInterface->expects(self::never()) + ->method('doQuery'); + + $this->assertEquals(0, $this->accountRepository->updateBulk(new AccountRequest())); + } + + public function testGetById() { $id = self::$faker->randomNumber(); - $expected = new QueryResult(); - $callback = new Callback( - function (QueryData $arg) use ($id) { + static function (QueryData $arg) use ($id) { return $arg->getQuery()->getBindValues()['id'] === $id && $arg->getMapClassName() === SimpleModel::class && !empty($arg->getQuery()->getStatement()); @@ -564,8 +575,323 @@ class AccountRepositoryTest extends UnitaryTestCase $this->databaseInterface->expects(self::once()) ->method('doSelect') ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->getById($id); + } + + public function testGetAll() + { + $callback = new Callback( + static function (QueryData $arg) { + return $arg->getMapClassName() === SimpleModel::class + && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->databaseInterface + ->expects(self::once()) + ->method('doSelect') + ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->getAll(); + } + + public function testGetByIdBatch() + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('Not implemented'); + + $this->accountRepository->getByIdBatch([]); + } + + public function testCheckInUse() + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('Not implemented'); + + $this->accountRepository->checkInUse(0); + } + + public function testCheckDuplicatedOnUpdate() + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('Not implemented'); + + $this->accountRepository->checkDuplicatedOnUpdate(null); + } + + public function testCheckDuplicatedOnAdd() + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('Not implemented'); + + $this->accountRepository->checkDuplicatedOnAdd(null); + } + + /** + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testDeleteByIdBatch() + { + $ids = [self::$faker->randomNumber(), self::$faker->randomNumber(), self::$faker->randomNumber()]; + + $callback = new Callback( + static function (QueryData $arg) use ($ids) { + $values = $arg->getQuery()->getBindValues(); + + return array_shift($values) === array_shift($ids) + && array_shift($values) === array_shift($ids) + && array_shift($values) === array_shift($ids) + && $arg->getMapClassName() === SimpleModel::class + && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->databaseInterface->expects(self::once()) + ->method('doQuery') + ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->deleteByIdBatch($ids); + } + + /** + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testDeleteByIdBatchWithNoIds() + { + $this->databaseInterface->expects(self::never()) + ->method('doQuery'); + + $this->assertEquals(0, $this->accountRepository->deleteByIdBatch([])); + } + + public function testSearch() + { + $item = new ItemSearchData(); + $item->seachString = self::$faker->name; + + $callback = new Callback( + static function (QueryData $arg) use ($item) { + $params = $arg->getQuery()->getBindValues(); + $searchStringLike = '%'.$item->seachString.'%'; + + return $params['name'] === $searchStringLike + && $params['clientName'] === $searchStringLike + && $params['categoryName'] === $searchStringLike + && $params['userName'] === $searchStringLike + && $params['userGroupName'] === $searchStringLike + && $arg->getMapClassName() === SimpleModel::class + && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->databaseInterface + ->expects(self::once()) + ->method('doSelect') + ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->search($item); + } + + public function testSearchWithoutString() + { + $callback = new Callback( + static function (QueryData $arg) { + return count($arg->getQuery()->getBindValues()) === 0 + && $arg->getMapClassName() === SimpleModel::class + && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->databaseInterface + ->expects(self::once()) + ->method('doSelect') + ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->search(new ItemSearchData()); + } + + /** + * @throws \SP\Core\Exceptions\QueryException + * @throws \SP\Core\Exceptions\ConstraintException + */ + public function testIncrementViewCounter(): void + { + $id = 1; + + $expected = new QueryResult(); + $expected->setAffectedNumRows(1); + + $callback = new Callback( + static function (QueryData $arg) use ($id) { + return $arg->getQuery()->getBindValues()['id'] === $id && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->databaseInterface->expects(self::once()) + ->method('doQuery') + ->with($callback) ->willReturn($expected); - $this->assertEquals($expected, $this->accountRepository->getById($id)); + $this->assertTrue($this->accountRepository->incrementViewCounter($id)); + } + + /** + * @throws \SP\Core\Exceptions\ConstraintException + * @throws \SP\Core\Exceptions\QueryException + */ + public function testIncrementViewCounterNoRows(): void + { + $id = 1; + + $expected = new QueryResult(); + $expected->setAffectedNumRows(0); + + $callback = new Callback( + static function (QueryData $arg) use ($id) { + return $arg->getQuery()->getBindValues()['id'] === $id && !empty($arg->getQuery()); + } + ); + + $this->databaseInterface->expects(self::once()) + ->method('doQuery') + ->with($callback) + ->willReturn($expected); + + $this->assertFalse($this->accountRepository->incrementViewCounter($id)); + } + + public function testGetDataForLink() + { + $id = self::$faker->randomNumber(); + + $callback = new Callback( + static function (QueryData $arg) use ($id) { + $params = $arg->getQuery()->getBindValues(); + + return $params['id'] === $id + && $arg->getMapClassName() === SimpleModel::class + && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->databaseInterface + ->expects(self::once()) + ->method('doSelect') + ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->getDataForLink($id); + } + + public function testGetForUser() + { + $id = self::$faker->randomNumber(); + + $callback = new Callback( + function (QueryData $arg) use ($id) { + $params = $arg->getQuery()->getBindValues(); + + return $params['id'] === $id + && $params['userId'] === $this->context->getUserData()->getId() + && $params['userGroupId'] === $this->context->getUserData()->getUserGroupId() + && $arg->getMapClassName() === SimpleModel::class + && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->accountFilterUser + ->expects(self::once()) + ->method('buildFilter'); + + $this->databaseInterface + ->expects(self::once()) + ->method('doSelect') + ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->getForUser($id); + } + + public function testGetForUserWithoutAccount() + { + $callback = new Callback( + function (QueryData $arg) { + $params = $arg->getQuery()->getBindValues(); + + return $params['userId'] === $this->context->getUserData()->getId() + && $params['userGroupId'] === $this->context->getUserData()->getUserGroupId() + && count($params) === 2 + && $arg->getMapClassName() === SimpleModel::class + && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->accountFilterUser + ->expects(self::once()) + ->method('buildFilter'); + + $this->databaseInterface + ->expects(self::once()) + ->method('doSelect') + ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->getForUser(); + } + + public function testGetLinked() + { + $id = self::$faker->randomNumber(); + + $callback = new Callback( + function (QueryData $arg) use ($id) { + $params = $arg->getQuery()->getBindValues(); + + return $params['parentId'] === $id + && $params['userId'] === $this->context->getUserData()->getId() + && $params['userGroupId'] === $this->context->getUserData()->getUserGroupId() + && $arg->getMapClassName() === SimpleModel::class + && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->accountFilterUser + ->expects(self::once()) + ->method('buildFilter'); + + $this->databaseInterface + ->expects(self::once()) + ->method('doSelect') + ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->getLinked($id); + } + + public function testGetAccountsPassData() + { + $callback = new Callback( + function (QueryData $arg) { + return $arg->getMapClassName() === SimpleModel::class + && !empty($arg->getQuery()->getStatement()); + } + ); + + $this->databaseInterface + ->expects(self::once()) + ->method('doSelect') + ->with($callback) + ->willReturn(new QueryResult()); + + $this->accountRepository->getAccountsPassData(); + } } diff --git a/tests/SP/UnitaryTestCase.php b/tests/SP/UnitaryTestCase.php index 200e79b6..aa4b0874 100644 --- a/tests/SP/UnitaryTestCase.php +++ b/tests/SP/UnitaryTestCase.php @@ -78,7 +78,11 @@ abstract class UnitaryTestCase extends TestCase private function mockApplication(): Application { $userLogin = new UserLoginResponse(); - $userLogin->setLogin(self::$faker->userName); + $userLogin + ->setLogin(self::$faker->userName) + ->setName(self::$faker->userName) + ->setId(self::$faker->randomNumber()) + ->setUserGroupId(self::$faker->randomNumber()); $this->context = new StatelessContext(); $this->context->initialize();