<?php
    $total_pages = 0;
    $count = 0;
    $datatype = '';

    // リターンするデータの形式
    if (isset($_GET['datatype']) && $_GET['datatype'] != '')
    {
        $datatype = $_GET['datatype'];
    }

    // 要求されたページ
    if (isset($_GET['page']))
    {
        $page = (int)$_GET['page'];
    }
    else
    {
        $page = 1;  // デフォルト 1 ページ目
    }

    // グリッドへ表示する行数
    if (isset($_GET['rows']))
    {
        $limit = (int)$_GET['rows'];
    }
    else
    {
        $limit = 10;    // デフォルト 10 行
    }

     // ソートする列
    if (isset($_GET['sidx']))
    {
        $sidx = (string)$_GET['sidx'];
    }
    else
    {
        $sidx = "id";   // デフォルト ID 列
    }

     // ソートの順序
    if (isset($_GET['sord']))
    {
        $sord = (string)$_GET['sord'];
    }
    else
    {
        $sord = ''; // デフォルト 指定なし
    }
    
    // データベースから取得し、行数、ページ数など算出する
    $users = db_grid_getusers($page, $limit, $sidx, $sord, $total_pages, $count);

    if (is_array($users))
    {
        if ($datatype == "json")
        {
            /* json format
            { 
              "total": "xxx", 
              "page": "yyy", 
              "records": "zzz",
              "rows" : [
                {"id" :"1", "cell":["cell11", "cell12", "cell13"]},
                {"id" :"2", "cell":["cell21", "cell22", "cell23"]},
                  ...
              ]
            }
            */
            header("Content-Type: application/json; charset=utf-8");
            echo '{'.PHP_EOL;
            echo '"total":"'.$total_pages.'",'.PHP_EOL;
            echo '"page":"'.$page.'",'.PHP_EOL;
            echo '"records":"'.$count.'",'.PHP_EOL;
            echo '"rows":['.PHP_EOL;
            $i = 0;
            $rowNum = min($count, $limit);
            foreach($users as $user)
            {
                echo '{';
                echo '"id":"'.$user['id'].'",';
                echo '"cell":["'.$user['id'].
                           '","'.$user['name'].
                           '","'.$user['name_furigana'].
                           '","'.$user['tel_no1'].
                           '","'.$user['tel_no2'].
                           '","'.$user['role'].
                           '","'.$user['modified'].
                           '"]';
                echo '}';
                if ($i < $rowNum - 1)
                {
                    echo ',';
                }
                echo PHP_EOL;
                $i++;
            }
            echo ']'.PHP_EOL;
            echo '}'.PHP_EOL;
        }
        else if ($datatype == "xml")
        {
            /* xml format
            <?xml version="1.0" encoding="UTF-8"?>
            <rows>
                <page>xxx</page>
                <total>yyy</total>
                <records>zzz</records>
                <row id="1">
                    <cell>cell11</cell>
                    <cell>cell12</cell>
                </row>
                  ...
            </rows>
            */
            header("Content-type: text/xml;charset=utf-8");
            echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>".PHP_EOL;
            echo "<rows>".PHP_EOL;
            echo "<page>".$page."</page>".PHP_EOL;
            echo "<total>".$total_pages."</total>".PHP_EOL;
            echo "<records>".$count."</records>".PHP_EOL;

            foreach ($users as $user)
            {
                echo "<row id='".$user['id']."'>".PHP_EOL;
                echo "<cell>".$user['id']."</cell>".PHP_EOL;
                echo "<cell><![CDATA[". $user['name']."]]></cell>".PHP_EOL;
                echo "<cell><![CDATA[". $user['name_furigana']."]]></cell>".PHP_EOL;
                echo "<cell>".$user['tel_no1']."</cell>".PHP_EOL;
                echo "<cell>".$user['tel_no2']."</cell>".PHP_EOL;
                echo "<cell>".$user['role']."</cell>".PHP_EOL;
                echo "<cell>".$user['modified']."</cell>".PHP_EOL;
                echo "</row>".PHP_EOL;
            }
            echo "</rows>".PHP_EOL; 
        }
    }
    /*
     * db_grid_getusers: データを取得して、データ並べ替え、ページ数算出
     */
    function db_grid_getusers(&$page, $limit, $sidx, $sord, &$total_pages, &$count)
    {
        // データベース情報
        $db_host = 'server';
        $db_database = 'database';
        $db_username = 'username';
        $db_password = 'password';

        // データベースへ接続
        $db = mysql_connect($db_host, $db_username, $db_password);
        mysql_select_db($db_database, $db);

        // Operators テーブルのデータ数を算出
        $result = mysql_query("SELECT COUNT(*) AS count FROM Operators");
        $row = mysql_fetch_array($result, MYSQL_ASSOC);
        $count = $row['count'];

        // グリッドの表示行からページ数を算出
        if ($count > 0)
        {
            $total_pages = ceil($count / $limit);
        }
        else
        {
            $total_pages = 0;
        }
        
        // 指定のページがページ数より大きければページ数を指定ページに設定
        if ($page > $total_pages)
        {
            $page = $total_pages;
        }

        // 指定ページ数の開始行を算出
        // 表示行数($limit)が10行で、指定ページが2ページの場合、
        // 開始行は 10 x 2 - 10 = 10行目
        $start = $limit * $page - $limit;

        if ($start < 0)
        {
            $start = 0;
        }

        // Operators テーブルの開始行から表示行数分のデータを取得
        $sql = "SELECT id, name, name_furigana, tel_no1, tel_no2, role, modified FROM Operators ORDER BY ".$sidx." ".$sord." LIMIT ".$start." , ".$limit.";";

        $result = mysql_query($sql);

        if(is_bool($result))
        {
            $return = mysql_error();
        }
        else
        {
            $rows = array();

            while ($row = mysql_fetch_assoc($result))
            {
                array_push($rows, $row);
            }

            $return = $rows;
        }

        mysql_close($db);
        
        return $return;
    }
?>