summaryrefslogtreecommitdiff
path: root/Year_3/TSDWL/LARAVEL/iBook/resources
diff options
context:
space:
mode:
Diffstat (limited to 'Year_3/TSDWL/LARAVEL/iBook/resources')
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/css/app.css0
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/js/app.js1
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/js/bootstrap.js28
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/auth.php20
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/pagination.php19
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/passwords.php22
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/validation.php162
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/views/books/create.blade.php12
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/views/books/edit.blade.php34
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/views/books/index.blade.php15
-rw-r--r--Year_3/TSDWL/LARAVEL/iBook/resources/views/layout.blade.php7
11 files changed, 317 insertions, 3 deletions
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/css/app.css b/Year_3/TSDWL/LARAVEL/iBook/resources/css/app.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/css/app.css
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/js/app.js b/Year_3/TSDWL/LARAVEL/iBook/resources/js/app.js
new file mode 100644
index 0000000..40c55f6
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/js/app.js
@@ -0,0 +1 @@
+require('./bootstrap');
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/js/bootstrap.js b/Year_3/TSDWL/LARAVEL/iBook/resources/js/bootstrap.js
new file mode 100644
index 0000000..6922577
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/js/bootstrap.js
@@ -0,0 +1,28 @@
+window._ = require('lodash');
+
+/**
+ * We'll load the axios HTTP library which allows us to easily issue requests
+ * to our Laravel back-end. This library automatically handles sending the
+ * CSRF token as a header based on the value of the "XSRF" token cookie.
+ */
+
+window.axios = require('axios');
+
+window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
+
+/**
+ * Echo exposes an expressive API for subscribing to channels and listening
+ * for events that are broadcast by Laravel. Echo and event broadcasting
+ * allows your team to easily build robust real-time web applications.
+ */
+
+// import Echo from 'laravel-echo';
+
+// window.Pusher = require('pusher-js');
+
+// window.Echo = new Echo({
+// broadcaster: 'pusher',
+// key: process.env.MIX_PUSHER_APP_KEY,
+// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
+// forceTLS: true
+// });
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/auth.php b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/auth.php
new file mode 100644
index 0000000..6598e2c
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/auth.php
@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Authentication Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used during authentication for various
+ | messages that we need to display to the user. You are free to modify
+ | these language lines according to your application's requirements.
+ |
+ */
+
+ 'failed' => 'These credentials do not match our records.',
+ 'password' => 'The provided password is incorrect.',
+ 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
+
+];
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/pagination.php b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/pagination.php
new file mode 100644
index 0000000..d481411
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/pagination.php
@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Pagination Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used by the paginator library to build
+ | the simple pagination links. You are free to change them to anything
+ | you want to customize your views to better match your application.
+ |
+ */
+
+ 'previous' => '&laquo; Previous',
+ 'next' => 'Next &raquo;',
+
+];
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/passwords.php b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/passwords.php
new file mode 100644
index 0000000..2345a56
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/passwords.php
@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Password Reset Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are the default lines which match reasons
+ | that are given by the password broker for a password update attempt
+ | has failed, such as for an invalid token or invalid new password.
+ |
+ */
+
+ 'reset' => 'Your password has been reset!',
+ 'sent' => 'We have emailed your password reset link!',
+ 'throttled' => 'Please wait before retrying.',
+ 'token' => 'This password reset token is invalid.',
+ 'user' => "We can't find a user with that email address.",
+
+];
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/validation.php b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/validation.php
new file mode 100644
index 0000000..87fb437
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/lang/en/validation.php
@@ -0,0 +1,162 @@
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines contain the default error messages used by
+ | the validator class. Some of these rules have multiple versions such
+ | as the size rules. Feel free to tweak each of these messages here.
+ |
+ */
+
+ 'accepted' => 'The :attribute must be accepted.',
+ 'accepted_if' => 'The :attribute must be accepted when :other is :value.',
+ 'active_url' => 'The :attribute is not a valid URL.',
+ 'after' => 'The :attribute must be a date after :date.',
+ 'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
+ 'alpha' => 'The :attribute must only contain letters.',
+ 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.',
+ 'alpha_num' => 'The :attribute must only contain letters and numbers.',
+ 'array' => 'The :attribute must be an array.',
+ 'before' => 'The :attribute must be a date before :date.',
+ 'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
+ 'between' => [
+ 'numeric' => 'The :attribute must be between :min and :max.',
+ 'file' => 'The :attribute must be between :min and :max kilobytes.',
+ 'string' => 'The :attribute must be between :min and :max characters.',
+ 'array' => 'The :attribute must have between :min and :max items.',
+ ],
+ 'boolean' => 'The :attribute field must be true or false.',
+ 'confirmed' => 'The :attribute confirmation does not match.',
+ 'current_password' => 'The password is incorrect.',
+ 'date' => 'The :attribute is not a valid date.',
+ 'date_equals' => 'The :attribute must be a date equal to :date.',
+ 'date_format' => 'The :attribute does not match the format :format.',
+ 'declined' => 'The :attribute must be declined.',
+ 'declined_if' => 'The :attribute must be declined when :other is :value.',
+ 'different' => 'The :attribute and :other must be different.',
+ 'digits' => 'The :attribute must be :digits digits.',
+ 'digits_between' => 'The :attribute must be between :min and :max digits.',
+ 'dimensions' => 'The :attribute has invalid image dimensions.',
+ 'distinct' => 'The :attribute field has a duplicate value.',
+ 'email' => 'The :attribute must be a valid email address.',
+ 'ends_with' => 'The :attribute must end with one of the following: :values.',
+ 'enum' => 'The selected :attribute is invalid.',
+ 'exists' => 'The selected :attribute is invalid.',
+ 'file' => 'The :attribute must be a file.',
+ 'filled' => 'The :attribute field must have a value.',
+ 'gt' => [
+ 'numeric' => 'The :attribute must be greater than :value.',
+ 'file' => 'The :attribute must be greater than :value kilobytes.',
+ 'string' => 'The :attribute must be greater than :value characters.',
+ 'array' => 'The :attribute must have more than :value items.',
+ ],
+ 'gte' => [
+ 'numeric' => 'The :attribute must be greater than or equal to :value.',
+ 'file' => 'The :attribute must be greater than or equal to :value kilobytes.',
+ 'string' => 'The :attribute must be greater than or equal to :value characters.',
+ 'array' => 'The :attribute must have :value items or more.',
+ ],
+ 'image' => 'The :attribute must be an image.',
+ 'in' => 'The selected :attribute is invalid.',
+ 'in_array' => 'The :attribute field does not exist in :other.',
+ 'integer' => 'The :attribute must be an integer.',
+ 'ip' => 'The :attribute must be a valid IP address.',
+ 'ipv4' => 'The :attribute must be a valid IPv4 address.',
+ 'ipv6' => 'The :attribute must be a valid IPv6 address.',
+ 'mac_address' => 'The :attribute must be a valid MAC address.',
+ 'json' => 'The :attribute must be a valid JSON string.',
+ 'lt' => [
+ 'numeric' => 'The :attribute must be less than :value.',
+ 'file' => 'The :attribute must be less than :value kilobytes.',
+ 'string' => 'The :attribute must be less than :value characters.',
+ 'array' => 'The :attribute must have less than :value items.',
+ ],
+ 'lte' => [
+ 'numeric' => 'The :attribute must be less than or equal to :value.',
+ 'file' => 'The :attribute must be less than or equal to :value kilobytes.',
+ 'string' => 'The :attribute must be less than or equal to :value characters.',
+ 'array' => 'The :attribute must not have more than :value items.',
+ ],
+ 'max' => [
+ 'numeric' => 'The :attribute must not be greater than :max.',
+ 'file' => 'The :attribute must not be greater than :max kilobytes.',
+ 'string' => 'The :attribute must not be greater than :max characters.',
+ 'array' => 'The :attribute must not have more than :max items.',
+ ],
+ 'mimes' => 'The :attribute must be a file of type: :values.',
+ 'mimetypes' => 'The :attribute must be a file of type: :values.',
+ 'min' => [
+ 'numeric' => 'The :attribute must be at least :min.',
+ 'file' => 'The :attribute must be at least :min kilobytes.',
+ 'string' => 'The :attribute must be at least :min characters.',
+ 'array' => 'The :attribute must have at least :min items.',
+ ],
+ 'multiple_of' => 'The :attribute must be a multiple of :value.',
+ 'not_in' => 'The selected :attribute is invalid.',
+ 'not_regex' => 'The :attribute format is invalid.',
+ 'numeric' => 'The :attribute must be a number.',
+ 'password' => 'The password is incorrect.',
+ 'present' => 'The :attribute field must be present.',
+ 'prohibited' => 'The :attribute field is prohibited.',
+ 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
+ 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
+ 'prohibits' => 'The :attribute field prohibits :other from being present.',
+ 'regex' => 'The :attribute format is invalid.',
+ 'required' => 'The :attribute field is required.',
+ 'required_if' => 'The :attribute field is required when :other is :value.',
+ 'required_unless' => 'The :attribute field is required unless :other is in :values.',
+ 'required_with' => 'The :attribute field is required when :values is present.',
+ 'required_with_all' => 'The :attribute field is required when :values are present.',
+ 'required_without' => 'The :attribute field is required when :values is not present.',
+ 'required_without_all' => 'The :attribute field is required when none of :values are present.',
+ 'same' => 'The :attribute and :other must match.',
+ 'size' => [
+ 'numeric' => 'The :attribute must be :size.',
+ 'file' => 'The :attribute must be :size kilobytes.',
+ 'string' => 'The :attribute must be :size characters.',
+ 'array' => 'The :attribute must contain :size items.',
+ ],
+ 'starts_with' => 'The :attribute must start with one of the following: :values.',
+ 'string' => 'The :attribute must be a string.',
+ 'timezone' => 'The :attribute must be a valid timezone.',
+ 'unique' => 'The :attribute has already been taken.',
+ 'uploaded' => 'The :attribute failed to upload.',
+ 'url' => 'The :attribute must be a valid URL.',
+ 'uuid' => 'The :attribute must be a valid UUID.',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'attribute-name' => [
+ 'rule-name' => 'custom-message',
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Attributes
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used to swap our attribute placeholder
+ | with something more reader friendly such as "E-Mail Address" instead
+ | of "email". This simply helps us make our message more expressive.
+ |
+ */
+
+ 'attributes' => [],
+
+];
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/create.blade.php b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/create.blade.php
index 398c7b4..5bd20b0 100644
--- a/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/create.blade.php
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/create.blade.php
@@ -7,11 +7,11 @@
@csrf
<div>
<label for="name">Name: </label>
- <input type="text" name="name" id="name">
+ <input type="text" name="name" id="name" required>
</div>
<div>
<label for="published_at">Published at: </label>
- <input type="date" name="published_at" id="published_at">
+ <input type="datetime" name="published_at" id="published_at">
</div>
<div>
<label for="is_online">Is online?: </label>
@@ -19,8 +19,14 @@
</div>
<div>
<label for="author_id">Author: </label>
- <input type="text" name="name" id="name">
+ <select id="author_id" name="author_id">
+ <option value="">Select an author</option>
+ @foreach ($authors as $author)
+ <option value="{{ $author->id }}">{{ $author->name }}</option>
+ @endforeach
+ </select>
</div>
+ <button type="submit">Save</button>
</form>
@endsection
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/edit.blade.php b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/edit.blade.php
new file mode 100644
index 0000000..1889b18
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/edit.blade.php
@@ -0,0 +1,34 @@
+@extends('layout')
+
+@section('content')
+<h1>Edit `{{ $book->name }}`</h1>
+
+<form method="post" action="/books/<?php echo $book->id; ?>">
+ @csrf
+ @method('put')
+ <div>
+ <label for="name">Name: </label>
+ <input type="text" name="name" id="name" required value="<?php echo $book->name; ?>">
+ </div>
+ <div>
+ <label for="published_at">Published at: </label>
+ <input type="datetime" name="published_at" id="published_at" value="<?php echo $book->published_at; ?>">
+ </div>
+ <div>
+ <label for="is_online">Is online?: </label>
+ <input type="checkbox" name="is_online" id="is_online" <?php echo ($book->is_online ? 'checked': ''); ?>>
+ </div>
+ <div>
+ <label for="author_id">Author: </label>
+ <select id="author_id" name="author_id">
+ <option value="">Select an author</option>
+ @foreach ($authors as $author)
+ <option value="{{ $author->id }}" <?php if($author->id == $book->author_id) { echo 'selected';
+ } ?>>
+{{ $author->name }}</option>
+ @endforeach
+ </select>
+ </div>
+ <button type="submit">Save</button>
+</form>
+@endsection
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/index.blade.php b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/index.blade.php
new file mode 100644
index 0000000..65a4a42
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/views/books/index.blade.php
@@ -0,0 +1,15 @@
+@extends('layout')
+
+@section('content')
+
+<h1>Hello world! They're my books:</h1>
+@foreach ($books as $book)
+<p>
+ <a href="/books/{{ $book->id }}">{{ $book->name }}</a>
+ @if ($book->author_id)
+ <span>by {{ $book->author->name }}</span>
+ @endif
+</p>
+@endforeach
+
+@endsection
diff --git a/Year_3/TSDWL/LARAVEL/iBook/resources/views/layout.blade.php b/Year_3/TSDWL/LARAVEL/iBook/resources/views/layout.blade.php
new file mode 100644
index 0000000..e19db99
--- /dev/null
+++ b/Year_3/TSDWL/LARAVEL/iBook/resources/views/layout.blade.php
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<html>
+ <head></head>
+ <body>
+ @yield('content')
+ </body>
+</html>