Files
szurubooru/src/Api/Jobs/PostJobs/AddPostJob.php
2014-08-09 20:35:31 +02:00

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();
}
}
}
}