<?php
goweb::loadClass('Zend_View_Helper_HtmlElement');
/**
 * Goweb Sitemanager 5 Framework
 *
 * @version    5.0.0
 * @category   Goweb
 * @package    Goweb_View_Helper
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 */

/**
 *
 * @version    5.0.0
 * @category   Goweb
 * @package    Goweb_View_Helper_Resize
 * @author     I&D <dev@goweb.pt>, Pedro Pinto <ppinto@goweb.pt>
 * @copyright  2009 (c) Goweb (http://www.goweb.pt)
 */
class Goweb_View_Helper_Resize extends Zend_View_Helper_HtmlElement {
    /**
     * Efectuar o resize de uma imagem e criar um ficheiro de cache.
     *
     * @param String $file ficheiro a fazer o resize
     * @param int $max_width largura máxima da imagem
     * @param int $max_height altura máxima da imagem
     * @param int $quality qualidade da imagem
     * @return String ficheiro de cache da imagem
     */
    public function Resize($file = null, $max_width = 100, $max_height = 100, $quality = 70){
        if (is_file(WWW_PATH . $file)){
            $fileCache = md5(filemtime(WWW_PATH . $file) . '-' . 
                             $file . '-' . $max_width . 'x' . $max_height) . 
            '.' . 
            $ext = pathinfo($file, PATHINFO_EXTENSION);
            $uploadPath = PUBLIC_UPLOAD_PATH . '/cache/';
            if (!file_exists($uploadPath) || !is_dir($uploadPath)) {
                $this->_makeUploadPath(PUBLIC_UPLOAD_PATH, '/cache/');
            }
            if (!is_file($uploadPath . $fileCache)){
                Goweb::loadClass('Goweb_Image_Resize');

                $imageResize = new Goweb_Image_Resize();
                $imageResize->resizeMaintainRatio(WWW_PATH . $file, $uploadPath . $fileCache,
                                                  $max_width,
                                                  $max_height, 
                                                  $quality);
                
                chmod($uploadPath . $fileCache, 0777);
                
            }
            return str_replace(WWW_PATH, '', $uploadPath) . $fileCache;
        }
        throw new Goweb_Exception("O ficheiro: '" . $file . "' n&atilde; foi encontrado.");
    }
    
    protected function _makeUploadPath($basePath, $uploadPath) {
        $basePath = DIRECTORY_SEPARATOR . trim($basePath, '/');
        $uploadPath = trim($uploadPath, '/');
        $path = '';
        foreach (explode('/', $uploadPath) as $dir) {
            $path .= DIRECTORY_SEPARATOR . $dir;

            if (!file_exists($basePath . $path)) {
                try {
                    //// Goweb::dump($basePath . $path);
                    mkdir($basePath . $path);
                    chmod($basePath . $path, 0777);
                } catch (Exception $e) {
                    throw new Goweb_Exception("N&atilde;o &eacute; poss&iacute;vel criar a directoria: '" . $basePath . $path . "'.");
                }
            }
        }
    } 
}