plonegovbr/brasil.gov.tiles

Tile banner rotativo com problemas

claytonc opened this issue · 44 comments

O tile banner rotativo esta apresentando problemas.

Após ser populado com as imagens não é possível removê-los clicando no "X" ou movê-las, ficando em branco.

@claytonc poderia nos informar qual versão do brasil.gov.tiles e do IDG que você está usando?

Você pode obter essa info indo em "Configurações do Site", no canto inferior esquerdo tem a versão do Plone. Para ver a do brasil.gov.tiles, vá em "Complementos". Obrigado!

A última versão 1.1.3.1 e utilizando o portal.buildout que utiliza a versão.

Também estamos com o mesmo problema no Banner.

Também não estamos conseguindo inserir mais de três notícias no banner.

Mesmo problema aconteceu comigo.

Segue versões

  • Portal Padrão 1.1.3
  • brasil.gov.tiles-1.0.7
  • Plone 4.3.3 (4308)
  • CMF 2.2.7
  • Zope 2.13.22
  • Python 2.7.5 (default, Apr 10 2015, 08:09:14) [GCC 4.8.3 20140911 (Red Hat 4.8.3-7)]
  • PIL 2.3.0 (Pillow)

@claytonc @osandon @idgserpro
A solução que apliquei aqui foi implementar o método replace_with_objects que não esta presente no banner_rotativo.py

    def replace_with_objects(self, uuids):
        """ Replaces the whole list of items with a new list of items
        :param uuids: The list of objects' UUIDs to be used
        :type uuids: List of strings
        """
        super(BannerRotativoTile, self).replace_with_objects(uuids)  # check permission
        if not self.isAllowedToEdit():
            raise Unauthorized(
                _('You are not allowed to add content to this tile'))
        data_mgr = ITileDataManager(self)
        old_data = data_mgr.get()
        # Clean old data
        old_data['uuids'] = dict()
        data_mgr.set(old_data)
        # Repopulate with clean list
        self.populate_with_uids(uuids)

@almeidajeff, na verdade ele herda esse método do brasil.gov.tiles.tiles.list.ListTile. No entanto, talvez essa implementação não seja mais compatível com a nova versão do collective.cover. Temos que verificar. Relacionado com:

#132 (comment)

Pra mim, o erro apresentado é o seguinte ao tentar excluir um item do banner rotativo:

HierarchyRequestError: Node cannot be inserted at the specified point in the hierarchy
https://paraiso.ifto.edu.br/portal_javascripts/brasil_gov_facetada/resourceplone.app.jquery-cachekey-64ca28e423846a1ff102faf6dacb3a2b.js
Line 14

@claytonc, o erro indicado pelo @smkbarbosa é o mesmo do seu? Você também está utilizando o brasil.gov.facetada? Pode informar o seu traceback?

@idgserpro sim utilizo.

Como tive que entregar o portal no começo do ano eu sobrescrevi o banner rotativo, as mudanças que fiz foi que agora os banners ficam em uma determinada pasta (sugestão dos provedores de conteúdo), ficou mais simples busco os 4 primeiros banners e a ordenação é a da pasta.

O css e o js é o mesmo do banner rotativo sem alterações.

Então não tenho como mais ver o log gerado, mas eu me lembro que o erro também acontece sem a busca facetada.

Estamos com o mesmo problema. Ao tentar excluir o item do banner dá o seguinte erro:

2016-08-10 17:31:36 ERROR Zope.SiteErrorLog 1470843096.170.104274255523 http://10.10.12.165:8080/Plone/home/@@removeitemfromlisttile
Traceback (innermost last):
Module ZPublisher.Publish, line 138, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 48, in call_object
Module grokcore.view.components, line 151, in call
Module zope.publisher.publish, line 107, in mapply

  • traceback_info: <bound method RemoveItemFromListTile.render of <collective.cover.browser.cover.RemoveItemFromListTile object at 0xb4168bcc>>
    Module zope.publisher.publish, line 113, in debug_call
    Module collective.cover.browser.cover, line 340, in render
    BadRequest: Invalid parameters

o código da view está esperando 3 parâmetros: https://github.com/collective/collective.cover/blob/1.1b1/src/collective/cover/browser/cover.py#L332

possivelmente o tile precisa ser atualizado.

Me lembro de ter passado por problemas também ao tentar excluir um Item do Tile.
No tempo eu tinha identificado que o uuid sempre estava vindo vazio
https://github.com/collective/collective.cover/blob/1.1b1/src/collective/cover/browser/cover.py#L331

E percebi que no request o correto era 'uid' e não uuid como informado.

@rodfersou nós que quebramos isso, acho que devemos consertar.

só mudar de uid para uuid que resolve

Na verdade é o contrario @rodfersou , teria que mudar de
uuid = self.request.form.get('uuid')

para
uuid = self.request.form.get('uid')

Massa @rodfersou é isso mesmo, vi que você corrigiu a questão do método replace_with_objects que eu tinha comentado por aqui tbm.

Show de bola 👍

gente, por favor ajudem testar para fazer um release na sequência.

Testei as alterações propostas pelo @almeidajeff e o pull request do @rodfersou, agora retorna esse erro:

Traceback (innermost last):
  Module ZPublisher.Publish, line 138, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 48, in call_object
  Module grokcore.view.components, line 151, in __call__
  Module zope.publisher.publish, line 107, in mapply
   - __traceback_info__: <bound method RemoveItemFromListTile.render of <collective.cover.browser.cover.RemoveItemFromListTile object at 0x7f6b886541d0>>
  Module zope.publisher.publish, line 113, in debug_call
  Module collective.cover.browser.cover, line 274, in render
BadRequest: Invalid parameters

Se manter conforme informado pelo @almeidajeff (#145 (comment)) retorna erro 400 ao tentar excluir.

Se manter

 uuid = self.request.form.get('uuid')

retorna 204.... exclui da tela no momento, sem registro de erro, mais o banner continua ao voltar para visão do site.

Na console retorna:

HierarchyRequestError: Node cannot be inserted at the specified point in the hierarchy  resourceplone.app.jquery-cachekey-f1bb8bf8adf593bd1153aaf869141871.js:14

no element found  @@removeitemfromlisttile:1:1

@smkbarbosa parece que voce precisa cozinhar seus javascripts

Por estar com resourceplone.app.jquery-cachekey-f1bb8bf8adf593bd1153aaf869141871.js esse formato de nome significa que o javascript está em modo de produção, não em desenvolvimento, e não deve ter aplicado minhas alterações.

Para resolver isso, voce pode entrar na ZMI no seu plone site, portal_javascript, rolar até o final da página e clicar em salvar sem mexer em nada mais. Isso recria o javascript do plone em produção.

@rodfersou eu testei no modo debug e esse erro realmente ocorre.

que versão do collective.cover voces estão usando?

$ grep -i cover bin/instance 
  '/home/rodfersou/.projects/cache/eggs/collective.cover-1.1b1-py2.7.egg',

Aqui é 1.1b1 e não consegui ver esse bug.. (se bem que não funcionou a exclusão)

aqui o problema acontece nessa linha por que o tile banner não herda do tile list ele não remove o item.

o tile banner rotativo herda da própria versão do tile list ao invés do tile list do collective.cover.

Seria bom rever essa dependencia.. por que precisamos de um tile list diferente do do collective.cover? se precisa mesmo de alterações no tile, podemos pelo menos herdar do tile list do cover e depois fazer alterações no brasil.gov.tiles.

@rodfersou veja essa comentário: #132 (comment)

@idgserpro se me lembro bem, foi necessário um overrides.zcml por que não estava conseguindo fazer sem o override, as configurações do collective.cover e brasil.gov.tiles estavam entrando em conflito, e fui orientado a trabalhar dessa forma.

Talvez com mais calma e mais tempo seja possível fazer o override somente mudando o layer (como ocorre normalmente em views), mas é bom tomar muito cuidado para não quebrar nada.

A questão de copiar todos os métodos, não estou lembrado se teve algum motivo justificável, o correto seria herdar dos tiles do cover.

Seria bom abrir uma nova issue para tratar somente disso e marcar essa issue como dependência da nova issue.

A explicação completa do erro está em #166 (comment)

A correção não é imediata e ainda são precisos estudos resolver esse relato. O PR acima resolve parcialmente.

Para aqueles que precisam dessa funcionalidade, recomendamos criar um patch usando collective.monkeypatcher, alterando o método

https://github.com/collective/collective.cover/blob/1.1b1/src/collective/cover/browser/cover.py#L327

Trocando

uuid = self.request.form.get('uuid')

por

uuid = self.request.form.get('uid')

e

if IListTile.providedBy(tile):

por

import brasil.gov.tiles.tiles.list.IListTile
if IListTile.providedBy(tile) or brasil.gov.tiles.tiles.list.IListTile.providedBy(tile):

Leia a documentação completa de collective.monkeypatcher, é possível aplicar o patch na versão específica do collective.cover. Recomendo criar um novo pacote (meuportal.brasilgovtilespatch ou algo assim) para que esse workaround seja o mais isolado possível.

Restante será feito na branch https://github.com/plonegovbr/brasil.gov.tiles/tree/issue_145_usa_listtile_cover, específica pra remover o tipo lista.

@idgserpro não consigo ver esse link

Isso é apenas uma branch, você não consegue vê-la em https://github.com/plonegovbr/brasil.gov.tiles/branches?

Prezados (as),

Foi lançada hoje a versão 1.2rc1 desse pacote que corrige de forma paliativa esse problema do Banner Rotativo. A forma mais correta envolve uma reformulação completa do brasil.gov.tiles e ainda está em andamento.

Gostaria de pedir a vocês para testarem, se possível, num ambiente de homologação de vocês esse release do brasil.gov.tiles. Não recomendamos em produção ainda porque provavelmente faremos um release do IDG que contemplará esse fix.

Para testar, basta no arquivo de versões de vocês adicionarem brasil.gov.tiles = 1.2rc1.

Foi lançado o release https://github.com/plonegovbr/portalpadrao.release/releases/tag/1.1.5.3 contendo essa versão de brasil.gov.tiles.

avisem por favor na lista para as pessoas testar.

Fiz um teste atualizando um portal existente.
Ao clicar no x para remover um item, visualmente todos os itens somem do banner.
Mas, ao recarregar a página de compor, apenas o item em que eu cliquei para remover foi excluído (que é o comportamento esperado).

No console aparece 2x o mesmo warning:

2017-06-27T13:30:13 WARNING plone.protect error parsing dom, failure to add csrf token to response for url http://10.10.12.165:8080/Plone/campus/santahelena/home/@@removeitemfromlisttile
------
2017-06-27T13:30:13 WARNING plone.protect error parsing dom, failure to add csrf token to response for url http://10.10.12.165:8080/Plone/campus/santahelena/home/@@removeitemfromlisttile

Sim, como foi afirmado, essa correção é paliativa (via patch), infelizmente ocorre esse efeito colateral de na remoção sumir tudo e ser necessário recarregar.

@idgserpro acho que o @rodfersou sabe como corrigir isso; tem que adicionar um header na resposta; @shogunbr tu consegue abrir uma nova issue, por favor?

@hvelarde a nova issue seria sobre esse comportamento de sumir tudo ou por causa desse warning do plone.protect?
essas duas coisas estão relacionadas, ou são problemas diferentes?

@shogunbr são problemas diferentes; seria só sobre isso pois o problema relatado aqui já foi consertado.

@hvelarde favor ainda não fechar essa issue porque a solução foi aplicando um patch, ainda iremos corrigir de forma definitiva, mas não nesse release.

@idgserpro sinceramente acho que a issue pode ser fechada e a correção definitiva aplciada em um PR; mas vocês que sabem.

Como o problema foi resolvido, fecharei o relato porque realmente ficou bem confuso.

O novo relato em #181 passa a defender a remoção do patch em definitivo.