diff --git a/.env.example b/.env.example index e687634..cf96bf2 100644 --- a/.env.example +++ b/.env.example @@ -30,4 +30,7 @@ MAIL_ENCRYPTION=null PUSHER_APP_ID= PUSHER_APP_KEY= -PUSHER_APP_SECRET= \ No newline at end of file +PUSHER_APP_SECRET= + +NOCAPTCHA_SECRET=6LfdQSMUAAAAAAT5cKXa7lI3koiFy4c5BP7BX3m8 +NOCAPTCHA_SITEKEY=6LfdQSMUAAAAAOP31dkmdZJeNvDghlBfqJsHT5M- \ No newline at end of file diff --git a/app/Http/Controllers/DonationController.php b/app/Http/Controllers/DonationController.php index d1a1eae..91977db 100644 --- a/app/Http/Controllers/DonationController.php +++ b/app/Http/Controllers/DonationController.php @@ -52,13 +52,23 @@ public function add() */ public function save(Request $request) { + $messages = [ + 'name.required' => 'නම ඇතුලත් කිරීම අනිවාර්යයි', + 'telephone.required' => 'දුරකථන අංක ඇතුලත් කිරීම අනිවාර්යයි', + 'address.required' => 'ලිපිනය ඇතුලත් කිරීම අනිවාර්යයි', + 'city.required' => 'නගරය/ප්‍රා.ලේ කොට්ටාසය ඇතුලත් කිරීම අනිවාර්යයි', + 'needs.required' => 'අවශ්‍යතා ඇතුලත් කිරීම අනිවාර්යයි', + 'g-recaptcha-response.required' => 'ඔබව තහවුරු කිරීම අනිවාර්යයි' + ]; + $validator = Validator::make($request->all(), [ 'name' => 'required|max:100', 'telephone' => 'required|max:100', 'address' => 'required|max:100', 'city' => 'required|max:50', 'donation' => 'required', - ]); + 'g-recaptcha-response' => 'required|captcha' + ], $messages); if ($validator->fails()) { return redirect('/donations/add') diff --git a/app/Http/Controllers/NeedsController.php b/app/Http/Controllers/NeedsController.php index a6cae0f..cb79e17 100644 --- a/app/Http/Controllers/NeedsController.php +++ b/app/Http/Controllers/NeedsController.php @@ -49,13 +49,23 @@ public function add() */ public function save(Request $request) { + $messages = [ + 'name.required' => 'නම ඇතුලත් කිරීම අනිවාර්යයි', + 'telephone.required' => 'දුරකථන අංක ඇතුලත් කිරීම අනිවාර්යයි', + 'address.required' => 'ලිපිනය ඇතුලත් කිරීම අනිවාර්යයි', + 'city.required' => 'නගරය/ප්‍රා.ලේ කොට්ටාසය ඇතුලත් කිරීම අනිවාර්යයි', + 'needs.required' => 'ආධාර විස්තරය ඇතුලත් කිරීම අනිවාර්යයි', + 'g-recaptcha-response.required' => 'ඔබව තහවුරු කිරීම අනිවාර්යයි' + ]; + $validator = Validator::make($request->all(), [ 'name' => 'required|max:100', 'telephone' => 'required|max:100', 'address' => 'required|max:100', 'city' => 'required|max:50', - 'needs' => 'required' - ]); + 'needs' => 'required', + 'g-recaptcha-response' => 'required|captcha' + ], $messages); if ($validator->fails()) { return redirect('/needs/add') diff --git a/composer.json b/composer.json index 497b120..619cb4a 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,8 @@ "require": { "php": ">=5.6.4", "laravel/framework": "5.4.*", - "laravel/tinker": "~1.0" + "laravel/tinker": "~1.0", + "anhskohbo/no-captcha": "^2.3" }, "require-dev": { "fzaninotto/faker": "~1.4", diff --git a/config/app.php b/config/app.php index 6e42d5a..ff724e1 100644 --- a/config/app.php +++ b/config/app.php @@ -167,6 +167,7 @@ * Package Service Providers... */ Laravel\Tinker\TinkerServiceProvider::class, + Anhskohbo\NoCaptcha\NoCaptchaServiceProvider::class, /* * Application Service Providers... diff --git a/public/datatable/dataTables.bootstrap.min.css b/public/datatable/dataTables.bootstrap.min.css deleted file mode 100644 index 3a5487a..0000000 --- a/public/datatable/dataTables.bootstrap.min.css +++ /dev/null @@ -1,180 +0,0 @@ -table.dataTable { - clear: both; - margin-top: 6px !important; - margin-bottom: 6px !important; - max-width: none !important; - border-collapse: separate !important -} - -table.dataTable td, table.dataTable th { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box -} - -table.dataTable td.dataTables_empty, table.dataTable th.dataTables_empty { - text-align: center -} - -table.dataTable.nowrap th, table.dataTable.nowrap td { - white-space: nowrap -} - -div.dataTables_wrapper div.dataTables_length label { - font-weight: normal; - text-align: left; - white-space: nowrap -} - -div.dataTables_wrapper div.dataTables_length select { - width: 75px; - display: inline-block -} - -div.dataTables_wrapper div.dataTables_filter { - text-align: right -} - -div.dataTables_wrapper div.dataTables_filter label { - font-weight: normal; - white-space: nowrap; - text-align: left -} - -div.dataTables_wrapper div.dataTables_filter input { - margin-left: 0.5em; - display: inline-block; - width: auto -} - -div.dataTables_wrapper div.dataTables_info { - padding-top: 8px; - white-space: nowrap -} - -div.dataTables_wrapper div.dataTables_paginate { - margin: 0; - white-space: nowrap; - text-align: right -} - -div.dataTables_wrapper div.dataTables_paginate ul.pagination { - margin: 2px 0; - white-space: nowrap -} - -div.dataTables_wrapper div.dataTables_processing { - position: absolute; - top: 50%; - left: 50%; - width: 200px; - margin-left: -100px; - margin-top: -26px; - text-align: center; - padding: 1em 0 -} - -table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting, table.dataTable thead > tr > td.sorting_asc, table.dataTable thead > tr > td.sorting_desc, table.dataTable thead > tr > td.sorting { - padding-right: 30px -} - -table.dataTable thead > tr > th:active, table.dataTable thead > tr > td:active { - outline: none -} - -table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled { - cursor: pointer; - position: relative -} - -table.dataTable thead .sorting:after, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:after, table.dataTable thead .sorting_asc_disabled:after, table.dataTable thead .sorting_desc_disabled:after { - position: absolute; - bottom: 8px; - right: 8px; - display: block; - font-family: 'Glyphicons Halflings'; - opacity: 0.5 -} - -table.dataTable thead .sorting:after { - opacity: 0.2; - content: "\e150" -} - -table.dataTable thead .sorting_asc:after { - content: "\e155" -} - -table.dataTable thead .sorting_desc:after { - content: "\e156" -} - -table.dataTable thead .sorting_asc_disabled:after, table.dataTable thead .sorting_desc_disabled:after { - color: #eee -} - -div.dataTables_scrollHead table.dataTable { - margin-bottom: 0 !important -} - -div.dataTables_scrollBody table { - border-top: none; - margin-top: 0 !important; - margin-bottom: 0 !important -} - -div.dataTables_scrollBody table thead .sorting:after, div.dataTables_scrollBody table thead .sorting_asc:after, div.dataTables_scrollBody table thead .sorting_desc:after { - display: none -} - -div.dataTables_scrollBody table tbody tr:first-child th, div.dataTables_scrollBody table tbody tr:first-child td { - border-top: none -} - -div.dataTables_scrollFoot table { - margin-top: 0 !important; - border-top: none -} - -@media screen and (max-width: 767px) { - div.dataTables_wrapper div.dataTables_length, div.dataTables_wrapper div.dataTables_filter, div.dataTables_wrapper div.dataTables_info, div.dataTables_wrapper div.dataTables_paginate { - text-align: center - } -} - -table.dataTable.table-condensed > thead > tr > th { - padding-right: 20px -} - -table.dataTable.table-condensed .sorting:after, table.dataTable.table-condensed .sorting_asc:after, table.dataTable.table-condensed .sorting_desc:after { - top: 6px; - right: 6px -} - -table.table-bordered.dataTable th, table.table-bordered.dataTable td { - border-left-width: 0 -} - -table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable td:last-child, table.table-bordered.dataTable td:last-child { - border-right-width: 0 -} - -table.table-bordered.dataTable tbody th, table.table-bordered.dataTable tbody td { - border-bottom-width: 0 -} - -div.dataTables_scrollHead table.table-bordered { - border-bottom-width: 0 -} - -div.table-responsive > div.dataTables_wrapper > div.row { - margin: 0 -} - -div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child { - padding-left: 0 -} - -div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child { - padding-right: 0 -} \ No newline at end of file diff --git a/public/datatable/dataTables.bootstrap.min.js b/public/datatable/dataTables.bootstrap.min.js deleted file mode 100644 index 032e1ee..0000000 --- a/public/datatable/dataTables.bootstrap.min.js +++ /dev/null @@ -1,76 +0,0 @@ -/*! - DataTables Bootstrap 3 integration - Š2011-2015 SpryMedia Ltd - datatables.net/license - */ -(function (b) { - "function" === typeof define && define.amd ? define(["jquery", "datatables.net"], function (a) { - return b(a, window, document) - }) : "object" === typeof exports ? module.exports = function (a, d) { - a || (a = window); - if (!d || !d.fn.dataTable) d = require("datatables.net")(a, d).$; - return b(d, a, a.document) - } : b(jQuery, window, document) -})(function (b, a, d) { - var f = b.fn.dataTable; - b.extend(!0, f.defaults, { - dom: "<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>", - renderer: "bootstrap" - }); - b.extend(f.ext.classes, - { - sWrapper: "dataTables_wrapper form-inline dt-bootstrap", - sFilterInput: "form-control input-sm", - sLengthSelect: "form-control input-sm", - sProcessing: "dataTables_processing panel panel-default" - }); - f.ext.renderer.pageButton.bootstrap = function (a, h, r, m, j, n) { - var o = new f.Api(a), s = a.oClasses, k = a.oLanguage.oPaginate, t = a.oLanguage.oAria.paginate || {}, e, g, p = 0, q = function (d, f) { - var l, h, i, c, m = function (a) { - a.preventDefault(); - !b(a.currentTarget).hasClass("disabled") && o.page() != a.data.action && o.page(a.data.action).draw("page") - }; - l = 0; - for (h = f.length; l < h; l++)if (c = f[l], b.isArray(c)) q(d, c); else { - g = e = ""; - switch (c) { - case "ellipsis": - e = "…"; - g = "disabled"; - break; - case "first": - e = k.sFirst; - g = c + (0 < j ? "" : " disabled"); - break; - case "previous": - e = k.sPrevious; - g = c + (0 < j ? "" : " disabled"); - break; - case "next": - e = k.sNext; - g = c + (j < n - 1 ? "" : " disabled"); - break; - case "last": - e = k.sLast; - g = c + (j < n - 1 ? "" : " disabled"); - break; - default: - e = c + 1, g = j === c ? "active" : "" - } - e && (i = b("
  • ", { - "class": s.sPageButton + " " + g, - id: 0 === r && "string" === typeof c ? a.sTableId + "_" + c : null - }).append(b("", { - href: "#", - "aria-controls": a.sTableId, "aria-label": t[c], "data-dt-idx": p, tabindex: a.iTabIndex - }).html(e)).appendTo(d), a.oApi._fnBindAction(i, {action: c}, m), p++) - } - }, i; - try { - i = b(h).find(d.activeElement).data("dt-idx") - } catch (u) { - } - q(b(h).empty().html('