Caputo's blog

Informatica, tecnologia, programmazione, fai da te, papercraft e papertoy

Rimuovere menu di amministrazione di WordPress dalla Dashboard

gennaio 4th, 2010 by Giovanni Caputo

wordpress logo

Semplicemente incollando il codice seguente nel file functions.php. Il seguente codice di esempio rimuove tutte le voci del menu di amministrazione che sono contenute nell’array $restricted.

function remove_menus () {
global $menu;
	$restricted = array(__('Dashboard'), __('Posts'), __('Media'), __('Links'), __('Pages'), __('Appearance'), __('Tools'), __('Users'), __('Settings'), __('Comments'), __('Plugins'));
	end ($menu);
	while (prev($menu)){
		$value = explode(' ',$menu[key($menu)][0]);
		if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
	}
}
add_action('admin_menu', 'remove_menus');

Category: Programmazione, programmi | No Comments »

Determinare se il sito è stato aperto con un dispositovo mobile

dicembre 14th, 2009 by Giovanni Caputo

Questo metodo può essere utilizzato sia su un normale sito statico che con un sito realizzato con WordPress.

Per prima cosa è necessario scaricare una piccola libreria: detectmobilebrowsers.mobi e pubblicarlasul proprio sito. Mentre se si utilizza WordPress pubblicarla nella direcotory.

A questo punto inserire, il seguente codice, nella propria pagina, se si tratta di wordpress,invece, nella header.php:

include('mobile_device_detect.php');
$mobile = mobile_device_detect();

if ($mobile==true) {
  header( 'Location: http://your-website.com/?theme=Your_Mobile_Theme' ) ;
}

Category: Programmazione | No Comments »

Submit di un form con PHP e CURL

dicembre 12th, 2009 by Giovanni Caputo

Se volete realizzare un script che effettua una richiestsa POST ad un form, come se lo stessimo compilando, per poi parserizzare i risultati, è possibile utilizzare in PHP una funziona CURL.

< ?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.esempio.com/percorso/del/form");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);

$data = array(
    'foo' => 'foo foo foo',
    'bar' => 'bar bar bar',
    'baz' => 'baz baz baz'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
?>

Fonte: sastgroup

Category: Programmazione | No Comments »

Richieste Soap a un web service con GWT

dicembre 12th, 2009 by Giovanni Caputo

Ciao a tutti, in questi giorni, durante l’utilizzo di GWT, avevo la necessità di effettuare richieste SOAP a un semplice web service da me realizzato.

Per semplicità fornisco il codice di due metodi del web service da me realizzato.

Metodo CIAO:

/**
* Web service operation
*/
@WebMethod(operationName = “CIAO”)
public String CIAO() {
return “CIAO”;
}

Metodo  executeM5Primo

/**
* Web service operation
*/
@WebMethod(operationName = “executeM5Primo”)
public String executeM5Primo(@WebParam(name = “stringfile”)
String stringfile, @WebParam(name = “filetype”)
String filetype, @WebParam(name = “options”)
java.lang.String[] options) throws IOException, Exception {

String xml=””;
//altro codice….

return  xml;

}

Vediamo adesso come effettuare effettivamente la richiesta al web service tramite GWT:

request(){

String  url=”http://localhost:8080/WS_DataMining/DataMiningServices”;
RequestBuilder rb;

RequestBuilder rb= new RequestBuilder(RequestBuilder.POST, url);
rb.setHeader(“SOAPAction”, “\”\””);
rb.setHeader(“Content-Type”, “text/xml”);

/*dati di richiesta per un metodo con prototipo
String CIAO()
*
* <?xml version=”1.0″?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<SOAP-ENV:Body>
<jsx1:CIAO xmlns:jsx1=”http://dataMiningWS/”/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*
*/

String data=“<?xml version=\”1.0\”?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\”http://schemas.xmlsoap.org/soap/envelope/\” xmlns:SOAP-ENC=\”http://schemas.xmlsoap.org/soap/encoding/\” xmlns:xsi=\”http://www.w3.org/2001/XMLSchema-instance\” xmlns:xsd=\”http://www.w3.org/2001/XMLSchema\”> <SOAP-ENV:Body><jsx1:CIAO xmlns:jsx1=\”http://dataMiningWS/\”/></SOAP-ENV:Body></SOAP-ENV:Envelope>“;
try {

rb.sendRequest(data, new CiaoResultHandler());

} catch (RequestException ex) {

}

/*Dati richiesta per un metodo con protopipo
* String execute (String a , String b, String[] c)
*
* <?xml version=”1.0″?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<SOAP-ENV:Body><jsx1:executeM5Primo xmlns:jsx1=”http://dataMiningWS/”>
<stringfile>
@relation ‘cpu’

@attribute vendor { adviser, amdahl, apollo, basf, bti, burroughs, c.r.d, cdc, cambex, dec, dg, formation, four-phase, gould, hp, harris, honeywell, ibm, ipl, magnuson, microdata, nas, ncr, nixdorf, perkin-elmer, prime, siemens, sperry, sratus, wang}
@attribute MYCT real
@attribute MMIN real
@attribute MMAX real
@attribute CACH real
@attribute CHMIN real
@attribute CHMAX real
@attribute class real

@data
adviser,125,256,6000,256,16,128,199

</stringfile>
<filetype>arff</filetype>

</jsx1:executeM5Primo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

*/

String data=“<?xml version=\”1.0\”?>” +
“<SOAP-ENV:Envelope xmlns:SOAP-ENV=\”http://schemas.xmlsoap.org/soap/envelope/\” xmlns:SOAP-ENC=\”http://schemas.xmlsoap.org/soap/encoding/\” xmlns:xsi=\”http://www.w3.org/2001/XMLSchema-instance\” xmlns:xsd=\”http://www.w3.org/2001/XMLSchema\”>” +
“<SOAP-ENV:Body><jsx1:executeM5Primo xmlns:jsx1=\”http://dataMiningWS/\”>”
;
data+=“<stringfile>”+file+”</stringfile>”;
data+=”<filetype>”+tipoFile+”</filetype>”;
data+=”<options>”+opzioni+”</options>”;
data+=”</jsx1:executeM5Primo> </SOAP-ENV:Body>     </SOAP-ENV:Envelope>”;

try {
rb.sendRequest(data, new M5PrimoResultHandler());
} catch (RequestException ex) {
//Logger.getLogger(Request.class.getName()).log(Level.SEVERE, null, ex);
}

}

Category: Programmazione | No Comments »

Bellissima galleria fotografica in jQuery e CSS3!

novembre 26th, 2009 by Giovanni Caputo

Demo: http://demo.tutorialzine.com/2009/11/hovering-gallery-css3-jquery/demo.php

Codice Sorgente: http://demo.tutorialzine.com/2009/11/hovering-gallery-css3-jquery/demo.zip

Tutorial: http://tutorialzine.com/2009/11/hovering-gallery-css3-jquery/

Category: Programmazione | No Comments »

Conoscere quanso è stata effettuata l’ultima visita dallo stesso utente in PHP

novembre 16th, 2009 by Giovanni Caputo

Conoscere quando è stata effettuata l’ultima visita dall’utente può essere molto utile.
Vediamo come realizzarla in PHP con l’utilizzo dei cookie.

< ?php
if(isset($_COOKIE['AboutVisit']))
{
$last = $_COOKIE['AboutVisit']; }
$year = 31536000 + time() ;
//this adds one year to the current time, for the cookie expiration
setcookie(AboutVisit, time (), $year) ;
if (isset ($last))
{
$change = time () - $last;
if ( $change > 86400)
{
echo "Welcome back!  You last visited on ". date("m/d/y",$last) ;
// Tells the user when they last visited if it was over a day ago
}
else
{
echo "Thanks for using our site!";
//Gives the user a message if they are visiting again in the same day
}
}
else
{
echo "Welcome to our site!";
//Greets a first time user
}
?>

Category: Siti Web, Tecnologia, tutorial | No Comments »

print_r() & var_dump() formattati per sviluppatori PHP

novembre 16th, 2009 by Giovanni Caputo

Molti sviluppatori PHP usano print_r() e var_dump() per effettuare il debug delle proprie applicazioni. I risultati di tali funzioni sono difficile da leggere e non sono formattati.

Krumo rimpiazza queste funzioni  per poter visualizzare le informazioni relative alle variabili in maniera strutturata.

Website: http://krumo.kaloyan.info/
Demo: http://krumo.kaloyan.info/#example
Download: http://krumo.kaloyan.info/#download

Category: Programmazione, Tecnologia, tutorial | No Comments »

Un plugin jQuery per mappe interattive

novembre 14th, 2009 by Giovanni Caputo

Fonte: http://www.newmediacampaigns.com/

Category: Programmazione, Siti Web, Tecnologia | No Comments »

Scrivere un testo su una immagine in PHP

novembre 9th, 2009 by Giovanni Caputo

Questa funzione permette di scrivere un testo e di fonderlo con un’immagine esistente. Se l’immagine non esiste restituisce un’immagine con un messaggio di errore!

< ?php

/*** set the header for the image ***/
header("Content-type: image/jpeg");

/*** specify an image and text ***/
$im = writeToImage('test.jpg', 'PHPRO rules again');

/*** spit the image out the other end ***/
imagejpeg($im);

/**
 *
 * @Write text to an existing image
 *
 * @Author Kevin Waterson
 *
 * @access public
 *
 * @param string The image path
 *
 * @param string The text string
 *
 * @return resource
 *
 */
function writeToImage($imagefile, $text){
/*** make sure the file exists ***/
if(file_exists($imagefile))
    {
    /*** create image ***/
    $im = @imagecreatefromjpeg($imagefile);

    /*** create the text color ***/
    $text_color = imagecolorallocate($im, 233, 14, 91);

    /*** splatter the image with text ***/
    imagestring($im, 6, 25, 150,  "$text", $text_color);
    }
else
    {
    /*** if the file does not exist we will create our own image ***/
    /*** Create a black image ***/
    $im  = imagecreatetruecolor(150, 30); /* Create a black image */

    /*** the background color ***/
    $bgc = imagecolorallocate($im, 255, 255, 255);

    /*** the text color ***/
    $tc  = imagecolorallocate($im, 0, 0, 0);

    /*** a little rectangle ***/
    imagefilledrectangle($im, 0, 0, 150, 30, $bgc);

    /*** output and error message ***/
    imagestring($im, 1, 5, 5, "Error loading $imagefile", $tc);
    }
return $im;
}

?>

Fonte: http://www.sastgroup.com

Category: Programmazione | No Comments »

Api di google analytics con PHP

ottobre 28th, 2009 by Giovanni Caputo

Ciao a tutti,

volevo condividere con tutti i lettori la mia piccola esperienza con le API di Google Analytics.

Per prima cosa ho utilizzato, per semplificare l’utilizzo, la liberia disponibile su http://www.electrictoolbox.com

Questa classe si basa sulla documentazione disponibile su:
* http://code.google.com/apis/analytics/docs/gdata/gdataReference.html
* http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html
*

Tutte le metriche e le dimensioni disponibili, ovvero le statistiche possibili sono disponibili al seguente link

* http://code.google.com/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html
Codice di esempio della libreria è disponibile qui:
* http://www.electrictoolbox.com/google-analytics-api-and-php/

Io ho effettuato una piccola modifica al metodo “function data”, inquanto, se non indicato il periodo di inizio delle statistiche, veniva impostato di default a mese della data corrente. Quindi ho modificato

if(!$start) $start = date(‘Y-m-d’, strtotime(‘1 month ago’));

con il codice

if(!$start) $start = date(‘Y-m-d’, strtotime(‘01.01.2009’));

Nel mio caso particolare ho utilizzato la libreria nel seguente modo:
$api = new analytics_api();
if($api->login(“USERNAME****”, “PASSWORD***”)) {

echo “login success\n”;
$api->load_accounts();
print_r($api->accounts);

//bounces:
$data = $api->data(“ga:22420862″, ”, ‘ga:visitors,ga:visits,ga:pageviews,ga:timeOnSite,ga:bounces,ga:entrances,ga:newVisits’);
foreach($data as $metric => $count) {
echo ”
$metric: $count\n”;
}

}

Vediamo cosa succede in particola.

Prima di tutto viene effettuata la connessione alle API di google con il metodo login della classe new analytics_api, instanziata in $api.

Successivamente con il metodo, load_accounts(), vengono caricati tutti gil accout(tutti i siti web) registrati in google analytics. In questo modo otteniamo, qualcosa del genere:
Array
(

[www.electrictoolbox.com] => Array
(

[tableId] => ga:7426158
[accountId] => 144582
[accountName] => The Electric Toolbox
[profileId] => 7426158
[webPropertyId] => UA-144582-3

)


[www.electricbookmarks.com] => Array
(

[tableId] => ga:13502852
[accountId] => 144582
[accountName] => The Electric Toolbox
[profileId] => 13502852
[webPropertyId] => UA-144582-11

)

)

Da questa vettore molto utile è il campo tableId, che permetterà, successivamente, di ottenere le statistiche relative a un sito web, passandolo come parametro al metodo ->data().

Per ottenere la tableId relativo a www.electrictoolbox.com , possiamo utilizzare il codice $id = $api->accounts[‘www.electrictoolbox.com’][‘tableId’];

Per quindi ottenere le statistiche di google analytics, utilizziamo il metodo data che riceve in input, l’id precedentemente descritto e la lista delle metriche che vogliamo ottenere  separati da virgole.

Nel mio caso ga:visitors,ga:visits,ga:pageviews,ga:timeOnSite,ga:bounces,ga:entrances,ga:newVisits

Tali metriche, non sono semplice da capire e da interpreta, vediamole quindi nel dettaglio:

  • visitors: numero di visitatori totali, non sono contati gli utenti che ritornano
  • visits: numero di visite (sessioni uniche)
  • bounces: numero totale di singole pagine visualizzate
  • entracens: entrate nel sito, dovrebbe essere uguale al  numero di visits.
  • newVisits: visitatori che entrano per la prima volta

Vediamo di seguito, invece, alcune statistiche che possono essere calcolate e che potrebbero essere molto utili. Sono le stesse che google analytics per ogni sito che analizza.

  • Tempo medio ad ogni visita
    • Si ottiene dividendo ga:timeOnSite  e ga:visits
    • Quindi per mostrare il tempo medio in termini di minuti
      • $timeOnSite=$data[‘ga:timeOnSite’];
      • $visits=$data[‘ga:visits’];
      • $seconds=$timeOnSite/$visits;
      • $mins = floor ($seconds / 60);
      • $secs = $seconds % 60;
      • $timeOnSite=$data[‘ga:timeOnSite’];
      • echo “<br/>tempo medio: “. $mins. “:” .$secs;
  • Pagine viste in media da ogni utente – (bounce rate)
    • Si ottiene dividendo ga:bounces e ga:entrances
    • echo “<br/>pagine viste in media da ogni utente: “. $data[‘ga:pageviews’]/$data[‘ga:visits’];
  • Percentuale di nuove visite (basato su tutte le visite)
    • Calcolato dal rapporto di ga:newVisits e ga:visits
    • echo “<br/>Percentage of new visits based on all visits : “.$data[‘ga:newVisits’]/$data[‘ga:visits’];

Ho provato il codice sia su netsons, sul quale non ho alcun problema, sia su aruba dove non è possibile utilizzarlo se si ha un hosting Windows.

Infatti su aruba la libreria curl non è gestibile attraverso il servizio di hosting windows; questa è correttamente implementata nel servizio di hosting linux.

Category: Programmazione, Tecnologia, tutorial | No Comments »