0,0 → 1,297 |
<?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 flags |
define("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 ""; |
else |
return " ".$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> ')); |
else |
return "<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 properties |
if(!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 properties |
if(!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 properties |
if(!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; |
} |
|
} |
|
|
?> |