]> git.mxchange.org Git - friendica.git/blobdiff - src/BaseRepository.php
Merge pull request #9397 from vinzv/9238-red-color-unread-messages-faded
[friendica.git] / src / BaseRepository.php
index 9f43d8fe144437adb62ee5c311667cb45833eb50..abec4c119b3f21c834cc73ba34017184ded8f94f 100644 (file)
@@ -1,4 +1,23 @@
 <?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
 
 namespace Friendica;
 
@@ -90,26 +109,22 @@ abstract class BaseRepository extends BaseFactory
         */
        public function selectByBoundaries(array $condition = [], array $params = [], int $max_id = null, int $since_id = null, int $limit = self::LIMIT)
        {
-               $condition = DBA::collapseCondition($condition);
+               $totalCount = DBA::count(static::$table_name, $condition);
 
                $boundCondition = $condition;
 
                if (isset($max_id)) {
-                       $boundCondition[0] .= " AND `id` < ?";
-                       $boundCondition[] = $max_id;
+                       $boundCondition = DBA::mergeConditions($boundCondition, ['`id` < ?', $max_id]);
                }
 
                if (isset($since_id)) {
-                       $boundCondition[0] .= " AND `id` > ?";
-                       $boundCondition[] = $since_id;
+                       $boundCondition = DBA::mergeConditions($boundCondition, ['`id` > ?', $since_id]);
                }
 
                $params['limit'] = $limit;
 
                $models = $this->selectModels($boundCondition, $params);
 
-               $totalCount = DBA::count(static::$table_name, $condition);
-
                return new static::$collection_class($models, $totalCount);
        }
 
@@ -122,7 +137,12 @@ abstract class BaseRepository extends BaseFactory
         */
        public function update(BaseModel $model)
        {
-               return $this->dba->update(static::$table_name, $model->toArray(), ['id' => $model->id], true);
+               if ($this->dba->update(static::$table_name, $model->toArray(), ['id' => $model->id], $model->getOriginalData())) {
+                       $model->resetOriginalData();
+                       return true;
+               }
+
+               return false;
        }
 
        /**
@@ -136,11 +156,13 @@ abstract class BaseRepository extends BaseFactory
        {
                $return = $this->dba->insert(static::$table_name, $fields);
 
-               if ($return) {
-                       $fields['id'] = $this->dba->lastInsertId();
-                       $return = $this->create($fields);
+               if (!$return) {
+                       throw new HTTPException\InternalServerErrorException('Unable to insert new row in table "' . static::$table_name . '"');
                }
 
+               $fields['id'] = $this->dba->lastInsertId();
+               $return = $this->create($fields);
+
                return $return;
        }
 
@@ -197,4 +219,12 @@ abstract class BaseRepository extends BaseFactory
 
                return $models;
        }
+
+       /**
+        * @param BaseCollection $collection
+        */
+       public function saveCollection(BaseCollection $collection)
+       {
+               $collection->map([$this, 'update']);
+       }
 }