samedi 3 novembre 2012

Drupal : Ajouter des champs issus d'un profile dans une vue

Afin de pouvoir utiliser dans une vue les champs personnalisés créés via le module Profile2, il faut :
- Ajouter une relation : sélectionner "Utilisateur : Profil"

jeudi 18 octobre 2012

PHP get dynamic stdClass property

<?php
$book = new stdClass; 
$book->title = "Test title";
$book->author = "Laurent Guigo";
?>

Résultat :

object(stdClass)#147 (2) {
  ["title"]=>
  string(10) "Test title"
  ["author"]=>
  string(13) "Laurent Guigo"
}

<?php
$property = "title";
echo $book->{$property};die;
?>

Résultat :
Test title

mercredi 17 octobre 2012

Drupal : get profile2 custom field value

<?php
$myUser = profile2_load_by_user($uid,"your_profile_slug_id");
print $myUser->field_my_custom_field[LANGUAGE_NONE][0]["value"];
?>

vendredi 22 juin 2012

Drupal : module Webform, modifier l'action d'un formulaire

Dans votre fichier /sites/all/themes/montheme/template.php :

<?php
function montheme_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id=="webform_client_form_204") {
    $form['#action']=url("contact"); // url : /fr/contact
  }
}
?>

vendredi 27 avril 2012

Rediriger un sous-domaine vers le domaine principale

Exemple :
le domaine www.monsite.fr est paramétré chez un registrar pour pointer vers mon serveur dédié chez un hébergeur. Pour faire pointer le domaine vers l'emplacement des fichiers de votre site Web, vous avez juste à créer un "virtuel host" dans /etc/apache2/sites-available/

créer le fichier www.monsite.fr dans /etc/apache2/sites-available/ ou copier/coller et renommer le virtual host "default" normalement déjà présent. Editer /etc/apache2/sites-available/www.monsite.fr en vous basant sur l'exemple ci-dessous

<VirtualHost *:80>
  ServerName www.monsite.fr
  DocumentRoot /var/www/www.monsite.fr/prod
  ServerAlias monsite.fr
  # DirectoryIndex attente.html

  <Directory /var/www/www.monsite.fr/prod>
    AllowOverride All
    Order deny,allow
    Allow from all
  </Directory>
</VirtualHost>

pour activer le virtual host sur un serveur linux, vous devez saisir la commande : a2ensite
puis recharger la configuration apache : /etc/init.d/apache2 reload

Une bonne pratique est de rediriger le domaine "vide" c'est à dire sans l'extension www vers www.monsite.fr : d'où la ligne ServerAlias monsite.fr

mardi 14 février 2012

PHP upload de vidéos vers Youtube depuis votre application ou site Web


Introduction
Créer un gestionnaire de vidéos requiert de nombreuses compétences surtout sur la partie de traitement vidéo (encodage FLV, ...). Pour ne pas réinventer la roue, je me suis d'abord tourné vers une veille des outils existants ce qui m'a amené rapidement vers la référence grand public par excellence : Youtube by Google.
Les avantages : Youtube héberge et traite les vidéos sur ses infrastructures et vous donne les clés à travers l'API "Google Data PHP Client Library" pour réaliser votre propre gestionnaire de vidéos ; Vous pouvez développez votre propre Youtube avec Youtube !

L'objectif de cet article est simple : réaliser l'upload d'une vidéo vers Youtube via un simple formulaire en PHP. Ce tutoriel peut être réalisé en local.
Il est bien sûr nécessaire d'avoir un compte Youtube.

Google Data PHP Client Library
Documentation : http://code.google.com/intl/fr-FR/apis/gdata/articles/php_client_lib.html

L'API est complètement intégrée à Zend Framework via son module "Zend Gdata" utilisable en standalone ce qui en facilite largement la manipulation.
Télécharger la dernière release de Zend Gdata : http://framework.zend.com/download/gdata/ et l'extraire dans le dossier de votre choix. Ci-dessous mon arborescence de test avec un répertoire "youtube-upload" composé de l'API et d'un fichier youtube.php pour notre formulaire.
Pour éviter tout problème de chemin et avoir accès à l'API facilement, il est nécessaire de l'ajouter à l' "include_path" de votre php.ini
Pour vérifier votre configuration, exécuter le fichier "InstallationChecker.php" (exemple : http://localhost/tests/youtube-upload/ZendGdata-1.11.11/demos/Zend/Gdata/InstallationChecker.php)

Comme nous allons accéder à l'API en mode "écriture" (via upload), vous devez être identifié auprès de Google. Pour cela il faut d'abord obtenir une clé appelée ""developer key" (http://code.google.com/apis/youtube/dashboard/) en créant un nouveau produit (exemple : "Youtube test").

Car un code commenté vaut mieux que tout, ci-dessous le code de mon script de test "youtube.php" :
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Youtube upload</title>
</head>
<body>
<?php
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

/**
 * Obtenir le droit d'upload vers un compte YouTube
 * L'objet créer sera utilisé pour l'instanciation d'un nouveau objet Youtube 
 */
$authenticationURL = 'https://www.google.com/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
    $username = 'ggggggggggg@gmail.com', // Google/Youtube login
    $password = 'votre-mot-de-passe', // Google/Youtube password
    $service = 'youtube',
    $client = null,
    $source = null,
    $loginToken = null,
    $loginCaptcha = null,
    $authenticationURL
);

/**
 * Créer un objet Youtube (Zend_Gdata_YouTube)
 * Créer un objet vidéo (classe Zend_Gdata_YouTube_VideoEntry)
 * Récupérer un "Token" qui est une clé d'autorisation temporaire retournée par Youtube (clé + url)
 * Construire le formulaire d'upload avec les informations du Token
 */
$developerKey = "votre-developer-key-sqdfqsdUIHIUGHlsqdomsqjomfjqsdfsq"; // votre "developer key"
$yt = new Zend_Gdata_YouTube($httpClient,null,null,$developerKey);

$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$myVideoEntry->setVideoTitle('Vidéo envoyée le '.date('d/m/Y H:i:s'));
$myVideoEntry->setVideoDescription('Vidéo du site ...');
$myVideoEntry->setVideoCategory('Autos'); // catégorie valide voir doc Youtube 
$myVideoEntry->SetVideoTags('test, php upload'); // mots clés

$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$tokenValue = $tokenArray['token'];
$postUrl = $tokenArray['url'];

// URL où rediriger après traitement de la vidéo par Youtube (= réponse Youtube) :
$nextUrl = 'http://localhost/tests/youtube-upload/youtube.php'; 
?>
<form action="<?php echo $postUrl; ?>?nexturl=<?php echo $nextUrl; ?>" method="post" enctype="multipart/form-data"> 
    <input name="file" type="file"/> 
    <input name="token" type="hidden" value="<?php echo $tokenValue; ?>"/>
    <input value="Envoyer la vidéo" type="submit" />
</form>
</body>
</html>

Affichage du formulaire :

La page de retour définie après envoie de la vidéo :
Le résultat en image (gestionnaire de vidéos YouTube de votre compte http://www.youtube.com/my_videos?feature=mhee) :







PHP classe DateTime formater une date

Cette classe native est pratique lorsque l'on souhaite formater une date existante ou pas.

Exemple, modifier le format d'affichage d'une date existante :

$date = "2012-02-10";
$test = new DateTime($date);
echo $test->format('r'); // "r" est le format de date universel sur Internet (RFC 2822 - Internet Message Format http://www.faqs.org/rfcs/rfc2822.html)

Résultat :
Fri, 10 Feb 2012 00:00:00 +0100