Untitled
unknown
php
a year ago
6.7 kB
6
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