PHP 8.2.30
Preview: PortfolioRepository.php Size: 8.77 KB
/home/byroehnu/easetack.com/app/Repositories/Admin/PortfolioRepository.php

<?php

namespace App\Repositories\Admin;

use App\Models\Portfolio;
use App\Models\PortfolioCategoryContent;
use App\Models\PortfolioContent;
use App\Models\Setting;
use App\Repositories\Traits\ModelRepositoryTraits;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Str;

class PortfolioRepository
{
    use ModelRepositoryTraits;

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

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

    /**
     * Get portfolios
     */
    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 portfolio 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 portfolio
        if (isset($sort['column']) && isset($sort['order'])) {
            $column = $sort['column'];
            $order = $sort['order'];

            if ($column === 'title') {
                $query->orderBy(PortfolioContent::select($sort['column'])
                    ->whereColumn('portfolios.id', 'portfolio_contents.portfolio_id')
                    ->where('language_code', app()->getLocale()), $sort['order']);
            } elseif ($column === 'sub_title') {
                $query->orderBy(PortfolioContent::select($sort['column'])
                    ->whereColumn('portfolios.id', 'portfolio_contents.portfolio_id')
                    ->where('language_code', app()->getLocale()), $sort['order']);
            } elseif ($column === 'category' || $column === 'category_title') {
                $query->orderBy(
                    PortfolioCategoryContent::select('title')
                        ->whereColumn('portfolio_category_contents.portfolio_category_id', 'portfolios.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 portfolio
     *
     * @return void
     */
    public function store(Request $request)
    {
        $default_lang = Setting::pull('default_lang');

        $portfolio = $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',
            '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) {
            PortfolioContent::create([
                'portfolio_id' => $portfolio->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]),
            ]);
        }
    }

    /**
     * Portfolio update
     */
    public function update(Request $request, Portfolio $portfolio): void
    {
        $default_lang = Setting::pull('default_lang');
        $portfolio->update([
            'category_id' => $request->pageInfo[$default_lang]['category'],
            'is_show_breadcrumb' => $request->pageInfo[$default_lang]['is_show_breadcrumb'] ? '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) {
            PortfolioContent::updateOrCreate([
                'portfolio_id' => $portfolio->id,
                'language_code' => $key,
            ], [
                'portfolio_id' => $portfolio->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]),
            ]);
        }
    }

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

    /**
     * Delete portfolio
     */
    public function destroy(Portfolio $portfolio): void
    {
        $portfolio->delete();
    }

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

    public function getPortfolioData(Portfolio $portfolio)
    {
        $portfolio->load('contents');
        $formattedPageData = [];
        $formattedPageInfo = [];

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

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

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

        return $data;
    }

    public function clone(Portfolio $portfolio)
    {
        $newPortfolio = $portfolio->replicate();
        $newPortfolio->slug = $portfolio->slug.'-'.Str::random(6);
        $newPortfolio->save();

        foreach ($portfolio->contents as $content) {
            $newContent = $content->replicate();
            $newContent->portfolio_id = $newPortfolio->id;
            $newContent->save();
        }
    }
}

Directory Contents

Dirs: 0 × Files: 37

Name Size Perms Modified Actions
713 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
4.90 KB lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
8.52 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
4.28 KB lrw-rw-rw- 2025-05-15 11:40:33
Edit Download
1.27 KB lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
3.81 KB lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
2.42 KB lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
1.11 KB lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
1.58 KB lrw-rw-rw- 2025-04-22 07:44:34
Edit Download
1.18 KB lrw-rw-rw- 2025-05-05 10:37:43
Edit Download
11.35 KB lrw-rw-rw- 2025-04-19 04:42:55
Edit Download
5.59 KB lrw-rw-rw- 2025-05-15 11:24:11
Edit Download
982 B lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
5.26 KB lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
7.94 KB lrw-rw-rw- 2025-05-08 11:48:26
Edit Download
1.40 KB lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
4.73 KB lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
8.77 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
7.70 KB lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
5.04 KB lrw-rw-rw- 2025-05-15 11:24:11
Edit Download
3.88 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
7.79 KB lrw-rw-rw- 2025-04-22 07:42:55
Edit Download
1.32 KB lrw-rw-rw- 2025-04-22 07:42:55
Edit Download
653 B lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
3.79 KB lrw-rw-rw- 2025-05-04 10:44:46
Edit Download
2.27 KB lrw-rw-rw- 2025-04-26 10:16:33
Edit Download
4.97 KB lrw-rw-rw- 2025-05-15 11:24:11
Edit Download
8.42 KB lrw-rw-rw- 2025-04-19 04:22:17
Edit Download
723 B lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
2.42 KB lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
1.19 KB lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
7.19 KB lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
4.42 KB lrw-rw-rw- 2025-05-01 06:16:57
Edit Download
1017 B lrw-rw-rw- 2025-04-08 04:12:56
Edit Download
2.63 KB lrw-rw-rw- 2025-04-13 07:02:31
Edit Download
3.51 KB lrw-rw-rw- 2025-04-19 04:22:16
Edit Download
2.51 KB lrw-rw-rw- 2025-04-08 04:12:56
Edit Download

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