Atualização da TB onde contém os Nomes das Aplic. p/ Módulo de Seg. [Resolvido]

Caros Amigos,

Todos os formulários gerados tem uma descrição ao lado do nome da aplicação, este campo usado por mim é para identificar melhor (resumo) o nome da aplicação criada exemplo:

APLICAÇÃO DESCRIÇÃO
form_adm_cliente Formulário de Administração de Clientes

Seria possível atualizar a tabela de aplicação do módulo de segurança com as descrições que tenho já informado no campo DESCRIÇÃO?

Pois no módulo de Segurança, vem no conteúdo do campo aplicação o nome da aplicação (form_adm_cliente) e no conteúdo da descrição vem o mesmo nome (form_adm_cliente), para altera uma a uma é muito trabalhoso, teria como atualizar com o conteúdo da DESCRIÇÃO (Formulário de Administração de Clientes) dentro do conteúdo do campo Descrição (Módulo de Segurança - Descrição das Aplicações)

Adeilson de Oliveira

Alguém da NetMake saberia responder esta dúvida?

Adeilson

Tente acessar o módulo de segurança como Administrador e sincronize as tabelas.

Jhon acho que vc não compreendeu a minha dúvida, a sincronização esta fazendo o problema é que eu quero que o sc pegue o conteúdo da descrição e não do nome do arquivo, leia novamente o exemplo que dei:

Projeto
aplicação Descrição
from_cad_cliente Formulário de Cadastro de Cliente

No módulo de segurança ele pegue o campo aplicação e coloca o conteúdo dele dentro dos dois campos:
aplicação Descrição
from_cad_cliente from_cad_cliente

Assim eu tenho que ficar editando cada um para alterar para que o usuário possa saber a descrição da aplicação.

Se vc fizer um exemplo crie um formulário e na descrição do formulário coloque Um descrição mais amigavél e inclua o módulo de segurança vai percebrer o que estou dizendo

Adeilson de Oliveira

Adeilson,

Essa é uma necessidade, também sinto falta disso… mas acho um pouco complicada essa funcionalidade uma vez que essa sincronização deveria ser feita no ambiente de produção, no qual o SC não tem acesso…

Abraço

http://www.netmake.com.br/forum/index.php?topic=4100.msg16080#msg16080

Grande Haroldo,

Eu já faço isso tb… mas o Adeilson está se referindo à Descrição das Aplicações… quando vc pega as novas aplicações (assim como eu) não consegue pegar as descrições das mesmas… o que poderia ser feito automaticamante.

Abraço.

Jovitomelo,

Que bom alguém me compreendeu, a NM tem que nos posicionar sobre este processo. Jovitomelo,

Haroldo o link que vc passou que também redireciona para o seu site esta desativado

http://www.scriptcaseajax.com.br/news.php?item.48.3

Desativação de algumas funcionalidades desse portal.
Haroldo, Monday 27 February 2012 - 21:18:50 // Comentário(s):0, TrackBacks:0
Colegas,
Tenho notado que este portal não tem mais sido relevante a comunidade, quase não há postagens, participação. A intenção inicial do mesmo foi criar um veículo desvinculado do fabricante do Scriptcase.
Vou manter apenas o Fórum, demais áreas serão desativadas, não sei por quanto tempo ainda o fórum vai ficar disponível, isso vai depender de vocês.
Façam vossos comentários no rodapé deste.
Grato.
Haroldo.


Adeilson de Oliveira

Posto na seguna a solução.eu pego a descrição tb.

O código a seguir está em minha app de consulta a aplicações do modulo de segurança, em um botão do tipo php. O mesmo resgata apps novas no ambiente de produção e as adiciona a tabela de aplicações juntamente com sua descrição.

$_rota=$this->Ini->root.$this->Ini->path_link; $_arr=directory_list($_rota,False,False,".|..|_lib",False); $_i=0; foreach ($_arr as &$value) { //ECHO "***".$value."***<BR>"; sc_lookup(rs,"Select count(*) from seg_aplicacoes where apl_fonte='".$value."' and (apl_nome<>'' or apl_nome is not null)"); If ($rs[0][0]==0) { $_file=$_rota.$value."/".$value.".php"; if (file_exists($_file)) { $_title=""; $handle = @fopen($_file,"r"); if ($handle) { while (!feof($handle)) { $buffer = fgets($handle, 4096); $pos_1a=strpos($buffer,"nm_nome_apl"); $pos_1b=strpos($buffer,"var "); If ( $pos_1a!==False && $pos_1b===False) { $pos_2=strpos($buffer,"="); $pos_3=strpos($buffer,";"); $_title=str_replace('"','',substr($buffer,$pos_2+1,$pos_3-$pos_2-1)); if (!empty($_title)) { sc_exec_sql("REPLACE INTO seg_aplicacoes (apl_fonte,apl_nome,modulo) values ('".$value."','".$_title."','0')"); $_i++; echo "Encontado Nova App:<b>$value</b> Nome:<b>$_title</b><br>"; } Break; }Else{ $pos_1a=strpos($buffer,"<TITLE>"); If ( $pos_1a!==False){ $pos_2=strpos($buffer,"</TITLE>"); $_title=str_replace(' ','',substr($buffer,$pos_1a+7,$pos_2-$pos_1a-7)); if (!empty($_title)) { sc_exec_sql("REPLACE INTO seg_aplicacoes (apl_fonte,apl_nome,modulo) values ('".$value." ','".$_title."','0')"); $_i++; echo "Encontado Nova App:<b>$value</b> Nome:<b>$_title</b><br>"; } Break; } } } fclose($handle); } } } } unset($value,$_arr,$_rota,$rs,$_title,$buffer,$_file); If (!$_i) Echo "Novas Aplicações não Encontradas<BR>"; sc_exec_sql("delete from seg_grupos_aplicacoes where apl_codigo in (Select apl_Codigo from seg_aplicacoes where apl_nome='' or apl_nome is null)"); sc_exec_sql("delete from seg_aplicacoes where apl_nome='' or apl_nome is null"); Echo "Removendo iconsistências, verifique Grupo de Acesso e ajuste se necessário.";

O código acima se utiliza de um biblioteca, que disponibilizo a seguir. Esse exemplo ficou disponível por 3 anos no scriptcaseajax.com.br.

[code]function directory_list($directory_base_path, $filter_dir = false, $filter_files = false, $exclude = “.|…|.DS_Store|.svn”, $recursive = true){
$directory_base_path = rtrim($directory_base_path, “/”) . “/”;

if (!is_dir($directory_base_path)){
    error_log(__FUNCTION__ . "File at: $directory_base_path is not a directory.");
    return false;
}

$result_list = array();
$exclude_array = explode("|", $exclude);

if (!$folder_handle = opendir($directory_base_path)) {
    error_log(__FUNCTION__ . "Could not open directory at: $directory_base_path");
    return false;
}else{
    while(false !== ($filename = readdir($folder_handle))) {
        if(!in_array($filename, $exclude_array)) {
            if(is_dir($directory_base_path . $filename . "/")) {
                if($recursive && strcmp($filename, ".")!=0 && strcmp($filename, "..")!=0 ){ // prevent infinite recursion
                    error_log($directory_base_path . $filename . "/");
                    $result_list[$filename] = directory_list("$directory_base_path$filename/", $filter_dir, $filter_files, $exclude, $recursive);
                }elseif(!$filter_dir){
                    $result_list[] = $filename;
                }
            }elseif(!$filter_files){
                $result_list[] = $filename;
            }
        }
    }
    closedir($folder_handle);
    return $result_list;
}

}[/code]

Haroldo,
Então é um Bug da versão 5.42, graças a sua modificação você conseguiu fazer funcionar, porém até hoje a NM, não resolveu este problema, e ela nem usou a sua idéia para resolver este BUG. Será que a versão 6.0 este problema esta resolvido?

Obrigado,

Adeilson de Oliveira

não instalei a v6 ainda, não sei dizer.

Senhor,

Infelizmente ainda não há um método nativo para isso, mas essa sugestão é interessante e poderá ser implementada numa nova versão do ScriptCase.

Estou pessoalmente encaminhando a sugestão para sugestao@netmake.com.br. Peço que os colegas aqui que também fariam bom proveito dessa funcionalidade enviem mais e-mails com a mesma sugestão, pois esse é um dos objetivos do forum: promover a interação e o agrupamento dos usuários para questões específicas.

Clarck,

Muito legal a idéia. Obrigado por compartilhar.

Muito bom Clarck

Aqui não funcionou…

Faz assim, coloque o campo como select , e direcione o sql para o campo DESCRIÇÃO aí vai aparecer o que você quer lá nas permissões

Estou na Versão 8, porém a app foi criada na Versão 7.

[code]$dir = opendir($this->Ini->path_aplicacao . “…”);
$arr_apps = array();

while ($file = readdir($dir))
{
if ($file != ‘.’ && $file != ‘…’ && $file != ‘_lib’)
{
$arr_apps[] = $file;
}
}
closedir($dir);

sc_select(rs, “SELECT app_name FROM dbo.seguranca_apps”);

$arr_apps_db = array();
while(!$rs->EOF)
{
$arr_apps_db[] = $rs->fields[0];
$rs->MoveNext();
}
$rs->Close();
$arr_apps = array_diff($arr_apps, $arr_apps_db);

//========= Groups =====
$arr_grp = array();
sc_select(rs, “SELECT group_id FROM dbo.seguranca_groups”);
while(!$rs->EOF)
{
$arr_grp[] = $rs->fields[0];
$rs->MoveNext();
}
$rs->Close();

foreach($arr_apps as $k => $app)
{
$file_ini = $this->Ini->path_aplicacao. “…/”.$app . “/”.$app ."_ini.txt";
if(is_file($file_ini))
{
$app_type = file($file_ini);
if(!isset($app_type[4]))
{
$app_type = ‘’;
}
else
$app_type = trim($app_type[4]);
}
else
$app_type = ‘’;
$sql = “SELECT count(*) FROM dbo.seguranca_apps WHERE app_name = '”. $app ."’ “;
sc_lookup(rs, $sql);
if({rs[0][0]} == 0)
{
$sql = “INSERT INTO dbo.seguranca_apps(app_name, app_type) VALUES (’”. $app .”’, ‘".$app_type."’)";
sc_exec_sql( $sql );
foreach($arr_grp as $grp)
{
$sql = “INSERT INTO dbo.seguranca_groups_apps(app_name, group_id) VALUES (’”. $app ."’, ‘". $grp ."’)";
sc_exec_sql( $sql );
}//ATÉ AQUI FOI CRIADO PELO SC NO MODULO DE SEGURANÇA

//SCRIPT DE SINCRONIZAÇÃO DE DESCRIÇÃO DE APLICAÇÕES

$_rota=$this->Ini->root.$this->Ini->path_link;
$_i=0;
foreach ($arr_apps as $value) {
//echo “***”.$value."**
";
sc_lookup(rs,"Select count(
) from seguranca_apps where app_name=’".$value."’");
if ($rs[0][0]==0) {
//$_file=$_rota."/".$value."/index.php";
$_file=$_rota.$value."/index.php";
//echo $_file;
if (file_exists($_file)) {
$_title="";
$handle = fopen($_file,“r”);
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$pos_1a=strpos($buffer,“nm_nome_apl”);
$pos_1b=strpos($buffer,“var “);
if ( $pos_1a!==false && $pos_1b===false){
$pos_2=strpos($buffer,”=”);
$pos_3=strpos($buffer,";");
$_title=str_replace(’"’,’’,substr($buffer,$pos_2+1,$pos_3-$pos_2-1));
if (!empty($_title)) {
sc_exec_sql(“update seguranca_apps set description =’”.$_title."’ where app_name =’".$value."’");
$_i++;
}
break;
}
}
fclose($handle);
}else{echo “sem handle
”;}
}else{echo “sem arquivo
”;}
}else{echo “app=”.$rs[0][0];}
}
}
}[/code]

Boa! Obrigado por compartilhar.

nada…nao atualiza…