Exemplo n.º 1
0
        public ActionResult CourtAct(int id, int?siteSearchId)
        {
            CourtAct courtAct = null;

            if (this.CheckRights)
            {
                int[]             productIds = Doc.GetDocProducts(id);
                IEnumerable <int> prod       = this.UserData.Products.Select(p => p.ProductId).ToArray().Intersect(productIds);
                if (prod.Count() == 0)
                {
                    string[] products = ((List <Product>) this.Session["ProductsList"]).Where(p => productIds.Contains(p.ProductId) == true).Select(p => p.ProductName).ToArray();
                    string   errorMsg = "To open this document you need valid license for '" + String.Join("' or '", products) + "'";

                    this.ViewBag.DocError = errorMsg;
                    return(this.View(new CourtAct()));
                }
            }

            bool showFreeDocs = this.UserData.ShowFreeDocuments;

            #region Search and stats creatings
            if (siteSearchId.HasValue)
            {
                ViewBag.SiteSearchId = siteSearchId.Value;
                //int searchId = int.Parse(siteSearchId.Substring(siteSearchId.LastIndexOf('-') + 1));

                SearchResult sr = SearchResult.FindSearchResult(siteSearchId.Value, this.Session["SearchResults"]);

                if (sr != null)
                {
                    // if text is searched - add to statistic
                    if (sr.StatSearchId.HasValue)
                    {
                        Stat.SetStatSearchDoc(sr.StatSearchId.Value, id);
                    }

                    if (sr.SearchSource == SearchSources.Search)
                    {
                        if (this.Session["local-search-" + id + "-" + siteSearchId] != null && this.Session["local-search-" + id + "-" + siteSearchId].ToString() != "")
                        {
                            var highLightParams = new DocHighlightSearchParams(
                                this.Session["local-search-" + id + "-" + siteSearchId].ToString(),
                                null,
                                Convert.ToBoolean(this.Session["local-search-exactmatch-" + id + "-" + siteSearchId]),
                                null,
                                null);

                            courtAct = CourtActBL.GetCourtAct(
                                id,
                                this.Language.Id,
                                this.UserData.UserId,
                                highLightParams,
                                this.ProductId,
                                showFreeDocs);
                        }
                        else
                        {
                            var complexSearchText = sr.SearchBoxFilters.SearchText;
                            if (sr.SearchBoxFilters.Cases != null && !String.IsNullOrEmpty(sr.SearchBoxFilters.Cases.MultiDict.Text))
                            {
                                if (!String.IsNullOrEmpty(sr.SearchBoxFilters.SearchText))
                                {
                                    complexSearchText = complexSearchText + " AND (";
                                }
                                else
                                {
                                    complexSearchText = "(";
                                }

                                complexSearchText = complexSearchText + sr.SearchBoxFilters.Cases.MultiDict.Text;    // combining search text with multilingial dictionary if present
                                complexSearchText = complexSearchText.Replace("OR", "[OR]").Replace("AND", "[AND]"); // trimming logical operators
                                complexSearchText = complexSearchText + ")";
                            }
                            else if (sr.SearchBoxFilters.Law != null && !String.IsNullOrEmpty(sr.SearchBoxFilters.Law.MultiDict.Text))
                            {
                                if (!String.IsNullOrEmpty(sr.SearchBoxFilters.SearchText))
                                {
                                    complexSearchText = complexSearchText + " AND (";
                                }
                                else
                                {
                                    complexSearchText = "(";
                                }

                                complexSearchText = complexSearchText + sr.SearchBoxFilters.Law.MultiDict.Text;      // combining search text with multilingial dictionary if present
                                complexSearchText = complexSearchText.Replace("OR", "[OR]").Replace("AND", "[AND]"); // trimming logical operators
                                complexSearchText = complexSearchText + ")";
                            }
                            else if (sr.SearchBoxFilters.MultiDict != null && !String.IsNullOrEmpty(sr.SearchBoxFilters.MultiDict.Text))
                            {
                                if (!String.IsNullOrEmpty(sr.SearchBoxFilters.SearchText))
                                {
                                    complexSearchText = complexSearchText + " AND (";
                                }
                                else
                                {
                                    complexSearchText = "(";
                                }

                                complexSearchText = complexSearchText + sr.SearchBoxFilters.MultiDict.Text;          // combining search text with multilingial dictionary if present
                                complexSearchText = complexSearchText.Replace("OR", "[OR]").Replace("AND", "[AND]"); // trimming logical operators
                                complexSearchText = complexSearchText + ")";
                            }

                            var highLightParams = new DocHighlightSearchParams();

                            if (!String.IsNullOrEmpty(sr.SearchBoxFilters.SearchTextMultiLingual))
                            {
                                highLightParams.SearchText = complexSearchText;
                                highLightParams.MultilingualSearchedText = sr.SearchBoxFilters.SearchTextMultiLingual;
                                highLightParams.ExactMatch = sr.SearchBoxFilters.ExactMatch;

                                if (sr.SearchBoxFilters.Cases != null && !String.IsNullOrEmpty(sr.SearchBoxFilters.Cases.NatID_ECLI))
                                {
                                    highLightParams.SearchedCelex = sr.SearchBoxFilters.Cases.NatID_ECLI;
                                }
                                else
                                {
                                    courtAct = CourtActBL.GetCourtAct(
                                        id,
                                        this.Language.Id,
                                        this.UserData.UserId,
                                        highLightParams,
                                        this.ProductId,
                                        showFreeDocs);
                                }
                            }
                            else
                            {
                                highLightParams.SearchText = complexSearchText;
                                highLightParams.ExactMatch = sr.SearchBoxFilters.ExactMatch;

                                if (sr.SearchBoxFilters.Cases != null)
                                {
                                    if (!String.IsNullOrEmpty(sr.SearchBoxFilters.Cases.EnactmentCelex))
                                    {
                                        highLightParams.SearchedCelex = sr.SearchBoxFilters.Cases.EnactmentCelex;
                                    }

                                    if (!String.IsNullOrEmpty(sr.SearchBoxFilters.Cases.ProvisionParOriginal))
                                    {
                                        var searchedPars = new List <string>();
                                        searchedPars.Add(sr.SearchBoxFilters.Cases.ProvisionParOriginal);
                                        highLightParams.SearchedPars = searchedPars;
                                    }
                                }

                                courtAct = CourtActBL.GetCourtAct(
                                    id,
                                    this.Language.Id,
                                    this.UserData.UserId,
                                    highLightParams,
                                    this.ProductId,
                                    showFreeDocs);
                            }
                        }
                    }
                    else if (sr.SearchSource == SearchSources.InLinks)
                    {
                        var highlightParams = new DocHighlightSearchParams();
                        if (!String.IsNullOrEmpty(sr.SearchBoxFilters.DocInLinks.ToDocNumber))
                        {
                            highlightParams.SearchedCelex = sr.SearchBoxFilters.DocInLinks.ToDocNumber;
                        }

                        if (sr.SearchBoxFilters.DocInLinks.ToPars != null && sr.SearchBoxFilters.DocInLinks.ToPars.Count > 0)
                        {
                            highlightParams.SearchedPars = sr.SearchBoxFilters.DocInLinks.ToPars;
                        }

                        /* Highlight for inlinks should go here */

                        courtAct = CourtActBL.GetCourtAct(
                            id,
                            this.Language.Id,
                            this.UserData.UserId,
                            highlightParams,
                            this.ProductId,
                            showFreeDocs);
                    }
                }
            }
            else if (this.Session["local-search-" + id + "-" + siteSearchId] != null && this.Session["local-search-" + id + "-" + siteSearchId].ToString() != "")
            {
                var highLightParams = new DocHighlightSearchParams();
                highLightParams.SearchText = this.Session["local-search-" + id + "-" + siteSearchId].ToString();
                highLightParams.ExactMatch = Convert.ToBoolean(this.Session["local-search-exactmatch-" + id + "-" + siteSearchId]);

                courtAct = CourtActBL.GetCourtAct(
                    id,
                    this.Language.Id,
                    this.UserData.UserId,
                    highLightParams,
                    this.ProductId,
                    showFreeDocs);
            }
            else if (this.Session["local-search-" + id] != null && this.Session["local-search-exactmatch-" + id] != null)
            {
                var highLightParams = new DocHighlightSearchParams();
                highLightParams.SearchText = this.Session["local-search-" + id].ToString();
                highLightParams.ExactMatch = Convert.ToBoolean(this.Session["local-search-exactmatch-" + id + "-" + siteSearchId]);

                courtAct = CourtActBL.GetCourtAct(
                    id,
                    this.Language.Id,
                    this.UserData.UserId,
                    highLightParams,
                    this.ProductId,
                    showFreeDocs);
            }

            if (courtAct == null)
            {
                var highLightParams = new DocHighlightSearchParams(null, null, false, null, null);

                courtAct = CourtActBL.GetCourtAct(
                    id,
                    this.Language.Id,
                    this.UserData.UserId,
                    highLightParams,
                    this.ProductId,
                    showFreeDocs);
            }

            #endregion

            if (courtAct != null)
            {
                // Rewriting inline links before visualization
                var linkRewriter = new DocLinksRewriter(courtAct.LangId, WebAppHelper.AppRootFolder, this.UserData.OpenDocumentsInNewTab, this.NationalLegislationMapPath);
                courtAct.RewriteInLineLinks(linkRewriter);

                this.ViewBag.Title = courtAct.HtmlModel.Title.Value.ToString();
                //only limited number of docs are avaiable in sysdemo
                //List<string> avaiableDocsCelexes = ConfigurationManager.AppSettings["SysDemoDocumentsCelex"].ToString().Split(',').ToList();
                //if (this.UserData.Username.ToLower() == "sysdemo")
                //{
                //    Regex reglamentsAndDirectivesRegex = new Regex("3.{4}[RrLl](.*)");

                //    if (!((courtAct.DocType == 2 && !courtAct.DocNumber.StartsWith("7")) ||
                //        avaiableDocsCelexes.Any(c => c == courtAct.DocNumber) ||
                //        (courtAct.DocType == 1 && courtAct.DocNumber.Substring(0, 1) == "6" && courtAct.Country.ToLower() == "eu") ||
                //        reglamentsAndDirectivesRegex.IsMatch(courtAct.DocNumber) ||
                //        Doc.IsInternationalStandartDoc(courtAct.DocLangId) ||
                //        Doc.IsDemoDoc(courtAct.DocLangId)))
                //    {
                //        if (Common.CheckRequestOriginIsBotSoft(this.Request.UserAgent) || this.DemoBonusDocumentsCheck(courtAct.DocNumber) == false)
                //        {
                //            var productFeaturesInfo = new ProductFeaturesInfo(FunctionalityTypes.DocumentOpen, courtAct);
                //            string viewName = this.ProductId == 1 ? "~/Views/Shared/_ProductFeaturesInfo_Wrapper.cshtml" : "~/Views/Shared/_ProductFeaturesInfo_Finances.cshtml";
                //            this.ViewBag.UseLayout = true;
                //            return this.View(viewName, productFeaturesInfo);
                //        }
                //        else
                //        {
                //            // refresh bonus docs cookie
                //            var currentBonusDocsCookie = this.Request.Cookies["dmbnsdcs"];
                //            var newCookie = this.ComputeDemoBonusDocsCookie(currentBonusDocsCookie, courtAct.DocNumber);
                //            this.Response.Cookies.Set(newCookie);
                //        }
                //    }
                //}

                // add ro recent documents
                int maxCount     = Convert.ToInt32(ConfigurationManager.AppSettings["RecentDocumentsCount"]);
                int curProductId = 1;
                if (this.Session["SelectedProductId"] != null)
                {
                    curProductId = int.Parse(this.Session["SelectedProductId"].ToString());
                }

                if (this.UserData.Username.ToLower() != "sysdemo" ||
                    (this.UserData.Username.ToLower() == "sysdemo" && !Common.CheckRequestOriginIsBotSoft(this.Request.UserAgent)))
                {
                    Doc.AddRecentDoc(this.UserData.UserId, id, maxCount, curProductId); // add to recent documents
                    Doc.AddOpenedDoc(this.UserData.UserId, id, curProductId);           // add to stat
                }

                if (courtAct.BloblInfo.IsBlob)
                {
                    var contentType = MimeMapping.GetMimeMapping(courtAct.BloblInfo.Path);

                    return(this.File(fileName: courtAct.BloblInfo.Path, contentType: contentType));
                }
                else
                {
                    return(this.View(courtAct));
                }
            }
            else
            {
                return(this.RedirectToAction("Index", "Home"));
            }
        }