Scripts (Drupal)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

Ik werk graag met scripts:

  • Herhaalbaarheid & uitbreidbaarheid: Als een procedure eenmaal in een script is vastgelegd, kan het - binnen bepaalde grenzen - moeiteloos herhaald worden, en uitgebreid worden
  • Consistentie: Gerelateereed aan herhaalbaarheid: Als eens script het eenmaal doet, kan ik er min-of-meer op vertrouwen dat het de volgende keer op dezelfde manier werkt
  • Zelfdocumenterend: Na een kwartiertje muizen weet ik doorgaans al niet meer wat ik precies heb gedaan. Met scripts heb ik dat probleem niet. Als ik vervolgens de discipline kan opbrengen om steeds met bestaande scripten verder te werken, in plaats van elke keer het wiel opnieuw uit te vinden, dan bevat zo'n script in de loop der tijd een enorme hoeveelheid informatie omtrent de oplossing van een bepaald probleem. Dat is trouwens het belangrijkste argument tegen 'rewrite from scratch' zoals in dit bekende artikel wordt uitgelegd.

Momenteel (januari 2016) heb ik zo'n beetje alles voor Drupal 7 in één script staan:

#!/bin/sh 

# Installatie- & configuratiescript voor Drupal 7
# Strompf - Okt. 2015 - Maart 2016
#
echo "*** Drupal installatie- & configuratiescript... **********************"

####################################################################
# Switches
####################################################################
#
# Drupal 7
##########
#
# download_drupal_7=true		# Regel 80
# installeer_drupal_7=true		# Regel 100
  modules_7=true			# Regel 125
  drupalcommerce_7=true			# Regel 317
# modules_7_taal=true
  theme_7=true				# Regel 480
  blokken=true

# Algemeen
##########
#
# opruimen=true				# Regel 508
# bestandsrechten_fixen=true	


####################################################################
# Variabelen initialiseren
####################################################################
#
domeinnaam="example.com"

# Database
#
database_naam="example"
database_gebruiker="example"
database_wachtwoord="example"

account_name="Beheerder"
account_pass="Beheerder-wachtwoord"
account_mail="info@example.com"

site_name="Example.com"
site_mail="info@example.com"


####################################################################
# Constantes initialiseren
####################################################################
#
wortel="/var/www/"$domeinnaam		# Laptop
eigenaar="beheerder"
timestamp=$(date +'%Y%m%d-%H%M%S')	# Voor tijdelijke download-map

if [ "$download_drupal_7" = true ]; then

	####################################################################
	# Download Drupal 7
	####################################################################
	# Bijgewerkt & verbeterd: 11 maart 2016. Werkt als een zonnetje
	
	# Download Drupal core naar /tmp/drupal-<timestamp>
	###################################################
	# Géén sudo gebruiken
	# 
	drush dl -y -v drupal-7 --destination=/tmp --drupal-project-rename=drupal-$timestamp

	# Kopiëer download naar $wortel muv. de hoofdmap
	################################################
	# Dit werk ook voor dot-bestanden
	#
	cp -r /tmp/drupal-$timestamp/. $wortel	

fi

if [ "$installeer_drupal_7" = true ]; then

	####################################################################
	# Installeer Drupal 7
	####################################################################
	#
	# * Variabelen zoals $account_name staan tussen dubbele aanhalingstekens:
	#   Anders worden eventuele spaties niet goed verwerkt
	# * BELANGRIJK dat de database al bestaat
	# * Met succes veelvuldig gebruikt sinds dec. 2015
	#
	cd $wortel
	drush -vy si \
		--db-url=mysql://$database_gebruiker:$database_wachtwoord@localhost/$database_naam \
		--account-name="$account_name" \
		--account-pass="$account_pass" \
		--account-mail="$account_mail" \
		--site-mail="$site_mail" \
		--site-name="$site_name"

fi


if [ "$modules_7" = true ]; then

	####################################################################
	# Modules Drupal 7
	####################################################################
	#
	# Gebruik 'drush pml' om de namen van submodules te achterhalen
	#
	cd $wortel

	# Core
	#################################################################
	#
	  drush dis -vy color    	# Standaard uit
	  drush dis -vy comment
	# drush en -vy contact
	# drush en -vy dblog		# Logs and records system events to the database.
	# drush en -vy help
	  drush dis -vy overlay  	# Altijd uitzetten
	  drush en -vy path		# Allows users to rename URLs
	# drush dis -vy php		# Gebruik ik dat nog? Liever niet
	  drush en -vy search
	# drush en -vy shortcut		# Allows users to manage customizable lists of shortcut links.
	  drush en -vy statistics	# Logs access statistics for your site.
	# drush dis -vy syslog		# Logs doorzetten naar systeemlog? Da's vrij exotisch
	# drush en -vy taxonomy
	  drush dis -vy toolbar  	# Altijd uit
	  drush en -vy update
	
	# Admin Menu
	#################################################################
	# Dit betreft het admin-menu
	# Admin-taalwissel → Taal
	#
        drush en -vy admin_menu
        drush en -vy admin_menu_toolbar

	# Backup & Migrate
	#################################################################
        #
	# Deze kun je vaak direct al installeren: Ivm. migratie van
	# ontwikkel- naar testomgeving, heb je 'm hopelijk snel nodig
	#
        # drush en -vy backup_migrate

	# Better Exposed Filters
	#################################################################
	#
	# Biedt meer soorten controls voor faceted search-filters	
	#
	drush en -vy better_exposed_filters

	# Context
	#################################################################
	#
	# * 'Context' is een alternatief op Blocks.
	# * http://wiki.devliegendebrigade.nl/Context-module_%28Drupal%29
	#
        drush en -vy context
        drush en -vy context_ui

	# Delete all
	#################################################################
	#
	drush en -vy delete_alle

	# Display Suite
	#################################################################
        #
	# * Oa. voor aangepaste view modes
	# * http://wiki.devliegendebrigade.nl/Display_Suite-module_%28Drupal%29
	#
	drush en -vy ds_ui
	drush en -vy ds
	drush en -vy ds_extras
	drush en -vy ds_forms
	drush en -vy ds_format
	drush en -vy ds_search
	drush en -vy ds_devel

	# Drush Extras
	#################################################################
	#
	# * Zie http://cgit.drupalcode.org/drush_extras/tree/README.txt?id=HEAD
	# * Nodig?
	#
	# drush en -vy drush_extras

	# Empty front page
	#################################################################
	#
        # drush dis -vy empty_front_page

	# Faceted Search
	#################################################################
	#
	drush en -vy search_api			# Begin hier!
	drush en -vy search_api_facetapi	# De andere basismodule
	drush en -vy search_api_db		# Gebruik de database als search-server
	drush en -vy search_api_views		# ?

	# Feeds
	#################################################################
	#
	# Importeren van data
	# 
	drush en -vy entityreference_feeds	# ?
	drush en -vy feeds
	drush en -vy feeds_ui
	drush en -vy commerce_feeds		# Drupal Commerce-gerelateerd

	# Google - Diversen
	#################################################################
	#
	# drush en -vy google_adwords_remarketing	
	# drush dis -vy google_analytics
	# drush en -vy adsense            

	# Module Filter
	#################################################################
	#
	# * Maakt de module-pagina overzichtelijker
	#   en toont de drush-namen van modules
	#
	drush en -vy module_filter

	# Pathauto
	#################################################################
        #
	# Pathauto maakt een eigen veld aan in product-displays,
	# en dat vind ik maar een heel slecht idee
	#
 	# drush dis -vy pathauto
	
	# SEO-gerelateerd
	#################################################################
	#
	# drush en -vy seo_checker	# SEO Compliance checker-https://www.drupal.org/project/seo_checker
	# drush en seo_cheklist		# SEO Checklist - https://www.drupal.org/project/seo_checklist
	# drush en seo_cheklist		# SEO Checklist - https://www.drupal.org/project/seo_checklist
	# drush en page_title		# Page Title - https://www.drupal.org/project/page_title
	# drush en path_redirect	# Path redirect - https://www.drupal.org/project/Path_Redirect
	# drush en global_redirect	# Global redirect - https://www.drupal.org/project/globalredirect
	# drush en metatag		# Meta tags - https://www.drupal.org/project/metatag
	# drush en search404		# Search 404 - https://www.drupal.org/project/search404
	# drush en xmlsitemap		# XML Sitemap - https://www.drupal.org/project/xmlsitemap
	# drush en taxonomy_title	# Taxonomy title - https://www.drupal.org/project/taxonomy_title

	# SMTP
	#################################################################
	# Ook voor Drupal 7 heb je de SMTP-module nodig om 
	# fatsoenlijk te kunnen emailen
	#
	drush en -vy smtp

	# Spam-gerelateerd
	#################################################################
	# Voor een site die extern gehost is (bv. VPS), direct activeren:
	# Het is verbazend hoe snel spam optreedt
	#
	# drush en -vy captcha            # Captcha
	# drush en -vy image_captcha      # Image-captcha
	# drush en -vy honeypot           # Honeypot

        # Taxonomy Manager
	#################################################################
        # 
	# drush dis -vy taxonomy_manager

	# User interface
	#################################################################
	#
        # drush en ckeditor
        # drush en -vy compact_forms	# ?

	# Views
	################################
	# 
	# Deze is module is vrijwel onmisbaar
	#  
	drush en -vy views
	drush en -vy views_ui

  	# Webform
	#################################################################
        #
        # drush en -vy webform

fi


if [ "$drupalcommerce_7" = true ]; then

	####################################################################
	# Drupal Commerce voor Drupal 7
	####################################################################
	#
	cd $wortel

	# Ondersteunende modules
	#################################################################
	#
	# * Handig om deze modules eerst expliciet te installeren
	# * Bron: https://www.drupal.org/project/commerce
	# * Drush loop-vrij
	#
	 drush en -vy ctools
	 drush en -vy views
	 drush en -vy views_ui
	 drush en -vy entity
	 drush en -vy rules
	 drush en -vy addressfield
	 drush en -vy inline_entity_form   # Product-display-referentie

	# Eigenlijke modules
	#################################################################
	#
	# * Onduidelijk welke modules ik precies nodig heb
	# * Een aantal modules kunnen naderhand uitgeschakeld worden,
	#   wo. enkele ui-modules
	# * Geen drush-loops
	#
	 drush en -vy commerce
	 drush en -vy commerce_cart
	 drush en -vy commerce_checkout
	 drush en -vy commerce_customer
	 drush en -vy commerce_customer_ui
	 drush en -vy commerce_line_item
	 drush en -vy commerce_line_item_ui
	 drush en -vy commerce_customer_ui
	 drush en -vy commerce_order
	 drush en -vy commerce_order_ui
	 drush en -vy commerce_payment
	 drush dis -vy commerce_payment_example
	 drush en -vy commerce_payment_ui
	 drush en -vy commerce_price
	 drush en -vy commerce_product
	 drush en -vy commerce_product_pricing
	 drush en -vy commerce_product_pricing_ui
	 drush en -vy commerce_product_reference
	 drush en -vy commerce_product_ui
	 drush en -vy commerce_tax
	 drush en -vy commerce_tax_ui
	 drush en -vy commerce_ui

	# Contribs - Commerce Backoffice
	#################################################################
	# 
	# Deze modules maken op allerlei manieren werken met Drupal Commerce
	# een stuk prettiger, wo. 
	# * Bulk-deletion van producten
	# * Beter navigeren in multi-page content
	#
	drush en -vy commerce_backoffice
	drush en -vy commerce_backoffice_content
	drush en -vy commerce_backoffice_order
	drush en -vy commerce_backoffice_product

	# Contribs - Overig
	#################################################################
	# 
	drush en -vy commerce_bank_transfer	
	drush en -vy commerce_flat_rate
	drush en -vy commerce_shipping
	drush dis -vy commerce_shipping_example	# Doe maar niet	
	drush en -vy commerce_shipping_ui
	#
	# drush en commerce_currency_settings		# € vóór geldbedrag
	# drush en -vy commerce_stock			# Basismodule; API. Benodigd
	# drush dis -vy commerce_sdf			# Stock Decial Formatter - Nodig?
	# drush en -vy commerce_ss			# Simple Stock - Nodig?
	# drush dis -vy commerce_ssr			# Simple Stock Rules 
	# drush en -vy commerce_stock_ui		# Zonder UI lukt 't niet
	#
	drush en -vy commerce_feeds			# Drupal Commerce-gerelateerd
	drush en -vy commerce_search_api

fi

if [ "$modules_7_taal" = true ]; then

	####################################################################
	# Modules Drupal 7 - Taal
	####################################################################
	#
	cd $wortel

	# Taal - Algemeen
	#################################################################
	#
	drush en -vy locale            	# Hoofdmodule voor gebruik andere ta(a)l(en) dan EN
  	drush en -vy l10n_update        # Language updates voor modules. Superhandig
	drush en -vy admin_language   	# Onontbeerlijk voor een niet-NL-site

	# Internationalization Module (i18n): Voor meertalige sites
	#################################################################
	#
  	  drush en -vy i18n              	# Basis-module 'Internationaliasation'
	  drush en -vy i18n_block		# Enables language selector for blocks
	  drush en -vy i18n_contact		# Makes contact categories and replies translatable
	  drush en -vy i18n_field		# Translate field properties
	  drush en -vy i18n_menu		# Supports translatable custom menu items.
	  drush en -vy i18n_node		# Extended node options for multilingual content
	# drush en -vy i18n_forum		# Enables multilingual forum, translates names and containers.
	  drush en -vy i18n_select		# API module for multilingual content selection
	  drush en -vy i18n_path		# Define translations for generic paths
	  drush en -vy i18n_string		# Benodigde ondersteunende module
	  drush en -vy i18n_sync		# Synchronizes taxonomy and fields
	  drush en -vy i18n_taxonomy		# Enables multilingual taxonomy.
	  drush en -vy i18n_redirect		# Translation redirect
	  drush en -vy i18n_translation	        # Ondersteunende module. nodig Soms
	  drush en -vy i18n_user		# Translate emails sent from the User module.
	  drush en -vy i18n_variable		# Benodigd voor i18n_user
	# drush en -vy rules_i18n		# Rules translation. Aparte module?

	# Drush_language
	#################################################################
	#
	# * Verschaft een paar handige commando's
	# * https://www.drupal.org/project/drush_language
	# * Deze module heeft last van de drush-loop:
	# * http://wiki.devliegendebrigade.nl/Drush_vicieuze_circel#Mogelijke_oorzaken
	# * Apart downloaden & installeren biedt helaas ook geen soulaas
	# * Daarom overslaan, want niet al te belangrijk
	#
        # drush en -vy drush_language	# Drush-loop
	#
	# drush dl drush_language		# Apart downloaden is geen probleem
	# drush en drush_language		# Bij activeren treedt weer de drush-loop op
	#
        # drush -y language-add nl			# Dit is een drush_language-commando
        # drush -y language_enable nl
        # drush -y language_default nl
	#
        # drush -y language-add de			# Dit is een drush_language-commando
        # drush -y language_enable de
        # drush -y language_default de
fi

if [ "$theme_7" = true ]; then

	####################################################################
	### Theme Drupal 7
	####################################################################
	#
	# * Begin 2016 (Drupal 7): Werkt perfect
	#
	# Download & activeer adaptivetheme
	#####################################################################
	cd $wortel
	drush en -vy adaptivetheme		# Nodig voor at_commerce
	drush en -vy at_commerce		# Subtheme van adaptivetheme
	drush vset theme_default at_commerce
	drush pm-disable -vy bartik
	drush pm-disable -vy adaptivetheme
	drush vset admin_theme -vy seven

	# Download fresh.css
	#####################################################################
	#
	# * Standaardbestand 'fresh.css' downloaden vanaf media.devliegendebrigade.nl
	# * Toepassen op 'Seven' en 'at_commerce'
	#
	wget http://media.devliegendebrigade.nl/fresh.css -O $wortel/themes/seven/fresh.css
	wget http://media.devliegendebrigade.nl/fresh.css -O $wortel/sites/all/themes/at_commerce/css/fresh.css

	# Verwijzing toevoegen aan seven.info
	#####################################################################
	#
	if grep -Fq "fresh.css" $wortel/themes/seven/seven.info
	then
		echo "Verwijzing fresh.css al toegevoegd aan seven.info";
	else
  		echo "stylesheets[screen][] = fresh.css" >> $wortel/themes/seven/seven.info
	fi

	# Verwijzing toevoegen aan seven.info
	#####################################################################
	#
	if grep -Fq "fresh.css" $wortel/sites/all/themes/at_commerce/at_commerce.info
	then
		echo "Verwijzing fresh.css al toegevoegd aan at_commerce.info";
	else
  		echo "stylesheets[screen][] = css/fresh.css" >> $wortel/sites/all/themes/at_commerce/at_commerce.info
	fi

	# Clear cache
	#####################################################################
	#
	drush cc all

fi

if [ "$blokken" = true ]; then

	####################################################################
	### Blocks
	####################################################################
	#
	# * Uitzetten van blokken, vereist geen additionele Drupal-module
	# * Zie http://wiki.devliegendebrigade.nl/Drush_block-disable
	# * Mogelijk identiek voor Drupal 7 & 8
	# * Moet deze subroutine twee keer uitgevoerd worden?
	#

	cd $wortel

	drush block-disable -v system powered-by
	drush block-disable -v user login
	drush block-disable -v node recent
	drush block-disable -v comment recent
	drush block-disable -v node recent
	drush block-disable -v node syndicate		
	drush block-disable -v user new
	drush block-disable -v user online

fi


if [ "$opruimen" = true ]; then

	####################################################################
	# Opruimen
	####################################################################
	#
	# * Tricky: rm -rf kan verkeerd uitpakken bij configuratiefouten!
	# * sudo rm alleen toepassen op submappen!
	#
	echo "Opruimen..."

	# Verwijder de database
	#######################
	#
	i="drop database if exists $database_naam;"
	mysql -e "$i"

	# Verwijder alle bestanden in $wortel
	#####################################
	#
	# Problemen met map 'sites'? Gebruik dan alleen daar 'sudo'
	# Tricky ivm. recursie!
	#
        rm -rf $wortel/* || sudo rm -rf $wortel/sites

	# Verwijder nu de hele map
	##########################
	#
	rm -rf $wortel

	# En maak 'm opnieuw aan
	########################
	#
	mkdir $wortel

fi


if [ "$bestandsrechten_fixen" = true ]; then

	####################################################################
	# Bestandsrechten fixen
	####################################################################
	#
	# Dit script is geschikt voor Drupal 7 & 8
	# 
	# Drupal 8: Er moet iets gefixet worden na 'drush si', want het theme 
	# komt niet uit de verf, en af en toe verschijnt er een foutmelding 
	# zoals:
	#
	#    The specified file temporary://fileFZanvi could not be copied because 
	#    the destination directory is not properly configured. This may be 
	#    caused by a problem with file or directory permissions. More 
	#    information is available in the system log.

	# Eigenaar bijwerken
	######################################################################
	#
	sudo chown -R $eigenaar $wortel/*
	sudo chgrp -R $eigenaar $wortel/*
	sudo chown -R $eigenaar $wortel/.*
	sudo chgrp -R $eigenaar $wortel/.*

	# Mappen (algemeen)
	######################################################################
	# 'Other' moeten mappen kunnen executeren, anders werkt 'cd' niet
	#
	# * Eigenaar: mag alles (7)
	# * Group: mag nix
	# * Other: Lezen & executeren (x-x - 5)
	#
	sudo chmod -R 705 $(find $wortel -type d)

	# Bestanden (algemeen)
	######################################################################
	# * Eigenaar: Lezen & schrijven. Uitvoeren niet nodig
	# * Groep: Mag niets
	# * Other: Lezen. Niet schrijven of uitvoeren want veiligheidsprobleem
	#
	# Dit geldt ook voor .htaccess
	#
	# Dit geeft foutmeldingen, omdat chmod niet overweg kan met spaties:
	# Die belanden op een aparte regel.
	# Moet ik escapen op een of andere manier
	#
	sudo chmod -R 604 $(find $wortel -type f)

	# Map 'files'
	######################################################################
	#
	# Drupal/webserver gebruikt deze map om bestanden te plaatsen
	#
	# * Mappen - Other: Lezen, schrijven, executeren → 707
	# * Bestanden - Other: Lezen, schrijven → 606
	#
	sudo chmod -R 707 $(find $wortel/sites/default/files -type d)
	sudo chmod -R 606 $(find $wortel/sites/default/files -type f)

	# Map 'sites/all/translations'
	######################################################################
	#
	# Hier plaatst Drupal gedownloade vertalingen
	#
	# * Mappen - Other: Lezen, schrijven, executeren → 707
	# * Bestanden - Other: Lezen, schrijven → 606
	#
	sudo chmod -R 707 $(find $wortel/sites/all/translations -type d)
	sudo chmod -R 606 $(find $wortel/sites/all/translations -type f)

	# .drush-map fixen
	######################################################################
	# Om de haverklap wordt deze map niet-schrijfbaar voor Drush,
	# misschien door gebruik van 'sudo drush'.
	#
	sudo chown -R $eigenaar /home/$eigenaar/.drush
	sudo chgrp -R $eigenaar /home/$eigenaar/.drush
	sudo chmod -R 705 /home/$eigenaar/.drush

fi

####################################################################
### Klaar
####################################################################
#
echo "...Klaar!"