From 2921b09f2e99bb299d7af639eec8d24e561c653c Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Wed, 2 Jul 2003 05:44:34 +0000 Subject: [PATCH] - Added @package to classes. - Added 'provides' to package.xml. - Setted svn:ignore to api directories. - Updated HIT documentation. --- BIFE/Album/Pager.php | 90 ++++++++++++++ BIFE/Album/Photo.php | 63 ++++++++++ BIFE/Album/Thumbs.php | 272 ++++++++++++++++++++++++++++++++++++++++++ package.xml | 3 + 4 files changed, 428 insertions(+) create mode 100644 BIFE/Album/Pager.php create mode 100644 BIFE/Album/Photo.php create mode 100644 BIFE/Album/Thumbs.php diff --git a/BIFE/Album/Pager.php b/BIFE/Album/Pager.php new file mode 100644 index 0000000..70e4daa --- /dev/null +++ b/BIFE/Album/Pager.php @@ -0,0 +1,90 @@ + | +// +--------------------------------------------------------------------+ +// +// $Id$ +// + +// +X2C includes +require_once 'BIFE/Widget.php'; +// ~X2C + +// +X2C Class 151 :Pager +/** + * Album pager to an easier navigation when viewing photos. + * + * @package BIFE_Album + * @access public + */ +class BIFE_Album_Pager extends BIFE_Widget { + // ~X2C + + // +X2C Operation 153 + /** + * Constructor. + * + * @param array $attrs Attributes. + * + * @return void + * @access public + */ + function BIFE_Album_Pager($attrs) // ~X2C + { + trigger_error('Not implemented!', E_USER_WARNING); + } + // -X2C + + // +X2C Operation 154 + /** + * Constructor. + * + * @param array $attrs Attributes. + * + * @return void + * @access public + */ + function __construct($attrs) // ~X2C + { + trigger_error('Not implemented!', E_USER_WARNING); + } + // -X2C + + // +X2C Operation 155 + /** + * Renders the widget using a template returning a string with the results. + * + * @param HTML_Template_HIT &$template Template to use to render the widget. + * + * @return string + * @access public + */ + function render(&$template) // ~X2C + { + trigger_error('Not implemented!', E_USER_WARNING); + } + // -X2C + +} // -X2C Class :Pager + +?> \ No newline at end of file diff --git a/BIFE/Album/Photo.php b/BIFE/Album/Photo.php new file mode 100644 index 0000000..d5e9bd8 --- /dev/null +++ b/BIFE/Album/Photo.php @@ -0,0 +1,63 @@ + | +// +--------------------------------------------------------------------+ +// +// $Id$ +// + +// +X2C includes +require_once 'BIFE/Widget.php'; +// ~X2C + +// +X2C Class 103 :Photo +/** + * Photo widget. + * + * @package BIFE_Album + * @access public + */ +class BIFE_Album_Photo extends BIFE_Widget { + // ~X2C + + // +X2C Operation 108 + /** + * Renders the widget using a template returning a string with the results. + * + * @param HTML_Template_HIT &$template Template to use to render the widget. + * + * @return string + * @access public + */ + function render(&$template) // ~X2C + { + $attrs['FILE'] = @$this->attrs['FILE'] ? $this->attrs['FILE'] : @$_REQUEST['BIFE_ALBUM_FILE']; + $attrs['DESC'] = @$this->attrs['DESC'] ? $this->attrs['DESC'] : basename($attrs['FILE']); + $out = $template->parse('photo', $attrs, '', 'album'); + return $out; + } + // -X2C + +} // -X2C Class :Photo + +?> \ No newline at end of file diff --git a/BIFE/Album/Thumbs.php b/BIFE/Album/Thumbs.php new file mode 100644 index 0000000..293b092 --- /dev/null +++ b/BIFE/Album/Thumbs.php @@ -0,0 +1,272 @@ + | +// +--------------------------------------------------------------------+ +// +// $Id$ +// + +// +X2C includes +require_once 'BIFE/Widget.php'; +// ~X2C + +require_once 'BIFE/Link.php'; +require_once 'Image/Transform.php'; + +// +X2C Class 20 :Thumbs +/** + * Photo album widget. [TODO: Make a better explanation] + * + * @package BIFE_Album + * @access public + */ +class BIFE_Album_Thumbs extends BIFE_Widget { + // ~X2C + + // +X2C Operation 22 + /** + * Constructor. + * + * @param array $attrs Attributes. + * + * @return void + * @access public + */ + function BIFE_Album_Thumbs($attrs) // ~X2C + { + $this->__construct($attrs); + } + // -X2C + + // +X2C Operation 57 + /** + * Constructor. + * + * @param array $attrs Attributes. + * + * @return void + * @access public + */ + function __construct($attrs) // ~X2C + { + // TODO - get defaults from an INI file. + $defaults = array( + 'DIR' => '.', + 'RECURSIVE' => true, + 'THUMBSFORMAT' => 'jpeg', + 'THUMBSDIR' => '.thumbs', + 'EXTENSIONS' => 'png,jpg,jpeg,PNG,JPG,JPEG', + 'MAXROWS' => 0, + 'COLUMNS' => 4, + 'LINK-BIFE' => 'photo.xbf', + 'LINK-URL' => '', + ); + $attrs = array_merge($defaults, $attrs); + $attrs['EXTENSIONS'] = explode(',', $attrs['EXTENSIONS']); + parent::__construct($attrs); + } + // -X2C + + // +X2C Operation 23 + /** + * Renders the widget. + * + * @param HTML_Template_HIT &$template Template to use to render the widget. + * + * @return string + * @access public + */ + function render(&$template) // ~X2C + { + $template->pushGroup('album'); + $list = $this->getList(); + $tot = count($list); + $rows = ceil($tot / $this->attrs['COLUMNS']); + for ($row = 0; $row < $rows; $row++) { + for ($col = 0; $col < $this->attrs['COLUMNS']; $col++) { + $cur = $row * $this->attrs['COLUMNS'] + $col; + if ($photo = @$list[$cur]) { + if (is_null($photo['THUMB'])) { + $photo['THUMB'] = $this->makeThumb($photo['FILE']); + } + $photo['URL'] = BIFE_Link::getURL( + array( + 'BIFE' => $this->attrs['LINK-BIFE'], + 'URL' => $this->attrs['LINK-URL'], + 'DATA-BIFE_ALBUM_FILE' => $photo['FILE'], + ) + ); + $cell = $template->parse('item', $photo); + } else { + $cell = $template->parse('empty'); + } + $template->parseBuffered('cell', 'CONTENTS', $cell); + } + $template->parseBuffered('row', 'CONTENTS', + $template->popBuffer('cell')); + } + $out = $template->parse('body', array( + 'DESC' => $this->getDescription(), + 'CONTENTS' => $template->popBuffer('row'))); + $template->popGroup(); + return $out; + } + // -X2C + + // +X2C Operation 95 + /** + * Gets a list of photos with their descriptions and thumbnails. +Returns an array of associative arrays with this keys: + + * + * @return array + * @access protected + */ + function getList() // ~X2C + { + $root = $this->attrs['DIR']; + $exts = $this->attrs['EXTENSIONS']; + $format = $this->attrs['THUMBSFORMAT']; + $return = array(); + $d = dir($root); + if ($d) { + while (($file = $d->read()) !== false) { + list($path, $name, $ext) = $this->splitFilename("$root/$file"); + if (is_readable("$root/$file") and in_array($ext, $exts)) { + $thumb = $this->getThumbFilename("$root/$file"); + $return[] = array( + 'FILE' => "$root/$file", + 'DESC' => $name, + 'THUMB' => is_readable($thumb) ? $thumb : null, + ); + } + } + $d->close(); + } + return $return; + } + // -X2C + + // +X2C Operation 97 + /** + * Creates an image thumbnail, returning his filename. + * + * @param string $filename Filename of the image to create the thumb. + * @param int $size Maximum thumbnail size. + * + * @return string + * @access protected + */ + function makeThumb($filename, $size = 100) // ~X2C + { + $format = $this->attrs['THUMBSFORMAT']; + $thumb = $this->getThumbFilename($filename); + list($path, $name, $ext) = $this->splitFilename($thumb); + $img =& Image_Transform::factory('GD'); + $img->load($filename); + // If image is larger than the maximum size, we resize it. + if ($img->img_x > $size or $img->img_y > $size ) { + if (!@is_dir($path) and !@mkdir($path)) { + return null; + } + if (PEAR::isError($img)) { + return null; + } + if (!$img->scale($size)) { + return null; + } + } + $img->save("$path/$name.$format", $format); + $img->free(); + + return $thumb; + } + // -X2C + + // +X2C Operation 98 + /** + * Returns the filename of an image thumb. + * + * @param string $filename Filename of the image to get the thumb name. + * + * @return string + * @access protected + */ + function getThumbFilename($filename) // ~X2C + { + $root = $this->attrs['DIR']; + $format = $this->attrs['THUMBSFORMAT']; + $thumbsdir = $this->attrs['THUMBSDIR']; + + list($path, $name, $ext) = $this->splitFilename($filename); + + return "$root/$thumbsdir/$name.$format"; + } + // -X2C + + // +X2C Operation 102 + /** + * Returns the description of the album. + * + * @return string + * @access protected + */ + function getDescription() // ~X2C + { + $root = $this->attrs['DIR']; + return @join('', file($file)); + } + // -X2C + + // +X2C Operation 100 + /** + * Splits a filename returning an array with the path, name and extension. + * + * @param string $filename Filename to split. + * + * @return array + * @access public + * @static + */ + function splitFilename($filename) // ~X2C + { + $path = explode('/', $filename); + $file = array_pop($path); + $ext = ''; + if (strstr($file, '.')) { + preg_match('|([^/]+?)(\.([^\.]*))?$|', $file, $m); + $file = @$m[1] . ((@$m[2] == '.' ) ? '.' : ''); + $ext = @$m[3]; + } + $dir = count($path) ? join('/', $path) : ''; + return array($dir, $file, $ext); + } + // -X2C + +} // -X2C Class :Thumbs + +?> \ No newline at end of file diff --git a/package.xml b/package.xml index 533efd3..393e030 100644 --- a/package.xml +++ b/package.xml @@ -20,6 +20,9 @@ 2003-06-29 alpha Check http://www.llucax.hn.org/desarrollo/bife/ for details. + + + BIFE/Album/Thumbs.php -- 2.43.0