Ejemplo n.º 1
0
        /// <summary>
        /// Populates the PayloadDetails object's properties from the given collection of Community view object's properties.
        /// </summary>
        /// <param name="thisObject">PayloadDetails object</param>
        /// <param name="communities">Community View object</param>
        /// <returns>PayloadDetails instance</returns>
        public static PayloadDetails SetValuesFrom(this PayloadDetails thisObject, IEnumerable <CommunitiesView> communities)
        {
            if (communities != null)
            {
                if (thisObject == null)
                {
                    thisObject = InitializePayload();
                }

                foreach (var community in communities)
                {
                    var childCommunity = new PayloadDetails();
                    childCommunity.Name              = community.CommunityName;
                    childCommunity.Id                = community.CommunityID.ToString(CultureInfo.InvariantCulture);
                    childCommunity.MSRCommunityId    = community.CommunityID;
                    childCommunity.FolderType        = "Earth";
                    childCommunity.Group             = "Explorer";
                    childCommunity.CommunityType     = CommunityTypes.Community;
                    childCommunity.FolderRefreshType = "ConditionalGet";
                    childCommunity.Searchable        = true.ToString();
                    childCommunity.Thumbnail         = (community.ThumbnailID != null && community.ThumbnailID.Value != Guid.Empty) ? community.ThumbnailID.ToString() : null;
                    childCommunity.Permission        = Permission.Reader;

                    // Permissions for Community view are hard-coded to Read as it is used for browse
                    thisObject.Children.Add(childCommunity);
                }
            }

            return(thisObject);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// This function retrieves the contents uploaded by the user.
        /// </summary>
        /// <param name="userId">User identity.</param>
        /// <returns>Payload details.</returns>
        public async Task <PayloadDetails> GetUserContents(long userId)
        {
            PayloadDetails payloadDetails = null;

            Expression <Func <Content, bool> > condition = c => c.CreatedByID == userId &&
                                                           c.IsDeleted == false &&
                                                           Enumerable.FirstOrDefault(c.CommunityContents) != null &&
                                                           !(bool)Enumerable.FirstOrDefault(c.CommunityContents).Community.IsDeleted;

            Func <Content, object> orderBy = c => c.ModifiedDatetime;

            var contents = _contentRepository.GetItems(condition, orderBy, true);

            // Get Content Details object from Contents so that it has permission details
            var contentDetailsList = new List <ContentDetails>();

            foreach (Content content in contents)
            {
                var userRole = GetContentUserRole(content, userId);

                // For private contents, user's who have not assigned explicit permission will not have access.
                if (userRole != UserRole.None)
                {
                    var contentDetails = new ContentDetails(userRole.GetPermission());
                    contentDetails.SetValuesFrom(content);
                    contentDetailsList.Add(contentDetails);
                }
            }

            payloadDetails      = PayloadDetailsExtensions.InitializePayload();
            payloadDetails.Name = "My Contents";

            payloadDetails.SetValuesFrom(contentDetailsList);
            return(payloadDetails);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Populates the PayloadDetails object's properties from the given collection of Community view object's properties.
        /// </summary>
        /// <param name="thisObject">PayloadDetails object</param>
        /// <param name="communities">Community View object</param>
        /// <returns>PayloadDetails instance</returns>
        public static PayloadDetails SetValuesFrom(this PayloadDetails thisObject, IEnumerable <CommunityDetails> communities)
        {
            if (communities != null)
            {
                if (thisObject == null)
                {
                    thisObject = InitializePayload();
                }

                foreach (var community in communities)
                {
                    var childCommunity = new PayloadDetails();
                    childCommunity.Name              = community.Name;
                    childCommunity.Id                = community.ID.ToString(CultureInfo.InvariantCulture);
                    childCommunity.MSRCommunityId    = community.ID;
                    childCommunity.FolderType        = "Earth";
                    childCommunity.Group             = "Explorer";
                    childCommunity.CommunityType     = community.CommunityType;
                    childCommunity.FolderRefreshType = "ConditionalGet";
                    childCommunity.Searchable        = community.CommunityType == CommunityTypes.Community ? true.ToString() : false.ToString();
                    childCommunity.Thumbnail         = (community.Thumbnail != null && community.Thumbnail.AzureID != Guid.Empty) ? community.Thumbnail.AzureID.ToString() : null;
                    childCommunity.Permission        = community.UserPermission;

                    thisObject.Children.Add(childCommunity);
                }
            }

            return(thisObject);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Populates the PayloadDetails object's properties from the given collection of Categories object's properties.
        /// </summary>
        /// <param name="thisObject">PayloadDetails object</param>
        /// <param name="categories">Categories object</param>
        /// <returns>PayloadDetails instance</returns>
        public static PayloadDetails SetValuesFrom(this PayloadDetails thisObject, SelectList categories)
        {
            if (categories != null)
            {
                if (thisObject == null)
                {
                    thisObject = InitializePayload();
                }

                foreach (var category in categories)
                {
                    var childCategory = new PayloadDetails();
                    childCategory.Name              = category.Text;
                    childCategory.Id                = category.Value;
                    childCategory.FolderType        = "Earth";
                    childCategory.Group             = "Explorer";
                    childCategory.CommunityType     = CommunityTypes.Folder;
                    childCategory.FolderRefreshType = "ConditionalGet";
                    childCategory.Searchable        = true.ToString();

                    // TODO : Thumbnail for Each category
                    // childCommunity.Thumbnail = (community.ThumbnailID != null && community.ThumbnailID.Value != Guid.Empty) ? community.ThumbnailID.ToString() : null;
                    childCategory.Permission = Permission.Reader;

                    // Permissions for Community view are hard-coded to Read as it is used for browse
                    thisObject.Children.Add(childCategory);
                }
            }

            return(thisObject);
        }
        /// <summary>
        /// Get File stream for all the tours in a folder
        /// </summary>
        /// <param name="payloadDetails">payload Details object</param>
        /// <returns>Result Stream.</returns>
        private Stream GetOutputStream(PayloadDetails payloadDetails)
        {
            Response.ContentType = "application/xml";
            var stream = payloadDetails.GetXmlStream();

            stream.Seek(0, SeekOrigin.Begin);
            return(stream);
        }
Ejemplo n.º 6
0
        public static string CreateProperMapToNodeCreatorXpath(PayloadDetails payloadDetails, string discoveredValue)
        {
            string result = string.Empty;

            result = payloadDetails.NodeToMapTo;
            if (!string.IsNullOrEmpty(payloadDetails.AttributeToMapTo))
            {
                result += "[@" + payloadDetails.AttributeToMapTo + "='" + discoveredValue + "']";
            }
            return(result);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Initialize Payload instance
        /// </summary>
        /// <returns>PayloadDetails instance</returns>
        public static PayloadDetails InitializePayload()
        {
            var thisObject = new PayloadDetails();

            thisObject.Links             = new Collection <Place>();
            thisObject.Children          = new Collection <PayloadDetails>();
            thisObject.Tours             = new Collection <TourModel>();
            thisObject.FolderType        = "Earth";
            thisObject.Group             = "Explorer";
            thisObject.Searchable        = "True";
            thisObject.FolderRefreshType = "ConditionalGet";
            thisObject.CommunityType     = CommunityTypes.Folder;
            thisObject.Permission        = Permission.Reader;
            return(thisObject);
        }
Ejemplo n.º 8
0
        public static string CreateProperMapToNodeFinderXpath(PayloadDetails payloadDetails, IInjectionStrategy strategy)
        {
            string result = string.Empty;

            result = payloadDetails.ParentNodeToMapTo;

            string[] replaceVars = payloadDetails.MapToParams.Split(',');

            for (int i = 0; i < replaceVars.Count(); i++)
            {
                result = result.Replace("{" + i + "}", PayloadHelpers.GetData(replaceVars[i], strategy));
            }

            return(result);
        }
Ejemplo n.º 9
0
        private void cbPayloads_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            PayloadDetails pd = null;

            if (cbPayloads.SelectedItem != null)
            {
                pd = XmlHelpers.GetObjectFromXml <PayloadDetails>(FileHelpers.GetCurrentDirectory() + "\\xml\\payloads.xml",
                                                                  "payload",
                                                                  cbPayloads.SelectedItem.ToString());
                if (_currentInjectionStrategy != null && pd != null)
                {
                    _currentInjectionStrategy.PayloadDetails = pd;
                    txtCustomQuery.Text = pd.Payload;
                }
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Populates the PayloadDetails object's properties from the given Content object's properties.
        /// </summary>
        /// <param name="thisObject">PayloadDetails object</param>
        /// <param name="contentDetail">Content Details object</param>
        /// <returns>PayloadDetails instance</returns>
        public static PayloadDetails SetValuesFrom(this PayloadDetails thisObject, ContentDetails contentDetail)
        {
            if (contentDetail != null)
            {
                if (thisObject == null)
                {
                    thisObject = InitializePayload();
                }

                if (contentDetail.ContentData is FileDetail)
                {
                    var fileDetail = contentDetail.ContentData as FileDetail;
                    if (contentDetail.ContentData.ContentType == ContentTypes.Tours)
                    {
                        var tour = new TourModel();
                        tour.SetValuesFrom(contentDetail);
                        thisObject.Tours.Add(tour);
                    }
                    else if (contentDetail.ContentData.ContentType == ContentTypes.Wtml)
                    {
                        var childCollection = new PayloadDetails();
                        childCollection.Name           = contentDetail.Name;
                        childCollection.Id             = fileDetail.AzureID.ToString();
                        childCollection.MSRComponentId = contentDetail.ID;
                        childCollection.Group          = "Explorer";
                        childCollection.IsCollection   = true;
                        childCollection.Thumbnail      = (contentDetail.Thumbnail != null && contentDetail.Thumbnail.AzureID != Guid.Empty) ? contentDetail.Thumbnail.AzureID.ToString() : null;
                        childCollection.Permission     = contentDetail.UserPermission;
                        thisObject.Children.Add(childCollection);
                    }
                    else
                    {
                        var place = new Place();
                        place.SetValuesFrom(contentDetail);
                        thisObject.Links.Add(place);
                    }
                }
                else
                {
                    var place = new Place();
                    place.SetValuesFrom(contentDetail);
                    thisObject.Links.Add(place);
                }
            }

            return(thisObject);
        }
        /// <summary>
        /// Adds all tours and latest tours to the Payload for the community.
        /// </summary>
        /// <param name="payloadDetails">PayloadDetails object</param>
        private void AddTourFolders(PayloadDetails payloadDetails)
        {
            var baseUri  = ServiceBaseUri();
            var allTours = PayloadDetailsExtensions.InitializePayload();

            allTours.Name = "All Tours";
            allTours.Url  = string.Format(CultureInfo.InvariantCulture, "{0}/Community/{1}/Tours", baseUri, payloadDetails.Id);

            var latestTours = PayloadDetailsExtensions.InitializePayload();

            latestTours.Name = "Latest";
            latestTours.Url  = string.Format(CultureInfo.InvariantCulture, "{0}/Community/{1}/Latest", baseUri, payloadDetails.Id);

            // Insert tour folders at the start
            payloadDetails.Children.Insert(0, latestTours);
            payloadDetails.Children.Insert(0, allTours);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Populates the PayloadDetails object's properties from the given content collection.
        /// </summary>
        /// <param name="thisObject">PayloadDetails object</param>
        /// <param name="contentDetails">Content Details collection</param>
        /// <returns>PayloadDetails instance</returns>
        public static PayloadDetails SetValuesFrom(this PayloadDetails thisObject, IEnumerable <ContentDetails> contentDetails)
        {
            if (contentDetails != null)
            {
                if (thisObject == null)
                {
                    thisObject = InitializePayload();
                }

                foreach (var contentDetail in contentDetails)
                {
                    SetValuesFrom(thisObject, contentDetail);
                }
            }

            return(thisObject);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Populates the PayloadDetails object's properties from the given collection of ContentsView object's properties.
        /// </summary>
        /// <param name="thisObject">PayloadDetails object</param>
        /// <param name="contents">ContentsView objects</param>
        /// <returns>PayloadDetails instance</returns>
        public static PayloadDetails SetValuesFrom(this PayloadDetails thisObject, IEnumerable <ContentsView> contents)
        {
            if (contents != null)
            {
                if (thisObject == null)
                {
                    thisObject = InitializePayload();
                }

                foreach (var content in contents)
                {
                    if (content.Filename.EndsWith(Constants.TourFileExtension, StringComparison.OrdinalIgnoreCase))
                    {
                        var tour = new TourModel();
                        tour.SetValuesFrom(content);
                        thisObject.Tours.Add(tour);
                    }
                    else if (content.Filename.EndsWith(Constants.CollectionFileExtension, StringComparison.OrdinalIgnoreCase))
                    {
                        var childCollection = new PayloadDetails();
                        childCollection.Name           = content.Title;
                        childCollection.Id             = content.ContentAzureID.ToString();
                        childCollection.MSRComponentId = content.ContentID;
                        childCollection.Group          = "Explorer";
                        childCollection.IsCollection   = true;
                        childCollection.Thumbnail      = (content.ThumbnailID.HasValue && content.ThumbnailID != Guid.Empty) ? content.ThumbnailID.ToString() : null;

                        // Permissions for Content view are hard-coded to Read as it is used for browse
                        childCollection.Permission = Permission.Reader;
                        thisObject.Children.Add(childCollection);
                    }
                    else
                    {
                        var place = new Place();
                        place.SetValuesFrom(content);
                        thisObject.Links.Add(place);
                    }
                }
            }

            return(thisObject);
        }
Ejemplo n.º 14
0
        public static bool SaveToMappingFile(string mappingFile, PayloadDetails payloadDetails, string discoveredValue, IInjectionStrategy strategy,
                                             string dbmsName)
        {
            if (string.IsNullOrEmpty(payloadDetails.NodeToMapTo))
            {
                return(false);
            }

            XDocument document = null;
            string    error    = string.Empty;

            if (!CreateOrLoadMappingFile(mappingFile, strategy, dbmsName, ref error, out document))
            {
                return(false);//TODO: write message to UI
            }
            var element = document.XPathSelectElement(CreateProperMapToNodeFinderXpath(payloadDetails, strategy));

            if (element.XPathSelectElement(CreateProperMapToNodeCreatorXpath(payloadDetails, discoveredValue)) == null)
            {
                if (!string.IsNullOrEmpty(payloadDetails.AttributeToMapTo))
                {
                    element.Add(
                        new XElement(payloadDetails.NodeToMapTo, new XAttribute(payloadDetails.AttributeToMapTo, discoveredValue))
                        );
                }
                else
                {
                    element.Add(new XElement(payloadDetails.NodeToMapTo, discoveredValue));
                }

                //For simplicity, I just use the Save() method to overwrite the current .xml file
                document.Save(mappingFile);
                return(true);
            }
            return(false);
        }
        /// <summary>
        /// Rewrites the Thumbnail path and the URL of the Payload for the community.
        /// </summary>
        /// <param name="payloadDetails">PayloadDetails object</param>
        /// <param name="hasChildCommunities"></param>

        private async void RewritePayloadUrls(PayloadDetails payloadDetails, bool hasChildCommunities)
        {
            var baseUri = BaseUri();

            if (payloadDetails.CommunityType == CommunityTypes.Community)
            {
                payloadDetails.Thumbnail = RewriteThumbnailUrl(payloadDetails.Thumbnail, "defaultcommunitywwtthumbnail");
            }
            else
            {
                payloadDetails.Thumbnail = RewriteThumbnailUrl(payloadDetails.Thumbnail, "defaultfolderwwtthumbnail");
            }

            // Update Place Urls
            foreach (var place in payloadDetails.Links)
            {
                place.Thumbnail = RewriteThumbnailUrl(place.Thumbnail, place.FileType.GetContentTypeImage());
                var fileExt = "none";
                if (place.Url.Contains(".") && place.FileType != ContentTypes.Link)
                {
                    fileExt = place.Url.Substring(place.Url.LastIndexOf(".") + 1);
                }

                place.Url = place.FileType == ContentTypes.Link
                    ? place.ContentLink
                    : string.Format(CultureInfo.InvariantCulture, "{0}/File/Download/{1}/{2}/{3}/{4}", baseUri,
                                    place.ContentAzureID, Uri.EscapeDataString(place.Name.Replace("&", "and")), fileExt,
                                    fileExt == "wtml" ? "wwtfull=true":string.Empty);
            }

            // Update Content Urls
            foreach (var childCommunity in payloadDetails.Children)
            {
                if (childCommunity.IsCollection)
                {
                    // Only for collection set the default thumbnail, not for folders.
                    childCommunity.Thumbnail = RewriteThumbnailUrl(childCommunity.Thumbnail, "defaultwtmlwwtthumbnail");
                    childCommunity.Url       = string.Format(CultureInfo.InvariantCulture, "{0}/File/Download/{1}/ChildCommunityData", baseUri, childCommunity.Id);
                }
                else
                {
                    if (hasChildCommunities)
                    {
                        childCommunity.Thumbnail = RewriteThumbnailUrl(childCommunity.Thumbnail, "defaultcommunitywwtthumbnail");
                        childCommunity.Url       = string.Format(CultureInfo.InvariantCulture, "{0}/Community/{1}", ServiceBaseUri(), childCommunity.Id);
                    }
                    else
                    {
                        childCommunity.Thumbnail = RewriteThumbnailUrl(childCommunity.Thumbnail,
                                                                       childCommunity.CommunityType == CommunityTypes.Community ?
                                                                       "defaultcommunitywwtthumbnail" :
                                                                       "defaultfolderwwtthumbnail");

                        childCommunity.Url = string.Format(CultureInfo.InvariantCulture, "{0}/Folder/{1}", ServiceBaseUri(), childCommunity.Id);
                    }
                }
            }

            // Get profile details of all the user who have created the tours
            IEnumerable <ProfileDetails> profileDetails = new List <ProfileDetails>();

            if (payloadDetails.Tours.Any())
            {
                // AuthorImageUrl has the created by ID of the user. This needs to be replaced with the URL for users picture
                var userList = payloadDetails.Tours.Select(item => item.AuthorImageUrl).ToList().ConvertAll <long>(Convert.ToInt64).AsEnumerable();
                profileDetails = _profileService.GetProfiles(userList.Distinct());
            }

            // Update Tour Urls including thumbnail, author and author image
            foreach (var tour in payloadDetails.Tours)
            {
                tour.ThumbnailUrl = RewriteThumbnailUrl(tour.ThumbnailUrl, "defaulttourswwtthumbnail");
                tour.TourUrl      = string.Format(CultureInfo.InvariantCulture, "{0}/File/Download/{1}/{2}/wtt/?wwtfull=true", baseUri, tour.TourUrl, Uri.EscapeDataString(tour.Title.Replace("&", "and")));
                tour.AuthorURL    = string.Format(CultureInfo.InvariantCulture, "{0}/Profile/Index/{1}", baseUri, tour.AuthorURL);

                // Get profile picture ID using AuthorImageUrl which is CreatedByID value.
                var firstOrDefault = profileDetails.FirstOrDefault(item => item.ID.ToString(CultureInfo.InvariantCulture) == tour.AuthorImageUrl);
                if (firstOrDefault != null)
                {
                    var pictureId = firstOrDefault.PictureID;
                    if (pictureId.HasValue)
                    {
                        tour.AuthorImageUrl = string.Format(CultureInfo.InvariantCulture, "{0}/File/Thumbnail/{1}", baseUri, pictureId.Value);
                    }
                    else
                    {
                        // return default profile image
                        tour.AuthorImageUrl = RewriteThumbnailUrl(string.Empty, "wwtprofile");
                    }
                }
            }
        }