PageRenderTime 24ms CodeModel.GetById 33ms RepoModel.GetById 0ms app.codeStats 0ms

/include/task.func.php

https://github.com/gcao/bbs
PHP | 169 lines | 134 code | 29 blank | 6 comment | 23 complexity | c29fd5eed91b8c2994f7f2c8b9c95252 MD5 | raw file
  1. <?php
  2. /*
  3. [Discuz!] (C)2001-2009 Comsenz Inc.
  4. This is NOT a freeware, use is subject to license terms
  5. $Id: task.func.php 21053 2009-11-09 10:29:02Z wangjinbo $
  6. */
  7. if(!defined('IN_DISCUZ')) {
  8. exit('Access Denied');
  9. }
  10. function task_apply($task = array()) {
  11. global $db, $tablepre, $discuz_uid, $discuz_user, $timestamp;
  12. if(!isset($task['newbie'])) {
  13. require_once DISCUZ_ROOT.'./include/tasks/'.$task['scriptname'].'.inc.php';
  14. task_condition();
  15. }
  16. $db->query("REPLACE INTO {$tablepre}mytasks (uid, username, taskid, csc, dateline)
  17. VALUES ('$discuz_uid', '$discuz_user', '$task[taskid]', '0\t$timestamp', '$timestamp')");
  18. $db->query("UPDATE {$tablepre}tasks SET applicants=applicants+1 WHERE taskid='$task[taskid]'", 'UNBUFFERED');
  19. updateprompt('task', $discuz_uid, $db->result_first("SELECT COUNT(*) FROM {$tablepre}mytasks WHERE uid='$discuz_uid' AND status='0'"));
  20. if(!isset($task['newbie'])) {
  21. task_preprocess($task);
  22. }
  23. }
  24. function task_reward($task = array()) {
  25. switch($task['reward']) {
  26. case 'credit': return task_reward_credit($task['prize'], $task['bonus']); break;
  27. case 'magic': return task_reward_magic($task['prize'], $task['bonus']); break;
  28. case 'medal': return task_reward_medal($task['prize'], $task['bonus']); break;
  29. case 'invite': return task_reward_invite($task['bonus'], $task['prize']); break;
  30. case 'group': return task_reward_group($task['prize'], $task['bonus']); break;
  31. }
  32. }
  33. function task_reward_credit($extcreditid, $credits) {
  34. global $db, $tablepre, $discuz_uid, $timestamp;
  35. $creditsarray[$extcreditid] = $credits;
  36. updatecredits($discuz_uid, $creditsarray);
  37. $db->query("INSERT INTO {$tablepre}creditslog (uid, fromto, sendcredits, receivecredits, send, receive, dateline, operation) VALUES ('$discuz_uid', 'TASK REWARD', '$extcreditid', '$extcreditid', '0', '$credits', '$timestamp', 'RCV')");
  38. }
  39. function task_reward_magic($magicid, $num) {
  40. global $db, $tablepre, $discuz_uid;
  41. if($db->result_first("SELECT COUNT(*) FROM {$tablepre}membermagics WHERE magicid='$magicid' AND uid='$discuz_uid'")) {
  42. $db->query("UPDATE {$tablepre}membermagics SET num=num+'$num' WHERE magicid='$magicid' AND uid='$discuz_uid'", 'UNBUFFERED');
  43. } else {
  44. $db->query("INSERT INTO {$tablepre}membermagics (uid, magicid, num) VALUES ('$discuz_uid', '$magicid', '$num')");
  45. }
  46. }
  47. function task_reward_medal($medalid, $day) {
  48. global $db, $tablepre, $discuz_uid, $timestamp;
  49. $medals = $db->result_first("SELECT medals FROM {$tablepre}memberfields WHERE uid='$discuz_uid'");
  50. $medalsnew = $medals ? $medals."\t".$medalid : $medalid;
  51. $db->query("UPDATE {$tablepre}memberfields SET medals='$medalsnew' WHERE uid='$discuz_uid'", 'UNBUFFERED');
  52. $db->query("INSERT INTO {$tablepre}medallog (uid, medalid, type, dateline, expiration, status) VALUES ('$discuz_uid', '$medalid', '0', '$timestamp', '".($day ? $timestamp + $day * 86400 : '')."', '1')");
  53. }
  54. function task_reward_invite($day, $num) {
  55. global $db, $tablepre, $discuz_uid, $timestamp, $onlineip;
  56. $expiration = $timestamp + $day * 86400;
  57. $invitecodes = '';
  58. $comma = '<br />';
  59. for($i = 1; $i <= $num; $i++) {
  60. $invitecode = substr(md5($discuz_uid.$timestamp.random(6)), 0, 10).random(6);
  61. $db->query("INSERT INTO {$tablepre}invites (uid, dateline, expiration, inviteip, invitecode) VALUES ('$discuz_uid', '$timestamp', '$expiration', '$onlineip', '$invitecode')", 'UNBUFFERED');
  62. $invitecodes .= $comma.'<b>'.$invitecode.'</b>';
  63. }
  64. return $invitecodes;
  65. }
  66. function task_reward_group($gid, $day = 0) {
  67. global $db, $tablepre, $discuz_uid, $timestamp;
  68. $exists = FALSE;
  69. if($extgroupids) {
  70. $extgroupids = explode("\t", $extgroupids);
  71. if(in_array($gid, $extgroupids)) {
  72. $exists = TRUE;
  73. } else {
  74. $extgroupids[] = $gid;
  75. }
  76. $extgroupids = implode("\t", $extgroupids);
  77. } else {
  78. $extgroupids = $gid;
  79. }
  80. $db->query("UPDATE {$tablepre}members SET extgroupids='$extgroupids' WHERE uid='$discuz_uid'", 'UNBUFFERED');
  81. if($day) {
  82. $groupterms = $db->result_first("SELECT groupterms FROM {$tablepre}memberfields WHERE uid='$discuz_uid'");
  83. $groupterms = $groupterms ? unserialize($groupterms) : array();
  84. $groupterms['ext'][$gid] = $exists && $groupterms['ext'][$gid] ? max($groupterms['ext'][$gid], $timestamp + $day * 86400) : $timestamp + $day * 86400;
  85. $db->query("UPDATE {$tablepre}memberfields SET groupterms='".addslashes(serialize($groupterms))."' WHERE uid='$discuz_uid'", 'UNBUFFERED');
  86. }
  87. }
  88. function task_newbie_complete() {
  89. global $db, $tablepre, $discuz_uid, $timestamp,
  90. $task, $newbietasks, $newbietaskid, $currenttaskcsc, $nextnewbietaskid,
  91. $magicname, $medalname, $grouptitle, $rewards;
  92. require_once DISCUZ_ROOT.'./include/tasks/newbie_'.$newbietasks[$newbietaskid]['scriptname'].'.inc.php';
  93. $task = $db->fetch_first("SELECT * FROM {$tablepre}tasks WHERE taskid='$newbietaskid' AND available='2'");
  94. $currenttaskcsc = 0;
  95. if(task_csc($task) === TRUE) {
  96. $currenttaskcsc = 100;
  97. if($task['reward']) {
  98. $rewards = task_reward($task);
  99. if($task['reward'] == 'magic') {
  100. $magicname = $db->result_first("SELECT name FROM {$tablepre}magics WHERE magicid='$task[prize]'");
  101. } elseif($task['reward'] == 'medal') {
  102. $medalname = $db->result_first("SELECT name FROM {$tablepre}medals WHERE medalid='$task[prize]'");
  103. } elseif($task['reward'] == 'group') {
  104. $grouptitle = $db->result_first("SELECT grouptitle FROM {$tablepre}usergroups WHERE groupid='$task[prize]'");
  105. }
  106. sendnotice($discuz_uid, 'task_reward_'.$task['reward'], 'systempm');
  107. }
  108. $db->query("UPDATE {$tablepre}mytasks SET status='1', csc='100', dateline='$timestamp' WHERE uid='$discuz_uid' AND taskid='$newbietaskid'");
  109. $db->query("UPDATE {$tablepre}tasks SET achievers=achievers+1 WHERE taskid='$newbietaskid'", 'UNBUFFERED');
  110. $nextnewbietaskid = intval($db->result_first("SELECT t.taskid FROM {$tablepre}tasks t LEFT JOIN {$tablepre}mytasks mt ON mt.taskid=t.taskid AND mt.uid='$discuz_uid' WHERE mt.taskid IS NULL AND t.available='2' AND t.newbietask='1' ORDER BY t.newbietask DESC LIMIT 1"));
  111. if($nextnewbietaskid) {
  112. $nexttask = $db->fetch_first("SELECT * FROM {$tablepre}tasks WHERE taskid='$nextnewbietaskid' AND available='2'");
  113. $nexttask['newbie'] = 1;
  114. task_apply($nexttask);
  115. $db->query("UPDATE {$tablepre}members SET newbietaskid='$nextnewbietaskid' WHERE uid='$discuz_uid'", 'UNBUFFERED');
  116. } else {
  117. $db->query("UPDATE {$tablepre}members SET prompt=prompt^8, newbietaskid='0' WHERE uid='$discuz_uid'", 'UNBUFFERED');
  118. }
  119. $taskmsg = $newbietasks['task'][$newbietaskid]['scriptname'];
  120. if(!$nextnewbietaskid) {
  121. $taskmsg .= '_complete';
  122. }
  123. write_statlog('', 'action=newbie&from='.$taskmsg, '', '', 'task.php');
  124. }
  125. }
  126. function task_newfunction_autoapply() {
  127. global $db, $tablepre, $discuz_uid;
  128. $query = $db->query("SELECT * FROM {$tablepre}tasks WHERE newbietask='2' AND available='2'");
  129. $tprompt = FALSE;
  130. while($t = $db->fetch_array($query)) {
  131. $t['newbie'] = 1;
  132. if(!$db->result_first("SELECT COUNT(*) FROM {$tablepre}mytasks WHERE uid='$discuz_uid' AND taskid='$t[taskid]'")) {
  133. task_apply($t);
  134. $tprompt = TRUE;
  135. }
  136. }
  137. $tprompt && updateprompt('task', $discuz_uid, $db->result_first("SELECT COUNT(*) FROM {$tablepre}mytasks WHERE uid='$discuz_uid' AND status='0'"));
  138. }
  139. ?>