G

Untitled

public
Guest Jul 10, 2024 Never 10
Clone
PHP paste1.php 114 lines (103 loc) | 6.55 KB
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
}