carregarCKEditorJS(); $Aplic->carregarCalendarioJS(); $Aplic->carregarComboMultiSelecaoJS(); require_once $Aplic->getClasseSistema('Modelo'); require_once $Aplic->getClasseSistema('Template'); $base_dir=($config['dir_arquivo'] ? $config['dir_arquivo'] : BASE_DIR); $modeloID=getParam($_REQUEST, 'modeloID', null); if ($modeloID) $modelo_id=reset($modeloID); else $modelo_id=getParam($_REQUEST, 'modelo_id', null); $modelo_tipo_id=getParam($_REQUEST, 'modelo_tipo_id', null); $modelo_dados_id=getParam($_REQUEST, 'modelo_dados_id', null); $salvar=getParam($_REQUEST, 'salvar', 0); $editar=getParam($_REQUEST, 'editar', 0); $excluir=getParam($_REQUEST, 'excluir', 0); $aprovar=getParam($_REQUEST, 'aprovar', 0); $assinar=getParam($_REQUEST, 'assinar', 0); $anterior=getParam($_REQUEST, 'anterior', 0); $posterior=getParam($_REQUEST, 'posterior', 0); $campo=getParam($_REQUEST, 'campo', 0); $retornar=getParam($_REQUEST, 'retornar', 'modelo_pesquisar'); $novo=getParam($_REQUEST, 'novo', 0); $cancelar=getParam($_REQUEST, 'cancelar', 0); $lista_doc_referencia=getParam($_REQUEST, 'lista_doc_referencia', array()); $lista_msg_referencia=getParam($_REQUEST, 'lista_msg_referencia', array()); if (isset($vetor_modelo[$tab]) && $vetor_modelo[$tab]) $modelo_id=$vetor_modelo[$tab]; $coletivo=($Aplic->usuario_lista_grupo && $Aplic->usuario_lista_grupo!=$Aplic->usuario_id); $modelo_usuario_id=getParam($_REQUEST, 'modelo_usuario_id', null); //caso seja um novo documento os anexos usarão a chave criada $idunico=getParam($_REQUEST, 'idunico', ''); if (!$idunico) $idunico=uniqid('',true); $sql = new BDConsulta; if ($excluir){ $sql->setExcluir('modelos'); $sql->adOnde('modelo_id='.(int)$modelo_id); $sql->exec(); $sql->limpar(); $sql->setExcluir('modelos_dados'); $sql->adOnde('modelo_dados_modelo='.(int)$modelo_id); $sql->exec(); $sql->limpar(); $sql->adTabela('modelos_anexos'); $sql->adCampo('caminho'); $sql->adOnde('modelo_id='.(int)$modelo_id); $resultados=$sql->Lista(); $sql->limpar(); foreach ($resultados as $anexo){ $caminho=str_replace('/', '\\', $anexo['caminho']); if (file_exists($base_dir.'\\'.$config['pasta_anexos'].'_modelos\\'.$caminho)) @unlink($base_dir.'\\'.$config['pasta_anexos'].'_modelos\\'.$caminho); } $sql->setExcluir('modelos_anexos'); $sql->adOnde('modelo_id='.(int)$modelo_id); $sql->exec(); $sql->limpar(); $sql->setExcluir('anexos'); $sql->adOnde('modelo='.(int)$modelo_id); $sql->exec(); $sql->limpar(); $Aplic->redirecionar('m=email&a='.$retornar); exit(); } //leitura do modelo if ($modelo_id && !$modelo_tipo_id){ //Se foi enviado um modelo de documento $sql->adTabela('modelo_usuario'); $sql->adCampo('datahora_leitura, de_id, aviso_leitura'); $sql->adOnde('modelo_id ='.(int)$modelo_id); $sql->adOnde('para_id '.($coletivo ? 'IN ('.$Aplic->usuario_lista_grupo.')' : '='.$Aplic->usuario_id)); $sql_resultadosa = $sql->Lista(); $sql->limpar(); foreach ($sql_resultadosa as $rs_leitura){ if (!$rs_leitura['datahora_leitura']) { $data = date('Y-m-d H:i:s'); $sql->adTabela('modelo_usuario'); $sql->adAtualizar('datahora_leitura', $data); $sql->adAtualizar('status', 1); $sql->adOnde('para_id '.($coletivo ? 'IN ('.$Aplic->usuario_lista_grupo.')' : '='.$Aplic->usuario_id)); $sql->adOnde('modelo_id='.(int)$modelo_id); $sql->adOnde('datahora_leitura IS NULL'); $sql->exec(); $sql->limpar(); if ($rs_leitura['aviso_leitura']==1 && $Aplic->usuario_id==$usuario_id) aviso_leitura_modelo($rs_leitura['de_id'], $msg_id, $data); } } //Para abranger também os modelos anexados em msg_id $sql->adTabela('modelo_leitura'); $sql->adInserir('datahora_leitura', date('Y-m-d H:i:s')); $sql->adInserir('usuario_id', $Aplic->usuario_id); $sql->adInserir('modelo_id', $modelo_id); $sql->adInserir('download', 0); $sql->exec(); $sql->limpar(); } if ($modelo_id && !$modelo_tipo_id){ $sql->adTabela('modelos'); $sql->adCampo('modelo_tipo'); $sql->adOnde('modelo_id='.(int)$modelo_id); $modelo_tipo_id=$sql->Resultado(); $sql->limpar(); } if (!$modelo_tipo_id){ $Aplic->setMsg('Houve um erro ao carregar o tipo de documento', UI_MSG_ERRO); $Aplic->redirecionar('m=email&a='.$retornar); exit(); } if ($aprovar){ $sql->adTabela('modelos'); $sql->adAtualizar('modelo_versao_aprovada', $modelo_dados_id); $sql->adAtualizar('modelo_autoridade_aprovou', $Aplic->usuario_id); $sql->adAtualizar('modelo_aprovou_nome', $Aplic->usuario_nome); $sql->adAtualizar('modelo_aprovou_funcao', $Aplic->usuario_funcao); $sql->adAtualizar('modelo_data_aprovado', date('Y-m-d H:i:s')); $sql->adOnde('modelo_id='.(int)$modelo_id); $sql->exec(); $sql->limpar(); ver2('Documento aprovado.'); } if ($assinar){ $sql->adTabela('modelos'); $sql->adCampo('modelo_versao_aprovada'); $sql->adOnde('modelo_id='.(int)$modelo_id); $aprovado=$sql->Resultado(); $sql->limpar(); $sql->adTabela('modelos_dados'); $sql->adCampo('modelo_dados_id, modelos_dados_campos, modelos_dados_criador, modelo_dados_data'); $sql->adOnde('modelo_dados_modelo='.(int)$aprovado); $dados_aprovado=$sql->Linha(); $sql->limpar(); $assinatura=''; if (function_exists('openssl_sign') && $Aplic->chave_privada) { $identificador=$dados_aprovado['modelo_dados_id'].md5($dados_aprovado['modelos_dados_campos']).$dados_aprovado['modelos_dados_criador'].$dados_aprovado['modelo_dados_data']; openssl_sign($identificador, $assinatura, $Aplic->chave_privada); } $sql->adTabela('modelos'); $sql->adAtualizar('modelo_autoridade_assinou', $Aplic->usuario_id); $sql->adAtualizar('modelo_assinatura_nome', $Aplic->usuario_nome); $sql->adAtualizar('modelo_assinatura_funcao', $Aplic->usuario_funcao); $sql->adAtualizar('modelo_data_assinado', date('Y-m-d H:i:s')); $sql->adAtualizar('modelo_assinatura', base64_encode($assinatura)); $sql->adAtualizar('modelo_chave_publica', $Aplic->chave_publica_id); $sql->adOnde('modelo_id='.(int)$modelo_id); $sql->exec(); $sql->limpar(); echo ''; } if ($salvar && getParam($_REQUEST, 'assunto', '')){ if (!$modelo_id){ $sql->adTabela('modelos'); $sql->adInserir('modelo_tipo', $modelo_tipo_id); $sql->adInserir('modelo_criador_original', $Aplic->usuario_id); $sql->adInserir('modelo_criador_nome', $Aplic->usuario_nome); $sql->adInserir('modelo_criador_funcao', $Aplic->usuario_funcao); if (!$sql->exec()) die('Não foi possível inserir os dados na tabela modelos!'); $modelo_id=$bd->Insert_ID('modelos','modelo_id'); $sql->Limpar(); //mudar os anexos que estão sem id do modelo $sql->adTabela('modelos_anexos'); $sql->adCampo('modelo_anexo_id, caminho'); $sql->adOnde('idunico = \''.$idunico.'\''); $anexos=$sql->lista(); $sql->Limpar(); foreach($anexos as $anexo){ $segunda_parte=str_replace($idunico, '', substr($anexo['caminho'],8)); $novo_caminho=substr($anexo['caminho'],0,8).'M'.$modelo_id.$segunda_parte; if (file_exists($base_dir.'/'.$config['pasta_anexos'].'_modelos'.'/'.$anexo['caminho'])) rename($base_dir.'/'.$config['pasta_anexos'].'_modelos'.'/'.$anexo['caminho'], $base_dir.'/'.$config['pasta_anexos'].'_modelos'.'/'.$novo_caminho); $sql->adTabela('modelos_anexos'); $sql->adAtualizar('caminho', $novo_caminho); $sql->adAtualizar('modelo_id', $modelo_id); $sql->adOnde('modelo_anexo_id='.(int)$anexo['modelo_anexo_id']); $sql->exec(); $sql->limpar(); } } $sql->adTabela('modelos'); $sql->esqUnir('modelos_tipo','modelos_tipo','modelos_tipo.modelo_tipo_id=modelos.modelo_tipo'); $sql->adCampo('modelo_tipo, modelo_data, organizacao, modelo_tipo_html'); $sql->adOnde('modelo_id='.(int)$modelo_id); $linha=$sql->Linha(); $sql->adTabela('modelos'); $sql->adAtualizar('modelo_assunto', getParam($_REQUEST, 'assunto', '')); $sql->adAtualizar('class_sigilosa', getParam($_REQUEST, 'class_sigilosa', 0)); $sql->adOnde('modelo_id='.(int)$modelo_id); $sql->exec(); $sql->limpar(); if (!$linha['modelo_data']){ $sql->adTabela('modelos'); $sql->adAtualizar('modelo_data', date('Y-m-d H:i:s')); $sql->adOnde('modelo_id='.(int)$modelo_id); $sql->exec(); $sql->limpar(); } $sql->adTabela('modelos_tipo'); $sql->adCampo('modelo_tipo_campos'); $sql->adOnde('modelo_tipo_id='.(int)$linha['modelo_tipo']); $campos = unserialize($sql->Resultado()); $sql->limpar(); $modelo= new Modelo; $modelo->set_modelo_tipo($linha['modelo_tipo']); $modelo->set_modelo_id($modelo_id); foreach((array)$campos['campo'] as $posicao => $campo) { if ($campo['tipo']=='remetente'){ $resultado=array(); $resultado[0]=getParam($_REQUEST, 'remetente_'.$posicao, ''); $resultado[1]=getParam($_REQUEST, 'remetente_funcao_'.$posicao, ''); $modelo->set_campo($campo['tipo'], $resultado, $posicao, $campo['extra'], $campo['larg_max'], $campo['outro_campo']); } elseif ($campo['tipo']=='protocolo_secao'){ $resultado=array(); $resultado[0]=getParam($_REQUEST, 'dept_protocolo', ''); $resultado[1]=getParam($_REQUEST, 'dept_qnt_nr', ''); $modelo->set_campo($campo['tipo'], $resultado, $posicao, $campo['extra'], $campo['larg_max'], $campo['outro_campo']); } elseif ($campo['tipo']=='impedimento'){ $resultado=array(); $resultado[0]=getParam($_REQUEST, 'impedimento_'.$posicao, ''); $resultado[1]=getParam($_REQUEST, 'posto_'.$posicao, ''); $resultado[2]=getParam($_REQUEST, 'nomeguerra_'.$posicao, ''); $resultado[3]=getParam($_REQUEST, 'funcao_'.$posicao, ''); $resultado[7]=getParam($_REQUEST, 'assinante_'.$posicao, ''); $resultado[9]=getParam($_REQUEST, 'ordem_postonome_'.$posicao, ''); if ($resultado[0]){ $resultado[4]=getParam($_REQUEST, 'postor_'.$posicao, ''); $resultado[5]=getParam($_REQUEST, 'nomeguerrar_'.$posicao, ''); $resultado[6]=getParam($_REQUEST, 'funcaor_'.$posicao, ''); $resultado[8]=getParam($_REQUEST, 'assinanter_'.$posicao, ''); $resultado[10]=getParam($_REQUEST, 'ordem_postonomer_'.$posicao, ''); } $modelo->set_campo($campo['tipo'], $resultado, $posicao, $campo['extra'], $campo['larg_max'], $campo['outro_campo']); } elseif ($campo['tipo']=='assinatura'){ $resultado=array(); $resultado[0]=getParam($_REQUEST, 'posto_'.$posicao, ''); $resultado[1]=getParam($_REQUEST, 'nomeguerra_'.$posicao, ''); $resultado[2]=getParam($_REQUEST, 'funcao_'.$posicao, ''); $resultado[3]=getParam($_REQUEST, 'assinante_'.$posicao, ''); $resultado[4]=getParam($_REQUEST, 'ordem_postonome_'.$posicao, ''); $modelo->set_campo($campo['tipo'], $resultado, $posicao, $campo['extra'], $campo['larg_max'], $campo['outro_campo']); } elseif ($campo['tipo']=='destinatarios'){ $resultado=array(); $resultado[0]=getParam($_REQUEST, 'campo_'.$posicao, ''); $lista_destinatarios=getParam($_REQUEST, 'lista_destinatarios_'.$posicao, ''); $funcao_destinatarios=getParam($_REQUEST, 'funcao_destinatarios_'.$posicao, ''); $lista_destinatarios=explode('#', $lista_destinatarios); $funcao_destinatarios=explode('#', $funcao_destinatarios); for ($i=0; $i < count($lista_destinatarios); $i++){ if ($lista_destinatarios[$i]) $resultado[$i+1]=array($lista_destinatarios[$i], $funcao_destinatarios[$i]); } $modelo->set_campo($campo['tipo'], $resultado, $posicao, $campo['extra'], $campo['larg_max'], $campo['outro_campo']); } elseif ($campo['tipo']=='anexo'){ $anexos=getParam($_REQUEST, 'anexo_'.$posicao, ''); $nomes_fantasia=getParam($_REQUEST, 'nome_fantasia_'.$posicao, ''); $resultado=array(); foreach ((array)$anexos as $chave => $modelo_anexo){ if (isset($nomes_fantasia[$chave])) $resultado[$modelo_anexo]=$nomes_fantasia[$chave]; } $modelo->set_campo($campo['tipo'], $resultado, $posicao, $campo['extra'], $campo['larg_max'], $campo['outro_campo']); } else $modelo->set_campo($campo['tipo'], getParam($_REQUEST, 'campo_'.$posicao, null), $posicao, $campo['extra'], $campo['larg_max'], $campo['outro_campo']); } $tpl = new Template($linha['modelo_tipo_html'],'',$config['militar']); $modelo->set_modelo($tpl); $modelo->edicao=false; $editar=0; $vars = get_object_vars($modelo); $sql->adTabela('modelos_dados'); $sql->adInserir('modelo_dados_modelo', $modelo_id); if( config('tipoBd') == 'postgres') $sql->adInserir('modelos_dados_campos', addslashes(serialize($vars))); else $sql->adInserir('modelos_dados_campos', serialize($vars)); $sql->adInserir('modelos_dados_criador', $Aplic->usuario_id); $sql->adInserir('nome_usuario', ($Aplic->usuario_posto ? $Aplic->usuario_posto.' ' : '').$Aplic->usuario_nomeguerra); $sql->adInserir('funcao_usuario', $Aplic->usuario_funcao); $sql->adInserir('modelo_dados_data', date('Y-m-d H:i:s')); $sql->exec(); $sql->limpar(); $modelo_dados_id=$bd->Insert_ID('modelos_dados','modelo_dados_id'); //grava o documento //referencias //excluir antigas referencias $sql->setExcluir('referencia'); $sql->adOnde('referencia_doc_filho = '.(int)$modelo_id); $sql->exec(); $sql->limpar(); foreach((array)$lista_doc_referencia as $chave => $doc_id_pai){ $sql->adTabela('referencia'); $sql->adInserir('referencia_doc_pai', $doc_id_pai); $sql->adInserir('referencia_doc_filho', $modelo_id); $sql->adInserir('referencia_responsavel', $Aplic->usuario_id); $sql->adInserir('referencia_data', date('Y-m-d H:i:s')); $sql->adInserir('referencia_nome_de', $Aplic->usuario_nome); $sql->adInserir('referencia_funcao_de', $Aplic->usuario_funcao); if (!$sql->exec()) die('Não foi possível inserir os dados na tabela referencia!'); $sql->limpar(); } foreach((array)$lista_msg_referencia as $chave => $msg_id_pai){ $sql->adTabela('referencia'); $sql->adInserir('referencia_msg_pai', $msg_id_pai); $sql->adInserir('referencia_doc_filho', $modelo_id); $sql->adInserir('referencia_responsavel', $Aplic->usuario_id); $sql->adInserir('referencia_data', date('Y-m-d H:i:s')); $sql->adInserir('referencia_nome_de', $Aplic->usuario_nome); $sql->adInserir('referencia_funcao_de', $Aplic->usuario_funcao); if (!$sql->exec()) die('Não foi possível inserir os dados na tabela referencia!'); $sql->limpar(); } if ($Aplic->profissional && isset($_REQUEST['uuid']) && $_REQUEST['uuid']){ $sql->adTabela('modelo_gestao'); $sql->adAtualizar('modelo_gestao_modelo', (int)$modelo_id); $sql->adAtualizar('modelo_gestao_uuid', null); $sql->adOnde('modelo_gestao_uuid=\''.getParam($_REQUEST, 'uuid', null).'\''); $sql->exec(); $sql->limpar(); } ver2('Documento salvo'); $salvar=0; $novo=0; } elseif ($salvar && !getParam($_REQUEST, 'assunto', '')) ver2('O assunto do documento não foi enviado!'); //criar um novo documento if (!$modelo_id){ $sql->adTabela('modelos_tipo'); $sql->adCampo('modelo_tipo_campos, modelo_tipo_html'); $sql->adOnde('modelo_tipo_id='.(int)$modelo_tipo_id); $linha=$sql->linha(); $sql->limpar(); $campos = unserialize($linha['modelo_tipo_campos']); $modelo= new Modelo; $modelo->set_modelo_tipo($modelo_tipo_id); foreach((array)$campos['campo'] as $posicao => $campo) $modelo->set_campo($campo['tipo'], str_replace('\"','"',$campo['dados']), $posicao, $campo['extra'], $campo['larg_max'], $campo['outro_campo']); $tpl = new Template($linha['modelo_tipo_html'],'',$config['militar']); $modelo->set_modelo($tpl); $modelo->set_modelo_id($modelo_id); if ($editar) $modelo->edicao=true; else $modelo->edicao=false; $criador=$Aplic->usuario_id; } elseif ($modelo_id && !$salvar){ $sql->adTabela('modelos'); $sql->esqUnir('modelos_tipo','modelos_tipo','modelos_tipo.modelo_tipo_id=modelos.modelo_tipo'); $sql->adCampo('class_sigilosa, modelo_assinatura, modelo_chave_publica, modelo_id, modelo_tipo, modelo_criador_original, modelo_data, modelo_versao_aprovada, modelo_protocolo, modelo_autoridade_assinou, modelo_autoridade_aprovou, modelo_assunto, organizacao, modelo_tipo_html'); $sql->adOnde('modelo_id='.(int)$modelo_id); $linha=$sql->Linha(); $sql->Limpar(); $sql->adTabela('modelos_dados'); $sql->esqUnir('usuarios', 'usuarios', 'usuario_id = modelos_dados_criador'); $sql->esqUnir('contatos', 'contatos', 'contato_id = usuario_contato'); $sql->adCampo('contato_funcao, '.($config['militar'] < 10 ? 'concatenar_tres(contato_posto, \' \', contato_nomeguerra)' : 'contato_nomeguerra').' AS nome_usuario'); $sql->adCampo('modelo_dados_id, modelos_dados_campos, modelos_dados_criador, modelo_dados_data'); $sql->adOnde('modelo_dados_modelo='.(int)$modelo_id); if ($modelo_dados_id && $anterior) { $sql->adOnde('modelo_dados_id <'.$modelo_dados_id); $sql->adOrdem('modelo_dados_id DESC'); } elseif ($modelo_dados_id && $posterior) { $sql->adOnde('modelo_dados_id >'.(int)$modelo_dados_id); $sql->adOrdem('modelo_dados_id ASC'); } else $sql->adOrdem('modelo_dados_id DESC'); $dados=$sql->Linha(); $sql->Limpar(); $modelo_dados_id=$dados['modelo_dados_id']; $criador=$dados['modelos_dados_criador']; //desserializa o documento gravado if( config('tipoBd') == 'postgres') $campos = unserialize(stripslashes($dados['modelos_dados_campos'])); else $campos = unserialize($dados['modelos_dados_campos']); $modelo= new Modelo; $modelo->set_modelo_tipo($modelo_tipo_id); $modelo->set_modelo_id($modelo_id); foreach((array)$campos['campo'] as $posicao => $campo) $modelo->set_campo($campo['tipo'], str_replace('\"','"',$campo['dados']), $posicao, $campo['extra'], $campo['larg_max'], $campo['outro_campo']); $tpl = new Template($linha['modelo_tipo_html'],'',$config['militar']); $modelo->set_modelo($tpl); if ($editar && !$linha['modelo_versao_aprovada']) $modelo->edicao=true; else $modelo->edicao=false; } $qnt_antes=0; $qnt_depois=0; if ($modelo_dados_id && $modelo_id){ $sql->adTabela('modelos_dados'); $sql->adCampo('count(modelo_dados_id)'); $sql->adOnde('modelo_dados_id <'.(int)$modelo_dados_id); $sql->adOnde('modelo_dados_modelo ='.(int)$modelo_id); $qnt_antes=$sql->Resultado(); $sql->Limpar(); $sql->adTabela('modelos_dados'); $sql->adCampo('count(modelo_dados_id)'); $sql->adOnde('modelo_dados_id >'.(int)$modelo_dados_id); $sql->adOnde('modelo_dados_modelo ='.(int)$modelo_id); $qnt_depois=$sql->Resultado(); $sql->Limpar(); } echo '
'; ?>