Imports System.Data
Imports AppAuth
Imports AppCommon
Imports AppVariable

Partial Class mobile
    Inherits System.Web.UI.MasterPage

#Region "******************** ページイベント ********************"

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'ヘッダの左領域を設定
        SetHeaderLeft(lb_user, lb_title)
        'ヘッダの右領域を設定
        SetHeaderRight(lb_loginuser, msp_user_name)
        msp_user_name.Text = Session(S_COM_User_Name)

        '----------------------------------------------------------------
        '認証済の確認
        '----------------------------------------------------------------
        If Session(S_COM_PortalID) Is Nothing Then
            'Response.Redirect(Request.ApplicationPath & Logout_FilePath)
            Response.Redirect(Request.ApplicationPath & Logout_FilePath_Mobile)  'モバイル版
        End If

        '----------------------------------------------------------------
        'コンテンツへのアクセス認証
        '----------------------------------------------------------------
        If IsPostBack = False Then
            If Auth_Content(Session(S_COM_PortalID), Replace(Request.FilePath.ToString, Request.ApplicationPath, ""), Session(S_MSP_Selected_UC1_Path)) = False Then
                'Response.Redirect(Request.ApplicationPath & Logout_FilePath)
                Response.Redirect(Request.ApplicationPath & Logout_FilePath_Mobile)  'モバイル版
            End If
        End If

        '---------------------------------------------------------------
        'HTMLタグを追加
        '---------------------------------------------------------------
        Dim ctl As Control = Page.Master.FindControl("msp_header")
        'JS
        SetTagJs(ctl, "jquery-1.8.3.min.js")
        SetTagJs(ctl, "jquery.cookie.js")
        SetTagJs(ctl, "master_mobile.js") 'モバイル版用に変更
        SetTagJs(ctl, "info.js")
        SetTagJs(ctl, "common.js")
        'ファビコン
        SetTagFavicon(ctl)

        '-----------------------------------------------------------------
        'Safari, ChromeでMENUコントロールの動作がおかしくなるための対策
        '-----------------------------------------------------------------
        If (Request.UserAgent.ToLower().IndexOf("applewebkit") >= 0) Then
            Request.Browser.Adapters.Clear()
        End If

        '-----------------------------------------------------------------
        'メニューをセット
        '-----------------------------------------------------------------
        'SetMenuBar()
        SetMenu()

        '-----------------------------------------------------------------
        'ユーザコントロールをセット
        '-----------------------------------------------------------------
        Try '※外すと落ちる
            'Dim uc As UserControl

            'If Not Session(S_MSP_Selected_UC1_Path) Is Nothing Then
            '    uc = LoadControl(Request.ApplicationPath & Session(S_MSP_Selected_UC1_Path))
            'Else
            '    msp_asp_usercon1.Visible = False
            '    uc = LoadControl("")
            'End If

            'msp_asp_usercon1.Controls.Add(uc)

            'If Not Session(S_MSP_Selected_UC1_Path) Is Nothing Then
            '    msp_uc1_name.Text = HttpUtility.UrlDecode(Session(S_MSP_Selected_UC1_Title))
            'Else
            '    msp_uc1_name.Text = ""
            'End If
        Catch ex As Exception
        End Try

        ''---------------------------------------------------------------
        ''クリックしたメニューバーアイテムを選択状態にする
        ''---------------------------------------------------------------
        'If Not Session(S_MSP_Selected_Menubar_Parent_Index) Is Nothing Then
        '    If msp_asp_menubar.Items.Count > 0 Then
        '        msp_asp_menubar.Items(Session(S_MSP_Selected_Menubar_Parent_Index)).Selected = True
        '    End If
        'End If

        '---------------------------------------------------------------
        'クリックしたメニューアイテムを選択状態にする
        '---------------------------------------------------------------
        Try '※外すと落ちる
            If Not Session(S_MSP_Selected_Menu_Parent_Index) Is Nothing _
                     And Not Session(S_MSP_Selected_Menu_Children_Index) Is Nothing Then
                If msp_asp_menu.Items.Count > 0 Then
                    msp_asp_menu.Items(Session(S_MSP_Selected_Menu_Parent_Index)).ChildItems(Session(S_MSP_Selected_Menu_Children_Index)).Selected = True
                End If
            End If
        Catch ex As Exception
        End Try

        '---------------------------------------------------------------
        'クリックしたメニューアイテムのタイトルを挿入する
        '---------------------------------------------------------------
        If Not Session(S_MSP_Selected_Title) Is Nothing Then
            uc_TitleBar_big.Text = HttpUtility.UrlDecode(Session(S_MSP_Selected_Title))
        End If
    End Sub

#End Region

#Region "***************** コントロールイベント *****************"

    'Protected Sub msp_asp_menubar_MenuItemClick(ByVal sender As Object, ByVal e As MenuEventArgs) Handles msp_asp_menubar.MenuItemClick
    '    '-------------------------------------------------------------------------------------
    '    'セレクト情報を保存
    '    '-------------------------------------------------------------------------------------
    '    '親選択時
    '    If e.Item.Depth = 0 Then
    '        Session(S_MSP_Selected_Menubar_Parent_Index) = msp_asp_menubar.Items.IndexOf(e.Item)

    '        '-------------------------------------------------------------------------------------
    '        'メニューのセレクト情報を初期化
    '        '-------------------------------------------------------------------------------------
    '        Session(S_MSP_Selected_Menu_Parent_Index) = ""
    '        Session(S_MSP_Selected_Menu_Children_Index) = ""

    '        '-------------------------------------------------------------------------------------
    '        'セッションクリア
    '        '-------------------------------------------------------------------------------------
    '        SessionClear()

    '        '-------------------------------------------------------------------------------------
    '        'コンテンツ呼び出し
    '        '-------------------------------------------------------------------------------------
    '        Response.Redirect(Com_Get_Content_M(str_ParamGet(e.Item.Value, "menu")))
    '    End If
    'End Sub

    Protected Sub msp_asp_menu_MenuItemClick(ByVal sender As Object, ByVal e As MenuEventArgs) Handles msp_asp_menu.MenuItemClick
        If e.Item.Depth = 1 Then
            '-------------------------------------------------------------------------------------
            'Sessionにセレクト情報を保存
            '-------------------------------------------------------------------------------------
            Session(S_MSP_Selected_Menu_Parent_Index) = msp_asp_menu.Items.IndexOf(e.Item.Parent)
            Session(S_MSP_Selected_Menu_Children_Index) = msp_asp_menu.Items(msp_asp_menu.Items.IndexOf(e.Item.Parent)).ChildItems.IndexOf(e.Item)

            '-------------------------------------------------------------------------------------
            'セッションクリア
            '-------------------------------------------------------------------------------------
            SessionClear()

            '-------------------------------------------------------------------------------------
            'コンテンツ呼び出し
            '-------------------------------------------------------------------------------------
            Response.Redirect(Com_Get_Content(str_ParamGet(e.Item.Value, "function")))
        End If
    End Sub

#End Region

#Region "******************* Sub及びFunction ********************"

    ''-------------------------------------------------------------
    ''取得したデータをメニューコントロールへセットする。
    ''-------------------------------------------------------------
    'Private Sub SetMenuBar()
    '    Dim ds As DataSet = GetMenubarData()

    '    If Not ds.Tables(0) Is Nothing Then
    '        For Each masterRow As DataRow In ds.Tables(0).Rows
    '            Dim masterItem As New MenuItem(masterRow("MENU名").ToString(), "?" & _
    '                                            "menu=" & masterRow("MENUCD").ToString() & "&")
    '            msp_asp_menubar.Items.Add(masterItem)
    '        Next
    '    End If
    'End Sub

    '-------------------------------------------------------------
    '取得したデータをメニューコントロールへセットする。
    '-------------------------------------------------------------
    Private Sub SetMenu()
        Dim ds As DataSet = GetMenuData()

        Try
            If Not ds.Tables("CATEGORY") Is Nothing Then
                For Each masterRow As DataRow In ds.Tables("CATEGORY").Rows
                    Dim masterItem As New MenuItem(masterRow("機能分類名").ToString(), "?" & _
                                                            "category=" & masterRow("機能分類CD").ToString() & "&")
                    msp_asp_menu.Items.Add(masterItem)

                    If Not masterRow.GetChildRows("CHILDREN") Is Nothing Then
                        For Each childRow As DataRow In masterRow.GetChildRows("CHILDREN")
                            Dim childItem As New MenuItem(childRow("機能名").ToString(), "?" & _
                                                             "function=" & childRow("機能CD").ToString() & "&")
                            masterItem.ChildItems.Add(childItem)
                        Next
                    End If
                Next
            End If
        Catch ex As Exception
        End Try
    End Sub

    ''-------------------------------------------------------------
    ''データベースからMENUおよびMENUSUBデータを取得し返す。
    ''-------------------------------------------------------------
    'Private Function GetMenubarData() As DataSet
    '    Using spm As New StoredProcedureManager("PT_MENU_SELECT")
    '        spm.AddPrmIn("@PORTALID", Data.SqlDbType.VarChar, Session(S_COM_PortalID))
    '        spm.Fill()

    '        Return spm.ds
    '    End Using
    'End Function

    '-------------------------------------------------------------
    'データベースから機能分類およびMENUSUBデータを取得し返す。
    '-------------------------------------------------------------
    Private Function GetMenuData() As DataSet
        '   機能分類データ取得
        Using spm As New StoredProcedureManager("PT_機能分類_SEL")
            spm.AddPrmIn("@MENUCD", Data.SqlDbType.VarChar, Session(S_MSP_Selected_MenuCD))
            spm.AddPrmIn("@PORTALID", Data.SqlDbType.VarChar, Session(S_COM_PortalID))
            spm.AddPrmIn("@isForMobile", SqlDbType.Bit, True)  '2020/6/19 ADD /Liu
            spm.Fill("CATEGORY")

            '機能データ取得
            spm.Reset("PT_機能_SEL")
            spm.AddPrmIn("@MENUCD", Data.SqlDbType.VarChar, Session(S_MSP_Selected_MenuCD))
            spm.AddPrmIn("@PORTALID", Data.SqlDbType.VarChar, Session(S_COM_PortalID))
            spm.AddPrmIn("@isForMobile", SqlDbType.Bit, True)  '2020/6/19 ADD /Liu
            spm.Fill("FUNCTION")

            spm.ds.Relations.Add( _
                  "CHILDREN" _
                , spm.ds.Tables("CATEGORY").Columns("機能分類CD") _
                , spm.ds.Tables("FUNCTION").Columns("機能分類CD") _
            )

            Return spm.ds
        End Using
    End Function

    Private Function str_ParamGet(ByVal str_Search As String, ByVal str_Param As String) As String
        Dim str As String
        Dim strCnt As Integer

        Try
            str = str_Search
            '---------------------------------------
            '「?」以降の文字列を取得
            '---------------------------------------
            strCnt = str.IndexOf("?")
            str = Mid(str, strCnt + 1, Len(str))

            '---------------------------------------
            'パラメータ以降の文字列を取得
            '---------------------------------------
            strCnt = str.IndexOf(str_Param & "=")
            str = Mid(str, strCnt + 1, Len(str))

            '---------------------------------------
            'パラメータから「&」までの文字列を取得
            '---------------------------------------
            strCnt = str.IndexOf("&")

            '「&」がなければすべての文字列を取得
            If strCnt < 0 Then
                str = Left(str, Len(str))
            Else
                str = Left(str, strCnt)
            End If

            '---------------------------------------
            'パラメータ値を取得
            '---------------------------------------
            str = Replace(str, str_Param & "=", "")
            str = Replace(str, "&", "")
        Catch ex As Exception
            Return "Err_SVN:str_ParamGet()関数で予期せぬエラーが発生しました。"
        End Try

        Return str
    End Function

    Private Sub SessionClear()
        '※メンテナンスしきれないので未使用

        '掲示板のセッションクリア
        '例、個人お知らせから連絡事項に切り替える際は、
        '1)前回クリックした個人お知らせの対象がユーザコントロールに残っている
        '2)Gridviewが前回選択された状態になっている
        Session.Remove(S_Info_Selected_No)
        Session.Remove(S_Info_Selected_Index)
    End Sub

#End Region

End Class

