<?php
/**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
*/
use Friendica\App;
-use Friendica\Content\Feature;
use Friendica\Content\Nav;
use Friendica\Content\Pager;
use Friendica\Content\Text\BBCode;
use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Core\Renderer;
-use Friendica\Core\Session;
use Friendica\Core\System;
use Friendica\Database\DBA;
+use Friendica\Database\DBStructure;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Item;
use Friendica\Model\Tag;
use Friendica\Model\User;
use Friendica\Module\BaseProfile;
+use Friendica\Network\HTTPException;
use Friendica\Network\Probe;
-use Friendica\Object\Image;
use Friendica\Protocol\Activity;
+use Friendica\Security\Security;
use Friendica\Util\Crypto;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Images;
use Friendica\Util\Map;
-use Friendica\Security\Security;
use Friendica\Util\Strings;
use Friendica\Util\Temporal;
use Friendica\Util\XML;
-use Friendica\Network\HTTPException;
-
-function photos_init(App $a) {
- if (DI::config()->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]);
+ $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];
}
}
- if (local_user() && $owner['uid'] == local_user()) {
+ if (DI::userSession()->getLocalUserId() && $owner['uid'] == DI::userSession()->getLocalUserId()) {
$can_post = true;
} else {
$can_post = false;
]);
}
- 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;
}
$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();
}
$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
}
));
} else {
$r = DBA::toArray(DBA::p("SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `uid` = ? AND `album` = ?",
- local_user(),
+ DI::userSession()->getLocalUserId(),
$album
));
}
// 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.'));
}
}
$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);
// 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');
}
}
foreach ($taginfo as $tagged) {
$uri = Item::newURI();
- $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'] = '<object><type>' . Activity\ObjectType::PERSON . '</type><title>' . $tagged[0] . '</title><id>' . $tagged[1] . '/' . $tagged[0] . '</id>';
- $arr['object'] .= '<link>' . XML::escape('<link rel="alternate" type="text/html" href="' . $tagged[1] . '" />' . "\n");
+ $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' => '<object><type>' . Activity\ObjectType::PERSON . '</type><title>' . $tagged[0] . '</title><id>' . $tagged[1] . '/' . $tagged[0] . '</id><link>' . XML::escape('<link rel="alternate" type="text/html" href="' . $tagged[1] . '" />' . "\n"),
+ 'target' => '<target><type>' . Activity\ObjectType::IMAGE . '</type><title>' . $photo['desc'] . '</title><id>' . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . '</id><link>' . XML::escape('<link rel="alternate" type="text/html" href="' . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . '" />' . "\n" . '<link rel="preview" type="' . $photo['type'] . '" href="' . DI::baseUrl() . '/photo/' . $photo['resource-id'] . '-' . $best . '.' . $ext . '" />') . '</link></target>',
+ ];
+
if ($tagged[3]) {
$arr['object'] .= XML::escape('<link rel="photo" type="' . $photo['type'] . '" href="' . $tagged[3]['photo'] . '" />' . "\n");
}
$arr['object'] .= '</link></object>' . "\n";
- $arr['target'] = '<target><type>' . Activity\ObjectType::IMAGE . '</type><title>' . $photo['desc'] . '</title><id>'
- . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . '</id>';
- $arr['target'] .= '<link>' . XML::escape('<link rel="alternate" type="text/html" href="' . DI::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo['resource-id'] . '" />' . "\n" . '<link rel="preview" type="' . $photo['type'] . '" href="' . DI::baseUrl() . "/photo/" . $photo['resource-id'] . '-' . $best . '.' . $ext . '" />') . '</link></target>';
-
Item::insert($arr);
}
}
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::debug('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::debug('loading contents', ['src' => $src]);
-
- $imagedata = @file_get_contents($src);
-
- $image = new Image($imagedata, $type);
-
- if (!$image->isValid()) {
- Logger::notice('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::warning('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();
-
- // 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
// 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;
}
$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)) {
}
// 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);
$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 = '';
$uploader = '';
- $ret = ['post_url' => 'photos/' . $user['nickname'],
+ $ret = ['post_url' => 'profile/' . $user['nickname'] . '/photos',
'addon_text' => $uploader,
'default_upload' => true];
'$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 dynamically
+ $usage_message = DI::l10n()->t('The maximum accepted image size is %s', Strings::formatBytes($maximagesize_bytes));
$tpl = Renderer::getMarkupTemplate('photos_upload.tpl');
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;
}
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 = [];
$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;
}
}
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');
$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());
$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']]);
}
}
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]');
}
}
*/
$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) : [];
}
'$preview' => DI::l10n()->t('Preview'),
'$loading' => DI::l10n()->t('Loading...'),
'$qcomment' => $qcomment,
- '$rand_num' => Crypto::randomDigits(12)
+ '$rand_num' => Crypto::randomDigits(12),
]);
}
}
'attendmaybe' => []
];
- if (DI::pConfig()->get(local_user(), 'system', 'hide_dislike')) {
+ if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'hide_dislike')) {
unset($conv_responses['dislike']);
}
*/
$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) : [];
}
'$submit' => DI::l10n()->t('Submit'),
'$preview' => DI::l10n()->t('Preview'),
'$qcomment' => $qcomment,
- '$rand_num' => Crypto::randomDigits(12)
+ '$rand_num' => Crypto::randomDigits(12),
]);
}
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))) {
*/
$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) : [];
}
'$submit' => DI::l10n()->t('Submit'),
'$preview' => DI::l10n()->t('Preview'),
'$qcomment' => $qcomment,
- '$rand_num' => Crypto::randomDigits(12)
+ '$rand_num' => Crypto::randomDigits(12),
]);
}
}
'$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(),
]);
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;
}