Skip to main content

Black Friday 2025! Only until December 1st: coupon FRIDAY25 for 40% off Yearly/Lifetime membership!

Read more here

OpenLitterMap/openlittermap-web

122 stars
1 code files
View OpenLitterMap/openlittermap-web on GitHub

app/Console/Commands/GenerateSitemap.php

Open in GitHub
use App\Models\Location\City;
use App\Models\Location\Country;
use App\Models\Location\State;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;
 
class GenerateSitemap extends Command
{
protected $signature = 'sitemap:generate';
 
protected $description = 'Generates the sitemap automatically.';
 
public function handle()
{
$sitemap = Sitemap::create()
->add($this->url(''))
->add($this->url('about'))
->add($this->url('global'))
->add($this->url('world'))
->add($this->url('signup'));
 
$this->addCountries($sitemap);
 
$this->addStates($sitemap);
 
$this->addCities($sitemap);
 
$sitemap->writeToFile(public_path('sitemap.xml'));
 
$this->line('Done!');
 
return 0;
}
 
private function url($url): Url
{
$site = 'https://openlittermap.com/';
 
return Url::create($site . $url)
->setLastModificationDate(Carbon::yesterday())
->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY)
->setPriority(1);
}
 
private function addCountries(Sitemap $sitemap): void
{
$countries = Country::where('manual_verify', '1')->get();
 
foreach ($countries as $country) {
$sitemap->add($this->url("world/{$country->country}"));
}
}
 
private function addStates(Sitemap $sitemap): void
{
$states = State::with('country')
->where([
'manual_verify' => 1,
['total_litter', '>', 0],
['total_contributors', '>', 0]
])
->get();
 
foreach ($states as $state) {
$sitemap->add($this->url("world/{$state->country->country}/{$state->state}"));
}
}
 
private function addCities(Sitemap $sitemap): void
{
$cities = City::with('state.country')
->where([
['total_images', '>', 0],
['total_litter', '>', 0],
['total_contributors', '>', 0]
])
->get();
 
foreach ($cities as $city) {
$sitemap->add($this->url(
"world/{$city->state->country->country}/{$city->state->state}/{$city->city}/map")
);
}
}
}

We'd Love Your Feedback

Tell us what you like or what we can improve

Feel free to share anything you like or dislike about this page or the platform in general.