Booking and Availability Management Tools

BAT is a set of tools whcih were built by a team who founded Roomify.us. BAT is equipped with components which offer huge customisability in availability management, reservation and booking use cases.

I'll come clean here and say that I'm not familiar with Drupal 8, but I will be embarking on this journey at the same time, along with a quantity of additional tools which are required these days to deploy Drupal.

BAT is a developer's tool, not a site building tool. The UI is minimal. If you wish to build a new application based on BAT, be prepared to invest significant time writing code, (or at least rules) particularly if you need commerce/payment functionality or widgets for end users to book resources on their own.

BAT on its own is a booking and availability management framework, much in the same way Drupal is a content management framework and Drupal Commerce is an e-commerce framework. It wraps around a stand-alone PHP Library also developed by Roomify. Our aim is to build specific solutions on top of BAT to tackle specific application domains.

BAT installation

The Drupal Project page describes the project and some of it's capabilities, and more importantly, additional Booking and Availability Management Tools Documentation. So I'm going to read about this befoe I dive in and install NGNIX, MYSQL, PHP, Composer and the rest, for the first time on this server!

Defining the scope

Well, lets be honest. There are options out there to handle the following project definitions, Roomify it's self would deliver a lot if not all of what I want. But I want to use my technology interest to develop my own system with lower cash overhead. I am rich on time at the moment, and I would like to keep it that way, I would rather spend my time on developing something of real value to me, than spend my time developing something of value to someone else. So in my wisdom, I don't want to spend more than I am already spending on existing technologies.

Later, when or if money comes in, I would potentially off-load the defined scope to the third party providers, after personally having developed a working system with my own workflow, polices and procedures, terms and conditions etc.

First stage Project

Initially, this project will deliver a website to show the availability of and then offer the option to book, a resource, with some options attached. The initial resource I have in mind, is a room in a building, with the option of a transfer from a travel location.

Second stage Project

Later I will define a resource which will be 'time' with an available tour guide 'person', to deliver the option of a 'tour', or a 'tour' which will enable to option to book a guide 'person' on a 'time'.

The finer details for the second stage project have not been figured out yet, I am sill trying to struggle with defining my own concepts here, it is possible that the limitations of the BAT project will be tested, even if I am successful in installing and configuring the system, it may not be possible to define my requirements for the second stage project in a language BAT will understand.

Third stage Project

The wider horizon here, it to be able to provide two or more themed Drupal sites which will allow one resource to be shared between them. For example, I am able to offer Information Communication Technology services and Outdoor Activities Instruction. The style of website used to offer 'work' into these environments is very different, with different terms and conditions attached to the sale of the resource (in this case, time). Again, this is going to push my boundaries, and those of the underlying technology stack.

Also including, e-Commerce options

You may have already picked up on a tone here, but essentially, the concept here is to generate funds through the sale of these resources. Though I will be clear, the commerce issue is a horizon issue, it's not needed at the start as taking money for things can be done face to face, the important part is being able to communicate that something is available, what it is and allow it to be reserved by someone who wants to make use of it...

I would like to combine this with Drupal Commerce so I am able to 'sell' these resources, in the most automated fashion. I will be breaking the commerce project down into as best I can, bite sized chunks, but I need to ensure that these primary modules play nicely together from the outset.

Reading the Documentation

I have spent time in the past, trying to understand BAT high level overview in the Second and Third stage Project context, and it has become overly complex. Having only played with ready built resource allocation or booking systems, I have never had to define the elements of a booking, or at least, if I have it has been within the nomenclature of another product, such as Mocrosoft Exchange, or When I work. Here BAT uses it's own nomenclature and I will have to fit my own thinking into that space. Here goes.

Basic Concepts

Units are the things that can be booked. For BAT they simply have an ID, a default state (for a given event type - we will get to this later) and can define Constraints. Constraints are like extra rules about whether a specific unit is available (we get back to these as well). For each application, units will represent something concrete like hotel rooms, cars, tables, etc. Vacation Rentals Hotels Cars Meeting Rooms
Events define what value a unit has for a given time period. There can be multiple types of events and the value of the event together with the type of event will provide some meaning within an application. For example, one set of events can denote “Availability,” while another, “Price.” The value of the event type “Availability” will indicate whether a unit is available (1), unavailable (0) or booked (2) - i.e. they indicate the state of a unit. The value of the event type “Price” could denote, instead of the cost per night, a change in the state of a unit for a given time period. So to make a unit change states from available to booked, for a given set of days, you can retrieve all pricing events for that set of days and multiply the number of nights by the value associated with that event. Booked, Cost per night, Cost per week Suites available, standard rate, special rate in maintenance, cost per hour available, cost per 15 minutes
Search finds units that are in a set of acceptable states (e.g. room available) and that fulfill constraints (e.g. only available if booking starts on a Sunday). Both accepted and reject units are placed in a CalenderResponse object along with the constraint what caused them to be rejected. This permits us to reason more effectively over availability and what options to present to a user. All cars - Acceptable states Rejected or accepted calender response. Constraints Rejected or accepted calender response.
Valuators define the value of a unit for a given period based on a valuation strategy. Out of the box BAT offers a duration valuator which uses pricing events to determine the price over a predefined period. Number of cars Cost per 15 minutes period requested cost of booking

Installation

The BAT PHP Library - this provides the core booking functionality. The best way to install and manage it on your Drupal site is through Composer and Composer Manager for Drupal

Installing Composer Part 1

This will be the first time I will have installed and used composer. So going to the Drupal site I discover Using Composer to Install and Manage Dependencies which subsequently directs me to GetGomposer Getting Started down the rabbit hole we go, already on out fourth documentation website and not even installed PHP yet.

Installing PHP 5.3.2+

Composer requires PHP 5.3.2+, at last, a call to install PHP. I already have Apache and MYSQL installed as I'm using it on other projects. I wonder if I should take a snapshot of my server first. Yep that's probably a good idea, the snapshot will automatically be deleted on 25/05/2019. I hope I get far enough ahead to make that worthwhile before that expiry date. So PHP 7.2 is now on the machine.

Folder permissions

Before downloading and installing anything, lest set up a few folder permissions. This is something I've had to do over and over in recent weeks, so let's see if I can do it properly first time.

sudo chgrp -R www-data /var/www/booking.nicholasllewellyn.co.uk/html/
sudo chmod 2750 /var/www/booking.nicholasllewellyn.co.uk/html/
sudo chown -R nllewellyn:www-data /var/www/booking.nicholasllewellyn.co.uk/html/
sudo usermod -a -G www-data nllewellyn

Installing Composer Part 2

So with PHP installed, I can now install Composer. I'll install this Globally as apparently there is no reason to install it locally only. On the Download Composer page, there are a few lines of code to type, to get the installation scripts.

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

This installer script will simply check some php.ini settings, warn you if they are set incorrectly, and then download the latest composer.phar in the current directory. The 4 lines above will, in order:

  • Download the installer to the current directory
  • Verify the installer SHA-384 which you can also cross-check here
  • Run the installer
  • Remove the installer
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ ls
composer-setup.php
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ php composer-setup.php
All settings correct for using Composer
Downloading...

Composer (version 1.8.5) successfully installed to: /var/www/booking.nicholasllewellyn.co.uk/html/composer.phar
Use it: php composer.phar

nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ php -r "unlink('composer-setup.php');"
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ ls -l -a
total 1880
drwxr-s--- 2 nllewellyn www-data    4096 May 22 12:59 .
drwxr-xr-x 3 root       root        4096 May 22 12:46 ..
-rwxr-xr-x 1 nllewellyn www-data 1914314 May 22 12:59 composer.phar
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ mv composer.phar /usr/local/bin/composer
mv: cannot move 'composer.phar' to '/usr/local/bin/composer': Permission denied
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ sudo mv composer.phar /usr/local/bin/composer
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ composer -V
Composer version 1.8.5 2019-04-09 17:46:47
nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$

Well that seems to be installed now, let's see what we do next.

Installing Drupal with composer? Part 1

Do we next install Drupal using Composer, or do we need to do something else first? Let's go for it. I''l stupidly use the absolute defaults suggested by the installer howto, even tough later I will robably delte the composer project and start over, for now, I simply want to ensure I have all of the dependencies I require for the project and not be concerned with customising the suite to my requirements specifically.

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ composer create-project drupal-composer/drupal-project:8.x-dev my_site_name_dir --no-interaction
Installing drupal-composer/drupal-project (8.x-dev ec0f41171516c18357ca4cda9068ee4cdeabaa19)
  - Installing drupal-composer/drupal-project (8.x-dev ec0f411): Cloning ec0f411715 from cache
Created project in my_site_name_dir
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - drupal/core 8.8.x-dev requires ext-dom * -> the requested PHP extension dom is missing from your system.
    - drupal/core 8.7.x-dev requires ext-dom * -> the requested PHP extension dom is missing from your system.
    - drupal/core 8.7.1 requires ext-dom * -> the requested PHP extension dom is missing from your system.
    - drupal/core 8.7.0-rc1 requires ext-dom * -> the requested PHP extension dom is missing from your system.
    - drupal/core 8.7.0-beta2 requires ext-dom * -> the requested PHP extension dom is missing from your system.
    - drupal/core 8.7.0-beta1 requires ext-dom * -> the requested PHP extension dom is missing from your system.
    - drupal/core 8.7.0-alpha2 requires ext-dom * -> the requested PHP extension dom is missing from your system.
    - drupal/core 8.7.0-alpha1 requires ext-dom * -> the requested PHP extension dom is missing from your system.
    - drupal/core 8.7.0 requires ext-dom * -> the requested PHP extension dom is missing from your system.
    - Installation request for drupal/core ^8.7.0 -> satisfiable by drupal/core[8.7.0, 8.7.0-alpha1, 8.7.0-alpha2, 8.7.0-beta1, 8.7.0-beta2, 8.7.0-rc1, 8.7.1, 8.7.x-dev, 8.8.x-dev].

  To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php/7.2/cli/php.ini
    - /etc/php/7.2/cli/conf.d/10-opcache.ini
    - /etc/php/7.2/cli/conf.d/10-pdo.ini
    - /etc/php/7.2/cli/conf.d/20-calendar.ini
    - /etc/php/7.2/cli/conf.d/20-ctype.ini
    - /etc/php/7.2/cli/conf.d/20-exif.ini
    - /etc/php/7.2/cli/conf.d/20-fileinfo.ini
    - /etc/php/7.2/cli/conf.d/20-ftp.ini
    - /etc/php/7.2/cli/conf.d/20-gettext.ini
    - /etc/php/7.2/cli/conf.d/20-iconv.ini
    - /etc/php/7.2/cli/conf.d/20-json.ini
    - /etc/php/7.2/cli/conf.d/20-phar.ini
    - /etc/php/7.2/cli/conf.d/20-posix.ini
    - /etc/php/7.2/cli/conf.d/20-readline.ini
    - /etc/php/7.2/cli/conf.d/20-shmop.ini
    - /etc/php/7.2/cli/conf.d/20-sockets.ini
    - /etc/php/7.2/cli/conf.d/20-sysvmsg.ini
    - /etc/php/7.2/cli/conf.d/20-sysvsem.ini
    - /etc/php/7.2/cli/conf.d/20-sysvshm.ini
    - /etc/php/7.2/cli/conf.d/20-tokenizer.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

Well, the installer hasn't finished yet, but it looks like we have some issues. I was hoping composer could fix the dependencies, whcih is why I left the --no-interaction switch on the command line. Let's wait and see what happens next.

  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
        [email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$

Nothing fixed, let's see what we can do to correct these issues.

Issue 1 PHP extension dom is missing.

I can check what modules are installed with a simple command.

nllewellyn@localhost:/var/www/booking.nicholasllewellyn.co.uk/html$ php -m
[PHP Modules]
calendar
Core
ctype
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
openssl
pcntl
pcre
PDO
Phar
posix
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib

[Zend Modules]
Zend OPcache

Definately, no 'dom' module present here, I wonder how to install it? Apparently installing php-xml will resolve this issue so let's do that and try again?

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ sudo apt-get install php-xml
[sudo] password for nllewellyn:
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libc-client2007e libreadline-dev libssl-dev libssl-doc libtinfo-dev mlock
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  php7.2-xml
The following NEW packages will be installed:
  php-xml php7.2-xml
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 2024 B/110 kB of archives.
After this operation, 467 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 php-xml all 1:7.2+60ubuntu1 [2024 B]
Fetched 2024 B in 0s (14.5 kB/s)
Selecting previously unselected package php7.2-xml.
(Reading database ... 137771 files and directories currently installed.)
Preparing to unpack .../php7.2-xml_7.2.17-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-xml (7.2.17-0ubuntu0.18.04.1) ...
Selecting previously unselected package php-xml.
Preparing to unpack .../php-xml_1%3a7.2+60ubuntu1_all.deb ...
Unpacking php-xml (1:7.2+60ubuntu1) ...
Setting up php7.2-xml (7.2.17-0ubuntu0.18.04.1) ...
Setting up php-xml (1:7.2+60ubuntu1) ...
Processing triggers for libapache2-mod-php7.2 (7.2.17-0ubuntu0.18.04.1) ...
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$

So let's try

Installing Drupal with composer? Part 2

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ rm -r -f my_site_name_dir/
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ composer create-project drupal-composer/drupal-project:8.x-dev my_site_name_dir --no-interaction
Installing drupal-composer/drupal-project (8.x-dev ec0f41171516c18357ca4cda9068ee4cdeabaa19)
  - Installing drupal-composer/drupal-project (8.x-dev ec0f411): Cloning ec0f411715 from cache
Created project in my_site_name_dir
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - drupal/core 8.8.x-dev requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - drupal/core 8.7.x-dev requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - drupal/core 8.7.1 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - drupal/core 8.7.0-rc1 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - drupal/core 8.7.0-beta2 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - drupal/core 8.7.0-beta1 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - drupal/core 8.7.0-alpha2 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - drupal/core 8.7.0-alpha1 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - drupal/core 8.7.0 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - Installation request for drupal/core ^8.7.0 -> satisfiable by drupal/core[8.7.0, 8.7.0-alpha1, 8.7.0-alpha2, 8.7.0-beta1, 8.7.0-beta2, 8.7.0-rc1, 8.7.1, 8.7.x-dev, 8.8.x-dev].

  To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php/7.2/cli/php.ini
    - /etc/php/7.2/cli/conf.d/10-opcache.ini
    - /etc/php/7.2/cli/conf.d/10-pdo.ini
    - /etc/php/7.2/cli/conf.d/15-xml.ini
    - /etc/php/7.2/cli/conf.d/20-calendar.ini
    - /etc/php/7.2/cli/conf.d/20-ctype.ini
    - /etc/php/7.2/cli/conf.d/20-dom.ini
    - /etc/php/7.2/cli/conf.d/20-exif.ini
    - /etc/php/7.2/cli/conf.d/20-fileinfo.ini
    - /etc/php/7.2/cli/conf.d/20-ftp.ini
    - /etc/php/7.2/cli/conf.d/20-gettext.ini
    - /etc/php/7.2/cli/conf.d/20-iconv.ini
    - /etc/php/7.2/cli/conf.d/20-json.ini
    - /etc/php/7.2/cli/conf.d/20-phar.ini
    - /etc/php/7.2/cli/conf.d/20-posix.ini
    - /etc/php/7.2/cli/conf.d/20-readline.ini
    - /etc/php/7.2/cli/conf.d/20-shmop.ini
    - /etc/php/7.2/cli/conf.d/20-simplexml.ini
    - /etc/php/7.2/cli/conf.d/20-sockets.ini
    - /etc/php/7.2/cli/conf.d/20-sysvmsg.ini
    - /etc/php/7.2/cli/conf.d/20-sysvsem.ini
    - /etc/php/7.2/cli/conf.d/20-sysvshm.ini
    - /etc/php/7.2/cli/conf.d/20-tokenizer.ini
    - /etc/php/7.2/cli/conf.d/20-wddx.ini
    - /etc/php/7.2/cli/conf.d/20-xmlreader.ini
    - /etc/php/7.2/cli/conf.d/20-xmlwriter.ini
    - /etc/php/7.2/cli/conf.d/20-xsl.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ apt search php7.2 | grep "gd"

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php7.2-gd/bionic-updates,bionic-security,now 7.2.17-0ubuntu0.18.04.1 amd64 [residual-config]
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ sudo apt-get install php7.2-gd
[sudo] password for nllewellyn:
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libc-client2007e libreadline-dev libssl-dev libssl-doc libtinfo-dev mlock
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  php7.2-gd
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/27.2 kB of archives.
After this operation, 134 kB of additional disk space will be used.
Selecting previously unselected package php7.2-gd.
(Reading database ... 137795 files and directories currently installed.)
Preparing to unpack .../php7.2-gd_7.2.17-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-gd (7.2.17-0ubuntu0.18.04.1) ...
Setting up php7.2-gd (7.2.17-0ubuntu0.18.04.1) ...
Processing triggers for libapache2-mod-php7.2 (7.2.17-0ubuntu0.18.04.1) ...
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$

Installing Drupal with composer? Part 3

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ rm -r -f my_site_name_dir/                              [email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ composer create-project drupal-composer/drupal-project:8.x-dev my_site_name_dir --no-interaction
Installing drupal-composer/drupal-project (8.x-dev ec0f41171516c18357ca4cda9068ee4cdeabaa19)
  - Installing drupal-composer/drupal-project (8.x-dev ec0f411): Cloning ec0f411715 from cache
Created project in my_site_name_dir
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - drupal/console 1.0.2 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.1.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.1.1 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.2.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.3.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.3.1 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.3.2 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.4.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.5.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.6.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.6.1 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.7.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - drupal/console 1.8.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3].
    - alchemy/zippy 0.4.3 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
    - Installation request for drupal/console ^1.0.2 -> satisfiable by drupal/console[1.0.2, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.4.0, 1.5.0, 1.6.0, 1.6.1, 1.7.0, 1.8.0].

  To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php/7.2/cli/php.ini
    - /etc/php/7.2/cli/conf.d/10-opcache.ini
    - /etc/php/7.2/cli/conf.d/10-pdo.ini
    - /etc/php/7.2/cli/conf.d/15-xml.ini
    - /etc/php/7.2/cli/conf.d/20-calendar.ini
    - /etc/php/7.2/cli/conf.d/20-ctype.ini
    - /etc/php/7.2/cli/conf.d/20-dom.ini
    - /etc/php/7.2/cli/conf.d/20-exif.ini
    - /etc/php/7.2/cli/conf.d/20-fileinfo.ini
    - /etc/php/7.2/cli/conf.d/20-ftp.ini
    - /etc/php/7.2/cli/conf.d/20-gd.ini
    - /etc/php/7.2/cli/conf.d/20-gettext.ini
    - /etc/php/7.2/cli/conf.d/20-iconv.ini
    - /etc/php/7.2/cli/conf.d/20-json.ini
    - /etc/php/7.2/cli/conf.d/20-phar.ini
    - /etc/php/7.2/cli/conf.d/20-posix.ini
    - /etc/php/7.2/cli/conf.d/20-readline.ini
    - /etc/php/7.2/cli/conf.d/20-shmop.ini
    - /etc/php/7.2/cli/conf.d/20-simplexml.ini
    - /etc/php/7.2/cli/conf.d/20-sockets.ini
    - /etc/php/7.2/cli/conf.d/20-sysvmsg.ini
    - /etc/php/7.2/cli/conf.d/20-sysvsem.ini
    - /etc/php/7.2/cli/conf.d/20-sysvshm.ini
    - /etc/php/7.2/cli/conf.d/20-tokenizer.ini
    - /etc/php/7.2/cli/conf.d/20-wddx.ini
    - /etc/php/7.2/cli/conf.d/20-xmlreader.ini
    - /etc/php/7.2/cli/conf.d/20-xmlwriter.ini
    - /etc/php/7.2/cli/conf.d/20-xsl.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ apt search php7.2 | grep "mbstring"

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php7.2-mbstring/bionic-updates,bionic-security,now 7.2.17-0ubuntu0.18.04.1 amd64 [residual-config]

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ sudo apt-get install php7.2-mbstring
[sudo] password for nllewellyn:
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libc-client2007e libreadline-dev libssl-dev libssl-doc libtinfo-dev mlock
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  php7.2-mbstring
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/478 kB of archives.
After this operation, 1711 kB of additional disk space will be used.
Selecting previously unselected package php7.2-mbstring.
(Reading database ... 137804 files and directories currently installed.)
Preparing to unpack .../php7.2-mbstring_7.2.17-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-mbstring (7.2.17-0ubuntu0.18.04.1) ...
Setting up php7.2-mbstring (7.2.17-0ubuntu0.18.04.1) ...
Processing triggers for libapache2-mod-php7.2 (7.2.17-0ubuntu0.18.04.1) ...
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ composer require alchemy/zippy
Using version ^0.4.9 for alchemy/zippy
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 6 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-mbstring (v1.11.0): Downloading (100%)         
  - Installing symfony/process (v4.2.8): Downloading (100%)         
  - Installing symfony/polyfill-ctype (v1.11.0): Downloading (100%)         
  - Installing symfony/filesystem (v4.2.8): Downloading (100%)         
  - Installing doctrine/collections (v1.6.1): Downloading (100%)         
  - Installing alchemy/zippy (0.4.9): Downloading (100%)         
alchemy/zippy suggests installing ext-zip (To use the ZipExtensionAdapter)
alchemy/zippy suggests installing guzzlehttp/guzzle (To use the GuzzleTeleporter with Guzzle 6)
alchemy/zippy suggests installing guzzle/guzzle (To use the GuzzleTeleporter with Guzzle 3)
Writing lock file
Generating autoload files
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$

Installing Drupal with composer? Part 4

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ rm -r -f my_site_name_dir/                              [email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ composer create-project drupal-composer/drupal-project:8.x-dev my_site_name_dir --no-interaction
Installing drupal-composer/drupal-project (8.x-dev ec0f41171516c18357ca4cda9068ee4cdeabaa19)
  - Installing drupal-composer/drupal-project (8.x-dev ec0f411): Cloning ec0f411715 from cache
Created project in my_site_name_dir
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - webflo/drupal-core-require-dev 8.7.0 requires behat/mink-selenium2-driver 1.3.x-dev -> satisfiable by behat/mink-selenium2-driver[1.3.x-dev].
    - webflo/drupal-core-require-dev 8.7.0-alpha1 requires behat/mink-selenium2-driver 1.3.x-dev -> satisfiable by behat/mink-selenium2-driver[1.3.x-dev].
    - webflo/drupal-core-require-dev 8.7.0-alpha2 requires behat/mink-selenium2-driver 1.3.x-dev -> satisfiable by behat/mink-selenium2-driver[1.3.x-dev].
    - webflo/drupal-core-require-dev 8.7.0-beta1 requires behat/mink-selenium2-driver 1.3.x-dev -> satisfiable by behat/mink-selenium2-driver[1.3.x-dev].
    - webflo/drupal-core-require-dev 8.7.0-beta2 requires behat/mink-selenium2-driver 1.3.x-dev -> satisfiable by behat/mink-selenium2-driver[1.3.x-dev].
    - webflo/drupal-core-require-dev 8.7.0-rc1 requires behat/mink-selenium2-driver 1.3.x-dev -> satisfiable by behat/mink-selenium2-driver[1.3.x-dev].
    - webflo/drupal-core-require-dev 8.7.1 requires behat/mink-selenium2-driver 1.3.x-dev -> satisfiable by behat/mink-selenium2-driver[1.3.x-dev].
    - webflo/drupal-core-require-dev 8.7.x-dev requires behat/mink-selenium2-driver 1.3.x-dev -> satisfiable by behat/mink-selenium2-driver[1.3.x-dev].
    - webflo/drupal-core-require-dev 8.8.x-dev requires behat/mink-selenium2-driver 1.3.x-dev -> satisfiable by behat/mink-selenium2-driver[1.3.x-dev].
    - behat/mink-selenium2-driver 1.3.x-dev requires instaclick/php-webdriver ~1.1 -> satisfiable by instaclick/php-webdriver[1.1, 1.1.1, 1.2, 1.2.1, 1.2.2, 1.3.0, 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.4.5].
    - instaclick/php-webdriver 1.4.5 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.4.4 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.4.3 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.4.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.4.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.4.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.3.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.2.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.2.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.1.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - instaclick/php-webdriver 1.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
    - Installation request for webflo/drupal-core-require-dev ^8.7.0 -> satisfiable by webflo/drupal-core-require-dev[8.7.0, 8.7.0-alpha1, 8.7.0-alpha2, 8.7.0-beta1, 8.7.0-beta2, 8.7.0-rc1, 8.7.1, 8.7.x-dev, 8.8.x-dev].

  To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php/7.2/cli/php.ini
    - /etc/php/7.2/cli/conf.d/10-opcache.ini
    - /etc/php/7.2/cli/conf.d/10-pdo.ini
    - /etc/php/7.2/cli/conf.d/15-xml.ini
    - /etc/php/7.2/cli/conf.d/20-calendar.ini
    - /etc/php/7.2/cli/conf.d/20-ctype.ini
    - /etc/php/7.2/cli/conf.d/20-dom.ini
    - /etc/php/7.2/cli/conf.d/20-exif.ini
    - /etc/php/7.2/cli/conf.d/20-fileinfo.ini
    - /etc/php/7.2/cli/conf.d/20-ftp.ini
    - /etc/php/7.2/cli/conf.d/20-gd.ini
    - /etc/php/7.2/cli/conf.d/20-gettext.ini
    - /etc/php/7.2/cli/conf.d/20-iconv.ini
    - /etc/php/7.2/cli/conf.d/20-json.ini
    - /etc/php/7.2/cli/conf.d/20-mbstring.ini
    - /etc/php/7.2/cli/conf.d/20-phar.ini
    - /etc/php/7.2/cli/conf.d/20-posix.ini
    - /etc/php/7.2/cli/conf.d/20-readline.ini
    - /etc/php/7.2/cli/conf.d/20-shmop.ini
    - /etc/php/7.2/cli/conf.d/20-simplexml.ini
    - /etc/php/7.2/cli/conf.d/20-sockets.ini
    - /etc/php/7.2/cli/conf.d/20-sysvmsg.ini
    - /etc/php/7.2/cli/conf.d/20-sysvsem.ini
    - /etc/php/7.2/cli/conf.d/20-sysvshm.ini
    - /etc/php/7.2/cli/conf.d/20-tokenizer.ini
    - /etc/php/7.2/cli/conf.d/20-wddx.ini
    - /etc/php/7.2/cli/conf.d/20-xmlreader.ini
    - /etc/php/7.2/cli/conf.d/20-xmlwriter.ini
    - /etc/php/7.2/cli/conf.d/20-xsl.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ apt search php7.2 | grep "curl"
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php7.2-curl/bionic-updates,bionic-security 7.2.17-0ubuntu0.18.04.1 amd64
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ sudo apt-get install php7.2-curl
[sudo] password for nllewellyn:
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libc-client2007e libreadline-dev libssl-dev libssl-doc libtinfo-dev mlock
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  php7.2-curl
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 28.8 kB of archives.
After this operation, 118 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 php7.2-curl amd64 7.2.17-0ubuntu0.18.04.1 [28.8 kB]
Fetched 28.8 kB in 0s (182 kB/s)
Selecting previously unselected package php7.2-curl.
(Reading database ... 137813 files and directories currently installed.)
Preparing to unpack .../php7.2-curl_7.2.17-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-curl (7.2.17-0ubuntu0.18.04.1) ...
Setting up php7.2-curl (7.2.17-0ubuntu0.18.04.1) ...

Creating config file /etc/php/7.2/mods-available/curl.ini with new version
Processing triggers for libapache2-mod-php7.2 (7.2.17-0ubuntu0.18.04.1) ...
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$

Installing Drupal with composer? Part 5

Ok, so we have satisfied a number of dependencies for the Drupal installation on this system. I wonder, oh I wonder, if this will have completed the puzzle?

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ rm -r -f my_site_name_dir/
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ composer create-project drupal-composer/drupal-project:8.x-dev my_site_name_dir --no-interaction
Installing drupal-composer/drupal-project (8.x-dev ec0f41171516c18357ca4cda9068ee4cdeabaa19)
  - Installing drupal-composer/drupal-project (8.x-dev ec0f411): Cloning ec0f411715 from cache
Created project in my_site_name_dir
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 140 installs, 0 updates, 0 removals
  - Installing cweagans/composer-patches (1.6.5): Downloading (100%)         
  - Installing composer/installers (v1.6.0): Downloading (100%)         
  - Installing zaporylie/composer-drupal-optimizations (1.1.0): Downloading (100%)         
  - Installing composer/semver (1.5.0): Downloading (100%)         
  - Installing drupal-composer/drupal-scaffold (2.6.1): Downloading (100%)         
  - Installing symfony/polyfill-ctype (v1.11.0): Loading from cache
  - Installing symfony/finder (v3.4.27): Downloading (100%)         
  - Installing symfony/yaml (v3.4.27): Downloading (100%)         
  - Installing drupal/console-extend-plugin (0.9.2): Downloading (100%)         
  - Installing paragonie/random_compat (v2.0.18): Downloading (100%)         
  - Installing symfony/polyfill-php70 (v1.11.0): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.11.0): Loading from cache
  - Installing symfony/http-foundation (v3.4.27): Downloading (100%)         
  - Installing symfony/dom-crawler (v3.4.27): Downloading (100%)         
  - Installing symfony/css-selector (v3.4.27): Downloading (100%)         
  - Installing jakub-onderka/php-console-color (v0.2): Downloading (100%)         
  - Installing jakub-onderka/php-console-highlighter (v0.4): Downloading (100%)         
  - Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%)         
  - Installing nikic/php-parser (v4.2.1): Downloading (100%)         
  - Installing symfony/polyfill-php72 (v1.11.0): Downloading (100%)         
  - Installing symfony/var-dumper (v4.2.8): Downloading (100%)         
  - Installing psr/log (1.1.0): Downloading (100%)         
  - Installing symfony/debug (v3.4.27): Downloading (100%)         
  - Installing symfony/console (v3.4.27): Downloading (100%)         
  - Installing psy/psysh (v0.9.9): Downloading (100%)         
  - Installing ralouphie/getallheaders (2.0.5): Downloading (100%)         
  - Installing psr/http-message (1.0.1): Downloading (100%)         
  - Installing guzzlehttp/psr7 (1.5.2): Downloading (100%)         
  - Installing guzzlehttp/promises (v1.3.1): Downloading (100%)         
  - Installing guzzlehttp/guzzle (6.3.3): Downloading (100%)         
  - Installing webmozart/assert (1.4.0): Downloading (100%)         
  - Installing webmozart/path-util (2.3.0): Downloading (100%)         
  - Installing webflo/drupal-finder (1.1.0): Downloading (100%)         
  - Installing twig/twig (v1.41.0): Downloading (100%)         
  - Installing symfony/translation (v3.4.27): Downloading (100%)         
  - Installing symfony/process (v3.4.27): Downloading (100%)         
  - Installing symfony/filesystem (v3.4.27): Downloading (100%)         
  - Installing symfony/event-dispatcher (v3.4.27): Downloading (100%)         
  - Installing psr/container (1.0.0): Downloading (100%)         
  - Installing symfony/dependency-injection (v3.4.27): Downloading (100%)         
  - Installing symfony/config (v3.4.27): Downloading (100%)         
  - Installing stecman/symfony-console-completion (0.10.1): Downloading (100%)         
  - Installing drupal/console-en (1.8.0): Downloading (100%)         
  - Installing dflydev/placeholder-resolver (v1.0.2): Downloading (100%)         
  - Installing dflydev/dot-access-data (v1.1.0): Downloading (100%)         
  - Installing dflydev/dot-access-configuration (v1.0.3): Downloading (100%)         
  - Installing drupal/console-core (1.8.0): Downloading (100%)         
  - Installing doctrine/collections (v1.6.1): Loading from cache
  - Installing doctrine/lexer (v1.0.1): Downloading (100%)         
  - Installing doctrine/annotations (v1.6.1): Downloading (100%)         
  - Installing alchemy/zippy (0.4.3): Downloading (100%)         
  - Installing drupal/console (1.8.0): Downloading (100%)         
  - Installing justinrainbow/json-schema (5.2.8): Downloading (100%)         
  - Installing symfony/phpunit-bridge (v3.4.27): Downloading (100%)         
  - Installing sebastian/recursion-context (3.0.0): Downloading (100%)         
  - Installing doctrine/instantiator (1.2.0): Downloading (100%)         
  - Installing sebastian/exporter (3.1.0): Downloading (100%)         
  - Installing sebastian/diff (2.0.1): Downloading (100%)         
  - Installing sebastian/comparator (2.1.3): Downloading (100%)         
  - Installing phpdocumentor/reflection-common (1.0.1): Downloading (100%)         
  - Installing phpdocumentor/type-resolver (0.4.0): Downloading (100%)         
  - Installing phpdocumentor/reflection-docblock (4.3.1): Downloading (100%)         
  - Installing phpspec/prophecy (1.8.0): Downloading (100%)         
  - Installing sebastian/version (2.0.1): Downloading (100%)         
  - Installing sebastian/resource-operations (1.0.0): Downloading (100%)         
  - Installing sebastian/object-reflector (1.1.1): Downloading (100%)         
  - Installing sebastian/object-enumerator (3.0.3): Downloading (100%)         
  - Installing sebastian/global-state (2.0.0): Downloading (100%)         
  - Installing sebastian/environment (3.1.0): Downloading (100%)         
  - Installing phpunit/php-text-template (1.2.1): Downloading (100%)         
  - Installing phpunit/phpunit-mock-objects (5.0.10): Downloading (100%)         
  - Installing phpunit/php-timer (1.0.9): Downloading (100%)         
  - Installing phpunit/php-file-iterator (1.4.5): Downloading (100%)         
  - Installing theseer/tokenizer (1.1.2): Downloading (100%)         
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%)         
  - Installing phpunit/php-token-stream (2.0.2): Downloading (100%)         
  - Installing phpunit/php-code-coverage (5.3.2): Downloading (100%)         
  - Installing phar-io/version (1.0.1): Downloading (100%)         
  - Installing phar-io/manifest (1.0.1): Downloading (100%)         
  - Installing myclabs/deep-copy (1.9.1): Downloading (100%)         
  - Installing phpunit/phpunit (6.5.14): Downloading (100%)         
  - Installing mikey179/vfsstream (v1.6.6): Downloading (100%)         
  - Installing jcalderonzumba/gastonjs (v1.2.0): Downloading (100%)         
  - Installing behat/mink (dev-master 6d637f7): Cloning 6d637f7af4 from cache
  - Installing jcalderonzumba/mink-phantomjs-driver (v0.3.3): Downloading (100%)         
  - Installing squizlabs/php_codesniffer (3.4.2): Downloading (100%)         
  - Installing drupal/coder (8.3.3): Cloning a33d3388fb from cache
  - Installing instaclick/php-webdriver (1.4.5): Downloading (100%)         
  - Installing behat/mink-selenium2-driver (dev-master 8684ee4): Cloning 8684ee4e63 from cache
  - Installing symfony/browser-kit (v4.2.8): Downloading (100%)         
  - Installing fabpot/goutte (v3.2.3): Downloading (100%)         
  - Installing behat/mink-browserkit-driver (1.3.3): Downloading (100%)         
  - Installing behat/mink-goutte-driver (v1.2.1): Downloading (100%)         
  - Installing pear/pear_exception (v1.0.0): Downloading (100%)         
  - Installing pear/console_getopt (v1.4.2): Downloading (100%)         
  - Installing pear/pear-core-minimal (v1.10.9): Downloading (100%)         
  - Installing pear/archive_tar (1.4.7): Downloading (100%)         
  - Installing symfony/http-kernel (v3.4.27): Downloading (100%)         
  - Installing asm89/stack-cors (1.2.0): Downloading (100%)         
  - Installing zendframework/zend-diactoros (1.8.6): Downloading (100%)         
  - Installing symfony/psr-http-message-bridge (v1.2.0): Downloading (100%)         
  - Installing masterminds/html5 (2.6.0): Downloading (100%)         
  - Installing egulias/email-validator (2.1.8): Downloading (100%)         
  - Installing stack/builder (v1.0.5): Downloading (100%)         
  - Installing zendframework/zend-stdlib (3.2.1): Downloading (100%)         
  - Installing zendframework/zend-escaper (2.6.0): Downloading (100%)         
  - Installing zendframework/zend-feed (2.12.0): Downloading (100%)         
  - Installing easyrdf/easyrdf (0.9.1): Downloading (100%)         
  - Installing symfony/routing (v3.4.27): Downloading (100%)         
  - Installing symfony-cmf/routing (1.4.1): Downloading (100%)         
  - Installing doctrine/reflection (v1.0.0): Downloading (100%)         
  - Installing doctrine/event-manager (v1.0.0): Downloading (100%)         
  - Installing doctrine/cache (v1.8.0): Downloading (100%)         
  - Installing doctrine/persistence (1.1.1): Downloading (100%)         
  - Installing doctrine/inflector (v1.3.0): Downloading (100%)         
  - Installing doctrine/common (v2.10.0): Downloading (100%)         
  - Installing brumann/polyfill-unserialize (v1.0.3): Downloading (100%)         
  - Installing typo3/phar-stream-wrapper (v2.1.2): Downloading (100%)         
  - Installing symfony/polyfill-iconv (v1.11.0): Downloading (100%)         
  - Installing symfony/validator (v3.4.27): Downloading (100%)         
  - Installing symfony/serializer (v3.4.27): Downloading (100%)         
  - Installing symfony/class-loader (v3.4.27): Downloading (100%)         
  - Installing drupal/core (8.7.1): Downloading (100%)         
  - Installing webflo/drupal-core-require-dev (8.7.1)
  - Installing container-interop/container-interop (1.2.0): Downloading (100%)         
  - Installing league/container (2.4.1): Downloading (100%)         
  - Installing grasmash/yaml-expander (1.4.0): Downloading (100%)         
  - Installing grasmash/expander (1.0.0): Downloading (100%)         
  - Installing consolidation/config (1.2.1): Downloading (100%)         
  - Installing consolidation/site-alias (3.0.0): Downloading (100%)         
  - Installing consolidation/site-process (2.0.2): Downloading (100%)         
  - Installing consolidation/output-formatters (3.4.1): Downloading (100%)         
  - Installing consolidation/annotated-command (2.12.0): Downloading (100%)         
  - Installing consolidation/log (1.1.1): Downloading (100%)         
  - Installing consolidation/self-update (1.1.5): Downloading (100%)         
  - Installing consolidation/robo (1.4.9): Downloading (100%)         
  - Installing consolidation/filter-via-dot-access-data (1.0.0): Downloading (100%)         
  - Installing chi-teck/drupal-code-generator (1.29.1): Downloading (100%)         
  - Installing drush/drush (9.6.2): Downloading (100%)         
  - Installing vlucas/phpdotenv (v2.6.1): Downloading (100%)         
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump)
symfony/console suggests installing symfony/lock
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
symfony/dependency-injection suggests installing symfony/expression-language (For using expressions in service container configuration)
symfony/dependency-injection suggests installing symfony/proxy-manager-bridge (Generate service proxies to lazy load them)
alchemy/zippy suggests installing ext-zip (To use the ZipExtensionAdapter)
alchemy/zippy suggests installing guzzle/guzzle (To use the GuzzleTeleporter with Guzzle 3)
drupal/console suggests installing symfony/thanks (Thank your favorite PHP projects on Github using the CLI!)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/phpunit-mock-objects suggests installing ext-soap (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.5.5)
phpunit/phpunit suggests installing phpunit/php-invoker (^1.1)
phpunit/phpunit suggests installing ext-xdebug (*)
behat/mink suggests installing behat/mink-zombie-driver (fast and JS-enabled headless driver for any app (requires node.js))
behat/mink suggests installing dmore/chrome-mink-driver (fast and JS-enabled driver for any app (requires chromium or google chrome))
pear/archive_tar suggests installing ext-bz2 (Bz2 compression support.)
pear/archive_tar suggests installing ext-xz (Lzma2 compression support.)
symfony/psr-http-message-bridge suggests installing nyholm/psr7 (For a super lightweight PSR-7/17 implementation)
egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation)
zendframework/zend-feed suggests installing zendframework/zend-cache (Zend\Cache component, for optionally caching feeds between requests)
zendframework/zend-feed suggests installing zendframework/zend-db (Zend\Db component, for use with PubSubHubbub)
zendframework/zend-feed suggests installing zendframework/zend-http (Zend\Http for PubSubHubbub, and optionally for use with Zend\Feed\Reader)
zendframework/zend-feed suggests installing zendframework/zend-servicemanager (Zend\ServiceManager component, for easily extending ExtensionManager implementations)
zendframework/zend-feed suggests installing zendframework/zend-validator (Zend\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent)
easyrdf/easyrdf suggests installing ml/json-ld (~1.0)
symfony/routing suggests installing symfony/expression-language (For using expression matching)
doctrine/cache suggests installing alcaeus/mongo-php-adapter (Required to use legacy MongoDB driver)
symfony/validator suggests installing psr/cache-implementation (For using the metadata cache.)
symfony/validator suggests installing symfony/intl
symfony/validator suggests installing symfony/property-access (For accessing properties within comparison constraints)
symfony/validator suggests installing symfony/expression-language (For using the Expression validator)
symfony/serializer suggests installing psr/cache-implementation (For using the metadata cache.)
symfony/serializer suggests installing symfony/property-info (To deserialize relations.)
symfony/serializer suggests installing symfony/property-access (For using the ObjectNormalizer.)
symfony/class-loader suggests installing symfony/polyfill-apcu (For using ApcClassLoader on HHVM)
consolidation/robo suggests installing henrikbjorn/lurker (For monitoring filesystem changes in taskWatch)
consolidation/robo suggests installing patchwork/jsqueeze (For minifying JS files in taskMinify)
consolidation/robo suggests installing natxet/CssMin (For minifying CSS files in taskMinify)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
  - .csslintrc (https://git.drupalcode.org/project/drupal/raw/8.7.1/.csslintrc): Downloading (100%)         
  - .editorconfig (https://git.drupalcode.org/project/drupal/raw/8.7.1/.editorconfig): Downloading (100%)         
  - .eslintignore (https://git.drupalcode.org/project/drupal/raw/8.7.1/.eslintignore): Downloading (100%)         
  - .eslintrc.json (https://git.drupalcode.org/project/drupal/raw/8.7.1/.eslintrc.json): Downloading (100%)         
  - .gitattributes (https://git.drupalcode.org/project/drupal/raw/8.7.1/.gitattributes): Downloading (100%)         
  - .ht.router.php (https://git.drupalcode.org/project/drupal/raw/8.7.1/.ht.router.php): Downloading (100%)         
  - .htaccess (https://git.drupalcode.org/project/drupal/raw/8.7.1/.htaccess): Downloading (100%)         
  - index.php (https://git.drupalcode.org/project/drupal/raw/8.7.1/index.php): Downloading (100%)         
  - robots.txt (https://git.drupalcode.org/project/drupal/raw/8.7.1/robots.txt): Downloading (100%)         
  - sites/default/default.services.yml (https://git.drupalcode.org/project/drupal/raw/8.7.1/sites/default/default.services.yml): Downloading (100%)         
  - sites/default/default.settings.php (https://git.drupalcode.org/project/drupal/raw/8.7.1/sites/default/default.settings.php): Downloading (100%)         
  - sites/development.services.yml (https://git.drupalcode.org/project/drupal/raw/8.7.1/sites/development.services.yml): DowDownloading (100%)         
  - sites/example.settings.local.php (https://git.drupalcode.org/project/drupal/raw/8.7.1/sites/example.settings.local.php): Downloading (100%)         
  - sites/example.sites.php (https://git.drupalcode.org/project/drupal/raw/8.7.1/sites/example.sites.php): Downloading (connDownloading (100%)         
  - update.php (https://git.drupalcode.org/project/drupal/raw/8.7.1/update.php): Downloading (100%)         
  - web.config (https://git.drupalcode.org/project/drupal/raw/8.7.1/web.config): Downloading (100%)         
  - ../.editorconfig (https://git.drupalcode.org/project/drupal/raw/8.7.1/.editorconfig): Downloading (100%)         
  - ../.gitattributes (https://git.drupalcode.org/project/drupal/raw/8.7.1/.gitattributes): Downloading (100%)         
> DrupalProject\composer\ScriptHandler::createRequiredFiles
Created a sites/default/settings.php file with chmod 0666
Created a sites/default/files directory with chmod 0777
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ pwd
/var/www/booking.nicholasllewellyn.co.uk/html
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ ls -l -a
total 36
drwxr-s--- 4 nllewellyn www-data  4096 May 22 13:46 .
drwxr-xr-x 3 root       root      4096 May 22 12:46 ..
-rw-rw-r-- 1 nllewellyn www-data    61 May 22 13:38 composer.json
-rw-rw-r-- 1 nllewellyn www-data 12687 May 22 13:39 composer.lock
drwxrwsr-x 6 nllewellyn www-data  4096 May 22 13:55 my_site_name_dir
drwxrwsr-x 6 nllewellyn www-data  4096 May 22 13:39 vendor
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$ ls -l -a
total 388
drwxrwsr-x  6 nllewellyn www-data   4096 May 22 13:55 .
drwxr-s---  4 nllewellyn www-data   4096 May 22 13:46 ..
-rw-rw-r--  1 nllewellyn www-data    357 May 22 13:54 .editorconfig
-rw-rw-r--  1 nllewellyn www-data    746 May 22 13:46 .env.example
-rw-rw-r--  1 nllewellyn www-data   3858 May 22 13:54 .gitattributes
-rw-rw-r--  1 nllewellyn www-data    466 May 22 13:46 .gitignore
-rw-rw-r--  1 nllewellyn www-data   1644 May 22 13:46 .travis.yml
-rw-rw-r--  1 nllewellyn www-data  18046 May 22 13:46 LICENSE
-rw-rw-r--  1 nllewellyn www-data   6495 May 22 13:46 README.md
-rw-rw-r--  1 nllewellyn www-data   2474 May 22 13:46 composer.json
-rw-rw-r--  1 nllewellyn www-data 308303 May 22 13:54 composer.lock
drwxrwsr-x  4 nllewellyn www-data   4096 May 22 13:46 drush
-rw-rw-r--  1 nllewellyn www-data    414 May 22 13:46 load.environment.php
-rw-rw-r--  1 nllewellyn www-data    481 May 22 13:46 phpunit.xml.dist
drwxrwsr-x  3 nllewellyn www-data   4096 May 22 13:46 scripts
drwxrwsr-x 55 nllewellyn www-data   4096 May 22 13:54 vendor
drwxrwsr-x  7 nllewellyn www-data   4096 May 22 13:54 web
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir/web$ ls -a -l
total 84
drwxrwsr-x  7 nllewellyn www-data 4096 May 22 13:54 .
drwxrwsr-x  6 nllewellyn www-data 4096 May 22 13:55 ..
-rw-rw-r--  1 nllewellyn www-data 1025 May 22 13:54 .csslintrc
-rw-rw-r--  1 nllewellyn www-data  357 May 22 13:54 .editorconfig
-rw-rw-r--  1 nllewellyn www-data  151 May 22 13:54 .eslintignore
-rw-rw-r--  1 nllewellyn www-data   41 May 22 13:54 .eslintrc.json
-rw-rw-r--  1 nllewellyn www-data 3858 May 22 13:54 .gitattributes
-rw-rw-r--  1 nllewellyn www-data 2314 May 22 13:54 .ht.router.php
-rw-rw-r--  1 nllewellyn www-data 7866 May 22 13:54 .htaccess
-rw-rw-rw-  1 nllewellyn www-data  385 May 22 13:54 autoload.php
drwxrwsr-x 12 nllewellyn www-data 4096 May 22 13:51 core
-rw-rw-r--  1 nllewellyn www-data  549 May 22 13:54 index.php
drwxrwsr-x  2 nllewellyn www-data 4096 May 22 13:54 modules
drwxrwsr-x  2 nllewellyn www-data 4096 May 22 13:54 profiles
-rw-rw-r--  1 nllewellyn www-data 1594 May 22 13:54 robots.txt
drwxrwsr-x  3 nllewellyn www-data 4096 May 22 13:54 sites
drwxrwsr-x  2 nllewellyn www-data 4096 May 22 13:54 themes
-rw-rw-r--  1 nllewellyn www-data  848 May 22 13:54 update.php
-rw-rw-r--  1 nllewellyn www-data 4555 May 22 13:54 web.config
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir/web$
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir/web$ cd sites
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir/web/sites$ ls -l
total 20
drwxrwsr-x 3 nllewellyn www-data 4096 May 22 13:54 default
-rw-rw-r-- 1 nllewellyn www-data  310 May 22 13:54 development.services.yml
-rw-rw-r-- 1 nllewellyn www-data 4513 May 22 13:54 example.settings.local.php
-rw-rw-r-- 1 nllewellyn www-data 2363 May 22 13:54 example.sites.php
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir/web/sites$
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir/web/sites$ cd default/
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir/web/sites/default$ ls -l
total 76
-rw-rw-r-- 1 nllewellyn www-data  6762 May 22 13:54 default.services.yml
-rw-rw-r-- 1 nllewellyn www-data 31398 May 22 13:54 default.settings.php
drwxrwsrwx 2 nllewellyn www-data  4096 May 22 13:54 files
-rw-rw-rw- 1 nllewellyn www-data 31446 May 22 13:54 settings.php
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir/web/sites/default$

Installing the BAT Module with composer

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$ composer require Roomify/Bat
Using version ^1.2 for roomify/bat
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing roomify/bat (1.2.0): Downloading (100%)         
Writing lock file
Generating autoload files
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html$
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$ composer require Roomify/Bat
Using version ^1.2 for roomify/bat
./composer.json has been updated
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing roomify/bat (1.2.0): Loading from cache
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
> DrupalProject\composer\ScriptHandler::createRequiredFiles
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$ composer require drupal/bat
Using version ^1.0 for drupal/bat
./composer.json has been updated
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing drupal/bat (1.0.0): Downloading (100%)         
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
> DrupalProject\composer\ScriptHandler::createRequiredFiles
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$ composer require drupal/bat_api
Using version ^1.0 for drupal/bat_api
./composer.json has been updated
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 5 installs, 0 updates, 0 removals
  - Installing drupal/ctools (3.2.0): Downloading (100%)         
  - Installing drupal/services (4.0.0-beta5): Downloading (100%)         
  - Installing drupal/bat_unit (1.0.0)
  - Installing drupal/bat_event (1.0.0)
  - Installing drupal/bat_api (1.0.0): Downloading (100%)         
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
> DrupalProject\composer\ScriptHandler::createRequiredFiles
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$
nll[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$ composer require drupal/fullcalendar
Using version ^[email protected] for drupal/fullcalendar
./composer.json has been updated
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing drupal/fullcalendar (1.0.0-alpha2): Downloading (100%)         
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
> DrupalProject\composer\ScriptHandler::createRequiredFiles
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$

Installing Drupal Commerce with Composer

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$ composer require drupal/commerce
Using version ^2.13 for drupal/commerce
./composer.json has been updated
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 9 installs, 0 updates, 0 removals
  - Installing commerceguys/intl (v1.0.4): Downloading (100%)         
  - Installing drupal/state_machine (1.0.0-rc1): Downloading (100%)         
  - Installing drupal/entity (1.0.0-rc2): Downloading (100%)         
  - Installing drupal/profile (1.0.0-rc4): Downloading (100%)         
  - Installing drupal/entity_reference_revisions (1.6.0): Downloading (100%)         
  - Installing drupal/inline_entity_form (1.0.0-rc1): Downloading (100%)         
  - Installing commerceguys/addressing (v1.0.3): Downloading (100%)         
  - Installing drupal/address (1.6.0): Downloading (100%)         
  - Installing drupal/commerce (2.13.0): Downloading (100%)         
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
> DrupalProject\composer\ScriptHandler::createRequiredFiles
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$

Configuring MYSQL

We just need to create a simple MYSQL database, and user for Drupal.

[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$ sudo mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 351
Server version: 5.7.26-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.06 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected, 1 warning (0.11 sec)

mysql> \q
Bye
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$ mysql -u user -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 352
Server version: 5.7.26-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> CREATE DATABASE database;
Query OK, 1 row affected (0.00 sec)


mysql> \q
Bye
[email protected]:/var/www/booking.nicholasllewellyn.co.uk/html/my_site_name_dir$

A bit of Apache confirguration

sudo a2enmod rewrite
sudo vim /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin [email protected]
        DocumentRoot /var/www/html

                <Location /redmine>
                PassengerRuby /usr/bin/ruby
                RailsEnv production
                RackBaseURI /redmine
                Options -MultiViews
                </Location>

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

# Sub domain a.localhost
<VirtualHost *:80>
        DocumentRoot /var/www/bookings.nicholasllewellyn.co.uk/html/my_site_name_dir/web
        ServerName bookings.nicholasllewellyn.co.uk

        <Directory /var/www/bookings.nicholasllewellyn.co.uk/html/my_site_name_dir/web>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
                  RewriteEngine on
                    RewriteBase /
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteCond %{REQUEST_FILENAME} !-d
                    RewriteCond %{REQUEST_URI} !=/favicon.ico
                    RewriteRule ^ index.php [L]
        </Directory>
</VirtualHost>

Php / Apache PDO not installed?

[email protected]:~$ sudo apt-get install php7.2-mysql
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  php7.2-mysql
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 117 kB of archives.
After this operation, 449 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 php7.2-mysql amd64 7.2.17-0ubuntu0.18.04.1 [117 kB]
Fetched 117 kB in 0s (719 kB/s)  
Selecting previously unselected package php7.2-mysql.
(Reading database ... 134398 files and directories currently installed.)
Preparing to unpack .../php7.2-mysql_7.2.17-0ubuntu0.18.04.1_amd64.deb ...
Unpacking php7.2-mysql (7.2.17-0ubuntu0.18.04.1) ...
Setting up php7.2-mysql (7.2.17-0ubuntu0.18.04.1) ...
Processing triggers for libapache2-mod-php7.2 (7.2.17-0ubuntu0.18.04.1) ...
[email protected]:~$ sudo phpenmod pdo_mysql
[email protected]:~$ sudo service apache2 restart
[email protected]:~$

Installing Drupal

Visiting the install.php file revealed the PDO issue, but after resolving that, the CMS installed cleanly and quickly! Upon checking the installed modules, the extra ones are installed and ready to be enabled! Well I never! I have never seen Drupal Commerce modules become available so easily. Well, now the hard work begins I suppose.

CORE


Actions
Perform tasks on specific events triggered within the system.

Activity Tracker
Enables tracking of recent content for users.

Aggregator
Aggregates syndicated content (RSS, RDF, and Atom feeds) from external sources.

Automated Cron
Provides an automated way to run cron jobs, by executing them at the end of a server response.

Ban
Enables banning of IP addresses.

BigPipe
Sends pages using the BigPipe technique that allows browsers to show them much faster.

Block
Controls the visual building blocks a page is constructed with. Blocks are boxes of content rendered into an area, or region, of a web page.

Book
Allows users to create and organize related content in an outline.

Breakpoint
Manage breakpoints and breakpoint groups for responsive designs.

CKEditor
WYSIWYG editing for rich text fields using CKEditor.

Color
Allows administrators to change the color scheme of compatible themes.

Comment
Allows users to comment on and discuss published content.

Configuration Manager
Allows administrators to manage configuration changes.

Contact
Enables the use of both personal and site-wide contact forms.

Content Moderation
Provides moderation states for content.

Contextual Links
Provides contextual links to perform actions related to elements on a page.

Custom Block
Allows the creation of custom blocks through the user interface.

Custom Menu Links
Allows administrators to create custom menu links.

Database Logging
Logs and records system events to the database.

Field
Field API to add fields to entities like nodes and users.

Field UI
User interface for the Field API.

Filter
Filters content in preparation for display.

Forum
Provides discussion forums.

Help
Manages the display of online help.

History
Records which user has read which content.

Inline Form Errors
Places error messages adjacent to form inputs, for improved usability and accessibility.

Internal Dynamic Page Cache
Caches pages for any user, handling dynamic content correctly.

Internal Page Cache
Caches pages for anonymous users. Use when an external page cache is not available.

Layout Builder
Allows users to add and arrange blocks and content fields directly on the content.

Layout Discovery
Provides a way for modules or themes to register layouts.

Media
Manages the creation, configuration, and display of media items.

Menu UI
Allows administrators to customize the site navigation menu.

Node
Allows content to be submitted to the site and displayed on pages.

Path
Allows users to rename URLs.

Quick Edit
In-place content editing.

RDF
Enriches your content with metadata to let other applications (e.g. search engines, aggregators) better understand its relationships and attributes.

Responsive Image
Provides an image formatter and breakpoint mappings to output responsive images using the HTML5 picture tag.

Search
Enables site-wide keyword searching.

Settings Tray
Allows users to directly edit the configuration of blocks on the current page.

Shortcut
Allows users to manage customizable lists of shortcut links.

Statistics
Logs content statistics for your site.

Syslog
Logs and records system events to syslog.

System
Handles general site configuration for administrators.

Taxonomy
Enables the categorization of content.

Testing
Provides a framework for unit and functional testing.

Text Editor
Provides a means to associate text formats with text editor libraries such as WYSIWYGs or toolbars.

Toolbar
Provides a toolbar that shows the top-level administration menu items and links from other modules.

Tour
Provides guided tours.

Update Manager
Checks for available updates, and can securely install or update modules and themes via a web interface.

User
Manages the user registration and login system.

Views
Create customized lists and queries from your database.

Views UI
Administrative interface for Views.

Workflows
Provides UI and API for managing workflows. This module can be used with the Content moderation module to add highly customizable workflows to content.
BAT


BAT Booking
BAT Booking

BAT Booking Example
BAT Booking Example

BAT Calendar Reference
Provides a field to reference and display event information on any fieldable entity.

BAT Event
Create and administer events for BAT.

BAT Event UI
Interface support to the BAT Event module.

BAT Facets
Facet API facets for BAT.

BAT Fullcalendar
Provides a generalized API for manipulating FullCalendar widgets for BAT

BAT Options
Options field type for BAT.

BAT Unit
Create and manage units (e.g. rooms).

Booking and Availability Management
A generalized Booking and Availability Management Framework.

Booking and Availability Management API
Provides API access to BAT Booking and Availability Data for Drupal 8
CHAOS TOOL SUITE


Chaos Tools
Provides a number of utility and helper APIs for Drupal developers and site builders.
CHAOS TOOL SUITE (EXPERIMENTAL)


Chaos Tools Blocks
Provides improvements to blocks that will one day be added to Drupal core.

Chaos Tools Views
A set of improvements to the core Views code that allows for greater control over Blocks.
COMMERCE


Commerce
Defines common functionality for all Commerce modules.

Commerce Cart
Implements the shopping cart system and add to cart features.

Commerce Checkout
Provides configurable checkout flows.

Commerce Log
Provides activity logs for Commerce entities.

Commerce Order
Defines the Order entity and associated features.

Commerce Payment
Provides payment functionality.

Commerce Payment Example
Provides payment gateway examples.

Commerce Price
Defines the Currency entity.

Commerce Product
Defines the Product entity and associated features.

Commerce Promotion
Provides a UI for managing promotions.

Commerce Store
Defines the Store entity and associated features.

Commerce Tax
Provides tax functionality.
CORE (EXPERIMENTAL)


Field Layout
Allows users to configure the display and form display by arranging fields in several columns.

Media library
Enhances the media list with additional features to more easily find and use existing media items.

Migrate Drupal Multilingual
Provides a requirement for multilingual migrations.

Workspaces
Allows users to stage content or preview a full site by using multiple workspaces on a single site.
FIELDS


Inline Entity Form
Provides a widget for inline management (creation, modification, removal) of referenced entities.
FIELD TYPES


Address
Provides functionality for handling postal addresses.

Datetime
Defines datetime form elements and a datetime field type.

Datetime Range
Provides the ability to store end dates.

Entity Reference Revisions
Adds a Entity Reference field type with revision support.

File
Defines a file field type.

Image
Defines an image field type and provides image manipulation tools.

Link
Provides a simple link field type.

Options
Defines selection, check box and radio button widgets for text and numeric fields.

Telephone
Defines a field type for telephone numbers.

Text
Defines simple text field types.
FULLCALENDAR


FullCalendar
Provides a views style plugin for FullCalendar

FullCalendar Legend
Show the bundle names of content types on a FullCalendar. Intended for use with FullCalendar Colors.

FullCalendar Options
FullCalendar configuration extenders.
MIGRATION


Migrate
Handles migrations

Migrate Drupal
Contains migrations from older Drupal versions.

Migrate Drupal UI
Provides a user interface for migrating from older Drupal versions.
MULTILINGUAL


Configuration Translation
Provides a translation interface for configuration.

Content Translation
Allows users to translate content entities.

Interface Translation
Translates the built-in user interface.

Language
Allows users to configure languages and apply them to content.
OTHER


Entity
Provides expanded entity APIs, which will be moved to Drupal core one day.

Entity Mask
Allows an entity type to borrow the fields and display configuration of another entity type.

Profile
Provides configurable user profiles.

State Machine
Provides code-driven workflow functionality.
SERVICES


Services
A standardized solution of integrating external applications with Drupal.

Services Test
A service provider test for the Services module.
WEB SERVICES


HAL
Serializes entities using Hypertext Application Language.

HTTP Basic Authentication
Provides the HTTP Basic authentication provider

JSON:API
Exposes entities as a JSON:API-specification-compliant web API.

RESTful Web Services
Exposes entities and other resources as RESTful web API

Serialization
Provides a service for (de)serializing data to/from formats such as JSON and XML

Configuring backups

Modified this Script for MYSQL backups and included creating a tarball of the file structure.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash

################################################################
##
##   MySQL Database Backup Script
##   Written By: Rahul Kumar
##   URL: https://tecadmin.net/bash-script-mysql-database-backup/
##   Last Update: Jan 05, 2019
##
################################################################

export PATH=/bin:/usr/bin:/usr/local/bin
TODAY=`date +"%d%b%Y"`

################################################################
################## Update below values  ########################

DB_BACKUP_PATH='/backup/dbbackup'
MYSQL_HOST='host'
MYSQL_PORT='3306'
MYSQL_USER='username'
MYSQL_PASSWORD='password'
DATABASE_NAME='database'
BACKUP_RETAIN_DAYS=30   ## Number of days to keep local backup copy

#################################################################

mkdir -p ${DB_BACKUP_PATH}/${TODAY}
pushd ${DB_BACKUP_PATH}/${TODAY}
echo "Tarring website folder"
tar -cpvzf bookings-${TODAY}.tgz /var/www/bookings.nicholasllewellyn.co.uk
popd

echo "Backup started for database - ${DATABASE_NAME}"


mysqldump -h ${MYSQL_HOST} \
                  -P ${MYSQL_PORT} \
                  -u ${MYSQL_USER} \
                  -p${MYSQL_PASSWORD} \
                  ${DATABASE_NAME} | gzip > ${DB_BACKUP_PATH}/${TODAY}/${DATABASE_NAME}-${TODAY}.sql.gz

if [ $? -eq 0 ]; then
  echo "Database backup successfully completed"
else
  echo "Error found during backup"
fi


##### Remove backups older than {BACKUP_RETAIN_DAYS} days  #####

DBDELDATE=`date +"%d%b%Y" --date="${BACKUP_RETAIN_DAYS} days ago"`

if [ ! -z ${DB_BACKUP_PATH} ]; then
      cd ${DB_BACKUP_PATH}
      if [ ! -z ${DBDELDATE} ] && [ -d ${DBDELDATE} ]; then
            rm -rf ${DBDELDATE}
      fi
fi

### End of script ####i

Configuring and setting up Bat (Fail)

I would like to run through the default setup for BAT, as per the documentation if such a thing exists. I'll for now, make a backup of the entire folder structure and the SQL database, as it seems to be working and I'll be able to quickly restore if any issues are encountered.

Oh well, after enabling FullCalendar I started getting errors in the drupal install which prevent me from accessing any of the admin console. So lets drop the lot and try Drupal 7. I wonder if I can use the existing config to deploy Drupal 7? I mean I was using /drupal-project:8.x-dev, so what did I expect?

Cleaning up the previous project

Let's try the following.

[email protected]:/var/www/bookings.nicholasllewellyn.co.uk/html$ ls -l -a
total 36
drwxr-s--- 4 nllewellyn www-data  4096 May 22 13:46 .
drwxr-xr-x 3 root       root      4096 May 22 12:46 ..
-rw-rw-r-- 1 nllewellyn www-data    92 May 22 14:03 composer.json
-rw-rw-r-- 1 nllewellyn www-data 14570 May 22 14:03 composer.lock
drwxrwsr-x 7 nllewellyn www-data  4096 May 22 16:05 my_site_name_dir
drwxrwsr-x 7 nllewellyn www-data  4096 May 22 14:03 vendor
[email protected]:/var/www/bookings.nicholasllewellyn.co.uk/html$ rm -r -f *
[email protected]:/var/www/bookings.nicholasllewellyn.co.uk/html$ ls -l -a
total 8
drwxr-s--- 2 nllewellyn www-data 4096 May 23 09:04 .
drwxr-xr-x 3 root       root     4096 May 22 12:46 ..
[email protected]:/var/www/bookings.nicholasllewellyn.co.uk/html$

That's better.

Drupal 7, installation with Composer, BAT and Drupal Commerce?

Let's try the following.

nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ composer create-project drupal-composer/drupal-project:7.x-dev my_site_name_dir --no-interaction
Installing drupal-composer/drupal-project (7.x-dev b9541d36d3fd26d1a92f069c165cb705299bf100)
  - Installing drupal-composer/drupal-project (7.x-dev b9541d3): Cloning b9541d36d3 from cache
Created project in my_site_name_dir
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 29 installs, 0 updates, 0 removals
  - Installing composer/installers (v1.6.0): Loading from cache
  - Installing cweagans/composer-patches (1.6.6): Downloading (100%)         
Gathering patches for root package.
Gathering patches for dependencies. This might take a minute.
  - Installing drupal-composer/preserve-paths (0.1.5): Downloading (100%)         
  - Installing composer/semver (1.5.0): Loading from cache
  - Installing drupal/drupal (7.67.0): Downloading (100%)         
  - Installing drupal/composer_autoloader (1.3.0): Downloading (100%)         
  - Installing symfony/polyfill-ctype (v1.11.0): Loading from cache
  - Installing webmozart/assert (1.4.0): Loading from cache
  - Installing webmozart/path-util (2.3.0): Loading from cache
  - Installing webflo/drupal-finder (1.1.0): Loading from cache
  - Installing pear/console_table (v1.3.1): Downloading (100%)         
  - Installing symfony/finder (v3.4.27): Loading from cache
  - Installing symfony/event-dispatcher (v3.4.27): Loading from cache
  - Installing psr/log (1.1.0): Loading from cache
  - Installing symfony/debug (v4.2.8): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.11.0): Loading from cache
  - Installing symfony/console (v3.4.27): Loading from cache
  - Installing symfony/var-dumper (v3.4.27): Downloading (100%)         
  - Installing symfony/yaml (v3.4.27): Loading from cache
  - Installing dflydev/dot-access-data (v1.1.0): Loading from cache
  - Installing consolidation/output-formatters (3.4.1): Loading from cache
  - Installing consolidation/annotated-command (2.12.0): Loading from cache
  - Installing jakub-onderka/php-console-color (v0.2): Loading from cache
  - Installing jakub-onderka/php-console-highlighter (v0.4): Loading from cache
  - Installing dnoegel/php-xdg-base-dir (0.1): Loading from cache
  - Installing nikic/php-parser (v4.2.1): Loading from cache
  - Installing psy/psysh (v0.9.9): Loading from cache
  - Installing drush/drush (8.2.3): Downloading (100%)         
  - Installing symfony/filesystem (v3.4.27): Loading from cache
pear/console_table suggests installing pear/Console_Color2 (>=0.1.2)
symfony/event-dispatcher suggests installing symfony/dependency-injection
symfony/event-dispatcher suggests installing symfony/http-kernel
symfony/console suggests installing symfony/lock
symfony/console suggests installing symfony/process
symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump)
symfony/var-dumper suggests installing ext-symfony_debug
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
drush/drush suggests installing drush/config-extra (Provides configuration workflow commands, such as config-merge.)
Writing lock file
Generating autoload files
> DrupalProject\composer\ScriptHandler::createRequiredFiles
Create a sites/default/settings.php file with chmod 0666
Create a sites/default/files directory with chmod 0777
> DrupalProject\composer\ScriptHandler::removeInternalFiles
nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ history | grep "composer require"
  102  composer require alchemy/zippy
  130  composer require Roomify/Bat
  131  composer require drupal/commerce
  135  composer require drupal/commerce
  136  composer require Roomify/Bat
  137  composer require drupal/bat
  138  composer require drupal/bat_api
  139  composer require drupal/fullcalendar
  289  composer require drupal/console:~1.0 --prefer-dist --optimize-autoloader
  325  history | grep "composer require"
nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ composer require alchemy/zippy
Using version ^0.4.9 for alchemy/zippy
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 6 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-mbstring (v1.11.0): Loading from cache
  - Installing symfony/process (v4.2.8): Loading from cache
  - Installing symfony/polyfill-ctype (v1.11.0): Loading from cache
  - Installing symfony/filesystem (v4.2.8): Loading from cache
  - Installing doctrine/collections (v1.6.1): Loading from cache
  - Installing alchemy/zippy (0.4.9): Loading from cache
alchemy/zippy suggests installing ext-zip (To use the ZipExtensionAdapter)
alchemy/zippy suggests installing guzzlehttp/guzzle (To use the GuzzleTeleporter with Guzzle 6)
alchemy/zippy suggests installing guzzle/guzzle (To use the GuzzleTeleporter with Guzzle 3)
Writing lock file
Generating autoload files
nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ composer require Roomify/Bat
Using version ^1.2 for roomify/bat
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing roomify/bat (1.2.0): Loading from cache
Writing lock file
Generating autoload files
nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ composer require drupal/commerce


  [InvalidArgumentException]               
  Could not find package drupal/commerce.  

  Did you mean this?                       
      drupal/commerce_taxcloud             


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]...      

nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ composer require drupal/commerce


  [InvalidArgumentException]               
  Could not find package drupal/commerce.  

  Did you mean this?                       
      drupal/commerce_taxcloud             


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]...      

nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ composer require Roomify/Bat
Using version ^1.2 for roomify/bat
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files
nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ composer require drupal/bat_api


  [InvalidArgumentException]                                                                                               
  Could not find a matching version of package drupal/bat_api. Check the package spelling, your version constraint and th  
  at the package is available in a stability which matches your minimum-stability (stable).                                


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]...

nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ composer require drupal/fullcalendar


  [InvalidArgumentException]                                                                                               
  Could not find a matching version of package drupal/fullcalendar. Check the package spelling, your version constraint a  
  nd that the package is available in a stability which matches your minimum-stability (stable).                           


require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]...

nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$ composer require drupal/console:~1.0 --prefer-dist --optimize-autoloader

./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - drupal/console 1.8.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.7.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.6.1 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.6.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.5.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.4.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.3.2 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.3.1 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.3.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.2.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.1.1 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.1.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.0.2 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.0.1 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - drupal/console 1.0.0 requires alchemy/zippy 0.4.3 -> satisfiable by alchemy/zippy[0.4.3] but these conflict with your requirements or minimum-stability.
    - Installation request for drupal/console ~1.0 -> satisfiable by drupal/console[1.0.0, 1.0.1, 1.0.2, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.3.2, 1.4.0, 1.5.0, 1.6.0, 1.6.1, 1.7.0, 1.8.0].


Installation failed, reverting ./composer.json to its original content.
nllewellyn@localhost:/var/www/bookings.nicholasllewellyn.co.uk/html$

That's less good. I'm not in the mood for this right now. I'll come back to it later...

links

social