Category Archives: PHP

Crunchbase API PHP Library

Por alguna razón se me ocurrió hacer una librería PHP para el API de Crunchbase. La misma se puede descargar de GitHub.

Uso:

require_once('crunchbase.php');

$crunchbase 	= new CrunchBase($user_key = 'XXX', $format = 'array');
$organizations 	= $crunchbase->organizations(array('query' => 'wharton school', 'organization_types'=> array('company', 'investor')));

foreach ($organizations['data']['items'] as $organization)
{
	echo "<p><a href=\"".$organizations['metadata']['www_path_prefix'].$organization['path']."\">".$organization['name']."</a></p>";
}

Edit (07/12/2014): La gente de CrunchBase ya ha agregado la librería dentro de su documentación :)

Screen Shot 2014-12-09 at 1.04.22 AM

Callback para validar CUIT con CodeIgniter PHP

Comparto cómo validar un número de CUIT/CUIL usando un callback de form_validation en un controlador de CodeIgniter:

// Cargo la libreria de validacion de formularios
$this->load->library('form_validation'); 

// Defino las reglas de validacion del formulario
$this->form_validation->set_rules('cuit', 'CUIT', 'xss_clean|required|numeric|callback_valid_cuit');

// ...

if ($this->form_validation->run() != FALSE)
{
    // Todo OK.
}
else
{
    // Error /:
}

Método de callback:

/*
 * Form Validation Callback: Valida un Nro. de CUIT
 */
public function valid_cuit($cuit)
{
    $cuit_array = str_split(str_replace(array(' ', '-'), array(), $cuit));

    if ((count($cuit_array) < 11) OR (count($cuit_array) > 11))
    {
        // Usando lang
        // $this->form_validation->set_message('valid_cuit', $this->lang->line('form_cuit_error'));
        $this->form_validation->set_message('valid_cuit', 'Error al validar el CUIT');

        return FALSE;
    }

    $result  = $cuit_array[0] * 5;
    $result += $cuit_array[1] * 4;
    $result += $cuit_array[2] * 3;
    $result += $cuit_array[3] * 2;
    $result += $cuit_array[4] * 7;
    $result += $cuit_array[5] * 6;
    $result += $cuit_array[6] * 5;
    $result += $cuit_array[7] * 4;
    $result += $cuit_array[8] * 3;
    $result += $cuit_array[9] * 2;

    $div    = intval($result / 11);
    $resto  = $result - ($div * 11);

    if ($resto == 0)
    {
        return ($resto == $cuit_array[10]) ? TRUE : FALSE;
    }
    elseif ($resto == 1)
    {
        if (($cuit_array[10] == 9) AND ($cuit_array[0] == 2) AND ($cuit_array[1] == 3))
        {
            return TRUE;
        }
        elseif (($cuit_array[10] == 4) AND ($cuit_array[0] == 2) AND ($cuit_array[1] == 3))
        {
            return TRUE;
        }
    }
    elseif ($cuit_array[10] == (11 - $resto))
    {
        return TRUE;
    }
    else
    {
        // Usando lang
        // $this->form_validation->set_message('valid_cuit', $this->lang->line('form_cuit_error'));
        $this->form_validation->set_message('valid_cuit', 'Error al validar el CUIT');

        return FALSE;
    }
}

jCrop: Bind select action to button workaround

Here’s how to “bind” the jCrop script to a button. This might be useful if you don’t want to post the new dimensions and resize everytime the original image is selected.

<script type="text/javascript">

$(document).ready(function() {

	var jcrop_api;
	$('#banner-preview-img').Jcrop({
		setSelect: [ 0, 0, 780, 100],
		aspectRatio: 78/10,
		minSize: [780, 100]

	}, function() { jcrop_api = this });

	$('#apply-banner-crop').live('click', function(){
		$.post('/crop-script', { coords: jcrop_api.tellScaled() },
			function (response) {
			if (response.status = 'OK') 
			{
				// ok! (:
			}
			else
			{
				// Something went wrong
			}
		});

		return false;
	});
});
</script>

<div id="banner-preview">
	<h2>Crop your banner</h2>
	<img id="banner-preview-img" src="my_banner.jpg" />

	<a class="button first" href="#" id="apply-banner-crop">Apply</a>
	<a class="button">Cancel</a>
</div>

Instalar Facebook XHP

Se dice que cualquiera puede programar en PHP, y por suerte, es cierto. PHP se pone el vestido de quince este año (el 8/06/1995  fue publicado “Personal Home Page Tools” ), ideado originariamente por Rasmus Lerdorf para mostrar su CV dinámicamente, se encuentra entre los cinco lenguajes de programación más utilizados (ver) al día de la fecha. A pesar de las grandes críticas que se le hacen, existen plataformas enormes como Yahoo y Facebook basadas en este lenguaje.

Facebook pone a disposición mejoras al core de MySQL y extensiones PHP que permiten, junto a otras tecnologías, las millones de consultas que hacen los más de 380 millones de usuarios (enero 2010), una de estas mejoras es XHP, presentada en febrero de este año.

¿Qué es XHP?

Es una extensión PHP que hace más fácil de leer la sintaxis del lenguage y ayuda a evitar ataques XSS por POST. Esto lo hace mediante la interpretación de fragmentos de documentos XML, similiar a lo que hace ECMAScript con DOM. Además es un sistema de plantillas, ya que, como se sabe, PHP no es un lenguaje muy bueno para la generación de HTML.

Facebook lanzó la -ya muerta- aplicación Facebook Lite totalmente escrita en PHP.

Un ejemplo de aplicación (brindado por Facebook):

<?php
if ($_POST['name']) {
?>
    <span>Hello, <?=$_POST['name']?>.</span>
<?php
} else {
?>
    <form method="post">
    What is your name?<br>
    <input type="text" name="name">
    <input type="submit">
    </form>
<?php
}

Esta simple porción de código podría traernos dos problemas: Primero, la introducción de XSS por POST y segundo, el error que nos daría al olvidar de cerrar algún tag de PHP.

Instalación (sobre Ubuntu)

Para evitar de compilarlo junto con el source tenés que tener instalado php5-dev, el command line de PHP5 (php5-cli),  flex, bison y phpize (sudo apt-get install ….)

cd /tmp/
wget http://github.com/facebook/xhp/tarball/1.3.9
cd /usr/src
root@ubuntu:/tmp# tar -zxvf facebook-xhp-1.3.9-0-gc78f8f2.tar.gz
root@ubuntu:/tmp# cd facebook-xhp-c78f8f2/
root@ubuntu:/tmp/facebook-xhp-c78f8f2# phpize
root@ubuntu:/tmp/facebook-xhp-c78f8f2# ./configure
root@ubuntu:/tmp/facebook-xhp-c78f8f2# make
root@ubuntu:/tmp/facebook-xhp-c78f8f2# make test
root@ubuntu:/tmp/facebook-xhp-c78f8f2# make install

Modificar los archivos de configuración:

root@ubuntu:# vi /etc/php5/apache2/php.ini
root@ubuntu:# vi /etc/php5/cli/php.ini #Necesario únicamente para CGI

Agregar la linea extension=xhp.so
Luego reiniciar el Apache para que tome XHP como módulo incorporado.

root@ubuntu:# php -r 'echo "XHP!\n"; exit; <a />;'
XHP!

Si aparece XHP! está todo listo para empezar a probar la extensión.

Más información y ejemplos en Github de XHP

<?php

if ($_POST['name']) {

?>

    <span>Hello, <?=$_POST['name']?>.</span>

<?php 

} else {

?>

    <form method="post">

    What is your name?<br>

    <input type="text" name="name">

    <input type="submit">

    </form>

<?php

}