Skip to content

Commit

Permalink
Merge branch 'development' into issues_212
Browse files Browse the repository at this point in the history
  • Loading branch information
DonRichards authored Mar 30, 2022
2 parents e11a29e + 10c3e32 commit 69ab08e
Show file tree
Hide file tree
Showing 10 changed files with 173 additions and 53 deletions.
111 changes: 89 additions & 22 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ ENV_FILE=$(shell \
fi; \
echo .env)

# Checks to see if the path includes a space character. Intended to be a temporary fix.
ifneq (1,$(words $(CURDIR)))
$(error Containing path cannot contain space characters: '$(CURDIR)')
endif

# Include the sample.env so new values can be added with defaults without requiring
# users to regenerate their .env files losing their changes.
include sample.env
Expand All @@ -22,7 +27,7 @@ export
EXTERNAL_SERVICES := etcd watchtower traefik

# The minimal set of docker-compose files required to be able to run anything.
REQUIRED_SERIVCES ?= activemq alpaca blazegraph cantaloupe crayfish crayfits drupal mariadb matomo solr
REQUIRED_SERVICES ?= activemq alpaca blazegraph cantaloupe crayfish crayfits drupal mariadb matomo solr

ifeq ($(USE_SECRETS), true)
SECRETS := secrets
Expand Down Expand Up @@ -74,7 +79,7 @@ DATABASE_SERVICES := $(sort $(DATABASE_SERVICES))
# The services to be run (order is important), as services can override one
# another. Traefik must be last if included as otherwise its network
# definition for `gateway` will be overriden.
SERVICES := $(REQUIRED_SERIVCES) $(FCREPO_SERVICE) $(WATCHTOWER_SERVICE) $(ETCD_SERVICE) $(DATABASE_SERVICES) $(ENVIRONMENT) $(TRAEFIK_SERVICE) $(SECRETS) $(CODE_SERVER_SERVICE)
SERVICES := $(REQUIRED_SERVICES) $(FCREPO_SERVICE) $(WATCHTOWER_SERVICE) $(ETCD_SERVICE) $(DATABASE_SERVICES) $(ENVIRONMENT) $(SECRETS) $(CODE_SERVER_SERVICE) $(TRAEFIK_SERVICE)

default: download-default-certs docker-compose.yml pull

Expand All @@ -96,7 +101,7 @@ endif
## Create Dockerfile from example if it does not exist.
build:
if [ ! -f $(PROJECT_DRUPAL_DOCKERFILE) ]; then \
cp $(CURDIR)/sample.Dockerfile $(PROJECT_DRUPAL_DOCKERFILE); \
cp "$(CURDIR)/sample.Dockerfile" $(PROJECT_DRUPAL_DOCKERFILE); \
fi
docker build -f $(PROJECT_DRUPAL_DOCKERFILE) -t $(COMPOSE_PROJECT_NAME)_drupal --build-arg REPOSITORY=$(REPOSITORY) --build-arg TAG=$(TAG) .

Expand All @@ -108,12 +113,13 @@ set-files-owner: $(SRC)
ifndef SRC
$(error SRC is not set)
endif
sudo find $(SRC) -exec chown $(shell id -u):101 {} \;
sudo find "$(SRC)" -exec chown $(shell id -u):101 {} \;

# Creates required databases for drupal site(s) using environment variables.
.PHONY: drupal-database
.SILENT: drupal-database
drupal-database:
docker-compose exec -T drupal timeout 300 bash -c "while ! test -e /var/run/nginx/nginx.pid -a -e /var/run/php-fpm7/php-fpm7.pid; do sleep 1; done"
docker-compose exec -T drupal with-contenv bash -lc "for_all_sites create_database"

# Installs drupal site(s) using environment variables.
Expand All @@ -137,6 +143,8 @@ update-settings-php:
update-config-from-environment:
-docker-compose exec -T drupal with-contenv bash -lc "for_all_sites configure_islandora_module"
-docker-compose exec -T drupal with-contenv bash -lc "for_all_sites configure_jwt_module"
-docker-compose exec -T drupal with-contenv bash -lc "for_all_sites configure_islandora_default_module"
-docker-compose exec -T drupal with-contenv bash -lc "for_all_sites configure_search_api_solr_module"
-docker-compose exec -T drupal with-contenv bash -lc "for_all_sites configure_matomo_module"
-docker-compose exec -T drupal with-contenv bash -lc "for_all_sites configure_openseadragon"
-docker-compose exec -T drupal with-contenv bash -lc "for_all_sites configure_islandora_default_module"
Expand Down Expand Up @@ -211,7 +219,7 @@ drupal-database-import: $(SRC)
ifndef SRC
$(error SRC is not set)
endif
docker cp $(SRC) $$(docker-compose ps -q drupal):/tmp/dump.sql
docker cp "$(SRC)" $$(docker-compose ps -q drupal):/tmp/dump.sql
# Need to specify the root user to import the database otherwise it will fail due to permissions.
docker-compose exec -T drupal with-contenv bash -lc 'chown root:root /tmp/dump.sql && mysql -u $${DRUPAL_DEFAULT_DB_ROOT_USER} -p$${DRUPAL_DEFAULT_DB_ROOT_PASSWORD} -h $${DRUPAL_DEFAULT_DB_HOST} $${DRUPAL_DEFAULT_DB_NAME} < /tmp/dump.sql'

Expand All @@ -226,9 +234,13 @@ drupal-public-files-import: $(SRC)
ifndef SRC
$(error SRC is not set)
endif
docker cp $(SRC) $$(docker-compose ps -q drupal):/tmp/public-files.tgz
docker cp "$(SRC)" $$(docker-compose ps -q drupal):/tmp/public-files.tgz
docker-compose exec -T drupal with-contenv bash -lc 'tar zxvf /tmp/public-files.tgz -C /var/www/drupal/web/sites/default/files && chown -R nginx:nginx /var/www/drupal/web/sites/default/files && rm /tmp/public-files.tgz'

# Composer Update
composer_update:
docker-compose exec -T drupal with-contenv bash -lc 'composer update'

# Dump fcrepo.
fcrepo-export:
ifndef DEST
Expand All @@ -245,7 +257,7 @@ ifndef SRC
endif
$(MAKE) -B docker-compose.yml DISABLE_SYN=true
docker-compose up -d fcrepo
docker cp $(SRC) $$(docker-compose ps -q fcrepo):/tmp/fcrepo-export.tgz
docker cp "$(SRC)" $$(docker-compose ps -q fcrepo):/tmp/fcrepo-export.tgz
docker-compose exec -T fcrepo with-contenv bash -lc 'cd /tmp && tar zxvf fcrepo-export.tgz && chown -R tomcat:tomcat fcrepo-export && rm fcrepo-export.tgz'
ifeq ($(FEDORA_6), true)
docker-compose exec -T fcrepo with-contenv bash -lc 'java -jar fcrepo-upgrade-utils-6.0.0-beta-1.jar -i /tmp/fcrepo-export -o /data/home -s 5+ -t 6+ -u http://${DOMAIN}:8081/fcrepo/rest && chown -R tomcat:tomcat /data/home'
Expand Down Expand Up @@ -282,8 +294,8 @@ reindex-triplestore:
.SILENT: generate-secrets
generate-secrets:
docker run --rm -t \
-v $(CURDIR)/secrets:/secrets \
-v $(CURDIR)/scripts/generate-secrets.sh:/generate-secrets.sh \
-v "$(CURDIR)/secrets":/secrets \
-v "$(CURDIR)/scripts/generate-secrets.sh":/generate-secrets.sh \
-w / \
--entrypoint bash \
$(REPOSITORY)/drupal:$(TAG) -c "/generate-secrets.sh && chown -R `id -u`:`id -g` /secrets"
Expand All @@ -307,15 +319,15 @@ demo: generate-secrets
$(MAKE) download-default-certs ENVIROMENT=demo
$(MAKE) -B docker-compose.yml ENVIROMENT=demo
$(MAKE) pull ENVIROMENT=demo
mkdir -p $(CURDIR)/codebase
mkdir -p "$(CURDIR)/codebase"
docker-compose up -d
$(MAKE) update-settings-php ENVIROMENT=demo
$(MAKE) drupal-public-files-import SRC=$(CURDIR)/demo-data/public-files.tgz ENVIROMENT=demo
$(MAKE) drupal-public-files-import SRC="$(CURDIR)/demo-data/public-files.tgz" ENVIROMENT=demo
$(MAKE) drupal-database ENVIROMENT=demo
$(MAKE) drupal-database-import SRC=$(CURDIR)/demo-data/drupal.sql ENVIROMENT=demo
$(MAKE) drupal-database-import SRC="$(CURDIR)/demo-data/drupal.sql" ENVIROMENT=demo
$(MAKE) hydrate ENVIROMENT=demo
docker-compose exec -T drupal with-contenv bash -lc 'drush --root /var/www/drupal/web -l $${DRUPAL_DEFAULT_SITE_URL} upwd admin $${DRUPAL_DEFAULT_ACCOUNT_PASSWORD}'
$(MAKE) fcrepo-import SRC=$(CURDIR)/demo-data/fcrepo-export.tgz ENVIROMENT=demo
$(MAKE) fcrepo-import SRC="$(CURDIR)/demo-data/fcrepo-export.tgz" ENVIROMENT=demo
$(MAKE) reindex-fcrepo-metadata ENVIROMENT=demo
$(MAKE) reindex-solr ENVIROMENT=demo
$(MAKE) reindex-triplestore ENVIROMENT=demo
Expand All @@ -324,27 +336,77 @@ demo: generate-secrets
.PHONY: local
.SILENT: local
## Make a local site with codebase directory bind mounted.
local: QUOTED_CURDIR = "$(CURDIR)"
local: generate-secrets
$(MAKE) download-default-certs ENVIROMENT=local
$(MAKE) -B docker-compose.yml ENVIRONMENT=local
$(MAKE) pull ENVIRONMENT=local
mkdir -p $(CURDIR)/codebase
if [ -z "$$(ls -A $(CURDIR)/codebase)" ]; then \
docker container run --rm -v $(CURDIR)/codebase:/home/root $(REPOSITORY)/nginx:$(TAG) with-contenv bash -lc 'composer create-project drupal/recommended-project:^9.1 /tmp/codebase; mv /tmp/codebase/* /home/root; cd /home/root; composer config minimum-stability dev; composer require "drupal/flysystem:^2.0@beta" -W; drush pm:enable flysystem -y; composer require islandora/islandora:dev-8.x-1.x; composer require drush/drush:^10.3'; \
mkdir -p "$(CURDIR)/codebase"
if [ -z "$$(ls -A $(QUOTED_CURDIR)/codebase)" ]; then \
docker container run --rm -v "$(CURDIR)/codebase":/home/root $(REPOSITORY)/nginx:$(TAG) with-contenv bash -lc 'composer create-project drupal/recommended-project:^9.1 /tmp/codebase; mv /tmp/codebase/* /home/root; cd /home/root; composer config minimum-stability dev; composer require islandora/islandora:dev-8.x-1.x; composer require drush/drush:^10.3'; \
fi
docker-compose up -d
docker-compose exec -T drupal with-contenv bash -lc 'composer install; chown -R nginx:nginx .'
$(MAKE) remove_standard_profile_references_from_config ENVIROMENT=local
$(MAKE) install ENVIRONMENT=local
$(MAKE) hydrate ENVIRONMENT=local
$(MAKE) set-files-owner SRC=$(CURDIR)/codebase ENVIROMENT=local
$(MAKE) set-files-owner SRC="$(CURDIR)/codebase" ENVIROMENT=local
docker-compose exec -T drupal with-contenv bash -lc 'mkdir -p /var/www/drupal/config/sync; chown -R nginx: /var/www/drupal/config/sync; drush config:export'
$(MAKE) fix-masonry

.PHONY: demo-install-profile
.SILENT: demo-instal-profile
demo-install-profile: generate-secrets
$(MAKE) download-default-certs ENVIROMENT=demo
$(MAKE) -B docker-compose.yml ENVIROMENT=demo
$(MAKE) pull ENVIROMENT=demo
mkdir -p $(CURDIR)/codebase
docker-compose up -d --remove-orphans
@echo "\n Sleeping for 10 seconds to wait for Drupal to finish initializing.\n"
sleep 10
$(MAKE) install
$(MAKE) update-settings-php ENVIROMENT=demo
$(MAKE) hydrate ENVIROMENT=demo
docker-compose exec -T drupal with-contenv bash -lc 'drush --root /var/www/drupal/web -l $${DRUPAL_DEFAULT_SITE_URL} upwd admin $${DRUPAL_DEFAULT_ACCOUNT_PASSWORD}'
docker-compose exec -T drupal with-contenv bash -lc 'drush migrate:rollback islandora_defaults_tags,islandora_tags'
$(MAKE) initial_content
$(MAKE) login

.PHONY: local-install-profile
.SILENT: local-install-profile
local-install-profile: generate-secrets
$(MAKE) download-default-certs ENVIROMENT=local
$(MAKE) -B docker-compose.yml ENVIRONMENT=local
$(MAKE) pull ENVIRONMENT=local
mkdir -p $(CURDIR)/codebase
if [ -z "$$(ls -A $(CURDIR)/codebase)" ]; then \
docker container run --rm -v $(CURDIR)/codebase:/home/root $(REPOSITORY)/nginx:$(TAG) with-contenv bash -lc 'git clone https://github.com/islandora-devops/islandora-sandbox /tmp/codebase; mv /tmp/codebase/* /home/root;'; \
fi
$(MAKE) set-files-owner SRC=$(CURDIR)/codebase ENVIROMENT=local
docker-compose up -d --remove-orphans
docker-compose exec -T drupal with-contenv bash -lc 'composer install; chown -R nginx:nginx .'
$(MAKE) remove_standard_profile_references_from_config ENVIROMENT=local
$(MAKE) install ENVIRONMENT=local
$(MAKE) hydrate ENVIRONMENT=local
# The - at the beginning is not a typo, it will allow this process to failing the make command.
-docker-compose exec -T drupal with-contenv bash -lc 'mkdir -p /var/www/drupal/config/sync && chmod -R 775 /var/www/drupal/config/sync'
docker-compose exec -T drupal with-contenv bash -lc 'chown -R `id -u`:101 /var/www/drupal'
docker-compose exec -T drupal with-contenv bash -lc 'drush migrate:rollback islandora_defaults_tags,islandora_tags'
$(MAKE) initial_content
$(MAKE) login

.PHONY: initial_content
initial_content:
curl -u admin:$(shell cat secrets/live/DRUPAL_DEFAULT_ACCOUNT_PASSWORD) -H "Content-Type: application/json" -d "@demo-data/homepage.json" https://${DOMAIN}/node?_format=json
curl -u admin:$(shell cat secrets/live/DRUPAL_DEFAULT_ACCOUNT_PASSWORD) -H "Content-Type: application/json" -d "@demo-data/browse-collections.json" https://${DOMAIN}/node?_format=json

# Destroys everything beware!
.PHONY: clean
.SILENT: clean
## Destroys everything beware!
clean:
echo "**DANGER** About to rm your SERVER data subdirs, your docker volumes and your codebase/web"
$(MAKE) confirm
-docker-compose down -v
sudo rm -fr codebase certs secrets/live/*
git clean -xffd .
Expand All @@ -363,11 +425,16 @@ up:
down:
-docker-compose down --remove-orphans

GREEN := $(shell tput -Txterm setaf 2)
YELLOW := $(shell tput -Txterm setaf 3)
WHITE := $(shell tput -Txterm setaf 7)
RESET := $(shell tput -Txterm sgr0)
TARGET_MAX_CHAR_NUM=20
.PHONY: login
.SILENT: login
login:
echo "\n\n=========== LOGIN ==========="
docker-compose exec -T drupal with-contenv bash -lc "drush uli --uri=$(DOMAIN)"
echo "=============================\n"

.phony: confirm
confirm:
@echo -n "Are you sure you want to continue and drop your data? [y/N] " && read ans && [ $${ans:-N} = y ]

.PHONY: help
.SILENT: help
Expand Down
16 changes: 4 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,12 @@ as database import/export and reindexing.

## Requirements

- Composer 1.10+
- Desktop / laptop / VM (*Docker must have sufficient resources to run GNU Make*)
- Docker-CE 19.x+ (*If using Docker Desktop for Windows, any stable release
*after* 2.2.0.4, or use a 2.2.0.4 with a [patch][Docker for Windows Patch] due
to a [bug][Docker for Windows Bug]*)
- Docker-compose version 1.25.x+.* Docker is now rolling out a 2.0.x branch, with incompatible config file syntax.
- Docker-CE 19.x+
- Docker-compose version 1.25.x+
- Git 2.0+
- GNU Make 4.0+

* As of August, 2021, Docker Desktop is now shipping with docker-compose 2.0 which has incompatible config file syntax. Until this is addressed, run

```bash
docker-compose disable-v2
```
- At least 8GB of RAM (ideally 16GB)

before running any of the make commands below.

Expand Down Expand Up @@ -125,7 +117,7 @@ Drupal container. This lets you update code using the IDE of your choice on you
changes are automatically reflected on the Drupal container. Simply place any exported Drupal site as
the `codebase` folder in `isle-dc` and you're good to go.

If you don't provide a codebase, you'll be given a vanilla Drupal 9 instance with the Islandora module
If you don't provide a codebase, you'll be given a basic setup from vanilla Drupal 9 instance with the Islandora module
installed and the bare minimum configured to run. This is useful if you want to build your repository
from scratch and avoid `islandora_defaults`.

Expand Down
28 changes: 28 additions & 0 deletions demo-data/browse-collections.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"type": [
{
"target_id": "page",
"target_type": "node_type"
}
],
"status": [
{
"value": true
}
],
"title": [
{
"value": "Browse Collections"
}
],
"path": [
{
"alias": "/browse-collections"
}
],
"field_display_title": [
{
"value": "Browse Collections"
}
]
}
8 changes: 4 additions & 4 deletions demo-data/drupal.sql

Large diffs are not rendered by default.

31 changes: 31 additions & 0 deletions demo-data/homepage.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"type": [
{
"target_id": "home_page",
"target_type": "node_type"
}
],
"status": [
{
"value": true
}
],
"title": [
{
"value": "Islandora Sandbox"
}
],
"body": [
{
"value": "<div class=\"node__links\">\r\n<ul class=\"links inline\">\r\n\t<li class=\"node-readmore\"><span class=\"node-readmore__link-wrapper\"><a aria-label=\"Browse all collections\" class=\"node-readmore__link\" href=\"/browse-collections\" hreflang=\"en\" rel=\"tag\" title=\"Browse our collections\">Browse All Collections<span class=\"visually-hidden\"> Browse All Collections</span></a></span></li>\r\n</ul>\r\n</div>\r\n\r\n<p>Welcome to the Islandora Community! (Note that all communication in Islandora is subject to our <a href=\"https://islandora.ca/codeofconduct\">code of conduct</a>).</p>\r\n\r\n<p>This demo is loaded with sample content and configurations to demonstrate features of Islandora and provide a starting point for development.&nbsp;&nbsp;Additional information is provided on the <a href=\"http://islandora.ca/\">Islandora Website</a>.&nbsp;</p>\r\n\r\n<p>The <a href=\"https://groups.google.com/g/islandora\">Islandora Google groups mailing list</a> is open to Islandora users who connect to share information. <a href=\"https://join.slack.com/t/islandora/shared_invite/zt-x7e0jj1x-C1pNzKrR7Fvs4QdQziPZ~g\">Join Islandora Slack</a> to ask questions and learn more about community events where you can learn more about Islandora. <a href=\"https://www.drupal.org/slack\">Drupal also maintains a Slack community</a> where you can ask more general questions about Drupal configuration.&nbsp;</p>\r\n\r\n<p>We welcome you to visit and edit <a href=\"https://islandora.github.io/documentation/\">Islandora documentation</a> or submit issues and code to Islandora via repositories in our <a href=\"https://github.com/Islandora\">Github organization. &nbsp;</a></p>\r\n\r\n<p>Thanks, and happy building!</p>\r\n\r\n<p> <a href=\"https://github.com/Islandora/documentation/wiki/Sandbox.Islandora.ca-online-credentials\"> login credentials </a></p>\r\n",
"format": "full_html",
"processed": "<div class=\"node__links\">\n<ul class=\"links inline\">\n\t<li class=\"node-readmore\"><span class=\"node-readmore__link-wrapper\"><a aria-label=\"Browse all collections\" class=\"node-readmore__link\" href=\"/browse-collections\" hreflang=\"en\" rel=\"tag\" title=\"Browse our collections\">Browse All Collections<span class=\"visually-hidden\"> Browse All Collections</span></a></span></li>\n</ul>\n</div>\n\n<p>Welcome to the Islandora Community! (Note that all communication in Islandora is subject to our <a href=\"https://islandora.ca/codeofconduct\">code of conduct</a>).</p>\n\n<p>This demo is loaded with sample content and configurations to demonstrate features of Islandora and provide a starting point for development.  Additional information is provided on the <a href=\"http://islandora.ca/\">Islandora Website</a>. </p>\n\n<p>The <a href=\"https://groups.google.com/g/islandora\">Islandora Google groups mailing list</a> is open to Islandora users who connect to share information. <a href=\"https://join.slack.com/t/islandora/shared_invite/zt-x7e0jj1x-C1pNzKrR7Fvs4QdQziPZ~g\">Join Islandora Slack</a> to ask questions and learn more about community events where you can learn more about Islandora. <a href=\"https://www.drupal.org/slack\">Drupal also maintains a Slack community</a> where you can ask more general questions about Drupal configuration. </p>\n\n<p>We welcome you to visit and edit <a href=\"https://islandora.github.io/documentation/\">Islandora documentation</a> or submit issues and code to Islandora via repositories in our <a href=\"https://github.com/Islandora\">Github organization.  </a></p>\n\n<p>Thanks, and happy building!</p>\n\n<p> <a href=\"https://github.com/Islandora/documentation/wiki/Sandbox.Islandora.ca-online-credentials\"> login credentials </a></p>\n",
"summary": ""
}
],
"field_display_title": [
{
"value": "Islandora Sandbox"
}
]
}
2 changes: 1 addition & 1 deletion docker-compose.code-server.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ networks:
external: true
secrets:
CODE_SERVER_PASSWORD:
file: "./secrets/CODE_SERVER_PASSWORD"
file: "./secrets/live/CODE_SERVER_PASSWORD"
services:
code-server:
environment:
Expand Down
1 change: 1 addition & 0 deletions docker-compose.drupal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ services:
DRUPAL_DEFAULT_FCREPO_PORT: 8081
DRUPAL_DEFAULT_MATOMO_URL: https://${DOMAIN}/matomo/
DRUPAL_DEFAULT_SITE_URL: http://${DOMAIN} # Make sure this is just http and not https!
DRUPAL_DEFAULT_PROFILE: ${DRUPAL_INSTALL_PROFILE}
PHP_MEMORY_LIMIT: ${PHP_MEMORY_LIMIT}
PHP_POST_MAX_SIZE: ${PHP_POST_MAX_SIZE}
PHP_UPLOAD_MAX_FILESIZE: ${PHP_UPLOAD_MAX_FILESIZE}
Expand Down
4 changes: 2 additions & 2 deletions docker-compose.matomo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ services:
restart: ${RESTART_POLICY:-unless-stopped}
image: ${REPOSITORY:-islandora}/matomo:${TAG:-latest}
environment:
MATOMO_DEFAULT_SITE_HOST: ${DOMAIN}
MATOMO_DEFAULT_HOST: ${DOMAIN}
volumes:
- matomo-config-data:/var/www/matomo
depends_on:
Expand Down Expand Up @@ -40,4 +40,4 @@ services:
limits:
memory: ${MATOMO_MEMORY_LIMIT:-1G}
reservations:
memory: 512M
memory: 512M
8 changes: 5 additions & 3 deletions rootfs/etc/cont-init.d/04-custom-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,11 @@ function main {
<?php
use Drupal\taxonomy\Entity\Term;
\$term = array_pop(taxonomy_term_load_multiple_by_name('FITS File'));
\$default = ['uri' => 'https://projects.iq.harvard.edu/fits'];
\$term->set('field_external_uri', \$default);
\$term->save();
if (\$term) {
\$default = ['uri' => 'https://projects.iq.harvard.edu/fits'];
\$term->set('field_external_uri', \$default);
\$term->save();
}
EOF
drush php:script /tmp/fix.php
# Rebuild the cache.
Expand Down
Loading

0 comments on commit 69ab08e

Please sign in to comment.