Si trabajas realizando proyectos en WordPress en el que el código se aloja en un servidor usando SVN, una forma sencilla de actualizar tu theme con los últimos cambios es mediante este sencillo y no-seguro plugin.
El plugin añade una opción de menú al Settings del Dashboard de WP, el cual te servirá para indicar el servidor SVN, usuario, contraseña y el path que corresponde a la carpeta themes de WP. El plugin se conectará al repositorio SVN y recuperará las carpetas que se encuentran en el path anterior y comprobará si las carpetas corresponden a themes instalados, mostrarás una lista con los themes encontrados junto a un botón que permite actualizar todo el theme.
Digo que no es seguro porque no controlo los permisos de los usuarios ni otras cuestiones, pero si estás interesado en ello supongo que no te costará mucho meterle mano al código:
// Adding Admin menu
if ( is_admin() ){
add_action('admin_menu', 'svn_update_menu');
add_action( 'admin_init', 'svn_update_register_settings' );
}
function svn_update_register_settings() {
register_setting( 'svn_up_option-group', 'svn_username' );
register_setting( 'svn_up_option-group', 'svn_password' );
register_setting( 'svn_up_option-group', 'svn_repository' );
register_setting( 'svn_up_option-group', 'svn_theme_path' );
if ($_GET['page'] == 'svn-update/svn-update.php') {
require ('phpsvnclient/phpsvnclient.php');
$phpsvnclient = new phpsvnclient(get_option('svn_repository'), get_option('svn_username'), get_option('svn_password'));
$files = $phpsvnclient->getDirectoryFiles('/');
$svn_themes = array();
$themes = array();
foreach(get_themes() as $k=>$t) $themes[$t['Template']] = array($k, $t["Template Dir"]);
if (is_array($files)) {
foreach($files as $f) {
if ($f['type'] == 'directory') {
if (isset($themes[$f['path']])) $svn_themes[$f['path']] = $themes[$f['path']];
}
}
}
update_option('svn_themes', $svn_themes);
if (isset($_GET['svn_update'])) {
$path = $_GET['svn_update'];
$theme_path = WP_CONTENT_DIR . '/themes/';
$files = $phpsvnclient->getDirectoryFiles($path);
foreach($files as $f) {
if ($f['type'] == 'file') {
file_put_contents($theme_path.$f['path'], $phpsvnclient->getFile($f['path']));
}
}
add_action('admin_notices', 'showSVNUpdated');
}
}
}
function showSVNUpdated() {
echo '
Theme updated
';
}
function svn_update_menu() {
add_options_page('SVN Update Options', 'SVN Update', 8, __FILE__, 'svn_update_options');
}
function svn_update_options() {
?>
SVN Update Options
Available Themes
No themes found in SVN repository instaled in WordPress';
} else {
echo '
Este plugin necesita la librería PHP SVN Client para acceder al SVN, tan solo hay que meterlo en el mismo directorio que el plugin. Le faltan muchas cosas al plugin, pero ni tengo ganas ni tengo tiempo.
PHPCPD es una herramienta que nos permite detectar código duplicado en nuestros scripts PHP. Una utilidad muy interesante sobre todo para aquellos proyectos grandes en los que hay muchos ficheros y unos cuantos metiendo mano al código, ya que la falta de documentación o de comunicación hace que se repitan codigos en diferentes partes del proyecto, o también debido a malas prácticas a la hora de desarrollar. El código repetido hace que sea imposible de mantener y cueste horrores modificar una funcionalidad ya que hay que buscar en diversos lugares. PHPCPD
Vía / PHPDeveloper.org
Ha salido la nueva versión de CodeIgniter (1.7.1) que soluciona algunos bugs y trae algunas mejoras, como por ejemplo evitar XSS en casos específicos contra Internet Explorer.
Sigo recomendando CodeIgniter a todos aquellos que programen PHP. CodeIgniter 1.7.1
Vía / PHPDeveloper.org
Para mí, uno de los mayores fracasos de Twitter es su API, una limitación de su uso increíble para algo que le podría dar mucho juego a la aplicación. Ahora mismo no sé en cuánto está el límite, pero la posibilidad de realizar una aplicación basada en Twitter es una pesadilla.
Para aquellos que no quieran sufrir lo que hemos sufrido con TwitterPoster (los espacios en blanco es porque la gente actualiza su imagen y no podemos recuperar la de todos los usuarios por el límite en el API de Twitter), les recomiendo usar Twitter mediante CURL.
Os paso un script sencillito que he realizado:
<?php
// Primer hacemos login
$url ="https://twitter.com/sessions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
// Por si tienen limitación por navegador
curl_setopt($ch, curlOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)");
// Poned una ruta para las cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/');
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/temp/');
curl_setopt ($ch, CURLOPT_POSTFIELDS, "username_or_email=[usuario]&password=[contraseña]");
// Para que funcione el https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, curlOPT_SSL_VERIFYHOST, 2);
curl_exec ($ch);
// Cargamos el home, porque Twitter añade dos campos ocultos para poder publicar por web
$url ="http://twitter.com/home";
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec ($ch);
// Recuperamos los campos ocultos
preg_match('//', $result, $match);
$authenticity_token = $match[1];
preg_match('//', $result, $match);
$siv = $match[1];
// Insertamos el texto
$res = $url ="http://twitter.com/status/update";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'siv='.$siv.'&authenticity_token='.$auth.'&status=[texto]');
curl_exec ($ch);
curl_close ($ch);
unset($ch);
?>
¿Qué fallo tiene este script? pues que si cambian el HTML (campos de formulario, …) o las URLs deja de funcionar, pero al menos no tenemos limitaciones. Eso sí, es más costoso para sus servidores y para los nuestros, porque en vez de hacer una llamada, hacemos 3, y en nuestro caso, a parte parseamos una página para obtener dos campos ocultos.
SQLite es una posibilidad a tener en cuenta cuando no es posible realizar aplicaciones web que accedan a una BD (MySQL, Oracle, …), ya que no existe servidor de BD sino un conjunto de rutinas y los datos se guardan en un fichero en el servidor.
Para aquellos que programen con CodeIgniter les podrá venir muy bien esta explicación para integrar CI y SQLite. CodeIgniter PDO SQLite3 quick setup