Skip to content
Snippets Groups Projects
Commit 61870d42 authored by Elmar Ludwig's avatar Elmar Ludwig
Browse files

add pk for user inst, re #947

parent e7e49f6c
No related branches found
No related tags found
No related merge requests found
......@@ -380,7 +380,8 @@ class Admin_StatusgroupsController extends AuthenticatedController
'inst' => [
'name' => _('Institut'),
'after_user_add' => function ($user_id) {
$newInstUser = new InstituteMember([$user_id, Context::getId()]);
$newInstUser = InstituteMember::findByUserAndInstitute($user_id, Context::getId()) ?:
InstituteMember::build(['user_id' => $user_id, 'institut_id' => Context::getId()]);
if ($newInstUser->isNew() || $newInstUser->inst_perms == 'user') {
$user = new User($user_id);
$newInstUser->inst_perms = $user->perms;
......
......@@ -297,7 +297,8 @@ class Institute_MembersController extends AuthenticatedController
$enable_mail_dozent = in_array('dozenten', $additionalCheckboxes);
foreach ($mp->getAddedUsers() as $u_id) {
$member = new InstituteMember([$u_id, $this->institute->id]);
$member = InstituteMember::findByUserAndInstitute($u_id, $this->institute->id) ?:
InstituteMember::build(['user_id' => $u_id, 'institut_id' => $this->institute->id]);
if (!$member->isNew() && $member->inst_perms !== 'user') {
// der Admin hat Tomaten auf den Augen, der Mitarbeiter sitzt schon im Institut
......@@ -442,7 +443,7 @@ class Institute_MembersController extends AuthenticatedController
throw new Exception(_('Sie können sich nicht selbst aus der Einrichtung austragen.'));
}
$member = InstituteMember::find([$user->id, $this->institute->id]);
$member = InstituteMember::findByUserAndInstitute($user->id, $this->institute->id);
if ($member && $member->delete()) {
PageLayout::postInfo(sprintf(
_('%s wurde von der Liste des Personals gelöscht.'),
......
......@@ -208,7 +208,8 @@ class Settings_StatusgruppenController extends Settings_SettingsController
} elseif (!$group->addUser($this->user->id)) {
PageLayout::postError(_('Fehler beim Eintragen in die Gruppe!'));
} else {
$member = new InstituteMember([$this->user->id, $range_id]);
$member = InstituteMember::findByUserAndInstitute($this->user->id, $range_id) ?:
InstituteMember::build(['user_id' => $this->user->id, 'institut_id' => $range_id]);
$member->inst_perms = $this->user->perms;
$was_new = $member->isNew();
......
<?php
class AddPkForUserInst extends Migration
{
public function description()
{
return 'add simple pk for user_inst table';
}
public function up()
{
$db = DBManager::get();
$sql = 'ALTER TABLE user_inst
ADD id int(11) NOT NULL AUTO_INCREMENT FIRST,
DROP PRIMARY KEY,
ADD PRIMARY KEY (id),
ADD UNIQUE KEY user_inst (Institut_id, user_id)';
$db->exec($sql);
}
public function down()
{
$db = DBManager::get();
$sql = 'ALTER TABLE user_inst
DROP id,
DROP KEY user_inst,
ADD PRIMARY KEY (Institut_id, user_id)';
$db->exec($sql);
}
}
......@@ -17,7 +17,7 @@ class InstituteMembershipsShow extends JsonApiController
*/
public function __invoke(Request $request, Response $response, $args)
{
if (!$membership = \InstituteMember::find(explode('_', $args['id'], 2))) {
if (!$membership = \InstituteMember::find($args['id'])) {
throw new RecordNotFoundException();
}
......
......@@ -134,6 +134,18 @@ class InstituteMember extends SimpleORMap implements PrivacyObject
);
}
/**
* Finds an institute membership by user and institute id.
*
* @param string $user_id
* @param string $institute_id
* @return InstituteMember|null
*/
public static function findByUserAndInstitute($user_id, $institute_id)
{
return self::findOneBySQL('user_id = ? AND institut_id = ?', [$user_id, $institute_id]);
}
public function getUserFullname($format = 'full')
{
return User::build(array_merge(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment