Tomás Vásquez – Blog

Tecnologia, Educação, Web e Baboseiras em geral

WordPress – Adicionando o CAPTCHA em comentários de temas não suportados

CAPTCHA

CAPTCHA

O WordPress parece ter virado uma unanimidade para criação de sites hoje em dia. Não é por menos, dada a quantidade de opções de temas, plugins e também o que ele traz por si só na instalação limpa, fora a comunidade de apoio.

Como todo framework muito usado, ele também têm seus problemas, principalmente na incompatibilidade de plugins. Um dos mais usados hoje em dia para evitar invasão ou comentários mal desejados é o plugin CAPTCHA. Básico, ele adiciona em todos os forms do seu WordPress (login, comentários, contato, etc) um teste do tipo CAPTCHA, mas daquele baseado em texto no qual você precisa resolver uma conta ou algo do tipo. É perfeito e garante acessibilidade e segurança para seu blog em WordPress, bastando que você o deixe bem configurado.

Mas, a depender do tema que você utilizar, o plugin não funcionará corretamente. No meu caso, tive que usar o tema Compositio e este, não dá suporte a função padrão do WordPress que adicionaria o CAPTCHA ao formulário de comentários padrão. Por isso, ou você desativa o CAPTCHA para os comentários, o que é desagradável dada a quantidade de bots para WordPress espalhados pela internet, ou, é preciso colocar o código na mão.

No caso do tema referido, bastou que editasse o arquivo comments.php do tema, inserindo a seguinte linha antes do submit do formulário do comentário:

<p>
<?php if( function_exists( 'cptch_check_custom_form' ) && cptch_check_custom_form() !== true ) echo "Para comentar corretamente, resolva o enigma a seguir: " ?>
<?php if( function_exists( 'cptch_display_captcha_custom' ) ) { echo "<input type='hidden' name='cntctfrm_contact_action' value='true' />"; echo cptch_display_captcha_custom(); } ?>
</p>

Com isso, o formulário de CAPTCHA passa a aparecer e validar corretamente. A dica por ser vista no próprio FAQ do plugin:

http://wordpress.org/extend/plugins/captcha/faq/

O resultado fica assim:

CAPTCHA no Comentário do Tema Compositio

CAPTCHA no Comentário do Tema Compositio

Bom proveito!

Google Drive – Criando Macros (ou quase isso) no Google Spreadsheet

Admirável mundo novo! Na verdade, o Google Docs, hoje rebatizado para Google Drive, nem é tão novo. Mas o uso deste passou a ser mais comum com a chegada de novos serviços e aplicativos baseados em nuvem, e claro, o Google Chrome, que tornou a vida destes mais amigável.

Não sei ao certo a quanto tempo, mas o aplicativo de planilhas do Google Drive já suporta criação de Scripts, o que na linguagem dos VBAzeiros de plantão significa Macros. Opa! Agora ficou interessante! E como!

Claro, não é exatamente a mesma coisa, mas tem a mesma função e contexto, que é a de automatizar rotinas corriqueiras em planilhas e criar facilitadores. O que pretendo aqui é mostrar que é possível fazer o proposto, sendo uma ótima alternativa para automatizar nossas planilhas que estão cada vez mais fora de nossos computadores.

Criando o Script

Vamos fazer algo simples, mas útil. As planilhas do Google Drive não reconhecem emails como links, a não ser que você use a função HYPERLINK. Se for só um email, tudo bem, mas quando você tem uma lista, a coisa fica chata. Vamos automatizar isso.

Abra o Google Drive e crie uma nova Planilha (nem preciso dizer que você precisa de uma conta no Google, certo?).

Criando uma nova planilha no Google Drive

Criando uma nova planilha no Google Drive

Agora, crie uma lista simples de emails:

Planilha no Google Drive com emails de exemplo

Planilha no Google Drive com emails de exemplo

No menu principal, vá na Ferramentas -> Gerenciador de Scripts para apresentar a seguinte tela:

Gerenciador Scripts

Gerenciador Scripts

Aqui estarão todos os scripts que você tiver criado para sua planilha. No seu caso, essa lista provavelmente estará vazia. De toda forma, clique na opção novo e a seguinte janela se abrirá:

Tela Inicial do Gerenciador de Scripts

Tela Inicial do Gerenciador de Scripts

Nesta tela há toda uma central de ajuda que auxiliar no entendimento e no processo de criação de scripts para seus documentos no Google Drive. Você dar uma passeada por aqui, mas para nosso tutorial, vamos apenas fechar essa tela e continuar.

O que aparece é a tela de código com uma função vazia para você começar a trabalhar.

Gerenciador de Scripts - Nova função

Gerenciador de Scripts – Nova função

E é aqui que começamos. O primeiro fato que você terá que se acostumar, caso você seja um programador VBA, é que aqui, a linguagem de automação não é mais o Visual Basic, mas sim o Javascript. Com isso você vai ter que se acostumar. O lado bom é que além do Javascript ser uma linguagem poderosa, atualmente ela é tida como a linguagem de programação mais promissora do mercado.

Dê um nome para seu projeto (onde está escrito projeto sem título) e onde está sua função vazia (myFunction), substituia pelo seguinte código:

function convertToHyperlink() {
  var range = SpreadsheetApp.getActiveRange();
  var emailpattern = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
 
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i &lt;= numRows; i++) {
    for (var j = 1; j &lt;= numCols; j++) {
      var value = range.getCell(i,j).getValue();
 
      if (value.match(emailpattern))
      {
        value = "=HYPERLINK(\"mailto:" + value + "\"; \"" + value + "\")";
        range.getCell(i,j).setValue(value);
      }
      else {
        Browser.msgBox("Ops! " + value + " on cell '" + range.getCell(i, j).getA1Notation() + "' is not a valid email");
      }
    }
  }
};

Em resumo, o que o código faz é fazer um loop nas células que estão selecionadas (SpreadsheetApp.getActiveRange(), aquivalente ao Selection no VBA do Excel e verifica uma a uma se ela contém um email válido através de uma Expressão Regular. Se a célula conter um email válido, ele aplicar a função HYPERLINK. Caso contrário, emite um aviso usando a função Browser.msgBox, que obviamente é o bom e velho MsgBox.

A parte chata é que o modelo de objetos não oferece um meio facilitado de fazer um loop do tipo ForEach nas células. Como é possível ver no código, é preciso fazer um loop duplo (linha, coluna) para ter acesso a todas as células.

Com o código aplicado, salve seu script (botão salvar) e fecha a janela. Você estará de volta a sua planilha. Selecione todas as celulas preenchidas, vá até o menu Ferramentas->Gerenciador de Scripts. Na tela, deve aparecer a sua função. Clique sobre o nome dela e depois em Executar. O resultado será o seguinte:

Executando a função convertToHyperlink

Executando a função convertToHyperlink

Claro. Como a célula A5 não contém um email válido, ele emitou o aviso. Para o restante, a função é executa e o resultado é:

Email com link

Email com link

Está feito! Nossos emails na planilha agora são clicáveis.

Resumo

É um começo. Nem de longe quis aqui abranger tudo o que os scripts do Google Drive podem fazer, mas sim abrir aqui a possibildade para programadores VBA explorarem essa funcionalidade. Assim como as macros em VBA, o scripts do Google Drive irão facilitar a vida das planilhas online e provavelmente sejam um novo e bem vindo lar para aqueles que se sentiam fora do eixo vendo as aplicações migrarem pouco a pouco para a internet.

Bom divertimento!

 

Dicas – Biblioteca MSCOMCTL.OCX e a incompatibilidade com alguns Service Packs

MSCOMCTL.OCX

Mais um fruto precioso dos colegas do fórum.

A MSCOMCTL.OCX é o coração do Visual Basic Common Controls, que traz consigo controles como ListView, TreeView, entre outros. Mas, ele é tão famoso por ser útil, como também para dar problema. Não é incomum ver pessoas reclamando erros quando se usa um desses controles. Um pesquisa no Google trará resultados mais do que interessantes.

Pois bem, ela foi parar no nosso fórum e o pessoal debulhou o problema, chegando a uma solução muito bacana. Abaixo, reproduzo o post do colega Mikel Silveira Fraga, dono da resposta mais determinante.

Fala galera, tudo bem.

Como podem ver, propus a publicação deste artigo e eu mesmo não estava conseguido realizar uma nova manutenção do erro em questão. Na primeira situação, tive esse erro no pc do meu serviço, ao qual consegui resolver a algum tempo.

A mais ou menos uma semana, tive o mesmo problema no meu notebook, e desta vez não estava conseguindo resolver, nada fazia funcionar. Mas acabei de encontrar a solução.

A partir do dia 6 de agosto de 2012, foi disponibilizada uma atualização de Segurança contra Vulnerabilidade do Objetos de Controle Comuns, conhecidos pela biblioteca MsComCtl.ocx, que ocasionou este erro. Nos fóruns brasileiros, encontrei poucas pessoas que tiverem este erro, mas em fóruns estrangeiros, essa situação causou mtos problemas.

Bem, pelo que pude entender, o MsComCtl foi atualizado para a versão 6.01.9834 que, por algum motivo, algumas máquinas não foram atualizadas. Ao comparar a versão do arquivo do meu notebook (com problema) com o arquivo do pc da minha máquina (funcionando), vi que a versão do notebook era inferior a esta citada acima. Substituindo o arquivo do meu notebook para a versão 6.01.9834, todas as planilhas que estavam com problema funcionaram perfeitamente.

Outra coisa que percebi nos fóruns em relação a esta versão é a incompatibilidade com os MS Office 2010. Alguns estavam aconselhando que a versão 6.01.9833 do MsComCtl fossem utilizada nos pc’s que operacem com o Office 2010.

Estou disponibilizando para download a versão 6.01.9834.

Por favor, testem e comentem se esta solução funcionou. Estou precisando de informações sobre o bom funcionamento desta biblioteca em outras máquinas, com usuários avançados.

Espero que tenham bons resultados.

Abraços.

Toda a discussão do tópico pode ser vista no link abaixo:

http://www.tomasvasquez.com.br/forum/viewtopic.php?f=2&p=11485

Download da MSCOMCTL.OCX

 MsComCtl_Ocx_6.01.9834.zip (464.81 KiB)

Update

Em buscas na internet por um resultado que servisse a todos, encontrei este post no blog do technet:

http://blogs.technet.com/b/the_microsoft_excel_support_team_blog/archive/2012/08/15/quot-unspecified-automation-error-quot-after-applying-ms12-060.aspx

Ele oferece um caminho de solução para quase todas as versões do Office. Vale a pena uma lida. Pelo menos resolveu em boa parte dos computadores em que apliquei.

Bom proveito!

VBA – Fazendo uma célula piscar no Excel

Baseado num pedido do fórum, e resultado de uma pesquisa na web, segue uma funcionalidade curiosa, mas útil ao mesmo tempo! Siga os seguintes passos para obter o resultado.

Insira esse código na sua planilha:

Private Sub Worksheet_Calculate()
  If Range("B1").Value > 0 Then
      Blink "A1"
  Else
      Range("A1").Interior.ColorIndex = 0
  End If
End Sub
 
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.Run Me.CodeName & ".Worksheet_Calculate"
End Sub

Insira este código num módulo:

Sub Blink(cell As String)
  If Range(cell).Interior.ColorIndex = 6 Then
      Range(cell).Interior.ColorIndex = 0
  Else
      Range(cell).Interior.ColorIndex = 6
  End If
  Application.OnTime Now + 1 / 86400, "doagain"
End Sub
Sub DoAgain()
  Application.Run Sheets("SuaPlanilha").CodeName & ".Worksheet_Calculate" 'mude aqui no nome da planilha
End Sub

Com esse código, se a célula B1 não estiver vazia, a célula A1 piscará. Faça o teste.

Referência

http://en.allexperts.com/q/Excel-1059/Excel-blinking-cells.htm

Abraços

 

Página 1 de 13712345...102030...Última »