view digitalobjects.module @ 0:6f6e07baad80 default tip

initial
author Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
date Tue, 02 Jun 2015 08:57:48 +0200
parents
children
line wrap: on
line source

<?php
/* Implements hook_menu */


/* TODOS
 *
 *
 */
include('digitalobject_reader.php');
include('digitalobjects.import.php');
include('digitalobjects.collections.inc');



/** implement hook init experimental**/



#function digitalobjects_init() {
#  dpm("HUH");
#  drupal_add_js(drupal_get_path('module', 'digitalobjects') .'/chooser.js');
#}

/**
 * Implementation of hook_enable().
 */

function digitalobjects_enable() {

  #adds a field for the current collection to the user bundle
  #every user can select a current collection, where objects are added to
  // Check if our field is not already created.
  if (!field_info_field('field_digitalobjects_cid')) {
    dpm("create field:field_digitalobjects_cidfor user");
    $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_thumbnail'  => array(
            'variables' => array('objid' => NULL),
            'file' => 'digitalobjects.item.inc',
            'template' => 'digitalobjects-item-thumbnail',
        ),

	'digitalobjects_item_thumbnail_large'  => array(
            'variables' => array('objid' => NULL),
            'file' => 'digitalobjects.item.inc',
            'template' => 'digitalobjects-item-thumbnail',
        ),

        'digitalobjects_item_objid'  => array(
            'variables' => array('objid' => NULL),
            'template' => 'digitalobjects-item-objid',
        ),
        '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_collection_simple'  => array(
            'variables' => array('objid' => NULL),
            'template' => 'digitalobjects-collection-simple',
        ),
        'digitalobjects_currentCollection_block'  => array(
            'variables' => array('node' => NULL),
            'template' => 'digitalobjects-current-collection',
        ),
        'digitalobjects_collection_nodeLink'  => array(
            'variables' => array("entities" => $NULL),
            'template' => 'digitalobjects-collection-nodeLink',
        ),



        'digitalobjects_item_xml'  => array(
            'variables' => array('objid' => NULL),
            'file' => 'digitalobjects.item.inc',
            'template' => 'digitalobjects-item-xml',
        ),

        'digitalobjects_collection_usedIn'  => array(

            'template' => 'digitalobjects-collection-usedIn',
        ),

        'digitalobjects_items'  => array(
            'variables' => array('search_results' => NULL),
            'template' => 'digitalobjects-items',
        ),

        'digitalobjects_image_src_link_viewer'  => array(
            'variables' => array('src' => NULL,'link' => NULL),
            'template' => 'digitalobjects-image_src_link_viewer',
        ),

        'digitalobjects_image_src_link_viewer_large'  => array(
            'variables' => array('src' => NULL,'link' => NULL),
            'template' => 'digitalobjects-image_src_link_viewer_large',
        ),

        'digitalobjects_pdf_link_viewer'  => array(
            'variables' => array('title' => NULL,'link' => NULL),
            'template' => 'digitalobjects-pdf_link_viewer',
        ),

     /*   '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 collection 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('Label formatter'),
          'field types' => array('digitalobjects_digitalobject'),
      ),
      'digitalobjects_thumbnail' => array(
          'label' => t('Thumbnail formatter (100px'),
          'field types' => array('digitalobjects_digitalobject'),
      ),

      'digitalobjects_thumbnail_large' => array(
          'label' => t('Thumbnail formatter (l200px)'),
          'field types' => array('digitalobjects_digitalobject'),
      ),
      'digitalobjects_objid' => array(
          'label' => t('Objid as String formatter'),
          'field types' => array('digitalobjects_digitalobject'),
      ),

      'digitalobjects_xml' => array(
          'label' => t('Objids as XML formatter'),
          'field types' => array('digitalobjects_digitalobject'),
      ),

      'digitalobjects_collection_simple' => array(
          'label' => t('Simple formatter'),
          'field types' => array('digitalobjects_digitalcollection'),
      ),
      'digitalobjects_image_src_link_viewer' => array(
          'label' => t('View Image and Link from URL'),
          'field types' => array('link_field'),
      ),

      'digitalobjects_image_src_link_viewer_large' => array(
          'label' => t('View Image and Link from URL (200px)'),
          'field types' => array('link_field'),
      ),
  	'digitalobjects_image_viewer' => array(
  				'label' => t('View filename as image with link to digilib'),
  				'field types' => array('text'),
  		),
	'digitalobjects_image_viewer_large' => array(
  				'label' => t('View filename as image (200px) with link to digilib'),
  				'field types' => array('text'),
  		),
      'digitalobjects_pdf_link_viewer' => array(
          'label' => t('View PDF in external viewer'),
          'field types' => array('link_field'),
      ),

  );
  }






 function digitalobjects_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
    $element = array();


    switch ($display['type']) {

      case 'digitalobjects_image_viewer':
        foreach ($items as $delta => $item) {

          $value = $item['value'];

          $linkbase= variable_get('digitalobjects_imagebase_digilib_path');
          
          $value = str_replace(' ', '_', $value);

          $link = $linkbase . $value;

          $srcbase=variable_get('digitalobjects_imagebase_scaler_path');

          $src= $srcbase . $value;


          $element[$delta]['#markup'] = theme('digitalobjects_image_src_link_viewer', array("src" => $src,"link" => $link));


        }
        break;

  case 'digitalobjects_image_viewer_large':
        foreach ($items as $delta => $item) {

          $value = $item['value'];

          $linkbase= variable_get('digitalobjects_imagebase_digilib_path');
          
          $value = str_replace(' ', '_', $value);

          $link = $linkbase . $value;

          $srcbase=variable_get('digitalobjects_imagebase_scaler_path_large');

          $src= $srcbase . $value;


          $element[$delta]['#markup'] = theme('digitalobjects_image_src_link_viewer_large', array("src" => $src,"link" => $link));


        }
        break;




      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;

        case 'digitalobjects_thumbnail':
          foreach ($items as $delta => $item) {
            if ($item['objid']!=""){

              $element[$delta]['#markup'] = theme('digitalobjects_item_thumbnail', array("objid" => $item['objid']));
              #$element[$delta]['#markup'] .= theme('digitalobjects_item_tools', array("objid" => $item['objid']));
            }
          }
          break;

  case 'digitalobjects_thumbnail_large':
          foreach ($items as $delta => $item) {
            if ($item['objid']!=""){

              $element[$delta]['#markup'] = theme('digitalobjects_item_thumbnail_large', array("objid" => $item['objid']));
              #$element[$delta]['#markup'] .= theme('digitalobjects_item_tools', array("objid" => $item['objid']));
            }
          }
          break;


          case 'digitalobjects_objid':
            foreach ($items as $delta => $item) {
              if ($item['objid']!=""){

                $element[$delta]['#markup'] = theme('digitalobjects_item_objid', array("objid" => $item['objid']));
                #$element[$delta]['#markup'] .= theme('digitalobjects_item_tools', array("objid" => $item['objid']));
              }
            }
            break;

        case 'digitalobjects_xml':
          foreach ($items as $delta => $item) {
            if ($item['objid']!=""){
              $element[$delta]['#markup'] = theme('digitalobjects_item_xml', array("objid" => $item['objid']));
          }
          }
          break;

         case 'digitalobjects_collection_xml':
            foreach ($items as $delta => $item) {
              if ($item['objid']!=""){

                $path=$item['objid'];
                //path is node, d.h. beginnt mit node/

                if (!strncmp($path, "node/", strlen("node/"))){
                  $nid = str_replace("node/","",$path);
                  $entities = entity_load("node",array($nid));

                  $element[$delta]['#markup'] = theme('digitalobjects_collection_nodeLink_xml', array("entities" => $entities));

                } else {


                  $element[$delta]['#markup'] = theme('digitalobjects_collection_simple_xml', array("objid" => $item['objid']));

                }
              }
            }
            break;


          case 'digitalobjects_image_src_link_viewer':
	  case 'digitalobjects_image_src_link_viewer_large':
            #nimmt den link aus dem link feld und macht unter der Annahme er geht auf diglib ein Bild daraus
            foreach ($items as $delta => $item) {

                #title feld ist leer, dann:
                #$scal="http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?";

                $scal = variable_get('digitalobjects_scaler_path');

                #$img="http://digilib.mpiwg-berlin.mpg.de/digitallibrary/jquery/digilib.html?";

                $img=variable_get('digitalobjects_digilib_path');
                $src= str_replace($img, $scal, $item['url']);

                $src=$src . "&dw=500";

		

              $element[$delta]['#markup'] = theme($display['type'], array("src" => $src,"link" => $item['url']));


            }
            break;

          case 'digitalobjects_pdf_link_viewer':
            #nimmt link aus link field und zeigt dieses mit externem pdf viewer an
            foreach ($items as $delta => $item) {
              #$pdfViewer="http://content.mpiwg-berlin.mpg.de/pdfViewer/pdf.js-master/web/viewer.html?file=";
              $pdfViewer=variable_get('digitalobjects_pdfviewer_path');
              $pdfpath=variable_get('digitalobjects_repository_path');

              #url contains $base root should be removed
              global $base_root;

              $url = str_replace($base_root,"",$item['url']);
              $pdfLink=$pdfViewer . $pdfpath . $url;

              $element[$delta]['#markup'] = theme('digitalobjects_pdf_link_viewer', array("title" => $item['title'],"link" => $pdfLink));
            }
            break;





    }
    return $element;
 }

function template_preprocess_digitalobjects_items(&$variables) {
   $variables['search_results'] = '';

   $viewMode="shortX";

   foreach ($variables['results'] as $result) {

   switch ($viewMode) {

     case "short":
       $variables['search_results']  .= theme('digitalobjects_item_tools', array("objid" => $result['objid']));
       $variables['search_results'] .= theme('digitalobjects_item_short', array('objid' => $result['objid']));

       break;


     default:
         $variables['search_results']  .= theme('digitalobjects_item_tools', array("objid" => $result['objid'], 'objidcss' => digitalobjects_clean_css_identifier($result['objid'])));
         $variables['search_results'] .= theme('digitalobjects_item', array('objid' => $result['objid']));

         break;
   }

   }
   $variables['pager'] = theme('pager', array('tags' => NULL,'quantity'=> 2));

 }



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('digital collection id'),
           'field types' => array('digitalobjects_digitalcollection'),
       ),
       'digitalobjects_objpager_default' => array(
           'label' => t('No edit widget'),
           'field types' => array('digitalobjects_itemView'),
           'behaviors' => array(
               'multiple values' => FIELD_BEHAVIOR_CUSTOM,
               )
       ),

       );
  }

 function digitalobjects_field_postrender($string){
  /* String is:
   * <div class="form-item form-type-textfield form-item-field-objid-und-0-objid">
  <input type="text" id="edit-field-objid-und-0-objid" name="field_objid[und][0][objid]" value="" size="20" maxlength="20" class="form-text" />
</div>
*/

   // get value:

   preg_match('/value="([^"]*)"/',$string,$matches);
   $value = $matches[1];
   $bib = digitalobjects_readMetadata($value,"short");
   $string = $string . "<div>" . $bib['bibdata'] . "</div>";
   return $string;
 }

 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,
       '#post_render' => array('digitalobjects_field_postrender'),
           );



       $element['objid'] = $widget;

           break;

     case 'digitalcollection_default_textfield':
             $widget += array(
             '#type' => 'textfield',
             '#default_value' => $value,
             '#size' => 20,
             '#maxlength' => 20,
             );

             $element['objid'] = $widget;
             break;


   }




   return $element;
 }


 function digitalobjects_field_is_empty($item, $field){

   return empty($item['objid']);
 }



 /*admin current collection for a user */

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);

}


/* show current collection of the current user as block */
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; ?>'
  );

  $blocks['digitalobjects_collection_usedIn'] = array(
      'info' => t('Collection used in')
  );

  $blocks['digitalobjects_block_items'] = array(
      'info' => t('Items of a collection (if page is a collection)')
  );


  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;
   break;


  case 'digitalobjects_collection_usedIn':
    if ($node = menu_get_object()) {
      // Get the nid
      $nid = $node->nid;
      $entities = digitalcollection_used_id($nid);

      $block['content'] = theme('digitalobjects_collection_usedIn',array('entities'=> $entities));
      return $block;
    }

  case 'digitalobjects_block_items':
    if ($entity = menu_get_object()) {

    #$element[$delta]['prefix']['#markup'] = '<ol class="search-results">';

      if(!isset($entity->field_objid[LANGUAGE_NONE])){
        break;
      }

      $resultsAll = $entity->field_objid[LANGUAGE_NONE];



      $nums_per_page = 10;

      $params = drupal_get_query_parameters();
      if (isset($params['page'])){
        $page = $params['page'];
      } else {
        $page = 0;
      }


      $start=$nums_per_page * intval($page);

      if ($resultsAll==null){
        break;
      }

      $results = array_slice($resultsAll,$start,$nums_per_page);



      pager_default_initialize(sizeof($resultsAll),$nums_per_page);



      #foreach ($results as $entry) {
      #  $element[$delta][]['#markup'] = $entry;
      #}

      #$element[$delta]['suffix']['#markup'] = '</ol>' . theme('pager');

       $block['content']  = theme('digitalobjects_items', array('results' => $results));

      // Finally, display the pager controls, and return.
      #$element[$delta]['#markup']  .= theme('pager');


    #dpm(theme('pager'));
    return $block;
    break;
    }


  }

  //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';
  }

}

function digitalobjects_feeds_processor_targets_alter(&$targets, $entity_type, $bundle_name) {

    foreach (field_info_instances($entity_type, $bundle_name) as $name => $instance) {
        $info = field_info_field($name);
        #map the whole attr

        if ($info['type'] == 'digitalobjects_digitalobject') {
            $targets[$name] = array(
                    'name' => t('@name', array('@name' => $instance['label'])),
                    'callback' => 'digitalobjects_feeds_set_target',
                    'description' => t('The @label field of the entity.', array('@label' => $instance['label'])),
                    'real_target' => $name,
            );
        }
    }
}

function digitalobjects_feeds_set_target($source, $entity, $target, $value) {

    if (empty($value)) {
        return;
    }

    // Handle non-multiple value fields.
    if (!is_array($value)) {
        $value = array($value);
    }

    // Iterate over all values.
    #list($field_name, $column) = explode(':', $target);

    $field_name=$target;
    $info = field_info_field($field_name);

    $field = isset($entity->$field_name) ? $entity->$field_name : array();
    $delta = 0;

    foreach ($value as $v) {

        if ($info['cardinality'] == $delta) {
            break;
        }

        if (is_object($v) && ($v instanceof FeedsElement)) {
            $v = $v->getValue();
        }

        if (is_scalar($v)) {
            $field['und'][$delta]['objid'] = $v;
            $delta++;
        }

        if (is_array($v)){
            $newVal = array();

            $newVal['objid'] = $v;
            $field['und'][$delta]= $newVal;
            $delta++;
        }
    }
    $entity->$field_name = $field;
}

//Provide a function to generate a valid identifier from the objectid
//taken from views module

function digitalobjects_clean_css_identifier($identifier, $filter = array(' ' => '-', '/' => '-', '[' => '-', ']' => '')) {
  // By default, we filter using Drupal's coding standards.
  $identifier = strtr($identifier, $filter);

  // Valid characters in a CSS identifier are:
  // - the hyphen (U+002D)
  // - a-z (U+0030 - U+0039)
  // - A-Z (U+0041 - U+005A)
  // - the underscore (U+005F)
  // - 0-9 (U+0061 - U+007A)
  // - ISO 10646 characters U+00A1 and higher
  // We strip out any character not in the above list.
  $identifier = preg_replace('/[^\x{002D}\x{0030}-\x{0039}\x{0041}-\x{005A}\x{005F}\x{0061}-\x{007A}\x{00A1}-\x{FFFF}]/u', '', $identifier);

  return $identifier;
}