508 lines
14 KiB
PHP
508 lines
14 KiB
PHP
<?php
|
|
define("PATH_PHPMYBORDER", "/phpMyBorder/"); // path from doc_root
|
|
// e.g if this script is accessable via
|
|
// www.domain.com/scripts/phpMyborder.php
|
|
// PATH_PHPMYBORDER = "/scripts/"
|
|
/*
|
|
|
|
|
|
___[ PhpMyBorder v0.1 beta ]____
|
|
/ \
|
|
| Created by |
|
|
| Vidar Vestnes |
|
|
| (c)2005 |
|
|
| |
|
|
\___[ Norway ]___________________/
|
|
|
|
Licence: Freely distributed
|
|
|
|
|
|
Check for new version
|
|
|
|
http://www.phpmyborder.com
|
|
|
|
|
|
|
|
HOW TO USE:
|
|
|
|
include this file in your script
|
|
|
|
include_once("phpMyBorder/phpMyBorder1.class.php");
|
|
|
|
add a bordergenerator
|
|
|
|
$pmb = new PhpMyBorder();
|
|
|
|
|
|
Now you are ready to output borders.
|
|
Use the function border_start to begin the border
|
|
|
|
echo $pmb->border_start(); // using the defaults
|
|
echo "Your content here..."";
|
|
echo $pmb->border_end();
|
|
|
|
border_start have these attributes to help you customize your border.
|
|
|
|
border_start(
|
|
$width = false, // pixel e.g. "250px"
|
|
$color = false, // hex e.g "DDEEFF"
|
|
$cornersize = false, // 5-50
|
|
$borderthickness = false, // 1-3
|
|
$style = false // 1 or 2 (1=filled, 2=outline)
|
|
)
|
|
|
|
|
|
always remember to close your border by calling border_end()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example: test.php
|
|
|
|
|
|
<html>
|
|
<head>
|
|
<title>PhpMyBorder Demo</title>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<?php
|
|
|
|
require_once('phpMyBorder/phpMyBorder1.class.php');
|
|
$pmb = new PhpMyBorder();
|
|
|
|
echo $pmb->border_start();
|
|
echo "Test1 - Default border";
|
|
echo $pmb->border_end();
|
|
|
|
echo "<br>";
|
|
|
|
echo $pmb->border_start("300px","FF0000",20);
|
|
echo "Test2 - width: 300px, fillcolor: FF0000 (red), cornersize : 20px (radius);";
|
|
echo $pmb->border_end();
|
|
|
|
echo "<br>";
|
|
|
|
echo $pmb->border_start("250px","FF5500",7,2,2);
|
|
echo "Test2 - width: 250px, fillcolor: FF5500 (orange), cornersize : 7px (radius), borderthickness: 2px, style : 2 (outlined);";
|
|
echo $pmb->border_end();
|
|
|
|
?>
|
|
|
|
</body>
|
|
</html>
|
|
|
|
|
|
*/
|
|
|
|
|
|
class PhpMyBorder{
|
|
|
|
//part of the border to painted
|
|
var $paint;
|
|
|
|
//properies of the border
|
|
var $property;
|
|
|
|
//gif which is rendered, a part of the border.
|
|
var $image;
|
|
|
|
//width of the complete border
|
|
var $width;
|
|
|
|
// constructor of the class
|
|
function PhpMyBorder(){
|
|
|
|
$this->checkFunctions();
|
|
|
|
$this->checkCacheDir();
|
|
|
|
//creates a dummy picutre
|
|
$this->image = imagecreatetruecolor(1, 1);
|
|
|
|
//set defaults
|
|
$this->setStyle (1); // 1 = FILLED, 2 = OUTLINE
|
|
$this->setColor ('DDEEFF'); // fill and outlined border color
|
|
$this->setCornerSize (5); // integer 5-50
|
|
$this->setBorderThickness (2); // integer 1-3
|
|
}
|
|
|
|
function checkFunctions(){
|
|
$functions = array(
|
|
"imagegif",
|
|
"sscanf",
|
|
"imagecopymerge",
|
|
"imagerotate",
|
|
"imagecreatetruecolor",
|
|
"ob_start",
|
|
"imagefill"
|
|
);
|
|
|
|
for($i=0;$i<count($functions);$i++){
|
|
$func = $functions[$i];
|
|
if(!function_exists($func)) {
|
|
$msg = "
|
|
PHP function <B>$func</B> is missing.<BR>
|
|
<BR>
|
|
<i>
|
|
This function is requiered by phpMyBorder. This version of PHP does not support phpMyBorder.<BR>
|
|
Try uppgrading you PHP installation.
|
|
</i>
|
|
";
|
|
$this->fatal_error($msg,1);
|
|
}
|
|
}
|
|
}
|
|
//sets the border color
|
|
function setColor($color){
|
|
$this->setProp('color', $color."000000");
|
|
}
|
|
|
|
//gets the color (HTML hex format)
|
|
function getColor(){
|
|
return substr($this->getProp('color'),0,6);
|
|
}
|
|
|
|
function getColorAllocate(){
|
|
sscanf($this->getColor(), "%2x%2x%2x", $red, $green, $blue);
|
|
return imagecolorallocate($this->image, $red, $green, $blue );
|
|
}
|
|
|
|
//gets the color which to be transparent
|
|
function getTransparentAllocate(){
|
|
sscanf("FF0000", "%2x%2x%2x", $red, $green, $blue);
|
|
|
|
$transparent = imagecolorallocate($this->image, $red, $green, $blue );
|
|
|
|
if($this->getColorAllocate() == $transparent){
|
|
sscanf("0000FF", "%2x%2x%2x", $red, $green, $blue);
|
|
$transparent =imagecolorallocate($this->image, $red, $green, $blue );
|
|
}
|
|
return $transparent;
|
|
}
|
|
|
|
function checkCacheDir(){
|
|
|
|
$dir_script = dirname(__FILE__);
|
|
$dir_cache = $this -> getPathCache();
|
|
|
|
$dir_abs = $dir_script."/".$this -> getPathCache();
|
|
|
|
if(is_writable($dir_abs)) return true;
|
|
|
|
clearstatcache();
|
|
|
|
if(!is_writeable($dir_script)){
|
|
$error = "
|
|
Directory <B>$dir_script</b> is not writable. <BR>
|
|
<BR>
|
|
<i>
|
|
The directory which you have put the phpMyBorder script is not writable.<BR>
|
|
Make sure that PHP has write permission to this path to be able to cache borders (gifs images)<BR>
|
|
Use chmod to solve the problem ( Unix and Linux ).
|
|
</i>
|
|
";
|
|
$this->fatal_error($error, 2);
|
|
}
|
|
|
|
|
|
if(is_dir($dir_abs) && !is_writeable($dir_abs) ) {
|
|
$error = "
|
|
Directory <B>$dir_abs</b> is not writable. <BR>
|
|
<BR>
|
|
<i>
|
|
The cachedir is not writable.<BR>
|
|
Make sure that PHP has write permission to this path to be able to cache borders (gifs images)<BR>
|
|
Use chmod to solve the problem ( Unix and Linux ).
|
|
</i>
|
|
";
|
|
$this->fatal_error($error, 2);
|
|
}
|
|
|
|
if(!@mkdir($dir_abs)){
|
|
$error = "
|
|
Failed to create directory <B>$dir_abs</b>. <BR>
|
|
<BR>
|
|
<i>
|
|
This directory is needed to cache borders (gifs images)<BR>
|
|
</i>
|
|
";
|
|
$this->fatal_error($error,3);
|
|
}
|
|
|
|
clearstatcache();
|
|
|
|
if(!is_writeable($dir_abs)){
|
|
$error = "
|
|
Cache directory does not exist : <B>$dir_abs</b>. <BR>
|
|
<BR>
|
|
<i>
|
|
This directory is needed to cache borders (gifs images)<BR>
|
|
</i>
|
|
";
|
|
$this->fatal_error($error , 4);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function fatal_error($error,$nr = false){
|
|
$msg =
|
|
"
|
|
<HTML>
|
|
<BODY style=\"font-family: Microsoft Sans Serif,helvetica, arial; font-size:14; \">
|
|
<H1 style=\"color:#FF0000; font-size:15px;margin:0px;\">PhpMyBorder failure :</H1><BR>
|
|
<BR>
|
|
ErrorMessage [ $nr ] : <BR>
|
|
<BR>
|
|
$error
|
|
<BR>
|
|
<BR>
|
|
- phpMyBorder
|
|
</BODY>
|
|
</HTML>
|
|
";
|
|
die($msg);
|
|
}
|
|
|
|
|
|
//gets scriptpath
|
|
function getPathScript(){
|
|
$path = str_replace("\\","/",PATH_PHPMYBORDER);
|
|
$path = substr($path,-1 )!= "/" ? $path."/" : $path;
|
|
return $path;
|
|
}
|
|
|
|
function getPathCache(){
|
|
return "cache";
|
|
}
|
|
|
|
function getAbsolutePathCache(){
|
|
$path = dirname(__FILE__)."/".$this->getPathCache();
|
|
$path = str_replace("\\","/",$path);
|
|
$path = str_replace("//","/",$path);
|
|
|
|
return $path;
|
|
}
|
|
|
|
//checks if a part (gif) is cached
|
|
function isCached(){
|
|
$path = $this->getAbsolutePathCache()."/".$this->getFileName();
|
|
return is_file($path);
|
|
}
|
|
|
|
//sets which part of the table to be paintet 1-9 (1 is upper left, 9 is bottom right)
|
|
function paint($paint){
|
|
$this->paint = $paint;
|
|
}
|
|
|
|
//setting style, (outlined or filled)
|
|
function setStyle($style = 1){
|
|
$this->setProp('style',$style);
|
|
}
|
|
|
|
//return choosen style
|
|
function getStyle(){
|
|
return $this->getProp('style');
|
|
}
|
|
|
|
function setBorderWidth($width){
|
|
$this->width = $width;
|
|
}
|
|
|
|
function getBorderWidth(){
|
|
return $this->width;
|
|
}
|
|
|
|
//sets the corersize (pixel)
|
|
function setCornerSize($size){
|
|
$size = $size<5 ? 5 : $size;
|
|
$size = $size>50 ? 50 : $size;
|
|
$this->setProp('cornersize',$size);
|
|
}
|
|
|
|
//gets the cornersize
|
|
function getCornerSize(){
|
|
return $this->getProp('cornersize');
|
|
}
|
|
|
|
//sets the boderthickness
|
|
function setBorderThickness($thick) {
|
|
$thick = $thick<1 ? 1 : $thick;
|
|
$thick = $thick>3 ? 3 : $thick;
|
|
|
|
$this->setProp('thick',$thick);
|
|
}
|
|
|
|
// gets the borderthickness
|
|
function getThick(){
|
|
return $this->getProp('thick');
|
|
}
|
|
|
|
// checks if the current part is a tablecorner or an edge
|
|
function isCorner(){
|
|
return $this->paint % 2 == 1;
|
|
}
|
|
|
|
//store a property about the gif
|
|
function setProp($prop,$value){
|
|
return $this->property[$prop] = $value;
|
|
}
|
|
|
|
//returns a property
|
|
function getProp($prop){
|
|
return $this->property[$prop];
|
|
}
|
|
|
|
// flips a image
|
|
function ImageFlip($type){
|
|
$imgsrc = $this->image;
|
|
|
|
$width = imagesx($imgsrc);
|
|
$height = imagesy($imgsrc);
|
|
|
|
$imgdest = imagecreatetruecolor($width, $height);
|
|
ImageAlphaBlending($imgdest, false);
|
|
|
|
switch( $type ) {
|
|
case 1:
|
|
for( $y=0 ; $y<$height ; $y++ )
|
|
imagecopymerge($imgdest, $imgsrc, 0, $height-$y-1, 0, $y, $width, 1,100);
|
|
break;
|
|
|
|
case 2:
|
|
for( $x=0 ; $x<$width ; $x++ )
|
|
imagecopymerge($imgdest, $imgsrc, $width-$x-1, 0, $x, 0, 1, $height,100);
|
|
break;
|
|
|
|
case 3:
|
|
for( $x=0 ; $x<$width ; $x++ )
|
|
imagecopymerge($imgdest, $imgsrc, $width-$x-1, 0, $x, 0, 1, $height,100);
|
|
|
|
$rowBuffer = imagecreatetruecolor($width, 1);
|
|
for( $y=0 ; $y<($height/2) ; $y++ )
|
|
{
|
|
imagecopymerge($rowBuffer, $imgdest , 0, 0, 0, $height-$y-1, $width, 1,100);
|
|
imagecopymerge($imgdest , $imgdest , 0, $height-$y-1, 0, $y, $width, 1,100);
|
|
imagecopymerge($imgdest , $rowBuffer, 0, $y, 0, 0, $width, 1,100);
|
|
}
|
|
|
|
imagedestroy( $rowBuffer );
|
|
break;
|
|
}
|
|
$this->image = $imgdest;
|
|
}
|
|
|
|
// caches the image
|
|
function save(){
|
|
imagegif($this->image, $this->getAbsolutePathCache()."/".$this->getFilename());
|
|
}
|
|
|
|
//render the actual gif with assigned setting
|
|
function render(){
|
|
|
|
$line = $this->getThick();
|
|
|
|
//creates the real imagesize
|
|
$this->image = imagecreatetruecolor($this->getCornerSize(), $this->getCornerSize());
|
|
|
|
//fill the complete image with a transparent color
|
|
imagefill($this->image, 0, 0, $this->getTransparentAllocate());
|
|
|
|
//paints
|
|
if($this->isCorner()){
|
|
imagefilledellipse($this->image, $this->getCornerSize(), $this->getCornerSize(), $this->getCornerSize()*2, $this->getCornerSize()*2, $this->getColorAllocate());
|
|
if($this->getStyle() == 2){
|
|
//paints another ellipse with transparent-color to make it look like outlined
|
|
imagefilledellipse($this->image, $this->getCornerSize(), $this->getCornerSize(), ($this->getCornerSize()-$line)*2, ($this->getCornerSize()-$line)*2, $this->getTransparentAllocate());
|
|
}
|
|
}else{
|
|
imagefilledrectangle( $this->image, 0, 0, $this->getCornerSize() ,$this->getCornerSize(), $this->getColorAllocate() );
|
|
if($this->getStyle() == 2){
|
|
imagefilledrectangle( $this->image, 0, $line, $this->getCornerSize() ,$this->getCornerSize(), $this->getTransparentAllocate() );
|
|
}
|
|
}
|
|
|
|
//rotates or flips the image to fit part
|
|
switch($this->paint){
|
|
|
|
CASE 6 : $this->rotate(90) ; break;
|
|
CASE 4 : $this->rotate(270) ; break;
|
|
CASE 8 : $this->rotate(180) ; break;
|
|
CASE 3 : $this->imageFlip(2) ; break;
|
|
CASE 7 : $this->imageFlip(1) ; break;
|
|
CASE 9 : $this->imageFlip(3) ; break;
|
|
}
|
|
|
|
imagecolortransparent($this->image, $this->getTransparentAllocate());
|
|
|
|
ImageTrueColorToPalette( $this->image, TRUE, 256 );
|
|
}
|
|
|
|
//rotate the gif
|
|
function rotate($degree){
|
|
$this->image = imagerotate($this->image,360-$degree,0);
|
|
}
|
|
|
|
//get filename based on properties
|
|
function getFilename(){
|
|
return implode("_", $this->property)."_".$this->paint.".gif";
|
|
}
|
|
|
|
//generate the url to be set as (tablecell) background
|
|
function getUrl($paint){
|
|
$this->paint($paint);
|
|
|
|
if(!$this->isCached()){
|
|
$this->render();
|
|
$this->save();
|
|
}
|
|
|
|
return PATH_PHPMYBORDER.$this->getPathCache()."/".$this->getFilename();
|
|
}
|
|
|
|
//starts printing the border
|
|
function border_start($width = false,$color = false, $cornersize = false, $borderthickness = false,$style = false){
|
|
if($color) $this->setColor ($color);
|
|
if($cornersize) $this->setCornerSize ($cornersize);
|
|
if($borderthickness) $this->setBorderThickness ($borderthickness);
|
|
if($style) $this->setStyle ($style);
|
|
|
|
$style = "";
|
|
if($width) $style.="width : $width ;";
|
|
if($style != "") $style = "style=\"$style\"";
|
|
?>
|
|
|
|
<TABLE cellSpacing=0 cellPadding=0 <?=$style?> >
|
|
<TR>
|
|
<TD style="width:<?=$this->getCornerSize()?>px; height:<?=$this->getCornerSize()?>px; background : url(<?=$this->getUrl(1)?>);"></TD>
|
|
<TD style="background-image:url(<?=$this->getUrl(2)?>); background-repeat:repeat-x;"></TD>
|
|
<TD style="width:<?=$this->getCornerSize()?>px; height:<?=$this->getCornerSize()?>px; background-image: url(<?=$this->getUrl(3)?>);"></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD style="background-image:url(<?=$this->getUrl(4)?>); background-repeat:repeat-y ;"></TD>
|
|
<TD style="background: <?= $this->getStyle() == 1 ? "#".$this->getColor() : "transparent";?>;">
|
|
<?php
|
|
}
|
|
|
|
//end the border...
|
|
function border_end(){
|
|
?>
|
|
</TD>
|
|
<TD style="background-image:url(<?=$this->getUrl(6)?>); background-repeat:repeat-y;"></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD style="width:<?=$this->getCornerSize()?>px; height:<?=$this->getCornerSize()?>px; background-image: url(<?=$this->getUrl(7)?>);"></TD>
|
|
<TD style="background-image:url(<?=$this->getUrl(8)?>); background-repeat:repeat-x;"></TD>
|
|
<TD style="width:<?=$this->getCornerSize()?>px; height:<?=$this->getCornerSize()?>px; background-image: url(<?=$this->getUrl(9)?>);"></TD>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<?php
|
|
}
|
|
}
|
|
$phpMyBorder = new PhpMyBorder();
|
|
?>
|