www.gusucode.com > baigo CMS PHP开源网站管理系统 v1.2.2源码程序 > baigocms_v1.2.2/bg_sso/core/model/log.class.php

    <?php
/*-----------------------------------------------------------------
!!!!警告!!!!
以下为系统文件,请勿修改
-----------------------------------------------------------------*/

//不能非法包含或直接执行
if(!defined("IN_BAIGO")) {
    exit("Access Denied");
}

/*-------------日志模型-------------*/
class MODEL_LOG {
    private $obj_db;
    public $logStatus   = array(); //状态
    public $logTypes    = array(); //类型
    public $logTargets  = array(); //目标

    function __construct() { //构造函数
        $this->obj_db = $GLOBALS["obj_db"]; //设置数据库对象
    }


    /** 创建表
     * mdl_create function.
     *
     * @access public
     * @return void
     */
    function mdl_create_table() {
        foreach ($this->logStatus as $_key=>$_value) {
            $_arr_status[] = $_key;
        }
        $_str_status = implode("','", $_arr_status);

        foreach ($this->logTypes as $_key=>$_value) {
            $_arr_types[] = $_key;
        }
        $_str_types = implode("','", $_arr_types);

        foreach ($this->logTargets as $_key=>$_value) {
            $_arr_targets[] = $_key;
        }
        $_str_targets = implode("','", $_arr_targets);

        $_arr_logCreate = array(
            "log_id"             => "int NOT NULL AUTO_INCREMENT COMMENT 'ID'",
            "log_time"           => "int NOT NULL COMMENT '时间'",
            "log_operator_id"    => "smallint NOT NULL COMMENT '操作者 ID'",
            "log_targets"        => "text NOT NULL COMMENT '目标 JSON'",
            "log_target_type"    => "enum('" . $_str_targets . "') NOT NULL COMMENT '目标类型'",
            "log_title"          => "varchar(1000) NOT NULL COMMENT '操作标题'",
            "log_result"         => "varchar(1000) NOT NULL COMMENT '操作结果'",
            "log_type"           => "enum('" . $_str_types . "') NOT NULL COMMENT '日志类型'",
            "log_status"         => "enum('" . $_str_status . "') NOT NULL COMMENT '状态'",
            "log_level"          => "varchar(30) NOT NULL COMMENT '日志级别'",
        );

        $_num_mysql = $this->obj_db->create_table(BG_DB_TABLE . "log", $_arr_logCreate, "log_id", "应用");

        if ($_num_mysql > 0) {
            $_str_alert = "y060105"; //更新成功
        } else {
            $_str_alert = "x060105"; //更新成功
        }

        return array(
            "alert" => $_str_alert, //更新成功
        );
    }


    /** 列出字段
     * mdl_column function.
     *
     * @access public
     * @return void
     */
    function mdl_column() {
        $_arr_colRows = $this->obj_db->show_columns(BG_DB_TABLE . "log");

        foreach ($_arr_colRows as $_key=>$_value) {
            $_arr_col[] = $_value["Field"];
        }

        return $_arr_col;
    }


    /** 修改表
     * mdl_alert_table function.
     *
     * @access public
     * @return void
     */
    function mdl_alert_table() {
        foreach ($this->logStatus as $_key=>$_value) {
            $_arr_status[] = $_key;
        }
        $_str_status = implode("','", $_arr_status);

        foreach ($this->logTypes as $_key=>$_value) {
            $_arr_types[] = $_key;
        }
        $_str_types = implode("','", $_arr_types);

        foreach ($this->logTargets as $_key=>$_value) {
            $_arr_targets[] = $_key;
        }
        $_str_targets = implode("','", $_arr_targets);

        $_arr_col     = $this->mdl_column();
        $_arr_alert   = array();

        if (in_array("log_operator_id", $_arr_col)) {
            $_arr_alert["log_operator_id"] = array("CHANGE", "smallint NOT NULL COMMENT '操作者 ID'", "log_operator_id");
        }

        if (in_array("log_target_type", $_arr_col)) {
            $_arr_alert["log_target_type"] = array("CHANGE", "enum('" . $_str_targets . "') NOT NULL COMMENT '目标类型'", "log_target_type");
        }

        $_arr_logData = array(
            "log_target_type" => $_arr_targets[0],
        );
        $this->obj_db->update(BG_DB_TABLE . "log", $_arr_logData, "LENGTH(log_target_type) < 1"); //更新数据

        if (in_array("log_type", $_arr_col)) {
            $_arr_alert["log_type"] = array("CHANGE", "enum('" . $_str_types . "') NOT NULL COMMENT '目标类型'", "log_type");
        }

        $_arr_logData = array(
            "log_type" => $_arr_types[0],
        );
        $this->obj_db->update(BG_DB_TABLE . "log", $_arr_logData, "LENGTH(log_type) < 1"); //更新数据

        if (in_array("log_status", $_arr_col)) {
            $_arr_alert["log_status"] = array("CHANGE", "enum('" . $_str_status . "')", "log_status");
        }

        $_arr_logData = array(
            "log_status" => $_arr_status[0],
        );
        $this->obj_db->update(BG_DB_TABLE . "log", $_arr_logData, "LENGTH(log_status) < 1"); //更新数据

        $_str_alert = "y060111";

        if ($_arr_alert) {
            $_reselt = $this->obj_db->alert_table(BG_DB_TABLE . "log", $_arr_alert);

            if ($_reselt) {
                $_str_alert = "y060106";
            }
        }

        return array(
            "alert" => $_str_alert,
        );
    }


    /** 提交
     * mdl_submit function.
     *
     * @access public
     * @param mixed $str_targets
     * @param mixed $str_targetType
     * @param mixed $str_logTitle
     * @param mixed $str_logResult
     * @param mixed $str_logType
     * @param int $num_operatorId (default: 0)
     * @param string $str_logStatus (default: "wait")
     * @param string $str_logLevel (default: "normal")
     * @return void
     */
    function mdl_submit($str_targets, $str_targetType, $str_logTitle, $str_logResult, $str_logType, $num_operatorId = 0, $str_logStatus = "wait", $str_logLevel = "normal") {
        $_arr_logData = array(
            "log_operator_id"    => $num_operatorId,
            "log_targets"        => $str_targets,
            "log_target_type"    => $str_targetType,
            "log_title"          => $str_logTitle,
            "log_result"         => $str_logResult,
            "log_type"           => $str_logType,
            "log_status"         => $str_logStatus,
            "log_level"          => $str_logLevel,
            "log_time"           => time(),
        );

        $_num_logId = $this->obj_db->insert(BG_DB_TABLE . "log", $_arr_logData); //更新数据
        if ($_num_logId > 0) {
            $_str_alert = "y060101"; //更新成功
        } else {
            return array(
                "alert" => "x060101", //更新失败
            );
        }

        return array(
            "log_id"    => $_num_logId,
            "alert"     => $_str_alert, //成功
        );
    }


    /** 更新状态
     * mdl_status function.
     *
     * @access public
     * @param mixed $str_status
     * @return void
     */
    function mdl_status($str_status) {
        $_str_logId = implode(",", $this->logIds["log_ids"]);

        $_arr_logUpdate = array(
            "log_status" => $str_status,
        );

        $_num_mysql = $this->obj_db->update(BG_DB_TABLE . "log", $_arr_logUpdate, "log_id IN (" . $_str_logId . ")"); //删除数据

        //如影响行数大于0则返回成功
        if ($_num_mysql > 0) {
            $_str_alert = "y060103"; //成功
        } else {
            $_str_alert = "x060103"; //失败
        }

        return array(
            "alert" => $_str_alert,
        );
    }


    /** 读取
     * mdl_read function.
     *
     * @access public
     * @param mixed $num_logId
     * @return void
     */
    function mdl_read($num_logId) {
        $_arr_logSelect = array(
            "log_id",
            "log_time",
            "log_operator_id",
            "log_targets",
            "log_target_type",
            "log_title",
            "log_result",
            "log_type",
            "log_status",
            "log_level",
        );

        $_str_sqlWhere = "log_id=" . $num_logId;

        $_arr_logRows = $this->obj_db->select(BG_DB_TABLE . "log", $_arr_logSelect, $_str_sqlWhere, "", "", 1, 0); //检查本地表是否存在记录

        if (isset($_arr_logRows[0])) { //用户名不存在则返回错误
            $_arr_logRow = $_arr_logRows[0];
        } else {
            return array(
                "alert" => "x060102", //不存在记录
            );
        }

        /*if (isset($_arr_logRow["log_result"])) {
            $_arr_logRow["log_result"]    = json_decode($_arr_logRow["log_result"], true);
        }*/

        if (isset($_arr_logRow["log_targets"])) {
            $_arr_logRow["log_targets"]   = fn_jsonDecode($_arr_logRow["log_targets"], "no");
        } else {
            $_arr_logRow["log_targets"]   = array();
        }

        $_arr_logRow["alert"]     = "y060102";

        return $_arr_logRow;
    }


    /** 列出
     * mdl_list function.
     *
     * @access public
     * @param mixed $num_no
     * @param int $num_except (default: 0)
     * @param array $arr_search (default: array())
     * @return void
     */
    function mdl_list($num_no, $num_except = 0, $arr_search = array()) {
        $_arr_logSelect = array(
            "log_id",
            "log_time",
            "log_target_type",
            "log_title",
            "log_type",
            "log_status",
            "log_result",
            "log_operator_id",
        );

        $_str_sqlWhere = $this->sql_process($arr_search);

        $_arr_logRows = $this->obj_db->select(BG_DB_TABLE . "log", $_arr_logSelect, $_str_sqlWhere, "", "log_id DESC", $num_no, $num_except); //查询数据

        return $_arr_logRows;
    }


    /** 计数
     * mdl_count function.
     *
     * @access public
     * @param array $arr_search (default: array())
     * @return void
     */
    function mdl_count($arr_search = array()) {
        $_str_sqlWhere = $this->sql_process($arr_search);

        $_num_logCount = $this->obj_db->count(BG_DB_TABLE . "log", $_str_sqlWhere); //查询数据

        return $_num_logCount;
    }


    /** 删除
     * mdl_del function.
     *
     * @access public
     * @return void
     */
    function mdl_del() {
        $_str_logId = implode(",", $this->logIds["log_ids"]);

        $_num_mysql = $this->obj_db->delete(BG_DB_TABLE . "log", "log_id IN (" . $_str_logId . ")"); //删除数据

        //如车影响行数小于0则返回错误
        if ($_num_mysql > 0) {
            $_str_alert = "y060104"; //成功
        } else {
            $_str_alert = "x060104"; //失败
        }

        return array(
            "alert" => $_str_alert,
        );
    }


    /** 选择
     * input_ids function.
     *
     * @access public
     * @return void
     */
    function input_ids() {
        if (!fn_token("chk")) { //令牌
            return array(
                "alert" => "x030206",
            );
        }

        $_arr_logIds = fn_post("log_ids");

        if ($_arr_logIds) {
            foreach ($_arr_logIds as $_key=>$_value) {
                $_arr_logIds[$_key] = fn_getSafe($_value, "int", 0);
            }
            $_str_alert = "ok";
        } else {
            $_str_alert = "x030202";
        }

        $this->logIds = array(
            "alert"     => $_str_alert,
            "log_ids"   => $_arr_logIds
        );

        return $this->logIds;
    }


    /** 列出及统计 SQL 处理
     * sql_process function.
     *
     * @access private
     * @param array $arr_search (default: array())
     * @return void
     */
    private function sql_process($arr_search = array()) {
        $_str_sqlWhere = "1=1";

        if (isset($arr_search["key"]) && $arr_search["key"]) {
            $_str_sqlWhere .= " AND (log_target_type LIKE '%" . $arr_search["key"] . "%' OR log_result LIKE '%" . $arr_search["key"] . "%')";
        }

        if (isset($arr_search["type"]) && $arr_search["type"]) {
            $_str_sqlWhere .= " AND log_type='" . $arr_search["type"] . "'";
        }

        if (isset($arr_search["status"]) && $arr_search["status"]) {
            $_str_sqlWhere .= " AND log_status='" . $arr_search["status"] . "'";
        }

        if (isset($arr_search["level"]) && $arr_search["level"]) {
            $_str_sqlWhere .= " AND log_level='" . $arr_search["level"] . "'";
        }

        if (isset($arr_search["operator_id"]) && $arr_search["operator_id"] > 0) {
            $_str_sqlWhere .= " AND log_operator_id=" . $arr_search["operator_id"];
        }

        return $_str_sqlWhere;
    }
}