Example #1
0
function get_confs_cached($db_name = null, $table_name = null, $force_update = false)
{
    FORCE_CONF_UPDATE && ($force_update = true);
    $key = $db_name . '|config|' . $table_name;
    $key_valid = $db_name . '|config.valid|' . $table_name;
    $mem = api_open_mmc();
    if ($force_update === false) {
        //如果还有效,直接获取返回
        if ($is_valid = $mem->get($key_valid)) {
            if ($result = $mem->get($key)) {
                return $result;
            }
            //如果已经失效
        } else {
            //看看旧的在否?有则先设置标记,让其他人先获取
            if ($result = $mem->get($key)) {
                $mem->set($key_valid, 'true', GET_CONF_EXPIRE);
                sync_job('get_confs', [$db_name, $table_name]);
                return $result;
            }
        }
    }
    $result = get_confs($db_name, $table_name, '名称');
    $config = $result['push-settings'];
    $popup_confs = make_popup_list($config);
    $replace_confs = make_replace_list($config);
    $confs = ['popup' => $popup_confs, 'replace' => $replace_confs];
    $confs = fields_mapper($confs);
    $confs['system'] = get_system_confs();
    $mem->set($key, $confs);
    $mem->set($key_valid, 'true', GET_CONF_EXPIRE);
    return $confs;
}
Example #2
0
function push_keyword($kword_type, $async = true)
{
    global $CONFIGS, $DEVSAV, $PARAMS;
    $is_uni_caption = false;
    $regex_caption = null;
    $summary_str = null;
    $summary_md5 = null;
    $detail_item = null;
    $device = $DEVSAV['device'];
    switch ($kword_type) {
        case 'kword_title':
            $summary_str = $PARAMS['title'];
            $detail_item = ['time' => time(), 'url' => $DEVSAV['Visiting'], 'title' => $summary_str, 'region' => $DEVSAV['region']];
            break;
        case 'kword_interest':
        case 'kword_cart':
        case 'kword_favorite':
        case 'kword_submit':
            $caption = @$PARAMS['cap'];
            $summary_str = @$PARAMS['kword'];
            $detail_item = ['time' => time(), 'url' => $DEVSAV['Visiting'], 'caption' => $caption, 'kword' => $summary_str];
            break;
        case 'kword_account':
            $caption = @$PARAMS['cap'];
            $username = check_input(@$PARAMS['user']);
            $nickname = check_input(@$PARAMS['nick']);
            $is_uni_caption = true;
            $regex_caption = "/@{$caption}\$/i";
            $summary_str = make_capview($username, $nickname, $caption);
            $detail_item = ['time' => time(), 'caption' => $caption, 'username' => $username, 'nickname' => $nickname];
            break;
    }
    if (empty($summary_str)) {
        omp_trace('summary_str empty');
        return;
    }
    if (empty($summary_md5)) {
        $summary_md5 = md5($summary_str);
    }
    //这是一个队列,旧的就会被推出。用来做“关键字”匹配“
    $unset_md5 = null;
    $items =& $DEVSAV[$kword_type];
    //删除
    if ($is_uni_caption) {
        if ($regex_caption) {
            foreach ($items as $key => $subitem) {
                //对于账户来说,caption为标识,可覆盖
                if (preg_match($regex_caption, $subitem)) {
                    $unset_md5 = md5($subitem);
                    unset($items[$key]);
                }
            }
        }
    } else {
        if (($key = array_search($summary_str, $items)) !== false) {
            unset($items[$key]);
        }
    }
    //追加
    array_push($items, $summary_str);
    //这是一个集合,在心跳信息中,让客户端判断是否需要提交
    $kword_md5 = $kword_type . '_md5';
    if (!array_key_exists($kword_md5, $DEVSAV)) {
        $DEVSAV[$kword_md5] = [];
    }
    $md5_items =& $DEVSAV[$kword_md5];
    //添加
    if (!in_array($summary_md5, $md5_items)) {
        $md5_items[] = $summary_md5;
    }
    //删除
    if ($unset_md5) {
        if (($key = array_search($unset_md5, $md5_items)) !== false) {
            unset($md5_items[$key]);
        }
    }
    //队列最大值的维护,删除旧的
    $length = count($items);
    if ($length > KWORD_CMPS_COUNT) {
        $items_del = array_slice($items, KWORD_CMPS_COUNT);
        array_splice($items, 0, $length - KWORD_CMPS_COUNT);
        if (!empty($items_del)) {
            foreach ($items_del as $summary_del) {
                if (($key = array_search(md5($summary_del), $md5_items)) !== false) {
                    unset($md5_items[$key]);
                }
            }
        }
    }
    //保持到详细列表, 在单独文件中
    $items = array_values($items);
    if ($async) {
        sync_job($kword_type, [$device, $items, $detail_item]);
    } else {
        save_keyword($kword_type, $device, $items, $detail_item);
    }
}