Exemple #1
0
 $extension = strtolower($path_parts['extension']);
 $filepath = get_resource_path($ref, true, "", true, $extension);
 $collection = getvalescaped('collection', "", true);
 $result = move_uploaded_file($_FILES['userfile']['tmp_name'], $filepath);
 $wait = sql_query("update resource set file_extension='{$extension}',preview_extension='jpg',file_modified=now() ,has_image=0 where ref='{$ref}'");
 # Store original filename in field, if set
 global $filename_field;
 if (isset($filename_field)) {
     $wait = update_field($ref, $filename_field, $_FILES['userfile']['name']);
 }
 // extract metadata
 $wait = extract_exif_comment($ref, $extension);
 $resource = get_resource_data($ref);
 //create previews
 if ($camera_autorotation) {
     AutoRotateImage($filepath);
 }
 $wait = create_previews($ref, false, $extension);
 // add resource to collection
 if ($collection != "") {
     $collection_exists = sql_value("select name value from collection where ref='" . escape_check($collection) . "'", "");
     if ($collection_exists != "") {
         if (!add_resource_to_collection($ref, $collection)) {
             header("HTTP/1.0 403 Forbidden.");
             echo "HTTP/1.0 403 Forbidden. Collection is not writable by this user.\n";
             exit;
         }
     } else {
         header("HTTP/1.0 403 Forbidden.");
         echo "HTTP/1.0 403 Forbidden. Collection does not exist.\n";
         exit;
function create_previews_using_im($ref, $thumbonly = false, $extension = "jpg", $previewonly = false, $previewbased = false, $alternative = -1, $ingested = false)
{
    global $keep_for_hpr, $imagemagick_path, $imagemagick_preserve_profiles, $imagemagick_quality, $imagemagick_colorspace, $default_icc_file, $autorotate_no_ingest, $always_make_previews, $lean_preview_generation;
    $icc_transform_complete = false;
    debug("create_previews_using_im(ref={$ref},thumbonly={$thumbonly},extension={$extension},previewonly={$previewonly},previewbased={$previewbased},alternative={$alternative},ingested={$ingested})");
    if (isset($imagemagick_path)) {
        # ----------------------------------------
        # Use ImageMagick to perform the resize
        # ----------------------------------------
        # For resource $ref, (re)create the various preview sizes listed in the table preview_sizes
        # Set thumbonly=true to (re)generate thumbnails only.
        if ($previewbased || $autorotate_no_ingest && !$ingested) {
            $file = get_resource_path($ref, true, "lpr", false, "jpg", -1, 1, false, "");
            if (!file_exists($file)) {
                $file = get_resource_path($ref, true, "scr", false, "jpg", -1, 1, false, "");
                if (!file_exists($file)) {
                    $file = get_resource_path($ref, true, "pre", false, "jpg", -1, 1, false, "");
                    /* staged, but not needed in testing
                    			if(!file_exists($file) && $autorotate_no_ingest && !$ingested)
                    				{
                    				$file=get_resource_path($ref,true,"",false,$extension,-1,1,false,"",$alternative);
                    				}*/
                }
            }
            if ($autorotate_no_ingest && !$ingested && !$previewonly) {
                # extra check for !previewonly should there also be ingested resources in the system
                $file = get_resource_path($ref, true, "", false, $extension, -1, 1, false, "", $alternative);
            }
        } else {
            if (!$previewonly) {
                $file = get_resource_path($ref, true, "", false, $extension, -1, 1, false, "", $alternative);
            } else {
                # We're generating based on a new preview (scr) image.
                $file = get_resource_path($ref, true, "tmp", false, "jpg");
            }
        }
        $hpr_path = get_resource_path($ref, true, "hpr", false, "jpg", -1, 1, false, "", $alternative);
        if (file_exists($hpr_path) && !$previewbased) {
            unlink($hpr_path);
        }
        $lpr_path = get_resource_path($ref, true, "lpr", false, "jpg", -1, 1, false, "", $alternative);
        if (file_exists($lpr_path) && !$previewbased) {
            unlink($lpr_path);
        }
        $scr_path = get_resource_path($ref, true, "scr", false, "jpg", -1, 1, false, "", $alternative);
        if (file_exists($scr_path) && !$previewbased) {
            unlink($scr_path);
        }
        $scr_wm_path = get_resource_path($ref, true, "scr", false, "jpg", -1, 1, true, "", $alternative);
        if (file_exists($scr_wm_path) && !$previewbased) {
            unlink($scr_wm_path);
        }
        $prefix = '';
        # Camera RAW images need prefix
        if (preg_match('/^(dng|nef|x3f|cr2|crw|mrw|orf|raf|dcr)$/i', $extension, $rawext)) {
            $prefix = $rawext[0] . ':';
        }
        # Locate imagemagick.
        $identify_fullpath = get_utility_path("im-identify");
        if ($identify_fullpath == false) {
            debug("ERROR: Could not find ImageMagick 'identify' utility at location '{$imagemagick_path}'.");
            return false;
        }
        # Get image's dimensions.
        $identcommand = $identify_fullpath . ' -format %wx%h ' . escapeshellarg($prefix . $file) . '[0]';
        $identoutput = run_command($identcommand);
        if ($lean_preview_generation) {
            $all_sizes = false;
            if (!$thumbonly && !$previewonly) {
                // seperate width and height
                $all_sizes = true;
                if (!empty($identoutput)) {
                    $wh = explode("x", $identoutput);
                    $o_width = $wh[0];
                    $o_height = $wh[1];
                }
            }
        }
        preg_match('/^([0-9]+)x([0-9]+)$/ims', $identoutput, $smatches);
        if (@(list(, $sw, $sh) = $smatches) === false) {
            return false;
        }
        $sizes = "";
        if ($thumbonly) {
            $sizes = " where id='thm' or id='col'";
        }
        if ($previewonly) {
            $sizes = " where id='thm' or id='col' or id='pre' or id='scr'";
        }
        $ps = sql_query("select * from preview_size {$sizes} order by width desc, height desc");
        if ($lean_preview_generation && $all_sizes) {
            $force_make = array("pre", "thm", "col");
            if ($extension != "jpg" || $extension != "jpeg") {
                array_push($force_make, "hpr", "scr");
            }
            $count = count($ps) - 1;
            $oversized = 0;
            for ($s = $count; $s > 0; $s--) {
                if (!in_array($ps[$s]['id'], $force_make) && !in_array($ps[$s]['id'], $always_make_previews) && (isset($o_width) && isset($o_height) && $ps[$s]['width'] > $o_width && $ps[$s]['height'] > $o_height)) {
                    $oversized++;
                }
                if ($oversized > 0) {
                    unset($ps[$s]);
                }
            }
            $ps = array_values($ps);
        }
        $created_count = 0;
        for ($n = 0; $n < count($ps); $n++) {
            # If this is just a jpg resource, we avoid the hpr size because the resource itself is an original sized jpg.
            # If preview_preprocessing indicates the intermediate jpg should be kept as the hpr image, do that.
            if ($keep_for_hpr && $ps[$n]['id'] == "hpr") {
                rename($file, $hpr_path);
                // $keep_for_hpr is switched to false below
            }
            # If we've already made the LPR or SCR then use those for the remaining previews.
            # As we start with the large and move to the small, this will speed things up.
            if ($extension != "png" && $extension != "gif") {
                if (file_exists($hpr_path)) {
                    $file = $hpr_path;
                }
                if (file_exists($lpr_path)) {
                    $file = $lpr_path;
                }
                if (file_exists($scr_path)) {
                    $file = $scr_path;
                }
            }
            # Locate imagemagick.
            $convert_fullpath = get_utility_path("im-convert");
            if ($convert_fullpath == false) {
                debug("ERROR: Could not find ImageMagick 'convert' utility at location '{$imagemagick_path}'.");
                return false;
            }
            if ($prefix == "cr2:" || $prefix == "nef:" || $extension == "png" || $extension == "gif") {
                $flatten = "";
            } else {
                $flatten = "-flatten";
            }
            $command = $convert_fullpath . ' ' . escapeshellarg($file) . ($extension != "png" && $extension != "gif" ? '[0] +matte ' : '') . $flatten . ' -quality ' . $imagemagick_quality;
            # fetch target width and height
            $tw = $ps[$n]["width"];
            $th = $ps[$n]["height"];
            $id = $ps[$n]["id"];
            # Debug
            debug("Contemplating " . $ps[$n]["id"] . " (sw={$sw}, tw={$tw}, sh={$sh}, th={$th}, extension={$extension})");
            # Find the target path
            if ($extension == "png" || $extension == "gif") {
                $target_ext = $extension;
            } else {
                $target_ext = "jpg";
            }
            $path = get_resource_path($ref, true, $ps[$n]["id"], false, $target_ext, -1, 1, false, "", $alternative);
            # Delete any file at the target path. Unless using the previewbased option, in which case we need it.
            if (!hook("imagepskipdel") && !$keep_for_hpr) {
                if (!$previewbased) {
                    if (file_exists($path)) {
                        unlink($path);
                    }
                }
            }
            if ($keep_for_hpr) {
                $keep_for_hpr = false;
            }
            # Also try the watermarked version.
            $wpath = get_resource_path($ref, true, $ps[$n]["id"], false, $target_ext, -1, 1, true, "", $alternative);
            if (file_exists($wpath)) {
                unlink($wpath);
            }
            # Always make a screen size for non-JPEG extensions regardless of actual image size
            # This is because the original file itself is not suitable for full screen preview, as it is with JPEG files.
            #
            # Always make preview sizes for smaller file sizes.
            #
            # Always make pre/thm/col sizes regardless of source image size.
            if ($id == "hpr" && !($extension == "jpg" || $extension == "jpeg") || $id == "scr" && !($extension == "jpg" || $extension == "jpeg") || $sw > $tw || $sh > $th || $id == "pre" || $id == "thm" || $id == "col" || in_array($id, $always_make_previews)) {
                # Debug
                debug("Generating preview size " . $ps[$n]["id"] . " to " . $path);
                # EXPERIMENTAL CODE TO USE EXISTING ICC PROFILE IF PRESENT
                global $icc_extraction, $icc_preview_profile, $icc_preview_options, $ffmpeg_supported_extensions;
                if ($icc_extraction) {
                    $iccpath = get_resource_path($ref, true, '', false, $extension) . '.icc';
                    if (!file_exists($iccpath) && !isset($iccfound) && $extension != "pdf" && !in_array($extension, $ffmpeg_supported_extensions)) {
                        // extracted profile doesn't exist. Try extracting.
                        if (extract_icc_profile($ref, $extension)) {
                            $iccfound = true;
                        } else {
                            $iccfound = false;
                        }
                    }
                }
                if ($icc_extraction && file_exists($iccpath) && !$icc_transform_complete) {
                    // we have an extracted ICC profile, so use it as source
                    $targetprofile = dirname(__FILE__) . '/../iccprofiles/' . $icc_preview_profile;
                    $profile = " -strip -profile {$iccpath} {$icc_preview_options} -profile {$targetprofile} -strip ";
                    // consider ICC transformation complete, if one of the sizes has been rendered that will be used for the smaller sizes
                    if ($id == 'hpr' || $id == 'lpr' || $id == 'scr') {
                        $icc_transform_complete = true;
                    }
                } else {
                    // use existing strategy for color profiles
                    # Preserve colour profiles? (omit for smaller sizes)
                    if ($imagemagick_preserve_profiles && $id != "thm" && $id != "col" && $id != "pre" && $id != "scr") {
                        $profile = "";
                    } else {
                        if (!empty($default_icc_file)) {
                            $profile = "-profile {$default_icc_file} ";
                        } else {
                            # By default, strip the colour profiles ('+' is remove the profile, confusingly)
                            $profile = "-strip -colorspace " . $imagemagick_colorspace;
                        }
                    }
                }
                $runcommand = $command . " " . ($extension != "png" && $extension != "gif" ? " +matte {$profile} " : "") . " -resize " . $tw . "x" . $th . "\">\" " . escapeshellarg($path);
                if (!hook("imagepskipthumb")) {
                    $output = run_command($runcommand);
                    $created_count++;
                    # if this is the first file generated for non-ingested resources check rotation
                    if ($autorotate_no_ingest && $created_count == 1 && !$ingested) {
                        # first preview created for non-ingested file...auto-rotate
                        if ($id == "thm" || $id == "col" || $id == "pre" || $id == "scr") {
                            AutoRotateImage($path, $ref);
                        } else {
                            AutoRotateImage($path);
                        }
                    }
                }
                // checkerboard
                if ($extension == "png" || $extension == "gif") {
                    global $transparency_background;
                    $transparencyreal = dirname(__FILE__) . "/../" . $transparency_background;
                    $wait = run_command(str_replace("identify", "composite", $identify_fullpath) . "  -compose Dst_Over -tile " . escapeshellarg($transparencyreal) . " " . escapeshellarg($path) . " " . escapeshellarg(str_replace($extension, "jpg", $path)), true);
                    unlink($path);
                    $path = str_replace($extension, "jpg", $path);
                }
                //echo $runcommand."<br /><br/>";
                # echo $runcommand."<br>\n";
                # Add a watermarked image too?
                global $watermark;
                if (!hook("replacewatermarkcreation", "", array($ref, $ps, $n, $alternative))) {
                    if ($alternative == -1 && isset($watermark) && ($ps[$n]["internal"] == 1 || $ps[$n]["allow_preview"] == 1)) {
                        $wmpath = get_resource_path($ref, true, $ps[$n]["id"], false, "jpg", -1, 1, true);
                        if (file_exists($wmpath)) {
                            unlink($wmpath);
                        }
                        $watermarkreal = dirname(__FILE__) . "/../" . $watermark;
                        $runcommand = $command . " +matte {$profile} -resize " . $tw . "x" . $th . "\">\" -tile " . escapeshellarg($watermarkreal) . " -draw \"rectangle 0,0 {$tw},{$th}\" " . escapeshellarg($wmpath);
                        // alternate command for png/gif using the path from above, and omitting resizing
                        if ($extension == "png" || $extension == "gif") {
                            $runcommand = $convert_fullpath . ' ' . escapeshellarg($path) . ($extension != "png" && $extension != "gif" ? '[0] +matte ' : '') . $flatten . ' -quality ' . $imagemagick_quality . " -tile " . escapeshellarg($watermarkreal) . " -draw \"rectangle 0,0 {$tw},{$th}\" " . escapeshellarg($wmpath);
                        }
                        #die($runcommand);
                        $output = run_command($runcommand);
                        //echo $runcommand."</br>";
                    }
                }
                // end hook replacewatermarkcreation
            }
        }
        # For the thumbnail image, call extract_mean_colour() to save the colour/size information
        $target = @imagecreatefromjpeg(get_resource_path($ref, true, "thm", false, "jpg", -1, 1, false, "", $alternative));
        if ($target && $alternative == -1) {
            extract_mean_colour($target, $ref);
            # flag database so a thumbnail appears on the site
            sql_query("update resource set has_image=1,preview_extension='jpg',preview_attempts=0,file_modified=now() where ref='{$ref}'");
        } else {
            if (!$target) {
                sql_query("update resource set preview_attempts=ifnull(preview_attempts,0) + 1 where ref='{$ref}'");
            }
        }
        return true;
    } else {
        return false;
    }
}
function update_resource($r, $path, $type, $title, $ingest = false, $createPreviews = true)
{
    # Update the resource with the file at the given path
    # Note that the file will be used at it's present location and will not be copied.
    global $syncdir, $staticsync_prefer_embedded_title;
    update_resource_type($r, $type);
    # Work out extension based on path
    $extension = explode(".", $path);
    if (count($extension) > 1) {
        $extension = trim(strtolower(end($extension)));
    } else {
        //No extension
        $extension = "";
    }
    # file_path should only really be set to indicate a staticsync location. Otherwise, it should just be left blank.
    if ($ingest) {
        $file_path = "";
    } else {
        $file_path = escape_check($path);
    }
    # Store extension/data in the database
    sql_query("update resource set archive=0,file_path='" . $file_path . "',file_extension='{$extension}',preview_extension='{$extension}',file_modified=now() where ref='{$r}'");
    # Store original filename in field, if set
    if (!$ingest) {
        # This file remains in situ; store the full path in file_path to indicate that the file is stored remotely.
        global $filename_field;
        if (isset($filename_field)) {
            $s = explode("/", $path);
            $filename = end($s);
            update_field($r, $filename_field, $filename);
        }
    } else {
        # This file is being ingested. Store only the filename.
        $s = explode("/", $path);
        $filename = end($s);
        global $filename_field;
        if (isset($filename_field)) {
            update_field($r, $filename_field, $filename);
        }
        # Move the file
        global $syncdir;
        $destination = get_resource_path($r, true, "", true, $extension);
        $result = rename($syncdir . "/" . $path, $destination);
        if ($result === false) {
            # The rename failed. The file is possibly still being copied or uploaded and must be ignored on this pass.
            # Delete the resouce just created and return false.
            delete_resource($r);
            return false;
        }
        chmod($destination, 0777);
    }
    # generate title and extract embedded metadata
    # order depends on which title should be the default (embedded or generated)
    if ($staticsync_prefer_embedded_title) {
        update_field($r, 8, $title);
        extract_exif_comment($r, $extension);
    } else {
        extract_exif_comment($r, $extension);
        update_field($r, 8, $title);
    }
    # Ensure folder is created, then create previews.
    get_resource_path($r, false, "pre", true, $extension);
    if ($createPreviews) {
        # Attempt autorotation
        global $autorotate_ingest;
        if ($ingest && $autorotate_ingest) {
            AutoRotateImage($destination);
        }
        # Generate previews/thumbnails (if configured i.e if not completed by offline process 'create_previews.php')
        global $enable_thumbnail_creation_on_upload;
        if ($enable_thumbnail_creation_on_upload) {
            create_previews($r, false, $extension, false, false, -1, false, $ingest);
        }
    }
    # Pass back the newly created resource ID.
    return $r;
}
 function upload_file($ref, $no_exif = false, $revert = false, $autorotate = false)
 {
     hook("clearaltfiles", "", array($ref));
     // optional: clear alternative files before uploading new resource
     # revert is mainly for metadata reversion, removing all metadata and simulating a reupload of the file from scratch.
     hook("removeannotations");
     $exiftool_fullpath = get_utility_path("exiftool");
     # Process file upload for resource $ref
     if ($revert == true) {
         global $filename_field;
         $original_filename = get_data_by_field($ref, $filename_field);
         # Field 8 is used in a special way for staticsync, don't overwrite.
         $test_for_staticsync = get_resource_data($ref);
         if ($test_for_staticsync['file_path'] != "") {
             $staticsync_mod = " and resource_type_field != 8";
         } else {
             $staticsync_mod = "";
         }
         sql_query("delete from resource_data where resource={$ref} {$staticsync_mod}");
         sql_query("delete from resource_keyword where resource={$ref} {$staticsync_mod}");
         #clear 'joined' display fields which are based on metadata that is being deleted in a revert (original filename is reinserted later)
         $display_fields = get_resource_table_joins();
         if ($staticsync_mod != "") {
             $display_fields_new = array();
             for ($n = 0; $n < count($display_fields); $n++) {
                 if ($display_fields[$n] != 8) {
                     $display_fields_new[] = $display_fields[$n];
                 }
             }
             $display_fields = $display_fields_new;
         }
         $clear_fields = "";
         for ($x = 0; $x < count($display_fields); $x++) {
             $clear_fields .= "field" . $display_fields[$x] . "=''";
             if ($x < count($display_fields) - 1) {
                 $clear_fields .= ",";
             }
         }
         sql_query("update resource set " . $clear_fields . " where ref={$ref}");
         #also add the ref back into keywords:
         add_keyword_mappings($ref, $ref, -1);
         $extension = sql_value("select file_extension value from resource where ref={$ref}", "");
         $filename = get_resource_path($ref, true, "", false, $extension);
         $processfile['tmp_name'] = $filename;
     } else {
         # Work out which file has been posted
         if (isset($_FILES['userfile'])) {
             $processfile = $_FILES['userfile'];
         } elseif (isset($_FILES['Filedata'])) {
             $processfile = $_FILES['Filedata'];
         }
         # Java upload (at least) needs this
         # Plupload needs this
         if (isset($_REQUEST['name'])) {
             $filename = $_REQUEST['name'];
         } else {
             $filename = $processfile['name'];
         }
     }
     # Work out extension
     if (!isset($extension)) {
         # first try to get it from the filename
         $extension = explode(".", $filename);
         if (count($extension) > 1) {
             $extension = trim(strtolower($extension[count($extension) - 1]));
         } else {
             if ($exiftool_fullpath != false) {
                 $file_type_by_exiftool = run_command($exiftool_fullpath . " -filetype -s -s -s " . escapeshellarg($processfile['tmp_name']));
                 if (strlen($file_type_by_exiftool) > 0) {
                     $extension = str_replace(" ", "_", trim(strtolower($file_type_by_exiftool)));
                     $filename = $filename;
                 } else {
                     return false;
                 }
             } else {
                 return false;
             }
         }
     }
     # Banned extension?
     global $banned_extensions;
     if (in_array($extension, $banned_extensions)) {
         return false;
     }
     $status = "Please provide a file name.";
     $filepath = get_resource_path($ref, true, "", true, $extension);
     if (!$revert) {
         # Remove existing file, if present
         hook("beforeremoveexistingfile", "", array("resourceId" => $ref));
         $old_extension = sql_value("select file_extension value from resource where ref='{$ref}'", "");
         if ($old_extension != "") {
             $old_path = get_resource_path($ref, true, "", true, $old_extension);
             if (file_exists($old_path)) {
                 unlink($old_path);
             }
         }
         // also remove any existing extracted icc profiles
         $icc_path = get_resource_path($ref, true, "", true, $extension . '.icc');
         if (file_exists($icc_path)) {
             unlink($icc_path);
         }
         global $pdf_pages;
         $iccx = 0;
         // if there is a -0.icc page, run through and delete as many as necessary.
         $finished = false;
         $badicc_path = str_replace(".icc", "-{$iccx}.icc", $icc_path);
         while (!$finished) {
             if (file_exists($badicc_path)) {
                 unlink($badicc_path);
                 $iccx++;
                 $badicc_path = str_replace(".icc", "-{$iccx}.icc", $icc_path);
             } else {
                 $finished = true;
             }
         }
         $iccx = 0;
     }
     if (!$revert) {
         if ($filename != "") {
             global $jupload_alternative_upload_location, $plupload_upload_location;
             if (isset($plupload_upload_location)) {
                 # PLUpload - file was sent chunked and reassembled - use the reassembled file location
                 $result = rename($plupload_upload_location, $filepath);
             } elseif (isset($jupload_alternative_upload_location)) {
                 # JUpload - file was sent chunked and reassembled - use the reassembled file location
                 $result = rename($jupload_alternative_upload_location, $filepath);
             } else {
                 # Standard upload.
                 if (!$revert) {
                     $result = move_uploaded_file($processfile['tmp_name'], $filepath);
                 } else {
                     $result = true;
                 }
             }
             if ($result == false) {
                 $status = "File upload error. Please check the size of the file you are trying to upload.";
                 return false;
             } else {
                 global $camera_autorotation;
                 global $ffmpeg_audio_extensions;
                 if ($camera_autorotation) {
                     if ($autorotate && !in_array($extension, $ffmpeg_audio_extensions)) {
                         AutoRotateImage($filepath);
                     }
                 }
                 chmod($filepath, 0777);
                 global $icc_extraction;
                 global $ffmpeg_supported_extensions;
                 if ($icc_extraction && $extension != "pdf" && !in_array($extension, $ffmpeg_supported_extensions)) {
                     extract_icc_profile($ref, $extension);
                 }
                 $status = "Your file has been uploaded.";
             }
         }
     }
     # Store extension in the database and update file modified time.
     if ($revert) {
         $has_image = "";
     } else {
         $has_image = ",has_image=0";
     }
     sql_query("update resource set file_extension='{$extension}',preview_extension='jpg',file_modified=now() {$has_image} where ref='{$ref}'");
     # delete existing resource_dimensions
     sql_query("delete from resource_dimensions where resource='{$ref}'");
     # get file metadata
     if (!$no_exif) {
         extract_exif_comment($ref, $extension);
     }
     # extract text from documents (e.g. PDF, DOC).
     global $extracted_text_field;
     if (isset($extracted_text_field) && !$no_exif) {
         if (isset($unoconv_path) && in_array($extension, $unoconv_extensions)) {
             // omit, since the unoconv process will do it during preview creation below
         } else {
             extract_text($ref, $extension);
         }
     }
     # Store original filename in field, if set
     global $filename_field;
     if (isset($filename_field)) {
         if (!$revert) {
             update_field($ref, $filename_field, $filename);
         } else {
             update_field($ref, $filename_field, $original_filename);
         }
     }
     if (!$revert) {
         # Clear any existing FLV file or multi-page previews.
         global $pdf_pages;
         for ($n = 2; $n <= $pdf_pages; $n++) {
             # Remove preview page.
             $path = get_resource_path($ref, true, "scr", false, "jpg", -1, $n, false);
             if (file_exists($path)) {
                 unlink($path);
             }
             # Also try the watermarked version.
             $path = get_resource_path($ref, true, "scr", false, "jpg", -1, $n, true);
             if (file_exists($path)) {
                 unlink($path);
             }
         }
         # Remove any FLV video preview (except if the actual resource is an FLV file).
         global $ffmpeg_preview_extension;
         if ($extension != $ffmpeg_preview_extension) {
             $path = get_resource_path($ref, true, "", false, $ffmpeg_preview_extension);
             if (file_exists($path)) {
                 unlink($path);
             }
         }
         # Remove any FLV preview-only file
         $path = get_resource_path($ref, true, "pre", false, $ffmpeg_preview_extension);
         if (file_exists($path)) {
             unlink($path);
         }
         # Remove any MP3 (except if the actual resource is an MP3 file).
         if ($extension != "mp3") {
             $path = get_resource_path($ref, true, "", false, "mp3");
             if (file_exists($path)) {
                 unlink($path);
             }
         }
         # Create previews
         global $enable_thumbnail_creation_on_upload;
         if ($enable_thumbnail_creation_on_upload) {
             create_previews($ref, false, $extension);
         } else {
             # Offline thumbnail generation is being used. Set 'has_image' to zero so the offline create_previews.php script picks this up.
             sql_query("update resource set has_image=0 where ref='{$ref}'");
         }
     }
     # Update file dimensions
     get_original_imagesize($ref, $filepath, $extension);
     hook("Uploadfilesuccess", "", array("resourceId" => $ref));
     # Update disk usage
     update_disk_usage($ref);
     # Log this activity.
     $log_ref = resource_log($ref, "u", 0);
     hook("upload_image_after_log_write", "", array($ref, $log_ref));
     return $status;
 }