⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 task.php

📁 Discuz功能源码(开源)
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?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 + -