/// <summary> /// Returns all installed packages - only shows their latest versions /// </summary> /// <returns></returns> public IEnumerable <InstalledPackageModel> GetInstalled() { return(InstalledPackage.GetAllInstalledPackages() .GroupBy( //group by name x => x.Data.Name, //select the package with a parsed version pck => { Version pckVersion; return Version.TryParse(pck.Data.Version, out pckVersion) ? new { package = pck, version = pckVersion } : new { package = pck, version = new Version(0, 0, 0) }; }) .Select(grouping => { //get the max version for the package var maxVersion = grouping.Max(x => x.version); //only return the first package with this version return grouping.First(x => x.version == maxVersion).package; }) .Select(pack => new InstalledPackageModel { Name = pack.Data.Name, Id = pack.Data.Id, Author = pack.Data.Author, Version = pack.Data.Version, Url = pack.Data.Url, License = pack.Data.License, LicenseUrl = pack.Data.LicenseUrl, Files = pack.Data.Files, IconUrl = pack.Data.IconUrl }) .ToList()); }
public async Task <HttpResponseMessage> Get() { var umbracoVersion = UmbracoVersion.Current; var footprintVersion = InstalledPackage.GetAllInstalledPackages() .Select(x => x.Data) .Concat(CreatedPackage.GetAllCreatedPackages().Select(x => x.Data)) .Where(x => x.Name == "Novicell Footprint") .Select(x => x.Version) .FirstOrDefault(); if (footprintVersion == null) { LogHelper.Warn <DashboardController>("Footprint version is null."); } //Use this to return your own custom dashboard content //using (var http = new HttpClient()) //{ // return await http.GetAsync($"http://novicell.io/Umbraco/Api/Documentation/Get?umbracoVersion={umbracoVersion}&packageVersion={footprintVersion}&cache={Random.Next()}"); //} /* * Example structure: * {"umbracoVersion":"7.2.4","packageVersion":"1.4.2","content":"<div ng-controller=\"ncFootprint.Backoffice.OverviewDashboard.Controller\" class=\"ncbt-section-dashboard\">\r\n <div class=\"span12\">\r\n <h1>Novicell Footprint 1.4.2.1</h1>\r\n <p>\r\n Stay tuned on <a href=\"http://novicell.io/footprint\" target=\"_blank\" title=\"Novicell Footprint\">http://novicell.io/footprint</a> and Our for more information and documentation.\r\n </p>\r\n\r\n <p>\r\n \t<b>The library provides the following methods:</b> <br /><br />\r\n \t<code>\r\n \tfootprint.currentVisitor.addToSegment(segmentAlias, onSuccess, onError); <br />\r\n\t\t\tfootprint.currentVisitor.isInSegment(segmentAlias, onSuccess, onError); <br />\r\n\t\t\tfootprint.currentVisitor.setId(visitorId, onSuccess, onError); <br />\r\n\t\t\tfootprint.currentVisitor.setProperties({ key1: value1, key2: value2 }, onSuccess, onError); <br />\r\n\t\t\t</code>\r\n </p>\r\n <br />\r\n <p>\r\n \t<b>Example</b><br /><br />\r\n \t<code>\r\n \tdocument.getElementById(\"newsletter-subscribe-form\").addEventListener(\"submit\", function (e) { <br/>\r\n\t\t\t console.info(\"\\\"submit\\\" event listener hit.\", arguments);<br/>\r\n\t\t\t <br/>\r\n\t\t\t e.preventDefault();<br/>\r\n\t\t\t <br/>\r\n\t\t\t // TODO: Subscribe to newsletter via AJAX or somesuch.<br/>\r\n\t\t\t <br/>\r\n\t\t\t footprint.currentVisitor.addToSegment(\"newsletter\", function (response, xhr) {<br/>\r\n\t\t\t console.info(\"\\\"addToSegment\\\" onSuccess.\", arguments);<br/>\r\n\t\t\t }, function (xhr, statusText) {<br/>\r\n\t\t\t console.info(\"\\\"addToSegment\\\" onError.\", arguments);<br/>\r\n\t\t\t });<br/>\r\n\t\t\t});<br/>\r\n\t\t\t</code>\r\n </p>\r\n\r\n<iframe width=\"420\" height=\"315\" src=\"https://www.youtube.com/embed/NXN0QQRWx5g?rel=0\" frameborder=\"0\" allowfullscreen></iframe>\r\n </div>\r\n</div>"} * */ return(null); }
public IHttpActionResult Uninstall(int packageId) { try { var pack = InstalledPackage.GetById(packageId); if (pack == null) { return(NotFound()); } PerformUninstall(pack); //now get all other packages by this name since we'll uninstall all versions foreach (var installed in InstalledPackage.GetAllInstalledPackages() .Where(x => x.Data.Name == pack.Data.Name && x.Data.Id != pack.Data.Id)) { //remove from teh xml installed.Delete(Security.GetUserId()); } } catch (Exception e) { Logger.Error <PackageInstallController>("Failed to uninstall.", e); throw; } return(Ok()); }
private bool ValidateInstalledInternal(string name, string version) { var allInstalled = InstalledPackage.GetAllInstalledPackages(); var found = allInstalled.FirstOrDefault(x => { if (x.Data.Name != name) { return(false); } //match the exact version if (x.Data.Version == version) { return(true); } //now try to compare the versions Version installed; Version selected; if (Version.TryParse(x.Data.Version, out installed) && Version.TryParse(version, out selected)) { if (installed >= selected) { return(true); } } return(false); }); if (found != null) { //this package is already installed return(false); } return(true); }
public void Install() { List <InstalledPackage> teaCommercePackages = InstalledPackage.GetAllInstalledPackages().Where(ip => ip.Data.Name.Equals("Tea Commerce") || ip.Data.Name.Equals("teacommerce")).ToList(); if (teaCommercePackages.Count > 1) { teaCommercePackages.RemoveAt(teaCommercePackages.Count - 1); foreach (InstalledPackage package in teaCommercePackages) { package.Delete(); } } }
public bool Execute(string packageName, XmlNode xmlData) { List <InstalledPackage> teaCommercePackages = InstalledPackage.GetAllInstalledPackages().Where(ip => ip.Data.Name.Equals("Tea Commerce") || ip.Data.Name.Equals("teacommerce")).ToList(); if (teaCommercePackages.Count > 1) { teaCommercePackages.RemoveAt(teaCommercePackages.Count - 1); foreach (InstalledPackage package in teaCommercePackages) { package.Delete(); } } return(true); }
public bool Execute(string packageName, XmlNode xmlData) { List <InstalledPackage> list = InstalledPackage.GetAllInstalledPackages().Where(x => x.Data.Name.Equals("TheDashboard")).ToList(); if (list.Count > 1) { list.RemoveAt(list.Count - 1); foreach (InstalledPackage package in list) { package.Delete(); } } return(true); }
public PingData GetPingData() { PingData pingData = null; InstalledPackage package = InstalledPackage.GetAllInstalledPackages().SingleOrDefault(ip => ip.Data.Name.Equals("Tea Commerce") || ip.Data.Name.Equals("teacommerce")); if (package != null) { string teaCommerceVersion = package.Data.Version; const string cms = "Umbraco"; string cmsVersion = UmbracoVersion.Current.ToString(); string databaseTechnology = _databaseFactory.Get().DatabaseType.ToString(); string technology = "ASP.NET Web Forms"; List <string> renderingEngines = new List <string>(); XmlNode renderingEngineXml = UmbracoSettings._umbracoSettings.SelectSingleNode("//templates/defaultRenderingEngine"); if (renderingEngineXml != null && renderingEngineXml.InnerText.ToLowerInvariant() == "mvc") { technology = "ASP.NET MVC"; } if (technology == "ASP.NET MVC") { renderingEngines.Add("Razor"); } else { string macroScriptsFolderPath = HostingEnvironment.MapPath("~/macroScripts"); if (macroScriptsFolderPath != null && Directory.Exists(macroScriptsFolderPath) && Directory.GetFiles(macroScriptsFolderPath, "*.cshtml", SearchOption.AllDirectories).Any()) { renderingEngines.Add("Razor"); } } string xsltFolderPath = HostingEnvironment.MapPath("~/xslt"); if (xsltFolderPath != null && Directory.Exists(xsltFolderPath) && Directory.GetFiles(xsltFolderPath, "*.xslt", SearchOption.AllDirectories).Any()) { renderingEngines.Add("XSLT"); } pingData = new PingData(teaCommerceVersion, cms, cmsVersion, databaseTechnology, technology) { RenderingEngines = renderingEngines }; } return(pingData); }
public List <PackageInstance> GetPackages() { var allPackages = new List <PackageInstance>(); //Get packages var packages = InstalledPackage.GetAllInstalledPackages(); //loop over them foreach (var item in packages) { allPackages.Add(item.Data); } //Return the list return(allPackages); }
protected void Page_Load(object sender, EventArgs e) { //check if a starter kit is already isntalled var installed = InstalledPackage.GetAllInstalledPackages(); if (installed.Count == 0) { ShowStarterKits(); return; } var repo = global::umbraco.cms.businesslogic.packager.repositories.Repository.getByGuid(RepoGuid); if (repo.HasConnection()) { try { var kits = repo.Webservice.StarterKits(); var kitIds = kits.Select(x => x.RepoGuid).ToArray(); //if a starter kit is already installed show finish if (installed.Any(x => kitIds.Contains(Guid.Parse(x.Data.PackageGuid)))) { StarterKitNotInstalled.Visible = false; installationCompleted.Visible = true; } else { ShowStarterKits(); } } catch (Exception ex) { LogHelper.Error <StarterKits>("Cannot connect to package repository", ex); InstallationDirectoryNotAvailable.Visible = true; StarterKitNotInstalled.Visible = false; } } else { InstallationDirectoryNotAvailable.Visible = true; StarterKitNotInstalled.Visible = false; } }
public override bool RequiresExecution(Guid?model) { //Don't execute if it's an empty GUID - meaning the user has chosen not to install one if (model.HasValue && model.Value == Guid.Empty) { return(false); } if (InstalledPackage.GetAllInstalledPackages().Count > 0) { return(false); } if (_applicationContext.Services.ContentService.GetRootContent().Any()) { return(false); } return(true); }
public override bool Completed() { if (!String.IsNullOrEmpty(GlobalSettings.ConfigurationStatus.Trim())) { return(true); } if (InstalledPackage.GetAllInstalledPackages().Count > 0) { return(true); } if (Document.GetRootDocuments().Count() > 0) { return(true); } return(false); }
public override bool Completed() { if (String.IsNullOrWhiteSpace(GlobalSettings.ConfigurationStatus) == false) { return(true); } if (InstalledPackage.GetAllInstalledPackages().Count > 0) { return(true); } if (Document.GetRootDocuments().Count() > 0) { return(true); } return(false); }
public async Task <HttpResponseMessage> Get() { var umbracoVersion = UmbracoVersion.Current; var footprintVersion = InstalledPackage.GetAllInstalledPackages() .Select(x => x.Data) .Concat(CreatedPackage.GetAllCreatedPackages().Select(x => x.Data)) .Where(x => x.Name == "Novicell Footprint") .Select(x => x.Version) .FirstOrDefault(); if (footprintVersion == null) { LogHelper.Warn <DashboardController>("Footprint version is null."); } using (var http = new HttpClient()) { return(await http.GetAsync($"http://novicell.io/Umbraco/Api/Documentation/Get?umbracoVersion={umbracoVersion}&packageVersion={footprintVersion}&cache={Random.Next()}")); } }
//borrowed from Core private bool IsPackageVersionAlreadyInstalled(string name, string version, out bool sameVersion, out int packageId) { var allInstalled = InstalledPackage.GetAllInstalledPackages(); var found = allInstalled.Where(x => x.Data.Name == name).ToArray(); sameVersion = false; if (found.Length > 0) { var foundVersion = found.FirstOrDefault(x => { //match the exact version if (x.Data.Version == version) { return(true); } //now try to compare the versions if (Version.TryParse(x.Data.Version, out Version installed) && Version.TryParse(version, out Version selected)) { if (installed >= selected) { return(true); } } return(false); }); sameVersion = foundVersion != null; //this package is already installed, find the highest package id for this package name that is installed packageId = found.Max(x => x.Data.Id); return(true); } packageId = -1; return(false); }
public override void Render(ref XmlTree tree) { _packageType = HttpContext.Current.Request.QueryString["packageType"]; switch (_packageType) { case "installed": Version v; // Display the unique packages, ordered by the latest version number. [LK 2013-06-10] var uniquePackages = InstalledPackage.GetAllInstalledPackages() .OrderByDescending(x => Version.TryParse(x.Data.Version, out v) ? v : new Version()) .GroupBy(x => x.Data.Name) .Select(x => x.First()) .OrderBy(x => x.Data.Name); foreach (var p in uniquePackages) { var xNode = XmlTreeNode.Create(this); xNode.NodeID = string.Concat(PACKAGE_TREE_PREFIX, p.Data.Id); xNode.Text = p.Data.Name; xNode.Action = string.Format("javascript:openInstalledPackage('{0}');", p.Data.Id); xNode.Icon = "icon-box"; xNode.OpenIcon = "icon-box"; xNode.NodeType = "createdPackageInstance"; tree.Add(xNode); } break; case "created": foreach (CreatedPackage p in CreatedPackage.GetAllCreatedPackages()) { XmlTreeNode xNode = XmlTreeNode.Create(this); xNode.NodeID = PACKAGE_TREE_PREFIX + p.Data.Id.ToString(); xNode.Text = p.Data.Name; xNode.Action = "javascript:openCreatedPackage('" + p.Data.Id.ToString() + "');"; xNode.Icon = "icon-box"; xNode.OpenIcon = "icon-box"; xNode.NodeType = "createdPackageInstance"; xNode.Menu.Add(umbraco.BusinessLogic.Actions.ActionDelete.Instance); tree.Add(xNode); } break; case "repositories": List <cms.businesslogic.packager.repositories.Repository> repos = cms.businesslogic.packager.repositories.Repository.getAll(); foreach (cms.businesslogic.packager.repositories.Repository repo in repos) { XmlTreeNode xNode = XmlTreeNode.Create(this); xNode.Text = repo.Name; xNode.Action = "javascript:openPackageCategory('BrowseRepository.aspx?repoGuid=" + repo.Guid + "');"; xNode.Icon = "icon-server-alt"; xNode.OpenIcon = "icon-server-alt"; xNode.NodeType = "packagesRepo" + repo.Guid; xNode.Menu.Add(umbraco.BusinessLogic.Actions.ActionRefresh.Instance); xNode.Source = "tree.aspx?app=" + this._app + "&id=" + this._id + "&treeType=packagerPackages&packageType=repository&repoGuid=" + repo.Guid + "&rnd=" + Guid.NewGuid(); tree.Add(xNode); } break; case "repository": _repoGuid = HttpContext.Current.Request.QueryString["repoGuid"]; Umbraco.Web.org.umbraco.our.Repository r = new Umbraco.Web.org.umbraco.our.Repository(); foreach (var cat in r.Categories(_repoGuid)) { XmlTreeNode xNode = XmlTreeNode.Create(this); xNode.NodeID = cat.Id.ToInvariantString(); xNode.Text = cat.Text; xNode.Action = "javascript:openPackageCategory('BrowseRepository.aspx?category=" + cat.Id + "&repoGuid=" + _repoGuid + "');"; xNode.Icon = "icon-folder"; xNode.OpenIcon = "icon-folder"; xNode.NodeType = "packagesCategory" + cat.Id; tree.Add(xNode); } break; } }
public override void Render(ref XmlTree tree) { m_packageType = HttpContext.Current.Request.QueryString["packageType"]; switch (m_packageType) { case "installed": Version v; // Display the unique packages, ordered by the latest version number. [LK 2013-06-10] var uniquePackages = InstalledPackage.GetAllInstalledPackages() .OrderByDescending(x => Version.TryParse(x.Data.Version, out v) ? v : new Version()) .GroupBy(x => x.Data.Name) .Select(x => x.First()) .OrderBy(x => x.Data.Id); foreach (var p in uniquePackages) { var xNode = XmlTreeNode.Create(this); xNode.NodeID = string.Concat(PACKAGE_TREE_PREFIX, p.Data.Id); xNode.Text = p.Data.Name; xNode.Action = string.Format("javascript:openInstalledPackage('{0}');", p.Data.Id); xNode.Icon = "package.gif"; xNode.OpenIcon = "package.gif"; xNode.NodeType = "createdPackageInstance"; xNode.Menu = null; tree.Add(xNode); } break; case "created": foreach (cms.businesslogic.packager.CreatedPackage p in cms.businesslogic.packager.CreatedPackage.GetAllCreatedPackages()) { XmlTreeNode xNode = XmlTreeNode.Create(this); xNode.NodeID = PACKAGE_TREE_PREFIX + p.Data.Id.ToString(); xNode.Text = p.Data.Name; xNode.Action = "javascript:openCreatedPackage('" + p.Data.Id.ToString() + "');"; xNode.Icon = "package.gif"; xNode.OpenIcon = "package.gif"; xNode.NodeType = "createdPackageInstance"; // xNode.Menu.Add( umbraco.BusinessLogic.Actions.ActionDelete.Instance ); tree.Add(xNode); } break; case "repositories": List <cms.businesslogic.packager.repositories.Repository> repos = cms.businesslogic.packager.repositories.Repository.getAll(); foreach (cms.businesslogic.packager.repositories.Repository repo in repos) { XmlTreeNode xNode = XmlTreeNode.Create(this); xNode.Text = repo.Name; xNode.Action = "javascript:openPackageCategory('BrowseRepository.aspx?repoGuid=" + repo.Guid + "');"; xNode.Icon = "repository.gif"; xNode.OpenIcon = "repository.gif"; xNode.NodeType = "packagesRepo" + repo.Guid; xNode.Menu.Add(umbraco.BusinessLogic.Actions.ActionRefresh.Instance); xNode.Source = "tree.aspx?app=" + this.m_app + "&id=" + this.m_id + "&treeType=packagerPackages&packageType=repository&repoGuid=" + repo.Guid + "&rnd=" + Guid.NewGuid(); tree.Add(xNode); /* * XmlElement catElement = Tree.CreateElement("tree"); * catElement.SetAttribute("text", repo.Name); * catElement.SetAttribute("menu", "L"); * * catElement.SetAttribute("icon", "repository.gif"); * catElement.SetAttribute("openIcon", "repository.gif"); * * catElement.SetAttribute("nodeType", "packagesRepo" + repo.Guid); * catElement.SetAttribute("src", "tree.aspx?app=" + this.m_app + "&id=" + this.m_id + "&treeType=packagerPackages&packageType=repository&repoGuid=" + repo.Guid + "&rnd=" + Guid.NewGuid()); * catElement.SetAttribute("action", "javascript:openPackageCategory('BrowseRepository.aspx?repoGuid=" + repo.Guid + "');"); * root.AppendChild(catElement); * */ } break; case "repository": m_repoGuid = HttpContext.Current.Request.QueryString["repoGuid"]; cms.businesslogic.packager.repositories.Repository currentRepo = cms.businesslogic.packager.repositories.Repository.getByGuid(m_repoGuid); if (currentRepo != null) { foreach (cms.businesslogic.packager.repositories.Category cat in currentRepo.Webservice.Categories(currentRepo.Guid)) { XmlTreeNode xNode = XmlTreeNode.Create(this); xNode.Text = cat.Text; xNode.Action = "javascript:openPackageCategory('BrowseRepository.aspx?category=" + cat.Id + "&repoGuid=" + currentRepo.Guid + "');"; xNode.Icon = "folder.gif"; xNode.OpenIcon = "folder.gif"; xNode.NodeType = "packagesCategory" + cat.Id; tree.Add(xNode); /* * XmlElement catElement = Tree.CreateElement("tree"); * catElement.SetAttribute("text", cat.Text); * //catElement.SetAttribute("menu", ""); * catElement.SetAttribute("icon", "folder.gif"); * catElement.SetAttribute("openIcon", "folder_o.gif"); * catElement.SetAttribute("nodeType", "packagesCategory" + cat.Id); * catElement.SetAttribute("action", "javascript:openPackageCategory('BrowseRepository.aspx?category=" + cat.Id + "&repoGuid=" + currentRepo.Guid + "');"); * root.AppendChild(catElement);*/ } } break; } }