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

📄 viewtask.php

📁 本代码是为客户联系管理而做的系统
💻 PHP
字号:
<?php
// +-------------------------------------------------------------+
// | DeskPRO v [2.0.1 Production]
// | Copyright (C) 2001 - 2004 Headstart Solutions Limited
// | Supplied by WTN-WDYL
// | Nullified by WTN-WDYL
// | Distribution via WebForum, ForumRU and associated file dumps
// +-------------------------------------------------------------+
// | DESKPRO IS NOT FREE SOFTWARE
// +-------------------------------------------------------------+
// | License ID : Full Enterprise License =) ...
// | License Owner : WTN-WDYL Team
// +-------------------------------------------------------------+
// | $RCSfile: viewtask.php,v $
// | $Date: 2004/02/10 01:34:25 $
// | $Revision: 1.45 $
// +-------------------------------------------------------------+
// | File Details:
// | - Task details view.
// +-------------------------------------------------------------+

// This file both shows item details and handles certain edit operations
// ("muting" a task, and toggling it completed). Muting a task stops it
// repeating immediately.

error_reporting(E_ALL ^ E_NOTICE);

// start file
require("./../global.php");
require_once(INCLUDE_PATH . 'functions/calendar_functions.php');

// globalise variables
$global = array	(
			array('id'), 
			array('techid'), 
			array('date'),
			array('tasktoggle')			// ticketid
);
rg($global);

tech_nav('calendar');

// If there's no ID, complain and give up.

if (!($id = trim($id)) AND !($taskdate = trim($taskdate))) {
	mistake('No valid task ID was specified. Please try your request again.');
	exit;
}

// Fetch the taskdata

$taskdata = $db->query_return("SELECT calendar_task.*, tech.username AS techmaker_username FROM 
	calendar_task, tech WHERE calendar_task.techmaker = tech.id AND 
	calendar_task.id = '$id'");

if (!$rows = $db->num_rows()) {
	mistake("The specified task ID ($id) doesn't exist. Please try your request again.");
	exit;
}

if ($taskdata['techmaker'] != $user['id']) { // This user doesn't own the task, check permissions
	$db->query("SELECT id FROM calendar_task_tech WHERE eventid = $id AND techid = $user[id]");
	if (!$db->num_rows()) {
		mistake('You do not have permission to view this task.');
		exit;
	}
}

$start = $taskdata['startdate'];
$endd   = $taskdata['enddate'];
$endt   = $taskdata['endtime'];

// If a date was specified, we're looking at a repeat event, not its original.
// We still show the original data, but replace the enddate with the date
// specified.

if ($date) {
	$event_due = our_date(convert_date($date), 'day');
}

// First, check if we're supposed to toggle a task's completed state

if ($_REQUEST['do'] == "complete" OR $_REQUEST['do'] == "incomplete") {
	if ($_REQUEST['do'] == "complete") { $compl = 1; } else { $compl = 0; }
	if (!isset($_REQUEST['techid'])) { // If no techid is specified, the user is trying to set the complete state for *ALL* assigned techs.
		if ($taskdata['techmaker'] == $user['id']) { // If the user is the original task maker, honor the request.
			if ($date) { // If we're updating a repeating event ...
				$db->query("SELECT techid FROM calendar_task_tech WHERE eventid = $id");
				while ($res = $db->row_array()) {
					$techs[] = $res['techid'];
				}
				$db->query("DELETE FROM calendar_task_iteration WHERE taskid = $id AND date = '$date'");
				foreach ($techs as $key => $val) {
					$db->query("INSERT INTO calendar_task_iteration (task_techid, taskid, completed, date) VALUES ('$val', '$id', '$compl', '$date')");
				}
			} else {
				$db->query("UPDATE calendar_task_tech SET completed = $compl WHERE eventid = $id");
			}
			if ($taskdata['notifycompletion']) { // If the owner wants people to be mailed, start sending mail
				$db->query("SELECT techid, tech.email, tech.username FROM calendar_task_tech, tech
					WHERE calendar_task_tech.eventid = $id AND calendar_task_tech.techid = tech.id");
				while ($res = $db->row_array()) {
					$emails[$result['techid']]['username'] = $res['username'];
					$emails[$result['techid']]['email']    = $res['email'];
				}
				
				foreach ($emails as $key => $val) {
					$done = iff($compl, 'completed', 'not completed');
					$taskusername = $emails[$key]['username'];
					$taskurl = "viewtask.php?id=$id";
					$tasktitle = $taskdata['title'];
					$taskdescription = $taskdata['description'];
					$taskdone = $done;
					eval(makeemaileval('message', 'TECHBODY_task_toggled', $subject));
					dp_mail($emails[$key]['email'], $subject, $message);
				}
			}
		} else { // Otherwise, deny the request.
			mistake("You don't have the authority to set this task complete or incomplete.");
		}
	} else { // If a techid is supplied, the user is trying to set a specific user's (or his own) complete state for this task.
	    $db->query("SELECT techid FROM calendar_task_tech WHERE techid = $_REQUEST[techid] AND eventid = $id");
		if ($db->num_rows() or ($taskdata['techmaker'] == $user['id'])) { // If the user is assigned this task and is trying to change his own state, or if he's the task's creator, honor the request.
			if ($taskdata['techmaker'] == $user['id']) { // Tech owns the task; can change anybody's status
				$tid = $_REQUEST['techid'];
			} else { // Only assigned, can only change own status
				$tid = $user['id'];
			}
			if ($date) { // If we're updating a repeating event ...
				$db->query("DELETE FROM calendar_task_iteration WHERE task_techid = '$tid' AND taskid = '$id' AND date = '$date'");
				$db->query("REPLACE INTO calendar_task_iteration (task_techid, taskid, completed, date) VALUES ('$tid', '$id', '$compl', '$date')");
			} else {
				$db->query("UPDATE calendar_task_tech SET completed = '$compl' WHERE eventid = '$id' AND techid = '$tid'");
			}	

			$db->query("SELECT id, username, email FROM tech WHERE id = '$taskdata[techmaker]' or id = '$user[id]'");
			while ($result = $db->row_array()) {
				$emails[$result['id']]['username'] 	= $result['username'];
				$emails[$result['id']]['email'] 	= $result['email'];
			}

			if (($taskdata['techmaker'] != $user['id']) && $taskdata['notifycompletion']) { // If the user doesn't own the task but is assigned to it and if the owner wants notification, send it
				$taskusername = $emails[$user['id']]['username'];
				$taskurl = "viewtask.php?id=$id";
				$tasktitle = $_REQUEST['title'];
				$taskdescription = $_REQUEST['description'];
				$taskdone = $done;
				eval(makeemaileval('message', 'TECHBODY_task_toggled', $subject));
				dp_mail($emails[$taskdata['techmaker']]['email'], $subject, $message);
			}
		} else { // Otherwise, deny the request.
				mistake("You don't have the authority to set this task complete or incomplete.");
		}
	}
}

if ($_REQUEST['do'] == "mute") {
	$date = $_REQUEST['date'];
	$assigned = $db->query_return_array_id("SELECT techid FROM calendar_task_tech WHERE eventid = $id", 'techid');
	if ($taskdata['techmaker'] == $user['id']) {
		// If the user owns the task, nuke all assigned tech's occurrences of it on this date
		$db->query("DELETE FROM calendar_task_iteration WHERE date = '$date' AND taskid = '$id'");
		foreach ($assigned AS $assigned_tech) {
			$db->query("INSERT INTO calendar_task_iteration SET
				task_techid = '$assigned_tech',
				taskid = '$id',
				completed = '-1',
				date = '$date'"
			);
		jump("viewtask.php?id=$id", 'Occurrence deleted. Viewing original event.');
		exit;
		};
	} elseif ($db->num_rows()) { 
		// If the user is assigned to the task, nuke his own occurrence but no one else's
		$db->query("DELETE FROM calendar_task_iteration WHERE date = '$date' AND taskid = '$id' AND task_techid = '$user[id]'");
		$db->query("INSERT INTO calendar_task_iteration SET 
			task_techid = '$user[id]',
			taskid = '$id',
			completed = '-1',
			date = '$date'"
		);
		jump("viewtask.php?id=$id", 'Occurrence deleted. Viewing original event.');
		exit;
	} else {
		mistake("You don't have permission to edit this task.");
	}
}
		
// Fetch the techs assigned to this task

$db->query("SELECT email_due, email_before1, email_before2, techid, 
	tech.username, completed FROM calendar_task_tech, tech where 
	calendar_task_tech.techid = tech.id and 
	calendar_task_tech.eventid = $id GROUP BY techid");

if (!$rows = $db->num_rows()) {
	mistake('There are no technicians assigned to this task. Please try your request again.');
}

$taskassigns = array();
while ($result = $db->row_array()) {
	$taskassigns[] = $result;
}

$detailstable[] = array($taskdata['description']);

// Prepare the list of assigned techs

$techstable = array();

$techstable[] = array('<B>Technician</B>',
	'<B>Reminder Emails</B>',
	'<B>Completed?</B>');

if ($date) {
	$db->query("SELECT * FROM calendar_task_iteration WHERE taskid = $id AND date = '$date'");
	while ($result = $db->row_array()) {
		$date_results[$result['task_techid']] = $result;
	}
}

foreach($taskassigns AS $assign) {
	if ($date) {
		if ($date_results[$assign['techid']]['completed']) { 
			$assign[completed] = "Yes";
			$taskdo = "incomplete";
		} else {
			$assign[completed] = "No";
			$taskdo = "complete";
		}
	} else {
		if ($assign[completed]) { 
			$assign[completed] = "Yes";
			$taskdo = "incomplete";
		} else {
			$assign[completed] = "No";
			$taskdo = "complete";
		}
	}

	$emails = 0;
	$mails = '';

	if ($assign['email_due']) {
		$mails = "On due date";
		$emails++;
	}

	if ($assign['email_before1']) {
		if ($emails) {
			$mails .= ", and $assign[email_before1] day(s) prior";
		} else {
			$mails = "$assign[email_before1] day(s) prior";
		}

		$emails++;
	}

	if (($assign['email_before2']) AND ($assign['email_before2'] != $assign['email_before1'])) {
		if ($emails) {
			$mails .= ", and $assign[email_before2] day(s) prior";
		} else {
			$mails = "$assign[email_before2] day(s) prior";
		}
	}

	if ($date) { // FOOO
		if ($taskdata['techmaker'] == $user['id'] OR ($assign[techid] == $user['id'])) {
			$url = "<A HREF=\"viewtask.php?do=$taskdo&id=$id&techid=$assign[techid]&date=$date\">$assign[completed]</A>";
		} else {
			$url = $assign[completed];
		}
	} else {
		if ($taskdata['techmaker'] == $user['id'] OR ($assign[techid] == $user['id'])) {
			$url = "<A HREF=\"viewtask.php?do=$taskdo&id=$id&techid=$assign[techid]\">$assign[completed]</A>";
		} else {
			$url = $assign[completed];
		}
	}
	$techstable[] = array($assign[username], $mails, $url);

	if ($assign['techid'] == $user['id']) { $showall++; }
	$techs++;
}

if ($taskdata['enddate'] == "0000-00-00") {
	$taskdata['enddate'] = "<I>N/A</I>";
} else {
	$taskdata['enddate'] = convert_date($taskdata['enddate']);
	$taskdata['enddate'] = our_date($taskdata['enddate'], 'day');
}

if ($taskdata['endtime'] AND ($taskdata['endtime'] != '00:00:00')) {
	$taskdata['endtime'] = time_ampm($taskdata['endtime']);
} else {
	$taskdata['endtime'] = '';
}

if ($taskdata['multistaff']) {
	$taskdata['multistaff'] = "Yes ($rows techs)";
} else {
	$taskdata['multistaff'] = "No";
}

foreach($taskassigns AS $key) {
	if ($date) {
		$completed += $date_results[$key['techid']]['completed'];
	} else {
		$completed += $key['completed']; 
	}
}

if ($taskdata['globalcomplete']) {
	$taskdata['globalcomplete'] = "No";
	if ($completed) {
		$taskdata['completed'] = "Yes";
	} else {
		$taskdata['completed'] = "No";
	}
} else {
	$taskdata['globalcomplete'] = "Yes";
	if ($completed == $rows) {
		$taskdata['completed'] = "Yes";
		$taskdo = "incomplete";
	} else {
		$taskdata['completed'] = "No";
		$taskdo = "complete";
	}
}

$taskdata['startdate'] = convert_date($taskdata['startdate']);

if (isset($taskdata['starttime'])) {
	$starttime = time_ampm($taskdata['starttime']);
	$startdate = our_date($taskdata['startdate'], 'day') . " $starttime";
} else {
	$startdate = our_date($taskdata['startdate'], 'day');
}

if ($showall AND ($techs > 1)) {
	if ($taskdata['techmaker'] == $user['id']) {
		$url = jprompt(
			'This will update the completion status for all assigned techs.',
			"viewtask.php?do=$taskdo&id=$id&date=$date",
			$taskdata[completed]
		);
	} else {
		$url = $taskdata[completed];
	}
} else {
	if ($taskdata['techmaker'] == $user['id']) {
		$url = "<A HREF=\"viewtask.php?do=$taskdo&id=$id&date=$date\">$taskdata[completed]</A>";
	} else {
		$url = $taskdata[completed];
	}
}

if ($date AND (our_date($date) != $startdate)) {
	$orig = "(<A HREF=\"viewtask.php?id=$id\">View Original Event</A>) (<A HREF=\"viewtask.php?do=mute&id=$id&date=$date\">Hide This Occurrence</A>)";
} else {
	$orig = '';
}

$reptype = repeat_type_text($taskdata['repeattype'], $taskdata['value1'], $taskdata['value2']);

// Prepare the details table

if ($reptype == "No") {
	$repdetail = NULL;
	$repends = NULL;
} else {
	$repdetail = "<B>Repeat</B> $orig<BR>$reptype&nbsp;<A HREF=\"index.php?search=1&taskid=$taskdata[id]\">View All</A>";
	$repends = "<B>Repeat Ends</B><BR>$taskdata[enddate] $taskdata[endtime]";
}

if ($taskdata['techmaker'] == $user['id']) {
	$url2 = "<A HREF=\"edit.php?id=$taskdata[id]\">Edit</A>";
}

if ($showall AND ($techs > 1)) {
	$tmp = array("<B>Due Date</B><BR>$startdate", $repdetail, $repends,
		"<B>Creator</B><BR>$taskdata[techmaker_username]",
		"<B>Multiple Techs</B><BR>$taskdata[multistaff]",
		"<B>Everyone Must Finish</B><BR>$taskdata[globalcomplete]",
		"<B>Complete</B><BR>$url");
	if ($url2) {
		$tmp[] = $url2;
	}
	$detailstable[] = $tmp;
} else {
	$tmp = array("<B>Start Date</B><BR>$startdate", $repdetail, $repends,
		"<B>Complete</B><BR>$url");
	if ($url2) {
		$tmp[] = $url2;
	}
	$detailstable[] = $tmp;
}

if ($event_due) {
	$detailstable[1][] = "<B>This Item Due</B><BR>$event_due";
}

// Emit the details table

table_header("Task: $taskdata[title] (#$taskdata[id])");
table_content('', $detailstable, '', '', '', '', $width);
table_footer();

// Emit the technicians list if appropriate

if ($showall AND ($techs > 1)) {
	table_header("Technicians Assigned to This Task:");
	table_content('', $techstable, '', '', '', '', $width);
	table_footer();
}

tech_footer();
?>

⌨️ 快捷键说明

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