Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
webbingbrasil/courses-module / Services / CourseService.php
Size: Mime:
<?php
/**
 * Created by PhpStorm.
 * User: danilo
 * Date: 21/12/15
 * Time: 12:49
 */

namespace Modules\Courses\Services;

use Illuminate\Contracts\View\Factory;
use Modules\Courses\Contracts\Repositories\CourseRepository;
use Modules\Courses\Contracts\Repositories\SlideRepository;
use Modules\Courses\Transformers\CoursesDatatableTransformer;
use Yajra\Datatables\Datatables;
use Yajra\Datatables\Services\DataTable as DataTableService;

class CourseService extends DataTableService
{

    // protected $printPreview  = 'path-to-print-preview-view';
    // protected $exportColumns = ['id', 'name'];
    // protected $printColumns  = '*';

    /**
     * @var CourseRepository
     */
    protected $courseRepository;
    /**
     * @var SlideRepository
     */
    protected $slideRepository;

    /**
     * Medico constructor.
     * @param CourseRepository $repository
     */
    public function __construct(CourseRepository $courseRepository, SlideRepository $slideRepository, Datatables $datatables, Factory $viewFactory)
    {
        parent::__construct($datatables, $viewFactory);
        $this->courseRepository = $courseRepository;
        $this->slideRepository = $slideRepository;
    }

    public function create(array $data)
    {
        try {
            return $this->courseRepository->create($data);
        }
        catch (\Exception $e) {
            return false;
        }
    }

    public function update($id, array $data)
    {
        try {
            $model = $this->courseRepository->find($id);
            $model->fill($data)->save();

            return $model;
        }
        catch (\Exception $e) {
            return false;
        }
    }

    public function addSlide($course, array $data){
        try {
            $data['course_id'] = $course;
            $data['order'] = $this->slideRepository->count(['course_id' => $course]);
            return $this->slideRepository->create($data);
        }
        catch (\Exception $e) {
            return false;
        }
    }

    public function updateSlide($id, array $data)
    {
        try {
            $model = $this->slideRepository->find($id);
            $model->fill($data)->save();

            return $model;
        }
        catch (\Exception $e) {
            return false;
        }
    }

    /**
     * @param $id int
     * @return mixed
     */
    public function updateSlideOrder($course, array $order)
    {
        try {
            return $this->slideRepository->updateOrder($course, $order);
        }
        catch (\Exception $e) {
            return false;
        }
    }

    /**
     * @param $id int
     * @return \Modules\Courses\Entities\Course
     */
    public function findById($id)
    {
        return $this->courseRepository->find($id);
    }

    /**
     * @param $id int
     * @return \Modules\Courses\Entities\Slide
     */
    public function findSlideById($slide)
    {
        return $this->slideRepository->find($slide);
    }

    public function loadSlideFileById($slide){
        $result = $this->slideRepository->findSlideFile($slide);
        if($result) {
            return $result->presenter();
        }
        return $result;
    }

    public function findByIdWithSlides($id)
    {
        return $this->courseRepository->findWithSlides($id);
    }

    public function editId($id)
    {
        return $this->findById($id);
    }

    /**
     * @param $id int
     * @return \Modules\Courses\Entities\Course[]
     */
    public function findAll()
    {
        return $this->courseRepository->all();
    }

    public function delete($id)
    {
        return $this->courseRepository->delete($id);
    }

    public function deleteSlideFile($id)
    {
        $file = $this->slideRepository->find($id);
        \File::delete($file->slide_photo);
        $result = !\File::exists($file->slide_photo);
        if($result){
            $file->fill(['slide_photo'=> null])->save();
        }

        return $result;
    }

    public function deleteSlide($id)
    {
        $file = $this->slideRepository->find($id);
        \File::delete($file->slide_photo);
        return $this->slideRepository->delete($id);
    }

    public function countActive()
    {
        return $this->courseRepository->countActive();
    }

    /**
     * Display ajax response.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function ajax()
    {
        return $this->datatables
            ->of($this->query())
            ->setTransformer(CoursesDatatableTransformer::class)
            ->make(true);
    }

    /**
     * Get the query object to be processed by datatables.
     *
     * @return \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder
     */
    public function query()
    {
        $courses = $this->courseRepository->select(['id', 'title', 'order', 'is_active']);

        return $this->applyScopes($courses);
    }

    /**
     * Optional method if you want to use html builder.
     *
     * @return \Yajra\Datatables\Html\Builder
     */
    public function html()
    {
        return $this->builder()
            ->columns([
                ['data' => 'order', 'name' => 'order', 'title' => trans('courses::courses.list.columns.order')],
                ['data' => 'title', 'name' => 'title', 'title' => trans('courses::courses.list.columns.course')],
                ['data' => 'is_active', 'name' => 'is_active', 'title' => trans('courses::courses.list.columns.is_active')],
            ])
            ->addAction([
                'title' => trans('courses::courses.list.columns.action'),
                'sClass' => 'dt-actions'
            ])
            ->ajax('')
            ->parameters([
                'language' => trans('core::core.datatables'),
                'dom' => 'Bfrtip',
                'buttons' => [
                    'create',
                    'pdf',
                    'csv',
                    'print'
                ],
            ]);
    }
}