namespace wcf\acp\form;
+use wcf\data\smiley\category\SmileyCategory;
+use wcf\data\smiley\SmileyCache;
use wcf\data\user\group\UserGroup;
use wcf\data\user\User;
use wcf\data\user\UserAction;
use wcf\form\AbstractForm;
+use wcf\system\attachment\AttachmentHandler;
use wcf\system\bbcode\BBCodeHandler;
use wcf\system\database\util\PreparedStatementConditionBuilder;
use wcf\system\exception\UserInputException;
use wcf\system\html\input\HtmlInputProcessor;
use wcf\system\language\LanguageFactory;
+use wcf\system\message\embedded\object\MessageEmbeddedObjectManager;
use wcf\system\request\LinkHandler;
use wcf\system\WCF;
use wcf\util\ArrayUtil;
* @var array
*/
public $optionTree = [];
+ public ?AttachmentHandler $attachmentHandler;
+ public int $attachmentObjectID = 0;
+ public string $attachmentObjectType = 'com.woltlab.wcf.user.signature';
+ public array $defaultSmilies = [];
+ /**
+ * list of smiley categories
+ * @var SmileyCategory[]
+ */
+ public array $smileyCategories = [];
+ public ?string $tmpHash = '';
+
+ #[\Override]
+ public function readParameters()
+ {
+ parent::readParameters();
+
+ if (isset($_REQUEST['tmpHash'])) {
+ $this->tmpHash = $_REQUEST['tmpHash'];
+ }
+ if (empty($this->tmpHash)) {
+ /** @deprecated 5.5 see QuickReplyManager::setTmpHash() */
+ $this->tmpHash = WCF::getSession()->getVar('__wcfAttachmentTmpHash');
+ if ($this->tmpHash === null) {
+ $this->tmpHash = StringUtil::getRandomID();
+ } else {
+ WCF::getSession()->unregister('__wcfAttachmentTmpHash');
+ }
+ }
+ }
/**
* @inheritDoc
'groups' => $this->groupIDs,
'languageIDs' => $this->visibleLanguages,
'options' => $saveOptions,
+ 'signatureAttachmentHandler' => $this->attachmentHandler,
];
if (WCF::getSession()->getPermission('admin.user.canDisableSignature')) {
$this->objectAction = new UserAction([], 'create', $data);
$returnValues = $this->objectAction->executeAction();
+
+ $this->htmlInputProcessor->setObjectID($returnValues['returnValues']->userID);
+ MessageEmbeddedObjectManager::getInstance()->registerObjects($this->htmlInputProcessor);
+ $this->attachmentHandler->updateObjectID($returnValues['returnValues']->userID);
+
$this->saved();
// show empty add form
$this->languageID = $this->getDefaultFormLanguageID();
/** @noinspection PhpUndefinedMethodInspection */
$this->optionHandler->resetOptionValues();
+ // Reload attachment handler to reset the uploaded attachments.
+ $this->attachmentHandler = new AttachmentHandler(
+ $this->attachmentObjectType,
+ $this->attachmentObjectID,
+ $this->tmpHash
+ );
}
/**
*/
public function readData()
{
+ if ($this->attachmentObjectType) {
+ $this->attachmentHandler = new AttachmentHandler(
+ $this->attachmentObjectType,
+ $this->attachmentObjectID,
+ $this->tmpHash,
+ 0
+ );
+ }
+
parent::readData();
+ // get default smilies
+ if (MODULE_SMILEY) {
+ $this->smileyCategories = SmileyCache::getInstance()->getVisibleCategories();
+
+ $firstCategory = \reset($this->smileyCategories);
+ if ($firstCategory) {
+ $this->defaultSmilies = SmileyCache::getInstance()
+ ->getCategorySmilies($firstCategory->categoryID ?: null);
+ }
+ }
$this->readOptionTree();
}
'disableSignature' => $this->disableSignature,
'disableSignatureReason' => $this->disableSignatureReason,
'disableSignatureExpires' => $this->disableSignatureExpires,
+ 'attachmentHandler' => $this->attachmentHandler,
+ 'attachmentObjectID' => $this->attachmentObjectID,
+ 'attachmentObjectType' => $this->attachmentObjectType,
+ 'attachmentParentObjectID' => 0,
+ 'defaultSmilies' => $this->defaultSmilies,
+ 'smileyCategories' => $this->smileyCategories,
+ 'tmpHash' => $this->tmpHash,
]);
}
use wcf\system\exception\IllegalLinkException;
use wcf\system\exception\PermissionDeniedException;
use wcf\system\exception\UserInputException;
+use wcf\system\message\embedded\object\MessageEmbeddedObjectManager;
use wcf\system\moderation\queue\ModerationQueueManager;
use wcf\system\style\StyleHandler;
use wcf\system\user\command\SetColorScheme;
use wcf\system\user\multifactor\Setup;
+use wcf\system\user\signature\SignatureCache;
use wcf\system\WCF;
use wcf\util\StringUtil;
if (!UserGroup::isAccessibleGroup($this->user->getGroupIDs())) {
throw new PermissionDeniedException();
}
+ $this->attachmentObjectID = $this->user->userID;
parent::readParameters();
}
public function save()
{
AbstractForm::save();
+ $this->htmlInputProcessor->setObjectID($this->userID);
+ MessageEmbeddedObjectManager::getInstance()->registerObjects($this->htmlInputProcessor);
// handle avatar
if ($this->avatarType != 'custom') {
'languageID' => $this->languageID,
'userTitle' => $this->userTitle,
'signature' => $this->htmlInputProcessor->getHtml(),
+ 'signatureEnableHtml' => 1,
'styleID' => $this->styleID,
]),
'groups' => $this->groupIDs,
'languageIDs' => $this->visibleLanguages,
'options' => $saveOptions,
+ 'signatureAttachmentHandler' => $this->attachmentHandler,
];
// handle changed username
if (\mb_strtolower($this->username) != \mb_strtolower($this->user->username)) {
// reload user
$this->user = new UserEditor(new User($this->userID));
+ SignatureCache::getInstance()->getSignature($this->user->getDecoratedObject());
// show success message
WCF::getTPL()->assign('success', true);
namespace wcf\system\attachment;
+use wcf\data\user\group\UserGroup;
use wcf\data\user\UserProfile;
use wcf\system\cache\runtime\UserProfileRuntimeCache;
use wcf\system\WCF;
*/
public function canDownload($objectID)
{
+ if (!MODULE_USER_SIGNATURE) {
+ return false;
+ }
if ($objectID) {
$userProfile = UserProfileRuntimeCache::getInstance()->getObject($objectID);
- if (!MODULE_USER_SIGNATURE) {
- return false;
+ if ($this->canEditUser($userProfile)) {
+ return true;
}
if ($userProfile->disableSignature) {
return false;
return true;
}
- return false;
+ return $this->canAddUser();
}
/**
*/
public function canUpload($objectID, $parentObjectID = 0)
{
- if (!$objectID || $objectID != WCF::getUser()->userID) {
+ if (!MODULE_USER_SIGNATURE) {
return false;
}
- if (!MODULE_USER_SIGNATURE) {
+ if (!$objectID) {
+ return $this->canAddUser();
+ }
+ $userProfile = UserProfileRuntimeCache::getInstance()->getObject($objectID);
+ if ($this->canEditUser($userProfile)) {
+ return true;
+ }
+
+ if ($objectID != WCF::getUser()->userID) {
return false;
}
- $userProfile = UserProfileRuntimeCache::getInstance()->getObject($objectID);
if ($userProfile->disableSignature) {
return false;
}
}
}
}
+
+ private function canAddUser(): bool
+ {
+ return WCF::getSession()->getPermission('admin.user.canAddUser');
+ }
+
+ private function canEditUser(UserProfile $userProfile): bool
+ {
+ return WCF::getSession()->getPermission('admin.user.canEditUser')
+ && UserGroup::isAccessibleGroup($userProfile->getGroupIDs());
+ }
}