aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files/lib/Activity/Provider.php40
-rw-r--r--lib/private/DB/QueryBuilder/QueryBuilder.php37
-rw-r--r--lib/public/DB/QueryBuilder/IQueryBuilder.php23
3 files changed, 98 insertions, 2 deletions
diff --git a/apps/files/lib/Activity/Provider.php b/apps/files/lib/Activity/Provider.php
index e401fdce09c..53ee48ab550 100644
--- a/apps/files/lib/Activity/Provider.php
+++ b/apps/files/lib/Activity/Provider.php
@@ -230,10 +230,42 @@ class Provider implements IProvider {
$subject = $this->l->t('{user} restored {file}');
$this->setIcon($event, 'actions/history', 'core');
} elseif ($event->getSubject() === 'renamed_self') {
- $subject = $this->l->t('You renamed {oldfile} to {newfile}');
+ $oldFileName = $parsedParameters['oldfile']['name'];
+ $newFileName = $parsedParameters['newfile']['name'];
+
+ if ($this->isHiddenFile($oldFileName)) {
+ if ($this->isHiddenFile($newFileName)) {
+ $subject = $this->l->t('You renamed {oldfile} (hidden) to {newfile} (hidden)');
+ } else {
+ $subject = $this->l->t('You renamed {oldfile} (hidden) to {newfile}');
+ }
+ } else {
+ if ($this->isHiddenFile($newFileName)) {
+ $subject = $this->l->t('You renamed {oldfile} to {newfile} (hidden)');
+ } else {
+ $subject = $this->l->t('You renamed {oldfile} to {newfile}');
+ }
+ }
+
$this->setIcon($event, 'change');
} elseif ($event->getSubject() === 'renamed_by') {
- $subject = $this->l->t('{user} renamed {oldfile} to {newfile}');
+ $oldFileName = $parsedParameters['oldfile']['name'];
+ $newFileName = $parsedParameters['newfile']['name'];
+
+ if ($this->isHiddenFile($oldFileName)) {
+ if ($this->isHiddenFile($newFileName)) {
+ $subject = $this->l->t('{user} renamed {oldfile} (hidden) to {newfile} (hidden)');
+ } else {
+ $subject = $this->l->t('{user} renamed {oldfile} (hidden) to {newfile}');
+ }
+ } else {
+ if ($this->isHiddenFile($newFileName)) {
+ $subject = $this->l->t('{user} renamed {oldfile} to {newfile} (hidden)');
+ } else {
+ $subject = $this->l->t('{user} renamed {oldfile} to {newfile}');
+ }
+ }
+
$this->setIcon($event, 'change');
} elseif ($event->getSubject() === 'moved_self') {
$subject = $this->l->t('You moved {oldfile} to {newfile}');
@@ -270,6 +302,10 @@ class Provider implements IProvider {
return $event;
}
+ private function isHiddenFile(string $filename): bool {
+ return strlen($filename) > 0 && $filename[0] === '.';
+ }
+
protected function setSubjects(IEvent $event, $subject, array $parameters) {
$placeholders = $replacements = [];
foreach ($parameters as $placeholder => $parameter) {
diff --git a/lib/private/DB/QueryBuilder/QueryBuilder.php b/lib/private/DB/QueryBuilder/QueryBuilder.php
index aa0327e89d9..83b233ac1b5 100644
--- a/lib/private/DB/QueryBuilder/QueryBuilder.php
+++ b/lib/private/DB/QueryBuilder/QueryBuilder.php
@@ -291,6 +291,43 @@ class QueryBuilder implements IQueryBuilder {
return new ResultAdapter($result);
}
+ public function executeQuery(): IResult {
+ if ($this->getType() !== \Doctrine\DBAL\Query\QueryBuilder::SELECT) {
+ throw new \RuntimeException('Invalid query type, expected SELECT query');
+ }
+
+ try {
+ $result = $this->execute();
+ } catch (\Doctrine\DBAL\Exception $e) {
+ throw \OC\DB\Exceptions\DbalException::wrap($e);
+ }
+
+ if ($result instanceof IResult) {
+ return $result;
+ }
+
+ throw new \RuntimeException('Invalid return type for query');
+ }
+
+ public function executeUpdate(): int {
+ if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::SELECT) {
+ throw new \RuntimeException('Invalid query type, expected INSERT, DELETE or UPDATE query');
+ }
+
+ try {
+ $result = $this->execute();
+ } catch (\Doctrine\DBAL\Exception $e) {
+ throw \OC\DB\Exceptions\DbalException::wrap($e);
+ }
+
+ if (!is_int($result)) {
+ throw new \RuntimeException('Invalid return type for query');
+ }
+
+ return $result;
+ }
+
+
/**
* Gets the complete SQL string formed by the current specifications of this QueryBuilder.
*
diff --git a/lib/public/DB/QueryBuilder/IQueryBuilder.php b/lib/public/DB/QueryBuilder/IQueryBuilder.php
index 0a5d42e48c5..91ffab02f48 100644
--- a/lib/public/DB/QueryBuilder/IQueryBuilder.php
+++ b/lib/public/DB/QueryBuilder/IQueryBuilder.php
@@ -159,10 +159,33 @@ interface IQueryBuilder {
* @return IResult|int
* @throws Exception since 21.0.0
* @since 8.2.0
+ * @deprecated 22.0.0 Use executeQuery or executeUpdate
*/
public function execute();
/**
+ * Execute for select statements
+ *
+ * @return IResult
+ * @since 22.0.0
+ *
+ * @throws Exception
+ * @throws \RuntimeException in case of usage with non select query
+ */
+ public function executeQuery(): IResult;
+
+ /**
+ * Execute for insert, update and delete statements
+ *
+ * @return int
+ * @since 22.0.0
+ *
+ * @throws Exception
+ * @throws \RuntimeException in case of usage with select query
+ */
+ public function executeUpdate(): int;
+
+ /**
* Gets the complete SQL string formed by the current specifications of this QueryBuilder.
*
* <code>