forked from projects/thebadspace
ro
8353d154c4
the update process now compiles public comments from instance blocklists and displays them, so the name of the table that stores these comments has been changed so it's not confusing. also made the appropriate changes on the backend and in the template that shows that information
155 lines
6 KiB
PHP
155 lines
6 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\Location;
|
|
use App\Repositories\LocationRepository;
|
|
use App\Repositories\SourceRepository;
|
|
use Ramsey\Uuid\Uuid;
|
|
|
|
class UpdateService
|
|
{
|
|
protected $location;
|
|
protected $source;
|
|
|
|
public function __construct(
|
|
LocationRepository $locationRepository,
|
|
SourceRepository $sourceRepository
|
|
) {
|
|
$this->location = $locationRepository;
|
|
$this->source = $sourceRepository;
|
|
}
|
|
|
|
public function data()
|
|
{
|
|
$response = $this->source->updateSourceData();
|
|
if ($response['updated'] == 'true') {
|
|
return count($response['checked']) . ' SOURCES UPDATED';
|
|
} else {
|
|
return 'NO SOURCES PRESENT';
|
|
}
|
|
}
|
|
|
|
public function list()
|
|
{
|
|
$duplicates = 0;
|
|
$fresh = 0;
|
|
$unified = [];
|
|
|
|
$sources = $this->source->getActive();
|
|
$locations = $this->location->getActiveLocations();
|
|
|
|
foreach ($sources as $source) {
|
|
//$listData = json_decode();
|
|
foreach (json_decode($source->list_data) as $item) {
|
|
$index = array_search($item->domain, array_column($unified, 'url'));
|
|
if ($index) {
|
|
//if there is a match, update the count and comment
|
|
if ($item->severity == "suspend" || $item->severity == "defederate") {
|
|
++$unified[$index]['block_count'];
|
|
array_push($unified[$index]['block_vote'], $source->url);
|
|
} else {
|
|
++$unified[$index]['silence_count'];
|
|
array_push($unified[$index]['silence_vote'], $source->url);
|
|
}
|
|
if (!is_null($item->comment) && $item->comment != ' ' && $item->comment != '') {
|
|
$unified[$index]['comment'] = $item->comment . '+' . $unified[$index]['comment'];
|
|
}
|
|
} else {
|
|
$silence = 0;
|
|
$suspend = 0;
|
|
$block_vote = [];
|
|
$silence_vote = [];
|
|
if ($item->severity == "suspend" || $item->severity == "defederate") {
|
|
++$suspend;
|
|
array_push($block_vote, $source->url);
|
|
} else {
|
|
++$silence;
|
|
array_push($silence_vote, $source->url);
|
|
}
|
|
array_push($unified, [
|
|
'name' => $item->domain,
|
|
'url' => $item->domain,
|
|
'rating' => $item->severity,
|
|
'comment' => $item->comment,
|
|
'block_count' => $suspend,
|
|
'silence_count' => $silence,
|
|
'block_vote' => $block_vote,
|
|
'silence_vote' => $silence_vote,
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
//clear out all previous descriptions
|
|
foreach ($locations as $loc) {
|
|
$loc->public_comments = ' ';
|
|
$loc->save();
|
|
}
|
|
|
|
foreach ($unified as $item) {
|
|
$location = $this->location->getLocation($item['url']);
|
|
if ($location) {
|
|
++$duplicates;
|
|
//update block count for existing item
|
|
|
|
$location->block_count = $item['block_count'];
|
|
$location->block_vote = [];
|
|
$location->block_vote = $item['block_vote'];
|
|
$location->silence_count = $item['silence_count'];
|
|
$location->silence_vote = [];
|
|
$location->silence_vote = $item['silence_vote'];
|
|
//clear descriptions
|
|
if (!is_null($item['comment']) || !$item['comment'] != " ") {
|
|
$location->public_comments = $item['comment'];
|
|
} else {
|
|
$location->public_comments = 'Comments Pending';
|
|
}
|
|
|
|
$location->actions_count = $item['block_count'] + $item['silence_count'];
|
|
|
|
if (($item['block_count'] + $item['silence_count']) < 2) {
|
|
$location->active = false;
|
|
} else {
|
|
$location->active = true;
|
|
}
|
|
|
|
//replace null with empty array
|
|
if ($location->images == null) {
|
|
$location->images = [];
|
|
};
|
|
$location->save();
|
|
} else {
|
|
// make new entries for instances not present
|
|
++$fresh;
|
|
$images = [];
|
|
$rating = ($item['rating'] == 'defederate') ? 'suspend' : $item['rating'];
|
|
|
|
$status = true;
|
|
if (($item['block_count'] + $item['silence_count']) < 2) {
|
|
$status = false;
|
|
}
|
|
|
|
$new = Location::create([
|
|
'uuid' => Uuid::uuid4(),
|
|
'name' => $item['url'],
|
|
'url' => $item['url'],
|
|
'public_comments' => ($item['comment'] != null) ? $item['comment'] : "comments pending",
|
|
'active' => $status,
|
|
'rating' => $rating,
|
|
'added_by' => 1,
|
|
'tags' => 'poor moderation, hate speech',
|
|
'images' => json_encode($images),
|
|
'block_count' => $item['block_count'],
|
|
'block_vote' => $item['block_vote'],
|
|
'silence_count' => $item['silence_count'],
|
|
'silence_vote' => $item['silence_vote'],
|
|
'actions_cont' => $item['block_count'] + $item['silence_count']
|
|
]);
|
|
}
|
|
}
|
|
//TODO: Send update post to TBS social account
|
|
return $duplicates . ' LOCATIONS UPDATED | ' . $fresh . ' NEW LOCATIONS CREATED';
|
|
}
|
|
}
|