JFIF$        dd7 

Viewing File: /home/optimaldigitaltr/public_html/src/app/Http/Controllers/HomeController.php

<?php

namespace App\Http\Controllers;

use App\Enums\Frontend\SectionKey;
use App\Enums\Frontend\SectionName;
use App\Enums\Status;
use App\Models\Contact;
use App\Models\CryptoCurrency;
use App\Models\Language;
use App\Models\Menu;
use App\Models\Subscriber;
use App\Models\User;
use App\Services\FrontendService;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\View\View;
use InvalidArgumentException;
use Illuminate\Support\Arr;


class HomeController extends Controller
{
    public function __construct(protected FrontendService $frontendService)
    {

    }

    public function index(): View
    {
        $setTitle = "Trading for everyone";

        if (\request()->query('reference')) {
            session()->put('reference_uuid', \request()->query('reference'));
        }

        return view('frontend.index', compact('setTitle'));
    }


    public function trade(): View
    {
        $setTitle = "Trade Overview";
        $cryptos =  CryptoCurrency::where('status', Status::ACTIVE->value)->paginate(getPaginate());
        $topGainers = CryptoCurrency::where('status', Status::ACTIVE->value)->whereNotNull('top_gainer')->orderBy('top_gainer', 'ASC')->get();
        $topLosers = CryptoCurrency::where('status', Status::ACTIVE->value)->whereNotNull('top_loser')->orderBy('top_loser', 'ASC')->get();

        return view('frontend.coin', compact(
            'setTitle',
            'cryptos',
            'topGainers',
            'topLosers'
        ));
    }


    public function page(string $url): View
    {
        $setTitle = ucfirst(str_replace(' ', '-', $url));
        $page = Menu::where('url', $url)->firstOrFail();

        return view('frontend.page', compact(
            'setTitle',
            'page'
        ));
    }

    /**
     * @return View
     */
    public function contact(): View
    {
        $setTitle = "Contact";
        $fixedContent = FrontendService::getFrontendContent(\App\Enums\Frontend\SectionKey::CONTACT, \App\Enums\Frontend\Content::FIXED);

        return view('frontend.contact', compact(
            'setTitle',
            'fixedContent',
        ));
    }


    public function languageChange(?string $code = null): Response
    {
        $languageCode = 'en';
        if ($code) {
            $language = Language::where('code', $code)->first();

            if ($language) {
                $languageCode = $language->code;
            }
        }

        Session::put('lang', $languageCode);
        return response(['message' => 'Language changed successfully']);
    }


    public function blogDetail($id): View
    {
        $setTitle = "Blog Details";
        $content = $this->frontendService->findById($id);
        $recentPosts = $this->frontendService->getEnhancementContent(SectionKey::BLOG->value);

        if(!$content || $content->name != SectionName::BLOG->value){
            abort(404);
        }

        return view('frontend.blog_detail', compact(
            'setTitle',
            'content',
            'recentPosts'
        ));
    }

    
    public function subscribe(Request $request): Response
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|email|unique:subscribers,email',
        ]);

        if ($validator->fails()) {
            return response([
                'error' => $validator->errors()->first()
            ], 422);
        }

        Subscriber::create([
            'email' => $request->input('email')
        ]);


        return response(['success' => 'Subscribed Successfully']);
    }


    public function contactStore(Request $request): RedirectResponse
    {
        $request->validate([
            'email' => ['required', 'email'],
            'subject' => ['required'],
            'message' => ['required'],
        ]);

        Contact::create([
            'email' => $request->input('email'),
            'subject' => $request->input('subject'),
            'message' => $request->input('message'),
        ]);

        return back()->with('notify', [['success', __('Contact has been submitted')]]);

    }


    public function policy(string $name, string|int $id): View
    {
       
        $content = $this->frontendService->findById($id);
        $setTitle = Arr::get($content?->meta, 'name', 'Page');

        return view('frontend.policy', compact(
            'setTitle',
            'content',
        ));
    }

    public function defaultImageCreate(string $size = null): void
    {
        if ($size === null) {
            throw new InvalidArgumentException("Size parameter is required");
        }

        list($width, $height) = explode('x', $size);
        $image = imagecreatetruecolor($width, $height);
        $fontFile = realpath('assets/font') . DIRECTORY_SEPARATOR . 'RobotoMono-Regular.ttf';

        $fontSize = ($width > 100 && $height > 100) ? 30 : 5;
        $text = "$width" . 'X' . "$height";
        $backgroundColor = imagecolorallocate($image, 237, 241, 250);
        $textColor = imagecolorallocate($image, 107, 111, 130);
        imagefilledrectangle($image, 0, 0, $width - 1, $height - 1, $backgroundColor);
        $textSize = imagettfbbox($fontSize, 0, $fontFile, $text);
        $textWidth = $textSize[2] - $textSize[0];
        $textHeight = $textSize[1] - $textSize[7];
        $x = ($width - $textWidth) / 2;
        $y = ($height + $textHeight) / 2;
        header('Content-Type: image/jpeg');
        imagettftext($image, $fontSize, 0, $x, $y, $textColor, $fontFile, $text);
        imagejpeg($image);
        imagedestroy($image);
    }

}
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg