widget/reply: emphasis formatting over sentences
[minimedit.git] / upload.inc.php
index f79600f892de3ee018377e1ab9adf460b3ce3646..0ee432bc538a8f82f0fe5d1ea135b4524d948b7d 100644 (file)
@@ -1,6 +1,4 @@
 <?php
-$Page->api = $_SERVER['HTTP_ACCEPT'] == 'text/plain';
-
 function userupload($input, $target = NULL, $filename = NULL)
 {
        switch ($input['error']) {
@@ -29,6 +27,9 @@ function userupload($input, $target = NULL, $filename = NULL)
                $target .= $input['name'];
        }
 
+       if (file_exists($target)) {
+               throw new Exception("bestandsnaam al aanwezig op $target");
+       }
        if (!@move_uploaded_file($input['tmp_name'], $target)) {
                throw new Exception("bestand kon niet worden opgeslagen in $target");
        }
@@ -50,10 +51,16 @@ function messagehtml($input)
        if ($User->admin and preg_match('/\A<[a-z][^>]*>/', $input)) {
                return $input;  # allow html input as is if privileged
        }
-       $html = preg_replace(
-               ["/\r?\n/", "'(?:<br />\n?){2}'"],
-               ["<br />\n", "</p>\n\n<p>"],
-               htmlspecialchars($input)
-       );
+       $markup = [
+               '{&lt;((?:\w+:|/).+?)&gt;}'    => '<$1>',                # unescape link entities
+               '{<(?:https?://)?([^>\s|]+)>}' => '<$1 $1>',             # unnamed link
+               '{<([^>\s|]+)[\s|]([^>]+)>}'   => '<a href="$1">$2</a>', # hyperlink
+               "/\r\n?/" => "\n",        # unix newlines
+               "/  +\n/" => "<br />",    # trailing spaces for hard line break
+               "/\n/"    => "</p>\n<p>", # newlines start paragraphs
+               '/_(?<!\w_)(.+?)_(?!\w)/'      => '<em>$1</em>',         # italic
+               '/\*(?<!\w\*)(.+?)\*(?!\w)/'   => '<strong>$1</strong>', # bold
+       ];
+       $html = preg_replace(array_keys($markup), array_values($markup), htmlspecialchars($input));
        return "<p>$html</p>";
 }