/**
  * Set contact picture from $source file
  *
  * @param string $source Source file
  * @param integer $max_width Max picture widht
  * @param integer $max_height Max picture height
  * @param boolean $save Save user object when done
  * @return string
  */
 function setPicture($source, $fileType, $max_width = 50, $max_height = 50, $save = true)
 {
     if (!is_readable($source)) {
         return false;
     }
     do {
         $temp_file = CACHE_DIR . '/' . sha1(uniqid(rand(), true));
     } while (is_file($temp_file));
     Env::useLibrary('simplegd');
     $image = new SimpleGdImage($source);
     if ($image->getImageType() != IMAGETYPE_PNG) {
         $image->convertType(IMAGETYPE_PNG);
         $image->saveAs($temp_file, IMAGETYPE_PNG);
         $public_fileId = FileRepository::addFile($temp_file, array('type' => 'image/png', 'public' => true));
     } else {
         $public_fileId = FileRepository::addFile($source, array('type' => 'image/png', 'public' => true));
     }
     $this->generateAllSizePictures($public_fileId, $save);
     $result = true;
     // Cleanup
     if (!$result && $public_fileId) {
         FileRepository::deleteFile($public_fileId);
     }
     @unlink($temp_file);
     return $public_fileId;
 }