Bläddra i källkod

Add Media Tags

Daniel Supernault 5 år sedan
förälder
incheckning
711fc020e7

+ 55 - 0
app/Http/Controllers/MediaTagController.php

@@ -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 - 0
app/MediaTag.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+class MediaTag extends Model
+{
+    public function status()
+    {
+    	return $this->belongsTo(Status::class);
+    }
+}

+ 38 - 0
database/migrations/2020_06_30_180159_create_media_tags_table.php

@@ -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');
+    }
+}