ほとんどの場合、おそらく CI にあまり慣れていないため、私のコードはごちゃごちゃしていると思います。現在、「ユーザー」と呼ばれるコントローラーが 1 つあります。これを以下に示します。このコントローラーには、ログイン、ログアウトなどのメソッドがあります。ユーザーがログインしたときにセッションを作成し、ユーザーがログアウトしたときにセッションを破棄するなど、ここでは十分な標準的なものがあります。システムが「チェックイン」システムを模倣してユーザーの作業時間を取得するため、時間を追跡することもできます。プロジェクトの次の部分では、ユーザーが操作するデータベースの「クライアント」テーブルにアクセスする必要があり、ボタンが押されたときにこのクライアントに関する情報を表示します。クライアント自体はこのシステムを使用しませんが、クライアントに関する情報を使用します見る必要があります。現在のコントローラーとモデルに引き続き追加するか、次に別のクラスをセットアップするかを考えています。コントローラーはすでに比較的大きいようですか?これが私のコントローラーコードです。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class User extends CI_Controller {
var $loggedin = FALSE;
var $cdata;
function __construct()
{
parent::__construct();
$this->load->model("dbaccess");
$this->cdata =array( "warning" => "","email"=> "","password"=> "","logintime"=>"","start"=>"","end"=>""
,"diff"=>"","totalhours"=>"","dis"=>$this);
}
public function index()
{
if($this->session->userdata('email'))
{
$this->load->view('carerview',$this->cdata);
}
else
{
$this->load->view('mainview',$this->cdata);
}
}
public function login()
{
//get posted data. check if what is posted is in db.
// if it is set loggedin=true + redirect to carer page + save data in session. //get posted data. check if what is posted is in db.
if(isset($_POST['email']) )
{$this->cdata['email'] = $_POST['email'] ;}
else
{$this->cdata['email'] ="";}
if(isset($_POST['password']))
{$this->cdata['password'] = $_POST['password'];}
else
{$this->cdata['password'] ="";}
if($this->session->userdata('email'))
{
$this->loggedin = true;
}
else
{
$this->loggedin = $this->dbaccess->check_input($this->cdata['email'],$this->cdata['password']);
}
if($this->loggedin === TRUE && !$this->session->userdata('email'))
{
$this->start_session();
if(!$this->dbaccess->get_date_entry($this->session->userdata('email'),date("Y-m-d")))
{
$data = array("email"=>$this->session->userdata('email'),"date"=>date("Y-m-d"),
"hours"=>"0","starttime"=>date("Y-m-d H:i:s",$this->session->userdata('last_activity')));
$this->dbaccess->insert_daily_row($data);
}
$this->load->view('carerview',$this->cdata);
}
else if ($this->loggedin === TRUE && $this->session->userdata('email'))
{
$this->cdata['totalhours']= $this->session->userdata('totalhours');
$this->cdata['logintime']= $this->session->userdata('last_activity');
$this->load->view('carerview',$this->cdata);
}
else
{
$this->session->unset_userdata('last_activity');
$this->cdata['warning']="Check failed ! Please try again";
$this->load->view('mainview',$this->cdata);
}
}
private function start_session()
{
$this->load->library('session');
$this->session->set_userdata('email',$this->cdata['email']);
$this->cdata['totalhours']= $this->dbaccess->get_hours_by_date
($this->session->userdata('email'),date("Y-m-d",$this->session->userdata('last_activity')));
$this->session->set_userdata('totalhours',$this->cdata['totalhours']);
}
private function calculatedifference($starttime,$endtime) // delete checkin time from checkouttime
{
$diff= abs(strtotime($starttime) - strtotime($endtime));
$this->cdata['diff'] = date("H:i:s",$diff);
$this->cdata['start'] = date("Y-m-d H:i:s", strtotime( $starttime)+(1 * 3600));
$this->cdata['end']= date("Y-m-d H:i:s", strtotime($endtime) +(1 * 3600));
return date("H:i:s",$diff);
}
public function isLoggedIn()
{
return $this->loggedin;
}
public function logOut()
{
// update total hours and update checkout time.
if($this->session->userdata('email')){
$hours=$this->calculatedifference(date("Y-m-d H:i:s",$this->session->userdata('last_activity')),date("Y-m-d H:i:s"));
$data =array("endtime"=>date("Y-m-d H:i:s"),"hours"=>$hours,"email"=>$this->session->userdata('email'),"date"=>date("Y-m-d"));
$this->dbaccess->update_daily_row($data);}
$this->load->view('mainview',$this->cdata);
$this->session->sess_destroy();
}
public function admin()
{
$this->load->view('adminpage',$this->cdata);
}
}