diff --git a/includes/datastream.inc b/includes/datastream.inc index 2f271e60..6fa95ddc 100644 --- a/includes/datastream.inc +++ b/includes/datastream.inc @@ -12,6 +12,9 @@ * @return stream * prints datastream to browser */ + +define('DS_COMP_STREAM', 'DS-COMPOSITE-MODEL'); + function islandora_datastream_as_attachment($object_id, $dsid) { module_load_include('inc', 'islandora', 'RestConnection'); global $user; @@ -33,3 +36,158 @@ function islandora_datastream_as_attachment($object_id, $dsid) { exit(); } + +/** + * + * @param array $arr + * an array of dsids that are defined by this objects cmodels + * @param string $ds_comp_stream + * the dscomposite stream as xml + */ +function islandora_update_available_dsids_array(&$arr, $ds_comp_stream){ + $sxml = new SimpleXMLElement($ds_comp_stream); + foreach($sxml->dsTypeModel as $ds){ + //$arr[$ds['ID']] + $mimes = array(); + foreach($ds->form as $form){ + $mimetype = (string)$form['MIME']; + $mimes[] = $mimetype; + } + $dsid = (string)$ds['ID']; + if($dsid != 'AUDIT'){ + $arr[(string)$ds['ID']] = $mimes; + } + } +} + +/** + * this function may not be being used + * @param type $pid + * @param type $form_state + * @return string + */ +function islandora_add_datastream_form($object_id, &$form_state) { + //dump_vars($form_state); + // Populate the list of datastream IDs. + module_load_include('inc', 'islandora', 'RestConnection'); + global $user; + try { + $restConnection = new RestConnection($user); + $fedora_object = new FedoraObject($object_id, $restConnection->repository); + } catch (Exception $e) { + drupal_set_message(t('Error getting Islandora object %s ', array('%s' => $object_id)), 'error'); + return ""; + } + if (!isset($fedora_object)) { + drupal_set_message(t('Could not create add datastream form for %s'), array('%s' => $object_id)); + return; + } + $models = $fedora_object->models; + $available_dsids = array(); + if (isset($models)) { + foreach ($models as $model) { + try { + $model_object = new FedoraObject($model, $restConnection->repository); + $dscomposite_stream = $model_object[DS_COMP_STREAM]->content; + islandora_update_available_dsids_array($available_dsids, $dscomposite_stream); + } catch (Exception $e) { + //do nothing as other objects may have a dscompsite stream + } + //$model_ds_comp = + } + } + + /*if (!empty($content_models)) { + foreach ($content_models as $content_model) { + + + $newElements = $content_model->listDatastreams(); + if (!empty($newElements)) { + $available_dsids = array_merge($available_dsids, $newElements); + } + } + } + + $item = new Fedora_Item($pid); + $used_datastreams = $item->get_datastreams_list_as_SimpleXML(); + $used_datastream_ids = array(); + foreach ($used_datastreams->datastreamDef as $used_datastream) { + array_push($used_datastream_ids, $used_datastream->ID); + } + $unused_dsids = array(); + + if ($form_state['submitted'] && $form_state['clicked_button']['#value'] != 'OK') { + $form['add_datastream_label'] = array( + '#value' => t('

The datastream has been uploaded.

'), + '#weight' => -10, + ); + $form['#redirect'] = "fedora/repository/$pid/"; + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('OK') + ); + return $form; + } + if (!empty($available_dsids)) { + $unused_dsids = array_diff($available_dsids, $used_datastream_ids); + if (empty($unused_dsids)) { + return; + } + } + + $form['add_datastream_label'] = array( + '#value' => t('

Add Datastream:

'), + '#weight' => -10, + ); + + $form['pid'] = array( + '#type' => 'hidden', + '#value' => "$pid" + ); + + $form['stream_label'] = array( + '#title' => 'Datastream Label', + '#required' => 'TRUE', + '#description' => t('A Human readable label'), + '#type' => 'textfield' + ); + + $form['#attributes']['enctype'] = 'multipart/form-data'; + $form['add-stream-file-location'] = array( + '#type' => 'file', + '#title' => t('Upload Document'), + '#size' => 48, + // '#required'=>'TRUE', + '#description' => t('The file to upload.') + ); + $form['#redirect'] = "fedora/repository/$pid/"; + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Add Datastream') + ); + + if (!empty($unused_dsids)) { + $dsidsForForm = array(); + foreach ($unused_dsids as $dsid) { + $dsidsForForm[$dsid] = $dsid; + } + $form['stream_id'] = array( + '#type' => 'select', + '#title' => t('Datastream ID'), + '#default_value' => variable_get('feed_item_length', 'teaser'), + '#weight' => '-1', + '#description' => t('Datastream IDs defined by the content model.'), + ); + $form['stream_id']['#options'] = array_combine($unused_dsids, $unused_dsids); + } + else { + $form['stream_id'] = array( + '#title' => 'Datastream ID', + '#required' => 'TRUE', + '#description' => t('An ID for this stream that is unique to this object. Must start with a letter and contain only alphanumeric characters and dashes and underscores.'), + '#type' => 'textfield', + '#weight' => -1, + ); + } + return $form;*/ +} diff --git a/includes/islandora_dublin_core.inc b/includes/islandora_dublin_core.inc index 6d3326e5..c59c89f2 100644 --- a/includes/islandora_dublin_core.inc +++ b/includes/islandora_dublin_core.inc @@ -101,7 +101,7 @@ class Dublin_Core { function as_formatted_array() { $dc_array = array(); - foreach ($this->dc as $element) { + foreach ($this as $element) { if (!empty($element)) { foreach ($element as $field => $value) { // split value if the result value is an array diff --git a/islandora_basic_image/islandora_basic_image.module b/islandora_basic_image/islandora_basic_image.module index ec3e9cd1..ff952c64 100644 --- a/islandora_basic_image/islandora_basic_image.module +++ b/islandora_basic_image/islandora_basic_image.module @@ -101,6 +101,24 @@ function islandora_basic_image_preprocess_islandora_basic_image(&$variables) { $variables['islandora_dublin_core'] = $dc_object; //create a nicer array for themers //TODO: give this a better home + + //$dc_array = array(); + //foreach ($dc_object as $element) { + // if (!empty($element)) { + // foreach ($element as $field => $value) { + // // split value if the result value is an array + // if (is_array($value)) { + // $value = implode(", ", $value); + // } + // $dc_label = explode(':', $field); + // $element_label = ucfirst($dc_label[1]); + // $dc_array[$field]['label'] = $element_label; + // $dc_array[$field]['value'] = strip_tags($value); + // $dc_array[$field]['class'] = strtolower( preg_replace('/[^A-Za-z0-9]/', '-', $field)); + // } + // } + //} + $variables['dc_array'] = $dc_object->as_formatted_array(); $variables['islandora_object_label'] = $islandora_object->label; $variables['theme_hook_suggestions'][] = 'islandora_basic_image__' . str_replace(':', '_', $islandora_object->id);