forked from mirror/pixelfed
Add Media Tags
This commit is contained in:
parent
611c7b922a
commit
711fc020e7
3 changed files with 106 additions and 0 deletions
55
app/Http/Controllers/MediaTagController.php
Normal file
55
app/Http/Controllers/MediaTagController.php
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\MediaTag;
|
||||||
|
use App\Profile;
|
||||||
|
use App\UserFilter;
|
||||||
|
use App\User;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
class MediaTagController extends Controller
|
||||||
|
{
|
||||||
|
public function usernameLookup(Request $request)
|
||||||
|
{
|
||||||
|
abort_if(!$request->user(), 403);
|
||||||
|
|
||||||
|
$this->validate($request, [
|
||||||
|
'q' => 'required|string|min:1|max:50'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$q = $request->input('q');
|
||||||
|
|
||||||
|
if(Str::of($q)->startsWith('@')) {
|
||||||
|
if(strlen($q) < 3) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
$q = mb_substr($q, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$blocked = UserFilter::whereFilterableType('App\Profile')
|
||||||
|
->whereFilterType('block')
|
||||||
|
->whereFilterableId($request->user()->profile_id)
|
||||||
|
->pluck('user_id');
|
||||||
|
|
||||||
|
$blocked->push($request->user()->profile_id);
|
||||||
|
|
||||||
|
$results = Profile::select('id','domain','username')
|
||||||
|
->whereNotIn('id', $blocked)
|
||||||
|
->whereNull('domain')
|
||||||
|
->where('username','like','%'.$q.'%')
|
||||||
|
->limit(15)
|
||||||
|
->get()
|
||||||
|
->map(function($r) {
|
||||||
|
return [
|
||||||
|
'id' => (string) $r->id,
|
||||||
|
'name' => $r->username,
|
||||||
|
'privacy' => true,
|
||||||
|
'avatar' => $r->avatarUrl()
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
}
|
13
app/MediaTag.php
Normal file
13
app/MediaTag.php
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class MediaTag extends Model
|
||||||
|
{
|
||||||
|
public function status()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Status::class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateMediaTagsTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('media_tags', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->bigInteger('status_id')->unsigned()->index()->nullable();
|
||||||
|
$table->bigInteger('media_id')->unsigned()->index();
|
||||||
|
$table->bigInteger('profile_id')->unsigned()->index();
|
||||||
|
$table->string('tagged_username')->nullable();
|
||||||
|
$table->boolean('is_public')->default(true)->index();
|
||||||
|
$table->json('metadata')->nullable();
|
||||||
|
$table->unique(['media_id', 'profile_id']);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('media_tags');
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue