public static function updateUserData()
 {
     $userDataArray = UserDataDB::getUserDataBy('userDataId', $_SESSION['arguments']);
     if (empty($userDataArray)) {
         HomeView::show();
         header('Location: /' . $_SESSION['base']);
     } elseif ($_SERVER["REQUEST_METHOD"] == "GET") {
         $_SESSION['userData'] = $userDataArray[0];
         UserDataView::showUpdate();
     } else {
         $userData = $userDataArray[0];
         $parms = $userData->getParameters();
         $parms['userId'] = array_key_exists('userId', $_POST) ? $_POST['userId'] : $userData->getUserId();
         $parms['user_name'] = array_key_exists('user_name', $_POST) ? $_POST['user_name'] : "";
         $parms['skill_level'] = array_key_exists('skill_level', $_POST) ? $_POST['skill_level'] : "";
         $parms['skill_areas'] = array_key_exists('skill_areas', $_POST) ? $_POST['skill_areas'] : array();
         $parms['profile_pic'] = array_key_exists('profile_pic', $_POST) ? $_POST['profile_pic'] : "";
         $parms['started_hobby'] = array_key_exists('started_hobby', $_POST) ? $_POST['started_hobby'] : "";
         $parms['fav_color'] = array_key_exists('fav_color', $_POST) ? $_POST['fav_color'] : "";
         $parms['url'] = array_key_exists('url', $_POST) ? $_POST['url'] : "";
         $parms['phone'] = array_key_exists('phone', $_POST) ? $_POST['phone'] : "";
         $newUserData = new UserData($parms);
         $newUserData->setUserDataId($userData->getUserDataId());
         $userDataEntry = UserDataDB::updateUserData($newUserData);
         if ($userDataEntry->getErrorCount() != 0) {
             $_SESSION['userData'] = array($newUserData);
             //return;
             UserDataView::showUpdate();
         } else {
             HomeView::show();
             header('Location: /' . $_SESSION['base']);
         }
     }
 }
 public static function newRobotData()
 {
     $robotData = null;
     $newRobotData = null;
     if ($_SERVER["REQUEST_METHOD"] == "POST") {
         $creatorIds = array();
         foreach ($_POST['creatorNames'] as $creatorName) {
             $creatorArray = UserDataDB::getUserDataBy('user_name', $creatorName);
             if (count($creatorArray) >= 1) {
                 $creator = $creatorArray[0];
                 array_push($creatorIds, $creator->getUserDataId());
             }
         }
         $_POST['creators'] = $creatorIds;
         $robotData = new RobotData($_POST);
     }
     $_SESSION['robotData'] = $robotData;
     if (is_null($robotData) || $robotData->getErrorCount() != 0) {
         RobotDataView::showNew();
     } else {
         $newRobotData = RobotDataDB::addRobotData($robotData);
         foreach ($robotData->getCreators() as $creatorId) {
             $robotAssoc = new RobotAssoc($robotData->getRobotId(), $creatorId);
             $newRobotAssoc = RobotAssocsDB::addRobotAssoc($robotAssoc);
         }
         if (!is_null($newRobotData) && $newRobotData->getErrorCount() == 0) {
             $_SESSION['robotData'] = $newRobotData;
         }
         HomeView::show();
     }
 }
    public static function showNavBar()
    {
        $base = array_key_exists('base', $_SESSION) ? $_SESSION['base'] : "";
        $authenticatedUser = array_key_exists('authenticatedUser', $_SESSION) ? $_SESSION['authenticatedUser'] : null;
        if (!is_null($authenticatedUser)) {
            $authenticatedUserId = $authenticatedUser->getUserId();
            $userDataArray = UserDataDB::getUserDataBy('userId', $authenticatedUserId);
            $authenticatedUserData = $userDataArray[0];
            if (!is_null($userDataArray[0])) {
                $_SESSION['authenticatedUserData'] = $authenticatedUserData;
            }
        }
        echo '<nav class="navbar navbar-inverse navbar-fixed-top">';
        echo '<div class="container-fluid">';
        echo '<div class="navbar-header">';
        // Hamburger
        echo '<button type="button" class="navbar-toggle collapsed"';
        echo 'data-toggle="collapse" data-target="#navbar"';
        echo 'aria-expanded="false" aria-controls="navbar">';
        echo '<span class="icon-bar"></span>';
        echo '<span class="icon-bar"></span>';
        echo '<span class="icon-bar"></span>';
        echo '</button>';
        echo '<a class="navbar-brand" href="/' . $base . '/">botspace</a>';
        echo '</div>';
        // navbar-header
        echo '<div id="navbar" class="navbar-collapse collapse">';
        // Show a link to the logged-in user's profile and a logout button
        if (!is_null($authenticatedUser)) {
            echo '<ul class="nav navbar-nav">';
            echo '<li class="active"><a href="/' . $base . '/profile/show/' . $authenticatedUserId . '">Profile</a></li>';
            echo '</ul>';
            echo '<form class="navbar-form navbar-right"
					method="post" action="/' . $base . '/logout">';
            echo '<div class="form-group">';
            echo '<span class="label label-default">Hey ' . $authenticatedUserData->getUserName() . '</span>&nbsp; &nbsp;';
            echo '</div>';
            echo '<button type="submit" class="btn btn-success">Log out</button>';
            echo '</form>';
        } else {
            echo '<form class="navbar-form navbar-right"
						method="get" action="/' . $base . '/login">';
            //echo '<div class="form-group">';
            echo '<button type="submit" class="btn btn-success">Log in</button>';
            //echo '</div>';
            echo '&nbsp &nbsp';
            //echo '<div class="form-group">';
            echo '<a class="btn btn-primary" href="/' . $base . '/signup" role="button">Sign up</a></p>';
            //echo '</div>';
            echo '</form>';
        }
        //echo '</ul>'; //navbar-nav
        echo '</div>';
        // navbar-collapse collapse
        echo '</div>';
        // container-fluid
        echo '</nav>';
    }
 public static function getLastNRegisteredUsers($n)
 {
     $lastNUsers = array();
     try {
         $registeredUsers = UserDataDB::getUserDataBy();
         $lastNUsers = array_slice($registeredUsers, -$n, $n);
     } catch (Exception $e) {
         return $lastNUsers;
     }
     return $lastNUsers;
 }
 public function testInsertDuplicateUserData()
 {
     ob_start();
     $myDb = DBMaker::create('botspacetest');
     Database::clearDB();
     $db = Database::getDB('botspacetest', 'C:\\xampp\\myConfig.ini');
     $beforeCount = count(UserDataDB::getUserDataBy());
     $userDataCopy = UserDataDB::getUserDataRowSetsBy('userDataId', 1);
     $userDataCopy = $userDataCopy[0];
     $s1 = new UserData($userDataCopy);
     $insertedUserData = UserDataDB::addUserData($s1);
     $this->assertGreaterThan(0, $insertedUserData->getErrorCount(), 'Duplicate attempt should return with an error');
     $afterCount = count(UserDataDB::getUserDataBy());
     $this->assertEquals($afterCount, $beforeCount, 'The database should have the same number of elements after the insertion attempt');
     ob_get_clean();
 }
 public static function setProfileDataForUser($userId)
 {
     $retVal = false;
     if (empty($userId) || !is_numeric($userId)) {
         return $retVal;
     }
     $user = null;
     $userData = null;
     $skillAssocs = null;
     $userRobots = null;
     $users = UsersDB::getUsersBy('userId', $userId);
     if (count($users) > 0) {
         $user = $users[0];
         if ($user->getErrorCount() != 0) {
             return $retVal;
         }
         $userDataArray = UserDataDB::getUserDataBy('userId', $userId);
         if (count($userDataArray) > 0) {
             $userData = $userDataArray[0];
         }
         if ($userData->getErrorCount() != 0) {
             return $retVal;
         }
         $skillAssocs = SkillAssocsDB::getSkillAssocsBy('userDataId', $userData->getUserDataId());
         foreach ($skillAssocs as $skillAssoc) {
             if ($skillAssoc->getErrorCount() != 0) {
                 return $retVal;
             }
         }
         $robotAssocs = RobotAssocsDB::getRobotAssocsBy('creatorId', $userData->getUserDataId());
         $userRobots = array();
         foreach ($robotAssocs as $robotAssoc) {
             $robotArray = RobotDataDB::getRobotDataBy('robotId', $robotAssoc->getRobotId());
             if (count($robotArray) > 0) {
                 array_push($userRobots, $robotArray[0]);
             }
         }
         $_SESSION['user'] = $user;
         $_SESSION['userData'] = $userData;
         $_SESSION['skillAssocs'] = $skillAssocs;
         $_SESSION['userRobots'] = $userRobots;
         $retVal = true;
     }
     return $retVal;
 }
 public static function show()
 {
     $arguments = array_key_exists('arguments', $_SESSION) ? $_SESSION['arguments'] : 0;
     $user = $_SESSION['user'];
     if (!is_null($user)) {
         $_SESSION['user'] = $user;
         $userDataArray = UserDataDB::getUserDataBy('userId', $user->getUserId());
         $userData = $userDataArray[0];
         $_SESSION['userData'] = $userData;
         $skillAssocs = SkillAssocsDB::getSkillAssocsBy('userDataId', $userData->getUserDataId());
         $_SESSION['skillAssocs'] = $skillAssocs;
         // The robot data section might look something like this:
         //$robotDataArray = RobotDataDB::getRobotDataBy('creator', $user->getUserId());
         //$_SESSION['robotData'] = $robotDataArray;
         UserView::show();
     } else {
         HomeView::show();
     }
 }
 public static function run()
 {
     $user = null;
     $userData = null;
     if ($_SERVER["REQUEST_METHOD"] == "POST") {
         //print_r($_POST);
         $formUser = new User($_POST);
         $user = UsersDB::addUser($formUser);
         if ($user->getErrorCount() == 0) {
             $_POST["userId"] = $user->getUserId();
             $formUserData = new UserData($_POST);
             $userData = UserDataDB::addUserData($formUserData);
             if ($userData->getErrorCount() == 0) {
                 $_SESSION['user'] = $user;
                 $_SESSION['userData'] = $userData;
             }
         }
     }
     if (is_null($user) || is_null($userData) || $user->getErrorCount() != 0 || $userData->getErrorCount() != 0) {
         SignupView::show($user, $userData);
     } else {
         ProfileView::show();
     }
 }
 public static function updateUserData($userData)
 {
     try {
         $db = Database::getDB();
         if (is_null($userData) || $userData->getErrorCount() > 0) {
             return $userData;
         }
         $checkUserData = UserDataDB::getUserDataBy('userDataId', $userData->getUserDataId());
         if (empty($checkUserData)) {
             $userData->setError('userDataId', 'USER_DATA_DOES_NOT_EXIST');
             return $userData;
         }
         if ($userData->getErrorCount() > 0) {
             return $userData;
         }
         $query = "UPDATE UserData SET userId = :userId, user_name = :user_name, \r\n\t\t\t\t\tskill_level = :skill_level, profile_pic = :profile_pic, \r\n\t\t\t\t\tstarted_hobby = :started_hobby, fav_color = :fav_color, url = :url,\r\n\t\t\t\t\tphone = :phone\r\n\t\t\t\t\tWHERE userDataId = :userDataId";
         $statement = $db->prepare($query);
         $statement->bindValue(":userId", $userData->getUserId());
         $statement->bindValue(":user_name", $userData->getUserName());
         $statement->bindValue(":skill_level", $userData->getSkillLevel());
         $statement->bindValue(":profile_pic", $userData->getProfilePic());
         $statement->bindValue(":started_hobby", $userData->getStartedHobby());
         $statement->bindValue(":fav_color", $userData->getFavColor());
         $statement->bindValue(":url", $userData->getUrl());
         $statement->bindValue(":phone", $userData->getPhone());
         $statement->bindValue(":userDataId", $userData->getUserDataId());
         $statement->execute();
         $statement->closeCursor();
         // Handle updates for the Skill Areas
         // 1 - Delete all existing skill associations for the user
         $deleteQuery = "DELETE from SkillAssocs WHERE userDataId = :userDataId";
         $statement = $db->prepare($deleteQuery);
         $statement->bindValue(":userDataId", $userData->getUserDataId());
         $statement->execute();
         $statement->closeCursor();
         // 2 - Add all of the new skill associations, if any
         $skillAreas = $userData->getSkillAreas();
         $userDataId = $userData->getUserDataId();
         foreach ($skillAreas as $skill_name) {
             // Translate the skill_name into a skillId first
             // skillIds start from 1, whereas array-indexing starts at 0;
             // so we add 1 to the index
             $skillId = array_search($skill_name, Skill::$SKILL_AREAS) + 1;
             $newSkillAssoc = new SkillAssocs($userDataId, $skillId);
             SkillAssocsDB::addSkillAssoc($newSkillAssoc);
         }
     } catch (Exception $e) {
         $userData->setError('userDataId', 'USER_DATA_COULD_NOT_BE_UPDATED');
     }
     return $userData;
 }
 public function testUpdateUserData()
 {
     $myDB = DBMaker::create('botspacetest');
     Database::clearDB();
     $db = Database::getDB('botspacetest', 'C:\\xampp\\myConfig.ini');
     $testUserDataId = 1;
     $userDataArray = UserDataDB::getUserDataBy('userDataId', $testUserDataId);
     $userData = $userDataArray[0];
     $params = $userData->getParameters();
     $this->assertEquals($userData->getUserName(), 'jabituya', 'Before the update it should have username jabituya');
     $testUserDataRowsArray = UserDataDB::getUserDataRowSetsBy('userDataId', $testUserDataId);
     $testUserDataRow = $testUserDataRowsArray[0];
     $params['user_name'] = 'jabituya2000';
     $newUserData = new UserData($params);
     $newUserData->setUserDataId($testUserDataId);
     $userData = UserDataDB::updateUserData($newUserData);
     $this->assertEquals($userData->getUserName(), 'jabituya2000', 'After the update it should have username jabituya2000');
     $this->assertTrue(empty($userData->getErrors()), 'The updated user data should have no errors');
 }
 public static function showNew()
 {
     $userData = array_key_exists('userData', $_SESSION) ? $_SESSION['userData'] : null;
     $skillAssocs = array_key_exists('skillAssocs', $_SESSION) ? $_SESSION['skillAssocs'] : array();
     $base = array_key_exists('base', $_SESSION) ? $_SESSION['base'] : "";
     $_SESSION['headertitle'] = "botspace UserData Creator";
     $_SESSION['styles'] = array('site.css');
     MasterView::showHeader();
     MasterView::showNavBar();
     // First find some available userIds to associate the new UserData with
     $users = UsersDB::getUsersBy();
     $availableUsers = array();
     if (!is_null($users) && count($users) > 0) {
         foreach ($users as $user) {
             $userDataArray = UserDataDB::getUserDataBy('userId', $user->getUserId());
             if (count($userDataArray) == 0) {
                 array_push($availableUsers, $user);
             }
         }
     }
     echo '<h1>Create a new UserData entry</h1>';
     echo '<form action="/' . $base . '/userdata/create/new" method="POST">';
     if (!is_null($userData) && array_key_exists('userDataId', $userData->getErrors())) {
         echo 'Error: ' . $userData->getError('userDataId') . "<br>";
     }
     echo 'UserId:  ';
     echo '<select name="userId">';
     echo '<option value="0"> </option>';
     foreach ($availableUsers as $availUser) {
         $userId = $availUser->getUserId();
         echo '<option value="' . $userId . '">' . $userId . '</option>';
     }
     echo '</select><br><br>';
     echo 'Name: <input type="text" name="user_name"';
     if (!is_null($userData)) {
         echo 'value = "' . $userData->getUserName() . '"';
     }
     echo 'tabindex="2" required>' . "\n";
     echo '<span class="error">';
     if (!is_null($userData)) {
         echo $userData->getError('user_name');
     }
     echo '</span><br><br>' . "\n";
     echo 'Skill Level: <input type="radio" name="skill_level" value="novice" tabindex="3"';
     if (is_null($userData) || !is_null($userData) && strcmp($userData->getSkillLevel(), UserData::$SKILL_LEVELS['0']) == 0) {
         echo "checked";
     }
     echo '>Novice';
     echo '<input type="radio" name="skill_level" value="advanced" tabindex="4"';
     if (!is_null($userData) && strcmp($userData->getSkillLevel(), UserData::$SKILL_LEVELS['1']) == 0) {
         echo "checked";
     }
     echo '>Advanced';
     echo '<input type="radio" name="skill_level" value="expert" tabindex="5"';
     if (!is_null($userData) && strcmp($userData->getSkillLevel(), UserData::$SKILL_LEVELS['2']) == 0) {
         echo "checked";
     }
     echo '>Expert' . "\n";
     echo '<span class="error">' . "\n";
     if (!is_null($userData)) {
         echo $userData->getError('skill_level');
     }
     echo '</span><br><br>' . "\n";
     if (!is_null($userData)) {
         echo $userData->getError('skill_area') . '<br>';
     }
     echo '<fieldset>' . "\n";
     echo '<legend>Skill Areas</legend>' . "\n";
     echo '<input type="checkbox" name="skill_areas[]" value="system-design" tabindex="6"';
     if (!is_null($userData) && in_array("system-design", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>system-design';
     echo '<input type="checkbox" name="skill_areas[]" value="programming" tabindex="7"';
     if (!is_null($userData) && in_array("programming", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>programming';
     echo '<input type="checkbox" name="skill_areas[]" value="machining" tabindex="8"';
     if (!is_null($userData) && in_array("machining", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>machining';
     echo '<input type="checkbox" name="skill_areas[]" value="soldering" tabindex="9"';
     if (!is_null($userData) && in_array("soldering", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>soldering';
     echo '<input type="checkbox" name="skill_areas[]" value="wiring" tabindex="10"';
     if (!is_null($userData) && in_array("wiring", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>wiring';
     echo '<input type="checkbox" name="skill_areas[]" value="circuit-design" tabindex="11"';
     if (!is_null($userData) && in_array("circuit-design", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>circuit-design';
     echo '<input type="checkbox" name="skill_areas[]" value="power-systems" tabindex="12"';
     if (!is_null($userData) && in_array("power-systems", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>power-systems';
     echo '<input type="checkbox" name="skill_areas[]" value="computer-vision" tabindex="13"';
     if (!is_null($userData) && in_array("computer-vision", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>computer-vision';
     echo '<input type="checkbox" name="skill_areas[]" value="ultrasonic" tabindex="14"';
     if (!is_null($userData) && in_array("ultrasonic", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>ultrasonic';
     echo '<input type="checkbox" name="skill_areas[]" value="infrared" tabindex="15"';
     if (!is_null($userData) && in_array("infrared", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>infrared';
     echo '<input type="checkbox" name="skill_areas[]" value="gps" tabindex="16"';
     if (!is_null($userData) && in_array("gps", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>GPS';
     echo '<input type="checkbox" name="skill_areas[]" value="compass" tabindex="17"';
     if (!is_null($userData) && in_array("compass", $userData->getSkillAreas())) {
         echo "checked";
     }
     echo '>compass' . "\n";
     echo '</fieldset><br>' . "\n";
     echo 'Profile Picture: <input type="file" name="profile_pic" accept="image/*" tabindex="18">';
     if (!is_null($userData)) {
         echo $userData->getError('profile_pic');
     }
     echo '<br><br>';
     echo 'Started Robotics: <input type="date" name="started_hobby" min="1970-01-01" max="';
     echo 'date("Y-m-d")';
     echo 'tabindex="19"';
     if (!is_null($userData) && !empty($userData->getStartedHobby())) {
         echo 'value="' . $userData->getStartedHobby() . '"';
     }
     echo '>' . "\n";
     if (!is_null($userData)) {
         echo $userData->getError('started_hobby');
     }
     echo '<br><br>';
     echo 'Favorite Color: <input type="color" name="fav_color" tabindex="20"';
     if (!is_null($userData) && !empty($userData->getFavColor())) {
         echo 'value="' . $userData->getFavColor() . '"';
     }
     echo '>' . "\n";
     if (!is_null($userData)) {
         echo $userData->getError('fav_color');
     }
     echo '<br><br>' . "\n";
     echo 'URL: <input type="url" name="url" tabindex="21"';
     if (!is_null($userData)) {
         echo 'value="' . $userData->getUrl() . '"';
     }
     echo '>';
     if (!is_null($userData)) {
         echo $userData->getError('url');
     }
     echo '<br><br>' . "\n";
     echo 'Telephone: <input type="tel" name="phone" tabindex="22"';
     if (!is_null($userData)) {
         echo 'value="' . $userData->getPhone() . '"';
     }
     echo '>' . "\n";
     if (!is_null($userData)) {
         echo $userData->getError('phone');
     }
     echo '<br><br>' . "\n";
     echo '<p><input type="submit" name="submit" value="Submit">';
     echo '</form>';
     MasterView::showFooter();
     MasterView::showPageEnd();
 }
// include_once("../models/Skill.class.php");
// include_once("../models/UserDataDB.class.php");
// include_once("../models/Database.class.php");
?>

<h2>It should call show() without crashing</h2>
<?php 
$validUserData = array("user_name" => "Admiral_Ackbar", "skill_level" => "expert", "skill_areas" => array("system-design", "programming", "wiring"), "profile_pic" => "ackbar.jpg", "started_hobby" => "1983-05", "fav_color" => "#ff0000", "url" => "http://www.itsatrap.com", "phone" => "210-458-4436");
$sampleUser = new UserData($validUserData);
ProfileView::show($sampleUser);
?>

<h2>It should print all user information</h2>
<?php 
$allUsers = UsersDB::getUsersBy();
foreach ($allUsers as $user) {
    //print username and pass
    echo '<p>';
    echo 'User: '******'UserData: ';
    $userData = UserDataDB::getUserDataBy('userId', $user->getUserId());
    print_r($userData);
    //print robots
    echo '</p>';
}
?>
</body>
</html>
?>

<h2>It should allow a new valid user data to be added for a new user</h2>
<?php 
makeDB('botspacetest');
Database::clearDB();
$db = Database::getDB('botspacetest');
echo "Number of user data in db before adding is: " . count(UserDataDB::getUserDataBy()) . "<br>";
$validTestUser = array("email" => "*****@*****.**", "password" => "validpassword");
$user = new User($validTestUser);
$userId = UsersDB::addUser($user);
$validTestUserData = array("user_name" => "newbie-user", "skill_level" => "novice", "skill_areas" => array("computer-vision", "soldering", "circuit-design"), "profile_pic" => "no-picture.jpg", "started_hobby" => "2015-10", "fav_color" => "#ff8000", "url" => "http://www.wired.com", "phone" => "210-555-1234");
$userData = new UserData($validTestUserData);
$userData->setUserId($userId);
$userDataId = UserDataDB::addUserData($userData);
echo "Number of user data in db after adding is: " . count(UserDataDB::getUserDataBy()) . "<br>";
echo "UserData ID of new user is: {$userDataId}";
?>

<h2>It should not allow invalid user data to be added</h2>


<h2>It should allow user data to be edited for an existing user</h2>


<h2>It should not allow user data to be added for a nonexistent user</h2>


<h2>It should not get user data not in UserData</h2>