Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions app/ActiveSuspension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ActiveSuspension extends Model
{
protected $fillable = [
'since',
'wiki_id'
];
}
56 changes: 56 additions & 0 deletions app/Http/Controllers/ActiveSuspensionController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

namespace App\Http\Controllers;

use App\ActiveSuspension;
use Illuminate\Http\Request;

class ActiveSuspensionController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
// Possible for anyone
// TODO: implement
}

/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
// Only possible for admin
return ActiveSuspension::create([
'since' => $request->input('since'),
'wiki_id' => $request->input('wiki_id')
]);
}

/**
* Display the specified resource.
*/
public function show(ActiveSuspension $activeSuspension)
{
// Possible for anyone
// TODO: implement
}

/**
* Update the specified resource in storage.
*/
public function update(Request $request, ActiveSuspension $activeSuspension)
{
// Only possible for admin
// TODO: implement
}

/**
* Remove the specified resource from storage.
*/
public function destroy(ActiveSuspension $suspension)
{
$suspension->first()->delete();
}
}
55 changes: 55 additions & 0 deletions app/Http/Controllers/ReviewSubmissionController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php

namespace App\Http\Controllers;

use App\ReviewSubmission;
use Illuminate\Http\Request;

class ReviewSubmissionController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
// Only possible for Admin
}

/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
// Possible for Admin or Authed user
// Authed user can only create pending "submitted" status
$submission = new ReviewSubmission();
$submission->status = 'submitted';
$submission->wiki_id = $request->input('wiki_id');
$submission->save();
}

/**
* Display the specified resource.
*/
public function show(ReviewSubmission $reviewSubmission)
{
// Possible for admin or specifically authed user
}

/**
* Update the specified resource in storage.
*/
public function update(Request $request, ReviewSubmission $reviewSubmission)
{
// Only possible for admin to pick up/approv, normal Wikimanager can cancel

}

/**
* Remove the specified resource from storage.
*/
public function destroy(ReviewSubmission $reviewSubmission)
{
// Possible for admin only
}
}
61 changes: 61 additions & 0 deletions app/Http/Controllers/ScheduledSuspensionController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php

namespace App\Http\Controllers;

use App\ScheduledSuspension;
use App\Wiki;
use Illuminate\Http\Request;

class ScheduledSuspensionController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
return ScheduledSuspension::all();
}

/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
return ScheduledSuspension::create([
'active_from' => $request->input('active_from'),
'wiki_id' => $request->input('wiki_id')
]);
}

/**
* Display the specified resource.
*/
public function show( ScheduledSuspension $suspension )
{
return $suspension->get();
}

/**
* Update the specified resource in storage.
*/
public function update(Request $request, ScheduledSuspension $suspension)
{
$suspension->first()->update([
'active_from' => $request->input('active_from')
]);

}

/**
* Remove the specified resource from storage.
*/
public function destroy(ScheduledSuspension $suspension)
{
$suspension->first()->delete();
}

public function showByWiki( Wiki $wiki ) {
return $wiki->first()->scheduledSuspension;
}

}
10 changes: 10 additions & 0 deletions app/ReviewSubmission.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ReviewSubmission extends Model
{
//
}
13 changes: 13 additions & 0 deletions app/ScheduledSuspension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ScheduledSuspension extends Model
{
protected $fillable = [
'active_from',
'wiki_id'
];
}
4 changes: 4 additions & 0 deletions app/Wiki.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ public function settings(): HasMany {
return $this->hasMany(WikiSetting::class);
}

public function scheduledSuspension(): HasOne {
return $this->hasOne(ScheduledSuspension::class);
}

public function publicSettings() {
return $this->settings()->whereIn('name',
[
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('scheduled_suspensions', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('wiki_id');
$table->date('active_from');
$table->enum('reason', ['expiry', 'hp_violation', 'tou_violation']);
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('scheduled_suspension');
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('active_suspensions', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('wiki_id');
$table->date('since');
$table->enum('reason', ['expiry', 'hp_violation', 'tou_violation']);
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('active_suspension');
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('review_submissions', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('wiki_id');
$table->enum('status', ['submitted', 'in_review', 'approved', 'rejected', 'cancelled'])->required();
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('review_submission');
}
};
5 changes: 5 additions & 0 deletions routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,13 @@
$router->get('v1/policies/{policy_type}/upcoming', ['uses' => 'PolicyController@getUpcomingPolicyByType']);
$router->get('v1/policies/{policy_type}/by_active_from/{active_from}', ['uses' => 'PolicyController@getPolicyByTypeAndActiveFrom']);
$router->get('v1/policies/{policy_type}', ['uses' => 'PoliciesController@getPoliciesByType']);
$router->apiResource('v1/scheduledSuspension', 'ScheduledSuspensionController');
$router->apiResource('v1/activeSuspension', 'ActiveSuspensionController')->only('destroy', 'store');
$router->apiResource('v1/reviewSubmission', 'ReviewSubmissionController')->only('store', 'update');
$router->get('v1/scheduledSuspension/wiki/{wiki}', ['uses' => 'ScheduledSuspensionController@showByWiki']);

$router->apiResource('wiki', 'PublicWikiController')->only(['index', 'show']);
$router->apiResource('reusePrototype', 'PublicWikiController')->only(['index']);
$router->apiResource('wikiConversionData', 'ConversionMetricController')->only(['index']);

});
62 changes: 62 additions & 0 deletions tests/Routes/ActiveSuspensionControllerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php

namespace Tests\Routes;

use App\ActiveSuspension;
use App\Wiki;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\TestCase;

class ActiveSuspensionControllerTest extends TestCase {
protected $baseRoute = 'v1/activeSuspension';

private Wiki $wiki;

use DatabaseTransactions;

protected function setUp(): void {
parent::setUp();
$this->wiki = Wiki::factory()->create();
}

protected function tearDown(): void {
parent::tearDown();
}

public function testGetAdminCreateSuspension(): void {
$this->json(
'POST',
$this->baseRoute,
$data = [
'since' => '2028-01-01',
'wiki_id' => $this->wiki->id
]);

$expectedSuspension = ActiveSuspension::where(
[
'since' => '2028-01-01',
'wiki_id' => $this->wiki->id
]
);
$this->assertTrue($expectedSuspension->exists());
}

public function testGetAdminRemoveSuspension(): void {
$suspension = ActiveSuspension::create([
'since' => '2029-01-01',
'wiki_id' => $this->wiki->id
]);
$suspension2 = ActiveSuspension::create([
'since' => '2029-02-01',
'wiki_id' => $this->wiki->id
]);
$suspension3 = ActiveSuspension::create([
'since' => '2029-03-01',
'wiki_id' => $this->wiki->id
]);
$this->json('DELETE', $this->baseRoute . '/' . $suspension->id )
->assertStatus(200);
$this->assertModelMissing($suspension);
}

}
Loading
Loading