<?php/*** Singapore gallery item class.** @author Tamlyn Rhodes <tam at zenology dot co dot uk>* @license http://opensource.org/licenses/gpl-license.php GNU General Public License* @copyright (c)2005-6 Tamlyn Rhodes* @version $Id: item.class.php,v 1.10 2006/09/08 15:29:22 tamlyn Exp $*///permissions bit flagsdefine("SG_GRP_READ", 1);define("SG_GRP_EDIT", 2);define("SG_GRP_ADD", 4);define("SG_GRP_DELETE", 8);define("SG_WLD_READ", 16);define("SG_WLD_EDIT", 32);define("SG_WLD_ADD", 64);define("SG_WLD_DELETE", 128);define("SG_IHR_READ", 17);define("SG_IHR_EDIT", 34);define("SG_IHR_ADD", 68);define("SG_IHR_DELETE", 136);/*** Abstract class from which sgImage and sgGallery are derived.** @abstract* @package singapore* @author Tamlyn Rhodes <tam at zenology dot co dot uk>* @copyright (c)2005-6 Tamlyn Rhodes*/class sgItem{/*** The id of the item. In the case of galleries this is the path to the* gallery from root and must be unique. For images it is the image file* name (or URL for remote images).* @var string*/var $id;/*** Username of the user to which the item belongs* @var string*/var $owner = "__nobody__";/*** Space-separated list of groups to which the item belongs* @var string*/var $groups = "";/*** Bit-field of permissions* Default is to inherit everything.* @var int*/var $permissions = 255;/*** Space-separated list of categories to which the item belongs (not used)* @var string*/var $categories = "";/*** The name or title of the item* @var string*/var $name = "";/*** The name of the original item creator (or anyone else)* @var string*/var $artist = "";/*** Email of the original item creator (or anyone else)* @var string*/var $email = "";/*** Optional copyright information* @var string*/var $copyright = "";/*** Multiline description of the item* @var string*/var $desc = "";/*** Date associated with item* @var string*/var $date = "";var $location = "";/*** Number of times item has been viewed* @var int*/var $hits = 0;/*** Unix timestamp of last time item was viewed* @var int*/var $lasthit = 0;/*** Pointer to the parent sgItem* @var sgItem*/var $parent;/*** Reference to the current config object* @var sgConfig*/var $config;/*** Reference to the current translator object* @var Translator*/var $translator;/*** Array in which the various sized thumbnails representing this item are stored* @var array*/var $thumbnails = array();/** Accessor methods */function name() { return $this->name; }function artist() { return $this->artist; }function date() { return $this->date; }function location() { return $this->location; }function description() { return $this->desc; }function canEdit() { return false; }function idEntities() { return htmlspecialchars($this->id); }/*** Removes script-generated HTML (BRs and URLs) but leaves any other HTML* @return string the description of the item*/function descriptionStripped(){$ret = str_replace("<br />","\n",$this->description());if($this->config->enable_clickable_urls) {//strip off html from autodetected URLs$ret = preg_replace('{<a href="('.SG_REGEXP_PROTOCOLURL.')\">\1</a>}', '\1', $ret);$ret = preg_replace('{<a href="http://('.SG_REGEXP_WWWURL.')">\1</a>}', '\1', $ret);$ret = preg_replace('{<a href="mailto:('.SG_REGEXP_EMAILURL.')">\1</a>}', '\1', $ret);}return $ret;}/*** If the current item has an artist specified, returns " by " followed* by the artist's name. Otherwise returns an empty string.* @return string*/function byArtistText(){if(empty($this->artist))return "";elsereturn " ".$this->translator->_g("artist name|by %s",$this->artist);}/*** Obfuscates the given email address by replacing "." with "dot" and "@" with "at"* @param boolean override the obfuscate_email config setting (optional)* @return string obfuscated email address or HTML mailto link*/function emailLink($forceObfuscate = false){if($this->config->obfuscate_email || $forceObfuscate)return strtr($this->email,array("@" => ' <b>'.$this->translator->_g("email|at").'</b> ', "." => ' <b>'.$this->translator->_g("email|dot").'</b> '));elsereturn "<a href=\"mailto:".$this->email."\">".$this->email."</a>";}function nameLink($action = null){return '<a href="'.$this->URL(0, $action).'">'.$this->nameForce().'</a>';}function parentURL($action = null){$perpage = $this->parent->isAlbum() ? $this->config->thumb_number_album : $this->config->thumb_number_gallery;return $this->parent->URL(floor($this->index() / $perpage) * $perpage, $action);}function parentLink($action = null){return '<a href="'.$this->parentURL($action).'">'.$this->parentText().'</a>';}function parentText(){return $this->translator->_g("gallery|Up");}/*** @return array associative array of item properties in the form "name" => "value"*/function detailsArray(){$ret = array();//generic propertiesif(!empty($this->date)) $ret[$this->translator->_g("Date")] = $this->date;if(!empty($this->location)) $ret[$this->translator->_g("Location")] = $this->location;if(!empty($this->desc)) $ret[$this->translator->_g("Description")] = $this->desc;if(!empty($this->email)) $ret[$this->translator->_g("Email")] = $this->emailLink();//image propertiesif(!empty($this->camera)) $ret[$this->translator->_g("Camera")] = $this->camera;if(!empty($this->lens)) $ret[$this->translator->_g("Lens")] = $this->lens;if(!empty($this->film)) $ret[$this->translator->_g("Film")] = $this->film;if(!empty($this->darkroom)) $ret[$this->translator->_g("Darkroom manipulation")] = $this->darkroom;if(!empty($this->digital)) $ret[$this->translator->_g("Digital manipulation")] = $this->digital;//special propertiesif(!empty($this->copyright)) $ret[$this->translator->_g("Copyright")] = $this->copyright;elseif(!empty($this->artist))$ret[$this->translator->_g("Copyright")] = $this->artist;if($this->config->show_views)$ret[$this->translator->_g("Viewed")] = $this->translator->_ng("viewed|%s time", "viewed|%s times",$this->hits);return $ret;}function isAlbum() { return false; }function isGallery() { return false; }function isImage() { return false; }/*** Returns a link to the image or gallery with the correct formatting and path** @param int page offset (optional)* @param string action to perform (optional)* @return string formatted URL*/function URL($startat = null, $action = null){$query = array();if($this->config->use_mod_rewrite) { //format url for use with mod_rewrite$ret = $this->config->base_url;$ret .= $this->isImage() ? $this->parent->idEncoded() : $this->idEncoded();if($startat) $ret .= ','.$startat;$ret .= '/';if($this->isImage()) $ret .= $this->idEncoded();if($action) $query[] = $this->config->url_action."=".$action;if($this->translator->language != $this->config->default_language) $query[] = $this->config->url_lang.'='.$this->translator->language;if($GLOBALS["sg"]->template != $this->config->default_template) $query[] = $this->config->url_template.'='.$GLOBALS["sg"]->template;if(!empty($query))$ret .= '?'.implode(ini_get('arg_separator.output'), $query);} else { //format plain url$query[] = $this->config->url_gallery."=".($this->isImage() ? $this->parent->idEncoded() : $this->idEncoded());if($this->isImage()) $query[] = $this->config->url_image."=".$this->idEncoded();if($startat) $query[] = $this->config->url_startat."=".$startat;if($action) $query[] = $this->config->url_action."=".$action;if($this->translator->language != $this->config->default_language)$query[] = $this->config->url_lang.'='.$this->translator->language;if(isset($GLOBALS["sg"]->template) && $GLOBALS["sg"]->template != $this->config->default_template)$query[] = $this->config->url_template.'='.$GLOBALS["sg"]->template;$ret = $this->config->index_file_url.implode(ini_get('arg_separator.output'), $query);}return $ret;}}?>