imageUID = $this->newImageUID();
} else {
// type specific data loading
global $kdb;
$typeData = $kdb->getTypeData($rid, self::$table);
if ( !$typeData ) {
// no image uploaded?
} else {
$this->imageUID = $typeData['imageUID'];
if ($this->imageUID==NULL) {
$this->imageUID = $this->newImageUID();
}
$this->imageUID = $typeData['imageUID'];
$this->imageName = $typeData['imageName'];
$this->size = $typeData['size'];
$this->mime = $typeData['mime'];
$this->width = $typeData['width'];
$this->height = $typeData['height'];
}
}
}
/**
* @Secured('roles' = {'authenticated'}, 'valid' = {})
* */
public function actionSave() {
$this->updateData($_POST);
$this->save();
return array('rid' => $this->getResourceID(), 'mode' => 'view');
}
static function getThumbnail($rid) {
return "images.php?rid=".$rid."&thumb=1";
}
public function getImageURL() {
return "images.php?rid=".$this->getResourceID()."";
}
public function getThumbnailURL() {
return "images.php?rid=".$this->getResourceID()."&thumb=1";
}
public function newImageUID() {
$ts = date('YmdHis');
$rn = rand(1000,9999);
return "image".$ts.$rn;
}
public function getImageUID() {
return $this->imageUID;
}
public function getImageName() {
return $this->imageName;
}
public function getImageSize() {
return $this->size;
}
public function getImageMime() {
return $this->mime;
}
public function getImageWidth() {
return $this->width;
}
public function getImageHeight() {
return $this->height;
}
public function makeXML() {
$xml = 'getImageUID().']]>\n';
$xml .= 'getImageName().']]>\n';
$xml .= 'getImageSize().']]>\n';
$xml .= 'getImageMime().']]>\n';
$xml .= 'getImageWidth().']]>\n';
$xml .= 'getImageHeight().']]>\n';
return $xml;
}
public function makeImageFromXML($xml, $imgfile) {
parent::makeResourceFromXML($xml);
if ($this->getResourceID()!="new"){
if ( $imgfile ) {
$imname = $xml['imageName'];
$fsize = $xml['size'];
$wid = $xml['width'];
$hei = $xml['height'];
$mime = $xml['mime'];
$iuid = $xml['imageUID'];
$q = "INSERT INTO images (resourceID, imageUID, imageName, size, mime, width, height) values (".$this->getResourceID().", '".$iuid."', '".$imname."', ".$fsize.", '".$mime."', ".$wid.", ".$hei.")";
$this->kdb->query($q);
// resize
$maxwidth=180;
$maxheight=80;
$ulfile = IMAGES_PATH.$this->getResourceID();
$imm = imagecreatefromstring($imgfile);
$u_im = imageCreateTrueColor($wid,$hei);
imageCopyResampled($u_im, $imm, 0, 0, 0, 0, $wid, $hei, $wid, $hei);
imagejpeg($u_im, $ulfile);
$currwidth=imagesx($imm);
$currheight=imagesy($imm);
if ( $currheight > $maxheight ) {
$zoom = $maxheight/$currheight;
$newwidth = $currwidth*$zoom;
$newheight = $currheight*$zoom;
}
if ( $newwidth > $maxwidth ) {
$zoom = $maxwidth/$newwidth;
$newwidth = $currwidth*$zoom;
$newheight = $currheight*$zoom;
}
//print "curr:".$currwidth." ".$currheight."
";
//print "new:".$newwidth." ".$newheight."
";
$t_im = imageCreateTrueColor($newwidth,$newheight);
imageCopyResampled($t_im, $imm, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight);
imagejpeg($t_im, $ulfile."_thumb");
} else {
// invalid image
return 1;
}
}
}
/*
* Handles image upload
* 1. extracts and inserts in to images table
* 2. moves to right place
* 3. creates a thumbnail
* */
protected function save() {
$oldrid = $this->getResourceID();
parent::save();
$newrid = $this->getResourceID();
if ( isset($_FILES['imfile']) && is_uploaded_file($_FILES['imfile']['tmp_name']) ) {
$imsize = getimagesize($_FILES['imfile']['tmp_name']);
if ( $imsize != false ) {
global $kdb;
$imname = basename($_FILES['imfile']['name']);
$fsize = $_FILES['imfile']['size'];
$wid = $imsize[0];
$hei = $imsize[1];
$mime = $imsize['mime'];
if ( $oldrid == $newrid ) {
// existing object
$dql = "DELETE FROM images WHERE resourceID=".$newrid;
$kdb->query($dql);
}
$q = "INSERT INTO images (resourceID, imageUID, imageName, size, mime, width, height) values (".$newrid.", '".$this->getImageUID()."', '".$imname."', ".$fsize.", '".$mime."', ".$wid.", ".$hei.")";
$kdb->query($q);
$ulfile = IMAGES_PATH.$newrid;
if ( !move_uploaded_file($_FILES['imfile']['tmp_name'], $ulfile) ) {
// moving problems
return 3;
}
// resize
$maxwidth=180;
$maxheight=80;
$fb = fopen($ulfile, "rb");
$imgdata = "";
while ( !feof($fb) ) {
$imgdata .= fread($fb, 8124);
}
fclose($fb);
$imm = imagecreatefromstring($imgdata);
$currwidth=imagesx($imm);
$currheight=imagesy($imm);
if ( $currheight > $maxheight ) {
$zoom = $maxheight/$currheight;
$newwidth = $currwidth*$zoom;
$newheight = $currheight*$zoom;
}
if ( $newwidth > $maxwidth ) {
$zoom = $maxwidth/$newwidth;
$newwidth = $currwidth*$zoom;
$newheight = $currheight*$zoom;
}
//print "curr:".$currwidth." ".$currheight."
";
//print "new:".$newwidth." ".$newheight."
";
$t_im = imageCreateTrueColor($newwidth,$newheight);
imageCopyResampled($t_im, $imm, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight);
imagejpeg($t_im, $ulfile."_thumb");
} else {
// invalid image
return 1;
}
} else {
// no image
return 2;
}
}
}
?>