Skip to content

Commit

Permalink
Adds a admin page for configuration. (#27)
Browse files Browse the repository at this point in the history
* Add application bin

* Admin UI init

* Add overlooked values with constants
  • Loading branch information
DonRichards authored and dannylamb committed Nov 18, 2019
1 parent ca57281 commit 02ac277
Show file tree
Hide file tree
Showing 7 changed files with 253 additions and 9 deletions.
40 changes: 31 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Currently, the following content models can be migrated over with full functiona
If you want some sample Basic Image objects with metadata made from stock forms, check out [this zip
file](docs/examples/sample_objects.zip) that you can use with `islandora_zip_batch_importer`. All the images were
obtained from [Pexels](https://www.pexels.com/) and are free to use for personal or business purposes, with the
original photographers attributed in the MODS.
original photographers attributed in the MODS.

## Installation

Expand All @@ -33,26 +33,48 @@ Install the module and example migrations at the same time using Drush
```
drush en islandora_migrate_7x_claw_feature
```

## Configuration

By default, the migrations are configured to work with an `islandora_vagrant` instance running on the same host as a
`claw-playbook` instance, which is convenient for development and testing. But for your Islandora 7.x instance, the
following config will need to be set the same way on the source plugin of each migration (except for the
"7.x Tags Migration from CSV" migration):

"7.x Tags Migration from CSV" migration):

### Admin page
__/admin/config/islandora/migrate_7x_claw__

![Screen Shot 2019-11-08 at 12 32 30 PM](https://user-images.githubusercontent.com/2738244/68497994-da6e6400-0223-11ea-8247-d6b3dd117f80.png)

Please read the _Command Line Configuration_ section for input value descriptions and purposes. Once saved you can run the migration groups tasks (admin/structure/migrate/manage/islandora_7x/migrations)

#### Optional:
To verify saved changes go to admin/config/development/configuration/single/export
- Configuration type: migration group
- Configuration Name: Each of the following should reflect the values given.
- migrate_plus.migration.islandora_audit_file
- migrate_plus.migration.islandora_audit_media
- migrate_plus.migration.islandora_corporate
- migrate_plus.migration.islandora_files
- migrate_plus.migration.islandora_geographic
- migrate_plus.migration.islandora_media
- migrate_plus.migration.islandora_objects
- migrate_plus.migration.islandora_person
- migrate_plus.migration.islandora_subject

### Command Line Configuration
- `solr_base_url` should point to your Islandora 7.x Solr instance (i.e. `http://example.org:8080/solr`)
- `fedora_base_url` should point to your Fedora 3 instance (i.e. `http://example.org:8080/fedora`)
- The `username` and `password` for your Fedora 3 instance in the block
- The `username` and `password` for your Fedora 3 instance in the block
```
plugin: basic
username: fedoraAdmin
password: fedoraAdmin
```
- `q` is used to define a Solr query that selects which objects get migrated. From a fresh clone, the
- `q` is used to define a Solr query that selects which objects get migrated. From a fresh clone, the
migrations are configured to look for `islandora:sp_basic_image_collection` and all its children with the following query:
```
RELS_EXT_isMemberOfCollection_uri_ms:"info:fedora/islandora:sp_basic_image_collection" OR PID:"islandora:sp_basic_image_collection"
RELS_EXT_isMemberOfCollection_uri_ms:"info:fedora/islandora:sp_basic_image_collection" OR PID:"islandora:sp_basic_image_collection"
```
You can easily import a collection of your own by changing the PID in the above query, or you can provide your own
query to migrate over objects in other ways (such as per content model, in order by date created, etc...). If you can write a Solr select query for it, you can migrate it into Islandora 8. Omitting `q` from configuration will default to `*:*`
Expand Down Expand Up @@ -90,14 +112,14 @@ Clicking **Execute** on "7.x Tags Migration from CSV" migration displays a page

![Execute Migration](docs/images/execute_migration.png)

The operations you can run for a migration are
The operations you can run for a migration are
* **Import** - import un-migrated objects (check the "Update" checkbox to re-run previously migrated objects)
* **Rollback** - delete all the objects (if any) previously imported
* **Stop** - stop a long running import.
* **Reset** - reset an import that might have failed.

If you select "Import", and then click "Execute", it will run the migration. It should process 5 items.

Then you can run the "Islandora Media" migration, which depends on the remaining migrations. Running it effectively
runs the entire group of migrations other than the "7.x Tags Migration from CSV" migration. After they're all done,
you should be able to navigate to the home page of your Islandora 8 instance and see your content brought over from
Expand Down
5 changes: 5 additions & 0 deletions config/install/migrate_7x_claw.settings.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
fedora-endpoint-url: 'http://10.0.2.2:8080/fedora'
oldfedoraUsername: fedoraAdmin
oldfedorapsswd: fedoraAdmin
solr-endpoint-url: 'http://10.0.2.2:8080/solr'
migrate_7x_claw_solr_q: 'RELS_EXT_isMemberOfCollection_uri_ms:"info:fedora/islandora:sp_basic_image_collection" OR PID:"islandora:sp_basic_image_collection"'
1 change: 1 addition & 0 deletions migrate_7x_claw.info.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ core: 8.x
dependencies:
- drupal:migrate
- migrate_plus:migrate_plus
configure: migrate_7x_claw.settings
6 changes: 6 additions & 0 deletions migrate_7x_claw.links.menu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
migrate_7x_claw.settings:
title: 'Islandora Migration Settings'
description: 'Control settings for the 7x to 8x migration module.'
route_name: migrate_7x_claw.settings
parent: system.admin_config_islandora
weight: 10
27 changes: 27 additions & 0 deletions migrate_7x_claw.module.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

/**
* @file
* Stuff is going on here.
*/

/**
* Get settings.
*/
function get_migrate_setting() {
return /Drupal::service('migrate_7x_claw.migrate_7x_claw')->getMigrate7xSetting();
}

/**
* Get settings.
*/
function get_migrate_install() {
/Drupal::configFactory()
->getEditable('migrate_7x_claw.settings')
->set('fedora-endpoint-url', \Drupal::config('migrate_7x_claw.settings')
->set('oldfedoraUsername', \Drupal::config('migrate_7x_claw.settings')
->set('oldfedorapsswd', \Drupal::config('migrate_7x_claw.settings')
->set('solr-endpoint-url', \Drupal::config('migrate_7x_claw.settings')
->set('migrate_7x_claw_solr_q', \Drupal::config('migrate_7x_claw.settings')
->save();
}
9 changes: 9 additions & 0 deletions migrate_7x_claw.routing.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
migrate_7x_claw.settings:
path: '/admin/config/islandora/migrate_7x_claw'
defaults:
_form: 'Drupal\migrate_7x_claw\Form\MIGRATE7XCLAWSettingsForm'
_title: 'Islandora Migration Settings'
requirements:
_permission: 'administer site configuration'
options:
_admin_route: TRUE
174 changes: 174 additions & 0 deletions src/Form/MIGRATE7XCLAWSettingsForm.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
<?php

/**
* @file
* Contains \Drupal\migrate_7x_claw\Form\MIGRATE7XCLAWSettingsForm.
*/

namespace Drupal\migrate_7x_claw\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

/**
* Defines a form to configure migrate_7x_claw module settings.
*/
class MIGRATE7XCLAWSettingsForm extends ConfigFormBase {
/**
* {@interidoc}
*/
public function getFormId() {
return 'migrate_7x_claw_settings';
}

/**
* {@interitdoc}
*/
protected function getEditableConfigNames() {
return [
'migrate_7x_claw.settings',
'migrate_plus.migration.islandora_audit_file',
'migrate_plus.migration.islandora_audit_media',
'migrate_plus.migration.islandora_corporate',
'migrate_plus.migration.islandora_files',
'migrate_plus.migration.islandora_geographic',
'migrate_plus.migration.islandora_media',
'migrate_plus.migration.islandora_objects',
'migrate_plus.migration.islandora_person',
'migrate_plus.migration.islandora_subject',
];
}

/**
* {@interitdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('migrate_7x_claw.settings');
$form['migrate_7x_claw_fedoraConfig'] = [
'#type' => 'fieldset',
'#title' => $this->t("Islandora 7's Fedora Configuration"),
];
$form['migrate_7x_claw_fedoraConfig']['fedora-endpoint-url'] = [
'#type' => 'url',
'#title' => $this->t("Fedora base URL"),
'#default_value' => $config->get('fedora-endpoint-url'),
'#required' => TRUE,
];
$form['migrate_7x_claw_fedoraConfig']['oldfedoraUsername'] = [
'#type' => 'textfield',
'#title' => $this->t('Fedora Username'),
'#default_value' => $config->get('oldfedoraUsername'),
'#required' => TRUE,
];
$form['migrate_7x_claw_fedoraConfig']['oldfedorapsswd'] = [
'#type' => 'password',
'#title' => $this->t("Fedora User's password."),
'#suffix' => $this->t('Leave blank to use previously save password.'),
'#default_value' => $config->get('oldfedorapsswd'),
];
$form['migrate_7x_claw_solrConfig'] = [
'#type' => 'fieldset',
'#title' => $this->t("Islandora 7's Solr Configuration"),
];
$form['migrate_7x_claw_solrConfig']['solr-endpoint-url'] = [
'#type' => 'url',
'#title' => $this->t("Solr base URL"),
'#default_value' => $config->get('solr-endpoint-url'),
'#required' => TRUE,
];
$form['migrate_7x_claw_solrConfig']['migrate_7x_claw_solr_q'] = [
'#type' => 'textfield',
'#title' => $this->t('Solr query'),
'#default_value' => $config->get('migrate_7x_claw_solr_q'),
'#size' => 160,
'#maxlength' => 1240,
'#required' => TRUE,
];
return parent::buildForm($form, $form_state);
}

/**
* {@interitdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$islandora_audit_file_config = $this->config('migrate_plus.migration.islandora_audit_file');
$islandora_audit_media_config = $this->config('migrate_plus.migration.islandora_audit_media');
$islandora_corporate_config = $this->config('migrate_plus.migration.islandora_corporate');
$islandora_files_config = $this->config('migrate_plus.migration.islandora_files');
$islandora_geographic_config = $this->config('migrate_plus.migration.islandora_geographic');
$islandora_media_config = $this->config('migrate_plus.migration.islandora_media');
$islandora_objects_config = $this->config('migrate_plus.migration.islandora_objects');
$islandora_person_config = $this->config('migrate_plus.migration.islandora_person');
$islandora_subject_config = $this->config('migrate_plus.migration.islandora_subject');
$config = $this->config('migrate_7x_claw.settings');

$config->set('fedora-endpoint-url', $form_state->getValue('fedora-endpoint-url'));
$islandora_audit_file_config->set('source.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_audit_media_config->set('source.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_audit_media_config->set('source.constants.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_corporate_config->set('source.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_files_config->set('source.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_files_config->set('source.constants.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_geographic_config->set('source.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_media_config->set('source.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_objects_config->set('source.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_person_config->set('source.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));
$islandora_subject_config->set('source.fedora_base_url', $form_state->getValue('fedora-endpoint-url'));

$config->set('oldfedoraUsername', $form_state->getValue('oldfedoraUsername'));
$islandora_audit_file_config->set('source.authentication.username', $form_state->getValue('oldfedoraUsername'));
$islandora_audit_media_config->set('source.authentication.username', $form_state->getValue('oldfedoraUsername'));
$islandora_corporate_config->set('source.authentication.username', $form_state->getValue('oldfedoraUsername'));
$islandora_files_config->set('source.authentication.username', $form_state->getValue('oldfedoraUsername'));
$islandora_geographic_config->set('source.authentication.username', $form_state->getValue('oldfedoraUsername'));
$islandora_media_config->set('source.authentication.username', $form_state->getValue('oldfedoraUsername'));
$islandora_objects_config->set('source.authentication.username', $form_state->getValue('oldfedoraUsername'));
$islandora_person_config->set('source.authentication.username', $form_state->getValue('oldfedoraUsername'));
$islandora_subject_config->set('source.authentication.username', $form_state->getValue('oldfedoraUsername'));
$islandora_files_config->set('process.uri.settings.authentication.username', $form_state->getValue('oldfedoraUsername'));

if (!$form_state->getValue('oldfedorapsswd') == '') {
$config->set('oldfedorapsswd', $form_state->getValue('oldfedorapsswd'));
$islandora_audit_file_config->set('source.authentication.password', $form_state->getValue('oldfedorapsswd'));
$islandora_audit_media_config->set('source.authentication.password', $form_state->getValue('oldfedorapsswd'));
$islandora_corporate_config->set('source.authentication.password', $form_state->getValue('oldfedorapsswd'));
$islandora_files_config->set('source.authentication.password', $form_state->getValue('oldfedorapsswd'));
$islandora_geographic_config->set('source.authentication.password', $form_state->getValue('oldfedorapsswd'));
$islandora_media_config->set('source.authentication.password', $form_state->getValue('oldfedorapsswd'));
$islandora_objects_config->set('source.authentication.password', $form_state->getValue('oldfedorapsswd'));
$islandora_person_config->set('source.authentication.password', $form_state->getValue('oldfedorapsswd'));
$islandora_subject_config->set('source.authentication.password', $form_state->getValue('oldfedorapsswd'));
$islandora_files_config->set('process.uri.settings.authentication.password', $form_state->getValue('oldfedorapsswd'));
}

$config->set('solr-endpoint-url', $form_state->getValue('solr-endpoint-url'));
$islandora_audit_file_config->set('source.solr_base_url', $form_state->getValue('solr-endpoint-url'));
$islandora_audit_media_config->set('source.solr_base_url', $form_state->getValue('solr-endpoint-url'));
$islandora_corporate_config->set('source.solr_base_url', $form_state->getValue('solr-endpoint-url'));
$islandora_files_config->set('source.solr_base_url', $form_state->getValue('solr-endpoint-url'));
$islandora_geographic_config->set('source.solr_base_url', $form_state->getValue('solr-endpoint-url'));
$islandora_media_config->set('source.solr_base_url', $form_state->getValue('solr-endpoint-url'));
$islandora_objects_config->set('source.solr_base_url', $form_state->getValue('solr-endpoint-url'));
$islandora_person_config->set('source.solr_base_url', $form_state->getValue('solr-endpoint-url'));
$islandora_subject_config->set('source.solr_base_url', $form_state->getValue('solr-endpoint-url'));

$config->set('migrate_7x_claw_solr_q', $form_state->getValue('migrate_7x_claw_solr_q'));
$islandora_audit_file_config->set('source.q', $form_state->getValue('migrate_7x_claw_solr_q'));
$islandora_files_config->set('source.q', $form_state->getValue('migrate_7x_claw_solr_q'));
$islandora_media_config->set('source.q', $form_state->getValue('migrate_7x_claw_solr_q'));
$islandora_objects_config->set('source.q', $form_state->getValue('migrate_7x_claw_solr_q'));

$config->save();
$islandora_audit_file_config->save();
$islandora_audit_media_config->save();
$islandora_corporate_config->save();
$islandora_files_config->save();
$islandora_geographic_config->save();
$islandora_media_config->save();
$islandora_objects_config->save();
$islandora_person_config->save();
$islandora_subject_config->save();
parent::submitForm($form, $form_state);
}

}

0 comments on commit 02ac277

Please sign in to comment.