From 52226a67e2bcf8b967f9bb96796010327bcee330 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Sun, 26 Jul 2015 19:33:06 +0200 Subject: [PATCH] Remove Marketplace completely --- .../ProjectCompatibilityReportController.cs | 7 +- Marketplace/ProjectFileUploadHandler.cs | 20 +-- .../Services/VersionCompatibilityService.cs | 6 +- Marketplace/library.cs | 135 -------------- Marketplace/uProject.csproj | 28 --- .../usercontrols/Deli/Package/Editor.ascx.cs | 64 +++---- .../Deli/Package/Steps/Complete.ascx.cs | 22 +-- .../Deli/Package/Steps/Details.ascx.cs | 22 +-- .../Deli/Package/Steps/Files.ascx.cs | 125 ++++++------- .../Deli/Package/Steps/Licenses.ascx | 137 -------------- .../Deli/Package/Steps/Licenses.ascx.cs | 99 ----------- .../Package/Steps/Licenses.ascx.designer.cs | 168 ------------------ .../Deli/Package/Steps/Screenshots.ascx.cs | 64 ++++--- .../Deli/Profile/MyProjects.ascx.cs | 23 +-- OurUmbraco.Site/OurUmbraco.Site.csproj | 14 -- .../Members/PublicProfile.cshtml | 40 +++-- .../repository-popularpackages.cshtml | 165 ----------------- .../repository-view-category.cshtml | 91 ---------- .../repository-view-project.cshtml | 150 ---------------- .../usercontrols/Deli/FeaturedProject.ascx | 51 ------ .../usercontrols/Deli/NewestProjects.ascx | 79 -------- .../Deli/Package/Steps/Licenses.ascx | 137 -------------- .../usercontrols/Deli/PopularProjects.ascx | 83 --------- .../usercontrols/Deli/ProjectsList.ascx | 62 ------- .../ListingCreator/ListingCreatorStep.cs | 32 ++++ .../ListingCreatorStepCollection.cs | 61 +++++++ .../StepDefinitions/Complete.cs | 20 +++ .../ListingCreator/StepDefinitions/Details.cs | 20 +++ .../ListingCreator/StepDefinitions/Files.cs | 20 +++ .../StepDefinitions/Screenshots.cs | 20 +++ .../Extensions/NodeProviderExtensions.cs | 63 ++++++- .../Interfaces/IListingCreatorStep.cs | 11 ++ .../MarketPlace/Interfaces/IMediaProvider.cs | 10 +- .../NodeListingProvider.cs | 159 +++++++++++++---- OurUmbraco/MarketPlace/Providers/Category.cs | 67 +++++++ .../MarketPlace/Providers/MediaProvider.cs | 155 ++++++++++++++++ .../MarketPlace/Providers/ProjectTag.cs | 59 ++++++ .../Providers/UmbracoCategoryProvider.cs | 54 ++++++ .../Providers/UmbracoProjectTagProvider.cs | 76 ++++++++ OurUmbraco/OurUmbraco.csproj | 14 +- OurUmbraco/Wiki/BusinessLogic/WikiFile.cs | 3 +- .../MarketPlace/MarketPlace.Webservices.dll | Bin 14848 -> 0 bytes .../MarketPlace/Marketplace.BusinessLogic.dll | Bin 11264 -> 0 bytes dependencies/MarketPlace/Marketplace.Data.dll | Bin 50688 -> 0 bytes .../MarketPlace/Marketplace.Interfaces.dll | Bin 34304 -> 0 bytes .../MarketPlace/Marketplace.Presentation.dll | Bin 5120 -> 0 bytes .../MarketPlace/Marketplace.Providers.dll | Bin 156160 -> 0 bytes .../MarketPlace/Marketplace.Umbraco.dll | Bin 5632 -> 0 bytes our.umbraco.org/library.cs | 6 + 49 files changed, 979 insertions(+), 1663 deletions(-) delete mode 100644 Marketplace/library.cs delete mode 100644 Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx delete mode 100644 Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx.cs delete mode 100644 Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx.designer.cs delete mode 100644 OurUmbraco.Site/macroScripts/repository-popularpackages.cshtml delete mode 100644 OurUmbraco.Site/macroScripts/repository-view-category.cshtml delete mode 100644 OurUmbraco.Site/macroScripts/repository-view-project.cshtml delete mode 100644 OurUmbraco.Site/usercontrols/Deli/FeaturedProject.ascx delete mode 100644 OurUmbraco.Site/usercontrols/Deli/NewestProjects.ascx delete mode 100644 OurUmbraco.Site/usercontrols/Deli/Package/Steps/Licenses.ascx delete mode 100644 OurUmbraco.Site/usercontrols/Deli/PopularProjects.ascx delete mode 100644 OurUmbraco.Site/usercontrols/Deli/ProjectsList.ascx create mode 100644 OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/ListingCreatorStep.cs create mode 100644 OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/ListingCreatorStepCollection.cs create mode 100644 OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Complete.cs create mode 100644 OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Details.cs create mode 100644 OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Files.cs create mode 100644 OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Screenshots.cs create mode 100644 OurUmbraco/MarketPlace/Interfaces/IListingCreatorStep.cs rename OurUmbraco/MarketPlace/{NodeLising => NodeListing}/NodeListingProvider.cs (66%) create mode 100644 OurUmbraco/MarketPlace/Providers/Category.cs create mode 100644 OurUmbraco/MarketPlace/Providers/MediaProvider.cs create mode 100644 OurUmbraco/MarketPlace/Providers/ProjectTag.cs create mode 100644 OurUmbraco/MarketPlace/Providers/UmbracoCategoryProvider.cs create mode 100644 OurUmbraco/MarketPlace/Providers/UmbracoProjectTagProvider.cs delete mode 100644 dependencies/MarketPlace/MarketPlace.Webservices.dll delete mode 100644 dependencies/MarketPlace/Marketplace.BusinessLogic.dll delete mode 100644 dependencies/MarketPlace/Marketplace.Data.dll delete mode 100644 dependencies/MarketPlace/Marketplace.Interfaces.dll delete mode 100644 dependencies/MarketPlace/Marketplace.Presentation.dll delete mode 100644 dependencies/MarketPlace/Marketplace.Providers.dll delete mode 100644 dependencies/MarketPlace/Marketplace.Umbraco.dll diff --git a/Marketplace/Controllers/ProjectCompatibilityReportController.cs b/Marketplace/Controllers/ProjectCompatibilityReportController.cs index b16960f9..3cf5aa4e 100644 --- a/Marketplace/Controllers/ProjectCompatibilityReportController.cs +++ b/Marketplace/Controllers/ProjectCompatibilityReportController.cs @@ -1,9 +1,8 @@ -using System; -using System.Web.Mvc; +using System.Web.Mvc; +using our; using uProject.Models; using uProject.Services; using uProject.uVersion; -using Umbraco.Core.Models; using Umbraco.Web.Mvc; namespace uProject.Controllers @@ -21,7 +20,7 @@ namespace uProject.Controllers new VersionCompatibilityReportModel { VersionCompatibilities = compatReport.GetCompatibilityReport(projectId), - CurrentMemberHasDownloaded = currentMember != null && uProject.library.HasDownloaded(currentMember.Id, projectId), + CurrentMemberHasDownloaded = currentMember != null && Utils.HasMemberDownloadedPackage(currentMember.Id, projectId), CurrentMemberIsLoggedIn = currentMember != null, FileId = fileId, ProjectId = projectId, diff --git a/Marketplace/ProjectFileUploadHandler.cs b/Marketplace/ProjectFileUploadHandler.cs index 43d07eab..7d4199eb 100644 --- a/Marketplace/ProjectFileUploadHandler.cs +++ b/Marketplace/ProjectFileUploadHandler.cs @@ -5,12 +5,11 @@ using System.Web; using umbraco.cms.businesslogic.web; using umbraco.cms.businesslogic; using umbraco.cms.businesslogic.member; -using Marketplace.Providers; using our; -using Marketplace.Providers.MediaFile; using OurUmbraco.MarketPlace.Interfaces; using OurUmbraco.Wiki.BusinessLogic; -using UmbracoVersion = Marketplace.Umbraco.BusinessLogic.UmbracoVersion; +using Umbraco.Core; +using Umbraco.Web; namespace uProject { @@ -51,20 +50,19 @@ namespace uProject } - if (!string.IsNullOrEmpty(userguid) && !string.IsNullOrEmpty(projectguid) && !string.IsNullOrEmpty(fileType) && !string.IsNullOrEmpty(fileName)) { - - var provider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - var p = provider.GetListing(new Guid(projectguid)); + if (!string.IsNullOrEmpty(userguid) && !string.IsNullOrEmpty(projectguid) && !string.IsNullOrEmpty(fileType) && !string.IsNullOrEmpty(fileName)) + { + var nodeListingProvider = new OurUmbraco.MarketPlace.NodeListing.NodeListingProvider(); + var p = nodeListingProvider.GetListing(new Guid(projectguid)); Member mem = new Member(new Guid(userguid)); - if (p.Vendor != null && p.Vendor.Member.Id == mem.Id || Utils.IsProjectContributor(mem.Id, p.Id)) + if (p.Vendor != null && p.VendorId == mem.Id || Utils.IsProjectContributor(mem.Id, p.Id)) { - - var fileProvider = (IMediaProvider)MarketplaceProviderManager.Providers["MediaProvider"]; + var mediaProvider = new OurUmbraco.MarketPlace.Providers.MediaProvider(); var packageFileType = (FileType)Enum.Parse(typeof(FileType), (string)fileType , true); - fileProvider.CreateFile(fileName, p.Version, mem.UniqueId, file, packageFileType, v, dotNetVersion, trust); + mediaProvider.CreateFile(fileName, p.Version, mem.UniqueId, file, packageFileType, v, dotNetVersion, trust); } else { umbraco.BusinessLogic.Log.Add(umbraco.BusinessLogic.LogTypes.Debug, 0, "wrong type or not a owner"); diff --git a/Marketplace/Services/VersionCompatibilityService.cs b/Marketplace/Services/VersionCompatibilityService.cs index 0eded40a..a930ac46 100644 --- a/Marketplace/Services/VersionCompatibilityService.cs +++ b/Marketplace/Services/VersionCompatibilityService.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using Marketplace.Providers; -using OurUmbraco.MarketPlace.Interfaces; using uProject.Models; using uProject.uVersion; using Umbraco.Core; @@ -37,8 +35,8 @@ namespace uProject.Services public IEnumerable GetCompatibilityReport(int projectId) { var uVersions = UVersion.GetAllVersions(); - var projectProvider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - var project = projectProvider.GetListing(projectId, false); + var projectProvider = new OurUmbraco.MarketPlace.NodeListing.NodeListingProvider(); + var project = projectProvider.GetListing(projectId, true); var compatList = new List(); diff --git a/Marketplace/library.cs b/Marketplace/library.cs deleted file mode 100644 index 9e9ef7e2..00000000 --- a/Marketplace/library.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using Marketplace.Providers; -using umbraco; -using our; -using System.Text.RegularExpressions; -using umbraco.NodeFactory; -using System.Globalization; -using OurUmbraco.MarketPlace.Interfaces; - -namespace uProject -{ - [XsltExtension("deli.library")] - public class library - { - - public static bool HasVendorAccess(int pageId) - { - var page = new umbraco.NodeFactory.Node(pageId); - - if (page.GetProperty("vendorOnly") != null) - { - var memberProvider = (IMemberProvider)MarketplaceProviderManager.Providers["MemberProvider"]; - var member = memberProvider.GetCurrentMember(); - - var vendorOnly = page.GetProperty("vendorOnly").Value == "1" ? true : false; - if (vendorOnly) - { - if (member.IsDeliVendor) - return true; - else - return false; - } - return true; - } - return true; - - } - - public static string ShortenText(string text) - { - text = Utils.StripHTML(text).Replace(" ", ""); - if (text.Length > 210) - { - - text = text.Substring(0, 210); - text = text.Substring(0, text.LastIndexOf(' ')); - } - - text = Regex.Replace(text, @"[^a-zA-Z0-9\s.?!&;]", ""); //strip all crap from the listing such as ======================================= !!!! - return text.Trim(); - } - - - - public static string GetTagsAsCSV(IEnumerable tagList) - { - var tags = string.Empty; - int counter = 0; - - foreach (var t in tagList) - { - tags += t.Text + ", "; - counter++; - - if (counter > 3) - break; - } - - if (tags.Length > 0) - { - tags = tags.Substring(0, tags.Length - 2); - } - return tags; - } - - public static string GetCategoryName(int projectId) - { - var node = new Node(projectId); - return node.Parent.Name; - - } - - - - - public static string GetDefaultScreenshot(string prop) - { - return !String.IsNullOrEmpty(prop) ? "/umbraco/imagegen.ashx?image=" + prop + "&pad=true&width=50&height=50;" : "/css/img/package2.png"; - } - - public static string GetManufacturerName(IVendor vendor) - { - if (!string.IsNullOrEmpty(vendor.VendorCompanyName)) - { - return vendor.VendorCompanyName; - } - else - { - return vendor.Member.Name; - } - - } - - public static string GetCountry(string code) - { - - - foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) - { - - RegionInfo ri = new RegionInfo(ci.LCID); - if (ri.TwoLetterISORegionName.ToLowerInvariant() == code) - return ri.EnglishName; - } - - return ""; - - } - - - /// - /// Check to see if member has reported on compatibility for a package regardless of version of the package - /// - /// The members Id - /// The package Id - /// - public static bool HasDownloaded(int memberId, int packageId) - { - return Utils.GetProjectMemberVotes(packageId, memberId) > 0; - } - } -} \ No newline at end of file diff --git a/Marketplace/uProject.csproj b/Marketplace/uProject.csproj index 6fad9d1f..12ef65db 100644 --- a/Marketplace/uProject.csproj +++ b/Marketplace/uProject.csproj @@ -114,25 +114,6 @@ ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll True - - False - ..\dependencies\MarketPlace\Marketplace.BusinessLogic.dll - - - False - ..\dependencies\MarketPlace\Marketplace.Presentation.dll - - - False - ..\dependencies\MarketPlace\Marketplace.Providers.dll - - - False - ..\dependencies\MarketPlace\Marketplace.Umbraco.dll - - - ..\dependencies\MarketPlace\MarketPlace.Webservices.dll - ..\packages\UmbracoCms.Core.7.2.8-build103\lib\Microsoft.ApplicationBlocks.Data.dll True @@ -286,7 +267,6 @@ - @@ -308,13 +288,6 @@ Complete.ascx - - Licenses.ascx - ASPXCodeBehind - - - Licenses.ascx - Screenshots.ascx ASPXCodeBehind @@ -355,7 +328,6 @@ - diff --git a/Marketplace/usercontrols/Deli/Package/Editor.ascx.cs b/Marketplace/usercontrols/Deli/Package/Editor.ascx.cs index a8c4126d..ac10c3ec 100644 --- a/Marketplace/usercontrols/Deli/Package/Editor.ascx.cs +++ b/Marketplace/usercontrols/Deli/Package/Editor.ascx.cs @@ -1,23 +1,23 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; using System.Web.UI; using System.Web.UI.WebControls; -using umbraco.IO; -using Marketplace.BusinessLogic.ListingCreator; -using Marketplace.BusinessLogic.ListingCreator.StepDefinitions; -using Marketplace.Providers; -using umbraco.cms.businesslogic.member; using our; +using OurUmbraco.MarketPlace.BusinessLogic.ListingCreator; using OurUmbraco.MarketPlace.Interfaces; +using OurUmbraco.MarketPlace.NodeListing; +using umbraco.cms.businesslogic.member; +using umbraco.IO; +using uProject.usercontrols.Deli.Package.Steps; +using Umbraco.Web.UI.Controls; +using Complete = OurUmbraco.MarketPlace.BusinessLogic.ListingCreator.StepDefinitions.Complete; +using Files = OurUmbraco.MarketPlace.BusinessLogic.ListingCreator.StepDefinitions.Files; +using Screenshots = OurUmbraco.MarketPlace.BusinessLogic.ListingCreator.StepDefinitions.Screenshots; namespace uProject.usercontrols.Deli.Package { - public partial class Editor : System.Web.UI.UserControl + public partial class Editor : UmbracoUserControl { private string _currentStep = ""; - private static IVendor _vendor; private static IListingItem _project; public string _currentStepClass = "current"; @@ -34,7 +34,7 @@ namespace uProject.usercontrols.Deli.Package } - protected void Page_Load(object sender, System.EventArgs e) + protected void Page_Load(object sender, EventArgs e) { StepNavigation.DataSource = ListingSteps().Values; StepNavigation.DataBind(); @@ -44,10 +44,10 @@ namespace uProject.usercontrols.Deli.Package private void loadContent(ListingCreatorStep currentStep) { StepPlaceHolder.Controls.Clear(); - var controlToLoad = new System.Web.UI.UserControl().LoadControl(IOHelper.ResolveUrl(currentStep.UserControl)); + var controlToLoad = new UserControl().LoadControl(IOHelper.ResolveUrl(currentStep.UserControl)); if (currentStep.Alias == "details") - ((uProject.usercontrols.Deli.Package.Steps.Details)controlToLoad).IsDeliVendor = _vendor.Member.IsDeliVendor; + ((Details)controlToLoad).IsDeliVendor = false; StepPlaceHolder.Controls.Add(controlToLoad); Step.Value = currentStep.Alias; @@ -62,7 +62,7 @@ namespace uProject.usercontrols.Deli.Package if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { - ListingCreatorStep i = (ListingCreatorStep)e.Item.DataItem; + var i = (ListingCreatorStep)e.Item.DataItem; if (!i.HideFromNavigation) { @@ -92,7 +92,7 @@ namespace uProject.usercontrols.Deli.Package public void GotoNextStep(string currentStep, int projectId) { ListingSteps().Get(currentStep).Completed = true; - ListingCreatorStep _s = ListingSteps().GotoNextStep(currentStep); + var _s = ListingSteps().GotoNextStep(currentStep); Response.Redirect("edit?editorStep=" + _s.Alias + "&id=" + projectId); } @@ -109,17 +109,16 @@ namespace uProject.usercontrols.Deli.Package InitializeComponent(); base.OnInit(e); - - - _vendor = ((IVendorProvider)MarketplaceProviderManager.Providers["VendorProvider"]).GetVendorById(Member.GetCurrentMember().Id); - if (_projectId != null) { - _project = ((IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]).GetListing((int)_projectId); - + var nodeListingProvider = new NodeListingProvider(); + _project = nodeListingProvider.GetListing((int)_projectId); //check security to make sure the project belongs to the vendor - if (!((_project.Vendor.Member.Id == _vendor.Member.Id) || Utils.IsProjectContributor(_vendor.Member.Id, (int)_projectId))) + var currentMemberId = Members.GetCurrentMemberId(); + var vendorIsCurrentMember = (_project.VendorId == currentMemberId); + var isProjectContributor = Utils.IsProjectContributor(currentMemberId, (int)_projectId); + if ((vendorIsCurrentMember || isProjectContributor) == false) { //this project does not belong to this member so kick them back to the project list in their profile. Response.Redirect("~/member/profile/projects/"); @@ -147,21 +146,16 @@ namespace uProject.usercontrols.Deli.Package } #endregion - - - + private static ListingCreatorStepCollection ListingSteps() { - ListingCreatorStepCollection lcs = new ListingCreatorStepCollection(); - lcs.Add(new Details(), _vendor.Member.IsDeliVendor); - lcs.Add(new Files(), _vendor.Member.IsDeliVendor); - lcs.Add(new Screenshots(), _vendor.Member.IsDeliVendor); - - //only add the licensing step is the project is commercial - if (_project != null) - lcs.Add(new Licenses(), (_project.ListingType == ListingType.commercial && _vendor.Member.IsDeliVendor)); - - lcs.Add(new Complete(), _vendor.Member.IsDeliVendor); + var lcs = new ListingCreatorStepCollection + { + { new OurUmbraco.MarketPlace.BusinessLogic.ListingCreator.StepDefinitions.Details(), false }, + { new Files(), false }, + { new Screenshots(), false }, + { new Complete(), false } + }; return lcs; } } diff --git a/Marketplace/usercontrols/Deli/Package/Steps/Complete.ascx.cs b/Marketplace/usercontrols/Deli/Package/Steps/Complete.ascx.cs index 8b9239b8..670b7816 100644 --- a/Marketplace/usercontrols/Deli/Package/Steps/Complete.ascx.cs +++ b/Marketplace/usercontrols/Deli/Package/Steps/Complete.ascx.cs @@ -1,17 +1,11 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; using System.Web.UI; -using System.Web.UI.WebControls; -using Marketplace.Providers; -using Marketplace.BusinessLogic; -using OurUmbraco.MarketPlace.Interfaces; +using OurUmbraco.MarketPlace.NodeListing; using uProject.Helpers; namespace uProject.usercontrols.Deli.Package.Steps { - public partial class Complete : System.Web.UI.UserControl + public partial class Complete : UserControl { public string NotificationClass; @@ -22,7 +16,7 @@ namespace uProject.usercontrols.Deli.Package.Steps { if (!string.IsNullOrEmpty(Request["id"])) { - _projectId = Int32.Parse(Request["id"]); + _projectId = int.Parse(Request["id"]); } return _projectId; } @@ -36,9 +30,9 @@ namespace uProject.usercontrols.Deli.Package.Steps { if (!IsPostBack) { - var provider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; + var nodeListingProvider = new NodeListingProvider(); - IListingItem project = provider.GetListing((int)ProjectId); + var project = nodeListingProvider.GetListing((int)ProjectId); ProjectName.Text = project.Name; Live.Checked = project.Live; @@ -49,10 +43,10 @@ namespace uProject.usercontrols.Deli.Package.Steps protected void Complete_Click(object sender, EventArgs e) { - var ProjectsProvider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - var project = ProjectsProvider.GetListing((int)ProjectId); + var nodeListingProvider = new NodeListingProvider(); + var project = nodeListingProvider.GetListing((int)ProjectId); project.Live = Live.Checked; - ProjectsProvider.SaveOrUpdate(project); + nodeListingProvider.SaveOrUpdate(project); Response.Redirect(project.NiceUrl); } diff --git a/Marketplace/usercontrols/Deli/Package/Steps/Details.ascx.cs b/Marketplace/usercontrols/Deli/Package/Steps/Details.ascx.cs index fc113c2d..81ba1905 100644 --- a/Marketplace/usercontrols/Deli/Package/Steps/Details.ascx.cs +++ b/Marketplace/usercontrols/Deli/Package/Steps/Details.ascx.cs @@ -3,15 +3,11 @@ using System.Collections.Generic; using System.Linq; using System.Web.UI; using System.Web.UI.WebControls; -using Marketplace.Providers; -using Marketplace.Providers.Listing; -using Marketplace.Providers.ListingItem; using OurUmbraco.MarketPlace.Interfaces; using umbraco; using uProject.Helpers; using Umbraco.Core.Models; using Umbraco.Web.UI.Controls; -using Member = umbraco.cms.businesslogic.member.Member; namespace uProject.usercontrols.Deli.Package.Steps { @@ -81,7 +77,7 @@ namespace uProject.usercontrols.Deli.Package.Steps private void SetupTags() { string taglist = string.Empty; - var tagProvider = ((IProjectTagProvider)MarketplaceProviderManager.Providers["TagProvider"]); + var tagProvider = new OurUmbraco.MarketPlace.Providers.UmbracoProjectTagProvider(); var tags = tagProvider.GetAllTags(); foreach(var t in tags) { @@ -99,7 +95,8 @@ namespace uProject.usercontrols.Deli.Package.Steps private void BindCategories() { - var Categories = ((ICategoryProvider)MarketplaceProviderManager.Providers["CategoryProvider"]).GetAllCategories().Where(x => !x.HQOnly); + var categoryProvider = new OurUmbraco.MarketPlace.Providers.UmbracoCategoryProvider(); + var Categories = categoryProvider.GetAllCategories().Where(x => !x.HQOnly); Category.DataSource = Categories; Category.DataValueField = "Id"; Category.DataTextField = "Name"; @@ -108,8 +105,8 @@ namespace uProject.usercontrols.Deli.Package.Steps protected void LoadProject() { - var ProjectsProvider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - var project = ProjectsProvider.GetListing((int)ProjectId); + var nodeListingProvider = new OurUmbraco.MarketPlace.NodeListing.NodeListingProvider(); + var project = nodeListingProvider.GetListing((int)ProjectId); Title.Text = project.Name; Description.Text = project.Description; @@ -128,7 +125,7 @@ namespace uProject.usercontrols.Deli.Package.Steps Collab.Checked = project.OpenForCollab; Terms.Checked = project.TermsAgreementDate != new DateTime(); - var tagProvider = ((IProjectTagProvider)MarketplaceProviderManager.Providers["TagProvider"]); + var tagProvider = new OurUmbraco.MarketPlace.Providers.UmbracoProjectTagProvider(); var projectTags = tagProvider.GetTagsByProjectId((int)ProjectId).ToList(); if (projectTags.Any()) @@ -151,7 +148,7 @@ namespace uProject.usercontrols.Deli.Package.Steps protected void SaveStep(object sender, EventArgs e) { - var nodeListingProvider = new OurUmbraco.MarketPlace.NodeLising.NodeListingProvider(); + var nodeListingProvider = new OurUmbraco.MarketPlace.NodeListing.NodeListingProvider(); var project = (_editMode) ? nodeListingProvider.GetListing((int)ProjectId) : new OurUmbraco.MarketPlace.ListingItem.ListingItem(null,null); project.Name = Title.Text; @@ -174,13 +171,12 @@ namespace uProject.usercontrols.Deli.Package.Steps project.TermsAgreementDate = DateTime.Now.ToUniversalTime(); - var ProjectsProvider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - ProjectsProvider.SaveOrUpdate(project); + nodeListingProvider.SaveOrUpdate(project); ProjectId = project.Id; if (Request["projecttags[]"] != null) { - ProjectsProvider.SaveOrUpdate(project); + nodeListingProvider.SaveOrUpdate(project); var tags = new List(); foreach (var tag in Request["projecttags[]"].Split(',')) diff --git a/Marketplace/usercontrols/Deli/Package/Steps/Files.ascx.cs b/Marketplace/usercontrols/Deli/Package/Steps/Files.ascx.cs index 60ef4ba5..ba1840c7 100644 --- a/Marketplace/usercontrols/Deli/Package/Steps/Files.ascx.cs +++ b/Marketplace/usercontrols/Deli/Package/Steps/Files.ascx.cs @@ -1,23 +1,20 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Web; using System.Web.UI; using System.Web.UI.WebControls; -using Marketplace.Providers; -using umbraco.cms.businesslogic.member; using our; -using Marketplace.BusinessLogic; -using Marketplace.Umbraco.BusinessLogic; -using Marketplace.Providers.Helpers; -using uProject.Helpers; -using Marketplace.Providers.MediaFile; using OurUmbraco.MarketPlace.Interfaces; +using OurUmbraco.MarketPlace.NodeListing; +using OurUmbraco.MarketPlace.Providers; +using OurUmbraco.Wiki.BusinessLogic; using OurUmbraco.Wiki.Extensions; +using umbraco; +using umbraco.cms.businesslogic.member; +using uProject.Helpers; namespace uProject.usercontrols.Deli.Package.Steps { - public partial class Files : System.Web.UI.UserControl + public partial class Files : UserControl { public string MemberGuid = ""; @@ -50,8 +47,8 @@ namespace uProject.usercontrols.Deli.Package.Steps //called after upload. private void RebindFiles() { - var fileProvider = (IMediaProvider)MarketplaceProviderManager.Providers["MediaProvider"]; - var files = fileProvider.GetMediaFilesByProjectId((int)ProjectId).Where(x => x.FileType != FileType.screenshot); + var mediaProvider = new MediaProvider(); + var files = mediaProvider.GetMediaFilesByProjectId((int)ProjectId).Where(x => x.FileType != FileType.screenshot.FileTypeAsString()); if (string.IsNullOrEmpty(_defaultFile)) { var defaultFile = files.OrderByDescending(x => x.CreateDate).FirstOrDefault(); @@ -61,7 +58,7 @@ namespace uProject.usercontrols.Deli.Package.Steps MarkFileAsCurrent(defaultFile.Id.ToString()); } } - + rp_packagefiles.DataSource = files; rp_packagefiles.Visible = (files.Count() > 0); @@ -71,33 +68,33 @@ namespace uProject.usercontrols.Deli.Package.Steps protected void DeleteFile(object sender, CommandEventArgs e) { - var fileProvider = (IMediaProvider)MarketplaceProviderManager.Providers["MediaProvider"]; - var f = fileProvider.GetFileById(int.Parse(e.CommandArgument.ToString())); - + var mediaProvider = new MediaProvider(); + var f = mediaProvider.GetFileById(int.Parse(e.CommandArgument.ToString())); + var mem = Member.GetCurrentMember(); if (f.CreatedBy == mem.Id || Utils.IsProjectContributor(mem.Id, (int)ProjectId)) - //if the file is the default file we need to clear it out of the system to stop it showing as the default download - if (f.Id.ToString() == _defaultFile) - { - _defaultFile = string.Empty; - var listingProvider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - var project = listingProvider.GetListing((int)ProjectId); - project.CurrentReleaseFile = _defaultFile; - listingProvider.SaveOrUpdate(project); + //if the file is the default file we need to clear it out of the system to stop it showing as the default download + if (f.Id.ToString() == _defaultFile) + { + _defaultFile = string.Empty; + var nodeListingProvider = new NodeListingProvider(); + var project = nodeListingProvider.GetListing((int)ProjectId); + project.CurrentReleaseFile = _defaultFile; + nodeListingProvider.SaveOrUpdate(project); - } - fileProvider.Remove(f); + } + + mediaProvider.Remove(f); RebindFiles(); } protected void ArchiveFile(object sender, CommandEventArgs e) { - - var fileProvider = (IMediaProvider)MarketplaceProviderManager.Providers["MediaProvider"]; - var f = fileProvider.GetFileById(int.Parse(e.CommandArgument.ToString())); + var mediaProvider = new MediaProvider(); + var f = mediaProvider.GetFileById(int.Parse(e.CommandArgument.ToString())); if (e.CommandName == "Unarchive") { @@ -108,7 +105,7 @@ namespace uProject.usercontrols.Deli.Package.Steps f.Archived = true; } - fileProvider.SaveOrUpdate(f); + mediaProvider.SaveOrUpdate(f); RebindFiles(); } @@ -116,7 +113,7 @@ namespace uProject.usercontrols.Deli.Package.Steps { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { - IMediaFile f = (IMediaFile)e.Item.DataItem; + WikiFile f = (WikiFile)e.Item.DataItem; Literal _name = (Literal)e.Item.FindControl("lt_name"); Literal _date = (Literal)e.Item.FindControl("lt_date"); Button _delete = (Button)e.Item.FindControl("bt_delete"); @@ -127,7 +124,7 @@ namespace uProject.usercontrols.Deli.Package.Steps Literal _currentRelease = (Literal)e.Item.FindControl("lt_currentRelease"); Button _defaultPackageFile = (Button)e.Item.FindControl("bt_default"); - if (f.FileType == FileType.package) + if (f.FileType == FileType.package.FileTypeAsString()) { if (f.Id.ToString() == _defaultFile) { @@ -146,13 +143,13 @@ namespace uProject.usercontrols.Deli.Package.Steps { _defaultPackageFile.Visible = false; _currentRelease.Visible = false; - + } Button _archive = (Button)e.Item.FindControl("bt_archive"); _archive.CommandArgument = f.Id.ToString(); - + if (f.Archived) { @@ -165,40 +162,20 @@ namespace uProject.usercontrols.Deli.Package.Steps _archive.CommandName = "Archive"; } - if (f.FileType == FileType.screenshot) + if (f.FileType == FileType.screenshot.FileTypeAsString()) { _archive.Visible = false; } - if (f.UmbVersion != null) - _version.Text = f.UmbVersion.ToVersionString(); + if (f.Versions != null) + _version.Text = f.Versions.ToVersionString(); if (f.DotNetVersion != null) _dotNetVersion.Text = f.DotNetVersion; - _trustLevel.Text = (f.SupportsMediumTrust)?"Medium":"Full"; + _trustLevel.Text = (f.SupportsMediumTrust) ? "Medium" : "Full"; - - switch (f.FileType) - { - case FileType.screenshot: - _type.Text = "Screenshot"; - break; - case FileType.package: - _type.Text = "Package"; - break; - case FileType.hotfix: - _type.Text = "Hot Fix"; - break; - case FileType.docs: - _type.Text = "Document"; - break; - case FileType.source: - _type.Text = "Source"; - break; - default: - break; - } + _type.Text = f.FileType; _name.Text = "" + f.Name + ""; _date.Text = f.CreateDate.ToShortDateString() + " - " + f.CreateDate.ToShortTimeString(); @@ -216,10 +193,10 @@ namespace uProject.usercontrols.Deli.Package.Steps private void MarkFileAsCurrent(string releaseFile) { - var provider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - IListingItem project = provider.GetListing((int)ProjectId); + var nodeListingProvider = new NodeListingProvider(); + IListingItem project = nodeListingProvider.GetListing((int)ProjectId); project.CurrentReleaseFile = releaseFile; - provider.SaveOrUpdate(project); + nodeListingProvider.SaveOrUpdate(project); _defaultFile = project.CurrentReleaseFile; } @@ -227,25 +204,25 @@ namespace uProject.usercontrols.Deli.Package.Steps { - if (umbraco.library.IsLoggedOn() && ProjectId != null) + if (library.IsLoggedOn() && ProjectId != null) { - var provider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; + var nodeListingProvider = new NodeListingProvider(); Member mem = Member.GetCurrentMember(); - IListingItem project = provider.GetListing((int)ProjectId); + IListingItem project = nodeListingProvider.GetListing((int)ProjectId); _defaultFile = project.CurrentReleaseFile; - if ((project.Vendor.Member.Id == mem.Id) || + if ((project.VendorId == mem.Id) || Utils.IsProjectContributor(mem.Id, (int)ProjectId)) { holder.Visible = true; RebindFiles(); - umbraco.library.RegisterJavaScriptFile("swfUpload", "/scripts/swfupload/SWFUpload.js"); - umbraco.library.RegisterJavaScriptFile("swfUpload_cb", "/scripts/swfupload/callbacks.js"); - umbraco.library.RegisterJavaScriptFile("swfUpload_progress", "/scripts/swfupload/fileprogress.js"); + library.RegisterJavaScriptFile("swfUpload", "/scripts/swfupload/SWFUpload.js"); + library.RegisterJavaScriptFile("swfUpload_cb", "/scripts/swfupload/callbacks.js"); + library.RegisterJavaScriptFile("swfUpload_progress", "/scripts/swfupload/fileprogress.js"); MemberGuid = mem.UniqueId.ToString(); ProjectGuid = project.ProjectGuid.ToString(); @@ -253,7 +230,7 @@ namespace uProject.usercontrols.Deli.Package.Steps string defaultVersion = UmbracoVersion.DefaultVersion().Version; string umboptions = ""; - foreach (UmbracoVersion uv in UmbracoVersion.AvailableVersions().Values) + foreach (OurUmbraco.Wiki.BusinessLogic.UmbracoVersion uv in UmbracoVersion.AvailableVersions().Values) { string selected = "checked='true'"; if (uv.Version != defaultVersion) @@ -263,8 +240,8 @@ namespace uProject.usercontrols.Deli.Package.Steps lt_versions.Text = umboptions; - - string[] dotnetversions = {"2.0","3.5","4.0", "4.5"}; + + string[] dotnetversions = { "2.0", "3.5", "4.0", "4.5" }; string dotnetoptions = string.Empty; foreach (var opt in dotnetversions) @@ -294,7 +271,7 @@ namespace uProject.usercontrols.Deli.Package.Steps lt_trustlevels.Text = trustoptions; - + } @@ -305,7 +282,7 @@ namespace uProject.usercontrols.Deli.Package.Steps protected void SaveStep(object sender, EventArgs e) { //move to the file upload step - ProjectCreatorHelper.MoveToNextStep(this,(int)ProjectId); + ProjectCreatorHelper.MoveToNextStep(this, (int)ProjectId); } protected void MoveLast(object sender, EventArgs e) { diff --git a/Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx b/Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx deleted file mode 100644 index 8586d4a9..00000000 --- a/Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx +++ /dev/null @@ -1,137 +0,0 @@ -<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Licenses.ascx.cs" Inherits="uProject.usercontrols.Deli.Package.Steps.Licenses" %> - -
- - -
- Edit License Type -

- - - -

- -

- - -

- -
- -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
License TypePrice 
- - - - -   - - -
- -
- NOTE: Only licenses types that have not been purchased by users can be deleted. If a license has been purchased you may disable it. - -
- Create License Type -

- - - - - - - - -

- -

- - -

- -

- -

- -
-

Your Vendor Key

- - Generate your project key. This will generate a unique key for your project. This step can only be done once so click wisely. - - - Download your Vendor Key for your project. This License Key file is used in your code when you implement Deli Licensing in your project. - -

Your Packages Unique Deli Id

-

-
-
-   - -
-
-
-
- - -
\ No newline at end of file diff --git a/Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx.cs b/Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx.cs deleted file mode 100644 index a53ccd99..00000000 --- a/Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Web.UI; -using System.Web.UI.WebControls; -using uProject.Helpers; - -namespace uProject.usercontrols.Deli.Package.Steps -{ - public partial class Licenses : UserControl - { - private Guid _projectGuid; - - - private bool _editMode - { - get - { - if (!string.IsNullOrEmpty(Request["projectId"])) - { - return true; - } - return false; - } - } - - private int? _projectId; - public int? ProjectId - { - get - { - if (!string.IsNullOrEmpty(Request["id"])) - { - _projectId = Int32.Parse(Request["id"]); - } - return _projectId; - } - set - { - _projectId = value; - } - } - - - private void ReBindLicenses() - { - } - - protected void EditLicense(object sender, CommandEventArgs e) - { - } - - protected void UpdateLicense_Click(object sender, EventArgs e) - { - } - - - protected void DeleteLicense(object sender, CommandEventArgs e) - { - } - - protected void DisableEnableLicense(object sender, CommandEventArgs e) - { - } - - protected void OnLicenseBound(object sender, RepeaterItemEventArgs e) - { - } - - - - protected void SaveLicense_Click(object sender, EventArgs e) - { - } - - - protected void Page_Load(object sender, EventArgs e) - { - } - - protected void GenKey_Click(object sender, EventArgs e) - { - } - - protected void DownloadKey_Click(object sender, EventArgs e) - { - } - - protected void SaveStep(object sender, EventArgs e) - { - //move to the license step - ProjectCreatorHelper.MoveToNextStep(this, (int)ProjectId); - } - - protected void MoveLast(object sender, EventArgs e) - { - //move to the screenshots step - ProjectCreatorHelper.MoveToPreviousStep(this, (int)ProjectId); - } - } -} \ No newline at end of file diff --git a/Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx.designer.cs b/Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx.designer.cs deleted file mode 100644 index 2c38635d..00000000 --- a/Marketplace/usercontrols/Deli/Package/Steps/Licenses.ascx.designer.cs +++ /dev/null @@ -1,168 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace uProject.usercontrols.Deli.Package.Steps { - - - public partial class Licenses { - - /// - /// holder control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder holder; - - /// - /// EditForm control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder EditForm; - - /// - /// EditLicenseType control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox EditLicenseType; - - /// - /// EditLicensePrice control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox EditLicensePrice; - - /// - /// UpdateLicense control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button UpdateLicense; - - /// - /// rp_licenses control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Repeater rp_licenses; - - /// - /// CreateForm control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder CreateForm; - - /// - /// licenseTypes control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.DropDownList licenseTypes; - - /// - /// price control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox price; - - /// - /// btn_SaveLicense control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button btn_SaveLicense; - - /// - /// GenKeyPlaceHolder control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder GenKeyPlaceHolder; - - /// - /// GenKey control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.LinkButton GenKey; - - /// - /// DownloadKeyPlaceHolder control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder DownloadKeyPlaceHolder; - - /// - /// DownloadKey control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.LinkButton DownloadKey; - - /// - /// uniqueId control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal uniqueId; - - /// - /// MovePrevious control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.LinkButton MovePrevious; - - /// - /// MoveNext control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button MoveNext; - } -} diff --git a/Marketplace/usercontrols/Deli/Package/Steps/Screenshots.ascx.cs b/Marketplace/usercontrols/Deli/Package/Steps/Screenshots.ascx.cs index c2ebd924..52711429 100644 --- a/Marketplace/usercontrols/Deli/Package/Steps/Screenshots.ascx.cs +++ b/Marketplace/usercontrols/Deli/Package/Steps/Screenshots.ascx.cs @@ -1,20 +1,19 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Web; -using System.Web.UI; using System.Web.UI.WebControls; -using Marketplace.Providers; -using umbraco.cms.businesslogic.member; using our; -using Marketplace.Umbraco.BusinessLogic; -using Marketplace.Providers.Helpers; using OurUmbraco.MarketPlace.Interfaces; +using OurUmbraco.MarketPlace.NodeListing; +using OurUmbraco.MarketPlace.Providers; +using OurUmbraco.Wiki.BusinessLogic; +using umbraco; +using umbraco.cms.businesslogic.member; using uProject.Helpers; +using Umbraco.Web.UI.Controls; namespace uProject.usercontrols.Deli.Package.Steps { - public partial class Screenshots : System.Web.UI.UserControl + public partial class Screenshots : UmbracoUserControl { public string MemberGuid = ""; @@ -46,8 +45,8 @@ namespace uProject.usercontrols.Deli.Package.Steps private void RebindFiles() { - var fileProvider = (IMediaProvider)MarketplaceProviderManager.Providers["MediaProvider"]; - var files = fileProvider.GetMediaFilesByProjectId((int)ProjectId).Where(x=>x.FileType == FileType.screenshot); + var mediaProvider = new MediaProvider(); + var files = mediaProvider.GetMediaFilesByProjectId((int)ProjectId).Where(x=>x.FileType == FileType.screenshot.FileTypeAsString()); if (string.IsNullOrEmpty(_defaultFile)) { @@ -67,31 +66,28 @@ namespace uProject.usercontrols.Deli.Package.Steps protected void DeleteFile(object sender, CommandEventArgs e) { - var fileProvider = (IMediaProvider)MarketplaceProviderManager.Providers["MediaProvider"]; - var f = fileProvider.GetFileById(int.Parse(e.CommandArgument.ToString())); + var mediaProvider = new MediaProvider(); + var f = mediaProvider.GetFileById(int.Parse(e.CommandArgument.ToString())); _defaultFile = string.Empty; //update the project - var provider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - IListingItem project = provider.GetListing((int)ProjectId); + var nodeListingProvider = new NodeListingProvider(); + IListingItem project = nodeListingProvider.GetListing((int)ProjectId); project.DefaultScreenshot = _defaultFile; - provider.SaveOrUpdate(project); - - - + nodeListingProvider.SaveOrUpdate(project); + var mem = Member.GetCurrentMember(); if (f.CreatedBy == mem.Id || Utils.IsProjectContributor(mem.Id, (int)ProjectId)) - fileProvider.Remove(f); + mediaProvider.Remove(f); RebindFiles(); } protected void ArchiveFile(object sender, CommandEventArgs e) { - - var fileProvider = (IMediaProvider)MarketplaceProviderManager.Providers["MediaProvider"]; - var f = fileProvider.GetFileById(int.Parse(e.CommandArgument.ToString())); + var mediaProvider = new MediaProvider(); + var f = mediaProvider.GetFileById(int.Parse(e.CommandArgument.ToString())); if (e.CommandName == "Unarchive") { @@ -102,7 +98,7 @@ namespace uProject.usercontrols.Deli.Package.Steps f.Archived = true; } - fileProvider.SaveOrUpdate(f); + mediaProvider.SaveOrUpdate(f); RebindFiles(); } @@ -110,7 +106,7 @@ namespace uProject.usercontrols.Deli.Package.Steps { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { - IMediaFile f = (IMediaFile)e.Item.DataItem; + WikiFile f = (WikiFile)e.Item.DataItem; Image _image = (Image)e.Item.FindControl("img_image"); Literal _date = (Literal)e.Item.FindControl("lt_date"); Button _delete = (Button)e.Item.FindControl("bt_delete"); @@ -147,10 +143,10 @@ namespace uProject.usercontrols.Deli.Package.Steps private void MarkFileAsCurrent(string defaultScreenshot) { - var provider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - IListingItem project = provider.GetListing((int)ProjectId); + var nodeListingProvider = new NodeListingProvider(); + IListingItem project = nodeListingProvider.GetListing((int)ProjectId); project.DefaultScreenshot = defaultScreenshot; - provider.SaveOrUpdate(project); + nodeListingProvider.SaveOrUpdate(project); _defaultFile = project.DefaultScreenshot; } @@ -158,23 +154,23 @@ namespace uProject.usercontrols.Deli.Package.Steps { - if (umbraco.library.IsLoggedOn() && ProjectId != null) + if (library.IsLoggedOn() && ProjectId != null) { - var provider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; + var nodeListingProvider = new NodeListingProvider(); Member mem = Member.GetCurrentMember(); - IListingItem project = provider.GetListing((int)ProjectId); + IListingItem project = nodeListingProvider.GetListing((int)ProjectId); _defaultFile = project.DefaultScreenshot; - if ((project.Vendor.Member.Id == mem.Id) || + if ((project.VendorId == mem.Id) || Utils.IsProjectContributor(mem.Id, (int)ProjectId)) { holder.Visible = true; RebindFiles(); - umbraco.library.RegisterJavaScriptFile("swfUpload", "/scripts/swfupload/SWFUpload.js"); - umbraco.library.RegisterJavaScriptFile("swfUpload_cb", "/scripts/swfupload/callbacks.js"); - umbraco.library.RegisterJavaScriptFile("swfUpload_progress", "/scripts/swfupload/fileprogress.js"); + library.RegisterJavaScriptFile("swfUpload", "/scripts/swfupload/SWFUpload.js"); + library.RegisterJavaScriptFile("swfUpload_cb", "/scripts/swfupload/callbacks.js"); + library.RegisterJavaScriptFile("swfUpload_progress", "/scripts/swfupload/fileprogress.js"); MemberGuid = mem.UniqueId.ToString(); ProjectGuid = project.ProjectGuid.ToString(); diff --git a/Marketplace/usercontrols/Deli/Profile/MyProjects.ascx.cs b/Marketplace/usercontrols/Deli/Profile/MyProjects.ascx.cs index ece3626a..a98460db 100644 --- a/Marketplace/usercontrols/Deli/Profile/MyProjects.ascx.cs +++ b/Marketplace/usercontrols/Deli/Profile/MyProjects.ascx.cs @@ -1,15 +1,11 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; -using Marketplace.Providers; -using OurUmbraco.MarketPlace.Interfaces; +using OurUmbraco.MarketPlace.NodeListing; +using Umbraco.Web.UI.Controls; namespace uProject.usercontrols.Deli.Profile { - public partial class MyProjects : System.Web.UI.UserControl + public partial class MyProjects : UmbracoUserControl { public int edit { get; set; } public int forum { get; set; } @@ -27,18 +23,15 @@ namespace uProject.usercontrols.Deli.Profile forumUrl = umbraco.library.NiceUrl(forum); licenseUrl = umbraco.library.NiceUrl(licenses); teamUrl = umbraco.library.NiceUrl(team); + + var nodeListingProvider = new NodeListingProvider(); + var memberId = Members.GetCurrentMemberId(); - - var memberProvider = (IMemberProvider)MarketplaceProviderManager.Providers["MemberProvider"]; - var member = memberProvider.GetCurrentMember(); - var provider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - - - var projects = provider.GetListingsByVendor(member.Id, true, true).OrderBy(x=> x.Name); + var projects = nodeListingProvider.GetListingsByVendor(memberId, true, true).OrderBy(x=> x.Name); myProjects.DataSource = projects; myProjects.DataBind(); - var contribProjects = provider.GetListingsForContributor(member.Id); + var contribProjects = nodeListingProvider.GetListingsForContributor(memberId); myTeamProjects.DataSource = contribProjects; myTeamProjects.DataBind(); } diff --git a/OurUmbraco.Site/OurUmbraco.Site.csproj b/OurUmbraco.Site/OurUmbraco.Site.csproj index 8f647a44..e0a0b1d5 100644 --- a/OurUmbraco.Site/OurUmbraco.Site.csproj +++ b/OurUmbraco.Site/OurUmbraco.Site.csproj @@ -141,12 +141,6 @@ ..\packages\MarkdownSharp.1.13.0.0\lib\35\MarkdownSharp.dll - - ..\dependencies\MarketPlace\Marketplace.Providers.dll - - - ..\dependencies\MarketPlace\Marketplace.Umbraco.dll - ..\packages\UmbracoCms.Core.7.2.8-build103\lib\Microsoft.ApplicationBlocks.Data.dll True @@ -458,9 +452,6 @@ - - - @@ -4341,25 +4332,20 @@ - - - - - diff --git a/OurUmbraco.Site/Views/MacroPartials/Members/PublicProfile.cshtml b/OurUmbraco.Site/Views/MacroPartials/Members/PublicProfile.cshtml index ba7eb420..206bedce 100644 --- a/OurUmbraco.Site/Views/MacroPartials/Members/PublicProfile.cshtml +++ b/OurUmbraco.Site/Views/MacroPartials/Members/PublicProfile.cshtml @@ -1,6 +1,5 @@ @inherits Umbraco.Web.Macros.PartialViewMacroPage -@using Marketplace.Interfaces -@using Marketplace.Providers +@using System.Configuration @using OurUmbraco.Forum.Extensions @using OurUmbraco.Forum.Services @{ @@ -22,10 +21,21 @@ var roles = member.GetRoles(); - var provider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - var projects = provider.GetListingsByVendor(member.Id, true, true).OrderByDescending(x => x.CreateDate); + var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); + var content = umbracoHelper.TypedContent(int.Parse(ConfigurationManager.AppSettings["deliProjectRoot"])); + IEnumerable projects = new List(); + var contribProjects = new List(); + if (content != null) + { + projects = content.Descendants().Where(c => c.DocumentTypeAlias == "Project").Where(m => m.GetPropertyValue("owner") == member.Id).Where(p => p.GetPropertyValue("projectLive")); + const string sql = @"SELECT * FROM projectContributors WHERE memberId=@memberId"; + var contribPackageIds = UmbracoContext.Application.DatabaseContext.Database.Fetch(sql, new { memberId }); + foreach (var contribPackageId in contribPackageIds) + { + contribProjects.Add(umbracoHelper.TypedContent(contribPackageId)); + } + } - var contribProjects = provider.GetListingsForContributor(member.Id).OrderByDescending(x => x.CreateDate); var currentMember = Members.GetCurrentMember(); var reputationCurrent = member.GetPropertyValue("reputationCurrent"); @@ -124,24 +134,24 @@

Packages created

- @foreach (var project in projects.Where(x => x.Live)) + @foreach (var project in projects.Where(x => x.GetPropertyValue("projectLive")).OrderByDescending(x => x.CreateDate)) { - +
- @if (string.IsNullOrWhiteSpace(project.DefaultScreenshot.Trim())) + @if (string.IsNullOrWhiteSpace(project.GetPropertyValue("defaultScreenshotPath").Trim())) { } else { - @project.Name + @project.Name }

@project.Name

-

@Umbraco.StripHtml(Umbraco.Truncate(project.Description, 120))

+

@Umbraco.StripHtml(Umbraco.Truncate(project.GetPropertyValue("description"), 120))

@@ -157,24 +167,24 @@

Packages contributed to

- @foreach (var project in contribProjects.Where(x => x.Live)) + @foreach (var project in contribProjects.Where(x => x.GetPropertyValue("projectLive")).OrderByDescending(x => x.CreateDate)) { -
+
- @if (string.IsNullOrWhiteSpace(project.DefaultScreenshot.Trim())) + @if (string.IsNullOrWhiteSpace(project.GetPropertyValue("defaultScreenshotPath").Trim())) { } else { - @project.Name + @project.Name }

@project.Name

-

@Umbraco.StripHtml(Umbraco.Truncate(project.Description, 120))

+

@Umbraco.StripHtml(Umbraco.Truncate(project.GetPropertyValue("description"), 120))

diff --git a/OurUmbraco.Site/macroScripts/repository-popularpackages.cshtml b/OurUmbraco.Site/macroScripts/repository-popularpackages.cshtml deleted file mode 100644 index eac3da64..00000000 --- a/OurUmbraco.Site/macroScripts/repository-popularpackages.cshtml +++ /dev/null @@ -1,165 +0,0 @@ -@using Marketplace.Interfaces -@using Marketplace.Providers -@using System.Xml; -@using System.Xml.XPath; -@using OurUmbraco.Powers.Library -@using Umbraco.Core - -@{ - var projectsProvider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - var take = 30; - - var wrapperClass = "notLoggedIn"; - - var qs = Request.RawUrl.Substring( Request.RawUrl.IndexOf('?')+1 ); - - var version = "v45"; - if(Request.QueryString["version"] != null){ - version = Request.QueryString["version"].ToLower(); - } - - const string uniqueWhatever = "E295637E-E957-4CCA-92CE-BF5D58F9FF59"; - var cacheKey = uniqueWhatever + "[" + version + "]"; - var cache = ApplicationContext.Current.ApplicationCache.RuntimeCache; - IEnumerable projects = (IEnumerable) cache.GetCacheItem(cacheKey, () => - { - return projectsProvider - .GetListingsByKarma(0, take, true, false) - .Where(x => !x.NotAPackage && - (string.Join("", x.UmbracoVerionsSupported).Contains("nan") || - string.Join("", x.UmbracoVerionsSupported).Contains(version))); - }, TimeSpan.FromMinutes(10)); - //var projects = projectsProvider - // .GetListingsByKarma(0, take, true, false) - // .Where(x => !x.NotAPackage && - // (string.Join("",x.UmbracoVerionsSupported).Contains("nan") || - // string.Join("",x.UmbracoVerionsSupported).Contains(version) ) ); - - var pUrl = "/repo_viewproject?" + qs + "&project_id="; - var favs = new List(); - - - if(umbraco.library.IsLoggedOn()){ - wrapperClass = "loggedIn"; - - var memId = umbraco.cms.businesslogic.member.Member.GetCurrentMember().Id; - - var iterator = Xslt.ItemsVotedFor(memId, "powersproject").Current.Select("//id"); - while (iterator.MoveNext() && iterator.CurrentPosition < 20) - { - var node = (IHasXmlNode)iterator.Current; - - if(node != null){ - string id = umbraco.xmlHelper.GetNodeValue(node.GetNode()); - - if(id != null){ - try{ - var project = projectsProvider.GetListing(int.Parse(id), false); - if(project != null){ - favs.Add(project); - } - }catch{ - //do nothing - } - } - } - } - - favs = favs.Where(x => !x.NotAPackage && (string.Join("",x.UmbracoVerionsSupported).Contains("nan") || string.Join("",x.UmbracoVerionsSupported).Contains(version) )).ToList(); - } - - } - - -
- - - -@if(favs.Count() > 0){ -
-

Your favorites

-

This is your favourites, based on your karma votes and downloads

-
    -@foreach(var project in @favs) -{ -
  • -
    - -
    - - @{ - var screenShot = project.DefaultScreenshot; - var image = string.IsNullOrEmpty(screenShot) == false ? screenShot + "?width=50&height=50&bgcolor=fff" : "/css/img/package2.png"; - } - Package - -

    @project.Name

    - -
    @uProject.library.GetCategoryName((int)project.Id)
    - - -
    - - - -
    -
    - @project.Karma - Karma -
    -
    - @project.Downloads - Downloads -
    -
    -
    -
  • -} -
-
-}else{ - Log in to see your favourites -} -
diff --git a/OurUmbraco.Site/macroScripts/repository-view-category.cshtml b/OurUmbraco.Site/macroScripts/repository-view-category.cshtml deleted file mode 100644 index ffe2b8ba..00000000 --- a/OurUmbraco.Site/macroScripts/repository-view-category.cshtml +++ /dev/null @@ -1,91 +0,0 @@ -@using Marketplace.Interfaces -@using Marketplace.Providers -@using Umbraco.Core - -@{ - - var id = int.Parse(Request.QueryString["category_id"]); - var categoryProvider = (ICategoryProvider)MarketplaceProviderManager.Providers["CategoryProvider"]; - var category = categoryProvider.GetCategory(id); - var fullversion = Request.QueryString["fullversion"]; - - var version = "v45"; - if (Request.QueryString["version"] != null) - { - version = Request.QueryString["version"].ToLower(); - } - - if (!string.IsNullOrEmpty(fullversion) && fullversion.Substring(0, 1) == "7") - { - version = "v7"; - } - - var ProjectsProvider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - var qs = Request.RawUrl.Substring(Request.RawUrl.IndexOf('?') + 1).Replace("&category_id=" + id, ""); - - const string uniqueWhatever = "254D2E95-4E57-4777-AC01-2F45B28E942C"; - var cacheKey = uniqueWhatever + "[" + category.Id + "]"; - var cache = ApplicationContext.Current.ApplicationCache.RuntimeCache; - IEnumerable projects = (IEnumerable) cache.GetCacheItem(cacheKey, () => - ProjectsProvider - .GetListingsByCategory(category, true, true) - .Where(x => !x.NotAPackage && x.Approved && - (string.Join("", x.UmbracoVerionsSupported).Contains("nan") || - string.Join("", x.UmbracoVerionsSupported).Contains(version))), - TimeSpan.FromMinutes(10)); - - var pUrl = "/repo_viewproject?" + qs + "&project_id="; -} - - - - -
-

@category.Name

- -
    - @foreach (var project in projects) - { -
  • -
    - -
    - @{ - var screenShot = project.DefaultScreenshot; - var image = string.IsNullOrEmpty(screenShot) == false ? screenShot + "?width=50&height=50&bgcolor=fff" : "/css/img/package2.png"; - } - Package - -

    @project.Name

    - -
    @uProject.library.GetCategoryName((int)project.Id)
    - - -
    @project.ListingType
    -
    - - - -
    -
    - @project.Karma - Karma -
    -
    - @project.Downloads - Downloads -
    -
    -
    -
  • - - } -
-
diff --git a/OurUmbraco.Site/macroScripts/repository-view-project.cshtml b/OurUmbraco.Site/macroScripts/repository-view-project.cshtml deleted file mode 100644 index 084d3217..00000000 --- a/OurUmbraco.Site/macroScripts/repository-view-project.cshtml +++ /dev/null @@ -1,150 +0,0 @@ -@using Marketplace.Interfaces -@using Marketplace.Providers - -@{ - var ProjectsProvider = (IListingProvider)MarketplaceProviderManager.Providers["ListingProvider"]; - var projectId = int.Parse(Request.QueryString["project_id"]); - - var qs = Request.RawUrl.Substring( Request.RawUrl.IndexOf('?')+1 ).Replace("&project_id=" + projectId, ""); - var callback = Request.QueryString["callback"]; - - var Project = ProjectsProvider.GetListing(projectId, false); - var parentId = new umbraco.NodeFactory.Node(projectId).Parent.Id; - - var pUrl = "repo/project?id="; - - string descCssClass = "noWrap"; - string ProjectCompatitbleWithUmbraco = "4.0"; - string ProjectCompatitbleWithDotNet = "4.0"; - string ProjectCompatitbleWithMediumTrust = "No"; - - if(Project.Description.Length > 2000){ - descCssClass = "wrap";} - - var file = Project.PackageFile.Where(x => x.Id == Int32.Parse(Project.CurrentReleaseFile)).FirstOrDefault(); - if (file != null) - { - var ct = "This project is compaitible with "; - var c = file.UmbVersion.Count; - - var coms = file.UmbVersion; - - if (c > 2) - { - coms = file.UmbVersion.Take(2).ToList(); - } - - foreach (var com in coms) - { - - ct += com.Name + ", "; - } - - ct = ct.Trim().TrimEnd(','); - - if (c > 2) - { - ct += " and " + (c - 2) + " other versions."; - } - - - ProjectCompatitbleWithUmbraco= ct; - ProjectCompatitbleWithDotNet= file.DotNetVersion; - ProjectCompatitbleWithMediumTrust= (file.SupportsMediumTrust) ? "Yes" : "No"; - } -} - - - - - - - -
- -

@Project.Name - Install package -

- -
- - -
- -
-
Project owner:
-
@Project.Vendor.Member.Name
- -
Package downloads
-
@Project.Downloads
- -
Package karma
-
@Project.Karma
- - -
Compatibility:
-
-@ProjectCompatitbleWithUmbraco
-.NET Version: @ProjectCompatitbleWithDotNet
-Supports Medium Trust: @ProjectCompatitbleWithMediumTrust -
-
Created:
-
- @Project.CreateDate.ToString("D") -
- - - @if(Project.Stable){ -
Is Stable:
-
- Project is stable -
- } - -
Current version
-
- @Project.CurrentVersion -
- - @if (!string.IsNullOrEmpty(Project.LicenseName)) - { -
License
-
- @Project.LicenseName -
- } -
-
- -
-
- -
- @Html.Raw(Project.Description) -
- -
- - @if(Project.ScreenShots.Count() > 0){ - -
-

Screenshots

- @foreach(var image in Project.ScreenShots){ - - - - } -
- -
- } - - - -
diff --git a/OurUmbraco.Site/usercontrols/Deli/FeaturedProject.ascx b/OurUmbraco.Site/usercontrols/Deli/FeaturedProject.ascx deleted file mode 100644 index f2a45bac..00000000 --- a/OurUmbraco.Site/usercontrols/Deli/FeaturedProject.ascx +++ /dev/null @@ -1,51 +0,0 @@ -<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="FeaturedProject.ascx.cs" Inherits="Marketplace.usercontrols.Deli.FeaturedProject" %> -<%@ Import Namespace="Marketplace.Interfaces" %> -<%@ Import Namespace="Marketplace.Providers.Helpers" %> - - - ">Featured Pakcage Titie - - - - - -
- - - - - -
-
- <%# Eval("Karma") %> - Karma -
-
- <%# Eval("Downloads") %> - Downloads -
-
-
-
-
\ No newline at end of file diff --git a/OurUmbraco.Site/usercontrols/Deli/NewestProjects.ascx b/OurUmbraco.Site/usercontrols/Deli/NewestProjects.ascx deleted file mode 100644 index 56391468..00000000 --- a/OurUmbraco.Site/usercontrols/Deli/NewestProjects.ascx +++ /dev/null @@ -1,79 +0,0 @@ -<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="NewestProjects.ascx.cs" Inherits="Marketplace.usercontrols.Deli.NewestProjects" %> -<%@ Import Namespace="Marketplace.Interfaces" %> -<%@ Import Namespace="Marketplace.Providers.Helpers" %> -<%@ Register Src="~/usercontrols/Deli/ListPagination.ascx" TagPrefix="deli" TagName="paging" %> - - -
- -
-

Latest Projects

- - - - - " class="viewAll">All new -
loading newest projects
-
- - -

Showing <%= PageStartListingNumber %> - <%=PageEndListingNumber %> of <%=TotalListings %> Projects

-
- - - - - -
- -
-
- - -
-

There are no listings that meet your filter criteria

-
-
- - \ No newline at end of file diff --git a/OurUmbraco.Site/usercontrols/Deli/Package/Steps/Licenses.ascx b/OurUmbraco.Site/usercontrols/Deli/Package/Steps/Licenses.ascx deleted file mode 100644 index 8586d4a9..00000000 --- a/OurUmbraco.Site/usercontrols/Deli/Package/Steps/Licenses.ascx +++ /dev/null @@ -1,137 +0,0 @@ -<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Licenses.ascx.cs" Inherits="uProject.usercontrols.Deli.Package.Steps.Licenses" %> - -
- - -
- Edit License Type -

- - - -

- -

- - -

- -
- -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
License TypePrice 
- - - - -   - - -
- -
- NOTE: Only licenses types that have not been purchased by users can be deleted. If a license has been purchased you may disable it. - -
- Create License Type -

- - - - - - - - -

- -

- - -

- -

- -

- -
-

Your Vendor Key

- - Generate your project key. This will generate a unique key for your project. This step can only be done once so click wisely. - - - Download your Vendor Key for your project. This License Key file is used in your code when you implement Deli Licensing in your project. - -

Your Packages Unique Deli Id

-

-
-
-   - -
-
-
-
- - -
\ No newline at end of file diff --git a/OurUmbraco.Site/usercontrols/Deli/PopularProjects.ascx b/OurUmbraco.Site/usercontrols/Deli/PopularProjects.ascx deleted file mode 100644 index b74d6708..00000000 --- a/OurUmbraco.Site/usercontrols/Deli/PopularProjects.ascx +++ /dev/null @@ -1,83 +0,0 @@ -<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PopularProjects.ascx.cs" Inherits="Marketplace.usercontrols.Deli.PopularProjects" %> -<%@ Import Namespace="Marketplace.Interfaces" %> -<%@ Import Namespace="Marketplace.Providers.Helpers" %> -<%@ Register Src="~/usercontrols/Deli/ListPagination.ascx" TagPrefix="deli" TagName="paging" %> - - -
- - - -
-
- - -
-

There are no listings that meet your filter criteria

-
-
- - \ No newline at end of file diff --git a/OurUmbraco.Site/usercontrols/Deli/ProjectsList.ascx b/OurUmbraco.Site/usercontrols/Deli/ProjectsList.ascx deleted file mode 100644 index 112f7a5f..00000000 --- a/OurUmbraco.Site/usercontrols/Deli/ProjectsList.ascx +++ /dev/null @@ -1,62 +0,0 @@ -<%@ Control Language="C#" AutoEventWireup="True" CodeBehind="ProjectsList.ascx.cs" Inherits="Marketplace.usercontrols.Deli.ProjectsList" %> -<%@ Import Namespace="Marketplace.Interfaces" %> -<%@ Import Namespace="Marketplace.Providers.Helpers" %> -<%@ Register Src="~/usercontrols/Deli/ListPagination.ascx" TagPrefix="deli" TagName="paging" %> - -
-
- - - -

Showing <%= PageStartListingNumber %> - <%=PageEndListingNumber %> of <%=TotalListings %> Projects

-
- - - - - - - - -
-

There are no listings that meet your filter criteria

-
-
- -
-
- - diff --git a/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/ListingCreatorStep.cs b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/ListingCreatorStep.cs new file mode 100644 index 00000000..10a82d8c --- /dev/null +++ b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/ListingCreatorStep.cs @@ -0,0 +1,32 @@ +using OurUmbraco.MarketPlace.Interfaces; + +namespace OurUmbraco.MarketPlace.BusinessLogic.ListingCreator +{ + public abstract class ListingCreatorStep : IListingCreatorStep + { + public abstract string Alias { get; } + public abstract string Name { get; } + public abstract string UserControl { get; } + public virtual int Index { get; set; } + + public virtual bool MoveToNextStepAutomaticly { get; set; } + + public virtual bool HideFromNavigation + { + get + { + return false; + } + } + public virtual bool CommercialOnly + { + get + { + return false; + } + } + + public virtual bool Completed { get; set; } + + } +} diff --git a/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/ListingCreatorStepCollection.cs b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/ListingCreatorStepCollection.cs new file mode 100644 index 00000000..9217e858 --- /dev/null +++ b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/ListingCreatorStepCollection.cs @@ -0,0 +1,61 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OurUmbraco.MarketPlace.BusinessLogic.ListingCreator +{ + public class ListingCreatorStepCollection : Dictionary + { + public void Add(ListingCreatorStep step, bool isDeliVendor) + { + step.Index = this.Count; + + if (!step.CommercialOnly) + Add(step.Alias, step); + else if (step.CommercialOnly && isDeliVendor) + Add(step.Alias, step); + } + + public ListingCreatorStep Get(string key) + { + return this.First(item => item.Key == key).Value; + } + + public bool StepExists(string key) + { + return ContainsKey(key); + } + + public ListingCreatorStep GotoNextStep(string key) + { + var s = this[key]; + + foreach (var listingCreatorStep in Values) + { + if (listingCreatorStep.Index > s.Index && !listingCreatorStep.Completed) + return listingCreatorStep; + } + + return null; + } + + public ListingCreatorStep GotoPreviousStep(string key) + { + var s = this[key]; + if (s.Index <= 0) + return null; + + foreach (var listingCreatorStep in Values) + { + if (listingCreatorStep.Index == (s.Index - 1)) + return listingCreatorStep; + } + + return null; + } + + public ListingCreatorStep FirstAvailableStep() + { + return this.First(item => item.Value.Completed == false).Value; + } + } +} diff --git a/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Complete.cs b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Complete.cs new file mode 100644 index 00000000..301d0938 --- /dev/null +++ b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Complete.cs @@ -0,0 +1,20 @@ +namespace OurUmbraco.MarketPlace.BusinessLogic.ListingCreator.StepDefinitions +{ + public class Complete : ListingCreatorStep + { + public override string Alias + { + get { return "complete"; } + } + + public override string Name + { + get { return "Creation Complete"; } + } + + public override string UserControl + { + get { return "~/usercontrols/deli/package/steps/complete.ascx"; } + } + } +} diff --git a/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Details.cs b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Details.cs new file mode 100644 index 00000000..cc298b66 --- /dev/null +++ b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Details.cs @@ -0,0 +1,20 @@ +namespace OurUmbraco.MarketPlace.BusinessLogic.ListingCreator.StepDefinitions +{ + public class Details : ListingCreatorStep + { + public override string Alias + { + get { return "details"; } + } + + public override string Name + { + get { return "Package Details"; } + } + + public override string UserControl + { + get { return "~/usercontrols/deli/package/steps/details.ascx"; } + } + } +} diff --git a/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Files.cs b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Files.cs new file mode 100644 index 00000000..ad342cdc --- /dev/null +++ b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Files.cs @@ -0,0 +1,20 @@ +namespace OurUmbraco.MarketPlace.BusinessLogic.ListingCreator.StepDefinitions +{ + public class Files : ListingCreatorStep + { + public override string Alias + { + get { return "files"; } + } + + public override string Name + { + get { return "Package Files"; } + } + + public override string UserControl + { + get { return "~/usercontrols/deli/package/steps/files.ascx"; } + } + } +} diff --git a/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Screenshots.cs b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Screenshots.cs new file mode 100644 index 00000000..90c6b612 --- /dev/null +++ b/OurUmbraco/MarketPlace/BusinessLogic/ListingCreator/StepDefinitions/Screenshots.cs @@ -0,0 +1,20 @@ +namespace OurUmbraco.MarketPlace.BusinessLogic.ListingCreator.StepDefinitions +{ + public class Screenshots : ListingCreatorStep + { + public override string Alias + { + get { return "screenshots"; } + } + + public override string Name + { + get { return "Screenshots"; } + } + + public override string UserControl + { + get { return "~/usercontrols/deli/package/steps/screenshots.ascx"; } + } + } +} diff --git a/OurUmbraco/MarketPlace/Extensions/NodeProviderExtensions.cs b/OurUmbraco/MarketPlace/Extensions/NodeProviderExtensions.cs index 004fa48a..3e0faf7f 100644 --- a/OurUmbraco/MarketPlace/Extensions/NodeProviderExtensions.cs +++ b/OurUmbraco/MarketPlace/Extensions/NodeProviderExtensions.cs @@ -1,4 +1,9 @@ -using OurUmbraco.MarketPlace.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using OurUmbraco.MarketPlace.Interfaces; +using OurUmbraco.MarketPlace.NodeListing; +using OurUmbraco.MarketPlace.Providers; using Umbraco.Core.Models; using Umbraco.Web; @@ -62,5 +67,61 @@ namespace OurUmbraco.MarketPlace.Extensions break; } } + + public static IEnumerable ToIListingItemList(this IEnumerable content, bool optimized) + { + var items = new List(); + foreach (var c in content) + { + yield return c.ToIListingItem(optimized); + } + } + + public static IListingItem ToIListingItem(this IPublishedContent content, bool optimized) + { + return new NodeListingProvider().GetListing(content, optimized); + } + + public static IEnumerable ToICategoryList(this IEnumerable contents) + { + List items = new List(); + foreach (var c in contents) + { + yield return c.ToICategory(); + } + } + + public static ICategory ToICategory(this IPublishedContent c) + { + var cat = new Category + { + Id = c.Id, + CategoryGuid = new Guid(c.GetPropertyValue("categoryGuid")), + Name = c.Name, + Description = c.GetPropertyValue("description"), + Image = c.GetPropertyAsMediaItem("icon"), + HQOnly = c.GetPropertyValue("hqOnly") == "1", + Url = c.Url, + ProjectCount = c.Descendants().Count(p => p.GetPropertyValue("projectLive") == 1) + }; + + return cat; + } + + public static string GetPropertyAsMediaItem(this IPublishedContent content, string field) + { + if (string.IsNullOrEmpty(content.GetPropertyValue(field)) == false) + { + var mItem = new umbraco.cms.businesslogic.media.Media(int.Parse(content.GetPropertyValue(field))); + + var propertyValue = string.Empty; + var property = mItem.getProperty("umbracoFile"); + if (property != null) + propertyValue = property.Value.ToString(); + + return propertyValue; + } + return string.Empty; + } } } diff --git a/OurUmbraco/MarketPlace/Interfaces/IListingCreatorStep.cs b/OurUmbraco/MarketPlace/Interfaces/IListingCreatorStep.cs new file mode 100644 index 00000000..e5db851c --- /dev/null +++ b/OurUmbraco/MarketPlace/Interfaces/IListingCreatorStep.cs @@ -0,0 +1,11 @@ +namespace OurUmbraco.MarketPlace.Interfaces +{ + public interface IListingCreatorStep + { + string Alias { get; } + bool Completed { get; set; } + string Name { get; } + string UserControl { get; } + bool HideFromNavigation { get; } + } +} diff --git a/OurUmbraco/MarketPlace/Interfaces/IMediaProvider.cs b/OurUmbraco/MarketPlace/Interfaces/IMediaProvider.cs index 178597ac..5a707e11 100644 --- a/OurUmbraco/MarketPlace/Interfaces/IMediaProvider.cs +++ b/OurUmbraco/MarketPlace/Interfaces/IMediaProvider.cs @@ -8,10 +8,10 @@ namespace OurUmbraco.MarketPlace.Interfaces public interface IMediaProvider { IEnumerable GetMediaForProjectByType(int projectId,FileType type); - IEnumerable GetMediaFilesByProjectId(int projectId); - void SaveOrUpdate(IMediaFile file); - IMediaFile GetFileById(int fileId); - void Remove(IMediaFile file); - IMediaFile CreateFile(string fileName, Guid listingVersionGuid, Guid vendorGuid, HttpPostedFile file, FileType fileType, List versions, string dotNetVersion, bool mediumTrust); + List GetMediaFilesByProjectId(int projectId); + void SaveOrUpdate(WikiFile file); + WikiFile GetFileById(int fileId); + void Remove(WikiFile file); + WikiFile CreateFile(string fileName, Guid listingVersionGuid, Guid vendorGuid, HttpPostedFile file, FileType fileType, List versions, string dotNetVersion, bool mediumTrust); } } diff --git a/OurUmbraco/MarketPlace/NodeLising/NodeListingProvider.cs b/OurUmbraco/MarketPlace/NodeListing/NodeListingProvider.cs similarity index 66% rename from OurUmbraco/MarketPlace/NodeLising/NodeListingProvider.cs rename to OurUmbraco/MarketPlace/NodeListing/NodeListingProvider.cs index 4de2af1e..a5ba049d 100644 --- a/OurUmbraco/MarketPlace/NodeLising/NodeListingProvider.cs +++ b/OurUmbraco/MarketPlace/NodeListing/NodeListingProvider.cs @@ -1,18 +1,17 @@ using System; using System.Collections.Generic; +using System.Configuration; using System.Linq; using OurUmbraco.MarketPlace.Extensions; using OurUmbraco.MarketPlace.Interfaces; -using OurUmbraco.MarketPlace.Models; -using OurUmbraco.Powers.BusinessLogic; -using OurUmbraco.Wiki.BusinessLogic; +using OurUmbraco.MarketPlace.Providers; using OurUmbraco.Wiki.Extensions; using umbraco; using umbraco.BusinessLogic; using Umbraco.Core.Models; using Umbraco.Web; -namespace OurUmbraco.MarketPlace.NodeLising +namespace OurUmbraco.MarketPlace.NodeListing { public class NodeListingProvider { /// @@ -33,6 +32,35 @@ namespace OurUmbraco.MarketPlace.NodeLising throw new NullReferenceException("Content is Null cannot find a node with the id:" + id); } + /// + /// get project listing based on GUID + /// + /// + /// if set performs less DB interactions to increase speed. + /// + public IListingItem GetListing(Guid guid, bool optimized = false) + { + var strGuid = guid.ToString().ToUpper(); + + var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); + + // we have to use the translate function to ensure that the casing is the same for comparison as there are GUIDS in the db in both upper and lowercase + var contents = + umbracoHelper.TypedContentAtXPath( + string.Format( + "//Project [@isDoc and translate(packageGuid,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = translate('{0}','ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')]", + strGuid)); + + var content = contents.FirstOrDefault(); + + if (content != null) + { + return content.ToIListingItem(optimized); + } + + throw new NullReferenceException("Node is Null cannot find a node with the guid:" + strGuid); + } + /// /// get listing /// @@ -82,7 +110,7 @@ namespace OurUmbraco.MarketPlace.NodeLising listingItem.LicenseKey = content.GetPropertyValue("licenseKey", ""); //this section was created to speed up loading operations and cut down on the number of database interactions - if (!optimized) + if (optimized == false) { listingItem.DocumentationFile = GetMediaForProjectByType(content.Id, FileType.docs); listingItem.ScreenShots = GetMediaForProjectByType(content.Id, FileType.screenshot); @@ -125,39 +153,10 @@ namespace OurUmbraco.MarketPlace.NodeLising public IEnumerable GetMediaForProjectByType(int projectId, FileType type) { - var wikiFiles = WikiFile.CurrentFiles(projectId); - - var mediaFiles = new List(); - - foreach (var wikiFile in wikiFiles) - { - var mediaFile = new MediaFile - { - Current = wikiFile.Current, - Archived = wikiFile.Archived, - CreateDate = wikiFile.CreateDate, - Name = wikiFile.Name, - Id = wikiFile.Id, - CreatedBy = wikiFile.CreatedBy, - DotNetVersion = wikiFile.DotNetVersion, - Downloads = wikiFile.Downloads, - FileType = (FileType)Enum.Parse(typeof(FileType), wikiFile.FileType), - FileVersion = wikiFile.NodeVersion, - Path = wikiFile.Path, - RemovedBy = wikiFile.RemovedBy, - SupportsMediumTrust = false, - UmbVersion = wikiFile.Versions, - Verified = wikiFile.Verified - }; - - if (mediaFiles.Contains(mediaFile) == false) - mediaFiles.Add(mediaFile); - } - - return mediaFiles; + var mediaProvider = new MediaProvider(); + return mediaProvider.GetMediaForProjectByType(projectId, type); } - /// /// Persists the listing object to the database /// @@ -191,7 +190,7 @@ namespace OurUmbraco.MarketPlace.NodeLising content.SetValue("packageGuid", listingItem.ProjectGuid.ToString()); content.SetValue("approved", (listingItem.Approved) ? "1" : "0"); content.SetValue("termsAgreementDate", listingItem.TermsAgreementDate); - content.SetValue("owner", listingItem.Vendor.Member.Id); + content.SetValue("owner", listingItem.VendorId); content.SetValue("websiteUrl", listingItem.ProjectUrl); content.SetValue("licenseKey", listingItem.LicenseKey); @@ -241,7 +240,93 @@ namespace OurUmbraco.MarketPlace.NodeLising listingItem.Id = content.Id; listingItem.NiceUrl = library.NiceUrl(listingItem.Id); + } + + /// + /// Gets all listings for a vendor + /// + /// + /// if set performs less DB interactions to increase speed. + /// If set returns both live and not live listings + /// + public IEnumerable GetListingsByVendor(int vendorId, bool optimized = false, bool all = false) + { + var contents = GetProjectsFromDeliProjectRoot(all).Where(c => c.GetPropertyValue("owner") == vendorId); + + return contents.ToIListingItemList(optimized); + } + + private static IEnumerable GetProjectsFromDeliProjectRoot(bool all) + { + var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); + var content = umbracoHelper.TypedContent(int.Parse(ConfigurationManager.AppSettings["deliProjectRoot"])); + if (content == null) + throw new Exception("Could not find the Deli project root."); + var contents = content.Descendants().Where(c => c.DocumentTypeAlias == "Project"); + + if (all == false) + contents = contents.Where(p => p.GetPropertyValue("projectLive")); + + return contents; + } + + /// + /// Returns a listing of projects that a specified member contributes to. + /// + /// + /// if set performs less DB interactions to increase speed. + /// if set returns both live and not live projects. + /// + public IEnumerable GetListingsForContributor(int memberId, bool optimized = false, bool all = false) + { + + var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); + var contribProjects = new List(); + const string sql = @"SELECT * FROM projectContributors WHERE memberId=@memberId"; + var contribPackageIds = UmbracoContext.Current.Application.DatabaseContext.Database.Fetch(sql, new { memberId }); + + foreach (var contribPackageId in contribPackageIds) + { + contribProjects.Add(umbracoHelper.TypedContent(contribPackageId)); + } + + var listings = new List(); + foreach (var contribItem in contribProjects) + { + listings.Add(GetListing(contribItem.Id, optimized, -1)); + } + + return listings; + } + + /// + /// gets a list of listings + /// + /// if set performs less DB interactions to increase speed. + /// if set returns both live and not live listings + /// + public IEnumerable GetAllListings(bool optimized = false, bool all = false) + { + return GetAllListings(0, 0, optimized, all); + } + + /// + /// gets paged list of listings + /// + /// + /// + /// if set performs less DB interactions to increase speed. + /// if set returns both live and not live listings + /// + public IEnumerable GetAllListings(int skip, int take, bool optimized = false, bool all = false) + { + var contents = GetProjectsFromDeliProjectRoot(all); + + if (take > 0) + contents = contents.Skip(skip).Take(take); + + return contents.ToIListingItemList(optimized); } } } diff --git a/OurUmbraco/MarketPlace/Providers/Category.cs b/OurUmbraco/MarketPlace/Providers/Category.cs new file mode 100644 index 00000000..7de47e7f --- /dev/null +++ b/OurUmbraco/MarketPlace/Providers/Category.cs @@ -0,0 +1,67 @@ +using System; +using OurUmbraco.MarketPlace.Interfaces; + +namespace OurUmbraco.MarketPlace.Providers +{ + public class Category : ICategory + { + + protected int _id; + protected Guid _categoryGuid; + protected string _name; + protected string _description; + protected string _image; + protected string _url; + protected int _projectCount; + protected bool _HQOnly; + + public int Id + { + get { return _id; } + set { _id = value; } + } + + + public Guid CategoryGuid + { + get { return _categoryGuid; } + set { _categoryGuid = value; } + } + + public string Name + { + get { return _name; } + set { _name = value; } + } + + public string Description + { + get { return _description; } + set { _description = value; } + } + + public string Image + { + get { return _image; } + set { _image = value; } + } + + public bool HQOnly + { + get { return _HQOnly; } + set { _HQOnly = value; } + } + + public string Url + { + get { return _url; } + set { _url = value; } + } + public int ProjectCount + { + get { return _projectCount; } + set { _projectCount = value; } + } + + } +} diff --git a/OurUmbraco/MarketPlace/Providers/MediaProvider.cs b/OurUmbraco/MarketPlace/Providers/MediaProvider.cs new file mode 100644 index 00000000..140f073c --- /dev/null +++ b/OurUmbraco/MarketPlace/Providers/MediaProvider.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Web; +using OurUmbraco.MarketPlace.Interfaces; +using OurUmbraco.MarketPlace.Models; +using OurUmbraco.Wiki.BusinessLogic; + +namespace OurUmbraco.MarketPlace.Providers +{ + public class MediaProvider : IMediaProvider + { + public IEnumerable GetMediaForProjectByType(int projectId, FileType type) + { + var wikiFiles = WikiFile.CurrentFiles(projectId); + + var mediaFiles = new List(); + + foreach (var wikiFile in wikiFiles) + { + var mediaFile = new MediaFile + { + Current = wikiFile.Current, + Archived = wikiFile.Archived, + CreateDate = wikiFile.CreateDate, + Name = wikiFile.Name, + Id = wikiFile.Id, + CreatedBy = wikiFile.CreatedBy, + DotNetVersion = wikiFile.DotNetVersion, + Downloads = wikiFile.Downloads, + FileType = (FileType)Enum.Parse(typeof(FileType), wikiFile.FileType), + FileVersion = wikiFile.NodeVersion, + Path = wikiFile.Path, + RemovedBy = wikiFile.RemovedBy, + SupportsMediumTrust = false, + UmbVersion = wikiFile.Versions, + Verified = wikiFile.Verified + }; + + if (mediaFiles.Contains(mediaFile) == false) + mediaFiles.Add(mediaFile); + } + + return mediaFiles; + } + /// + /// Get all the files that are associated with this project + /// + /// + /// + public List GetMediaFilesByProjectId(int projectId) + { + return WikiFile.CurrentFiles(projectId); + } + + /// + /// Get an media file by its Id + /// + /// + /// + public WikiFile GetFileById(int fileId) + { + return new WikiFile(fileId); + } + + /// + /// Save or update a media file back to the database. + /// + /// + public void SaveOrUpdate(WikiFile file) + { + var wf = file; + wf.Save(); + } + + private static string GetFileTypeAsString(FileType file) + { + switch (file) + { + case FileType.screenshot: + return "screenshot"; + break; + case FileType.package: + return "package"; + break; + case FileType.hotfix: + return "hotfix"; + break; + case FileType.docs: + return "docs"; + break; + case FileType.source: + return "source"; + break; + default: + return "package"; + break; + } + } + + public void Remove(WikiFile file) + { + file.Delete(); + } + + public WikiFile CreateFile(string fileName, Guid listingVersionGuid, Guid vendorGuid, HttpPostedFile file, FileType fileType, List v, string dotNetVersion, bool mediumTrust) + { + // we have to convert to the uWiki UmbracoVersion :( + + List vers = new List(); + + foreach (var ver in v) + { + vers.Add(UmbracoVersion.AvailableVersions()[ver.Version]); + } + + + //Create the Wiki File + var uWikiFile = WikiFile.Create(fileName, listingVersionGuid, vendorGuid, file, GetFileTypeAsString(fileType), vers); + //return the IMediaFile + + //Convert to Deli Media file + var MediaFile = GetFileById(uWikiFile.Id); + MediaFile.DotNetVersion = dotNetVersion; + SaveOrUpdate(MediaFile); + return MediaFile; + } + + public static string ToVersionString(List Versions) + { + var stringVers = string.Empty; + foreach (var ver in Versions) + { + stringVers += ver.Version + ","; + } + + return stringVers.TrimEnd(','); + + } + + + public static List GetVersionsFromString(string p) + { + var verArray = p.Split(','); + var verList = new List(); + foreach (var ver in verArray) + { + if (UmbracoVersion.AvailableVersions().ContainsKey(ver)) + verList.Add(UmbracoVersion.AvailableVersions()[ver]); + } + return verList; + } + + + } +} diff --git a/OurUmbraco/MarketPlace/Providers/ProjectTag.cs b/OurUmbraco/MarketPlace/Providers/ProjectTag.cs new file mode 100644 index 00000000..92f2d7f5 --- /dev/null +++ b/OurUmbraco/MarketPlace/Providers/ProjectTag.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using OurUmbraco.MarketPlace.Interfaces; + +namespace OurUmbraco.MarketPlace.Providers +{ + class ProjectTag : IProjectTag + + { + protected int _id; + protected string _text; + protected int _count; + protected int _liveCount; + + public int Id + { + get + { + return _id; + } + set + { + _id = value; + } + } + + public string Text + { + get + { + return _text; + } + set + { + _text = value; + } + } + + public int Count + { + get { return _count; } + set { _count = value; } + } + + public int LiveCount + { + get { return _liveCount; } + set { _liveCount = value; } + } + + public bool Equals(IProjectTag other) + { + return this.Id == other.Id; + } + } +} diff --git a/OurUmbraco/MarketPlace/Providers/UmbracoCategoryProvider.cs b/OurUmbraco/MarketPlace/Providers/UmbracoCategoryProvider.cs new file mode 100644 index 00000000..48ca83e1 --- /dev/null +++ b/OurUmbraco/MarketPlace/Providers/UmbracoCategoryProvider.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Linq; +using System.Web; +using OurUmbraco.MarketPlace.Extensions; +using OurUmbraco.MarketPlace.Interfaces; +using Umbraco.Web; + +namespace OurUmbraco.MarketPlace.Providers +{ + public class UmbracoCategoryProvider : ICategoryProvider + { + public IEnumerable GetAllCategories() + { + var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); + var content = umbracoHelper.TypedContent(int.Parse(ConfigurationManager.AppSettings["deliProjectRoot"])); + var contents = content.Descendants().Where(x => x.DocumentTypeAlias == "ProjectGroup"); + + return contents.ToICategoryList(); + } + + public ICategory GetCurrent() + { + var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); + var content = umbracoHelper.TypedContent(HttpContext.Current.Items["pageID"]); + + if (content.DocumentTypeAlias != "ProjectGroup") + { + throw new Exception("Content is not of the correct type"); + } + + return content.ToICategory(); + } + + public ICategory GetCategory(int id) + { + var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); + var content = umbracoHelper.TypedContent(id); + + if (content.DocumentTypeAlias != "ProjectGroup") + { + throw new Exception("Content is not of the correct type"); + } + + return content.ToICategory(); + } + + public ICategory GetCategory(Guid id) + { + throw new NotImplementedException(); + } + } +} diff --git a/OurUmbraco/MarketPlace/Providers/UmbracoProjectTagProvider.cs b/OurUmbraco/MarketPlace/Providers/UmbracoProjectTagProvider.cs new file mode 100644 index 00000000..79a7fe37 --- /dev/null +++ b/OurUmbraco/MarketPlace/Providers/UmbracoProjectTagProvider.cs @@ -0,0 +1,76 @@ +using System.Collections.Generic; +using System.Linq; +using OurUmbraco.MarketPlace.Interfaces; +using OurUmbraco.MarketPlace.NodeListing; +using umbraco.cms.businesslogic.Tags; + +namespace OurUmbraco.MarketPlace.Providers +{ + public class UmbracoProjectTagProvider : IProjectTagProvider + { + public IEnumerable GetAllTags(bool liveOnly = false) + { + if (!liveOnly) + { + return Tag.GetTags("project").Where(x => x.NodeCount > 2).Select(x => new ProjectTag() + { + Id = x.Id, + Text = x.TagCaption, + LiveCount = x.NodeCount + }); + } + + var tagList = new List(); + + var nodeListingProvider = new NodeListingProvider(); + + var projects = nodeListingProvider.GetAllListings(true); + + foreach (var p in projects) + { + foreach (var t in p.Tags) + if (tagList.Contains(t)) + { + tagList.Find(delegate (IProjectTag tag) + { + return tag.Id == t.Id; + }).LiveCount++; + } + else + { + t.LiveCount++; + tagList.Add(t); + } + } + + + return tagList; + } + + public IEnumerable GetTagsByProjectId(int projectId) + { + return Tag.GetTags(projectId).Select(x => new ProjectTag() + { + Id = x.Id, + Text = x.TagCaption, + Count = x.NodeCount + }); + } + + + public IProjectTag GetTagById(int id) + { + return Tag.GetTags("project").Where(x => x.Id == id).Select(y => new ProjectTag() + { + Id = y.Id, + Text = y.TagCaption, + Count = y.NodeCount + }).FirstOrDefault(); + } + + public void SetTags(int projectId, string tags) + { + Tag.AddTagsToNode(projectId, tags, "project"); + } + } +} diff --git a/OurUmbraco/OurUmbraco.csproj b/OurUmbraco/OurUmbraco.csproj index 8a7dc6db..e92a63cc 100644 --- a/OurUmbraco/OurUmbraco.csproj +++ b/OurUmbraco/OurUmbraco.csproj @@ -292,10 +292,17 @@ + + + + + + + @@ -312,7 +319,12 @@ - + + + + + + diff --git a/OurUmbraco/Wiki/BusinessLogic/WikiFile.cs b/OurUmbraco/Wiki/BusinessLogic/WikiFile.cs index 1d00175b..8b5d0adb 100644 --- a/OurUmbraco/Wiki/BusinessLogic/WikiFile.cs +++ b/OurUmbraco/Wiki/BusinessLogic/WikiFile.cs @@ -29,6 +29,7 @@ namespace OurUmbraco.Wiki.BusinessLogic public bool Archived { get; set; } public bool Verified { get; set; } + public bool SupportsMediumTrust => true; public List Versions { get; set; } public UmbracoVersion Version { get; set; } @@ -109,7 +110,7 @@ namespace OurUmbraco.Wiki.BusinessLogic return wikiFiles; } } - + private readonly Events _events = new Events(); private WikiFile() { } diff --git a/dependencies/MarketPlace/MarketPlace.Webservices.dll b/dependencies/MarketPlace/MarketPlace.Webservices.dll deleted file mode 100644 index bbee39af711c9f80b490e79d921e0d8694cde0a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14848 zcmeHO4RBmnbw2NB|5qFDu5H=z-&6d9Y*}l`vWe|Dj%~?yWGq{Ww>9m1RX!8e|45TCk+5`yWq(Cr~flQm?6bPmb1cm{U$uK3f#Qn~B zZ~wG1O+q`<&h*)P-aY5sd+zzW=ic{rHSo?mNFyR0pL6Gk9><-ptpa~PD1#ka@`V_E zF7&Oo$CW+bY8#%&I!3{^#_jZ^kxA$CR?!$S4ZD;#vU#I#-;gnBjhd;Jmhdu9^xzJn zJ&HyPm;HRWGTT{F+agMYXe}sym-^RN;BMe^7$2fp(pFu)nc#IJx(5j8d}(y}X70-W zYj+Q260U=gyN?@(iB7R2re9^EC}_(Di55=h{XX0v3fA$1z%Q@EQ$_Q55%}l20l*Vm zJ-va+Wk9Qx?bsP$qT69KI8f{Gsk^o!Tq)bkS?I{RQW+nXwE>^HYb(+AI#il>uwQYp zZYufcfz=qklt>Zkn+M4*g%CL&A6Ksf)WaR*Uv-hHy_b7KwR*}ON zafzK(;xZ7UE^(krTn=Ij1$^!EG0uYMa8i%!)&j z{ph)vd%_2P60|zdf)hR35_Cz15}|g3`@%UMy$xvlMF5=(Ac!#wiihn<)(+Z+F=>Y~ zmn@{RHw5Z3)rwUqD|py!7Y#zp+Zbr!v~g27R?naf+o#70Ufpyb zSTo0}Ap+6h%>IXn&fOHW*a@qb1;t~o|5{ySn)^DGR^n)OhB1iU+wwxnPAU~M?QFFP zi$7IG>MahfB1LLuCtd$(YH@AU>3P_JMKIk)xN_5DZ`H=0S#=gk2U zj=~fOT1aTQr}*v;N$M}`ZlNWKIrj6gA|&x{Uju%77k9ElYQ<)78`PldcacYctuU64nQC4bf^rQ?Ene)4i1=RS$g@bm{akq#*y}vy*-Y ziRw=VkW-a4{azjv56DDRCQb&hrUJZU?*xW~sXyD0{X7&+YM{;ho;{tpl_8hHJ?Id@3 z&Z{veHc_`;*QUH=#?2_~_gSd9;i3;kt1_>T0@04Sc5hX-Jzi}FkWDxeQ+jqWW(i} z3cFpupm+{rq`0NFtZ4ht?(K^AM1p*#qw7*#sh+N$ZY&i(A?E;RV{t8gAD&%s?}Nal zLq$8AA9uLNSFoQE|5E9;tETfxel}r)9rKu z?c0Kl@Jk{N(e$3b;_HPG`zy|_;`kKHO0mF1IZ~_`8 zgD2=h>I51iy{K}ZpM$cPt_p7rFQ#__`spL#Ea+bj=jbB(LHJovekqidk+~5+ZHeS)1zjI0 zMpn?R0v`Z`&Y&kK6+NS^p!Y@1sGt5c%9KRQ8ErAGYT3#m@%+wNq#*t)XgwlX!3KbZ z5Y@TDJK$l9NW&p`9HV{Uy$!s_l}iEtUfBxxOKJO5ZZ8&iiQ0?y0fClKZWs8Vx)c6A z5pGon4Z`(-;N6r&&v6gChgyLZJnTWdWl-s)hkc0*K7n}Hvlyq*gC6!hjML~55Bo93 z>GX_;y@GK%eaFLo2cC~!@~{@g0QRznEmD?4y8ucgYqnZh32c^!T>@T!-sWLD!3$8A zhh2e#a*%d;SOzkKH0WU^@Io~1VK;ymqJoFrrKFHmCq3)|r3cs@E;jG8%0_tlBQ8c4 zY3~Bow^THvby@~BxqX?7?bePU!iQ0Hpf%m972%83I9e0kK;P8L$k?2Ry{?^v_1jlU zPnls6?Qt=>KwpS+{HTX5(QgBG#>1}D@1i!^yh_H=N&P-rMzcCx>?7cpY9z6JDTlbx|nc zd+Tr>#;Vi?sL?8sGo7N-y5B?h(UvCe^!^I%kUm3zDjfvWXbe!NoY1+gN?RkliSmBw z`5{0beH747pK9vEk`Qd=aBu+ZDPidRn^W*8FqBY{5?_zK`kdQIAj@`>O_m5}mG z@E)aGxghkQGGCb!`n1wbt3w#Aa8=kQu$#EuP1l3~m27As+BRUna(n1;rC<4&v>ymP ziLnodmV^6+Pzvxg`nM@(Lr*JLD8HlAN{D!DT4CF}>DM8H<}2awtC+VHuwUs2zoulB zO!%A<6%986a-UCz+tt}Ur-;yEF0+|<*vwS^$F$Ek?*M8^mv4Iem?R%C_juC^r-TS$iIUAThO~H8eK?F zC~bgonfI}xO`nglEq^EQx#&u0 z`!C?$qP!MO=-oI%C26Iyq~*){&y+PSXLN&ZrEg#zGfdHq^t3NU9n=qa9X$aUp%?TN ze7zd&1@vdAO-lv#2;~yG8uVVF3<-P}O@VTR?gw<}5#LskyiMR?foXvm`V{(S=r8Cj zW$1qLDP^JGAn-=eHSI>}bE9zY5&FFX?-zJV;8Oz63jC2kQrH$npdqkL;8ua#1RfSx z7I=@qQv%NlB$Xu?0=Ei0EU+x_l=>LBX9beRZA0Ka0#6A%>%k#)uSUA`@gP&SO8cPht}^=Im4?I)1Xu0NxzSmQ)btGfZes_q5+Cux6Q z+Aj)xS;g^^{#~G|ai3WN=V@1Att+TJ3hoSb)Dv#;9*^A(Z9K^U2CzmI>{JZHh`x$e z1nnr!pekAnTW~g3C|Kbm`-Xmm!m-&oifEe zAmknMd|k=q<7i&rgC?DfW#_UZG&JQD%}Lrf@@_Lz^e~<(HRR1jK)g1Mo5e%@qvW_Z z#`fp4*OtuwQ8Qo6j%7_-cuhp^x$jusW4kS(*`ub7#{w3(&ucT?vuSv$U<$7uXMV4h zAIpxHY}3`H4wcbX=7`7H<2LKZq>EWAFH$SRTnhKup3RT4r&ym#yDwcdhqIHW7|)HN zVtTS5U20e=Q?zW_+&{YI$e}~q)0rcXvNLPuMrreOXEgT^f6PF39n#FG^F}kXVw5?9 zDy}!qKSmtU%=SFd%&6Mm#6prxx0~FsSHfIp1l4pVFJKjl8=6Wes`Jq>kJlrj}#=#C{ zCLJnGj@appl|nl;QgX6+({Xavcs7%oG$%)p=mYNUXgZf2g#!DrbiD;wkk#CuFPiok z*0n?ZZeLGxwyn|p%gtQQI)LR0drH|+Pc*a|%jV1-$DydxAR3&bSuCvcP*aW5HDZ|D z)5EESrB1WKlAW1IJ7&et4s9zHC&aqi(4Ek0W{pzpR;-PFt~vGX+F;MyBA2U52HqpM zv1C#SPRysV6bos`IcC|Tlyi$8B3*FP0j*Itwv!Tois~)~Zb=H(JIpDxSX7B+(Wsfr zx|s>ZScZAjjR85u^f(muFmD!QibrVh9*gHVyEQd+WeMs}nyIT03XI^wGMu)@&Eigc zTW>=DBio92X);oRft4ZVn3svP&2eBsZfZDN%$c>06>^{HWbAB#leU@JkUulACkyHP zR5Qc#eKVuiDookg@rhzHYuHYYnv>Y4npwT2ToFaO#;927IY!oiRq%EfPPoadvQBoS z-d@i5nt+P+o=ckcfN;BB zTM(o|U1{dh$ED@eRPw^lop=CZ{)msiA9DpZ}3wGFo>tVZ*SVU6YK$pWoBRt#&O zqhZU+jabKdq1C!V%79s%u<9mrPZ&~@5Phi|1L=Hvys=zWShY$i+hK*=P-!Ye_q4zZ zy|KVm`TgGFtS3lys1fqTp0zZXwsF3xRfz3VSZJP1nZ#X$=da1sJ212tUXjlA%Y4{! z-&zWz8i`8H@Ob^s-cl~N&)zXvC{Dqzd#qz{4whIETZrRY>1@OHanzll*EUhI`nYUi ztyj)6ta3$g%@o>kJY&itmIDP0=ObOMybPs}n)~eig;ADPQP2}3RTgTXKvKgNRCUC5 zZ)4iS8xywHasKe33RQa)N0Tj?Lx=jZ4uU_`n?o7wp-I}zRoTs z`O+lzQ>+?njj&={E?4QZeF}r*47szE&m3M`Sw6j%U9E0=viWPNCW8)4m|#|<;soVN z^?LA$iXGTnvTdYwO<;Ait{+MR)=_gW|Hh}EO|l%;lH8^wkDDYrZEKR86Fye&UE z2(x7;@mA5*lR3ht&&t43Op5l7oGDE=t`!UnNvUmxf|(!foycN$W^MbbJBOP-Lj|n+ zeG+1n6hvkNbG^GU-_hH+xSzT`>pp&d#j*DxntP}29 zIf{{0IJD#15{@KD5!B||#K5yAn4+`$msiJNr5R~NLQ8{BFK=K@t&hfVp9Rv6daFRv< zZQ4UwJPDcvH30`fvFIphqr#;nZ-nnq5hL<6-aJ0SbFfSsKU}Gw*T4)G=5WZsNDC4S zz+-3|Xiq>Ma~fx-CH>$Zr8J%^S;Hp&#nbsY$Q&2l42;Ulm;zc3{v89)1|>zbzi}SJ zo882nbzvI}%xS?>M}YCnJhrBJ26&#v(0`mt;BcR}VlUfOiw1R0*Q*cnH2Q1@st^0B zNVH}LW_EpTKo1kNN?cg`ddZuhJ9WPC{%z>J7jtuz()iTJpiwgW4z|a);L;qxhnbtxS9I94DGnke)bN!e?wLkD}Jg(K{#6 zGUxzkHrmi=QGNC`<$32d=vjhgoRzh>PGG*HkjGYMBr=>iv~+r0Dj7T`QrK=R@`KFF7XcFV>$klQrSHo9k|d@CxAU zqVmnt4RDuRW5QRAawpDuj&Q}YDfLU2iwRF(QMYj^xKvI~Q;f*b6fe6=Ii;EnIfhX3 zvU5#Mi_z|KH>=5xAgtf?(+@w@GTe9HozK#DU!HiCf`5DB;8pY2oxLUa$YqDFk3SdQ zq~W_D-B6Su8ZmCf&``MnK=BqITJaXp6xAP8{V~eb^sa&plkqYF5@o=hhrh$pPd4pkCPL{Vqw#oHI*lB%N}1- zzD;`VKjv*>IM-I+SEUX(S?q=UZ0xKyX6Ufm@E#B@<*&8zZ?)k)s9c&iOGP`KTWt)M zMsnEW*QG8K2peM>dMle*K9rOO8e3L@g*F6HIDyJx? z@hwRsw%V9+NG-9t-)Lgx@nnHtDO6(>bfednU`=lm2e!FTh5L9_g@ltpT6l44n>9;8 zsN+gCnjFQpq$hz>pdzANR_MAJRj+?9Q{VpYwls(eP<{pZJqziJte?+GUw$RATt#}r zz5#_6ruOa_uD&5zU0JL64a)jdHD2P;+505 zIfa);dFNo|F~&K#-+fT~X8MFS%{h z@cLHeZ!laMzD=-9vln= zqL+JGZkF_b^yz}#?!R?-dV>$}8(_}yUd%R0{9KdA!D=t=e0Jt*01`8hYhi8+T46ck zx0v%VrZPt#dg8^s%w1^EZ2)p?dEP0?iIk6lCXQ_f07o!}pNjaj&QyM^?7}Lp$-PSW zPMxjY7~56-upSH1pS@L-zIn`-tJD6?&7Z=_mrwopJ1TsCuHeZLFPTIld#3=uuy@CC ztYjZF(+qkD3Ek{31HYQ-!uR~BbGQzR&ig!B94*$l;!DO{&%agO2PHP{(@EvIrZJvx zE+*?FCXMo@M`n6lHprN5h$+XI-xKh0-9VOe#A^|qK299;hk!x%Z^j;RUHykh`v0;2 H2R-ngxnWQi diff --git a/dependencies/MarketPlace/Marketplace.BusinessLogic.dll b/dependencies/MarketPlace/Marketplace.BusinessLogic.dll deleted file mode 100644 index 0617d6a79fc2569bc5a3953e76991a3e359ea9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11264 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 ZS9(&Y4+Hl5|7UQL|MScLU;pPS@Soe#iHraM diff --git a/dependencies/MarketPlace/Marketplace.Data.dll b/dependencies/MarketPlace/Marketplace.Data.dll deleted file mode 100644 index 08caba981b219ea244345f65e127e56a2c5b180e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50688 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 diff --git a/dependencies/MarketPlace/Marketplace.Interfaces.dll b/dependencies/MarketPlace/Marketplace.Interfaces.dll deleted file mode 100644 index d67eef50a883b294d2bec386ff77dda92fa5d6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34304 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 M{Qv*{-;==q1k5Px?*IS* diff --git a/dependencies/MarketPlace/Marketplace.Umbraco.dll b/dependencies/MarketPlace/Marketplace.Umbraco.dll deleted file mode 100644 index 2a03ff52a4b0241145ab109a558019b73c49bf64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 zcmeHLTWl298UAN>yuJXYc)11=#xaqMskdum2($!zSpzPtZSa~)vn`&TJzfu zC`uk8rBcs&zVqMCfBy5I%baoMTQ?|1L>iul4~gDD&81)Br^7tdtvm0v(%t6w+TT!4 zzSo|ev3$Mkxkb+?>89a0ZlLFd?o}M!a`g1rgkEwBBDro|%dW`v_%P8)B}N-}{UclJ z?LMjPYm_x`4oN(ej&`Hg@$};%`ii90Fm4t^W<>K~Amv1*qEHhn8^$2oN&&)DCCS+01OjnoM*+zr_sq1=;RAZfJ z8z)ukM0QX&bYeN+uZt*=QfU*cVX%QZ(JtPZKzkRdX_1jZw>{NBv#8MlY+&8e;%^47 zp}4yRbwb;dY|}cof?P|DP3|@jHGD+U+krl&JMLnQpc7a>3L??4p`rUve_P+CeX<$O zx4VzA_OH~qZVxqgk%DUr?L#SC-|+HM{^7vw}ayXhCr z&CGoC#9o9Vd&fXo$N7+%=Dmf;3AvCmxREu>*@k(xXKSW8_a^0l59nRstIAa+PJdSJ z0Y8vPD$_e99*}rSqAl^N#JAL2YMlNe@$XXdk;Japme>#-M#pg~#WJxt{aE5#z!v%- z_C6#{+Pm~LJtkMfIV~q+3M1qED#*;^)PszMTukW(wL@Yra9rmGKWw@v$5V{BIc!md z$`SWGbShnqxEG;Q=|;r;1iBdgD&l?#U5s7}xvh68fi3*z0=EU+eaYRVd&qJlY3+n^ zlm0~=;5fT82z@C!kf<~VjL~If8{I`8?GkrO?2&j-;(){viKirn0v@5C0u%JA#Ab=N>EE#oPML?X^K_fmYXUUeY^2><1t;W_+7-x$v=$)e=r(aS z*3t>>I<#Zj%k(xCv;^t&BBc>CW0JPhqe>FvW!ys@z{~Us@CEuga4%^Z83=@qhDd1U&IUq}8 zcvK)iykayUpOlTDnD2R~@_p?~uhm|acGH#(_i^G&L zyjc;HZNn7F$x_}kOgCAuZHnkK!t*WHS=DT?;#-dJ{gZCdGO6U7u4h|$nyC7LDA8E{ zqA&w0ir_-ciC;&veAFljVxc5hk`}({S>=GcWJNunGy~V8w3s$3c2IK}c9tA+Z5zFz znV&o+9N{6Lv?T?GSDosmfjPsnjl3LR&iz(Rn{{KqJ-tPN-NB0#j6W`Sz<<LU?nQDSR4oOJ^+K!gMbBI##g? zi(GB=QA$@Tj#>+AVNn@%o3@Oi*U^Pg{j?cbp8Ct0gFx@cB4VpAQ-eQeti7RbmWE zQE6+!J!Dhcd8KVK9#*&*Z`$x}XyaV9O=>z$_eNcXB%z>tb!TH_898g4jEK-)&EVCY z939RsY|XDmX?qIyr+vvDg|e+17nGa>+o&GG=>7pEuE6EA(|&g71wR5j3YyFBv=2WC??l`Km#{t(GV%t+>$$$9 z!6@)*kOw~&zKaBWIy6nLG}|RxWuY}7^`SQ?fSn62EU#(5hEu+g1+cOpFRtS02ht{m zafiP?%5x5IYv%8qA^0m%S@u!IhzxKzTTwFbXu_|HzFkCxgM!9!Lsl00NW;>XHWob8 z$CiN~4>wo=X<0^Yf=<#TyyxYJO!(xvXsYvf1~wi%E{?GWZBh#l_rDePoTWh8I_Sr) zi~6(mo1_9-@potrcXowN!dFpx;%t8dM("select COUNT(*) from projectDownload where projectId = @0 and memberId = @1", projectId, memberId); + return result != 0; + } + public static int GetReleaseDownloadCount(int projectId) {