From df98f9f17ef59eca95e1ebe5d0c32488f57fccf2 Mon Sep 17 00:00:00 2001
From: Marek Kisiel <marekkisiel.dev@gmail.com>
Date: Mon, 11 Nov 2013 14:26:23 +0100
Subject: [PATCH 1/2] Added user entity controller to entity info

---
 inline_entity_form.module | 1 +
 1 file changed, 1 insertion(+)

diff --git a/inline_entity_form.module b/inline_entity_form.module
index be41f13..18764c0 100644
--- a/inline_entity_form.module
+++ b/inline_entity_form.module
@@ -126,6 +126,7 @@ function inline_entity_form_entity_info_alter(&$entity_info) {
       'controller' => 'CommerceLineItemInlineEntityFormController',
     );
   }
+  $entity_info['user']['inline entity form'] = 'UserInlineEntityFormController';
 }
 
 /**
-- 
1.8.4.msysgit.0


From 9c02e2b90bb335b3e31194241af71b458d95b1b3 Mon Sep 17 00:00:00 2001
From: Marek Kisiel <marekkisiel.dev@gmail.com>
Date: Mon, 11 Nov 2013 14:27:19 +0100
Subject: [PATCH 2/2] user entity controller

---
 includes/user.inline_entity_form.inc | 95 ++++++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)
 create mode 100644 includes/user.inline_entity_form.inc

diff --git a/includes/user.inline_entity_form.inc b/includes/user.inline_entity_form.inc
new file mode 100644
index 0000000..cdba207
--- /dev/null
+++ b/includes/user.inline_entity_form.inc
@@ -0,0 +1,95 @@
+<?php
+
+class UserInlineEntityFormController extends EntityInlineEntityFormController {
+
+  /**
+   * Overrides EntityInlineEntityFormController::labels().
+   */
+  public function labels() {
+    return array_merge(parent::labels(), array('singular' => 'user', 'plural' => 'users'));
+  }
+
+  /**
+   * Overrides EntityInlineEntityFormController::tableFields().
+   */
+  public function tableFields($bundles) {
+    $metadata = entity_get_property_info($this->entityType);
+    $label_key = 'name';
+
+    return array(
+       $label_key => array(
+        'type' => 'property',
+        'label' => $metadata ? $metadata['properties'][$label_key]['label'] : t('Label'),
+        'weight' => 1,
+       )
+    );
+  }
+
+  /**
+   * Overrides EntityInlineEntityFormController::entityForm().
+   */
+  public function entityForm($entity_form, &$form_state) {
+    $entity_form = parent::entityForm($entity_form, $form_state);
+    $account = $entity_form['#entity'];
+    $entity_form['#user_category'] = 'account';
+
+    if (! isset($account->uid)) {
+      $entity_form = user_register_form($entity_form, $form_state);
+      $this->invokeAlterHooks('user_register_form',$entity_form,$form_state );
+    } else {
+      require_once drupal_get_path('module', 'user').'/user.pages.inc';
+      $form_state['user'] = $account;
+      $entity_form  = user_profile_form($entity_form,$form_state,$account);
+      $this->invokeAlterHooks('user_profile_form',$entity_form,$form_state );
+    }
+
+    return $entity_form;
+  }
+
+  /**
+   * Overrides EntityInlineEntityFormController::entityFormValidate().
+   */
+  public function entityFormValidate($entity_form, &$form_state) {
+    parent::entityFormValidate($entity_form, $form_state);
+    $child_form_state = $this->getFormState($form_state, $entity_form);
+    drupal_static_reset('form_set_error:limit_validation_errors');
+    user_account_form_validate($entity_form, $child_form_state);
+    entity_form_field_validate('user', $entity_form, $form_state);
+  }
+
+  /**
+   * Overrides EntityInlineEntityFormController::entityFormSubmit().
+   */
+  public function entityFormSubmit(&$entity_form, &$form_state) {
+    $entity_form['#parents'][] = 'account';
+    parent::entityFormSubmit($entity_form, $form_state);
+    $child_form_state = $this->getFormState($form_state, $entity_form);
+    $account = &$entity_form['#entity'];
+
+    if (! isset($account->uid)) {
+      user_register_submit($entity_form, $child_form_state);
+      $account->is_new = FALSE;
+      $account->uid = $child_form_state['values']['uid'];
+    } else {
+      require_once drupal_get_path('module', 'user').'/user.pages.inc';
+      $child_form_state['user']=$account;
+      user_profile_form_submit($entity_form, $child_form_state);
+    }
+  }
+
+  private function invokeAlterHooks($form_id,&$entity_form,&$form_state) {
+    $hooks = array('form');
+    $hooks[] = 'form_' . $form_id;
+    drupal_alter($hooks, $entity_form, $form_state, $form_id);
+  }
+
+  private function getFormState($form_state,$entity_form) {
+    $child_form_state = form_state_defaults();
+    if (end($entity_form['#parents']) != 'account') {
+      $entity_form['#parents'][] = 'account';
+    }
+    $child_form_state['values'] = drupal_array_get_nested_value($form_state['values'], $entity_form['#parents']);
+    return $child_form_state;
+  }
+
+}
\ No newline at end of file
-- 
1.8.4.msysgit.0

