LDAP e profilo utenti
ciao a tutti, uso D7 con il modulo LIGHTWEIGHT DIRECTORY ACCESS PROTOCOL (ldap) con cui mi loggo alla rete aziendale e mi riconosce.
fin qua tutto ok anche se ho dovuto bestemmiare per riuscire a farlo funzionare. credo di avere fatto tutte le configurazioni giuste, ma non riesco proprio a far vedere nella scheda del profilo utente i dati ldap mi dovrebbe passare. Con DS mi sono anche creato un campo dinamico passandogli un token tipo [givenName] ma non mi visualizza nulla! Vi prego potete darmi qualche indizio? grazie 1000
dai Gianlucaaaaaaaaaaa!
Risposte
Prova a fare una cosa del
Prova a fare una cosa del genere: sul tuo tema crea un file (se non esiste già, in questo caso lo modifichi) user-profile.tpl.php e inserisci qualche stampa di variabile per debug del tipo
<?php
print '<pre>' . print_r(get_defined_vars(), true) . '</pre>';
?>
questo ti permetterà quanto meno di vedere se nel template del profilo o comunque negli oggetti e variabili definite in questo punto dell'esecuzione c'è qualcosa riguardo le informazioni che ti servono.
Potrebbe esserti utile anche installare il progetto Devel (drupal.org/project/devel) per ottenere maggiori informazioni sugli oggetti a runtime.
la variabile passa... o
la variabile passa... o almeno credo, dato che la matricola che è il [cn] che chiedo all'ldap mi torna in ietro in altri campi... il problema è che nel campo user picture me lo trasforma in html, anzichè interpretarlo in php ed è questo ciò che vorrei fare
Prova ad utilizzare questa
Prova ad utilizzare questa funzione template_preprocess_user_picture (http://api.drupal.org/api/drupal/modules!user!user.module/function/template_preprocess_user_picture/7) e ad aggiustarne l'output facendone l'override nel file template.php (nometema_preprocess_user_picture).
ciao grazie per la risposta
ciao grazie per la risposta ma non capisco quello che devo fare anche se sei stato chiarissimo.
non capisco perchè non ho nessuna conoscenza di php :( ergo non ho idea di cosa significa
"prova a utilizzare questa funzione template_preprocess_user_picture - See more at: http://drupal.it/supporto/ldap-e-profilo-utenti#comment-form" e "e ad aggiustarne l'output facendone l'override nel file template.php (nometema_preprocess_user_picture). - See more at: http://drupal.it/supporto/ldap-e-profilo-utenti#comment-form"
quello che pensavo potesse bastare ma dimmi se sbaglio è:
ho visto che c'è una modules/user/user-picture.tpl.php che dentro ha questa stringa <?php print $user_picture; ?> al che mi sono detto: questa $user_picture; avrà un indirizzo che posso cambiare per far si che anzichè lo uid mi prenda il name dalla tanella users? ...ma dove?
ehm... dopo che ti ho
ehm...
dopo che ti ho risposto e giusto per fare la somma, credo di aver capito cosa mi hai detto di fare, cioè copiare nel file template.php la funzione dall'indirizzo web e di modificare la funzione, ma sono andato nella cartella del tema acquia_marina e il file template.php non c'è, cosa devo fare? una copia di aquia_matina e dentro metterci il template.php dopo aver abilitato il tema? scusa se sono duro, ma sto cercando di imparare, e per me è tutto arabo sto drupal, ma mi piace ugualmente ;)
Esatto, crei un file
Esatto, crei un file template.php e aggiungi la funzione
function acquia_marina_preprocess_user_picture(&$vars){
...
$vars['user_picture'] = ... ;
...
}
naturalmente il codice va personalizzato in base a quello che ti serve e alla tua installazione.
mmm ok. ora mi trovo con
mmm ok. ora mi trovo con questo codice che però da quanto riesco a intuire mi da il link alla pagina del profilo utente alla fine del codiche che ho ricopiato:
if (!empty($account->uid) && user_access('access user profiles')) {
$attributes = array(
'attributes' => array('title' => t('View user profile.')),
'html' => TRUE,
);
$variables['user_picture'] = l($variables['user_picture'], "user/$account->uid", $attributes);
}
}
e questo all'inizio:
if (!empty($account->picture->uri)) {
$filepath = $account->picture->uri;
}
}
questo uri è quello che devo cambiare con name al fine di far vedere la foto correttamente?
tipo io so che name mi viene un numero (la matricola caricata da ldap)
Prova a postare l'output che
Prova a postare l'output che ti viene a schermo da questa funzione (mettila prima della chiusura della funzione che hai aggiunto) cioè
function acquia_marina_preprocess_user_picture(&$vars){
...
print '<pre>' . print_r($vars, TRUE) . '</pre>';
}
formatta il risultato utilizzando il formato "Formattato".
grazie per la pazienza e
grazie per la pazienza e disponibilità blackice78...
ho copiato print '<pre>' . print_r($vars, TRUE) . '</pre>'; come mi hai detto ma non viene scritto nulla... da nessuna parte ?| ho anche spostato la riga di codice sopra, sotto, da tutte le parti nella funzione per provare... ma il risultato non cambia, ho anche svuotato la cache... se può essere d'aiuto ho il modulo devel attivato e sulla picture nella tab load mi dice:
picture (NULL)
$...->picture
ti serviva questo? ho anche il tab tokens e render :)
Prova a postare l'intera
Prova a postare l'intera nuova funzione, così come l'hai scritta.
<?php /** * Add picture con
<?php
/**
* Add picture con name anzichè id.
*/
function aquia_marina_preprocess_user_picture(&$variables) {
$variables['user_picture'] = '';
if (variable_get('user_pictures', 0)) {
$account = $variables['account'];
if (!empty($account->picture)) {
// @TODO: Ideally this function would only be passed file objects, but
// since there's a lot of legacy code that JOINs the {users} table to
// {node} or {comments} and passes the results into this function if we
// a numeric value in the picture field we'll assume it's a file id
// and load it for them. Once we've got user_load_multiple() and
// comment_load_multiple() functions the user module will be able to load
// the picture files in mass during the object's load process.
if (is_numeric($account->picture)) {
$account->picture = file_load($account->picture);
}
if (!empty($account->picture->uri)) {
$filepath = $account->picture->uri;
}
}
elseif (variable_get('user_picture_default', '')) {
$filepath = variable_get('user_picture_default', '');
}
if (isset($filepath)) {
$alt = t("@user's picture", array('@user' => format_username($account)));
// If the image does not have a valid Drupal scheme (for eg. HTTP),
// don't load image styles.
if (module_exists('image') && file_valid_uri($filepath) && $style = variable_get('user_picture_style', '')) {
$variables['user_picture'] = theme('image_style', array('style_name' => $style, 'path' => $filepath, 'alt' => $alt, 'title' => $alt));
}
else {
$variables['user_picture'] = theme('image', array('path' => $filepath, 'alt' => $alt, 'title' => $alt));
}
if (!empty($account->uid) && user_access('access user profiles')) {
$attributes = array(
'attributes' => array('title' => t('View user profile.')),
'html' => TRUE,
);
$variables['user_picture'] = l($variables['user_picture'], "user/$account->uid", $attributes);
}
}
}
print '<pre>' . print_r($vars, TRUE) . '</pre>';
}
Beh certo che non mostra
Beh certo che non mostra nulla la signature della funzione utilizza $variables e non $vars.
Sostituisci l'ultima riga con
print '<pre>' . print_r($variables['user_picture'], TRUE) . '</pre>';
e posta l'output che uscirà fuori nella pagina di un profilo.