mi script navideño

3 12 2009

El espíritu de las compras fiestas ya esta en casi todas partes, y no podía faltar el script que planifique en sueños y termine en unas horas.

El objetivo es mostrar una representación de la velas de la corona de adviento usando PHP, al final se encuentra el enlace para descarga de todos los archivos y una muestra funcional:

<?php 
/*
adventus reminder by FCR copyleft 2009
genera  una imagen que representa el numero de velas ya encendiadas en la corona de aviento.
Si falta menos deuna semana(es en eldomingo de la semana actual) aparecen 4 velas apagadas
Si todavia no es tiempo de adviento, coloca un GIF transparente.
Mas en: https://incendialaciudad.wordpress.com/2009/12/03/mi-script-navideno
Usado http://www.online-image-editor.com/ para poner fondo transparente a algunas imagenes
*/
if(isset($_GET['getyours']) && $_GET['getyours']<>""){include('mostrarcodigo.html');exit;}
date_default_timezone_set("America/Lima");//La zona horaria, https://incendialaciudad.wordpress.com/2009/09/10/selectatimezone/

$mWidth = 60;
$mHeight = 33;
$year = date("Y");
$dia = date("j"); 
$mes = date("n");  
$bisiesto = date("L"); 
$numerodia = date("z"); 
$velas = array ("semana0_prontoinicia.gif","semana1.gif","semana2.gif","semana3.gif","semana4.gif");

$caso1 = date("N", mktime(0, 0, 0, 11, 27, $year));//27
$caso2 = date("N", mktime(0, 0, 0, 11, 28, $year));//28
$caso3 = date("N", mktime(0, 0, 0, 11, 29, $year));//29
$caso4 = date("N", mktime(0, 0, 0, 11, 30, $year));//30
$caso5 = date("N", mktime(0, 0, 0, 12, 1, $year));//31
$caso6 = date("N", mktime(0, 0, 0, 12, 2, $year));//32
$caso7 = date("N", mktime(0, 0, 0, 12, 3, $year));//33

$caso1fechas = array(20,27,34,41,48,10);
$caso2fechas = array(21,28,35,42,49,11);
$caso3fechas = array(22,29,36,43,50,12);
$caso4fechas = array(23,30,37,44,51,13);
$caso5fechas = array(24,31,38,45,52,14);
$caso6fechas = array(25,32,39,46,53,15);
$caso7fechas = array(26,33,40,47,54,16);

$casos = array();
$casos[] = (array($caso1,$caso1fechas));
$casos[] = (array($caso2,$caso2fechas));
$casos[] = (array($caso3,$caso3fechas));
$casos[] = (array($caso4,$caso4fechas));
$casos[] = (array($caso5,$caso5fechas));
$casos[] = (array($caso6,$caso6fechas));
$casos[] = (array($caso7,$caso7fechas));

$dibujando = 0;
if($mes==11 || $mes==12) {
	$numerodia_restantes = 365+$bisiesto-$numerodia;
	if($mes==12){$dia=$dia+30;}
	for($i = 0; $i <7; $i++){
		if($casos[$i][0]==7){
			for ($j = 0; $j <5; $j++) {
				//echo '"<br>".$dia.",".$i.",".$j.','.$casos[$i][1][$j];
				if($dia<$casos[$i][1][$j] && $dia>=$casos[$i][1][0]){
					$j=$j-1;
					if($dibujando == 0){$dibujando = 1;dibujarVelas(($j));break;}
				}
				else if($j==4 && $numerodia_restantes<=$casos[$i][1][5]){
					if($dibujando == 0){$dibujando = 1;dibujarVelas(($j));break;}
				}
			}
		}
	}
	if($dibujando == 0){$dibujando = 1;sinVelas();}
}
else {
	sinVelas();
}

function setTransparency($new_image,$image_source,$r=256,$g=256,$b=256){
            if($r==256){$r=255;}
            if($g==256){$g=255;}
            if($b==256){$b=255;}
            $transparencyIndex = imagecolortransparent($image_source);
            $transparencyColor = array('red' => $r, 'green' => $g, 'blue' => $b); 
            if ($transparencyIndex >= 0) {
                $transparencyColor    = imagecolorsforindex($image_source, $transparencyIndex);   
            }
            $transparencyIndex    = imagecolorallocate($new_image, $transparencyColor['red'], $transparencyColor['green'], $transparencyColor['blue']);
            imagefill($new_image, 0, 0, $transparencyIndex);
             imagecolortransparent($new_image, $transparencyIndex);
}  
/*
$image_source = imagecreatefrompng('trans.png');
$new_image = imagecreatetruecolor($width, $height);
setTransparency($new_image,$image_source); 
imagegif($new_image);
*/

function sinVelas(){
	/*
	//si vas a usar una tamaño diferente, usar usar esta parte una vez para crear un gif trasnparente de la medida adecuada
		global $mWidth; global $mHeight;
		$image_source = imagecreatefrompng('white.png');
		$new_image = imagecreatetruecolor($mWidth, $mHeight);
		setTransparency($new_image,$image_source); 
		header('Content-type: image/gif');
		imagegif($new_image,'transparent.gif');
		imagedestroy($new_image);
	*/
	$transIMG = imagecreatefromgif('transparent.gif');
	header('Content-type: image/gif');
	imagegif($transIMG);
	imagedestroy($transIMG);
}
function dibujarVelas($semana=0){
	if($semana<0){$semana=0;}
	if($semana>4){$semana=4;}
	global $velas;
	$myIMG = imagecreatefromgif($velas[$semana]);
	header('Content-type: image/gif');
	imagegif($myIMG);
	imagedestroy($myIMG);
}
?>

Luego un poco de HTML en donde queramos ponerlo:

<a href="http://multiple.webcindario.com/works/ar/ar.php?getyours=1"><img src="http://multiple.webcindario.com/works/ar/ar.php" border="0" alt="Adventus Reminder" /></a>

(podríamos centrarlo con &nbsp;)

Resultado:
Adventus Reminder

Descarga:
http://multiple.webcindario.com/works/ar/ar.zip

(Nota: no es necesario quitarlo al finalizar el año, cuando detecta que no es la época de mostrar las velitas muestra un GIF transparente)

[Actualizacion 1]Bug que mostraba la imagen transparente en lugar de 4 velas encendidas solucionado.
[Actualizacion 2]Bug que mostraria la imagen con errores fuera de los días de rezar con la corona de adviento solucionado.
[Actualizacion 3]Bug que mostraria la imagen transparente luego del 24 solucionado: Adventus Reminder v2.

Anuncios

Acciones

Information

3 responses

20 12 2009
[Actualizacion] mi script navideño « Incendia la ciudad

[…] si alguna persona descargo el archivo y le dio uso, por favor descargue la nueva versión en: https://incendialaciudad.wordpress.com/2009/12/03/mi-script-navideno/. FCR lamente cualquier disgusto producido por este error, pero son cosas que pasan cuando llega la […]

21 12 2009
RE:[Actualizacion] mi script navideño « Incendia la ciudad

[…] restantes para poder ahorrar unas lineas, pero mientras compruebo la efectividad de este método la actualización y solución ya se encuentra disponible en el post […]

6 12 2010
mi script navideño [v2] « Incendia la ciudad

[…] Puede que desees darle un vistazo a la version 1: Adventus Reminder v1. […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: