Exemplo n.º 1
0
        /// <summary> Gets a valid viewer code for this item, based on the requested viewer code and page </summary>
        /// <param name="viewer_code"> Requested viewer code </param>
        /// <param name="page"> Requested page </param>
        /// <returns> Valid viewer code and page </returns>
        /// <remarks> The requested viewer code and page are validated, and if valid, returned.  Otherwise, the closest valid viewer code to the one requested is returned. </remarks>
        public string Get_Valid_Viewer_Code(string viewer_code, int page)
        {
            string lower_code = viewer_code.ToLower();

            // If this is 'RES' for restricted, taht is always valid
            if (viewer_code == "res")
            {
                return("res");
            }

            // Is this in the item level viewer list?
            if (lower_code.Length > 0)
            {
                if (behaviors.Views_Count > 0)
                {
                    foreach (View_Object thisView in behaviors.Views)
                    {
                        foreach (string thisCode in thisView.Viewer_Codes)
                        {
                            if (thisCode.ToLower() == lower_code)
                            {
                                return(lower_code);
                            }
                        }
                    }
                }

                // Check if this is a Related Items page, which also allows paging
                if (lower_code.IndexOf(View_Object.Viewer_Code_By_Type(View_Enum.RELATED_IMAGES)[0]) >= 0)
                {
                    int viewer_page = 0;
                    try
                    {
                        string try_page_get = lower_code.Replace(View_Object.Viewer_Code_By_Type(View_Enum.RELATED_IMAGES)[0], "").Trim();
                        if (try_page_get.Length > 0)
                        {
                            viewer_page = Convert.ToInt32(try_page_get);
                        }
                        return(View_Object.Viewer_Code_By_Type(View_Enum.RELATED_IMAGES)[0]);
                    }
                    catch
                    {
                    }
                }

                // Check if this is the quality conrtols page, which also allows paging
                if (lower_code.IndexOf(View_Object.Viewer_Code_By_Type(View_Enum.QUALITY_CONTROL)[0]) >= 0)
                {
                    int viewer_page = 0;
                    try
                    {
                        string try_page_get = lower_code.Replace(View_Object.Viewer_Code_By_Type(View_Enum.QUALITY_CONTROL)[0], "").Trim();
                        if (try_page_get.Length > 0)
                        {
                            viewer_page = Convert.ToInt32(try_page_get);
                        }
                        return(View_Object.Viewer_Code_By_Type(View_Enum.QUALITY_CONTROL)[0]);
                    }
                    catch
                    {
                    }
                }

                // Check each page
                if (viewer_to_file != null)
                {
                    if (viewer_to_file.ContainsKey(lower_code))
                    {
                        return(lower_code);
                    }
                }
            }

            // No match, so just return the default, if there is one
            if ((viewer_code.Length == 0) && (behaviors.Default_View != null) && (behaviors.Default_View.Viewer_Codes.Length > 0))
            {
                return(behaviors.Default_View.Viewer_Codes[0]);
            }

            // If embedded video is present, show that.
            if (behaviors.Views_Count > 0)
            {
                foreach (View_Object thisView in behaviors.Views)
                {
                    if (thisView.View_Type == View_Enum.YOUTUBE_VIDEO)
                    {
                        return(thisView.Viewer_Codes[0]);
                    }
                    if (thisView.View_Type == View_Enum.EMBEDDED_VIDEO)
                    {
                        return(thisView.Viewer_Codes[0]);
                    }
                }
            }

            // If there are no pages, return the DEFAULT viewer, or FULL CITATION code
            if ((viewer_to_file == null) || (viewer_to_file.Count == 0))
            {
                if ((behaviors.Default_View != null) && (behaviors.Default_View.Viewer_Codes.Length > 0))
                {
                    return(behaviors.Default_View.Viewer_Codes[0]);
                }
                else
                {
                    return(View_Object.Viewer_Code_By_Type(View_Enum.CITATION)[0]);
                }
            }


            if (behaviors.Item_Level_Page_Views_Count == 0)
            {
                behaviors.Add_Item_Level_Page_View(new View_Object(View_Enum.JPEG2000));
                behaviors.Add_Item_Level_Page_View(new View_Object(View_Enum.JPEG));
            }

            // Return the first viewer code for this page
            if ((pages_by_seq != null) && (behaviors.Item_Level_Page_Views_Count > 0) && (pages_by_seq.Count >= page) && (pages_by_seq[page - 1].Files.Count > 0))
            {
                foreach (View_Object itemTaggedView in behaviors.Item_Level_Page_Views)
                {
                    foreach (SobekCM_File_Info thisFile in pages_by_seq[page - 1].Files)
                    {
                        if (thisFile.Get_Viewer() != null)
                        {
                            if (thisFile.Get_Viewer().View_Type == itemTaggedView.View_Type)
                            {
                                return(page.ToString() + thisFile.Get_Viewer().Viewer_Codes[0]);
                            }
                        }
                    }
                }
            }

            // Look for FLASH or PDF views if no page was requested
            if (behaviors.Views_Count > 0)
            {
                foreach (View_Object thisView in behaviors.Views)
                {
                    if ((thisView.View_Type == View_Enum.PDF) || (thisView.View_Type == View_Enum.FLASH))
                    {
                        return(thisView.Viewer_Codes[0]);
                    }
                }
            }

            // Return first page viewer code
            if ((pages_by_seq != null) && (behaviors.Item_Level_Page_Views_Count > 0) && (pages_by_seq.Count > 0) && (pages_by_seq[0].Files.Count > 0))
            {
                foreach (View_Object itemTaggedView in behaviors.Item_Level_Page_Views)
                {
                    foreach (SobekCM_File_Info thisFile in pages_by_seq[0].Files)
                    {
                        if (thisFile.Get_Viewer() != null)
                        {
                            if (thisFile.Get_Viewer().View_Type == itemTaggedView.View_Type)
                            {
                                return("1" + thisFile.Get_Viewer().Viewer_Codes[0]);
                            }
                        }
                    }
                }
            }

            return(View_Object.Viewer_Code_By_Type(View_Enum.CITATION)[0]);
        }
Exemplo n.º 2
0
        /// <summary> Gets a valid viewer code for this item, based on the requested viewer code and page </summary>
        /// <param name="viewer_code"> Requested viewer code </param>
        /// <param name="page"> Requested page </param>
        /// <returns> Valid viewer code and page </returns>
        /// <remarks> The requested viewer code and page are validated, and if valid, returned.  Otherwise, the closest valid viewer code to the one requested is returned. </remarks>
        public string Get_Valid_Viewer_Code(string viewer_code, int page)
        {
            string lower_code = viewer_code.ToLower();

            // If this is 'RES' for restricted, taht is always valid
            if (viewer_code == "res")
            {
                return("res");
            }

            // Is this in the item level viewer list?
            if (lower_code.Length > 0)
            {
                if (behaviors.Views_Count > 0)
                {
                    foreach (View_Object thisView in behaviors.Views)
                    {
                        foreach (string thisCode in thisView.Viewer_Codes)
                        {
                            if (thisCode.ToLower() == lower_code)
                            {
                                return(lower_code);
                            }
                        }
                    }
                }

                // Check if this is a Related Items page, which also allows paging
                if (lower_code.IndexOf(View_Object.Viewer_Code_By_Type(View_Enum.RELATED_IMAGES)[0]) >= 0)
                {
                    int viewer_page = 0;
                    try
                    {
                        string try_page_get = lower_code.Replace(View_Object.Viewer_Code_By_Type(View_Enum.RELATED_IMAGES)[0], "").Trim();
                        if (try_page_get.Length > 0)
                        {
                            viewer_page = Convert.ToInt32(try_page_get);
                        }
                        return(View_Object.Viewer_Code_By_Type(View_Enum.RELATED_IMAGES)[0]);
                    }
                    catch
                    {
                    }
                }

                // Check if this is the quality conrtols page, which also allows paging
                if (lower_code.IndexOf(View_Object.Viewer_Code_By_Type(View_Enum.QUALITY_CONTROL)[0]) >= 0)
                {
                    int viewer_page = 0;
                    try
                    {
                        string try_page_get = lower_code.Replace(View_Object.Viewer_Code_By_Type(View_Enum.QUALITY_CONTROL)[0], "").Trim();
                        if (try_page_get.Length > 0)
                        {
                            viewer_page = Convert.ToInt32(try_page_get);
                        }
                        return(View_Object.Viewer_Code_By_Type(View_Enum.QUALITY_CONTROL)[0]);
                    }
                    catch
                    {
                    }
                }

                // Check each page
                if (viewer_to_file != null)
                {
                    if (viewer_to_file.ContainsKey(lower_code))
                    {
                        return(lower_code);
                    }
                    else
                    {
                        // TODO: This should not be hardcoded for JPEG, ZOOMABLE, and then TEXT priority. This should come from the item viewer priority table in the database.
                        int testInt;
                        if (Int32.TryParse(lower_code, out testInt))
                        {
                            if (viewer_to_file.ContainsKey(lower_code + "j"))
                            {
                                return(lower_code + "j");
                            }
                            if (viewer_to_file.ContainsKey(lower_code + "x"))
                            {
                                return(lower_code + "x");
                            }
                            if (viewer_to_file.ContainsKey(lower_code + "t"))
                            {
                                return(lower_code + "t");
                            }
                        }
                    }
                }
            }

            // No match, so just return the default, if there is one
            if ((viewer_code.Length == 0) && (behaviors.Default_View != null) && (behaviors.Default_View.Viewer_Codes.Length > 0))
            {
                if (behaviors.Item_Level_Page_Views.Contains(behaviors.Default_View))
                {
                    foreach (SobekCM_File_Info thisFile in pages_by_seq[page - 1].Files)
                    {
                        if (thisFile.Get_Viewer() != null)
                        {
                            if (thisFile.Get_Viewer().View_Type == behaviors.Default_View.View_Type)
                            {
                                return(page.ToString() + thisFile.Get_Viewer().Viewer_Codes[0]);
                            }
                        }
                    }

                    // If no matching item level page view was found matching the view type,
                    // default to any of the item level page views
                    foreach (View_Object itemTaggedView in behaviors.Item_Level_Page_Views)
                    {
                        foreach (SobekCM_File_Info thisFile in pages_by_seq[page - 1].Files)
                        {
                            if (thisFile.Get_Viewer() != null)
                            {
                                if (thisFile.Get_Viewer().View_Type == itemTaggedView.View_Type)
                                {
                                    return(page.ToString() + thisFile.Get_Viewer().Viewer_Codes[0]);
                                }
                            }
                        }
                    }
                }
                else
                {
                    return(behaviors.Default_View.Viewer_Codes[0]);
                }
            }

            // Return first page viewer code
            if ((pages_by_seq != null) && (behaviors.Item_Level_Page_Views_Count > 0) && (pages_by_seq.Count > 0) && (pages_by_seq[0].Files.Count > 0))
            {
                foreach (View_Object itemTaggedView in behaviors.Item_Level_Page_Views)
                {
                    foreach (SobekCM_File_Info thisFile in pages_by_seq[0].Files)
                    {
                        if (thisFile.Get_Viewer() != null)
                        {
                            if (thisFile.Get_Viewer().View_Type == itemTaggedView.View_Type)
                            {
                                return("1" + thisFile.Get_Viewer().Viewer_Codes[0]);
                            }
                        }
                    }
                }
            }

            return(View_Object.Viewer_Code_By_Type(View_Enum.CITATION)[0]);
        }