Mercurial > hg > MPIWG-drupal-modules
diff sites/all/modules/custom/digitalobjects/digitalobjects.module @ 0:015d06b10d37 default tip
initial
author | dwinter |
---|---|
date | Wed, 31 Jul 2013 13:49:13 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/custom/digitalobjects/digitalobjects.module Wed Jul 31 13:49:13 2013 +0200 @@ -0,0 +1,602 @@ +<?php +/* Implements hook_menu */ + + +/* TODOS + * + * + */ +include('digitalobject_reader.php'); +include('digitalobjects.import.php'); + +/** + * Implementation of hook_enable(). + */ +function digitalobjects_enable() { + + #adds a field for the current collection + // Check if our field is not already created. + if (!field_info_field('field_digitalobjects_cid')) { + $field = array( + 'field_name' => 'field_digitalobjects_cid', + 'type' => 'digitalobjects_digitalcollection', + ); + field_create_field($field); + + // Create the instance on the bundle. + $instance = array( + 'field_name' => 'field_digitalobjects_cid', + 'entity_type' => 'user', + 'label' => 'Current collection', + 'bundle' => 'user', + // If you don't set the "required" property then the field wont be required by default. + 'required' => False, + 'settings' => array( + // Here you inform either or not you want this field showing up on the registration form. + 'user_register_form' => 1, + ), + 'widget' => array( + 'type' => 'digitalcollection_default_textfield', + ), + ); + field_create_instance($instance); + } +} + +function digitalobjects_menu(){ + + $items['digitalcollections/manageCurrent'] = array( + 'description' => 'show an object.', + 'page callback' => 'digitalobjects_digitalcollectionsManage', + 'access arguments' => array('access content'), + 'file' => 'digitalobjects.collections.inc', + + ); + + + $items['digitalobject'] = array( + 'description' => 'show an object.', + 'page callback' => 'digitalobjects_page', + 'access arguments' => array('access content'), + + ); + $items['admin/config/media/digitalobjects'] = array( + 'title' => 'Digitalobject', + 'description' => 'Set path to the metadaprovider for digitalobjects', + 'weight' => 10, + 'page callback' => 'drupal_get_form', + 'page arguments' => array('digitalobjects_settings'), + 'access arguments' => array('administrate digitalobjects'), + 'file' => 'digitalobjects.admin.inc', + + ); + + + + $items['user/%/collections'] = array( + 'title' => 'Collections', + 'description' => 'Set path to the metadaprovider for digitalobjects', + 'weight' => 10, + 'page callback' => 'digitalobjects_user_admin_collection', + 'page arguments' => array(1), + 'access arguments' => array('manage private collections'), + 'file' => 'digitalobjects.collections.inc', + 'type' => MENU_LOCAL_TASK, + ); + + + + $items['digitalobject/%/view'] = array( + 'title' => 'View', + 'description' => 'show an object.', + 'page callback' => 'digitalobjects_page', + 'access arguments' => array('access content'), + 'page arguments' => array(1), + + 'access arguments' => array('access content'), + 'type' => MENU_LOCAL_TASK, + + ); + + $items['digitalobject/%/edit'] = array( + 'title' => 'Edit', + 'description' => 'Set path to the metadaprovider for digitalobjects', + 'weight' => 10, + 'page callback' => 'digitalobjects_edit', + 'page arguments' => array(1), + + 'access arguments' => array('administrate digitalobjects'), + 'type' => MENU_LOCAL_TASK, + + ); + + $items['digitalobject/%/usage'] = array( + 'title' => 'Usage', + 'description' => 'Set path to the metadaprovider for digitalobjects', + 'weight' => 10, + 'page callback' => 'digitalobjects_show_usage', + 'page arguments' => array(1), + + 'access arguments' => array('access content'), + 'type' => MENU_LOCAL_TASK, + + ); + + $items['digitalobject/%/add'] = array( + 'title' => 'Add', + 'description' => 'Add an object to the current collection', + 'weight' => 10, + 'page callback' => 'digitalobjects_addToCurrentCollection', + 'page arguments' => array(1), + + 'access arguments' => array('administrate digitalobjects'), + 'file' => 'digitalobjects.collections.inc', + 'type' => MENU_LOCAL_TASK, + + ); + return $items; + +} + + +function digitalobjects_create_primary_node($objid){ +$node = new stdClass(); +$node->type = 'digitalobject'; +node_object_prepare($node); +global $user; +#dpm($user); +#$node->uid=$user->uid; +$node->field_single_objid['und'][0]['objid']=$objid; + +$node->title = $objid; + +$node->language = LANGUAGE_NONE; +#$node = node_submit($node); + +#$node->field_object_type['und'][0]=array('tid'=> '6'); + +$foo = taxonomy_get_term_by_name('primary'); +foreach($foo as $term) { + + if(($term->vocabulary_machine_name) == 'digitalobject_types') { + + $node->field_object_type['und'][]['tid'] = $term->tid; + } +} +$node = node_submit($node); + +node_save($node); + +return $node; +} + +function digitalobjects_edit($objid){ + #suche ob es schon ein locales object zu dieser id gibt. + $query = new EntityFieldQuery(); + $entities = $query->entityCondition('entity_type', 'node') + ->entityCondition('bundle', 'digitalobject') + ->fieldCondition('field_single_objid', 'objid', $objid,"=") + ->execute(); + + if ($entities == null) #existiert noch nicht, dann anlegen + { + $node =digitalobjects_create_primary_node($objid); + #$node->field_object_type['und'][0]=array('tid'=> 'autocreate', + #'name' => "primary", + #'vocabulary_machine_name' => 'digitialobject_types'); + + } else { + + + $nodes = node_load_multiple(array_keys($entities['node'])); + + #gibt es eins, dann gib dieses zum editieren zurück + #TODO falls mehrere existieren, was dann?? + + #gehe durch alle gefundene + foreach ($nodes as $node){ + #$typeTag = $entity->object_type['und'] + + if (isset($node->field_object_type['und'])){ + $tid = $node->field_object_type['und'][0]['tid']; + $tax =taxonomy_term_load($tid); + if ($tax->name == "primary"){ #'primary gefunden' + module_load_include('inc', 'node', 'node.pages'); + return drupal_get_form('digitalobject_node_form', $node); + }} + } # keine primary dann lege diese an: + + $node =digitalobjects_create_primary_node($objid); + + #$vals = array_values($nodes); + #$node= array_shift($vals); + } + + $node = node_submit($node); + + #node_save($node); + module_load_include('inc', 'node', 'node.pages'); + + return drupal_get_form('digitalobject_node_form', $node); + +} + + +function digitalobjects_show_usage($objid){ + $query = new EntityFieldQuery(); + $entities = $query->entityCondition('entity_type', 'node') + ->fieldCondition('field_objid', 'objid', $objid,"=") + ->execute(); + + + $data = array(); + + #treffer gefunden + if (isset($entities['node'])){ + + $nodes = node_load_multiple(array_keys($entities['node'])); + + + foreach ($nodes as $node){ + $data[$node->nid] = $node->title; + + } + + + $output['digitalobjects_item_usage']= array( + '#theme' => 'digitalobjects_item_usage', + '#data' => $data); + + return $output; + } + + return "<h2> object not used in a collection </h2>"; + } + + +function digitalobjects_page($keys = ''){ + + + #suche ob es schon ein locales object zu dieser id gibt. + $query = new EntityFieldQuery(); + $entities = $query->entityCondition('entity_type', 'node') + ->entityCondition('bundle', 'digitalobject') + ->fieldCondition('field_single_objid', 'objid', $keys,"=") + ->execute(); + + if ($entities == null) #existiert noch nicht, dann generische Anzeige + { + + $output['digitalobjects_item']= array( + '#theme' => 'digitalobjects_item', + '#objid' => $keys); + + return $output; + } else { + $nodes = node_load_multiple(array_keys($entities['node'])); + + #gibt es eins, dann gib dieses zum editieren zurück + #TODO falls mehrere existieren, was dann?? + + #gehe durch alle gefundene + foreach ($nodes as $node){ + if (isset($node->field_object_type['und'])){ + $tid = $node->field_object_type['und'][0]['tid']; + $tax =taxonomy_term_load($tid); + + if ($tax->name == "primary"){ #'primary gefunden' + return node_view($node, $view_mode = 'full'); + } + } + } + #keine primary node gefunden, generische ausgabe + $output['digitalobjects_item']= array( + '#theme' => 'digitalobjects_item', + '#objid' => $keys); + return $output; + } +} + +/* implements digitalobject_theme */ + +function digitalobjects_theme(){ + + return array( + 'digitalobjects_item' => array( + 'variables' => array('objid' => NULL), + 'file' => 'digitalobjects.item.inc', + 'template' => 'digitalobjects-item', + ), + 'digitalobjects_item_short' => array( + 'variables' => array('objid' => NULL), + 'file' => 'digitalobjects.item.inc', + 'template' => 'digitalobjects-item-short', + ), + 'digitalobjects_item_tools' => array( + 'variables' => array('objid' => NULL), + 'template' => 'digitalobjects-item-tools', + ), + 'digitalobjects_item_usage' => array( + 'variables' => array('data' => NULL), + 'template' => 'digitalobjects-item-usage', + ), + + 'digitalobjects_currentCollection_block' => array( + 'variables' => array('node' => NULL), + 'template' => 'digitalobjects-current-collection', + ), + /* 'digitalobjects_user_admin_page' => array( + 'variables' => array('digitalobjects_user_admin','uid' =>1), + 'template' => 'digitalobjects-user-admin-form' + ),*/ + ); +} + +function digitalobjects_forms($form_id, $args) { + + $forms['digitalobjects_user_admin_form']= array( + 'callback' => 'digitalobjects_user_admin', + 'callback arguments' => array('digitalobjects_user_admin_page'), + ); + return $forms; +}; + + + + +function digitalobjects_user_admin(array $form, array &$form_state) { + + $form['digitalcollection'] = array( + '#type' => 'textfield', + '#title' => t('Active collection'), + '#size' => 15, + '#default_value' => 'xxxx', + '#attributes' => array('title' => t('Enter the terms id of the current collection.')), + ); + + + $form['userid'] = array( + '#type' => 'hidden', + ); + #$form['actions'] = array('#type' => 'actions'); + $form['submit'] = array('#type' => 'submit', '#value' => t('Save')); + $form['submit']['#submit'][] = 'digitalobjects_user_admin_form_submit'; + + return $form; +} +/* implements a new field type for the digitalobject id */ + +function digitalobjects_field_info(){ + + return array('digitalobjects_digitalobject' => array ( + 'label' => t('Digital Object ID'), + 'description' => t('This field stores a digital object ID'), + 'settings' => array('max_length' =>20), + 'instance_settings' => array('text_processing' => 0), + 'default_widget' => 'digitalobject_default_textfield', + 'default_formatter' => 'digitalobjects_fullmetadata', + ), + 'digitalobjects_digitalcollection' => array ( + 'label' => t('Digital Collection ID'), + 'description' => t('This field stores a digital object ID'), + 'settings' => array('max_length' =>20), + 'instance_settings' => array('text_processing' => 0), + 'default_widget' => 'digitalcollection_default_textfield', + 'default_formatter' => 'digitalcollection_fullmetadata', + ), + + ); +} + +function digitalobjects_field_formatter_info() { + + return array( + // This formatter shows the obejct with fullmetadata + 'digitalobjects_fullmetadata' => array( + 'label' => t('Fullmetadata formatter'), + 'field types' => array('digitalobjects_digitalobject'), + ), + 'digitalobjects_label' => array( + 'label' => t('Lable formatter'), + 'field types' => array('digitalobjects_digitalobject'), + ) + ); + } + + + + + + + function digitalobjects_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { + $element = array(); + + + switch ($display['type']) { + // This formatter simply outputs the field as text and with a color. + case 'digitalobjects_fullmetadata': + foreach ($items as $delta => $item) { + if ($item['objid']!=""){ + $element[$delta]['#markup'] = theme('digitalobjects_item_tools', array("objid" => $item['objid'])); + $element[$delta]['#markup'] .= theme('digitalobjects_item', array("objid" => $item['objid'])); + + } + } + break; + + case 'digitalobjects_label': + foreach ($items as $delta => $item) { + if ($item['objid']!=""){ + + $element[$delta]['#markup'] = theme('digitalobjects_item_short', array("objid" => $item['objid'])); + $element[$delta]['#markup'] .= theme('digitalobjects_item_tools', array("objid" => $item['objid'])); + } + } + break; + } + return $element; + } + + +function digitalobjects_field_widget_info() { + #TODO:both types should check if field is valid + return array( + 'digitalobject_default_textfield' => array( + 'label' => t('digitalobject id'), + 'field types' => array('digitalobjects_digitalobject'), + ), + 'digitalcollection_default_textfield' => array( + 'label' => t('digitalobject id'), + 'field types' => array('digitalobjects_digitalcollection'), + ) + ); + } + + function digitalobjects_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + + + $field_name = $field['field_name']; + $field_type = $field['type']; + + + $value = isset($items[$delta]['objid']) ? $items[$delta]['objid'] : ''; + + $widget = $element; + $widget['#delta'] = $delta; + + switch ($instance['widget']['type']) { + + + + case 'digitalobject_default_textfield': + $widget += array( + '#type' => 'textfield', + '#default_value' => $value, + '#size' => 20, + '#maxlength' => 20, + ); + $element['objid'] = $widget; + break; + + case 'digitalcollection_default_textfield': + $widget += array( + '#type' => 'textfield', + '#default_value' => $value, + '#size' => 20, + '#maxlength' => 20, + ); + break; + + + } + + + + + return $element; + } + + + function digitalobjects_field_is_empty($item, $field){ + return empty($item['objid']); + } + + + +function digitalobjects_user_admin_form_submit($form,$formstate){ + $value = $formstate['values']['digitalcollection']; + $userid = $formstate['values']['userid']; + + $user=user_load($userid); + + + $user->field_digitalobjects_cid['und'][0]['objid'] = $value; + + user_save($user); + +} + +function digitalobjects_block_info(){ + $blocks['digitalobjects_currentCollection'] = array( + 'info' => t('Current Collection'), + 'visibility' => BLOCK_VISIBILITY_PHP, + 'pages' => '<?php global $user; if ($user->uid == 0) return FALSE; else return TRUE; ?>' + ); + return $blocks; +} + +function digitalobjects_block_view($delta){ + + switch($delta){ + + case 'digitalobjects_currentCollection': + /* display current cullection */ + + global $user; + + $user_full=user_load($user->uid); + + if (isset($user_full->field_digitalobjects_cid['und'][0]['objid'])){ + $val = $user_full->field_digitalobjects_cid['und'][0]['objid']; + } else { + return; + } + $node = node_load($val); + + #$title = $node=>title; + + $block['content'] = theme('digitalobjects_currentCollection_block',array('node' => $node)); + + $form['submit'] = array('#type' => 'submit', '#value' => t('Save')); + $form['submit']['#submit'][] = 'digitalobjects_user_admin_collection'; + + $submitForm=drupal_get_form('digitalobjects_change_collection_button_form'); + $block['content'] .= drupal_render($submitForm); + } + + + return $block; +} + +function digitalobjects_change_collection_button_form(){ + include_once 'digitalobjects.collections.inc'; + global $user; + $form['userid'] = array( + + '#type' => 'hidden', + '#value' => $user->uid + ); + + $form['submit'] = array('#type' => 'submit', '#value' => t('change')); + $form['submit']['#submit'][] = 'digitalobjects_user_admin_collection_submit'; + + return $form; +} + +function digitalobjects_permission() { + return array( + 'manage private collections' => array( + 'title' => t('Manage private collections'), + 'description' => t('Allow users create and manage private collections.'), + ), + 'administrate digitalobjects' => array( + 'title' => t('Administrate digitalobjects'), + 'description' => t('Can add commentaries to digital objects.'), + ), + ); +} + + +function digitalobjects_pathologic_alter(&$url_params, $parts, $settings){ +#bilder ohne jegliche pfad angaben werden auf sites/default/files/.. + if (preg_match('~^([^/]*)\.(png|gif|jpe?g)$~', $url_params['path'])){ + + $url_params['path'] = 'sites/default/files/' . $url_params['path']; + } + + if (preg_match('~^./([^/]*)\.pt$~', $url_params['path'],$matches)){ + + $url_params['path'] = 'harriot/maps/' . $matches[1] . '.pt'; + } + +}