public function itCallsRemoveAndAddDAOMethodsDuringSave()
 {
     stub($this->dao)->getMediawikiUserGroupMapping()->returnsDar(array('group_id' => 104, 'ugroup_id' => 1, 'mw_group_name' => MediawikiUserGroupsMapper::MEDIAWIKI_GROUPS_ANONYMOUS), array('group_id' => 104, 'ugroup_id' => 2, 'mw_group_name' => MediawikiUserGroupsMapper::MEDIAWIKI_GROUPS_USER), array('group_id' => 104, 'ugroup_id' => 4, 'mw_group_name' => MediawikiUserGroupsMapper::MEDIAWIKI_GROUPS_SYSOP), array('group_id' => 104, 'ugroup_id' => 4, 'mw_group_name' => MediawikiUserGroupsMapper::MEDIAWIKI_GROUPS_BUREAUCRAT));
     $new_mapping = array('anonymous' => array('1'), 'user' => array('2'), 'bot' => array('3', '2', '4'), 'sysop' => array('1'), 'bureaucrat' => array('1'));
     expect($this->dao)->removeMediawikiUserGroupMapping()->count(2);
     expect($this->dao)->removeMediawikiUserGroupMapping($this->project, MediawikiUserGroupsMapper::MEDIAWIKI_GROUPS_SYSOP, 4)->at(0);
     expect($this->dao)->removeMediawikiUserGroupMapping($this->project, MediawikiUserGroupsMapper::MEDIAWIKI_GROUPS_BUREAUCRAT, 4)->at(1);
     expect($this->dao)->addMediawikiUserGroupMapping()->count(5);
     expect($this->dao)->addMediawikiUserGroupMapping($this->project, MediawikiUserGroupsMapper::MEDIAWIKI_GROUPS_BUREAUCRAT, '1')->at(4);
     $this->mapper->saveMapping($new_mapping, $this->project);
 }
 public function save_permissions(ServiceMediawiki $service, HTTPRequest $request)
 {
     $this->assertUserIsProjectAdmin($service, $request);
     if ($request->isPost()) {
         $project = $request->getProject();
         $new_mapping_list = $this->getSelectedMappingsFromRequest($request, $project);
         $this->mapper->saveMapping($new_mapping_list, $project);
         $this->manager->saveCompatibilityViewOption($project, $request->get('enable_compatibility_view'));
         if (!$this->requestIsRestore($request)) {
             $selected_read_ugroup = $request->get('read_ugroups');
             if ($selected_read_ugroup) {
                 $override_collection = new PermissionsNormalizerOverrideCollection();
                 $normalized_ids = $this->permissions_normalizer->getNormalizedUGroupIds($project, $selected_read_ugroup, $override_collection);
                 if ($this->manager->saveReadAccessControl($project, $normalized_ids)) {
                     $override_collection->emitFeedback(MediawikiManager::READ_ACCESS);
                 }
             }
             $selected_write_ugroup = $request->get('write_ugroups');
             if ($selected_write_ugroup) {
                 $override_collection = new PermissionsNormalizerOverrideCollection();
                 $normalized_ids = $this->permissions_normalizer->getNormalizedUGroupIds($project, $selected_write_ugroup, $override_collection);
                 if ($this->manager->saveWriteAccessControl($project, $normalized_ids)) {
                     $override_collection->emitFeedback(MediawikiManager::WRITE_ACCESS);
                 }
             }
         }
         if ($this->requestIsRestore($request)) {
             $GLOBALS['Response']->addFeedback(Feedback::INFO, $GLOBALS['Language']->getText('plugin_mediawiki', 'options_restored'));
         } else {
             $GLOBALS['Response']->addFeedback(Feedback::INFO, $GLOBALS['Language']->getText('plugin_mediawiki', 'options_saved'));
         }
     }
     $GLOBALS['Response']->redirect(MEDIAWIKI_BASE_URL . '/forge_admin?' . http_build_query(array('group_id' => $request->get('group_id'))));
 }
 public function save(ServiceMediawiki $service, HTTPRequest $request)
 {
     $this->assertUserIsProjectAdmin($service, $request);
     if ($request->isPost()) {
         $project = $request->getProject();
         $new_mapping_list = $this->getSelectedMappingsFromRequest($request, $project);
         $this->mapper->saveMapping($new_mapping_list, $project);
         $options = $this->manager->getDefaultOptions();
         if (!$this->requestIsRestore($request)) {
             foreach (array_keys($this->manager->getDefaultOptions()) as $key) {
                 $options[$key] = $request->get($key);
             }
         }
         $this->manager->saveOptions($project, $options);
         if ($this->requestIsRestore($request)) {
             $GLOBALS['Response']->addFeedback(Feedback::INFO, $GLOBALS['Language']->getText('plugin_mediawiki', 'options_restored'));
         } else {
             $GLOBALS['Response']->addFeedback(Feedback::INFO, $GLOBALS['Language']->getText('plugin_mediawiki', 'options_saved'));
         }
     }
     $GLOBALS['Response']->redirect(MEDIAWIKI_BASE_URL . '/forge_admin?' . http_build_query(array('group_id' => $request->get('group_id'))));
 }