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