PHPackages                             discoverygarden/dgi\_migrate - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. discoverygarden/dgi\_migrate

ActiveDrupal-module

discoverygarden/dgi\_migrate
============================

v3.20.0(2mo ago)143[4 PRs](https://github.com/discoverygarden/dgi_migrate/pulls)1GPL-3.0-or-laterPHP

Since Aug 13Pushed 1mo ago4 watchersCompare

[ Source](https://github.com/discoverygarden/dgi_migrate)[ Packagist](https://packagist.org/packages/discoverygarden/dgi_migrate)[ RSS](/packages/discoverygarden-dgi-migrate/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (15)Versions (112)Used By (1)

DGI Migrate
===========

[](#dgi-migrate)

[![](https://github.com/discoverygarden/dgi_migrate/actions/workflows/lint.yml/badge.svg)](https://github.com/discoverygarden/dgi_migrate/actions/workflows/lint.yml/badge.svg)[![](https://github.com/discoverygarden/dgi_migrate/actions/workflows/semver.yml/badge.svg)](https://github.com/discoverygarden/dgi_migrate/actions/workflows/semver.yml/badge.svg)[![License: GPL v3](https://camo.githubusercontent.com/48bf9b56d44f38db53ce21294cf0b9487d0a3734ab3ba1fe4c69858ae20db2c1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d47504c76332d626c75652e737667)](https://www.gnu.org/licenses/gpl-3.0)

Introduction
------------

[](#introduction)

A module to facilitate I7 to Modern Islandora migration.

Table of Contents
-----------------

[](#table-of-contents)

- [Features](#features)
- [Included Modules](#included-modules)
- [Requirements](#requirements)
- [Installation](#installation)
- [Usage](#usage)
- [Resources](#resources)
- [Troubleshooting/Issues](#troubleshootingissues)
- [Maintainers and Sponsors](#maintainers-and-sponsors)
- [Development/Contribution](#developmentcontribution)
- [License](#license)

Features
--------

[](#features)

An improved migration import command `migrate:batch-import` is included. An example FOXML migration that can be used as a starting point is provided. It illustrates the usage of migrate plugins that have been created to facilitate FOXML and large data processing.

- `dgi_migrate.process.xml.xpath` is limited to xpath 1.0.

Some migration helper scripts are also included. Refer to the [readme](https://github.com/discoverygarden/dgi_migrate/blob/main/scripts/README.md) for more details.

Included modules
----------------

[](#included-modules)

DGI Migrate has a suite of submodules to assist in the migration process.

- [devel](https://github.com/discoverygarden/dgi_migrate/tree/main/modules/devel/README.md)
- [dgi\_migrate\_big\_set\_overrides](https://github.com/discoverygarden/dgi_migrate/tree/main/modules/dgi_migrate_big_set_overrides/README.md)
- [dgi\_migrate\_dspace](https://github.com/discoverygarden/dgi_migrate/tree/main/modules/dgi_migrate_dspace/README.md)
- [dgi\_migrate\_edtf\_validator](https://github.com/discoverygarden/dgi_migrate/tree/main/modules/dgi_migrate_edtf_validator/README.md)
- [dgi\_migrate\_foxml\_standard\_mods](https://github.com/discoverygarden/dgi_migrate/tree/main/modules/dgi_migrate_foxml_standard_mods/README.md)
- [dgi\_migrate\_imagemagick\_cleanup](https://github.com/discoverygarden/dgi_migrate/tree/main/modules/dgi_migrate_imagemagick_cleanup/README.md)
- [dgi\_migrate\_paragraphs](https://github.com/discoverygarden/dgi_migrate/tree/main/modules/dgi_migrate_paragraphs/README.md)
- [dgi\_migrate\_regenerate\_pathauto\_aliases](https://github.com/discoverygarden/dgi_migrate/tree/main/modules/dgi_migrate_regenerate_pathauto_aliases/README.md)

Requirements
------------

[](#requirements)

This module requires the following modules/libraries:

- [migrate](https://www.drupal.org/project/migrate)
- [migrate\_plus](https://www.drupal.org/project/migrate_plus)
- [migrate\_directory](https://www.drupal.org/project/migrate_directory)> NOTE: For better performance and memory optimisation, it is advised to use the module with [this patch](https://www.drupal.org/project/migrate_directory/issues/3344946)
- [islandora](https://github.com/Islandora/islandora/tree/8.x-1.x)
- [islandora\_drush\_utils](https://github.com/discoverygarden/islandora_drush_utils)
- [foxml](https://github.com/discoverygarden/foxml)

Installation
------------

[](#installation)

Install as usual, see [this](https://drupal.org/documentation/install/modules-themes/modules-8) for further information.

Usage
-----

[](#usage)

```
migrate:batch-import beer_node_revision --idlist=1:2,2:3,3:5 --user=islandora
```

```
dgi-migrate:rollback beer_user --idlist=5 --user=islandora
```

Configuration
-------------

[](#configuration)

### Search API, direct/immediate indexing

[](#search-api-directimmediate-indexing)

The suppression `search_api`'s "immediate indexing"/`index_directly` functionality (which can cause instability in long processes, when `search_api` attempts to index potentially large sets of entities at the end of the request) is enabled by default, but can be configured by multiple means.

- The `DGI_MIGRATE_SUPPRESS_DIRECT_INDEXING_DURING_MIGRATIONS` environment variables takes precedence if set. The string `true` should enable (case-sensitive!); while any other non-empty value should disable.
- In config: `dgi_migrate.settings:suppress_direct_indexing_during_migrations`, as a boolean flag.

### Entity update process

[](#entity-update-process)

Migrations can update existing entities (even without the `--update` flag), should the process identify an existing entity; however, during this process, if all the source properties are not provided for the destination rows that are mapped, it might end up erasing the related fields/properties from the entities in the database.

To permit partial sources to be provided, we have implemented a process to try to track which destination properties did not have a corresponding source property, by implementing some handling around the `get` plugin. Where there is no source properties for an existing entity, existing values should be left intact. If a source property is provided with an empty value, the existing value should be erased.

This functionality is enabled by default; however:

- it only affects migrations making use of our `dgi_revisioned_entity` destination plugin
- it might be disabled by specifying an environment variable `DGI_MIGRATE_TRACKING_GET_DISABLED=true`.

NOTE: There may be other plugins that access properties from the row by means other than using the `get` plugin, to which the current implementation is blind, for example, `dgi_migrate.process.entity_query`, via its `conditions` key.

Troubleshooting/Issues
----------------------

[](#troubleshootingissues)

Having problems or solved a problem? Contact [discoverygarden](http://support.discoverygarden.ca).

### Known Issues:

[](#known-issues)

- `php://filter` use can lead to large memory usage
    - we should probably look at rolling another stream wrapper to wrap up our usage of OpenSSL to Base64 decode
- There are some expensive assertions made in the code, particularly regarding binary datastream content with digests. Assertions should typically be disabled in production environments, so these shouldn't have any impact on execution there; however, in development environments, could potentially lead to issues, especially with larger datastreams, exacerbated by the `php://filter` usage to Base64-decode the contents
    - hesitant to remove the assertions without having any other mechanism to
    - could instead roll some unit tests?
- For archival FOXML, [a patch for `iqb/substream`](https://github.com/iqb/Morgue/pull/2) may be necessary to address [a bug in the stream wrapper implementation](https://github.com/iqb/Morgue/issues/1); otherwise, there may be [`MigrateException`s thrown](https://github.com/discoverygarden/dgi_migrate/blob/923e3098d5cf4aca52673806c7a4d6dc4f654ed5/src/Plugin/migrate/process/NaiveFileCopy.php#L275) which point back at [a failure to write to the filtering process](https://github.com/discoverygarden/dgi_migrate/blob/923e3098d5cf4aca52673806c7a4d6dc4f654ed5/src/Plugin/migrate/process/NaiveFileCopy.php#L203), while the actual issue pops out from [the `stream_copy_to_stream()` proper](https://github.com/discoverygarden/dgi_migrate/blob/923e3098d5cf4aca52673806c7a4d6dc4f654ed5/src/Plugin/migrate/process/NaiveFileCopy.php#L192).

Resources
---------

[](#resources)

DGI migrate enhances Drupal's core migration framework and provides plugins to facilitate migration of legacy Islandora data to Modern Islandora. For more details regarding Drupal's migrate API and workflow, refer to these documents:

- [Migrate API Overview](https://www.drupal.org/docs/drupal-apis/migrate-api/migrate-api-overview)
- [Drush Migrate Commands](https://drushcommands.com/drush-8x/migrate/)
- [Drupal Migration Tutorial](https://understanddrupal.com/courses/31-days-of-migrations/)

Maintainers and Sponsors
------------------------

[](#maintainers-and-sponsors)

Current maintainers:

- [discoverygarden](http://www.discoverygarden.ca)

Sponsors:

- [FLVC](https://www.flvc.org)

Development/Contribution
------------------------

[](#developmentcontribution)

If you would like to contribute to this module, please check out github's helpful [Contributing to projects](https://docs.github.com/en/get-started/quickstart/contributing-to-projects) documentation and Islandora community's [Documention for developers](https://islandora.github.io/documentation/contributing/CONTRIBUTING/#github-issues) to create an issue or pull request and/or contact [discoverygarden](http://support.discoverygarden.ca).

License
-------

[](#license)

[GPLv3](http://www.gnu.org/licenses/gpl-3.0.txt)

###  Health Score

48

—

FairBetter than 94% of packages

Maintenance89

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community24

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 58.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~16 days

Recently: every ~8 days

Total

103

Last Release

76d ago

Major Versions

v1.5.0 → v2.1.02021-10-18

v1.5.1 → v2.1.12021-10-21

v1.6.0 → v2.2.02021-11-05

1.x-dev → v2.3.22022-01-19

v2.16.4 → v3.0.02023-10-05

### Community

Maintainers

![](https://www.gravatar.com/avatar/ed79bbc35ed0aaee2f603c6f16885fb01e203941eea0cd63013f9f6185df6c30?d=identicon)[adam-vessey](/maintainers/adam-vessey)

![](https://www.gravatar.com/avatar/49d799e416ff30e90b07d1b7b6a487dfe945ae884c53747de4724439965d7904?d=identicon)[lutaylor](/maintainers/lutaylor)

![](https://www.gravatar.com/avatar/454136e389341c2a9c22dfba3107e09e2f8653807185bb213c5272efa9b93864?d=identicon)[willtp87](/maintainers/willtp87)

---

Top Contributors

[![adam-vessey](https://avatars.githubusercontent.com/u/607975?v=4)](https://github.com/adam-vessey "adam-vessey (435 commits)")[![nchiasson-dgi](https://avatars.githubusercontent.com/u/53783039?v=4)](https://github.com/nchiasson-dgi "nchiasson-dgi (116 commits)")[![jordandukart](https://avatars.githubusercontent.com/u/1337738?v=4)](https://github.com/jordandukart "jordandukart (67 commits)")[![chrismacdonaldw](https://avatars.githubusercontent.com/u/31731869?v=4)](https://github.com/chrismacdonaldw "chrismacdonaldw (43 commits)")[![JojoVes](https://avatars.githubusercontent.com/u/19390668?v=4)](https://github.com/JojoVes "JojoVes (36 commits)")[![IAMlKeno](https://avatars.githubusercontent.com/u/22577721?v=4)](https://github.com/IAMlKeno "IAMlKeno (20 commits)")[![willtp87](https://avatars.githubusercontent.com/u/688918?v=4)](https://github.com/willtp87 "willtp87 (11 commits)")[![nigelgbanks](https://avatars.githubusercontent.com/u/487373?v=4)](https://github.com/nigelgbanks "nigelgbanks (7 commits)")[![Alexander-Cairns](https://avatars.githubusercontent.com/u/26390476?v=4)](https://github.com/Alexander-Cairns "Alexander-Cairns (2 commits)")[![bibliophileaxe](https://avatars.githubusercontent.com/u/18718388?v=4)](https://github.com/bibliophileaxe "bibliophileaxe (1 commits)")[![lutaylor](https://avatars.githubusercontent.com/u/2863794?v=4)](https://github.com/lutaylor "lutaylor (1 commits)")

---

Tags

drupaldrupal-moduleingestislandoramigration

### Embed Badge

![Health badge](/badges/discoverygarden-dgi-migrate/health.svg)

```
[![Health](https://phpackages.com/badges/discoverygarden-dgi-migrate/health.svg)](https://phpackages.com/packages/discoverygarden-dgi-migrate)
```

###  Alternatives

[drupalwxt/wxt

Project template for Drupal 10 sites built with the WxT distribution.

29159.8k8](/packages/drupalwxt-wxt)[voidagency/vactory_starter_kit

Vactory is a custom Drupal profile which is developed and released by VOID Agency.

1019.7k](/packages/voidagency-vactory-starter-kit)[farmos/farmos

A web-based farm record keeping application.

1.2k6.7k1](/packages/farmos-farmos)[az-digital/az_quickstart

Arizona Quickstart

50234.3k2](/packages/az-digital-az-quickstart)[govcms/govcms

GovCMS Drupal Distribution

18997.1k3](/packages/govcms-govcms)[thunder/thunder-distribution

The thunder distribution

50634.8k3](/packages/thunder-thunder-distribution)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
