summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/updatenotification/package-lock.json6
-rw-r--r--apps/updatenotification/package.json2
-rw-r--r--lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php4
-rw-r--r--lib/private/User/Database.php39
-rw-r--r--lib/public/DB/QueryBuilder/IFunctionBuilder.php8
-rw-r--r--settings/package-lock.json12
-rw-r--r--settings/package.json2
-rw-r--r--settings/templates/settings/personal/personal.info.php4
-rw-r--r--tests/lib/DB/QueryBuilder/FunctionBuilderTest.php10
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());
+ }
}