terça-feira, 8 de novembro de 2011

Manipular Cookies com JavaScript

Olá galera, nesta postagem quero deixar um objeto em javascript com algumas funções para manipular cookies.
Logo abaixo deixei umm breve descrição de cada funcão e um exemplo de como utilizar.

Cookie.read
Le o valor de um cookie de acordo com o parâmetro passado

Cookie.readJSON
Le o valor de um cookie no formato JSON e retorna um objeto

Cookie.readBool
Le o valor de um cookie de acordo com o parâmetro passado e retorna um tipo boolean

Cookie.write
Grava um cookie, os parâmetros permitidos são o nome, valor e número de dias para expirar

Cookie.clear
Limpa um cookie de acordo com o nome passado

Cookie = {
    read : function(name) {
        var regExp = new RegExp(name+"=([^;]+)");
        var matches = regExp.exec(document.cookie);
        return matches ? matches[1] : null;
    },
    readJSON : function(name) {
        var value = this.read(name);
        return value != null ? new Function("return "+value) : [];
    }, 
    readBool : function(name) {
        var value = this.read(name);
        return /^(true|t|1)$/i.test(value) ? true : (/^(false|f|0)$/i.test(value) ? false : null);
    }, 
    write : function(name, value, expireDays) {
        var date = new Date();
        var expires = "";
        if (expireDays) {
            date.setTime(date.getTime() + (expireDays * 24 * 60 * 60 * 1000));
            expires = "; expires="+date.toGMTString();
        }
        if (typeof(value) == "object") value = ObjectUtils.json_encode(value);
            document.cookie = name+"="+value+expires+";"; 
            return document.cookie;  
        },
    clear : function(name) {
        var date = new Date();
        date.setTime(date.getTime() - 86400);
        document.cookie = name+"=; expires="+date.toGMTString()+";";  
        return document.cookie; 
    }
};

segunda-feira, 8 de agosto de 2011

Remover caracteres especiais de uma String

Olá pessoal, nesta postagem quero deixar uma função simples de como remover os caracteres acentuados de uma String. É super simples de usar, basta apenas passar como parâmetro a String e o retorno será uma nova String sem os caracteres especiais.

function clear_special_char($input) {
    $search = array("\xC0", "\xC1", "\xC2", "\xC3", "\xC9", "\xCA", "\xCD", "\xD3", "\xD4", "\xD5", "\xDA", "\xDC", "\xC7", "\xE0", "\xE1", "\xE2", "\xE3", "\xE9", "\xEA", "\xED", "\xF3", "\xF4", "\xF5", "\xFA", "\xFC", "\xE7");
    $replace = array("A", "A", "A", "A", "E", "E", "I", "O", "O", "O", "U", "U", "C", "a", "a", "a", "a", "e", "e", "i", "o", "o", "o", "u", "u", "c");
    $string = str_replace($search, $replace, utf8_decode($input));
    return $string;
}

quinta-feira, 4 de agosto de 2011

Paleta de cores em JavaScript

Olá pessoal, nesta postagem quero deixar um tutorial de como montar uma paleta de cores utilizando JavaScript. Este recurso pode ser bem útil em algumas situações, abaixo tem um exemplo da função utilizada para gerar a paleta onde o primeiro parâmetro é o elemento que será utilizado para exibir a paleta de cores e o segundo é uma função de callback.
Espero que vocês gostem, e pode alterar o código conforme suas necessidades.

<script type="text/javascript">
function drawColorPalette(stageID, callback) {
    var listColor = ["00", "33", "66", "99", "CC", "FF"];
    var table = document.createElement("table");
    table.border = 1;
    table.cellPadding = 0;
    table.cellSpacing = 0;
    table.style.borderColor = "#666666";
    table.style.borderCollapse = "collapse";
    var tr, td;
    var color = "";
    var tbody = document.createElement("tbody");
    for (var i = 0; i < listColor.length; i++){
        tr = document.createElement("tr");
        for (var x = 0; x < listColor.length; x++) {
            for (var y = 0; y < listColor.length; y++) {
                color = "#"+listColor[i]+listColor[x]+listColor[y];
                td = document.createElement("td");
                td.style.width = "11px";
                td.style.height = "11px";
                td.style.background = color;
                td.color = color;
                td.style.borderColor = "#000";
                td.style.cursor = "pointer";
              
                if (typeof(callback) == "function") {
                    td.onclick = function() {
                        callback.apply(this, [this.color]);
                    }
                }
                tr.appendChild(td); 
            }
        }
        tbody.appendChild(tr);
    }  
    table.appendChild(tbody);
    var element = document.getElementById(stageID);
    if (element) element.appendChild(table);
    return table;
}

window.onload = function() {
    drawColorPalette("mydiv", function(color) {
        document.getElementById("textcolor").innerHTML = color;
    }); 
}
</script>
<div id="mydiv"></div>
<span id="textcolor"></span>

Resultado gerado pelo exemplo acima:

domingo, 31 de julho de 2011

Valor por extenso com PHP

Nesta postagem quero compartilhar uma classe bem interessante, "Monetary",  simplesmente ela formata um valor monetário por extenso. Logo abaixo segue o código da classe e um exemplo de como utilizar.

<?php
class Monetary {
    private static $unidades = array("um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez", "onze", "doze",
                                     "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove");
    private static $dezenas = array("dez", "vinte", "trinta", "quarenta","cinqüenta", "sessenta", "setenta", "oitenta", "noventa");
    private static $centenas = array("cem", "duzentos", "trezentos", "quatrocentos", "quinhentos", 
                                     "seiscentos", "setecentos", "oitocentos", "novecentos");
    private static $milhares = array(
        array("text" => "mil", "start" => 1000, "end" => 999999, "div" => 1000),
        array("text" => "milhão", "start" =>  1000000, "end" => 1999999, "div" => 1000000),
        array("text" => "milhões", "start" => 2000000, "end" => 999999999, "div" => 1000000),
        array("text" => "bilhão", "start" => 1000000000, "end" => 1999999999, "div" => 1000000000),
        array("text" => "bilhões", "start" => 2000000000, "end" => 2147483647, "div" => 1000000000)        
    );
    const MIN = 0.01;
    const MAX = 2147483647.99;
    const MOEDA = " real ";
    const MOEDAS = " reais ";
    const CENTAVO = " centavo ";
    const CENTAVOS = " centavos ";    
    
    static function numberToExt($number, $moeda = true) {
        if ($number >= self::MIN && $number <= self::MAX) {
            $value = self::conversionR((int)$number);       
            if ($moeda) {
                if (floor($number) == 1) {
                    $value .= self::MOEDA;
                }
                else if (floor($number) > 1) $value .= self::MOEDAS;
            }

            $decimals = self::extractDecimals($number);            
            if ($decimals > 0.00) {
                $decimals = round($decimals * 100);
                $value .= " e ".self::conversionR($decimals);
                if ($moeda) {
                    if ($decimals == 1) {
                        $value .= self::CENTAVO;
                    }   
                    else if ($decimals > 1) $value .= self::CENTAVOS;
                }
            }
        }
        return trim($value);
    }
    
    private static function extractDecimals($number) {
        return $number - floor($number);
    }
    
    static function conversionR($number) {
        if (in_array($number, range(1, 19))) {
            $value = self::$unidades[$number-1];
        }
        else if (in_array($number, range(20, 90, 10))) {
             $value = self::$dezenas[floor($number / 10)-1]." ";           
        }     
        else if (in_array($number, range(21, 99))) {
             $value = self::$dezenas[floor($number / 10)-1]." e ".self::conversionR($number % 10);           
        }     
        else if (in_array($number, range(100, 900, 100))) {
             $value = self::$centenas[floor($number / 100)-1]." ";           
        }          
        else if (in_array($number, range(101, 199))) {
             $value = ' cento e '.self::conversionR($number % 100);         
        }   
        else if (in_array($number, range(201, 999))) {
             $value = self::$centenas[floor($number / 100)-1]." e ".self::conversionR($number % 100);        
        }  
        else {
            foreach (self::$milhares as $item) {
                if ($number >= $item['start'] && $number <= $item['end']) {
                    $value = self::conversionR(floor($number / $item['div']))." ".$item['text']." ".self::conversionR($number % $item['div']);
                    break;
                }
            }
        }        
        return $value;
    }
}

// exemplo de como utilizar
echo Monetary::numberToExt(4526.89);
// o exemplo acima ira imprimir: quatro mil quinhentos e vinte e seis reais e oitenta e nove centavos
?>

sábado, 30 de julho de 2011

Setar posição do cursor com JavaScript

Neste post, quero compartilhar uma função que pode ser bem útil, trata-se de uma solução de como setar o cursor em um determinado ponto de um input text ou textarea. Esta função foi testada no Firefox, IE 7 e Chrome.

function setPosCursor(element, pos) {
    element.focus();
    if (typeof(element.setSelectionRange) != "undefined") {
        element.setSelectionRange(pos, pos);
    }
    else if (element.createTextRange) {
        var breaks = element.value.slice(0, pos).match(/\n/g);
        var endPoint = 0;
        if (breaks instanceof Array) {
            endPoint = -breaks.length;
        }
        var range = element.createTextRange(); 
        range.collapse(true); 
        range.moveStart("character", pos); 
        range.moveEnd("character", endPoint); 
        range.select(); 
    }
} 

Pegar posição do cursor com JavaScript

Em algumas situações precisamos pegar a posição do cursor em um campo de texto (aquele que fica piscando), abaixo tenho uma solução bem prática eu testei no Firefox, IE 7 e Chrome. Para utilizar, você deve passar o elemento input text ou textarea como parâmetro o retorno será um inteiro com o índice da posição.

function getPosCursor(element) {
    var value = 0;
    if (typeof(element.selectionStart) != "undefined") {
        value = element.selectionStart;
    }
    else if (document.selection) {
        var range = document.selection.createRange();
        var storedRange = range.duplicate();
        storedRange.moveToElementText(element);
        storedRange.setEndPoint("EndToEnd", range);
        value = storedRange.text.length - range.text.length;
    }
    return value;
}

sexta-feira, 29 de julho de 2011

Envio de e-mail com PHP por Socket

Para o envio de e-mail o PHP nos possibilita o uso da função mail, porém para utilizá-la é preciso efetuar algumas configurações no php.ini e esta função é bem limitada quanto a servidores SMTP que requerem autenticação com usuário e senha. Neste tutorial estarei ensinando como enviar e-mail por Socket utilizando a função fsockopen.

Abaixo tem a função com o exemplo de utilização, espero que vocês gostem e qualquer dúvida é só comentar.

<?php
function enviar_email($destinatario, $remetente, $assunto, $mensagem) {
    // dominio do servidor SMTP, para servidores HTTPS coloque o prefixo ssl://
    $servidor = "smtp.meuservidor.com";
    // usuario do servidor SMTP
    $usuario = "usuario";
    // senha do servidor SMTP
    $senha = "senha";
    // numero da porta do servidor SMTP
    $success = true;
        
    // abro uma conexao por socket com o servidor
    $socket = @fsockopen($servidor, 25, $errno, $errstr, 10);
    if ($socket) {
        $ln = "\r\n"; 
        // pego o texto de retorno do servidor e verifico o codigo da resposta se for 220 ok
        $response = fgets($socket, 256);
        if (!preg_match("/^220/", $response)) $success = false;

        // envio um comando HELO e verifico o codigo da resposta se for 250 ok
        fwrite($socket, "HELO $servidor".$ln);
        $response = fgets($socket, 256);
        if (!preg_match("/^250/", $response)) $success = false;
       
        // envio um comando AUTH LOGIN para iniciar a autenticacao
        fwrite($socket, "AUTH LOGIN".$ln);
        fgets($socket, 256);
        // envio o nome de usuario
        fwrite($socket, base64_encode($usuario).$ln);
        fgets($socket, 256);
        // envio senha do servidor
        fwrite($socket, base64_encode($senha).$ln);
        // verifico o codigo da resposta se for 235 a autenticacao ocorreu com sucesso
        $response = fgets($socket, 256);
        if (!preg_match("/^235/", $response)) $success = false;

        // envio um comando MAIL FROM e verifico o codigo da resposta se for 250 ok      
        fwrite($socket, "MAIL FROM:$remetente".$ln);
        $response = fgets($socket, 256); 
        if (!preg_match("/^250/", $response)) $success = false;
        
        // envio um comando RCPT TO e verifico o codigo da resposta se for 250 ok 
        fwrite($socket, "RCPT TO:$destinatario".$ln);
        $response = fgets($socket, 256);
        if (!preg_match("/^250/", $response)) $success = false;

        // envio um comando DATA e verifico o codigo da resposta se for 354 ok 
        fwrite($socket, "DATA".$ln);
        $response = fgets($socket, 256);
        if (!preg_match("/^354/", $response)) $success = false;
        
        // definicao dos cabecalhos da mensagem 
        $headers = "Message-Id: <".time().".".md5(microtime())."@".$_SERVER['SERVER_ADDR'].">".$ln;
        $headers .= "Date: ".date("r").$ln;
        $headers .= "X-Priority: 3".$ln;
        $headers .= "Content-Type: text/plain; charset=\"UTF-8\"".$ln;
        $headers .= "Subject: $assunto".$ln;
        $headers .= "To: $destinatario".$ln;       
        $headers .= "From: $remetente".$ln.$ln;
        $headers .= $mensagem.$ln.".".$ln;
        fwrite($socket, $headers);
        $response = fgets($socket, 256);
        if (!preg_match("/^250/", $response)) $success = false;
 
         // envio um comando QUIT e verifico o codigo da resposta se for 221 ok        
        fwrite($socket, "QUIT".$ln);
        $response = fgets($socket, 256);
        if (!preg_match("/^221/", $response)) $success = false;
        
        // fecho a conexao com o servidor
        fclose($socket);
        return $success;
    }
    else return false;
}

$result = enviar_email("destinatario@email.com", "remetente@email.com", "Meu Assunto", "Minha Mensagem");
if ($result) {
    echo "E-mail enviado com sucesso!";
}
else echo "Ocorreu um erro ao tentar enviar o e-mail!";
?>