issue: reuse function to create messages from reply widget
[minimedit.git] / upload.inc.php
index e270b76328c97968149f1962f0488247d66378c4..d87fa2d8f4e3bbcb9d14de3debe11ef970eebe6f 100644 (file)
@@ -1,4 +1,10 @@
 <?php
+global $journalcol;
+$journalcol = [
+       'assign' => 'Toegewezen aan',
+       'subject' => 'Onderwerp',
+];
+
 function userupload($input, $target = NULL, $filename = NULL)
 {
        switch ($input['error']) {
@@ -67,3 +73,74 @@ function messagehtml($input)
        ];
        return preg_replace(array_keys($markup), array_values($markup), htmlspecialchars($input));
 }
+
+function createcomment($input, &$Issue = NULL)
+{
+       # insert user message as database issue/reply
+       global $User, $Db, $Page, $journalcol;
+
+       $reply = [];
+       if (isset($input['reply']) and $body = $input['reply']) {
+               $reply['raw'] = $body;
+               $reply['message'] = messagehtml($body);
+       }
+       if ($_FILES and !empty($_FILES['image'])) {
+               $target = 'data/upload';
+               if (!file_exists($target)) {
+                       throw new Exception("er is geen uploadmap aanwezig op $target");
+               }
+               $target .= '/' . $User->login;
+               if ($result = userupload($_FILES['image'], $target)) {
+                       $reply['raw'] .= "/$result";
+                       if (preg_match('(^image/)', $_FILES['image']['type'])) {
+                               $reply['message'] .= sprintf('<p><img src="/thumb/640x/%s" /></p>', $result);
+                       }
+                       else {
+                               $reply['message'] .= sprintf('<p>Bijgevoegd bestand: <a href="/%s" />%s</a></p>',
+                                       $result, basename($result)
+                               );
+                       }
+               }
+       }
+       $query = $Db->set('comments', $reply + [
+               'page'    => "{$Page->handler}/{$Issue->id}",
+               'author'  => $User->login,
+       ]);
+       if (!$query->rowCount()) {
+               throw new Exception('Fout bij opslaan');
+       }
+       $newcomment = $Db->dbh->lastInsertId('comments_id_seq');
+
+       if (isset($Issue)) {
+               $row = [];
+               foreach (array_keys($journalcol) as $col) {
+                       if (!isset($input[$col])) continue;
+                       $row[$col] = $input[$col] ?: NULL;
+               }
+               if (isset($input['status'])) {
+                       $reset = !empty($input['status']);
+                       if (isset($Issue->closed) !== $reset) {
+                               $row['closed'] = $reset ? ['now()'] : NULL;
+                       }
+               }
+               $derived = ['updated' => ['now()']];
+               $filter = ['id = ? RETURNING *', $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
+                               $Db->set('journal', [
+                                       'comment_id' => $newcomment,
+                                       'property'   => 'attr',
+                                       'col'        => $col,
+                                       'old_value'  => $Issue->$col,
+                                       'value'      => $updated->$col,
+                               ]);
+                       }
+                       $Issue = $updated;
+               }
+       }
+
+       return $newcomment;
+}