123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <?php
- /**
- * @file
- * Page/form showing image styles in use.
- */
- /**
- * Form for uploading and displaying an image using selected style.
- *
- * This page provides a form that allows the user to upload an image and choose
- * a style from the list of defined image styles to use when displaying the
- * the image. This serves as an example of integrating image styles with your
- * module and as a way to demonstrate that the styles and effects defined by
- * this module are available via Drupal's image handling system.
- *
- * @see theme_image_style()
- *
- * @ingroup image_example
- */
- function image_example_style_form($form, &$form_state) {
- // If there is already an uploaded image display the image here.
- if ($image_fid = variable_get('image_example_image_fid', FALSE)) {
- $image = file_load($image_fid);
- $style = variable_get('image_example_style_name', 'thumbnail');
- $form['image'] = array(
- '#markup' => theme('image_example_image', array('image' => $image, 'style' => $style)),
- );
- }
- // Use the #managed_file FAPI element to upload an image file.
- $form['image_example_image_fid'] = array(
- '#title' => t('Image'),
- '#type' => 'managed_file',
- '#description' => t('The uploaded image will be displayed on this page using the image style chosen below.'),
- '#default_value' => variable_get('image_example_image_fid', ''),
- '#upload_location' => 'public://image_example_images/',
- );
- // Provide a select field for choosing an image style to use when displaying
- // the image.
- $form['image_example_style_name'] = array(
- '#title' => t('Image style'),
- '#type' => 'select',
- '#description' => t('Choose an image style to use when displaying this image.'),
- // The image_style_options() function returns an array of all available
- // image styles both the key and the value of the array are the image
- // style's name. The function takes on paramater, a boolean flag
- // signifying whether or not the array should include a <none> option.
- '#options' => image_style_options(TRUE),
- '#default_value' => variable_get('image_example_style_name', ''),
- );
- // Submit Button.
- $form['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Save'),
- );
- return $form;
- }
- /**
- * Verifies that the user supplied an image with the form..
- *
- * @ingroup image_example
- */
- function image_example_style_form_validate($form, &$form_state) {
- if (!isset($form_state['values']['image_example_image_fid']) || !is_numeric($form_state['values']['image_example_image_fid'])) {
- form_set_error('image_example_image_fid', t('Please select an image to upload.'));
- }
- }
- /**
- * Form Builder; Display a form for uploading an image.
- *
- * @ingroup image_example
- */
- function image_example_style_form_submit($form, &$form_state) {
- // When using the #managed_file form element the file is automatically
- // uploaded an saved to the {file} table. The value of the corresponding
- // form element is set to the {file}.fid of the new file.
- //
- // If fid is not 0 we have a valid file.
- if ($form_state['values']['image_example_image_fid'] != 0) {
- // The new file's status is set to 0 or temporary and in order to ensure
- // that the file is not removed after 6 hours we need to change it's status
- // to 1. Save the ID of the uploaded image for later use.
- $file = file_load($form_state['values']['image_example_image_fid']);
- $file->status = FILE_STATUS_PERMANENT;
- file_save($file);
- // When a module is managing a file, it must manage the usage count.
- // Here we increment the usage count with file_usage_add().
- file_usage_add($file, 'image_example', 'sample_image', 1);
- // Save the fid of the file so that the module can reference it later.
- variable_set('image_example_image_fid', $file->fid);
- drupal_set_message(t('The image @image_name was uploaded and saved with an ID of @fid and will be displayed using the style @style.',
- array(
- '@image_name' => $file->filename,
- '@fid' => $file->fid,
- '@style' => $form_state['values']['image_example_style_name'],
- )
- ));
- }
- // If the file was removed we need to remove the module's reference to the
- // removed file's fid, and remove the file.
- elseif ($form_state['values']['image_example_image_fid'] == 0) {
- // Retrieve the old file's id.
- $fid = variable_get('image_example_image_fid', FALSE);
- $file = $fid ? file_load($fid) : FALSE;
- if ($file) {
- // When a module is managing a file, it must manage the usage count.
- // Here we decrement the usage count with file_usage_delete().
- file_usage_delete($file, 'image_example', 'sample_image', 1);
- // The file_delete() function takes a file object and checks to see if
- // the file is being used by any other modules. If it is the delete
- // operation is cancelled, otherwise the file is deleted.
- file_delete($file);
- }
- // Either way the module needs to update it's reference since even if the
- // file is in use by another module and not deleted we no longer want to
- // use it.
- variable_set('image_example_image_fid', FALSE);
- drupal_set_message(t('The image @image_name was removed.', array('@image_name' => $file->filename)));
- }
- // Save the name of the image style chosen by the user.
- variable_set('image_example_style_name', $form_state['values']['image_example_style_name']);
- }
- /**
- * Theme function displays an image rendered using the specified style.
- *
- * @ingroup image_example
- */
- function theme_image_example_image($variables) {
- $image = $variables['image'];
- $style = $variables['style'];
- // theme_image_style() is the primary method for displaying images using
- // one of the defined styles. The $variables array passed to the theme
- // contains the following two important values:
- // - 'style_name': the name of the image style to use when displaying the
- // image.
- // - 'path': the $file->uri of the image to display.
- //
- // When given a style and an image path the function will first determine
- // if a derivative image already exists, in which case the existing image
- // will be displayed. If the derivative image does not already exist the
- // function returns an <img> tag with a specially crafted callback URL
- // as the src attribute for the tag. When accessed, the callback URL will
- // generate the derivative image and serve it to the browser.
- $output = theme('image_style',
- array(
- 'style_name' => $style,
- 'path' => $image->uri,
- 'getsize' => FALSE,
- )
- );
- $output .= '<p>' . t('This image is being displayed using the image style %style_name.', array('%style_name' => $style)) . '</p>';
- return $output;
- }
|