mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-23 06:51:27 +00:00
Add IG Import controller
This commit is contained in:
parent
69606293b3
commit
645272145f
1 changed files with 151 additions and 0 deletions
151
app/Http/Controllers/Import/Instagram.php
Normal file
151
app/Http/Controllers/Import/Instagram.php
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Import;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Auth, DB;
|
||||||
|
use App\{
|
||||||
|
ImportData,
|
||||||
|
ImportJob,
|
||||||
|
Profile,
|
||||||
|
User
|
||||||
|
};
|
||||||
|
|
||||||
|
trait Instagram
|
||||||
|
{
|
||||||
|
public function instagram()
|
||||||
|
{
|
||||||
|
return view('settings.import.instagram.home');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function instagramStart(Request $request)
|
||||||
|
{
|
||||||
|
$job = $this->instagramRedirectOrNew();
|
||||||
|
return redirect($job->url());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function instagramRedirectOrNew()
|
||||||
|
{
|
||||||
|
$profile = Auth::user()->profile;
|
||||||
|
$exists = ImportJob::whereProfileId($profile->id)
|
||||||
|
->whereService('instagram')
|
||||||
|
->whereNull('completed_at')
|
||||||
|
->exists();
|
||||||
|
if($exists) {
|
||||||
|
$job = ImportJob::whereProfileId($profile->id)
|
||||||
|
->whereService('instagram')
|
||||||
|
->whereNull('completed_at')
|
||||||
|
->first();
|
||||||
|
} else {
|
||||||
|
$job = new ImportJob;
|
||||||
|
$job->profile_id = $profile->id;
|
||||||
|
$job->service = 'instagram';
|
||||||
|
$job->uuid = (string) Str::uuid();
|
||||||
|
$job->stage = 1;
|
||||||
|
$job->save();
|
||||||
|
}
|
||||||
|
return $job;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function instagramStepOne(Request $request, $uuid)
|
||||||
|
{
|
||||||
|
$profile = Auth::user()->profile;
|
||||||
|
$job = ImportJob::whereProfileId($profile->id)
|
||||||
|
->whereNull('completed_at')
|
||||||
|
->whereUuid($uuid)
|
||||||
|
->whereStage(1)
|
||||||
|
->firstOrFail();
|
||||||
|
return view('settings.import.instagram.step-one', compact('profile', 'job'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function instagramStepOneStore(Request $request, $uuid)
|
||||||
|
{
|
||||||
|
$this->validate($request, [
|
||||||
|
'media.*' => 'required|mimes:bin,jpeg,png,gif|max:500',
|
||||||
|
//'mediajson' => 'required|file|mimes:json'
|
||||||
|
]);
|
||||||
|
$media = $request->file('media');
|
||||||
|
|
||||||
|
$profile = Auth::user()->profile;
|
||||||
|
$job = ImportJob::whereProfileId($profile->id)
|
||||||
|
->whereNull('completed_at')
|
||||||
|
->whereUuid($uuid)
|
||||||
|
->whereStage(1)
|
||||||
|
->firstOrFail();
|
||||||
|
|
||||||
|
foreach ($media as $k => $v) {
|
||||||
|
$original = $v->getClientOriginalName();
|
||||||
|
if(strlen($original) < 32 || $k > 100) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$storagePath = "import/{$job->uuid}";
|
||||||
|
$path = $v->store($storagePath);
|
||||||
|
DB::transaction(function() use ($profile, $job, $path, $original) {
|
||||||
|
$data = new ImportData;
|
||||||
|
$data->profile_id = $profile->id;
|
||||||
|
$data->job_id = $job->id;
|
||||||
|
$data->service = 'instagram';
|
||||||
|
$data->path = $path;
|
||||||
|
$data->stage = $job->stage;
|
||||||
|
$data->original_name = $original;
|
||||||
|
$data->save();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
DB::transaction(function() use ($profile, $job) {
|
||||||
|
$job->stage = 2;
|
||||||
|
$job->save();
|
||||||
|
});
|
||||||
|
return redirect($job->url());
|
||||||
|
return view('settings.import.instagram.step-one', compact('profile', 'job'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function instagramStepTwo(Request $request, $uuid)
|
||||||
|
{
|
||||||
|
$profile = Auth::user()->profile;
|
||||||
|
$job = ImportJob::whereProfileId($profile->id)
|
||||||
|
->whereNull('completed_at')
|
||||||
|
->whereUuid($uuid)
|
||||||
|
->whereStage(2)
|
||||||
|
->firstOrFail();
|
||||||
|
return view('settings.import.instagram.step-two', compact('profile', 'job'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function instagramStepTwoStore(Request $request, $uuid)
|
||||||
|
{
|
||||||
|
$this->validate($request, [
|
||||||
|
'media' => 'required|file|max:1000'
|
||||||
|
]);
|
||||||
|
$profile = Auth::user()->profile;
|
||||||
|
$job = ImportJob::whereProfileId($profile->id)
|
||||||
|
->whereNull('completed_at')
|
||||||
|
->whereUuid($uuid)
|
||||||
|
->whereStage(2)
|
||||||
|
->firstOrFail();
|
||||||
|
$media = $request->file('media');
|
||||||
|
$file = file_get_contents($media);
|
||||||
|
$json = json_decode($file, true);
|
||||||
|
if(!$json || !isset($json['photos'])) {
|
||||||
|
return abort(500);
|
||||||
|
}
|
||||||
|
$storagePath = "import/{$job->uuid}";
|
||||||
|
$path = $media->store($storagePath);
|
||||||
|
$job->media_json = $path;
|
||||||
|
$job->stage = 3;
|
||||||
|
$job->save();
|
||||||
|
return redirect($job->url());
|
||||||
|
return $json;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function instagramStepThree(Request $request, $uuid)
|
||||||
|
{
|
||||||
|
$profile = Auth::user()->profile;
|
||||||
|
$job = ImportJob::whereProfileId($profile->id)
|
||||||
|
->whereNull('completed_at')
|
||||||
|
->whereUuid($uuid)
|
||||||
|
->whereStage(3)
|
||||||
|
->firstOrFail();
|
||||||
|
return view('settings.import.instagram.step-three', compact('profile', 'job'));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue