public async Task <ActionResult> PrintCards(int projectid, string plugin, string characterIds) { var characters = await CharacterRepository.GetCharacters(projectid, characterIds.UnCompressIdList()); var project = await GetProjectFromList(projectid, characters); var pluginInstance = PluginFactory.GetOperationInstance <IPrintCardPluginOperation>(project, plugin); if (pluginInstance == null) { return(HttpNotFound()); } if (!pluginInstance.AllowPlayerAccess) { var error = AsMaster(project); if (error != null) { return(error); } } else { //TODO display correct errors if (characters.Any(c => !c.HasAnyAccess(CurrentUserId))) { return(new HttpUnauthorizedResult()); } } var cards = characters.SelectMany(c => PluginFactory.PrintForCharacter(pluginInstance, c)); return(View(cards)); }