<?php 
    // continue the session
    session_start();

    // Determine if the form was submitted recently
    if (!isset($_POST['formSubmitted']) || 
        !htmlspecialchars($_POST['formSubmitted'])=='TRUE'){
        // Require the login since we are not submitting the form
        require_once('php_only_scripts/protector.php');
    }
    
    // init variables
    $updateUserId=-1;
    
    // now determine if it was posted
    if (isset($_GET['updateUserID'])){
        // Default for the user ID is as a posted variable
        $updateUserId=$_GET['updateUserID'];
    }
    
    // Add includes to PHP files that I will need to access
    include 'php_only_scripts/global_functions.php';
    require_once 'php_only_scripts/database.php';
    require_once 'php_only_scripts/presentation.php';
    include 'php_only_scripts/user_presentation.php';
    include 'php_only_scripts/note_presentation.php';

    // Init some variables
    $userRow=null;

    // Assume NOT gtg
    $gtg = false;

    // Create and Setup the database
    $db = new Database();
    $db->setupTmsDB();

    // Attempt to log in with this user
    $currentUser = $db->getLoggedInSessionUser(session_id());
    
    // If there is only one result for a username/password combo, then they are good to go.
    if ($currentUser == null){
        exit;
    }
    elseif (mysqli_num_rows($currentUser)==1){
        // Attempt to get the user row
        $userRow = $currentUser->fetch_assoc();

        // Determine if this user is allowed here or not
        if (($userRow["UserLevel"]=='MINIMAL' || 
             $userRow["UserLevel"]=='TIMECARD ONLY') &&
            $userRow["UserID"]!=$updateUserId ||
            $userRow["AccountStatus"]!='ACTIVE'){
                // redirect to the invalid access page
                echo ('<script>window.location = "invalid_access.php";</script>');
                
                exit;
        }
        
        // Set the good to go until they log out
        $gtg = true;

        // Determine if BOTH the user name AND password has been set
        if (isset($_POST['formSubmitted']) && 
            htmlspecialchars($_POST['formSubmitted'])=='TRUE'){
            // Determine if this user can even modify
            if (!$userRow["CanModify"]){
                // Let them know they cannot modify
                echo "<script type=\"text/javascript\">window.alert('Your profile does not allow you to modify.\nContact a higher level to request this privilege.');</script>"; 

                // Bypass the protector
                $_SESSION['bypassProtector']="True";

                // redirect to the update page
                echo ('<script>window.location = "updateUserTemplate.php?updateUserID=' . $userRow["UserID"] . '";</script>');
            }
            else {
                // Change the form back to NOT being submitted
                $_SESSION['formSubmitted']='FALSE';

                // Determine if this use has the ability to change user main characteristics
                if ($userRow["UserLevel"]=='EXECUTIVE' ||
                    $userRow["UserLevel"]=='SU' || 
                    $userRow["UserID"]==$updateUserId){
                    // Set the local variables from what was posted
                    $companyID = htmlspecialchars($_POST['company'], ENT_QUOTES, 'UTF-8');
                    $suEmployee=(isset($_POST['suEmployee'])?1:0);
                    $accountStatus = htmlspecialchars($_POST['accountStatus'], ENT_QUOTES, 'UTF-8');
                    $userLevel = htmlspecialchars($_POST['userLevel'], ENT_QUOTES, 'UTF-8');
                    $userName = htmlspecialchars($_POST['userName'], ENT_QUOTES, 'UTF-8');
                    $showWhatFinishedState = htmlspecialchars($_POST['showWhatFinishedState'], ENT_QUOTES, 'UTF-8');
                    $tasksPerPage = htmlspecialchars($_POST['tasksPerPage'], ENT_QUOTES, 'UTF-8');
                    $laborCategory=htmlspecialchars($_POST['laborCategory'], ENT_QUOTES, 'UTF-8');
                    $silenceAllNotifications=(isset($_POST['silenceAllNotifications'])?1:0);
                    $canModify=(isset($_POST['canModify'])?1:0);
                    $cannotViewUnsubmittedBlanks=(isset($_POST['cannotViewUnsubmittedBlanks'])?1:0);
                    $canModifyChildren=(isset($_POST['canModifyChildren'])?1:0);
                    $canCopyTasks=(isset($_POST['canCopyTasks'])?1:0);
                    $canAddAllParent=(isset($_POST['canAddAllParent'])?1:0);
                    $canModifyRouting=(isset($_POST['canModifyRouting'])?1:0);

                    // Let's create the update query off of what we have
                    $sql='UPDATE users SET ';
                    $sql = $sql . 'SUEmployee=' . $suEmployee;
                    if ($userRow["UserLevel"]=='SU') {$sql = $sql . ', CanModify=' . $canModify;}
                    if ($userRow["UserLevel"]=='SU'||$userRow["UserLevel"]=='EXECUTIVE') {$sql = $sql . ', CannotViewUnsubmittedBlanks=' . $cannotViewUnsubmittedBlanks;}
                    if ($userRow["UserLevel"]=='SU'||$userRow["UserLevel"]=='EXECUTIVE') {$sql = $sql . ', CanModifyChildren=' . $canModifyChildren;}
                    if ($userRow["UserLevel"]=='SU'||$userRow["UserLevel"]=='EXECUTIVE') {$sql = $sql . ', CanCopyTasks=' . $canCopyTasks;}
                    if ($userRow["UserLevel"]=='SU'||$userRow["UserLevel"]=='EXECUTIVE') {$sql = $sql . ', CanAddAllParent=' . $canAddAllParent;}
                    if ($userRow["UserLevel"]=='SU'||$userRow["UserLevel"]=='EXECUTIVE') {$sql = $sql . ', CanModifyRouting=' . $canModifyRouting;}
                    if ($accountStatus!=null) {$sql = $sql . ', AccountStatus="' . $accountStatus . '"';}
                    if ($password!=null) {$sql = $sql . ', Password="' . $password . '"';}
                    if ($userLevel!=null) {$sql = $sql . ', UserLevel="' . $userLevel . '"';}
                    if ($userName!=null) {$sql = $sql . ', UserName="' . $userName . '"';}
                    if ($tasksPerPage!=null) {$sql = $sql . ', TasksPerPage=' . $tasksPerPage;}
                    $sql = $sql . ', SilenceAllTaskNotifications=' . $silenceAllNotifications;
                    if ($laborCategory!=null) {$sql = $sql . ', StandardLaborCategoryID=' . $laborCategory;}
                    $sql=$sql .' WHERE UserID=' . $updateUserId . ';';

                    // Attempt to run the query and evaluate the response
                    if (!$db->queryDB($sql, $userRow, "updateUser Form occurance 1.")){
                        echo '<script>alert("User was NOT updated in the database. Please check the data and try again.");</script>';
                        // TODO: How do I want to display a failure to the user?
                        
                        // Do NOT go on to any other updates if the main user is not updated
                        exit;
                    }
                }
               
                // Determine if this user is allowed here or not
                if ($userRow["UserID"]==$updateUserId ||
                    $userRow["UserLevel"]=='SU'||
                    ($userRow["UserLevel"]=='EXECUTIVE' && $userRow["CompanyID"]==1 && $userRow["SUEmployee"]==1 && $userRow["AccountStatus"]=='ACTIVE') ||
                    ($userRow["UserLevel"]=='MANAGEMENT' && $userRow["CompanyID"]==1 && $userRow["SUEmployee"]==1 && $userRow["AccountStatus"]=='ACTIVE')){
                    // Get the posted preferences
                    $refreshRate=htmlspecialchars($_POST['refreshRate'], ENT_QUOTES, 'UTF-8');
                    $primaryTaskType=htmlspecialchars($_POST['primaryTaskType'], ENT_QUOTES, 'UTF-8');
                    $defaultNewUserPassword=htmlspecialchars($_POST['defaultNewUserPassword'], ENT_QUOTES, 'UTF-8');
                    $receiveAttachmentUpdate=(isset($_POST['receiveAttachmentUpdate'])?1:0);
                    $receivePriorityChangeUpdate=(isset($_POST['receivePriorityChangeUpdate'])?1:0);
                    $receiveAddTaskUpdate=(isset($_POST['receiveAddTaskUpdate'])?1:0);
                    $receiveMaterialLowStockNotificationUpdate=(isset($_POST['receiveMaterialLowStockNotificationUpdate'])?1:0);
                    $receiveToolLowStockNotificationUpdate=(isset($_POST['receiveToolLowStockNotificationUpdate'])?1:0);
                    $receivePayPeriodRolloverUpdate=(isset($_POST['receivePayPeriodRolloverUpdate'])?1:0);
                    $receiveBlankCutNotificationUpdate=(isset($_POST['receiveBlankCutNotificationUpdate'])?1:0);
                    $receiveNotesNotificationUpdate=(isset($_POST['receiveNotesNotificationUpdate'])?1:0);

                    // Let's create the insert query off of what we have
                    $sql='UPDATE users SET ';
                    if ($companyID!=null) {$sql = $sql . 'CompanyID=' . $companyID;}
                    if ($refreshRate!=null) {$sql = $sql . ', RefreshRate=' . $refreshRate . '';}
                    if ($primaryTaskType!=null) {$sql = $sql . ', PrimaryTaskType="' . $primaryTaskType . '"';}
                    if ($defaultNewUserPassword!=null) {$sql = $sql . ', DefaultNewUserPassword="' . $defaultNewUserPassword . '"';}
                    $sql = $sql . ', ShowWhatFinishedState=' . $showWhatFinishedState . 
                    ' WHERE UserID=' . $updateUserId . ';';

                    // Run the query to update the preferences
                    $db->queryDB($sql, $userRow, "updateUser Form occurance 7");

                    // Determine if this user can make other users
                    if ($userRow["UserLevel"]=='SU' ||
                        $userRow["UserLevel"]=='EXECUTIVE') {
                        // Update the general notifications are that only exac and SU can do
                        $sql='UPDATE users SET ' .
                             'ReceiveAttachmentUpdate=' . $receiveAttachmentUpdate . 
                             ', ReceivePriorityChangeUpdate=' . $receivePriorityChangeUpdate . 
                             ', ReceiveAddTaskUpdate=' . $receiveAddTaskUpdate . 
                             ', ReceiveMaterialLowStockNotificationUpdate=' . $receiveMaterialLowStockNotificationUpdate .
                             ', ReceiveToolLowStockNotificationUpdate=' . $receiveToolLowStockNotificationUpdate .
                             ', ReceivePayPeriodRolloverUpdate=' . $receivePayPeriodRolloverUpdate .
                             ', ReceiveBlankCutNotificationUpdate=' . $receiveBlankCutNotificationUpdate . 
                             ', ReceiveNotesNotificationUpdate=' . $receiveNotesNotificationUpdate . 
                             ' WHERE UserID=' . $updateUserId . ';';

                        // Run the query to update the preferences
                        $db->queryDB($sql, $userRow, "updateUser Form occurance 8");

                        // Update the user notification status checkboxes with values
                        updateUserStatusNotificationsCheckboxes($db, $userRow, $updateUserId);

                        // Update the user status viewable checkboxes with values
                        updateUserStatusViewableCheckboxes($db, $userRow, $updateUserId);
                            
                        // Update the user machine viewable checkboxes with values
                        updateUserMachineViewableCheckboxes($db, $userRow, $updateUserId);
                    }

                    // redirect to the users page for the those that can see it
                    if ($userRow["UserID"]==$updateUserId ){
                        // Bypass the protector
                        $_SESSION['bypassProtector']="True";

                         // redirect them back to their own page
                         echo ('<script>window.location = "updateUserTemplate.php?updateUserID=' . $updateUserId . '";</script>');
                    }
                    elseif ($userRow["UserLevel"]=='SU'||
                            $userRow["UserLevel"]=='EXECUTIVE'||
                            $userRow["UserLevel"]=='MANAGEMENT'){
                        // Bypass the protector
                        $_SESSION['bypassProtector']="True";

                         // redirect them back to this updated page page, so they can check on update success.
                         echo ('<script>window.location = "updateUserTemplate.php?updateUserID=' . $updateUserId . '";</script>');
                    }
                }
            }
        }
        else {
            // Set the form submitted session variable to FALSE
            $_POST['formSubmitted']='FALSE';
        }
    }
?>
        
﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>Task Management System - Update User Template</title>

    <meta name="keywords" content="GIS,data,testing,IT" />
    <meta name="description" content="EES Divisions." />

    <script src="scripts/jquery-ui-1.10.4.custom/js/jquery-1.10.2.js" type="text/javascript"></script>
    <script src="scripts/jquery-ui-1.11.4.custom/jquery-ui.js" type="text/javascript"></script>
    <script src="./javascript/general.js" type="text/javascript"></script>
    <script src="./javascript/addresses.js" type="text/javascript"></script>
    <script src="./javascript/notes.js" type="text/javascript"></script>
    <script language="JavaScript" src="scripts/gen_validatorv4.js" type="text/javascript"></script>
    <script src="./SpryAssets/SpryMenuBar.js" type="text/javascript"></script>
    
    <link rel="icon" href="images/ees_ico.ico"/> 
    <link href="scripts/jquery-ui-1.10.4.custom/development-bundle/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css"/>
    <link href="./SpryAssets/SpryMenuBarHorizontal.css" rel="stylesheet" type="text/css" />
    <link href="./SpryAssets/SpryMenuBarVertical.css" rel="stylesheet" type="text/css" />
    <link rel = "stylesheet" type="text/css" href="./css/contentpage.css" >
    <link rel="shortcut icon" href="../images/logo_EES_trans_256x256.png">
    <style type="text/css">
        .Table
        {
            display: table;
            width: 100%;
        }
        .Title
        {
            display: table-caption;
            text-align: center;
            font-weight: bold;
            font-size: larger;
            width: 100%;
        }
        .Heading
        {
            display: table-row;
            font-weight: bold;
            text-align: center;
            width: 100%;
        }
        .Row
        {
            display: table-row;
            width: 100%;
        }
        .cell
        {
            display: table-cell;
            border: solid;
            border-width: thin;
            padding-left: 2px;
            padding-right: 2px;
            font-weight: bold;
            font-size: 10px;
        }
        .noteTableCell
        {
            display: table-cell;
        }
        .fullNoteLabelCell
        {
            width: 20%;
            text-align: right;
        }
        .fullNoteTextCell
        {
            width: 80%;
            text-align: left;
        }
        .fullLabelCell
        {
            width: 20%;
            text-align: center;
        }
        .fullTextCell
        {
            width: 80%;
            text-align: left;
        }
        .fileInputCell
        {
            width: 50%;
            text-align: center;
        }
        
        /* Start CSS for the addresses */
        .cell1
        {
            width: 2%;
            text-align: center;
            vertical-align: middle;
        }
        .addressCell
        {
            width: 32%;
            text-align: left;
        }
        .cityCell
        {
            width: 20%;
            text-align: center;
        }
        .stateCell
        {
            width: 10%;
            text-align: center;
        }
        zipCell
        {
            width: 8%;
            text-align: center;
        }
        phoneCell
        {
            width: 20%;
            text-align: center;
        }
        .checkCell 
        {
            width: 8%;
            text-align: center;
            vertical-align: middle;
        }
        .buttonCell
        {
            width: 8%;
            text-align: center;
            vertical-align: middle;
        }
        
        /* Start CSS for the current attachments */
        .numberCell
        {
            text-align: center;
            width: 3%;
        }
        .nameCell
        {
            text-align: center;
            width: 35%;
        }
        .typeCell
        {
            text-align: center;
            width: 20%;
        }
        .sizeCell
        {
            text-align: center;
            width: 20%;
        }
        /* Simulate the disabled atribute, but still pass the values */
        .disable{
            pointer-events:none;
            background:lightgrey;
            /* border: solid red 1px; */
        }        
        #updateDiv {
            position: sticky;
            left: 50%;
            top: 45%;
            float:right;
            display:inline-block;
            padding:0px 777px;
            clear: right;
            background-color: rgba(49, 49, 49, 0);
            pointer-events: none;
        }   
        /* Style the tab content (and add height:100% for full page content) */
        .tabcontent {
          border: 1px solid gray;
          padding: 5px 5px;
        }
        .childtablink {
          float: left;
          border-left: 1px solid gray;
          border-right: 1px solid gray;
          border-top: 1px solid gray;
          border-bottom: 2px solid forestgreen;
          outline: none;
          cursor: pointer;
          padding: 5px 5px;
          font-size: 11px;
          width: 16.66666666%;
        }
        .childtablinkblack {
          color:black;
          font-size: 8px;
        }
        .childtablinkred {
          color:red;
          font-size: 8px;
        }
        .childtablinkgreen {
          color:green;
          font-size: 8px;
        }
        .childtablink:hover {
          background-color: #777;
        }
        .childtabcontent {
          border-left: 2px solid forestgreen;
          border-right: 2px solid forestgreen;
          border-top: none;
          border-bottom: 2px solid forestgreen;
          text-align: left;
        }
        
/*        .disabled {
            opacity:0.5;
        }*/
        /* End CSS for the current attachments */
    </style>
    <script>
        function sortStatusCheckboxState(ctrlStatus, statusID){
            // Determine first if the one that is changing is the not wanting status notifications
            if (ctrlStatus.name.includes("_NoStatusChangeToNotification")){
                // If it is being checked, then it easy.  Uncheck the others.
                if (ctrlStatus.checked){
                    // Set the others to unchecked
                    document.getElementById(statusID + "_StatusChangeToNotification").checked=false;
                    document.getElementById(statusID + "_MainTaskStatusChangeNotification").checked=false;
                }
                else {
                    // Do not allow for this to be unchecked.  If it is checked, then it cannot be unchecked.
                    ctrlStatus.checked=true;
                }
            }
            else {
                // Determine if it is getting checked
                if (ctrlStatus.checked){
                    // Set the no status to unchecked
                    document.getElementById(statusID + "_NoStatusChangeToNotification").checked=false;
                }
                else {
                    // Determine which one is being unchecked
                    if (ctrlStatus.name.includes("_StatusChangeToNotification")){
                        // Determine if the other is still checked
                        if (document.getElementById(statusID + "_MainTaskStatusChangeNotification").checked==false){
                            // Check the no status control
                             document.getElementById(statusID + "_NoStatusChangeToNotification").checked=true;
                        }
                    }
                    else {
                        // Determine if the other is still checked
                        if (document.getElementById(statusID + "_StatusChangeToNotification").checked==false){
                            // Check the no status control
                             document.getElementById(statusID + "_NoStatusChangeToNotification").checked=true;
                        }
                    }
                }
            }
        }  
        
        $(function() {
              $( "#tabs" ).tabs();
        });
    </script>
</head>

<body class="thrColElsHdr">

<div id="container">
  
<!-- start of banner wrap --->

<div id="topContent">
  
<div>
   <div class="MenuBarHorizontal" id="navBar">  <ul id="TopNav" class="MenuBarHorizontal">

    <script type="text/javascript">
    <!--
    var MenuBar2 = new Spry.Widget.MenuBar("TopNav", {imgDown:"./SpryAssets/SpryMenuBarDownHover.gif", imgRight:"./SpryAssets/SpryMenuBarRightHover.gif"});
    //-->
    </script>

    </div>
  </div>
</div>
<!-- end of banner wrap --->

  <!-- end #header -->
  <br class="clearfloat" />
  <div id="sidebar1">
      <?php 
        // Determine if we are GTG
        if ($gtg){
          // Render the appropriate presentation for the tasks sidebar
          getSidebar($userRow, 'accounts');
        }
      ?>       
      <br class="clearfloat" />
  <!-- end #sidebar1 -->
  </div>
  
  <!-- start #mainContent -->
  <div id="mainContent">
    <div class="maintitle">Task Management System - Update User</div>
    <div class="breadcrumb"> <a href="../index.html"> Home </a> > <a href="tasks.php"> Task Management System </a> > <a href=
          "<?php echo ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on'?"https" : "http") . "://" . $_SERVER['HTTP_HOST'] .  $_SERVER['REQUEST_URI']); ?>"> Update User Template </a></div>

    <br>
    <?php
        // Determine if they are GTG
        if ($gtg){
            // Populate the user info
            echo getUser($db, $userRow, $updateUserId, true);
        }
        else {
            // Set the login failed to true
            $_SESSION['failedLogin']='TRUE';

            // Add a session variable that is this page URL
            $_SESSION['pageToGoTo']=$_SERVER['REQUEST_URI'];

            // redirect to the login page
            echo ('<script>window.location = ".";</script>');
        }
    ?>       
    
  <!-- end #mainContent -->
  
  <!-- This clearing element should immediately follow the #mainContent div in order to force the #container div to contain all child floats -->
  <br class="clearfloat" />
  
  <!-- start #footer --></div>
   <div id="footer">
    <p>© 2018 Evolve Engineering and Software. EES, Evolve Engineering and Software, EES Logo are registered marks of Evolve Engineering and Software.</p>
  <!-- end #footer -->
   </div>
<!-- end #container -->
</div>

</body>

</html>