Listing 1 /* Die bereits geöffneten Türchen werden aus dem Cookie gelesen und in einem Array gespeichert. Ist der Cokkie nicht gesetzt, wird ein leeres Array erzeugt. */ $OPEN_DOORS = JRequest::getString(XMAS_COOKIE, null, 'COOKIE'); if (empty($OPEN_DOORS)) { $OPEN_DOORS = array(); } else { $OPEN_DOORS = unserialize($OPEN_DOORS); } Listing 2 /* Soll ein Türchen geöffnet werden? */ $doOpen = JRequest::getBool('xmas_open'); if ($doOpen && defined('XMAS_DAY')) { /* Wenn auch der Tag angegeben und dieser gültig ist, dann wird es geöffnet... */ $OPEN_DOORS[XMAS_DAY] = 1; /* ...und im Cookie gespeichert */ setcookie(XMAS_COOKIE, serialize($OPEN_DOORS), mktime(23, 59, 59, 12, 24)); } Listing 3 defined('_JEXEC') or die('Restricted access'); /* In init.xmascalendar.php findet die Validierung des Parameters xmas_day statt. Ist er angegeben und gültig wird XMAS_DAY definiert */ require_once (dirname(__FILE__).DS.'helper.php'); require_once (dirname(__FILE__).DS.'init.xmascalendar.php'); /* Soll ein Türchen geöffnet werden? */ $doOpen = JRequest::getBool('xmas_open'); if ($doOpen && defined('XMAS_DAY')) { /* Wenn auch der Tag angegeben und dieser gültig ist, dann wird es geöffnet... */ $OPEN_DOORS[XMAS_DAY] = 1; /* ...und im Cookie gespeichert */ setcookie(XMAS_COOKIE, serialize($OPEN_DOORS), mktime(23, 59, 59, 12, 24)); } /* Modul anzeigen */ require (JModuleHelper::getLayoutPath('mod_xmascalendar')); Listing 4 define('_JEXEC', 1); define('JPATH_BASE', realpath(dirname(__FILE__).'/../..') ); define('DS', DIRECTORY_SEPARATOR ); header("content-type: image/jpeg"); header("pragma: cache"); /* Das Joomla Framework muß in Grundzügen geladen werden */ require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); $mainframe =& JFactory::getApplication('site'); $mainframe->initialise(); /* $params ist eine Variable die sonst vom Joomla-Framework bei der Anzeige des Moduls gesetzt wird und die Parameter aus der Modulkonfiguration enthält. */ jimport('joomla.application.module.helper'); $the =& JModuleHelper::getModule('xmascalendar'); $params = new Jparameter($the->params); LIsting 5 /* In init.xmascalendar.php findet die Validierung des Parameters xmas_day statt. Ist er angegeben und gültig wird XMAS_DAY definiert */ require_once (JPATH_BASE .DS.'modules'.DS.'mod_xmascalendar'.DS.'init.xmascalendar.php'); require_once (JPATH_XMAS_MOD .DS.'helper.php'); if (!defined('XMAS_DAY')) { /* Es wurde kein xmas_day-Parameter übergeben oder dieser liegt ausserhalb des zeitlichen Rahmens, damit gibt es auch kein Bild!. */ header("status: 404 Not Found"); exit; } Listing 6 /* Welcher Bildtyp soll angezeigt werden? */ $show = JRequest::getCmd('show'); switch ($show) { /* Es wird jeweils zuerst der Name (kompletter Pfad) des Bildes ermittelt. Für den Fall das Bild nicht existiert wird es zunächst erzeugt. */ case 'thumb': $target = JPATH_ROOT.DS.XMAS_PIC_THUMB.DS.modXMascalendarHelper::getImgNameThumb(XMAS_DAY); if (!JFile::exists($target)) modXMascalendarHelper::getThumbImage(XMAS_DAY); break; case 'display': case 'original': $target = JPATH_ROOT.DS.XMAS_PIC_DISPLAY.DS.modXMascalendarHelper::getImgNameDisplay(XMAS_DAY, $show); if (!JFile::exists($target)) modXMascalendarHelper::getDisplayImage(XMAS_DAY, $show); break; default: /* Es wurde kein passender Bildtyp übergeben - HTTP-Statuscode 404 (Nicht gefunden) wird zurückgegeben */ header("status: 404 Not Found"); exit; } Listing 7 /* Prüfen ob die Datei jetzt tatsächlich existiert (mglws. ist ja das Erstellen schief gegangen) */ if (JFile::exists($target)) { /* Damit das Bild vom Browser vernünftig gecached werden kann, wird noch der Header für Last-Modified gesetzt... */ $fTime = filemtime($target); header("Last-Modified: ".date('r', $fTime)); /* ...und das Bild ausgeliefert */ readfile($target); exit; } else { /* Das Bild ist physisch auf dem Server nicht vorhanden, da es offensichtlich nicht erstellt werden konnte. Hier bleibt nichts weiter übrig als den HTTP-Statuscode 404 (Nicht gefunden) zurückzuliefern */ header("status: 404 Not Found"); } Listing 8 defined('_JEXEC') or die('Restricted access'); /* Soll die Slimbox über JHTMLBehavior2 genutzt werden */ if (XMAS_USE_SLIMBOX) { /* Die Slimbox erfordert das Mootools-Framework in Version 1.2, deshalb wird zuerst eine evtl. vorhandene Version 1.1 entladen! Dies kann zu "Seiteneffekten" führen, wenn andere Inhalte verwendet werden, die die Mootools-Bibliothek verwenden und nicht mit 1.2 kompatibel sind! */ JHTML::_('behavior2.unload', 'mootools'); JHTML::_('behavior2.slimbox', array( 'counterText' => 'Bild {x} von {y}' )); } Listing 9 /* Damit die Türchen nicht "schön" geordnet sind, wird hier eine willkürliche (jedoch immer gleiche) Reihenfolge festgelegt */ $doors = array(7, 12, 3, 20, 16, 9, 1, 11, 21, 18, 5, 2, 13, 4, 10, 23, 14, 6, 24, 8, 17, 22, 15, 19); ?>
1224) { $OPEN_DOORS[$door] = 1; } if (XMAS_CURDAY >= 1200 + $door) { /* Das Türchen liegt in der "Vergangenheit" und kann geöffnet werden. */ if ($OPEN_DOORS[$door]) { /* Ok, das Türchen ist bereits offen. Es wird ein Link angezeigt, der das detailierte Bild aufruft und als Hintergrundbild das Thumbnail des Bildes erhält */ ?> '); ?>" > " title="" >
Listing 10 Listing 11 /* Konstanten anhand der Modulkonfiguration */ define('XMAS_CURDAY', $curDay); define('XMAS_COOKIE', $params->get('xmasCookie', 'xmas_Data')); define('XMAS_PIC', 'media'.DS.'images'.DS.$params->get('xmasPics', 'xmascalendar')); define('XMAS_PIC_ORIGINAL', XMAS_PIC.DS.'original'); define('XMAS_PIC_THUMB', XMAS_PIC.DS.'thumb'); define('XMAS_PIC_DISPLAY', XMAS_PIC.DS.'display'); define('XMAS_THUMB_WIDTH', $params->get('xmasThumbWidth', 80)); define('XMAS_DISP_WIDTH', $params->get('xmasDispWidth', 240)); define('XMAS_JPEG_QUAL', $params->get('xmasJPEG', 85)); define('XMAS_USE_SLIMBOX', $params->get('xmasUseSlimbox', 1)); define('JPATH_XMAS_MOD', dirname(__FILE__)); Listing 12 XMasCalendar Falk Prüfer September 2009 Copyright (C) 2008 Falk Pruefer. All rights reserved. http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL falk@fpruefer.de www.fpruefer.de 1.0.0 DESCMODXMASCALENDAR helper.php index.html init.xmascalendar.php mod_xmascalendar.php mod_xmascalendar.xml xmascalendar.php tmpl css xmascalendar language/en-GB.mod_xmascalendar.ini language/de-DE.mod_xmascalendar.ini