Files
bm/public_html/public/cms/modules/alternatingimageblock.class.php
2025-09-24 13:26:28 +02:00

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);
}
};
?>