Repository URL to install this package:
|
Version:
0.2.1 ▾
|
<?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'
],
]);
}
}