Untitled
public
Jul 10, 2024
Never
22
1 function process_import($ps_objeto_de_importacao, $pa_dados_csv, $pa_header_import): array 2 { 3 // TODO: Deal with date values, multi_input fields, hierarchical objects, list-control-related (non-acervo) items, institution-targetting and required fields 4 5 global $va_parametros_importacao, $va_usuario, $vn_usuario_logado_instituicao_codigo, $vb_usuario_logado_instituicao_admin; 6 $vs_usuario_codigo = $va_usuario["usuario_codigo"]; 7 8 $vo_objeto_de_importacao = new $ps_objeto_de_importacao; 9 $vo_timezone = new DateTImeZone('America/Sao_Paulo'); 10 $vo_datetime_inicio_importacao = new DateTime('now', $vo_timezone); 11 $va_log_importacao = [ 12 "objeto_importacao" => $ps_objeto_de_importacao, 13 "modo_importacao" => $va_parametros_importacao["import_mode"], 14 "operacoes" => array(), 15 "inicio" => $vo_datetime_inicio_importacao, 16 ]; 17 18 foreach ($pa_dados_csv as $row => $row_data) 19 { 20 $va_dados_row_salvar = array(); 21 if (in_array($va_parametros_importacao["import_mode"], ["upsert", "update", "create"])) 22 { 23 if (is_item_acervo($pa_header_import)) 24 { 25 26 $va_identifier_search_pointers = get_identifier_parameters_from_import_header($pa_header_import, "identificador"); 27 if (!$va_identifier_search_pointers && $va_parametros_importacao["import_mode"] == "update") 28 { 29 $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto sem identificador em importação de atualização."]; 30 continue; 31 } 32 elseif ($va_identifier_search_pointers) 33 { 34 $vo_objeto_de_importacao->inicializar_campos_importacao(); 35 $va_campos_importacao = $vo_objeto_de_importacao->get_campos_importacao(); 36 $vs_identificacao_objeto_busca = $row_data[$va_identifier_search_pointers["posicao"]]; 37 $vs_campo_identificador_busca = $va_campos_importacao["identificador_registro"][0]; 38 if (isset($vs_identificacao_objeto_busca)) { 39 $va_search_parameters[$vs_campo_identificador_busca] = [ 40 $vs_identificacao_objeto_busca 41 ]; 42 $vo_search_result = $vo_objeto_de_importacao->ler_lista($va_search_parameters); 43 } elseif ($va_parametros_importacao["import_mode"] == "update") 44 { 45 $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto sem valor de identificação em importação de atualização."]; 46 47 } 48 } 49 if (isset($vo_search_result) && count($vo_search_result) > 0) 50 { 51 if ($va_parametros_importacao["import_mode"] == "create") 52 { 53 $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto já existente na aplicação."]; 54 continue; 55 } 56 $va_dados_row_salvar[$ps_objeto_de_importacao . "_codigo"] = $vo_search_result[0][$ps_objeto_de_importacao . "_codigo"]; 57 } elseif ($va_parametros_importacao["import_mode"] == "update") 58 { 59 $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto não existente na aplicação."]; 60 continue; 61 } 62 } 63 // Codigos nesse pitfall referem a itens que não são de acervo 64 65 } 66 foreach ($row_data as $col => $col_data) 67 { 68 if (array_key_exists($col, $pa_header_import)) 69 { 70 $vs_chave_campo_destino = $pa_header_import[$col]["campo_destino"]; 71 $va_dados_row_salvar["usuario_logado_codigo"] = $vs_usuario_codigo; 72 if (strpos($vs_chave_campo_destino, "_codigo")) 73 { 74 // Exportacao sempre traz o NOME ao invés do código. essa parte do código trata de retornar essa identificacao caso o campo seja de relacionamento 75 $vs_id_objeto_busca = $pa_header_import[$col]["campo_destino_parametros"]["objeto"]; 76 $vs_atributo_objeto_busca = $pa_header_import[$col]["campo_destino_parametros"]["atributos"][1]; 77 $vs_valor_objeto_busca = $col_data; 78 $vs_atributo_objeto_retorno = $pa_header_import[$col]["campo_destino_parametros"]["atributos"][0]; 79 $vs_resultado_busca = get_codigo_objeto_from_nome($vs_id_objeto_busca, $vs_valor_objeto_busca, $vs_atributo_objeto_busca, $vs_atributo_objeto_retorno); 80 $col_data = $vs_resultado_busca; 81 } 82 $va_dados_row_salvar[$vs_chave_campo_destino] = $col_data; 83 if (!isset($va_dados_row_salvar["item_acervo_identificador"])) { 84 $va_dados_row_salvar["item_acervo_identificador"] = ""; 85 } 86 // TODO: Em ultima instancia onde o usuário nao selecionou instituicao, ver qual é admin e passar como default selecionada 87 $va_dados_row_salvar["instituicao_codigo"] = $vn_usuario_logado_instituicao_codigo; 88 89 $va_dados_row_salvar["item_acervo_acervo_codigo"] = $va_dados_row_salvar["instituicao_codigo"]; 90 // Talvez transformar em uma opcao de checkbox pra saber se o usuário quer que os dados importados estejam publicados ou não? 91 $va_dados_row_salvar["texto_publicado_online"] = "1"; 92 $va_dados_row_salvar["texto_publicado_online_chk"] = "1"; 93 94 } 95 } 96 if (isset($va_parametros_importacao["import_debug"])) 97 { 98 $va_log_importacao["operacoes"][] = ["result" => "Positivo (Debug)"]; 99 100 } 101 else 102 { 103 $vo_objeto_de_importacao->iniciar_transacao(); 104 $va_log_importacao["operacoes"][] = ["codigo_objeto" => $vo_objeto_de_importacao->salvar($va_dados_row_salvar), "result" => "Positivo"]; 105 $vo_objeto_de_importacao->finalizar_transacao(); 106 } 107 108 } 109 $va_log_importacao["fim"] = new DateTime('now', $vo_timezone); 110 $va_log_importacao["duracao"] = $va_log_importacao["inicio"]->diff($va_log_importacao["fim"]); 111 $va_log_importacao["duracao_string"] = $va_log_importacao["duracao"]->format('%i minutos, %s segundos'); 112 return $va_log_importacao; 113 114 }