<?php
/**
 * グループ覧画面クラス
 *
 * グループ覧画面を実現するためのクラス
 *
 * @package   risoluto
 * @author    Risoluto Developers
 * @license   http://opensource.org/licenses/bsd-license.php new BSD license
 * @copyright (C) 2008-2011 Risoluto Developers / All Rights Reserved.
 */

  /**
   * 基底クラス
   */
  require_once( "admin_user_base.inc" );
  /**
   * データベース操作クラス
   */
  require_once( RISOLUTO_FUNC . 'risoluto_db.php' );

  /**
   * ページャクラス
   */
  require_once( 'Pager.php' );

  class grouplist extends admin_user_base
  {
    //------------------------------------------------------//
    // クラス変数定義
    //------------------------------------------------------//
    /**
     * データベース操作クラスインスタンスを保持する変数
     * @access private
     * @var    object
     */
    private $obj_db;
    /**
     * ユーティリティクラスインスタンスを保持する変数
     * @access private
     * @var    object
     */
    private $obj_conf;
    /**
     * 取得データを保持する変数
     * @access private
     * @var    object
     */
    private $gotDat;

    //------------------------------------------------------//
    // クラスメソッド定義
    //------------------------------------------------------//
    /**
     * コンストラクタメソッド
     *
     * コンストラクタメソッド
     *
     * @param     void なし
     * @return    void なし
     */
    public function __construct()
    {
    } // end of function:__construct()

    /**
     * クローンメソッド
     *
     * クローンメソッド
     *
     * @param     void なし
     * @return    void なし
     */
    public function __clone()
    {
    } // end of function:__clone()

    /**
     * modelメソッド（モデル）
     *
     * データ取得等のモデルに相当する部分の処理を行う
     *
     * @param     void なし
     * @return    boolean ファンクション実行結果（ true：正常終了 / false: 異常終了 ）
     */
    public function model()
    {
      // 必要なインスタンスを生成
      $this->obj_conf = new RisolutoConf();
      $this->obj_conf->parse( RISOLUTO_CONF . 'risoluto.ini' );

      // セッションを削除
      $this->obj_sess->sessRevoke( $this->obj_sess->sessLoad( 'currentcage' ) );

      // スーパバイザセッション又はアドミンセッションが存在しない場合は、
      // ログイン画面に遷移する
      if ( ! $this->obj_util->is_Admin() )
      {
        $this->obj_util->redirectTo( $this->obj_adminconf->get( 'COMMON', 'login_act'  )
                                   , $this->obj_adminconf->get( 'COMMON', 'login_cage' ) );
        return false;
      } // end of if



      //------------------------------------------------------------------------
      // ユーザ情報の取得
      //------------------------------------------------------------------------

      // データベースに接続する
      // データベース操作クラスのインスタンスを生成する
      $this->obj_db = new RisolutoDb();

      // データベースに接続する
      if ( $this->obj_db->dbConnect( $this->obj_conf->get( 'DBS', 'DEFAULT_DSN' ) ) )
      {
        // SQL文を組み立てる
        $sql =<<<End_Of_SQL

              SELECT `groups`.`group_id`   -- グループID
                   , `groups`.`group_name` -- グループ名
                   , `groups`.`status`     -- ステータス
                FROM `risoluto_m_group` groups
            ORDER BY `groups`.`group_id` ASC

End_Of_SQL;

        // パラメタも用意する
        $param = array(
                      );

        // SQLの実行に失敗した場合は、例外を投げる
        $tmp_result = $this->obj_db->dbGetAll( $sql, $param );
        if ( PEAR::isError( $tmp_result ) )
        {
          // 接続をクローズする
          $this->obj_db->dbDisConnect();
          throw new Exception( 'group list get Failure' );
          return false;
        } // end of if

        // 接続に成功している場合は接続をクローズする
        $this->obj_db->dbDisConnect();
      } // end of if
      // データベースに接続できなかった場合は、例外を投げる
      else
      {
        throw new Exception( 'DB Connection Failure' );
        return false;
      } // end of else

      // 取得した情報を表示に適した形に加工する
      $tmp_result_cooked = array();
      for( $cnt = 0 ; $cnt < count( $tmp_result ) ; $cnt ++ )
      {
        array_push( $tmp_result_cooked, array(
                                               'group_id'   => $tmp_result[ $cnt ][ 'group_id'    ]
                                             , 'group_name' => $tmp_result[ $cnt ][ 'group_name'  ]
                                             , 'status'     => $tmp_result[ $cnt ][ 'status'      ]
                                             )
                  );
      } // end of for


      //------------------------------------------------------------------------
      // Pagerのセットアップ
      //------------------------------------------------------------------------
      // Pagerオプション値を連想配列にセット
      $pager_params = array(
                       'itemData'              => $tmp_result_cooked
                     , 'urlVar'                => 'p'
                     , 'mode'                  => $this->obj_adminconf->get( 'PAGER', 'mode'          )
                     , 'perPage'               => $this->obj_adminconf->get( 'PAGER', 'perPage'       )
                     , 'delta'                 => $this->obj_adminconf->get( 'PAGER', 'delta'         )
                     , 'prevImg'               => $this->obj_adminconf->get( 'PAGER', 'prevImg'       )
                     , 'nextImg'               => $this->obj_adminconf->get( 'PAGER', 'nextImg'       )
                     , 'firstPagePre'          => $this->obj_adminconf->get( 'PAGER', 'firstPagePre'  )
                     , 'firstPageText'         => $this->obj_adminconf->get( 'PAGER', 'firstPageText' )
                     , 'firstPagePost'         => $this->obj_adminconf->get( 'PAGER', 'firstPagePost' )
                     , 'lastPagePre'           => $this->obj_adminconf->get( 'PAGER', 'lastPagePre'   )
                     , 'lastPageText'          => $this->obj_adminconf->get( 'PAGER', 'lastPageText'  )
                     , 'lastPagePost'          => $this->obj_adminconf->get( 'PAGER', 'firstPagePost' )
                     , 'separator'             => $this->obj_adminconf->get( 'PAGER', 'separator'     )
                     , 'spacesBeforeSeparator' => $this->obj_adminconf->get( 'PAGER', 'spacesSepCnt'  )
                     , 'spacesAfterSeparator'  => $this->obj_adminconf->get( 'PAGER', 'spacesSepCnt'  )
                     , 'clearIfVoid'           => ( !is_null( $this->obj_adminconf->get( "PAGER", "clearIfVoid" ) ) ? true : false )
      );

      // ページャのインスタンスを生成し、必要なデータを生成する
      $pager                        = & Pager::factory( $pager_params );
      $this->gotDat[ 'pager_link' ] = $pager->getLinks();

      // ページデータについては、一番外にある配列の添え字をゼロスタートへリセットする
      $this->gotDat[ 'pager_dat'  ] = array();
      foreach( $pager->getPageData() as $key => $val )
      {
        array_push( $this->gotDat[ 'pager_dat'  ], $val );
      }



      return true;
    } // end of function:model()

    /**
     * viewメソッド（モデル）
     *
     * テンプレート関連処理等のビューに相当する部分の処理を行う
     *
     * @param     void なし
     * @return    boolean ファンクション実行結果（ true：正常終了 / false: 異常終了 ）
     */
    public function view()
    {
      // アサイン
      $this->smarty->assign ( 'header',    $this->obj_util->getHeader() );

      $this->smarty->assign ( 'menu_cage', $this->obj_adminconf->get( 'COMMON', 'menu_cage' ) );
      $this->smarty->assign ( 'menu_act',  $this->obj_adminconf->get( 'COMMON', 'menu_act'  ) );

      $this->smarty->assign ( 'id_lower',  $this->obj_conf->get( 'LIMITS', 'id_lower' ) );

      $this->smarty->assign ( 'grouplist', $this->gotDat[ 'pager_dat'  ] );
      $this->smarty->assign ( 'pagerlink', $this->gotDat[ 'pager_link' ][ 'all' ] );

      // 表示
      $this->smarty->display( 'grouplist.tpl' );

      return true;

    } // end of function:view()

  } // end of class:grouplist

?>
