diff options
-rw-r--r-- | apps/updatenotification/package-lock.json | 6 | ||||
-rw-r--r-- | apps/updatenotification/package.json | 2 | ||||
-rw-r--r-- | lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php | 4 | ||||
-rw-r--r-- | lib/private/User/Database.php | 39 | ||||
-rw-r--r-- | lib/public/DB/QueryBuilder/IFunctionBuilder.php | 8 | ||||
-rw-r--r-- | settings/package-lock.json | 12 | ||||
-rw-r--r-- | settings/package.json | 2 | ||||
-rw-r--r-- | settings/templates/settings/personal/personal.info.php | 4 | ||||
-rw-r--r-- | tests/lib/DB/QueryBuilder/FunctionBuilderTest.php | 10 |
9 files changed, 61 insertions, 26 deletions
diff --git a/apps/updatenotification/package-lock.json b/apps/updatenotification/package-lock.json index 634102cb9d1..472695c393d 100644 --- a/apps/updatenotification/package-lock.json +++ b/apps/updatenotification/package-lock.json @@ -6988,9 +6988,9 @@ } }, "webpack-merge": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.2.tgz", - "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.3.tgz", + "integrity": "sha512-zxwAIGK7nKdu5CIZL0BjTQoq3elV0t0MfB7rUC1zj668geid52abs6hN/ACwZdK6LeMS8dC9B6WmtF978zH5mg==", "dev": true, "requires": { "lodash": "^4.17.5" diff --git a/apps/updatenotification/package.json b/apps/updatenotification/package.json index d9b6a664c9c..915397dfd08 100644 --- a/apps/updatenotification/package.json +++ b/apps/updatenotification/package.json @@ -34,6 +34,6 @@ "vue-template-compiler": "^2.5.16", "webpack": "^4.12.0", "webpack-cli": "^3.0.8", - "webpack-merge": "^4.1.2" + "webpack-merge": "^4.1.3" } } diff --git a/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php b/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php index bd367973097..cf6183b0238 100644 --- a/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php +++ b/lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php @@ -71,4 +71,8 @@ class FunctionBuilder implements IFunctionBuilder { public function subtract($x, $y) { return new QueryFunction($this->helper->quoteColumnName($x) . ' - ' . $this->helper->quoteColumnName($y)); } + + public function count($input) { + return new QueryFunction('COUNT(' . $this->helper->quoteColumnName($input) . ')'); + } } diff --git a/lib/private/User/Database.php b/lib/private/User/Database.php index b2c54cd7c7e..df7f70c5dd2 100644 --- a/lib/private/User/Database.php +++ b/lib/private/User/Database.php @@ -96,6 +96,7 @@ class Database extends ABackend * \OC\User\Database constructor. * * @param EventDispatcher $eventDispatcher + * @param string $table */ public function __construct($eventDispatcher = null) { $this->cache = new CappedMemoryCache(); @@ -159,8 +160,10 @@ class Database extends ABackend $this->fixDI(); // Delete user-group-relation - $query = \OC_DB::prepare('DELETE FROM `*PREFIX*users` WHERE `uid` = ?'); - $result = $query->execute([$uid]); + $query = $this->dbConn->getQueryBuilder(); + $query->delete('users') + ->where($query->expr()->eq('uid_lower', $query->createNamedParameter(mb_strtolower($uid)))); + $result = $query->execute(); if (isset($this->cache[$uid])) { unset($this->cache[$uid]); @@ -184,8 +187,15 @@ class Database extends ABackend if ($this->userExists($uid)) { $event = new GenericEvent($password); $this->eventDispatcher->dispatch('OCP\PasswordPolicy::validate', $event); - $query = \OC_DB::prepare('UPDATE `*PREFIX*users` SET `password` = ? WHERE `uid` = ?'); - $result = $query->execute([\OC::$server->getHasher()->hash($password), $uid]); + + $hasher = \OC::$server->getHasher(); + $hashedPassword = $hasher->hash($password); + + $query = $this->dbConn->getQueryBuilder(); + $query->update('users') + ->set('password', $query->createNamedParameter($hashedPassword)) + ->where($query->expr()->eq('uid_lower', $query->createNamedParameter(mb_strtolower($uid)))); + $result = $query->execute(); return $result ? true : false; } @@ -206,8 +216,12 @@ class Database extends ABackend $this->fixDI(); if ($this->userExists($uid)) { - $query = \OC_DB::prepare('UPDATE `*PREFIX*users` SET `displayname` = ? WHERE LOWER(`uid`) = LOWER(?)'); - $query->execute([$displayName, $uid]); + $query = $this->dbConn->getQueryBuilder(); + $query->update('users') + ->set('displayname', $query->createNamedParameter($displayName)) + ->where($query->expr()->eq('uid_lower', $query->createNamedParameter(mb_strtolower($uid)))); + $query->execute(); + $this->cache[$uid]['displayname'] = $displayName; return true; @@ -253,7 +267,7 @@ class Database extends ABackend ->orWhere($query->expr()->iLike('displayname', $query->createPositionalParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%'))) ->orWhere($query->expr()->iLike('configvalue', $query->createPositionalParameter('%' . $this->dbConn->escapeLikeParameter($search) . '%'))) ->orderBy($query->func()->lower('displayname'), 'ASC') - ->orderBy($query->func()->lower('uid'), 'ASC') + ->orderBy('uid_lower', 'ASC') ->setMaxResults($limit) ->setFirstResult($offset); @@ -406,13 +420,12 @@ class Database extends ABackend public function countUsers() { $this->fixDI(); - $query = \OC_DB::prepare('SELECT COUNT(*) FROM `*PREFIX*users`'); + $query = $this->dbConn->getQueryBuilder(); + $query->select($query->func()->count('uid')) + ->from('users'); $result = $query->execute(); - if ($result === false) { - Util::writeLog('core', \OC_DB::getErrorMessage(), ILogger::ERROR); - return false; - } - return $result->fetchOne(); + + return $result->fetchColumn(); } /** diff --git a/lib/public/DB/QueryBuilder/IFunctionBuilder.php b/lib/public/DB/QueryBuilder/IFunctionBuilder.php index e0e331c0807..51b639028ce 100644 --- a/lib/public/DB/QueryBuilder/IFunctionBuilder.php +++ b/lib/public/DB/QueryBuilder/IFunctionBuilder.php @@ -96,4 +96,12 @@ interface IFunctionBuilder { * @since 14.0.0 */ public function subtract($x, $y); + + /** + * @param mixed $input The input to be counted + * + * @return IQueryFunction + * @since 14.0.0 + */ + public function count($input); } diff --git a/settings/package-lock.json b/settings/package-lock.json index 2204cdf78c7..65f37dd27ae 100644 --- a/settings/package-lock.json +++ b/settings/package-lock.json @@ -5452,9 +5452,9 @@ } }, "rxjs": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.0.tgz", - "integrity": "sha512-qBzf5uu6eOKiCZuAE0SgZ0/Qp+l54oeVxFfC2t+mJ2SFI6IB8gmMdJHs5DUMu5kqifqcCtsKS2XHjhZu6RKvAw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.1.tgz", + "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -6408,9 +6408,9 @@ } }, "webpack-cli": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.0.3.tgz", - "integrity": "sha512-65a3T3SDIozJjRU4UJMdK+LXJt73gNs2qpdjsOeq6jIrfBvAKApy59Glof1qDG3wYEo38HRxb+KrwsrsAtsaiA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.0.8.tgz", + "integrity": "sha512-KnRLJ0BUaYRqrhAMb9dv3gzdmhmgIMKo0FmdsnmfqbPGtLnnZ6tORZAvmmKfr+A0VgiVpqC60Gv7Ofg0R2CHtQ==", "dev": true, "requires": { "chalk": "^2.4.1", diff --git a/settings/package.json b/settings/package.json index 9412ed00cf1..baa17a9d01f 100644 --- a/settings/package.json +++ b/settings/package.json @@ -37,7 +37,7 @@ "vue-loader": "^15.2.4", "vue-template-compiler": "^2.5.16", "webpack": "^4.12.0", - "webpack-cli": "^3.0.3", + "webpack-cli": "^3.0.8", "webpack-merge": "^4.1.3" } } diff --git a/settings/templates/settings/personal/personal.info.php b/settings/templates/settings/personal/personal.info.php index b40f4b6720f..087451d3040 100644 --- a/settings/templates/settings/personal/personal.info.php +++ b/settings/templates/settings/personal/personal.info.php @@ -78,7 +78,7 @@ vendor_style('jcrop/css/jquery.Jcrop'); <div class="personal-settings-setting-box personal-settings-group-box section"> <h2><?php p($l->t('Details')); ?></h2> <div id="groups" class="personal-info icon-user"> - <p class="icon-groups"><?php p($l->t('You are member of the following groups:')); ?></p> + <p class="icon-groups"><?php p($l->t('You are a member of the following groups:')); ?></p> <p id="groups-groups"> <strong><?php p(implode(', ', $_['groups'])); ?></strong> </p> @@ -378,4 +378,4 @@ vendor_style('jcrop/css/jquery.Jcrop'); </div> -</div>
\ No newline at end of file +</div> diff --git a/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php b/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php index 1b998287c98..136650741f5 100644 --- a/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php +++ b/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php @@ -110,4 +110,14 @@ class FunctionBuilderTest extends TestCase { $this->assertEquals(1, $query->execute()->fetchColumn()); } + + public function testCount() { + $query = $this->connection->getQueryBuilder(); + + $query->select($query->func()->count('appid')); + $query->from('appconfig') + ->setMaxResults(1); + + $this->assertGreaterThan(1, $query->execute()->fetchColumn()); + } } |