function process(&$medium, &$gallery)
 {
     $ok = true;
     //innocent, until proven guilty ;)
     $events =& zmgFactory::getEvents();
     $config =& zmgFactory::getConfig();
     $imagetools =& zmgToolboxConstants::getImageTools();
     $toolkey = intval($config->get('plugins/toolbox/general/conversiontool'));
     $imagetool = $imagetools[$toolkey - 1];
     zmgimport('org.zoomfactory.var.plugins.toolbox.tools.' . $imagetool . 'Tool');
     $klass = 'zmg' . ucfirst($imagetool) . 'Tool';
     $file = $medium->getAbsPath();
     $size = getimagesize($file);
     $img_meta = array('width' => $size[0], 'height' => $size[1], 'extension' => $medium->getExtension(), 'jpeg_qty' => $config->get('plugins/toolbox/general/jpegquality'));
     $metadata = $events->fire('ongetimagemetadata', false, $medium);
     //rotate image
     //TODO
     //resize to thumbnail
     if ($ok && !file_exists($medium->getAbsPath(ZMG_MEDIUM_THUMBNAIL))) {
         $ok = call_user_func_array(array($klass, 'resize'), array($file, $medium->getAbsPath(ZMG_MEDIUM_THUMBNAIL), intval($config->get('plugins/toolbox/general/imagesizethumbnail')), $img_meta));
     }
     //resize to viewsize format
     $maxSize = intval($config->get('plugins/toolbox/general/imagesizemax'));
     if ($ok && !file_exists($medium->getAbsPath(ZMG_MEDIUM_VIEWSIZE)) && ($img_meta['width'] > $maxSize || $img_meta['height'] > $maxSize)) {
         $ok = call_user_func_array(array($klass, 'resize'), array($file, $medium->getAbsPath(ZMG_MEDIUM_VIEWSIZE), intval($config->get('plugins/toolbox/general/imagesizethumbnail')), $img_meta));
     }
     //apply watermarks
     //TODO
     if ($ok) {
         $ok = $events->fire('onputimagemetadata', false, $medium, $metadata);
     }
     return $ok;
 }
 function storeDelegate(&$event)
 {
     $aView = $event->getArgument('view');
     $view = implode(':', $aView);
     $config =& zmgFactory::getConfig();
     $events =& zmgFactory::getEvents();
     $request =& zmgFactory::getRequest();
     switch ($view) {
         case "admin:settings:store":
             $request->setResult($config->update($_POST, false));
             break;
         case stristr($view, "admin:settings:plugins:autodetect"):
             $tool = trim($aView[count($aView) - 1]);
             if ($tool == "autodetect") {
                 $tool = "all";
             } else {
                 $tool = array($tool);
             }
             $events->fire('onautodetect', false, $tool);
             break;
         case stristr($view, "admin:update:mediacount"):
             $filter = intval(array_pop($aView));
             $zoom =& zmgFactory::getEvents()->fire('ongetcore');
             $request->setResult($zoom->getMediumCount($filter));
             break;
         case "admin:galleryedit:store":
             zmgimport('org.zoomfactory.var.plugins.datastore.stores.galleryStore');
             zmgGalleryStore::process();
             break;
         case "admin:galleryedit:delete":
             zmgimport('org.zoomfactory.var.plugins.datastore.stores.galleryStore');
             zmgGalleryStore::delete();
             break;
         case "admin:mediumedit:store":
             zmgimport('org.zoomfactory.var.plugins.datastore.stores.mediumStore');
             zmgMediumStore::process();
             break;
         case stristr($view, "admin:mediaupload:store"):
             //SWFUpload needs HTTP headers to signal the user...
             $method = stristr($view, "jupload") ? "jupload" : "swfupload";
             $events->fire('onupload', false, $method);
             //exit;
             break;
         case stristr($view, "admin:mediaupload:update"):
             $gid = array_pop($aView);
             $events->fire('onuploadupdate', false, $gid);
             break;
         case stristr($view, "admin:update:mediacount"):
             $gid = intval(array_pop($aView));
             $zoom =& zmgFactory::getEvents()->fire('ongetcore');
             echo $zoom->getMediumCount($gid);
             break;
         default:
             break;
     }
 }
 function process()
 {
     $gid = zmgGetParam($_REQUEST, 'zmg_edit_gallery_gid', 0);
     $isNew = false;
     if ($gid === "new") {
         $isNew = true;
         $gid = 0;
     }
     $gid = intval($gid);
     $events =& zmgFactory::getEvents();
     $messages =& zmgFactory::getMessages();
     $gallery = new zmgGallery(zmgDatabase::getDBO());
     $res = true;
     if ($gid > 0) {
         if (!($res = $gallery->load($gid))) {
             $messages->append(T_('Gallery could not be saved') . ': ' . $gallery->getError());
         }
     }
     if ($res && $gid > 0 || $isNew) {
         $data = array('name' => zmgSQLEscape(zmgGetParam($_REQUEST, 'zmg_edit_gallery_name', $gallery->name)), 'descr' => zmgSQLEscape(zmgGetParam($_REQUEST, 'zmg_edit_gallery_descr', $gallery->descr)), 'keywords' => zmgSQLEscape(zmgGetParam($_REQUEST, 'zmg_edit_gallery_keywords', $gallery->keywords)), 'hide_msg' => intval(zmgGetParam($_REQUEST, 'zmg_edit_gallery_hidenm', $gallery->hide_msg)), 'shared' => intval(zmgGetParam($_REQUEST, 'zmg_edit_gallery_shared', $gallery->shared)), 'published' => intval(zmgGetParam($_REQUEST, 'zmg_edit_gallery_published', $gallery->published)), 'uid' => intval(zmgGetParam($_REQUEST, 'zmg_edit_gallery_acl_gid', $gallery->uid)));
         if ($isNew) {
             $data['dir'] = zmgSQLEscape(zmgGetParam($_REQUEST, 'zmg_edit_gallery_dir', ''));
         }
         //do some additional validation of strings
         $data['name'] = $events->fire('onvalidate', false, $data['name']);
         $data['descr'] = $events->fire('onvalidate', false, $data['descr']);
         $data['keywords'] = $events->fire('onvalidate', false, $data['keywords']);
         if (!$gallery->bind($data)) {
             $messages->append(T_('Gallery could not be saved') . ': ' . $gallery->getError());
         } else {
             if (!$gallery->store()) {
                 $messages->append(T_('Gallery could not be saved') . ': ' . $gallery->getError());
             } else {
                 if ($isNew) {
                     $gallery->buildDirStructure();
                 }
                 $messages->append(T_('Gallery saved successfully!'));
             }
         }
     } else {
         $messages->append(T_('Gallery could not be saved') . ': ' . $gid);
     }
 }
 /**
  * Create a HTML dropdown form element which contains a list of galleries
  * (ordered and indented).
  * @param mixed $onchange 
  * @param string $sel_name
  * @param int $sel
  * @param int $exclude
  * @return void
  */
 function galleriesSelect($onchange = 0, $sel_name = "gid", $sel = 0, $exclude = 0)
 {
     $html = "<select name=\"{$sel_name}\" id=\"{$sel_name}\" class=\"inputbox\"";
     if ($onchange !== 0) {
         $html .= " onchange=\"{$onchange}\"";
     }
     $html .= ">\n\t<option value=\"0\">---&nbsp;" . T_('Select a Gallery') . "&nbsp;---</option>\n";
     $zoom =& zmgFactory::getEvents()->fire('ongetcore');
     $galleries =& $zoom->getGalleryList();
     if (isset($galleries)) {
         foreach ($galleries as $set) {
             $gallery = $set['object'];
             if ($gallery->gid != $exclude || $exclude == 0) {
                 $html .= "\t<option value=\"" . $gallery->gid . "\"" . ($sel == $gallery->gid ? " selected" : "") . ">" . $set['path_name'] . "</option>\n";
             }
         }
     }
     echo $html . "</select>\n";
 }
 function process()
 {
     $mid = intval(zmgGetParam($_REQUEST, 'zmg_edit_mid', 0));
     $medium = new zmgMedium(zmgDatabase::getDBO());
     $res = true;
     $events =& zmgFactory::getEvents();
     $messages =& zmgFactory::getMessages();
     if ($mid > 0) {
         if (!($res = $medium->load($mid))) {
             $messages->append(T_('Medium could not be saved') . ': ' . $medium->getError());
         }
     }
     if ($res && $mid > 0) {
         $data = array('name' => zmgSQLEscape(zmgGetParam($_REQUEST, 'zmg_edit_name', $medium->name)), 'descr' => zmgSQLEscape(zmgGetParam($_REQUEST, 'zmg_edit_descr', $medium->descr)), 'keywords' => zmgSQLEscape(zmgGetParam($_REQUEST, 'zmg_edit_keywords', $medium->keywords)), 'shared' => intval(zmgGetParam($_REQUEST, 'zmg_edit_shared', $medium->shared)), 'published' => intval(zmgGetParam($_REQUEST, 'zmg_edit_published', $medium->published)), 'uid' => intval(zmgGetParam($_REQUEST, 'zmg_edit_acl_gid', $medium->uid)));
         //do some additional validation of strings
         $data['name'] = $events->fire('onvalidate', false, $data['name']);
         $data['descr'] = $events->fire('onvalidate', false, $data['descr']);
         $data['keywords'] = $events->fire('onvalidate', false, $data['keywords']);
         if (!$medium->bind($data)) {
             $messages->append(T_('Medium could not be saved') . ': ' . $medium->getError());
         } else {
             if (!$medium->store()) {
                 $messages->append(T_('Medium could not be saved') . ': ' . $medium->getError());
             } else {
                 $isGalleryImg = intval(zmgGetParam($_REQUEST, 'zmg_edit_gimg', 0)) === 1;
                 $isParentImg = intval(zmgGetParam($_REQUEST, 'zmg_edit_pimg', 0)) === 1;
                 if (!($isGalleryImg && $medium->setAsGalleryImage())) {
                     $messages->append(T_('Medium could not be saved') . ': ' . T_('unable to set as image of gallery'));
                     $res = false;
                 }
                 if (!($isParentImg && $medium->setAsGalleryImage(true))) {
                     $messages->append(T_('Medium could not be saved') . ': ' . T_('unable to set as image of parent gallery'));
                     $res = false;
                 }
                 if ($res) {
                     $messages->append(T_('Medium saved successfully!'));
                 }
             }
         }
     } else {
         $messages->append(T_('Medium could not be saved') . ': ' . $mid);
     }
 }
 function set()
 {
     $view = trim(zmgGetParam($_REQUEST, 'view', ZMG_ADMIN ? 'admin:home' : 'gallery:show:home'));
     if (empty($view)) {
         $view = ZMG_ADMIN ? "admin:dispatchresult" : "dispatchresult";
         $this->throwError('No view specified.');
     }
     $this->_active_view = $view;
     $this->_view_tokens = split(':', $view);
     $events =& zmgFactory::getEvents();
     //check for dispatches that 'put' data (in contrary to 'get' requests)
     $isDataStore = $events->fire('onisdatastore', false, $this->_view_tokens);
     if ((bool) $isDataStore) {
         $events->fire('ondatastore', false, $this->_view_tokens);
         $this->_active_view = (ZMG_ADMIN ? "admin:dispatchresult" : "dispatchresult") . ":" . str_replace(':', '_', str_replace('admin:', '', $view));
         $this->_view_tokens = split(':', $this->_active_view);
     }
     /*
     switch ($page) {
         case 'editimg':
             if ($zoom->privileges->hasPrivilege('priv_editmedium') || $zoom->_isAdmin) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/admin/editimg.php');
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'view':
             include(ZMG_ABS_PATH.'/components/com_zoom/www/view.php');
             break;
         case 'special':
             include(ZMG_ABS_PATH.'/components/com_zoom/www/special.php');
             break;
         // Admin module pages...
         case 'admin':
             if ($zoom->privileges->hasPrivileges()) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/admin/admin.php');
                 $zoom->adminFooter();
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'zoomthumb':
             include(ZMG_ABS_PATH.'/components/com_zoom/www/admin/zoomthumb.php');
             break;
         case 'catsmgr':
             if ($zoom->_isAdmin || ($zoom->privileges->hasPrivilege('priv_creategal') || $zoom->privileges->hasPrivilege('priv_editgal') || $zoom->privileges->hasPrivilege('priv_delgal'))) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/admin/catsmgr.php');
                 $zoom->adminFooter();
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'mediamgr':
             if ($zoom->_isAdmin || ($zoom->privileges->hasPrivilege('priv_upload') || $zoom->privileges->hasPrivilege('priv_editmedium') || $zoom->privileges->hasPrivilege('priv_delmedium'))) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/admin/mediamgr.php');
                 $zoom->adminFooter();
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'upload':
             if ($zoom->_isAdmin || $zoom->privileges->hasPrivilege('priv_upload')) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/admin/upload.php');
                 $zoom->adminFooter();
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'settings':
             if ($zoom->_isAdmin) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/admin/settings.php');
                 $zoom->adminFooter();
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'movefiles':
             if ($zoom->_isAdmin) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/admin/movefiles.php');
                 $zoom->adminFooter();
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'credits':
             if ($zoom->privileges->hasPrivileges()) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/admin/credits.php');
                 $zoom->adminFooter();
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'lightbox':
             if ($zoom->_CONFIG['lightbox']) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/lightbox.php');
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'ecard':
             if ($zoom->_CONFIG['ecards']) {
                 include(ZMG_ABS_PATH.'/components/com_zoom/www/ecard.php');
             } else {
                 $zoom->notAuth();
             }
             break;
         case 'search':
             include(ZMG_ABS_PATH.'/components/com_zoom/www/search.php');
             break;
         default:
             $action = trim(mosGetParam($_REQUEST,'action'));
             if ($action === 'delimg') {
                 if ($zoom->_isAdmin || $zoom->privileges->hasPrivilege('priv_delmedium')) {
                     $key = mosGetParam($_REQUEST,'key');
                     $PageNo = mosGetParam($_REQUEST,'PageNo');
                     if ($key || $key == 0) {
                         $zoom->_gallery->_images[$key]->getInfo();
                         if ($zoom->_gallery->_images[$key]->delete()) {
                             mosRedirect(sefRelToAbs("index.php?option=$option&catid=".$zoom->_gallery->_id."&PageNo=$PageNo&Itemid=$Itemid"), _ZOOM_ALERT_DELPIC);
                         } else {
                             mosRedirect(sefRelToAbs("index.php?option=$option&catid=".$zoom->_gallery->_id."&PageNo=$PageNo&Itemid=$Itemid"), _ZOOM_ALERT_NODELPIC);
                         }
                     }
                 } else {
                     $zoom->notAuth();
                 }
             }
             if (!empty($zoom->_gallery) || $zoom->_isAdmin || $catid == 0) {
                 $valid = true;
                 if (!empty($zoom->_gallery)) {
                     if (!$zoom->_gallery->_published  && !$zoom->_isAdmin) {
                         $valid = false;
                     }
                 }
                 if ($valid) {
                     include(ZMG_ABS_PATH.'/components/com_zoom/www/galleryshow.php');
                 } else {
                     $zoom->notAuth();
                 }
             } else {
                 $zoom->notAuth();
             }
             break;
     }
     */
     $events->fire('onviewset');
 }
 function getCoverImage()
 {
     if (empty($this->gid)) {
         return zmgError::throwError('zmgGallery: gallery data not loaded yet!');
     }
     if (is_object($this->_obj_cover_img)) {
         return $this->_obj_cover_img->getRelPath();
     }
     $db =& zmgDatabase::getDBO();
     if (!is_int($this->cover_img)) {
         // first, check if the gallery contains any media at all:
         $zoom =& zmgFactory::getEvents()->fire('ongetcore');
         $table = zmgFactory::getConfig()->getTableName('media');
         $db->setQuery("SELECT mid FROM " . $table . " WHERE gid = " . $this->gid . " ORDER BY " . $zoom->getMediaOrdering() . " LIMIT 1");
         $medium = intval($db->loadResult());
         if ($medium > 0) {
             // get the first available medium
             $this->_obj_cover_img = new zmgMedium($db);
             $this->_obj_cover_img->load($medium);
             return $this->_obj_cover_img->getRelPath();
         }
     } else {
         $this->_obj_cover_img = new zmgMedium($db);
         $this->_obj_cover_img->load($this->cover_img);
         return $this->_obj_cover_img->getRelPath();
     }
     //TODO: display an 'empty gallery' image...or let the client handle this?
     return "";
 }
 function finalizeUpload($gid = 0)
 {
     //finish the SwfUpload sequence...
     if ($gid === 0) {
         return zmgToolboxPlugin::registerError(T_('Upload media'), T_('No valid gallery ID provided'));
     }
     $session =& zmgFactory::getSession();
     $events =& zmgFactory::getEvents();
     $config =& zmgFactory::getConfig();
     $db =& zmgDatabase::getDBO();
     $gallery = new zmgGallery($db);
     $gallery->load($gid);
     //now we got the gallery and its data, retrieve the uploaded media
     $media = $session->get('uploadtool.fancyfiles');
     if (!is_array($media) || count($media) == 0) {
         return zmgToolboxPlugin::registerError(T_('Upload media'), T_('No media have been uploaded; nothing to do.'));
     }
     zmgimport('org.zoomfactory.lib.helpers.zmgFileHelper');
     $src_path = ZMG_ABS_PATH . DS . "etc" . DS . "cache" . DS;
     $dest_path = zmgEnv::getRootPath() . DS . $config->get('filesystem/mediapath') . $gallery->dir . DS;
     foreach ($media as $medium) {
         $obj = new zmgMedium($db);
         $name = zmgSQLEscape(zmgGetParam($_REQUEST, 'zmg_upload_name', ''));
         $descr = zmgSQLEscape(zmgGetParam($_REQUEST, 'zmg_upload_descr', ''));
         $data = array('name' => $name, 'filename' => $medium, 'descr' => $descr, 'published' => 1, 'gid' => $gallery->gid);
         $obj->setGalleryDir($gallery->dir);
         //saves a SQL query later on...
         //do some additional validation of strings
         $data['name'] = $events->fire('onvalidate', $data['name']);
         if (!$data['name']) {
             $data['name'] = $name;
         }
         $data['descr'] = $events->fire('onvalidate', $data['descr']);
         if (!$data['descr']) {
             $data['descr'] = $descr;
         }
         if (!$obj->bind($data)) {
             zmgToolboxPlugin::registerError(T_('Upload media'), T_('Medium could not be saved') . ': ' . $obj->getError());
         } else {
             if (!zmgFileHelper::copy($src_path . $medium, $dest_path . $medium)) {
                 zmgToolboxPlugin::registerError(T_('Upload media'), T_('Unable to copy file') . ' ' . $medium);
             } else {
                 if (!zmgFileHelper::delete($src_path . $medium)) {
                     zmgToolboxPlugin::registerError(T_('Upload media'), T_('Unable to delete temporary file') . ' ' . $medium);
                 } else {
                     if (!zmgToolboxPlugin::processMedium($obj, $gallery)) {
                         zmgToolboxPlugin::registerError(T_('Upload media'), T_('Medium could not be processed') . ' ' . $medium);
                     } else {
                         if (!$obj->store()) {
                             //now save this medium in our DB
                             zmgToolboxPlugin::registerError(T_('Upload media'), T_('Medium could not be saved') . ': ' . $obj->getError());
                         }
                     }
                 }
             }
         }
         //delete medium from session data: fourth parameter as TRUE
         $session->update('uploadtool.fancyfiles', $medium, ZMG_DATATYPE_ARRAY, true);
     }
     zmgToolboxPlugin::throwErrors();
 }
 function zmgMediumMetadata(&$medium)
 {
     $config =& zmgFactory::getConfig();
     $events =& zmgFactory::getEvents();
     $this->_mid = $medium->mid;
     $this->_ext = $medium->getExtension();
     zmgimport('org.zoomfactory.lib.mime.zmgMimeHelper');
     $path = $medium->getAbsPath(ZMG_MEDIUM_ORIGINAL . $config->get('filesystem/mediapath'));
     if (zmgMimeHelper::isImage($this->_ext)) {
         $this->_raw = $events->fire('ongetimagemetadata', false, $medium);
     } else {
         if (zmgMimeHelper::isAudio($this->_ext)) {
             $this->_raw = $events->fire('ongetaudiometadata', false, $path);
         } else {
             if (zmgMimeHelper::isVideo($this->_ext)) {
                 $this->_raw = $events->fire('ongetvideometadata', false, $path);
             }
         }
     }
 }
<?php

/**
 * zOOm Media Gallery! - a multi-gallery component 
 * 
 * @package zmg
 * @version $Revision$
 * @author Mike de Boer <mike AT zoomfactory.org>
 * @copyright Copyright &copy; 2007, Mike de Boer. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GPL
 */
//list of global constants:
define("_ZMG_EXEC", 1);
define("ZMG_ABS_PATH", preg_replace('#[/\\\\]+administrator#', '', dirname(__FILE__)));
define("ZMG_ADMIN", 1);
//load all required libraries
include ZMG_ABS_PATH . '/lib/initzoom.php';
$view =& zmgFactory::getView();
$events =& zmgFactory::getEvents();
$view->setAndRun();
$events->fire('onfinish');
 function getMediaMetadata($mid)
 {
     $zoom =& zmgFactory::getEvents()->fire('ongetcore');
     $medium = $zoom->getMedium($mid);
     return array($medium->getMetadata());
 }
 /**
  * Chmods files and directories recursively to given permissions. Available from 1.0.0 up.
  * @param path The starting file or directory (no trailing slash)
  * @param filemode Integer value to chmod files. NULL = dont chmod files.
  * @param dirmode Integer value to chmod directories. NULL = dont chmod directories.
  * @return TRUE=all succeeded FALSE=one or more chmods failed
  */
 function chmodRecursive($path, $filemode = 0644, $dirmode = 0777)
 {
     $ret = true;
     $config =& zmgFactory::getConfig();
     $events =& zmgFactory::getEvents();
     if (is_dir($path)) {
         $dh = opendir($path);
         while ($file = readdir($dh)) {
             if ($file != '.' && $file != '..') {
                 $fullpath = $path . DS . $file;
                 if (is_dir($fullpath)) {
                     $ret = zmgFileHelper::chmodRecursive($fullpath, $filemode, $dirmode);
                 } else {
                     if (isset($filemode)) {
                         if ($config->get('plugins/safemode/general/enable') == 1) {
                             $ret = $events->fire('onchmod', $fullpath, $filemode);
                         } else {
                             $ret = (bool) @chmod($fullpath, $filemode);
                         }
                     }
                 }
             }
         }
         closedir($dh);
         if (isset($dirmode)) {
             if ($config->get('plugins/safemode/general/enable') == 1) {
                 $ret = $events->fire('onchmod', $path, $dirmode);
             } else {
                 $ret = (bool) @chmod($path, $dirmode);
             }
         }
     } else {
         if (isset($filemode)) {
             if ($config->get('plugins/safemode/general/enable') == 1) {
                 $ret = $events->fire('onchmod', $path, $filemode);
             } else {
                 $ret = (bool) @chmod($path, $filemode);
             }
         }
     }
     return $ret;
 }