Drupal

Il modulo Link Image Field con Drupal 6 e php 5.3: il widget per l'inserimento delle immagini non viene mostrato

Il modulo Link Image Field, versione 6.x-1.0-beta2 ha un bug con php 5.3 per il quale il widget per l'upload dell'immagine non viene mostrato nel form del nodo. Il bug ha a che fare con la modifica del passaggio dei parametri a funzione in php 5.3 rispetto a php 5.2.

Se si attiva la visualizzazione degli  errori php il seguente warning è mostrato che impedisce la corretta visualizzazione del widget: "warning: Parameter 1 to theme_linkimagefield_widget() expected to be a reference, value given".

Per risolvere il problema è possibile applicare la seguente patch:

diff --git a/linkimagefield_widget.inc b/linkimagefield_widget.inc
index 2e484c3..4e47f56 100644
--- a/linkimagefield_widget.inc
+++ b/linkimagefield_widget.inc
@@ -105,10 +105,13 @@ function linkimagefield_widget_process($element, $edit, &$form_state, $form) {
 /**
  * FormAPI theme function. Theme the output of an image field.
  *
- * @param arrayreference $element
+ * @param array $element
+ *   An associative array containing the properties of the element.
+ *
  * @return string
+ *   A string representing the form element.
  */
-function theme_linkimagefield_widget(&$element) {
+function theme_linkimagefield_widget($element) {
   drupal_add_css(drupal_get_path('module', 'imagefield') .'/imagefield.css');
   return theme('form_element', $element, $element['#children']);
 }

Reference:

Il modulo MimeDetect di Drupal 6 con php 5.3

Il modulo MimeDetect di drupal è un modlo di servizio che consente a drupal e agli altri moduli installati di determinare il tipo di un file caricato sul server.

Con php 5.3 questo modulo non funziona correttamente. Se si controlla il resoconto sullo stato di drupal si potrà verificare che il modulo MimeDetect riporta il seguente errore: "Fileinfo could not load the magic file. It could be corrupted. Try reinstalling the magic file distributed with the MimeDetect module. (Currently using Mime type detection PHP Fileinfo Extension)".

Infatti con la versione 5.3.11 (e 5.4.1) di php il formato del file magic (un database di regole per la determinazione del tipo di file) è stato modificato, quindi se si cerca di caricare un magic file esterno tale caricamento fallisce. Per ovviare a ciò è possibile utilizzare il magic file integrato all'interno di php stesso.

Per fare ciò è sufficiente non specificare il secondo parametro alla funzione finfo_open. Sapendo ciò si potrà applicare la seguente patch al modulo MimeDetect e il tutto dovrebbe tornare a funzionare correttamente:

 

diff --git a/mimedetect.install b/mimedetect.install
index 4228d19..3e6992d 100644
--- a/mimedetect.install
+++ b/mimedetect.install
@@ -27,7 +27,7 @@ function mimedetect_requirements($phase) {
 
   if (extension_loaded('fileinfo')) {
     $requirement['value'] = $t('PHP Fileinfo Extension');
-    if (!$finfo = @finfo_open(FILEINFO_MIME, variable_get('mimedetect_magic', drupal_get_path('module', 'mimedetect') .'/magic'))) {
+    if (!$finfo = @finfo_open(FILEINFO_MIME)) {
       $requirement['description'] = $t('Fileinfo could not load the magic file. It could be corrupted. Try reinstalling the magic file distributed with the MimeDetect module.');
       $requirement['severity'] = REQUIREMENT_ERROR;
     }
diff --git a/mimedetect.module b/mimedetect.module
index b8fc7f4..a5f64b4 100644
--- a/mimedetect.module
+++ b/mimedetect.module
@@ -57,7 +57,7 @@ function mimedetect_mime($file) {
   // Try to use the fileinfo extension first.
   if (extension_loaded('fileinfo')) {
     static $finfo = FALSE;
-    if ($finfo || $finfo = @finfo_open(FILEINFO_MIME, $magic_file)) {
+    if ($finfo || $finfo = @finfo_open(FILEINFO_MIME)) {
       $mime = finfo_file($finfo, drupal_realpath($file->uri));
     }
   }

UPDATE:

La patch sopra può essere evitata aggiungendo la seguente riga al file settings.php:

$conf['mimedetect_magic'] = '';

In questo modo si ottiene lo stesso effetto di caricaare il file magic di default distribuito con php

 

Riferimenti:

Drupal - stilizzare correttamente le newsletter in formato html con simplenews_template e mimemail

Questo metodo fa riferimento all'uso combinato dei seguenti moduli:

  • simplenews
  • simplenews_template
  • mimemail

Il modulo simplenews template fornisce la possibilità di specificare, per ciascuna newsletter creata, gli stili css da utilizzare.

Per utilizzarli a meglio è consigliabile fare in modo che mimemail non inserisca a, a sua volta, stili css all'interno della mail inviata.

La sequenza degli stili da applicare da perte di mimemail è abbastanza semplice:

  1. Se nel tema corrente è presente un file che si chiama mail.css, allora gli stili in questo file vengolo utilizzati per la mail.
  2. Altrimenti vengono presi in cosiderazione tutti i fogli di stile del tema corrente e vengono utilizzati questi per includerli nella mail: spesso i fogli di stile che sono stati pensati per un sito non si adattano bene alle newsletter quindi sarà meglio far evitare questo passaggio.

Per escludere totalmente l'inserimento di stili css da parte di mimemail nella newsletter sarà sufficiente creare un file mail.css all'interno del tema corrente: questo farà in modo che simplenews_template utilizzi solo i temi forniti da noi nelle opzioni di configurazione della newwsletter stessa.

Per ottenere il risultato voluto è necessario effettuare un ulteriore passaggio:

  1. Scaricare Emogrifier (reperibile all'indirizzo http://www.pelagodesign.com/sidecar/emogrifier/) ed estrarre l'archivio nella cartella sites/all/modules/simplenews_template in modo che il file emogrifier.php si trovi nel path sites/all/simplenews_template/emogrifier.php

Infatti simplenews cerca di rendere gli stili css inline direttamente sugli elementi html presenti nel testo della newsletter. Per fare ciò utilizza proprio Emogrifier. Se trova quest'ultimo allora effettua tutto il processo, altrimenti ignora gli stili CSS che sono nelle impostazioni della newsletter

Drupal - coesistenza dei moduli pathauto e path_redirect

Dalla pagina del modulo pathauto di Dupal si può leggere:

"The Pathauto module automatically generates path aliases for various kinds of content (nodes, categories, users) without requiring the user to manually specify the path alias. This allows you to get aliases like /category/my-node-title.html instead of /node/123. The aliases are based upon a "pattern" system which the administrator can control."

Dalla pagina del modulo path_redirect di Dupal si può leggere:

"This module allows you to specify a redirect from one path to another path or an external URL, using any HTTP redirect status."

Questi due moduli svolgono un lavoro essenziale all'interno di Drupal nei riguardi dell'ottimizzazione SEO (Search Engine Optimization). Le ultime versioni dei due moduli (pathauto 6x-1.5 e path_redirect 6.x-1.0-rc2) hanno però qualche problema a coesistere.

In particolare durante il caricamento della pagina di una modifica di un contenuto, il modulo pathauto elimina i redirect salvati dal modulo path_redirect.

Queste pagine evidenziano il problema e forniscono una soluzione rapida.

Drupal: incompatibilità tra i moduli fb e IMCE - e.root is undefined

Il modulo IMCE è un modulo per Drupal che consente un efficace trasferimento dei file e soprattutto delle immagini su di un sito Drupal ed è integrato con quasi tutti gli editor WYSIWYG disponibile per questo CMS.

Il modulo fb è un modulo per Drupal che consente di integrare le API pubbliche di Facebook all'interno del CMS.

Istallando questi due moduli insieme si ottine un malfunzionamento del modulo IMCE. In particolare i pulsanti della toolbar di IMCE non vengono più visualizzati, impedendo così, in effetti il trasferimento dei file dal disco locale al sito. Tutto questo è generato da un errore Javascript, causato dalle API di facebook. L'errore generato è: e.root is undefined.

Il problema si verifica perchè IMCE utilizza un tema personalizzato di drupal per la visualizzazione delle sue pagine che non aggiunge un particolare elemento html, cui le API Facebook fanno riferimento. Questo elemento altro non è che un div con id uguale a fb-root, cioè <div id="fb-root"></div>.

Questo è anche evidenziato in questo thread http://forum.developers.facebook.net/viewtopic.php?pid=221947 .

Come quick fix al problema abbiamo realizzato un piccolo modulo da installare ed attivare. Questo modulo utilizza la possibilità messa a disposizone da IMCE di utilizzare delle funzioni hook per inserire codice arbitrario all'interno delle pagine generate da questo modulo Queste hook devono essere registrate all'interno della variabile Drupal imce_custom_content.

Questo è proprio quello che fa questo piccolo modulo che trovate in allegato alla pagina.

Drupal, simplenews e il problema del Return-Path

I server di posta Unix/Linux, come postfix e sendmail, sovrascrivono l'header 'Return-Path' inviato dalla funzione mail() di PHP, utilizzando l'indirizzo e-mail con il nome dell'utente sotto il quale viene eseguito il web server Apache. Se, ad esempio, il web server è eseguito da un utente il cui nome è apache ed il nome del server su cui è ospitato è webserver.example.com, allora l'indirizzo email utilizzato dal mail server per il Return-Path sarà, apache@webserver.example.com, indipendentemente da ciò che può essere passato alla funzione mail().

Questa sovrascrittura fa si che le bounce mail, ossia le mail di ritorno generate da eventuali errori di consegna dei messaggi, vengano inviate all'indirizzo suddetto.

Per ovviare a tale problema, si può utilizzare un parametro aggiuntivo della funziona mail(), esattamente il quinto parametro, passando a quest'ultima l' opzione -f seguita dall'indirizzo di email al quale vogliono essere recapitate le mail di ritorno, ossia il Return-Path reale.

Questo approccio è usato da modulo Drupal Return-Path, sovrascrivendo funzione drupal_mail, e funziona correttamente.

Il modulo Mime Mail, però, non utilizza la funzione drupal_mail per l'invio di mail, ma utilizza un proprio mail engine interno che, a sua volta, utillizza direttamente la funzione mail() di PHP.

In particolare il modulo Mime Mail è utilizzato dal modulo simplenews, il gestore delle newsletter di Drupal, per l'invio dei messaggi in formato HTML.

Fortunatamente Mime Mail fornisce la possibilità di utilizzare un mail engine fornito da un altro modulo. Il modulo qui proposto si avvale di questa caratteristica di Mime Mail ed implementa un mail engine alternativo proprio per Mime Mail. Tale mail engine aggiunge l' opzione -f al quinto parametro della funzione PHP mail(), risolvendo il problema anche con Mime Mail.