📄 task.php
字号:
<?php
/*
[Discuz!] (C)2001-2009 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: task.php 13890 2008-07-08 02:21:38Z liuqiang $
*/
define('NOROBOT', TRUE);
require_once './include/common.inc.php';
if(!$taskon && $adminid != 1) {
showmessage('task_close');
}
$discuz_action = 180;
$id = intval($id);
if(empty($action)) {
$multipage = '';
$page = max(1, intval($page));
$start_limit = ($page - 1) * $tpp;
$tasklist = $endtaskids = $magics = $magicids = $medals = $medalids = $groups = $groupids = array();
switch($item) {
case 'doing':
$sql = "mt.status='0'";
break;
case 'done':
$sql = "mt.status='1'";
break;
case 'failed':
$sql = "mt.status='-1'";
break;
default:
$item = 'new';
$sql = "(mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0 AND $timestamp-mt.dateline>=t.period*3600))";
break;
}
$num = $db->result_first("SELECT COUNT(*) FROM {$tablepre}tasks t
LEFT JOIN {$tablepre}mytasks mt ON mt.taskid=t.taskid AND mt.uid='$discuz_uid'
WHERE $sql AND t.available='2'");
if($num) {
$updated = FALSE;
$multipage = multi($num, $tpp, $page, "task.php?item=$item");
$query = $db->query("SELECT t.*, mt.csc, mt.dateline FROM {$tablepre}tasks t
LEFT JOIN {$tablepre}mytasks mt ON mt.taskid=t.taskid AND mt.uid='$discuz_uid'
WHERE $sql AND t.available='2' ORDER BY displayorder, taskid DESC LIMIT $start_limit, $tpp");
while($task = $db->fetch_array($query)) {
if($task['reward'] == 'magic') {
$magicids[] = $task['prize'];
} elseif($task['reward'] == 'medal') {
$medalids[] = $task['prize'];
} elseif($task['reward'] == 'group') {
$groupids[] = $task['prize'];
}
if($task['available'] == '2' && ($task['starttime'] > $timestamp || ($task['endtime'] && $task['endtime'] <= $timestamp))) {
$endtaskids[] = $task['taskid'];
}
$csc = explode("\t", $task['csc']);
$task['csc'] = floatval($csc[0]);
$task['lastupdate'] = intval($csc[1]);
if(!$updated && $item == 'doing' && $task['csc'] < 100 && $timestamp - $task['lastupdate'] > 60) {
$updated = TRUE;
require_once DISCUZ_ROOT.'./include/tasks/'.$task['scriptname'].'.inc.php';
$task['applytime'] = $task['dateline'];
$result = task_csc($task);
if($result === TRUE) {
$task['csc'] = '100';
$db->query("UPDATE {$tablepre}mytasks SET csc='100' WHERE uid='$discuz_uid' AND taskid='$task[taskid]'");
} elseif($result === FALSE) {
$db->query("UPDATE {$tablepre}mytasks SET status='-1' WHERE uid='$discuz_uid' AND taskid='$task[taskid]'", 'UNBUFFERED');
} else {
$task['csc'] = floatval($result['csc']);
$db->query("UPDATE {$tablepre}mytasks SET csc='$task[csc]\t$timestamp' WHERE uid='$discuz_uid' AND taskid='$task[taskid]'", 'UNBUFFERED');
}
}
if(in_array($item, array('done', 'failed')) && $task['period']) {
$task['t'] = tasktimeformat($task['period'] * 3600 - $timestamp + $task['dateline']);
$task['allowapply'] = $timestamp - $task['dateline'] >= $task['period'] * 3600 ? 1 : 0;
}
$task['description'] = cutstr(strip_tags($task['description']), 120);
$task['icon'] = $task['icon'] ? $task['icon'] : 'task.gif';
$task['icon'] = strtolower(substr($task['icon'], 0, 7)) == 'http://' ? $task['icon'] : "images/tasks/$task[icon]";
$task['dateline'] = $task['dateline'] ? dgmdate("$dateformat $timeformat", $task['dateline'] + $timeoffset * 3600) : '';
$tasklist[] = $task;
}
}
if($magicids) {
$query = $db->query("SELECT magicid, name FROM {$tablepre}magics WHERE magicid IN (".implodeids($magicids).")");
while($magic = $db->fetch_array($query)) {
$magics[$magic['magicid']] = $magic['name'];
}
}
if($medalids) {
$query = $db->query("SELECT medalid, name FROM {$tablepre}medals WHERE medalid IN (".implodeids($medalids).")");
while($medal = $db->fetch_array($query)) {
$medals[$medal['medalid']] = $medal['name'];
}
}
if($groupids) {
$query = $db->query("SELECT groupid, grouptitle FROM {$tablepre}usergroups WHERE groupid IN (".implodeids($groupids).")");
while($group = $db->fetch_array($query)) {
$groups[$group['groupid']] = $group['grouptitle'];
}
}
if($item == 'doing' && ($doingtask xor $num)) {
if($num) {
$db->query("UPDATE {$tablepre}members SET prompt=prompt|2 WHERE uid='$discuz_uid'", 'UNBUFFERED');
} else {
$db->query("UPDATE {$tablepre}members SET prompt=prompt^2 WHERE uid='$discuz_uid' AND prompt=prompt|2", 'UNBUFFERED');
}
}
if($endtaskids) {
$db->query("UPDATE {$tablepre}tasks SET available='1' WHERE taskid IN (".implodeids($endtaskids).")", 'UNBUFFERED');
}
} elseif($action == 'view' && $id) {
if(!$task = $db->fetch_first("SELECT t.*, mt.status, mt.csc, mt.dateline, mt.dateline AS applytime FROM {$tablepre}tasks t LEFT JOIN {$tablepre}mytasks mt ON mt.uid='$discuz_uid' AND mt.taskid=t.taskid WHERE t.taskid='$id' AND t.available='2'")) {
showmessage('undefined_action');
}
if($task['reward'] == 'magic') {
$magicname = $db->result_first("SELECT name FROM {$tablepre}magics WHERE magicid='$task[prize]'");
} elseif($task['reward'] == 'medal') {
$medalname = $db->result_first("SELECT name FROM {$tablepre}medals WHERE medalid='$task[prize]'");
} elseif($task['reward'] == 'group') {
$grouptitle = $db->result_first("SELECT grouptitle FROM {$tablepre}usergroups WHERE groupid='$task[prize]'");
}
$task['icon'] = $task['icon'] ? $task['icon'] : 'task.gif';
$task['icon'] = strtolower(substr($task['icon'], 0, 7)) == 'http://' ? $task['icon'] : "images/tasks/$task[icon]";
$task['endtime'] = $task['endtime'] ? dgmdate("$dateformat $timeformat", $task['endtime'] + $timeoffset * 3600) : '';
$task['description'] = nl2br($task['description']);
$taskvars = array();
$query = $db->query("SELECT sort, name, description, variable, value FROM {$tablepre}taskvars WHERE taskid='$id'");
while($taskvar = $db->fetch_array($query)) {
if(!$taskvar['variable'] || $taskvar['value']) {
if(!$taskvar['variable']) {
$taskvar['value'] = $taskvar['description'];
} elseif($taskvar['variable'] == 'forumid') {
require_once DISCUZ_ROOT.'./forumdata/cache/cache_forums.php';
} elseif($taskvar['variable'] == 'threadid') {
$subject = $db->result_first("SELECT subject FROM {$tablepre}threads WHERE tid='$taskvar[value]'");
$subject = $subject ? $subject : "TID $taskvar[value]";
} elseif($taskvar['variable'] == 'authorid') {
$author = $db->result_first("SELECT username FROM {$tablepre}members WHERE uid='$taskvar[value]'");
$author = $author ? $author : "TID $taskvar[value]";
}
if($taskvar['sort'] == 'apply') {
$taskvars['apply'][] = $taskvar;
} elseif($taskvar['sort'] == 'complete') {
$taskvars['complete'][$taskvar['variable']] = $taskvar;
}
}
}
$grouprequired = $comma = '';
$task['applyperm'] = $task['applyperm'] == 'all' ? '' : $task['applyperm'];
if(!in_array($task['applyperm'], array('', 'member', 'admin'))) {
$query = $db->query("SELECT grouptitle FROM {$tablepre}usergroups WHERE groupid IN (".str_replace("\t", ',', $task['applyperm']).")");
while($group = $db->fetch_array($query)) {
$grouprequired .= $comma.$group[grouptitle];
$comma = ', ';
}
}
if($task['relatedtaskid']) {
$taskrequired = $db->result_first("SELECT name FROM {$tablepre}tasks WHERE taskid='$task[relatedtaskid]'");
}
if($task['status'] == '-1') {
if($task['period']) {
$allowapply = $timestamp - $task['dateline'] >= $task['period'] * 3600 ? 3 : -7;
$task['t'] = tasktimeformat($task['period'] * 3600 - $timestamp + $task['dateline']);
} else {
$allowapply = -4;
}
} elseif($task['status'] == '0') {
$allowapply = -1;
$csc = explode("\t", $task['csc']);
$task['csc'] = floatval($csc[0]);
$task['lastupdate'] = intval($csc[1]);
if($task['csc'] < 100 && $timestamp - $task['lastupdate'] > 60) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -