[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/filefield/ -> filefield.devel.inc (source)

   1  <?php
   2  // $Id: filefield.devel.inc,v 1.3 2009/07/25 02:39:25 quicksketch Exp $
   3  
   4  /**
   5   * @file
   6   * Utility functions for generating FileField content. Note that image
   7   * generation support requires the GD toolkit.
   8   */
   9  
  10  /**
  11   * Private function used by filefield_content_generate().
  12   */
  13  function _filefield_content_generate($node, $field) {
  14    if ($source = _filefield_generate_file($field)) {
  15      $file = field_file_save_file($source, array(), filefield_widget_file_path($field));
  16  
  17      $item = (array) $file;
  18      $item['list'] = 1;
  19      $item['data']['alt'] = devel_create_greeking(4);
  20      $item['data']['title'] = devel_create_greeking(10);
  21    }
  22    else {
  23      $item = array();
  24    }
  25  
  26    return $item;
  27  }
  28  
  29  /**
  30   * Generate an image based on the properties of a field.
  31   *
  32   * This is made to work with ImageField, and inspects the minimum and maximum
  33   * image sizes and makes sure the generated image matches the requirements.
  34   *
  35   * @return
  36   *   The path to the new file, in the temporary directory.
  37   */
  38  function _filefield_generate_file($field) {
  39    if (empty($field['widget']['file_extensions'])) {
  40      $field['widget']['file_extensions'] = 'png jpg txt';
  41    }
  42  
  43    $extensions = array_intersect(explode(' ', $field['widget']['file_extensions']), array('png', 'jpg', 'txt'));
  44    $extension = array_rand(drupal_map_assoc($extensions));
  45  
  46    if ($extension == 'txt') {
  47      $filesize = empty($field['widget']['max_filesize_per_file']) ? 1024 : parse_size($field['widget']['max_filesize_per_file']);
  48      return _filefield_generate_textfile($filesize);
  49    }
  50    elseif (in_array($extension, array('png', 'jpg')) && function_exists('imagecreate')) {
  51      $min_resolution = empty($field['widget']['min_resolution']) ? '100x100' : $field['widget']['min_resolution'];
  52      $max_resolution = empty($field['widget']['max_resolution']) ? '600x600' : $field['widget']['max_resolution'];
  53      return _filefield_generate_image($extension, $min_resolution, $max_resolution);
  54    }
  55  
  56    return FALSE;
  57  }
  58  
  59  /**
  60   * Private function for generating a random text file.
  61   */
  62  function _filefield_generate_textfile($filesize = 1024) {
  63    static $filesizes = array();
  64  
  65    $temp_file = FALSE;
  66    if (isset($filesizes[$filesize])) {
  67      $temp_file = $filesizes[$filesize];
  68    }
  69    elseif ($temp_file = tempnam(file_directory_temp(), 'filefield_')) {
  70      file_move($temp_file, $temp_file .'.txt');
  71  
  72      $fp = fopen($temp_file, 'w');
  73      fwrite($fp, str_repeat('01', $filesize/2));
  74      fclose($fp);
  75      $filesizes[$filesize] = $temp_file;
  76    }
  77  
  78    return $temp_file;
  79  }
  80  
  81  /**
  82   * Private function for creating a random image.
  83   *
  84   * This function only works with the GD toolkit. ImageMagick is not supported.
  85   */
  86  function _filefield_generate_image($extension = 'png', $min_resolution, $max_resolution) {
  87    static $images = array();
  88  
  89    // Generate a max of 5 different images.
  90    if (!isset($images[$extension][$min_resolution][$max_resolution]) || count($images[$extension][$min_resolution][$max_resolution]) < 5) {
  91      if ($temp_file = tempnam(file_directory_temp(), 'filefield_')) {
  92        file_move($temp_file, $temp_file .'.'. $extension);
  93  
  94        $min = explode('x', $min_resolution);
  95        $max = explode('x', $max_resolution);
  96  
  97        $width = rand((int)$min[0], (int)$max[0]);
  98        $height = rand((int)$min[0], (int)$max[0]);
  99  
 100        // Make a image split into 4 sections with random colors.
 101        $im = imagecreate($width, $height);
 102        for ($n = 0; $n < 4; $n++) {
 103          $color = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
 104          $x = $width/2 * ($n % 2);
 105          $y = $height/2 * (int) ($n >= 2);
 106          imagefilledrectangle($im, $x, $y, $x + $width/2, $y + $height/2, $color);
 107        }
 108  
 109        // Make a perfect circle in the image middle.
 110        $color = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
 111        $smaller_dimension = min($width, $height);
 112        $smaller_dimension = ($smaller_dimension % 2) ? $smaller_dimension : $smaller_dimension;
 113        imageellipse($im, $width/2, $height/2, $smaller_dimension, $smaller_dimension, $color);
 114  
 115        $save_function = 'image'. ($extension == 'jpg' ? 'jpeg' : $extension);
 116        $save_function($im, $temp_file);
 117  
 118        $images[$extension][$min_resolution][$max_resolution][$temp_file] = $temp_file;
 119      }
 120    }
 121    // Select one of the images we've already generated for this field.
 122    else {
 123      $temp_file = array_rand($images[$extension][$min_resolution][$max_resolution]);
 124    }
 125  
 126    return $temp_file;
 127  }


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7