2021-04-22 13:31:42 +00:00
< ? php
namespace App\Http\Controllers ;
use App\MultipleEvents ;
2021-04-27 09:23:25 +00:00
use App\MultipleEventsParent ;
2021-05-10 10:17:48 +00:00
use Carbon\Carbon ;
2021-05-06 13:25:36 +00:00
use Illuminate\Database\Eloquent\Model ;
2021-04-22 13:31:42 +00:00
use Illuminate\Http\Request ;
use Illuminate\Http\Response ;
2021-04-29 08:12:59 +00:00
use Barryvdh\DomPDF\Facade as PDF ;
2021-04-22 13:31:42 +00:00
//Not in use yet
use App\Event ;
use App\News ;
use App\Notification ;
use App\Resource ;
use App\UserEvent ;
class MultipleEventsController extends Controller
{
public function __construct ()
{
$this -> middleware ([ " auth " ]);
$this -> middleware ([ " lang " ]);
$this -> middleware ([ " check.auth:event.show " ]) -> only ( " show " , " index " );
$this -> middleware ([ " check.auth:event.create " ]) -> only ( " create " , " store " );
$this -> middleware ([ " check.auth:event.edit " ]) -> only ( " edit " , " update " );
$this -> middleware ([ " check.auth:event.delete " ]) -> only ( " delete " );
}
/**
* Display a listing of the resource .
*
* @ return \Illuminate\Http\Response
*/
2021-05-07 07:01:21 +00:00
public function index ()
2021-04-22 13:31:42 +00:00
{
2021-05-11 10:47:44 +00:00
$multiEvents = MultipleEventsParent :: join ( " multiple_events " , " multiple_events.multiple_events_parent_id " , '=' , 'multiple_events_parent.id' ) -> groupBy ( 'multiple_events.multiple_events_parent_id' , 'multiple_events_parent.id' , 'multiple_events_parent.week' , 'multiple_events_parent.resource_id' , 'multiple_events_parent.created_at' , 'multiple_events_parent.updated_at' ) -> selectRaw ( 'multiple_events_parent.*, max(date) as date' ) -> get ();
2021-05-10 10:17:48 +00:00
2021-05-17 08:15:15 +00:00
/*
$multiEvents = MultipleEventsParent :: join ( " multiple_events " , " multiple_events.multiple_events_parent_id " , '=' , 'multiple_events_parent.id' )
-> groupBy ( 'multiple_events_parent_id' ) -> orderBy ( 'multiple_events.date' , 'desc' )
-> selectRaw ( 'multiple_events_parent.*, max(date) as date' )
-> get ();
*/
2021-04-27 13:23:01 +00:00
return Response :: detect ( " multiple-events.index " , [ " multiEvents " => $multiEvents ]);
2021-04-22 13:31:42 +00:00
}
2021-04-27 13:23:01 +00:00
2021-04-22 13:31:42 +00:00
/**
* Show the form for creating a new resource .
*
* @ return \Illuminate\Http\Response
*/
public function create ()
{
//returns create multiple events blade file from the view folder
return Response :: detect ( " multiple-events.create " );
}
/**
* Store a newly created resource in storage .
*
* @ param \Illuminate\Http\Request $request
* @ return \Illuminate\Http\Response
*/
public function store ( Request $request )
{
$requestBody = $request -> validate ([
2021-05-06 13:25:36 +00:00
" week " => " required " ,
2021-04-27 09:23:25 +00:00
" name " => " array " ,
" description " => " array " ,
2021-04-22 13:31:42 +00:00
" accountable " => " array " ,
" date " => " array " ,
]);
2021-04-27 09:23:25 +00:00
$multipleParent = new MultipleEventsParent ();
2021-04-22 13:31:42 +00:00
2021-04-27 09:23:25 +00:00
$multipleParent -> week = $request -> week ;
if ( $request -> file ( " resource " )) {
$multipleParent -> resource_id = ResourceController :: store ( $request ) -> id ;
}
$multipleParent -> save ();
for ( $i = 0 ; $i < count ( $requestBody [ " name " ]); $i ++ ) {
2021-04-22 13:31:42 +00:00
$multi_event = new MultipleEvents ();
$multi_event -> date = $requestBody [ 'date' ][ $i ];
2021-04-27 09:23:25 +00:00
$multi_event -> description = $requestBody [ 'description' ][ $i ];
2021-04-22 13:31:42 +00:00
$multi_event -> accountable = $requestBody [ 'accountable' ][ $i ];
2021-04-27 09:23:25 +00:00
$multi_event -> name = $requestBody [ 'name' ][ $i ];
$multi_event -> multiple_events_parent_id = $multipleParent -> id ;
2021-04-22 13:31:42 +00:00
$multi_event -> save ();
}
//creates a new Event model with the given parameter
2021-05-17 08:15:15 +00:00
$multiEventsGetEndDate = MultipleEventsParent :: join ( " multiple_events " , " multiple_events.multiple_events_parent_id " , '=' , 'multiple_events_parent.id' )
-> groupBy ( 'multiple_events_parent_id' )
-> orderBy ( 'multiple_events.date' , 'desc' )
-> selectRaw ( 'multiple_events_parent.*, max(date) as date' )
-> get ();
2021-04-22 13:31:42 +00:00
2021-04-27 09:23:25 +00:00
$multiEvents = MultipleEventsParent :: query () -> get ();
2021-04-22 13:31:42 +00:00
if ( $request -> newsoption == true ){
$news = new News ();
2021-05-06 13:25:36 +00:00
$news -> name = " Ny ugentlig aktivitet " ;
2021-05-04 09:24:56 +00:00
$news -> subname = $request -> week ;
2021-04-27 09:23:25 +00:00
$news -> arrangement_id = $multipleParent -> id ;
$news -> type_id = '5' ;
2021-05-06 13:25:36 +00:00
$news -> content = " Den ugentlige aktivitets plan for uge " . $request -> week . " er her! " ;
2021-05-04 09:24:56 +00:00
$news -> resource_id = $request -> resource_id ;
2021-05-17 08:15:15 +00:00
$news -> news_expiration_date = $multiEventsGetEndDate [ 0 ] -> date ;
2021-04-22 13:31:42 +00:00
NewsController :: storeAndGet ( $news );
}
2021-04-28 13:14:31 +00:00
return redirect () -> route ( 'events.index' , [ 'multiEvents' => $multiEvents ]);
2021-04-22 13:31:42 +00:00
}
/**
* Display the specified resource .
*
* @ param \App\MultipleEvents $multipleeventsController
* @ return \Illuminate\Http\Response
*/
2021-05-07 07:01:21 +00:00
public function show ( $id )
2021-04-22 13:31:42 +00:00
{
2021-05-10 10:17:48 +00:00
$multiEvents = MultipleEvents :: where ( 'multiple_events.multiple_events_parent_id' , '=' , $id ) -> orderBy ( 'date' ) -> get ();
2021-05-07 07:01:21 +00:00
$multiEventParent = MultipleEventsParent :: find ( $id );
return Response :: detect ( " multiple-events.show " , [ " week " => $multiEventParent -> week , " multiEvents " => $multiEvents ]);
2021-04-22 13:31:42 +00:00
}
2021-05-11 10:47:44 +00:00
/**
* Display signups for event .
*
* @ param int $id
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
*/
public function accountsignups ( Request $request )
{
// Find every event you have clicked on. And find all users to that event, and the event name itself.
$events = UserEvent :: join ( 'users' , 'users.id' , '=' , 'user_events.user_id' ) -> where ( 'multiple_event_id' , $request -> multiEvent ) -> select ( 'user_events.*' , 'users.name_first' , 'users.name_last' , 'users.phone' ) -> get ();
if ( count ( $events ) == 0 )
$events = Event :: where ( 'id' , $request -> event ) -> get ();
return Response :: detect ( " multiple-events.signups " , [ " multiEvent " => $events ]);
}
2021-04-22 13:31:42 +00:00
/**
2021-04-29 08:12:59 +00:00
* Show the form for editing the specified resource .-
2021-04-22 13:31:42 +00:00
*
2021-04-29 08:12:59 +00:00
* @ param int $id
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
2021-04-22 13:31:42 +00:00
*/
2021-04-29 08:12:59 +00:00
public function edit ( $id )
2021-04-22 13:31:42 +00:00
{
2021-05-04 10:32:24 +00:00
$multiEvents = MultipleEvents :: where ( 'multiple_events_parent_id' , '=' , $id ) -> get ();
2021-05-06 13:25:36 +00:00
$parentEvent = MultipleEventsParent :: find ( $id );
return Response :: detect ( " multiple-events.edit " , [ " multiEvents " => $multiEvents , " parentEvent " => $parentEvent ]);
2021-04-22 13:31:42 +00:00
}
/**
* Update the specified resource in storage .
*
* @ param \Illuminate\Http\Request $request
2021-05-04 10:32:24 +00:00
* @ param int $id
2021-04-22 13:31:42 +00:00
* @ return \Illuminate\Http\Response
*/
2021-05-04 10:32:24 +00:00
public function update ( Request $request , $id )
2021-04-22 13:31:42 +00:00
{
2021-05-06 13:25:36 +00:00
$requestBody = $request -> validate ([
" week " => " required " ,
" name " => " array " ,
" description " => " array " ,
" accountable " => " array " ,
" date " => " array " ,
]);
$parentEvent = MultipleEventsParent :: find ( $id );
if ( $request -> file ( " resource " )) {
$parentEvent -> update ([ " week " => $request -> week , " resource_id " => ResourceController :: store ( $request ) -> id ]) ;
} else
$parentEvent -> update ([ " week " => $request -> week ]);
2021-05-07 06:29:56 +00:00
if ( ! empty ( $requestBody [ " name " ])) {
foreach ( $requestBody [ " name " ] as $key => $singleEvent ) {
if ( $key == " new " ) {
//dd(count($s));
for ( $i = 0 ; $i < count ( $singleEvent ); $i ++ ) {
$multi_event = new MultipleEvents ();
$multi_event -> name = $requestBody [ " name " ][ " new " ][ $i ];
$multi_event -> description = $requestBody [ " description " ][ " new " ][ $i ];
$multi_event -> accountable = $requestBody [ " accountable " ][ " new " ][ $i ];
$multi_event -> date = $requestBody [ " date " ][ " new " ][ $i ];
$multi_event -> multiple_events_parent_id = $id ;
$multi_event -> save ();
}
} else {
$event = MultipleEvents :: find ( $key );
$event -> update ([ " name " => $requestBody [ " name " ][ $key ][ 0 ], " description " => $requestBody [ " description " ][ $key ][ 0 ], " accountable " => $requestBody [ " accountable " ][ $key ][ 0 ], " date " => date ( " Y-m-d H:i:s " , strtotime ( $requestBody [ " date " ][ $key ][ 0 ]))]);
2021-05-06 13:25:36 +00:00
}
}
2021-05-17 08:15:15 +00:00
$multiEventsGetEndDate = MultipleEventsParent :: join ( " multiple_events " , " multiple_events.multiple_events_parent_id " , '=' , 'multiple_events_parent.id' )
-> groupBy ( 'multiple_events_parent_id' )
-> orderBy ( 'multiple_events.date' , 'desc' )
-> selectRaw ( 'multiple_events_parent.*, max(date) as date' )
-> get ();
2021-05-07 06:29:56 +00:00
if ( $request -> newsoption == true ) {
$news = new News ();
$news -> name = " Opdateret ugentlig aktivitet " ;
$news -> subname = $request -> week ;
$news -> arrangement_id = $parentEvent -> id ;
$news -> type_id = '5' ;
$news -> content = " Den ugentlige aktivitets plan for uge " . $request -> week . " er opdateret! " ;
$news -> resource_id = $request -> resource_id ;
2021-05-17 08:15:15 +00:00
$news -> news_expiration_date = $multiEventsGetEndDate [ 0 ] -> date ;
2021-05-06 13:25:36 +00:00
2021-05-07 06:29:56 +00:00
NewsController :: storeAndGet ( $news );
}
2021-05-06 13:25:36 +00:00
}
$events = Event :: query () -> orderBY ( 'date' , 'asc' ) -> get ();
return Response :: detect ( " events.index " , [ " events " => $events ]);
2021-04-22 13:31:42 +00:00
}
/**
* Remove the specified resource from storage .
*
* @ param \App\MultipleEvents $multipleeventsController
* @ return \Illuminate\Http\Response
*/
2021-05-04 10:32:24 +00:00
public function destroy ( Request $request , $id )
2021-04-22 13:31:42 +00:00
{
2021-05-06 13:25:36 +00:00
if ( $request -> signup != null ) { // If input signup is not empty, which has been set when you look at the individuel signup, then delete the user who have signed up for the specific week event
2021-05-04 10:32:24 +00:00
$UserEvent = UserEvent :: find ( $id );
2021-04-27 10:27:46 +00:00
$UserEvent -> delete ();
2021-05-04 10:32:24 +00:00
return 1 ;
2021-05-06 13:25:36 +00:00
} elseif ( $request -> onlyMultiEvent != null ) { // Delete a single event from multiple events, and all its signups
$userEvents = UserEvent :: where ( 'multiple_event_id' , '=' , $id ) -> get ();
$multiEvent = MultipleEvents :: find ( $id );
2021-04-27 10:27:46 +00:00
2021-05-06 13:25:36 +00:00
foreach ( $userEvents as $ue ) {
$ue -> delete ();
2021-04-27 10:27:46 +00:00
}
2021-05-06 13:25:36 +00:00
$multiEvent -> delete ();
return 1 ;
} else { // Delete all multiple events and signups, from the parent/weekly event
$multiparent = MultipleEventsParent :: find ( $id );
$multievent = MultipleEvents :: where ( 'multiple_events_parent_id' , '=' , $id ) -> get ();
2021-04-27 10:27:46 +00:00
foreach ( $multievent as $me ) {
2021-05-06 13:25:36 +00:00
foreach ( UserEvent :: where ( 'multiple_event_id' , '=' , $me -> id ) -> get () as $ue ) {
$ue -> delete ();
}
2021-04-27 10:27:46 +00:00
$me -> delete ();
}
2021-05-04 10:32:24 +00:00
$news = News :: query () -> join ( 'news_types' , 'news_types.id' , '=' , 'news.type_id' ) -> where ( " type " , " = " , " MultipleEvent " ) -> where ( " arrangement_id " , " = " , $id );
2021-04-27 10:27:46 +00:00
$news -> delete ();
$multiparent -> delete ();
2021-05-04 10:32:24 +00:00
return 1 ;
2021-04-27 10:27:46 +00:00
}
}
public function previewPages ( Request $request ){
/* if ( ! Resource :: find ( $request -> preview )){
$multipleEventsParent = MultipleEventsParent :: find ( $request -> preview );
$multipleEvents = MultipleEvents :: where ( 'multiple_events_parent_id' , '=' , $multipleEventsParent -> id ) -> get ();
} else { */
//$multipleEventsParent = MultipleEventsParent::find($request->preview);
2021-05-04 10:32:24 +00:00
$multipleEventsParent = MultipleEventsParent :: leftJoin ( 'resources' , 'resources.id' , '=' , 'multiple_events_parent.resource_id' ) -> where ( 'multiple_events_parent.id' , '=' , $request -> preview ) -> select ( 'multiple_events_parent.*' , 'resources.filename' ) -> first ();
2021-04-27 10:27:46 +00:00
$multipleEvents = MultipleEvents :: where ( 'multiple_events_parent_id' , '=' , $multipleEventsParent -> id ) -> get ();
//}
return [ $multipleEventsParent , $multipleEvents ];
2021-04-22 13:31:42 +00:00
}
2021-04-29 06:23:09 +00:00
public function genPDF ( $Id ){
2021-05-05 13:27:51 +00:00
$multiEvent = MultipleEventsParent :: query () -> join ( " multiple_events " , " multiple_events.multiple_events_parent_id " , " = " , " multiple_events_parent.id " ) -> where ( " multiple_events_parent.id " , " = " , $Id ) -> orderBy ( 'multiple_events.date' , 'asc' ) -> get ();
2021-04-29 07:16:08 +00:00
$pdf = PDF :: loadView ( 'multipdf.multipleevent' , [ " multiEvent " => $multiEvent ]);
2021-04-29 06:23:09 +00:00
2021-05-05 13:27:51 +00:00
$pdf -> setPaper ( 'A4' , 'landscape' );
2021-04-29 06:23:09 +00:00
2021-05-05 13:27:51 +00:00
return $pdf -> stream ( " ugentligt_aktivitet_uge_ " . $multiEvent [ 0 ] -> week . " .pdf " );
2021-04-29 06:23:09 +00:00
}
2021-04-29 08:43:35 +00:00
public function signups ( Request $request )
{
// Find every event you have clicked on. And find all users to that event, and the event name itself.
2021-05-04 10:32:24 +00:00
//$multiEvents = UserEvent::join('users', 'users.id', '=', 'user_events.user_id')->join('multiple_events', 'multiple_events.id', '=', 'user_events.multiple_event_id')->where('multiple_event_id', '=', $request->multipleEvent)->get();
2021-04-29 08:43:35 +00:00
2021-05-04 10:32:24 +00:00
$multiEvents = MultipleEvents :: where ( 'multiple_events_parent_id' , '=' , $request -> multipleEvent ) -> get ();
//if (count($multiEvents) == 0)
// $multiEvents = MultipleEvents::where('id', '=', $request->multipleEvent)->get();
2021-04-29 08:43:35 +00:00
return Response :: detect ( " multiple-events.signups " , [ " multiEvent " => $multiEvents ]);
}
2021-04-22 13:31:42 +00:00
}
2021-04-29 06:23:09 +00:00