/**
  * Creates a new avatar.
  * 
  * @param	string		$tmpName
  * @param	string		$name
  * @param	string		$field
  * @return	integer		avatar id
  */
 public static function create($tmpName, $name, $field, $userID = 0, $groupID = 0, $neededPoints = 0, $avatarCategoryID = 0)
 {
     // check avatar content
     if (!ImageUtil::checkImageContent($tmpName)) {
         throw new UserInputException($field, 'badAvatar');
     }
     // get file extension
     /*$fileExtension = '';
     		if (!empty($name) && StringUtil::indexOf($name, '.') !== false) {
     			$fileExtension = StringUtil::toLowerCase(StringUtil::substring($name, StringUtil::lastIndexOf($name, '.') + 1));
     		}*/
     // get image data
     if (($imageData = @getImageSize($tmpName)) === false) {
         throw new UserInputException($field, 'badAvatar');
     }
     // get file extension by mime
     $fileExtension = ImageUtil::getExtensionByMimeType($imageData['mime']);
     // check file extension
     if (!in_array($fileExtension, self::getAllowedFileExtensions())) {
         throw new UserInputException($field, 'notAllowedExtension');
     }
     // get avatar size
     $width = $imageData[0];
     $height = $imageData[1];
     if (!$width || !$height) {
         throw new UserInputException($field, 'badAvatar');
     }
     $size = @filesize($tmpName);
     // generate thumbnail if necessary
     if ($width > WCF::getUser()->getPermission('user.profile.avatar.maxWidth') || $height > WCF::getUser()->getPermission('user.profile.avatar.maxHeight')) {
         $thumbnail = new Thumbnail($tmpName, WCF::getUser()->getPermission('user.profile.avatar.maxWidth'), WCF::getUser()->getPermission('user.profile.avatar.maxHeight'));
         $thumbnailSrc = $thumbnail->makeThumbnail();
         if ($thumbnailSrc) {
             $file = new File($tmpName);
             $file->write($thumbnailSrc);
             $file->close();
             // refresh avatar size
             list($width, $height, ) = @getImageSize($tmpName);
             clearstatcache();
             $size = @filesize($tmpName);
             // get new file extension
             $fileExtension = ImageUtil::getExtensionByMimeType($thumbnail->getMimeType());
         }
         unset($thumbnail, $thumbnailSrc);
     }
     // check size again
     if ($width > WCF::getUser()->getPermission('user.profile.avatar.maxWidth') || $height > WCF::getUser()->getPermission('user.profile.avatar.maxHeight') || $size > WCF::getUser()->getPermission('user.profile.avatar.maxSize')) {
         throw new UserInputException($field, 'tooLarge');
     }
     // create avatar
     $avatarID = self::insert(basename($name), array('avatarExtension' => $fileExtension, 'width' => $width, 'height' => $height, 'userID' => $userID, 'groupID' => $groupID, 'neededPoints' => $neededPoints, 'avatarCategoryID' => $avatarCategoryID));
     // copy avatar to avatar folder
     if (!@copy($tmpName, WCF_DIR . 'images/avatars/avatar-' . $avatarID . '.' . $fileExtension)) {
         // copy failed
         // delete avatar
         @unlink($tmpName);
         $sql = "DELETE FROM\twcf" . WCF_N . "_avatar\n\t\t\t\tWHERE\t\tavatarID = " . $avatarID;
         WCF::getDB()->sendQuery($sql);
         throw new UserInputException($field, 'copyFailed');
     }
     // set permissions
     @chmod(WCF_DIR . 'images/avatars/avatar-' . $avatarID . '.' . $fileExtension, 0666);
     return $avatarID;
 }