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

📄 task.php

📁 Discuz功能源码(开源)
💻 PHP
📖 第 1 页 / 共 2 页
字号:
			require_once DISCUZ_ROOT.'./include/tasks/'.$task['scriptname'].'.inc.php';
			$result = task_csc($task);
			if($result === TRUE) {
				$task['csc'] = '100';
				$db->query("UPDATE {$tablepre}mytasks SET csc='100' WHERE uid='$discuz_uid' AND taskid='$id'");
			} elseif($result === FALSE) {
				$db->query("UPDATE {$tablepre}mytasks SET status='-1' WHERE uid='$discuz_uid' AND taskid='$id'", 'UNBUFFERED');
				dheader("Location: task.php?action=view&id=$id");
			} else {
				$task['csc'] = floatval($result['csc']);
				$db->query("UPDATE {$tablepre}mytasks SET csc='$task[csc]\t$timestamp' WHERE uid='$discuz_uid' AND taskid='$id'", 'UNBUFFERED');
			}
		}
	} elseif($task['status'] == '1') {
		if($task['period']) {
			$allowapply = $timestamp - $task['dateline'] >= $task['period'] * 3600 ? 2 : -6;
			$task['t'] = tasktimeformat($task['period'] * 3600 - $timestamp + $task['dateline']);
		} else {
			$allowapply = -5;
		}
	} else {
		$allowapply = 1;
	}

	if($allowapply > 0) {
		if($task['applyperm'] && $task['applyperm'] != 'all' && !(($task['applyperm'] == 'member' && $adminid == '0') || ($task['applyperm'] == 'admin' && $adminid > '0') || forumperm($task['applyperm']))) {
			$allowapply = -2;
		} elseif($task['tasklimits'] && $task['achievers'] >= $task['tasklimits']) {
			$allowapply = -3;
		}
	}

	$task['dateline'] = dgmdate("$dateformat $timeformat", $task['dateline'] + $timeoffset * 3600);

} elseif($action == 'apply' && $id) {

	if(!$discuz_uid) {
		showmessage('not_loggedin', NULL, 'NOPERM');
	}

	if(!$task = $db->fetch_first("SELECT * FROM {$tablepre}tasks WHERE taskid='$id' AND available='2'")) {
		showmessage('task_nonexistence', NULL, 'HALTED');
	} elseif(($task['starttime'] && $task['starttime'] > $timestamp) || ($task['endtime'] && $task['endtime'] <= $timestamp)) {
		showmessage('task_offline', NULL, 'HALTED');
	} elseif($task['tasklimits'] && $task['achievers'] >= $task['tasklimits']) {
		showmessage('task_full', NULL, 'HALTED');
	}

	if($task['relatedtaskid'] && !$db->result_first("SELECT COUNT(*) FROM {$tablepre}mytasks WHERE uid='$discuz_uid' AND taskid='$task[relatedtaskid]' AND status='1'")) {
		showmessage('task_relatedtask', 'task.php?action=view&id='.$task['relatedtaskid']);
	} elseif($task['applyperm'] && $task['applyperm'] != 'all' && !(($task['applyperm'] == 'member' && $adminid == '0') || ($task['applyperm'] == 'admin' && $adminid > '0') || forumperm($task['applyperm']))) {
		showmessage('task_grouplimit', 'task.php?item=new');
	} else {

		if(!$task['period'] && $db->result_first("SELECT COUNT(*) FROM {$tablepre}mytasks WHERE uid='$discuz_uid' AND taskid='$id'")) {
			showmessage('task_duplicate', 'task.php?item=new');
		} elseif($task['period'] && $db->result_first("SELECT COUNT(*) FROM {$tablepre}mytasks WHERE uid='$discuz_uid' AND taskid='$id' AND dateline>=$timestamp-$task[period]*3600")) {
			showmessage('task_nextperiod', 'task.php?item=new');
		}
	}

	require_once DISCUZ_ROOT.'./include/task.func.php';
	task_apply($task);

	showmessage('task_applied', "task.php?action=view&id=$id");

} elseif($action == 'draw' && $id) {

	if(!$discuz_uid) {
		showmessage('not_loggedin', NULL, 'NOPERM');
	}

	if(!$task = $db->fetch_first("SELECT t.*, mt.dateline AS applytime, mt.status FROM {$tablepre}tasks t, {$tablepre}mytasks mt WHERE mt.uid='$discuz_uid' AND mt.taskid=t.taskid AND t.taskid='$id' AND t.available='2'")) {
		showmessage('task_nonexistence', NULL, 'HALTED');
	} elseif($task['status'] != 0) {
		showmessage('undefined_action', NULL, 'HALTED');
	} elseif($task['tasklimits'] && $task['achievers'] >= $task['tasklimits']) {
		showmessage('task_up_to_limit', 'task.php');
	}

	require_once DISCUZ_ROOT.'./include/tasks/'.$task['scriptname'].'.inc.php';
	$result = task_csc($task);
	if($result === TRUE) {

		if($task['reward']) {
			require_once DISCUZ_ROOT.'./include/task.func.php';
			$rewards = task_reward($task);
			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]'");
			}
			sendpm($discuz_uid, 'task_reward_subject', 'task_reward_'.$task['reward'].'_message', 0);
		}

		task_sufprocess();

		$db->query("UPDATE {$tablepre}mytasks SET status='1', csc='100', dateline='$timestamp' WHERE uid='$discuz_uid' AND taskid='$id'");
		$db->query("UPDATE {$tablepre}tasks SET achievers=achievers+1 WHERE taskid='$id'", 'UNBUFFERED');

		if(!$db->result_first("SELECT COUNT(*) FROM {$tablepre}mytasks WHERE uid='$discuz_uid' AND status='0'")) {
			$db->query("UPDATE {$tablepre}members SET prompt=prompt^2 WHERE uid='$discuz_uid' AND prompt=prompt|2", 'UNBUFFERED');
		}

		if($inajax) {
			taskmessage('100', $task['reward'] ? 'task_reward_'.$task['reward'] : 'task_completed');
		} else {
			showmessage('task_completed', 'task.php?item=done');
		}

	} elseif($result === FALSE) {

		$db->query("UPDATE {$tablepre}mytasks SET status='-1' WHERE uid='$discuz_uid' AND taskid='$id'", 'UNBUFFERED');
		$inajax ? taskmessage('-1', 'task_failed') : showmessage('task_failed', 'task.php?item=failed');

	} else {

		$result['t'] = tasktimeformat($result['remaintime']);
		if($result['csc']) {
			$db->query("UPDATE {$tablepre}mytasks SET csc='$result[csc]\t$timestamp' WHERE uid='$discuz_uid' AND taskid='$id'", 'UNBUFFERED');
			$msg = $result['t'] ? 'task_doing_rt' : 'task_doing';
			$inajax ? taskmessage($result['csc'], $msg) : showmessage($msg, "task.php?action=view&id=$id");
		} else {
			$msg = $result['t'] ? 'task_waiting_rt' : 'task_waiting';
			$inajax ? taskmessage('0', $msg) : showmessage($msg, "task.php?action=view&id=$id");
		}

	}

} elseif($action == 'giveup' && $id && !empty($formhash)) {

	if($formhash != FORMHASH) {
		showmessage('undefined_action', NULL, 'HALTED');
	} elseif(!$task = $db->fetch_first("SELECT t.taskid, mt.status FROM {$tablepre}tasks t LEFT JOIN {$tablepre}mytasks mt ON mt.taskid=t.taskid AND mt.uid='$discuz_uid' WHERE t.taskid='$id' AND t.available='2'")) {
		showmessage('task_nonexistence', NULL, 'HALTED');
	} elseif($task['status'] != '0') {
		showmessage('undefined_action');
	}

	$db->query("DELETE FROM {$tablepre}mytasks WHERE uid='$discuz_uid' AND taskid='$id'", 'UNBUFFERED');
	$db->query("UPDATE {$tablepre}tasks SET applicants=applicants-1 WHERE taskid='$id'", 'UNBUFFERED');

	if(!$db->result_first("SELECT COUNT(*) FROM {$tablepre}mytasks WHERE uid='$discuz_uid' AND status='0'")) {
		$db->query("UPDATE {$tablepre}members SET prompt=prompt^2 WHERE uid='$discuz_uid' AND prompt=prompt|2", 'UNBUFFERED');
	}

	showmessage('task_giveup', "task.php?item=view&id=$id");

} elseif($action == 'parter' && $id) {

	$query = $db->query("SELECT * FROM {$tablepre}mytasks WHERE taskid='$id' ORDER BY dateline DESC LIMIT 0, 8");
	while($parter = $db->fetch_array($query)) {
		$parter['avatar'] = discuz_uc_avatar($parter['uid'], 'small');
		$csc = explode("\t", $parter['csc']);
		$parter['csc'] = floatval($csc[0]);
		$parterlist[] = $parter;
	}

	include template('task_parter');
	dexit();

} else {

	showmessage('undefined_action', NULL, 'HALTED');

}

include template('task');

function taskmessage($csc, $msg) {
	extract($GLOBALS, EXTR_SKIP);
	include_once language('messages');
	include template('header_ajax');
	eval("\$msg = \"$language[$msg]\";");
	echo "$csc|$msg";
	include template('footer_ajax');
	exit;
}

function tasktimeformat($t) {
	global $dlang;

	if($t) {
		$h = floor($t / 3600);
		$m = floor(($t - $h * 3600) / 60);
		$s = floor($t - $h * 3600 - $m * 60);
		return ($h ? "$h{$dlang[date][4]}" : '').($m ? "$m{$dlang[date][6]}" : '').($h || !$s ? '' : "$s{$dlang[date][7]}");
	}
	return '';
}

?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -