Viewing File: /home/ubuntu/vedadeals-backend-base/app/Jobs/GenerateSiteMapJob.php
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Setting, Storage, Exception;
use App\Models\{ Product, Category, SubCategory, StaticPage };
use App\Services\{ EmailService };
use ZanySoft\Zip\Zip;
class GenerateSiteMapJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 2;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try {
$static_pages = StaticPage::Approved()->orderBy('created_at', 'DESC')->get(['unique_id']);
$categories = Category::Approved()->orderBy('created_at', 'DESC')->get(['id','name', 'unique_id']);
$static_pages_sitemap = $products_sitemap = $categories_sitemap = $index_sitemap = '';
$sitemap_index = '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">'.PHP_EOL;
$sitemap = '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL.
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.PHP_EOL;
foreach ($static_pages as $static_page) {
$static_pages_sitemap .= "<url>".PHP_EOL."<loc>".Setting::get('frontend_url')."page/$static_page->unique_id</loc>".PHP_EOL."</url>".PHP_EOL;
}
$generated_sitemap_static_pages = "$sitemap$static_pages_sitemap</urlset>";
if (Storage::disk('public')->exists(SITEMAP_FILE_PATH.'static_page/sitemap.xml')) {
Storage::disk('public')->delete(SITEMAP_FILE_PATH.'static_page/sitemap.xml');
}
Storage::disk('public')->put(SITEMAP_FILE_PATH.'static_page/sitemap.xml', $generated_sitemap_static_pages);
foreach ($categories as $category) {
$category_name = removeSpecialCharacters($category->name, '_');
$products = Product::Available()->where(['category_id' => $category->id])->orderBy('created_at', 'DESC')->get(['unique_id']);
foreach ($products as $product) {
$products_sitemap .= "<url>".PHP_EOL."<loc>".Setting::get('frontend_url')."product/$product->unique_id</loc>".PHP_EOL."</url>".PHP_EOL;
}
if (Storage::disk('public')->exists(SITEMAP_FILE_PATH."$category_name/sitemap.xml")) {
Storage::disk('public')->delete(SITEMAP_FILE_PATH."$category_name/sitemap.xml");
}
$generated_sitemap_products = "$sitemap$products_sitemap</urlset>";
$products_sitemap = '';
Storage::disk('public')->put(SITEMAP_FILE_PATH."$category_name/sitemap.xml", $generated_sitemap_products);
$index_sitemap .= "<sitemap>".PHP_EOL."<loc>".Setting::get("frontend_url")."sitemap/$category_name/sitemap.xml</loc>".PHP_EOL."</sitemap>".PHP_EOL;
}
$index_sitemap .= "<sitemap>".PHP_EOL."<loc>".Setting::get("frontend_url")."sitemap/static_page/sitemap.xml</loc>".PHP_EOL."</sitemap>".PHP_EOL;
$generated_main_sitemap = "$sitemap_index$index_sitemap</sitemapindex>";
if(Storage::disk('public')->exists(SITEMAP_FILE_PATH."sitemap.xml")) {
Storage::disk('public')->delete(SITEMAP_FILE_PATH."sitemap.xml");
}
Storage::disk('public')->put(SITEMAP_FILE_PATH."sitemap.xml", $generated_main_sitemap);
if(Storage::disk('public')->exists("sitemap.zip")) {
Storage::disk('public')->delete("sitemap.zip");
}
$zip = Zip::create(public_path("storage/sitemap.zip"));
$zip->add(public_path('storage/sitemap/'));
$zip->close();
EmailService::send_sitemap_email();
info("GenerateSiteMapJob Success");
} catch(Exception $e) {
info("GenerateSiteMapJob Error : ".print_r($e->getMessage(), true));
}
}
}
Back to Directory
File Manager