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')))); }
/** * @param Project $project * @param type $object_id * @param type $permission_type * @param array $ugroup_ids * * @return PermissionsNormalizerOverrideCollection * @throws PermissionDaoException */ public function savePermissions(Project $project, $object_id, $permission_type, array $ugroup_ids) { $normalizer = new PermissionsNormalizer(); $override_collection = new PermissionsNormalizerOverrideCollection(); $normalized_ugroup_ids = $normalizer->getNormalizedUGroupIds($project, $ugroup_ids, $override_collection); $cleared = $this->_permission_dao->clearPermission($permission_type, $object_id); if (!$cleared) { throw new PermissionDaoException("Database issue while clearPermission {$permission_type}, {$object_id}: " . $this->_permission_dao->getDa()->getErrorMessage()); } foreach ($normalized_ugroup_ids as $ugroup_id) { $added = $this->_permission_dao->addPermission($permission_type, $object_id, $ugroup_id); if (!$added) { throw new PermissionDaoException("Database issue while addPermission {$permission_type}, {$object_id}, {$ugroup_id}: " . $this->_permission_dao->getDa()->getErrorMessage()); } } $this->_permission_dao->addHistory($project->getID(), $permission_type, $object_id); return $override_collection; }