Uma situação bem inusitada que pode ocorrer durante o desenvolvimento de uma aplicação é precisar atrelar o seu sistema de login à uma página externa à aplicação.

Vou mostrar como pode-se fazer isso usando CakePHP.

No CakePHP nós temos o conceito de herança aplicado aos controllers. Neste caso, nosso controller de usuários herda da app_controller métodos e atributos. Quando se tem o sistema de login em CakePHP, deve-se habilitar o componente Auth. Vamos também fazer umas modificações em nosso método AppController::before_filter(). No final teremos algo como isso.

<?php
class AppController extends Controller {

	var $components = array('Auth');

	function beforeFilter(){
		$this->Auth->userModel = 'Usuario'; # mudamos o padrao de User para Usuario

       }

}
?>

Agora nosso arquivo usuarios_controller.php. Ele deve ter os métodos login() e logout() para funcionar corretamente com o components Auth. Neste caso, devemos apenas implementar algumas pequenas mudanças no método login() como mostrado abaixo:

<?php
class UsuariosController extends AppController {

	var $name = 'Usuarios';

	function login() {
	   $this->redirect('http://www.outro.dominio.com.br/pagina.html');
	}

	function logout() {
		$this->redirect($this->Auth->logout());
	}

}
?>

Por isso é hoje. Essa dica é muito quando sua aplicação fica em outra parte do domínio que vai passar o formulário de login. ;)

Tags: , , ,
Pois é. Hoje meu servidor ficou fora do ar. O motivo foi o servidor de banco de dados que caiu, assim nenhum site que usasse banco de dados, estava travado. Não abria. Retomando essa discussão, e se o servidor tivesse crashado geral e tivesse perdido tudo? Já era, né? Não é bem assim.
Abaixo estou compartilhando o meu código de backup que criei há um tempo atrás.
Nele é possível montar o backup do banco de dados e mandar por e-mail.
No meu caso, o mesmo executa 1 vez por dia. Mas fica a seu critério ao rodar o cron.
Dependências: phpmailer. Baixe aqui.
<?php
// aumenta a memoria e importa o mailer
ini_set("memory_limit","64M");
require 'class.phpmailer.php';
// gera backup
$nome = '/tmp/' . date('Ymd-Hi') . '.sql';
exec("mysqldump -u usuario --password='senha' --all-databases > {$nome}");
exec("gzip $nome");
$nome .= ".gz";
$tamanho = number_format(filesize($nome) / 1048576, 0);
$data = date('d/m/Y');
$m = new PHPMailer();
$m->SetFrom('emaildofrom@dominio.com', 'Backup do BD');
$m->AddAddress('destinatario@dominio.com', 'Nome do Destinatario');
$m->AddAttachment($nome);
$m->Subject = 'Backup de Banco de Dados Diario '.$data;
$m->MsgHTML(nl2br("Backup dos Bancos de Dados. \n Dia: {$data} \n Tipo: ANEXO \n Tamanho: {$tamanho}MB."));
// envio backup
if ($m->Send()) {
unlink($filename);
}
?>

Então é isso.
Fica a dica e até mais. Qualquer dúvida, podem comentar aqui abaixo.

Tags: , , ,

Está aí um macetinho para quem gosta de enviar newsletter via PHP

// conecta ao banco

$start = int($_GET['start']);
$sql = mysql_query("SELECT * FROM emails ORDER BY id LIMIT 10, $start");

while($i<10)
{
// manda os emails

// aqui você pode usar a função mail() para enviar. consulte: http://br2.php.net/manual/en/function.mail.php
}

$start_new = $start + 10;
header("Location: arquivo.php?start=$start_new");
Tags: , , ,

Mais um problema do Coding Kata solucionado. Apesar deste problema estar no Beginner ++  ele é muito mais fácil que muitos do Beginner. Uma linha de código foi suficiente para resolvê-lo.

Veja o código abaixo e teste à vontade. Disponível no Git também.

import unittest

def ISBN(isbn):
    """
    Autor: fzmaster
    Data: 29/12/2010
    Problema: Books for Mars

http://codingkata.org/katas/unit/mars-books

    Calcular digito verificador do ISBN
    """
    return (10-(3*(int(isbn[1]) + int(isbn[3]) + int(isbn[5]) + int(isbn[7]) + int(isbn[9]) + int(isbn[11])) + int(isbn[0]) + int(isbn[2]) + int(isbn[4]) + int(isbn[6]) + int(isbn[8]) + int(isbn[10])) % 10) % 10 

class ISBNTestCase(unittest.TestCase):

    def test_caso1(self):
        assert ISBN('978030640615') == 7
    def test_caso2(self):
        assert ISBN('978857780013') == 1
    def test_caso3(self):
        assert ISBN('978857522247') == 8
    def test_caso4(self):
        assert ISBN('978857522212') == 6

if __name__ == '__main__':
    unittest.main()
Tags: , , , ,

O Python não tem nativamente variáveis do tipo Enum.

Entretanto é possível instalar um módulo que pode solucionar este problema. Siga os passos abaixo:

  • Instale o Python;
  • Instale o SettupTools
  • Baixe o Enum (versão atual: 0.4.4) e descompacte-o
  • Abra o prompt e dentro do diretório do Enum digite:
    • Linux: $ python setup.py install
    • Windows: C:\diretorio\> python setup.py install

Pronto, você instalou o módulo corretamente.

Agora você pode testá-lo.

Abra outro prompt e digite:

$ python

>>> import enum

>>>

Se não subiu erros, a importação foi feita com sucesso.

Tags: , , ,