using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.Mvc; using Disco.Services.Plugins; namespace Disco.Web.Extensions { public static class DiscoPluginDefinitionExtensions { public static List ToSelectListItems(this IEnumerable PluginFeatureDefinitions, PluginFeatureManifest SelectedItem) { return PluginFeatureDefinitions.ToSelectListItems(SelectedItem?.Id, false, null); } public static List ToSelectListItems(this IEnumerable PluginFeatureDefinitions, IEnumerable SelectedItems) { return PluginFeatureDefinitions.ToSelectListItems(SelectedItems?.Select(i => i.Id), false, null); } public static List ToSelectListItems(this IEnumerable PluginDefinitions, string SelectedId = null, bool IncludeInstructionFirst = false, string InstructionMessage = "Select a Plugin") { return ToSelectListItems(PluginDefinitions, SelectedId, IncludeInstructionFirst, InstructionMessage, null); } public static List ToSelectListItems(this IEnumerable PluginDefinitions, IEnumerable SelectedIds = null, bool IncludeInstructionFirst = false, string InstructionMessage = "Select a Plugin") { return ToSelectListItems(PluginDefinitions, SelectedIds, IncludeInstructionFirst, InstructionMessage, null); } public static List ToSelectListItems(this IEnumerable PluginDefinitions, string SelectedId = null, bool IncludeInstructionFirst = false, string InstructionMessage = "Select a Plugin", Dictionary AdditionalItems = null) { string[] selectedIds = null; if (SelectedId != null) { selectedIds = new string[] { SelectedId }; } return ToSelectListItems(PluginDefinitions, selectedIds, IncludeInstructionFirst, InstructionMessage, AdditionalItems); } public static List ToSelectListItems(this IEnumerable PluginDefinitions, IEnumerable SelectedIds = null, bool IncludeInstructionFirst = false, string InstructionMessage = "Select a Plugin", Dictionary AdditionalItems = null) { var selectedIds = SelectedIds?.ToList(); var items = PluginDefinitions .Select(wpd => new SelectListItem { Value = wpd.Id, Text = wpd.Name, Selected = (selectedIds?.Contains(wpd.Id, StringComparer.Ordinal) ?? false) }); if (AdditionalItems != null) items = items.Concat(AdditionalItems.Select(i => new SelectListItem { Value = i.Key, Text = i.Value, Selected = (selectedIds?.Contains(i.Key, StringComparer.Ordinal) ?? false) })); var selectItems = items.OrderBy(i => i.Text).ToList(); if (IncludeInstructionFirst) selectItems.Insert(0, new SelectListItem() { Value = String.Empty, Text = String.Format("<{0}>", InstructionMessage), Selected = (selectedIds?.Count ?? 0) != 0 }); return selectItems; } public static List ToSelectListItems(this IEnumerable PluginFeatureDefinitions, PluginManifest SelectedItem) { string selectedId = default(string); if (SelectedItem != null) selectedId = SelectedItem.Id; return PluginFeatureDefinitions.ToSelectListItems(selectedId); } public static List ToSelectListItems(this IEnumerable PluginDefinitions, string SelectedId = null, bool IncludeInstructionFirst = false, string InstructionMessage = "Select a Plugin") { var selectItems = default(List); if (SelectedId == null) selectItems = PluginDefinitions.Select(wpd => new SelectListItem { Value = wpd.Id, Text = wpd.Name }).ToList(); else selectItems = PluginDefinitions.Select(wpd => new SelectListItem { Value = wpd.Id, Text = wpd.Name, Selected = (SelectedId.Equals(wpd.Id)) }).ToList(); if (IncludeInstructionFirst) selectItems.Insert(0, new SelectListItem() { Value = String.Empty, Text = String.Format("<{0}>", InstructionMessage), Selected = String.IsNullOrEmpty(SelectedId) }); return selectItems; } } }