login_id_type = $in; } // フォームにより送信される変数をユニークにするために特有のシステム名を使って更新する public function setSystemName($in) { $this->FORM_INPUT_NAME_LOGIN_NAME = $in.'id'; $this->FORM_INPUT_NAME_LOGIN_PASSWORD = $in.'pass'; $this->FORM_INPUT_NAME_FORGOTPASSWORD = $in.'forgotpassword'; } // セッション中のユーザが適切なgroup権限を持っているかどうかを判別 public function isGroupById($gid) { if(!$this->isSessionValid()) return(FALSE); if(!is_numeric($gid)) return(FALSE); $my_grp = new Groups(NULL,NULL,NULL,NULL,NULL,$this); // GroupクラスのisGroup()はプライマリを含めたグループチェックを行う return($my_grp->isUserInGroup($_SESSION['id'],$gid)); } // セッション中のユーザが適切なgroup権限を持っているかどうかを判別 public function isGroup($groupname) { if(!$this->isSessionValid()) return(FALSE); if(strlen($groupname) <= 0) return(FALSE); $my_grp = new Groups(NULL,NULL,NULL,NULL,NULL,$this); // GroupクラスのisGroup()はプライマリを含めたグループチェックを行う $group = $my_grp->getObjectByName($groupname); return($my_grp->isUserInGroup($_SESSION['id'],$group->id)); } // セッション中のユーザのprimary groupを判別 public function isPrimaryGroup($groupname) { if(!$this->isSessionValid()) return(FALSE); if(strlen($groupname) <= 0) return(FALSE); // GroupクラスのisPrimaryGroup()はuserのgidを検索するため // クエリが増える。このクラスではセッション中の情報が使えるので、 // GroupクラスのisPrimaryGroup()は使わない。 $my_grp = new Groups(NULL,NULL,NULL,NULL,NULL,$this); $group = $my_grp->getObjectByName($groupname); if($_SESSION['gid']==$group->id) return(TRUE); return(FALSE); } // 管理者権限のユーザーを定義 public function mustBeAdminUser() { if(!$this->isGroupById(0) && !$this->isGroup('admin')) exit(); } // 管理者権限のユーザーを定義 public function isAdminUser() { if($this->isGroupById(0) || $this->isGroup('admin')) return(TRUE); return(FALSE); } public function isUadminUser() { // gid=0はadminグループなので常に許可 if($this->isGroupById(0) || $this->isGroup('admin') || $this->isGroup('uadmin')) return(TRUE); return(FALSE); } public function isSenderUser() { // gid=0はadminグループなので常に許可 if($this->isGroupById(0) || $this->isGroup('admin') || $this->isGroup('uadmin') || $this->isGroup('sender')) return(TRUE); return(FALSE); } // Super Userの定義はid=0 public function mustBeSuperUser() { if(!$this->isGroupById(0)) exit(); } // Super Userの定義はid=0 public function isSuperUser() { return($this->isGroupById(0)); } // 適切なgroup権限でアクセスしていなければ、 // この関数呼び出し以降なにもしないことを保証する // 引数はグループ名 public function mustBeGroup($groupname) { if(strlen($groupname) <= 0) exit(); // 論外 if(!$this->isGroup($groupname)) exit(); } // mustBeGroup()をより厳しくしたもの // プライマリグループでなければアクセス権がないと // 判断される場合に利用する public function mustBePrimaryGroup($groupname) { if(strlen($groupname) <= 0) exit(); // 論外 if(!$this->isPrimaryGroup($groupname)) exit(); } // // セッションにシステムの動作を記憶させたい場合に使うメソッド // function switchOptions() { // if(!strcmp($_POST['showmenu'],"TRUE")) $this->enableMenu(); // else if(!strcmp($_POST['showmenu'],"FALSE")) $this->disableMenu(); // } // 買い物籠を空にする public function cleanBasket($prefix=NULL) { if(array_key_exists($prefix.'basket', $_SESSION)) { //$_SESSION[$prefix.'basket'] = NULL; unset($_SESSION[$prefix.'basket']); } } // 買い物カゴを消す public function removeBasket($bkt_num,$prefix=NULL) { if(array_key_exists($prefix.'basket', $_SESSION)) { if(array_key_exists($bkt_num, $_SESSION[$prefix.'basket'])) { $_SESSION[$prefix.'basket'][$bkt_num] = NULL; } } } // 買い物カゴに入っている商品数を数える public function countBasket($prefix=NULL) { if(!array_key_exists($prefix.'basket', $_SESSION) || is_null($_SESSION[$prefix.'basket'])) return(0); $null_cnt = 0; $row = count($_SESSION[$prefix.'basket']); for($i=0;$i<$row;$i++) { if(is_null($_SESSION[$prefix.'basket'][$i])) $null_cnt++; //買い物カゴデバッグ用出力 //echo "aaa=".$i."
"; //if(!is_null($_SESSION['basket'][$i])) echo $_SESSION['basket'][$i]."
"; } return($row-$null_cnt); } // 次の買い物カゴ番号を得る public function getNextBasketNum($prefix=NULL) { if(!array_key_exists($prefix.'basket', $_SESSION) || is_null($_SESSION[$prefix.'basket'])) return(0); //買い物カゴデバッグ用出力 //echo $prefix."=".count($_SESSION[$prefix.'basket'])."
"; //echo '
'.print_r($_SESSION[$prefix.'basket']).'
'; return(count($_SESSION[$prefix.'basket'])); } // 買い物カゴに既に登録されている商品かどうかをチェックする public function isThisExistsInBasket($num_in, $prefix=NULL) { $rval = FALSE; if(!array_key_exists($prefix.'basket', $_SESSION) || is_null($_SESSION[$prefix.'basket'])) return(FALSE); $keys = array_keys($_SESSION[$prefix.'basket']); $row = count($_SESSION[$prefix.'basket']); for($i=0;$i<$row;$i++) { if(array_key_exists($keys[$i], $_SESSION[$prefix.'basket']) && $_SESSION[$prefix.'basket'][$keys[$i]] == $num_in) $rval = TRUE; } return($rval); } // 買い物カゴを記憶する // 第一引数に買い物カゴ番号、第二引数に買い物カゴに保存する商品番号 public function storeBasket($bkt_num, $value, $prefix=NULL) { // 買い物カゴに重複を許さない if(!$this->isThisExistsInBasket($value, $prefix)) { if(!array_key_exists($prefix.'basket', $_SESSION) || is_null($_SESSION[$prefix.'basket'])) $_SESSION[$prefix.'basket'] = array(); $_SESSION[$prefix.'basket'][$bkt_num] = $value; } } // 買い物カゴの中身を取り出す public function getBasket($bkt_num, $prefix=NULL) { if(array_key_exists($prefix.'basket', $_SESSION) && array_key_exists($bkt_num, $_SESSION[$prefix.'basket']) && !is_null($_SESSION[$prefix.'basket'][$bkt_num])) return($_SESSION[$prefix.'basket'][$bkt_num]); } // 0からの連続した整数をキーにした生の買い物カゴ配列を直接取り出す public function getRawBasketArray($prefix=NULL) { $rval = array(); $mybasket = $this->getAllBasket($prefix); $row = count($mybasket); for($i=0;$i<$row;$i++) { array_push($rval,$mybasket[$i]['val']); } return($rval); } // 買い物カゴの中身を全て取り出す public function getAllBasket($prefix=NULL) { if(!array_key_exists($prefix.'basket', $_SESSION)) return(FALSE); $rval = array(); $keys = array_keys($_SESSION[$prefix.'basket']); $row = count($_SESSION[$prefix.'basket']); for($i=0;$i<$row;$i++) { if(array_key_exists($keys[$i], $_SESSION[$prefix.'basket']) && !is_null($_SESSION[$prefix.'basket'][$keys[$i]])) array_push($rval,array("key" => $keys[$i], "val" => $_SESSION[$prefix.'basket'][$keys[$i]])); } if(count($rval) <= 0) return(FALSE); return($rval); } // このメソッドでセッション中に保存しておく値を定義します public function storeSessionValues($user) { $_SESSION['id'] = $user->id; $_SESSION['gid'] = $user->gid; $_SESSION['name'] = $user->name; $_SESSION['nickname'] = $user->nickname; $_SESSION['url'] = $user->url; $_SESSION['email'] = $user->email; $_SESSION['cell_uniq_id'] = $user->cell_uniq_id; $my_grp = new Groups(NULL,NULL,NULL,NULL,NULL,$this); $group = $my_grp->getObjectById($user->gid); $_SESSION['group_name'] = $group->name; $_SESSION['last_login'] = $user->last_login; $_SESSION['auto_login'] = $user->auto_login; $_SESSION['disabled'] = $user->disabled; } // storeGet()でこれまで得た情報を$_GETに戻す public function restoreGet() { $this->storeGet(); // 今の$_GET情報も保存 $_GET = $_SESSION['get']; } // GETで得た変数を$_SESSION['get']['名前']に記憶する public function storeGet() { // 単純に$_SESSION=$_GETとしないのは、GET情報の履歴を残すため if(!is_array($_GET)) return(FALSE); if(!is_array($_SESSION['get'])) $_SESSION['get'] = array(); $keys = array_keys($_GET); $row = count($keys); for($i=0;$i<$row;$i++) { $_SESSION['get'][$keys[$i]] = $_GET[$keys[$i]]; } return(TRUE); } // $_SESSION['get']の値をキーを指定して取り出す public function getGet($key) { if(!is_array($_SESSION['get'])) return(FALSE); return($_SESSION['get'][$key]); } // $_SESSION['get']を初期化する public function clearGet() { if(array_key_exists('get', $_SESSION)) { unset($_SESSION['get']); } } // storePost()でこれまで得た情報を$_POSTに戻す public function restorePost() { $this->storePost(); // 今の$_POST情報も保存 $_POST = $_SESSION['post']; } // POSTで得た変数を$_SESSION['post']['名前']に記憶する public function storePost() { // 単純に$_SESSION=$_POSTとしないのは、POST情報の履歴を残すため if(!is_array($_POST)) return(FALSE); if(!is_array($_SESSION['post'])) $_SESSION['post'] = array(); $keys = array_keys($_POST); $row = count($keys); for($i=0;$i<$row;$i++) { $_SESSION['post'][$keys[$i]] = $_POST[$keys[$i]]; } return(TRUE); } // $_SESSION['post']の値をキーを指定して取り出す public function getPost($key) { if(!is_array($_SESSION['post'])) return(FALSE); return($_SESSION['post'][$key]); } // $_SESSION['post']を初期化する public function clearPost() { if(array_key_exists('post', $_SESSION)) { unset($_SESSION['post']); } } // セッションの変数を消去する public function clearValue($name, $cat='val') { if(is_null($cat)) { unset($_SESSION[$name]); } else { unset($_SESSION[$cat][$name]); } } // 変数を記憶させた事があるかどうかをチェックする public function isValueStored($name, $cat='val') { if(is_null($cat)) { return(array_key_exists($name,$_SESSION)); } return(array_key_exists($name,$_SESSION[$cat])); } // セッションに変数を記憶する public function storeValue($val, $name, $cat='val') { if(is_null($cat)) { $_SESSION[$name] = $val; } else { $_SESSION[$cat][$name] = $val; } } // セッションに記憶した変数を取り出す public function getValue($name, $cat='val') { if(!$this->isValueStored($name,$cat)) return(FALSE); if(is_null($cat)) { return($_SESSION[$name]); } return($_SESSION[$cat][$name]); } // 一時的に一つだけ値を記憶する public function storeTmp($val) { $_SESSION['tmp'] = $val; } // ユーザー登録フォームに行く前に一時的に記憶する public function storeTmpEmail($email) { $_SESSION['tmp_email'] = $email; } public function getTmpEmail() { return($_SESSION['tmp_email']); } // 一時的に記憶しちえる値を取り出す public function getTmp() { return($_SESSION['tmp']); } // セッションの有効性をチェック public function isSessionValid() { if(array_key_exists('id', $_SESSION)) { if(strlen($_SESSION['id']) > 0 && (strlen($_SESSION['email']) > 0 || strlen($_SESSION['name']) > 0) ) { return(TRUE); // valid } } return(FALSE); // not valid } public function sendMyPassword($newpw=NULL) { // 入力が不十分ならなにもしない if(strlen($_POST[$this->FORM_INPUT_NAME_LOGIN_NAME]) <= 0) return(FALSE); if(!$this->isMailAddress($_POST[$this->FORM_INPUT_NAME_LOGIN_NAME])) return(FALSE); $my_em = new WcEmail(); // DBに接続しない $my_usr = new Users(NULL,NULL,NULL,NULL,NULL,$this); $o = $my_usr->getObjectByEmail($_POST[$this->FORM_INPUT_NAME_LOGIN_NAME]); if(!$o) return(FALSE); // 入力が不正 $ecfrom='UTF-8'; $ecto='ISO-2022-JP'; $ecorg = mb_internal_encoding(); mb_internal_encoding($ecto); $my_em->set( mb_encode_mimeheader(mb_convert_encoding('システムメール',$ecto,$ecfrom)). ' <'.$this->email_from.'>', $_POST[$this->FORM_INPUT_NAME_LOGIN_NAME], mb_convert_encoding('ログインパスワード',$ecto,$ecfrom), mb_convert_encoding("以下のパスワードが登録されています。\n".($newpw?$newpw:$o->password),$ecto,$ecfrom) ); $my_em->appendHeader("Mime-Version: 1.0"); $my_em->appendHeader("Content-Type: text/plain;charset=".$ecto); $rval = $my_em->send(); mb_internal_encoding($ecorg); return($rval); } public function sendNewPassword($from=NULL) { if(!is_null($from) && !$this->isMailAddress($from)) return(FALSE); $new_password = $this->generateNewPassword(); $my_usr = new Users(NULL,NULL,NULL,NULL,NULL,$this); $o = $my_usr->getObjectByEmail($_POST[$this->FORM_INPUT_NAME_LOGIN_NAME]); if($my_usr->updatePassword($o->id, $new_password)) { return($this->sendMyPassword($new_password)); } return(FALSE); } // ログイン時に使ったメールアドレスが有効かどうか確認する // 有効であればそのユーザ情報が入ったオブジェクトを返す public function userExistsByEmail($email) { $my_usr = new Users(NULL,NULL,NULL,NULL,NULL,$this); return($my_usr->getUserObjectByEmail($email)); } // セッションコントロールの開始 // このセッション情報がなければウェブGUIは機能しない public function startSession() { // 認証 // セッションファイルが消されるまでの最大時間を変更 ini_set('session.gc_maxlifetime', $this->SESSION_LIFE_TIME); session_set_cookie_params($this->SESSION_LIFE_TIME); session_start(); if(!$this->isSessionValid()) { // セッション確立前、もしくは無効であるため認証処理に進む $user = NULL; if(array_key_exists($this->FORM_INPUT_NAME_LOGIN_NAME,$_POST) && array_key_exists($this->FORM_INPUT_NAME_LOGIN_PASSWORD,$_POST)) { if($this->login_id_type==0) { $user = $this->authUserByName( $_POST[$this->FORM_INPUT_NAME_LOGIN_NAME], $_POST[$this->FORM_INPUT_NAME_LOGIN_PASSWORD] ); } else if($this->login_id_type==1) { $user = $this->authUserByEmail( $_POST[$this->FORM_INPUT_NAME_LOGIN_NAME], $_POST[$this->FORM_INPUT_NAME_LOGIN_PASSWORD] ); } $my_usr = new Users(NULL,NULL,NULL,NULL,NULL,$this); $my_usr->updateAutoLogin($user->id,$_POST[$this->FORM_INPUT_NAME_AUTOLOGIN]); } if(is_null($user)) { //認証失敗 // もしもパスワードを忘れたという報告であったらこれを処理する // 入力したパスワードで認証が成功すればこの処理をしない if(array_key_exists($this->FORM_INPUT_NAME_FORGOTPASSWORD,$_POST)) { if($_POST[$this->FORM_INPUT_NAME_FORGOTPASSWORD]) { $this->sendNewPassword(); } } } else { $this->storeSessionValues($user); $my_usr->updateLastLogin($user->id); // DBの変更を反映しておく $user = $my_usr->getObjectById($user->id); } } // この処理は毎回行う $this->mylocation = basename($_SERVER['SCRIPT_NAME']); return(TRUE); } // session_destroyのラッパー // startSession()の対でわかりやすさのために準備 public function stopSession() { session_unset(); return(session_destroy()); } // 現在参照中のページ名を得る public function getMyLocation() { return($this->mylocation); } // 自分のインデックスページを取得 public function getMyIndex() { return($_SESSION['index']); } // 自分のユーザIDを取得 public function getMyId() { return($_SESSION['id']); } // 自分のユーザ名を取得 public function getMyName() { if(strlen($_SESSION['name']) > 0) { return($_SESSION['name']); } return(FALSE); } // 自分のニックネームを取得 public function getMyNickname() { return($_SESSION['nickname']); } // 自分のユーザIDを取得 public function getMyEmail() { return($_SESSION['email']); } // この関数が呼び出されたら自動的に自分の権限にしたがったインデックスページへ>と移動する public function jumpToMyIndex() { header('Location: '.$this->getMyIndex()); } // ログアウト済かどうかチェック public function isSessionOpen() { if(strlen($_SESSION['email']) == 0) return(FALSE); return(TRUE); } // 店舗承認者のパスコードをチェックする public function verifyUserPasscodeByName($name, $passcode) { $my_usr = new Users(NULL,NULL,NULL,NULL,NULL,$this); return($my_usr->verifyPasscodeByUid($my_usr->getObjectByName($name)->id, $passcode)); } // 削除権限等のあるパスコードを調べる public function verifyPasscode($passcode) { $my_usr = new Users(NULL,NULL,NULL,NULL,NULL,$this); // このシステムではadminユーザのパスコードを知っているものが削除権限があると定義 return($my_usr->verifyPasscodeByUid($my_usr->getObjectByName('admin')->id, $passcode)); } } ?>