Corrigindo sincronizar aplicação no módulo de segurança

Á

Álvaro Moura

Última atualização em Jul 6, 2026

Neste artigo veremos como corrigir o problema na aplicação de sync_app (nome padrão) sem a necessidade de recriar o módulo de segurança.

InfoEsta correção se aplica para um módulo de segurança criado em uma release anterior a 9.12.021 e que seja dos tipos:

  • Grupo
  • Aplicação
  • Ldap/Aplicação

O problema

Ao apagar uma aplicação do sistema, na lista de aplicações, e utilizar a opção sincronizar aplicações para atualizar as bases algumas tabelas não estavam sendo atualizadas e as aplicações deletaras continuavam sendo exibidas.

Como corrigir

Para corrigir o problema no sincronizar aplicações do módulo de segurança, será necessário alterar os códigos dos eventos onValidateonValidateSuccessna aplicação sync_apps(nome padrão).

Passo a passo

Siga os passos a baixo, em caso de dúvida entre em contato com nosso suporte através dos canais oficiais.

1. Encontrado a aplicação

Independente do prefixo utilizado na criação do módulo de segurança o nome padrão da aplicação é sync_apps. Na home do seu projeto pesquisa por sync_apps.

2. Código do onValidate

Ao abrir a aplicação acesse o evento onValidate comente o código atual e adicione o código abaixo.

Alert

O código abaixo utiliza os nomes padrão das tabelas, campos e aplicações. Antes de realizar a alteração definitiva, verifique os nomes das tabelas utilizadas em seu sistema e altere os nomes no código se necessário.

Abaixo segue a lista de comandos SQL utilizados neste código.

  • sc_select(rs, "SELECT app_name FROM sec_apps");
  • sc_exec_sql("DELETE FROM sec_groups_apps WHERE app_name = " . sc_sql_injection($app));
  • sc_exec_sql("DELETE FROM sec_apps WHERE app_name = " . sc_sql_injection($app));
  • sc_select(rs, "SELECT group_id FROM sec_groups");
  • "SELECT count(*) FROM sec_apps WHERE app_name = '". $app ."' ";
  • "INSERT INTO sec_apps(app_name, app_type, description) VALUES ('". $app ."', '".$app_type."', '".$app_desc."')";
  • "INSERT INTO sec_groups_apps(app_name, group_id) VALUES ('". $app ."', '". $grp ."')";

onValidate

  1. $arr_apps  = array();
  2. $arr_app_desc = array(); // >>> NOVO <<<
  3. $_arr_apps = array_diff(scandir($this->Ini->path_aplicacao . "../_lib/_app_data/"), array('.','..', 'index.php', 'index.html'));
  4. foreach($_arr_apps as $k => $v)
  5. {
  6. if(substr($v, -12) != "_mob_ini.php")
  7. {
  8. $arr_apps[] = substr($v, 0, -8);
  9. }
  10. }
  11. sc_select(rs, "SELECT app_name FROM sec_apps");
  12. $arr_apps_deleted = array(); // >>> NOVO <<<
  13. $arr_apps_db = array();
  14. while(!$rs->EOF)
  15. {
  16. $arr_apps_db[] = $rs->fields[0];
  17. $rs->MoveNext();
  18. }
  19. $rs->Close();
  20. if({check_deleted} == 'Y')
  21. {
  22. $arr_apps_deleted_dir = array_diff($arr_apps_db, $arr_apps); // >>> NOVO <<<
  23. foreach($arr_apps_deleted_dir as $k => $app){ // >>> NOVO <<<
  24. if(substr($app, 0, 8) == 'https://' || substr($app, 0, 7) == 'http://'){ // >>> NOVO <<<
  25. continue; // >>> NOVO <<<
  26. }
  27. $arr_apps_deleted[] = $app; // >>> NOVO <<<
  28. sc_exec_sql("DELETE FROM sec_groups_apps WHERE app_name = " . sc_sql_injection($app)); // >>> NOVO <<<
  29. sc_exec_sql("DELETE FROM sec_apps WHERE app_name = " . sc_sql_injection($app)); // >>> NOVO <<<
  30. }
  31. foreach($arr_apps as $k => $app)
  32. {
  33. require($this->Ini->path_aplicacao . "../_lib/_app_data/". $app . '_ini.php');
  34. $app = (isset($arr_data['friendly_url']) && !empty($arr_data['friendly_url']))?$arr_data['friendly_url']:$app;
  35. if( !is_dir($this->Ini->path_aplicacao . "../" . $app) )
  36. {
  37. unset($arr_apps[$k]);
  38. }
  39. }
  40. }
  41. $arr_apps = array_diff($arr_apps, $arr_apps_db);
  42. //========= Groups =========
  43. $arr_grp = array();
  44. sc_select(rs, "SELECT group_id FROM sec_groups");
  45. while(!$rs->EOF)
  46. {
  47. $arr_grp[] = $rs->fields[0];
  48. $rs->MoveNext();
  49. }
  50. $rs->Close();
  51. foreach($arr_apps as $k => $app)
  52. {
  53. require($this->Ini->path_aplicacao . "../_lib/_app_data/". $app . '_ini.php');
  54. $app_type = isset($arr_data['type'])? $arr_data['type'] : '';
  55. $app_desc = isset($arr_data['description']) ? $arr_data['description'] : '';
  56. $arr_app_desc[ $app ] = $app_desc; // >>> NOVO <<<
  57. $sql = "SELECT count(*) FROM sec_apps WHERE app_name = '". $app ."' ";
  58. sc_lookup(rs, $sql);
  59. if({rs[0][0]} == 0)
  60. {
  61. $sql = "INSERT INTO sec_apps(app_name, app_type, description) VALUES ('". $app ."', '".$app_type."', '".$app_desc."')";
  62. sc_exec_sql( $sql );
  63. foreach($arr_grp as $grp)
  64. {
  65. $sql = "INSERT INTO sec_groups_apps(app_name, group_id) VALUES ('". $app ."', '". $grp ."')";
  66. sc_exec_sql( $sql );
  67. }
  68. }
  69. }

3. Código do onValidateSuccess

Após realizar as mudanças necessárias no onValidate, acesse o evento onValidateSuccess.

Neste evento as mudanças são visuais, apenas para melhorar o retorno ao utilizar a opção de sincronizar aplicação.

Comente o código atual e adicione o código abaixo.

onValidateSuccess

  1. $html = '

    '; // >>> NOVO <<<

  2. $html .= '| '.{lang_sec_app_name}.' | '.{lang_sec_description}.' | | --- | --- | '; // >>> NOVO <<<

  3. if(is_array($arr_apps))

  4. {

  5. $total_apps = count($arr_apps);

  6. foreach($arr_apps as $app)

  7. {

  8. $html .= "|"; // >>> NOVO <<< | |

  9. $html .=     " ". $app .' |'; // >>> NOVO <<<

  10. $html .=     ' '. ( isset($arr_app_desc[ $app ]) ? $arr_app_desc[$app] : '') . " |"; // >>> NOVO <<<

  11. $html .= ""; // >>> NOVO <<<

  12. }

  13. }

  14. if(is_array($arr_apps_deleted)) // >>> NOVO <<<

  15. {

  16. $total_apps_deleted = count($arr_apps_deleted); // >>> NOVO <<<

  17. foreach($arr_apps_deleted as $app) // >>> NOVO <<<

  18. {

  19. $html .= "|"; // >>> NOVO <<< | |

  20. $html .=     " ". $app .' |'; // >>> NOVO <<<

  21. $html .=     ' '. ( isset($arr_app_desc[ $app ]) ? $arr_app_desc[$app] : '') . "  ".{lang_sec_deleted}." |"; // >>> NOVO <<<

  22. $html .= ""; // >>> NOVO <<<

  23. }

  24. }

  25. $html .= ""; // >>> NOVO <<<

  26. {sync}  = "
    ". $total_apps. " ". {lang_syncronized_apps} . ""; // >>> NOVO <<<

  27. {sync} .= "
    ". $total_apps_deleted. " ". {lang_sec_deleted_apps} . ""; // >>> NOVO <<<

  28. if($total_apps > 0 || $total_apps_deleted > 0){ // >>> NOVO <<<

  29. {sync} .= "


    " . $html; // >>> NOVO <<<

  30. }

4. Teste e publicação

Após as alterações compile o fonte da aplicação e realize testes para verificar se as alterações no código foram bem sucedidas.

Se tudo ocorrer bem nos testes, basta realizar a publicação da aplicação para que a correção seja aplicada a seu sistema em produção.

Caso tenha alguma dúvida ou problema com a mudança consulte nosso suporte através dos canais oficiais.