This repository has been archived on 2025-02-26. You can view files and clone it, but cannot push or open issues or pull requests.
szurubooru/src/Api/Jobs/UserJobs/EditUserJob.php
Marcin Kurczewski 098f11bd09 Increased API readability
- Removed Abstract*Job hierarchy
- Introduced EntityRetrievers
- Introduced JobPager
- Moved files around
2014-05-12 18:00:24 +02:00

79 lines
1.4 KiB
PHP

<?php
class EditUserJob extends AbstractJob
{
protected $userRetriever;
protected $subJobs;
public function __construct()
{
$this->userRetriever = new UserRetriever($this);
$this->subJobs =
[
new EditUserAccessRankJob(),
new EditUserNameJob(),
new EditUserPasswordJob(),
new EditUserEmailJob(),
];
}
public function canEditAnything($user)
{
$this->privileges = [];
foreach ($this->subJobs as $subJob)
{
try
{
$subJob->user = $user;
Api::checkPrivileges($subJob);
return true;
}
catch (AccessException $e)
{
}
}
return false;
}
public function execute()
{
$user = $this->userRetriever->retrieve();
Logger::bufferChanges();
foreach ($this->subJobs as $subJob)
{
$subJob->setContext($this->getContext() == self::CONTEXT_BATCH_ADD
? self::CONTEXT_BATCH_ADD
: self::CONTEXT_BATCH_EDIT);
$args = $this->getArguments();
$args[JobArgs::ARG_USER_ENTITY] = $user;
try
{
Api::run($subJob, $args);
}
catch (ApiJobUnsatisfiedException $e)
{
}
}
if ($this->getContext() == self::CONTEXT_NORMAL)
{
UserModel::save($user);
EditUserEmailJob::observeSave($user);
Logger::flush();
}
return $user;
}
public function getRequiredArguments()
{
return $this->userRetriever->getRequiredArguments();
}
public function getRequiredPrivileges()
{
return false;
}
}