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 BeginProcessing()
        {
            source = new ExplicitItemSource {
                Name = Name, SkipVersions = SkipVersions.IsPresent
            };

            if (InstallMode != InstallMode.Undefined)
            {
                source.Converter.Transforms.Add(
                    new InstallerConfigurationTransform(new BehaviourOptions(InstallMode, MergeMode)));
            }
        }
Пример #3
0
        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);
            }
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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();
            }
        }