@ -7,6 +7,7 @@ use App\Models\Location;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Uuid;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Auth;
use League\Csv\Reader;
use League\Csv\Reader;
use App\Models\Source;
class LocationController extends Controller
class LocationController extends Controller
{
{
@ -63,22 +64,72 @@ class LocationController extends Controller
//$recordCount = count($fresh);
//$recordCount = count($fresh);
$duplicates = 0;
$duplicates = 0;
$fresh = 0;
$fresh = 0;
$denycount = array_map('str_getcsv', file($this->defed));
// ['url' => "rage.love"],
$denylist = array_map('str_getcsv', file($this->three));
//['url' => "indyapocalypse.social"],
foreach ($denylist as $item) {
$unified = [];
$blockCount = 0;
//$denycount = array_map('str_getcsv', file($this->defed));
//get block count for item
//$denylist = array_map('str_getcsv', file($this->three));
foreach ($denycount as $line) {
$sources = Source::where("active", true)->get();
if ($line[0] == $item[0]) {
foreach ($sources as $source) {
$blockcount = $line[1];
//parsing for mastodon
if ($source->type == 'mastodon') {
$result = [];
if ($source->token == null) {
$result = \Mastodon::domain('https://' . $source->url)
->get('/instance/domain_blocks');
} else {
$result = \Mastodon::domain('https://' . $source->url)
->token($source->token)
->get('/instance/domain_blocks');
}
foreach ($result as $item) {
$index = array_search($item['domain'], array_column($unified, 'url'));
if ($index) {
//if there is a match, update the count
++$unified[$index]['count'];
} else {
array_push($unified, [
'name' => $item['domain'],
'url' => $item['domain'],
'rating' => $item['severity'],
'comment' => $item['comment'],
'count' => 1,
]);
}
}
}
}
}
$location = Location::where("url", $item[0])->first();
//parsing for custom csv
if ($source->type == 'custom' & & $source->format == 'csv') {
$denylist = array_map('str_getcsv', file($source->url));
foreach ($denylist as $item) {
$index = array_search($item[0], array_column($unified, 'url'));
if ($index) {
//if there is a match, update the count
++$unified[$index]['count'];
} else {
array_push($unified, [
'name' => $item[0],
'url' => $item[0],
'rating' => $item[1],
'comment' => $item[2],
'count' => 1,
]);
}
}
}
}
//once the unified list is created, update current entries or create fresh ones
foreach ($unified as $item) {
$location = Location::where("url", $item['url'])->first();
if ($location) {
if ($location) {
++$duplicates;
++$duplicates;
//update block count for existing item
//update block count for existing item
$location->block_count = $blockcount;
$location->block_count = $item['count'];
//replace null with empty array
//replace null with empty array
if ($location->images == null) {
if ($location->images == null) {
@ -87,25 +138,27 @@ class LocationController extends Controller
$location->save();
$location->save();
} else {
} else {
// make new entries for instances not present
// make new entries for instances not present
if ($item[0] != 'domain') {
++$fresh;
++$fresh;
$images = [];
$images = [];
$new = Location::create([
$new = Location::create([
'uuid' => Uuid::uuid4(),
'uuid' => Uuid::uuid4(),
'name' => $item[0],
'name' => $item['url'],
'url' => $item[0],
'url' => $item['url'],
'description' => 'no description',
'description' => ($item['comment'] != null) ? $item['comment'] : "no description",
'active' => true,
'active' => true,
'rating' => $item[1],
'rating' => $item['rating'],
'added_by' => 1,
'added_by' => 1,
'tags' => 'poor moderation, hate speech',
'tags' => 'poor moderation, hate speech',
'images' => json_encode($images),
'images' => json_encode($images),
'block_count' => $blockcount,
'block_count' => $item['count'],
]);
]);
}
}
}
}
}
//$lookfor = '0sint.social';
//$index = array_search($lookfor, array_column($unified, 'url'));
//return back()->with('message', 'TOTAL: ' . count($unified) . " - " . $unified[$index]['count'] . " COUNT");
return back()->with('message', $duplicates . ' UPDATED - ' . $fresh . ' CREATED');
return back()->with('message', $duplicates . ' UPDATED - ' . $fresh . ' CREATED');
//$domain = $csv[1000][0];
//$domain = $csv[1000][0];