| 1 |
<?php
|
| 2 |
// $Id: media.derivatives.forms.inc,v 1.2 2009/01/06 13:23:23 rhys Exp $
|
| 3 |
|
| 4 |
/**
|
| 5 |
* Listing of the derivatives for the media.
|
| 6 |
*/
|
| 7 |
function mmedia_derivatives_list_form(&$form_state, $media) {
|
| 8 |
// make sure that it's an actual media we're loading.
|
| 9 |
$media = media_load($media->mid);
|
| 10 |
if (!$media) {
|
| 11 |
drupal_not_found();
|
| 12 |
exit();
|
| 13 |
}
|
| 14 |
|
| 15 |
$breadcrumbs = _mmedia_set_breadcrumb(mmedia_folder_load($media->fid));
|
| 16 |
$breadcrumbs[] = l($media->title, MEDIA_PATH .'/'. $media->mid);
|
| 17 |
drupal_set_breadcrumb($breadcrumbs);
|
| 18 |
|
| 19 |
$derivatives = mapi_derivative_list_by_extension($media->ext);
|
| 20 |
$files = mapi_generated_load(media_filename($media));
|
| 21 |
|
| 22 |
$rows = array();
|
| 23 |
foreach ($derivatives as $did => $name) {
|
| 24 |
$found = array_key_exists($did, $files);
|
| 25 |
$rows[] = array(
|
| 26 |
l($name, MEDIA_PATH .'/'. $media->mid .'/derivatives/'. $did),
|
| 27 |
$found && $files[$did]->override ? t('Overridden') : ($found ? t('Generated') : t('Free')),
|
| 28 |
);
|
| 29 |
}
|
| 30 |
|
| 31 |
if (count($rows)) {
|
| 32 |
$form['details'] = array(
|
| 33 |
'#value' => t('This are the available derivatives for this media.') .
|
| 34 |
theme('table', array(t('Derivative'), t('Status')), $rows)
|
| 35 |
);
|
| 36 |
}
|
| 37 |
else {
|
| 38 |
$form['details'] = array('#value' => t('There are no derivatives that can be generated for this media.'));
|
| 39 |
}
|
| 40 |
|
| 41 |
return $form;
|
| 42 |
}
|
| 43 |
|
| 44 |
/**
|
| 45 |
* Derivatives media form
|
| 46 |
*/
|
| 47 |
function mmedia_derivatives_form(&$form_state, $media, $derivative) {
|
| 48 |
// make sure it's a valid media file
|
| 49 |
$media = media_load($media->mid);
|
| 50 |
|
| 51 |
// make sure that derivative fits into this media extension.
|
| 52 |
$derivatives = mapi_derivative_list_by_extension($media->ext);
|
| 53 |
if (!array_key_exists($derivative->did, $derivatives)) {
|
| 54 |
drupal_not_found();
|
| 55 |
exit();
|
| 56 |
}
|
| 57 |
|
| 58 |
$breadcrumbs = _mmedia_set_breadcrumb(mmedia_folder_load($media->fid));
|
| 59 |
$breadcrumbs[] = l($media->title, MEDIA_PATH .'/'. $media->mid);
|
| 60 |
$breadcrumbs[] = l(t('Derivatives'), MEDIA_PATH .'/'. $media->mid .'/derivatives');
|
| 61 |
drupal_set_breadcrumb($breadcrumbs);
|
| 62 |
|
| 63 |
// get the details of the generated derivative
|
| 64 |
$details = mapi_generated_details(media_filename($media), $derivative->did);
|
| 65 |
|
| 66 |
// basic necessities for other modules to create changes
|
| 67 |
$form['mid'] = array('#type' => 'value', '#value' => $media->mid);
|
| 68 |
$form['did'] = array('#type' => 'value', '#value' => $derivative->did);
|
| 69 |
|
| 70 |
if ($details) {
|
| 71 |
$form['preview'] = array('#value' => '<div class="media-derivative-preview">'. mapi_display($details['filename'], array('profile' => NULL)) .'</div>');
|
| 72 |
}
|
| 73 |
else {
|
| 74 |
$form['preview'] = array('#value' => '<div>'. t('There is no generated derivative for this media.') .'</div>');
|
| 75 |
}
|
| 76 |
|
| 77 |
// delete derivative
|
| 78 |
$form['delete'] = array('#type' => 'submit', '#value' => t('Delete Derivative'));
|
| 79 |
|
| 80 |
// force generation of derivative
|
| 81 |
$form['force'] = array('#type' => 'submit', '#value' => t('Force Generation'));
|
| 82 |
|
| 83 |
// upload replacement
|
| 84 |
$form['upload'] = array('#type' => 'submit', '#value' => t('Replace via Upload'));
|
| 85 |
|
| 86 |
return $form;
|
| 87 |
}
|
| 88 |
|
| 89 |
/**
|
| 90 |
* Submission of media derivatives form.
|
| 91 |
*/
|
| 92 |
function mmedia_derivatives_form_submit($form, &$form_state) {
|
| 93 |
$values = $form_state['values'];
|
| 94 |
switch ($values['op']) {
|
| 95 |
case t('Replace via Upload'):
|
| 96 |
drupal_goto(MEDIA_PATH .'/'. $values['mid'] .'/derivatives/'. $values['did'] .'/upload');
|
| 97 |
exit();
|
| 98 |
break;
|
| 99 |
// deletes the derivative
|
| 100 |
case t('Delete Derivative'):
|
| 101 |
$media = media_load($values['mid']);
|
| 102 |
mapi_generated_delete(media_filename($media), $values['did']);
|
| 103 |
break;
|
| 104 |
|
| 105 |
// forces a regeneration of the file if necessary
|
| 106 |
case t('Force Generation'):
|
| 107 |
$media = media_load($values['mid']);
|
| 108 |
$derivative = mapi_derivative_name($values['did']);
|
| 109 |
|
| 110 |
// check for already generated file, replace it.
|
| 111 |
$filename = NULL;
|
| 112 |
if ($generated = mapi_generated_details(media_filename($media), $derivative->did)) {
|
| 113 |
$filename = $generated['filename'];
|
| 114 |
}
|
| 115 |
|
| 116 |
// generates the derivative
|
| 117 |
mapi_derive(media_filename($media), $derivative, array('filename' => $filename, 'exists' => FILE_EXISTS_REPLACE));
|
| 118 |
break;
|
| 119 |
}
|
| 120 |
}
|
| 121 |
|
| 122 |
/**
|
| 123 |
* Upload capability for individual derivative media modification.
|
| 124 |
*/
|
| 125 |
function mmedia_derivatives_upload_form(&$form_state, $media, $derivative) {
|
| 126 |
$media = media_load($media->mid);
|
| 127 |
|
| 128 |
$breadcrumbs = _mmedia_set_breadcrumb(mmedia_folder_load($media->fid));
|
| 129 |
$breadcrumbs[] = l($media->title, MEDIA_PATH .'/'. $media->mid);
|
| 130 |
$breadcrumbs[] = l(t('Derivatives'), MEDIA_PATH .'/'. $media->mid .'/derivatives');
|
| 131 |
drupal_set_breadcrumb($breadcrumbs);
|
| 132 |
|
| 133 |
$form['mid'] = array('#type' => 'value', '#value' => $media->mid);
|
| 134 |
$form['did'] = array('#type' => 'value', '#value' => $derivative->did);
|
| 135 |
$form['ext'] = array('#type' => 'value', '#value' => $derivative->output);
|
| 136 |
|
| 137 |
// handle the processing of the media form...
|
| 138 |
$form['media'] = array(
|
| 139 |
'#type' => 'file',
|
| 140 |
'#title' => t('Upload'),
|
| 141 |
'#description' => t('Select a file to upload.') .' '. t('Must have the extension %ext.', array('%ext' => $derivative->output)),
|
| 142 |
);
|
| 143 |
|
| 144 |
// uploadable form
|
| 145 |
$form['#attributes'] = array('enctype' => 'multipart/form-data');
|
| 146 |
|
| 147 |
$form['submit'] = array('#type' => 'submit', '#value' => t('Upload'));
|
| 148 |
|
| 149 |
return $form;
|
| 150 |
}
|
| 151 |
|
| 152 |
/**
|
| 153 |
* Validate the upload form.
|
| 154 |
*/
|
| 155 |
function mmedia_derivatives_upload_form_validate($form, &$form_state) {
|
| 156 |
if ($file = file_save_upload('media', array(), file_directory_temp())) {
|
| 157 |
// validate that the file is correct
|
| 158 |
if (mapi_file_ext($file->filepath) != $form_state['values']['ext']) {
|
| 159 |
file_delete($file->filepath);
|
| 160 |
form_set_error('media', t('File does not have a valid extension. It must be (%ext).', array('%ext' => $form_state['values']['ext'])));
|
| 161 |
}
|
| 162 |
// store if correct
|
| 163 |
else {
|
| 164 |
// we are able to generate the file that is supposed to be at this location.
|
| 165 |
$filename = media_filename(media_load($form_state['values']['mid']));
|
| 166 |
$gen = mapi_generated_details($filename, $form_state['values']['did']);
|
| 167 |
if ($gen && !media_compare_files($file->filepath, $gen['filename'], array('width', 'height'))) {
|
| 168 |
file_delete($file->filepath);
|
| 169 |
form_set_error('media', t('File does not match require generated settings.'));
|
| 170 |
return;
|
| 171 |
}
|
| 172 |
$form_state['storage']['gen'] = $gen['filename'];
|
| 173 |
$form_state['storage']['source'] = $filename;
|
| 174 |
$form_state['storage']['file'] = $file;
|
| 175 |
}
|
| 176 |
}
|
| 177 |
else {
|
| 178 |
form_set_message('', t('No file uploaded'));
|
| 179 |
}
|
| 180 |
}
|
| 181 |
|
| 182 |
/**
|
| 183 |
* Submission of mmedia_derivatives_form().
|
| 184 |
*/
|
| 185 |
function mmedia_derivatives_upload_form_submit($form, &$form_state) {
|
| 186 |
$values = $form_state['values'];
|
| 187 |
$storage = $form_state['storage'];
|
| 188 |
unset($form_state['storage']);
|
| 189 |
|
| 190 |
// overwrite the generated file in the system settings.
|
| 191 |
if ($storage['gen']) {
|
| 192 |
if (!($filename = mapi_file_copy($storage['file']->filepath, $storage['gen'], array('replace' => FILE_EXISTS_REPLACE, 'workspace' => 'mmedia')))) {
|
| 193 |
file_delete($storage['file']->filepath);
|
| 194 |
drupal_set_message(t('Unable to move updated file to filename (%filename).', array('%filename' => $storage['gen'])), 'error');
|
| 195 |
return;
|
| 196 |
}
|
| 197 |
file_delete($storage['file']->filepath);
|
| 198 |
}
|
| 199 |
// otherwise just move it to the correct location, with an appropriate rename.
|
| 200 |
else {
|
| 201 |
$temp = mapi_file_path($storage['source']) . mapi_file_name($storage['source']) .'-'. $values['did'] .'.'. $values['ext'];
|
| 202 |
drupal_set_message($temp .' = '. is_file($temp));
|
| 203 |
if (!($filename = mapi_file_move($storage['file']->filepath, $temp, array('replace' => FILE_EXISTS_RENAME, 'workspace' => 'mmedia')))) {
|
| 204 |
file_delete($storage['file']->filepath);
|
| 205 |
drupal_set_message(t('Unable to move updated file to filename (%filename).', array('%filename' => $temp)), 'error');
|
| 206 |
return;
|
| 207 |
}
|
| 208 |
drupal_set_message($filename);
|
| 209 |
}
|
| 210 |
|
| 211 |
// rebuild the mapi_generated settings
|
| 212 |
mapi_generated_override($storage['source'], $values['did'], $filename);
|
| 213 |
|
| 214 |
$form_state['redirect'] = MEDIA_PATH .'/'. $values['mid'] .'/derivatives/'. $values['did'];
|
| 215 |
}
|