field.inc 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. /**
  3. * Implementation of hook_user_import_form_field_match().
  4. */
  5. function field_user_import_form_field_match() {
  6. $options = array();
  7. $supported_field_types = field_user_import_supported_fields();
  8. $fields_info = field_info_instances('user', 'user');
  9. foreach ($fields_info as $field_name => $value) {
  10. $field_info = field_info_field($field_name);
  11. $type = $field_info['type'];
  12. if (isset($supported_field_types[$type])) {
  13. $options['field'][$field_name] = $value['label'];
  14. }
  15. else {
  16. drupal_set_message(t('Field %field is not supported', array('%field' => $value['label'])), 'warning');
  17. }
  18. }
  19. return $options;
  20. }
  21. /**
  22. * Implementation of hook_user_import_data().
  23. */
  24. function field_user_import_data($settings, $update_setting, $column_settings, $module, $field_id, $data, $column_id) {
  25. if ($module != 'field') return;
  26. $value = $data[$column_id];
  27. return $value;
  28. }
  29. /**
  30. * Implementation of hook_user_import_after_save().
  31. */
  32. function field_user_import_after_save($settings, $account, $password, $fields, $updated, $update_setting_per_module) {
  33. $fields_data = isset($fields['field']) ? $fields['field'] : array();
  34. if (empty($fields_data)) return;
  35. $processors = field_user_import_supported_fields();
  36. $delimiter = $settings['multi_value_delimiter'];
  37. $user_fields = user_load($account->uid);
  38. $processed_fields = array();
  39. foreach ($fields_data as $field_name => $data) {
  40. $field_info = field_info_field($field_name);
  41. $field_type = $field_info['type'];
  42. $processor_function = $processors[$field_type]['save'];
  43. // Deal with multiple values.
  44. $values = explode($delimiter, $data[0]);
  45. // Use callback function to process info for field before saving.
  46. $processed_fields[$field_name] = $processor_function($user_fields, $field_name, $values);
  47. }
  48. if (!empty($processed_fields)) {
  49. user_save($account, $processed_fields);
  50. }
  51. return;
  52. }
  53. function field_user_import_default_field_processor($user_fields, $field_name, $values) {
  54. // @todo deal with multiple values
  55. // @todo deal with language
  56. // @todo deal with updating existing account
  57. $field = $user_fields->$field_name;
  58. for ($i = 0; $i < count($values); $i++) {
  59. if (!empty($values[$i])) {
  60. $field[LANGUAGE_NONE][$i]['value'] = $values[$i];
  61. }
  62. }
  63. return $field;
  64. }
  65. function field_user_import_taxonomy_field_processor($user_fields, $field_name, $values) {
  66. $field = $user_fields->$field_name;
  67. for ($i = 0; $i < count($values); $i++) {
  68. if (empty($values[$i])) {
  69. continue; // Do not save empty fields
  70. }
  71. // Get taxonomy term ID before saving if term already exists
  72. $field_info = field_info_field($field_name);
  73. $vocabulary = $field_info['settings']['allowed_values'][0]['vocabulary'];
  74. $tid = taxonomy_get_term_by_name($values[$i], $vocabulary);
  75. if (empty($tid)) {
  76. // Create a new taxonomy term
  77. $field[LANGUAGE_NONE][$i]['tid'] = 'autocreate';
  78. $field[LANGUAGE_NONE][$i]['vid'] = taxonomy_vocabulary_machine_name_load($vocabulary)->vid;
  79. $field[LANGUAGE_NONE][$i]['name'] = $values[$i];
  80. $field[LANGUAGE_NONE][$i]['description'] = '';
  81. $field[LANGUAGE_NONE][$i]['format'] = 'plain_text';
  82. }
  83. else {
  84. $field[LANGUAGE_NONE][$i]['tid'] = array_shift($tid)->tid;
  85. }
  86. }
  87. return $field;
  88. }
  89. function field_user_import_supported_fields($output = 'all') {
  90. static $supported = array();
  91. if (empty($supported)) {
  92. $supported['text'] = array(
  93. 'validate' => 'field_user_import_default_field_validator',
  94. 'save' => 'field_user_import_default_field_processor',
  95. );
  96. $supported['list_boolean'] = array(
  97. 'validate' => 'field_user_import_default_field_validator',
  98. 'save' => 'field_user_import_default_field_processor',
  99. );
  100. $supported['number_decimal'] = array(
  101. 'validate' => 'field_user_import_default_field_validator',
  102. 'save' => 'field_user_import_default_field_processor',
  103. );
  104. $supported['number_float'] = array(
  105. 'validate' => 'field_user_import_default_field_validator',
  106. 'save' => 'field_user_import_default_field_processor',
  107. );
  108. $supported['number_integer'] = array(
  109. 'validate' => 'field_user_import_default_field_validator',
  110. 'save' => 'field_user_import_default_field_processor',
  111. );
  112. $supported['list_float'] = array(
  113. 'validate' => 'field_user_import_default_field_validator',
  114. 'save' => 'field_user_import_default_field_processor',
  115. );
  116. $supported['list_integer'] = array(
  117. 'validate' => 'field_user_import_default_field_validator',
  118. 'save' => 'field_user_import_default_field_processor',
  119. );
  120. $supported['list_text'] = array(
  121. 'validate' => 'field_user_import_default_field_validator',
  122. 'save' => 'field_user_import_default_field_processor',
  123. );
  124. // 'format'? 'safe_value'? - DONE
  125. $supported['text_long'] = array(
  126. 'validate' => 'field_user_import_default_field_validator',
  127. 'save' => 'field_user_import_default_field_processor',
  128. );
  129. // 'format'? 'safe_value'? 'summary'? 'safe_summary'?
  130. $supported['text_with_summary'] = array(
  131. 'validate' => 'field_user_import_default_field_validator',
  132. 'save' => 'field_user_import_default_field_processor',
  133. );
  134. $supported['taxonomy_term_reference'] = array(
  135. 'validate' => 'field_user_import_default_field_validator',
  136. 'save' => 'field_user_import_taxonomy_field_processor',
  137. );
  138. /** Unsupported for the moment **/
  139. // $supported['file'] = array(
  140. // 'validate' => 'field_user_import_default_field_validator',
  141. // 'save' => 'field_user_import_default_field_processor',
  142. // );
  143. // $supported['image'] = array(
  144. // 'validate' => 'field_user_import_default_field_validator',
  145. // 'save' => 'field_user_import_default_field_processor',
  146. // );
  147. /** Not core - move to their own .inc files **/
  148. // $supported['datetime'] = array(
  149. // 'validate' => 'field_user_import_default_field_validator',
  150. // 'save' => 'field_user_import_default_field_processor',
  151. // );
  152. //
  153. // $supported['date'] = array(
  154. // 'validate' => 'field_user_import_default_field_validator',
  155. // 'save' => 'field_user_import_default_field_processor',
  156. // );
  157. //
  158. //
  159. // $supported['datestamp'] = array(
  160. // 'validate' => 'field_user_import_default_field_validator',
  161. // 'save' => 'field_user_import_default_field_processor',
  162. // );
  163. // $supported['addressfield'] = array(
  164. // 'validate' => 'field_user_import_default_field_validator',
  165. // 'save' => 'field_user_import_default_field_processor',
  166. // );
  167. // hook to add functions to this array.
  168. // Will call all modules implementing hook_field_user_import_supported_alter
  169. drupal_alter('field_user_import_supported', $supported);
  170. }
  171. return $supported;
  172. }