2020-06-09 07:05:07 +00:00
< ? php
namespace App\Http\Controllers ;
2020-06-18 06:01:42 +00:00
use App\Event ;
2020-08-07 07:47:23 +00:00
use App\News ;
2020-07-28 12:54:19 +00:00
use App\UserEvent ;
2020-06-10 06:33:06 +00:00
use App\User ;
2020-06-09 07:05:07 +00:00
use Illuminate\Http\Request ;
2020-06-24 06:23:15 +00:00
use Illuminate\Http\Response ;
2020-07-27 14:03:49 +00:00
use Illuminate\Support\Facades\DB ;
2020-06-24 06:23:15 +00:00
2020-06-09 07:05:07 +00:00
class EventController extends Controller
{
2020-06-30 07:21:21 +00:00
public function __construct ()
{
$this -> middleware ([ " auth " ]);
2020-08-06 13:31:38 +00:00
$this -> middleware ([ " lang " ]);
2020-06-30 07:21:21 +00:00
$this -> middleware ([ " check.auth:event.list " ]) -> only ( " index " );
$this -> middleware ([ " check.auth:event.show " ]) -> only ( " show " );
$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 " );
}
2020-06-09 07:05:07 +00:00
/**
2020-06-10 06:33:06 +00:00
* Display a listing of the resource ..
2020-06-09 07:05:07 +00:00
*
2020-06-18 06:01:42 +00:00
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
2020-06-09 07:05:07 +00:00
*/
2020-06-10 06:33:06 +00:00
public function index ( Request $request )
2020-06-09 07:05:07 +00:00
{
2020-07-01 09:29:45 +00:00
2020-08-03 06:46:38 +00:00
$events = Event :: query () -> orderBY ( 'date' , 'asc' ) -> paginate ( $request -> input ( " limit " , 20 ));
2020-06-10 06:33:06 +00:00
2020-07-01 09:29:45 +00:00
//returns the function with events index page and a parameter of events.
//also Response::detect checks screen size to determine if user is on a computer or mobile.
2020-06-26 06:56:18 +00:00
return Response :: detect ( " events.index " , [ " events " => $events ]);
2020-06-09 07:05:07 +00:00
}
/**
* Show the form for creating a new resource .
*
2020-06-18 06:01:42 +00:00
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
2020-06-09 07:05:07 +00:00
*/
public function create ()
{
2020-07-01 09:29:45 +00:00
//returns "create event" blade
2020-06-26 06:56:18 +00:00
return Response :: detect ( " events.create " );
2020-06-09 07:05:07 +00:00
}
/**
* Store a newly created resource in storage .
*
* @ param \Illuminate\Http\Request $request
2020-06-18 06:01:42 +00:00
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
2020-06-09 07:05:07 +00:00
*/
public function store ( Request $request )
{
2020-06-18 06:01:42 +00:00
$requestBody = $request -> validate ([
2020-08-04 07:34:56 +00:00
" name " => " required|max:255 " ,
2020-08-06 12:47:22 +00:00
" accountable " => " required|max:255 " ,
2020-08-07 10:59:21 +00:00
" description " => " required " ,
2020-06-29 10:53:08 +00:00
" date " => " required "
2020-06-18 06:01:42 +00:00
]);
2020-07-01 09:29:45 +00:00
//creates a new Event model with the given parameter
2020-06-18 06:01:42 +00:00
$event = new Event ( $requestBody );
2020-08-04 07:34:56 +00:00
$allEvents = Event :: query () -> where ( 'name' , '=' , $request -> name ) -> get ();
2020-07-01 07:43:11 +00:00
2020-08-07 08:51:10 +00:00
if ( count ( $allEvents ) > 0 ) {
2020-08-04 07:34:56 +00:00
return redirect () -> route ( " events.index " , [ 'events' => $event ]) -> with ( 'EventNameExists' , '<p><b>Der findes allerede et event med det navn!</b></p>' );
2020-08-07 08:51:10 +00:00
} else {
2020-08-04 07:34:56 +00:00
$event -> save ();
2020-08-07 07:47:23 +00:00
$events = Event :: query () -> paginate ( $request -> input ( " limit " , 20 ));
if ( $request -> newsoption == true ){
$news = new News ();
$news -> name = " Ny aktivitet " ;
2020-08-10 07:37:19 +00:00
$news -> subname = $event -> name ;
2020-08-11 13:08:09 +00:00
$news -> content = " <p> " . $this -> closetags ( substr ( $event -> description , 0 , 300 )) . " </p> " .
'<div class="row align-items-center">' . //route("userevents.createajax", ["event_id" => $event->id ])
'<a style="width: 33%; margin: 0; padding: 0; font-weight: 700;" class="sde-blue" href="javascript:void(0);" onclick="ajaxCall(' . $event -> id . ')">Tilmeld</a>' .
2020-08-10 10:07:41 +00:00
'<a style="width: 33%; margin: 0; padding: 0; text-align: center; font-weight: 700;" class="sde-blue" href="' . route ( " events.show " , [ " event " => $event -> id ]) . '">Læs mere</a>' .
2020-08-11 13:08:09 +00:00
'<a style="width: 33%; margin: 0; padding: 0; text-align: end; font-weight: 700;" class="sde-blue" href="' . route ( " events.accountsignups " , [ " event " => $event -> id ]) . '">Se deltagere</a>' .
2020-08-07 07:47:23 +00:00
'</div>' ;
$news -> save ();
}
return redirect () -> route ( 'events.index' , [ 'events' => $events ]);
2020-07-01 07:43:11 +00:00
}
2020-06-18 06:01:42 +00:00
2020-06-09 07:05:07 +00:00
}
/**
* Display the specified resource .
*
2020-06-18 06:01:42 +00:00
* @ param Event $id
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
2020-06-09 07:05:07 +00:00
*/
2020-08-10 08:16:05 +00:00
public function show ( $id )
2020-06-09 07:05:07 +00:00
{
2020-08-10 08:16:05 +00:00
$event = Event :: query () -> where ( " id " , " = " , $id ) -> first ();
return Response :: detect ( " events.show " , [ " event " => $event ]);
2020-06-09 07:05:07 +00:00
}
2020-07-28 12:54:19 +00:00
/**
* Display signups for event .
*
* @ param int $id
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
*/
public function signups ( Request $request )
{
// Find every event you have clicked on. And find all users to that event, and the event name itself.
2020-08-07 12:11:13 +00:00
$events = UserEvent :: join ( 'users' , 'users.id' , '=' , 'user_events.user_id' ) -> join ( 'events' , 'events.id' , '=' , 'user_events.event_id' ) -> where ( 'event_id' , $request -> event ) -> get ();
2020-07-28 12:54:19 +00:00
if ( count ( $events ) == 0 )
$events = Event :: where ( 'id' , $request -> event ) -> get ();
return Response :: detect ( " events.signups " , [ " events " => $events ]);
}
2020-08-07 12:11:13 +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. - This is only being showed on App
$events = UserEvent :: join ( 'users' , 'users.id' , '=' , 'user_events.user_id' ) -> join ( 'events' , 'events.id' , '=' , 'user_events.event_id' ) -> where ( 'event_id' , $request -> event ) -> get ();
return Response :: detect ( " events.signups " , [ " events " => $events ]);
}
2020-06-09 07:05:07 +00:00
/**
2020-06-09 08:45:16 +00:00
* Show the form for editing the specified resource .-
2020-06-09 07:05:07 +00:00
*
* @ param int $id
2020-06-18 06:01:42 +00:00
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
2020-06-09 07:05:07 +00:00
*/
2020-06-30 06:52:11 +00:00
public function edit ( $id )
2020-06-09 07:05:07 +00:00
{
2020-06-30 06:52:11 +00:00
$event = Event :: find ( $id );
return Response :: detect ( " events.edit " , [ " event " => $event ]);
2020-06-09 07:05:07 +00:00
}
/**
* Update the specified resource in storage .
*
* @ param \Illuminate\Http\Request $request
* @ param int $id
2020-06-19 06:15:24 +00:00
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
2020-06-09 07:05:07 +00:00
*/
2020-06-30 06:52:11 +00:00
public function update ( Request $request , $id )
2020-06-09 07:05:07 +00:00
{
2020-06-30 06:52:11 +00:00
$data = $request -> all ();
2020-06-19 06:15:24 +00:00
2020-06-30 06:52:11 +00:00
$event = Event :: find ( $id );
2020-07-01 07:43:11 +00:00
2020-08-04 07:34:56 +00:00
$allEvents = Event :: query () -> where ( 'name' , '=' , $request -> name ) -> where ( 'id' , '!=' , $id ) -> get ();
if ( count ( $allEvents ) > 0 ){
return redirect () -> route ( " events.index " , [ 'events' => $event ]) -> with ( 'EventNameExists' , '<p><b>Der findes allerede et event med det navn!</b></p>' );
2020-07-01 07:43:11 +00:00
} else {
2020-08-04 07:34:56 +00:00
$event -> update ( $data );
$event -> save ();
2020-08-07 07:47:23 +00:00
$events = Event :: query () -> paginate ( $request -> input ( " limit " , 20 ));
if ( $request -> newsoption == true ){
$news = new News ();
$news -> name = " Aktivitet opdateret " ;
2020-08-10 07:37:19 +00:00
$news -> subname = $event -> name ;
2020-08-10 08:21:09 +00:00
$news -> content = " <p> " . $this -> closetags ( substr ( $event -> description , 0 , 300 )) . " </p> " .
2020-08-11 13:08:09 +00:00
'<div class="row align-items-center">' . //route("userevents.createajax", ["event_id" => $event->id ])
'<a style="width: 33%; margin: 0; padding: 0; font-weight: 700;" class="sde-blue" href="javascript:void(0);" onclick="ajaxCall(' . $event -> id . ')">Tilmeld</a>' .
2020-08-10 10:07:41 +00:00
'<a style="width: 33%; margin: 0; padding: 0; text-align: center; font-weight: 700;" class="sde-blue" href="' . route ( " events.show " , [ " event " => $event -> id ]) . '">Læs mere</a>' .
2020-08-10 08:28:40 +00:00
'<a style="width: 33%; margin: 0; padding: 0; text-align: end; font-weight: 700;" class="sde-blue" href="' . route ( " events.accountsignups " , [ " event " => $event -> id ]) . '">Se deltagere</a>' .
2020-08-07 07:47:23 +00:00
'</div>' ;
$news -> save ();
}
return redirect () -> route ( " events.index " , [ 'events' => $events ]);
2020-07-01 07:43:11 +00:00
}
2020-06-19 06:15:24 +00:00
2020-06-09 07:05:07 +00:00
}
/**
* Remove the specified resource from storage .
*
2020-06-18 06:01:42 +00:00
* @ param Event $id
* @ return \Illuminate\Contracts\Foundation\Application | \Illuminate\Contracts\View\Factory | \Illuminate\View\View
* @ throws \Exception
2020-06-09 07:05:07 +00:00
*/
2020-07-28 12:54:19 +00:00
public function destroy ( Request $request , $id )
2020-06-09 07:05:07 +00:00
{
2020-07-28 12:54:19 +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 event
$UserEvent = UserEvent :: where ( 'user_id' , $request -> signup ) -> where ( 'event_id' , $id );
$UserEvent -> delete ();
return redirect () -> route ( " events.signups " , [ " event " => $id ]);
} else { // Else if you are deleting an event. Then delete all the sign ups AND the event
$UserEvent = UserEvent :: where ( 'event_id' , $id );
$UserEvent -> delete ();
$event = Event :: find ( $id );
$event -> delete ();
return redirect () -> route ( " events.index " );
}
2020-06-09 07:05:07 +00:00
}
2020-07-27 14:03:49 +00:00
public function search ( Request $request ){
if ( $request -> ajax ()){
$output = " <tr> " .
" <th>Event Navn</th> " .
2020-08-10 09:45:58 +00:00
" <th>Event Ansvarlig</th> " .
2020-07-27 14:03:49 +00:00
" <th>Event Dato</th> " .
2020-07-29 07:49:54 +00:00
" <th style= \" width: 1em; \" ><img class= \" w-100 \" src= \" http://127.0.0.1:8000/images/icons/eye.svg \" alt= \" Update \" ></th> " .
2020-07-27 14:03:49 +00:00
" <th style= \" width: 1em; \" ><img class= \" w-100 \" src= \" http://127.0.0.1:8000/images/icons/pencil.svg \" alt= \" Update \" ></th> " .
" <th style= \" width: 1em; \" ><img class= \" w-100 \" src= \" http://127.0.0.1:8000/images/icons/trashcan.svg \" alt= \" Delete \" ></th> " .
" </tr> " ;
2020-08-03 08:46:48 +00:00
$events = DB :: table ( 'events' ) -> orderBY ( 'date' , 'asc' ) -> where ( 'name' , 'LIKE' , $request -> search . '%' )
2020-07-27 14:03:49 +00:00
-> orWhere ( 'date' , 'LIKE' , $request -> search . '%' )
2020-07-29 07:49:54 +00:00
-> get (); //Job is here dude :9
2020-07-27 14:03:49 +00:00
if ( count ( $events ) !== 0 ){
foreach ( $events as $key => $event ){
$output .= '<tr>' .
'<td>' . $event -> name . '</td>' .
2020-08-10 09:45:58 +00:00
'<td>' . $event -> accountable . '</td>' .
'<td>' . \Illuminate\Support\Facades\Date :: createFromTimeStamp ( strtotime ( $event -> date )) -> format ( 'd/m/Y \k\l\. H:i' ) . '</td>' .
2020-07-29 07:49:54 +00:00
'<td><a href="' . route ( " events.signups " , [ " event " => $event -> id ]) . '"><img class="w-100" src="' . asset ( '/images/icons/eye-dark.svg' ) . '" alt="Update"></a></td>' .
2020-07-27 14:03:49 +00:00
'<td><a href="' . route ( " events.edit " , [ " event " => $event -> id ]) . '"><img class="w-100" src="' . asset ( '/images/icons/pencil-dark.svg' ) . '" alt="Update"></a></td>' .
'<td><form method="post" action="' . route ( " events.destroy " , [ " event " => $event -> id ]) . '" class="w-100 nostyle">' .
csrf_field () .
method_field ( " delete " ) .
'<button class="w-100 nostyle" onclick="return confirm(\'Are you sure you want to delete?\');" type="submit"><img class="w-100 cursor-pointer" src="' . asset ( '/images/icons/trashcan-dark.svg' ) . '" alt="Delete"></button>' .
'</form>' .
'</td>' .
'</tr>' ;
}
2020-07-28 12:23:54 +00:00
} else {
$output .= '<tr>' .
'<td>Intet match</td>' .
'<td></td>' .
'<td></td>' .
'<td></td>' .
'<td></td>' .
2020-07-29 07:49:54 +00:00
'<td></td>' .
2020-07-28 12:23:54 +00:00
'</tr>' ;
2020-07-27 14:03:49 +00:00
}
return Response ( $output );
}
}
2020-08-10 08:21:09 +00:00
public function closetags ( $html ) {
preg_match_all ( '#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU' , $html , $result );
$openedtags = $result [ 1 ];
preg_match_all ( '#</([a-z]+)>#iU' , $html , $result );
$closedtags = $result [ 1 ];
$len_opened = count ( $openedtags );
if ( count ( $closedtags ) == $len_opened ) {
return $html ;
}
$openedtags = array_reverse ( $openedtags );
for ( $i = 0 ; $i < $len_opened ; $i ++ ) {
if ( ! in_array ( $openedtags [ $i ], $closedtags )) {
$html .= '</' . $openedtags [ $i ] . '>' ;
} else {
unset ( $closedtags [ array_search ( $openedtags [ $i ], $closedtags )]);
}
}
return $html ;
}
2020-06-09 07:05:07 +00:00
}
2020-07-27 14:03:49 +00:00