mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-27 08:43:17 +00:00
Merge pull request #3186 from pixelfed/staging
Update atom feeds, include media alt text. Fixes #3184
This commit is contained in:
commit
80ac325fb6
6 changed files with 64 additions and 44 deletions
|
@ -17,6 +17,8 @@
|
||||||
- Updated ComposeModal, add max file size and allowed mime types. Fixes #3162. ([879281cc](https://github.com/pixelfed/pixelfed/commit/879281cc))
|
- Updated ComposeModal, add max file size and allowed mime types. Fixes #3162. ([879281cc](https://github.com/pixelfed/pixelfed/commit/879281cc))
|
||||||
- Updated profile embeds, fix NaN bug and improve performance. ([3bd211d7](https://github.com/pixelfed/pixelfed/commit/3bd211d7))
|
- Updated profile embeds, fix NaN bug and improve performance. ([3bd211d7](https://github.com/pixelfed/pixelfed/commit/3bd211d7))
|
||||||
- Updated ApiV1Controller, improve follow count cache invalidation. ([4b6effb9](https://github.com/pixelfed/pixelfed/commit/4b6effb9))
|
- Updated ApiV1Controller, improve follow count cache invalidation. ([4b6effb9](https://github.com/pixelfed/pixelfed/commit/4b6effb9))
|
||||||
|
- Updated web routes, fix atom feeds for account usernames containing a dot. ([8c54ab57](https://github.com/pixelfed/pixelfed/commit/8c54ab57))
|
||||||
|
- Updated atom feeds, include media alt text. Fixes #3184. ([5d9b6863](https://github.com/pixelfed/pixelfed/commit/5d9b6863))
|
||||||
- ([](https://github.com/pixelfed/pixelfed/commit/))
|
- ([](https://github.com/pixelfed/pixelfed/commit/))
|
||||||
|
|
||||||
## [v0.11.2 (2022-01-09)](https://github.com/pixelfed/pixelfed/compare/v0.11.1...v0.11.2)
|
## [v0.11.2 (2022-01-09)](https://github.com/pixelfed/pixelfed/compare/v0.11.1...v0.11.2)
|
||||||
|
|
|
@ -5,6 +5,7 @@ namespace App\Http\Controllers;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Auth;
|
use Auth;
|
||||||
use Cache;
|
use Cache;
|
||||||
|
use DB;
|
||||||
use View;
|
use View;
|
||||||
use App\Follower;
|
use App\Follower;
|
||||||
use App\FollowRequest;
|
use App\FollowRequest;
|
||||||
|
@ -15,6 +16,7 @@ use App\UserFilter;
|
||||||
use League\Fractal;
|
use League\Fractal;
|
||||||
use App\Services\AccountService;
|
use App\Services\AccountService;
|
||||||
use App\Services\FollowerService;
|
use App\Services\FollowerService;
|
||||||
|
use App\Services\StatusService;
|
||||||
use App\Util\Lexer\Nickname;
|
use App\Util\Lexer\Nickname;
|
||||||
use App\Util\Webfinger\Webfinger;
|
use App\Util\Webfinger\Webfinger;
|
||||||
use App\Transformer\ActivityPub\ProfileOutbox;
|
use App\Transformer\ActivityPub\ProfileOutbox;
|
||||||
|
@ -187,20 +189,36 @@ class ProfileController extends Controller
|
||||||
{
|
{
|
||||||
abort_if(!config('federation.atom.enabled'), 404);
|
abort_if(!config('federation.atom.enabled'), 404);
|
||||||
|
|
||||||
$profile = $user = Profile::whereNull('status')->whereNull('domain')->whereUsername($user)->whereIsPrivate(false)->firstOrFail();
|
$pid = AccountService::usernameToId($user);
|
||||||
if($profile->status != null) {
|
|
||||||
return $this->accountCheck($profile);
|
abort_if(!$pid, 404);
|
||||||
}
|
|
||||||
if($profile->is_private || Auth::check()) {
|
$profile = AccountService::get($pid);
|
||||||
$blocked = $this->blockedProfileCheck($profile);
|
|
||||||
$check = $this->privateProfileCheck($profile, null);
|
abort_if(!$profile || $profile['locked'] || !$profile['local'], 404);
|
||||||
if($check || $blocked) {
|
|
||||||
return redirect($profile->url());
|
$items = DB::table('statuses')
|
||||||
}
|
->whereProfileId($pid)
|
||||||
}
|
->whereVisibility('public')
|
||||||
$items = $profile->statuses()->whereHas('media')->whereIn('visibility',['public', 'unlisted'])->orderBy('created_at', 'desc')->take(10)->get();
|
->whereType('photo')
|
||||||
return response()->view('atom.user', compact('profile', 'items'))
|
->latest()
|
||||||
->header('Content-Type', 'application/atom+xml');
|
->take(10)
|
||||||
|
->get()
|
||||||
|
->map(function($status) {
|
||||||
|
return StatusService::get($status->id);
|
||||||
|
})
|
||||||
|
->filter(function($status) {
|
||||||
|
return $status &&
|
||||||
|
isset($status['account']) &&
|
||||||
|
isset($status['media_attachments']) &&
|
||||||
|
count($status['media_attachments']);
|
||||||
|
})
|
||||||
|
->values();
|
||||||
|
$permalink = config('app.url') . "/users/{$profile['username']}.atom";
|
||||||
|
|
||||||
|
return response()
|
||||||
|
->view('atom.user', compact('profile', 'items', 'permalink'))
|
||||||
|
->header('Content-Type', 'application/atom+xml');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function meRedirect()
|
public function meRedirect()
|
||||||
|
|
BIN
public/js/spa.js
vendored
BIN
public/js/spa.js
vendored
Binary file not shown.
Binary file not shown.
|
@ -1,38 +1,38 @@
|
||||||
<?=
|
<?=
|
||||||
/* Using an echo tag here so the `<? ... ?>` won't get parsed as short tags */
|
/* Using an echo tag here so the `<? ... ?>` won't get parsed as short tags */
|
||||||
'<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL
|
'<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL
|
||||||
?>
|
?>
|
||||||
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
|
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
|
||||||
<id>{{$profile->permalink('.atom')}}</id>
|
<id>{{$permalink}}</id>
|
||||||
<title>{{$profile->username}} on Pixelfed</title>
|
<title>{{$profile['username']}} on Pixelfed</title>
|
||||||
<subtitle>{{$profile->bio}}</subtitle>
|
<subtitle type="html">{{$profile['note']}}</subtitle>
|
||||||
<updated>{{$profile->updated_at->toAtomString()}}</updated>
|
<updated>{{$profile['created_at']}}</updated>
|
||||||
<logo></logo>
|
<logo></logo>
|
||||||
<author>
|
<author>
|
||||||
<id>{{$profile->permalink()}}</id>
|
<id>{{$profile['url']}}</id>
|
||||||
<uri>{{$profile->permalink()}}</uri>
|
<uri>{{$profile['url']}}</uri>
|
||||||
<name>{{$profile->permalink()}}</name>
|
<name>{{$profile['url']}}</name>
|
||||||
<summary type="html">{{$profile->bio}}</summary>
|
<summary type="html">{{$profile['note']}}</summary>
|
||||||
<link rel="alternate" type="text/html" href="{{$profile->url()}}"/>
|
<link rel="alternate" type="text/html" href="{{$profile['url']}}"/>
|
||||||
<link rel="avatar" type="image/jpeg" media:width="120" media:height="120" href="{{$profile->avatarUrl()}}"/>
|
<link rel="avatar" type="image/jpeg" media:width="120" media:height="120" href="{{$profile['avatar']}}"/>
|
||||||
</author>
|
</author>
|
||||||
<link rel="alternate" type="text/html" href="{{$profile->url()}}"/>
|
<link rel="alternate" type="text/html" href="{{$profile['url']}}"/>
|
||||||
<link rel="self" type="application/atom+xml" href="{{$profile->permalink('.atom')}}"/>
|
<link rel="self" type="application/atom+xml" href="{{$permalink}}"/>
|
||||||
@foreach($items as $item)
|
@foreach($items as $item)
|
||||||
<entry>
|
<entry>
|
||||||
<title>{{ $item->caption }}</title>
|
<title>{{ strip_tags($item['content']) }}</title>
|
||||||
<link rel="alternate" href="{{ $item->url() }}" />
|
<link rel="alternate" href="{{ $item['url'] }}" />
|
||||||
<id>{{ $item->url() }}</id>
|
<id>{{ $item['url'] }}</id>
|
||||||
<author>
|
<author>
|
||||||
<name> <![CDATA[{{ $item->profile->username }}]]></name>
|
<name> <![CDATA[{{ $profile['username'] }}]]></name>
|
||||||
</author>
|
</author>
|
||||||
<summary type="html">
|
<summary type="html">
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
<img id="rss_item_{{$loop->iteration}}" src="{{ $item->thumb() }}">
|
<img id="rss_item_{{$loop->iteration}}" src="{{ $item['media_attachments'][0]['url'] }}" alt="{{ $item['media_attachments'][0]['description'] }}">
|
||||||
<p style="padding:10px;">{{ $item->caption }}</p>
|
<p style="padding:10px;">{{ $item['content'] }}</p>
|
||||||
]]>
|
]]>
|
||||||
</summary>
|
</summary>
|
||||||
<updated>{{ $item->updated_at->toAtomString() }}</updated>
|
<updated>{{ $item['created_at'] }}</updated>
|
||||||
</entry>
|
</entry>
|
||||||
@endforeach
|
@endforeach
|
||||||
</feed>
|
</feed>
|
||||||
|
|
|
@ -516,7 +516,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
|
||||||
|
|
||||||
Route::group(['prefix' => 'users'], function () {
|
Route::group(['prefix' => 'users'], function () {
|
||||||
Route::redirect('/', '/');
|
Route::redirect('/', '/');
|
||||||
Route::get('{user}.atom', 'ProfileController@showAtomFeed');
|
Route::get('{user}.atom', 'ProfileController@showAtomFeed')->where('user', '.*');
|
||||||
Route::get('{username}/outbox', 'FederationController@userOutbox');
|
Route::get('{username}/outbox', 'FederationController@userOutbox');
|
||||||
Route::get('{username}/followers', 'FederationController@userFollowers');
|
Route::get('{username}/followers', 'FederationController@userFollowers');
|
||||||
Route::get('{username}/following', 'FederationController@userFollowing');
|
Route::get('{username}/following', 'FederationController@userFollowing');
|
||||||
|
|
Loading…
Reference in a new issue