Codeigniter 注册用户CRUD操作和其他

Codeigniter 注册用户CRUD操作和其他,codeigniter,events,web,model-view-controller,Codeigniter,Events,Web,Model View Controller,我需要将所有活动注册到我的webapp中,例如,当用户删除、添加或编辑某些记录和特定事件时。有什么想法吗?我正在使用codeigniter进行编程 例如,像GLPI: 这很简单。创建名为“活动”的模型并创建日志方法: $this->activity->log(“{$this->curr\u user->name}登录”) 我个人使用短代码和switch语句(如果您有很多活动,这可能会变得非常笨拙-不确定是否推荐): $this->activity->log('page_access',array

我需要将所有活动注册到我的webapp中,例如,当用户删除、添加或编辑某些记录和特定事件时。有什么想法吗?我正在使用codeigniter进行编程

例如,像GLPI:


这很简单。创建名为“活动”的模型并创建日志方法:

$this->activity->log(“{$this->curr\u user->name}登录”)

我个人使用短代码和switch语句(如果您有很多活动,这可能会变得非常笨拙-不确定是否推荐):

$this->activity->log('page_access',array('uri'=>uri_string())

$this->activity->log('modified',array('table'=>$table,'id'=>$id))

以下是我的活动模型:

class User_activity_model extends CI_Model {

    /**
     * Admin-only log types
     * 
     * @var array
     */
    private $admin_types = array('page_access', 'user_registered', 'logged_in', 'login_failed', 'login_failed_sa');

    /**
     * Main user activity logging function
     * 
     * @param string $action
     * @param array $arr Additional attributes per case
     * @return void
     */
    public function log($action, $arr = array()) {
        switch ($action) {
            default:
                return;
            case 'backup_created':
                $username = $this->curr_user->details()->username;
                $msg = "{$username} created a backup {$arr['filename']} at {time}.";
                break;
            case 'backup_restored':
                $username = $this->curr_user->details()->username;
                $msg = "{$username} restored backup {$arr['filename']} at {time}.";
                break;
            case 'user_registered':
                $msg = "{$arr['first_name']} {$arr['last_name']} registered with username: {$arr['username']}.";
                break;
            case 'added':
                $username = $this->curr_user->details()->username;
                $msg = "{$username} added item {$arr['id']} to the {$arr['table']} table.";
                break;
            case 'modified':
                $username = $this->curr_user->details()->username;
                $msg = "{$username} modified item {$arr['id']} in the {$arr['table']} table.";
                break;
            case 'deleted':
                $username = $this->curr_user->details()->username;
                $msg = "{$username} deleted item {$arr['id']} from the {$arr['table']} table.";
                break;
            case 'published':
                $username = $this->curr_user->details()->username;
                $msg = "{$username} published item {$arr['id']} from the {$arr['table']} table.";
                break;
            case 'unpublished':
                $username = $this->curr_user->details()->username;
                $msg = "{$username} unpublished item {$arr['id']} from the {$arr['table']} table.";
                break;
            case 'logged_in':
                $username = $this->curr_user->details()->username;
                $ip = $this->input->ip_address();
                $msg = "{$username} logged in at {time} from IP {$ip}.";
                break;
            case 'login_failed':
                $ip = $this->input->ip_address();
                $msg = "Someone tried to login with username {$arr['username']} at {time} from IP {$ip}.";
                break;
            case 'login_failed_sa':
                $ip = $this->input->ip_address();
                $msg = "Someone tried to login with social auth provider {$arr['provider']} at {time} from IP {$ip}.";
                break;
            case 'page_access':
                if ($this->ion_auth->logged_in()) {
                    $identity = $this->curr_user->details()->username;
                } else {
                    $identity = "Someone (IP: {$this->input->ip_address()})";
                }
                $msg = "{$identity} tried to access a page they didn't have permission for: {$arr['uri']}.";
                break;
            case 'logout':
                $username = $this->curr_user->details()->username;
                $msg = "{$username} logged out at {time}.";
                break;
        }
        $data = array(
            'action' => $action,
            'type' => in_array($action, $this->admin_types) ? 'admin' : 'all',
            'message' => $msg
        );
        $this->add_info();
        $this->db->insert('user_activity', $data);
    }

    /**
     * Adds identifier information to the insert query
     * 
     * @return void
     */
    public function add_info() {
        $this->db->set('time', 'NOW()', false);
        $this->db->set('ip', $this->input->ip_address());
        if (!empty($this->curr_user->id())) {
            $this->db->set('user_id', $this->curr_user->id());
        }
    }

    /**
     * Generates log array
     * 
     * Format:
     * 
     * array(
     *       [date]
     *             array(
     *                   [0] = message1
     *                   [1] = message2
     * 
     * @param boolean $admin_only Show all logs?
     * @return boolean|object Logs object, FALSE otherwise
     */
    public function get_logs($admin_only = true) {
        if (!$admin_only) {
            $this->db->where('type !=', 'admin');
        }
        $this->db->order_by('time', 'DESC');
        $query = $this->db->get('user_activity');
        if ($query->num_rows() < 1) {
            return false;
        }
        $rows = $query->result();
        $data = new \stdClass();
        foreach ($rows as $row) {
            // replace {time} with timezone converted time
            $time = $this->timezone->convert($row->time);
            $row->message = str_replace('{time}', $time, $row->message);
            // date Y-m-d acts as key for messages on that day
            $key = date('Y-m-d', strtotime($time));
            $data->{$key}[] = $row;
        }
        return $data;
    }

    /**
     * Truncates user_activity table
     * 
     * @return boolean
     */
    public function delete_logs() {
        return $this->db->truncate('user_activity');
    }

    /**
     * Stub for automate hook to add 'added' activity
     * 
     * @param array $data
     */
    public function automate_activity_add($data) {
        $this->activity->log('added', array('table' => $data['table'], 'id' => $data['id']));
    }

    /**
     * Stub for automate hook to add 'modified' activity
     * 
     * @param array $data
     */
    public function automate_activity_modify($data) {
        $this->activity->log('modified', array('table' => $data['table'], 'id' => $data['id']));
    }

}
类用户活动模型扩展了CI模型{ /** *仅管理员日志类型 * *@var数组 */ private$admin_types=array('page_access'、'user_registed'、'logged_in'、'login_failed'、'login_failed_sa'); /** *主用户活动记录功能 * *@param string$action *@param array$arr每个案例的附加属性 *@返回无效 */ 公共函数日志($action,$arr=array()){ 开关($动作){ 违约: 返回; 案例“备份已创建”: $username=$this->curr\u user->details()->username; $msg=“{$username}在{time}创建了一个备份{$arr['filename']}。”; 打破 案例“备份已恢复”: $username=$this->curr\u user->details()->username; $msg=“{$username}在{time}还原了备份{$arr['filename']}。”; 打破 案例“用户注册”: $msg=“{$arr['first_name']}{$arr['last_name']}使用用户名注册:{$arr['username']}。”; 打破 “添加”案例: $username=$this->curr\u user->details()->username; $msg=“{$username}已将项{$arr['id']}添加到{$arr['table']}表中。”; 打破 案例“修改”: $username=$this->curr\u user->details()->username; $msg=“{$username}在{$arr['table']}表中修改了项{$arr['id']}。”; 打破 “已删除”案例: $username=$this->curr\u user->details()->username; $msg=“{$username}从{$arr['table']}表中删除了项目{$arr['id']}。”; 打破 “已发布”案例: $username=$this->curr\u user->details()->username; $msg=“{$username}从{$arr['table']}表中发布的项目{$arr['id']}。”; 打破 案例“未发布”: $username=$this->curr\u user->details()->username; $msg=“{$username}未发布的项{$arr['id']}来自{$arr['table']}表。”; 打破 案例“已登录”: $username=$this->curr\u user->details()->username; $ip=$this->input->ip_address(); $msg=“{$username}在{time}从IP{$IP}登录。”; 打破 案例“登录失败”: $ip=$this->input->ip_address(); $msg=“有人试图在{time}用用户名{$arr['username']}从IP{$IP}登录。”; 打破 案例“登录失败”: $ip=$this->input->ip_address(); $msg=“有人试图在{time}从IP{$IP}使用社交身份验证提供程序{$arr['provider']}登录。”; 打破 “页面访问”案例: 如果($this->ion\u auth->logged\u in()){ $identity=$this->curr\u user->details()->用户名; }否则{ $identity=“某人(IP:{$this->input->IP_address()})”; } $msg=“{$identity}试图访问他们没有权限访问的页面:{$arr['uri']}。”; 打破 “注销”案例: $username=$this->curr\u user->details()->username; $msg=“{$username}在{time}注销。”; 打破 } $data=数组( “action”=>$action, 'type'=>在数组中($action,$this->admin\u-types)?'admin':'all', 'message'=>$msg ); $this->add_info(); $this->db->insert('user\u activity',$data); } /** *将标识符信息添加到插入查询 * *@返回无效 */ 公共函数add_info(){ $this->db->set('time','NOW()',false); $this->db->set('ip',$this->input->ip_address()); 如果(!empty($this->curr\u user->id()){ $this->db->set('user\u id',$this->curr\u user->id()); } } /** *生成日志数组 * *格式: * *排列( *[日期] *排列( *[0]=消息1 *[1]=消息2 * *@param boolean$admin_是否仅显示所有日志? *@return boolean |对象记录对象,否则为FALSE */ 公共函数获取日志($admin\u only=true){ 如果(!$admin_仅限){ $this->db->where('type!=','admin'); } $this->db->order_by('time','DESC'); $query=$this->db->get('user_activity'); 如果($query->num\u rows()<1){ 返回false; } $rows=$query->result(); $data=new\stdClass(); foreach($行作为$行){ //用时区转换时间替换{time} $time=$this->timezone->convert($row->time); $row->message=str_replace(“{time},$time,$row->message); //日期Y-m-d作为当天消息的键 $key=date('Y-m-d',strottime($time)); $data->{$key}[]=$row; } 返回$