Spostare wordpress

Se vi capitasse di dover spostare un’installazione di WordPress da una directory all’altra ricordatevi di aggiornare, nella tabella wp-options, il record identificato da option_name=upload_path, altrimenti non sarete piú in grado di fare upload sul vostro blog!

Buon blogging

Posted in wordpress | Tagged | Leave a comment

bulk rename

Oggi ho scoperto l’esistenza del comando debian/linux rename, mi é servito per cambiare lo stato da marcato per la cancellazione [ST] a normale [S] per circa 400 messaggi della mia posta inviata, che si erano incasinati per via della errata gestione dei filtri in uscita di Thunderbird 3.0.x. Il server é un postfix + courier, e le email sono salvate come singolo file e non come mbox.

In particolare ho lanciato sul server,  nella directory contente i file in oggetto, il seguente comando:

# rename -n 's/\,ST$/\,S/' *,ST

Per maggiori informazioni su questo comando man rename, oppure fare riferimento a questo ottimo link di webmaster tips.

Posted in linux, sysadmin | Leave a comment

Aggiungere un hook in prestashop 1.3

Oggi mi sono imbattuto nella necessitá di aggiungere un hook in PrestaShop 1.3, e data la scarsa documentazione ho dovuno impazzire non poco. Non sono inoltre sicurissimo della procedura che ho seguito, in quanto va a modifica alcuni file del core, ma credo che sia un difetto ancora da sistemare in PrestaShop stesso.

Bisogna innanzitutto creare l’hook, ed io l’ho fatto tramite un modulo ad hoc. Le alternative sarebbero creare l’hook direttamente nel database, o in modo piú elegante creare un modulo in grado di interagire con il database e creare/eliminare tutti gli hook di cui si necessita, invece di usare un modulo per ciascuno di essi. Ecco il codice:

// same name of the file php and of the folder
class BlockHookLiveHelp extends Module
{

	function __construct() {
		// the name MUST be the same of the directory/file
		$this->name = 'blockhooklivehelp';
		$this->tab = 'Hooks';
		$this->version = 0.1;

		parent::__construct();

		$this->page = basename(__FILE__, '.php');
		$this->displayName = $this->l('Hook Live');
		$this->description = $this->l('Questo modulo installa un nuovo hook per il live help');
	}

	private function addMyHook($HookName,$HookTitle,$HookDescription) {

		$q = "SELECT `id_hook` FROM `"._DB_PREFIX_."hook`
					WHERE `name` = '$HookName' LIMIT 1";
		if ( ! Db::getInstance()->getRow($q) )  {
			Db::getInstance()->AutoExecute(
				_DB_PREFIX_.'hook',
				array( 'id_hook' => NULL,
					'name' => $HookName,
					'title' => $HookTitle,
					'description' => $HookDescription,
					'position' => '1'
				),
				'INSERT'
			);
		}
	} 

	public function install() {

		$retVal = true;

      /** CREATE HOOK **/
		$this->addMyHook('liveHelp', 'Live Help', 'Hook personalizzato per il live help');

		if ( !parent::install() ) { $retVal = false; }

		return $retVal;
	}

	/* I create a function that will be called from the hook */
	private function delMyHook($HookName) {
		$qd = 'DELETE FROM `'._DB_PREFIX_.'hook_module`
					WHERE `id_hook` IN (
						SELECT `id_hook` FROM `'._DB_PREFIX_."hook`
							WHERE `name` = '$HookName'
					)";
		Db::getInstance()->Execute($qd);

		$qd = 'DELETE FROM `'._DB_PREFIX_."hook`
					WHERE `name` = '$HookName' LIMIT 1";
		Db::getInstance()->Execute($qd) ;
	}

	public function uninstall() {

		if (!parent::uninstall() ) return false;

		/** DROP HOOK **/
		$this->delMyHook('live');

		return true;
	}

} //end of class

Come di consueto questo modulo va salvato nel file /modules/blockhooklivehelp/ blockhooklivehelp.php.

Nel file /header.php (ma avrei potuto farlo in qualsiasi file processato prima del template) ho aggiunto:

$smarty->assign(array(
    'HOOK_LIVE_HELP' => Module::hookExec('liveHelp'),
);

Nel file /themes/nometema/header.tpl ho aggiunto, nel posto giusto:

<div>{$HOOK_LIVEHELP}<div>

Infine, in ciscun modulo che deve comparire nell’hook creato ho creato la funzione NomeModulo::liveHelp() che genera il codice HTML da visualizzare. Come ultima cosa ho dovuto agganciare i moduli di cui sopra al nuovo hook, andando in Modules -> Positions -> Transplant a Module.

Secondo me la procedura dovrebbe essere piú snella, come avviene con Drupal, magari un giorno metteró mano al core per sistemare la situazione…

Posted in Prestashop, programmazione | Tagged , | Leave a comment

Ottenere la url completa da una pagina php

Sembrerebbe una stupidaggine, invece non é cosí banale:

private function CurrentPageURL() {

  $pageURL = $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://';
  $pageURL .= $_SERVER['SERVER_PORT'] != '80' ? $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"] : $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
  return $pageURL;
 }

Modificando a dovere lo script si ottengono tutti i risultati voluti.
Un grazie a www.webcheatsheet.com ed a chi ha modificato lo script per renderlo utilizzabile.

Posted in programmazione | Tagged | Leave a comment

Amavis end of life problem @ debian 5

Oggi le email sul mio server personale hanno smesso di funzionare di punto in bianco. Panico.

Un’occhiata al mail.log e con grande sconcerto leggo:

Apr 16 15:17:20 s1 amavis[17347]: (17347-06) (!!)run_av (ClamAV-clamscan) FAILED – unexpected exit 50, output=”LibClamAV Warning: ***********************************************************\nLibClamAV Warning: *** This version of the ClamAV engine is outdated. ***\nLibClamAV Warning: *** DON’T PANIC! Read http://www.clamav.net/support/faq ***\nLibClamAV Warning: ***********************************************************\nLibClamAV Error: cli_hex2str(): Malformed hexstring: This ClamAV version has reached End of Life! Please upgrade to version 0.95 or later. For more information see www.clamav.net/eol-clamav-094 and www.clamav.net/download (length: 169)\nLibClamAV Error: Problem parsing database at line 742\nLibClamAV Error: Can’t load daily.ndb: Malformed database\nLibClamAV Error: cli_tgzload: Can’t load daily.ndb\nLibClamAV Error: Can’t load /var/lib/clamav//daily.cld: Malformed database\nERROR: Malformed database”

This ClamAV version has reached End of Life!!!!!!!

Ma debian lenny non e’ considerata stable? Fortunatamente qualcuno aveva gia’ risolto questo problema, riporto la soluzione e confermo che ha funzionato anche per me:

$ echo “deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free” >> /etc/apt/sources.list

$ apt-get update
$ apt-get install clamav
$ apt-get upgrade
$ /etc/init.d/amavis restart
Posted in linux | Tagged , , | 3 Comments