public ActionResult AfterUpdate()
        {
            string ip = HttpContextHelper.GetClientIPAddress();// Request.UserHostAddress;

            Logger.LogApplicationUpdateMessage(HttpRuntime.AppDomainAppPath, $"Request from {ip}");

            var results = new List <string>();

            if (ip == "::1" || ip == "127.0.0.1" || ip == "192.168.7.212" || ip == "87.121.111.212" || ip == "87.121.111.210")
            {
                results.Add(this.FTI());                             // Updating FTI
                results.Add(this.ResultsGroupper());                 // Updating search results groupper
                results.Add(this.DocsStruct());                      // Updating languages structures
                results.Add(this.Classifiers());                     // Updating classifiers
                results.Add(this.MultilingualDictionaryAlphabets()); // Updating multilingual dictionary alphabet letters
                results.Add(this.MultilingualDictionary());          // Updating multilingual dictionary entries
                results.Add(this.FoldersDocsCount());                // Updating home folders docs count in database

                return(Json(results, JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json($"Ip address {ip} not authorized to perform an update", JsonRequestBehavior.AllowGet));
            }
        }
        private string DocsStruct()
        {
            string ip = HttpContextHelper.GetClientIPAddress(); //Request.UserHostAddress;

            try
            {
                string filterDocsStructUrl = null;
                if (ConfigurationManager.AppSettings["SolutionVersion"] == "product")
                {
                    filterDocsStructUrl = "~/" + ConfigurationManager.AppSettings["FilterDocsStruct_BasePath"];
                }
                else
                {
                    filterDocsStructUrl = "~/" + ConfigurationManager.AppSettings["FilterDocsStruct_BasePath_cc"];
                }

                HttpContext.Application["FilterDocsStruct"]      = SearchResult.GetNewFilterDocsStruct(Server.MapPath(filterDocsStructUrl)); // For mother RUSSIA!!!
                HttpContext.Application["FilterDocsClassifiers"] = SearchResult.GetNewFilterDocsClassifiers(Server.MapPath(filterDocsStructUrl));
                HttpContext.Application["ClassifiersMap"]        = Interlex.BusinessLayer.Classifiers.GetClassifiersMap();

                Logger.LogApplicationUpdate(HttpRuntime.AppDomainAppPath, ApplicationUpdateType.DocStruct, true, ip);
                return("Successfuly updated DocsStruct");
            }
            catch (Exception ex)
            {
                Logger.LogApplicationUpdate(HttpRuntime.AppDomainAppPath, ApplicationUpdateType.DocStruct, false, ip);
                return(ex.Message);
            }
        }
        private string FTI()
        {
            string ip = HttpContextHelper.GetClientIPAddress(); //Request.UserHostAddress;

            try
            {
                string searchWrapperUrl = null;
                if (ConfigurationManager.AppSettings["SolutionVersion"] == "product")
                {
                    searchWrapperUrl = "~/" + ConfigurationManager.AppSettings["SearchWrapper_BasePath"];
                }
                else
                {
                    searchWrapperUrl = "~/" + ConfigurationManager.AppSettings["SearchWrapper_BasePath_cc"];
                }

                HttpContext.Application["SearchWrapper"] = SearchResult.GetNewSearchWrapper(Server.MapPath(searchWrapperUrl));

                Logger.LogApplicationUpdate(HttpRuntime.AppDomainAppPath, ApplicationUpdateType.FTI, true, ip);

                return("Successfuly updated FTI");
            }
            catch (Exception ex)
            {
                Logger.LogApplicationUpdate(HttpRuntime.AppDomainAppPath, ApplicationUpdateType.FTI, false, ip);

                return(ex.Message);
            }
        }
        public void Test()
        {
            string ip = HttpContextHelper.GetClientIPAddress();

            Response.Write("ApplicationPath=" + HttpContext.Request.ApplicationPath + ";");
            Response.Write("MyIP=" + ip + ";");
            HttpContext.Request.Headers.AllKeys.ToList().ForEach(x => { Response.Write(x + "=" + HttpContext.Request.Headers[x] + ";"); });
            //Response.Write(ip);
        }
        private string MultilingualDictionaryAlphabets()
        {
            string ip = HttpContextHelper.GetClientIPAddress();  //Request.UserHostAddress;

            try
            {
                Languages.RePopulateAlphabetsToCache();
                return("Successfuly updated alphabets");
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
        private string ResultsGroupper()
        {
            string ip = HttpContextHelper.GetClientIPAddress(); //Request.UserHostAddress;

            try
            {
                HttpContext.Application["ResultsGroupper"] = SearchResult.GetNewSearchGroupper(HttpRuntime.AppDomainAppPath);
                //TODO: write to logger
                return("Successfuly updated results groupper");
            }
            catch (Exception ex)
            {
                //TODO: write to logger
                return(ex.Message);
            }
        }
        public string FoldersDocsCount()
        {
            string ip = HttpContextHelper.GetClientIPAddress();  //Request.UserHostAddress;

            try
            {
                int[] wsRes = null;
                //SearchBox sb = new SearchBox(langId);
                //sb.SearchText = term;
                int[]  langPref         = new int[] { 4, 1, 5 };
                string searchWrapperUrl = null;

                if (ConfigurationManager.AppSettings["SolutionVersion"] == "product")
                {
                    searchWrapperUrl = ConfigurationManager.AppSettings["SearchWrapper_BasePath"];
                }
                else
                {
                    searchWrapperUrl = ConfigurationManager.AppSettings["SearchWrapper_BasePath_cc"];
                }

                SearchResult sr = new SearchResult(SearchSources.Search, HttpContext.Application["SearchWrapper"],
                                                   searchWrapperUrl,
                                                   HttpContext.Application["FilterDocsStruct"],
                                                   HttpContext.Application["FilterDocsClassifiers"],
                                                   HttpContext.Application["ClassifiersMap"],
                                                   HttpContext.Application["ResultsGroupper"],
                                                   HttpRuntime.AppDomainAppPath, 1, 0, 0
                                                   );

                foreach (var folder in Home.GetFoldersFlat(1, 1))
                {
                    sr.SearchFTQuery(folder.query, ref wsRes, langPref);

                    Home.SetFolderDocsCount(folder.id, wsRes.Length);
                }
                Logger.LogApplicationUpdate(HttpRuntime.AppDomainAppPath, ApplicationUpdateType.FoldersDocsCount, true, ip);
                return("Successfuly updated home folders docs counts");
            }
            catch (Exception ex)
            {
                Logger.LogApplicationUpdate(HttpRuntime.AppDomainAppPath, ApplicationUpdateType.Classifiers, false, ip);
                return(ex.Message);
            }
        }
        private string Classifiers()
        {
            string ip = HttpContextHelper.GetClientIPAddress();  //Request.UserHostAddress;

            try
            {
                ClassifiersProvider.ClearClassifiers();
                ClassifiersProvider.PopulateClassifiersFromCache(); //Will always get them from DB here because they are previously cleared

                ClassifiersProvider.ClearMappings();
                ClassifiersProvider.PopulateMappingsFromCache(); //Will always get them from DB here because they are previously cleared

                ClassifiersProvider.Fill();

                Logger.LogApplicationUpdate(HttpRuntime.AppDomainAppPath, ApplicationUpdateType.Classifiers, true, ip);
                return("Successfuly updated classifiers and classifier mappings");
            }
            catch (Exception ex)
            {
                Logger.LogApplicationUpdate(HttpRuntime.AppDomainAppPath, ApplicationUpdateType.Classifiers, false, ip);
                return(ex.Message);
            }
        }