function media_crop_get_image in Media crop 7
Page callback for image generation.
1 string reference to 'media_crop_get_image'
- media_crop_menu in ./
media_crop.module - Implements hook_menu().
File
- ./
media_crop.module, line 593 - Media crop primary module file.
Code
function media_crop_get_image($media_crop_instance) {
if (!$media_crop_instance) {
drupal_goto(drupal_get_path('module', 'media_crop') . '/images/loading.gif');
}
$angle = (int) $media_crop_instance->angle;
$file = file_load($media_crop_instance->fid);
$style_name = $media_crop_instance->image_style_name;
$crop_x_coordinate = (int) $media_crop_instance->crop_x;
$crop_y_coordinate = (int) $media_crop_instance->crop_y;
$crop_width = (int) $media_crop_instance->crop_w;
$crop_height = (int) $media_crop_instance->crop_h;
$scale_width = (int) $media_crop_instance->crop_scale_w;
$scale_height = (int) $media_crop_instance->crop_scale_h;
$args = func_get_args();
array_shift($args);
$req_uri = implode('/', $args);
$orig_uri = str_replace('://', '/', $file->uri);
if ($req_uri != $orig_uri) {
watchdog('media_crop', 'Request URI not equals to original URI.');
drupal_access_denied();
}
unset($args);
$style = image_style_load($style_name);
if (!$style) {
$style = array(
'name' => $style_name,
'effects' => array(),
);
}
$derivative_uri = _media_crop_get_path($media_crop_instance->mciid, $file->uri);
if (($scheme = file_uri_scheme($derivative_uri)) == 'private') {
if (file_exists($derivative_uri)) {
file_download($scheme, file_uri_target($derivative_uri));
}
else {
$headers = module_invoke_all('file_download', $file->uri);
if (in_array(-1, $headers) || empty($headers)) {
watchdog('media_crop', 'No headers for file download.');
return drupal_access_denied();
}
if (count($headers)) {
foreach ($headers as $name => $value) {
drupal_add_http_header($name, $value);
}
}
}
}
$lock = drupal_hash_base64($file->uri . implode('/', array(
$angle,
$crop_x_coordinate,
$crop_y_coordinate,
$crop_width,
$crop_height,
)));
if (!file_exists($derivative_uri)) {
$lock_acquired = lock_acquire($lock);
if (!$lock_acquired) {
drupal_add_http_header('Status', '503 Service Unavailable');
drupal_add_http_header('Retry-After', 3);
print t('Image generation in progress. Try again shortly.', array(), array(
'context' => 'Media crop',
));
drupal_exit();
}
}
$crop_object = (object) array(
'uri' => $file->uri,
'angle' => $angle,
'style' => $style,
'crop_x_coordinate' => $crop_x_coordinate,
'crop_y_coordinate' => $crop_y_coordinate,
'crop_width' => $crop_width,
'crop_height' => $crop_height,
'scale_height' => $scale_height,
'scale_width' => $scale_width,
'mciid' => $media_crop_instance->mciid,
);
$success = file_exists($derivative_uri) || media_crop_create_derivative($crop_object);
if (!empty($lock_acquired)) {
lock_release($lock);
}
if ($success) {
$image = image_load($derivative_uri);
file_transfer($image->source, array(
'Content-Type' => $image->info['mime_type'],
'Content-Length' => $image->info['file_size'],
));
}
else {
watchdog('media_crop', 'Unable to generate the derived image located at %path.', array(
'%path' => $derivative_uri,
));
drupal_add_http_header('Status', '500 Internal Server Error');
print t('Error generating image.', array(), array(
'context' => 'Media crop',
));
drupal_exit();
}
return NULL;
}