Exemple #1
0
 public function run(&$arrData, $arrConf)
 {
     if (empty($arrData) || !is_array($arrData)) {
         return false;
     }
     $arrPublicInfo = array();
     $intPageNo = intval($arrData['uiData']['queryInfo']['pageNo']);
     $intRstNum = intval($arrData['uiData']['queryInfo']['resNum']);
     $arrPublicInfo['word_enc'] = $arrData['uiData']['queryInfo']['wordEnc'];
     //query_come_from
     $arrPublicInfo['come_from'] = intval($arrData['uiData']['queryInfo']['pUrlConfig']['f']);
     $arrPublicInfo['time'] = Volatile::gettimeofday();
     //T参数
     $arrData['uiData']['queryInfo']['listTime'] = $arrPublicInfo['time']['sec'];
     $arrNewQueryInfo = CSmarty::getQueryInfo();
     $arrNewQueryInfo['listTime'] = $arrPublicInfo['time']['sec'];
     //CSmarty::setQueryInfo($arrData['uiData']['queryInfo']);
     CSmarty::setQueryInfo($arrNewQueryInfo);
     if (!empty($arrData['uiData']['asResult']['item']) && is_array($arrData['uiData']['asResult']['item'])) {
         foreach ($arrData['uiData']['asResult']['item'] as $intIndex => &$arrItem) {
             if (!in_array($arrItem['comeFrome'], array('SP', 'AS'))) {
                 continue;
             }
             $arrStrategys = array();
             $strUrl = $arrItem['offsetInfo']['urlEncoded'];
             //$arrPublicInfo['url'] = iconv('utf-8','gbk',$arrItem['offsetInfo']['url']);
             $arrPublicInfo['url'] = urldecode($strUrl);
             $arrPublicInfo['id'] = $intIndex + ($intPageNo - 1) * $intRstNum + 1;
             if (!empty($arrItem['comeFrome']) && $arrItem['comeFrome'] == 'AS') {
                 $arrStrategys = $arrItem['urls']['asUrls']['strategys'];
             } else {
                 $arrStrategys = $arrItem['strategyS'];
             }
             $arrStrategys = array_slice($arrStrategys, 0, 4);
             $arrRst = getClkEncryption($arrStrategys, $arrPublicInfo);
             //加密串
             if (!empty($arrRst['clkencryption'])) {
                 $arrItem['encryptionClick'] = trim($arrRst['clkencryption']);
             }
             //F,F1,F2,F3参数
             if (!empty($arrRst['strategyStr']) && is_array($arrRst['strategyStr'])) {
                 $arrItem['strategyStr'] = $arrRst['strategyStr'];
             }
             //Y参数
             if (!empty($arrRst['identifyStr'])) {
                 $arrItem['identifyStr'] = trim($arrRst['identifyStr']);
             }
         }
     }
     $intSearchIdentifyStr = getSeClkencryption($arrPublicInfo);
     if ($intSearchIdentifyStr !== false) {
         $arrData['uiData']['asResult']['searchIdentifyStr'] = $intSearchIdentifyStr;
     }
     return true;
 }
Exemple #2
0
 public function run(&$arrData, $arrConf)
 {
     if (empty($arrData) || !is_array($arrData)) {
         return false;
     }
     if (!isset($arrData['uiData']['queryInfo']['personalData']) || empty($arrData['uiData']['queryInfo']['personalData'])) {
         return false;
     }
     $arrPersonalData = json_decode($arrData['uiData']['queryInfo']['personalData'], true);
     if (!is_array($arrPersonalData) || empty($arrPersonalData)) {
         return false;
     }
     if (!isset($arrPersonalData[TrafficFilter::TRAFFIC_KEY])) {
         return false;
     }
     // 处理违章多车信息
     $arrTrafficInfo = $arrPersonalData[TrafficFilter::TRAFFIC_KEY];
     unset($arrPersonalData[TrafficFilter::TRAFFIC_KEY]);
     $arrData['uiData']['queryInfo']['personalData'] = json_encode($arrPersonalData);
     $arrTrafficValue = json_decode($arrTrafficInfo['value'], true);
     $arrTrafficData = array();
     $arrExisted = array();
     if (is_array($arrTrafficValue) && !empty($arrTrafficValue)) {
         foreach ($arrTrafficValue as $intIndex => $arrItem) {
             $arrItem['city'] = strtolower($arrItem['city']);
             // 城市
             $arrItem['hphm'] = mb_strtoupper($arrItem['hphm'], 'utf-8');
             // 车牌号
             $arrItem['engineno'] = strtoupper($arrItem['engineno']);
             // 发动机
             $arrItem['classno'] = strtoupper($arrItem['classno']);
             // 车架号
             $strTemp = md5($arrItem['city'] . $arrItem['hphm']);
             if (isset($arrExisted[$arrItem['hphm']])) {
                 if (in_array($strTemp, $arrExisted[$arrItem['hphm']])) {
                     continue;
                 } else {
                     $arrExisted[$arrItem['hphm']][] = $strTemp;
                     $arrTrafficData[] = $arrItem;
                 }
             } else {
                 $arrExisted[$arrItem['hphm']][] = $strTemp;
                 $arrTrafficData[] = $arrItem;
             }
             unset($strTemp);
         }
     }
     if (is_array($arrTrafficData) && !empty($arrTrafficData)) {
         $arrTrafficData = array_reverse($arrTrafficData);
         $arrData['uiData']['queryInfo']['trafficData'] = $arrTrafficData;
     }
     CSmarty::setQueryInfo($arrData['uiData']['queryInfo']);
     return true;
 }
Exemple #3
0
/**
 * do rendering
 * @param array [in|out] data
 * @param array [in|out] result
 * @param Object [in] smarty
 */
function render(&$data, &$result, $smarty, $render_header_flag = false)
{
    /**
     * init render result
     */
    $result['status'] = $GLOBALS['STATUS_CODE']['OK'];
    $result['msg'] = $GLOBALS['STATUS_MSG'][$result['status']];
    //$result['page'] = '';
    if ($render_header_flag) {
        $GLOBALS['mulit_render_flag'] = 0;
        $page = $smarty->do_render($data['uiData'], $data['uiControl']['templateName'], $data['uiControl']['templateSwitch'], $data['uiControl']['templateVersion']);
    } else {
        if ($data['uiControl']['singleItem'] == 1) {
            /**
             * tplt name from gss  data 
             */
            $templateName = $data['uiData']['asResult']['item'][0]['dispData']['strategy']['tempName'];
            /**
             * tplt name from uiCrontrol
             */
            if (empty($templateName)) {
                $templateName = $data['uiControl']['templateName'];
            }
            $data['uiData']['asResult']['item'][0]['dispData']['resultData']['queryInfo'] = CSmarty::getQueryInfo();
            $data['uiData']['asResult']['item'][0]['dispData']['resultData']['templateConfig'] = CSmarty::getTemplateConfig();
            $conf = CSmarty::getConf();
            backend_encrypt_url($data['uiData']['asResult']['item'][0]['dispData'], $conf['platform'], $conf['language'], $conf['type'], $templateName);
            $page = $smarty->do_render($data['uiData']['asResult']['item'][0]['dispData'], $templateName, $data['uiControl']['templateSwitch'], $data['uiControl']['templateVersion']);
        } else {
            //并行渲染需要的数据,预处理时顺便就分类了,避免并行渲染时需要再循环遍历一次
            $arrAlaData = array();
            $arrAsData = array();
            // HHVM直连状态下,直接关闭并行渲染
            if (!empty($_ENV['HHVM'])) {
                $GLOBALS['globalConf']['FEATURE_LIST']['MULTI_RENDER']['TURN'] = 'OFF';
            }
            #		$arrMultiRenderConf = Util::getConf('/multi_render', 'MULTI_RENDER');
            #		$bolPreRenderFeature = (Util::getConf('/feature', 'FEATURE_LIST/PREDATA/TURN') === 'ON') ? true : false;
            #		$bolMultiRenderFeature = (Util::getConf('/feature', 'FEATURE_LIST/MULTI_RENDER/TURN') === 'ON') ? true : false;
            $arrMultiRenderConf = $GLOBALS['globalConf']['MULTI_RENDER'];
            $bolPreRenderFeature = $GLOBALS['globalConf']['FEATURE_LIST']['PREDATA']['TURN'] === 'ON' ? true : false;
            $bolMultiRenderFeature = $GLOBALS['globalConf']['FEATURE_LIST']['MULTI_RENDER']['TURN'] === 'ON' ? true : false;
            //限定baidu模板
            //给FE加参数确定是否有预处理
            if ($data['uiControl']['platform'] == 'pc' && $data['uiControl']['templateName'] == 'baidu' && $bolPreRenderFeature) {
                $time_start = Volatile::microtime(true) * 1000;
                pre_render($data, $arrAlaData, $arrAsData);
                $data['uiData']['queryInfo']['multiRenderFlag'] = true;
                $GLOBALS['logArr']['time_pre_render'] = round(Volatile::microtime(true) * 1000 - $time_start, 2);
            }
            if ($bolMultiRenderFeature && $bolPreRenderFeature && $data['uiControl']['templateName'] == 'baidu' && $data['uiControl']['platform'] == 'pc' && (!empty($arrAlaData) || !empty($arrAsData))) {
                CSmarty::setQueryInfo($data['uiData']['queryInfo']);
                CSmarty::setEncKeyStr($data['uiData']['queryInfo']['encryptionKey']);
                $time_start = Volatile::microtime(true) * 1000;
                try {
                    $page = multi_render($data, $smarty, $arrAlaData, $arrAsData, $arrMultiRenderConf);
                } catch (Exception $e) {
                    $page = "";
                    if (isset($GLOBALS['multi_render_shmid'])) {
                        $shmid = $GLOBALS['multi_render_shmid'];
                        shmop_delete($shmid);
                        shmop_close($shmid);
                    }
                    CLog::warning("milti error:" . $e->getMessage());
                }
                $GLOBALS['logArr']['time_multi_render_total'] = round(Volatile::microtime(true) * 1000 - $time_start, 2);
            }
            if (empty($page)) {
                $GLOBALS['mulit_render_flag'] = 0;
                $page = $smarty->do_render($data['uiData'], $data['uiControl']['templateName'], $data['uiControl']['templateSwitch'], $data['uiControl']['templateVersion']);
            }
        }
    }
    $GLOBALS['logArr']['result_tpl_tm'] = @implode(',', CSmarty::getResultTplRenderTime());
    if ($page === false) {
        $result['page'] = '';
        $errors = CSmarty::getError();
        $errors_str = implode(";", $errors);
        $status = $GLOBALS['STATUS_CODE']['RENDER_FAIL'];
        $result['status'] = $status;
        $result['msg'] = $GLOBALS['STATUS_MSG'][$status] . ", errors[{$errors_str}]";
        CLog::warning($GLOBALS['STATUS_MSG'][$status] . ", errors[{$errors_str}]", $status);
        return $status;
    } else {
        $result['page'] .= $page;
    }
    return $GLOBALS['STATUS_CODE']['OK'];
}
Exemple #4
0
 public function run(&$arrData, $arrDefConf)
 {
     $time_start = Volatile::microtime(true) * 1000;
     if (empty($arrData) || !is_array($arrData)) {
         CLog::warning("get image sid failed, param null");
         $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2);
         $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_PARAM_ERR;
         return false;
     }
     // 整体功能开关
     $arrConf = Util::getConf('/image_base', 'IMAGE_BASE');
     if ($arrConf['base64'] !== 'on') {
         CLog::debug("get image sid turn off");
         $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2);
         $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_OFF;
         return false;
     }
     // 无用代码,小流量使用
     if (!isset($arrConf['base64_tempname']) || empty($arrConf['base64_tempname'])) {
         $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2);
         $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_NOT_LEGAL;
         return false;
     }
     if (strcasecmp($arrData['uiControl']['templateName'], $arrConf['base64_tempname']) == 0) {
         $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2);
         $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_NOT_LEGAL;
         return false;
     }
     // 浏览器识别IE6、IE7
     $bolFlag = $this->recognizeUserAgent($arrData);
     if ($bolFlag !== true) {
         CLog::debug("get image sid useragent not legal");
         $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2);
         $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_BROWSER;
         return false;
     }
     // for small flow
     /*
     if (isset ( $arrConf ['base64_small_flow'] ) && $arrConf ['base64_small_flow'] === on) {
     	$arrSample = Util::getConf ( '/sample_variable', 'sample_variable/IMAGE_BASE64' );
     	$bolSampleExp = false;
     	$bolSampleMat = false;
     	if (is_array ( $arrSample ) && ! empty ( $arrSample ) && ! empty ( $arrSample ['Contexted'] )) {
     		if (is_array ( $arrData ['uiData'] ['queryInfo'] ['samplingId'] ) && ! empty ( $arrData ['uiData'] ['queryInfo'] ['samplingId'] )) {
     			$arrSids = $arrData ['uiData'] ['queryInfo'] ['samplingId'];
     			$arrSids = array_flip ( $arrSids );
     			foreach ( $arrSample ['Contexted'] as $arrTemp ) {
     				if (isset ( $arrSids [$arrTemp ['sampling_id']] )) {
     					if ($arrTemp ['value'] == $arrConf ['exp_value']) {
     						$bolSampleExp = true;
     						break;
     					} else if ($arrTemp ['value'] == $arrConf ['mat_value']) {
     						$bolSampleMat = true;
     						break;
     					}
     				}
     			}
     		}
     	}
     	if ($bolSampleMat === true) {
     		$GLOBALS ['logArr'] ['time_img_base64'] = round ( Volatile::microtime ( true ) * 1000 - $time_start, 2 );
     		$GLOBALS ['logArr'] ['img_base64_ret'] = self::BASE64_MAT;
     		return false;
     	}
     	if ($bolSampleExp === false) {
     		$GLOBALS ['logArr'] ['time_img_base64'] = round ( Volatile::microtime ( true ) * 1000 - $time_start, 2 );
     		$GLOBALS ['logArr'] ['img_base64_ret'] = self::BASE64_OTHER;
     		return false;
     	}
     }
     */
     // 设置左侧小流量开关
     $base64LeftOn = false;
     $leftOpenTpllist = $arrConf['base64_left_tempname'];
     $leftOpenTpllist = explode(',', $leftOpenTpllist);
     foreach ($leftOpenTpllist as $leftTplName) {
         if (strcasecmp($arrData['uiControl']['templateName'], $leftTplName) == 0) {
             $base64LeftOn = true;
         }
     }
     // 处理右侧结果队列
     $arrResult = $arrConf['result'];
     $arrResult = explode(',', $arrResult);
     $arrControlInfo =& $arrData['uiControl'];
     $arrImgIds = array();
     $arrImgIdsLeft = array();
     $strPlatform = $arrControlInfo['platform'];
     $strLanguage = $arrControlInfo['language'];
     $strType = '';
     $strTemplateName = '';
     $arrImgConf = array();
     foreach ($arrResult as $res) {
         if (is_array($arrData['uiData'][$res]['item']) && !empty($arrData['uiData'][$res]['item'])) {
             // 处理结果队列的每条结果
             foreach ($arrData['uiData'][$res]['item'] as $intIndex => $arrItem) {
                 $strType = empty($arrItem['dispData']['strategy']['type']) ? VUI_TEMPLATE_ALADDIN_TEMPLATE_TYPE : trim($arrItem['dispData']['strategy']['type']);
                 if (empty($arrItem['dispData']['strategy'])) {
                     CLog::debug("get tpl strategy fail");
                     continue;
                 }
                 $strTemplateName = trim($arrItem['dispData']['strategy']['tempName']);
                 if (empty($strTemplateName)) {
                     CLog::debug("get image sid template name null");
                     continue;
                 }
                 // 获取tpl.conf内容
                 $arrImgConf = $this->load_image_tpl_conf($strPlatform, $strLanguage, $strType, $strTemplateName);
                 // 从src中提取sid
                 if (is_array($arrImgConf) && !empty($arrImgConf)) {
                     if (intval($arrImgConf['open_base64']) != 1) {
                         continue;
                     }
                     if (is_array($arrImgConf['img']) && !empty($arrImgConf['img'])) {
                         if ($base64LeftOn === true && strcasecmp($res, "asResult") == 0) {
                             foreach ($arrImgConf['img'] as $arrImgData) {
                                 $this->parse_image_conf($arrItem['dispData']['resultData'], $arrImgIdsLeft, $arrImgData);
                             }
                         } else {
                             if (strcasecmp($res, "rightResult") == 0) {
                                 /* 处理 右侧展开图片的base64加载问题,控制每单个模板base64加载张数:先读取模板变量$tplData.showrow,如果读不到则默认只加载4张 */
                                 $imgCountLimit = 4;
                                 if (is_array($arrItem['dispData']['resultData'])) {
                                     $showNum = $arrItem['dispData']['resultData']['tplData']['shownums'];
                                     if (!empty($showNum) && is_numeric($showNum) && $showNum > 0 && $showNum < 13) {
                                         $imgCountLimit = $showNum;
                                     }
                                 }
                                 //记录当前数组里的图片张数
                                 $tempCount = count($arrImgIds);
                                 foreach ($arrImgConf['img'] as $arrImgData) {
                                     $this->parse_image_conf($arrItem['dispData']['resultData'], $arrImgIds, $arrImgData);
                                     //判断新增张数是否超过切分阈值
                                     if (count($arrImgIds) > $tempCount + $imgCountLimit) {
                                         //进行切分,去掉尾部图片
                                         $arrImgIds = array_slice($arrImgIds, 0, $tempCount + $imgCountLimit);
                                         //更新当前图片数量值
                                         $tempCount = count($arrImgIds);
                                     }
                                 }
                             }
                         }
                     }
                 }
                 unset($arrImgConf);
             }
         }
     }
     // 标记base64是否开启
     $base64on = false;
     if (is_array($arrImgIds) && !empty($arrImgIds)) {
         $arrData['uiData']['queryInfo']['base64_sids_for_plugin'] = $arrImgIds;
         //该数组供Smarty插件读取,用于拼装base64形式的图片dom
         //只要右侧有图片,即开启base64开关
         $base64on = true;
     }
     //判断是否开启图片预取, 将已设置预取的图片从base64列表中去除.
     $preImageConf = Util::getConf('/image_predict', 'IMAGE_PREDICT');
     if ($preImageConf['predict_get'] === 'on' && $arrData['uiData']['queryInfo']['pageNo'] == 1) {
         $preImgList = $arrData['uiData']['queryInfo']['viewConfig']['predictImg'];
         if (!empty($preImgList)) {
             if (!empty($preImgList['right']['sidList'])) {
                 $img_diff = array_diff($arrImgIds, $preImgList['right']['sidList']);
                 #当图片预取list与实际图片list小于,配置差值时关闭base64
                 $arrImgIds = $img_diff;
             }
             if (!empty($preImgList['left']['sidList'])) {
                 $img_diff_left = array_diff($arrImgIdsLeft, $preImgList['left']['sidList']);
                 #当图片预取list与实际图片list小于,配置差值时关闭base64
                 $arrImgIdsLeft = $img_diff_left;
             }
         }
     }
     // 设置base64模板变量
     if (is_array($arrImgIds) && !empty($arrImgIds)) {
         //去重后的右侧图片
         $arrData['uiData']['queryInfo']['base64_img_sids'] = $arrImgIds;
     }
     if (is_array($arrImgIdsLeft) && !empty($arrImgIdsLeft)) {
         //左侧图片
         $arrData['uiData']['queryInfo']['base64_img_sids_left'] = $arrImgIdsLeft;
         $base64on = true;
         if ($base64LeftOn === true) {
             $arrData['uiData']['queryInfo']['base64_left_exp'] = 'on';
         }
     }
     if ($base64on) {
         $arrData['uiData']['queryInfo']['base64'] = 'on';
         $arrData['uiData']['queryInfo']['base64_domain'] = $arrConf['domain'];
         CSmarty::setQueryInfo($arrData['uiData']['queryInfo']);
         $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2);
         $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_OK;
         return true;
     }
     $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2);
     $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_NOT_OK;
     return false;
 }