/** * @param $link * @return Season */ public static function getByLink($link) { foreach (Season::find('1=1') as $season) { if (($season->ispublic || Team::isAdmin()) && $season->getLink() == $link) { return $season; } } }
/** * @return void */ public function show() { $resultNames = [ ['Sin resultado', 'Sin resultado'], ]; for ($i=6; $i>=0; $i--) { $resultNames[] = ["Victoria $i-0", "Derrota 0-$i"]; } for ($i=0; $i<=6; $i++) { $resultNames[] = ["Derrota 0-$i", "Victoria $i-0"]; } $resultNames[] = ["Victoria 6-0 (sin jugar)", "Derrota 0-6 (sin jugar)"]; $resultNames[] = ["Derrota 0-6 (sin jugar)", "Victoria 6-0 (sin jugar)"]; $resultNames[] = ["Aplazado", "Aplazado"]; if (!($csrf = $_SESSION['csrf'])) { $_SESSION['csrf'] = $csrf = rand(1, 1000000) . ""; } $postCsrf = HTMLResponse::fromPOST('csrf', ''); if ($postCsrf == $csrf) { if (HTMLResponse::fromPOST('color') !== null) { $this->team->color = HTMLResponse::fromPOST('color'); $this->team->save(); } } $color = $this->team->color; ?> <div class="inblock" style="margin-right: 16px"> <a target="_blank" href="/<?=$this->team->getImageLink()?>"> <img src="/<?=$this->team->getImageLink(300, 200)?>" alt="Logo" class="teamlogo"><br> </a> <a href="https://twitter.com/hashtag/<?=$this->team->getHashtag()?>" target="_blank">#<?=$this->team->getHashtag()?></a> <div style="height:2px"></div> <a href="https://twitter.com/<?=$this->team->username?>" target="_blank">@<?=$this->team->username?></a> <div style="height: 6px"></div> <span style="text-decoration: underline;">Color oficial</span>: <? if (preg_match("'^#[abcdefABCDEF0-9]{6}$'", $color)) { ?><span id="teamcolor"><?= $color ?></span><? } else { ?><i id="teamcolor">Sin color</i><? $color = '#000000'; } ?> <div class="teamcolor" style="background: <?=$color?>"></div> <br><? if ($this->team->isManager()) { ?> <br>Eres el Manager del equipo. <form action="<?=HTMLResponse::getRoute()?>" method="post" id="colorform"> <input type="hidden" name="color" value="<?=$color?>"> <input type="hidden" name="csrf" value="<?=$csrf?>"> </form> <? $this->design->addJavaScript('/js/jquery-ui.min.js'); $this->design->addStyleSheet('/css/jquery-ui.min.css'); $this->design->addStyleSheet('/css/jquery.colorpicker.css'); $this->design->addJavaScript('/js/jquery.colorpicker.js'); $this->design->addJavaScript(" $('.teamcolor').colorpicker({ inline: false, color: '{$color}', colorFormat: '#HEX', closeOnOutside: false, closeOnEscape: false, ok: function(event, color) { $('#colorform input[name=\"color\"]').val(color.formatted); $('#colorform').submit(); } }).css('cursor', 'pointer'); ", false); } ?> </div> <div class="inblock"> <? ?> <h2>Calendario de enfrentamientos</h2> <table> <thead> <tr> <td>Jornada</td> <td>Fecha</td> <td>Oponentes</td> <td>Resultado</td> <td>Vídeos</td> </tr> </thead> <tbody> <? foreach(Match::find('(team1id = ? or team2id = ?) and seasonid = ? order by week asc', [$this->team->teamid, $this->team->teamid, $this->season->seasonid]) as $match) { if (!$this->team->isManager() && !$this->season->weekIsPublic($match->week)) { continue; } if (HTMLResponse::fromPOST('matchid', '') === $match->matchid && strlen($newResult = HTMLResponse::fromPOST('result', ''))) { $match->result = $newResult; $match->save(); HTMLResponse::exitWithRoute(HTMLResponse::getRoute()); } $date = $this->season->getPublishTimeForWeek($match->week); if ($match->team1id == $this->team->teamid) { $posIndex = 0; } else { $posIndex = 1; } $opponentsId = ($match->team1id != $this->team->teamid) ? $match->team1id : $match->team2id; $opponents = Team::get($opponentsId); ?> <tr> <td style="height:3em"> <? echo $this->season->getWeekName($match->week); ?> </td> <td><?= date("Y-m-d", $date) ?></td> <td style="text-align: center"> <!-- <?=htmlentities($this->team->name)?> VS --> <a href="/<?=$this->season->getLink()?>/equipos/<?=$opponents->getLink()?>/"> <?=htmlentities($opponents->name)?> </a> </td> <td> <i style="color: #666" <? if ($this->team->isManager()) { ?>class="editableResult"<?}?>> <?= ($this->team->isManager() || $match->isPublished()) ? $resultNames[$match->result][$posIndex] : $resultNames[0][0] ?> </i> <form class="editResult" method="POST" action="<?=HTMLResponse::getRoute()?>"> <select name="result"> <? foreach($resultNames as $index => $names) { ?><option <?=($index==$match->result?'selected':'')?> value="<?=$index?>"><?=$names[$posIndex]?></option><? } ?> </select> <input type="hidden" name="matchid" value="<?=$match->matchid?>"> </form> </td> <td> <? $this->showMatchVideo($this->team, $match, 2, "Ver Team Preview") ?> <? $this->showMatchVideo($this->team, $match, 1, "Ver Combate") ?> </td> </tr> <? } ?> </tbody> </table> <? $this->showFriendlyMatches(); if ($this->team->isManager()) { $this->checkPlayerChanges(); } $this->showPlayers(); if ($this->team->isManager()) { $this->showPlayersEditor(); } $sanctionLevels = Sanction::getLevelNames(); $sanctions = Sanction::find('seasonid = ? and teamid = ? order by dateline desc', [$this->season->seasonid, $this->team->teamid]); if ($sanctions && Team::isMember()) { ?> <h2>Sanciones recibidas</h2> <table style="min-width: 512px"> <thead> <tr> <!-- <td>Fecha</td> --> <td>Tipo</td> <td>Razón</td> </tr> </thead> <? foreach($sanctions as $sanction) { ?> <tr> <!-- <td style="font-style: italic"> <?= date("Y-m-d H:i:s", $sanction->dateline) ?> </td> --> <td> <?= $sanctionLevels[$sanction->level] ?> <? if (Team::isAdmin()) { ?> <i style="color: #666"> por </i> <?= htmlentities($sanction->adminname) ?> <? } ?> </td> <td> <?= htmlentities($sanction->reason) ?> </td> </tr> <? } ?> </table><br> <? } if (Team::isAdmin()) { $postCsrf = HTMLResponse::fromPOST('sanctioncsrf', ''); if ($postCsrf == $csrf) { if (strlen($reason = HTMLResponse::fromPOST('sanctionreason'))) { $sanction = Sanction::create(); $sanction->adminid = TwitterAuth::getUserId(); $sanction->adminname = TwitterAuth::getUserName(); $sanction->dateline = time(); $sanction->reason = $reason; $sanction->seasonid = $this->season->seasonid; $sanction->teamid = $this->team->teamid; $sanction->level = HTMLResponse::fromPOST('sanctionlevel', 0); $sanction->save(); HTMLResponse::exitWithRoute(HTMLResponse::getRoute()); } } ?> <h2>Añadir nueva sanción</h2> <form action="<?=HTMLResponse::getRoute()?>" method="post"> <table style="min-width: 512px"> <thead> <tr> <td>Tipo</td> <td>Razón</td> </tr> </thead> <tr> <td> <select name="sanctionlevel"> <? foreach ($sanctionLevels as $index => $label) { ?> <option value="<?=$index?>"> <?= $label ?> </option> <? } ?> </select> </td> <td> <textarea name="sanctionreason" style="width: 250px"></textarea> </td> </tr> </table> <input type="hidden" name="sanctioncsrf" value="<?=$csrf?>"> <div style="height: 6px"></div> <button type="submit">Añadir sanción</button> </form> <? } ?><br> <? $this->showTeamSeasons(); ?> </div> <? }
/** * @return void */ public function show() { if (!TwitterAuth::isLogged()) { ?> Sólo los administradores pueden ver esta página. <a href="<?=HTMLResponse::getRoute()?>?authenticate=1"> Inicia sesión. </a><br> <? return; } else if (!Team::isAdmin()) { ?> Sólo los administradores pueden ver esta página.<br> <? return; } else { $title = trim(HTMLResponse::fromPOST('title', '')); $description = trim(HTMLResponse::fromPOST('description', '')); $options = []; for ($i=1; $i<6; $i++) { $value = trim(HTMLResponse::fromPOST('option'.$i, '')); if (strlen($value)) { $options[] = $value; } } if (strlen($title) && count($options)>=2) { $poll = Poll::create(); $poll->title = $title; $poll->description = $description; $poll->isvisible = true; $poll->isopen = true; $poll->username = TwitterAuth::getUserName(); $poll->userid = TwitterAuth::getUserId(); $poll->dateline = time(); $poll->avatar = TwitterAuth::getAvatar(); $poll->save(); foreach($options as $index => $option) { $pollOption = PollOption::create(); $pollOption->pollid = $poll->pollid; $pollOption->userid = TwitterAuth::getUserId(); $pollOption->username = TwitterAuth::getUserName(); $pollOption->title = $option; $pollOption->save(); } HTMLResponse::exitWithRoute("/votaciones/{$poll->pollid}/"); } ?> <form action="<?=HTMLResponse::getRoute()?>" method="post"> <div style="padding:3px"> <div class="inblock middle" style="width:120px"> Título </div> <input name="title" value="<?=htmlentities($title)?>"> </div> <div style="padding:3px"> <div class="inblock middle" style="width:120px"> Descripción </div> <input name="description" value="<?=htmlentities($description)?>"> </div> <? for ($i=1; $i<=6; $i++) { ?> <div style="padding:3px"> <div class="inblock middle" style="width:120px"> Opción <?=$i?> </div> <input name="option<?=$i?>" value="<?=htmlentities($options[$i-1])?>"> </div> <? } ?> <div style="padding:3px"> <div class="inblock middle" style="width:120px"> </div> <input type="submit" value="Crear votación"> </div> </form> <? } }
require_once $file; } require "config.php"; foreach (glob("models/*.php") as $file) { require_once $file; } require_once 'PublicDesign.php'; require_once 'PublicSection.php'; $router = new Router(); $rId = '([^/|\\-]+)'; $rDir = '([^/]+)'; $rNum = '([0-9]+)'; $rExtra = '(?:-[^/]*)?'; $rIdExtra = "{$rId}{$rExtra}"; $rNumExtra = "{$rNum}{$rExtra}"; if (Team::isAdmin()) { $router->addRoute("/unete/", array('JoinUs')); } $router->addRoute("/normas/", array('Rules')); $router->addRoute("/votaciones/", array('Polls')); $router->addRoute("/votaciones/crear/", array('AddPoll')); $router->addRoute("/votaciones/{$rNum}/", array('ViewPoll')); $router->addRoute("/admin/", array('Admin_Index')); $router->addRoute("/admin/comunicados/", array('Admin_Notices')); $router->addRoute("/admin/equipos/", array('Admin_Teams')); $router->addRoute("/admin/equipos/{$rNum}/", array('Admin_Team')); $router->addRoute("/admin/temporadas/", array('Admin_Seasons')); $router->addRoute("/admin/temporadas/{$rNum}/", array('Admin_Season')); $router->addRoute("/admin/temporadas/{$rNum}/jornadas/", array('Admin_Season_Weeks')); $router->addRoute("/admin/temporadas/{$rNum}/eventos/", array('Admin_Season_Events')); $router->addRoute("/", array('Index'));
public function __construct(PublicSection $section) { parent::__construct(); if (HTMLResponse::fromGET('authenticate')) { HTMLResponse::exitWithRoute(TwitterAuth::getAuthorizeURL(HTMLResponse::getRoute())); } if (HTMLResponse::fromGET('logout')) { session_destroy(); HTMLResponse::exitWithRoute(HTMLResponse::getRoute()); } TwitterAuth::isLogged(); if (TwitterAuth::isBot()) { if (HTMLResponse::fromGET('authenticatebot')) { HTMLResponse::exitWithRoute(TwitterAuth::getBotAuthorizeURL(HTMLResponse::getRoute())); } TwitterAuth::doBotLogin(); } $this->topMenu = array(); $this->setMeta('charset', 'utf-8'); $this->setMeta('viewport', 'width=device-width, initial-scale=1.0'); $this->setTitle($section->getTitle() . ' - ' . $section->getSubtitle()); $this->addStyleSheet('/css/style.css'); if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1' || $_SERVER['REMOTE_ADDR'] == '::1') { $this->addJavaScript("http://localhost/jquery.js", true); } else { $this->addJavaScript("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js", true); } $this->addJavaScript(" $(document).ready(function() { if(screen.width <= 512) { document.getElementById('meta-viewport').setAttribute('content','width=512'); } }) ", false); $this->season = null; if ($_SESSION['seasonid']) { $this->season = Season::get($_SESSION['seasonid']); } $section->setDesign($this); $this->section = $section; if ($this->season == null) { $this->season = Season::findOne('ispublic order by isdefault desc'); } $seasonLink = $this->season->getLink(); $this->addToTopMenu("/{$seasonLink}/", 'Enfrentamientos', '/'); $this->addToTopMenu("/{$seasonLink}/equipos/", 'Equipos', '/equipos/.*'); $this->addToTopMenu("/{$seasonLink}/calendario/", 'Calendario', '/calendario/'); $this->addToTopMenu("/{$seasonLink}/clasificacion/", 'Clasificación', '/clasificacion/'); $this->addToTopMenu("/{$seasonLink}/quiniela/", 'Quiniela', '/quiniela/'); $this->addToTopMenu('/normas/', 'Normas', '/normas/'); if (Team::isAdmin()) { $this->addToTopMenu('/unete/', '¡Únete!', '/unete/'); } /* if (Team::isMember()) { // $this->addToTopMenu('/votaciones/', 'Votaciones', '/votaciones/.*'); } if (Team::isSuperAdmin()) { // $this->addToTopMenu('/admin/', 'Admin', '/admin/.*'); // $this->addToTopMenu('/comunicados/', 'Comunicados', '/comunicados/.*'); } */ $this->addJavaScript('/js/lce.js', true); $this->addStyleSheet(" html { background: url(/".$this->season->getBackgroundLink().") no-repeat center center fixed; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; } ", false); ob_start(); $this->section->show(); $this->contents = ob_get_contents(); ob_end_clean(); }