login/pass: error messages below page title
[minimedit.git] / upload.inc.php
index ff4ecd3755aaa7ba695b098ebf78b48187bd9261..22db140cd27351543f12682ab41eae4b74d05348 100644 (file)
@@ -63,6 +63,7 @@ function messagehtml($input)
                '{<([^>\s|]+)[\s|]([^>]+)>}'   => '<a href="$1">$2</a>', # hyperlink
                "/\r\n?/" => "\n",        # unix newlines
                "/  +\n/" => "<br />",    # trailing spaces for hard line break
+               '{^(/data/.*\.jpe?g)\z}m'      => '<img src="/thumb/640x/\1" />', # image reference
                "/^[-*] (.*)$\n?/m"            => '<li>$1</li>',         # list item
                "/^(.+)$\n?/m"                 => "<p>$1</p>\n",         # paragraph
                "{^<p>(<li>.*</li>)(?:</p>\n)?}m" => "<ul>$1</ul>\n",    # list container
@@ -84,9 +85,6 @@ function createcomment($input, &$Issue = NULL)
                $reply['raw'] = $body;
                $reply['message'] = messagehtml($body);
        }
-       if (isset($input['announce'])) {
-               $reply['announced'] = !!$input['announce'];
-       }
        if ($_FILES and !empty($_FILES['image'])) {
                $target = 'data/upload';
                if (!file_exists($target)) {
@@ -94,7 +92,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 +105,58 @@ 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 (!$reply) {
+               throw new Exception("lege inhoud");
+       }
+       if (isset($input['announce'])) {
+               $reply['announced'] = !!$input['announce'];
+       }
+       if (isset($input['page'])) {
+               $reply['page'] = $input['page'];
+       }
+
+       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 +171,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',