Commit although could not run on localhost

This commit is contained in:
Obenny
2020-10-08 14:49:49 +08:00
parent fcfe19f0fa
commit 9639da46ea
16 changed files with 774 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;//call to carbon to return the current time with a Carbon instance
class Announcement extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'start_date', 'end_date', 'content',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $table = 'announcements';
// //call to get active announcements
// public function scopeActive($query)
// {
// return $query->where('start_date', '<=', Carbon::now())
// ->where('end_date', '>=', Carbon::now());
// }
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Announcement;//call to announcement controller folder
use App\Http\Controllers\Controller;//call to controller class
use Illuminate\Http\Request;//call to request
class CreateAnnouncementController extends Controller
{
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Announcement\Response
*/
public function create()
{
//returns the page for this route
return view('announcement.create_announcement');
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers\Announcement;//call to announcement controller folder
use App\Http\Controllers\Controller;//call to controller class
use App\Models\Announcement;
use Illuminate\Http\Request;
class DeleteAnnouncementController extends Controller
{
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$announcement = Announcement::findOrFail($id);
$deleted = $announcement->delete();
if($deleted)
{
session()->put('success', 'Announcement Successfully Deleted!');
return redirect()->back();
}
//the else part
session()->put('error', 'There was an error deleting this announcement!');
return redirect()->back();
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Announcement;//call to announcement controller folder
use App\Http\Controllers\Controller;//call to controller class
use App\Models\Announcement;
use Illuminate\Http\Request;
class EditAnnouncementController extends Controller
{
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$announcements = Announcement::findOrFail($id);
//returns the page for this route
return view('announcement.edit_announcement', compact('announcements'));
}
}
@@ -0,0 +1,50 @@
<?php
namespace App\Http\Controllers\Announcement;//call to announcement controller folder
use App\Http\Controllers\Controller;//call to controller class
use App\Http\Helpers\ConvertDateToTimeStamp;//call to convert datastampclass
use App\Models\Announcement;//call to model class
use Illuminate\Http\Request;//call to laravel request
use Carbon\Carbon;
class PostAnnouncementController extends Controller
{
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//validate field name in Form/view
$this->validate($request, [
'startdate' => 'required',
'enddate' => 'required',
'content' => 'required'
]);
// create class objects
$announcement = new Announcement();
$convertdate = new ConvertDateToTimeStamp();
//On left field name in DB and on right field name in Form/view
// $announcement->posted_by = $request->input('name');
$announcement->start_date = $convertdate::convertDateToTimeStamp($request->input('startdate'));
$announcement->end_date = $convertdate::convertDateToTimeStamp($request->input('enddate'));
$announcement->content = $request->input('content');
$saved = $announcement->save();
if($saved)
{
session()->put('success', 'Announcement Successfully Created!');
return redirect()->back();
}
//the else part
session()->put('error', 'There was an error creating this announcement!');
return redirect()->back();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers\Announcement;//call to announcement controller folder
use App\Http\Controllers\Controller;//call to controller class
use App\Models\Announcement;
use Illuminate\Http\Request;
class UpdateAnnouncementController extends Controller
{
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$validatedData = $request->validate([
'content' => 'required',
]);
$updated = Announcement::whereId($id)->update($validatedData);
if($updated)
{
session()->put('success', 'Announcement Successfully Updated!');
return redirect()->back();
}
//the else part
session()->put('error', 'There was an error updating this announcement!');
return redirect()->back();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Announcement;//call to announcement controller folder
use App\Http\Controllers\Controller;//call to controller class
use App\Models\Announcement;
use Illuminate\Http\Request;
class ViewAnnouncementController extends Controller
{
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$announcements = Announcement::findOrFail($id);
//returns the page for this route
return view('announcement.view_announcement', compact('announcements'));
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Http\Controllers\Announcement;//call to announcement controller folder
use App\Http\Controllers\Controller;//call to controller class
use Carbon\Carbon;//call to carbon to return the current time with a Carbon instance
use App\Models\Announcement;
use Illuminate\Http\Request;
class ViewAnnouncementsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//returns the page for this route
$announcements = Announcement::whereDate('start_date', '<=', Carbon::now())
->whereDate('end_date', '>=', Carbon::now())
->get();
return view('announcement.view_announcements', compact('announcements'));
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Http\Helpers;
use Carbon\Carbon;
class ConvertDateToTimeStamp
{
public static function convertDateToTimeStamp($date)
{
return Carbon::createFromFormat('d-m-Y', $date)->format('Y-m-d H:i:s');
}
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateAnnouncementsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('announcements', function (Blueprint $table) {
$table->increments('id');
// $table->string('posted_by');
$table->timestamp('start_date')->nullable();
$table->timestamp('end_date')->nullable();
$table->longText('content');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('announcements');
}
}
@@ -0,0 +1,78 @@
@extends('layouts.announcement.app')
@section('content')
<div class="col-md-8">
<div class="card">
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">{{ __('Create Announcement') }}</div>
<div class="panel-body">
<div class="row">
<div class="card-body">
<div class='col-md-12'>
@if (session()->has('success'))
<p class="text-success">{{ session('success') , session()->pull('success')}}</p>
@else
<p class="text-danger">{{ session('error') , session()->pull('error')}}</p>
@endif
</div>
<form method="POST" action="{{ route('announcement.post') }}">
@csrf
<div class='col-md-6'>
<div class="form-group">
<label class="control-label">{{ __('Start Date') }}</label>
<div class='input-group date' id='datetimepicker1'>
<input name="startdate" type='text' class="form-control" required/>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class='col-md-6'>
<div class="form-group">
<label class="control-label">{{ __('End Date') }}</label>
<div class='input-group date' id='datetimepicker2'>
<input name="enddate" type='text' class="form-control" required/>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class='col-md-12'>
<div class="form-group">
<label class="control-label">{{ __('Content') }}</label>
<textarea id="content" name="content" class="form-control" minlength="20" maxlength="200" required></textarea>
</div>
</div>
<div class='col-md-12'>
<button type="submit" class="btn btn-primary">
{{ __('Create') }}
</button>
<br><br>
</div>
<center>
<div class='col-md-12'>
<a href="{{ route('announcements.view') }}">
{{ __('View Announcements') }}
</a>
</div>
</center>
</form>
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,84 @@
@extends('layouts.announcement.app')
@section('content')
<div class="col-md-8">
<div class="card">
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">{{ __('Edit Announcement') }}</div>
<div class="panel-body">
<div class="row">
<div class='col-md-12'>
@if (session()->has('success'))
<p class="text-success">{{ session('success') , session()->pull('success')}}</p>
@else
<p class="text-danger">{{ session('error') , session()->pull('error')}}</p>
@endif
</div>
@if(count(array($announcements)) > 0)
{{-- @foreach($announcements as $announcement)--}}
<form method="POST" action="{{route('announcement.update', $announcements->id)}}">
@csrf
@method('PUT')
<!--<div class='col-md-6'>
<div class="form-group">
<label class="control-label">{{ __('Start Date') }}</label>
<div class='input-group date' id='datetimepicker1'>
<input name="startdate" type='text' class="form-control" value="{{ $announcements->start_date }}" required/>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>-->
<!--<div class='col-md-6'>
<div class="form-group">
<label class="control-label">{{ __('End Date') }}</label>
<div class='input-group date' id='datetimepicker2'>
<input name="enddate" type='text' class="form-control" value="{{ $announcements->end_date }}" required/>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>-->
<div class='col-md-12'>
<div class="form-group">
<label class="control-label">{{ __('Content') }}</label>
<textarea id="content" name="content" class="form-control" minlength="20" maxlength="200" required>{{$announcements->content}}</textarea>
</div>
</div>
<div class='col-md-12'>
<button type="submit" class="btn btn-primary">
{{ __('Update') }}
</button>
</div>
<center>
<div class='col-md-12'>
<br>
<a href="{{ route('announcements.view') }}">
{{ __('View Announcements') }}
</a>
</div>
</center>
</form>
{{-- @endforeach--}}
@else
<p class="mt-5 mb-5">No Results</p>
@endif
<div>
<div>
<div>
<div>
<div>
<div>
<div>
@endsection
@@ -0,0 +1,66 @@
@extends('layouts.announcement.app')
@section('content')
<div class="col-md-8">
<div class="card">
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">{{ __('View Announcement') }}</div>
<div class="panel-body">
<div class="row">
@if(count(array($announcements)) > 0)
<form method="" action="{{ route('announcement.create') }}">
@csrf
<div class='col-md-4'>
<div class="form-group">
<label class="control-label">{{ __('Start Date') }}</label>
<div class='input-group date' id='startdate'>
<input name="startdate" type='text' disabled="disabled" value="{{$announcements->start_date}}" class="form-control" required/>
</div>
</div>
</div>
<div class='col-md-4'>
<div class="form-group">
<label class="control-label">{{ __('End Date') }}</label>
<div class='input-group date' id='enddate'>
<input name="enddate" type='text' disabled="disabled" value="{{$announcements->end_date}}" class="form-control" required/>
</div>
</div>
</div>
<div class='col-md-4'>
<div class="form-group">
<label class="control-label">{{ __('Date Posted') }}</label>
<div class='input-group date' id='dateposted'>
<input name="enddate" type='text' disabled="disabled" value="{{$announcements->created_at}}" class="form-control" required/>
</div>
</div>
</div>
<div class='col-md-12'>
<div class="form-group">
<label class="control-label">{{ __('Content') }}</label>
<textarea id="content" name="content" disabled="disabled" class="form-control" minlength="20" maxlength="200" required>{{$announcements->content}}
</textarea>
</div>
</div>
<hr>
<center>
<div class='col-md-12'>
<a href="{{ route('announcements.view') }}">
{{ __('View Announcements') }}
</a>
</div>
</center>
</form>
@else
<p class="mt-5 mb-5">No Results</p>
@endif
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,161 @@
{{--@extends('layouts.app')--}}
{{--@section('content')--}}
{{-- <div class="container-fluid">--}}
{{-- <div class="row justify-content-center">--}}
{{-- <div class="col-md-8">--}}
{{-- <div class="card">--}}
{{-- <div class="card-header mb-4">{{ __('View Announcements') }}</div>--}}
{{-- <div>--}}
{{-- @if(count($announcements) > 0)--}}
{{-- <table width="600px">--}}
{{-- <thead>--}}
{{-- <tr>--}}
{{-- <!--<th width="100px">ID</th>-->--}}
{{-- <th width="100px">Posted By</th>--}}
{{-- <th width="100px">Content</th>--}}
{{-- <th width="100px">Created At</th>--}}
{{-- <th width="100px">Actions</th>--}}
{{-- </tr>--}}
{{-- </thead>--}}
{{-- <tbody>--}}
{{-- @foreach($announcements as $announcement)--}}
{{-- <tr>--}}
{{-- <!--<td>{{$announcement->id}}</td>-->--}}
{{-- <td class="py-4">{{$announcement->posted_by}}</td>--}}
{{-- <td class="py-4">{{$announcement->content}}</td>--}}
{{-- <td class="py-4">{{$announcement->created_at}}</td>--}}
{{-- <td class="py-4">--}}
{{-- <span>--}}
{{-- <a class="btn btn-outline-primary btn-circle" href="{{route('announcement.view', ['id' => $announcement->id])}}">--}}
{{-- View--}}
{{-- </a>--}}
{{-- </span>--}}
{{-- <span>--}}
{{-- <a class="btn btn-outline-dark btn-circle" href="{{route('announcement.edit', ['id' => $announcement->id])}}">--}}
{{-- Edit--}}
{{-- </a>--}}
{{-- </span>--}}
{{-- <span>--}}
{{-- <a class="btn btn-outline-danger btn-circle" href="{{route('deleteannouncement', ['id' => $announcement->id])}}">--}}
{{-- Delete--}}
{{-- </a>--}}
{{-- <form action="{{route('announcement.delete', ['id' => $announcement->id])}}" method="post">--}}
{{-- @csrf--}}
{{-- {{@method_field('delete')}}--}}
{{-- <button class="btn btn-danger btn-sm" title="Delete">Delete</button>--}}
{{-- </form>--}}
{{-- </span>--}}
{{-- </td>--}}
{{-- </tr>--}}
{{-- @endforeach--}}
{{-- </tbody>--}}
{{-- </table>--}}
{{-- @else--}}
{{-- <p class="mt-5 mb-5">No Results</p>--}}
{{-- @endif--}}
{{-- </div>--}}
{{-- </div>--}}
{{-- </div>--}}
{{-- </div>--}}
{{-- </div>--}}
{{--@endsection--}}
@extends('layouts.announcement.app')
@section('content')
<div class="col-md-8">
<div class="card">
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">{{ __('View Announcements') }}</div>
<div class="panel-body">
<div class="row">
<div class='col-md-12'>
@if (session()->has('success'))
<p class="text-success">{{ session('success') , session()->pull('success')}}</p>
@else
<p class="text-danger">{{ session('error') , session()->pull('error')}}</p>
@endif
</div>
@if(count($announcements) > 0)
<center>
<table width="600px" cellspacing="0">
<thead>
<tr>
<!--<th width="100px">ID</th>-->
{{-- <th width="100px">Posted By</th>--}}
<th width="100px">Content</th>
{{-- <th width="100px">Created At</th>--}}
<th width="100px">Active Date</th>
<th width="100px">Actions</th>
</tr>
<tr class="separator" />
</thead>
<tbody>
@foreach($announcements as $announcement)
<tr>
<!--<td>{{$announcement->id}}</td>-->
{{-- <td class="py-4">{{$announcement->posted_by}}</td>--}}
<td class="py-4">{{$announcement->content}}</td>
{{-- <td class="py-4">{{$announcement->created_at}}</td>--}}
<td class="py-4"><span>{{$announcement->start_date}}</span> <span>{{$announcement->end_date}}</span></td>
<td class="py-4">
<!--<span>
<a class="btn btn-success btn-sm" href="{{route('announcement.view', ['id' => $announcement->id])}}">
View
</a>
</span>-->
<span>
<a class="btn btn-warning btn-sm" href="{{route('announcement.edit', ['id' => $announcement->id])}}">
Edit
</a>
</span>
<span>
<form action="{{route('announcement.delete', ['id' => $announcement->id])}}" method="post">
@csrf
{{@method_field('delete')}}
<button class="btn btn-danger btn-sm" title="Delete">Delete</button>
</form>
</span>
</td>
</tr>
<tr class="separator" />
@endforeach
</tbody>
</table>
{{-- {{ $announcements->links() }}--}}
</center>
@else
<center>
<p class="mt-5 mb-5">No Results</p>
</center>
@endif
</div>
<hr>
<center>
<div class='col-md-12'>
<a href="{{ route('announcement.create') }}">
{{ __('Create Announcement') }}
</a>
</div>
</center>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,61 @@
{{--source: https://www.solodev.com/blog/web-design/adding-a-datetime-picker-to-your-forms.stml--}}
<!DOCTYPE html>
<html>
<head>
<title>DT-36 announcement module for exchange system</title>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/css/bootstrap-datetimepicker.min.css">
<style type="text/css">
.container {
margin-top: 40px;
}
.btn-primary {
width: 100%;
}
table tr.separator { height: 20px; }
table td {
padding-top: 10px;
padding-bottom: 10px;
}
</style>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/2.14.1/moment.min.js"></script>
<script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"></script>
<script type='text/javascript'>
$( document ).ready(function() {
$('#datetimepicker1').datetimepicker(
{
format: 'DD-MM-YYYY', // add hh:mm A to enable time in AM or PM
minDate:new Date(), //prevents past dates
}
);
$('#datetimepicker2').datetimepicker(
{
format: 'DD-MM-YYYY',
minDate:new Date(),
}
);
});
</script>
</head>
<body>
<div class="container">
<div class="row justify-content-center">
@yield('content')
<div>
<div>
</body>
</html>
+30
View File
@@ -56,3 +56,33 @@ Route::get('{path}', 'WelcomeController@index')->where('path', '(.*)');
Auth::routes();
//Route::get('/home', 'WelcomeController@index')->name('home');
//
//<Start Announcement Routes>
//
//create data
Route::get('/announcement/create', 'App\Http\Controllers\Announcement\CreateAnnouncementController@create')->name('announcement.create');
//store data
Route::post('/announcement/post', 'App\Http\Controllers\Announcement\PostAnnouncementController@store')->name('announcement.post');
//list all data
Route::get('/announcements/view', 'App\Http\Controllers\Announcement\ViewAnnouncementsController@index')->name('announcements.view');
//list a data
Route::get('/announcement/{id}/view', 'App\Http\Controllers\Announcement\ViewAnnouncementController@show')->name('announcement.view');
//edit data
Route::get('/announcement/{id}/edit', 'App\Http\Controllers\Announcement\EditAnnouncementController@edit')->name('announcement.edit');
//update data
Route::put('/announcement/{id}/update', 'App\Http\Controllers\Announcement\UpdateAnnouncementController@update')->name('announcement.update');
//delete data
Route::delete('/announcement/{id}/delete', 'App\Http\Controllers\Announcement\DeleteAnnouncementController@destroy')->name('announcement.delete');
//
//</Start Announcement Routes>
//