예제 #1
0
파일: Class1.cs 프로젝트: Wootrix/Wootrix2
        public void RemoveSegmentFromArticleSegments(SegmentArticle art, string segmentTitle)
        {
            string str1     = "";
            string segments = art.Segments;

            foreach (string str2 in art.Segments.Split("|", StringSplitOptions.None))
            {
                if (!str2.Contains(segmentTitle))
                {
                    str1 += str2;
                }
            }
            art.Segments = str1;
            ((DbContext)this._context).Update <SegmentArticle>(art);
            ((DbContext)this._context).SaveChanges();
        }
예제 #2
0
        public void RemoveSegmentFromArticleSegments(SegmentArticle art, string segmentTitle)
        {
            var updatedSegmentsAndOrders = "";
            //Split the segments into a list, grab their order and increment it then save the change
            var segments     = art.Segments;
            var segmentsList = art.Segments.Split("|");

            foreach (string segmentTitleAndOrder in segmentsList)
            {
                if (!segmentTitleAndOrder.Contains(segmentTitle))
                {
                    updatedSegmentsAndOrders += segmentTitleAndOrder;
                }
            }
            art.Segments = updatedSegmentsAndOrders;
            _context.Update(art);
            _context.SaveChanges();
        }
예제 #3
0
        /// <summary>
        /// So pass 4 of the filtering rules:
        /// If user has no filters show all articles
        /// If user has filter x, any article shown must contain x in that group but it will show if it has other filters in that group also
        /// If user has filters x1 and x2, any article shown will have either x1 or x2
        /// If user has filters x and y set from different groups, any article shown must contain those filters in their respective groups
        /// <param name="art">Article to test</param>
        /// <param name="usr">User who's filters to compare to the passed article</param>
        /// <returns></returns>
        public bool ArticleMatchesUserFilters(SegmentArticle art, User usr)
        {
            bool matches = false;

            //If no filters for user all articles will show that have no filters.
            if (string.IsNullOrEmpty(usr.Groups) && string.IsNullOrEmpty(usr.TypeOfUser) && string.IsNullOrEmpty(usr.Topics) && string.IsNullOrEmpty(usr.WebsiteLanguage) && string.IsNullOrEmpty(usr.Country) && string.IsNullOrEmpty(usr.State) && string.IsNullOrEmpty(usr.City))
            {
                //So the user has absolutely no filtering set so we should show all articles
                matches = true;
            }

            else if (PassesFilter(art.Country, usr.Country) && PassesFilter(art.State, usr.State) && PassesFilter(art.City, usr.City) &&
                     PassesFilter(art.Groups, usr.Groups) && PassesFilter(art.TypeOfUser, usr.TypeOfUser) && PassesFilter(art.Topics, usr.Topics) && PassesFilter(art.Languages, usr.WebsiteLanguage))
            {
                matches = true;
            }
            return(matches);
        }
예제 #4
0
        // Decrement everything below it
        public void DeleteArticleAndUpdateOthersOrder(SegmentArticle article, string segmentTitle, int orderDeletedArticleIsAt)
        {
            List <SegmentArticle> segmentArticle = _context.SegmentArticle.Where(m => m.CompanyID == article.CompanyID && m.Segments.Contains(segmentTitle)).ToList();

            foreach (var art in segmentArticle)
            {
                var updatedSegmentsAndOrders = "";
                //Split the segments into a list, grab their order and increment it then save the change
                var segments     = art.Segments;
                var segmentsList = art.Segments.Split("|");
                foreach (string segmentTitleAndOrder in segmentsList)
                {
                    var ender = "";
                    // If this isn't the last title, add a delimited
                    if (segmentsList.Last() != segmentTitleAndOrder)
                    {
                        ender = "|";
                    }

                    if (segmentTitleAndOrder.Contains(segmentTitle))
                    {
                        //Get the order and increment
                        var  titleAndOrder = segmentTitleAndOrder.Split("/");
                        int  ord;
                        bool success2 = int.TryParse(titleAndOrder[1], out ord);
                        if (ord > orderDeletedArticleIsAt)
                        {
                            --ord;
                        }
                        updatedSegmentsAndOrders += titleAndOrder[0] + "/" + ord + ender;
                    }
                    else
                    {
                        // just add it unchanged
                        updatedSegmentsAndOrders += segmentTitleAndOrder + ender;
                    }
                }
                art.Segments = updatedSegmentsAndOrders;
                _context.Update(art);
            }
        }
예제 #5
0
        // Decrement everything below it
        public void DeleteArticleAndUpdateOthersOrder(SegmentArticle article, string segmentTitle)
        {
            foreach (var art in _context.SegmentArticle.Where(m => m.CompanyID == article.CompanyID && m.Order > article.Order))
            {
                var updatedSegmentsAndOrders = "";
                //Split the segments into a list, grab their order and increment it then save the change
                var segments     = art.Segments;
                var segmentsList = art.Segments.Split("|");
                foreach (string segmentTitleAndOrder in segmentsList)
                {
                    var ender = "";
                    // If this isn't the last title, add a delimited
                    if (segmentsList.Last() != segmentTitleAndOrder)
                    {
                        ender = "|";
                    }

                    if (segmentTitleAndOrder.Contains(segmentTitle))
                    {
                        //Get the order and increment
                        var  titleAndOrder = segmentTitleAndOrder.Split("/");
                        int  ord;
                        bool success2 = int.TryParse(titleAndOrder[1], out ord);
                        ord--;
                        updatedSegmentsAndOrders += titleAndOrder[0] + "/" + ord + ender;
                    }
                    else
                    {
                        // just add it unchanged
                        updatedSegmentsAndOrders += segmentTitleAndOrder + ender;
                    }
                }
                art.Segments = updatedSegmentsAndOrders;
                art.Order--;
                _context.Update(art);
            }

            // Remove the current segement and order from the passed article
            RemoveSegmentFromArticleSegments(article, segmentTitle);
            _context.SaveChanges();
        }
예제 #6
0
파일: Class1.cs 프로젝트: Wootrix/Wootrix2
        public void DeleteArticleAndUpdateOthersOrder(
            SegmentArticle article,
            string segmentTitle,
            int orderDeletedArticleIsAt)
        {
            DbSet <SegmentArticle> segmentArticle = this._context.SegmentArticle;
            Expression <Func <SegmentArticle, bool> > predicate = (Expression <Func <SegmentArticle, bool> >)(m => m.CompanyID == article.CompanyID && m.Segments.Contains(segmentTitle));

            foreach (SegmentArticle entity in (IEnumerable <SegmentArticle>)segmentArticle.Where <SegmentArticle>(predicate))
            {
                string   str1      = "";
                string   segments  = entity.Segments;
                string[] strArray1 = entity.Segments.Split("|", StringSplitOptions.None);
                foreach (string str2 in strArray1)
                {
                    string str3 = "";
                    if (((IEnumerable <string>)strArray1).Last <string>() != str2)
                    {
                        str3 = "|";
                    }
                    if (str2.Contains(segmentTitle))
                    {
                        string[] strArray2 = str2.Split("/", StringSplitOptions.None);
                        int      result;
                        int.TryParse(strArray2[1], out result);
                        if (result > orderDeletedArticleIsAt)
                        {
                            --result;
                        }
                        str1 = str1 + strArray2[0] + "/" + (object)result + str3;
                    }
                    else
                    {
                        str1 = str1 + str2 + str3;
                    }
                }
                entity.Segments = str1;
                ((DbContext)this._context).Update <SegmentArticle>(entity);
            }
        }
예제 #7
0
파일: Class1.cs 프로젝트: Wootrix/Wootrix2
        public void DeleteArticleAndUpdateOthersOrder(SegmentArticle article, string segmentTitle)
        {
            DbSet <SegmentArticle> segmentArticle1 = this._context.SegmentArticle;
            Expression <Func <SegmentArticle, bool> > predicate = (Expression <Func <SegmentArticle, bool> >)(m => m.CompanyID == article.CompanyID && m.Order > article.Order);

            foreach (SegmentArticle entity in (IEnumerable <SegmentArticle>)segmentArticle1.Where <SegmentArticle>(predicate))
            {
                string   str1      = "";
                string   segments  = entity.Segments;
                string[] strArray1 = entity.Segments.Split("|", StringSplitOptions.None);
                foreach (string str2 in strArray1)
                {
                    string str3 = "";
                    if (((IEnumerable <string>)strArray1).Last <string>() != str2)
                    {
                        str3 = "|";
                    }
                    if (str2.Contains(segmentTitle))
                    {
                        string[] strArray2 = str2.Split("/", StringSplitOptions.None);
                        int      result;
                        int.TryParse(strArray2[1], out result);
                        --result;
                        str1 = str1 + strArray2[0] + "/" + (object)result + str3;
                    }
                    else
                    {
                        str1 = str1 + str2 + str3;
                    }
                }
                entity.Segments = str1;
                SegmentArticle segmentArticle2 = entity;
                int?           order           = segmentArticle2.Order;
                segmentArticle2.Order = order.HasValue ? new int?(order.GetValueOrDefault() - 1) : new int?();
                ((DbContext)this._context).Update <SegmentArticle>(entity);
            }
            this.RemoveSegmentFromArticleSegments(article, segmentTitle);
            ((DbContext)this._context).SaveChanges();
        }
예제 #8
0
        public async Task <IActionResult> Create(SegmentArticleViewModel sa)
        {
            var myArticle = new SegmentArticle();

            _user = _context.User.FirstOrDefault(p => p.EmailAddress == _userManager.GetUserAsync(User).GetAwaiter().GetResult().Email);
            _cpy  = _context.Company.FirstOrDefaultAsync(m => m.ID == _user.CompanyID).GetAwaiter().GetResult();
            //Have to check the article title isn't already used
            var existingArticle = _context.SegmentArticle.FirstOrDefault(n => n.Title == sa.Title && n.CompanyID == sa.CompanyID);

            if (existingArticle == null)
            {
                if (ModelState.IsValid)
                {
                    //ID,Order,Title,CoverImage,CoverImageMobileFriendly,PublishDate,FinishDate,ClientName,ClientLogoImage,ThemeColor,StandardColor,Draft,Department,Tags
                    myArticle.CompanyID = _user.CompanyID;

                    myArticle.Title          = WebUtility.HtmlEncode(sa.Title);
                    myArticle.PublishFrom    = sa.PublishFrom ?? DateTime.Now.AddDays(-1);
                    myArticle.PublishTill    = sa.PublishTill ?? DateTime.Now.AddYears(10);
                    myArticle.AllowComments  = sa.AllowComments;
                    myArticle.ArticleContent = WebUtility.HtmlEncode(sa.ArticleContent);
                    myArticle.Author         = (sa.Author ?? _user.Name); //if null set to be user name
                    myArticle.CreatedBy      = _user.Name;
                    myArticle.ArticleUrl     = WebUtility.HtmlEncode(sa.ArticleUrl);
                    myArticle.Order          = 1;
                    myArticle.Tags           = WebUtility.HtmlEncode(sa.Tags);

                    myArticle.Languages  = string.Join("|", sa.SelectedLanguages);
                    myArticle.Groups     = string.Join("|", sa.SelectedGroups);
                    myArticle.Topics     = string.Join("|", sa.SelectedTopics);
                    myArticle.TypeOfUser = string.Join("|", sa.SelectedTypeOfUser);
                    if (sa.Country != null && sa.Country != "")
                    {
                        myArticle.Country = _context.LocationCountries.FirstOrDefault(m => m.country_code == sa.Country).country_name;
                    }
                    if (sa.State != null && sa.State != "")
                    {
                        myArticle.State = _context.LocationStates.FirstOrDefault(n => n.country_code == sa.Country && n.state_code == sa.State).state_name;
                    }
                    myArticle.City = sa.City;

                    //Now we need to get what the article ID will be as it isn't normally generated till created.
                    int artID = _context.SegmentArticle.OrderByDescending(u => u.ID).FirstOrDefault().ID + 1;

                    IFormFile img = sa.Image;
                    if (img != null)
                    {
                        await _dla.UploadFileToS3(img, _user.CompanyName + "_" + artID + "_" + img.FileName, "images/Uploads/Articles");

                        //The file has been saved to disk - now save the file name to the DB
                        myArticle.Image = img.FileName;
                    }

                    IFormFile vid = sa.EmbeddedVideo;
                    if (vid != null)
                    {
                        await _dla.UploadFileToS3(vid, _user.CompanyName + "_" + artID + "_" + vid.FileName, "images/Uploads/Articles");

                        //The file has been saved to disk - now save the file name to the DB
                        myArticle.EmbeddedVideo = vid.FileName;
                    }

                    // As they want order to be associated with segment now im having to smush it in with the current field....a bit ugly
                    if (sa.SelectedSegments.Count > 0)
                    {
                        myArticle.Segments = CreateSegmentsStringWithOrder1(sa.SelectedSegments);
                    }

                    _context.Add(myArticle);
                    await _context.SaveChangesAsync();

                    return(RedirectToAction(nameof(Index)));
                }
            }
            else
            {
                // Article title already exists
                ModelState.AddModelError(string.Empty, "Article Title already exists - please choose something unique");
            }
            DataAccessLayer dla = new DataAccessLayer(_context);

            var listOfAllSegements = dla.GetArticleSegments(_user.CompanyID);

            foreach (var seg in listOfAllSegements)
            {
                sa.AvailableSegments.Add(new SelectListItem {
                    Text = seg.Value, Value = seg.Value
                });
            }

            // Add group checkboxes
            var listOfAllGroups = dla.GetListGroups(_user.CompanyID);

            foreach (var seg in listOfAllGroups)
            {
                sa.AvailableGroups.Add(new SelectListItem {
                    Text = seg.Value, Value = seg.Value
                });
            }

            // Add topic checkboxes
            var listOfAllTopics = dla.GetListTopics(_user.CompanyID);

            foreach (var seg in listOfAllTopics)
            {
                sa.AvailableTopics.Add(new SelectListItem {
                    Text = seg.Value, Value = seg.Value
                });
            }

            // Add type checkboxes
            var listOfAllTypeOfUser = dla.GetListTypeOfUser(_user.CompanyID);

            foreach (var seg in listOfAllTypeOfUser)
            {
                sa.AvailableTypeOfUser.Add(new SelectListItem {
                    Text = seg.Value, Value = seg.Value
                });
            }

            // Add language checkboxes
            var listOfAllLanguages = dla.GetListLanguages(_user.CompanyID, _rlo);

            foreach (var seg in listOfAllLanguages)
            {
                sa.AvailableLanguages.Add(new SelectListItem {
                    Text = seg.Value, Value = seg.Value
                });
            }

            // Get location dropdown data
            sa.Countries = dla.GetCountries();
            sa.States    = dla.GetNullStatesOrCities();
            sa.Cities    = dla.GetNullStatesOrCities();
            return(View(sa));
        }