public function status(\Own\Bus\Player\Model $player) { $signedUser = $this->app->user(); if (isset($_POST['sign-out'])) { \Rebond\Core\UserSecurity\Service::signOut($signedUser); } $tpl = new Util\Template(Util\Template::MODULE, ['app', 'User']); if (Util\Auth::isAuth($signedUser)) { $tpl->set('user', $signedUser); $tpl->set('player', $player); $today = new Util\DateTime(); $options = []; $options['join'][] = 'bus_player_membership player_membership ON player_membership.membership_id = membership.id'; $options['where'][] = ['player_membership.player_id = ?', $signedUser->getId()]; $options['where'][] = ['membership.end_date >= ?', $today->format('date')]; $memberships = \Own\Bus\Membership\Data::loadAll($options); $tpl->set('memberships', $memberships); } return $tpl->render('status'); }
public function bookings_add() { Util\Auth::isAdminAuthorized($this->signedUser, null, false, '/'); $today = new Util\DateTime(); $this->date = Util\Converter::toDate('date'); if (!isset($this->date)) { $this->date = new Util\DateTime(); } /* header('Content-Type: application/json'); echo(json_encode($this->getBookings()));exit(); */ $message = []; $message[] = $this->clearBookings(); $message[] = $this->addBookings($this->getBookings()); // main $tpl = new Util\Template(Util\Template::SITE, ['admin']); $tpl->set('today', $today->format('Y-m-d')); $tpl->set('message', implode($message, '<br>')); return $this->response('tpl-default', ['title' => Util\Lang::lang('own'), 'jsLauncher' => 'integration'], 'layout-1-col', ['column1' => $tpl->render('integration')]); }
public static function findTournamentEndDate(Util\DateTime $startDate, $size) { $sizeDays = [16 => 4, 32 => 5, 64 => 6, 128 => 12]; return $startDate->add(new \DateInterval('PT' . self::DAY * $sizeDays[$size] . 'H')); }
public function index() { // auth Util\Auth::isAuthorized($this->signedUser, 'member', false, '/profile/sign-in'); \Own\Bus\Match\Data::getCurrentMatch($this->player->getId(), [1, 2, 3]); $playLeague = Util\Converter::toBool('league'); $playPractice = Util\Converter::toString('play', 'post'); $lastMatchPlayed = (new \Rebond\Util\DateTime())->getTimestamp() - $this->player->getLastMatchPlayed()->getTimestamp(); // minimum in 2 minutes, maximum 10 matches per day $scheduled = $lastMatchPlayed > Engine::DAY * 60 * 6 ? 120 : Engine::DAY * 60 * 6 - $lastMatchPlayed; $options = []; $options['where'][] = 'configuration.property = \'nextMonth\''; $nextMonth = \Own\Bus\Configuration\Data::load($options); if ($playLeague && time() + $scheduled > (int) $nextMonth->getValue()) { Util\Session::setAndRedirect('siteError', Util\Lang::lang('leagueMonthFinished'), '/match'); } if ($playLeague || $playPractice != '') { $match = new \Own\Bus\Match\Model(); $playerMatch1 = new \Own\Bus\PlayerMatch\Model(); $playerMatch2 = new \Own\Bus\PlayerMatch\Model(); if ($playLeague) { $match->setSurface($this->player->getLeague()->getSurface()); $match->setType(MatchType::LEAGUE); $match->setLeagueId($this->player->getLeagueId()); $match->setBestOfSets($this->player->getLeague()->getBestOfSets()); $player2 = \Own\Bus\Player\Data::searchByLeague($this->player->getId(), $this->player->getLeagueId()); } else { $surface = Util\Converter::toInt('surface', 'post'); $level = Util\Converter::toInt('level', 'post'); if (!in_array($level, [-1, 0, 1])) { $level = 0; } $match->setType(MatchType::PRACTICE); $match->setSurface($surface); $player2 = \Own\Bus\Player\Data::searchByLevel($level, $this->player->getExperience(), $this->player->getId()); } if (!isset($player2)) { Util\Session::setAndRedirect('siteError', Util\Lang::lang('noPlayerFound'), '/match'); } \Own\Bus\Player\Data::updateIsInMatch($this->player->getId(), $player2->getId()); $playerMatch1->setPlayerId($this->player->getId()); $playerMatch1->setLevel($this->player->calculateLevel()); $playerMatch1->save(); $playerMatch2->setPlayerId($player2->getId()); $playerMatch2->setLevel($player2->calculateLevel()); $playerMatch2->save(); $match->setPlayerMatch1Id($playerMatch1->getId()); $match->setPlayerMatch2Id($playerMatch2->getId()); $scheduledDate = \Rebond\Util\DateTime::createFromTimestamp(time() + $scheduled); $match->setScheduled($scheduledDate); $match->setStatus(MatchStatus::READY); $match->save(); Util\Session::setAndRedirect('siteSuccess', 'Match scheduled ' . $scheduledDate->format(), '/match/vs?matchId=' . $match->getId()); } // view $this->setTpl(); // main $tplMain = new Util\Template(Util\Template::SITE, ['www']); $tplMain->set('surface', [1 => 'Clay', 2 => 'Grass', 3 => 'Hard']); $tplMain->set('level', [-1 => Util\Lang::lang('opponentWeak'), 0 => Util\Lang::lang('opponentEqual'), 1 => Util\Lang::lang('opponentStrong')]); $tplMain->set('league', $this->player->getLeague()); $tplMain->set('scheduled', $scheduled); // layout $this->tplLayout->set('column1', $tplMain->render('match-play')); // template $this->tplMaster->set('layout', $this->tplLayout->render('layout-center')); return $this->tplMaster->render('tpl-default'); }
public function bookCourt() { $isAllowed = Util\Auth::isAuthorized($this->signedUser, 'member'); $json = []; $json['result'] = \Rebond\Core\ResultType::ERROR; if (!$isAllowed) { $json['message'] = Util\Lang::lang('accessNonAuthorized'); return json_encode($json); } $courtId = Util\Converter::toInt('courtId', 'post'); $dateTime = Util\Converter::toString('dateTime', 'post'); $bookingType = Util\Converter::toInt('bookingType', 'post'); $playerId = Util\Converter::toInt('playerId', 'post'); $pay = Util\Converter::toInt('pay', 'post'); $guest = Util\Converter::toString('guest', 'post'); if (!isset($courtId, $dateTime, $bookingType, $playerId, $pay, $guest) || !array_key_exists($bookingType, \Own\Bus\BookingType::toArray())) { $json['message'] = Util\Lang::lang('error.invalid.parameters'); return json_encode($json); } $dateTime = new Util\DateTime($dateTime); if ($dateTime < new \DateTime()) { $json['message'] = Util\Lang::lang('error.invalid.time'); return json_encode($json); } switch ($bookingType) { case \Own\Bus\BookingType::PARTNER: $guest = ''; break; case \Own\Bus\BookingType::GUEST: $pay = \Own\Bus\Pay::PLAYER_1; $playerId = 0; break; case \Own\Bus\BookingType::CAROUSSEL: $pay = \Own\Bus\Pay::BOTH; $playerId = 0; $guest = ''; break; default: } // check player $player = \Own\Bus\Player\Data::loadById($playerId); if (!isset($player) || $player->getIdItem()->getStatus() != 1) { $json['message'] = Util\Lang::lang('playerNotFound'); return json_encode($json); } if ($pay == \Own\Bus\Pay::BOTH && $this->player->getCredits() < 1 || $pay == \Own\Bus\Pay::PLAYER_1 && $this->player->getCredits() < 2) { $json['message'] = Util\Lang::lang('notEnoughCredits'); return json_encode($json); } // check credits if ($pay == \Own\Bus\Pay::BOTH && $player->getCredits() < 1 || $pay == \Own\Bus\Pay::PLAYER_2 && $player->getCredits() < 2) { $json['message'] = Util\Lang::lang('partnerNotEnoughCredits'); return json_encode($json); } // check membership $memberships = \Own\Bus\Player\Data::hasMembership($courtId, [$this->player->getId(), $playerId]); if ($memberships != 2 || $memberships != 1 && $bookingType != \Own\Bus\BookingType::PARTNER) { $json['message'] = Util\Lang::lang('noMembership'); return json_encode($json); } // check court time $options = []; $options['where'][] = ['id = ?', $courtId]; $court = \Own\Bus\Court\Data::load($options); if (!isset($court)) { $json['message'] = Util\Lang::lang('error.invalid.parameters'); return json_encode($json); } $rule = \Own\Bus\Rule\Data::loadById(1, true); $timeLength = $rule->getTimeLength(); $askedTime = (int) $dateTime->format('H') * 60 + (int) $dateTime->format('i'); $possibleTime = (int) $court->getStartTime()->format('H') * 60 + (int) $court->getStartTime()->format('i'); $limitTime = (int) $court->getEndTime()->format('H') * 60 + (int) $court->getEndTime()->format('i'); if ($askedTime < $possibleTime || $askedTime > $limitTime || $askedTime % $timeLength != 0) { $json['message'] = Util\Lang::lang('error.invalid.time'); return json_encode($json); } // check for court already booked $options = []; $options['where'][] = ['court_id = ?', $courtId]; $options['where'][] = ['booking_date = ?', $dateTime->format('Y-m-d H:i:00')]; $booking = Book\Data::load($options); if (isset($booking)) { $json['message'] = Util\Lang::lang('alreadyBookedTime'); return json_encode($json); } // check for same hour $options = []; $options['where'][] = ['player1_id = ? OR player2_id = ?', $this->player->getId(), $this->player->getId()]; $options['where'][] = ['booking_date BETWEEN ? AND ?', $dateTime->format('Y-m-d H:00:00'), $dateTime->format('Y-m-d H:59:00')]; $booking = Book\Data::load($options); if (isset($booking)) { $json['message'] = Util\Lang::lang('alreadyBookedTime'); return json_encode($json); } // check for max booking $maxBooking = $this->player->getMaxBooking(); if ($maxBooking > 0) { $options = []; $options['where'][] = ['player1_id = ? OR player2_id = ?', $this->player->getId(), $this->player->getId()]; $options['where'][] = 'booking_date > NOW()'; $futureBookings = Book\Data::count($options); if ($futureBookings >= $maxBooking) { $json['message'] = Util\Lang::lang('maxBookingReachedByYou'); return json_encode($json); } } $options = []; $options['where'][] = ['player1_id = ? OR player2_id = ?', $playerId, $playerId]; $options['where'][] = 'booking_date > NOW()'; $futureBookings = Book\Data::count($options); if ($futureBookings >= $player->getMaxBooking()) { $json['message'] = Util\Lang::lang('maxBookingReached', [$player->getIdItem()->getFullName()]); return json_encode($json); } // add booking if ($pay == \Own\Bus\Pay::BOTH) { $this->player->addCredits(-1); $this->player->save(); $player->addCredits(-1); $player->save(); } else { if ($pay == \Own\Bus\Pay::PLAYER_1) { $this->player->addCredits(-2); $this->player->save(); } else { if ($pay == \Own\Bus\Pay::PLAYER_2) { $player->addCredits(-2); $player->save(); } } } $book = new Book\Model(); $book->setType($bookingType); $book->setPlayer1Id($this->player->getId()); $book->setPlayer2Id($playerId); $book->setCourtId($courtId); $book->setBookingDate($dateTime); $book->setPay($pay); $book->setGuest($guest); $book->save(); $json['result'] = \Rebond\Core\ResultType::SUCCESS; $json['message'] = Util\Lang::lang('courtBooked'); return json_encode($json); }