Beispiel #1
0
function get_mime($fn)
{
    if (function_exists('finfo_file')) {
        $finfo = @finfo_open(FILEINFO_MIME_TYPE);
        $mime = @finfo_file($finfo, $fn);
        @finfo_close($finfo);
    }
    $mime = false;
    if (!@is_string($mime)) {
        // heuristic
        switch (strtolower(filext($fn))) {
            case 'aif':
            case 'aiff':
                $mime = 'audio/aiff';
                break;
            case 'avi':
                $mime = 'video/x-msvideo';
                break;
            case 'bmp':
                $mime = 'image/bmp';
                break;
            case 'gif':
                $mime = 'image/gif';
                break;
            case 'jpg':
            case 'jpeg':
                $mime = 'image/jpeg';
                break;
            case 'mov':
                $mime = 'video/quicktime';
                break;
            case 'mp3':
                $mime = 'audio/mpeg3';
                break;
            case 'mp4':
                $mime = 'video/mp4';
                break;
            case 'mpg':
            case 'mpeg':
                $mime = 'video/mpeg';
                break;
            case 'oga':
            case 'ogg':
                $mime = 'audio/ogg';
                break;
            case 'ogv':
                $mime = 'video/ogg';
                break;
            case 'pdf':
                $mime = 'application/pdf';
                break;
            case 'png':
                $mime = 'image/png';
                break;
            case 'tga':
                $mime = 'image/tga';
                break;
            case 'tif':
            case 'tiff':
                $mime = 'image/tiff';
                break;
            case 'txt':
                $mime = 'text/plain';
                break;
            case 'wav':
                $mime = 'audio/wav';
                break;
            case 'webm':
                $mime = 'video/webm';
                break;
            case 'zip':
                $mime = 'application/zip';
                break;
            default:
                $mime = '';
        }
    }
    return $mime;
}
Beispiel #2
0
function page_upload($args)
{
    // only handle the file if the frontend wants us to
    if (empty($args['preferred_module']) || $args['preferred_module'] != 'page') {
        return false;
    }
    // check if supported file
    if (!in_array($args['mime'], array('image/jpeg', 'image/png', 'image/gif')) || $args['mime'] == '' && !in_array(filext($args['file']), array('jpg', 'jpeg', 'png', 'gif'))) {
        return false;
    }
    // check if there is already a background-image and delete it
    $obj = load_object(array('name' => $args['page'] . '.page'));
    if (!$obj['#error']) {
        $obj = $obj['#data'];
        if (!empty($obj['page-background-file'])) {
            delete_upload(array('pagename' => array_shift(expl('.', $args['page'])), 'file' => $obj['page-background-file'], 'max_cnt' => 1));
        }
    }
    // set as background-image in page object
    $obj = array();
    $obj['name'] = $args['page'] . '.page';
    $obj['page-background-file'] = $args['file'];
    $obj['page-background-mime'] = $args['mime'];
    // update page object
    load_modules('glue');
    $ret = update_object($obj);
    if ($ret['#error']) {
        log_msg('page_upload: error updating page object: ' . quot($ret['#data']));
        return false;
    } else {
        // we don't actually render the object here, but signal the
        // frontend that everything went okay
        return true;
    }
}
/**
 *	implements upload
 */
function image_upload($args)
{
    // check if supported file
    if (!in_array($args['mime'], array('image/jpeg', 'image/png', 'image/gif')) || $args['mime'] == '' && !in_array(filext($args['file']), array('jpg', 'jpeg', 'png', 'gif'))) {
        return false;
    }
    load_modules('glue');
    // create new object
    $obj = create_object($args);
    if ($obj['#error']) {
        return false;
    } else {
        $obj = $obj['#data'];
    }
    $obj['type'] = 'image';
    // this is for a potential future speedup
    $obj['module'] = 'image';
    $obj['image-file'] = $args['file'];
    $obj['image-file-mime'] = $args['mime'];
    // save original-{width,height} if we can calculate it
    if (_gd_available()) {
        $a = expl('.', $args['page']);
        $size = _gd_get_imagesize(CONTENT_DIR . '/' . $a[0] . '/shared/' . $obj['image-file']);
        $obj['image-file-width'] = $size[0];
        $obj['object-width'] = $size[0] . 'px';
        $obj['image-file-height'] = $size[1];
        $obj['object-height'] = $size[1] . 'px';
    }
    save_object($obj);
    // render object and return html
    $ret = render_object(array('name' => $obj['name'], 'edit' => true));
    log_msg('debug', 'image_upload: ' . print_r($ret, 1));
    if ($ret['#error']) {
        return false;
    } else {
        return $ret['#data'];
    }
}
function video_upload($args)
{
    $ext = filext($args['file']);
    if ($args['mime'] == 'video/ogg' || $ext == 'ogv' || $ext == 'ogg') {
        // notice: we also handle ogg here although this also could be a
        // different mime type
        // make sure mime type is set
        $mime = 'video/ogg';
    } elseif ($args['mime'] == 'video/h264' || $ext == 'h264') {
        // haven't seen these out there
        $mime = 'video/h264';
    } elseif ($args['mime'] == 'video/mp4' || $ext == 'mp4') {
        // think this need not be h264, but well
        $mime = 'video/mp4';
    } elseif ($args['mime'] == 'video/webm' || $ext == 'webm') {
        // again, webm could also be audio/webm
        $mime = 'video/webm';
    } else {
        return false;
    }
    load_modules('glue');
    $obj = create_object($args);
    if ($obj['#error']) {
        return false;
    } else {
        $obj = $obj['#data'];
    }
    $obj['type'] = 'video';
    $obj['module'] = 'video';
    $obj['video-file'] = $args['file'];
    $obj['video-file-mime'] = $mime;
    save_object($obj);
    $ret = render_object(array('name' => $obj['name'], 'edit' => true));
    if ($ret['#error']) {
        return false;
    } else {
        return $ret['#data'];
    }
}
Beispiel #5
0
function inject_uploaded_file($tmp_key, $file, $auto_convert = true)
{
    // establish destination filename
    $dest_fn = get_uploaded_file_dest_fn($tmp_key, $file['name'], $file['type'], $file['tmp_name']);
    if ($dest_fn === false) {
        return array();
    }
    // make sure the containing directories exist
    create_containing_dir(tmp_dir($tmp_key) . '/' . $dest_fn);
    // move to destination
    if (false === @move_uploaded_file($file['tmp_name'], tmp_dir($tmp_key) . '/' . $dest_fn)) {
        return array();
    }
    if ($auto_convert) {
        // convert Word documents instantaneously to Markdown
        $start = time();
        if (filext($dest_fn) === 'docx') {
            make_run(tmp_dir($tmp_key), 'markdowns');
            // XXX (later): run "make clean" here?
        }
        $modified_after = repo_get_modified_files_after($tmp_key, $start - 1);
        // make sure the destination filename is part of th array
        if (is_array($modified_after) && !in_array($dest_fn, $modified_after)) {
            $modified_after[] = $dest_fn;
        }
        return $modified_after;
    }
    return array($dest_fn);
}