Mercurial > hg > mpiwg_geobrowser
view includes/entity.inc @ 3:19f75fe342eb
minor changes
author | Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de> |
---|---|
date | Mon, 12 Oct 2015 08:33:28 +0200 |
parents | b57c7821382f |
children |
line wrap: on
line source
<?php function mpiwg_geobrowser_entity_info() { $info['mpiwg_geobrowser'] = array( 'label' => t('mpiwg geobrowser instance'), 'controller class' => 'MpiwgGeoBrowserBasicController', 'base table' => 'mpiwg_geobrowser', 'uri callback' => 'mpiwg_geobrowser_uri', 'fieldable' => TRUE, 'entity keys' => array( 'id' => 'mpiwg_geobrowser_instance_id' , ), 'static cache' => TRUE, 'view modes' => array( 'default' => array( 'label' => t('Default'), 'custom settings' => FALSE, ), ) ); return $info; } function mpiwg_geobrowser_load($mpiwg_geobrowser_instance_id = NULL, $reset = FALSE) { $mpiwg_geobrowser_instance_ids = (isset($mpiwg_geobrowser_instance_id) ? array($mpiwg_geobrowser_instance_id) : array()); $basic = mpiwg_geobrowser_load_multiple($mpiwg_geobrowser_instance_ids, array(), $reset); return $basic ? reset($basic) : FALSE; } function mpiwg_geobrowser_load_multiple($mpiwg_geobrowser_instance_ids = FALSE, $conditions = array(), $reset = FALSE) { return entity_load('mpiwg_geobrowser', $mpiwg_geobrowser_instance_ids, $conditions, $reset); } function mpiwg_geobrowser_uri($basic) { return array( 'path' => 'mpiwg_geobrowser/' . $basic->mpiwg_geobrowser_instance_id, ); } function mpiwg_geobrowser_menu() { $items['admin/mpiwg_geobrowser/manage'] = array( 'title' => 'mpiwg geobrowser', 'page callback' => 'mpiwg_geobrowser_list_entities', 'access arguments' => array('administer mpiwg_geobrowser entities'), ); $items['admin/mpiwg_geobrowser/manage/list'] = array( 'title' => 'list instances', 'page callback' => 'mpiwg_geobrowser_list_entities', 'access arguments' => array('administer mpiwg_geobrowser entities'), ); $items['admin/mpiwg_geobrowser/manage/add'] = array( 'title' => 'add instance', 'page callback' => 'mpiwg_geobrowser_add', 'access arguments' => array('create mpiwg_geobrowser entities'), 'type' => MENU_LOCAL_ACTION, ); $items['mpiwg_geobrowser/%mpiwg_geobrowser'] = array( 'title callback' => 'mpiwg_geobrowser_title', 'title arguments' => array(1), 'page callback' => 'mpiwg_geobrowser_view', 'page arguments' => array(1), 'access arguments' => array('view any mpiwg_geobrowser entity'), ); $items['mpiwg_geobrowser/%mpiwg_geobrowser/view'] = array( 'title' => 'View', 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10, ); $items['mpiwg_geobrowser/%mpiwg_geobrowser/edit'] = array( 'title' => 'Edit', 'page callback' => 'drupal_get_form', 'page arguments' => array('mpiwg_geobrowser_form', 1), 'access arguments' => array('edit any mpiwg_geobrowser entity'), 'type' => MENU_LOCAL_TASK, ); $items['mpiwg_geobrowser/add'] = array( 'title' => 'Add a mpiwg geobrowser instance', 'page callback' => 'mpiwg_geobrowser_add', 'access arguments' => array('create mpiwg_geobrowser entities'), ); return $items; } function mpiwg_geobrowser_permission() { $permissions = array( 'administer mpiwg_geobrowser entities' => array( 'title' => t('Administer mpiwg_geobrowser entities'), ), 'view any mpiwg_geobrowser entity' => array( 'title' => t('View any mpiwg geobrowser instance'), ), 'edit any mpiwg_geobrowser entity' => array( 'title' => t('Edit any mpiwg geobrowser instance'), ), 'create mpiwg_geobrowser entities' => array( 'title' => t('Create mpiwg geobrowser instances'), ), ); return $permissions; } function mpiwg_geobrowser_list_entities() { $content = array(); $entities = mpiwg_geobrowser_load_multiple(); if (!empty($entities)) { foreach ( $entities as $entity ) { $rows[] = array( 'data' => array( 'id' => $entity->mpiwg_geobrowser_instance_id, 'item_description' => l($entity->item_description, 'mpiwg_geobrowser/' . $entity->mpiwg_geobrowser_instance_id), ), ); } $content['entity_table'] = array( '#theme' => 'table', '#rows' => $rows, ); } else { $content[] = array( '#type' => 'item', '#markup' => t('No mpiwg_geobrowser entities currently exist.'), ); } return $content; } function mpiwg_geobrowser_title($entity) { return t('mpiwg geobrowser instance (item_description=@item_description)', array('@item_description' => $entity->item_description)); } function mpiwg_geobrowser_view($entity, $view_mode = 'default') { $entity_type = 'mpiwg_geobrowser'; $entity->content = array( '#view_mode' => $view_mode, ); field_attach_prepare_view($entity_type, array($entity->mpiwg_geobrowser_instance_id => $entity), $view_mode); entity_prepare_view($entity_type, array($entity->mpiwg_geobrowser_instance_id => $entity)); $entity->content += field_attach_view($entity_type, $entity, $view_mode); $entity->content['item_description'] = array( '#type' => 'item', '#title' => t('Item Description'), '#markup' => $entity->item_description, ); global $language; $langcode = $language->language; module_invoke_all('entity_view', $entity, $entity_type, $view_mode, $langcode); drupal_alter(array('mpiwg_geobrowser_view', 'entity_view'), $entity->content, $entity_type); return $entity->content; } function mpiwg_geobrowser_field_extra_fields() { $form_elements['item_description'] = array( 'label' => t('Item Description'), 'description' => t('Item Description (an extra form field)'), 'weight' => -5, ); $display_elements['item_description'] = array( 'label' => t('Item Description'), 'description' => t('Just like title, but trying to point out that it is a separate property'), 'weight' => 0, ); $extra_fields['mpiwg_geobrowser']['default_bundle']['form'] = $form_elements; $extra_fields['mpiwg_geobrowser']['default_bundle']['display'] = $display_elements; return $extra_fields; } function mpiwg_geobrowser_add() { $entity = entity_get_controller('mpiwg_geobrowser')->create(); return drupal_get_form('mpiwg_geobrowser_form', $entity); } function mpiwg_geobrowser_form($form, &$form_state, $entity) { $form['item_description'] = array( '#type' => 'textfield', '#title' => t('Item Description'), '#required' => TRUE, '#default_value' => $entity->item_description, ); $form['basic_entity'] = array( '#type' => 'value', '#value' => $entity, ); field_attach_form('mpiwg_geobrowser', $entity, $form, $form_state); $form['submit'] = array( '#type' => 'submit', '#value' => t('Save'), '#weight' => 100, ); $form['delete'] = array( '#type' => 'submit', '#value' => t('Delete'), '#submit' => array('mpiwg_geobrowser_edit_delete'), '#weight' => 200, ); return $form; } function mpiwg_geobrowser_form_validate($form, &$form_state) { field_attach_form_validate('mpiwg_geobrowser', $form_state['values']['basic_entity'], $form, $form_state); } function mpiwg_geobrowser_form_submit($form, &$form_state) { $entity = $form_state['values']['basic_entity']; $entity->item_description = $form_state['values']['item_description']; field_attach_submit('mpiwg_geobrowser', $entity, $form, $form_state); $entity = mpiwg_geobrowser_save($entity); $form_state['redirect'] = 'mpiwg_geobrowser/' . $entity->mpiwg_geobrowser_instance_id; } function mpiwg_geobrowser_edit_delete( $form , &$form_state ) { $entity = $form_state['values']['basic_entity']; mpiwg_geobrowser_delete($entity); drupal_set_message(t('The mpiwg geobrowser instance %item_description (ID %id) has been deleted', array('%item_description' => $entity->item_description, '%id' => $entity->mpiwg_geobrowser_instance_id)) ); $form_state['redirect'] = 'mpiwg_geobrowser'; } function mpiwg_geobrowser_save(&$entity) { return entity_get_controller('mpiwg_geobrowser')->save($entity); } function mpiwg_geobrowser_delete($entity) { entity_get_controller('mpiwg_geobrowser')->delete($entity); } interface MpiwgGeobrowserBasicControllerInterface extends DrupalEntityControllerInterface { public function create(); public function save($entity); public function delete($entity); } class MpiwgGeobrowserBasicController extends DrupalDefaultEntityController implements MpiwgGeobrowserBasicControllerInterface { public function create() { $entity = new stdClass(); $entity->type = 'mpiwg_geobrowser'; $entity->mpiwg_geobrowser_instance_id = 0; $entity->item_description = ''; return $entity; } public function save($entity) { module_invoke_all('entity_presave', $entity, 'mpiwg_geobrowser'); $primary_keys = $entity->mpiwg_geobrowser_instance_id ? 'mpiwg_geobrowser_instance_id' : array(); drupal_write_record('mpiwg_geobrowser', $entity, $primary_keys); $invocation = 'entity_insert'; if (empty($primary_keys)) { field_attach_insert('mpiwg_geobrowser', $entity); } else { field_attach_update('mpiwg_geobrowser', $entity); $invocation = 'entity_update'; } module_invoke_all($invocation, $entity, 'mpiwg_geobrowser'); return $entity; } public function delete($entity) { $this->delete_multiple(array($entity)); } public function delete_multiple($entities) { $mpiwg_geobrowser_instance_ids = array(); if (!empty($entities)) { $transaction = db_transaction(); try { foreach ($entities as $entity) { module_invoke_all('entity_delete', $entity, 'mpiwg_geobrowser'); field_attach_delete('mpiwg_geobrowser', $entity); $mpiwg_geobrowser_instance_ids[] = $entity->mpiwg_geobrowser_instance_id; } db_delete('mpiwg_geobrowser') ->condition('mpiwg_geobrowser_instance_id', $mpiwg_geobrowser_instance_ids, 'IN') ->execute(); } catch (Exception $e) { $transaction->rollback(); watchdog_exception('mpiwg_geobrowser', $e); throw $e; } } } }