CompanyController.php 10.6 KB
<?php

namespace App\Http\Controllers\Admin;

use App\Classes\Meta;
use App\Http\Controllers\Controller;
use App\Http\Requests\PagesRequest;
use App\Http\Requests\ReclameRequest;
use App\Http\Requests\SEORequest;
use App\Models\Employer;
use App\Models\employers_main;
use App\Models\header_footer;
use App\Models\Job_title;
use App\Models\job_titles_main;
use App\Models\pages;
use App\Models\reclame;
use App\Models\SEO;
use App\Models\PageContent;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use App\Enums\MainPageCounters;

class CompanyController extends Controller
{
    // кабинет - редактор сайта
    public function editor() {
        return;
    }

    // кабинет - редактор должности на главной
    public function job_titles_main(Request $request) {
        if ($request->ajax()) {
            $user = job_titles_main::find($request->id);
            $request->offsetUnset('id');
            $user->update($request->all());
        }

        $jobs = job_titles_main::query()->OrderBy('sort')->paginate(10);
        $list_job_titles = Job_title::query()->active()->orderBy('name')->get();

        if ($request->ajax()) {
            return view('admin.job_main.index_ajax', compact('jobs', 'list_job_titles'));
        } else {
            return view('admin.job_main.index', compact('jobs', 'list_job_titles'));
        }
    }

    // кабинет - блок со счетчиками на главной
    public function counters_main(Request $request) {
        $block_names = MainPageCounters::values();
        $blocks = PageContent::select('name', 'title', 'description', 'extra')
            ->whereIn('name', $block_names)
            ->get()
            ->keyBy('name')
            ->toArray();
        return view('admin.counters_main.index', compact('block_names', 'blocks'));
    }

    public function counters_main_update(Request $request, string $name) {
        PageContent::updateOrCreate(
            ['name' => $name],
            array_merge(['name' => $name], $request->all())
        );
        $block_names = MainPageCounters::values();;
        $blocks = PageContent::select('name', 'title', 'description', 'extra')
            ->whereIn('name', $block_names)
            ->get()
            ->keyBy('name')
            ->toArray();
        return view('admin.counters_main.index', compact('block_names', 'blocks'));
    }

    ////////////////////////////////////////////////////////////////////////////////
    // кабинет - редактор шапки-футера сайта
    public function editblocks(Request $request) {
        if ($request->ajax()) {
            $header_footer = header_footer::where('header', $request->header)->OrderBy('sort')->OrderBy('name')->paginate(15);
            $list_menu = header_footer::where('header', $request->header)->OrderBy('name')->get();
            return view('admin.editbloks.index_ajax', compact('header_footer', 'list_menu'));
        } else {
            $header_footer = header_footer::where('header', '1')->OrderBy('sort')->OrderBy('name')->paginate(15);
            $list_menu = header_footer::where('header', '1')->OrderBy('name')->get();
            return view('admin.editbloks.index', compact('header_footer', 'list_menu'));
        }
    }

    public function editblock_add() {
        $items = header_footer::query()->OrderBy('name')->get();
        return view('admin.editbloks.add', compact('items'));
    }

    public function editblock_store(Request $request) {
        header_footer::create($request->all());
        return redirect()->route('admin.edit-blocks');
    }

    public function editblock_ajax(Request $request) {
      if ($request->ajax()) {
          $hf = header_footer::find($request->id);
          $filter = $request->header;
          unset($request->id);
          unset($request->header);
          $hf->update($request->all());

          $header_footer = header_footer::where('header', $filter)->OrderBy('sort')->OrderBy('name')->paginate(15);
          $list_menu = header_footer::where('header', $filter)->OrderBy('name')->get();
          return view('admin.editbloks.index_ajax', compact('header_footer', 'list_menu'));
      } else {
          return "Ошибка!";
      }
    }

    public function editblock_edit(header_footer $block) {
        $items = header_footer::query()->OrderBy('name')->get();
        return view('admin.editbloks.edit', compact('block', 'items'));
    }

    public function editblock_update(Request $request, header_footer $block) {
        $block->update($request->all());
        return redirect()->route('admin.edit-blocks');
    }

    public function editblock_destroy(header_footer $block) {
        $block->delete();
        return redirect()->route('admin.edit-blocks');
    }
    /////////////////////////////////////////////////////////

    // кабинет - редактор работодатели на главной
    public function employers_main(Request $request) {
        if ($request->ajax()) {
            $user = employers_main::find($request->id);
            $request->offsetUnset('id');
            $user->update($request->all());
        }

        $employers = employers_main::query()->OrderBy('sort')->paginate(10);
        $list_employers = Employer::query()->active()->orderBy('name_company')->get();

        if ($request->ajax()) {
            return view('admin.employer_main.index_ajax', compact('employers', 'list_employers'));
        } else {
            return view('admin.employer_main.index', compact('employers', 'list_employers'));
        }
    }

    //////////// кабинет - редактор seo-сайта /////////////////////////////
    public function editor_seo() {
        $pages = SEO::query()->OrderBy('url')->paginate(15);
        return view('admin.seo.index', compact('pages'));
    }

    public function editor_seo_add() {
        return view('admin.seo.add');
    }

    public function editor_seo_store(SEORequest $request) {
        SEO::create($request->all());
        return redirect()->route('admin.editor-seo');
    }

    public function editor_seo_ajax(Request $request) {
        $url = $request->get('url'); // post('url');
        $metaData = Array();
        //$url = json_decode($url, true);

        if (!empty($url)) {

            $meta = new Meta($url);
            $meta->parse();
            $metaData = $meta->finalize();

            return json_encode($metaData);
        } else {
            return json_encode(Array('Error URL'));
        }
    }

    public function editor_seo_edit(SEO $page) {
        return view('admin.seo.edit', compact('page'));
    }

    public function editor_seo_update(SEORequest $request, SEO $page) {
        $page->update($request->all());
        return redirect()->route('admin.editor-seo');
    }

    public function editor_seo_destroy(SEO $page) {
        $page->delete();
        return redirect()->route('admin.editor-seo');
    }
    ///////////////////////////////////////////////////////////////////////

    /////////// кабинет - редактор страниц ////////////////////////////////
    public function editor_pages() {
        $pages = pages::query()->OrderBy('name')->paginate(15);
        return view('admin.pages.index', compact('pages'));
    }

    public function editor_pages_add() {
        return view('admin.pages.add');
    }

    public function editor_pages_store(PagesRequest $request) {
        $params = $request->all();
        if ($request->has('image')) {
            $params['image'] = $request->file('image')->store('pages', 'public');
        }

        pages::create($params);
        return redirect()->route('admin.editor-pages');
    }

    public function editor_pages_edit(pages $page) {
      return view('admin.pages.edit', compact('page'));
    }

    public function editor_pages_update(PagesRequest $request, pages $page) {
        $params = $request->all();

        if ($request->has('image')) {
            if (!empty($page->image)) Storage::delete($page->image);
            $params['image'] = $request->file('image')->store('pages', 'public');
        } else {
            if (!empty($page->image)) $params['image'] = $page->image;
        }

        $page->update($params);
        return redirect()->route('admin.editor-pages');
    }

    public function editor_pages_destroy(pages $page) {
        $page->delete();
        return redirect()->route('admin.editor-pages');
    }
    ///////////////////////////////////////////////////////////////////

    ////// кабинет - реклама сайта ////////////////////////////////////
    public function reclames(Request $request) {
        if ($request->ajax()) {
            $rec = reclame::find($request->id);
            if ($request->status == 'close') {
                $rec->is_hidden = 0;
            } else {
                $rec->is_hidden = 1;
            }
            $rec->save();
        }

        $reclames = reclame::query()->OrderBy('title')->paginate(15);

        if ($request->ajax()) {
            return view('admin.reclames.index_ajax', compact('reclames'));
        } else {
            return view('admin.reclames.index', compact('reclames'));
        }
    }

    public function reclames_add() {
        return view('admin.reclames.add');
    }

    public function reclames_store(ReclameRequest $request) {
        $params = $request->all();
        /*if('on' == $request->get('is_hidden')) {
            $params['is_hidden'] = 1;
        } else {
            $params['is_hidden'] = 0;
        }*/
        if ($request->has('image')) {
            $params['image'] = $request->file('image')->store('reclames', 'public');
        }

        reclame::create($params);
        return redirect()->route('admin.reclames');
    }

    public function reclames_edit(reclame $reclame) {
        return view('admin.reclames.edit', compact('reclame'));
    }

    public function reclames_update(ReclameRequest $request, reclame $reclame) {
        $params = $request->all();
        /*if('on' == $request->get('is_hidden')) {
            $params['is_hidden'] = 1;
        } else {
            $params['is_hidden'] = 0;
        }*/

        if ($request->has('image')) {
            if (!empty($reclame->image)) Storage::delete($reclame->image);
            $params['image'] = $request->file('image')->store('reclames', 'public');
        } else {
            if (!empty($reclame->image)) $params['image'] = $reclame->image;
        }

        $reclame->update($params);
        return redirect()->route('admin.reclames');
    }

    public function reclames_destroy(reclame $reclame) {
        $reclame->delete();
        return redirect()->route('admin.reclames');
    }

    /////////////////////////////////////////////////////////////////
}