From: Leandro Lucarella Date: Sat, 24 May 2003 03:36:32 +0000 (+0000) Subject: - Added package.xml to make a PEAR package. X-Git-Tag: svn_import~50 X-Git-Url: https://git.llucax.com/software/bife/bife-all.git/commitdiff_plain/884d958d4c76bed1625460b591c599094f7690c8?ds=inline - Added package.xml to make a PEAR package. - Added more rules to Makefile. - BIFE_Album now it's a full independent widget, implementing the album functions (no need for the external Album class any more). - Minor bugfixes. --- diff --git a/Doxyfile b/Doxyfile index c1720c3..448b4a7 100644 --- a/Doxyfile +++ b/Doxyfile @@ -140,7 +140,7 @@ COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = -PDF_HYPERLINKS = NO +PDF_HYPERLINKS = YES USE_PDFLATEX = NO LATEX_BATCHMODE = NO #--------------------------------------------------------------------------- @@ -149,7 +149,7 @@ LATEX_BATCHMODE = NO GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO -RTF_HYPERLINKS = NO +RTF_HYPERLINKS = YES RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- diff --git a/Makefile b/Makefile index 808da6b..70f7383 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: +# vim: set noexpandtab tabstop=4 softtabstop=4 shiftwidth=4: # +--------------------------------------------------------------------+ # | BIFE - Buil It FastEr | # +--------------------------------------------------------------------+ @@ -25,16 +25,22 @@ # $Id$ # -all: doc code +VERSION=0.8 +PHP_FILES=src/BIFE/*.php +META_FILES=xmi2code.config xmi2code.tpl.php Makefile Doxyfile package.xml +DOC_FILES=doc/bife.xmi +APIDOC_FILES=doc/api/* doc/api/*/* + +code: doc/bife.xmi xmi2code.config + xmi2code -a + +all: code doc pear-packages tarball doc: api -api: Doxyfile src/*.php src/BIFE/*.php +api: Doxyfile $(PHP_FILES) doxygen -code: doc/bife.xmi - xmi2code -a - clean-code: find src/ -name '*.bak' | xargs rm -vf @@ -43,5 +49,12 @@ clean-doc: clean: clean-doc clean-backup -tarball: - tar --exclude bife/doxygen.warn --exclude .svn --exclude .bak --exclude .swp --exclude 'bife/doc/api/*' -C .. -cvzf ../bife.tar.gz bife +tarball: bife.tar.gz + +bife.tar.gz: $(PHP_FILES) $(DOC_FILES) $(META_FILES) + tar --exclude bife.tar.gz --exclude bife/doxygen.warn --exclude .svn --exclude '*.bak' --exclude '*.swp' --exclude 'bife/doc/api/*' -C .. -cvzf bife.tar.gz bife + +pear-packages: BIFE-$(VERSION).tgz + +BIFE-$(VERSION).tgz: $(PHP_FILES) $(DOC_FILES) package.xml + pear package diff --git a/doc/bife.xmi b/doc/bife.xmi index 789b2b3..a21c9de 100644 --- a/doc/bife.xmi +++ b/doc/bife.xmi @@ -9,7 +9,7 @@ - + @@ -65,9 +65,7 @@ - + @@ -77,6 +75,26 @@ + + + + + + + + + + + + @@ -152,29 +170,29 @@ - + - + - + - + - + @@ -183,10 +201,11 @@ - + - - + + + @@ -252,7 +271,12 @@ + + + + + diff --git a/src/Album.php b/src/Album.php index 24c0826..7ec9ca0 100644 --- a/src/Album.php +++ b/src/Album.php @@ -28,8 +28,6 @@ // $Id$ // -require_once 'PEAR.php'; -require_once 'Util.php'; require_once 'Image/Transform.php'; require_once 'HTML/Template/Sigma.php'; @@ -40,9 +38,9 @@ require_once 'HTML/Template/Sigma.php'; * * @package Hooks * @subpackage Album + * @author Leandro Lucarella * @author Harpo Maxx * @author Groucho Marx - * @author Leandro Lucarella * @version $Rev$ * @since rev 130 * @access public @@ -145,7 +143,7 @@ class Hook_Album { function photo($photo) { list($path, $name, $ext) = File_Util::splitFilename($photo); $tpl =& new HTML_Template_Sigma('.'); - $tpl->loadTemplateFile('photo.html'); + $tpl->loadTemplateFile('bife_album_photo.html'); $tpl->setVariable( array( 'DESC' => $name, diff --git a/src/BIFE/Album.php b/src/BIFE/Album.php index 07fb437..1788ee8 100644 --- a/src/BIFE/Album.php +++ b/src/BIFE/Album.php @@ -29,12 +29,10 @@ // +X2C includes require_once 'BIFE/Widget.php'; // ~X2C -require_once 'Album.php'; // +X2C Class 20 :Album /** - * Photo album widget. -[TODO: Make a better explanation] + * Photo album widget. [TODO: Make a better explanation] * * @access public */ @@ -75,17 +73,19 @@ class BIFE_Album extends BIFE_Widget { */ function __construct($attrs) // ~X2C { + // TODO - get defaults from an INI file. $defaults = array( 'DIR' => '.', 'RECURSIVE' => true, 'THUMBSFORMAT' => 'jpeg', 'THUMBSDIR' => '.thumbs', - 'EXTENSIONS' => 'png,jpg,jpeg,gif', + 'EXTENSIONS' => 'png,jpg,jpeg,PNG,JPG,JPEG', 'SELECTED' => '', 'MAXROWS' => 0, 'COLUMNS' => 4, ); $this->attrs = array_merge($defaults, $attrs); + $this->attrs['EXTENSIONS'] = explode(',', $this->attrs['EXTENSIONS']); } // -X2C @@ -100,12 +100,182 @@ class BIFE_Album extends BIFE_Widget { */ function render(&$template) // ~X2C { - extract($this->attrs, EXTR_SKIP); - $album =& new Hook_Album($DIR, $RECURSIVE, $THUMBSFORMAT, $THUMBSDIR, $EXTENSIONS); - return $album->album($template, $SELECTED, $MAXROWS, $COLUMNS); + $template->loadTemplateFile('bife_album.html'); + $template->addBlockFile('ITEMS', 'ITEM', 'bife_album_item.html'); + $root = $this->attrs['DIR']; + $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]) { + $selected = ($photo['file'] === $this->attrs['SELECTED']); + if (is_null($photo['thumb'])) { + $photo['thumb'] = $this->makeThumb($photo['file']); + } + // FIXME - Si no se pudo crear el thumb, devuelve null + // (ver si se agrega otro template para indicar error + // o algo asi). + $template->setVariable( + array( + 'PHOTO' => $photo['file'], + 'DESC' => $photo['desc'], + 'THUMB' => $photo['thumb'], + ) + ); + $template->parse('ITEM'); + } else { + if (!@$empty) { + $template->replaceBlockFile('ITEM', + 'bife_album_emptyitem.html', true); + $empty = true; + } + $template->touchBlock('ITEM'); + $template->parse('ITEM'); + } + } + $template->parse('FILA'); + } + $template->setVariable('DESC', $this->getDescription()); + return $template->get(); + } + // -X2C + + // +X2C Operation 95 + /** + * Gets a list of photos with their descriptions and thumbnails. +Returns an array of associative arrays with this keys: +
    +
  • file: Photo filename.
  • +
  • desc: Photo Description.
  • +
  • thumb: Photo thumbnail filename.
  • +
+ * + * @return array + * @access protected + */ + function getList() // ~X2C + { + $root = $this->attrs['DIR']; + $exts = $this->attrs['EXTENSIONS']; + $format = $this->attrs['THUMBSFORMAT']; + $return = array(); + + $d = dir($root); + 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 :Album -?> \ No newline at end of file +?> diff --git a/src/BIFE/Parser.php b/src/BIFE/Parser.php index 66be149..4598ea1 100644 --- a/src/BIFE/Parser.php +++ b/src/BIFE/Parser.php @@ -128,6 +128,9 @@ class BIFE_Parser { function startElement($parser, $name, $attrs) // ~X2C { $class = "BIFE_$name"; + if (!class_exists($class)) { + @include_once 'BIFE/' . ucfirst(strtolower($name)) . '.php'; + } if (class_exists($class)) { $obj =& new $class($attrs); if (!is_a($obj, 'bife_widget')) { @@ -259,4 +262,4 @@ class BIFE_Parser { } // -X2C Class :Parser -?> +?> \ No newline at end of file