From e37640c44ce0057896cf138cdb16415a81b45c0a Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Wed, 3 Jan 2018 21:01:41 -0500 Subject: [PATCH 1/2] Move Photos to xrc Move photos from include to Model\Photo class --- include/photos.php | 72 ---------------------------------- mod/photos.php | 17 ++++----- src/Model/Photo.php | 85 +++++++++++++++++++++++++++++++++++++++-- src/Object/Image.php | 2 - src/Worker/CronJobs.php | 4 +- 5 files changed, 92 insertions(+), 88 deletions(-) delete mode 100644 include/photos.php diff --git a/include/photos.php b/include/photos.php deleted file mode 100644 index 592a13832..000000000 --- a/include/photos.php +++ /dev/null @@ -1,72 +0,0 @@ - 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; -} diff --git a/mod/photos.php b/mod/photos.php index fde505a6f..bb1b117c5 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -13,7 +13,6 @@ use Friendica\Model\Photo; use Friendica\Network\Probe; use Friendica\Object\Image; -require_once 'include/photos.php'; require_once 'include/items.php'; require_once 'include/acl_selectors.php'; require_once 'include/bbcode.php'; @@ -62,7 +61,7 @@ function photos_init(App $a) { '$pdesc' => defaults($profile, 'pdesc', ''), )); - $albums = photo_albums($a->data['user']['uid']); + $albums = Photo::photoAlbums($a->data['user']['uid']); $albums_visible = ((intval($a->data['user']['hidewall']) && !local_user() && !remote_user()) ? false : true); @@ -213,7 +212,7 @@ function photos_post(App $a) intval($page_owner_uid) ); // Update the photo albums cache - photo_albums($page_owner_uid, true); + Photo::photoAlbums($page_owner_uid, true); $newurl = str_replace(bin2hex($album), bin2hex($newalbum), $_SESSION['photo_return']); goaway($newurl); @@ -300,7 +299,7 @@ function photos_post(App $a) } // Update the photo albums cache - photo_albums($page_owner_uid, true); + Photo::photoAlbums($page_owner_uid, true); } goaway('photos/' . $a->data['user']['nickname']); @@ -368,7 +367,7 @@ function photos_post(App $a) $drop_id = intval($i[0]['id']); // Update the photo albums cache - photo_albums($page_owner_uid, true); + Photo::photoAlbums($page_owner_uid, true); if ($i[0]['visible']) { Worker::add(PRIORITY_HIGH, "Notifier", "drop", $drop_id); @@ -472,7 +471,7 @@ function photos_post(App $a) // Update the photo albums cache if album name was changed if ($albname !== $origaname) { - photo_albums($page_owner_uid, true); + Photo::photoAlbums($page_owner_uid, true); } } @@ -894,8 +893,8 @@ function photos_post(App $a) // Create item container $lat = $lon = null; if ($exif && $exif['GPS'] && Feature::isEnabled($channel_id, 'photo_location')) { - $lat = getGps($exif['GPS']['GPSLatitude'], $exif['GPS']['GPSLatitudeRef']); - $lon = getGps($exif['GPS']['GPSLongitude'], $exif['GPS']['GPSLongitudeRef']); + $lat = Photo::getGps($exif['GPS']['GPSLatitude'], $exif['GPS']['GPSLatitudeRef']); + $lon = Photo::getGps($exif['GPS']['GPSLongitude'], $exif['GPS']['GPSLongitudeRef']); } $arr = array(); @@ -932,7 +931,7 @@ function photos_post(App $a) $item_id = item_store($arr); // Update the photo albums cache - photo_albums($page_owner_uid, true); + Photo::photoAlbums($page_owner_uid, true); if ($visible) { Worker::add(PRIORITY_HIGH, "Notifier", 'wall-new', $item_id); diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 0fbeb66cb..e4ad198e6 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -1,19 +1,19 @@ 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 photoAlbums($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; + } } diff --git a/src/Object/Image.php b/src/Object/Image.php index 7cbc2432d..a0b8af05a 100644 --- a/src/Object/Image.php +++ b/src/Object/Image.php @@ -15,8 +15,6 @@ use Exception; use Imagick; use ImagickPixel; -require_once "include/photos.php"; - /** * Class to handle images */ diff --git a/src/Worker/CronJobs.php b/src/Worker/CronJobs.php index 93f1e3a03..a0530c44a 100644 --- a/src/Worker/CronJobs.php +++ b/src/Worker/CronJobs.php @@ -12,6 +12,7 @@ use Friendica\Core\Config; use Friendica\Database\DBM; use Friendica\Model\Contact; use Friendica\Model\GContact; +use Friendica\Model\Photo; use Friendica\Network\Probe; use Friendica\Protocol\PortableContact; use dba; @@ -29,7 +30,6 @@ class CronJobs require_once 'include/datetime.php'; require_once 'include/post_update.php'; require_once 'mod/nodeinfo.php'; - require_once 'include/photos.php'; // No parameter set? So return if ($command == '') { @@ -101,7 +101,7 @@ class CronJobs } foreach ($r AS $user) { - photo_albums($user['uid'], true); + Photo::photoAlbums($user['uid'], true); } } From 71534a14753c6d050d486926671539d2e5f32b85 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Wed, 3 Jan 2018 22:36:15 -0500 Subject: [PATCH 2/2] Review update Rename function and add new function. --- mod/photos.php | 14 +++++++------- src/Model/Photo.php | 12 +++++++++++- src/Worker/CronJobs.php | 4 ++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/mod/photos.php b/mod/photos.php index bb1b117c5..c7021aa44 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -61,7 +61,7 @@ function photos_init(App $a) { '$pdesc' => defaults($profile, 'pdesc', ''), )); - $albums = Photo::photoAlbums($a->data['user']['uid']); + $albums = Photo::getAlbums($a->data['user']['uid']); $albums_visible = ((intval($a->data['user']['hidewall']) && !local_user() && !remote_user()) ? false : true); @@ -212,7 +212,7 @@ function photos_post(App $a) intval($page_owner_uid) ); // Update the photo albums cache - Photo::photoAlbums($page_owner_uid, true); + Photo::clearAlbumCache($page_owner_uid); $newurl = str_replace(bin2hex($album), bin2hex($newalbum), $_SESSION['photo_return']); goaway($newurl); @@ -299,7 +299,7 @@ function photos_post(App $a) } // Update the photo albums cache - Photo::photoAlbums($page_owner_uid, true); + Photo::clearAlbumCache($page_owner_uid); } goaway('photos/' . $a->data['user']['nickname']); @@ -367,7 +367,7 @@ function photos_post(App $a) $drop_id = intval($i[0]['id']); // Update the photo albums cache - Photo::photoAlbums($page_owner_uid, true); + Photo::clearAlbumCache($page_owner_uid); if ($i[0]['visible']) { Worker::add(PRIORITY_HIGH, "Notifier", "drop", $drop_id); @@ -471,7 +471,7 @@ function photos_post(App $a) // Update the photo albums cache if album name was changed if ($albname !== $origaname) { - Photo::photoAlbums($page_owner_uid, true); + Photo::clearAlbumCache($page_owner_uid); } } @@ -931,13 +931,13 @@ function photos_post(App $a) $item_id = item_store($arr); // Update the photo albums cache - Photo::photoAlbums($page_owner_uid, true); + Photo::clearAlbumCache($page_owner_uid); if ($visible) { Worker::add(PRIORITY_HIGH, "Notifier", 'wall-new', $item_id); } - call_hooks('photo_post_end',intval($item_id)); + call_hooks('photo_post_end', intval($item_id)); // addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook // if they do not wish to be redirected diff --git a/src/Model/Photo.php b/src/Model/Photo.php index e4ad198e6..a25b2fa9d 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -220,7 +220,7 @@ class Photo * * @return array Returns array of the photo albums */ - public static function photoAlbums($uid, $update = false) + public static function getAlbums($uid, $update = false) { $sql_extra = permissions_sql($uid); @@ -252,4 +252,14 @@ class Photo } 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); + } } diff --git a/src/Worker/CronJobs.php b/src/Worker/CronJobs.php index a0530c44a..e83347055 100644 --- a/src/Worker/CronJobs.php +++ b/src/Worker/CronJobs.php @@ -100,8 +100,8 @@ class CronJobs return; } - foreach ($r AS $user) { - Photo::photoAlbums($user['uid'], true); + foreach ($r as $user) { + Photo::clearAlbumCache($user['uid']); } }