Move the delivery mode and delivery address sections before the
billing address in ``registered.blade.php``. The new order is:
Mode de livraison → Adresse de livraison → Adresse de facturation →
Paiement, which better matches the natural checkout flow.
Two issues prevented the shelf tree reordering from working:
- The JS used ``onDragStop`` (only fires for drags outside the
tree) instead of the ``tree.move`` event to send the AJAX
request. Moved the POST into the ``tree.move`` handler.
- The ``inside`` case used ``appendNode`` (last child), but
jqTree sends ``inside`` when dropping before the first child.
Switched to ``prependNode`` so the node lands first.
- Added missing ``before`` case with ``insertBeforeNode``.
Reusable ``password_toggle.blade.php`` partial that wraps every
``input[type=password]`` with an eye icon button. Clicking it
toggles between hidden and visible text. Handles Bootstrap modals
via ``shown.bs.modal`` event. Applied on login, register, password
change (shop + admin), password reset, and first login pages.
The edit view used ``id='content-form'`` while the shared
``form.blade.php`` calls ``initSaveForm('#homepage-form')``.
The jQuery selector never found the form, so clicking Save
did nothing. Aligned the edit form ID to ``homepage-form``.
The ``latestOrders`` partial accessed ``$order->customer->id``
without checking for null. Orders whose customer has been deleted
caused the admin dashboard to crash on load.
The ``basketTotal`` partial expects ``$sale_channel`` as a top-level
view variable. The cart page passed it correctly, but the checkout
page and the AJAX basket refresh only passed it nested inside
``$basket``.
Replaces the simple address radio list in the checkout page with the
richer ``Shop.Customers.partials.addresses`` partial already used on
the profile edit page. Customers can now choose among existing
addresses, add a new one on-the-fly, or delete an address directly
from the checkout flow.
Each rule (length, lowercase, uppercase, number, special character)
shows a live check/cross icon as the user types. Also aligns
``handlePasswordChange`` server-side validation with the boilerplate
``Password`` rule (was only enforcing min 8 chars).
The password change form on the profile page (``Mes coordonnées``)
was scaffolded but never wired to any backend logic. The fields
``current-password``, ``new-password`` and ``new-password_confirmation``
were silently ignored by ``Customers::storeFull()``.
- Add ``handlePasswordChange()`` in ``CustomerController`` that
validates current password, confirmation match, and 8-char minimum
before hashing and saving.
- Remove ``required`` attribute from password fields so the form can
submit for profile-only updates without filling password fields.
- Strip password fields from request data before passing to
``storeFull()`` to avoid Eloquent mass-assignment noise.
Display a tailored confirmation message when the customer pays by
check or wire transfer, including a warning about the 30-day
cancellation policy. The payment type is passed as a query parameter
so the message survives page reloads.
- Add ``getOrderConfirmedByCheckContent()`` and
``getOrderConfirmedByWireContent()`` to ``Contents`` repository
- Flash ``payment_type`` through redirect query parameter
- Add migration inserting content rows (id 10, 11)
- Update confirmed view with green checkmark and warning icon