issue: message editing feature
[minimedit.git] / upload.inc.php
index ff4ecd3755aaa7ba695b098ebf78b48187bd9261..77fa846aebd59057df1dd9c7caf7445d17a3ef0e 100644 (file)
@@ -94,7 +94,9 @@ function createcomment($input, &$Issue = NULL)
                }
                $target .= '/' . $User->login;
                if ($result = userupload($_FILES['image'], $target)) {
+                       $reply['raw'] = $reply['raw'] ?? '';
                        $reply['raw'] .= "/$result";
+                       $reply['message'] = $reply['message'] ?? '';
                        if (preg_match('(^image/)', $_FILES['image']['type'])) {
                                $reply['message'] .= sprintf('<p><img src="/thumb/640x/%s" /></p>', $result);
                        }
@@ -105,14 +107,49 @@ function createcomment($input, &$Issue = NULL)
                        }
                }
        }
-       $query = $Db->set('comments', $reply + [
-               'page'    => "{$Page->handler}/{$Issue->id}",
-               'author'  => $User->login,
-       ]);
-       if (!$query->rowCount()) {
-               throw new Exception('Fout bij opslaan');
+
+       if (isset($input['id'])) {
+               $newcomment = $input['id'];
+               $filter = ['id = ?', $newcomment];
+               $oldcomment = $Db->query("SELECT * FROM comments WHERE $filter[0]", [$filter[1]])->fetch();
+               if (empty($oldcomment)) {
+                       throw new Exception('Antwoord niet gevonden');
+               }
+
+               $reply += [
+                       'updated' => ['now()'],
+               ];
+               $query = $Db->set('comments', $reply, $filter);
+               if (!$query->rowCount()) {
+                       throw new Exception('Fout bij aanpassen');
+               }
+
+               if ($updated = $query->fetch()) {
+                       foreach (array_keys(get_object_vars($updated)) as $col) {
+                               if ($updated->$col === $oldcomment->$col) {
+                                       continue; # unaltered
+                               }
+                               $Db->set('journal', [
+                                       'comment_id' => $newcomment,
+                                       'property'   => 'col',
+                                       'col'        => $col,
+                                       'old_value'  => $oldcomment->$col,
+                                       'value'      => $updated->$col,
+                               ]);
+                       }
+               }
+       }
+       else {
+               $reply += [
+                       'page'    => "{$Page->handler}/{$Issue->id}",
+                       'author'  => $User->login,
+               ];
+               $query = $Db->set('comments', $reply);
+               if (!$query->rowCount()) {
+                       throw new Exception('Fout bij opslaan');
+               }
+               $newcomment = $Db->dbh->lastInsertId('comments_id_seq');
        }
-       $newcomment = $Db->dbh->lastInsertId('comments_id_seq');
 
        if (isset($Issue)) {
                $row = [];
@@ -127,12 +164,14 @@ function createcomment($input, &$Issue = NULL)
                        }
                }
                $derived = ['updated' => ['now()']];
-               $filter = ['id = ? RETURNING *', $Issue->id];
+               $filter = ['id = ?', $Issue->id];
                $subquery = $Db->set('issues', $row + $derived, $filter);
 
                if ($updated = $subquery->fetch()) {
                        foreach (array_keys($row) as $col) {
-                               if ($updated->$col === $Issue->$col) continue; # unaltered
+                               if ($updated->$col === $Issue->$col) {
+                                       continue; # unaltered
+                               }
                                $Db->set('journal', [
                                        'comment_id' => $newcomment,
                                        'property'   => 'attr',