mirror of
https://github.com/rr-/szurubooru.git
synced 2025-07-17 08:26:24 +00:00
94 lines
2.2 KiB
PHP
94 lines
2.2 KiB
PHP
<?php
|
|
class AddPostJob extends AbstractJob
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->addSubJob(new EditPostSafetyJob());
|
|
$this->addSubJob(new EditPostTagsJob());
|
|
$this->addSubJob(new EditPostSourceJob());
|
|
$this->addSubJob(new EditPostRelationsJob());
|
|
$this->addSubJob(new EditPostContentJob());
|
|
$this->addSubJob(new EditPostThumbnailJob());
|
|
}
|
|
|
|
public function execute()
|
|
{
|
|
$post = PostModel::spawn();
|
|
|
|
$anonymous = false;
|
|
if ($this->hasArgument(JobArgs::ARG_ANONYMOUS))
|
|
$anonymous = TextHelper::toBoolean($this->getArgument(JobArgs::ARG_ANONYMOUS));
|
|
if ($anonymous and !Core::getConfig()->uploads->allowAnonymousUploads)
|
|
throw new SimpleException('Anonymous uploads are not allowed');
|
|
|
|
if (Auth::isLoggedIn() and !$anonymous)
|
|
$post->setUploader(Auth::getCurrentUser());
|
|
|
|
PostModel::forgeId($post);
|
|
|
|
$arguments = $this->getArguments();
|
|
$arguments[JobArgs::ARG_POST_ENTITY] = $post;
|
|
|
|
$this->runSubJobs($this->getSubJobs(), $arguments);
|
|
PostModel::save($post);
|
|
|
|
Logger::log('{user} added {post} (tags: {tags}, safety: {safety}, source: {source})', [
|
|
'user' => ($anonymous and !Core::getConfig()->uploads->logAnonymousUploadsNicknames)
|
|
? TextHelper::reprUser(UserModel::getAnonymousName())
|
|
: TextHelper::reprUser(Auth::getCurrentUser()),
|
|
'post' => TextHelper::reprPost($post),
|
|
'tags' => TextHelper::reprTags($post->getTags()),
|
|
'safety' => $post->getSafety()->toString(),
|
|
'source' => $post->getSource()]);
|
|
|
|
Logger::flush();
|
|
|
|
return $post;
|
|
}
|
|
|
|
public function getRequiredArguments()
|
|
{
|
|
return JobArgs::Optional(JobArgs::ARG_ANONYMOUS);
|
|
}
|
|
|
|
public function getRequiredMainPrivilege()
|
|
{
|
|
return Privilege::AddPost;
|
|
}
|
|
|
|
public function getRequiredSubPrivileges()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public function isAuthenticationRequired()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public function isConfirmedEmailRequired()
|
|
{
|
|
return Core::getConfig()->uploads->needEmailForUploading;
|
|
}
|
|
|
|
private function runSubJobs($subJobs, $arguments)
|
|
{
|
|
foreach ($subJobs as $subJob)
|
|
{
|
|
Logger::bufferChanges();
|
|
$subJob->setContext(self::CONTEXT_BATCH_ADD);
|
|
try
|
|
{
|
|
Api::run($subJob, $arguments);
|
|
}
|
|
catch (ApiJobUnsatisfiedException $e)
|
|
{
|
|
}
|
|
finally
|
|
{
|
|
Logger::discardBuffer();
|
|
}
|
|
}
|
|
}
|
|
}
|