"user"); var $rules = array(); /** * Is this item an album? * @return true if it's an album */ public function is_album() { return $this->type == 'album'; } /** * Is this item a photo? * @return true if it's a photo */ public function is_photo() { return $this->type == 'photo'; } public function delete() { $path = $this->file_path(); parent::delete(); // If there is no name, the path is invalid so don't try to delete if (!empty($this->name)) { if ($this->is_album()) { dir::unlink($path); } else { unlink($path); } } } /** * Move this item to the specified target. * * @chainable * @param Item_Model $target Target item (must be an album * @return ORM_MTPP */ function move_to($target) { $original_path = $this->file_path(); $original_resize_path = $this->resize_path(); $original_thumbnail_path = $this->thumbnail_path(); parent::move_to($target, true); rename($original_path, $this->file_path()); if (file_exists($original_resize_path)) { rename($original_resize_path, $this->resize_path()); } if (file_exists($original_thumbnail_path)) { rename($original_thumbnail_path, $this->thumbnail_path()); } return $this; } /** * album: /var/albums/album1/album2 * photo: /var/albums/album1/album2/photo.jpg */ public function file_path() { if ($this->is_album()) { return $this->_relative_path(VARPATH . "albums", "", ""); } else { return $this->_relative_path(VARPATH . "albums", "", ""); } } /** * album: http://example.com/gallery3/var/resizes/album1/ * photo: http://example.com/gallery3/var/albums/album1/photo.jpg */ public function file_url($full_uri=false) { $func = $full_uri ? "abs_file" : "file"; return $this->_relative_path(url::$func("") . "var/albums", "", ""); } /** * album: /var/resizes/album1/.thumb.jpg * photo: /var/albums/album1/photo.thumb.jpg */ public function thumbnail_path() { if ($this->is_album()) { return $this->_relative_path(VARPATH . "resizes", "", "/.thumb.jpg"); } else { return $this->_relative_path(VARPATH . "resizes", ".thumb", ""); } } /** * album: http://example.com/gallery3/var/resizes/album1/.thumb.jpg * photo: http://example.com/gallery3/var/albums/album1/photo.thumb.jpg */ public function thumbnail_url($full_uri=true) { $func = $full_uri ? "abs_file" : "file"; if ($this->is_album()) { return $this->_relative_path(url::$func("") . "var/resizes", "", "/.thumb.jpg"); } else { return $this->_relative_path(url::$func("") . "var/resizes", ".thumb", ""); } } /** * album: /var/resizes/album1/.resize.jpg * photo: /var/albums/album1/photo.resize.jpg */ public function resize_path() { if ($this->is_album()) { return $this->_relative_path(VARPATH . "resizes", "", "/.resize.jpg"); } else { return $this->_relative_path(VARPATH . "resizes", ".resize", ""); } } /** * album: http://example.com/gallery3/var/resizes/album1/.resize.jpg * photo: http://example.com/gallery3/var/albums/album1/photo.resize.jpg */ public function resize_url($full_uri=true) { $func = $full_uri ? "abs_file" : "file"; if ($this->is_album()) { return $this->_relative_path(url::$func("") . "var/resizes", "", "/.resize.jpg"); } else { return $this->_relative_path(url::$func("") . "var/resizes", ".resize", ""); } } /** * Build a thumbnail for this item from the image provided with the * given width and height * * @chainable * @param string $filename the path to an image * @param integer $width the desired width of the thumbnail * @param integer $height the desired height of the thumbnail * @return ORM */ public function set_thumbnail($filename, $width, $height) { Image::factory($filename) ->resize($width, $height, Image::AUTO) ->save($this->thumbnail_path()); $dims = getimagesize($this->thumbnail_path()); $this->thumbnail_width = $dims[0]; $this->thumbnail_height = $dims[1]; return $this; } /** * Build a resize for this item from the image provided with the * given width and height * * @chainable * @param string $filename the path to an image * @param integer $width the desired width of the resize * @param integer $height the desired height of the resize * @return ORM */ public function set_resize($filename, $width, $height) { Image::factory($filename) ->resize($width, $height, Image::AUTO) ->save($this->resize_path()); $dims = getimagesize($this->resize_path()); $this->resize_width = $dims[0]; $this->resize_height = $dims[1]; return $this; } /** * Return the relative path to this item's file. * @param string $prefix prefix to the path (eg "/var" or "http://foo.com/var") * @param string $tag a tag to specify before the extension (eg ".thumb", ".resize") * @param string $suffix suffix to add to end of the path * @return a path */ private function _relative_path($prefix, $tag, $suffix) { $paths = array($prefix); foreach ($this->parents() as $parent) { if ($parent->id > 1) { $paths[] = $parent->name; } } $paths[] = $this->name; $path = implode($paths, "/"); if ($tag) { $pi = pathinfo($path); $path = "{$pi['dirname']}/{$pi['filename']}{$tag}.{$pi['extension']}"; } if ($suffix) { $path .= $suffix; } return $path; } /** * @see ORM::__get() */ public function __get($column) { if (substr($column, -5) == "_edit") { $real_column = substr($column, 0, strlen($column) - 5); if (access::can("edit", $this)) { return "id}-{$real_column}\">" . "{$this->$real_column}"; } else { return parent::__get($real_column); } } else if ($column == "owner") { // This relationship depends on an outside module, which may not be present so handle // failures gracefully. try { return parent::__get($column); } catch (Exception $e) { return null; } } else { return parent::__get($column); } } }