/** * 提携メディア情報を取得します。 * @param string $mediaId メディアID */ public function &getTeikeiMedia($mediaId) { $db =& $this->_core->getDB(); try { // 該当提携メディア $code = $this->_code; $name = CampaignDbTableNames::getName_TeikeiMedia($code); $sql = <<<SQL select anken_id, media_id, redirect_url, teikei_from, teikei_to, price, oroshi_price from {$name} where media_id=? SQL; $param = array($mediaId); $data =& $db->query($sql, $param); } catch (Exception $e) { // テーブルなし throw new TeikeiMediaNotFountException('sql exception', $e); } if (count($data) != 1) { // 提携メディア特定できない throw new TeikeiMediaNotFountException('media teikei not fount!!'); } return $data[0]; }
/** * PVテーブルカウントアップ処理します * @param array $session セッション情報 * @param array $clickId クリックID(ex. c01) * @see insertPv * @see updatePv */ public function countUpPv($session, $clickId) { // クリックタイプを取得 $type = "click"; $this->_log->debug('get.type.pv.' . $type); $mediaId = $session['media_id']; // DB処理 $db =& $this->_core->getDB(); $today = date('Y-m-d'); $name = CampaignDbTableNames::getName_PV($this->_code); $sql = <<<SQL select count(*) as cnt from {$name} where reg_date=? and media_id=? and pv_syubetsu=? SQL; $param = array($today, $mediaId, $type); $data =& $db->query($sql, $param); $count = $data[0]["cnt"]; if ($count == 0) { // 初回 $this->insertPv($session, $type); $this->_log->debug('db.countup.pv.insert'); } else { // カウントアップ $this->updatePv($session, $type); $this->_log->debug('db.countup.pv.update'); } }
/** * セッション情報とメディアタグ情報を取得します。 * @param string $cookieId クッキーID */ public function & getSessionAndMediaUrl($cookieId) { $db =& $this->_core->getDB(); // テーブル名取得 $table_name_session = CampaignDbTableNames::getName_Session($this->_code); $table_name_media = CampaignDbTableNames::getName_TeikeiMedia($this->_code); // SQL $sql = <<<SQL select S.session_id, S.anken_id, S.media_id, S.media_user_id, S.cookie_id, S.reg_time, S.remote_add, S.referer, S.lpo_pattern_id, S.mail, M.media_url from {$table_name_session} as S inner join {$table_name_media} as M on S.anken_id = M.anken_id and S.media_id = M.media_id where cookie_id=? SQL; $param = array($cookieId); $data =& $db->query($sql, $param); if (count($data) != 1) { throw new Action_SessionNotFountException($cookieId); } return $data[0]; }
/** * 同一ユーザー識別子によるアクセスの有無を判定します。 */ public function isCidExists() { $db =& $this->_core->getDB(); // テーブル名取得 $table_name_seika = CampaignDbTableNames::getName_Seika($this->_code); // SQL $sql = <<<SQL select count(client_user_id) as cnt from {$table_name_seika} where client_user_id=? SQL; $param = $this->_clientUserId; $data =& $db->query($sql, $param); if ($data[0]["cnt"] != 0) { return true; } return false; }
/** * 成果テーブルに追加します。 * または、SQLをファイル落としします。 * @param array $anken 案件情報 * @param array $seika 成果情報配列 */ public function insertDbSeika(&$anken, &$seika) { $code = $this->_code; $tableName = CampaignDbTableNames::getName_Seika($code); // カラム名称配列 $fieldName = ""; // カラム値配列 $fieldValue = array(); // バインド文字配列 '?' $hatena = ""; foreach ($seika as $key => $value) { if ($value != "") { // 名称 $fieldName .= "," . $key; // 値 $fieldValue[] = $value; // バインド文字配列 '?' $hatena .= ',?'; } } // sql $sql = <<<SQL insert into {$tableName} (action_flg, action_date, action_time {$fieldName}) values (1, now(), now() {$hatena}) SQL; // ファイル落し対応 $useLogFile = $anken['use_sql_log']; if ($useLogFile != '1') { // DB更新 $db =& $this->_core->getDB(); $db->execute($sql, $fieldValue); // 成果IDを返す return mysql_insert_id(); } else { //---------------------------- // ファイル落し //---------------------------- $this->saveSqlLogFile($anken, $sql, $fieldValue); // 成果IDが確定しないためnullを返す return null; } }
/** * PVテーブルへモバイルキャリア別カウントのカウントアップ * @param array $teikei 提携メディア情報 * @param string $mob_carrier モバイルキャリア */ protected function updateDbPvMobile(&$teikei, $mob_carrier) { $db =& $this->_core->getDB(); $mediaId = $teikei['media_id']; $today = date('Y-m-d'); $name = CampaignDbTableNames::getName_PV($this->_code); $sql = <<<SQL update {$name} set count=count+1 where reg_date=? and media_id=? and pv_syubetsu=? SQL; $param = array($today, $mediaId, $mob_carrier); $db->execute($sql, $param); }
/** * 成果テーブルに退会情報を追加します。 * @param array $clientUserId 任意のID * @param array $taikaiDate 退会日 */ public function updateDbSeika($clientUserId, $taikaiDate) { $table_name_seika = CampaignDbTableNames::getName_Seika($this->_code); $param = array(); // 退会日 if (empty($taikaiDate) == true) { $param[] = date('Y-m-d'); }else{ $param[] = $taikaiDate; } // 任意のID $param[] = $clientUserId; // sql $sql = <<<SQL update {$table_name_seika} set taikai_date=?, taikai_reg_time=now() where client_user_id=? and taikai_date is null SQL; // DB更新 $db =& $this->_core->getDB(); $db->execute($sql, $param); return; }
/** * sessionテーブルへの更新をします。 * @param array $session セッション情報 */ public function insertLpoPageStay(&$session, $clickId) { if (empty($session['lpo_pattern_id']) == true) { return; } // クリックタイプを取得 $type = $this->getClickTypeForSession($clickId); $this->_log->debug('get.type.session.' . $type); $db =& $this->_core->getDB(); $cookieId = $session['cookie_id']; $name = CampaignDbTableNames::getName_Session($this->_code); $sql = <<<SQL insert into lpo_page_stay (anken_id, session_id, media_id, pattern_id, area_id, reg_date, reg_time, click_time, stay_second) values (?, ?, ?, ?, ?, ?, ?, ?, ?) SQL; $now = time(); // 滞在時間 $s =& $session; $staySecond = $now - strtotime($s['reg_time']); $now = date('Y-m-d H:i:s', $now); $param = array( $s['anken_id'], $s['session_id'], $s['media_id'], $s['lpo_pattern_id'], $type, $s['reg_time'], $s['reg_time'], $now, $staySecond); $db->execute($sql, $param); }
/** * セッションテーブルへの書き込みします * @param string $cookieId クッキーID * @param array $teikei 提携メディア情報 * @return string セッションID */ public function insertDbSeesionForOld($sessionId, $cookieId, &$teikei) { $db =& $this->_core->getDB(); $ankenId = $teikei['anken_id']; $mediaId = $teikei['media_id']; $mediaUserId = $this->_mediaUserId; $remoteAdd = $_SERVER['HTTP_X_FORWARDED_FOR']; $referer = $_SERVER["HTTP_REFERER"]; $name = CampaignDbTableNames::getName_Session($this->_code); $sql = <<<SQL insert into {$name} (session_id, anken_id, media_id, media_user_id, cookie_id, remote_add, referer) values (?, ?, ?, ?, ?, ?, ?) SQL; $param = array($sessionId, $ankenId, $mediaId, $mediaUserId, $cookieId, $remoteAdd, $referer); $db->execute($sql, $param); return mysql_insert_id(); }
/** * PVテーブルのカウントアップします。 * @param array $teikei 提携メディア情報 * @param string $patternId パターンID */ public function countUpLpoPv(&$teikei, $patternId) { if ($patternId == null) { return; } $db =& $this->_core->getDB(); $mediaId = $teikei['media_id']; $ankenId = $teikei['anken_id']; $today = date('Y-m-d'); $name = CampaignDbTableNames::getName_PV($this->_code); $sql = <<<SQL select count(media_id) as cnt from {$name} where reg_date=? and media_id=? and pv_syubetsu=? SQL; $syubetsu = 'lpo' . $patternId . '_' . self::DEFAULT_PV_SYUBETSU; $param = array($today, $mediaId, $syubetsu); $data =& $db->query($sql, $param); $count = $data[0]["cnt"]; if ($count == 0) { $sql = <<<SQL insert into {$name} (reg_date, media_id, pv_syubetsu, anken_id, count) values (?, ?, ?, ?, 1) SQL; $param = array($today, $mediaId, $syubetsu, $ankenId); $db->execute($sql, $param); } else { $sql = <<<SQL update {$name} set count=count+1 where reg_date=? and media_id=? and pv_syubetsu=? SQL; $param = array($today, $mediaId, $syubetsu); $db->execute($sql, $param); } }
/** * アクセス情報を更新する */ public function getSessionId(&$mob) { //-------------------------- // DB(セッションテーブル)からセッションID取得 //-------------------------- $db =& $this->_core->getDB(); $name = CampaignDbTableNames::getName_Session($this->_code); $param = array($mob->_uid); $sql = <<<SQL select session_id from {$name} where mob_uid=? order by reg_time desc limit 1 SQL; $data =& $db->query($sql, $param); if (count($data) == 1) { return $data[0]['session_id']; } else { return null; } }
/** * sessionテーブルへの更新をします。 * @param array $session セッション情報 */ public function countUpSession(&$session, $clickId) { // クリックタイプを取得 $type = $this->getClickTypeForSession($clickId); $this->_log->debug('get.type.session.' . $type); $db =& $this->_core->getDB(); $sessionId = $session['session_id']; $name = CampaignDbTableNames::getName_Session($this->_code); $now = date('Y-m-d H:i:s'); $sql = "update {$name} set click=?, click_time=? where session_id=?"; $param = array($type, $now, $sessionId); $db->execute($sql, $param); }
/** * 再訪フラグを取得します */ public function getRevisitFlg() { // 初期値設定 // 今回の再訪フラグ $revisitFlg = 0; // 前回の再訪フラグ $lastRevisitFlg = null; // クッキーID取得 $cookieId = $this->getCookieId(); // クッキーIDありの場合 if (empty($cookieId) == false) { $db =& $this->_core->getDB(); $code = $this->_code; // セッションレコードが存在により、再訪を判断します $name = CampaignDbTableNames::getName_Session($code); $sql = <<<SQL select cookie_id, revisit_flg from {$name} where cookie_id=? SQL; $param = array($cookieId); $sessionData =& $db->query($sql, $param); // 前回アクセス(セッションレコード)存在の場合、リピーターを設定 if (count($sessionData) == 1) { $lastRevisitFlg = $sessionData[0]['revisit_flg']; // 前回アクセスは初回の場合 if ($lastRevisitFlg == 0){ $revisitFlg = 1; // 前回アクセスはリピーターの場合 } else { $revisitFlg = $lastRevisitFlg; } } // 前回のアクセスが再訪以外の場合、成果レコードが存在により再訪を設定します if ($lastRevisitFlg != 2){ // 成果レコードが存在により、再訪を判断します $name = CampaignDbTableNames::getName_Seika($code); $sql = <<<SQL select count(cookie_id) as cnt from {$name} where cookie_id=? SQL; $param = array($cookieId); $seikaData =& $db->query($sql, $param); // 成果レコード存在の場合、再訪を設定 if ($seikaData[0]["cnt"] != 0) { $revisitFlg = 2; } } } return $revisitFlg; }
/** * セッションテーブルへの書き込みします * @param string $cookieId クッキーID * @param array $teikei 提携メディア情報 * @param string $patternId LPOパターンID * @return string セッションID */ public function insertDbSeesion($cookieId, &$teikei) { $db =& $this->_core->getDB(); $name = CampaignDbTableNames::getName_Session($this->_code); $ankenId = $teikei['anken_id']; $mediaId = $teikei['media_id']; $remoteAdd = $this->_ip; $referer = $this->_referer; $regTime = date('Y-m-d H:i:s'); $this->_regDate = date('Y-m-d', strtotime($regTime)); $sql = <<<SQL insert into {$name} (anken_id, media_id, cookie_id, reg_time, remote_add, referer, nyuko_url, keyword, sem_kind, bid) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) SQL; $param = array($ankenId, $mediaId, $cookieId, $regTime, $remoteAdd, $referer, $this->_nyukoUrl, $this->_keyWord, $this->_semKind, $this->_bannerId); $db->execute($sql, $param); return mysql_insert_id(); }
/** * 提携メディア情報を取得します。 * @param string $mediaId メディアID */ public function &getTeikeiMedia($mediaId) { $db =& $this->_core->getDB(); try { // 該当提携メディア $code = $this->_code; $name = CampaignDbTableNames::getName_TeikeiMedia($code); $sql = <<<SQL select anken_id, media_id, redirect_url, docomo_url, au_url, softbank_url, teikei_from, teikei_to, price, oroshi_price, extra_price, extra_oroshi, suspend_from, suspend_to, advertise_from, advertise_to, expire_id_cookie, expire_uid_mob, expire_advertise, expire_type from {$name} where media_id=? SQL; $param = array($mediaId); $data =& $db->query($sql, $param); } catch (Exception $e) { // テーブルなし throw new TeikeiMediaNotFountException('sql exception', $e); } if (count($data) != 1) { // 提携メディア特定できない throw new TeikeiMediaNotFountException('media teikei not found!'); } return $data[0]; }