X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FPhoto.php;h=a25b2fa9d669e9fbddd451cd559c0e687d87c755;hb=045a0b2a007d869fc141f3f4a7a1761589565fdf;hp=229f22107717c268a9a60328c1748a92d2a081e2;hpb=e437c74d0e4e4ece4693a2e32513c3ecde7efb4d;p=friendica.git diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 229f221077..a25b2fa9d6 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -1,24 +1,27 @@ 0 ? self::gps2Num($exifCoord[0]) : 0; + $minutes = count($exifCoord) > 1 ? self::gps2Num($exifCoord[1]) : 0; + $seconds = count($exifCoord) > 2 ? self::gps2Num($exifCoord[2]) : 0; + + $flip = ($hemi == 'W' || $hemi == 'S') ? -1 : 1; + + return floatval($flip * ($degrees + ($minutes / 60) + ($seconds / 3600))); + } + + /** + * @param string $coordPart coordPart + * @return float + */ + private static 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 + */ + public static function getAlbums($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; + } + + /** + * @param int $uid User id of the photos + * @return void + */ + public static function clearAlbumCache($uid) + { + $key = "photo_albums:".$uid.":".local_user().":".remote_user(); + Cache::set($key, null, CACHE_DAY); + } }