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

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

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

/*-------------文章类-------------*/
class MODEL_ARTICLE_PUB {

    private $obj_db;
    private $is_magic;
    public $custom_columns = array();

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


    function mdl_create_cate_view() {
        $_arr_articleCreat = array(
            array("article_id",         BG_DB_TABLE . "article"),
            array("article_title",      BG_DB_TABLE . "article"),
            array("article_excerpt",    BG_DB_TABLE . "article"),
            array("article_link",       BG_DB_TABLE . "article"),
            array("article_time",       BG_DB_TABLE . "article"),
            array("article_time_pub",   BG_DB_TABLE . "article"),
            array("article_attach_id",  BG_DB_TABLE . "article"),
            array("article_spec_id",    BG_DB_TABLE . "article"),
            array("article_status",     BG_DB_TABLE . "article"),
            array("article_box",        BG_DB_TABLE . "article"),
            array("article_top",        BG_DB_TABLE . "article"),
            array("article_cate_id",    BG_DB_TABLE . "article"),
            array("article_hits_day",   BG_DB_TABLE . "article"),
            array("article_time_day",   BG_DB_TABLE . "article"),
            array("article_hits_week",  BG_DB_TABLE . "article"),
            array("article_time_week",  BG_DB_TABLE . "article"),
            array("article_hits_month", BG_DB_TABLE . "article"),
            array("article_time_month", BG_DB_TABLE . "article"),
            array("article_hits_year",  BG_DB_TABLE . "article"),
            array("article_time_year",  BG_DB_TABLE . "article"),
            array("article_hits_all",   BG_DB_TABLE . "article"),
            array("belong_cate_id",     BG_DB_TABLE . "cate_belong"),
        );

        $_str_sqlJoin = "LEFT JOIN `" . BG_DB_TABLE . "cate_belong` ON (`" . BG_DB_TABLE . "article`.`article_id`=`" . BG_DB_TABLE . "cate_belong`.`belong_article_id`)";

        $_num_mysql = $this->obj_db->create_view(BG_DB_TABLE . "article_cate_view", $_arr_articleCreat, BG_DB_TABLE . "article", $_str_sqlJoin);

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

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


    function mdl_create_tag_view() {
        $_arr_articleCreat = array(
            array("article_id",         BG_DB_TABLE . "article"),
            array("article_title",      BG_DB_TABLE . "article"),
            array("article_excerpt",    BG_DB_TABLE . "article"),
            array("article_link",       BG_DB_TABLE . "article"),
            array("article_time",       BG_DB_TABLE . "article"),
            array("article_time_pub",   BG_DB_TABLE . "article"),
            array("article_attach_id",  BG_DB_TABLE . "article"),
            array("article_spec_id",    BG_DB_TABLE . "article"),
            array("article_status",     BG_DB_TABLE . "article"),
            array("article_box",        BG_DB_TABLE . "article"),
            array("article_top",        BG_DB_TABLE . "article"),
            array("article_cate_id",    BG_DB_TABLE . "article"),
            array("article_hits_day",   BG_DB_TABLE . "article"),
            array("article_time_day",   BG_DB_TABLE . "article"),
            array("article_hits_week",  BG_DB_TABLE . "article"),
            array("article_time_week",  BG_DB_TABLE . "article"),
            array("article_hits_month", BG_DB_TABLE . "article"),
            array("article_time_month", BG_DB_TABLE . "article"),
            array("article_hits_year",  BG_DB_TABLE . "article"),
            array("article_time_year",  BG_DB_TABLE . "article"),
            array("article_hits_all",   BG_DB_TABLE . "article"),
            array("belong_tag_id",      BG_DB_TABLE . "tag_belong"),
            array("belong_cate_id",     BG_DB_TABLE . "cate_belong"),
        );

        $_str_sqlJoin = "LEFT JOIN `" . BG_DB_TABLE . "tag_belong` ON (`" . BG_DB_TABLE . "article`.`article_id`=`" . BG_DB_TABLE . "tag_belong`.`belong_article_id`) LEFT JOIN `" . BG_DB_TABLE . "cate_belong` ON (`" . BG_DB_TABLE . "article`.`article_id`=`" . BG_DB_TABLE . "cate_belong`.`belong_article_id`)";

        $_num_mysql = $this->obj_db->create_view(BG_DB_TABLE . "article_tag_view", $_arr_articleCreat, BG_DB_TABLE . "article", $_str_sqlJoin);

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

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


    function mdl_create_custom_view($arr_customRows) {
        $_arr_articleCreat = array(
            array("article_id",          BG_DB_TABLE . "article"),
            array("article_title",       BG_DB_TABLE . "article"),
            array("article_excerpt",     BG_DB_TABLE . "article"),
            array("article_link",        BG_DB_TABLE . "article"),
            array("article_time",        BG_DB_TABLE . "article"),
            array("article_time_pub",    BG_DB_TABLE . "article"),
            array("article_attach_id",   BG_DB_TABLE . "article"),
            array("article_spec_id",     BG_DB_TABLE . "article"),
            array("article_status",      BG_DB_TABLE . "article"),
            array("article_box",         BG_DB_TABLE . "article"),
            array("article_top",         BG_DB_TABLE . "article"),
            array("article_cate_id",     BG_DB_TABLE . "article"),
            array("article_hits_day",    BG_DB_TABLE . "article"),
            array("article_time_day",    BG_DB_TABLE . "article"),
            array("article_hits_week",   BG_DB_TABLE . "article"),
            array("article_time_week",   BG_DB_TABLE . "article"),
            array("article_hits_month",  BG_DB_TABLE . "article"),
            array("article_time_month",  BG_DB_TABLE . "article"),
            array("article_hits_year",   BG_DB_TABLE . "article"),
            array("article_time_year",   BG_DB_TABLE . "article"),
            array("article_hits_all",    BG_DB_TABLE . "article"),
            array("belong_cate_id",      BG_DB_TABLE . "cate_belong"),
        );

        foreach ($arr_customRows as $_key=>$_value) {
            $_arr_articleCreat[] = array("custom_" . $_value["custom_id"], BG_DB_TABLE . "article_custom");
        }

        $_str_sqlJoin = "LEFT JOIN `" . BG_DB_TABLE . "article_custom` ON (`" . BG_DB_TABLE . "article`.`article_id`=`" . BG_DB_TABLE . "article_custom`.`article_id`) LEFT JOIN `" . BG_DB_TABLE . "cate_belong` ON (`" . BG_DB_TABLE . "article`.`article_id`=`" . BG_DB_TABLE . "cate_belong`.`belong_article_id`)";

        $_num_mysql = $this->obj_db->create_view(BG_DB_TABLE . "article_custom_view", $_arr_articleCreat, BG_DB_TABLE . "article", $_str_sqlJoin);

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

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


    function mdl_read($num_articleId) {
        $_arr_articleSelect = array(
            "article_id",
            "article_cate_id",
            "article_mark_id",
            "article_title",
            "article_excerpt",
            "article_status",
            "article_box",
            "article_link",
            "article_admin_id",
            "article_hits_day",
            "article_time_day",
            "article_hits_week",
            "article_time_week",
            "article_hits_month",
            "article_time_month",
            "article_hits_year",
            "article_time_year",
            "article_hits_all",
            "article_time",
            "article_time_pub",
            "article_top",
            "article_spec_id",
            "article_attach_id",
        );

        $_arr_articleRows = $this->obj_db->select(BG_DB_TABLE . "article", $_arr_articleSelect, "article_id=" . $num_articleId, "", "", 1, 0); //读取数据

        if (isset($_arr_articleRows[0])) {
            $_arr_articleRow = $_arr_articleRows[0];
        } else {
            return array(
                "alert" => "x120102",
            );
        }

        $_arr_articleSelect = array(
            "article_content",
        );

        $_arr_contentRows = $this->obj_db->select(BG_DB_TABLE . "article_content", $_arr_articleSelect, "article_id=" . $num_articleId, "", "", 1, 0); //读取数据

        if (isset($_arr_contentRows[0])) {
            $_arr_contentRow = $_arr_contentRows[0];
        } else {
            return array(
                "alert" => "x120102",
            );
        }

        $_arr_articleRow["article_content"]   = stripslashes($_arr_contentRow["article_content"]);

        $_arr_customRow = $this->mdl_read_custom($num_articleId);
        if ($_arr_customRow["alert"] == "y120102") {
            $_arr_articleRow["article_customs"]   = $_arr_customRow["article_customs"];
        }

        $_arr_articleRow["article_url"]       = $this->url_process($_arr_articleRow);
        $_arr_articleRow["article_excerpt"]   = html_entity_decode($_arr_articleRow["article_excerpt"]);
        $_arr_articleRow["alert"]             = "y120102";

        return $_arr_articleRow;
    }


    function mdl_read_custom($num_articleId) {

        $_arr_articleSelect = $this->custom_columns;

        $_arr_customRows = $this->obj_db->select(BG_DB_TABLE . "article_custom", $_arr_articleSelect, "article_id=" . $num_articleId, "", "", 1, 0); //读取数据

        if (isset($_arr_customRows[0])) {
            $_arr_customRow = $_arr_customRows[0];
        } else {
            return array(
                "alert" => "x120102",
            );
        }

        $_arr_articleRow["article_customs"]   = $_arr_customRow;

        $_arr_articleRow["alert"]             = "y120102";

        return $_arr_articleRow;
    }


    /**
     * mdl_list function.
     *
     * @access public
     * @param mixed $num_no
     * @param int $num_except (default: 0)
     * @param string $str_key (default: "")
     * @param string $str_year (default: "")
     * @param string $str_month (default: "")
     * @param bool $arr_cateIds (default: false)
     * @param bool $arr_markIds (default: false)
     * @param string $str_attachType (default: "")
     * @param string $str_orderType (default: "")
     * @return void
     */
    function mdl_list($num_no, $num_except = 0, $arr_search = array(), $str_orderType = "") {
        $_arr_articleSelect = array(
            "article_id",
            "article_title",
            "article_excerpt",
            "article_link",
            "article_time_pub",
            "article_attach_id",
            "article_spec_id",
            "article_cate_id",
            "article_hits_day",
            "article_hits_week",
            "article_hits_month",
            "article_hits_year",
            "article_hits_all",
        );

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

        if (isset($arr_search["tag_ids"]) && $arr_search["tag_ids"]) {
            $_view_name = "tag";
        } else if (isset($arr_search["custom_rows"]) && $arr_search["custom_rows"]) {
            $_view_name = "custom";
        } else {
            $_view_name = "cate";
        }


        if (!$str_orderType || $str_orderType == "article") {
            $_str_sqlOrder   = "article_top DESC, article_time_pub DESC, article_id DESC";
        } else {
            $_str_sqlOrder   = "article_" . $str_orderType . " DESC, article_time_pub DESC, article_id DESC";
        }

        //print_r($_str_sqlWhere);

        $_arr_articleRows = $this->obj_db->select(BG_DB_TABLE . "article_" . $_view_name . "_view", $_arr_articleSelect, $_str_sqlWhere, "article_top, article_time_pub, article_id", $_str_sqlOrder, $num_no, $num_except, array("article_id"));

        if ($_arr_articleRows) {
            foreach ($_arr_articleRows as $_key=>$_value) {
                $_arr_articleRows[$_key]["article_url"]     = $this->url_process($_value);
                $_arr_articleRows[$_key]["article_excerpt"] = html_entity_decode($_value["article_excerpt"]);

                $_arr_customRow = $this->mdl_read_custom($_value["article_id"]);
                if ($_arr_customRow["alert"] == "y120102") {
                    $_arr_articleRows[$_key]["article_customs"]   = $_arr_customRow["article_customs"];
                }
            }
        }

        return $_arr_articleRows;
    }


    /**
     * mdl_count function.
     *
     * @access public
     * @param string $str_key (default: "")
     * @param string $str_year (default: "")
     * @param string $str_month (default: "")
     * @param bool $arr_cateIds (default: false)
     * @param bool $arr_markIds (default: false)
     * @param string $str_attachType (default: "")
     * @param string $str_orderType (default: "")
     * @return void
     */
    function mdl_count($arr_search = array()) {

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

        if (isset($arr_search["tag_ids"]) && $arr_search["tag_ids"]) {
            $_view_name = "tag";
        } else if (isset($arr_search["custom_rows"]) && $arr_search["custom_rows"]) {
            $_view_name = "custom";
        } else {
            $_view_name = "cate";
        }

        //print_r($_str_sqlWhere);

        $_num_articleCount    = $this->obj_db->count(BG_DB_TABLE . "article_" . $_view_name . "_view", $_str_sqlWhere, array("article_id")); //查询数据

        return $_num_articleCount;
    }


    function mdl_hits($num_articleId) {
        $_arr_articleRow = $this->mdl_read($num_articleId);

        $_arr_update = array(
            "article_hits_all" => $_arr_articleRow["article_hits_all"] + 1,
        );

        if (!isset($_arr_articleRow["article_time_day"]) || date("Y-m-d", $_arr_articleRow["article_time_day"]) != date("Y-m-d")) {
            $_arr_update["article_hits_day"] = 0;
            $_arr_update["article_time_day"] = time();
        } else {
            $_arr_update["article_hits_day"] = $_arr_articleRow["article_hits_day"] + 1;
        }

        if (!isset($_arr_articleRow["article_time_week"]) || date("Y-W", $_arr_articleRow["article_time_week"]) != date("Y-W")) {
            $_arr_update["article_hits_week"] = 0;
            $_arr_update["article_time_week"] = time();
        } else {
            $_arr_update["article_hits_week"] = $_arr_articleRow["article_hits_week"] + 1;
        }

        if (!isset($_arr_articleRow["article_time_month"]) || date("Y-m", $_arr_articleRow["article_time_month"]) != date("Y-m")) {
            $_arr_update["article_hits_month"] = 0;
            $_arr_update["article_time_month"] = time();
        } else {
            $_arr_update["article_hits_month"] = $_arr_articleRow["article_hits_month"] + 1;
        }

        if (!isset($_arr_articleRow["article_time_year"]) || date("Y", $_arr_articleRow["article_time_year"]) != date("Y")) {
            $_arr_update["article_hits_year"] = 0;
            $_arr_update["article_time_year"] = time();
        } else {
            $_arr_update["article_hits_year"] = $_arr_articleRow["article_hits_year"] + 1;
        }

        $_str_sqlWhere    = "article_id=" . $num_articleId;

        //print_r($_arr_update);

        $_arr_articleRows = $this->obj_db->update(BG_DB_TABLE . "article", $_arr_update, $_str_sqlWhere);

        return $_arr_articleRows;
    }


    private function url_process($_arr_articleRow) {

        if ($_arr_articleRow["article_link"]) {
            $_str_articleUrl = $_arr_articleRow["article_link"];
        } else {
            switch (BG_VISIT_TYPE) {
                case "static":
                    $_str_articleUrl = BG_URL_ROOT . "article/" . date("Y", $_arr_articleRow["article_time"]) . "/" . date("m", $_arr_articleRow["article_time"]) . "/" . $_arr_articleRow["article_id"] . "." . BG_VISIT_FILE;
                break;

                case "pstatic":
                    $_str_articleUrl = BG_URL_ROOT . "article/id-" . $_arr_articleRow["article_id"];
                break;

                default:
                    $_str_articleUrl = BG_URL_ROOT . "index.php?mod=article&act_get=show&article_id=" . $_arr_articleRow["article_id"];
                break;
            }
        }

        return $_str_articleUrl;
    }


    private function sql_process($arr_search = array()) {
        $_str_sqlWhere = "article_status='pub' AND article_box='normal' AND article_time_pub<=" . time();

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

        if (isset($arr_search["year"]) && $arr_search["year"]) {
            $_str_sqlWhere .= " AND FROM_UNIXTIME(article_time_pub, '%Y')='" . $arr_search["year"] . "'";
        }

        if (isset($arr_search["month"]) && $arr_search["month"]) {
            $_str_sqlWhere .= " AND FROM_UNIXTIME(article_time_pub, '%m')='" . $arr_search["month"] . "'";
        }

        if (isset($arr_search["cate_ids"]) && $arr_search["cate_ids"]) {
            $_str_cateIds = implode(",", $arr_search["cate_ids"]);
            $_str_sqlWhere .= " AND  article_cate_id IN (" . $_str_cateIds . ")";
        }

        if (isset($arr_search["mark_ids"]) && $arr_search["mark_ids"]) {
            $_str_markIds = implode(",", $arr_search["mark_ids"]);
            $_str_sqlWhere .= " AND  article_mark_id IN (" . $_str_markIds . ")";
        }

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

        if (isset($arr_search["tag_ids"]) && $arr_search["tag_ids"]) {
            $_str_tagIds    = implode(",", $arr_search["tag_ids"]);
            $_str_sqlWhere .= " AND belong_tag_id IN (" . $_str_tagIds . ")";
        } else if (isset($arr_search["custom_rows"]) && $arr_search["custom_rows"]) {
            foreach ($arr_search["custom_rows"] as $_key=>$_value) {
                if ($_value) {
                    $_str_sqlWhere  .= " AND " . $_key . " LIKE '%" . $_value . "%'";
                }
            }
        }

        if (isset($arr_search["attach_type"])) {
            switch ($arr_search["attach_type"]) {
                case "attach":
                    $_str_sqlWhere .= " AND article_attach_id>0";
                break;

                case "none":
                    $_str_sqlWhere .= " AND article_attach_id=0";
                break;
            }
        }

        return $_str_sqlWhere;
    }
}