X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fphotos.php;h=050a254af381d4ce41d7c34e51cfe3a34294e68c;hb=bd2cd8dd4cbfcb9035fb209ef00388c730d050e8;hp=977cebf20db20be6403c7568e521d9e2404a1d32;hpb=e3aed8099c1605e1b15b70f74b94540f4512c829;p=friendica.git diff --git a/mod/photos.php b/mod/photos.php index 977cebf20d..050a254af3 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1,6 +1,6 @@ get('system', 'block_public') && !Session::isAuthenticated()) { +function photos_init(App $a) +{ + if (DI::config()->get('system', 'block_public') && !DI::userSession()->isAuthenticated()) { return; } Nav::setSelected('home'); if (DI::args()->getArgc() > 1) { - $owner = User::getOwnerDataByNick(DI::args()->getArgv()[1]); - if (empty($owner) || $owner['account_removed']) { + $owner = Profile::load(DI::app(), DI::args()->getArgv()[1], false); + if (!isset($owner['account_removed']) || $owner['account_removed']) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); } - $is_owner = (local_user() && (local_user() == $owner['uid'])); + $is_owner = (DI::userSession()->getLocalUserId() && (DI::userSession()->getLocalUserId() == $owner['uid'])); $albums = Photo::getAlbums($owner['uid']); - $albums_visible = ((intval($owner['hidewall']) && !Session::isAuthenticated()) ? false : true); + $albums_visible = ((intval($owner['hidewall']) && !DI::userSession()->isAuthenticated()) ? false : true); // add various encodings to the array so we can just loop through and pick them out in a template $ret = ['success' => false]; @@ -96,7 +94,7 @@ function photos_init(App $a) { } } - if (local_user() && $owner['uid'] == local_user()) { + if (DI::userSession()->getLocalUserId() && $owner['uid'] == DI::userSession()->getLocalUserId()) { $can_post = true; } else { $can_post = false; @@ -113,12 +111,6 @@ function photos_init(App $a) { ]); } - if (empty(DI::page()['aside'])) { - DI::page()['aside'] = ''; - } - - DI::page()['aside'] .= Widget\VCard::getHTML($owner); - if (!empty($photo_albums_widget)) { DI::page()['aside'] .= $photo_albums_widget; } @@ -148,23 +140,23 @@ function photos_post(App $a) $page_owner_uid = intval($user['uid']); $community_page = $user['page-flags'] == User::PAGE_FLAGS_COMMUNITY; - if (local_user() && (local_user() == $page_owner_uid)) { + if (DI::userSession()->getLocalUserId() && (DI::userSession()->getLocalUserId() == $page_owner_uid)) { $can_post = true; - } elseif ($community_page && !empty(Session::getRemoteContactID($page_owner_uid))) { - $contact_id = Session::getRemoteContactID($page_owner_uid); + } elseif ($community_page && !empty(DI::userSession()->getRemoteContactID($page_owner_uid))) { + $contact_id = DI::userSession()->getRemoteContactID($page_owner_uid); $can_post = true; $visitor = $contact_id; } if (!$can_post) { - notice(DI::l10n()->t('Permission denied.')); + DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); System::exit(); } $owner_record = User::getOwnerDataById($page_owner_uid); if (!$owner_record) { - notice(DI::l10n()->t('Contact information unavailable')); + DI::sysmsg()->addNotice(DI::l10n()->t('Contact information unavailable')); DI::logger()->info('photos_post: unable to locate contact record for page owner. uid=' . $page_owner_uid); System::exit(); } @@ -193,7 +185,7 @@ function photos_post(App $a) $album = hex2bin(DI::args()->getArgv()[3]); if (!DBA::exists('photo', ['album' => $album, 'uid' => $page_owner_uid, 'photo-type' => Photo::DEFAULT])) { - notice(DI::l10n()->t('Album not found.')); + DI::sysmsg()->addNotice(DI::l10n()->t('Album not found.')); DI::baseUrl()->redirect('photos/' . $user['nickname'] . '/album'); return; // NOTREACHED } @@ -229,7 +221,7 @@ function photos_post(App $a) )); } else { $r = DBA::toArray(DBA::p("SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `uid` = ? AND `album` = ?", - local_user(), + DI::userSession()->getLocalUserId(), $album )); } @@ -247,9 +239,9 @@ function photos_post(App $a) // Update the photo albums cache Photo::clearAlbumCache($page_owner_uid); - notice(DI::l10n()->t('Album successfully deleted')); + DI::sysmsg()->addNotice(DI::l10n()->t('Album successfully deleted')); } else { - notice(DI::l10n()->t('Album was empty.')); + DI::sysmsg()->addNotice(DI::l10n()->t('Album was empty.')); } } @@ -268,7 +260,7 @@ function photos_post(App $a) $condition = ['contact-id' => $visitor, 'uid' => $page_owner_uid, 'resource-id' => DI::args()->getArgv()[3]]; } else { - $condition = ['uid' => local_user(), 'resource-id' => DI::args()->getArgv()[3]]; + $condition = ['uid' => DI::userSession()->getLocalUserId(), 'resource-id' => DI::args()->getArgv()[3]]; } $photo = DBA::selectFirst('photo', ['resource-id'], $condition); @@ -281,12 +273,11 @@ function photos_post(App $a) // Update the photo albums cache Photo::clearAlbumCache($page_owner_uid); } else { - notice(DI::l10n()->t('Failed to delete the photo.')); + DI::sysmsg()->addNotice(DI::l10n()->t('Failed to delete the photo.')); DI::baseUrl()->redirect('photos/' . DI::args()->getArgv()[1] . '/image/' . DI::args()->getArgv()[3]); } - DI::baseUrl()->redirect('photos/' . DI::args()->getArgv()[1]); - return; // NOTREACHED + DI::baseUrl()->redirect('profile/' . DI::args()->getArgv()[1] . '/photos'); } } @@ -304,7 +295,7 @@ function photos_post(App $a) } if (!empty($_POST['rotate']) && (intval($_POST['rotate']) == 1 || intval($_POST['rotate']) == 2)) { - Logger::notice('rotate'); + Logger::debug('rotate'); $photo = Photo::getPhotoForUser($page_owner_uid, $resource_id); @@ -360,7 +351,7 @@ function photos_post(App $a) if (DBA::isResult($photos) && !$item_id) { // Create item container $title = ''; - $uri = Item::newURI($page_owner_uid); + $uri = Item::newURI(); $arr = []; $arr['guid'] = System::createUUID(); @@ -524,46 +515,42 @@ function photos_post(App $a) if (count($taginfo)) { foreach ($taginfo as $tagged) { - $uri = Item::newURI($page_owner_uid); - - $arr = []; - $arr['guid'] = System::createUUID(); - $arr['uid'] = $page_owner_uid; - $arr['uri'] = $uri; - $arr['wall'] = 1; - $arr['contact-id'] = $owner_record['id']; - $arr['owner-name'] = $owner_record['name']; - $arr['owner-link'] = $owner_record['url']; - $arr['owner-avatar'] = $owner_record['thumb']; - $arr['author-name'] = $owner_record['name']; - $arr['author-link'] = $owner_record['url']; - $arr['author-avatar'] = $owner_record['thumb']; - $arr['title'] = ''; - $arr['allow_cid'] = $photo['allow_cid']; - $arr['allow_gid'] = $photo['allow_gid']; - $arr['deny_cid'] = $photo['deny_cid']; - $arr['deny_gid'] = $photo['deny_gid']; - $arr['visible'] = 0; - $arr['verb'] = Activity::TAG; - $arr['gravity'] = GRAVITY_PARENT; - $arr['object-type'] = Activity\ObjectType::PERSON; - $arr['target-type'] = Activity\ObjectType::IMAGE; - $arr['inform'] = $tagged[2]; - $arr['origin'] = 1; - $arr['body'] = DI::l10n()->t('%1$s was tagged in %2$s by %3$s', '[url=' . $tagged[1] . ']' . $tagged[0] . '[/url]', '[url=' . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . ']' . DI::l10n()->t('a photo') . '[/url]', '[url=' . $owner_record['url'] . ']' . $owner_record['name'] . '[/url]') ; - $arr['body'] .= "\n\n" . '[url=' . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . ']' . '[img]' . DI::baseUrl() . "/photo/" . $photo['resource-id'] . '-' . $best . '.' . $ext . '[/img][/url]' . "\n" ; - - $arr['object'] = '' . Activity\ObjectType::PERSON . '' . $tagged[0] . '' . $tagged[1] . '/' . $tagged[0] . ''; - $arr['object'] .= '' . XML::escape('' . "\n"); + $uri = Item::newURI(); + + $arr = [ + 'guid' => System::createUUID(), + 'uid' => $page_owner_uid, + 'uri' => $uri, + 'wall' => 1, + 'contact-id' => $owner_record['id'], + 'owner-name' => $owner_record['name'], + 'owner-link' => $owner_record['url'], + 'owner-avatar' => $owner_record['thumb'], + 'author-name' => $owner_record['name'], + 'author-link' => $owner_record['url'], + 'author-avatar' => $owner_record['thumb'], + 'title' => '', + 'allow_cid' => $photo['allow_cid'], + 'allow_gid' => $photo['allow_gid'], + 'deny_cid' => $photo['deny_cid'], + 'deny_gid' => $photo['deny_gid'], + 'visible' => 0, + 'verb' => Activity::TAG, + 'gravity' => Item::GRAVITY_PARENT, + 'object-type' => Activity\ObjectType::PERSON, + 'target-type' => Activity\ObjectType::IMAGE, + 'inform' => $tagged[2], + 'origin' => 1, + 'body' => DI::l10n()->t('%1$s was tagged in %2$s by %3$s', '[url=' . $tagged[1] . ']' . $tagged[0] . '[/url]', '[url=' . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . ']' . DI::l10n()->t('a photo') . '[/url]', '[url=' . $owner_record['url'] . ']' . $owner_record['name'] . '[/url]') . "\n\n" . '[url=' . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . ']' . '[img]' . DI::baseUrl() . '/photo/' . $photo['resource-id'] . '-' . $best . '.' . $ext . '[/img][/url]' . "\n", + 'object' => '' . Activity\ObjectType::PERSON . '' . $tagged[0] . '' . $tagged[1] . '/' . $tagged[0] . '' . XML::escape('' . "\n"), + 'target' => '' . Activity\ObjectType::IMAGE . '' . $photo['desc'] . '' . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . '' . XML::escape('' . "\n" . '') . '', + ]; + if ($tagged[3]) { $arr['object'] .= XML::escape('' . "\n"); } $arr['object'] .= '' . "\n"; - $arr['target'] = '' . Activity\ObjectType::IMAGE . '' . $photo['desc'] . '' - . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . ''; - $arr['target'] .= '' . XML::escape('' . "\n" . '') . ''; - Item::insert($arr); } } @@ -571,219 +558,11 @@ function photos_post(App $a) DI::baseUrl()->redirect($_SESSION['photo_return']); return; // NOTREACHED } - - - // default post action - upload a photo - Hook::callAll('photo_post_init', $_POST); - - // Determine the album to use - $album = trim($_REQUEST['album'] ?? ''); - $newalbum = trim($_REQUEST['newalbum'] ?? ''); - - Logger::info('album= ' . $album . ' newalbum= ' . $newalbum); - - if (!strlen($album)) { - if (strlen($newalbum)) { - $album = $newalbum; - } else { - $album = DateTimeFormat::localNow('Y'); - } - } - - /* - * We create a wall item for every photo, but we don't want to - * overwhelm the data stream with a hundred newly uploaded photos. - * So we will make the first photo uploaded to this album in the last several hours - * visible by default, the rest will become visible over time when and if - * they acquire comments, likes, dislikes, and/or tags - */ - - $r = Photo::selectToArray([], ['`album` = ? AND `uid` = ? AND `created` > ?', $album, $page_owner_uid, DateTimeFormat::utc('now - 3 hours')]); - - if (!DBA::isResult($r) || ($album == DI::l10n()->t(Photo::PROFILE_PHOTOS))) { - $visible = 1; - } else { - $visible = 0; - } - - if (!empty($_REQUEST['not_visible']) && $_REQUEST['not_visible'] !== 'false') { - $visible = 0; - } - - $ret = ['src' => '', 'filename' => '', 'filesize' => 0, 'type' => '']; - - Hook::callAll('photo_post_file', $ret); - - if (!empty($ret['src']) && !empty($ret['filesize'])) { - $src = $ret['src']; - $filename = $ret['filename']; - $filesize = $ret['filesize']; - $type = $ret['type']; - $error = UPLOAD_ERR_OK; - } elseif (!empty($_FILES['userfile'])) { - $src = $_FILES['userfile']['tmp_name']; - $filename = basename($_FILES['userfile']['name']); - $filesize = intval($_FILES['userfile']['size']); - $type = $_FILES['userfile']['type']; - $error = $_FILES['userfile']['error']; - } else { - $error = UPLOAD_ERR_NO_FILE; - } - - if ($error !== UPLOAD_ERR_OK) { - switch ($error) { - case UPLOAD_ERR_INI_SIZE: - notice(DI::l10n()->t('Image exceeds size limit of %s', ini_get('upload_max_filesize'))); - break; - case UPLOAD_ERR_FORM_SIZE: - notice(DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($_REQUEST['MAX_FILE_SIZE'] ?? 0))); - break; - case UPLOAD_ERR_PARTIAL: - notice(DI::l10n()->t('Image upload didn\'t complete, please try again')); - break; - case UPLOAD_ERR_NO_FILE: - notice(DI::l10n()->t('Image file is missing')); - break; - case UPLOAD_ERR_NO_TMP_DIR: - case UPLOAD_ERR_CANT_WRITE: - case UPLOAD_ERR_EXTENSION: - notice(DI::l10n()->t('Server can\'t accept new file upload at this time, please contact your administrator')); - break; - } - @unlink($src); - $foo = 0; - Hook::callAll('photo_post_end', $foo); - return; - } - - $type = Images::getMimeTypeBySource($src, $filename, $type); - - Logger::info('photos: upload: received file: ' . $filename . ' as ' . $src . ' ('. $type . ') ' . $filesize . ' bytes'); - - $maximagesize = DI::config()->get('system', 'maximagesize'); - - if ($maximagesize && ($filesize > $maximagesize)) { - notice(DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($maximagesize))); - @unlink($src); - $foo = 0; - Hook::callAll('photo_post_end', $foo); - return; - } - - if (!$filesize) { - notice(DI::l10n()->t('Image file is empty.')); - @unlink($src); - $foo = 0; - Hook::callAll('photo_post_end', $foo); - return; - } - - Logger::info('loading the contents of ' . $src); - - $imagedata = @file_get_contents($src); - - $image = new Image($imagedata, $type); - - if (!$image->isValid()) { - Logger::info('unable to process image'); - notice(DI::l10n()->t('Unable to process image.')); - @unlink($src); - $foo = 0; - Hook::callAll('photo_post_end',$foo); - return; - } - - $exif = $image->orient($src); - @unlink($src); - - $max_length = DI::config()->get('system', 'max_image_length'); - if ($max_length > 0) { - $image->scaleDown($max_length); - } - - $width = $image->getWidth(); - $height = $image->getHeight(); - - $smallest = 0; - - $resource_id = Photo::newResource(); - - $r = Photo::store($image, $page_owner_uid, $visitor, $resource_id, $filename, $album, 0 , Photo::DEFAULT, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); - - if (!$r) { - Logger::info('image store failed'); - notice(DI::l10n()->t('Image upload failed.')); - return; - } - - if ($width > 640 || $height > 640) { - $image->scaleDown(640); - Photo::store($image, $page_owner_uid, $visitor, $resource_id, $filename, $album, 1, Photo::DEFAULT, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); - $smallest = 1; - } - - if ($width > 320 || $height > 320) { - $image->scaleDown(320); - Photo::store($image, $page_owner_uid, $visitor, $resource_id, $filename, $album, 2, Photo::DEFAULT, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); - $smallest = 2; - } - - $uri = Item::newURI($page_owner_uid); - - // Create item container - $lat = $lon = null; - if (!empty($exif['GPS']) && Feature::isEnabled($page_owner_uid, 'photo_location')) { - $lat = Photo::getGps($exif['GPS']['GPSLatitude'], $exif['GPS']['GPSLatitudeRef']); - $lon = Photo::getGps($exif['GPS']['GPSLongitude'], $exif['GPS']['GPSLongitudeRef']); - } - - $arr = []; - if ($lat && $lon) { - $arr['coord'] = $lat . ' ' . $lon; - } - - $arr['guid'] = System::createUUID(); - $arr['uid'] = $page_owner_uid; - $arr['uri'] = $uri; - $arr['post-type'] = Item::PT_IMAGE; - $arr['wall'] = 1; - $arr['resource-id'] = $resource_id; - $arr['contact-id'] = $owner_record['id']; - $arr['owner-name'] = $owner_record['name']; - $arr['owner-link'] = $owner_record['url']; - $arr['owner-avatar'] = $owner_record['thumb']; - $arr['author-name'] = $owner_record['name']; - $arr['author-link'] = $owner_record['url']; - $arr['author-avatar'] = $owner_record['thumb']; - $arr['title'] = ''; - $arr['allow_cid'] = $str_contact_allow; - $arr['allow_gid'] = $str_group_allow; - $arr['deny_cid'] = $str_contact_deny; - $arr['deny_gid'] = $str_group_deny; - $arr['visible'] = $visible; - $arr['origin'] = 1; - - $arr['body'] = '[url=' . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $resource_id . ']' - . '[img]' . DI::baseUrl() . "/photo/{$resource_id}-{$smallest}.".$image->getExt() . '[/img]' - . '[/url]'; - - $item_id = Item::insert($arr); - // Update the photo albums cache - Photo::clearAlbumCache($page_owner_uid); - - Hook::callAll('photo_post_end', $item_id); - - // addon uploaders should call "exit()" within the photo_post_end hook - // if they do not wish to be redirected - - DI::baseUrl()->redirect($_SESSION['photo_return']); - // NOTREACHED } function photos_content(App $a) { // URLs: - // photos/name // photos/name/upload // photos/name/upload/xxxxx (xxxxx is album name) // photos/name/album/xxxxx @@ -793,18 +572,18 @@ function photos_content(App $a) // photos/name/image/xxxxx/edit // photos/name/image/xxxxx/drop - $user = User::getByNickname(DI::args()->getArgv()[1]); + $user = User::getByNickname(DI::args()->getArgv()[1] ?? ''); if (!DBA::isResult($user)) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); } - if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { - notice(DI::l10n()->t('Public access denied.')); + if (DI::config()->get('system', 'block_public') && !DI::userSession()->isAuthenticated()) { + DI::sysmsg()->addNotice(DI::l10n()->t('Public access denied.')); return; } if (empty($user)) { - notice(DI::l10n()->t('No photos selected')); + DI::sysmsg()->addNotice(DI::l10n()->t('No photos selected')); return; } @@ -844,10 +623,10 @@ function photos_content(App $a) $community_page = (($user['page-flags'] == User::PAGE_FLAGS_COMMUNITY) ? true : false); - if (local_user() && (local_user() == $owner_uid)) { + if (DI::userSession()->getLocalUserId() && (DI::userSession()->getLocalUserId() == $owner_uid)) { $can_post = true; - } elseif ($community_page && !empty(Session::getRemoteContactID($owner_uid))) { - $contact_id = Session::getRemoteContactID($owner_uid); + } elseif ($community_page && !empty(DI::userSession()->getRemoteContactID($owner_uid))) { + $contact_id = DI::userSession()->getRemoteContactID($owner_uid); $contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => $owner_uid, 'blocked' => false, 'pending' => false]); if (DBA::isResult($contact)) { @@ -858,23 +637,22 @@ function photos_content(App $a) } // perhaps they're visiting - but not a community page, so they wouldn't have write access - if (!empty(Session::getRemoteContactID($owner_uid)) && !$visitor) { - $contact_id = Session::getRemoteContactID($owner_uid); + if (!empty(DI::userSession()->getRemoteContactID($owner_uid)) && !$visitor) { + $contact_id = DI::userSession()->getRemoteContactID($owner_uid); $contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => $owner_uid, 'blocked' => false, 'pending' => false]); $remote_contact = DBA::isResult($contact); } - if (!$remote_contact && local_user()) { + if (!$remote_contact && DI::userSession()->getLocalUserId()) { $contact_id = $_SESSION['cid']; $contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => $owner_uid, 'blocked' => false, 'pending' => false]); } - if ($user['hidewall'] && (local_user() != $owner_uid) && !$remote_contact) { - notice(DI::l10n()->t('Access to this item is restricted.')); - return; + if ($user['hidewall'] && !DI::userSession()->isAuthenticated()) { + DI::baseUrl()->redirect('profile/' . $user['nickname'] . '/restricted'); } $sql_extra = Security::getPermissionsSQLByUserId($owner_uid); @@ -882,16 +660,19 @@ function photos_content(App $a) $o = ""; // tabs - $is_owner = (local_user() && (local_user() == $owner_uid)); - $o .= BaseProfile::getTabsHTML($a, 'photos', $is_owner, $user['nickname'], $profile['hide-friends']); + $is_owner = (DI::userSession()->getLocalUserId() && (DI::userSession()->getLocalUserId() == $owner_uid)); + $o .= BaseProfile::getTabsHTML('photos', $is_owner, $user['nickname'], $profile['hide-friends']); // Display upload form if ($datatype === 'upload') { if (!$can_post) { - notice(DI::l10n()->t('Permission denied.')); + DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); return; } + // This prevents the photo upload form to return to itself without a hint the picture has been correctly uploaded. + DI::session()->remove('photo_return'); + $selname = (!is_null($datum) && Strings::isHex($datum)) ? hex2bin($datum) : ''; $albumselect = ''; @@ -910,7 +691,7 @@ function photos_content(App $a) $uploader = ''; - $ret = ['post_url' => 'photos/' . $user['nickname'], + $ret = ['post_url' => 'profile/' . $user['nickname'] . '/photos', 'addon_text' => $uploader, 'default_upload' => true]; @@ -921,7 +702,20 @@ function photos_content(App $a) '$submit' => DI::l10n()->t('Submit'), ]); - $usage_message = ''; + // Get the relevant size limits for uploads. Abbreviated var names: MaxImageSize -> mis; upload_max_filesize -> umf + $mis_bytes = Strings::getBytesFromShorthand(DI::config()->get('system', 'maximagesize')); + $umf_bytes = Strings::getBytesFromShorthand(ini_get('upload_max_filesize')); + + // Per Friendica definition a value of '0' means unlimited: + If ($mis_bytes == 0) { + $mis_bytes = INF; + } + + // When PHP is configured with upload_max_filesize less than maximagesize provide this lower limit. + $maximagesize_bytes = (is_numeric($mis_bytes) && ($mis_bytes < $umf_bytes) ? $mis_bytes : $umf_bytes); + + // @todo We may be want to use appropriate binary prefixed dynamicly + $usage_message = DI::l10n()->t('The maximum accepted image size is %s', Strings::formatBytes($maximagesize_bytes)); $tpl = Renderer::getMarkupTemplate('photos_upload.tpl'); @@ -977,7 +771,7 @@ function photos_content(App $a) /// @TODO I have seen this many times, maybe generalize it script-wide and encapsulate it? $order_field = $_GET['order'] ?? ''; - if ($order_field === 'posted') { + if ($order_field === 'created') { $order = 'ASC'; } else { $order = 'DESC'; @@ -1031,10 +825,10 @@ function photos_content(App $a) $drop = [DI::l10n()->t('Drop Album'), 'photos/' . $user['nickname'] . '/album/' . bin2hex($album) . '/drop']; } - if ($order_field === 'posted') { + if ($order_field === 'created') { $order = [DI::l10n()->t('Show Newest First'), 'photos/' . $user['nickname'] . '/album/' . bin2hex($album), 'oldest']; } else { - $order = [DI::l10n()->t('Show Oldest First'), 'photos/' . $user['nickname'] . '/album/' . bin2hex($album) . '?order=posted', 'newest']; + $order = [DI::l10n()->t('Show Oldest First'), 'photos/' . $user['nickname'] . '/album/' . bin2hex($album) . '?order=created', 'newest']; } $photos = []; @@ -1054,7 +848,7 @@ function photos_content(App $a) 'id' => $rr['id'], 'twist' => ' ' . ($twist ? 'rotleft' : 'rotright') . rand(2,4), 'link' => 'photos/' . $user['nickname'] . '/image/' . $rr['resource-id'] - . ($order_field === 'posted' ? '?order=posted' : ''), + . ($order_field === 'created' ? '?order=created' : ''), 'title' => DI::l10n()->t('View Photo'), 'src' => 'photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.' .$ext, 'alt' => $imgalt_e, @@ -1088,9 +882,9 @@ function photos_content(App $a) if (!DBA::isResult($ph)) { if (DBA::exists('photo', ['resource-id' => $datum, 'uid' => $owner_uid])) { - notice(DI::l10n()->t('Permission denied. Access to this item may be restricted.')); + DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied. Access to this item may be restricted.')); } else { - notice(DI::l10n()->t('Photo not available')); + DI::sysmsg()->addNotice(DI::l10n()->t('Photo not available')); } return; } @@ -1122,9 +916,9 @@ function photos_content(App $a) if ($cmd === 'view' && !DI::config()->get('system', 'no_count', false)) { $order_field = $_GET['order'] ?? ''; - if ($order_field === 'posted') { + if ($order_field === 'created') { $params = ['order' => [$order_field]]; - } elseif (!empty($order_field)) { + } elseif (!empty($order_field) && DBStructure::existsColumn('photo', [$order_field])) { $params = ['order' => [$order_field => true]]; } else { $params = []; @@ -1137,11 +931,17 @@ function photos_content(App $a) $nxt = null; foreach ($prvnxt as $z => $entry) { if ($entry['resource-id'] == $ph[0]['resource-id']) { - $prv = $z - 1; - $nxt = $z + 1; + $prv = $order_field === 'created' ? $z - 1 : $z + 1; + $nxt = $order_field === 'created' ? $z + 1 : $z - 1; if ($prv < 0) { $prv = count($prvnxt) - 1; } + if ($nxt < 0) { + $nxt = count($prvnxt) - 1; + } + if ($prv >= count($prvnxt)) { + $prv = 0; + } if ($nxt >= count($prvnxt)) { $nxt = 0; } @@ -1150,10 +950,10 @@ function photos_content(App $a) } if (!is_null($prv)) { - $prevlink = 'photos/' . $user['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . ($order_field === 'posted' ? '?order=posted' : ''); + $prevlink = 'photos/' . $user['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . ($order_field === 'created' ? '?order=created' : ''); } if (!is_null($nxt)) { - $nextlink = 'photos/' . $user['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . ($order_field === 'posted' ? '?order=posted' : ''); + $nextlink = 'photos/' . $user['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . ($order_field === 'created' ? '?order=created' : ''); } $tpl = Renderer::getMarkupTemplate('photo_edit_head.tpl'); @@ -1201,7 +1001,7 @@ function photos_content(App $a) } if ( - $ph[0]['uid'] == local_user() + $ph[0]['uid'] == DI::userSession()->getLocalUserId() && (strlen($ph[0]['allow_cid']) || strlen($ph[0]['allow_gid']) || strlen($ph[0]['deny_cid']) || strlen($ph[0]['deny_gid'])) ) { $tools['lock'] = DI::l10n()->t('Private Photo'); @@ -1233,7 +1033,7 @@ function photos_content(App $a) $link_item = Post::selectFirst([], ["`resource-id` = ?" . $sql_extra, $datum]); if (!empty($link_item['parent']) && !empty($link_item['uid'])) { - $condition = ["`parent` = ? AND `gravity` = ?", $link_item['parent'], GRAVITY_COMMENT]; + $condition = ["`parent` = ? AND `gravity` = ?", $link_item['parent'], Item::GRAVITY_COMMENT]; $total = Post::count($condition); $pager = new Pager(DI::l10n(), DI::args()->getQueryString()); @@ -1241,7 +1041,7 @@ function photos_content(App $a) $params = ['order' => ['id'], 'limit' => [$pager->getStart(), $pager->getItemsPerPage()]]; $items = Post::toArray(Post::selectForUser($link_item['uid'], Item::ITEM_FIELDLIST, $condition, $params)); - if (local_user() == $link_item['uid']) { + if (DI::userSession()->getLocalUserId() == $link_item['uid']) { Item::update(['unseen' => false], ['parent' => $link_item['parent']]); } } @@ -1255,15 +1055,17 @@ function photos_content(App $a) if (!empty($link_item['id'])) { // parse tags and add links $tag_arr = []; - foreach (Tag::getByURIId($link_item['uri-id']) as $tag) { - $tag_arr[] = [ - 'name' => $tag['name'], - 'removeurl' => '/tagrm/' . $link_item['id'] . '/' . bin2hex($tag['name']) - ]; + foreach (explode(',', Tag::getCSVByURIId($link_item['uri-id'])) as $tag_name) { + if ($tag_name) { + $tag_arr[] = [ + 'name' => BBCode::toPlaintext($tag_name), + 'removeurl' => 'post/' . $link_item['id'] . '/tag/remove/' . bin2hex($tag_name) . '?return=' . urlencode(DI::args()->getCommand()), + ]; + } } $tags = ['title' => DI::l10n()->t('Tags: '), 'tags' => $tag_arr]; if ($cmd === 'edit') { - $tags['removeanyurl'] = 'tagrm/' . $link_item['id']; + $tags['removeanyurl'] = 'post/' . $link_item['id'] . '/tag/remove?return=' . urlencode(DI::args()->getCommand()); $tags['removetitle'] = DI::l10n()->t('[Select tags to remove]'); } } @@ -1319,7 +1121,7 @@ function photos_content(App $a) */ $qcomment = null; if (Addon::isEnabled('qcomment')) { - $words = DI::pConfig()->get(local_user(), 'qcomment', 'words'); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'qcomment', 'words'); $qcomment = $words ? explode("\n", $words) : []; } @@ -1350,7 +1152,7 @@ function photos_content(App $a) 'attendmaybe' => [] ]; - if (DI::pConfig()->get(local_user(), 'system', 'hide_dislike')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'hide_dislike')) { unset($conv_responses['dislike']); } @@ -1375,7 +1177,7 @@ function photos_content(App $a) */ $qcomment = null; if (Addon::isEnabled('qcomment')) { - $words = DI::pConfig()->get(local_user(), 'qcomment', 'words'); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'qcomment', 'words'); $qcomment = $words ? explode("\n", $words) : []; } @@ -1404,42 +1206,42 @@ function photos_content(App $a) if (($activity->match($item['verb'], Activity::LIKE) || $activity->match($item['verb'], Activity::DISLIKE)) && - ($item['gravity'] != GRAVITY_PARENT)) { + ($item['gravity'] != Item::GRAVITY_PARENT)) { continue; } $author = ['uid' => 0, 'id' => $item['author-id'], 'network' => $item['author-network'], 'url' => $item['author-link']]; $profile_url = Contact::magicLinkByContact($author); - if (strpos($profile_url, 'redir/') === 0) { + if (strpos($profile_url, 'contact/redir/') === 0) { $sparkle = ' sparkle'; } else { $sparkle = ''; } - $dropping = (($item['contact-id'] == $contact_id) || ($item['uid'] == local_user())); + $dropping = (($item['contact-id'] == $contact_id) || ($item['uid'] == DI::userSession()->getLocalUserId())); $drop = [ 'dropping' => $dropping, 'pagedrop' => false, - 'select' => DI::l10n()->t('Select'), - 'delete' => DI::l10n()->t('Delete'), + 'select' => DI::l10n()->t('Select'), + 'delete' => DI::l10n()->t('Delete'), ]; $title_e = $item['title']; $body_e = BBCode::convertForUriId($item['uri-id'], $item['body']); $comments .= Renderer::replaceMacros($template,[ - '$id' => $item['id'], + '$id' => $item['id'], '$profile_url' => $profile_url, - '$name' => $item['author-name'], - '$thumb' => $item['author-avatar'], - '$sparkle' => $sparkle, - '$title' => $title_e, - '$body' => $body_e, - '$ago' => Temporal::getRelativeDate($item['created']), - '$indent' => (($item['parent'] != $item['id']) ? ' comment' : ''), - '$drop' => $drop, - '$comment' => $comment + '$name' => $item['author-name'], + '$thumb' => $item['author-avatar'], + '$sparkle' => $sparkle, + '$title' => $title_e, + '$body' => $body_e, + '$ago' => Temporal::getRelativeDate($item['created']), + '$indent' => (($item['parent'] != $item['id']) ? ' comment' : ''), + '$drop' => $drop, + '$comment' => $comment ]); if (($can_post || Security::canWriteToUserWall($owner_uid))) { @@ -1449,7 +1251,7 @@ function photos_content(App $a) */ $qcomment = null; if (Addon::isEnabled('qcomment')) { - $words = DI::pConfig()->get(local_user(), 'qcomment', 'words'); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'qcomment', 'words'); $qcomment = $words ? explode("\n", $words) : []; } @@ -1488,7 +1290,7 @@ function photos_content(App $a) '$dislike' => DI::l10n()->t('Dislike'), '$wait' => DI::l10n()->t('Please wait'), '$dislike_title' => DI::l10n()->t('I don\'t like this (toggle)'), - '$hide_dislike' => DI::pConfig()->get(local_user(), 'system', 'hide_dislike'), + '$hide_dislike' => DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'hide_dislike'), '$responses' => $responses, '$return_path' => DI::args()->getQueryString(), ]); @@ -1525,68 +1327,4 @@ function photos_content(App $a) return $o; } - - // Default - show recent photos with upload link (if applicable) - //$o = ''; - $total = 0; - $r = DBA::toArray(DBA::p("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = ? AND `photo-type` = ? - $sql_extra GROUP BY `resource-id`", - $user['uid'], - Photo::DEFAULT, - )); - if (DBA::isResult($r)) { - $total = count($r); - } - - $pager = new Pager(DI::l10n(), DI::args()->getQueryString(), 20); - - $r = DBA::toArray(DBA::p("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`, - ANY_VALUE(`type`) AS `type`, ANY_VALUE(`album`) AS `album`, max(`scale`) AS `scale`, - ANY_VALUE(`created`) AS `created` FROM `photo` - WHERE `uid` = ? AND `photo-type` = ? - $sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT ? , ?", - $user['uid'], - Photo::DEFAULT, - $pager->getStart(), - $pager->getItemsPerPage() - )); - - $photos = []; - if (DBA::isResult($r)) { - // "Twist" is only used for the duepunto theme with style "slackr" - $twist = false; - foreach ($r as $rr) { - $twist = !$twist; - $ext = $phototypes[$rr['type']]; - - $alt_e = $rr['filename']; - $name_e = $rr['album']; - - $photos[] = [ - 'id' => $rr['id'], - 'twist' => ' ' . ($twist ? 'rotleft' : 'rotright') . rand(2,4), - 'link' => 'photos/' . $user['nickname'] . '/image/' . $rr['resource-id'], - 'title' => DI::l10n()->t('View Photo'), - 'src' => 'photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.' . $ext, - 'alt' => $alt_e, - 'album' => [ - 'link' => 'photos/' . $user['nickname'] . '/album/' . bin2hex($rr['album']), - 'name' => $name_e, - 'alt' => DI::l10n()->t('View Album'), - ], - - ]; - } - } - - $tpl = Renderer::getMarkupTemplate('photos_recent.tpl'); - $o .= Renderer::replaceMacros($tpl, [ - '$title' => DI::l10n()->t('Recent Photos'), - '$can_post' => $can_post, - '$upload' => [DI::l10n()->t('Upload New Photos'), 'photos/' . $user['nickname'] . '/upload'], - '$photos' => $photos, - '$paginate' => $pager->renderFull($total), - ]); - - return $o; }