Ejemplo n.º 1
0
        private string MovePageStubs(XDoc spaceManifest, string spaceRoot, string parentPagePath, RemotePageSummary confluenceRemotePageSummary,
                                     string pageName, string pageTitle, ACConverterPageInfo parentPage)
        {
            RemotePage confluenceRemotePage = _confluenceService.GetPage(confluenceRemotePageSummary.id);
            string     tinyUrl = null;

            if (_rpcclient != null)
            {
                CFRpcExtensions rpcExt = new CFRpcExtensions(_rpcclient);
                tinyUrl = rpcExt.GetTinyUrlForPageId(confluenceRemotePageSummary.id.ToString());
            }

            string pagePath = null;

            //If PageName not null use it, else use Confluence page title.
            if (pageName == null)
            {
                pageName = confluenceRemotePage.title;
            }

            pagePath = pageName;
            if (parentPagePath != null)
            {
                pagePath = parentPagePath + Utils.DoubleUrlEncode("/" + pagePath);
            }

            //If the page title is too long it gets saved as {spaceroot}/misc/{pageid} with the page title set
            if (pagePath.Length > MaxLengthOfPageTitle)
            {
                pagePath = Utils.DoubleUrlEncode(string.Format(@"{0}/misc/{1}", spaceRoot, confluenceRemotePage.id));
                if (string.IsNullOrEmpty(pageTitle))
                {
                    pageTitle = pageName;
                }
                Log.WarnFormat("Page title longer than {0}. Will be placed into {1}. Title: {2}", MaxLengthOfPageTitle, pagePath, pageTitle);
            }

            Plug postPageDekiPlug = (confluenceRemotePage.creator == null) ? _dekiPlug :
                                    GetPlugForConvertedUser(confluenceRemotePage.creator);

            Log.TraceFormat("Creating page stub in space '{0}'", confluenceRemotePage.space);

            string mtPageUrl;

            // modified date string, according to:

            /* http://developer.mindtouch.com/en/ref/MindTouch_API/POST%3apages%2f%2f%7Bpageid%7D%2f%2fcontents
             * should be formatted as:
             * the edit timestamp - yyyyMMddHHmmss or yyyy-MM-ddTHH:mm:ssZ
             */

            int dekiPageId = CreateDekiPage(postPageDekiPlug, pagePath, pageTitle, confluenceRemotePage.modified, "",
                                            out mtPageUrl);

            if (dekiPageId == -1)
            {
                //TODO (maxm): page failure needs to be recorded and steps that depend
                // on it such as attachments and children should be skipped
                return(string.Empty);
            }
            ACConverterPageInfo pageInfo = new ACConverterPageInfo(confluenceRemotePage, spaceRoot, mtPageUrl, pagePath, dekiPageId, pageTitle, tinyUrl, parentPage);

            Utils.PersistPageInfo(pageInfo);

            //Confluence view page permission is inherited. Save they to use later in MovePermissions.
            SavePageViewPermissions(pageInfo);

            RemotePageSummary[] childPages = _confluenceService.GetChildren(confluenceRemotePage.id);
            foreach (RemotePageSummary childPageSummary in childPages)
            {
                MovePageStubs(spaceManifest, spaceRoot, pagePath, childPageSummary, null, null, pageInfo);
            }

            SaveCommentsLinks(spaceManifest, pageInfo.ConfluencePage.space, pageInfo.ConfluencePage.id, mtPageUrl);

            MoveAttachments(spaceManifest, pageInfo.DekiPageId, pageInfo.ConfluencePage.id);

            LogPageConversion(spaceManifest, pageInfo);

            return(pagePath);
        }