/** * 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; }