/**
 * Shows the HTML form to add/edit properties of uploaded media items
 *
 * @param  array    Associative array holding an array('image_id', 'target', 'created_thumbnail') that points to the uploaded media
 * @param  int      How many keyword checkboxes to display next to each other?
 * @param  boolean  Can existing data be modified?
 * @return boolean
 *
 */
function serendipity_showPropertyForm(&$new_media, $keywordsPerBlock = 3, $is_edit = true)
{
    global $serendipity;
    if (!is_array($new_media) || count($new_media) < 1) {
        return true;
    }
    $mirror = array();
    serendipity_checkPropertyAccess($new_media, $mirror, 'read');
    $editform_hidden = '';
    if (isset($GLOBALS['image_selector_addvars']) && is_array($GLOBALS['image_selector_addvars'])) {
        // These variables may come from serendipity_admin_image_selector.php to show embedded upload form
        foreach ($GLOBALS['image_selector_addvars'] as $imgsel_key => $imgsel_val) {
            $editform_hidden .= '          <input type="hidden" name="serendipity[' . htmlspecialchars($imgsel_key) . ']" value="' . htmlspecialchars($imgsel_val) . '" />' . "\n";
        }
    }
    $dprops = explode(';', $serendipity['mediaProperties']);
    $keywords = explode(';', $serendipity['mediaKeywords']);
    $now = serendipity_serverOffsetHour();
    $show = array();
    foreach ($new_media as $idx => $media) {
        $props =& serendipity_fetchMediaProperties($media['image_id']);
        $show[$idx] =& $media['internal'];
        $show[$idx]['image_id'] = $media['image_id'];
        serendipity_prepareMedia($show[$idx]);
        if (!is_array($props['base_metadata'])) {
            $show[$idx]['metadata'] =& serendipity_getMetaData($show[$idx]['realfile'], $show[$idx]['header']);
        } else {
            $show[$idx]['metadata'] = $props['base_metadata'];
            serendipity_plugin_api::hook_event('media_getproperties_cached', $show[$idx]['metadata'], $show[$idx]['realfile']);
        }
        serendipity_parseMediaProperties($dprops, $keywords, $show[$idx], $props, $keywordsPerBlock, $is_edit);
    }
    $smarty_vars = array('is_edit' => $is_edit, 'editform_hidden' => $editform_hidden, 'keywordsPerBlock' => $keywordsPerBlock, 'keywords' => $keywords, 'dprops' => $dprops);
    return serendipity_showMedia($show, $mirror, $url, false, 1, false, $smarty_vars);
}
             break;
         case 'thumb':
             $showfile = $file['location'];
             break;
     }
     if (!empty($showfile) && file_exists($showfile)) {
         header('Content-Type: ' . $file['displaymime']);
         header('Content-Length: ' . filesize($showfile));
         header('Content-Disposition: ' . ($serendipity['GET']['disposition'] == 'attachment' ? 'attachment' : 'inline') . '; filename=' . basename($showfile));
         $fp = fopen($showfile, 'rb');
         fpassthru($fp);
         exit;
     }
     $media['file']['props'] =& serendipity_fetchMediaProperties((int) $serendipity['GET']['image']);
     serendipity_plugin_api::hook_event('media_getproperties_cached', $media['file']['props']['base_metadata'], $media['file']['realfile']);
     serendipity_parseMediaProperties($keywords, $dprops, $media['file'], $media['file']['props'], 0, false);
     serendipity_plugin_api::hook_event('frontend_media_showitem', $media);
     if ($media['perm_denied']) {
         unset($media['file']);
         unset($file);
     }
     $showFile = 'admin/media_showitem.tpl';
     break;
 case 'start':
     $media['case'] = 'start';
     break;
 case 'default':
 default:
     if (!empty($serendipity['GET']['adminAction']) && $serendipity['GET']['adminModule'] == 'images' && $serendipity['GET']['adminAction'] != 'default') {
         // Might need to set $serendipity['adminFile_redirect'] here.
         $serendipity['adminFile'] = 'serendipity_admin_image_selector.php';