Novità Joomla! 3.2 il "post-install messages"

Written by | 01 November 2013 | Published in 2013 November
Tra le tante nuove funzionalità rilasciate con la versione 3.2 di Joomla!, forse una delle meno pubblicizzate ma sicuramente molto utile per amministratori ed interessante per gli sviluppatori, è la cosidetta "post-installation messages", informa l'amministratore del sito circa l'avvenuta installazione di estensioni e funzionalità che richiedono la sua attenzione, vediamo nel dettaglio le sue caratteristiche e come usarlo.  

Se avete già installato Joomla! 3.2, avrete certamente notato, nel pannello di controllo la comparsa di un messaggio informativo, cliccando sull'apposito bottone, vi viene notificata la disponibilità della nuova funzione "Autenticazione a due fattori", che necessità della vostra attenzione, è la prima applicazione concreta che usa questa nuova feature.

PIM-Administration-Control-Panel

A cosa serve

Si tratta di un sistema di notifica messaggi che può essere utilizzato quando si installano o aggiornano estensioni. Ad esempio molte estensioni necessitano dopo la loro installazione di alcune attività di configurazione che sono necessarie per il corretto funzionamento dell'estensione stessa, e che per la loro delicatezza non possono essere abilitate automaticamente come la già citata "Autenticazione a due fattori", appunto, usando il nuovo sistema di notifica vi informa che la funzionalità è disponibile ma che è necessaria da parte vostra una opportuna configurazione per essere attivata e funzionare correttamente.

Il messaggio postinstallazione

Come funziona

Il suo funzionamento è basato sul nuovo componente com_postinstall che gestisce l'interazione tra il sistema di notifica e le estensioni, mediante la definizione di 2 funzioni:

  • action (azioni da eseguire )
  • condition (quando notificare il messaggio)

e sulle informazioni che vengono memorizzate sulla nuova tabella #_postinstall_messages

Sostanzialmente si tratta di un ottimo esempio di come utilizzare il nuovo Joomla! Rapid Appilcation Development framework alias FOF (una delle tante nuove funzionalità introdotte dalla 3.2) per sviluppare rapidamente estensioni Joomla!.

Come utilizzarlo nelle vostre estensioni

L'utilizzo del sistema di notifica post-installazione per le estensioni è abbastanza semplice. Supponiamo di voler utilizzare questo sistema per notificare all'amministratore del sistema che dopo l'installazione dell'estensione è necessario effettuare alcune configurazioni, nel nostro caso, l'estensione in oggetto supponiamo sia un plugin di tipo system di nome example.

Abbiamo bisogno di aggiungere due cose rispetto ad una normale estensione:

  •  un file contenente la definizione delle funzioni (postinstall_action, postinstall_condition)
  •  l'inserimento delle nostre informazioni sulla tabella #_postinstall_messages

Per semplicità creo una nuova cartella denominata postinstall nella root del mio plugin e ci aggiungo il file actions.php che conterrà il codice delle 2 funzioni che mi appresto a definire. Lo stesso file verrà referenziato sulla tabella #_postinstall_messages nei campi action_file e condition_file

Le funzioni Action e condition

Quindi definiamo nel dettaglio le due funzioni (postinstall_action, postinstall_condition)

la funzione postinstall_condition: che gestirà la condizione di notifica del messsaggio, ad esempio nel nostro caso sarà quando il plugin è installato ma non è abilitato, infatti andiamo a verficare mediante una query sulla tabella #_extensions la presenza del nostro plugin ins stato "disabled"

 

function example_postinstall_condition()
{
	$db = JFactory::getDbo();
	$query = $db->getQuery(true)
		->select('*')
		->from($db->qn('#__extensions'))
		->where($db->qn('type') . ' = ' . $db->q('plugin'))
		->where($db->qn('enabled') . ' = ' . $db->q('1'))
		->where($db->qn('folder') . ' = ' . $db->q('system'))
		->where($db->qn('element') . ' = ' . $db->q('example'));
	$db->setQuery($query);
	$enabled_plugins = $db->loadObjectList();
	return count($enabled_plugins) == 0;
}

la funzione postinstall_action: che verrà attivata quando clicco sul pulsante visualizzato nel messaggio di notifica, e nel nostro caso attiverà il plugin e dirigerà alla pagina di configurazione del plugin stesso

function example_postinstall_action()
{
 // Enable the plugin
 $db = JFactory::getDbo();
   $query = $db->getQuery(true)
 	->select('*')
 	->from($db->qn('#__extensions'))
 	->where($db->qn('type') . ' = ' . $db->q('plugin'))
 	->where($db->qn('enabled') . ' = ' . $db->q('0'))
 	->where($db->qn('folder') . ' = ' . $db->q('system'))
 	->where($db->qn('element') . ' = ' . $db->q('example'));
 $db->setQuery($query);
 $enabled_plugins = $db->loadObjectList();
 
 $query = $db->getQuery(true)
 	->update($db->qn('#__extensions'))
 	->set($db->qn('enabled') . ' = ' . $db->q(1))
 	->where($db->qn('type') . ' = ' . $db->q('plugin'))
 	->where($db->qn('folder') . ' = ' . $db->q('system'))
 	->where($db->qn('element') . ' = ' . $db->q('example'));
 $db->setQuery($query);
 $db->execute();
  
  //Redirect the user to the plugin configuration page
 $url = 'index.php?option=com_plugins&task=plugin.edit&extension_id='
           .$enabled_plugins[0]->extension_id ;
 JFactory::getApplication()->redirect($url);
}

 

Configurazione dei messaggi

Per la corretta gestione da parte del sistema della nostra notifica di avvenuta installazione e necessaria opportuna configurazione, dobbiamo procedere con l'inserimento delle nostra notifica nell'apposita tabella #_postinstall_messages, per far questo utilizzeremo, qualora la nostra estensione non lo faccia già di suo, la possibilità di eseguire uno script durante la fase di installazione o aggiornamento della nostra estensione, in particolare dobbiamo agire in fase di installazione per configurare in particolar modo i campi:

 action e condition_method

 con i nomi delle rispettive funzioni definiti precedentemente example_install_action() e example_install_condition()

 action_file e condition_file

con il nome del file contentente la rispettiva funzione (nel nostro caso actions.php)

class plgSystemexampleInstallerScript
{
  /*
  * $parent is the class calling this method.
  * install runs after the database scripts are executed.
  * If the extension is new, the install method is run.
  * If install returns false, Joomla will abort the install and undo everything already done.
  */
 function install( $parent ) {
     $db = JFactory::getDbo();
     $query = 'INSERT INTO '. $db->quoteName('#__postinstall_messages') .
              ' ( `extension_id`, 
                  `title_key`, 
                  `description_key`, 
                  `action_key`, 
                  `language_extension`, 
                  `language_client_id`, 
                  `type`, 
                  `action_file`, 
                  `action`, 
                  `condition_file`, 
                  `condition_method`, 
                  `version_introduced`, 
                  `enabled`) VALUES '
              .'( 700,
               "PLG_SYSTEM_EXAMPLE_POSTINSTALL_TITLE", 
               "PLG_SYSTEM_EXAMPLE_POSTINSTALL_BODY", 
               "PLG_SYSTEM_EXAMPLE_POSTINSTALL_ACTION",
               "plg_system_example",
                1,
               "action", 
               "site://plugins/system/example/postinstall/actions.php",
               "example_postinstall_action", 
               "site://plugins/system/example/postinstall/actions.php", 
               "example_postinstall_condition", 
               "3.2.0", 
               1)';
     
     $db->setQuery($query);
     $db->execute();
  }
 /*
  * $parent is the class calling this method
  * uninstall runs before any other action is taken (file removal or database processing).
  */
 function uninstall( $parent ) {               
  $db = JFactory::getDbo();
  $query = 'DELETE FROM '.$db->quoteName('#__postinstall_messages'). 
           ' WHERE '. $db->quoteName('language_extension').' = '.$db->quote('plg_system_example');
  $db->setQuery($query);
  $db->execute();
 }      
}       

Avrete notato l'utilizzo di due funzioni install e unistall, rispettivamente in fase di installazione andremo ad inserire le nostre info nella tabella #_postinstall_messages, ed in fase di disinstallazione andremo ad eliminare la nostra occorrenza dalla apposita tabella.

I campi title_key,descrption_key,action_key servono per impostare il messaggio chè verrà utilizzato nella fase di notifica per informare l'utente sulla nuova estensione installata e le sue peculiarità che necessiatano la vostra attenzione.

Riferimenti

Se volete approfondire gli argomenti trattati:

 

Read 12706 times Tagged under Italian