Ticket #911 (new melhoria) — at Version 34
Unificação da parte Ajax dos módulos
Reported by: | amuller | Owned by: | amuller |
---|---|---|---|
Priority: | média | Milestone: | |
Component: | API | Version: | sandbox |
Severity: | média | Keywords: | ajax |
Cc: | amuller | WorkGroup: |
Description (last modified by amuller) (diff)
Ao invés de cada módulo ter um código separado, unificar estes códigos.
Para quem quiser saber mais: Documentação expressoAjax
Change History
comment:5 Changed 14 years ago by niltonneto
A string "$this" na função cExecute() servia para referenciar o próprio módulo de onde estava sendo chamado. Depois dessa unificação, há erro ao tentar carregar em outra aba outro módulo diferente. Provavelmente porque o "controller.php" unificado perde a referência do módulo que estava, tentando instanciar a classe dentro no módulo errado.
comment:6 Changed 14 years ago by niltonneto
Veja o erro: include_once(admin/inc/class.imap_functions.inc.php) : failed to open stream: No such file or directory in /home/niltonneto/workspace/expresso/controller.php on line 45, referer: http://localhost/expresso/expressoMail1_2/index.php''[[BR]] Está tentando carregar a classe "imap_functions" de dentro do módulo admin, que abri em outra aba.
comment:7 Changed 14 years ago by niltonneto
Não encontrei nenhuma solução simples para isso. Substituir as chamadas "$this" pelo módulo correspondente (ex. "expressoMail1_2.imap_functions...") acho um pouco trabalhoso mas funciona. Alguém tem alguma ideia melhor?
comment:8 Changed 14 years ago by amuller
O $this referencia aquela variável "current_app" da sessão. Não tem muita solução mesmo a não ser chamar o nome do módulo. Ou fazer com que o controller saiba sozinho o módulo pela classe chamada.
comment:9 Changed 14 years ago by rodsouza
Como simular o problema em questão???
Não existe o porque a requisição de uma aba interferir na requisição da outra, sendo que o ExpressoLivre? ainda realiza todo o processamento com a sessão aberta, assim sendo não há a possibilidade de requisições concorrentes.
Com isso as requisições são executadas a conta-gotas.
comment:10 Changed 14 years ago by amuller
É só abrir duas aplicações em abas do Firefox que usam a mesma sessão. Daí o current_app vai ser modificado, e todas as requisições que usam $this.class.metodo podem dar problema.
comment:11 follow-up: ↓ 12 Changed 14 years ago by rodsouza
Realmente o problema não são requisições simultâneas, tão pouco o uso de várias abas, e sim o fato de que a suposta "variável" não varia.
E isso ocorre pois existe a antiga questão da utilização da superglobal $_SESSION em detrimento da execução dos métodos responsáveis pela disponibilização dos dados corretamente.
Assim ao utilizar um módulos e passar a utilizar outro sem passar pela sua página inicial, consequentemente executando toda a rotina para popular os dados, torna inconsistente os mesmos.
comment:12 in reply to: ↑ 11 Changed 14 years ago by niltonneto
Replying to rodsouza:
Realmente o problema não são requisições simultâneas, tão pouco o uso de várias abas, e sim o fato de que a suposta "variável" não varia.
E isso ocorre pois existe a antiga questão da utilização da superglobal $_SESSION em detrimento da execução dos métodos responsáveis pela disponibilização dos dados corretamente.
Assim ao utilizar um módulos e passar a utilizar outro sem passar pela sua página inicial, consequentemente executando toda a rotina para popular os dados, torna inconsistente os mesmos.
Sem mais delongas. Ninguém falou em requisição simultânea. O fato foi confirmado e descrito melhor pelo Muller. Aí pessoal, alguma solução?
comment:13 Changed 14 years ago by rodsouza
Anteriormente o problema não ocorria pois não utilizava-se o dado do módulo corrente para a inclusão do arquivo, conforme segue:
if($app == '$this') $filename = 'inc/class.'.$class.'.inc.php'; else $filename = '../'.$app.'/inc/class.'.$class.'.inc.php';
comment:14 follow-up: ↓ 15 Changed 14 years ago by rodsouza
Como eu vinha afirmando, a alteração proposta em http://trac.expressolivre.org/ticket/911#comment:7 apenas aumentaria a bola de neve.
Enfim, por mais uma vez ficou evidente que a decisão pretérita de utilizar a sessão para finalidades fora de seu escopo é totalmente equivocada. Equivoco que é agravado pelo fato da mesma permanecer aberta durante a execução da requisição.
E novamente por esse motivo, somado à inconsistência gerada nos dados, foi removido o uso da sessão para a inclusão de arquivos.
Sending controller.php
Committed revision r2331.
comment:15 in reply to: ↑ 14 Changed 14 years ago by niltonneto
Replying to rodsouza:
Como eu vinha afirmando, a alteração proposta em http://trac.expressolivre.org/ticket/911#comment:7 apenas aumentaria a bola de neve.
Enfim, por mais uma vez ficou evidente que a decisão pretérita de utilizar a sessão para finalidades fora de seu escopo é totalmente equivocada. Equivoco que é agravado pelo fato da mesma permanecer aberta durante a execução da requisição.
E novamente por esse motivo, somado à inconsistência gerada nos dados, foi removido o uso da sessão para a inclusão de arquivos.
Sending controller.phpCommitted revision r2331.
Não adianta usar 'HTTP_REFERER'. A Agenda, por exemplo, usa o menuaction da API - "/index.php?menuaction=calendar.uicalendar...."
comment:16 Changed 14 years ago by amuller
O filemanager também usa menuaction da API só que nunca usa $this acho que deve ser o caso do calendar
comment:17 Changed 14 years ago by niltonneto
Talvez possamos mudar apenas no calendar então, para não usar "$this". Melhor do que mudar em tudo.
comment:18 follow-up: ↓ 19 Changed 14 years ago by rodsouza
E em que momento é realizada uma requisição para o 'controller.php' a partir dos módulos que seguem esse padrão?
comment:19 in reply to: ↑ 18 Changed 14 years ago by niltonneto
Replying to rodsouza:
E em que momento é realizada uma requisição para o 'controller.php' a partir dos módulos que seguem esse padrão?
Então, a Agenda usa o ExpressoAjax? ao adicionar um compromisso, para carregar os participantes.
comment:20 follow-up: ↓ 21 Changed 14 years ago by rodsouza
Utilizando o formato proveniente do eGroupWare para acesso ao módulo ou seja 'menuaction'.
controller.php
Committed revision r2341.
comment:21 in reply to: ↑ 20 Changed 14 years ago by niltonneto
Replying to rodsouza:
Utilizando o formato proveniente do eGroupWare para acesso ao módulo ou seja 'menuaction'.
controller.phpCommitted revision r2341.
Rodrigo, a partir da revisão [2331] (controller.php), se configuro o expresso para ser meu documentRoot, está dando problema ao carregar o ExpressoMail?.
comment:22 Changed 14 years ago by rodsouza
comment:23 follow-ups: ↓ 24 ↓ 26 Changed 14 years ago by david.ianakiara
Cara, a revisão [2032] está causando um erro no módulo calendar. Na tela de edição e evento, na hora de pesquisar por um usuário para adicionar no compromisso tá dando erro de javascript.
comment:24 in reply to: ↑ 23 ; follow-up: ↓ 25 Changed 14 years ago by wmerlotto
Replying to david.ianakiara:
Cara, a revisão [2032] está causando um erro no módulo calendar. Na tela de edição e evento, na hora de pesquisar por um usuário para adicionar no compromisso tá dando erro de javascript.
Falando nisso, é possível consolidar as pesquisas por usuários/grupos/listas/... do expressoMail e calendar (nas duas pesquisas, a principal e participantes externos) na API?
comment:25 in reply to: ↑ 24 Changed 14 years ago by niltonneto
Replying to wmerlotto:
Replying to david.ianakiara:
Cara, a revisão [2032] está causando um erro no módulo calendar. Na tela de edição e evento, na hora de pesquisar por um usuário para adicionar no compromisso tá dando erro de javascript.
Falando nisso, é possível consolidar as pesquisas por usuários/grupos/listas/... do expressoMail e calendar (nas duas pesquisas, a principal e participantes externos) na API?
A pesquisa do Calendar é a mesma usada no ExpressoMail?. Na época eu já tinha essa ideia de unificar. Mas com certeza, a ideia é centralizar na API essas pesquisas sim, assim como foi feito com o connetor e o controller do ExpressoMail?.
comment:26 in reply to: ↑ 23 Changed 14 years ago by amuller
Replying to david.ianakiara:
Cara, a revisão [2032] está causando um erro no módulo calendar.
Eu não consegui reproduzir o erro em questão usando o trunk
comment:27 Changed 14 years ago by niltonneto
Eu consegui reproduzir o mesmo erro, tanto na minha máquina quanto no servidor de homologação (dev.expresso). Dá isso aqui: [Wed Mar 31 14:52:26 2010] [error] [client 127.0.0.1] PHP Warning: include_once(expressoMail1_2.php) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /var/www/expresso/controller.php on line 40, referer: http://localhost/expresso/index.php?menuaction=calendar.uicalendar.add&date=20100401
comment:28 follow-up: ↓ 29 Changed 14 years ago by diogenesduarte
Senhores, acho que a revisão [2032] realmente apresenta problemas, e é simples ver isso mesmo sem tentar reproduzir o erro. Notem a linha 37:
if( strpos($app, '$this/') == 0 )
A função strpos pode voltar false caso não ache a substring, fazendo entrar nesse if em um momento inesperado pois 0 também é false. Acredito que o certo seria:
if( strpos($app, '$this/') =='''=''' 0 )
Não comitei essa modificação pois posso estar enganado, pois não fui eu que implementei e talvez quem o fez, fez propositadamente, mas acho que isso é um problema realmente pois com a nova modificação o erro relatado não ocorreu em meu ambiente de desenvolvimento.
comment:29 in reply to: ↑ 28 Changed 14 years ago by diogenesduarte
tentei colocar negrito em bloco de código, o que eu quis dizer eh que o certo seria
if( strpos($app, '$this/') === 0 )
Replying to diogenesduarte:
Senhores, acho que a revisão [2032] realmente apresenta problemas, e é simples ver isso mesmo sem tentar reproduzir o erro. Notem a linha 37:
if( strpos($app, '$this/') == 0 )A função strpos pode voltar false caso não ache a substring, fazendo entrar nesse if em um momento inesperado pois 0 também é false. Acredito que o certo seria:
if( strpos($app, '$this/') =='''=''' 0 )Não comitei essa modificação pois posso estar enganado, pois não fui eu que implementei e talvez quem o fez, fez propositadamente, mas acho que isso é um problema realmente pois com a nova modificação o erro relatado não ocorreu em meu ambiente de desenvolvimento.
comment:30 Changed 14 years ago by amuller
Diogenes: svn up! isso já foi corrigido.
comment:31 Changed 14 years ago by diogenesduarte
Verdade, corrigido na revisão [2426].
comment:32 Changed 14 years ago by amuller
Desculpe o inconveniente.
comment:33 Changed 14 years ago by amuller
r2616 traz algumas das funções comuns do expressoMail para Api
[2011] [2009] [2006] [2005] [2002] [2001] [1662] [1661] [1660]