filefield.devel.inc in FileField 6.3
Utility functions for generating FileField content. Note that image generation support requires the GD toolkit.
File
filefield.devel.incView source
<?php
/**
* @file
* Utility functions for generating FileField content. Note that image
* generation support requires the GD toolkit.
*/
/**
* Private function used by filefield_content_generate().
*/
function _filefield_content_generate($node, $field) {
if ($source = _filefield_generate_file($field)) {
$file = field_file_save_file($source, array(), filefield_widget_file_path($field));
$item = (array) $file;
$item['list'] = 1;
$item['data']['alt'] = devel_create_greeking(4);
$item['data']['title'] = devel_create_greeking(10);
}
else {
$item = array();
}
return $item;
}
/**
* Generate an image based on the properties of a field.
*
* This is made to work with ImageField, and inspects the minimum and maximum
* image sizes and makes sure the generated image matches the requirements.
*
* @return
* The path to the new file, in the temporary directory.
*/
function _filefield_generate_file($field) {
if (empty($field['widget']['file_extensions'])) {
$field['widget']['file_extensions'] = 'png jpg txt';
}
$extensions = array_intersect(explode(' ', $field['widget']['file_extensions']), array(
'png',
'jpg',
'txt',
));
$extension = array_rand(drupal_map_assoc($extensions));
if ($extension == 'txt') {
$filesize = empty($field['widget']['max_filesize_per_file']) ? 1024 : parse_size($field['widget']['max_filesize_per_file']);
return _filefield_generate_textfile($filesize);
}
elseif (in_array($extension, array(
'png',
'jpg',
)) && function_exists('imagecreate')) {
$min_resolution = empty($field['widget']['min_resolution']) ? '100x100' : $field['widget']['min_resolution'];
$max_resolution = empty($field['widget']['max_resolution']) ? '600x600' : $field['widget']['max_resolution'];
return _filefield_generate_image($extension, $min_resolution, $max_resolution);
}
return FALSE;
}
/**
* Private function for generating a random text file.
*/
function _filefield_generate_textfile($filesize = 1024) {
static $filesizes = array();
$temp_file = FALSE;
if (isset($filesizes[$filesize])) {
$temp_file = $filesizes[$filesize];
}
elseif ($temp_file = tempnam(file_directory_temp(), 'filefield_')) {
file_move($temp_file, $temp_file . '.txt');
$fp = fopen($temp_file, 'w');
fwrite($fp, str_repeat('01', $filesize / 2));
fclose($fp);
$filesizes[$filesize] = $temp_file;
}
return $temp_file;
}
/**
* Private function for creating a random image.
*
* This function only works with the GD toolkit. ImageMagick is not supported.
*/
function _filefield_generate_image($extension = 'png', $min_resolution, $max_resolution) {
static $images = array();
// Generate a max of 5 different images.
if (!isset($images[$extension][$min_resolution][$max_resolution]) || count($images[$extension][$min_resolution][$max_resolution]) < 5) {
if ($temp_file = tempnam(file_directory_temp(), 'filefield_')) {
file_move($temp_file, $temp_file . '.' . $extension);
$min = explode('x', $min_resolution);
$max = explode('x', $max_resolution);
$width = rand((int) $min[0], (int) $max[0]);
$height = rand((int) $min[0], (int) $max[0]);
// Make a image split into 4 sections with random colors.
$im = imagecreate($width, $height);
for ($n = 0; $n < 4; $n++) {
$color = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
$x = $width / 2 * ($n % 2);
$y = $height / 2 * (int) ($n >= 2);
imagefilledrectangle($im, $x, $y, $x + $width / 2, $y + $height / 2, $color);
}
// Make a perfect circle in the image middle.
$color = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
$smaller_dimension = min($width, $height);
$smaller_dimension = $smaller_dimension % 2 ? $smaller_dimension : $smaller_dimension;
imageellipse($im, $width / 2, $height / 2, $smaller_dimension, $smaller_dimension, $color);
$save_function = 'image' . ($extension == 'jpg' ? 'jpeg' : $extension);
$save_function($im, $temp_file);
$images[$extension][$min_resolution][$max_resolution][$temp_file] = $temp_file;
}
}
else {
$temp_file = array_rand($images[$extension][$min_resolution][$max_resolution]);
}
return $temp_file;
}
Functions
Name | Description |
---|---|
_filefield_content_generate | Private function used by filefield_content_generate(). |
_filefield_generate_file | Generate an image based on the properties of a field. |
_filefield_generate_image | Private function for creating a random image. |
_filefield_generate_textfile | Private function for generating a random text file. |