OpenPNEではポイント機能があって、日記やコミュに書き込みするなどのアクションごとにポイントが加算される機能があります。
この機能はすごく便利なのですが、「日記を書く」→「日記を削除」の繰り返しでどんどんポイントが増えていってしまいます。そのため日記を削除するなどのマイナスアクションをする度にポイントを減算するコードを書いてみました。
/webapp/lib/db/point.phpの最後に以下を追加します。
function db_point_dec_point($c_member_id, $point)
{
if (!OPENPNE_USE_POINT_RANK) {
return false;
}
// 管理者は減算しない
if (!OPENPNE_IS_POINT_ADMIN && $c_member_id == 1) {
return false;
}
$sql = 'SELECT c_profile_id, public_flag_default FROM c_profile WHERE name = \'PNE_POINT\'';
if (!$c_profile = db_get_row($sql, array(), 'main')) {
return false;
}
$c_profile_id = $c_profile['c_profile_id'];
$public_flag = $c_profile['public_flag_default'];
$sql = 'SELECT value FROM c_member_profile WHERE c_member_id = ? AND c_profile_id = ?';
$params = array(intval($c_member_id), intval($c_profile_id));
$p = db_get_one($sql, $params, 'main');
// プロフィールにポイントがなければ追加
if (is_null($p)) {
$data = array(
'c_member_id' => intval($c_member_id),
'c_profile_id' => intval($c_profile_id),
'c_profile_option_id' => 0,
'value' => '0',
'public_flag' => $public_flag,
);
db_insert('c_member_profile', $data);
}
// ポイント減算
$p = intval($p) - intval($point);
$data = array('value' => $p);
$where = array('c_member_id' => intval($c_member_id), 'c_profile_id' => intval($c_profile_id));
db_update('c_member_profile', $data, $where);
return $p;
}
ポイントを減算したいアクションごとのファイルの最後かがある場合はその一行前に以下を追加
例 日記を削除したした時にポイントを減算する場合は以下の2ファイルの最後尾の「openpne_redirect・・・・」の前の行に下のコードを追加します。
/webapp/modules/pc/do/fh_diary_delete_c_diary.php (PC用)
/webapp/modules/ktai/do/fh_diary_delete_c_diary.php (携帯用)
if (OPENPNE_USE_POINT_RANK) {
//ポイント減算
$point = db_action_get_point4c_action_id(4);
db_point_dec_point($u, $point);
}
日記を削除したときにこれでポイントが減算されるようになります。
他のアクションの減算方法は後日説明します。(眠い・・・)アクションごとに若干ソースが変わります。