| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |