pino-8.x-1.2-no-core/modules/member_import/member_import.batch.inc
modules/member_import/member_import.batch.inc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | <?php /** * @file * Handler for member_import batch importing. */ use Drupal\member\Entity\Member; use Drupal\taxonomy\Entity\Term; /** * Main batch task. */ function member_import_batch_import( $row , $field_relations , & $context ) { $entity_field_manager = \Drupal::service( 'entity_field.manager' ); $field_definitions = $entity_field_manager ->getFieldStorageDefinitions( 'member' ); $member_data = []; foreach ( $row as $key => $value ) { if (isset( $field_relations [ $key ]) && $field_relations [ $key ] != "" ) { // The field is set to be inserted. $type = $field_definitions [ $field_relations [ $key ]]-> getType (); // Modify the data if necessary before inserting. switch ( $type ) { case 'boolean' : // Booleans are tricky, let's assume that empty fields are negative. if ( $value && $value != '' ) { $member_data [ $field_relations [ $key ]] = 1; } else { $member_data [ $field_relations [ $key ]] = 0; } break ; case 'datetime' : $member_data [ $field_relations [ $key ]] = date ( "Y-m-d" , strtotime ( $value )); break ; case 'timestamp' : $member_data [ $field_relations [ $key ]] = strtotime ( $value ); break ; case 'entity_reference' : /* Let's presume the data is separated by commas and that the data is for the position field */ $positions = explode ( "," , $value ); foreach ( $positions as $position ) { if ( $position != "" ) { $position = trim( $position ); // Try to load as taxonomy term $terms = \Drupal::entityTypeManager() ->getStorage( 'taxonomy_term' ) ->loadByProperties([ 'name' => $position , 'vid' => 'positions' , ]); $term = reset( $terms ); if (! $terms ) { // Term not found, let's create it $term = Term::create([ 'parent' => [], 'vid' => 'positions' , 'name' => $position , ]); $term ->save(); } $member_data [ $field_relations [ $key ]][] = [ 'target_id' => $term ->id()]; } } break ; default : $member_data [ $field_relations [ $key ]] = $value ; break ; } } } \Drupal::logger( 'member_import' )->notice(print_r( $member_data , TRUE)); $member = Member::create( $member_data ); $member ->save(); $context [ 'results' ][] = $member ->id(); $context [ 'message' ] = t( 'Imported user @user' , [ '@user' => $member ->getName()]); } /** * Finished function when batch finishes. */ function member_import_batch_import_finished( $success , $results , $operations ) { // The 'success' parameter means no fatal PHP errors were detected. All // other error management should be handled using 'results'. if ( $success ) { \Drupal::messenger()->addMessage(t( '%members members were imported succesfully.' , [ '%members' => count ( $results )]), 'status' ); } else { \Drupal::messenger()->addMessage(t( 'An error occurred and importing did not complete.' ), 'error' ); } } |