Skip to content
This repository has been archived by the owner on Dec 27, 2023. It is now read-only.

Commit

Permalink
fix(Courses/EditDialog): preserve memberships after addNewMember
Browse files Browse the repository at this point in the history
Change-Id: Id9d52c3971b154feede8bbe4092adc21e92a058b
Reviewed-on: http://gerrit.tine20.com/customers/18613
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
Tested-by: Philipp Schüle <p.schuele@metaways.de>
  • Loading branch information
pschuele committed Dec 1, 2020
1 parent 480264e commit 51a6074
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 11 deletions.
20 changes: 18 additions & 2 deletions tests/tine20/Courses/JsonTest.php
Expand Up @@ -228,9 +228,25 @@ public function testUpdateCourseSetAdditionalMemberships($checkWithNoRight = fal
$courseUpdated = $this->_json->saveCourse($courseData);
self::assertTrue(isset($courseUpdated['members'][0]['additionalGroups']));
if ($checkWithNoRight) {
self::assertEquals([], $courseUpdated['members'][0]['additionalGroups']);
self::assertEquals([], $courseUpdated['members'][0]['additionalGroups'],
print_r($courseUpdated['members'], true));
} else {
self::assertEquals($memberships, $courseUpdated['members'][0]['additionalGroups']);
self::assertEquals($memberships, $courseUpdated['members'][0]['additionalGroups'],
print_r($courseUpdated['members'], true));
}

// add new member - assert that this api returns the additionalGroups, too
$result = $this->_json->addNewMember(array(
'accountFirstName' => 'jams',
'accountLastName' => 'hot',
), $courseUpdated);
$teacher = Tinebase_Translation::getTranslation('Courses')->_('Teacher');
foreach ($result['results'] as $member) {
if (! $checkWithNoRight && strpos($member['name'], $teacher) !== false) {
self::assertEquals($memberships, $member['additionalGroups'], print_r($member, true));
} else {
self::assertEquals([], $member['additionalGroups'], print_r($member, true));
}
}

// remove memberships
Expand Down
12 changes: 9 additions & 3 deletions tine20/Courses/Controller/Course.php
Expand Up @@ -296,9 +296,15 @@ public function getAdditionalGroupMemberships()
$groupIds = Courses_Config::getInstance()->get(Courses_Config::ADDITIONAL_GROUP_MEMBERSHIPS, []);
$additionalGroups = new Tinebase_Record_RecordSet(Tinebase_Model_Group::class);
foreach ($groupIds as $groupId) {
$group = Tinebase_Group::getInstance()->getGroupById($groupId);
$group->members = Tinebase_Group::getInstance()->getGroupMembers($groupId);
$additionalGroups->addRecord($group);
try {
$group = Tinebase_Group::getInstance()->getGroupById($groupId);
$group->members = Tinebase_Group::getInstance()->getGroupMembers($groupId);
$additionalGroups->addRecord($group);
} catch (Tinebase_Exception_Record_NotDefined $ternd) {
if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) Tinebase_Core::getLogger()->notice(
__METHOD__ . '::' . __LINE__ . ' Skipping group: '
. $ternd->getMessage());
}
}
return $additionalGroups;
}
Expand Down
21 changes: 15 additions & 6 deletions tine20/Courses/js/CourseEditDialog.js
Expand Up @@ -122,7 +122,7 @@ Tine.Courses.CourseEditDialog = Ext.extend(Tine.widgets.dialog.EditDialog, {

var members = (response.responseText) ? Ext.util.JSON.decode(response.responseText) : response;
if (members.results.length > 0) {
this.membersStore.loadData({results: members.results});
this.loadMembersIntoStore(members.results);
}
this.hideLoadMask();
},
Expand All @@ -132,12 +132,13 @@ Tine.Courses.CourseEditDialog = Ext.extend(Tine.widgets.dialog.EditDialog, {
*/
updateToolbars: function() {
},

/**
* onRecordLoad
* load members into members store / handle additional groups
*
* @param Array members
*/
onRecordLoad: function() {
let members = this.record.get('members') || [];
loadMembersIntoStore: function(members) {
if (members.length > 0) {
_.each(members, function(member) {
_.each(member.additionalGroups, function(groupId) {
Expand All @@ -146,7 +147,15 @@ Tine.Courses.CourseEditDialog = Ext.extend(Tine.widgets.dialog.EditDialog, {
});
this.membersStore.loadData({results: members});
}

},

/**
* onRecordLoad
*/
onRecordLoad: function() {
let members = this.record.get('members') || [];
this.loadMembersIntoStore(members);

// only activate import and ok buttons if editing existing course / user has the appropriate right
var disabled = ! this.record.get('id')
|| ! Tine.Tinebase.common.hasRight('manage', 'Admin', 'accounts')
Expand Down

0 comments on commit 51a6074

Please sign in to comment.