Notes
Prepare git-checkout statements by using `awk` Linux
Having a status like this:
$ git status
modified: composer.json
modified: composer.lock
deleted: config/webform.webform.foo.yml
deleted: config/webform.webform.bar.yml
deleted: config/webform.webform.bazyml
modified: config/core.extension.yml
If I want to revert only `webform` changes by running something like,
$ git checkout config/webform.webform.*
It won't work because those are deleted files, then I can use `awk` to create `checkout` statements,
$ git status | grep webform | awk '{ print "git checkout " $2; }'
git checkout config/webform.webform.foo.yml
git checkout config/webform.webform.bar.yml
git checkout config/webform.webform.baz.yml
Then copy and paste once and enjoy your wonderful day!
EDIT:
As a heads-up from a friend of mine, if we include double quotes it will work, as below:
git checkout "config/webform.webform.*"
Updated 3 paths from the index
PD:
Ha! An extra trick, if you include `| xargs -0 bash -c ` at the end, it will get execute it right away:
git status | grep webform | awk '{ print "git checkout " $2; }' | xargs -0 bash -c
Updated 1 path from the index
Updated 1 path from the index
Updated 1 path from the index
Drupal 8 - raw SQL queries for debugging
/** @var \Drupal\Core\Database\Query\SelectExtender $query */
echo $query->__toString();
var_dump($query->getArguments());
CSS - Typical Device Breakpoints
/* Extra small devices (phones, 600px and down) */
@media only screen and (max-width: 600px) {
}
/* Small devices (portrait tablets and large phones, 600px and up) */
@media only screen and (min-width: 600px) {
}
/* Medium devices (landscape tablets, 768px and up) */
@media only screen and (min-width: 768px) {
}
/* Large devices (laptops/desktops, 992px and up) */
@media only screen and (min-width: 992px) {
}
/* Extra large devices (large laptops and desktops, 1200px and up) */
@media only screen and (min-width: 1200px) {
}
Valid URL from Link field into a Twig template
{# it will work either external or internal link #}
{{ node.field_image_link.get(0).getUrl().toString() }}
Drupal 8 - The following module is missing from the file system... hotfix
drush sql-query "DELETE FROM key_value WHERE collection='system.schema' AND name='module_name';"
Drupal 8 - Country name list by code
/** @var array $countries */
$countries = \Drupal::service('country_manager')
->getList();
// Transform TranslatableMarkup object into a string.
array_walk($countries, function (&$translation) {
/** @var Drupal\Core\StringTranslation\TranslatableMarkup $translation */
$translation = $translation->render();
});
var_dump($countries);
Drupal 8 ships with a service to easily retrieve all countries by code. Be sure to use dependency injection.
Drupal 8 - Remove configuration from database
drush ev "\Drupal::configFactory()->getEditable('configuration.name')->delete();"
RuntimeException: Unable to determine class for field type found in the configuration
drush sqlq "DELETE FROM cache_config"
drush sqlq "DELETE FROM config WHERE name = 'field.storage.<module_name>.<field_machine_name>' OR data LIKE '%field.storage.<module_name>.<field_machine_name>%'"
drush sqlq "DELETE FROM config_snapshot WHERE name = 'field.storage.<module_name>.<field_machine_name>' OR data LIKE '%field.storage.<module_name>.<field_machine_name>%'"
On my case It was happening with "taxonomy_term" module and field named "field_location".
Drupal 8 - Load file entity by URI
/* @var \Drupal\file\FileInterface[] $files */
$files = \Drupal::entityTypeManager()
->getStorage('file')
->loadByProperties(['uri' => $uri]);
Drupal 8 fix-permissions.sh
Script:
#!/bin/bash
# Help menu
print_help() {
cat <<-HELP
This script is used to fix permissions of a Drupal installation
you need to provide the following arguments:
1) Path to your Drupal installation.
2) Username of the user that you want to give files/directories ownership.
3) HTTPD group name (defaults to www-data for Apache).
Usage: (sudo) bash ${0##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP
Example: (sudo) bash ${0##*/} --drupal_path=/usr/local/apache2/htdocs --drupal_user=john --httpd_group=www-data
HELP
exit 0
}
if [ $(id -u) != 0 ]; then
printf "**************************************\n"
printf "* Error: You must run this with sudo or root*\n"
printf "**************************************\n"
print_help
exit 1
fi
drupal_path=${1%/}
drupal_user=${2}
httpd_group="${3:-www-data}"
# Parse Command Line Arguments
while [ "$#" -gt 0 ]; do
case "$1" in
--drupal_path=*)
drupal_path="${1#*=}"
;;
--drupal_user=*)
drupal_user="${1#*=}"
;;
--httpd_group=*)
httpd_group="${1#*=}"
;;
--help) print_help;;
*)
printf "***********************************************************\n"
printf "* Error: Invalid argument, run --help for valid arguments. *\n"
printf "***********************************************************\n"
exit 1
esac
shift
done
if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then
printf "*********************************************\n"
printf "* Error: Please provide a valid Drupal path. *\n"
printf "*********************************************\n"
print_help
exit 1
fi
if [ -z "${drupal_user}" ] || [[ $(id -un "${drupal_user}" 2> /dev/null) != "${drupal_user}" ]]; then
printf "*************************************\n"
printf "* Error: Please provide a valid user. *\n"
printf "*************************************\n"
print_help
exit 1
fi
cd $drupal_path
printf "Changing ownership of all contents of "${drupal_path}":\n user => "${drupal_user}" \t group => "${httpd_group}"\n"
chown -R ${drupal_user}:${httpd_group} .
printf "Changing permissions of all directories inside "${drupal_path}" to "rwxr-x---"...\n"
find . -type d -exec chmod u=rwx,g=rx,o= '{}' \;
printf "Changing permissions of all files inside "${drupal_path}" to "rw-r-----"...\n"
find . -type f -exec chmod u=rw,g=r,o= '{}' \;
printf "Changing permissions of "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
cd sites
find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
printf "Changing permissions of all files inside all "files" directories in "${drupal_path}/sites" to "rw-rw----"...\n"
printf "Changing permissions of all directories inside all "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
for x in ./*/files; do
find ${x} -type d -exec chmod ug=rwx,o= '{}' \;
find ${x} -type f -exec chmod ug=rw,o= '{}' \;
done
echo "Done setting proper permissions on files and directories"
Usage:
sudo fix-permissions.sh \
--drupal_path=/path/to/the/drupal/install \
--drupal_user=your_desired_user