Ejemplo n.º 1
0
        public static List <URLEntity> AddURL(List <URLEntity> URLs, string Entity, int EntityID, string Language, string Slug, bool IsDefault, bool PageName)
        {
            URLEntity url = URLs.Where(u => u.Language == Language && u.Slug == Slug && u.EntityID == EntityID && u.Entity == Entity).FirstOrDefault();

            if (IsDefault)
            {
                //There can only be one Default URL for each Language
                foreach (URLEntity u in URLs.Where(u => u.Language == Language))
                {
                    u.IsDefault  = false;
                    u.HasChanged = true;
                }
            }

            if (url != null)
            {
                url.IsDefault  = IsDefault;
                url.HasChanged = true;
            }
            else
            {
                url = new URLEntity()
                {
                    EntityID = EntityID, Entity = Entity, IsDefault = IsDefault, Language = Language, Slug = Slug, PageName = PageName
                };
                URLs.Add(url);
            }

            return(URLs);
        }
Ejemplo n.º 2
0
        public static string GetEntityURL(int ModuleID, int EntityID, string Entity, int?ActiveModuleID = null)
        {
            PortalSettings pS = PortalSettings.Current;

            if (pS == null && ModuleID > 0)
            {
                ModuleInfo minfo = ModuleController.Instance.GetModule(ModuleID, Null.NullInteger, false);
                if (minfo != null)
                {
                    pS = new PortalSettings(minfo.PortalID);
                }
            }

            if (pS != null)
            {
                URLEntity u = GetDefaultURL(ModuleID, EntityID, Entity, GetCurrentLanguage(pS));

                if (u != null)
                {
                    return(GetFriendlyURL(ActiveModuleID == null ? ModuleID : ActiveModuleID.Value, pS, null, u));
                }
                else
                {
                    return(string.Empty);
                }
            }
            else
            {
                throw new Exception("PortalSettings.Current must be Non-Nullable to generate an entity url");
            }
        }
Ejemplo n.º 3
0
 public static void Add(URLEntity URL)
 {
     URL.CreatedOn = DateTime.Now;
     URL.UpdatedOn = DateTime.Now;
     URL.Insert();
     Cache.Clear();
     //DataCache.RemoveCache(Cache.Keys.URLEntity + URL.ModuleID.ToString() + "-" + URL.EntityID.ToString() + "-" + URL.Entity.ToString());
 }
        private static string Redirect(out int status, out string location, int PortalID, PortalSettings pS, int TabID, string result, URLEntity CurrentURL, string QueryParameters)
        {
            URLEntity RedirectURL = URLManager.GetDefaultURL(CurrentURL.ModuleID, CurrentURL.EntityID, CurrentURL.Entity, CurrentURL.Language);

            location = URLFactory.GetFriendlyURL(null, pS, RedirectURL.Slug, QueryParameters, RedirectURL.Language, RedirectURL.PageName);
            status   = 301;

            return(result);
        }
Ejemplo n.º 5
0
        public static string GetFriendlyURL(int?ModuleID, PortalSettings pS, string Slug, string QueryParameters, string Language, bool IncludePageName)
        {
            URLEntity u = new URLEntity()
            {
                Slug     = Slug,
                Language = Language,
                PageName = IncludePageName
            };

            return(GetFriendlyURL(ModuleID, pS, QueryParameters, u));
        }
Ejemplo n.º 6
0
        public static List <URLEntity> GetURLs(int ModuleID, int EntityID, string Entity)
        {
            List <URLEntity> URls = DataCache.GetCache <List <URLEntity> >(Cache.Keys.URLEntity + ModuleID.ToString() + "-" + EntityID.ToString() + "-" + Entity.ToString());

            if (URls == null)
            {
                URls = URLEntity.Fetch("WHERE ModuleID=@0 AND EntityID=@1 AND Entity=@2", ModuleID, EntityID, Entity);
                DataCache.SetCache(Cache.Keys.URLEntity + ModuleID.ToString() + "-" + EntityID.ToString() + "-" + Entity.ToString(), URls, Cache.Keys.Cache_Time_Heavy);
            }
            return(URls);
        }
Ejemplo n.º 7
0
        public static void DeleteUrls(int ModuleID, int EntityID, string Entity)
        {
            List <URLEntity> URls = URLEntity.Fetch("WHERE ModuleID=@0 AND EntityID=@1 AND Entity=@2", ModuleID, EntityID, Entity);

            foreach (URLEntity url in URls)
            {
                url.Delete();
            }
            if (URls.Count > 0)
            {
                Cache.Clear();
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Returns the first matched slug in the Slugs Array
        /// </summary>
        /// <param name="Slugs"></param>
        /// <returns></returns>
        public static URLEntity GetURL(int ModuleID, string[] Slugs)
        {
            foreach (string s in Slugs)
            {
                URLEntity urlEntity = GetURL(ModuleID, s);

                if (urlEntity != null)
                {
                    return(urlEntity);
                }
            }

            return(null);
        }
Ejemplo n.º 9
0
        public static void InitDefaultURLs <T>(int ModuleID, List <T> Entities, string Language)
        {
            if (Entities.Count == 0)
            {
                return;
            }

            PortalSettings pS = PortalSettings.Current;

            if (pS == null)
            {
                throw new Exception("PortalSettings.Current must be Non-Nullable to generate an entity url");
            }

            Sql sql = Sql.Builder.Append("WHERE ModuleID = @0 AND IsDefault=@1 AND (", ModuleID, true);

            foreach (IURLService e in Entities)
            {
                sql.Append("(EntityID=@0 AND Entity=@1) OR ", e.EntityID, e.Entity);
            }

            string s = sql.SQL.TrimEnd('O', 'R', ' ') + ")";

            List <URLEntity> URLs        = URLEntity.Fetch(s, sql.Arguments);
            List <URLEntity> DefaultURLs = new List <URLEntity>();

            foreach (IURLService url in Entities)
            {
                URLEntity DefaultURL = null;

                if (!string.IsNullOrEmpty(Language)) //Looking for language specific url
                {
                    DefaultURL = URLs.Where(u => u.EntityID == url.EntityID && u.Entity == url.Entity && u.Language == Language).OrderByDescending(u => u.Updatedby).FirstOrDefault();
                }

                if (DefaultURL == null) //Language Specific URL Not Found
                {
                    DefaultURL = URLs.Where(u => u.EntityID == url.EntityID && u.Entity == url.Entity && u.Language == null).OrderByDescending(u => u.Updatedby).FirstOrDefault();
                }

                //if (DefaultURL == null) //Language Invariant URL Not Found
                //    throw new Exception(LocalizationMananger.GetString(ResourceKeys.URL_Default_NotFound, LocalizationMananger.SharedResources, string.Format(ResourceKeys.URL_Default_NotFound_Message, url.Entity, url.EntityID)));

                if (DefaultURL != null)
                {
                    url.PermLink = GetFriendlyURL(ModuleID, pS, DefaultURL.Slug, null, Language, DefaultURL.PageName);
                }
            }
        }
Ejemplo n.º 10
0
        public static Dictionary <string, string> GetFriendlyURLs(PortalSettings pS, int ModuleID, string Language, Dictionary <string, int> Entities)
        {
            Dictionary <string, string> results = DataCache.GetCache <Dictionary <string, string> >(Cache.Keys.FriendlyUrls + "-" + pS.PortalId + "-" + ModuleID + "-" + Language + "-" + string.Join("-", Entities.Keys));

            if (results == null)
            {
                results = new Dictionary <string, string>();

                Sql sql = Sql.Builder.Append("WHERE ModuleID = @0 AND (", ModuleID);
                foreach (var e in Entities)
                {
                    if (!string.IsNullOrEmpty(e.Key))
                    {
                        sql.Append("(EntityID=@0 AND Entity=@1) OR ", e.Value, e.Key);
                    }
                }
                string           s    = sql.SQL.TrimEnd('O', 'R', ' ') + ")";
                List <URLEntity> URLs = URLEntity.Fetch(s, sql.Arguments);

                foreach (var e in Entities)
                {
                    if (!string.IsNullOrEmpty(e.Key))
                    {
                        URLEntity DefaultURL = null;
                        if (!string.IsNullOrEmpty(Language)) //Looking for language specific url
                        {
                            DefaultURL = URLs.Where(u => u.IsDefault && u.Language == Language && u.Entity == e.Key && u.EntityID == e.Value).OrderByDescending(u => u.Updatedby).FirstOrDefault();
                        }

                        if (DefaultURL == null) //Language Specific URL Not Found
                        {
                            DefaultURL = URLs.Where(u => u.IsDefault && u.Language == null && u.Entity == e.Key && u.EntityID == e.Value).OrderByDescending(u => u.Updatedby).FirstOrDefault();
                        }

                        if (DefaultURL != null)
                        {
                            results.Add(e.Key, GetFriendlyURL(ModuleID, pS, DefaultURL.Slug, null, Language, true));
                        }
                    }
                    else
                    {
                        results.Add(e.Key, GetFriendlyURL(ModuleID, pS, string.Empty, null, null, true));
                    }
                }
                DataCache.SetCache(Cache.Keys.FriendlyUrls + "-" + pS.PortalId + "-" + ModuleID + "-" + Language + "-" + string.Join("-", Entities.Keys), results);
            }
            return(results);
        }
Ejemplo n.º 11
0
        public static List <URLEntity> RemoveURL(List <URLEntity> URLs, string Language, string Slug)
        {
            URLEntity url = URLs.Where(u => u.Language == Language && u.Slug == Slug).FirstOrDefault();

            if (url.IsDefault)
            {
                throw new Exception("Cannot remove default URL of this language.");
            }

            if (url != null)
            {
                url.HasChanged = true;
                url.HasDeleted = true;
            }

            return(URLs);
        }
        public int Insert(URLEntity uRLEntity)
        {
            var id = -1;

            using (var connection = new SqlConnection(_connectionString))
            {
                connection.Open();
                var query   = @$ "INSERT INTO dbo.URLs VALUES (N'{uRLEntity.Alias}',N'{uRLEntity.Url}') SELECT @@IDENTITY";
                var command = new SqlCommand(query, connection);
                var reader  = command.ExecuteReader();
                while (reader.Read())
                {
                    id = (int)reader.GetDecimal(0);
                }
            }

            return(id);
        }
Ejemplo n.º 13
0
        private void ProcessHTML(string URL)
        {
            Table = CloudConfiguration.GetTable();

            WebRequest  myWebRequest  = WebRequest.Create(URL);
            WebResponse myWebResponse = myWebRequest.GetResponse();    // Returns a response from an Internet resource

            Stream streamResponse = myWebResponse.GetResponseStream(); // return the data stream from the internet and save it in the stream

            StreamReader reader  = new StreamReader(streamResponse);   // reads the data stream
            string       content = reader.ReadToEnd();                 // reads it to the end

            string title = GetTitle(content);

            URLEntity link = new URLEntity(URL, title, DateTime.Now);

            // Create the TableOperation object that inserts the customer entity.
            TableOperation insertOperation = TableOperation.Insert(link);

            // Execute the insert operation.
            Table.Execute(insertOperation);


            //Regex regexLink = new Regex("(?<=<a\\s*?href=(?:'|\"))[^'\"]*?(?=(?:'|\"))");
            //Regex regexURL = new Regex("href\\s*=\\s*\"(?<url>.*?)\"");
            //foreach (Match match in regexLink.Matches(content))
            //{
            //    string link = regexURL.Match(match.Value).Value;
            //    if (CheckLinkDomain(link) && CheckLinkIsCorrectType(link) && CheckIfAllowed(link))
            //    {
            //        CloudQueueMessage message = new CloudQueueMessage(link);
            //        CrawlQueue.AddMessage(message);
            //    }
            //}

            //Regex plzMatch = new Regex("");
            //foreach (Match m in plzMatch.Matches(content))
            //{
            //    string link = m.Value;
            //}
            streamResponse.Close();
            reader.Close();
            myWebResponse.Close();
        }
Ejemplo n.º 14
0
        public static URLEntity GetDefaultURL(int ModuleID, int EntityID, string Entity, string Language)
        {
            URLEntity        DefaultURL = null;
            List <URLEntity> URLs       = GetURLs(ModuleID, EntityID, Entity);

            if (!string.IsNullOrEmpty(Language)) //Looking for language specific url
            {
                DefaultURL = URLs.Where(u => u.IsDefault && u.Language == Language).OrderByDescending(u => u.Updatedby).FirstOrDefault();
            }

            if (DefaultURL == null) //Language Specific URL Not Found
            {
                DefaultURL = URLs.Where(u => u.IsDefault && u.Language == null).OrderByDescending(u => u.Updatedby).FirstOrDefault();
            }

            //if (DefaultURL == null) //Language Invariant URL Not Found
            //    throw new Exception(LocalizationMananger.GetString(ResourceKeys.URL_Default_NotFound,LocalizationMananger.SharedResources,string.Format(ResourceKeys.URL_Default_NotFound_Message,Entity,EntityID)));

            return(DefaultURL);
        }
Ejemplo n.º 15
0
        private static Dictionary <string, int> GetSlugIndex()
        {
            Dictionary <string, int> Index = DataCache.GetCache <Dictionary <string, int> >(Cache.Keys.SlugIndex);

            if (Index == null)
            {
                Index = URLEntity.Fetch("").ToList().ToDictionary(u => u.Slug, u => u.ModuleID);

                if (Index == null)
                {
                    Index = new Dictionary <string, int>();
                }

                ModuleController mc = new ModuleController();

                //Generate TabID Index
                Dictionary <int, int> ModuleTabIndex = new Dictionary <int, int>();
                foreach (int i in Index.Values.Distinct())
                {
                    ModuleInfo m = mc.GetModule(i, Null.NullInteger, false);

                    if (m != null)
                    {
                        ModuleTabIndex.Add(m.ModuleID, m.TabID);
                    }
                    else
                    {
                        ModuleTabIndex.Add(i, -1);
                    }
                }

                foreach (int ModuleId in ModuleTabIndex.Keys) //Swap ModuleIDs for TabIDs
                {
                    Index.Where(i => i.Value == ModuleId).ToList().ForEach(i => Index[i.Key] = ModuleTabIndex[ModuleId]);
                }

                DataCache.SetCache(Cache.Keys.SlugIndex, Index);
            }

            return(Index);
        }
Ejemplo n.º 16
0
        public static URLEntity GetURL(int ModuleID, string Slug)
        {
            if (Slug == null)
            {
                throw new Exception("Slug cannot be empty or null");
            }

            //Handle multiple slugs or query parameters with null key
            string[] Slugs = Slug.Split(',');

            foreach (string s in Slugs)
            {
                URLEntity URL = DataCache.GetCache <URLEntity>(Cache.Keys.Slug + ModuleID.ToString() + "-" + s);

                if (URL == null)
                {
                    if (ModuleID > 0)
                    {
                        URL = URLEntity.Fetch("WHERE ModuleID=@0 AND Slug=@1", ModuleID, s).SingleOrDefault();
                    }
                    else
                    {
                        URL = URLEntity.Fetch("WHERE Slug=@0", s).SingleOrDefault();
                    }

                    DataCache.SetCache(Cache.Keys.Slug + ModuleID.ToString() + "-" + s, URL, Cache.Keys.Cache_Time_Heavy);
                }

                if (URL != null)
                {
                    return(URL);
                }
            }

            return(null);
        }
Ejemplo n.º 17
0
 public static void Add(URLEntity URL)
 {
     URLFactory.Add(URL);
 }
Ejemplo n.º 18
0
        //public static string GetFriendlyURL(int PortalID, int HomeTabID, int TabID, string portalAlias, string Slug, string QueryParameters, string Language, bool IncludePageName)
        //{
        //    string strLanguage = string.IsNullOrEmpty(Language) ? pS.DefaultLanguage : Language;

        //    string URL = "~/Default.aspx";


        //    TabInfo tab;

        //    if (IncludePageName)
        //        tab = new TabController().GetTab(TabID, PortalID);
        //    else
        //        tab = new TabController().GetTab(HomeTabID, PortalID);


        //    URL += "&TabId=" + TabID;

        //    if (!string.IsNullOrEmpty(Language))
        //        URL += "&language=" + Language;

        //    URL += QueryParameters;
        //    URL = URL.ReplaceFirst("&", "?");

        //    return FriendlyUrlProvider.Instance().FriendlyUrl(tab, URL, Slug, portalAlias);
        //}
        private static string AppendQueryParameters(PortalSettings pS, int?TabID, string URL, string QueryParameters, string Language, URLEntity u)
        {
            if (QueryParameters == null)
            {
                QueryParameters = string.Empty;
            }


            if (TabID != pS.HomeTabId)
            {
                URL += "&TabId=" + TabID.Value;

                if (LocaleController.Instance.GetLocales(pS.PortalId).Count() > 1)
                {
                    URL += "&language=" + Language;
                }
            }
            //Apps that support same slug on multiple tabs
            //Handle homepage by including page name
            else if (TabID == pS.HomeTabId && u.IgnorePageName)
            {
                string PageName = string.Empty;
                GetPageName(ref PageName, -1, pS);
                if (!string.IsNullOrEmpty(PageName))
                {
                    URL += "&" + PageName;
                }
            }

            URL += QueryParameters;
            URL  = URL.ReplaceFirst("&", "?");
            return(URL);
        }
Ejemplo n.º 19
0
        public static string GetFriendlyURL(int?ModuleID, PortalSettings pS, string QueryParameters, URLEntity u)
        {
            string strLanguage = string.IsNullOrEmpty(u.Language) ? URLManager.GetCurrentLanguage() : u.Language;

            string path = "~/Default.aspx";

            if (!string.IsNullOrEmpty(strLanguage))
            {
                pS.CultureCode = strLanguage;
            }
            else
            {
                pS.CultureCode = pS.DefaultLanguage;
            }

            TabInfo tab = null;

            if (u.PageName)
            {
                if (ModuleID.HasValue)
                {
                    int?ModuleTabID = null;

                    var Index = GetModuleTabIndex();

                    if (Index.ContainsKey(ModuleID.Value))
                    {
                        ModuleTabID = Index[ModuleID.Value];
                    }
                    else
                    {
                        ModuleInfo minfo = new ModuleController().GetModule(ModuleID.Value, Null.NullInteger, false);
                        ModuleTabID = minfo.TabID;
                    }
                    if (ModuleTabID.HasValue)
                    {
                        tab = new TabController().GetTab(ModuleTabID.Value, pS.PortalId);
                    }
                }
                else if (pS.HomeTabId != pS.ActiveTab.TabID)
                {
                    tab = pS.ActiveTab;
                }
            }


            if (tab == null)
            {
                tab = new TabController().GetTab(pS.HomeTabId, pS.PortalId);
            }


            path = AppendQueryParameters(pS, tab.TabID, path, QueryParameters, strLanguage, u);
            if (pS != null && pS.PortalAlias != null)
            {
                return(FriendlyUrlProvider.Instance().FriendlyUrl(tab, path, u.Slug, pS as IPortalSettings));
            }
            else
            {
                return(path.TrimStart('~', '/') + "&" + u.Slug);
            }
        }
Ejemplo n.º 20
0
 public static string GetFriendlyURL(int ModuleID, PortalSettings pS, URLEntity urlEntity)
 {
     return(GetFriendlyURL(ModuleID, pS, urlEntity.Slug, null, urlEntity.Language, urlEntity.PageName));
 }
Ejemplo n.º 21
0
 public static List <URLEntity> GetUrlHistory(int ModuleID, int EntityID, string Entity)
 {
     return(URLEntity.Fetch("WHERE ModuleID=@0 AND EntityID=@1 AND Entity=@2", ModuleID, EntityID, Entity).ToList());
 }
Ejemplo n.º 22
0
        public override string TransformFriendlyUrlToQueryString(string[] urlParms, int tabId, int portalId, FriendlyUrlOptions options, string cultureCode, DotNetNuke.Entities.Portals.PortalAliasInfo portalAlias, ref List <string> messages, out int status, out string location)
        {
            status   = 200;
            location = null;

            string         result = string.Empty, Slug = string.Empty, PageName = string.Empty;
            PortalSettings pS               = null;
            bool           PageNameRedirect = false;

            urlParms = urlParms.Select(s => s.ToLower()).Distinct().ToArray();
            List <string> urlParmsList = new List <string>(urlParms).ConvertAll(u => u.ToLower());

            int SlugTabID = URLManager.GetSlugTabID(urlParms, ref Slug, tabId, PortalController.Instance.GetPortal(portalId));

            if (SlugTabID != -1) //Slug Found
            {
                URLEntity CurrentURL = URLManager.GetURL(Slug);

                //Redirect if it's not the default URL
                if (CurrentURL != null && !CurrentURL.IsDefault)
                {
                    InitPortalSettings(ref pS, tabId, portalAlias);
                    return(Redirect(out status, out location, portalId, pS, SlugTabID, result, CurrentURL, null));
                }

                if (pS == null)
                {
                    pS = new PortalSettings(tabId, portalAlias);
                }

                //DNN 8580
                //https://dnntracker.atlassian.net/browse/DNN-8580?page=com.googlecode.jira-suite-utilities%3Atransitions-summary-tabpanel
                ClearUrlParams(ref urlParmsList, ref PageName, Slug, SlugTabID, pS);

                //Tab not identified...need redirect
                if (tabId == -1)
                {
                    InitPortalSettings(ref pS, tabId, portalAlias);

                    if (CurrentURL.IgnorePageName)
                    {
                        return(string.Empty);
                    }
                    else
                    {
                        //Redirect based on Include PageName if we're not on homepage
                        if (SlugTabID != pS.HomeTabId && CurrentURL.PageName && !urlParmsList.Contains(PageName) && !string.Join("/", urlParmsList).Contains(PageName))
                        {
                            PageNameRedirect = true;
                        }
                        else if (!CurrentURL.PageName && (urlParmsList.Contains(PageName) || string.Join("/", urlParmsList).Contains(PageName)))
                        {
                            PageNameRedirect = true;
                        }

                        //Remove PageName
                        foreach (var item in PageName.Split('/'))
                        {
                            urlParmsList.Remove(item);
                        }

                        //Setup Rewrite Path
                        result = "?TabId=" + SlugTabID.ToString();
                    }
                }

                string remainder = base.CreateQueryStringFromParameters(urlParmsList.ToArray(), -1);

                string Prefix = urlParmsList.Count % 2 == 0 ? string.Empty : "=";


                if (PageNameRedirect)
                {
                    InitPortalSettings(ref pS, tabId, portalAlias);
                    return(Redirect(out status, out location, portalId, pS, SlugTabID, result, CurrentURL, remainder));
                }


                //Rewrite URL to appropriate page
                if (result.StartsWith("?TabId=") && !string.IsNullOrEmpty(Slug))
                {
                    result += "&" + Slug + remainder;
                }
                else
                {
                    result += Slug + remainder;
                }
            }

            return(result);
        }
Ejemplo n.º 23
0
 public static bool IsUnique(string Slug)
 {
     return(URLEntity.Query("where Slug=@0", Slug).Count() == 0);
 }