X-Git-Url: https://git.p6c8.net/jirafeau/mojo42.git/blobdiff_plain/0e38a24b7a276704431ca70c440ff49f4d53d341..4a53cd63446d78e30da60e8f1f72b3614f18c40f:/lib/functions.php?ds=inline
diff --git a/lib/functions.php b/lib/functions.php
index 47fbc40..df207da 100644
--- a/lib/functions.php
+++ b/lib/functions.php
@@ -23,12 +23,19 @@
  * Transform a string in a path by seperating each letters by a '/'.
  * @return path finishing with a '/'
  */
-function
-s2p ($s)
+function s2p($s)
 {
+    $block_size = 8;
     $p = '';
-    for ($i = 0; $i < strlen ($s); $i++)
-        $p .= $s{$i} . '/';
+    for ($i = 0; $i < strlen($s); $i++) {
+        $p .= $s{$i};
+        if (($i + 1) % $block_size == 0) {
+            $p .= '/';
+        }
+    }
+    if (strlen($s) % $block_size != 0) {
+        $p .= '/';
+    }
     return $p;
 }
 
@@ -36,11 +43,10 @@ s2p ($s)
  * Convert base 16 to base 64
  * @returns A string based on 64 characters (0-9, a-z, A-Z, "-" and "_")
  */
-function
-base_16_to_64 ($num)
+function base_16_to_64($num)
 {
     $m = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_';
-    $hex2bin = array ('0000',  # 0
+    $hex2bin = array('0000',  # 0
                       '0001',  # 1
                       '0010',  # 2
                       '0011',  # 3
@@ -60,16 +66,19 @@ base_16_to_64 ($num)
     $b = '';
     $i = 0;
     # Convert long hex string to bin.
-    $size = strlen ($num);
-    for ($i = 0; $i < $size; $i++)
-        $b .= $hex2bin{hexdec ($num{$i})};
+    $size = strlen($num);
+    for ($i = 0; $i < $size; $i++) {
+        $b .= $hex2bin{hexdec($num{$i})};
+    }
     # Convert long bin to base 64.
     $size *= 4;
-    for ($i = $size - 6; $i >= 0; $i -= 6)
-        $o = $m{bindec (substr ($b, $i, 6))} . $o;
+    for ($i = $size - 6; $i >= 0; $i -= 6) {
+        $o = $m{bindec(substr($b, $i, 6))} . $o;
+    }
     # Some few bits remaining ?
-    if ($i < 0 && $i > -6)
-        $o = $m{bindec (substr ($b, 0, $i + 6))} . $o;
+    if ($i < 0 && $i > -6) {
+        $o = $m{bindec(substr($b, 0, $i + 6))} . $o;
+    }
     return $o;
 }
 
@@ -78,80 +87,96 @@ base_16_to_64 ($num)
   * @param $l code length
   * @return  random code.
   */
-function
-jirafeau_gen_random ($l)
+function jirafeau_gen_random($l)
 {
-    if ($l <= 0)
+    if ($l <= 0) {
         return 42;
+    }
 
     $code="";
-    for ($i = 0; $i < $l; $i++)
-        $code .= dechex (rand (0, 15));
+    for ($i = 0; $i < $l; $i++) {
+        $code .= dechex(rand(0, 15));
+    }
 
     return $code;
 }
 
-function
-is_ssl() {
-    if ( isset($_SERVER['HTTPS']) ) {
-        if ( 'on' == strtolower($_SERVER['HTTPS']) ||
-             '1' == $_SERVER['HTTPS'] )
+function is_ssl()
+{
+    if (isset($_SERVER['HTTPS'])) {
+        if ('on' == strtolower($_SERVER['HTTPS']) ||
+             '1' == $_SERVER['HTTPS']) {
             return true;
-    } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
+        }
+    } elseif (isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'])) {
         return true;
     } elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
-        if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
+        if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
             return true;
+        }
     }
     return false;
 }
 
-function
-jirafeau_human_size ($octets)
+function jirafeau_human_size($octets)
 {
-    $u = array ('B', 'KB', 'MB', 'GB', 'TB');
-    $o = max ($octets, 0);
-    $p = min (floor (($o ? log ($o) : 0) / log (1024)), count ($u) - 1);
-    $o /= pow (1024, $p);
-    return round ($o, 1) . $u[$p];
+    $u = array('B', 'KB', 'MB', 'GB', 'TB');
+    $o = max($octets, 0);
+    $p = min(floor(($o ? log($o) : 0) / log(1024)), count($u) - 1);
+    $o /= pow(1024, $p);
+    return round($o, 1) . $u[$p];
 }
 
-function
-jirafeau_clean_rm_link ($link)
+// Convert UTC timestamp to a datetime field
+function jirafeau_get_datetimefield($timestamp)
 {
-    $p = s2p ("$link");
-    if (file_exists (VAR_LINKS . $p . $link))
-        unlink (VAR_LINKS . $p . $link);
+    $content = ''
+        . strftime('%Y-%m-%d %H:%M', $timestamp) . ' (GMT)';
+    return $content;
+}
+
+function jirafeau_fatal_error($errorText, $cfg = array())
+{
+    echo '
';
+    require(JIRAFEAU_ROOT . 'lib/template/footer.php');
+    exit;
+}
+
+function jirafeau_clean_rm_link($link)
+{
+    $p = s2p("$link");
+    if (file_exists(VAR_LINKS . $p . $link)) {
+        unlink(VAR_LINKS . $p . $link);
+    }
     $parse = VAR_LINKS . $p;
     $scan = array();
-    while (file_exists ($parse)
-           && ($scan = scandir ($parse))
-           && count ($scan) == 2 // '.' and '..' folders => empty.
-           && basename ($parse) != basename (VAR_LINKS))
-    {
-        rmdir ($parse);
-        $parse = substr ($parse, 0, strlen($parse) - strlen(basename ($parse)) - 1);
+    while (file_exists($parse)
+           && ($scan = scandir($parse))
+           && count($scan) == 2 // '.' and '..' folders => empty.
+           && basename($parse) != basename(VAR_LINKS)) {
+        rmdir($parse);
+        $parse = substr($parse, 0, strlen($parse) - strlen(basename($parse)) - 1);
     }
 }
 
-function
-jirafeau_clean_rm_file ($md5)
+function jirafeau_clean_rm_file($md5)
 {
-    $p = s2p ("$md5");
+    $p = s2p("$md5");
     $f = VAR_FILES . $p . $md5;
-    if (file_exists ($f) && is_file ($f))
-        unlink ($f);
-    if (file_exists ($f . '_count') && is_file ($f . '_count'))
-        unlink ($f . '_count');
+    if (file_exists($f) && is_file($f)) {
+        unlink($f);
+    }
+    if (file_exists($f . '_count') && is_file($f . '_count')) {
+        unlink($f . '_count');
+    }
     $parse = VAR_FILES . $p;
     $scan = array();
-    while (file_exists ($parse)
-           && ($scan = scandir ($parse))
-           && count ($scan) == 2 // '.' and '..' folders => empty.
-           && basename ($parse) != basename (VAR_FILES))
-    {
-        rmdir ($parse);
-        $parse = substr ($parse, 0, strlen($parse) - strlen(basename ($parse)) - 1);
+    while (file_exists($parse)
+           && ($scan = scandir($parse))
+           && count($scan) == 2 // '.' and '..' folders => empty.
+           && basename($parse) != basename(VAR_FILES)) {
+        rmdir($parse);
+        $parse = substr($parse, 0, strlen($parse) - strlen(basename($parse)) - 1);
     }
 }
 
@@ -160,13 +185,11 @@ jirafeau_clean_rm_file ($md5)
  * @param $value the value from php.ini
  * @returns an integer for this value
  */
-function
-jirafeau_ini_to_bytes ($value)
+function jirafeau_ini_to_bytes($value)
 {
-    $modifier = substr ($value, -1);
-    $bytes = substr ($value, 0, -1);
-    switch (strtoupper ($modifier))
-    {
+    $modifier = substr($value, -1);
+    $bytes = substr($value, 0, -1);
+    switch (strtoupper($modifier)) {
     case 'P':
         $bytes *= 1024;
     case 'T':
@@ -185,23 +208,19 @@ jirafeau_ini_to_bytes ($value)
  * gets the maximum upload size according to php.ini
  * @returns the maximum upload size in bytes
  */
-function
-jirafeau_get_max_upload_size_bytes ()
+function jirafeau_get_max_upload_size_bytes()
 {
-    return min (jirafeau_ini_to_bytes (ini_get ('post_max_size')),
-                jirafeau_ini_to_bytes (ini_get ('upload_max_filesize')));
+    return min(jirafeau_ini_to_bytes(ini_get('post_max_size')),
+               jirafeau_ini_to_bytes(ini_get('upload_max_filesize')));
 }
 
 /**
  * gets the maximum upload size according to php.ini
  * @returns the maximum upload size string
  */
-function
-jirafeau_get_max_upload_size ()
+function jirafeau_get_max_upload_size()
 {
-    return jirafeau_human_size(
-            min (jirafeau_ini_to_bytes (ini_get ('post_max_size')),
-                 jirafeau_ini_to_bytes (ini_get ('upload_max_filesize'))));
+    return jirafeau_human_size(jirafeau_get_max_upload_size_bytes());
 }
 
 /**
@@ -209,11 +228,9 @@ jirafeau_get_max_upload_size ()
  * @param $code the error code
  * @returns a string explaining the error
  */
-function
-jirafeau_upload_errstr ($code)
+function jirafeau_upload_errstr($code)
 {
-    switch ($code)
-    {
+    switch ($code) {
     case UPLOAD_ERR_INI_SIZE:
     case UPLOAD_ERR_FORM_SIZE:
         return t('Your file exceeds the maximum authorized file size. ');
@@ -235,76 +252,70 @@ jirafeau_upload_errstr ($code)
  * @param $link the link's name (hash)
  */
 
-function
-jirafeau_delete_link ($link)
+function jirafeau_delete_link($link)
 {
-    $l = jirafeau_get_link ($link);
-    if (!count ($l))
+    $l = jirafeau_get_link($link);
+    if (!count($l)) {
         return;
+    }
 
-    jirafeau_clean_rm_link ($link);
+    jirafeau_clean_rm_link($link);
 
     $md5 = $l['md5'];
-    $p = s2p ("$md5");
+    $p = s2p("$md5");
 
     $counter = 1;
-    if (file_exists (VAR_FILES . $p . $md5. '_count'))
-    {
-        $content = file (VAR_FILES . $p . $md5. '_count');
-        $counter = trim ($content[0]);
+    if (file_exists(VAR_FILES . $p . $md5. '_count')) {
+        $content = file(VAR_FILES . $p . $md5. '_count');
+        $counter = trim($content[0]);
     }
     $counter--;
 
-    if ($counter >= 1)
-    {
-        $handle = fopen (VAR_FILES . $p . $md5. '_count', 'w');
-        fwrite ($handle, $counter);
-        fclose ($handle);
+    if ($counter >= 1) {
+        $handle = fopen(VAR_FILES . $p . $md5. '_count', 'w');
+        fwrite($handle, $counter);
+        fclose($handle);
     }
 
-    if ($counter == 0)
-        jirafeau_clean_rm_file ($md5);
+    if ($counter == 0) {
+        jirafeau_clean_rm_file($md5);
+    }
 }
 
 /**
  * Delete a file and it's links.
  */
-function
-jirafeau_delete_file ($md5)
+function jirafeau_delete_file($md5)
 {
     $count = 0;
     /* Get all links files. */
-    $stack = array (VAR_LINKS);
-    while (($d = array_shift ($stack)) && $d != NULL)
-    {
-        $dir = scandir ($d);
+    $stack = array(VAR_LINKS);
+    while (($d = array_shift($stack)) && $d != null) {
+        $dir = scandir($d);
 
-        foreach ($dir as $node)
-        {
-            if (strcmp ($node, '.') == 0 || strcmp ($node, '..') == 0 ||
-                preg_match ('/\.tmp/i', "$node"))
+        foreach ($dir as $node) {
+            if (strcmp($node, '.') == 0 || strcmp($node, '..') == 0 ||
+                preg_match('/\.tmp/i', "$node")) {
                 continue;
+            }
 
-            if (is_dir ($d . $node))
-            {
+            if (is_dir($d . $node)) {
                 /* Push new found directory. */
                 $stack[] = $d . $node . '/';
-            }
-            elseif (is_file ($d . $node))
-            {
+            } elseif (is_file($d . $node)) {
                 /* Read link informations. */
-                $l = jirafeau_get_link (basename ($node));
-                if (!count ($l))
+                $l = jirafeau_get_link(basename($node));
+                if (!count($l)) {
                     continue;
-                if ($l['md5'] == $md5)
-                {
+                }
+                if ($l['md5'] == $md5) {
                     $count++;
-                    jirafeau_delete_link ($node);
+                    jirafeau_delete_link($node);
                 }
             }
         }
     }
-    jirafeau_clean_rm_file ($md5);
+    jirafeau_clean_rm_file($md5);
     return $count;
 }
 
@@ -322,117 +333,109 @@ jirafeau_delete_file ($md5)
  *   'link' => the link name of the uploaded file
  *   'delete_link' => the link code to delete file
  */
-function
-jirafeau_upload ($file, $one_time_download, $key, $time, $ip, $crypt, $link_name_length)
+function jirafeau_upload($file, $one_time_download, $key, $time, $ip, $crypt, $link_name_length)
 {
-    if (empty ($file['tmp_name']) || !is_uploaded_file ($file['tmp_name']))
-    {
+    if (empty($file['tmp_name']) || !is_uploaded_file($file['tmp_name'])) {
         return (array(
                  'error' =>
-                   array ('has_error' => true,
-                          'why' => jirafeau_upload_errstr ($file['error'])),
+                   array('has_error' => true,
+                          'why' => jirafeau_upload_errstr($file['error'])),
                  'link' => '',
                  'delete_link' => ''));
     }
 
     /* array representing no error */
-    $noerr = array ('has_error' => false, 'why' => '');
+    $noerr = array('has_error' => false, 'why' => '');
 
     /* Crypt file if option is enabled. */
     $crypted = false;
     $crypt_key = '';
-    if ($crypt == true && !(extension_loaded('mcrypt') == true))
-        error_log ("PHP extension mcrypt not loaded, won't encrypt in Jirafeau");
-    if ($crypt == true && extension_loaded('mcrypt') == true)
-    {
-        $crypt_key = jirafeau_encrypt_file ($file['tmp_name'], $file['tmp_name']);
-        if (strlen($crypt_key) > 0)
+    if ($crypt == true && !(extension_loaded('mcrypt') == true)) {
+        error_log("PHP extension mcrypt not loaded, won't encrypt in Jirafeau");
+    }
+    if ($crypt == true && extension_loaded('mcrypt') == true) {
+        $crypt_key = jirafeau_encrypt_file($file['tmp_name'], $file['tmp_name']);
+        if (strlen($crypt_key) > 0) {
             $crypted = true;
+        }
     }
 
     /* file informations */
-    $md5 = md5_file ($file['tmp_name']);
-    $name = str_replace (NL, '', trim ($file['name']));
+    $md5 = md5_file($file['tmp_name']);
+    $name = str_replace(NL, '', trim($file['name']));
     $mime_type = $file['type'];
     $size = $file['size'];
 
     /* does file already exist ? */
     $rc = false;
-    $p = s2p ("$md5");
-    if (file_exists (VAR_FILES . $p .  $md5))
-    {
-        $rc = unlink ($file['tmp_name']);
-    }
-    elseif ((file_exists (VAR_FILES . $p) || @mkdir (VAR_FILES . $p, 0755, true))
-            && move_uploaded_file ($file['tmp_name'], VAR_FILES . $p . $md5))
-    {
+    $p = s2p("$md5");
+    if (file_exists(VAR_FILES . $p .  $md5)) {
+        $rc = unlink($file['tmp_name']);
+    } elseif ((file_exists(VAR_FILES . $p) || @mkdir(VAR_FILES . $p, 0755, true))
+            && move_uploaded_file($file['tmp_name'], VAR_FILES . $p . $md5)) {
         $rc = true;
     }
-    if (!$rc)
-    {
+    if (!$rc) {
         return (array(
                  'error' =>
-                   array ('has_error' => true,
-                          'why' => t('Internal error during file creation.')),
+                   array('has_error' => true,
+                          'why' => t('INTERNAL_ERROR_DEL')),
                  'link' =>'',
                  'delete_link' => ''));
     }
 
     /* Increment or create count file. */
     $counter = 0;
-    if (file_exists (VAR_FILES . $p . $md5 . '_count'))
-    {
-        $content = file (VAR_FILES . $p . $md5. '_count');
-        $counter = trim ($content[0]);
+    if (file_exists(VAR_FILES . $p . $md5 . '_count')) {
+        $content = file(VAR_FILES . $p . $md5. '_count');
+        $counter = trim($content[0]);
     }
     $counter++;
-    $handle = fopen (VAR_FILES . $p . $md5. '_count', 'w');
-    fwrite ($handle, $counter);
-    fclose ($handle);
+    $handle = fopen(VAR_FILES . $p . $md5. '_count', 'w');
+    fwrite($handle, $counter);
+    fclose($handle);
 
     /* Create delete code. */
-    $delete_link_code = jirafeau_gen_random (5);
+    $delete_link_code = jirafeau_gen_random(5);
 
     /* md5 password or empty. */
     $password = '';
-    if (!empty ($key))
-        $password = md5 ($key);
+    if (!empty($key)) {
+        $password = md5($key);
+    }
 
     /* create link file */
-    $link_tmp_name =  VAR_LINKS . $md5 . rand (0, 10000) . '.tmp';
-    $handle = fopen ($link_tmp_name, 'w');
-    fwrite ($handle,
+    $link_tmp_name =  VAR_LINKS . $md5 . rand(0, 10000) . '.tmp';
+    $handle = fopen($link_tmp_name, 'w');
+    fwrite($handle,
             $name . NL. $mime_type . NL. $size . NL. $password . NL. $time .
-            NL . $md5. NL . ($one_time_download ? 'O' : 'R') . NL . time () .
+            NL . $md5. NL . ($one_time_download ? 'O' : 'R') . NL . time() .
             NL . $ip . NL. $delete_link_code . NL . ($crypted ? 'C' : 'O'));
-    fclose ($handle);
-    $md5_link = substr(base_16_to_64 (md5_file ($link_tmp_name)), 0, $link_name_length);
-    $l = s2p ("$md5_link");
-    if (!@mkdir (VAR_LINKS . $l, 0755, true) ||
-        !rename ($link_tmp_name,  VAR_LINKS . $l . $md5_link))
-    {
-        if (file_exists ($link_tmp_name))
-            unlink ($link_tmp_name);
+    fclose($handle);
+    $md5_link = substr(base_16_to_64(md5_file($link_tmp_name)), 0, $link_name_length);
+    $l = s2p("$md5_link");
+    if (!@mkdir(VAR_LINKS . $l, 0755, true) ||
+        !rename($link_tmp_name, VAR_LINKS . $l . $md5_link)) {
+        if (file_exists($link_tmp_name)) {
+            unlink($link_tmp_name);
+        }
 
         $counter--;
-        if ($counter >= 1)
-        {
-            $handle = fopen (VAR_FILES . $p . $md5. '_count', 'w');
-            fwrite ($handle, $counter);
-            fclose ($handle);
-        }
-        else
-        {
-            jirafeau_clean_rm_file ($md5_link);
+        if ($counter >= 1) {
+            $handle = fopen(VAR_FILES . $p . $md5. '_count', 'w');
+            fwrite($handle, $counter);
+            fclose($handle);
+        } else {
+            jirafeau_clean_rm_file($md5_link);
         }
         return array(
                  'error' =>
-                   array ('has_error' => true,
+                   array('has_error' => true,
                           'why' => t('Internal error during file creation. ')),
                  'link' =>'',
                  'delete_link' => '');
     }
-   return array ( 'error' => $noerr,
+    return array( 'error' => $noerr,
                   'link' => $md5_link,
                   'delete_link' => $delete_link_code,
                   'crypt_key' => $crypt_key);
@@ -443,30 +446,27 @@ jirafeau_upload ($file, $one_time_download, $key, $time, $ip, $crypt, $link_name
  * @param $mime the mime type
  * @returns a boolean telling if a mime type is viewable
  */
-function
-jirafeau_is_viewable ($mime)
+function jirafeau_is_viewable($mime)
 {
-    if (!empty ($mime))
-    {
+    if (!empty($mime)) {
         /* Actually, verify if mime-type is an image or a text. */
-        $viewable = array ('image', 'text', 'video', 'audio');
-        $decomposed = explode ('/', $mime);
-        return in_array ($decomposed[0], $viewable);
+        $viewable = array('image', 'text', 'video', 'audio');
+        $decomposed = explode('/', $mime);
+        return in_array($decomposed[0], $viewable);
     }
     return false;
 }
 
 // Error handling functions.
 //! Global array that contains all registered errors.
-$error_list = array ();
+$error_list = array();
 
 /**
  * Adds an error to the list of errors.
  * @param $title the error's title
  * @param $description is a human-friendly description of the problem.
  */
-function
-add_error ($title, $description)
+function add_error($title, $description)
 {
     global $error_list;
     $error_list[] = '' . $title. '
' . $description. '
';
@@ -476,79 +476,74 @@ add_error ($title, $description)
  * Informs whether any error has been registered yet.
  * @return true if there are errors.
  */
-function
-has_error ()
+function has_error()
 {
     global $error_list;
-    return !empty ($error_list);
+    return !empty($error_list);
 }
 
 /**
  * Displays all the errors.
  */
-function
-show_errors ()
+function show_errors()
 {
-    if (has_error ())
-    {
+    if (has_error()) {
         global $error_list;
         echo '';
-        foreach ($error_list as $error)
-        {
+        foreach ($error_list as $error) {
             echo $error;
         }
         echo '
';
     }
 }
 
-function check_errors ($cfg)
+function check_errors($cfg)
 {
-    if (file_exists (JIRAFEAU_ROOT . 'install.php')
-        && !($cfg['installation_done'] === true))
-    {
+    if (file_exists(JIRAFEAU_ROOT . 'install.php')
+        && !($cfg['installation_done'] === true)) {
         header('Location: install.php');
         exit;
     }
 
-    /* check if the destination dirs are writable */
-    $writable = is_writable (VAR_FILES) && is_writable (VAR_LINKS);
-
     /* Checking for errors. */
-    if (!is_writable (VAR_FILES))
-        add_error (t('The file directory is not writable!'), VAR_FILES);
+    if (!is_writable(VAR_FILES)) {
+        add_error(t('FILE_DIR_W'), VAR_FILES);
+    }
 
-    if (!is_writable (VAR_LINKS))
-        add_error (t('The link directory is not writable!'), VAR_LINKS);
+    if (!is_writable(VAR_LINKS)) {
+        add_error(t('LINK_DIR_W'), VAR_LINKS);
+    }
 
-    if (!is_writable (VAR_ASYNC))
-        add_error (t('The async directory is not writable!'), VAR_ASYNC);
+    if (!is_writable(VAR_ASYNC)) {
+        add_error(t('ASYNC_DIR_W'), VAR_ASYNC);
+    }
 }
 
 /**
  * Read link informations
  * @return array containing informations.
  */
-function
-jirafeau_get_link ($hash)
+function jirafeau_get_link($hash)
 {
-    $out = array ();
-    $link = VAR_LINKS . s2p ("$hash") . $hash;
+    $out = array();
+    $link = VAR_LINKS . s2p("$hash") . $hash;
 
-    if (!file_exists ($link))
+    if (!file_exists($link)) {
         return $out;
+    }
 
-    $c = file ($link);
-    $out['file_name'] = trim ($c[0]);
-    $out['mime_type'] = trim ($c[1]);
-    $out['file_size'] = trim ($c[2]);
-    $out['key'] = trim ($c[3], NL);
-    $out['time'] = trim ($c[4]);
-    $out['md5'] = trim ($c[5]);
-    $out['onetime'] = trim ($c[6]);
-    $out['upload_date'] = trim ($c[7]);
-    $out['ip'] = trim ($c[8]);
-    $out['link_code'] = trim ($c[9]);
-    $out['crypted'] = trim ($c[10]) == 'C';
+    $c = file($link);
+    $out['file_name'] = trim($c[0]);
+    $out['mime_type'] = trim($c[1]);
+    $out['file_size'] = trim($c[2]);
+    $out['key'] = trim($c[3], NL);
+    $out['time'] = trim($c[4]);
+    $out['md5'] = trim($c[5]);
+    $out['onetime'] = trim($c[6]);
+    $out['upload_date'] = trim($c[7]);
+    $out['ip'] = trim($c[8]);
+    $out['link_code'] = trim($c[9]);
+    $out['crypted'] = trim($c[10]) == 'C';
 
     return $out;
 }
@@ -556,93 +551,99 @@ jirafeau_get_link ($hash)
 /**
  * List files in admin interface.
  */
-function
-jirafeau_admin_list ($name, $file_hash, $link_hash)
+function jirafeau_admin_list($name, $file_hash, $link_hash)
 {
     echo '