コード例 #1
0
 /**
  * @see	\wcf\system\importer\IImporter::import()
  */
 public function import($oldID, array $data, array $additionalData = array())
 {
     // check file location
     if (!@file_exists($additionalData['fileLocation'])) {
         return 0;
     }
     // get image size
     $imageData = @getimagesize($additionalData['fileLocation']);
     if ($imageData === false) {
         return 0;
     }
     $data['width'] = $imageData[0];
     $data['height'] = $imageData[1];
     // check min size
     if ($data['width'] < 48 || $data['height'] < 48) {
         return 0;
     }
     // check image type
     if ($imageData[2] != IMAGETYPE_GIF && $imageData[2] != IMAGETYPE_JPEG && $imageData[2] != IMAGETYPE_PNG) {
         return 0;
     }
     // get file hash
     if (empty($data['fileHash'])) {
         $data['fileHash'] = sha1_file($additionalData['fileLocation']);
     }
     // get user id
     $data['userID'] = ImportHandler::getInstance()->getNewID('com.woltlab.wcf.user', $data['userID']);
     if (!$data['userID']) {
         return 0;
     }
     // save avatar
     $avatar = UserAvatarEditor::create($data);
     // check avatar directory
     // and create subdirectory if necessary
     $dir = dirname($avatar->getLocation());
     if (!@file_exists($dir)) {
         FileUtil::makePath($dir, 0777);
     }
     // copy file
     try {
         if (!copy($additionalData['fileLocation'], $avatar->getLocation())) {
             throw new SystemException();
         }
         // create thumbnails
         $action = new UserAvatarAction(array($avatar), 'generateThumbnails');
         $action->executeAction();
         // update owner
         $sql = "UPDATE\twcf" . WCF_N . "_user\n\t\t\t\tSET\tavatarID = ?\n\t\t\t\tWHERE\tuserID = ?";
         $statement = WCF::getDB()->prepareStatement($sql);
         $statement->execute(array($avatar->avatarID, $data['userID']));
         return $avatar->avatarID;
     } catch (SystemException $e) {
         // copy failed; delete avatar
         $editor = new UserAvatarEditor($avatar);
         $editor->delete();
     }
     return 0;
 }
コード例 #2
0
 /**
  * @see	\wcf\data\IEditableObject::deleteAll()
  */
 public static function deleteAll(array $objectIDs = array())
 {
     $sql = "SELECT\t*\n\t\t\tFROM\twcf" . WCF_N . "_user_avatar\n\t\t\tWHERE\tavatarID IN (" . str_repeat('?,', count($objectIDs) - 1) . "?)";
     $statement = WCF::getDB()->prepareStatement($sql);
     $statement->execute($objectIDs);
     while ($avatar = $statement->fetchObject(self::$baseClass)) {
         $editor = new UserAvatarEditor($avatar);
         $editor->deleteFiles();
     }
     return parent::deleteAll($objectIDs);
 }
コード例 #3
0
 /**
  * Craps an avatar.
  */
 public function cropAvatar()
 {
     // created clipped avatar as base for new thumbnails
     $adapter = ImageHandler::getInstance()->getAdapter();
     $adapter->loadFile($this->avatar->getLocation());
     $adapter->clip($this->parameters['cropX'], $this->parameters['cropY'], UserAvatar::$maxThumbnailSize, UserAvatar::$maxThumbnailSize);
     // update thumbnails
     foreach (UserAvatar::$avatarThumbnailSizes as $size) {
         $thumbnail = $adapter->createThumbnail($size, $size);
         $adapter->writeImage($thumbnail, $this->avatar->getLocation($size));
     }
     // update database entry
     $this->avatar->update(array('cropX' => $this->parameters['cropX'], 'cropY' => $this->parameters['cropY']));
     return array('url' => $this->avatar->getURL(96));
 }
コード例 #4
0
 /**
  * Fetches an avatar from a remote server and sets it for given user.
  */
 public function fetchRemoteAvatar()
 {
     $avatarID = 0;
     $filename = '';
     // fetch avatar from URL
     try {
         $request = new HTTPRequest($this->parameters['url']);
         $request->execute();
         $reply = $request->getReply();
         $filename = FileUtil::getTemporaryFilename('avatar_');
         file_put_contents($filename, $reply['body']);
         $imageData = getimagesize($filename);
         if ($imageData === false) {
             throw new SystemException('Downloaded file is not an image');
         }
     } catch (\Exception $e) {
         if (!empty($filename)) {
             @unlink($filename);
         }
         return;
     }
     // rescale avatar if required
     try {
         $newFilename = $this->enforceDimensions($filename);
         if ($newFilename !== $filename) {
             @unlink($filename);
         }
         $filename = $newFilename;
         $imageData = getimagesize($filename);
         if ($imageData === false) {
             throw new SystemException('Rescaled file is not an image');
         }
     } catch (\Exception $e) {
         @unlink($filename);
         return;
     }
     $tmp = parse_url($this->parameters['url']);
     if (!isset($tmp['path'])) {
         @unlink($filename);
         return;
     }
     $tmp = pathinfo($tmp['path']);
     if (!isset($tmp['basename']) || !isset($tmp['extension'])) {
         @unlink($filename);
         return;
     }
     $data = array('avatarName' => $tmp['basename'], 'avatarExtension' => $tmp['extension'], 'width' => $imageData[0], 'height' => $imageData[1], 'userID' => $this->parameters['userEditor']->userID, 'fileHash' => sha1_file($filename));
     // create avatar
     $avatar = UserAvatarEditor::create($data);
     // check avatar directory
     // and create subdirectory if necessary
     $dir = dirname($avatar->getLocation());
     if (!@file_exists($dir)) {
         FileUtil::makePath($dir, 0777);
     }
     // move uploaded file
     if (@copy($filename, $avatar->getLocation())) {
         @unlink($filename);
         // create thumbnails
         $action = new UserAvatarAction(array($avatar), 'generateThumbnails');
         $action->executeAction();
         $avatarID = $avatar->avatarID;
     } else {
         @unlink($filename);
         // moving failed; delete avatar
         $editor = new UserAvatarEditor($avatar);
         $editor->delete();
     }
     // update user
     if ($avatarID) {
         $this->parameters['userEditor']->update(array('avatarID' => $avatarID, 'enableGravatar' => 0));
         // delete old avatar
         if ($this->parameters['userEditor']->avatarID) {
             $action = new UserAvatarAction(array($this->parameters['userEditor']->avatarID), 'delete');
             $action->executeAction();
         }
     }
     // reset user storage
     UserStorageHandler::getInstance()->reset(array($this->parameters['userEditor']->userID), 'avatar');
 }