aboutsummaryrefslogtreecommitdiff
path: root/classes/TidypicsAlbum.php
diff options
context:
space:
mode:
Diffstat (limited to 'classes/TidypicsAlbum.php')
-rw-r--r--classes/TidypicsAlbum.php243
1 files changed, 243 insertions, 0 deletions
diff --git a/classes/TidypicsAlbum.php b/classes/TidypicsAlbum.php
new file mode 100644
index 000000000..e178acd5d
--- /dev/null
+++ b/classes/TidypicsAlbum.php
@@ -0,0 +1,243 @@
+<?php
+/**
+ * Tidypics Album class
+ *
+ * @package TidypicsAlbum
+ */
+
+
+class TidypicsAlbum extends ElggObject {
+ protected function initialise_attributes() {
+ parent::initialise_attributes();
+
+ $this->attributes['subtype'] = "album";
+ }
+
+ public function __construct($guid = null) {
+ parent::__construct($guid);
+ }
+
+ /**
+ * Delete album
+ *
+ * @return bool
+ */
+ public function delete() {
+
+ $this->deleteImages();
+ $this->deleteAlbumDir();
+
+ return parent::delete();
+ }
+
+ /**
+ * Get an array of image objects
+ *
+ * @param int $limit
+ * @param int $offset
+ * @return array
+ */
+ public function getImages($limit, $offset=0) {
+ $imageList = $this->getImageList();
+ if ($offset > count($imageList)) {
+ return array();
+ }
+
+ $imageList = array_slice($imageList, $offset, $limit);
+
+ $images = array();
+ foreach ($imageList as $guid) {
+ $images[] = get_entity($guid);
+ }
+ return $images;
+ }
+
+ /**
+ * View a list of images
+ *
+ * @param int $limit
+ * @param int $offset
+ * @return string
+ */
+ public function viewImages($limit, $offset=0) {
+ $images = $this->getImages($limit, $offset);
+ if (count($images) == 0) {
+ return '';
+ }
+
+ $count = $this->getSize();
+
+ return elgg_view_entity_list($images, $count, $offset, $limit, false, false, true);
+ }
+
+ /**
+ * Get the GUID of the album cover
+ *
+ * @return int
+ */
+ public function getCoverImageGuid() {
+ if ($this->getSize() == 0) {
+ return 0;
+ }
+
+ $guid = $this->cover;
+ $imageList = $this->getImageList();
+ if (!in_array($guid, $imageList)) {
+ // select random photo to be cover
+ $index = array_rand($imageList, 1);
+ $guid = $imageList[$index];
+ $this->cover = $guid;
+ }
+ return $guid;
+ }
+
+ /**
+ * Set the GUID for the album cover
+ *
+ * @param int $guid
+ * @return bool
+ */
+ public function setCoverImageGuid($guid) {
+ $imageList = $this->getImageList();
+ if (!in_array($guid, $imageList)) {
+ return false;
+ }
+ $this->cover = $guid;
+ return true;
+ }
+
+ /**
+ * Get the number of photos in the album
+ *
+ * @return int
+ */
+ public function getSize() {
+ return count($this->getImageList());
+ }
+
+ /**
+ * Returns an order list of image guids
+ *
+ * @return array
+ */
+ public function getImageList() {
+ $listString = $this->orderedImages;
+ if (!$listString) {
+ return array();
+ }
+ $list = unserialize($listString);
+ return $list;
+ }
+
+ /**
+ * Sets the album image order
+ *
+ * @param array $list An indexed array of image guids
+ */
+ public function setImageList($list) {
+ $listString = serialize($list);
+ $this->orderedImages = $listString;
+ }
+
+ /**
+ * Add new images to the front of the image list
+ *
+ * @param array $list An indexed array of image guids
+ */
+ public function prependImageList($list) {
+ $currentList = $this->getImageList();
+ $list = array_merge($list, $currentList);
+ $this->setImageList($list);
+ }
+
+ /**
+ * Get the GUID of the image before the current one
+ *
+ * @param int $currentGuid
+ * @return int
+ */
+ public function getPreviousImageGuid($currentGuid) {
+ $imageList = $this->getImageList();
+ $key = array_search($currentGuid, $imageList);
+ if ($key === FALSE) {
+ return 0;
+ }
+ $key--;
+ if ($key < 0) {
+ return 0;
+ }
+ return $imageList[$key];
+ }
+
+ /**
+ * Get the GUID of the image after the current one
+ *
+ * @param int $currentGuid
+ * @return int
+ */
+ public function getNextImageGuid($currentGuid) {
+ $imageList = $this->getImageList();
+ $key = array_search($currentGuid, $imageList);
+ if ($key === FALSE) {
+ return 0;
+ }
+ $key++;
+ if ($key >= count($imageList)) {
+ return 0;
+ }
+ return $imageList[$key];
+ }
+
+ /**
+ * Remove an image from the album list
+ *
+ * @param int $imageGuid
+ * @return bool
+ */
+ public function removeImage($imageGuid) {
+ $imageList = $this->getImageList();
+ $key = array_search($imageGuid, $imageList);
+ if ($key === FALSE) {
+ return FALSE;
+ }
+
+ unset($imageList[$key]);
+ $this->setImageList($imageList);
+
+ return TRUE;
+ }
+
+ protected function deleteImages() {
+ // get all the images from this album as long as less than 999 images
+ $images = elgg_get_entities(array(
+ "type=" => "object",
+ "subtype" => "image",
+ "container_guid" => $this->guid,
+ "limit" => ELGG_ENTITIES_NO_VALUE,
+ ));
+ if ($images) {
+ foreach ($images as $image) {
+ if ($image) {
+ $image->delete();
+ }
+ }
+ }
+ }
+
+ protected function deleteAlbumDir() {
+ $tmpfile = new ElggFile();
+ $tmpfile->setFilename('image/' . $this->guid . '/._tmp_del_tidypics_album_');
+ $tmpfile->subtype = 'image';
+ $tmpfile->owner_guid = $this->owner_guid;
+ $tmpfile->container_guid = $this->guid;
+ $tmpfile->open("write");
+ $tmpfile->write('');
+ $tmpfile->close();
+ $tmpfile->save();
+ $albumdir = eregi_replace('/._tmp_del_tidypics_album_', '', $tmpfile->getFilenameOnFilestore());
+ $tmpfile->delete();
+ if (is_dir($albumdir)) {
+ rmdir($albumdir);
+ }
+ }
+}