PHP

[PHP] calcul de l'age à partir de la date de naissance

tout est dans le titre :)

getAgeFromBirthday($birthday) {
      list($annee, $mois, $jour) = split('[-.]', $birthday);
      $today['mois'] = date('n');
      $today['jour'] = date('j');
      $today['annee'] = date('Y');
      $annees = $today['annee'] - $annee;
      if ($mois >= $today['mois']) {
        if ($mois == $today['mois']) {
          if ($jour > $today['jour']) $annees--;
        } else {
          $annees--;
        }
      }
      return $annees;
    }

Tags:

[Symfony] définir un préfix pour les tables générées par doctrine

voici comment définir un préfix pour les tables sql générées par doctrine :

il faut aller dans config/ProjectConfiguration.class.php et ajouter la fonction suivante :

  public function configureDoctrine(Doctrine_Manager $manager)
  {
    $manager->setAttribute(Doctrine_Core::ATTR_TBLNAME_FORMAT, 'mon_prefix_%s');
  }

ainsi toutes les tables auront pour préfix le mot "mon_prefix"

PS. ceci nous permet de manipuler des noms de tables/objets sans le prefix, voici un début de schema.yml

Contact:
  tableName: contacts
  actAs: [Timestampable]

  columns:
    email:      { type: string(100)}
    name:       { type: string(255) }

dans le code on fera des Doctrine::getTable("Contact") ou des $c = new Contact() alors que notre table s'appelle "mon_prefix_contacts"

[PHP] redimensionner une image

voici une fonction pour redimensionner une image, si l'image est plus petite que la taille demandée, on ne fait rien :

function _resizeImage( $tmpname, $w, $h, $save_dir, $save_name)
  {
    $save_dir      .= (substr($save_dir,-1) != "/") ? "/" : "";
    $img_src_chemin = $tmpname;
    $img_dst_chemin = $save_dir.$save_name;
    $extension = strtolower(substr($img_src_chemin, -3));
    
    switch ( $extension ) {
      case "jpg":
      case "peg": //pour le cas où l'extension est "jpeg"
        $img_src_resource = imagecreatefromjpeg( $img_src_chemin );
        break;

      case "gif":
        $img_src_resource = imagecreatefromgif( $img_src_chemin );
        break;

      case "png":
        $img_src_resource = imagecreatefrompng( $img_src_chemin );
        break;

      default:
        $img_src_resource = imagecreatefromjpeg( $img_src_chemin );
    }

    $img_src_width  = imagesx( $img_src_resource );
    $img_src_height = imagesy( $img_src_resource );

    //preserver les dimensions
    $rapport = $img_src_width / $img_src_height;
    if($rapport > 1) {
      $h = intval($h / $rapport);
    } else {
      $w = intval($w * $rapport);
    }

    //si image plus petite que ce qu'on veut (si on veut agrandir une image, il faudra enlever cette partie)
    if($img_src_width <= $w && $img_src_height <= $h) {
      rename($img_src_chemin, $img_dst_chemin);
      return;
    }

    $img_dst_resource = imagecreatetruecolor($w, $h);
    $white = imagecolorallocate($img_dst_resource, 255, 255, 255); //ici on veut un fond blanc (noir par défaut)
    imagefilledrectangle($img_dst_resource, 0, 0, $w, $h, $white);

    imagecopyresampled($img_dst_resource, $img_src_resource, 0, 0, 0, 0, $w, $h, $img_src_width, $img_src_height);

    switch ( $extension ) {
      case "jpg":
      case "peg":
        imagejpeg($img_dst_resource, $img_dst_chemin);
        break;

      case "gif":
        imagegif($img_dst_resource, $img_dst_chemin);
        break;

      case "png":
        imagepng($img_dst_resource, $img_dst_chemin);
        break;

      default:
        imagejpeg($img_dst_resource, $img_dst_chemin);
    }

    //on supprime l'image source
    unlink($img_src_chemin);
  }

exemple d'utilisation :

$this->_resizeImage(
            $_FILES['totot']['temp_name'], //de mémoire^^
           150,
           150,
           "/var/www/html/uploads/",
          "thumbnail.jpg"
);

Sorting a Multi-Dimensional Array

function subval_sort( $a, $subkey, $order='asc' ) {
    foreach( $a as $k=>$v ) {
        $b[$k] = strtolower( $v[$subkey] );
    }
    if( $order === 'desc' ) {
        arsort( $b );        
    }
    else {
        asort( $b );
    }
    foreach( $b as $key=>$val ) {
        $c[$key] = $a[$key];
    }
    return $c;
}

[Symfony / Doctrine] tester si un enregistrement existe dans une table (sans passer par un find)

une fonction très pratique qui évite de faire un find inutile et qui reste très générique, elle trouve facilement sa place dans tout projet doctrine.

function recordExists($table, $id)
  {      
    // We're passing a single ID or an array of IDs
    // Parameters construction
    $params = is_array($id) ? array_values($id) : array($id);
    //query
    $q = Doctrine::getTable($table)->createQuery('dctrn_find')
        ->where('dctrn_find.' . implode(' = ? AND dctrn_find.', (array) Doctrine::getTable($table)->getIdentifier()) . ' = ?');

    return $q->count($params) > 0;
  }

Tags:

Pages

Subscribe to RSS - PHP