page: apply admin restrictions from .private contents
[minimedit.git] / upload.inc.php
index f1018c2417770f09701d67970e1617ae5a4c3ca6..e270b76328c97968149f1962f0488247d66378c4 100644 (file)
@@ -4,6 +4,10 @@ function userupload($input, $target = NULL, $filename = NULL)
        switch ($input['error']) {
        case UPLOAD_ERR_OK:
                break;
+       case UPLOAD_ERR_INI_SIZE:
+       case UPLOAD_ERR_FORM_SIZE:
+               throw new Exception('bestand te groot');
+               break;
        case UPLOAD_ERR_NO_FILE:
                return; # current
        default:
@@ -23,8 +27,11 @@ 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');
+               throw new Exception("bestand kon niet worden opgeslagen in $target");
        }
 
        foreach (@glob('thumb/*/') as $thumbres) {
@@ -33,3 +40,30 @@ function userupload($input, $target = NULL, $filename = NULL)
        }
        return $target;
 }
+
+function messagehtml($input)
+{
+       # convert user textarea post to formatted html
+       global $User;
+       if (empty($input)) {
+               return;
+       }
+       if ($User and $User->admin and preg_match('/\A<[a-z][^>]*>/', $input)) {
+               return $input;  # allow html input as is if privileged
+       }
+       $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?/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
+               '/_(?<!\w_)(.+?)_(?!\w)/'      => '<em>$1</em>',         # italic
+               '/\*(?<!\w\*)(.+?)\*(?!\w)/'   => '<strong>$1</strong>', # bold
+               '/~(?<!\w~)(.+?)~(?!\w)/'      => '<s>$1</s>',           # stricken
+               '/`(?<!\w`)(.+?)`(?!\w)/'      => '<code>$1</code>',     # monospace
+       ];
+       return preg_replace(array_keys($markup), array_values($markup), htmlspecialchars($input));
+}