PHP 8.2.30
Preview: ServiceRepository.php Size: 8.73 KB
/home/byroehnu/cnggold.com.ng/app/Repositories/Admin/ServiceRepository.php

<?php

namespace App\Repositories\Admin;

use App\Models\Service;
use App\Models\ServiceCategoryContent;
use App\Models\ServiceContent;
use App\Models\Setting;
use App\Repositories\SettingRepository;
use App\Repositories\Traits\ModelRepositoryTraits;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Str;

class ServiceRepository
{
    use ModelRepositoryTraits;

    /**
     * Object model will be used to modify categories table
     */
    protected Service $model;

    /**
     *  Constructor for Service repository
     */
    public function __construct(Service $service)
    {
        $this->model = $service;
    }

    /**
     * Get services
     */
    public function paginateSearchResult($search, array $sort = [], array $filter = []): LengthAwarePaginator
    {
        $query = $this->model->with(['content', 'category.content', 'contents'])->newQuery();

        if ($search) {
            $query->whereHas('contents', function ($q) use ($search) {
                $q->where('language_code', app()->getLocale())
                    ->where('title', 'like', '%' . $search . '%');
            });
        }

        // Filter service by category title
        if (isset($filter['category']) && $filter['category'] !== 'All Categories') {
            $query->whereHas('category.content', function ($categoryQuery) use ($filter) {
                $categoryQuery->where('title', $filter['category']);
            });
        }

        // sort
        if (isset($sort['column']) && isset($sort['order'])) {
            $column = $sort['column'];
            $order = $sort['order'];

            if ($column === 'title') {
                $query->orderBy(ServiceContent::select($sort['column'])
                    ->whereColumn('services.id', 'service_contents.service_id')
                    ->where('language_code', app()->getLocale()), $sort['order']);
            } elseif ($column === 'category' || $column === 'category_title') {
                $query->orderBy(
                    ServiceCategoryContent::select('title')
                        ->whereColumn('service_category_contents.service_category_id', 'services.category_id')
                        ->where('language_code', app()->getLocale()),
                    $order
                );
            } else {
                $query->orderBy($column, $order);
            }
        }

        return $query->paginate(30)
            ->appends(array_filter([
                'search' => $search,
                'sort' => $sort,
                'lang' => app()->getLocale(),
            ]));
    }

    /**
     * Store service
     */
    public function store(Request $request, SettingRepository $repository): void
    {
        $default_lang = Setting::pull('default_lang');

        $service = $this->model->create([
            'slug' => Str::slug($request->pageInfo[$default_lang]['title']),
            'category_id' => $request->pageInfo[$default_lang]['category'],
            'is_show_breadcrumb' => $request->pageInfo[$default_lang]['is_show_breadcrumb'] ? '1' : '0',
            'is_show_shopping_cart' => $request->pageInfo[$default_lang]['is_show_shopping_cart'] ? '1' : '0',
            'breadcrumb_image' => $request->pageInfo[$default_lang]['breadcrumb_image'],
            'header_layout' => $request->pageInfo[$default_lang]['header_layout'],
            'footer_layout' => $request->pageInfo[$default_lang]['footer_layout'],
            'sections' => json_encode($request->customizeSections),
            'meta_image' => $request->pageInfo[$default_lang]['meta_image'],
        ]);

        foreach ($request->pageData as $key => $value) {
            ServiceContent::create([
                'service_id' => $service->id,
                'language_code' => $key,
                'title' => $request->pageInfo[$key]['title'],
                'breadcrumb_title' => $request->pageInfo[$key]['breadcrumb_title'],
                'header_action_button_text' => $request->pageInfo[$key]['header_action_button_text'],
                'header_action_button_url' => $request->pageInfo[$key]['header_action_button_url'],
                'meta_title' => $request->pageInfo[$key]['meta_title'],
                'meta_description' => $request->pageInfo[$key]['meta_description'],
                'meta_tags' => $request->pageInfo[$key]['meta_tags'],
                'sections_data' => json_encode($request->pageData[$key]),
            ]);
        }
    }

    /**
     * Update service
     */
    public function update(Request $request, Service $service): void
    {
        $default_lang = Setting::pull('default_lang');
        $service->update([
            'category_id' => $request->pageInfo[$default_lang]['category'],
            'is_show_breadcrumb' => $request->pageInfo[$default_lang]['is_show_breadcrumb'] ? '1' : '0',
            'is_show_shopping_cart' => $request->pageInfo[$default_lang]['is_show_shopping_cart'] ? '1' : '0',
            'breadcrumb_image' => $request->pageInfo[$default_lang]['breadcrumb_image'],
            'header_layout' => $request->pageInfo[$default_lang]['header_layout'],
            'footer_layout' => $request->pageInfo[$default_lang]['footer_layout'],
            'sections' => json_encode($request->customizeSections),
            'meta_image' => $request->pageInfo[$default_lang]['meta_image'],
        ]);

        foreach ($request->pageData as $key => $value) {
            ServiceContent::updateOrCreate([
                'service_id' => $service->id,
                'language_code' => $key,
            ], [
                'service_id' => $service->id,
                'language_code' => $key,
                'title' => $request->pageInfo[$key]['title'],
                'breadcrumb_title' => $request->pageInfo[$key]['breadcrumb_title'],
                'header_action_button_text' => $request->pageInfo[$key]['header_action_button_text'],
                'header_action_button_url' => $request->pageInfo[$key]['header_action_button_url'],
                'meta_title' => $request->pageInfo[$key]['meta_title'],
                'meta_description' => $request->pageInfo[$key]['meta_description'],
                'meta_tags' => $request->pageInfo[$key]['meta_tags'],
                'sections_data' => json_encode($request->pageData[$key]),
            ]);
        }
    }

    /**
     * Service delete
     */
    public function destroy(Service $service): void
    {
        $service->delete();
    }

    /**
     * Bulk delete
     */
    public function bulkDelete(Request $request): void
    {
        $idArray = explode(',', $request->ids);
        $this->model->destroy($idArray);
    }

    /**
     * Service slug update
     */
    public function updateSlug(Request $request, Service $service)
    {
        $service->update(['slug' => $request->input('slug')]);
    }

    /**
     * Get service data.
     */
    public function getServiceData(Service $service)
    {
        $service->load('contents');
        $formattedPageData = [];
        $formattedPageInfo = [];

        foreach ($service->contents as $serviceContent) {
            // Prepare case study data
            $content = json_decode($serviceContent->sections_data, true);
            $formattedPageData[$serviceContent->language_code] = $content;

            // Prepare case study info
            $formattedPageInfo[$serviceContent->language_code] = [
                'title' => $serviceContent->title,
                'breadcrumb_title' => $serviceContent->breadcrumb_title,
                'header_action_button_text' => $serviceContent->header_action_button_text,
                'header_action_button_url' => $serviceContent->header_action_button_url,
                'meta_title' => $serviceContent->meta_title,
                'meta_tags' => $serviceContent->meta_tags,
                'meta_description' => $serviceContent->meta_description,
                'category' => $service->category_id,
                'meta_image' => $service->meta_image,
                'header_layout' => $service->header_layout,
                'footer_layout' => $service->footer_layout,
                'is_show_breadcrumb' => (bool) $service->is_show_breadcrumb,
                'is_show_shopping_cart' => (bool) $service->is_show_shopping_cart,
                'breadcrumb_image' => $service->breadcrumb_image,
            ];
        }

        $data['page_data'] = $formattedPageData;
        $data['page_info'] = $formattedPageInfo;

        return $data;
    }

    public function clone(Service $service)
    {
        $newService = $service->replicate();
        $newService->slug = $service->slug . '-' . Str::random(6);
        $newService->save();

        foreach ($service->contents as $content) {
            $newContent = $content->replicate();
            $newContent->service_id = $newService->id;
            $newContent->save();
        }
    }
}

Directory Contents

Dirs: 0 × Files: 38

Name Size Perms Modified Actions
713 B lrw-r--r-- 2025-04-08 04:12:56
Edit Download
3.94 KB lrw-r--r-- 2025-07-19 07:29:54
Edit Download
3.67 KB lrw-r--r-- 2025-05-22 03:36:31
Edit Download
8.83 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
4.28 KB lrw-r--r-- 2025-05-15 11:40:33
Edit Download
1.27 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
3.81 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download
2.42 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download
1.11 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download
1.58 KB lrw-r--r-- 2025-04-22 07:44:34
Edit Download
1.18 KB lrw-r--r-- 2025-05-05 10:37:43
Edit Download
11.35 KB lrw-r--r-- 2025-04-19 04:42:55
Edit Download
5.59 KB lrw-r--r-- 2025-05-15 11:24:11
Edit Download
982 B lrw-r--r-- 2025-04-19 04:22:17
Edit Download
5.26 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
8.24 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
1.40 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
3.67 KB lrw-r--r-- 2025-05-22 03:36:31
Edit Download
9.08 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
7.70 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
5.04 KB lrw-r--r-- 2025-05-15 11:24:11
Edit Download
4.14 KB lrw-r--r-- 2025-07-19 07:29:54
Edit Download
8.30 KB lrw-r--r-- 2025-07-19 07:29:54
Edit Download
1.34 KB lrw-r--r-- 2025-05-22 13:45:40
Edit Download
653 B lrw-r--r-- 2025-04-19 04:22:17
Edit Download
3.79 KB lrw-r--r-- 2025-05-04 10:44:46
Edit Download
2.27 KB lrw-r--r-- 2025-04-26 10:16:33
Edit Download
3.63 KB lrw-r--r-- 2025-05-22 03:36:31
Edit Download
8.73 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
723 B lrw-r--r-- 2025-04-19 04:22:16
Edit Download
2.42 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download
1.21 KB lrw-r--r-- 2025-05-22 13:45:40
Edit Download
7.49 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
4.42 KB lrw-r--r-- 2025-05-01 06:16:57
Edit Download
1017 B lrw-r--r-- 2025-04-08 04:12:56
Edit Download
2.63 KB lrw-r--r-- 2025-04-13 07:02:31
Edit Download
3.51 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
2.51 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).