<?PHP
/*-----------------------------------------------------------------------**
---------------------------------------------------------------------------
IPM (Incyte Project Manager)
PHP based project tracking tool
Copyright (c) 2001 by phlux
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
---------------------------------------------------------------------------
**-----------------------------------------------------------------------*/
function userdetails($id) {
// This function gives a limited summary for all of a user's
// projects and tasks.
dbconnect();
include ("config.php");
include ("admin-header.php");
global $PHP_SELF;
$query = "SELECT * FROM IPM_users WHERE id='$id'";
$result = mysql_query($query);
$query2 = "SELECT id FROM IPM_tasks WHERE person='$id' AND status='1' GROUP BY 'id'";
$result2 = mysql_query($query2);
$project_total = mysql_num_rows($result2);
$query3 = "SELECT id FROM IPM_tasks WHERE person='$id' AND status='1'";
$result3 = mysql_query($query3);
$task_total = mysql_num_rows($result3);
while ($userinfo = mysql_fetch_array($result)){
if ($userinfo[role] == "1") {
$role = "Administrator";
} else {
$role = "General User";
}
?>
<table width=50% border=1 bordercolor=black align=center cellpadding=4 cellspacing=0>
<tr valign=top>
<td class=header colspan=2>
User Details for <b><?=$userinfo[firstname]?> <?=$userinfo[lastname]?></b>
</td>
</tr>
<tr valign=top>
<td class=darker width=38% align=right>
Username: <br>
Role: <br>
Email Address: <br>
Total Active Projects: <br>
Total Open Tasks: <br>
</td>
<td class=lighter width=62% align=left>
<b><?=$userinfo[username]?></b><br>
<b><?=$role?></b><br>
<a href=mailto:<?=$userinfo[email]?>><?=$userinfo[email]?></b></a><br>
<b><?=$project_total?></b><br>
<b><?=$task_total?></b><br>
</td>
</tr>
</table>
<?
}
}
function adduser($code) {
// Function to add a new user to the IPM system.
dbconnect();
include ("config.php");
include ("admin-header.php");
global $PHP_SELF, $HTTP_POST_VARS;
if (isset($code)) {
switch ($code) {
case "add2":
message("Blank Password or Passwords did not match. User was not added.");
break;
case "add3":
message("That username is already in use. You will need to choose a different username.");
break;
}
}
?>
<form action=<?=$PHP_SELF?> method=post>
<table align=center border=0 cellspacing=0 cellpadding=2 bgcolor=$tablebg2 width=50%>
<tr valign=top>
<td colspan=2 class=header align=center>
<b>Adding New User</b>
</td>
</tr>
<tr>
<td width=38% class=darker align=right>
<b>First Name: </b>
</td>
<td width=62% class=lighter>
<input type=text name=firstname value="<?=$HTTP_POST_VARS[firstname]?>">
</td>
</tr>
<tr>
<td class=darker align=right>
<b>Last Name: </b>
</td>
<td class=lighter>
<input type=text name=lastname value="<?=$HTTP_POST_VARS[lastname]?>">
</td>
</tr>
<tr>
<td class=darker align=right>
<b>Username: </b>
</td>
<td class=lighter>
<input type=text name=username value="<?=$HTTP_POST_VARS[username]?>">
</td>
</tr>
<tr>
<td class=darker align=right>
<b>Password: </b>
</td>
<td class=lighter>
<input name=pass1 size=12 type=password value="<?=$HTTP_POST_VARS[pass1]?>"> <input name=pass2 type=password size=12 value="<?=$HTTP_POST_VARS[pass2]?>">
<br>Password must be entered twice.
</td>
</tr>
<tr>
<td class=darker align=right><b>
<b>Email Address: </b>
</td>
<td class=lighter>
<input name=email type=text value="<?=$HTTP_POST_VARS[email]?>">
</td>
</tr>
<tr>
<td class=darker align=right>
<b>Role: </b>
</td>
<td class=lighter>
<select name=role>
<option value=0 selected>General User</option>
<option value=1>Administrator</option>
</select>
</td>
</tr>
<tr>
<td class=header align=center colspan=2>
<input type=submit value="Add User">
</td>
</tr>
</table>
<input type=hidden name=op value=adduseraction>
</form>
<? include ("footer.php");
}
function adduseraction($firstname, $lastname, $username, $pass1, $pass2, $email, $role) {
// Insert the new user in the DB
// MD5 support added by Luis Arias (luis@elysia.com)
dbconnect();
global $PHP_SELF;
$query="SELECT id FROM IPM_users WHERE username='$username'";
$result=mysql_query($query);
// see if username already exists on the system
if (mysql_num_rows($result) > 0) {
$code="add3";
adduser($code);
} else {
if (($pass1 != "") && ($pass1 == $pass2)) {
$query="INSERT INTO IPM_users VALUES (NULL,'$username','".md5($pass1)."','$firstname','$lastname','$email','$role')";
if (mysql_query($query)) {
$code="add1";
} else {
$code="add0";
}
userlist($code);
} else {
$code="add2";
adduser($code);
}
}
}
function edituseraction($id, $firstname, $lastname, $username, $pass1, $pass2, $email, $role) {
// Edit the user in the DB
dbconnect();
global $PHP_SELF;
$query="SELECT id FROM IPM_users WHERE username='$username'";
$result=mysql_query($query);
// see if username already exists on the system
if ($name=mysql_fetch_row($result)) {
if ($name[0] != $id) {
edituser($id, "edit3");
} else {
if ($pass1 && $pass2) {
if ($pass1 == $pass2) {
$query="update IPM_users SET username='$username', password='".md5($pass1)."', firstname='$firstname', lastname='$lastname', role='$role', email='$email' where id='$id'";
$result=mysql_query($query);
if ($result) {
$code="edit1";
} else {
$code="edit0";
}
userlist($code);
return;
} else {
$code="edit2";
edituser($id, $code);
return;
}
} else {
$query="update IPM_users SET username='$username', firstname='$firstname', lastname='$lastname', role='$role', email='$email' where id='$id'";
$result=mysql_query($query);
if ($result) {
$code="edit1";
} else {
$code="edit0";
}
userlist($code);
return;
}
}
}
}
function edituser($id, $code) {
// Build form for editing users
dbconnect();
include ("config.php");
include ("admin-header.php");
global $PHP_SELF, $HTTP_POST_VARS;
if (isset($code)) {
switch ($code) {
case "edit2":
message("Blank Password or Passwords did not match. User was not updated.");
break;
case "edit3":
message("That username is already in use. You will need to choose a different username.");
break;
}
}
$query="SELECT * FROM IPM_users WHERE id='$id'";
$result=mysql_query($query);
while ($list=mysql_fetch_array($result)) {
?>
<form action=<?=$PHP_SELF?> method=post>
<input type=hidden name=op value=edituseraction>
<input type=hidden name=id value="<?=$id?>">
<table align=center border=0 cellspacing=0 cellpadding=2 bgcolor=$tablebg2 width=50%>
<tr valign=top>
<td colspan=2 class=header align=center>
<b>Editing User: <?=$list[username]?></b>
</td>
</tr>
<tr>
<td width=38% class=darker align=right>
<b>First Name: </b>
</td>
<td width=62% class=lighter>
<input type=text name=firstname value="<?=$list[firstname]?>">
</td>
</tr>
<tr>
<td class=darker align=right>
<b>Last Name: </b>
</td>
<td class=lighter>
<input type=text name=lastname value="<?=$list[lastname]?>">
</td>
</tr>
<tr>
<td class=darker align=right>
<b>Username: </b>
</td>
<td class=lighter>
<input type=text name=username value="<?=$list[username]?>">
</td>
</tr>
<tr>
<td class=darker align=right>
<b>Update Password: </b>
</td>
<td class=lighter>
<input name=pass1 size=12 type=password value="<?=$HTTP_POST_VARS[pass1]?>"> <input name=pass2 type=password size=12 value="<?=$HTTP_POST_VARS[pass2]?>">
<br>Password must be entered twice.<br>ONLY ENTER PASSWORD IF YOU WANT TO CHANGE IT!
</td>
</tr>
<tr>
<td class=darker align=right><b>
<b>Email Address: </b>
</td>
<td class=lighter>
<input name=email type=text value="<?=$list[email]?>">
</td>
</tr>
<tr>
<td class=darker align=right>
<b>Role: </b>
</td>
<td class=lighter>
<select name=role>
<? if ($list[role] == "1") {
echo "<option value=1 selected>Administrator</option>";
} else {
echo "<option value=0 selected>General User</option>";
}?>
<option value="<?=$list[role]?>">----------</option>
<option value=0>General User</option>
<option value=1>Administrator</option>
</select>
</td>
</tr>
<tr>
<td class=header align=center colspan=2>
<input type=submit value="Update User">
</td>
</tr>
</table>
</form>
<?
}
include ("footer.php");
}
function confirmdeleteuser($id) {
// Makes sure you REALLY want to delete someone
dbconnect();
$query = "SELECT * FROM IPM_users WHERE id=$id";
$result = mysql_query($query);
$list = mysql_fetch_array($result);
include ("config.php");
include ("admin-header.php");
global $PHP_SELF;
?>
<table align=center width=70% border=1 bordercolor=black cellspacing=0 cellpadding=4>
<tr>
<td class=header align=center>
Are you sure you want to delete <b><?=$list[firstname]?> <?=$list[lastname]?></b>?
</td>
</tr>
<tr>
<td align=center class=importantmessage>
ALL OF THE USER'S PREFERENCES WILL BE DELETED <br><b>THIS WILL CAUSE ERRORS IF THE DELETED USER IS STILL ASSIGNED TO TASKS!</b>
</td>
</tr>
<tr>
<td align=center class=message>
<a href=<?=$PHP_SELF?>?op=deleteuser&id=<?=$id?>>[YES]</a> :: <a href=Javascript:history.go(-1)>[NO]</a>
</td>
</tr>
</table>
<?
include ("footer.php");
}
function deleteuser($id) {
// deletes a user from the database but leaves their tasks to be
// reassigned or deleted manually
dbconnect();
include ("config.php");
global $PHP_SELF;
$query = "DELETE FROM IPM_users WHERE id='$id'";
if ($result = mysql_query($query)) {
$code="del1";
} else {
$code="del0";
}
userlist($code);
return;
}
function userlist($code) {
// Show a list of all IPM users and provide links for adding/editing/deleting them
dbconnect();
include ("config.php");
global $PHP_SELF;
$query = "SELECT * FROM IPM_users";
$result = mysql_query($query);
include ("admin-header.php");
if (isset($code)) {
switch ($code) {
case "add1":
message("User Successfully Added");
break;
case "add0":
message("Error Adding User");
break;
case "edit1":
message("User Successfully Updated");
break;
case "edit0":
message("Error Updating User");
break;
case "del1":
message("User Successfully Deleted");
break;
case "del0":
message("Error Deleting User");
break;
}
}
?>
<table align=center width=50% border=1 bordercolor=black cellspacing=0 cellpadding=4>
<tr valign=middle>
<td class=header align=left>
<? $string=popuploader("list", "Sort by Last Name <b>(A-Z)</b>", "<b>Full Name</b>", $PHP_SELF, "headerlink"); ?>
<?=$string?>
</td>
<td align=center class=header nowrap>
Show Details
</td>
<td align=center class=header nowrap>
Username
</td>
<td align=right class=header nowrap>
<a class=headerlink href=<?=$PHP_SELF?>?op=adduser>[ADD USERS]</a>
</td>
</tr>
<? while ($list=mysql_fetch_array($result)) {
?>
<tr valign=top>
<td align=left class=lighter>
<a class=biglink href=<?=$PHP_SELF?>?op=edituser&id=<?=$list[id]?>><?=$list[lastname]?>, <?=$list[firstname]?></a>
</td>
<td align=center class=lighter width=10% nowrap>
<a href=<?=$PHP_SELF?>?op=userdetails&id=<?=$list[id]?>>[DETAILS]</a>
</td>
<td align=center class=darker width=10% nowrap>
<?=$list[username]?>
</td>
<td align=center class=lighter width=10% nowrap>
<a href=<?=$PHP_SELF?>?op=confirmdeleteuser&id=<?=$list[id]?>>[DELETE]</a>
</td>
</tr>
<?
}
echo "</table>";
include ("footer.php");
}
function dbconnect() {
// This function makes a connection to the SQL server and grabs the appropriate
// database for use in all the other functions.
include ("config.php");
if (!$db=mysql_connect($db_servername, $db_username, $db_password)) {
echo "ERROR! UNABLE TO CONNECT TO DATABASE";
}
if (!mysql_select_db($db_dbname)) {
echo "ERROR! UNABLE TO FIND $db_dbname DATABASE";
}
}
function authenticate() {
global $uid;
return $uid;
}
function isadmin() {
// Returns true if the logged in user has admin privleges.
include ("config.php");
dbconnect();
$user_id=authenticate();
$query="SELECT role FROM IPM_users WHERE id='$user_id'";
$result=mysql_query($query);
while ($list=mysql_fetch_row($result)){
if ($list[0] == 1) {
return 1;
} else {
return;
}
}
}
function unauthorized() {
// If you hit cancel on the authentication screen or you fail 3 times
// this function is called and displays a message.
include ("config.php");
echo "<html><head><link rel=stylesheet type=text/css href=$stylesheet_url>"
."<title>$page_title$version</title></head><body><br><br>";
message("$unauthorizedmessage");
echo "</body></html>";
}
function logged_out() {
// If you hit cancel on the authentication screen or you fail 3 times
// this function is called and displays a message.
include ("config.php");
echo "<html><head><link rel=stylesheet type=text/css href=$stylesheet_url>"
."<title>$page_title$version</title></head><body><br><br>";
message("You are now logged out of IPM");
echo "</body></html>";
}
function popuploader($id, $description, $linkname, $url, $class) {
// This function takes a project id and and compares the todo hours
// to the finished hours to make a percent done
include ("config.php");
echo "<a name=$id href=$url onMouseOver=\"window.status='$linkname'; show('box-$id'); return true;\" onMouseOut=\"hide('box-$id'); return true;\" class=\"$class\">$linkname</a>";
$res= "<DIV ID=box-$id class=hidden>\n"
."<table border=1 cellpadding=5 cellspacing=0 bordercolor=black width=300>"
."<tr>"
." <td class=popup>"
." <b>$linkname</b><br>"
." <li class=popup>";
$res .=nl2br($description);
$res .=" </td>"
."</tr>"
."</table>"
."</div>";
return $res;
}
function message($message) {
// writes a pre-formated message to the screen (used for results display)
?>
<table align=center width=40% border=1 bordercolor=black cellspacing=0 cellpadding=4>
<tr class=message>
<td align=center>
<?=$message?>
</td>
</tr>
</table>
<br><br>
<?
}
if (!isadmin()) {
header("Location: index.php");
flush();
exit();
}
switch ($op) {
case "userdetails":
userdetails($id);
break;
case "userlist":
userlist($code);
break;
case "userstats":
userstats($user);
break;
case "adduser":
adduser($code);
break;
case "adduseraction":
adduseraction($firstname, $lastname, $username, $pass1, $pass2, $email, $role);
break;
case "edituser":
edituser($id, $code);
break;
case "edituseraction":
edituseraction($id, $firstname, $lastname, $username, $pass1, $pass2, $email, $role);
break;
case "confirmdeleteuser":
confirmdeleteuser($id);
break;
case "deleteuser":
deleteuser($id);
break;
default:
userlist($code);
break;
}
?>