protected override void BeginProcessing() { source = new ExplicitItemSource { Name = Name, SkipVersions = SkipVersions.IsPresent }; if (InstallMode != InstallMode.Undefined) { source.Converter.Transforms.Add( new InstallerConfigurationTransform(new BehaviourOptions(InstallMode, MergeMode))); } }
protected override void ProcessRecord() { var source = new ExplicitItemSource { Name = Name ?? Configuration.Name, SkipVersions = SkipVersions.IsPresent }; if (InstallMode != InstallMode.Undefined) { source.Converter.Transforms.Add( new InstallerConfigurationTransform(new BehaviourOptions(InstallMode, MergeMode))); } var predicate = Configuration.Resolve <IPredicate>(); var roots = predicate.GetRootPaths(); var processingQueue = new Queue <Item>(); foreach (var root in roots) { var db = Factory.GetDatabase(root.DatabaseName); var item = db.GetItem(root.Path); if (item == null) { continue; } processingQueue.Enqueue(item); } while (processingQueue.Count > 0) { var item = processingQueue.Dequeue(); source.Entries.Add(new ItemReference(item.Database.Name, item.Paths.Path, item.ID, Language.Invariant, Version.Latest).ToString()); foreach (var child in item.Children.Where(chd => predicate.Includes(new Rainbow.Storage.Sc.ItemData(chd)).IsIncluded)) { processingQueue.Enqueue(child); } } if (Project == null) { WriteObject(source, false); } Project?.Sources.Add(source); }
/// <summary> /// Takes in a list of items and generates a PackageProject object for those items. /// </summary> /// <param name="itemKeys">The items.</param> /// <returns></returns> public static PackageProject GetPackageFromItems(IEnumerable <IItemKey> itemKeys) { PackageProject project = new PackageProject(); ExplicitItemSource.Builder explicitSourceBuilder = new ExplicitItemSource.Builder(); foreach (IItemKey item in itemKeys) { //Re-fetch the item at the time of packaging to make sure it's current Item reFetchedItem = Sitecore.Data.Database.GetDatabase(item.DatabaseName).GetItem(item.Guid, LanguageManager.DefaultLanguage, item.Version); IEntryData ied = new ItemEntryData(reFetchedItem); PackageEntry iedEntry = new PackageEntry(ied); explicitSourceBuilder.Put(iedEntry); } ExplicitItemSource explicitSource = explicitSourceBuilder.Source; project.Sources.Add(explicitSource); return(project); }
/// <summary> /// Generates the package. /// </summary> /// <param name="list">The list.</param> /// <returns></returns> private string GeneratePackage(List <Item> list) { string fullName = Context.User.Profile.FullName; using (new UserSwitcher(Sitecore.Security.Accounts.User.FromName("sitecore\\admin", false))) { Database contentDatabase = Context.ContentDatabase; PackageProject solution = new PackageProject(); solution.Metadata.PackageName = list[0].Name; solution.Metadata.Author = fullName; ExplicitItemSource explicitItemSource = new ExplicitItemSource(); explicitItemSource.Name = list[0].Name; Item[] objArray = list.ToArray(); if (objArray != null && objArray.Length > 0) { list.AddRange(objArray); } foreach (Item obj in list) { explicitItemSource.Entries.Add(new ItemReference(obj.Uri, false).ToString()); } solution.Sources.Add(explicitItemSource); solution.SaveProject = true; string fileName = list[0].Name + "_" + DateTime.Now.ToString("dd_MM_yyyy_hh_mm_ss_fffffff") + ".zip"; string str = Settings.PackagePath + "\\"; using (PackageWriter packageWriter = new PackageWriter(str + fileName)) { Context.SetActiveSite("shell"); packageWriter.Initialize(Installer.CreateInstallationContext()); PackageGenerator.GeneratePackage(solution, packageWriter); Context.SetActiveSite("website"); } return(str + fileName); } }
/// <summary> /// Generates the package. /// </summary> /// <param name="items">The items.</param> /// <param name="packageName">Name of the package.</param> /// <param name="packageAuthor">The package author.</param> /// <returns>Download path</returns> public virtual string GeneratePackage(IEnumerable <ItemUri> items, string packageName, string packageAuthor) { try { var project = new PackageProject { Metadata = { PackageName = packageName.Trim(), Author = packageAuthor, Version = DateTime.UtcNow.ToString("yyyyMMddHHmmss") } }; var filePath = FileUtil.MakePath(Settings.PackagePath, string.Format("{0}-{1}.{2}", project.Metadata.Version, PackageUtils.CleanupFileName(project.Metadata.PackageName), "zip")); var source = new ExplicitItemSource { Name = "PackMan added Items" }; foreach (var item in items) { source.Entries.Add(new ItemReference(item, false).ToString()); } project.Sources.Add(source); using (new Sitecore.SecurityModel.SecurityDisabler()) { WritePackage(project, filePath); return(filePath); } } catch (Exception ex) { Sitecore.Diagnostics.Log.Error(ex.Message, ex, this); return(null); } }
public static string GeneratePackage(PackageManifest manifest) { var packageProject = new PackageProject { Metadata = { PackageName = manifest.PackageName, Author = manifest.Author, Version = manifest.Version, Publisher = manifest.Publisher } }; foreach (var fileSource in manifest.Files) { if (fileSource == null || fileSource.Entries == null || fileSource.Entries.Count == 0) { continue; } var packageFileSource = new ExplicitFileSource { Name = "Files" }; packageFileSource.Converter.Transforms.Add( new InstallerConfigurationTransform( new BehaviourOptions(fileSource.InstallMode, fileSource.MergeMode))); foreach (var item in fileSource.Entries) { var pathMapped = MainUtil.MapPath(item.Path); packageFileSource.Entries.Add(pathMapped); } if (packageFileSource.Entries.Count > 0) { packageProject.Sources.Add(packageFileSource); } } foreach (var itemSource in manifest.Items) { if (itemSource == null || itemSource.Entries == null || itemSource.Entries.Count == 0) { continue; } List <Item> items = new List <Item>(); var packageItemSource = new ExplicitItemSource { Name = itemSource.Name }; packageItemSource.Converter.Transforms.Add( new InstallerConfigurationTransform( new BehaviourOptions(itemSource.InstallMode, itemSource.MergeMode))); using (new SecurityDisabler()) { foreach (var item in itemSource.Entries) { var db = ResolveDatabase(item.Database); var itemUri = db.Items.GetItem(item.Path); if (itemUri != null) { items.Add(itemUri); if (item.IncludeChildren) { var paths = Sitecore.StringUtil.Split(itemUri.Paths.Path, '/', true).Where(p => p != null & p != string.Empty).Select(p => "#" + p + "#").ToList(); string allChildQuery = string.Format("/{0}//*", Sitecore.StringUtil.Join(paths, "/")); var children = db.Items.Database.SelectItems(allChildQuery); if (children != null && children.Length > 0) { items.AddRange(children); } } } } foreach (var item in items) { packageItemSource.Entries.Add(new ItemReference(item.Uri, false).ToString()); } } if (packageItemSource.Entries.Count > 0) { packageProject.Sources.Add(packageItemSource); } } packageProject.SaveProject = true; var location = MainUtil.MapPath($"{ Sitecore.Configuration.Settings.PackagePath}/{ manifest.PackageName}"); bool exists = System.IO.Directory.Exists(location); if (!exists) { System.IO.Directory.CreateDirectory(location); } var packagePath = $"{location}/{manifest.PackageName}.zip"; try { using (var writer = new PackageWriter(packagePath)) { using (new SecurityDisabler()) { SiteContext targetSiteContext = SiteContext.GetSite("shell"); using (var context = new SiteContextSwitcher(targetSiteContext)) { writer.Initialize(Installer.CreateInstallationContext()); PackageGenerator.GeneratePackage(packageProject, writer); } } } } catch (Exception ex) { throw new Exception($"Package was not created. Message: {ex.Message}", ex); } return(packagePath); }
public PackageGenerationResult Generate(Commit commit, bool getAdded = true, bool getUpdated = true) { var result = new PackageGenerationResult(); StringBuilder commitNameBuilder = new StringBuilder(); commitNameBuilder.Append(commit.Name); if (getAdded) { commitNameBuilder.Append("-added"); } if (getUpdated) { commitNameBuilder.Append("-updated"); } commitNameBuilder.Append(".zip"); var commitName = commitNameBuilder.ToString(); var path = PathToFile; result.Name = commitName; result.Path = path; result.Successful = false; var db = _databaseSelector.GetSelectedDataBase(); var document = new PackageProject(); document.Sources.Clear(); var commitUserName = commit.Invoker?.Name; document.Metadata.PackageName = !string.IsNullOrWhiteSpace(commit.Name) ? commit.Name : Constants.Package.DefaultCommitName; document.Metadata.Author = !string.IsNullOrWhiteSpace(commitUserName) ? commitUserName : Constants.Package.DefaultAuthorName; document.Metadata.Publisher = !string.IsNullOrWhiteSpace(User.Current.Name) ? User.Current.Name : Constants.Package.DefaultAuthorName; document.Metadata.Version = Constants.Package.DefaultVersion; var itemsIds = new List <ID>(); if (getAdded) { itemsIds = itemsIds.Union(commit.AddedItems).ToList(); } if (getUpdated) { itemsIds = itemsIds.Union(commit.ChangedItems).ToList(); } var items = new List <Item>(); itemsIds.ForEach(x => { var item = db.GetItem(x); if (item != null) { items.Add(item); } }); ExplicitItemSource source = new ExplicitItemSource(); source.Name = Constants.Package.SourceName; source.SkipVersions = true; foreach (Item item in items) { if (item != null) { source.Entries.Add(new ItemReference(item.Uri, false).ToString()); } } document.Sources.Add(source); document.SaveProject = true; using (new Sitecore.SecurityModel.SecurityDisabler()) { using (var writer = new PackageWriter(MainUtil.MapPath($"{path}{commitName}"))) { Context.SetActiveSite(Constants.Package.ShellSite); writer.Initialize(Installer.CreateInstallationContext()); PackageGenerator.GeneratePackage(document, writer); Context.SetActiveSite(Constants.Package.MainSite); result.Successful = true; } } return(result); }
protected override string BuildPackage() { var project = new PackageProject(); var sourceCollection = new SourceCollection <PackageEntry>(); var itemSource = new ExplicitItemSource { SkipVersions = false }; sourceCollection.Add(itemSource); var list = new List <ID>(); foreach (var item in Items) { var i = item; if (list.Any(id => id == i.ID)) { continue; } list.Add(item.ID); var reference = new ItemReference(item.Database.Name, item.Paths.Path, item.ID, LanguageManager.DefaultLanguage, Data.Version.Latest).Reduce(); itemSource.Entries.Add(reference.ToString()); } var fileSource = new ExplicitFileSource(); sourceCollection.Add(fileSource); foreach (var fileName in Files) { if (FileUtil.IsFolder(fileName)) { foreach (var file in Directory.GetFiles(FileUtil.MapPath(fileName), "*", SearchOption.AllDirectories)) { var fileInfo = new FileInfo(file); if ((fileInfo.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } if ((fileInfo.Attributes & FileAttributes.System) == FileAttributes.System) { continue; } fileSource.Entries.Add(file); } } else { fileSource.Entries.Add(fileName); } } project.Sources.Add(sourceCollection); project.Name = "Sitecore Package"; project.Metadata.PackageName = PackageName; project.Metadata.Author = Author; project.Metadata.Version = Version; project.Metadata.Publisher = Publisher; project.Metadata.License = License; project.Metadata.Comment = Comment; project.Metadata.Readme = Readme; project.Metadata.PostStep = PostStep; var context = new SimpleProcessingContext(); var intermediateFile = GetIntermediateFileName(FileName); try { using (var writer = new PackageWriter(PathUtils.MapPath(intermediateFile))) { writer.Initialize(context); PackageGenerator.GeneratePackage(project, writer); } Commit(intermediateFile, FileName); } catch { Cleanup(intermediateFile); throw; } return(FileName); }
public void GeneratePackage() { var getReaderProcessor = ReaderTypeProcessor.GetTypeProcessor(this.FileType); var items = getReaderProcessor.ReadFile(this.FilePath); var packageProject = new PackageProject { Metadata = { PackageName = this.PackageName, Author = this.Author, Version = this.Version, Publisher = this.Publisher } }; var packageFileSource = new ExplicitFileSource { Name = "Custom File Source" }; var packageItemSource = new ExplicitItemSource { Name = "Custom Item Source" }; var sourceCollection = new SourceCollection <PackageEntry>(); sourceCollection.Add(packageItemSource); foreach (var item in items) { if (item.ObjectType.ToLower().Equals("item")) { var itemUri = Factory.GetDatabase(Settings.GetSetting("SourceDatabase")).Items.GetItem(item.ObjectPath); if (itemUri != null) { if (item.IncludeSubItem.ToLower().Equals("true")) { sourceCollection.Add(new ItemSource() { SkipVersions = true, Database = itemUri.Uri.DatabaseName, Root = itemUri.Uri.ItemID.ToString() }); } else { packageItemSource.Entries.Add(new ItemReference(itemUri.Uri, false).ToString()); } } } else if (item.ObjectType.ToLower().Equals("file")) { var pathMapped = MainUtil.MapPath(item.ObjectPath); packageFileSource.Entries.Add(pathMapped); } } if (packageFileSource.Entries.Count > 0) { packageProject.Sources.Add(packageFileSource); } if (packageItemSource.Entries.Count > 0 || sourceCollection.Sources.Count > 0) { packageProject.Sources.Add(sourceCollection); } packageProject.SaveProject = true; var packageGeneratorFolder = Settings.GetSetting("PackageGeneratorFolder"); using (var writer = new PackageWriter(MainUtil.MapPath(string.Format("{0}/{1}/{2}.zip", Settings.PackagePath, packageGeneratorFolder, this.PackageName)))) { Context.SetActiveSite("shell"); writer.Initialize(Installer.CreateInstallationContext()); PackageGenerator.GeneratePackage(packageProject, writer); Context.SetActiveSite("website"); } }
protected void btnGeneratePackage_OnClick(object sender, EventArgs e) { var contentExportUtil = new ContentExport(); var packageProject = new PackageProject() { Metadata = { PackageName = String.IsNullOrEmpty(txtFileName.Value) ? "Content Export Tool " + DateTime.Now.ToString("yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture) : txtFileName.Value, Author = "Erica Stockwell-Alpert", Version = txtVersion.Value } }; packageProject.Sources.Clear(); var source = new ExplicitItemSource(); source.Name = "Items"; var _core = Factory.GetDatabase("core"); var _master = Factory.GetDatabase("master"); // items var coreAppItem = _core.Items.GetItem("/sitecore/content/Applications/Content Export"); var coreMenuItem = _core.Items.GetItem("/sitecore/content/Documents and settings/All users/Start menu/Right/Content Export"); var template = _master.Items.GetItem("/sitecore/templates/Modules/Content Export Tool"); var folder = _master.Items.GetItem("/sitecore/system/Modules/Content Export Tool "); source.Entries.Add(new ItemReference(coreAppItem.Uri, false).ToString()); source.Entries.Add(new ItemReference(coreMenuItem.Uri, false).ToString()); source.Entries.Add(new ItemReference(template.Uri, false).ToString()); source.Entries.Add(new ItemReference(folder.Uri, false).ToString()); foreach (var child in template.Axes.GetDescendants()) { source.Entries.Add(new ItemReference(child.Uri, false).ToString()); } packageProject.Sources.Add(source); // files var fileSource = new ExplicitFileSource(); fileSource.Name = "Files"; fileSource.Entries.Add(MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\sitecore\\shell\\Applications\\ContentExport\\ContentExport.aspx")); fileSource.Entries.Add(MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\sitecore\\shell\\Applications\\ContentExport\\ContentExport.aspx.cs")); fileSource.Entries.Add(MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\sitecore\\shell\\Applications\\ContentExport\\ContentExport.aspx.designer.cs")); fileSource.Entries.Add(MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\sitecore\\shell\\Applications\\ContentExport\\jquery-2.2.4.min.js")); fileSource.Entries.Add(MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\sitecore\\shell\\Applications\\ContentExport\\jquery-ui.min.js")); fileSource.Entries.Add(MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\sitecore\\shell\\Applications\\ContentExport\\ContentExportScripts.js")); fileSource.Entries.Add( MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\temp\\IconCache\\Network\\16x16\\download.png")); fileSource.Entries.Add( MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\temp\\IconCache\\Network\\32x32\\download.png")); fileSource.Entries.Add( MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\temp\\IconCache\\Network\\24x24\\download.png")); fileSource.Entries.Add(MainUtil.MapPath("C:\\Dev\\BayerCA\\Website\\sitecore\\shell\\Themes\\Standard\\Images\\ProgressIndicator\\sc-spinner32.gif")); packageProject.Sources.Add(fileSource); packageProject.SaveProject = true; var fileName = packageProject.Metadata.PackageName + ".zip"; var filePath = contentExportUtil.FullPackageProjectPath(fileName); using (var writer = new PackageWriter(filePath)) { Sitecore.Context.SetActiveSite("shell"); writer.Initialize(Installer.CreateInstallationContext()); PackageGenerator.GeneratePackage(packageProject, writer); Sitecore.Context.SetActiveSite("website"); Response.Clear(); Response.Buffer = true; Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", fileName)); Response.ContentType = "application/zip"; byte[] data = new WebClient().DownloadData(filePath); Response.BinaryWrite(data); Response.Flush(); Response.End(); } }