/** * checks if production is valid, takes in consideration all other moves for this phase/user that are not flagged as deleted * * @param ModelProductionMove $move * @return void * @throws ControllerException $ex */ public function validateProductionMove(ModelProductionMove $move) { // 1. check if zarea belongs to user $gameArea = ModelGameArea::getGameArea($move->getIdGame(), $move->getIdZArea()); if ($move->getIdUser() !== $gameArea->getIdUser()) { throw new ControllerException('Area doesn\'t belong to the user.'); } // 2. check if user has enough res left // 2.a check cost of previous productions $current_costs = $move->getCost(); $moves = ModelProductionMove::iterator($move->getIdUser(), $move->getIdGame(), $move->getRound()); while ($moves->hasNext()) { /* @var $move ModelProductionMove */ $move_tmp = $moves->next(); if ($move_tmp === $move) { continue; } $current_costs += $move_tmp->getCost(); } // 2.b get available res $current_production = UserViewHelper::getCurrentProductionForUserInGame($move->getIdUser(), $move->getIdGame()); if ($current_production['sum'] - $current_costs < 0) { throw new ControllerException('Insufficient funds!'); } }