dirroot.'/mod/data/field/file/field.class.php');
// Base class is 'file'
class data_field_picture extends data_field_file {
var $type = 'picture';
var $previewwidth = 50;
var $previewheight = 50;
function data_field_picture($field=0, $data=0) {
parent::data_field_base($field, $data);
}
function display_add_field($recordid=0) {
global $CFG;
$filepath = '';
$filename = '';
$description = '';
if ($recordid) {
if ($content = get_record('data_content', 'fieldid', $this->field->id, 'recordid', $recordid)) {
$filename = $content->content;
$description = $content->content1;
}
$path = $this->data->course.'/'.$CFG->moddata.'/data/'.$this->data->id.'/'.$this->field->id.'/'.$recordid;
require_once($CFG->libdir.'/filelib.php');
$filepath = get_file_url("$path/$filename");
}
$str = '
';
return $str;
}
function display_search_field($value = '') {
return '';
}
function parse_search_field() {
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
}
function generate_sql($tablealias, $value) {
return " ({$tablealias}.fieldid = {$this->field->id} AND {$tablealias}.content LIKE '%{$value}%') ";
}
function display_browse_field($recordid, $template) {
global $CFG;
if ($content = get_record('data_content', 'fieldid', $this->field->id, 'recordid', $recordid)){
if (isset($content->content)) {
$contents[0] = $content->content;
$contents[1] = $content->content1;
}
if (empty($contents[0])) {
// Nothing to show
return '';
}
$alt = empty($contents[1])? '':$contents[1];
$title = empty($contents[1])? '':$contents[1];
$src = $contents[0];
$path = $this->data->course.'/'.$CFG->moddata.'/data/'.$this->data->id.'/'.$this->field->id.'/'.$recordid;
$thumbnaillocation = $CFG->dataroot .'/'. $path .'/thumb/'.$src;
require_once($CFG->libdir.'/filelib.php');
$source = get_file_url("$path/$src");
$thumbnailsource = file_exists($thumbnaillocation) ? get_file_url("$path/thumb/$src") : $source;
if ($template == 'listtemplate') {
$width = $this->field->param4 ? ' width="'.s($this->field->param4).'" ' : ' ';
$height = $this->field->param5 ? ' height="'.s($this->field->param5).'" ' : ' ';
$str = '';
} else {
$width = $this->field->param1 ? ' width="'.s($this->field->param1).'" ':' ';
$height = $this->field->param2 ? ' height="'.s($this->field->param2).'" ':' ';
$str = '';
}
return $str;
}
return false;
}
function update_field() {
// Get the old field data so that we can check whether the thumbnail dimensions have changed
$oldfield = get_record('data_fields', 'id', $this->field->id);
if (!update_record('data_fields', $this->field)) {
notify('updating of new field failed!');
return false;
}
// Have the thumbnail dimensions changed?
if ($oldfield && ($oldfield->param4 != $this->field->param4 || $oldfield->param5 != $this->field->param5)) {
// Check through all existing records and update the thumbnail
if ($contents = get_records('data_content', 'fieldid', $this->field->id)) {
if (count($contents) > 20) {
notify(get_string('resizingimages', 'data'), 'notifysuccess');
echo "\n\n";
// To make sure that ob_flush() has the desired effect
ob_flush();
}
foreach ($contents as $content) {
@set_time_limit(300);
// Might be slow!
$this->update_thumbnail($content);
}
}
}
return true;
}
function update_content($recordid, $value, $name) {
parent::update_content($recordid, $value, $name);
$content = get_record('data_content','fieldid', $this->field->id, 'recordid', $recordid);
$this->update_thumbnail($content);
// Regenerate the thumbnail
}
function update_thumbnail($content) {
// (Re)generate thumbnail image according to the dimensions specified in the field settings.
// If thumbnail width and height are BOTH not specified then no thumbnail is generated, and
// additionally an attempted delete of the existing thumbnail takes place.
global $CFG;
require_once($CFG->libdir . '/gdlib.php');
$datalocation = $CFG->dataroot .'/'.$this->data->course.'/'.$CFG->moddata.'/data/'.
$this->data->id.'/'.$this->field->id.'/'.$content->recordid;
$originalfile = $datalocation.'/'.$content->content;
if (!file_exists($originalfile)) {
return;
}
if (!file_exists($datalocation.'/thumb')) {
mkdir($datalocation.'/thumb', $CFG->directorypermissions);
// robertall: Why hardcode 0777??
}
$thumbnaillocation = $datalocation.'/thumb/'.$content->content;
$imageinfo = GetImageSize($originalfile);
$image->width = $imageinfo[0];
$image->height = $imageinfo[1];
$image->type = $imageinfo[2];
if (!$image->width || !$image->height) {
// Should not happen
return;
}
switch ($image->type) {
case 1:
if (function_exists('ImageCreateFromGIF')) {
$im = ImageCreateFromGIF($originalfile);
} else {
return;
}
break;
case 2:
if (function_exists('ImageCreateFromJPEG')) {
$im = ImageCreateFromJPEG($originalfile);
} else {
return;
}
break;
case 3:
if (function_exists('ImageCreateFromPNG')) {
$im = ImageCreateFromPNG($originalfile);
} else {
return;
}
break;
}
$thumbwidth = isset($this->field->param4)?$this->field->param4:'';
$thumbheight = isset($this->field->param5)?$this->field->param5:'';
if ($thumbwidth || $thumbheight) {
// Only if either width OR height specified do we want a thumbnail
$wcrop = $image->width;
$hcrop = $image->height;
if ($thumbwidth && !$thumbheight) {
$thumbheight = $image->height * $thumbwidth / $image->width;
} else if($thumbheight && !$thumbwidth) {
$thumbwidth = $image->width * $thumbheight / $image->height;
} else {
// BOTH are set - may need to crop if aspect ratio differs
$hratio = $image->height / $thumbheight;
$wratio = $image->width / $thumbwidth;
if ($wratio > $hratio) {
// Crop the width
$wcrop = intval($thumbwidth * $hratio);
} elseif($hratio > $wratio) {
//Crop the height
$hcrop = intval($thumbheight * $wratio);
}
}
// At this point both $thumbwidth and $thumbheight are set, and $wcrop and $hcrop
if (function_exists('ImageCreateTrueColor') and $CFG->gdversion >= 2) {
$im1 = ImageCreateTrueColor($thumbwidth,$thumbheight);
} else {
$im1 = ImageCreate($thumbwidth,$thumbheight);
}
if ($image->type == 3) {
// Prevent alpha blending for PNG images
imagealphablending($im1, false);
}
$cx = $image->width / 2;
$cy = $image->height / 2;
// These "half" measurements use the "crop" values rather than the actual dimensions
$halfwidth = floor($wcrop * 0.5);
$halfheight = floor($hcrop * 0.5);
ImageCopyBicubic($im1, $im, 0, 0, $cx-$halfwidth, $cy-$halfheight,
$thumbwidth, $thumbheight, $halfwidth*2, $halfheight*2);
if ($image->type == 3) {
// Save alpha transparency for PNG images
imagesavealpha($im1, true);
}
if (function_exists('ImageJpeg') && $image->type != 3) {
@touch($thumbnaillocation);
// Helps in Safe mode
if (ImageJpeg($im1, $thumbnaillocation, 90)) {
@chmod($thumbnaillocation, 0666);
// robertall: Why hardcode 0666??
}
} elseif (function_exists('ImagePng') && $image->type == 3) {
@touch($thumbnaillocation);
// Helps in Safe mode
if (ImagePng($im1, $thumbnaillocation, 9)) {
@chmod($thumbnaillocation, 0666);
// robertall: Why hardcode 0666??
}
}
} else {
// Try to remove the thumbnail - we don't want thumbnailing active
@unlink($thumbnaillocation);
}
}
function text_export_supported() {
return false;
}
}
?>