/** * 发送社区短消息或系统通知 * * @param array $msg 信息格式如下: * $msg = array( * 'toUser' => 'admin', //接收者用户名,可为数组群发:array('admin','abc') * 'toUid' => 1, //接收者uid,可为数组群发:array(1,2),当与 toUser 同时存在时,自然失效 * 'fromUid' => 2, //发送者UID,与fromUser同时存在才有效 (可选,默认为'0') * 'fromUser' => 'pwtest',//发送者用户名,与fromUid同时存在才有效(可选,默认为'SYSTEM') * 'subject' => 'Test', //消息标题 * 'content' => '~KO~', //消息内容 * 'other' => array() //其他信息变量 * ); * @return boolean 返回消息发送是否完成 */ function pwSendMsg($msg) { global $db, $timestamp; if (!$msg['toUser'] && !$msg['toUid'] || !$msg['subject'] || !$msg['content']) { return false; } $toType = 'username'; if (empty($msg['toUser'])) { $msg['toUser'] = $msg['toUid']; $toType = 'uid'; } $msg['subject'] = getLangInfo('writemsg', $msg['subject'], $msg); $msg['content'] = getLangInfo('writemsg', $msg['content'], $msg); if (!$msg['fromUid'] || !$msg['fromUser']) { $msg['fromUid'] = 0; $msg['fromUser'] = '******'; } if (is_array($msg['toUser'])) { //group send message $msgdb = array(); $query = $db->query("SELECT uid FROM pw_members WHERE {$toType} IN (" . pwImplode($msg['toUser'], false) . ')'); while ($rt = $db->fetch_array($query)) { $msgdb[] = array($rt['uid'], $msg['fromUid'], $msg['fromUser'], 'rebox', 1, $timestamp, $msg['subject'], $msg['content']); } $msgdb && send_msgc($msgdb, false); } else { $rt = $db->get_one("SELECT uid FROM pw_members WHERE {$toType}=" . pwEscape($msg['toUser'], false)); if (empty($rt)) { return false; } $db->update('INSERT INTO pw_msg SET ' . pwSqlSingle(array('touid' => $rt['uid'], 'fromuid' => $msg['fromUid'], 'username' => $msg['fromUser'], 'type' => 'rebox', 'ifnew' => 1, 'mdate' => $timestamp), false)); $mid = $db->insert_id(); $db->update('REPLACE INTO pw_msgc SET ' . pwSqlSingle(array('mid' => $mid, 'title' => $msg['subject'], 'content' => $msg['content']), false)); $db->update("UPDATE pw_members SET newpm=newpm+1 WHERE uid=" . pwEscape($rt['uid'], false)); } return true; }
<?php !function_exists('readover') && exit('Forbidden'); include_once D_P . 'data/bbscache/forum_cache.php'; $query = $db->query("SELECT t.tid,t.fid,t.authorid,t.subject,t.postdate FROM pw_threads t LEFT JOIN pw_reward r USING(tid) WHERE t.special='3' AND t.state='0' AND r.timelimit<'{$timestamp}' ORDER BY t.postdate ASC LIMIT 100"); $tids = $uiddb = $msg_a = array(); while ($rt = $db->fetch_array($query)) { $rt['postdate'] = get_date($rt['postdate']); $tids[$rt['tid']] = $rt; } $title = Char_cv(getLangInfo('writemsg', 'rewardmsg_notice_title')); foreach ($tids as $tid => $msg) { $L = array('tid' => $tid, 'subject' => $msg['subject'], 'postdate' => $msg['postdate'], 'fid' => $msg['fid'], 'name' => $forum[$msg['fid']]['name']); $content = Char_cv(getLangInfo('writemsg', 'rewardmsg_notice_content', $L)); $msg_a[] = array($msg['authorid'], '0', 'SYSTEM', 'rebox', '1', $timestamp, $title, $content); } if ($msg_a) { require_once R_P . 'require/msg.php'; send_msgc($msg_a); }
PostCheck(); !$isU && Showmsg('space_over_right'); InitGP(array('selid', 'refusemsg')); !$selid && Showmsg('id_error'); !is_array($selid) && ($selid = array($selid)); $title = Char_cv(getLangInfo('writemsg', 'friend_refuse_title', array('username' => $windid))); $writemsg = Char_cv(getLangInfo('writemsg', 'friend_refuse_content', array('uid' => $winduid, 'username' => $windid, 'msg' => stripslashes($refusemsg)))); $msgdb = array(); $query = $db->query("SELECT uid FROM pw_friends WHERE friendid=" . pwEscape($userdb['uid']) . ' AND uid IN(' . pwImplode($selid) . ") AND status='1'"); while ($rt = $db->fetch_array($query)) { $msgdb[] = array($rt['uid'], 0, 'SYSTEM', 'rebox', '1', $timestamp, $title, $writemsg); } $db->update('DELETE FROM pw_friends WHERE friendid=' . pwEscape($userdb['uid']) . ' AND uid IN(' . pwImplode($selid) . ") AND status='1'"); if ($msgdb) { require_once R_P . 'require/msg.php'; send_msgc($msgdb); } refreshto('u.php?action=friend', 'operate_success'); } elseif ($job == 'edit') { !$isU && Showmsg('space_over_right'); if (empty($_POST['step'])) { InitGP(array('touid')); $friend = $db->get_one("SELECT f.*,m.username FROM pw_friends f LEFT JOIN pw_members m ON f.friendid=m.uid WHERE f.uid=" . pwEscape($userdb['uid']) . " AND status='0' AND f.friendid=" . pwEscape($touid)); empty($friend) && Showmsg('data_error'); require_once PrintEot('u'); footer(); } else { InitGP(array('touid', 'descrip')); $db->update("UPDATE pw_friends SET descrip=" . pwEscape($descrip) . " WHERE uid=" . pwEscape($userdb['uid']) . " AND status='0' AND friendid=" . pwEscape($touid)); refreshto('u.php?action=friend', 'operate_success'); }
$medalname = ''; foreach ($medaldb[$rt['username']] as $key => $value) { $ids[] = $value[0]; $medal = $value[1]; $pwSQL[] = array($rt['username'], 'SYSTEM', $timestamp, $medal, 2, $reason); $medals = str_replace(",{$medal},", ',', $medals); $medaluser[] = '(uid=' . pwEscape($rt['uid']) . ' AND mid=' . pwEscape($medal) . ')'; $medalname .= $medalname ? ',' . $_MEDALDB[$medal]['name'] : $_MEDALDB[$medal]['name']; } $metal_cancel = Char_cv(getLangInfo('other', 'metal_cancel')); $metal_cancel_text = Char_cv(getLangInfo('other', 'metal_cancel_text', array('medalname' => $medalname))); $message[] = array($rt['uid'], '0', 'SYSTEM', 'rebox', '1', $timestamp, $metal_cancel, $metal_cancel_text); $medals = substr($medals, 1, -1); $db->update("UPDATE pw_members SET medals=" . pwEscape($medals, false) . "WHERE uid=" . pwEscape($rt['uid'], false)); } $pwSQL && $db->update("INSERT INTO pw_medalslogs (awardee,awarder,awardtime,level,action,why) VALUES" . pwSqlMulti($pwSQL, false)); $ids && $db->update("UPDATE pw_medalslogs SET state='1' WHERE id IN(" . pwImplode($ids, false) . ")"); $medaluser && $db->update("DELETE FROM pw_medaluser WHERE " . implode(' OR ', $medaluser)); $message && send_msgc($message); updatemedal_list(); } function updatemedal_list() { global $db; $query = $db->query("SELECT uid FROM pw_medaluser GROUP BY uid"); $medaldb = '<?php die;?>0'; while ($rt = $db->fetch_array($query)) { $medaldb .= ',' . $rt['uid']; } writeover(D_P . 'data/bbscache/medals_list.php', $medaldb); }