Untitled
unknown
php
a year ago
6.7 kB
3
Indexable
function process_import($ps_objeto_de_importacao, $pa_dados_csv, $pa_header_import): array { // TODO: Deal with date values, multi_input fields, hierarchical objects, list-control-related (non-acervo) items, institution-targetting and required fields global $va_parametros_importacao, $va_usuario, $vn_usuario_logado_instituicao_codigo, $vb_usuario_logado_instituicao_admin; $vs_usuario_codigo = $va_usuario["usuario_codigo"]; $vo_objeto_de_importacao = new $ps_objeto_de_importacao; $vo_timezone = new DateTImeZone('America/Sao_Paulo'); $vo_datetime_inicio_importacao = new DateTime('now', $vo_timezone); $va_log_importacao = [ "objeto_importacao" => $ps_objeto_de_importacao, "modo_importacao" => $va_parametros_importacao["import_mode"], "operacoes" => array(), "inicio" => $vo_datetime_inicio_importacao, ]; foreach ($pa_dados_csv as $row => $row_data) { $va_dados_row_salvar = array(); if (in_array($va_parametros_importacao["import_mode"], ["upsert", "update", "create"])) { if (is_item_acervo($pa_header_import)) { $va_identifier_search_pointers = get_identifier_parameters_from_import_header($pa_header_import, "identificador"); if (!$va_identifier_search_pointers && $va_parametros_importacao["import_mode"] == "update") { $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto sem identificador em importação de atualização."]; continue; } elseif ($va_identifier_search_pointers) { $vo_objeto_de_importacao->inicializar_campos_importacao(); $va_campos_importacao = $vo_objeto_de_importacao->get_campos_importacao(); $vs_identificacao_objeto_busca = $row_data[$va_identifier_search_pointers["posicao"]]; $vs_campo_identificador_busca = $va_campos_importacao["identificador_registro"][0]; if (isset($vs_identificacao_objeto_busca)) { $va_search_parameters[$vs_campo_identificador_busca] = [ $vs_identificacao_objeto_busca ]; $vo_search_result = $vo_objeto_de_importacao->ler_lista($va_search_parameters); } elseif ($va_parametros_importacao["import_mode"] == "update") { $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto sem valor de identificação em importação de atualização."]; } } if (isset($vo_search_result) && count($vo_search_result) > 0) { if ($va_parametros_importacao["import_mode"] == "create") { $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto já existente na aplicação."]; continue; } $va_dados_row_salvar[$ps_objeto_de_importacao . "_codigo"] = $vo_search_result[0][$ps_objeto_de_importacao . "_codigo"]; } elseif ($va_parametros_importacao["import_mode"] == "update") { $va_log_importacao["operacoes"][] = ["result" => "Negativo", "placeholder" => "Objeto não existente na aplicação."]; continue; } } // Codigos nesse pitfall referem a itens que não são de acervo } foreach ($row_data as $col => $col_data) { if (array_key_exists($col, $pa_header_import)) { $vs_chave_campo_destino = $pa_header_import[$col]["campo_destino"]; $va_dados_row_salvar["usuario_logado_codigo"] = $vs_usuario_codigo; if (strpos($vs_chave_campo_destino, "_codigo")) { // 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 $vs_id_objeto_busca = $pa_header_import[$col]["campo_destino_parametros"]["objeto"]; $vs_atributo_objeto_busca = $pa_header_import[$col]["campo_destino_parametros"]["atributos"][1]; $vs_valor_objeto_busca = $col_data; $vs_atributo_objeto_retorno = $pa_header_import[$col]["campo_destino_parametros"]["atributos"][0]; $vs_resultado_busca = get_codigo_objeto_from_nome($vs_id_objeto_busca, $vs_valor_objeto_busca, $vs_atributo_objeto_busca, $vs_atributo_objeto_retorno); $col_data = $vs_resultado_busca; } $va_dados_row_salvar[$vs_chave_campo_destino] = $col_data; if (!isset($va_dados_row_salvar["item_acervo_identificador"])) { $va_dados_row_salvar["item_acervo_identificador"] = ""; } // TODO: Em ultima instancia onde o usuário nao selecionou instituicao, ver qual é admin e passar como default selecionada $va_dados_row_salvar["instituicao_codigo"] = $vn_usuario_logado_instituicao_codigo; $va_dados_row_salvar["item_acervo_acervo_codigo"] = $va_dados_row_salvar["instituicao_codigo"]; // Talvez transformar em uma opcao de checkbox pra saber se o usuário quer que os dados importados estejam publicados ou não? $va_dados_row_salvar["texto_publicado_online"] = "1"; $va_dados_row_salvar["texto_publicado_online_chk"] = "1"; } } if (isset($va_parametros_importacao["import_debug"])) { $va_log_importacao["operacoes"][] = ["result" => "Positivo (Debug)"]; } else { $vo_objeto_de_importacao->iniciar_transacao(); $va_log_importacao["operacoes"][] = ["codigo_objeto" => $vo_objeto_de_importacao->salvar($va_dados_row_salvar), "result" => "Positivo"]; $vo_objeto_de_importacao->finalizar_transacao(); } } $va_log_importacao["fim"] = new DateTime('now', $vo_timezone); $va_log_importacao["duracao"] = $va_log_importacao["inicio"]->diff($va_log_importacao["fim"]); $va_log_importacao["duracao_string"] = $va_log_importacao["duracao"]->format('%i minutos, %s segundos'); return $va_log_importacao; }
Editor is loading...
Leave a Comment