328 lines
9.0 KiB
PHP
328 lines
9.0 KiB
PHP
<?php
|
|
|
|
/** Alternating Image Block
|
|
* An image block with 7 images that are alternated on each day of the week
|
|
*
|
|
* @version 1.0.1
|
|
* @since 2007-08-08
|
|
* @author martin lenzelbauer
|
|
*
|
|
* @change 2007-10-04
|
|
* added captions
|
|
*/
|
|
class AlternatingImageBlock extends BuildingBlock{
|
|
|
|
var $files; //file names
|
|
var $hyperlinks; //hyperlink
|
|
var $captions; //captions
|
|
|
|
var $imgDir; //output directory for images
|
|
var $maxWidth;
|
|
var $maxHeight;
|
|
var $displayWidth;//max width to display image in cms
|
|
|
|
|
|
/** C'tor
|
|
*/
|
|
//------------------------------------------------
|
|
function AlternatingImageBlock($id=0){
|
|
//------------------------------------------------
|
|
parent::BuildingBlock($id);
|
|
$this->files = array(7);
|
|
$this->hyperlinks = array(7);
|
|
for($i=0; $i<7; $i++){
|
|
$this->files[$i] = "";
|
|
$this->hyperlinks[$i] = "";
|
|
$this->captions[$i] = "";
|
|
}
|
|
$this->displayWidth = 540;
|
|
$this->imgDir = IMG_DIR;
|
|
$this->setSize();
|
|
}
|
|
|
|
|
|
/** @see BuildingBlock::install()
|
|
*/
|
|
//-----------------------------------------------
|
|
function install(){
|
|
//-----------------------------------------------
|
|
$query = sprintf("CREATE TABLE IF NOT EXISTS bruckm_alternatingimageblock (
|
|
id INT not null AUTO_INCREMENT,
|
|
files TEXT not null,
|
|
hyperlinks TEXT not null,
|
|
captions TEXT not null,
|
|
PRIMARY KEY(id)
|
|
)");
|
|
$result = dbQuery($query);
|
|
}
|
|
|
|
|
|
/** @see BuildingBlock::load()
|
|
*/
|
|
//-------------------------------------------------
|
|
function load(){
|
|
//-------------------------------------------------
|
|
$query = sprintf("SELECT * FROM bruckm_alternatingimageblock WHERE id = %d", $this->id);
|
|
$result = dbQuery($query);
|
|
$line = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
|
$this->files = explode("\t", $line['files']);
|
|
$this->hyperlinks = explode("\t", $line['hyperlinks']);
|
|
$this->captions = explode("\t", $line['captions']);
|
|
}
|
|
|
|
|
|
/** @see BuildingBlock::doSave()
|
|
*/
|
|
//-----------------------------------------------
|
|
function doSave(){
|
|
//-----------------------------------------------
|
|
$query = sprintf("UPDATE bruckm_alternatingimageblock SET files = %s, hyperlinks = %s, captions = %s WHERE id = %d",
|
|
sqlstring(implode("\t", $this->files)),
|
|
sqlstring(implode("\t", $this->hyperlinks)),
|
|
sqlstring(implode("\t", $this->captions)),
|
|
$this->id);
|
|
dbQuery($query);
|
|
}
|
|
|
|
|
|
/** @see BuildingBlock::doCreate()
|
|
*/
|
|
//-----------------------------------------------
|
|
function doCreate(){
|
|
//-----------------------------------------------
|
|
$query = sprintf("INSERT INTO bruckm_alternatingimageblock (files, hyperlinks, captions) VALUES (%s, %s, %s)",
|
|
sqlstring(""),
|
|
sqlstring(""),
|
|
sqlstring(""));
|
|
dbQuery($query);
|
|
return mysql_insert_id();
|
|
}
|
|
|
|
|
|
/** @see BuildingBlock::delete()
|
|
*/
|
|
//-------------------------------------------------
|
|
function delete(){
|
|
//-------------------------------------------------
|
|
$query = sprintf("DELETE FROM bruckm_alternatingimageblock WHERE id = %d", $this->id);
|
|
dbQuery($query);
|
|
foreach($this->files as $file){
|
|
@unlink($this->imgDir.$file);
|
|
}
|
|
}
|
|
|
|
|
|
/** @see BuildingBlock::update()
|
|
*/
|
|
//-----------------------------------------------
|
|
function update(){
|
|
//-----------------------------------------------
|
|
for($i=0; $i<7; $i++){
|
|
if(isset($_FILES["imageblock_file".$this->id."_".$i]) && $_FILES["imageblock_file".$this->id."_".$i]['error'] == UPLOAD_ERR_OK){
|
|
if($this->files[$i]){
|
|
@unlink($this->imgDir.$this->files[$i]);
|
|
}
|
|
$this->files[$i] = $this->findName($this->imgDir, $_FILES["imageblock_file".$this->id."_".$i]['name']);
|
|
$this->uploadImage($_FILES["imageblock_file".$this->id."_".$i], $this->imgDir.$this->files[$i]);
|
|
}
|
|
$this->hyperlinks[$i] = trim($_POST["imageblock_hyperlink".$this->id."_".$i]);
|
|
$this->captions[$i] = trim($_POST["imageblock_caption".$this->id."_".$i]);
|
|
}
|
|
}
|
|
|
|
|
|
/** @see BuildingBlock::printContent()
|
|
*/
|
|
//-----------------------------------------------
|
|
function printContent($position){
|
|
//-----------------------------------------------
|
|
$t = new Template(CMS_TEMPLATE_DIR."alternatingimageblock.html");
|
|
$t->setVar("ID", $this->id);
|
|
$t->setVar("POSITION", $position);
|
|
for($i=0; $i<7; $i++){
|
|
if($this->hyperlinks[$i]){
|
|
$t->setVar("HYPERLINK_$i", htmlspecialchars($this->hyperlinks[$i]));
|
|
}
|
|
else{
|
|
$t->setVar("HYPERLINK_$i", "");
|
|
}
|
|
$t->setVar("CAPTION_$i", htmlspecialchars($this->captions[$i]));
|
|
if($this->files[$i] && file_exists($this->imgDir.$this->files[$i])){
|
|
$t->setVar("PATH_$i", $this->imgDir.$this->files[$i]);
|
|
$imgSize = getImageSize($this->imgDir.$this->files[$i]);
|
|
$width = $imgSize[0];
|
|
$height = $imgSize[1];
|
|
if($width > $this->displayWidth){
|
|
$height = round($height * ($this->displayWidth/$width));
|
|
$width = $this->displayWidth;
|
|
}
|
|
$t->setVar("WIDTH_$i", $width);
|
|
$t->setVar("HEIGHT_$i", $height);
|
|
}
|
|
else{
|
|
$t->removeBlock("IMAGE_$i");
|
|
}
|
|
}
|
|
return $t->toString();
|
|
}
|
|
|
|
|
|
/** @see BuildingBlock::publish()
|
|
*/
|
|
//----------------------------------------------
|
|
function publish(){
|
|
//----------------------------------------------
|
|
//select day of week
|
|
$day = (date("w") + 6) % 7;
|
|
if(empty($this->files[$day])){
|
|
$day = -1;
|
|
$i = 0;
|
|
//if no image exists for this day -> search for any other image
|
|
while($day < 0){
|
|
if(!empty($this->files[$i])){
|
|
$day = $i;
|
|
}
|
|
$i++;
|
|
}
|
|
if($day < 0){
|
|
logError(3, "no images uploaded (id: ".$this->id.")", __FILE__, __LINE__);
|
|
return "";
|
|
}
|
|
}
|
|
if($this->captions[$day]){
|
|
$alt = htmlspecialchars($this->captions[$day]);
|
|
}
|
|
else{
|
|
$alt = "Bild des Tages";
|
|
}
|
|
$img = "<img src=\"images/".$this->files[$day]."\" alt=\"$alt\" />";
|
|
if(empty($this->hyperlinks[$day])){
|
|
return $img."<br />";
|
|
}
|
|
else{
|
|
return "<a href=\"".$this->hyperlinks[$day]."\" target=\"_self\">$img</a><br />\n";
|
|
}
|
|
}
|
|
|
|
|
|
// === ADDITIONAL METHODS ======================================================== //
|
|
|
|
|
|
/** uploads an image file
|
|
* @param file $_FILES file data
|
|
*/
|
|
//------------------------------------------------
|
|
function uploadImage($file, $path){
|
|
//------------------------------------------------
|
|
|
|
//resize image
|
|
$imgSize = getImageSize($file['tmp_name']);
|
|
if($imgSize[0] > $this->maxWidth || $imgSize[1] > $this->maxHeight){
|
|
switch($imgSize[2]){
|
|
case 1: //gif
|
|
$original = imageCreateFromGif($file['tmp_name']);
|
|
break;
|
|
case 2: //jpg
|
|
$original = imageCreateFromJpeg($file['tmp_name']);
|
|
break;
|
|
case 3: //png
|
|
$original = imageCreateFromPng($file['tmp_name']);
|
|
break;
|
|
}
|
|
$origWidth = $imgSize[0];
|
|
$origHeight = $imgSize[1];
|
|
$width = $origWidth;
|
|
$height = $origHeight;
|
|
if($width > $this->maxWidth){
|
|
$fact = $this->maxWidth/$origWidth;
|
|
$width *= $fact;
|
|
$height *= $fact;
|
|
}
|
|
if($height > $this->maxHeight){
|
|
$fact = $this->maxHeight/$height;
|
|
$width *= $fact;
|
|
$height *= $fact;
|
|
}
|
|
$small = imageCreateTrueColor($width,$height);
|
|
imageCopyResampled($small, $original, 0, 0, 0, 0, $width, $height, $origWidth, $origHeight);
|
|
switch($imgSize[2]){
|
|
case 1:
|
|
if(!@imageGif($small, $path)){
|
|
logError(4, "Could not create gif image: $path", __FILE__, __LINE__);
|
|
return "";
|
|
}
|
|
break;
|
|
case 2:
|
|
if(!@imageJpeg($small, $path, 100)){
|
|
logError(4, "Could not create jpg image: $path", __FILE__, __LINE__);
|
|
return "";
|
|
}
|
|
break;
|
|
case 3:
|
|
if(!@imagePng($small, $path)){
|
|
logError(4, "Could not create png image: $path", __FILE__, __LINE__);
|
|
return "";
|
|
}
|
|
break;
|
|
}
|
|
imageDestroy($small);
|
|
imageDestroy($original);
|
|
@chmod($path, 0777);
|
|
}
|
|
else{
|
|
move_uploaded_file($file['tmp_name'], $path);
|
|
//copy($file['tmp_name'], $path);
|
|
@chmod($path, 0777);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/** sets the image and thumb size
|
|
*/
|
|
//-----------------------------------------------
|
|
function setSize($maxW=580, $maxH=1000){
|
|
//-----------------------------------------------
|
|
$this->maxWidth = $maxW;
|
|
$this->maxHeight = $maxH;
|
|
}
|
|
|
|
|
|
|
|
/** finds a path that does not exist
|
|
* @param dir target directory
|
|
* @param name name of the source image
|
|
* @return filename in the target directory that does not exist
|
|
*/
|
|
//-----------------------------------------------
|
|
function findName($dir, $name){
|
|
//-----------------------------------------------
|
|
$name = strtolower($name);
|
|
$name = str_replace("ä", "ae", $name);
|
|
$name = str_replace("ö", "oe", $name);
|
|
$name = str_replace("ü", "ue", $name);
|
|
$name = str_replace("ß", "sz", $name);
|
|
$name = ereg_replace("[^A-Za-z0-9\.-_]", "", $name);
|
|
if(!file_exists($dir.$name)){
|
|
return $name;
|
|
}
|
|
|
|
//extract file extension
|
|
$dot = strrpos($name, ".");
|
|
$ext = substr($name, $dot+1);
|
|
$name = substr($name, 0, $dot);
|
|
|
|
//add 3-digit number
|
|
$count = 1;
|
|
while(file_exists(sprintf("%s%s%03d.%s", $dir, $name, $count, $ext))){
|
|
$count++;
|
|
}
|
|
return sprintf("%s%03d.%s", $name, $count, $ext);
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
?>
|