/// <summary>
        /// Copies the file versioned.
        /// </summary>
        /// <param name="i">The i.</param>
        /// <param name="folderTo">The folder to.</param>
        /// <param name="srcFile">The version.</param>
        /// <param name="destUrl">The dest URL.</param>
        /// <returns></returns>
        private SPFile CopyFileVersioned(int i,
                                         SPFolder folderTo,
                                         SPFileVersion srcFile,
                                         string destUrl)
        {
            Debug.WriteLine("* Versioned ");
            Debug.WriteLine("i " + i);
            Debug.WriteLine("folderTo " + folderTo.Url);
            Debug.WriteLine("srcFile " + srcFile.VersionLabel);
            Debug.WriteLine("destUrl " + destUrl);

            Debug.WriteLine("EnsureCheckOut");

            EnsureCheckOut(folderTo, i, srcFile.File, destUrl);

            Debug.WriteLine("Add File to new folder");

            SPFile newFile = folderTo.Files.Add(destUrl,
                                                srcFile.OpenBinary(),
                                                true,
                                                srcFile.CheckInComment,
                                                false);

            EnsureCheckIn(newFile, srcFile.CheckInComment);
            CopyMetadata(srcFile.File, newFile, false);
            newFile.Item["Created"]  = srcFile.Created;
            newFile.Item["Modified"] = srcFile.Created;
            newFile.Item["Author"]   = srcFile.CreatedBy;
            newFile.Item.UpdateOverwriteVersion();


            Debug.WriteLine("* COPIED " + newFile.Name + " ");

            return(newFile);
        }
Example #2
0
        public SPFileVersionInstance Construct(SPFileVersion fileVersion)
        {
            if (fileVersion == null)
            {
                throw new ArgumentNullException("fileVersion");
            }

            return(new SPFileVersionInstance(InstancePrototype, fileVersion));
        }
Example #3
0
        public FileVersionNode(SPFileVersion version)
        {
            this.Tag = version;

            this.Setup();

            if (version.File.Item != null)
            {
                this.SPParent = version.File.Item.ParentList;
            }
            this.Nodes.Add(new ExplorerNodeBase("Dummy"));
        }
Example #4
0
        public FileVersionNode(SPFileVersion version)
        {
            this.Tag = version;

            this.Setup();

            if (version.File.Item != null)
            {
                this.SPParent = version.File.Item.ParentList;
            }
            this.Nodes.Add(new ExplorerNodeBase("Dummy"));
        }
        /// <summary>
        /// Gets the version.
        /// </summary>
        /// <param name="newVer">The new ver.</param>
        /// <returns>Version as string</returns>
        private string GetVersion(SPFileVersion newVer)
        {
            //string temp;
            string[] parts = newVer.Url.Split('/');

            if (parts.Length >= 1)
            {
                return(parts[1]);
            }

            return(string.Empty);
        }
    static void Main(string[] args)
    {
        using (SPSite site = new SPSite("https://sharepoint.domain.com"))
            using (SPWeb web = site.OpenWeb())
            {
                SPList list = web.GetList($"{web.ServerRelativeUrl.TrimEnd('/')}/DocumentLibrary");
                SPListItemCollection items = list.GetItems(new SPQuery());

                foreach (SPListItem item in items)
                {
                    object checkedOutTo = item[SPBuiltInFieldId.CheckoutUser];
                    if (checkedOutTo == null)
                    {
                        // Latest version
                        Console.WriteLine($"{item.ID} | {item.Versions[0].VersionLabel}");

                        // Here are bytes of the file itself
                        byte[] bytes = item.File.OpenBinary();
                    }
                    else
                    {
                        // Find latest published version
                        SPFileVersion version = item.File.Versions
                                                .Cast <SPFileVersion>()
                                                .OrderByDescending(v => v.ID)
                                                .Where(v => v.Level == SPFileLevel.Published)
                                                .FirstOrDefault();

                        if (version != null)
                        {
                            Console.WriteLine($"{item.ID} | {version.VersionLabel} | {checkedOutTo}");

                            // Here are bytes of the file itself
                            byte[] bytes = version.OpenBinary();
                        }
                        else
                        {
                            Console.WriteLine($"{item.ID} | No published version | {checkedOutTo}");
                        }
                    }
                }
            }
    }
Example #7
0
        /// <summary>
        /// Returns true if the version of the file exists in SharePoint. Must be called in the context
        /// of appropriate permissions, as this method does not impersonate.
        /// </summary>
        private static bool FileExistsInSharePoint(SPFile spFile, int versionId)
        {
            if (spFile.Exists == false)
            {
                return(false);
            }

            // If there are no versions, or if the current version is the requested version
            if ((spFile.Versions.Count == 0) || spFile.UIVersion == versionId)
            {
                return((spFile.UIVersion == versionId) && spFile.Exists);
            }
            else
            {
                // The specified version isn't the current one
                SPFileVersion spFileVersion = spFile.Versions.GetVersionFromID(versionId);

                return((spFileVersion != null) && spFileVersion.File.Exists);
            }
        }
        /// <summary>
        /// method to determine major/minor status
        /// of srcFileVersioned and publish accordingly
        /// </summary>
        /// <param name="num">parsed srcFileVersioned number from file's URL</param>
        /// <param name="folderTo">The folder to.</param>
        /// <param name="destUrl">The dest URL.</param>
        /// <param name="srcFileVersioned">The version.</param>
        private void CopyRightVersion(int num,
                                      SPFolder folderTo,
                                      string destUrl,
                                      SPFileVersion srcFileVersioned)
        {
            try
            {
                const int baseNum = 512;
                decimal   d       = num / baseNum;
                int       i       = (int)Math.Floor(d) * 512;

                Debug.WriteLine("* CRV " + i + " " + folderTo.Url + " (" + destUrl + ")");

                // SPFile tempFile = destinationFolder.Files[file.Name];

                SPFile copFileVers = CopyFileVersioned(i, folderTo, srcFileVersioned, destUrl);

                //major publish (eg 1.0, 2.0, 3.0)
                if (num == i)
                {
                    if (SPContext.Current.List.EnableMinorVersions)
                    {
                        copFileVers.Publish(srcFileVersioned.CheckInComment);
                    }
                }
                //minor (eg 0.1, 1.1, 2.3)
                else
                {
                }

                folderTo.Update();
            }
            catch (Exception ex)
            {
                Debug.WriteLine("CRV");
                Debug.WriteLine(ex);
            }
        }
        static DateTime GetTimeStamp(SPFile file, int versionId)
        {
            if ((file.Versions.Count == 0) || file.UIVersion == versionId)
            {
                if (file.UIVersion != versionId)
                {
                    throw new FileNotFoundException(String.Format(CultureInfo.CurrentCulture, Resources.SPFileNotFound, file.Name));
                }

                return(file.TimeLastModified);
            }
            else
            {
                // The specified version isn't the current one
                SPFileVersion spFileVersion = file.Versions.GetVersionFromID(versionId);

                if (spFileVersion == null)
                {
                    throw new FileNotFoundException(String.Format(CultureInfo.CurrentCulture, Resources.SPFileNotFound, file.Name));
                }

                return(spFileVersion.Created);
            }
        }
Example #10
0
 public SPFileVersionInstance(ObjectInstance prototype, SPFileVersion fileVersion)
     : this(prototype)
 {
     m_fileVersion = fileVersion;
 }
        /// Returns true if the correct version of the file exists in SharePoint.
        /// NOTE: This method checks file availability using elevated privileges. Be
        /// cautious when using this information in messages displayed to the user.
        private static bool FileExistsInSharePoint(string location)
        {
            SharePointFileLocation spFileLocation;
            bool fileExists = true;    // assume it exists

            if (SharePointFileLocation.TryParse(location, out spFileLocation))
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    // If the site does not exist, this throws FileNotFound
                    using (SPSite spSite = new SPSite(spFileLocation.SiteId, SPContext.Current.Site.Zone))
                    {
                        // If the web does not exist, this throws FileNotFound
                        using (SPWeb spWeb = spSite.OpenWeb(spFileLocation.WebId))
                        {
                            SPFile spFile = spWeb.GetFile(spFileLocation.FileId);
                            if (!spFile.Exists)
                            {
                                fileExists = false;
                                return;
                            }
                            // The file exists. Now check if the right version exists.
                            DateTime lastModified;
                            if ((spFile.Versions.Count == 0) || spFile.UIVersion == spFileLocation.VersionId)
                            {
                                // The requested version is the currect one
                                if (spFile.UIVersion != spFileLocation.VersionId)
                                {
                                    fileExists = false;
                                    return;
                                }
                                // It exists: check its timestamp
                                lastModified = spFile.TimeLastModified;
                            }
                            else
                            {
                                // The specified version isn't the current one
                                SPFileVersion spFileVersion = spFile.Versions.GetVersionFromID(spFileLocation.VersionId);

                                if (spFileVersion == null)
                                {
                                    fileExists = false;
                                    return;
                                }

                                // There is no 'last modified' of a version, so use the time the version was created.
                                lastModified = spFileVersion.Created;
                            }

                            // If the timestamps are not the same, the file has been modified, so return false
                            if (lastModified.CompareTo(spFileLocation.Timestamp) != 0)
                            {
                                fileExists = false;
                                return;
                            }
                        }
                    }
                });
            }
            return(fileExists);
        }
Example #12
0
        internal String RenderHTMLForOneDocumentVersion(Dictionary <String, String> checklistTextMap, WBDocument document, String majorVersion, String minorVersion, int minorVersionIndex)
        {
            String html = "";

            String versionNumber = majorVersion;

            if (!String.IsNullOrEmpty(minorVersion))
            {
                versionNumber += "." + minorVersion;
            }

            String versionAsToggleID = versionNumber.Replace(".", "-");

            String publishedDateString = "";

            if (document.HasValue(WBColumn.DatePublished))
            {
                publishedDateString = String.Format("{0:dd/MM/yyyy}", document[WBColumn.DatePublished]);
            }
            if (publishedDateString == "" && document.HasValue(WBColumn.Modified))
            {
                publishedDateString = String.Format("{0:dd/MM/yyyy}", document[WBColumn.Modified]);
            }

            String publishedByString = "<unknown>";
            SPUser publishedBy       = document.GetSingleUserColumn(WBColumn.PublishedBy);

            if (publishedBy != null)
            {
                publishedByString = publishedBy.Name;
            }
            else
            {
                // If the published by column isn't set then we'll use the author column as a backup value:
                publishedBy = document.GetSingleUserColumn(WBColumn.Author);
                if (publishedBy != null)
                {
                    publishedByString = publishedBy.Name;
                }
            }

            String modifiedByString = "";
            String modifiedOnString = "";

            if (document.IsSPListItemVersion)
            {
                SPFieldUserValue versionCreated = document.ItemVersion.CreatedBy;
                SPUser           modifiedBy     = versionCreated.User;
                if (modifiedBy != null)
                {
                    WBLogging.Debug("Version created by lookup ID: " + versionCreated.LookupId);
                    WBLogging.Debug("Version created by lookup Value: " + versionCreated.LookupValue);
                    WBLogging.Debug("Version created by as string: " + versionCreated.ToString());
                    WBLogging.Debug("Version created by SPUser.Login: "******"Version created by SPUser.Name: " + modifiedBy.Name);
                    modifiedByString = modifiedBy.Name;
                }

                modifiedOnString = String.Format("{0:dd/MM/yyyy}", document.ItemVersion.Created);
            }
            else
            {
                SPUser modifiedBy = document.GetSingleUserColumn(WBColumn.ModifiedBy);
                if (modifiedBy != null)
                {
                    modifiedByString = modifiedBy.Name;
                }
                if (document.HasValue(WBColumn.Modified))
                {
                    modifiedOnString = String.Format("{0:dd/MM/yyyy}", document[WBColumn.Modified]);
                }
            }


            String approvedByString = document.GetMultiUserColumn(WBColumn.PublishingApprovedBy).WBxToPrettyString();
            String iaoString        = document.GetSingleUserColumn(WBColumn.IAOAtTimeOfPublishing).WBxToPrettyString();

            long fileLength = (document.Item.File.Length / 1024);

            if (fileLength == 0)
            {
                fileLength = 1;
            }
            String fileLengthString = "" + fileLength + " KB";

            String status         = document[WBColumn.RecordSeriesStatus].WBxToString();
            String extraStatusCSS = "";

            if (String.IsNullOrEmpty(status))
            {
                status = "Latest";
            }
            if (minorVersionIndex > 0)
            {
                status         = "(old metadata)";
                extraStatusCSS = " wbf-old-metadata";
            }

            String explainStatus = "";

            if (status == "Latest")
            {
                if (document.ProtectiveZone == WBRecordsType.PROTECTIVE_ZONE__PUBLIC)
                {
                    explainStatus = "(live on the public website)";
                }
                else if (document.ProtectiveZone == WBRecordsType.PROTECTIVE_ZONE__PUBLIC_EXTRANET)
                {
                    explainStatus = "(live on a public extranet website)";
                }
                else
                {
                    explainStatus = "(live on izzi intranet)";
                }
            }
            else if (status == "Retired")
            {
                explainStatus = "(visible on izzi intranet searches)";
            }
            else if (status == "Archived")
            {
                explainStatus = "(archived in the protected, master records library)";
            }

            String reviewDateString = "";

            if (document.HasValue(WBColumn.ReviewDate))
            {
                reviewDateString = String.Format("{0:dd/MM/yyyy}", document[WBColumn.ReviewDate]);
            }

            String checkInComments = "";

            if (document.IsSPListItemVersion)
            {
                int fileVersionsCount = document.Item.File.Versions.Count;

                WBLogging.Debug("File versions count: " + fileVersionsCount);
                WBLogging.Debug("minorVersionIndex = " + minorVersionIndex);

                int minorFileVersionIndex = fileVersionsCount - minorVersionIndex;
                WBLogging.Debug("minorFileVersionIndex = " + minorFileVersionIndex);

                if (minorFileVersionIndex >= 0 && minorFileVersionIndex < fileVersionsCount)
                {
                    SPFileVersion fileVersion = document.Item.File.Versions[minorFileVersionIndex];
                    checkInComments = fileVersion.CheckInComment;
                }
                else
                {
                    checkInComments = document.Item.File.CheckInComment;
                }
            }
            else
            {
                checkInComments = document.Item.File.CheckInComment;
            }


            String checklistCount = "0";
            String checklistDiv   = "";

            String checklistCodes = document[WBColumn.PublishingApprovalChecklist].WBxToString();

            if (!String.IsNullOrEmpty(checklistCodes))
            {
                String[] codes = checklistCodes.Split(';');
                checklistDiv = "<div id='wbf-checklist-" + versionAsToggleID + "' style='display: none;'>";
                foreach (String code in codes)
                {
                    if (checklistTextMap.ContainsKey(code))
                    {
                        checklistDiv += "<input type='checkbox' enabled='false' checked disabled/>" + checklistTextMap[code] + "<br/>";
                    }
                    else
                    {
                        checklistDiv += "<input type='checkbox' enabled='false' checked disabled/>" + code + " (couldn't decode this checklist item)<br/>";
                    }
                }
                checklistDiv += "</div>";

                checklistCount = codes.Length.ToString();
            }

            String issueOddOrEven = "odd";

            if (majorVersion.WBxToInt() % 2 == 0)
            {
                issueOddOrEven = "even";
            }

            html += "<tr>"
                    + "<td class='wbf-record-series-summary-issue-" + issueOddOrEven + "'>" + versionNumber + "</td>"
                    + "<td class='wbf-record-series-summary-detail wbf-record-series-detail-left'>" + document.Name + "</td>"
                    + "<td class='wbf-record-series-summary-detail'>" + publishedDateString + "</td>"
                    + "<td class='wbf-record-series-summary-detail'>" + publishedByString + "</td>"
                    + "<td class='wbf-record-series-summary-detail'>" + modifiedOnString + "</td>"
                    + "<td class='wbf-record-series-summary-detail " + extraStatusCSS + "'>" + status + "</td>"
                    + "<td class='wbf-record-series-summary-detail wbf-record-series-detail-right'>" + fileLengthString + "</td>"
                    + "<td class='wbf-record-series-summary-detail'><a href='#' class='wbf-more-or-less' id='wbf-more-or-less-" + versionAsToggleID + "' onclick='WBF_toggleByID(\"" + versionAsToggleID + "\");'><nobr>more &gt;</nobr></a></td>"
                    + "</tr>\n";

            html += "<tr class='wbf-record-details' id='wbf-record-details-" + versionAsToggleID + "' style=' display: none;' ><td></td><td colspan='6' class='wbf-record-series-details-panel-cell'><table class='wbf-record-series-details-panel' width='100%'>";

            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Title</td><td class='wbf-record-series-detail-odd'>" + document.Title + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Filename</td><td class='wbf-record-series-detail-even wbf-record-series-detail-left'>" + document.Filename + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Location</td><td class='wbf-record-series-detail-odd'>" + document.LibraryLocation + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Subject Tags</td><td class='wbf-record-series-detail-even'>" + document.SubjectTags.Names() + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Owning Team</td><td class='wbf-record-series-detail-odd'>" + document.OwningTeam.Name + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Involved Teams</td><td class='wbf-record-series-detail-even'>" + document.InvolvedTeamsWithoutOwningTeam.Names() + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Protective Zone</td><td class='wbf-record-series-detail-odd'>" + document.ProtectiveZone + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Status</td><td class='wbf-record-series-detail-even'>" + status + " " + explainStatus + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Approved By</td><td class='wbf-record-series-detail-odd'>" + approvedByString + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Approval Checklist</td><td class='wbf-record-series-detail-even'><a href='#' onclick='WBF_toggleChecklist(\"" + versionAsToggleID + "\");'>" + checklistCount + " checklist items were ticked</a>" + checklistDiv + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>IAO When Published</td><td class='wbf-record-series-detail-odd'>" + iaoString + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Intended Web Page URL</td><td class='wbf-record-series-detail-even'>" + document[WBColumn.IntendedWebPageURL].WBxToString() + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Review Date</td><td class='wbf-record-series-detail-odd'>" + reviewDateString + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Modified By</td><td class='wbf-record-series-detail-even'>" + modifiedByString + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Modified On</td><td class='wbf-record-series-detail-odd'>" + modifiedOnString + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Reason for Change</td><td class='wbf-record-series-detail-even'>" + checkInComments + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-odd'>Record Series ID</td><td class='wbf-record-series-detail-odd'>" + document.RecordSeriesID + "</td></tr>";
            html += "<tr><td class='wbf-record-series-detail-title wbf-record-series-detail-even'>Record ID</td><td class='wbf-record-series-detail-even'>" + document.RecordID + "</td></tr>";

            html += "<tr><td class='wbf-record-series-detail-even' colspan='2' align='center'><input type='button' value='View Document' onclick='window.open(\"" + document.AbsoluteURL + "\", \"_blank\");' />";
            if (minorVersionIndex <= 0 && status != "Archived")
            {
                html += "&nbsp;<input type='button' value='Edit Metadata' onclick='WBF_edit_records_metadata(\"" + document.RecordID + "\");'/>";
            }
            html += "</td></tr>";

            html += "</table>\n";

            return(html);
        }
Example #13
0
        public static SPFile CopyFileAndHistory(SPFile sourceFile, SPFolder targetFolder, bool overwrite = false)
        {
            SPFile targetFile =
                targetFolder.ParentWeb.GetFile(SPUrlUtility.CombineUrl(targetFolder.ServerRelativeUrl, sourceFile.Name));

            if (targetFile.Exists)
            {
                if (overwrite)
                {
                    if (targetFile.RequiresCheckout)
                    {
                        if (targetFile.CheckOutType == SPFile.SPCheckOutType.None)
                        {
                            targetFile.CheckOut();
                        }
                        else
                        {
                            targetFile.UndoCheckOut();
                        }
                    }

                    targetFile.Delete();
                }
                else
                {
                    return(targetFile);
                }
            }

            int countVersions = sourceFile.Versions.Count;

            for (int i = 0; i < countVersions; i++)
            {
                SPFileVersion sourceFileVer = sourceFile.Versions[i];

                if (!sourceFileVer.IsCurrentVersion)
                {
                    SPFile historyFile;

                    using (Stream stream = sourceFileVer.OpenBinaryStream())
                    {
                        string fileName = SPUrlUtility.CombineUrl(targetFolder.ServerRelativeUrl,
                                                                  sourceFileVer.File.Name);

                        bool crossSite = (sourceFile.Web.Site.ID != targetFolder.ParentWeb.Site.ID);

                        SPUser author;
                        SPUser editor;

                        if (crossSite)
                        {
                            author = targetFolder.ParentWeb.EnsureUser(sourceFileVer.CreatedBy.LoginName);
                            editor = targetFolder.ParentWeb.EnsureUser(sourceFileVer.CreatedBy.LoginName);
                        }
                        else
                        {
                            author = sourceFileVer.CreatedBy;
                            editor = sourceFileVer.CreatedBy;
                        }

                        historyFile = targetFolder.Files.Add(
                            fileName, stream, sourceFileVer.Properties, author,
                            editor, sourceFileVer.Created, sourceFileVer.Created,
                            sourceFileVer.CheckInComment, true);
                    }
                }
            }

            return(CopyFile(sourceFile, targetFolder, true));
        }