72 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * @file include/photos.php
 | 
						|
 * @brief Functions related to photo handling.
 | 
						|
 */
 | 
						|
use Friendica\Core\Cache;
 | 
						|
use Friendica\Core\Config;
 | 
						|
use Friendica\Core\PConfig;
 | 
						|
 | 
						|
function getGps($exifCoord, $hemi) {
 | 
						|
	$degrees = count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0;
 | 
						|
	$minutes = count($exifCoord) > 1 ? gps2Num($exifCoord[1]) : 0;
 | 
						|
	$seconds = count($exifCoord) > 2 ? gps2Num($exifCoord[2]) : 0;
 | 
						|
 | 
						|
	$flip = ($hemi == 'W' || $hemi == 'S') ? -1 : 1;
 | 
						|
 | 
						|
	return floatval($flip * ($degrees + ($minutes / 60) + ($seconds / 3600)));
 | 
						|
}
 | 
						|
 | 
						|
function gps2Num($coordPart) {
 | 
						|
	$parts = explode('/', $coordPart);
 | 
						|
 | 
						|
	if (count($parts) <= 0)
 | 
						|
		return 0;
 | 
						|
 | 
						|
	if (count($parts) == 1)
 | 
						|
		return $parts[0];
 | 
						|
 | 
						|
	return floatval($parts[0]) / floatval($parts[1]);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Fetch the photo albums that are available for a viewer
 | 
						|
 *
 | 
						|
 * The query in this function is cost intensive, so it is cached.
 | 
						|
 *
 | 
						|
 * @param int $uid User id of the photos
 | 
						|
 * @param bool $update Update the cache
 | 
						|
 *
 | 
						|
 * @return array Returns array of the photo albums
 | 
						|
 */
 | 
						|
function photo_albums($uid, $update = false) {
 | 
						|
	$sql_extra = permissions_sql($uid);
 | 
						|
 | 
						|
	$key = "photo_albums:".$uid.":".local_user().":".remote_user();
 | 
						|
	$albums = Cache::get($key);
 | 
						|
	if (is_null($albums) || $update) {
 | 
						|
		if (!Config::get('system', 'no_count', false)) {
 | 
						|
			/// @todo This query needs to be renewed. It is really slow
 | 
						|
			// At this time we just store the data in the cache
 | 
						|
			$albums = q("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created`
 | 
						|
				FROM `photo`
 | 
						|
				WHERE `uid` = %d  AND `album` != '%s' AND `album` != '%s' $sql_extra
 | 
						|
				GROUP BY `album` ORDER BY `created` DESC",
 | 
						|
				intval($uid),
 | 
						|
				dbesc('Contact Photos'),
 | 
						|
				dbesc(t('Contact Photos'))
 | 
						|
			);
 | 
						|
		} else {
 | 
						|
			// This query doesn't do the count and is much faster
 | 
						|
			$albums = q("SELECT DISTINCT(`album`), '' AS `total`
 | 
						|
				FROM `photo` USE INDEX (`uid_album_scale_created`)
 | 
						|
				WHERE `uid` = %d  AND `album` != '%s' AND `album` != '%s' $sql_extra",
 | 
						|
				intval($uid),
 | 
						|
				dbesc('Contact Photos'),
 | 
						|
				dbesc(t('Contact Photos'))
 | 
						|
			);
 | 
						|
		}
 | 
						|
		Cache::set($key, $albums, CACHE_DAY);
 | 
						|
	}
 | 
						|
	return $albums;
 | 
						|
}
 |