Derniers snippets latest snippets

[Symfony] [Validator] Valider une valeur en fonction d'une blacklist

Pour s'assurer qu'une valeur saisie par un utilisateur dans un formulaire Symfony ne fait pas partie d'une liste de valeurs interdites, on peut utiliser le validateur suivant :

Fichier sfBlacklistValidator.class.php :

<?php
class sfBlacklistValidator extends sfValidator
{
 
  public function initialize($context, $parameters = null)
  {
    // initialize parent
    parent::initialize($context);
 
    // set defaults
    $this->getParameterHolder()->set('blacklist_error', 'Value is not an allowed one');
    $this->getParameterHolder()->set('case_sensitive', false);
    $this->getParameterHolder()->set('trim', true);
    $this->getParameterHolder()->add($parameters);
    return true;
  }
 
  public function execute(&$value, &$error)
  {
    // Forbidden names
    $blacklist = $this->getParameter('blacklist');
    $casesensitive = $this->getParameter('case_sensitive');
    $trim = $this->getParameter('trim');
 
    if ($trim)
    {
      $value = trim($value);
    }
 
    if (is_array($blacklist) && count($blacklist) > 0)
    {
      if ($casesensitive)
      {
        $match = in_array($value, $blacklist);
      }
      else
      {
        $match = false;
        foreach ($blacklist as $item)
        {
          if (is_string($item) && strtolower($item) == strtolower($value))
          {
            $match = true;
            break;
          }
        }
      }
      if ($match)
      {
        $error = $this->getParameterHolder()->get('blacklist_error');
        return false;
      }
    }
 
    return true;
  }
 
}

Dans un fichier de validation yml:

fields:
  myfield:
    sfBlacklistValidator:
      blacklist:       [admin, contact, info, infos, commercial, tech, support, sales, partnership, webmaster, business, owner]
      case_sensitive:  no
      trim:            yes
      blacklist_error: The username you requested is not available

Les options sont assez explicites, mais en voici tout de même le détail :

  • blacklist: tableau de valeurs prohibées au format YAML
  • case_sensitive: effectuer les comparaisons en tenant compte de la casse
  • trim: inclure les espaces en début et fin de chaînes
  • blacklist_error: Message d'erreur à afficher en cas de valeur blacklistée
by Nicolas Perriault on 2008-01-13, tagged blacklist  forms  strings  symfony  validation 

[Symfony] [Propel] Afficher la dernière requête effectuée

Pour afficher la dernière requête effectuée avec Propel :

echo Propel::getConnection()->getLastExecutedQuery();

C'est tout con, hein ?

by Nicolas Perriault on 2007-12-10, tagged propel  sql  symfony 

Gérer les libellés et tris d'un selectbox avec Propel et les helpers objets Symfony

Pour gérer un joli combobox avec des valeurs textuelles représentatives choisies pour un objet Propel et éventuellement les trier, on peut faire :

<?php echo object_select_tag($produit, 'getTypeProduitId', array (
 'related_class' => 'TypeProduit',   
 'peer_method'   => 'doSelectOrderByCode',
)) ?>

ou bien dans un generator.yml

fields:
  departement_id: 
    params: text_method=getNomCode  peer_method=doSelectOrderByCode
by Nicolas Perriault on 2007-11-21, tagged form  helper  html  propel  selectbox  symfony 

Configuration de base d'un VHost pour Apache

NameVirtualHost www.mywebsite.com:port
<VirtualHost www.mywebsite.com:port>
 
ServerAdmin admin@mywebsite.com
DocumentRoot /path_to_htdocs/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /path_to_htdocs/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error-mywebsite.log
LogLevel warn
CustomLog /var/log/apache2/access-mywebsite.log combined
</VirtualHost>

A placer dans un fichier dans /etc/apache2/sites-enable/

by Aurélien Vialet on 2007-10-09, tagged apache  conf  vhost 
(2 comments)

Corriger l'encodage d'un fichier MYSql

Pour corriger les caractères bizarres qui peuvent apparaitre à la place des accents après une remontée d'un fichier de dump, il est possible de fixer l'encodage pour la connexion en rajoutant au début du fichier la ligne :

SET CHARACTER SET <encodage>;

J'utilise notamment souvent UTF8 dans ce cas, le fichier provenant d'un dump effectué sous linux, et remontant dans une base en latin1.

by gameplayer on 2007-06-08, tagged mysql  sysadmin 

Shortest XmlHttpRequest instanciation ever

if (!XMLHttpRequest) {
  window.XMLHttpRequest = function() {
    return new ActiveXObject('Microsoft.XMLHTTP');
  }
}
by Nicolas Perriault on 2007-06-06, tagged ajax  javascrit  xmlhttprequest 

Dump de toutes les bases d'un serveur MySQL dans des fichiers multiples

Si comme moi vous avez sous la main un serveur abritant plusieurs (dizaines, voir centaines de) bases de données, le jour où une des bases de données plante et qu'on vous demande de la restaurer, je vous souhaite bien du courage si vous n'avez qu'un résultat de mysqldump --all-databases sous la main.

Afin de pallier ce problème, j'ai écris ce script bash qui vous facilitera bien la vie !

Au programme :

  • sauvegarde des dump de chaque base dans des fichiers séparés compressés en gzip, eux même situés dans un dossier nommé en fonction de la date

  • suppression automatique du dump effectué il y a 7 jours.

Le script est destiné à être exécuté par un cron, par exemple toutes les nuits.

#!/bin/bash
 
#paramètres de configuration du script
#completer ici par le nom d'un utilisateur autorisé à dumper toutes vos bases :
strMysqlUser="" 
#completer ici par le mot de passe de cet utilisateur :
strPassword="" 
# completer ici par le chemin vers le repertoire de travail où va se trouver le dump
# il est possible de préfixer le répertoire  :
# "/rep/de/travail/prefix_" donnera alors /rep/de/travail/prefix_20070505
repTravail="" 
 
 
#mémorisation de la date du jour et de la date d'il y a 7 jours
dateActuelle=$(date +%Y%m%d)
datePassee=$(date --date '7 days ago' +%Y%m%d)
 
#Suppression de la sauvegarde d'il y a 7 jours
echo "["$(date +%F\ %X)"] Suppression des dump du "$datePassee
repTravailPasse=$repTravail$datePassee
rm -R $repTravailPasse
 
# début du dump
echo "["$(date +%F\ %X)"] Dump du : "$dateActuelle
repTravailActuel=$repTravail$dateActuelle
mkdir $repTravailActuel
# récupération de la liste des bdd, "tail -n +2" est présent pour ne pas récupérer le titre "Databases" renvoyé par mysql
listDatabase=$(mysql --user=$strMysqlUser --password=$strPassword --exec="SHOW DATABASES;" |  tail -n +2)
 
#dump de chaque base dans un fichier
for lineDatabase in $listDatabase
do
    echo "["$(date +%F\ %X)"] Debut du dump de la base "$lineDatabase" vers "$repTravailActuel
    mysqldump --user="$strMysqlUser" --password="$strPassword" "$lineDatabase" | gzip > "$repTravailActuel"/"$lineDatabase".sql.gz
    echo "["$(date +%F\ %X)"] Dump compressé dans "$repTravailActuel"/"$lineDatabase".sql.gz"
done
echo "["$(date +%F\ %X)"] Fin de la sauvegarde"
exit 0
by gameplayer on 2007-04-26, tagged bash  linux  mysql  server  sysadmin 

Formatter un document XML avec DOM et PHP5

Ça peut bien aider.

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->preserveWhiteSpace = false;
$dom->load('/path/to/file.xml');
$dom->formatOutput = true;
file_put_contents('formatted.xml', $dom->saveXML());
by Nicolas Perriault on 2007-04-16, tagged dom  format  php  php5  tidy  xml 

Raccourcis pour changer de bash rapidement

Beaucoup de monde connait le ctrl+alt+FX (X allant de 1 à 6 pour les sessions de terminal, et au dessus pour les sessions graphiques)

Je viens de découvrir par hasard le alt+super pour passer rapidement à la console suivante. (super étant assigné à la touche windows sur les claviers prévus pour fonctionner avec les systèmes de Microsoft)

by gameplayer on 2007-04-10, tagged bash  keyboard  linux  shortcut 

Désactiver le bip système sous Ubuntu

Rien de plus exaspérant que ces bips disgrâcieux à chaque tabulation dans un shell. Pour remédier au problème :

$ echo "set bell-style visible" >> ~/.inputrc
by Nicolas Perriault on 2007-03-19, tagged beep  bell  bip  ubuntu