diff --git a/includes/solution_packs.inc b/includes/solution_packs.inc
index 6a005a18..c0305f88 100644
--- a/includes/solution_packs.inc
+++ b/includes/solution_packs.inc
@@ -140,7 +140,7 @@ function islandora_solution_pack_form(array $form, array &$form_state, $solution
);
$status_severities = array_keys($status_info);
$solution_pack_status_severity = array_search('up_to_date', $status_severities);
- $table_rows = array();
+ $object_info = array();
foreach ($objects as $object) {
$object_status = islandora_check_object_status($object);
$object_status_info = $status_info[$object_status['status']];
@@ -151,11 +151,14 @@ function islandora_solution_pack_form(array $form, array &$form_state, $solution
$exists = $object_status['status'] != 'missing';
$label = $exists ? l($object->label, "islandora/object/{$object->id}") : $object->label;
$status_msg = "{$object_status_info['image']} {$object_status['status_friendly']}";
- $table_rows[] = array($label, $object->id, $status_msg);
+ $object_info[] = array(
+ 'label' => $label,
+ 'pid' => $object->id,
+ 'status' => $status_msg);
}
$solution_pack_status = $status_severities[$solution_pack_status_severity];
$solution_pack_status_info = $status_info[$solution_pack_status];
- return array(
+ $form = array(
'solution_pack' => array(
'#type' => 'fieldset',
'#collapsible' => FALSE,
@@ -180,17 +183,16 @@ function islandora_solution_pack_form(array $form, array &$form_state, $solution
),
'install_status' => array(
'#markup' => t('Object status: !image !status', array(
- '!image' => $solution_pack_status_info['image'],
- '!status' => $solution_pack_status_info['solution_pack'],
- )),
+ '!image' => $solution_pack_status_info['image'],
+ '!status' => $solution_pack_status_info['solution_pack'],
+ )),
'#prefix' => '
',
'#suffix' => '
',
),
'table' => array(
'#type' => 'item',
- '#markup' => theme('table', array(
- 'header' => array(t('Label'), t('PID'), t('Status')),
- 'rows' => $table_rows)),
+ '#tree' => TRUE,
+ '#theme' => 'islandora_solution_pack_table',
),
'submit' => array(
'#type' => 'submit',
@@ -200,6 +202,25 @@ function islandora_solution_pack_form(array $form, array &$form_state, $solution
),
),
);
+ foreach ($object_info as $object) {
+ $pid = $object['pid'];
+ $form['solution_pack']['table']['label'][$pid] = array(
+ '#type' => 'item',
+ '#markup' => $object['label'],
+ );
+ $form['solution_pack']['table']['pid'][$pid] = array(
+ '#type' => 'item',
+ '#markup' => $pid,
+ );
+ $form['solution_pack']['table']['status'][$pid] = array(
+ '#type' => 'item',
+ '#markup' => $object['status'],
+ );
+ $form['solution_pack']['table']['check'][$pid] = array(
+ '#type' => 'checkbox',
+ );
+ }
+ return $form;
}
/**
@@ -211,9 +232,20 @@ function islandora_solution_pack_form(array $form, array &$form_state, $solution
* The state of the form submited.
*/
function islandora_solution_pack_form_submit(array $form, array &$form_state) {
+ $not_checked = array();
+ if (isset($form_state['values']['table']['check'])) {
+ foreach ($form_state['values']['table']['check'] as $key => $value) {
+ if ($value === 0) {
+ $not_checked[] = $key;
+ }
+ }
+ }
$solution_pack_module = $form_state['values']['solution_pack_module'];
- $batch = islandora_solution_pack_get_batch($solution_pack_module);
+ // Use not_checked instead of checked. Remove not checked item from betch. so
+ // that get batch function can get all object ingest batch if not checked list
+ // is empty.
+ $batch = islandora_solution_pack_get_batch($solution_pack_module, $not_checked);
batch_set($batch);
// Hook to let solution pack objects be modified.
// Not using module_invoke so solution packs can be expanded by other modules.
@@ -227,11 +259,13 @@ function islandora_solution_pack_form_submit(array $form, array &$form_state) {
* @param string $module
* The name of the modules of which to grab the required objects for to setup
* the batch.
- *
+ * @param array $not_checked
+ * The object that will bot be install.
+ *
* @return array
* An array defining a batch which can be passed on to batch_set().
*/
-function islandora_solution_pack_get_batch($module) {
+function islandora_solution_pack_get_batch($module, $not_checked = array()) {
$batch = array(
'title' => t('Installing / Updating solution pack objects'),
'file' => drupal_get_path('module', 'islandora') . '/includes/solution_packs.inc',
@@ -239,6 +273,14 @@ function islandora_solution_pack_get_batch($module) {
);
$info = islandora_solution_packs_get_required_objects($module);
+ foreach ($info['objects'] as $key => $object) {
+ foreach ($not_checked as $not) {
+ if ($object->id == $not) {
+ unset($info['objects'][$key]);
+ }
+ }
+ }
+
foreach ($info['objects'] as $object) {
$batch['operations'][] = array('islandora_solution_pack_batch_operation_reingest_object', array($object));
}
@@ -798,6 +840,32 @@ function islandora_get_viewer_callback($viewer_id = NULL) {
return FALSE;
}
+/**
+ * Implements theme_hook().
+ */
+function theme_islandora_solution_pack_table($variables) {
+ $form = $variables['form'];
+ $rows = array();
+ foreach ($form['label'] as $key => $element) {
+ if (is_array($element) && element_child($key)) {
+ $row = array();
+ $row[] = array('data' => drupal_render($form['label'][$key]));
+ $row[] = array('data' => drupal_render($form['pid'][$key]));
+ $row[] = array('data' => drupal_render($form['status'][$key]));
+ $row[] = array('data' => drupal_render($form['check'][$key]));
+ $rows[] = array('data' => $row);
+ }
+ }
+ $header = array(t('Label'), t('PID'), t('Status'), '');
+
+ $output = '';
+ $output .= theme('table', array(
+ 'header' => $header,
+ 'rows' => $rows,
+ 'attributes' => array('id' => 'islandora-viewers-table'),
+ ));
+ return $output;
+}
/**
* @} End of "defgroup viewer-functions".
*/
diff --git a/islandora.module b/islandora.module
index 25244bbc..17f13724 100644
--- a/islandora.module
+++ b/islandora.module
@@ -485,6 +485,11 @@ function islandora_theme() {
'pattern' => 'islandora_dublin_core_description__',
'variables' => array('islandora_object' => NULL),
),
+ // Table for install/reinstall content model and collections.
+ 'islandora_solution_pack_table' => array(
+ 'file' => 'includes/solution_packs.inc',
+ 'render element' => 'form',
+ ),
);
}