PageRenderTime 59ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/source/class/class_task.php

https://github.com/kuaileshike/upload
PHP | 611 lines | 535 code | 70 blank | 6 comment | 175 complexity | 87e75ae1ebdca41de3d373508dcad028 MD5 | raw file
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: class_task.php 27449 2012-02-01 05:32:35Z zhangguosheng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class task {
  12. var $task;
  13. var $taskvars;
  14. var $message;
  15. var $multipage;
  16. var $listdata;
  17. function task() {}
  18. function &instance() {
  19. static $object;
  20. if(empty($object)) {
  21. $object = new task();
  22. }
  23. return $object;
  24. }
  25. function tasklist($item) {
  26. global $_G;
  27. $multipage = '';
  28. $page = max(1, intval($_GET['page']));
  29. $start_limit = ($page - 1) * $_G['tpp'];
  30. $tasklist = $endtaskids = $magicids = $medalids = $groupids = array();
  31. $updated = FALSE;
  32. $num = 0;
  33. foreach(C::t('common_task')->fetch_all_by_status($_G['uid'], $item) as $task) {
  34. if($item == 'new' || $item == 'canapply') {
  35. list($task['allowapply'], $task['t']) = $this->checknextperiod($task);
  36. if($task['allowapply'] < 0) {
  37. continue;
  38. }
  39. $task['noperm'] = $task['applyperm'] && $task['applyperm'] != 'all' && !(($task['applyperm'] == 'member'&& $_G['adminid'] == '0') || ($task['applyperm'] == 'admin' && $_G['adminid'] > '0') || forumperm($task['applyperm']));
  40. $task['appliesfull'] = $task['tasklimits'] && $task['achievers'] >= $task['tasklimits'];
  41. if($item == 'canapply' && ($task['noperm'] || $task['appliesfull'])) {
  42. continue;
  43. }
  44. }
  45. $num++;
  46. if($task['reward'] == 'magic') {
  47. $magicids[] = $task['prize'];
  48. } elseif($task['reward'] == 'medal') {
  49. $medalids[] = $task['prize'];
  50. } elseif($task['reward'] == 'invite') {
  51. $invitenum = $task['prize'];
  52. } elseif($task['reward'] == 'group') {
  53. $groupids[] = $task['prize'];
  54. }
  55. if($task['available'] == '2' && ($task['starttime'] > TIMESTAMP || ($task['endtime'] && $task['endtime'] <= TIMESTAMP))) {
  56. $endtaskids[] = $task['taskid'];
  57. }
  58. $csc = explode("\t", $task['csc']);
  59. $task['csc'] = floatval($csc[0]);
  60. $task['lastupdate'] = intval($csc[1]);
  61. if(!$updated && $item == 'doing' && $task['csc'] < 100) {
  62. $updated = TRUE;
  63. require_once libfile('task/'.$task['scriptname'], 'class');
  64. $taskclassname = 'task_'.$task['scriptname'];
  65. $taskclass = new $taskclassname;
  66. $task['applytime'] = $task['dateline'];
  67. if(method_exists($taskclass, 'csc')) {
  68. $result = $taskclass->csc($task);
  69. } else {
  70. showmessage('task_not_found', '', array('taskclassname' => $taskclassname));
  71. }
  72. if($result === TRUE) {
  73. $task['csc'] = '100';
  74. C::t('common_mytask')->update($_G['uid'], $task['taskid'], array('csc' => $task['csc']));
  75. } elseif($result === FALSE) {
  76. C::t('common_mytask')->update($_G['uid'], $task['taskid'], array('status' => -1));
  77. } else {
  78. $task['csc'] = floatval($result['csc']);
  79. C::t('common_mytask')->update($_G['uid'], $task['taskid'], array('csc' => $task['csc']."\t".$_G['timestamp']));
  80. }
  81. }
  82. if(in_array($item, array('done', 'failed')) && $task['period']) {
  83. list($task['allowapply'], $task['t']) = $this->checknextperiod($task);
  84. $task['allowapply'] = $task['allowapply'] > 0 ? 1 : 0;
  85. }
  86. $task['icon'] = $task['icon'] ? $task['icon'] : 'task.gif';
  87. $task['icon'] = strtolower(substr($task['icon'], 0, 7)) == 'http://' ? $task['icon'] : "static/image/task/$task[icon]";
  88. $task['dateline'] = $task['dateline'] ? dgmdate($task['dateline'], 'u') : '';
  89. $tasklist[] = $task;
  90. }
  91. if($magicids) {
  92. foreach(C::t('common_magic')->fetch_all($magicids) as $magic) {
  93. $this->listdata[$magic['magicid']] = $magic['name'];
  94. }
  95. }
  96. if($medalids) {
  97. foreach(C::t('forum_medal')->fetch_all($medalids) as $medal) {
  98. $this->listdata[$medal['medalid']] = $medal['name'];
  99. }
  100. }
  101. if($groupids) {
  102. foreach(C::t('common_usergroup')->fetch_all($groupids) as $group) {
  103. $this->listdata[$group['groupid']] = $group['grouptitle'];
  104. }
  105. }
  106. if($invitenum) {
  107. $this->listdata[$invitenum] = $_G['lang']['invite_code'];
  108. }
  109. if($endtaskids) {
  110. }
  111. return $tasklist;
  112. }
  113. function view($id) {
  114. global $_G;
  115. $this->task = C::t('common_task')->fetch_by_uid($_G['uid'], $id);
  116. if(!$this->task) {
  117. showmessage('task_nonexistence');
  118. }
  119. switch($this->task['reward']) {
  120. case 'magic':
  121. $this->task['rewardtext'] = C::t('common_magic')->fetch($this->task['prize']);
  122. $this->task['rewardtext'] = $this->task['rewardtext']['name'];
  123. break;
  124. case 'medal':
  125. $this->task['rewardtext'] = C::t('forum_medal')->fetch($this->task['prize']);
  126. $this->task['rewardtext'] = $this->task['rewardtext']['name'];
  127. break;
  128. case 'group':
  129. $group = C::t('common_usergroup')->fetch($this->task['prize']);
  130. $this->task['rewardtext'] = $group['grouptitle'];
  131. break;
  132. }
  133. $this->task['icon'] = $this->task['icon'] ? $this->task['icon'] : 'task.gif';
  134. $this->task['icon'] = strtolower(substr($this->task['icon'], 0, 7)) == 'http://' ? $this->task['icon'] : 'static/image/task/'.$this->task['icon'];
  135. $this->task['endtime'] = $this->task['endtime'] ? dgmdate($this->task['endtime'], 'u') : '';
  136. $this->task['description'] = nl2br($this->task['description']);
  137. $this->taskvars = array();
  138. foreach(C::t('common_taskvar')->fetch_all_by_taskid($id) as $taskvar) {
  139. if(!$taskvar['variable'] || $taskvar['value']) {
  140. if(!$taskvar['variable']) {
  141. $taskvar['value'] = $taskvar['description'];
  142. }
  143. if($taskvar['sort'] == 'apply') {
  144. $this->taskvars['apply'][] = $taskvar;
  145. } elseif($taskvar['sort'] == 'complete') {
  146. $this->taskvars['complete'][$taskvar['variable']] = $taskvar;
  147. } elseif($taskvar['sort'] == 'setting') {
  148. $this->taskvars['setting'][$taskvar['variable']] = $taskvar;
  149. }
  150. }
  151. }
  152. $this->task['grouprequired'] = $comma = '';
  153. $this->task['applyperm'] = $this->task['applyperm'] == 'all' ? '' : $this->task['applyperm'];
  154. if(!in_array($this->task['applyperm'], array('', 'member', 'admin'))) {
  155. $query = C::t('common_usergroup')->fetch_all(explode(',', str_replace("\t", ',', $this->task['applyperm'])));
  156. foreach($query as $group) {
  157. $this->task['grouprequired'] .= $comma.$group[grouptitle];
  158. $comma = ', ';
  159. }
  160. }
  161. if($this->task['relatedtaskid']) {
  162. $task = C::t('common_task')->fetch($this->task['relatedtaskid']);
  163. $_G['taskrequired'] = $task['name'];
  164. }
  165. require_once libfile('task/'.$this->task['scriptname'], 'class');
  166. $taskclassname = 'task_'.$this->task['scriptname'];
  167. $taskclass = new $taskclassname;
  168. if($this->task['status'] == '-1') {
  169. if($this->task['period']) {
  170. list($allowapply, $this->task['t']) = $this->checknextperiod($this->task);
  171. } else {
  172. $allowapply = -4;
  173. }
  174. } elseif($this->task['status'] == '0') {
  175. $allowapply = -1;
  176. $csc = explode("\t", $this->task['csc']);
  177. $this->task['csc'] = floatval($csc[0]);
  178. $this->task['lastupdate'] = intval($csc[1]);
  179. if($this->task['csc'] < 100) {
  180. if(method_exists($taskclass, 'csc')) {
  181. $result = $taskclass->csc($this->task);
  182. }
  183. if($result === TRUE) {
  184. $this->task['csc'] = '100';
  185. C::t('common_mytask')->update($_G['uid'], $id, array('csc' => $this->task['csc']));
  186. } elseif($result === FALSE) {
  187. C::t('common_mytask')->update($_G['uid'], $id, array('status' => -1));
  188. dheader("Location: home.php?mod=task&do=view&id=$id");
  189. } else {
  190. $this->task['csc'] = floatval($result['csc']);
  191. C::t('common_mytask')->update($_G['uid'], $id, array('csc' => $this->task['csc']."\t".$_G['timestamp']));
  192. }
  193. }
  194. } elseif($this->task['status'] == '1') {
  195. if($this->task['period']) {
  196. list($allowapply, $this->task['t']) = $this->checknextperiod($this->task);
  197. } else {
  198. $allowapply = -5;
  199. }
  200. } else {
  201. $allowapply = 1;
  202. }
  203. if(method_exists($taskclass, 'view')) {
  204. $this->task['viewmessage'] = $taskclass->view($this->task, $this->taskvars);
  205. } else {
  206. $this->task['viewmessage'] = '';
  207. }
  208. if($allowapply > 0) {
  209. if($this->task['applyperm'] && $this->task['applyperm'] != 'all' && !(($this->task['applyperm'] == 'member' && $_G['adminid'] == '0') || ($this->task['applyperm'] == 'admin' && $_G['adminid'] > '0') || preg_match("/(^|\t)(".$_G['groupid'].")(\t|$)/", $this->task['applyperm']))) {
  210. $allowapply = -2;
  211. } elseif($this->task['tasklimits'] && $this->task['achievers'] >= $this->task['tasklimits']) {
  212. $allowapply = -3;
  213. }
  214. }
  215. $this->task['dateline'] = dgmdate($this->task['dateline'], 'u');
  216. return $allowapply;
  217. }
  218. function checknextperiod($task) {
  219. global $_G;
  220. $allowapply = false;
  221. $nextapplytime = '';
  222. if($task['periodtype'] == 0) {
  223. $allowapply = TIMESTAMP - $task['dateline'] >= $task['period'] * 3600 ? 2 : -6;
  224. $nextapplytime = tasktimeformat($task['period'] * 3600 - TIMESTAMP + $task['dateline']);
  225. } elseif($task['periodtype'] == 1) {
  226. $todaytimestamp = TIMESTAMP - (TIMESTAMP + $_G['setting']['timeoffset'] * 3600) % 86400;
  227. $allowapply = $task['dateline'] < $todaytimestamp - ($task['period'] - 1) * 86400 ? 2 : -6;
  228. $nextapplytime = ($task['dateline'] - ($task['dateline'] + $_G['setting']['timeoffset'] * 3600) % 86400) + $task['period'] * 86400;
  229. $nextapplytime = dgmdate($nextapplytime);
  230. } elseif($task['periodtype'] == 2 && $task['period'] > 0 && $task['period'] <= 7) {
  231. $task['period'] = $task['period'] != 7 ? $task['period'] : 0;
  232. $todayweek = dgmdate(TIMESTAMP, 'w');
  233. $weektimestamp = TIMESTAMP - ($todayweek - $task['period']) * 86400;
  234. $weekstart = $weektimestamp - ($weektimestamp + $_G['setting']['timeoffset'] * 3600) % 86400;
  235. $weekfirstday = $weekstart - $task['period'] * 86400;
  236. if($task['dateline'] && ($task['dateline'] > $weekstart || $task['dateline'] > $weekfirstday)) {
  237. $allowapply = -6;
  238. if($task['dateline'] > $weekfirstday) {
  239. $weekstart += 604800;
  240. }
  241. $nextapplytime = dgmdate($weekstart);
  242. } else {
  243. $allowapply = 2;
  244. }
  245. } elseif($task['periodtype'] == 3 && $task['period'] > 0) {
  246. list($year, $month) = explode('/', dgmdate(TIMESTAMP, 'Y/n'));
  247. $monthstart = mktime(0, 0, 0, $month, $task['period'], $year);
  248. $monthfirstday = mktime(0, 0, 0, $month, 1, $year);
  249. if($task['dateline'] && ($task['dateline'] > $monthstart || $task['dateline'] > $monthfirstday)) {
  250. $allowapply = -6;
  251. if($task['dateline'] > $monthfirstday) {
  252. $monthstart = mktime(0, 0, 0, $month + 1, $task['period'], $year);
  253. }
  254. $nextapplytime = dgmdate($monthstart);
  255. } else {
  256. $allowapply = 2;
  257. }
  258. }
  259. return array($allowapply, $nextapplytime);
  260. }
  261. function apply($id) {
  262. global $_G;
  263. $this->task = C::t('common_task')->fetch($id);
  264. if($this->task['available'] != 2) {
  265. showmessage('task_nonexistence');
  266. } elseif(($this->task['starttime'] && $this->task['starttime'] > TIMESTAMP) || ($this->task['endtime'] && $this->task['endtime'] <= TIMESTAMP)) {
  267. showmessage('task_offline');
  268. } elseif($this->task['tasklimits'] && $this->task['achievers'] >= $this->task['tasklimits']) {
  269. showmessage('task_full');
  270. }
  271. if($this->task['relatedtaskid'] && !C::t('common_mytask')->count($_G['uid'], $this->task['relatedtaskid'], 1)) {
  272. return -1;
  273. } elseif($this->task['applyperm'] && $this->task['applyperm'] != 'all' && !(($this->task['applyperm'] == 'member' && $_G['adminid'] == '0') || ($this->task['applyperm'] == 'admin' && $_G['adminid'] > '0') || preg_match("/(^|\t)(".$_G['groupid'].")(\t|$)/", $this->task['applyperm']))) {
  274. return -2;
  275. } elseif(!$this->task['period'] && C::t('common_mytask')->count($_G['uid'], $id)) {
  276. return -3;
  277. } elseif($this->task['period']) {
  278. $mytask = C::t('common_mytask')->fetch($_G['uid'], $id);
  279. $task = C::t('common_task')->fetch($id);
  280. $mytask['period'] = $task['period'];
  281. $mytask['periodtype'] = $task['periodtype'];
  282. unset($task);
  283. list($allowapply) = $this->checknextperiod($mytask);
  284. if($allowapply < 0) {
  285. return -4;
  286. }
  287. }
  288. require_once libfile('task/'.$this->task['scriptname'], 'class');
  289. $taskclassname = 'task_'.$this->task['scriptname'];
  290. $taskclass = new $taskclassname;
  291. if(method_exists($taskclass, 'condition')) {
  292. $taskclass->condition();
  293. }
  294. C::t('common_mytask')->insert(array(
  295. 'uid' => $_G['uid'],
  296. 'username' => $_G['username'],
  297. 'taskid' => $this->task['taskid'],
  298. 'csc' => '0\t'.$_G['timestamp'],
  299. 'dateline' => $_G['timestamp']
  300. ), false, true);
  301. C::t('common_task')->update_applicants($this->task['taskid'], 1);
  302. if(method_exists($taskclass, 'preprocess')) {
  303. $taskclass->preprocess($this->task);
  304. }
  305. return true;
  306. }
  307. function draw($id) {
  308. global $_G;
  309. if(!($this->task = C::t('common_task')->fetch_by_uid($_G['uid'], $id))) {
  310. showmessage('task_nonexistence');
  311. } elseif($this->task['status'] != 0) {
  312. showmessage('task_not_underway');
  313. } elseif($this->task['tasklimits'] && $this->task['achievers'] >= $this->task['tasklimits']) {
  314. return -1;
  315. }
  316. require_once libfile('task/'.$this->task['scriptname'], 'class');
  317. $taskclassname = 'task_'.$this->task['scriptname'];
  318. $taskclass = new $taskclassname;
  319. if(method_exists($taskclass, 'csc')) {
  320. $result = $taskclass->csc($this->task);
  321. } else {
  322. showmessage('task_not_found', '', array('taskclassname' => $taskclassname));
  323. }
  324. if($result === TRUE) {
  325. if($this->task['reward']) {
  326. $rewards = $this->reward();
  327. $notification = $this->task['reward'];
  328. if($this->task['reward'] == 'magic') {
  329. $rewardtext = C::t('common_magic')->fetch($this->task['prize']);
  330. $rewardtext = $rewardtext['name'];
  331. } elseif($this->task['reward'] == 'medal') {
  332. $rewardtext = C::t('forum_medal')->fetch($this->task['prize']);
  333. $rewardtext = $rewardtext['name'];
  334. if(!$this->task['bonus']) {
  335. $notification = 'medal_forever';
  336. }
  337. } elseif($this->task['reward'] == 'group') {
  338. $group = C::t('common_usergroup')->fetch($this->task['prize']);
  339. $rewardtext = $group['grouptitle'];
  340. } elseif($this->task['reward'] == 'invite') {
  341. $rewardtext = $this->task['prize'];
  342. }
  343. notification_add($_G[uid], 'task', 'task_reward_'.$notification, array(
  344. 'taskid' => $this->task['taskid'],
  345. 'name' => $this->task['name'],
  346. 'creditbonus' => $_G['setting']['extcredits'][$this->task['prize']]['title'].' '.$this->task['bonus'].' '.$_G['setting']['extcredits'][$this->task['prize']]['unit'],
  347. 'rewardtext' => $rewardtext,
  348. 'bonus' => $this->task['bonus'],
  349. 'prize' => $this->task['prize'],
  350. ));
  351. }
  352. if(method_exists($taskclass, 'sufprocess')) {
  353. $taskclass->sufprocess($this->task);
  354. }
  355. C::t('common_mytask')->update($_G['uid'], $id, array('status' => 1, 'csc' => 100, 'dateline' => $_G['timestamp']));
  356. C::t('common_task')->update_achievers($id, 1);
  357. if($_G['inajax']) {
  358. $this->message('100', $this->task['reward'] ? 'task_reward_'.$this->task['reward'] : 'task_completed', array(
  359. 'creditbonus' => $_G['setting']['extcredits'][$this->task['prize']]['title'].' '.$this->task['bonus'].' '.$_G['setting']['extcredits'][$this->task['prize']]['unit'],
  360. 'rewardtext' => $rewardtext,
  361. 'bonus' => $this->task['bonus'],
  362. 'prize' => $this->task['prize']
  363. )
  364. );
  365. } else {
  366. return true;
  367. }
  368. } elseif($result === FALSE) {
  369. C::t('common_mytask')->update($_G['uid'], $id, array('status' => -1));
  370. if($_G['inajax']) {
  371. $this->message('-1', 'task_failed');
  372. } else {
  373. return -2;
  374. }
  375. } else {
  376. $result['t'] = $this->timeformat($result['remaintime']);
  377. $this->messagevalues['values'] = array('csc' => $result['csc'], 't' => $result['t']);
  378. if($result['csc']) {
  379. C::t('common_mytask')->update($_G['uid'], $id, array('csc' => $result['csc']."\t".$_G['timestamp']));
  380. $this->messagevalues['msg'] = $result['t'] ? 'task_doing_rt' : 'task_doing';
  381. } else {
  382. $this->messagevalues['msg'] = $result['t'] ? 'task_waiting_rt' : 'task_waiting';
  383. }
  384. if($_G['inajax']) {
  385. $this->message($result['csc'], $this->messagevalues['msg'], $this->messagevalues['values']);
  386. } else {
  387. return -3;
  388. }
  389. }
  390. }
  391. function giveup($id) {
  392. global $_G;
  393. if($_GET['formhash'] != FORMHASH) {
  394. showmessage('undefined_action');
  395. } elseif(!($this->task = C::t('common_task')->fetch_by_uid($_G['uid'], $id))) {
  396. showmessage('task_nonexistence');
  397. } elseif($this->task['status'] != '0') {
  398. showmessage('task_not_underway');
  399. }
  400. C::t('common_mytask')->delete($_G['uid'], $id);
  401. C::t('common_task')->update_applicants($id, -1);
  402. }
  403. function parter($id) {
  404. $parterlist = array();
  405. foreach(C::t('common_mytask')->fetch_all_by_taskid($id, 8) as $parter) {
  406. $parter['avatar'] = avatar($parter['uid'], 'small');
  407. $csc = explode("\t", $parter['csc']);
  408. $parter['csc'] = floatval($csc[0]);
  409. $parterlist[] = $parter;
  410. }
  411. return $parterlist;
  412. }
  413. function delete($id) {
  414. global $_G;
  415. $mytask = C::t('common_mytask')->fetch($_G['uid'], $id);
  416. $this->task = C::t('common_task')->fetch($id);
  417. if($this->task['available'] != 2 || empty($mytask) || $mytask['status'] == 1) {
  418. showmessage('task_nonexistence');
  419. }
  420. if(method_exists($taskclass, 'delete')) {
  421. $taskclass->delete($this->task);
  422. }
  423. C::t('common_mytask')->delete($_G['uid'], $id);
  424. C::t('common_task')->update_applicants($id, -1);
  425. return true;
  426. }
  427. function reward() {
  428. switch($this->task['reward']) {
  429. case 'credit': return $this->reward_credit($this->task['prize'], $this->task['bonus']); break;
  430. case 'magic': return $this->reward_magic($this->task['prize'], $this->task['bonus']); break;
  431. case 'medal': return $this->reward_medal($this->task['prize'], $this->task['bonus']); break;
  432. case 'invite': return $this->reward_invite($this->task['prize'], $this->task['bonus']); break;
  433. case 'group': return $this->reward_group($this->task['prize'], $this->task['bonus']); break;
  434. }
  435. }
  436. function reward_credit($extcreditid, $credits) {
  437. global $_G;
  438. $creditsarray[$extcreditid] = $credits;
  439. updatemembercount($_G['uid'], $creditsarray, 1, 'TRC', $this->task['taskid']);
  440. }
  441. function reward_magic($magicid, $num) {
  442. global $_G;
  443. if(C::t('common_member_magic')->count($_G['uid'], $magicid)) {
  444. C::t('common_member_magic')->increase($_G['uid'], $magicid, array('num' => $num), false, true);
  445. } else {
  446. C::t('common_member_magic')->insert(array(
  447. 'uid' => $_G['uid'],
  448. 'magicid' => $magicid,
  449. 'num' => $num
  450. ));
  451. }
  452. }
  453. function reward_medal($medalid, $day) {
  454. global $_G;
  455. $memberfieldforum = C::t('common_member_field_forum')->fetch($_G['uid']);
  456. $medals = $memberfieldforum['medals'];
  457. unset($memberfieldforum);
  458. if(empty($medals) || !in_array($medalid, explode("\t", $medals))) {
  459. $medalsnew = $medals ? $medals."\t".$medalid : $medalid;
  460. C::t('common_member_field_forum')->update($_G['uid'], array('medals' => $medalsnew), 'UNBUFFERED');
  461. $data = array(
  462. 'uid' => $_G['uid'],
  463. 'medalid' => $medalid,
  464. 'type' => 0,
  465. 'dateline' => TIMESTAMP,
  466. 'expiration' => $day ? TIMESTAMP + $day * 86400 : '',
  467. 'status' => 1,
  468. );
  469. C::t('forum_medallog')->insert($data);
  470. }
  471. }
  472. function reward_invite($num, $day) {
  473. global $_G;
  474. $day = empty($day) ? 5 : $day;
  475. $expiration = $_G['timestamp'] + $day * 86400;
  476. $codes = array();
  477. for ($i=0; $i < $num; $i++) {
  478. $code = strtolower(random(6));
  479. $codes[] = "('$_G[uid]', '$code', '$_G[timestamp]', '$expiration', '$_G[clientip]')";
  480. $invitedata = array(
  481. 'uid' => $_G['uid'],
  482. 'code' => $code,
  483. 'dateline' => $_G['timestamp'],
  484. 'endtime' => $expiration,
  485. 'inviteip' => $_G['clientip']
  486. );
  487. C::t('common_invite')->insert($invitedata);
  488. }
  489. }
  490. function reward_group($gid, $day = 0) {
  491. global $_G;
  492. $exists = FALSE;
  493. if($_G['forum_extgroupids']) {
  494. $_G['forum_extgroupids'] = explode("\t", $_G['forum_extgroupids']);
  495. if(in_array($gid, $_G['forum_extgroupids'])) {
  496. $exists = TRUE;
  497. } else {
  498. $_G['forum_extgroupids'][] = $gid;
  499. }
  500. $_G['forum_extgroupids'] = implode("\t", $_G['forum_extgroupids']);
  501. } else {
  502. $_G['forum_extgroupids'] = $gid;
  503. }
  504. C::t('common_member')->update($_G['uid'], array('extgroupids' => $_G['forum_extgroupids']), 'UNBUFFERED');
  505. if($day) {
  506. $memberfieldforum = C::t('common_member_field_forum')->fetch($_G['uid']);
  507. $groupterms = !empty($memberfieldforum['groupterms']) ? dunserialize($memberfieldforum['groupterms']) : array();
  508. unset($memberfieldforum);
  509. $groupterms['ext'][$gid] = $exists && $groupterms['ext'][$gid] ? max($groupterms['ext'][$gid], TIMESTAMP + $day * 86400) : TIMESTAMP + $day * 86400;
  510. C::t('common_member_field_forum')->update($_G['uid'], array('groupterms' => serialize($groupterms)), 'UNBUFFERED');
  511. }
  512. }
  513. function message($csc, $msg, $values = array()) {
  514. include template('common/header_ajax');
  515. $msg = lang('message', $msg, $values);
  516. echo "$csc|$msg";
  517. include template('common/footer_ajax');
  518. exit;
  519. }
  520. function timeformat($t) {
  521. global $_G;
  522. if($t) {
  523. $h = floor($t / 3600);
  524. $m = floor(($t - $h * 3600) / 60);
  525. $s = floor($t - $h * 3600 - $m * 60);
  526. return ($h ? "$h{$_G['setting']['dlang'][date][4]}" : '').($m ? "$m{$_G[setting][dlang][date][6]}" : '').($h || !$s ? '' : "$s{$_G[setting][dlang][date][7]}");
  527. }
  528. return '';
  529. }
  530. }
  531. function tasktimeformat($t) {
  532. global $_G;
  533. if($t) {
  534. $h = floor($t / 3600);
  535. $m = floor(($t - $h * 3600) / 60);
  536. $s = floor($t - $h * 3600 - $m * 60);
  537. return ($h ? "$h{$_G['lang']['core']['date']['hour']}" : '').($m ? "$m{$_G['lang']['core']['date']['min']}" : '').($h || !$s ? '' : "$s{$_G['lang']['core']['date']['sec']}");
  538. }
  539. return '';
  540. }
  541. ?>