-- --------------------------------------------------------------------------------------------------
-- 基本テーブル作成スクリプト
-- ベースシステム(フレームワーク)で最小限必要なテーブルの作成、初期データの登録を行う
-- --------------------------------------------------------------------------------------------------

-- 言語マスター
DROP TABLE IF EXISTS _language;
CREATE TABLE _language (
    ln_id                VARCHAR(2)     DEFAULT ''                    NOT NULL,      -- 言語ID
    ln_name              VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 言語名称
    ln_name_en           VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 英語名称
    ln_priority          INT            DEFAULT 0                     NOT NULL,      -- 優先順位
    PRIMARY KEY  (ln_id)
) TYPE=innodb;
INSERT INTO `_language` (`ln_id`, `ln_name`, `ln_name_en`, `ln_priority`) VALUES
('ja', '日本語',     'Japanese', 0),
('en', '英語',       'English',  1),
('de', 'ドイツ語',   'German',   2),
('fr', 'フランス語', 'French',   3),
('es', 'スペイン語', 'Spanish',  4),
('it', 'イタリア語', 'Italian',  5),
('zh', '中国語',     'Chinese',  6),
('ko', '韓国語',     'Korean',   7),
('ru', 'ロシア語',   'Russian',  8),
('el', 'ギリシャ語', 'Greek',    9),
('la', 'ラテン語',   'Latin',    10),
('ms', 'マレー語',   'Malay',    11),
('ar', 'アラビア語', 'Arabic',   12);

-- システム設定マスター
DROP TABLE IF EXISTS _system_config;
CREATE TABLE _system_config (
    sc_id                VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- ID(Key)
    sc_value             VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 値
    sc_name              VARCHAR(60)    DEFAULT ''                    NOT NULL,      -- 名称
    sc_description       VARCHAR(80)    DEFAULT ''                    NOT NULL,      -- 説明
    sc_index             INT            DEFAULT 0                     NOT NULL,      -- ソート用
    PRIMARY KEY          (sc_id)
) TYPE=innodb;
INSERT INTO `_system_config` (`sc_id`,                         `sc_value`, `sc_name`,                `sc_index`) VALUES
('system_name',                 'Magic3',     'システム名称',                    0),
('db_version',                  '2007112801', 'DBバージョン',                    1),
('default_lang',                'ja',         'デフォルト言語',                  2),
('csv_upload_encoding',         'SJIS-win',   'CSVアップロードエンコード',       3),
('csv_download_encoding',       'SJIS-win',   'CSVダウンロードエンコード',       4),
('permit_init_system',          '0',          'システム初期化許可',              5),
('permit_change_lang',          '1',          '処理言語変更許可',                6),
('permit_detail_config',        '0',          'システム詳細設定許可',            7),
('regenerate_session_id',       '0',          'セッションID毎回更新',            8),
('script_cache_in_browser',     '0',          'ブラウザのスクリプトキャッシュ',  9);

-- エラーメッセージトラン
DROP TABLE IF EXISTS _error_log;
CREATE TABLE _error_log (
    el_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    el_type              VARCHAR(5)     DEFAULT ''                    NOT NULL,      -- メッセージタイプ(info=情報,warn=警告,error=通常エラー,fatal=致命的エラー)
    el_message           TEXT           DEFAULT ''                    NOT NULL,      -- エラーメッセージ
    el_method            TEXT           DEFAULT ''                    NOT NULL,      -- 実行メソッド
    el_access_log_serial INT            DEFAULT 0                     NOT NULL,      -- アクセスログシリアル番号
    el_dt                TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- 記録日時
    PRIMARY KEY          (el_serial)
) TYPE=innodb;

-- バージョン管理マスター
DROP TABLE IF EXISTS _version;
CREATE TABLE _version (
    vs_id                VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- ID(Key)
    vs_value             VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 値
    vs_name              VARCHAR(60)    DEFAULT ''                    NOT NULL,      -- 名称
    vs_description       VARCHAR(80)    DEFAULT ''                    NOT NULL,      -- 説明
    PRIMARY KEY          (vs_id)
) TYPE=innodb;
INSERT INTO _version (vs_id,         vs_value,     vs_name)
VALUES               ('basic_table', '2007112901', '基本テーブルのバージョン');

-- 初期導入パラメータマスター
DROP TABLE IF EXISTS _init_param;
CREATE TABLE _init_param (
    ip_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    ip_id                VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- ID(Key)
    ip_history_index     INT            DEFAULT 0                     NOT NULL,      -- 履歴管理用インデックスNo(0～)
    
    ip_value             TEXT           DEFAULT ''                    NOT NULL,      -- 値
    ip_name              VARCHAR(60)    DEFAULT ''                    NOT NULL,      -- 名称
    ip_description       VARCHAR(80)    DEFAULT ''                    NOT NULL,      -- 説明
    
    ip_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    ip_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    ip_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    ip_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    ip_deleted           BOOLEAN        DEFAULT false                 NOT NULL,      -- レコード削除状態
    PRIMARY KEY          (ip_serial),
    UNIQUE               (ip_id,        ip_history_index)
) TYPE=innodb;

-- ウィジェットパラメータ更新マスター
DROP TABLE IF EXISTS _widget_param_update;
CREATE TABLE _widget_param_update (
    wu_widget_id         VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ウィジェットID(ファイル名)
    wu_member_name       VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- オブジェクトメンバー名
    wu_init_param_id     VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- 対応する初期導入パラメータマスターのID
    wu_group_id          VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 項目グループ識別ID
    PRIMARY KEY          (wu_widget_id, wu_member_name)
) TYPE=innodb;

-- デザイン設定マスター
DROP TABLE IF EXISTS _design;
CREATE TABLE _design (
    dn_id                VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- ID(Key)
    dn_value             VARCHAR(10)    DEFAULT ''                    NOT NULL,      -- 値
    dn_name              VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 名称
    dn_description       VARCHAR(80)    DEFAULT ''                    NOT NULL,      -- 説明
    dn_index             INT            DEFAULT 0                     NOT NULL,      -- ソート用
    PRIMARY KEY          (dn_id)
) TYPE=innodb;

-- セッション管理トラン
DROP TABLE IF EXISTS _session;
CREATE TABLE _session (
    ss_id                CHAR(32)       DEFAULT ''                    NOT NULL,      -- ID
    ss_data              TEXT           DEFAULT ''                    NOT NULL,      -- 値
    ss_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    PRIMARY KEY  (ss_id)
) TYPE=innodb;

-- 追加クラスマスター
DROP TABLE IF EXISTS _addons;
CREATE TABLE _addons (
    ao_id                VARCHAR(10)    DEFAULT ''                    NOT NULL,      -- クラスID
    ao_class_name        VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- クラス名
    ao_name              VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- 名称
    ao_description       VARCHAR(60)    DEFAULT ''                    NOT NULL,      -- 説明
    ao_index             INT            DEFAULT 0                     NOT NULL,      -- ソート用
    ao_autoload          BOOLEAN        DEFAULT true                  NOT NULL,      -- システム起動時の自動読み込み
    PRIMARY KEY          (ao_id)
) TYPE=innodb;

-- ログインユーザマスター
DROP TABLE IF EXISTS _login_user;
CREATE TABLE _login_user (
    lu_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    lu_id                INT            DEFAULT 0                     NOT NULL,      -- ログインユーザID
    lu_history_index     INT            DEFAULT 0                     NOT NULL,      -- 履歴管理用インデックスNo(0～)
    lu_account           VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- ログインアカウント
    lu_password          CHAR(32)       DEFAULT ''                    NOT NULL,      -- ログインパスワード(MD5)
    lu_name              VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- ユーザ名
    lu_user_type         SMALLINT       DEFAULT 0                     NOT NULL,      -- ユーザタイプ(0=仮ユーザ、10=一般ユーザ、20=サイト運営者、100=システム管理者)
    lu_subject           TEXT           DEFAULT ''                    NOT NULL,      -- ログイン可能な機能(カンマ区切り、1=システム管理機能、2=EC、3=ブログ、4=BBS)
    lu_user_status       SMALLINT       DEFAULT 0                     NOT NULL,      -- ユーザの状態
    lu_enable_login      BOOLEAN        DEFAULT true                  NOT NULL,      -- ログイン許可
    lu_active_start_dt   TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- ログイン可能期間(開始)
    lu_active_end_dt     TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- ログイン可能期間(終了)
    lu_tmp_pwd_dt        TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- 仮パスワード発行日時
    lu_widget_id         VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- レコードを登録したウィジェットID

    lu_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    lu_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    lu_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    lu_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    lu_deleted           BOOLEAN        DEFAULT false                 NOT NULL,      -- レコード削除状態
    PRIMARY KEY          (lu_serial),
    UNIQUE               (lu_id,        lu_history_index)
) TYPE=innodb;
INSERT INTO `_login_user` (`lu_id`, `lu_account`, `lu_password`, `lu_name`,  `lu_user_type`, `lu_subject`, `lu_create_dt`) VALUES
(1,     'admin',    md5('admin'),     '管理者', 100,          '1,',       now());

-- ユーザログイントラン
DROP TABLE IF EXISTS _login_log;
CREATE TABLE _login_log (
    ll_user_id           INT            DEFAULT 0                     NOT NULL,      -- ユーザID
    ll_login_count       INT            DEFAULT 0                     NOT NULL,      -- ログイン回数
    ll_access_log_serial INT            DEFAULT 0                     NOT NULL,      -- アクセスログシリアル番号
    ll_pre_login_dt      TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- 前回ログイン日時
    ll_last_login_dt     TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- 最終ログイン日時
    PRIMARY KEY  (ll_user_id)
) TYPE=innodb;

-- ユーザログインエラートラン
DROP TABLE IF EXISTS _login_err_log;
CREATE TABLE _login_err_log (
    le_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    le_account           VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- ログインアカウント
    le_ip                VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- アクセス元IP(IPv6対応)
    le_access_log_serial INT            DEFAULT 0                     NOT NULL,      -- アクセスログシリアル番号
    PRIMARY KEY          (le_serial)
) TYPE=innodb;

-- ユーザアクセスログトラン
DROP TABLE IF EXISTS _access_log;
CREATE TABLE _access_log (
    al_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    al_user_id           INT            DEFAULT 0                     NOT NULL,      -- ログインユーザID(0=不明)
    al_cookie_value      CHAR(32)       DEFAULT ''                    NOT NULL,      -- アクセス管理用クッキーの値
    al_ip                VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- アクセス元IP(IPv6対応)
    al_method            VARCHAR(4)     DEFAULT ''                    NOT NULL,      -- アクセスメソッド
    al_uri               TEXT           DEFAULT ''                    NOT NULL,      -- アクセスURI
    al_referer           TEXT           DEFAULT ''                    NOT NULL,      -- リファラー
    al_request           TEXT           DEFAULT ''                    NOT NULL,      -- リクエストパラメータ
    al_user_agent        TEXT           DEFAULT ''                    NOT NULL,      -- アクセスプログラム
    al_accept_language   VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- クライアントの認識可能言語
    al_dt                TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- アクセス日時
    PRIMARY KEY          (al_serial)
) TYPE=innodb;

-- ウィジェット実行ログトラン
DROP TABLE IF EXISTS _widget_log;
CREATE TABLE _widget_log (
    wl_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    wl_widget_id         VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ウィジェットID(ファイル名)
    wl_type              INT            DEFAULT 0                     NOT NULL,      -- 実行タイプ(0=ページからの実行、1=単体実行)
    wl_cmd               VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 実行コマンド
    wl_message           TEXT           DEFAULT ''                    NOT NULL,      -- 実行メッセージ
    wl_access_log_serial INT            DEFAULT 0                     NOT NULL,      -- アクセスログシリアル番号
    wl_dt                TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- 記録日時
    PRIMARY KEY          (wl_serial)
) TYPE=innodb;

-- ナビゲーションバー項目マスター
DROP TABLE IF EXISTS _nav_item;
CREATE TABLE _nav_item (
    ni_id                INT            DEFAULT 0                     NOT NULL,      -- 項目ID
    ni_parent_id         INT            DEFAULT 0                     NOT NULL,      -- 親項目ID(親がないときは0)
    ni_index             INT            DEFAULT 0                     NOT NULL,      -- 同じ親項目IDでの項目順(0～)
    ni_nav_id            VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- ナビゲーションバー識別ID
    ni_task_id           VARCHAR(70)    DEFAULT ''                    NOT NULL,      -- 起動タスクID
    ni_param             VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 追加パラメータ
    ni_group_id          VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 項目グループ識別ID
    ni_name              VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- 名前
    ni_visible           BOOLEAN        DEFAULT true                  NOT NULL,      -- 表示するかどうか
    PRIMARY KEY          (ni_id),
    UNIQUE               (ni_nav_id,    ni_task_id,                   ni_param)
) TYPE=innodb;
-- 管理画面メニューデータ
INSERT INTO `_nav_item` (`ni_id`, `ni_parent_id`, `ni_index`, `ni_nav_id`, `ni_task_id`, `ni_group_id`, `ni_name`, `ni_visible`) VALUES
(1,     0,            0,        'admin_menu', 'page',        '',  '画面管理', true),
(2,     1,            0,        'admin_menu', 'pagedef',     '',  '画面定義', true),
(3,     1,            1,        'admin_menu', 'widgetlist',  '', 'ウィジェット管理', true),
(4,     1,            2,        'admin_menu', 'templist',    '',  'テンプレート管理', true),
(5,     1,            3,        'admin_menu', 'pageother',   '', 'その他', true),
(6,     0,            1,        'admin_menu', 'user',        '',     'ログイン管理', true),
(7,     6,            0,        'admin_menu', 'userlist',    '', 'ユーザ一覧', true),
(8,     6,            1,        'admin_menu', 'loginstatus', '', 'ログイン状況', true),
(9,     0,            2,        'admin_menu', 'config',      '',   '基本設定', true),
(10,    9,            0,        'admin_menu', 'configsite',  '', 'サイト情報', true),
(11,    9,            1,        'admin_menu', 'configsys',   '', 'システム情報', true),
(12,    9,            2,        'admin_menu', 'initsystem',  '', 'システム初期化', true),
(13,    0,            3,        'admin_menu', 'develop',     'develop', '開発', false),
(14,    13,           0,        'admin_menu', 'editsource',  'develop', 'ソース参照', false);

-- コンテンツ参照トラン
DROP TABLE IF EXISTS _view_count;
CREATE TABLE _view_count (
    vc_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    vc_type_id           VARCHAR(2)     DEFAULT ''                    NOT NULL,      -- コンテンツタイプ(ct=デフォルトコンテンツ, bg=ブログ)
    vc_content_serial    INT            DEFAULT 0                     NOT NULL,      -- コンテンツシリアル番号
    vc_date              DATE           DEFAULT '0000-00-00'          NOT NULL,      -- 日付
    vc_hour              SMALLINT       DEFAULT 0                     NOT NULL,      -- 時間
    vc_count             INT            DEFAULT 0                     NOT NULL,      -- 参照数
    PRIMARY KEY          (vc_serial),
    UNIQUE               (vc_type_id,      vc_content_serial,            vc_date,       vc_hour)
) TYPE=innodb;

-- テンプレート表示位置マスター
DROP TABLE IF EXISTS _template_position;
CREATE TABLE _template_position (
    tp_id                VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- テンプレートID
    tp_name              VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- テンプレート名称
    tp_description       VARCHAR(100)   DEFAULT ''                    NOT NULL,      -- 説明
    tp_sort_order        INT            DEFAULT 0                     NOT NULL,      -- ソート順
    tp_available         BOOLEAN        DEFAULT true                  NOT NULL,      -- メニューから選択可能かどうか
    PRIMARY KEY  (tp_id)
) TYPE=innodb;
INSERT INTO `_template_position` (`tp_id`,       `tp_name`, `tp_description`, `tp_sort_order`) VALUES
('main',      'main',      '',             0),
('left',      'left',      '',             1),
('right',     'right',      '',             2),
('center',    'center',      '',             3),
('top',       'top',      '',             4),
('bottom',    'bottom',      '',             5),
('header',    'header',      '',             6),
('footer',    'footer',      '',             7),
('navi',      'navi',      '',             8),
('inset',     'inset',      '',             9),
('banner',    'banner',      '',             10),
('newsflash', 'newsflash',      '',          11),
('legals',    'legals',      '',             12),
('pathway',   'pathway',      '',            13),
('toolbar',   'toolbar',      '',            14),
('cpanel',    'cpanel',      '',             15),
('user1',     'user1',      '',             16),
('user2',     'user2',      '',             17),
('user3',     'user3',      '',             18),
('user4',     'user4',      '',             19),
('user5',     'user5',      '',             20),
('user6',     'user6',      '',             21),
('user7',     'user7',      '',             22),
('user8',     'user8',      '',             23),
('user9',     'user9',      '',             24),
('advert1',   'advert1',      '',             25),
('advert2',   'advert2',      '',             26),
('advert3',   'advert3',      '',             27),
('advert4',   'advert4',      '',             28),
('advert5',   'advert5',      '',             29),
('icon',      'icon',      '',             30),
('debug',     'debug',      'デバッグ用',   31);

-- テンプレート情報マスター
DROP TABLE IF EXISTS _templates;
CREATE TABLE _templates (
    tm_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    tm_id                VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- テンプレートID
    tm_history_index     INT            DEFAULT 0                     NOT NULL,      -- 履歴管理用インデックスNo(0～)
    tm_language          TEXT           DEFAULT ''                    NOT NULL,      -- 対応言語ID(「,」区切りで複数指定可)
    tm_name              VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- テンプレート名
    tm_description       VARCHAR(100)   DEFAULT ''                    NOT NULL,      -- 説明
    tm_url               TEXT           DEFAULT ''                    NOT NULL,      -- 取得先URL
    tm_default           BOOLEAN        DEFAULT false                 NOT NULL,      -- デフォルトフラグ
    tm_available         BOOLEAN        DEFAULT true                  NOT NULL,      -- メニューから選択可能かどうか
    
    tm_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    tm_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    tm_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    tm_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    tm_deleted           BOOLEAN        DEFAULT false                 NOT NULL,      -- レコード削除状態
    PRIMARY KEY          (tm_serial),
    UNIQUE               (tm_id,        tm_history_index)
) TYPE=innodb;

-- ウィジェット情報マスター
DROP TABLE IF EXISTS _widgets;
CREATE TABLE _widgets (
    wd_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    wd_id                VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ウィジェットID(ファイル名)
    wd_history_index     INT            DEFAULT 0                     NOT NULL,      -- 履歴管理用インデックスNo(0～)
    
    wd_language          TEXT           DEFAULT ''                    NOT NULL,      -- 対応言語ID(「,」区切りで複数指定可)
    wd_name              VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ウィジェット名称
    wd_type              VARCHAR(8)     DEFAULT ''                    NOT NULL,      -- ウィジェット種別(ウィジェットの種類を示す文字コード)
    wd_version           VARCHAR(10)    DEFAULT ''                    NOT NULL,      -- バージョン文字列
    wd_fingerprint       CHAR(32)       DEFAULT ''                    NOT NULL,      -- ソースコードレベルでウィジェットを識別するためのID
    wd_group_id          VARCHAR(10)    DEFAULT ''                    NOT NULL,      -- ウィジェットグループ(管理用)
    wd_compatible_id     VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 互換ウィジェットID
    wd_suffix            VARCHAR(4)     DEFAULT ''                    NOT NULL,      -- HTMLタグのクラス名に付けるサフィックス文字列
    wd_params            VARCHAR(100)   DEFAULT ''                    NOT NULL,      -- 各種パラメータ
    wd_author            VARCHAR(30)    DEFAULT ''                    NOT NULL,      -- 作者名
    wd_copyright         VARCHAR(30)    DEFAULT ''                    NOT NULL,      -- 著作権
    wd_license           VARCHAR(30)    DEFAULT ''                    NOT NULL,      -- ライセンス
    wd_official_level    INT            DEFAULT 0                     NOT NULL,      -- 公認レベル(0=非公認、1=準公認、10=正規公認)
    wd_status            INT            DEFAULT 0                     NOT NULL,      -- 状態(0=通常、1=テスト中)
    wd_description       VARCHAR(100)   DEFAULT ''                    NOT NULL,      -- 説明
    wd_url               TEXT           DEFAULT ''                    NOT NULL,      -- 取得先URL
    wd_show_name         BOOLEAN        DEFAULT false                 NOT NULL,      -- ウィジェット名称を表示するかどうか
    wd_read_scripts      BOOLEAN        DEFAULT false                 NOT NULL,      -- スクリプトファイルを読み込むかどうか
    wd_read_css          BOOLEAN        DEFAULT false                 NOT NULL,      -- cssファイルを読み込むかどうか
    wd_available         BOOLEAN        DEFAULT true                  NOT NULL,      -- メニューから選択可能かどうか
    wd_editable          BOOLEAN        DEFAULT true                  NOT NULL,      -- データ編集可能かどうか
    wd_has_admin         BOOLEAN        DEFAULT false                 NOT NULL,      -- 管理画面があるかどうか
    wd_has_log           BOOLEAN        DEFAULT false                 NOT NULL,      -- ログ参照画面があるかどうか
    wd_enable_operation  BOOLEAN        DEFAULT false                 NOT NULL,      -- 単体起動可能かどうか
    wd_use_instance_def  BOOLEAN        DEFAULT false                 NOT NULL,      -- インスタンス定義が必要かどうか
    wd_is_initialized    BOOLEAN        DEFAULT false                 NOT NULL,      -- 初期化完了かどうか
    wd_launch_index      INT            DEFAULT 0                     NOT NULL,      -- 遅延実行制御が必要な場合の実行順(0=未設定、0以上=実行順)
    wd_install_dt        TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- インストール日時
    
    wd_index_file        VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 起動クラスのファイル名
    wd_index_class       VARCHAR(200)   DEFAULT ''                    NOT NULL,      -- 起動クラス名
    wd_admin_file        VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 管理機能起動クラスのファイル名
    wd_admin_class       VARCHAR(200)   DEFAULT ''                    NOT NULL,      -- 管理機能起動クラス名
    wd_db                VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 対応DB種(mysql,pgsql等を「,」区切りで指定)
	
    wd_checked_out       BOOLEAN        DEFAULT false                 NOT NULL,      -- チェックアウト中かどうか
    wd_checked_out_dt    TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- チェックアウト日時
    wd_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    wd_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    wd_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    wd_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    wd_deleted           BOOLEAN        DEFAULT false                 NOT NULL,      -- レコード削除状態
    PRIMARY KEY          (wd_serial),
    UNIQUE               (wd_id,        wd_history_index)
) TYPE=innodb;
INSERT INTO `_widgets` (`wd_id`, `wd_name`, `wd_type`, `wd_params`, `wd_author`, `wd_copyright`, `wd_license`, `wd_official_level`, `wd_read_scripts`, `wd_read_css`, `wd_available`, `wd_editable`, `wd_has_admin`, `wd_enable_operation`, `wd_use_instance_def`, `wd_is_initialized`, `wd_launch_index`, `wd_install_dt`, `wd_create_dt`) VALUES
('admin_menu',       '管理用メニュー',             'ADMN',  '',     'Naoki Hirata', 'Magic3.org', 'GPL', 2,         true,            true,        false,        false,       false,        false,          false, true, 100, now(),now()),
('admin_main',       '管理用画面',                 'ADBD',  '',     'Naoki Hirata', 'Magic3.org', 'GPL', 2,         true,            true,        false,        false,       false,        true,          false, true, 0,   now(),now());

-- ウィジェットパラメータマスター
DROP TABLE IF EXISTS _widget_param;
CREATE TABLE _widget_param (
    wp_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    wp_id                VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ウィジェットID
    wp_history_index     INT            DEFAULT 0                     NOT NULL,      -- 履歴管理用インデックスNo(0～)
    wp_param             TEXT           DEFAULT ''                    NOT NULL,      -- パラメータオブジェクトをシリアライズしたもの
    
    wp_checked_out       BOOLEAN        DEFAULT false                 NOT NULL,      -- チェックアウト中かどうか
    wp_checked_out_dt    TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- チェックアウト日時
    wp_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    wp_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    wp_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    wp_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    wp_deleted           BOOLEAN        DEFAULT false                 NOT NULL,      -- レコード削除状態
    PRIMARY KEY          (wp_serial),
    UNIQUE               (wp_id,        wp_history_index)
) TYPE=innodb;

-- インナーウィジェット情報マスター
DROP TABLE IF EXISTS _iwidgets;
CREATE TABLE _iwidgets (
    iw_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    iw_widget_id         VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ウィジェットID(ファイル名)
    iw_id                VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- インナーウィジェットID(ファイル名)
    iw_history_index     INT            DEFAULT 0                     NOT NULL,      -- 履歴管理用インデックスNo(0～)
    
    iw_language          TEXT           DEFAULT ''                    NOT NULL,      -- 対応言語ID(「,」区切りで複数指定可)
    iw_name              VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ウィジェット名称
    iw_type              VARCHAR(8)     DEFAULT ''                    NOT NULL,      -- ウィジェット種別(ウィジェットの種類を示す文字コード)
    iw_version           VARCHAR(10)    DEFAULT ''                    NOT NULL,      -- バージョン文字列
    iw_fingerprint       CHAR(32)       DEFAULT ''                    NOT NULL,      -- ソースコードレベルでウィジェットを識別するためのID
    iw_author            VARCHAR(30)    DEFAULT ''                    NOT NULL,      -- 作者名
    iw_copyright         VARCHAR(30)    DEFAULT ''                    NOT NULL,      -- 著作権
    iw_license           VARCHAR(30)    DEFAULT ''                    NOT NULL,      -- ライセンス
    iw_official_level    INT            DEFAULT 0                     NOT NULL,      -- 公認レベル(0=非公認、1=準公認、10=正規公認)
    iw_description       VARCHAR(100)   DEFAULT ''                    NOT NULL,      -- 説明
    iw_url               TEXT           DEFAULT ''                    NOT NULL,      -- 取得先URL
    iw_install_dt        TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- インストール日時
    
    iw_index_file        VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 起動クラスのファイル名
    iw_index_class       VARCHAR(200)   DEFAULT ''                    NOT NULL,      -- 起動クラス名
    iw_admin_file        VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 管理機能起動クラスのファイル名
    iw_admin_class       VARCHAR(200)   DEFAULT ''                    NOT NULL,      -- 管理機能起動クラス名
    iw_db                VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 対応DB種(mysql,pgsql等を「,」区切りで指定)
	
    iw_checked_out       BOOLEAN        DEFAULT false                 NOT NULL,      -- チェックアウト中かどうか
    iw_checked_out_dt    TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- チェックアウト日時
    iw_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    iw_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    iw_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    iw_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    iw_deleted           BOOLEAN        DEFAULT false                 NOT NULL,      -- レコード削除状態
    PRIMARY KEY          (iw_serial),
    UNIQUE               (iw_widget_id, iw_id,        iw_history_index)
) TYPE=innodb;

-- ページIDマスター
DROP TABLE IF EXISTS _page_id;
CREATE TABLE _page_id (
    pg_id                VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- ページメインID、ページサブID
    pg_type              INT            DEFAULT 0                     NOT NULL,      -- ページID種別(0=ページメインID,1=ページサブID)
    pg_default_sub_id    VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- デフォルトのサブページID(ページID種別がページメインIDとき使用)
    pg_path              VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- アクセスポイントパス(ページID種別がページメインIDとき使用)
    pg_name              VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- ページ名称
    pg_description       VARCHAR(60)    DEFAULT ''                    NOT NULL,      -- 説明
    pg_priority          INT            DEFAULT 0                     NOT NULL,      -- 優先度
    pg_is_public         BOOLEAN        DEFAULT false                 NOT NULL,      -- URLの公開
    pg_editable          BOOLEAN        DEFAULT true                  NOT NULL,      -- データ編集可能かどうか
    PRIMARY KEY  (pg_id, pg_type)
) TYPE=innodb;
INSERT INTO `_page_id` (`pg_id`,         `pg_type`, `pg_default_sub_id`, `pg_path`,       `pg_name`,          `pg_description`,                     `pg_priority`, `pg_is_public`, `pg_editable`) VALUES
('index',       0,       'content',         'index',       'index',          '',                                 0,true,true),
('admin_index', 0,       'content',         'admin/index', 'admin_index',    '',                                 1,true,false),
('content',     1,       '',                '',            'コンテンツ',     'コンテンツ画面用',                 0,true,false),
('shop',        1,       '',                '',            'ECショップ',     'ECショップ画面用',                 1,true,true),
('bbs',         1,       '',                '',            '掲示板',         '掲示板画面用',                     2,true,true),
('blog',        1,       '',                '',            'ブログ',         'ブログ画面用',                     3,true,true),
('photo',       1,       '',                '',            'フォトアルバム', 'フォトアルバム画面用',             4,true,true),
('contact',     1,       '',                '',            'お問い合わせ',   'お問い合わせ画面用',               5,true,true),
('test',        1,       '',                '',            'テスト用',       'テスト用非公開画面',               10,false,true);

-- ページパラメータマスター
DROP TABLE IF EXISTS _page_param;
CREATE TABLE _page_param (
    pe_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    pe_id                VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ページID
    pe_sub_id            VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ページ補助ID
    pe_language_id       VARCHAR(2)     DEFAULT ''                    NOT NULL,      -- 言語ID
    pe_history_index     INT            DEFAULT 0                     NOT NULL,      -- 履歴管理用インデックスNo(0～)

    pe_meta_description  TEXT           DEFAULT ''                    NOT NULL,      -- METAタグ、ページ要約
    pe_meta_keywords     TEXT           DEFAULT ''                    NOT NULL,      -- METAタグ、検索用キーワード
    pe_use_ssl           BOOLEAN        DEFAULT false                 NOT NULL,      -- SSLを使用するかどうか
    
    pe_checked_out       BOOLEAN        DEFAULT false                 NOT NULL,      -- チェックアウト中かどうか
    pe_checked_out_dt    TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- チェックアウト日時
    pe_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    pe_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    pe_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    pe_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    pe_deleted           BOOLEAN        DEFAULT false                 NOT NULL,      -- レコード削除状態
    PRIMARY KEY          (pe_serial),
    UNIQUE               (pe_id,        pe_sub_id,   pe_language_id,  pe_history_index)
) TYPE=innodb;

-- ページ定義マスター
DROP TABLE IF EXISTS _page_def;
CREATE TABLE _page_def (
    pd_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    pd_id                VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ページID(ファイル名)
    pd_sub_id            VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- ページ補助ID
    pd_set_id            INT            DEFAULT 0                     NOT NULL,      -- 定義セットID
    
    pd_position_id       VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 表示位置ID
    pd_index             INT            DEFAULT 0                     NOT NULL,      -- 表示順(1～)
    pd_widget_id         VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 表示するウィジェットID
    pd_widget_config_id  INT            DEFAULT 0                     NOT NULL,      -- ウィジェット定義ID
    pd_suffix            VARCHAR(5)     DEFAULT ''                    NOT NULL,      -- インスタンスを区別するためのサフィックス文字列
    pd_style             TEXT           DEFAULT ''                    NOT NULL,      -- HTMLスタイル属性
    pd_visible           BOOLEAN        DEFAULT true                  NOT NULL,      -- ウィジェットを表示するかどうか
    pd_editable          BOOLEAN        DEFAULT true                  NOT NULL,      -- データ編集可能かどうか
    
    pd_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    pd_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    PRIMARY KEY          (pd_serial)
) TYPE=innodb;
INSERT INTO `_page_def` (`pd_id`,         `pd_sub_id`, `pd_position_id`, `pd_index`, `pd_widget_id`,       `pd_widget_config_id`, `pd_visible`, `pd_editable`, `pd_update_dt`) VALUES
('admin_index', '',        'top',          1,        'admin_menu',       0,                   true,       false,       now()),
('admin_index', '',        'main',         1,        'admin_main',       0,                   true,       false,       now());

-- ページ定義セットマスター
DROP TABLE IF EXISTS _page_def_set;
CREATE TABLE _page_def_set (
    ds_id                INT            DEFAULT 0                     NOT NULL,      -- 定義セットID
    
    ds_name              VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 定義セット名称
    ds_user_type         INT            DEFAULT 0                     NOT NULL,      -- ユーザタイプ
    
    ds_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    ds_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    PRIMARY KEY          (ds_id)
) TYPE=innodb;

-- サイト定義マスター
DROP TABLE IF EXISTS _site_def;
CREATE TABLE _site_def (
    sd_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    sd_id                VARCHAR(20)    DEFAULT ''                    NOT NULL,      -- 定義項目ID
    sd_language_id       VARCHAR(2)     DEFAULT ''                    NOT NULL,      -- 言語ID
    sd_history_index     INT            DEFAULT 0                     NOT NULL,      -- 履歴管理用インデックスNo(0～)
    sd_value             VARCHAR(100)   DEFAULT ''                    NOT NULL,      -- 値

    sd_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    sd_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    sd_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    sd_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    sd_deleted           BOOLEAN        DEFAULT false                 NOT NULL,      -- レコード削除状態
    PRIMARY KEY          (sd_serial),
    UNIQUE               (sd_id,        sd_language_id,               sd_history_index)
) TYPE=innodb;
INSERT INTO `_site_def` (`sd_id`,              `sd_language_id`, `sd_value`,         `sd_create_dt`) VALUES
('head_description', 'ja',           'no_description', now()),
('head_keywords',    'ja',           'no_keyword',     now()),
('head_robots',      'ja',           'index, follow',  now()),
('site_name',        'ja',           'site name undefined',     now()),
('site_owner',       'ja',           'site owner undefined',     now()),
('site_copyright',  'ja',           'copyright undefined',     now()),
('site_email',       'ja',           '',     now());

-- メール送信ログトラン
DROP TABLE IF EXISTS _mail_send_log;
CREATE TABLE _mail_send_log (
    ms_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    ms_type              INT            DEFAULT 0                     NOT NULL,      -- メール種別(0=未設定、1=自動送信、2=手動送信)
    ms_widget_id         VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- 送信ウィジェットID
    ms_to                VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- メール送信先アドレス
    ms_from              VARCHAR(50)    DEFAULT ''                    NOT NULL,      -- メール送信元アドレス
    ms_subject           VARCHAR(100)   DEFAULT ''                    NOT NULL,      -- メール件名
    ms_body              VARCHAR(500)   DEFAULT ''                    NOT NULL,      -- メール本文
    ms_dt                TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- 送信日時
    PRIMARY KEY          (ms_serial)
) TYPE=innodb;

-- 定型メールフォーム
DROP TABLE IF EXISTS _mail_form;
CREATE TABLE _mail_form (
    mf_serial            INT            AUTO_INCREMENT,                              -- レコードシリアル番号
    mf_id                VARCHAR(40)    DEFAULT ''                    NOT NULL,      -- 定義項目ID
    mf_history_index     INT            DEFAULT 0                     NOT NULL,      -- 履歴管理用インデックスNo(0～)
    
    mf_language_id       VARCHAR(2)     DEFAULT ''                    NOT NULL,      -- 言語ID
    mf_subject           VARCHAR(100)   DEFAULT ''                    NOT NULL,      -- 件名
    mf_content           VARCHAR(2000)  DEFAULT ''                    NOT NULL,      -- コンテンツ

    mf_check_out_user_id INT            DEFAULT 0                     NOT NULL,      -- チェックアウトユーザID(0のときはチェックイン状態)
    mf_check_out_dt      TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- チェックアウト日時
    mf_create_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード作成者
    mf_create_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード作成日時
    mf_update_user_id    INT            DEFAULT 0                     NOT NULL,      -- レコード更新者
    mf_update_dt         TIMESTAMP      DEFAULT '0000-00-00 00:00:00' NOT NULL,      -- レコード更新日時
    mf_deleted           BOOLEAN        DEFAULT false                 NOT NULL,      -- レコード削除状態
    PRIMARY KEY          (mf_serial),
    UNIQUE               (mf_id,        mf_history_index)
) TYPE=innodb;
