<?php
require_once 'SystemDB.php';

/**
 * メンバー
 */
class Platy_Member
{
    public $id;
    public $username;
    public $email;
    
    public $privilege;
    
    /**
     * Constructor
     */
    function __construct($memberId = 0)
    {
        if ($memberId > 0) {
            $table = new DbMember();
            $row = $table->fetchRow("id={$memberId}");
            $this->id = $row->id;
            $this->email = $row->email;
            $this->username = $row->username;
        }
    }
    
    /**
     * ログインしているかを返す
     * @return bool ログインしていればtrue,そうでなければfalseを返す
     */
    public function isLoggedIn()
    {
        if ($this->id > 0) {
            return true;
        }
        return false;
    }
    
    /**
     * 管理者であるかを返す
     * @return bool 管理者であればtrue,そうでなければfalseを返す
     */
    public function isAdmin()
    {
        if ($this->id == 1) {
            return true;
        }
        return false;
    }
    
    /**
     * 権限のチェック
     * @param string $name 権限
     * @return bool 権限があればtrue,なければfalseを返す
     */
    public function isAllowed($name)
    {
        if (!is_array($this->privilege)) {
            $this->loadPrivilege();
        }
        if (!in_array($name, $this->privilege)) {
            return false;
        }
        return true;
    }
    
    /**
     * 権限のロード
     */
    private function loadPrivilege()
    {
        global $db, $config;
        
        $roles = array();
        $this->privilege = array();

        try {
            // ロールを得る
            $sql = "SELECT roleId FROM Platy_ACL_Member_to_Role WHERE memberId=" . $this->id;
            //echo $sql . "<br />\n";
            $rows = $db->fetchAll($sql);
            foreach ($rows as $row) {
                var_dump($row);
                $roles[] = $row['roleId'];
            }
            var_dump($roles);
        }
        catch (Exception $e) {
            echo $sql;
            $profiler = $db->getProfiler();
            $query = $profiler->getLastQueryProfile();
            echo $query->getQuery();
            echo $e->getMessage();
        }

        
        // ロールの持つ権限を得る
        try {
            for ($i = 0; $i < count($roles); $i++) {
                $sql = "SELECT p.name "
                     . "FROM Platy_ACL_Privilege p, Platy_ACL_Role_to_Privilege r2p "
                     . "WHERE p.id=r2p.privilegeId AND r2p.roleId=" . $roles[$i];
                //echo $sql . "<br />\n";
                $rows = $db->fetchAll($sql);
                foreach($rows as $row) {
                    //if (array_search($row['name'], $this->privilege) == false) {
                    if (!in_array($row['name'], $this->privilege)) {
                        $this->privilege[] = $row['name'];
                    }
                }
            }
        }
        catch (Exception $e) {
            echo $sql;
            $profiler = $db->getProfiler();
            $query = $profiler->getLastQueryProfile();
            echo $query->getQuery();
            echo $e->getMessage();
        }
    }
}
?>