[pLog-svn] r909 - plog/trunk/class/gallery/dao
mark at devel.plogworld.net
mark at devel.plogworld.net
Tue Feb 1 14:31:58 GMT 2005
Author: mark
Date: 2005-02-01 14:31:58 +0000 (Tue, 01 Feb 2005)
New Revision: 909
Modified:
plog/trunk/class/gallery/dao/galleryalbums.class.php
Log:
Fixed the bug http://bugs.plogworld.net/view.php?id=190
Modified: plog/trunk/class/gallery/dao/galleryalbums.class.php
===================================================================
--- plog/trunk/class/gallery/dao/galleryalbums.class.php 2005-02-01 09:21:58 UTC (rev 908)
+++ plog/trunk/class/gallery/dao/galleryalbums.class.php 2005-02-01 14:31:58 UTC (rev 909)
@@ -1,458 +1,461 @@
-<?php
-
- include_once( PLOG_CLASS_PATH."class/dao/model.class.php" );
- include_once( PLOG_CLASS_PATH."class/data/timestamp.class.php" );
- include_once( PLOG_CLASS_PATH."class/gallery/dao/galleryalbum.class.php" );
- include_once( PLOG_CLASS_PATH."class/gallery/dao/galleryresources.class.php" );
- include_once( PLOG_CLASS_PATH."class/data/textfilter.class.php" );
-
- /**
- * Database access for GalleryAlbum objects.
- *
- * Please keep in mind that in the context of this library, every album has to have an user who
- * owns it. When this library is used within pLog, users don't own albums but blogs do so we will
- * use blog identifier instead of user identifiers. The reason for this change on how things are
- * called was that this library can also be used outside pLog, and outside pLog we will most likely
- * not have blogs but users.
- *
- * @see GalleryAlbum
- */
- class GalleryAlbums extends Model
- {
-
- var $_childAlbums;
- var $resources;
- var $_counts;
-
- function GalleryAlbums()
- {
- $this->Model();
- $this->_childAlbums = Array();
- // to speed up things a bit...
- $this->_counts = null;
- }
-
- /**
- * Returns an array with all the albums that belong to the given
- * owner
- *
- * @param ownerId The identifier of the owner whose albums we'd like to fetch
- * @param onlyShownAlbums Returns only those albums that have the show_album
- * field set to true, or all of them otherwise
- * @param page
- * @param itemsPerPage
- * @return An array containing GalleryAlbum objects, representing the
- * albums we fetched from the db.
- */
- function getUserAlbums( $ownerId, $onlyShownAlbums = false, $page = DEFAULT_PAGING_ENABLED, $itemsPerPage = DEFAULT_ITEMS_PER_PAGE )
- {
- $query = "SELECT * FROM ".$this->getPrefix()."gallery_albums WHERE owner_id = $ownerId";
- if( $onlyShownAlbums )
- $query .=" AND show_album = 1";
-
- return $this->_getAlbumsFromQuery( $query, $page, $itemsPerPage );
- }
-
- /**
- * Returns a specific album from the database.
- *
- * @param id A valid album identifier.
- * @param ownerId (optional) The album should have the given id _and_ it should
- * belong to the given user.
- * @param fetchResources (optional) Whether at the same time, we should also fetch the
- * resources that are associated to this album. Set it to 'false' if you only need
- * to access the album and do not need to use methods such as GalleryAlbum::getResources()
- * to fetch the resources that have been categorized under this album. It of course
- * saves resources and database queries.
- * @param onlyShownAlbums Forces to retrieve only the albums that have been set to appear
- * in the main page. If set to 'true', we will generate an error if the album exists,
- * has the specified id and belongs to the specified user _but_ it is not supposed to be
- * shown in the main page.
- * @return Returns a valid GalleryAlbum object or 'false' if the album could not be found.
- */
- function getAlbum( $id, $ownerId = -1, $fetchResources = true, $onlyShownAlbums = false )
- {
- // make sure that we don't have this album yet...
- if( isset($this->cache[$id])) {
- return $this->cache[$id];
- }
-
- // otherwise, continue the normal process...
- $query = "SELECT * FROM ".$this->getPrefix()."gallery_albums WHERE id = $id";
- if( $ownerId != -1 )
- $query .= " AND owner_id = $ownerId";
- if( $onlyShownAlbums )
- $query .= " AND show_album = 1";
-
- return $this->_getAlbumFromQuery( $query );
- }
-
- /**
- * Returns a specific album from the database given its 'mangled name'
- *
- * @param id A valid album identifier.
- * @param ownerId (optional) The album should have the given id _and_ it should
- * belong to the given user.
- * @param fetchResources (optional) Whether at the same time, we should also fetch the
- * resources that are associated to this album. Set it to 'false' if you only need
- * to access the album and do not need to use methods such as GalleryAlbum::getResources()
- * to fetch the resources that have been categorized under this album. It of course
- * saves resources and database queries.
- * @param onlyShownAlbums Forces to retrieve only the albums that have been set to appear
- * in the main page. If set to 'true', we will generate an error if the album exists,
- * has the specified id and belongs to the specified user _but_ it is not supposed to be
- * shown in the main page.
- * @return Returns a valid GalleryAlbum object or 'false' if the album could not be found.
- */
- function getAlbumByName( $id, $ownerId = -1, $fetchResources = true, $onlyShownAlbums = false )
- {
- // otherwise, continue the normal process...
- $query = "SELECT * FROM ".$this->getPrefix()."gallery_albums WHERE mangled_name = '".Db::qstr($id)."'";
- if( $ownerId != -1 )
- $query .= " AND owner_id = $ownerId";
- if( $onlyShownAlbums )
- $query .= " AND show_album = 1";
-
- return $this->_getAlbumFromQuery( $query );
- }
-
- /**
- * @private
- */
- function _getAlbumFromQuery( $query )
- {
- $result = $this->Execute( $query );
-
- if( !$result )
- return false;
-
- if( $result->RowCount() == 0 )
- return false;
-
- $row = $result->FetchRow();
- $album = $this->_fetchAlbumInformation( $row, $fetchResources, $onlyShownAlbums );
-
- // ...and keep a copy of the object we just fetched
- // just in case, one never knows :)
- $this->cache[$id] = $album;
-
- return $album;
- }
-
- /**
- * Returns an array with all the child albums of the given album, but only
- * the ones at the first level (it is not recursive!)
- *
- * @param albumId The album identfitier whose children we'd like to get.
- * @param ownerId To whom should this album belong.
- * @param onlyShownAlbums Returns only those albums that have the show_album
- * field set to true, or all of them otherwise
- * @return An array of GalleryAlbum objects
- */
- function getChildAlbums( $albumId, $ownerId, $onlyShownAlbums = false )
- {
- $query = "SELECT * FROM ".$this->getPrefix()."gallery_albums
- WHERE parent_id = $albumId AND
- owner_id = $ownerId";
- if( $onlyShownAlbums )
- $query .= " AND show_album = 1";
-
- return $this->_getAlbumsFromQuery( $query );
- }
-
- /**
- * @private
- * @see getUserAlbums
- */
- function _getAlbumsFromQuery( $query, $page = DEFAULT_PAGING_ENABLED, $itemsPerPage = DEFAULT_ITEMS_PER_PAGE )
- {
- $result = $this->Execute( $query, $page, $itemsPerPage );
-
- // return empty array if the query didn't succeed
- if( !$result )
- return Array();
-
- $albums = Array();
- while( $row = $result->FetchRow()) {
- array_push( $albums, $this->_fetchAlbumInformation( $row ));
- }
-
- return $albums;
- }
-
- /**
- * Adds an album to the database
- *
- * @
- * @return Returns true if successful or false otherwise.
- */
- function addAlbum( $album )
- {
- $tf = new Textfilter();
- $query = "INSERT INTO ".$this->getPrefix()."gallery_albums (
- owner_id, description, name, flags, parent_id, properties,
- show_album, normalized_name, normalized_description, mangled_name )
- VALUES (".
- $album->getOwnerId().", '".Db::qstr($album->getDescription())."', '".
- Db::qstr($album->getName())."', 0, ".$album->getParentId().", '".
- serialize($album->getProperties())."', 1,'".
- $tf->normalizeText($album->getName())."','".
- $tf->normalizeText($album->getDescription())."', '".
- $tf->urlize($album->getName())."');";
-
- $result = $this->Execute( $query );
-
- if( !$result )
- return false;
-
- // return the id of the last row we inserted, which will be the id of the album
- $result = $this->_db->Insert_ID();
-
- return $result;
- }
-
- /**
- * @private
- */
- function getNumChildren( $albumId )
- {
- $query = "SELECT COUNT(*) AS num_children FROM ".$this->getPrefix()."gallery_albums
- WHERE parent_id = $albumId";
- $result = $this->Execute( $query );
- if( !$result )
- return 0;
-
- $row = $result->FetchRow();
-
- return $row["num_children"];
- }
-
- /**
- * updates an album in the db
- *
- * @param album A GalleryAlbum object that already exists in the db.
- * @param Returns true if successful or false otherwise.
- */
- function updateAlbum( $album )
- {
- $tf = new TextFilter();
- $query = "UPDATE ".$this->getPrefix()."gallery_albums SET
- description = '".Db::qstr($album->getDescription())."',
- name = '".Db::qstr($album->getName())."',
- parent_id = ".$album->getParentId().",
- properties = '".serialize($album->getProperties())."',
- show_album = ".$album->getShowAlbum().",
- normalized_name = '".$tf->normalizeText($album->getName())."',
- normalized_description = '".$tf->normalizeText($album->getDescription())."',
- mangled_name = '".$tf->urlize($album->getName())."'
- WHERE id = ".$album->getId().";";
-
- return $this->Execute( $query );
- }
-
- /**
- * removes an album from the db
- *
- * @param albumId The album identifier
- * @param ownerId The user identifier to whom the album belongs (optional)
- * @return True if successful or false otherwise.
- */
- function deleteAlbum( $albumId, $userId = -1 )
- {
- $query = "DELETE FROM ".$this->getPrefix()."gallery_albums
- WHERE id = $albumId";
- if( $userId != -1 )
- $query .= " AND owner_id = $userId";
-
- return $this->Execute( $query );
- }
-
- /**
- * @private
- */
- function _getNumResourcesOld( $albumId )
- {
- $query = "SELECT COUNT(*) AS total FROM ".$this->getPrefix()."gallery_resources
- WHERE album_id = $albumId";
-
- $result = $this->Execute( $query );
-
- if( !$result )
- return 0;
-
- $row = $result->FetchRow();
-
- if( $row["total"] == "" )
- return 0;
- else
- return $row["total"];
- }
-
- /**
- * @private
- * Alternative version as the above, faster when loading lots of albums
- */
- function _getNumResources( $albumId )
- {
- // if we haven't loaded them all yet...
- $prefix = $this->getPrefix();
- if( $this->_counters == null ) {
- $query = "SELECT album_id, COUNT(*) AS total FROM {$prefix}gallery_resources GROUP BY album_id";
-
- $result = $this->Execute( $query );
-
- if( !$result )
- return 0;
-
- while( $row = $result->FetchRow()) {
- $id = $row["album_id"];
- $this->_counters[$id] = $row["total"];
- }
- }
-
- $total = $this->_counters[$albumId];
-
- if( $total == "" ) $total = 0;
-
- return $total;
- }
-
- /**
- * returns how many albums this user has
- *
- * @param userId
- * @return The number of albums, or 0 if none or error
- */
- function getNumUserAlbums( $userId )
- {
- $prefix = $this->getPrefix();
- $table = "{$prefix}gallery_albums";
- $cond = "owner_id = '".Db::qstr($userId)."'";
-
- return( $this->getNumItems( $table, $cond ));
- }
-
- /**
- * returns all the albums of the blog in an array. The key of the array is the
- * parent id of all the albums in the position, and each position is either an
- * array with all the albums that share the same parent id or empty if none
- *
- * @param userId
- * @param albumId
- * @return An associative array
- */
- function getUserAlbumsGroupedByParentId( $userId, $albumId = 0 )
- {
- $prefix = $this->getPrefix();
- $query = "SELECT * FROM {$prefix}gallery_albums
- WHERE owner_id = '".Db::qstr($userId)."'
- ORDER BY name ASC";
-
- $result = $this->Execute( $query );
-
- if( !$result )
- return Array();
-
- $albums = Array();
- $ids = Array();
- $ids[] = 0;
- while( $row = $result->FetchRow()) {
- $album = new GalleryAlbum( $row["owner_id"],
- $row["name"],
- $row["description"],
- $row["flags"],
- $row["parent_id"],
- $row["date"],
- unserialize($row["properties"]),
- $row["show_album"],
- $row["id"] );
- $key = $album->getParentId();
- if( $albums["$key"] == "" )
- $albums["$key"] = Array();
- $albums["$key"][] = $album;
-
- $ids[] = $album->getId();
- }
-
- return $albums;
- }
-
- /**
- * returns the albums of a blog ordered in the same way as they are nested. Please use
- * $album->getValue("level") to check their proper nesting.
- *
- * @param userId
- */
- function getNestedAlbumList( $userId )
- {
- $albums = $this->getUserAlbumsGroupedByParentId( $userId );
- $nestedAlbums = $this->_getNestedAlbumList( $albums );
-
- return $nestedAlbums;
- }
-
-
- /**
- * @static
- * @private
- */
- function _getNestedAlbumList( $albums, $start = 0, $level = -1 )
- {
- $level++;
- if( $albums["$start"] == "" )
- return Array();
-
- foreach( $albums["$start"] as $album ) {
- // do the replacing
- $album->setValue( "level", $level );
- $results[] = $album;
-
- // make a recursive call
- $tmp = $this->_getNestedAlbumList( $albums, $album->getId(), $level);
- foreach( $tmp as $tmpAlbum )
- $results[] = $tmpAlbum;
- }
-
- return $results;
- }
-
- /**
- * @private
- */
- function _fetchAlbumInformation( $row, $fetchResources = true, $onlyShownAlbums = false )
- {
- $album = new GalleryAlbum( $row["owner_id"],
- $row["name"],
- $row["description"],
- $row["flags"],
- $row["parent_id"],
- $row["date"],
- unserialize($row["properties"]),
- $row["show_album"],
- $row["id"] );
-
- // fetch the number of children and the GalleryAlbum child
- // objects that "hang" from this one
- //$album->setNumChildren( $this->getNumChildren($row["id"]));
- $id = $row["id"];
- $ownerId = $row["owner_id"];
- if( !isset($this->_childAlbums[$id])) {
- $this->_childAlbums[$id] = $this->getChildAlbums( $id, $ownerId );
- }
- $album->setChildren( $this->_childAlbums[$id] );
-
- $album->setNumResources( $this->_getNumResources( $id ));
-
- // fetch the resources that belong to this album
- /*if( $fetchResources ) {
- $this->log->debug("fetching resources for album id = $id<br/>");
- if( $this->resources == "" )
- $this->resources = new GalleryResources();
- $albumResources = $this->resources->getUserResources( $row["owner_id"], $id );
- $album->setResources( $albumResources );
- }*/
-
- return $album;
- }
- }
+<?php
+
+ include_once( PLOG_CLASS_PATH."class/dao/model.class.php" );
+ include_once( PLOG_CLASS_PATH."class/data/timestamp.class.php" );
+ include_once( PLOG_CLASS_PATH."class/gallery/dao/galleryalbum.class.php" );
+ include_once( PLOG_CLASS_PATH."class/gallery/dao/galleryresources.class.php" );
+ include_once( PLOG_CLASS_PATH."class/data/textfilter.class.php" );
+
+ /**
+ * Database access for GalleryAlbum objects.
+ *
+ * Please keep in mind that in the context of this library, every album has to have an user who
+ * owns it. When this library is used within pLog, users don't own albums but blogs do so we will
+ * use blog identifier instead of user identifiers. The reason for this change on how things are
+ * called was that this library can also be used outside pLog, and outside pLog we will most likely
+ * not have blogs but users.
+ *
+ * @see GalleryAlbum
+ */
+ class GalleryAlbums extends Model
+ {
+
+ var $_childAlbums;
+ var $resources;
+ var $_counts;
+
+ function GalleryAlbums()
+ {
+ $this->Model();
+ $this->_childAlbums = Array();
+ // to speed up things a bit...
+ $this->_counts = null;
+ }
+
+ /**
+ * Returns an array with all the albums that belong to the given
+ * owner
+ *
+ * @param ownerId The identifier of the owner whose albums we'd like to fetch
+ * @param onlyShownAlbums Returns only those albums that have the show_album
+ * field set to true, or all of them otherwise
+ * @param page
+ * @param itemsPerPage
+ * @return An array containing GalleryAlbum objects, representing the
+ * albums we fetched from the db.
+ */
+ function getUserAlbums( $ownerId, $onlyShownAlbums = false, $page = DEFAULT_PAGING_ENABLED, $itemsPerPage = DEFAULT_ITEMS_PER_PAGE )
+ {
+ $query = "SELECT * FROM ".$this->getPrefix()."gallery_albums WHERE owner_id = $ownerId";
+ if( $onlyShownAlbums )
+ $query .=" AND show_album = 1";
+
+ return $this->_getAlbumsFromQuery( $query, $page, $itemsPerPage );
+ }
+
+ /**
+ * Returns a specific album from the database.
+ *
+ * @param id A valid album identifier.
+ * @param ownerId (optional) The album should have the given id _and_ it should
+ * belong to the given user.
+ * @param fetchResources (optional) Whether at the same time, we should also fetch the
+ * resources that are associated to this album. Set it to 'false' if you only need
+ * to access the album and do not need to use methods such as GalleryAlbum::getResources()
+ * to fetch the resources that have been categorized under this album. It of course
+ * saves resources and database queries.
+ * @param onlyShownAlbums Forces to retrieve only the albums that have been set to appear
+ * in the main page. If set to 'true', we will generate an error if the album exists,
+ * has the specified id and belongs to the specified user _but_ it is not supposed to be
+ * shown in the main page.
+ * @return Returns a valid GalleryAlbum object or 'false' if the album could not be found.
+ */
+ function getAlbum( $id, $ownerId = -1, $fetchResources = true, $onlyShownAlbums = false )
+ {
+ // make sure that we don't have this album yet...
+ if( isset($this->cache[$id])) {
+ return $this->cache[$id];
+ }
+
+ // otherwise, continue the normal process...
+ $query = "SELECT * FROM ".$this->getPrefix()."gallery_albums WHERE id = $id";
+ if( $ownerId != -1 )
+ $query .= " AND owner_id = $ownerId";
+ if( $onlyShownAlbums )
+ $query .= " AND show_album = 1";
+
+ return $this->_getAlbumFromQuery( $query );
+ }
+
+ /**
+ * Returns a specific album from the database given its 'mangled name'
+ *
+ * @param id A valid album identifier.
+ * @param ownerId (optional) The album should have the given id _and_ it should
+ * belong to the given user.
+ * @param fetchResources (optional) Whether at the same time, we should also fetch the
+ * resources that are associated to this album. Set it to 'false' if you only need
+ * to access the album and do not need to use methods such as GalleryAlbum::getResources()
+ * to fetch the resources that have been categorized under this album. It of course
+ * saves resources and database queries.
+ * @param onlyShownAlbums Forces to retrieve only the albums that have been set to appear
+ * in the main page. If set to 'true', we will generate an error if the album exists,
+ * has the specified id and belongs to the specified user _but_ it is not supposed to be
+ * shown in the main page.
+ * @return Returns a valid GalleryAlbum object or 'false' if the album could not be found.
+ */
+ function getAlbumByName( $id, $ownerId = -1, $fetchResources = true, $onlyShownAlbums = false )
+ {
+ // otherwise, continue the normal process...
+ $query = "SELECT * FROM ".$this->getPrefix()."gallery_albums WHERE mangled_name = '".Db::qstr($id)."'";
+ if( $ownerId != -1 )
+ $query .= " AND owner_id = $ownerId";
+ if( $onlyShownAlbums )
+ $query .= " AND show_album = 1";
+
+ return $this->_getAlbumFromQuery( $query );
+ }
+
+ /**
+ * @private
+ */
+ function _getAlbumFromQuery( $query )
+ {
+ $result = $this->Execute( $query );
+
+ if( !$result )
+ return false;
+
+ if( $result->RowCount() == 0 )
+ return false;
+
+ $row = $result->FetchRow();
+ $album = $this->_fetchAlbumInformation( $row, $fetchResources, $onlyShownAlbums );
+
+ // ...and keep a copy of the object we just fetched
+ // just in case, one never knows :)
+ $this->cache[$id] = $album;
+
+ return $album;
+ }
+
+ /**
+ * Returns an array with all the child albums of the given album, but only
+ * the ones at the first level (it is not recursive!)
+ *
+ * @param albumId The album identfitier whose children we'd like to get.
+ * @param ownerId To whom should this album belong.
+ * @param onlyShownAlbums Returns only those albums that have the show_album
+ * field set to true, or all of them otherwise
+ * @return An array of GalleryAlbum objects
+ */
+ function getChildAlbums( $albumId, $ownerId, $onlyShownAlbums = false )
+ {
+ $query = "SELECT * FROM ".$this->getPrefix()."gallery_albums
+ WHERE parent_id = $albumId AND
+ owner_id = $ownerId";
+ if( $onlyShownAlbums )
+ $query .= " AND show_album = 1";
+
+ return $this->_getAlbumsFromQuery( $query );
+ }
+
+ /**
+ * @private
+ * @see getUserAlbums
+ */
+ function _getAlbumsFromQuery( $query, $page = DEFAULT_PAGING_ENABLED, $itemsPerPage = DEFAULT_ITEMS_PER_PAGE )
+ {
+ $result = $this->Execute( $query, $page, $itemsPerPage );
+
+ // return empty array if the query didn't succeed
+ if( !$result )
+ return Array();
+
+ $albums = Array();
+ while( $row = $result->FetchRow()) {
+ array_push( $albums, $this->_fetchAlbumInformation( $row ));
+ }
+
+ return $albums;
+ }
+
+ /**
+ * Adds an album to the database
+ *
+ * @
+ * @return Returns true if successful or false otherwise.
+ */
+ function addAlbum( $album )
+ {
+ $tf = new Textfilter();
+ $query = "INSERT INTO ".$this->getPrefix()."gallery_albums (
+ owner_id, description, name, flags, parent_id, properties,
+ show_album, normalized_name, normalized_description, mangled_name )
+ VALUES (".
+ $album->getOwnerId().", '".Db::qstr($album->getDescription())."', '".
+ Db::qstr($album->getName())."', 0, ".$album->getParentId().", '".
+ serialize($album->getProperties())."', 1,'".
+ $tf->normalizeText($album->getName())."','".
+ $tf->normalizeText($album->getDescription())."', '".
+ $tf->urlize($album->getName())."');";
+
+ $result = $this->Execute( $query );
+
+ if( !$result )
+ return false;
+
+ // return the id of the last row we inserted, which will be the id of the album
+ $result = $this->_db->Insert_ID();
+
+ return $result;
+ }
+
+ /**
+ * @private
+ */
+ function getNumChildren( $albumId )
+ {
+ $query = "SELECT COUNT(*) AS num_children FROM ".$this->getPrefix()."gallery_albums
+ WHERE parent_id = $albumId";
+ $result = $this->Execute( $query );
+ if( !$result )
+ return 0;
+
+ $row = $result->FetchRow();
+
+ return $row["num_children"];
+ }
+
+ /**
+ * updates an album in the db
+ *
+ * @param album A GalleryAlbum object that already exists in the db.
+ * @param Returns true if successful or false otherwise.
+ */
+ function updateAlbum( $album )
+ {
+ if ($album->getId() == $album->getParentId()){
+ return false;
+ }
+ $tf = new TextFilter();
+ $query = "UPDATE ".$this->getPrefix()."gallery_albums SET
+ description = '".Db::qstr($album->getDescription())."',
+ name = '".Db::qstr($album->getName())."',
+ parent_id = ".$album->getParentId().",
+ properties = '".serialize($album->getProperties())."',
+ show_album = ".$album->getShowAlbum().",
+ normalized_name = '".$tf->normalizeText($album->getName())."',
+ normalized_description = '".$tf->normalizeText($album->getDescription())."',
+ mangled_name = '".$tf->urlize($album->getName())."'
+ WHERE id = ".$album->getId().";";
+
+ return $this->Execute( $query );
+ }
+
+ /**
+ * removes an album from the db
+ *
+ * @param albumId The album identifier
+ * @param ownerId The user identifier to whom the album belongs (optional)
+ * @return True if successful or false otherwise.
+ */
+ function deleteAlbum( $albumId, $userId = -1 )
+ {
+ $query = "DELETE FROM ".$this->getPrefix()."gallery_albums
+ WHERE id = $albumId";
+ if( $userId != -1 )
+ $query .= " AND owner_id = $userId";
+
+ return $this->Execute( $query );
+ }
+
+ /**
+ * @private
+ */
+ function _getNumResourcesOld( $albumId )
+ {
+ $query = "SELECT COUNT(*) AS total FROM ".$this->getPrefix()."gallery_resources
+ WHERE album_id = $albumId";
+
+ $result = $this->Execute( $query );
+
+ if( !$result )
+ return 0;
+
+ $row = $result->FetchRow();
+
+ if( $row["total"] == "" )
+ return 0;
+ else
+ return $row["total"];
+ }
+
+ /**
+ * @private
+ * Alternative version as the above, faster when loading lots of albums
+ */
+ function _getNumResources( $albumId )
+ {
+ // if we haven't loaded them all yet...
+ $prefix = $this->getPrefix();
+ if( $this->_counters == null ) {
+ $query = "SELECT album_id, COUNT(*) AS total FROM {$prefix}gallery_resources GROUP BY album_id";
+
+ $result = $this->Execute( $query );
+
+ if( !$result )
+ return 0;
+
+ while( $row = $result->FetchRow()) {
+ $id = $row["album_id"];
+ $this->_counters[$id] = $row["total"];
+ }
+ }
+
+ $total = $this->_counters[$albumId];
+
+ if( $total == "" ) $total = 0;
+
+ return $total;
+ }
+
+ /**
+ * returns how many albums this user has
+ *
+ * @param userId
+ * @return The number of albums, or 0 if none or error
+ */
+ function getNumUserAlbums( $userId )
+ {
+ $prefix = $this->getPrefix();
+ $table = "{$prefix}gallery_albums";
+ $cond = "owner_id = '".Db::qstr($userId)."'";
+
+ return( $this->getNumItems( $table, $cond ));
+ }
+
+ /**
+ * returns all the albums of the blog in an array. The key of the array is the
+ * parent id of all the albums in the position, and each position is either an
+ * array with all the albums that share the same parent id or empty if none
+ *
+ * @param userId
+ * @param albumId
+ * @return An associative array
+ */
+ function getUserAlbumsGroupedByParentId( $userId, $albumId = 0 )
+ {
+ $prefix = $this->getPrefix();
+ $query = "SELECT * FROM {$prefix}gallery_albums
+ WHERE owner_id = '".Db::qstr($userId)."'
+ ORDER BY name ASC";
+
+ $result = $this->Execute( $query );
+
+ if( !$result )
+ return Array();
+
+ $albums = Array();
+ $ids = Array();
+ $ids[] = 0;
+ while( $row = $result->FetchRow()) {
+ $album = new GalleryAlbum( $row["owner_id"],
+ $row["name"],
+ $row["description"],
+ $row["flags"],
+ $row["parent_id"],
+ $row["date"],
+ unserialize($row["properties"]),
+ $row["show_album"],
+ $row["id"] );
+ $key = $album->getParentId();
+ if( $albums["$key"] == "" )
+ $albums["$key"] = Array();
+ $albums["$key"][] = $album;
+
+ $ids[] = $album->getId();
+ }
+
+ return $albums;
+ }
+
+ /**
+ * returns the albums of a blog ordered in the same way as they are nested. Please use
+ * $album->getValue("level") to check their proper nesting.
+ *
+ * @param userId
+ */
+ function getNestedAlbumList( $userId )
+ {
+ $albums = $this->getUserAlbumsGroupedByParentId( $userId );
+ $nestedAlbums = $this->_getNestedAlbumList( $albums );
+
+ return $nestedAlbums;
+ }
+
+
+ /**
+ * @static
+ * @private
+ */
+ function _getNestedAlbumList( $albums, $start = 0, $level = -1 )
+ {
+ $level++;
+ if( $albums["$start"] == "" )
+ return Array();
+
+ foreach( $albums["$start"] as $album ) {
+ // do the replacing
+ $album->setValue( "level", $level );
+ $results[] = $album;
+
+ // make a recursive call
+ $tmp = $this->_getNestedAlbumList( $albums, $album->getId(), $level);
+ foreach( $tmp as $tmpAlbum )
+ $results[] = $tmpAlbum;
+ }
+
+ return $results;
+ }
+
+ /**
+ * @private
+ */
+ function _fetchAlbumInformation( $row, $fetchResources = true, $onlyShownAlbums = false )
+ {
+ $album = new GalleryAlbum( $row["owner_id"],
+ $row["name"],
+ $row["description"],
+ $row["flags"],
+ $row["parent_id"],
+ $row["date"],
+ unserialize($row["properties"]),
+ $row["show_album"],
+ $row["id"] );
+
+ // fetch the number of children and the GalleryAlbum child
+ // objects that "hang" from this one
+ //$album->setNumChildren( $this->getNumChildren($row["id"]));
+ $id = $row["id"];
+ $ownerId = $row["owner_id"];
+ if( !isset($this->_childAlbums[$id])) {
+ $this->_childAlbums[$id] = $this->getChildAlbums( $id, $ownerId );
+ }
+ $album->setChildren( $this->_childAlbums[$id] );
+
+ $album->setNumResources( $this->_getNumResources( $id ));
+
+ // fetch the resources that belong to this album
+ /*if( $fetchResources ) {
+ $this->log->debug("fetching resources for album id = $id<br/>");
+ if( $this->resources == "" )
+ $this->resources = new GalleryResources();
+ $albumResources = $this->resources->getUserResources( $row["owner_id"], $id );
+ $album->setResources( $albumResources );
+ }*/
+
+ return $album;
+ }
+ }
?>
\ No newline at end of file
More information about the pLog-svn
mailing list