menu

Adianti Framework

Migração

Adianti, Framework, PHP, MVC, Active record, Front controller, IDE, RAD, Web, multiplataforma, geração de código, desenvolvimento rápido, relatórios, formulários, listagens, datagrids, gráficos, banco de dados, padrões de projeto, design patterns Instruções de atualização de versões para o Adianti Framework.
Adianti Framework
menu Menu
done_all
Migração
Instruções para atualizar a versão do Framework.
Livro Adianti Framework
Obra completa sobre o Adianti Framework, escrita pelo criador do framework:
  • check Instalação e configuração; Modelos, persistência e BD;
  • check Componentes de apresentação; Cadastros e listagens;
  • check Logins, permissões, relatórios; Desenvolvimento com Studio Pro.


Migrando da 4.0.0 para 5.0.0
  • Atualizando o framework: Esta operação irá atualizar as bibliotecas do núcleo do framework e como elas são carregadas:
    • Primeiro, faça um backup completo;
    • Baixe a nova versão do template, ou do framework puro, caso sua aplicação seja baseada nele;
    • Atualização das bibliotecas e do carregamento delas:
      • Exclua a pasta /lib;
      • Copie a pasta /lib da nova versão;
      • Copie a pasta /vendor da nova versão;
      • Copie app/templates/<tema>/libraries.html a partir da nova versão (sobrescreva);
      • Copie /composer.* a partir da nova versão;
    • Atualização do application.ini:
      • Dentro da seção [general], adicione locale = pt_BR;
    • Atualização dos arquivos do diretório raíz:
      • Copie o arquivo cmd.php da nova versão;
      • Copie o arquivo init.php da nova versão;
      • Copie o arquivo download.php da nova versão;
      • Copie o arquivo engine.php da nova versão. Cuide se for necessário preservar customizações;
      • Copie o arquivo index.php da nova versão. Cuide se for necessário preservar customizações;
  • Atualizando as bibliotecas da aplicação: Esta operação irá atualizar bibliotecas extras utilizadas pela aplicação:
    • Remova app/lib/mail/, pois isso passou para a pasta /vendor via composer (a seguir);
    • Remova app/lib/rtf/, pois isso passou para a pasta /vendor via composer (a seguir);
    • Copie app/lib/html/ a partir da nova versão;
    • Copie app/lib/barcode/ a partir da nova versão;
    • Copie app/lib/pdf/ a partir da nova versão (sobrescreva);
    • Copie app/lib/reports/ a partir da nova versão (sobrescreva);
    • Copie app/lib/util/TMail.class.php a partir da nova versão (sobrescreva);
    • Copie app/lib/include/application.js a partir da nova versão (especialmente a parte da select2);
    • Adicione em app/lib/util/ApplicationTranslator.class.php os novos termos a partir daqui;
  • Atualizando aplicações baseadas em Template: Esta operação irá atualizar aplicações baseadas no Template. Neste caso, você deverá baixar o (template) para realizar os comandos a seguir. Esta operação irá atualizar bem como adicionar novos conteúdos como: telas, tabelas, controles, temas (estilos):
    • Copie app/model/admin/ a partir da nova versão (sobrescreva);
    • Copie app/model/communication/ a partir da nova versão (sobrescreva);
    • Copie app/model/log/ a partir da nova versão (sobrescreva);
    • Copie app/control/admin/ a partir da nova versão (sobrescreva);
    • Copie app/control/communication/ a partir da nova versão;
    • Copie app/control/log/ a partir da nova versão (sobrescreva);
    • Copie app/control/MessageList.class.php a partir da nova versão;
    • Copie app/control/NotificationList.class.php a partir da nova versão;
    • Copie app/control/SearchBox.class.php a partir da nova versão;
    • Copie app/control/SearchInputBox.class.php a partir da nova versão;
    • Copie app/lib/menu/AdiantiMenuBuilder.php a partir da nova versão;
    • Copie app/resources/system* e app/resources/google* a partir da nova versão;
    • Copie app/service/System* a partir da nova versão;
    • Copie app/templates/themeX/ a partir da nova versão (sobrescreva);
    • Compare o arquivo menu.xml com o da nova versão:
      Acrescente opções no menu para as classes: SystemPHPErrorLogView e SystemDatabaseExplorer.
    • Atualize a base de dados para criar as novas tabelas e cadastrar os novos programas (Ex: SystemPHPErrorLogView, SystemDatabaseExplorer, etc) para estes aparecerem no menu. Execute os comandos SQL a partir da linha "--- new programs of 5.0.0" do arquivo permission-update.sql. Se necessário, adicione-os aos grupos ou usuários manualmente;
  • Ajustes de compatibilidade: Alguns ajustes serão necessários com a nova versão:
    • A biblioteca JQuery foi atualizada para a série 3. Caso você tenha feito muita programação Javascript é possível que tenha usado um método que não exista mais na versão 3. Nesse caso, será necessário adicionar uma biblioteca de compatibilização, a jquery-migrate:
    • <script src="lib/jquery/jquery-migrate-3.0.0.js" type="text/javascript"></script>
    • Ao utilizar formulários vetoriais manuais (veja neste exemplo), agora é necessário adicionar uma seção "thead" antes do cabeçalho, "tbody" antes das linhas do corpo da tabela, e "tfoot" antes do botão de clonar para funcionar com a nova versão:
    • $table->addSection('thead');
      // ...
      $table->addSection('tbody');
      // ...
      $table->addSection('tfoot');
      // ...
    • A variável de sessão usergroupids agora é um array, não mais uma string separada por vírgulas. Normalmente essa é uma variável de sessão usada internamente, mas eventualmente algum usuário pode ter feito uso dela;
    • Os componentes TMultiSearch e TDBMultiSearch mudaram de comportamento e agora funcionam da mesma maneira que um TSelect/TDBSelect no envio de dados do formulário. Para não quebrar a compatibilidade de aplicações existentes, será necessário acrescentar o seguinte conteúdo no application.ini. Dessa maneira, esses componentes se comportarão como na versão 4, enviando no POST um array cujo índice é a opção escolhida, e a posição contém a descrição. A versão nova envia no POST somente um array simples contendo os índices das opções escolhidas. Essa mudança ocorreu em decorrência da atualização do componente select2 para a última versão. Além disso, o comportamento novo é mais natural, e padronizado com os outros componentes.
    • compat=4
    • É recomendada a substituição de componentes TDBMultiSearch com setMaxSize(1) por TDBUniqueSearch, que é um componente mais fácil de utilizar, uma vez que se comporta como um TDBCombo em salvamentos e edições, recebendo e enviando apenas o índice do elemento selecionado, não um vetor que precisa ser tratado no onEdit() e onSave().
    • Campos TMultiSearch, ou TDBMultiSearch eram postados como strings em saída de campos (onExitAction, onChangeAction), nesse formato ("a::Item a||c::Item c"), sendo que era necessário um explode. Agora será postado sempre como um array padronizado como [a,c], somente com os índices selecionados, dispensando tratamento.
    • Campos TMultiSearch, ou TDBMultiSearch eram postados como strings em posts estáticos (static function onSave), nesse formato ("a::Item a||c::Item c"), sendo que era necessário um explode. Agora será postado sempre como um array padronizado como [a,c], somente com os índices selecionados, dispensando tratamento.
  • Testando a nova versão: Ao testar a nova versão, você precisa tomar alguns cuidados:
    • Limpe o cache do navegador para garantir que os novos JS/CSS sejam lidos, e não os antigos;
    • Após a atualização, certifique-se de que todos arquivos possuam pelo menos permissão de leitura pelo Web Server, sendo que os diretórios tmp, app/database, e app/output devem possuir também permissão de escrita:
      chmod -Rf 755 *
      chown -Rf www-data:www-data *
      chmod -Rf 777 tmp/ app/output app/database


Migrando da 3.0.0 para 4.0.0
  • Atualizando o framework: Esta operação irá atualizar as bibliotecas do núcleo do framework e como elas são carregadas:
    • Primeiro, faça um backup completo;
    • Baixe a nova versão do framework puro, ou do template caso sua aplicação seja baseada nele;
    • Atualização das bibliotecas e do carregamento delas:
      • Exclua a pasta /lib;
      • Copie a pasta /lib da nova versão;
      • Copie app/templates/<tema>/libraries.html a partir da nova versão (sobrescreva);
    • Atualização do application.ini:
      • Mova o arquivo application.ini para a pasta app/config;
      • Adicione a seção [general] na primeira linha no início do arquivo;
      • Dentro da seção [general], adicione seed = "d76bsodg7sdg" (invente um conteúdo aleatório alfanumérico);
      • Dentro da seção [general], adicione theme = theme3 (preencha com o tema que você utiliza);
      • Adicione a seção [permission] no final do arquivo;
      • Dentro da seção [permission], adicione a variável public_classes[] = PublicFormView (Adicione as classes públicas, uma por linha)
      • Veja um exemplo de application.ini:
        [general]
        timezone = America/Sao_Paulo
        language = pt
        application = template
        theme = theme3
        seed = h6d587dfgh5df7h

        [permission]
        ; Public classes, anyone (logged or not) has access
        public_classes[] = PublicForm
        public_classes[] = PublicView
    • Atualização dos arquivos do diretório raíz:
      • Copie o arquivo init.php da nova versão;
      • Copie o arquivo engine.php da nova versão;
      • Copie o arquivo download.php da nova versão;
      • Copie o arquivo index.php da nova versão. Cuide se for necessário preservar customizações;
  • Atualizando as bibliotecas da aplicação: Esta operação irá atualizar bibliotecas extras utilizadas pela aplicação:
    • Copie app/lib/mail/ a partir da nova versão (sobrescreva);
    • Copie app/lib/pdf/ a partir da nova versão (sobrescreva);
    • Copie app/lib/reports/ a partir da nova versão (sobrescreva);
    • Copie app/lib/util/TMail.class.php a partir da nova versão (sobrescreva);
    • Renomeie o arquivo app/lib/util/TApplicationTranslator.class.php para app/lib/util/ApplicationTranslator.class.php;
    • Substitua todas ocorrências de "TApplicationTranslator" para "ApplicationTranslator" globalmente em toda a aplicação;
  • Atualizando aplicações baseadas em Template: Esta operação irá atualizar aplicações baseadas no Template. Neste caso, você deverá baixar o (template) para realizar os comandos a seguir. Esta operação irá atualizar bem como adicionar novos conteúdos como: telas, tabelas, controles, temas (estilos):
    • Crie a pasta files/documents e dê permissão de escrita para upload;
    • Copie app/config/communication.ini a partir da nova versão;
    • Copie app/control/admin/ a partir da nova versão (sobrescreva);
    • Copie app/control/communication/ a partir da nova versão;
    • Copie app/control/log/ a partir da nova versão (sobrescreva);
    • Copie app/control/MessageList.class.php a partir da nova versão;
    • Copie app/control/NotificationList.class.php a partir da nova versão;
    • Copie app/database/communication* a partir da nova versão;
    • Copie app/model/admin/ a partir da nova versão (sobrescreva);
    • Copie app/model/communication/ a partir da nova versão;
    • Copie app/model/log/ a partir da nova versão (sobrescreva);
    • Copie app/resources/* a partir da nova versão;
    • Copie app/service/ a partir da nova versão;
    • Copie app/templates/themeX/ a partir da nova versão (sobrescreva);
    • Compare o arquivo menu.xml com o da nova versão:
      Acrescente opções no menu para as classes: SystemUnitList, SystemPreferenceForm, SystemDocumentUploadForm, SystemDocumentList, SystemSharedDocumentList,SystemDocumentCategoryFormList.
    • Atualize a base de dados para criar as novas tabelas e cadastrar os novos programas (Ex: SystemUnitList, SystemDocumentList, etc) para estes aparecerem no menu. Execute os comandos SQL a partir da linha "--- new programs of 4.0.0" do arquivo permission-update.sql. Se necessário, adicione-os aos grupos ou usuários manualmente;
  • Testando a nova versão: Ao testar a nova versão, você precisa tomar alguns cuidados:
    • Limpe o cache do navegador para garantir que os novos JS/CSS sejam lidos, e não os antigos;
    • Após a atualização, certifique-se de que todos arquivos possuam pelo menos permissão de leitura pelo Web Server, sendo que os diretórios tmp, app/database, e app/output devem possuir também permissão de escrita:
      chmod -Rf 755 *
      chown -Rf www-data:www-data *
      chmod -Rf 777 tmp/ app/output app/database


Migrando da 2.0.0 para 3.0.0
  • Atualizando o framework: Esta operação irá atualizar as bibliotecas do núcleo do framework e como elas são carregadas:
    • Primeiro, faça um backup completo;
    • Baixe a nova versão do framework);
    • Exclua a pasta /lib;
    • Copie a pasta /lib da nova versão;
    • Copie app/templates/theme1/libraries.html a partir da nova versão (sobrescreva);
  • Atualizando as bibliotecas da aplicação: Esta operação irá atualizar bibliotecas extras utilizadas pela aplicação:
    • Copie app/lib/mail/ a partir da nova versão (sobrescreva);
    • Copie app/lib/pdf/ a partir da nova versão (sobrescreva);
    • Copie app/lib/reports/ a partir da nova versão (sobrescreva);
    • Copie app/lib/util/ a partir da nova versão (sobrescreva);
  • Atualizando aplicações baseadas em Template: Esta operação irá atualizar aplicações baseadas no Template. Neste caso, você deverá baixar o (template) para realizar os comandos a seguir. Esta operação irá atualizar bem como adicionar novos conteúdos como: telas, tabelas, controles, temas (estilos):
    • Copie app/config/log.ini a partir da nova versão;
    • Copie app/control/admin/ a partir da nova versão (sobrescreva);
    • Copie app/control/log/ a partir da nova versão;
    • Copie app/control/MessageList.class.php a partir da nova versão (só para o Template II);
    • Copie app/control/SearchBox.class.php a partir da nova versão;
    • Copie app/control/WelcomeView.class.php a partir da nova versão;
    • Copie app/database/log* a partir da nova versão;
    • Copie app/model/admin/ a partir da nova versão (sobrescreva);
    • Copie app/model/log/ a partir da nova versão;
    • Copie app/resources/profile.html a partir da nova versão;
    • Copie app/resources/styles.html a partir da nova versão (sobrescreva);
    • Copie app/templates/themeX/ a partir da nova versão (sobrescreva);
    • Compare o arquivo engine.php com o da nova versão:
      Adicione ('MessageList'=>TRUE, 'SearchBox' => TRUE) ao vetor de programas;
    • Compare o arquivo index.php com o da nova versão:
      Adicione ($content = str_replace('{query_string}', $_SERVER["QUERY_STRING"], $content););
    • Compare o arquivo menu.xml com o da nova versão:
      Acrescente opções no menu para as classes: SystemSQLPanel, SystemPHPInfoView, SystemAccessLogList, SystemChangeLogView, SystemSqlLogList.
    • É importante cadastrar os novos programas (Ex: SystemSQLPanel, SystemPHPInfoView, SystemAccessLogList, SystemChangeLogView, e SystemSqlLogList) para estes aparecerem no menu. Execute os comandos SQL a partir da linha "--- new programs of 3.0.0" do arquivo permission.sqlite.sql ou permission.pgsql.sql. Se necessário, adicione-os aos grupos ou usuários manualmente;
  • Usando os ícones novos: Você poderá usar os ícones novos (da Font Awesome) no lugar dos antigos (que eram em formato de imagem). Os seguintes comandos efetuam uma substituicao global (em Linux):
    sudo apt-get install rpl
    cd <diretorio>/app
    rpl -R "ico_save.png" "fa:floppy-o" *
    rpl -R "ico_new.png" "fa:plus-square green" *
    rpl -R "ico_datagrid.png" "fa:table blue" *
    rpl -R "ico_find.png" "fa:search" *
    rpl -R "ico_edit.png" "fa:pencil-square-o blue fa-lg" *
    rpl -R "ico_delete.png" "fa:trash-o red fa-lg" *
    rpl -R "ico_apply.png" "fa:check-circle-o green" *
    rpl -R "ico_view.png" "fa:search" *
  • Testando a nova versão: Ao testar a nova versão, você precisa tomar alguns cuidados:
    • Limpe o cache do navegador para garantir que os novos JS/CSS sejam lidos, e não os antigos;
    • Após a atualização, certifique-se de que todos arquivos possuam pelo menos permissão de leitura pelo Web Server, sendo que os diretórios tmp, app/database, e app/output devem possuir também permissão de escrita;


Migrando da 1.0.3 para 2.0.0
  • Atualizando o framework
    • Primeiro, faça um backup de sua aplicação;
    • Baixe a nova versão do framework (2.0);
    • Exclua a pasta /lib;
    • Copie a pasta /lib da versão 2.0.0;
  • Atualizando a aplicação
    • Criar um arquivo vazio app/lib/include/application.js;
    • Copiar o /init.php da versão 2.0.0 para sua aplicação;
    • Copiar o /cmd.php da versão 2.0.0 para sua aplicação;
    • Copiar o /download.php da versão 2.0.0 para sua aplicação;
    • Copiar o /app/templates/theme1/libraries.html da versão 2.0.0 para sua aplicação.
      Lembre de manter os includes de suas bibliotecas específicas, caso existam;
    • Excluir o /app/lib/include/facade.js de sua aplicação.
      Caso ele tenha funções do usuário, transferidas estas para /app/lib/include/application.js;
    • Excluir o /index.php de sua aplicação;
    • Renomear o index.web.php para index.php no caso de uma aplicação web;
    • Renomear /app/templates/theme1/site.css para app/templates/theme1/application.css;
    • Substituir no arquivo engine.php: "TCoreApplication" por "AdiantiCoreApplication";
    • Se sua aplicação for baseada no Template ERP, você pode baixar o novo Template ERP e copiar os arquivos engine.php e index.php a partir do novo template;
    • Se sua aplicação não for baseada no Template ERP, substitua nos arquivos engine.php e index.php, as seguintes instruções iniciais:
      // define the autoloader
      include_once 'lib/adianti/util/TAdiantiLoader.class.php';
      spl_autoload_register(array('TAdiantiLoader', 'autoload_web'));

      // read configurations
      $ini = parse_ini_file('application.ini');
      date_default_timezone_set($ini['timezone']);
      TAdiantiCoreTranslator::setLanguage( $ini['language'] );
      TApplicationTranslator::setLanguage( $ini['language'] );

      // define constants
      define('APPLICATION_NAME', $ini['application']);
      define('OS', strtoupper(substr(PHP_OS, 0, 3)));
      define('PATH', dirname(__FILE__));
      pelo seguinte conteúdo:
      require_once 'init.php';
    • Remover de todos arquivos de layout (ex: app/templates/theme1/layout.html), as instruções a seguir, pois aquelas que eram essenciais foram transferidas para o núcleo do framework em /lib/adianti/include/adianti.js:
      $('[generator="adianti"]').live('click', function()
      {
         __adianti_load_page($(this).attr('href'));
         return false;
      });

      window.onpopstate = function(stackstate)
      {
         if (stackstate.state)
         {
            __adianti_load_page_no_register(stackstate.state.url);
         }
      };

      $(function() {
         $( document ).tooltip();
      });
    • Como a Bootstrap foi atualizada da 2 para a 3, leia a sua documentação de migração caso tenha usado alguma classe específica;
    • Como a jQuery foi atualizada da 1 para a 2, leia a documentação de migração caso tenha usado algum método específico;
    • Algumas funções Javascript internas foram renomeadas (ajaxLookup => __adianti_ajax_lookup) e (ajaxExec => __adianti_ajax_exec). Caso você tenha as chamado diretamente, substitua as chamadas;
    • Ao carregar a aplicação pela primeira vez após a atualização, limpe totalmente o cache do navegador, para que o mesmo não leia estilos CSS ou arquivos JS da versão anterior;
    • Após a atualização, certifique-se de que todos arquivos possuam pelo menos permissão de leitura pelo Web Server, sendo que os diretórios /tmp, /app/database, e /app/output devem possuir também permissão de escrita;


Migrando da 1.0.2 para 1.0.3
  • Atualizando o framework
    • Toda a pasta /lib deve ser atualizada. Tome cuidado para não sobrescrever a pasta /app (sua aplicação). Faça um backup antes.
  • Atualizando a aplicação
    • O arquivo app/lib/include/facade.js deve ser atualizado. Ele contém novas funções Javascript de que manipulam o carregamento de páginas e postagem de valores de formulários como: __adianti_block_ui(), __adianti_unblock_ui(), __adianti_post_data(), dentre outras modificações;
    • O arquivo app/templates/theme1/libraries.html, que contém a inclusão de bibliotecas JavaScript e estilos, foi alterado e deve ser atualizado;
    • A biblioteca pChart (app/lib/pchart/) foi atualizada. Todo o diretório pode ser substituído pela nova versão. A classe app/lib/reports/TPChartDesigner.class.php também foi alterada;
    • Como ações (TAction) definidas em métodos como setChangeAction() e setExitAction() agora precisam necessariamente ser declaradas como static, será necessário rever todos os métodos declarados para responder à essas ações e declará-los como "public static function". Estes métodos não pode chamar internamente nenhum outro método no formato "$this->metodo()";


Migrando da 1.0.1 para 1.0.2
  • Atualizando o framework
    • Toda a pasta /lib deve ser atualizada. Tome cuidado para não sobrescrever a pasta /app (sua aplicação). Faça um backup antes.
  • Atualizando a aplicação
    • O engine.php (motor de execução para a Web) foi simplificado em tamanho. Muitas partes deste arquivo (responsáveis por decidir a classe e o método a serem executados) foram passados para a classe TCoreApplication, do núcleo do framework. É recomendável, mas opcional ao desenvolvedor atualizar o engine.php;
    • O index.web.php (front page para a Web) teve seu início simiplificado (até a chamada de ob_start()). Foram simplificadas algumas chamadas como TAdiantiCoreTranslator::setLanguage() e define('APPLICATION_NAME', ...). É recomendável, mas opcional ao desenvolvedor realizar tais atualizações no index.web.php;
    • Atenção: A constante APPLICATION_NAME, que é utilizada para separar o conteúdo de variáveis de sessão conforme o nome da aplicação, deve ter exatamente a mesma definição tanto no engine.php, quanto index.web.php, caso contrário alguns recursos como sessões apresentarão problemas;
    • Ações em datagrid agora são executadas mantendo os parâmetros de paginação. Assim, ao excluir um registro de uma datagrid, o usuário permanecerá na mesma página. Para que essa estratégia funcione, algumas mudanças devem ser realizadas:
      • Caso você ainda tenha um engine.php da versão anterior, deverá passar os parâmetros da URL ($_GET) ao executar o método show() da página $page->show( $_GET ). Na nova versão do engine.php (que utiliza a classe TCoreApplication, isso já está habilitado por default;
      • Sempre que o desenvolvedor reescrever o método show() em alguma página (datagrids) em que faz uma chamada ao método onReload(), deverá passar um novo parâmetro: $this->onReload( func_get_arg(0) ) ;
      • Os metodos delete() que fazem chamada ao método onReload() devem acrescentar um novo parâmetro na chamada ($param), que representa os parâmetros da URL, da seguinte forma: $this->onReload( $param );


Migrando da 1.0.0 para 1.0.1
  • Atualizando o framework
    • Toda a pasta /lib deve ser atualizada. Tome cuidado para não sobrescrever a pasta /app (sua aplicação). Faça um backup antes.
  • Atualizando a aplicação
    • Um novo grupo de bibliotecas para geração de gráficos está disponível. Para utilizar, basta atualizar as pastas app/lib/pchart e app/lib/reports.
    • Uma nova funcionalidade de tooltip/dica de preenchimento ($widget->setTip()) está disponível. Para utilizá-la, você deve adicionar a seguinte chamada ao template: $(function() { $( document ).tooltip(); });
    • Para aproveitar a biblioteca de envio de emails (TMail), atualize app/lib/mail e app/lib/util/TMail.class.php em sua aplicação.
    • Atualize o arquivo app/lib/include/facade.js, que foi aperfeiçoado para lidar melhor com abertura de janelas.
    • Todo o cabeçalho do template, contendo inúmeras chamadas para bibliotecas .JS e estilos CSS deve ser removido. Todas bibliotecas Javascript e arquivos CSS necessários agora estão encapsulados no arquivo libraries.html, que deve ser referenciado dentro do template pela palavra-chave {LIBRARIES}. Esta palavra-chave é substituída pelo conteúdo "libraries.html" pelo "index.web.php". Muitas bibliotecas externas utilizadas pelo framework foram atualizadas (jquery-1.8.3, jquery-ui-1.9.2), e algumas outras foram incluídas. Garanta que você tenha importado o libraries.html em sua aplicação usando a palavra-chave {LIBRARIES} dentro do cabeçalho de seu template;
Adianti Framework 1.0.0
    Release inicial.