From aae9a02fb7404e8005091338c7514bcc21f38a68 Mon Sep 17 00:00:00 2001
From: Adam Sanchez <a.sanchez75@gmail.com>
Date: Thu, 20 Nov 2014 23:49:35 +0100
Subject: by asanchez75: added form for rows insertion

---
 data_entity/data_entity.module    |   14 +++++++-
 data_entity/data_entity.pages.inc |   63 +++++++++++++++++++++++++++---------
 2 files changed, 59 insertions(+), 18 deletions(-)

diff --git a/data_entity/data_entity.module b/data_entity/data_entity.module
index b8e56f7..7443f89 100644
--- a/data_entity/data_entity.module
+++ b/data_entity/data_entity.module
@@ -107,7 +107,7 @@ function data_entity_menu() {
       'type' => MENU_LOCAL_TASK,
       'weight' => -3,
     );
- 
+
     $items['admin/structure/data/edit/' . $table_name . '/entity-form'] = array(
       'title' => 'Configure entity form',
       'description' => 'Administer data tables.',
@@ -130,6 +130,16 @@ function data_entity_menu() {
     'access arguments' => array(4),
   );
 
+  $items['admin/content/data/entity/%data_ui_table/add'] = array(
+    'title' => 'Add data item',
+    'load arguments' => array(4),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('data_entity_entity_add_form', 4),
+    'file' => 'data_entity.pages.inc',
+    'access callback' => 'data_entity_table_menu_access',
+    'access arguments' => array(4),
+  );
+
   return $items;
 }
 
@@ -181,7 +191,7 @@ function data_entity_permission() {
 
   foreach ($tables as $table_name => $table) {
     $permissions['edit data in table ' . $table_name] = array(
-      'title' => t('Edit data in the %table_name table', array('%table_name' => $table->title)), 
+      'title' => t('Edit data in the %table_name table', array('%table_name' => $table->title)),
     );
   }
 
diff --git a/data_entity/data_entity.pages.inc b/data_entity/data_entity.pages.inc
index c574e44..8966803 100644
--- a/data_entity/data_entity.pages.inc
+++ b/data_entity/data_entity.pages.inc
@@ -5,6 +5,13 @@
  */
 
 /**
+ * Form wrapper to add data entities
+ */
+function data_entity_entity_add_form($form, &$form_state, $table, $data_entity = NULL) {
+  return drupal_get_form('data_entity_entity_edit_form', $table);
+}
+
+/**
  * Form builder for viewing and editing a data entity.
  */
 function data_entity_entity_edit_form($form, &$form_state, $table, $data_entity = NULL) {
@@ -14,26 +21,39 @@ function data_entity_entity_edit_form($form, &$form_state, $table, $data_entity
   data_entity_meta_add_defaults($table->meta);
 
   // Get entity defaults.
-  $entity_type = $data_entity->entity_type;
+
+  $entity_type = 'data_' . $table->name;
   $entity_info = entity_get_info($entity_type);
-  list($id, ) = entity_extract_ids($entity_type, $data_entity);
 
-  drupal_set_title(t('Edit @item item @id', array(
-    '@item' => $entity_info['label'],
-    '@id'   => $id,
-  )));
+  if (!is_null($data_entity)) {
+    list($id, ) = entity_extract_ids($entity_type, $data_entity);
+
+    drupal_set_title(t('Edit @item item @id', array(
+      '@item' => $entity_info['label'],
+      '@id'   => $id,
+    )));
+      $description_id_field = t('The id field can not be edited.');
+  }
+  else {
+    drupal_set_title(t('Add @item item', array(
+      '@item' => $entity_info['label'],
+    )));
+      $description_id_field = t('The id field can not be edited and it will be added.');
+  }
 
   // Store essential data.
   $form['table'] = array(
     '#type' => 'value',
     '#value' => $table,
   );
+
   $form['#entity'] = $data_entity;
 
   $form['data'] = array(
     '#tree' => TRUE,
     '#weight' => -100, // Ensure this goes above fields.
   );
+
   foreach ($table->table_schema['fields'] as $field_name => $field) {
     // For some reason these are lower case as entity keys.
     $field_id_safe = strtolower($field_name);
@@ -43,7 +63,7 @@ function data_entity_entity_edit_form($form, &$form_state, $table, $data_entity
     $id_field = $table->meta['entity_id'];
     if ($id_field == $field_name) {
       $disabled = TRUE;
-      $description .= t('The id field can not be edited.');
+      $description .= $description_id_field;
     }
     else {
       $disabled = $table->meta['fields'][$field_name]['locked'];
@@ -58,6 +78,7 @@ function data_entity_entity_edit_form($form, &$form_state, $table, $data_entity
       '#disabled' => $disabled,
       '#required' => $table->meta['fields'][$field_name]['required'],
     );
+
   }
 
   $form['save'] = array(
@@ -77,8 +98,9 @@ function data_entity_entity_edit_form($form, &$form_state, $table, $data_entity
  * Form validation handler for saving a data entity.
  */
 function data_entity_entity_edit_form_validate($form, &$form_state) {
-  $data_entity = $form['#entity'];
-  $entity_type = $data_entity->entity_type;
+
+  //$data_entity = $form['#entity'];
+  $entity_type = $form['#entity_type'] ;
 
   // Build a pseudo entity for FieldAPI field attach.
   $pseudo_entity = $form_state['values'];
@@ -95,13 +117,11 @@ function data_entity_entity_edit_form_validate($form, &$form_state) {
 function data_entity_entity_edit_form_submit($form, &$form_state) {
   //dsm($form_state, 'fs');
 
-  $data_entity = $form['#entity'];
-  $entity_type = $data_entity->entity_type;
+  $form_id = $form_state['build_info']['form_id'];
 
-  $table = $form_state['values']['table'];
+  $entity_type = $form['#entity_type'] ;
 
-  $record = $form_state['values']['data'];
-  drupal_write_record($table->name, $record, $table->table_schema['primary key']);
+  $table = $form_state['values']['table'];
 
   // Build a pseudo entity for FieldAPI field attach.
   $pseudo_entity = $form_state['values'];
@@ -109,8 +129,19 @@ function data_entity_entity_edit_form_submit($form, &$form_state) {
   $pseudo_entity += $form_state['values']['data'];
   $pseudo_entity = (object) $pseudo_entity;
 
+  if ($form_id == 'data_entity_entity_edit_form') {
+    $record = $form_state['values']['data'];
+    drupal_write_record($table->name, $record, $table->table_schema['primary key']);
+    // Save additional fields provided by users through UI.
+    field_attach_update($entity_type, $pseudo_entity);
+  }
+  elseif ($form_id == 'data_entity_entity_add_form') {
+    $record = $form_state['input']['data'];
+    drupal_write_record($table->name, $record);
+    // Save additional fields provided by users through UI.
+    field_attach_insert($entity_type, $pseudo_entity);
+  }
+
   field_attach_submit($entity_type, $pseudo_entity, $form, $form_state);
 
-  // Save fields.
-  field_attach_update($entity_type, $pseudo_entity);
 }
-- 
1.7.4.4


From 0a5476a02611cee8e542ba04296f8dbf8bf326bc Mon Sep 17 00:00:00 2001
From: Adam Sanchez <a.sanchez75@gmail.com>
Date: Sun, 23 Nov 2014 12:15:17 +0100
Subject: by asanchez75: link to access form for adding items

---
 data_entity/views/data_entity.views.inc |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/data_entity/views/data_entity.views.inc b/data_entity/views/data_entity.views.inc
index 1e8add7..657ef8f 100644
--- a/data_entity/views/data_entity.views.inc
+++ b/data_entity/views/data_entity.views.inc
@@ -35,6 +35,14 @@ function data_entity_views_default_views_alter(&$views) {
       $view = $views[$view_name];
 
       $handler =& $view->display['default']->handler;
+
+      /* Header: Global: Unfiltered text */
+      $handler->display->display_options['header']['area_text_custom']['id'] = 'area_text_custom';
+      $handler->display->display_options['header']['area_text_custom']['table'] = 'views';
+      $handler->display->display_options['header']['area_text_custom']['field'] = 'area_text_custom';
+      $handler->display->display_options['header']['area_text_custom']['label'] = 'add_link';
+      $handler->display->display_options['header']['area_text_custom']['content'] = l('Add item', 'admin/content/data/entity/' . $table_name . '/add', array('query' => array('destination' => 'admin/content/data/view/' . $table_name)));
+
       /* Field: User: Name */
       $handler->display->display_options['fields']['edit_link']['id'] = 'edit_link';
       $handler->display->display_options['fields']['edit_link']['table'] = $table_name;
-- 
1.7.4.4

