/**
 * @param $auction DbAuction
 * @param $userIds array
 * @param int $numWatches
 */
function addWatches($auction, &$userIds, $numWatches = 1)
{
    global $faker;
    for ($i = 0; $i < $numWatches; $i++) {
        $userId = $faker->randomElement($userIds);
        $auctionWatch = new DbAuctionWatch(array("userId" => $userId, "auctionId" => $auction->getId()));
        $auctionWatch->create();
        $key = array_search($userId, $userIds);
        unset($userIds[$key]);
    }
}
            break;
    }
}
$auction = QueryOperator::getLiveAuction($auctionId);
$bids = QueryOperator::getAuctionBids($auction->getAuctionId());
$watches = QueryOperator::getAuctionWatches($auction->getAuctionId());
$isMyAuction = $auction->getSellerUsername() == SessionOperator::getUser()->getUsername();
//increment num_views of auction on database
$dbAuction = DbAuction::find($auctionId);
$dbAuction->setField("views", $dbAuction->getField("views") + 1);
$dbAuction->save();
//increment views displayed on page
$views = $auction->getViews() + 1;
//is user watching this auction
$user = SessionOperator::getUser();
$alreadyWatching = DbAuctionWatch::withConditions("WHERE userId = " . $user->getUserId() . " AND auctionId =" . $auctionId)->exists();
?>
<!DOCTYPE html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title><?php 
echo $auction->getItemName() . " | AuctionHouse";
?>
<?php

require_once "../classes/class.helper_operator.php";
require_once "../classes/class.session_operator.php";
require_once "../classes/class.validation_operator.php";
require_once "../classes/class.query_operator.php";
require_once "../classes/class.db_auction_watch.php";
/* @var User $user*/
$user = SessionOperator::getUser();
$auctionId = $_GET["liveAuction"];
if (!is_numeric($auctionId)) {
    HelperOperator::redirectTo("../views/open_live_auction_view.php?" . $_SERVER['QUERY_STRING']);
}
// Check user hasn't already watched
$alreadyWatching = DbAuctionWatch::withConditions("WHERE userId = " . $user->getUserId() . " AND auctionId =" . $auctionId)->exists() ? true : false;
if ($alreadyWatching) {
    HelperOperator::redirectTo("../views/open_live_auction_view.php?" . $_SERVER['QUERY_STRING']);
}
// Create an auction_watch
$watch = new DbAuctionWatch(array("userId" => $user->getUserId(), "auctionId" => $auctionId));
// Add to watch list
$watch->create();
// Set feedback session
SessionOperator::setNotification(SessionOperator::CREATED_WATCH);
HelperOperator::redirectTo("../views/open_live_auction_view.php?" . $_SERVER['QUERY_STRING']);
<?php

require_once "../classes/class.helper_operator.php";
require_once "../classes/class.session_operator.php";
require_once "../classes/class.validation_operator.php";
require_once "../classes/class.query_operator.php";
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/class.db_auction.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/class.db_auction_watch.php';
$watchId = $_GET["id"];
// Prevent sql injection
if (!is_numeric($watchId)) {
    HelperOperator::redirectTo("../views/my_watch_list_view.php");
}
/* @var User $user */
$userId = SessionOperator::getUser()->getUserId();
/* @var DbAuctionWatch $auction */
$watch = DbAuctionWatch::find($watchId);
// User owns watch
if ($watch->getField("userId") == $userId) {
    // Delete watch
    $watch->delete();
    // Set feedback session
    SessionOperator::setNotification(SessionOperator::DELETED_WATCH);
}
HelperOperator::redirectTo("../views/my_watch_list_view.php");