Skip to content

Commit

Permalink
Update Tag People, allow untagging yourself
Browse files Browse the repository at this point in the history
  • Loading branch information
dansup committed Jul 25, 2020
1 parent f4dfb4d commit c945263
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 16 deletions.
16 changes: 8 additions & 8 deletions app/Http/Controllers/InternalApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,14 @@ public function composePost(Request $request)
$media->save();
}

$visibility = $profile->unlisted == true && $visibility == 'public' ? 'unlisted' : $visibility;
$cw = $profile->cw == true ? true : $cw;
$status->is_nsfw = $cw;
$status->visibility = $visibility;
$status->scope = $visibility;
$status->type = $mediaType;
$status->save();

foreach($tagged as $tg) {
$mt = new MediaTag;
$mt->status_id = $status->id;
Expand All @@ -347,14 +355,6 @@ public function composePost(Request $request)
MediaTagService::sendNotification($mt);
}

$visibility = $profile->unlisted == true && $visibility == 'public' ? 'unlisted' : $visibility;
$cw = $profile->cw == true ? true : $cw;
$status->is_nsfw = $cw;
$status->visibility = $visibility;
$status->scope = $visibility;
$status->type = $mediaType;
$status->save();

NewStatusPipeline::dispatch($status);
Cache::forget('user:account:id:'.$profile->user_id);
Cache::forget('profile:status_count:'.$profile->id);
Expand Down
41 changes: 41 additions & 0 deletions app/Http/Controllers/MediaTagController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,21 @@
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Services\MediaTagService;
use App\MediaTag;
use App\Notification;
use App\Profile;
use App\UserFilter;
use App\User;
use Illuminate\Support\Str;

class MediaTagController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}

public function usernameLookup(Request $request)
{
abort_if(!$request->user(), 403);
Expand Down Expand Up @@ -52,4 +59,38 @@ public function usernameLookup(Request $request)

return $results;
}

public function untagProfile(Request $request)
{
abort_if(!$request->user(), 403);

$this->validate($request, [
'status_id' => 'required',
'profile_id' => 'required'
]);

$user = $request->user();
$status_id = $request->input('status_id');
$profile_id = (int) $request->input('profile_id');

abort_if((int) $user->profile_id !== $profile_id, 400);

$tag = MediaTag::whereStatusId($status_id)
->whereProfileId($profile_id)
->first();

if(!$tag) {
return [];
}
Notification::whereItemType('App\MediaTag')
->whereItemId($tag->id)
->whereProfileId($profile_id)
->whereAction('tagged')
->delete();

MediaTagService::untag($status_id, $profile_id);

return [200];

}
}
25 changes: 24 additions & 1 deletion app/Services/MediaTagService.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,24 @@ class MediaTagService
const CACHE_KEY = 'pf:services:media_tags:id:';

public static function get($mediaId, $usernames = true)
{
return self::coldGet($mediaId, $usernames);
}

public static function coldGet($mediaId, $usernames = true)
{
$k = 'pf:services:media_tags:get:sid:' . $mediaId;
return Cache::remember($k, now()->addMinutes(60), function() use($mediaId, $usernames) {
$key = self::CACHE_KEY . $mediaId;
if(Redis::zCount($key, '-inf', '+inf') == 0) {
return [];
$tags = MediaTag::whereStatusId($mediaId)->get();
if($tags->count() == 0) {
return [];
}

foreach ($tags as $t) {
self::set($mediaId, $t->profile_id);
}
}
$res = Redis::zRange($key, 0, -1);
if(!$usernames) {
Expand Down Expand Up @@ -52,6 +64,7 @@ protected function idToUsername($id)
}

return [
'id' => (string) $id,
'username' => $profile->username,
'avatar' => $profile->avatarUrl()
];
Expand All @@ -75,4 +88,14 @@ public static function sendNotification(MediaTag $tag)
return;
}

public static function untag($statusId, $profileId)
{
MediaTag::whereStatusId($statusId)
->whereProfileId($profileId)
->delete();
$key = 'pf:services:media_tags:get:sid:' . $statusId;
Redis::zRem(self::CACHE_KEY.$statusId, $profileId);
Cache::forget($key);
return true;
}
}
29 changes: 23 additions & 6 deletions resources/assets/js/components/PostComponent.vue
Original file line number Diff line number Diff line change
Expand Up @@ -595,16 +595,17 @@
title="Tagged People"
body-class="list-group-flush py-3 px-0">
<div class="list-group">
<div class="list-group-item border-0 py-1" v-for="(user, index) in status.taggedPeople" :key="'modal_taggedpeople_'+index">
<div class="list-group-item border-0 py-1" v-for="(taguser, index) in status.taggedPeople" :key="'modal_taggedpeople_'+index">
<div class="media">
<a :href="'/'+user.username">
<img class="mr-3 rounded-circle box-shadow" :src="user.avatar" :alt="user.username + '’s avatar'" width="30px">
<a :href="'/'+taguser.username">
<img class="mr-3 rounded-circle box-shadow" :src="taguser.avatar" :alt="taguser.username + '’s avatar'" width="30px">
</a>
<div class="media-body">
<p class="pt-1" style="font-size: 14px">
<a :href="'/'+user.username" class="font-weight-bold text-dark">
{{user.username}}
<p class="pt-1 d-flex justify-content-between" style="font-size: 14px">
<a :href="'/'+taguser.username" class="font-weight-bold text-dark">
{{taguser.username}}
</a>
<button v-if="taguser.id == user.id" class="btn btn-outline-primary btn-sm py-1 px-3" @click="untagMe()">Untag Me</button>
</p>
</div>
</div>
Expand Down Expand Up @@ -1392,6 +1393,22 @@ export default {
showTaggedPeopleModal() {
this.$refs.taggedModal.show();
},
untagMe() {
this.$refs.taggedModal.hide();
let id = this.user.id;
axios.post('/api/local/compose/tag/untagme', {
status_id: this.statusId,
profile_id: id
}).then(res => {
this.status.taggedPeople = this.status.taggedPeople.filter(t => {
return t.id != id;
});
swal('Untagged', 'You have been untagged from this post.', 'success');
}).catch(err => {
swal('An Error Occurred', 'Please try again later.', 'error');
});
}
},
Expand Down
2 changes: 1 addition & 1 deletion routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@
Route::post('compose/media/update/{id}', 'MediaController@composeUpdate')->middleware('throttle:maxComposeMediaUpdatesPerHour,60')->middleware('throttle:maxComposeMediaUpdatesPerDay,1440')->middleware('throttle:maxComposeMediaUpdatesPerMonth,43800');
Route::get('compose/location/search', 'ApiController@composeLocationSearch');
Route::get('compose/tag/search', 'MediaTagController@usernameLookup');

Route::post('compose/tag/untagme', 'MediaTagController@untagProfile');
});
Route::group(['prefix' => 'admin'], function () {
Route::post('moderate', 'Api\AdminApiController@moderate');
Expand Down

0 comments on commit c945263

Please sign in to comment.