public function addAction()
{
$this->protectCSRF();
try {
$type = $this->getParam("type");
$className = User\Service::getClassNameForType($type);
$user = $className::create(["parentId" => intval($this->getParam("parentId")), "name" => trim($this->getParam("name")), "password" => "", "active" => $this->getParam("active")]);
if ($this->getParam("rid")) {
$rid = $this->getParam("rid");
$rObject = $className::getById($rid);
if ($rObject) {
if ($type == "user" || $type == "role") {
$user->setParentId($rObject->getParentId());
if ($rObject->getClasses()) {
$user->setClasses(implode(',', $rObject->getClasses()));
}
if ($rObject->getDocTypes()) {
$user->setDocTypes(implode(',', $rObject->getDocTypes()));
}
$keys = ["asset", "document", "object"];
foreach ($keys as $key) {
$getter = "getWorkspaces" . ucfirst($key);
$setter = "setWorkspaces" . ucfirst($key);
$workspaces = $rObject->{$getter}();
$clonedWorkspaces = [];
if (is_array($workspaces)) {
foreach ($workspaces as $workspace) {
$vars = get_object_vars($workspace);
$workspaceClass = "\\Pimcore\\Model\\User\\Workspace\\" . ucfirst($key);
$newWorkspace = new $workspaceClass();
foreach ($vars as $varKey => $varValue) {
$newWorkspace->{$varKey} = $varValue;
}
$newWorkspace->setUserId($user->getId());
$clonedWorkspaces[] = $newWorkspace;
}
}
$user->{$setter}($clonedWorkspaces);
}
$user->setPermissions($rObject->getPermissions());
if ($type == "user") {
$user->setAdmin(false);
if ($this->getUser()->isAdmin()) {
$user->setAdmin($rObject->getAdmin());
}
$user->setActive($rObject->getActive());
$user->setRoles($rObject->getRoles());
$user->setWelcomeScreen($rObject->getWelcomescreen());
$user->setMemorizeTabs($rObject->getMemorizeTabs());
$user->setCloseWarning($rObject->getCloseWarning());
}
$user->save();
}
}
}
$this->_helper->json(["success" => true, "id" => $user->getId()]);
} catch (\Exception $e) {
$this->_helper->json(["success" => false, "message" => $e->getMessage()]);
}
$this->_helper->json(false);
}