From 888906fd2d4b12b1e5fd315092a7c8d0ef47a098 Mon Sep 17 00:00:00 2001
From: Fibinger Ádám <adam.fibinger@wup.hu>
Date: Thu, 10 Oct 2019 16:36:12 +0200
Subject: [PATCH] Stripe adatok validálása + extra típus beépítése

---
 EOG/Models/Stripe.php       |  126 +++++++++++++++++++++++++++++++
 create.php                  |   29 +------
 templates/overlay-base.twig |   83 +++++++++++---------
 3 files changed, 174 insertions(+), 64 deletions(-)

diff --git a/EOG/Models/Stripe.php b/EOG/Models/Stripe.php
new file mode 100644
index 0000000..dce29c0
--- /dev/null
+++ b/EOG/Models/Stripe.php
@@ -0,0 +1,126 @@
+<?php
+
+namespace EOG\Models;
+
+class Stripe
+{
+    const TEAM_BLUE = 'blue';
+    const TEAM_ORANGE = 'orange';
+
+    private $allowedColors = [self::TEAM_BLUE, self::TEAM_ORANGE];
+    private $allowedStripeClasses = ['team', 'simple'];
+    private $allowedOperators = [
+        'alibi', 'amaru', 'ash', 'bandit', 'blackbeard', 'blitz', 'buck', 'capitao', 'castle',
+        'caveira', 'clash', 'doc', 'dokkaebi', 'echo', 'ela', 'finka', 'frost', 'fuze',
+        'glaz', 'goyo', 'gridlock', 'hibana', 'iq', 'jackal', 'jager', 'kaid', 'kapkan',
+        'lesion', 'lion', 'maestro', 'maverick', 'mira', 'montagne', 'mozzie', 'mute', 'nokk',
+        'nomad', 'pulse', 'rook', 'sledge', 'smoke', 'tachanka', 'thatcher', 'thermite', 'twitch',
+        'valkyrie', 'vigil', 'warden', 'ying', 'zofia'];
+    protected $state = [
+        'stripe' => [
+            'class' => 'team',
+        ],
+        'cup' => [
+            'number' => '#75',
+            'name' => '5on5 Open Cup',
+        ],
+        'team' => [
+            'orange' =>
+                [
+                    'name' => 'Narancs Csapat',
+                    'ban' => [
+                        'mira',
+                        'jackal'
+                    ]
+                ],
+            'blue' => [
+                'name' => 'Kék csapat',
+                'ban' => [
+                    'rook',
+                    'blitz'
+                ]
+            ]
+        ]
+    ];
+
+    public function setClass(string $class): self
+    {
+        if (!in_array($class, $this->allowedStripeClasses)) {
+            throw new \InvalidArgumentException("Given class " . $class . " not allowed. Allowed classes: " . implode(', ', $this->allowedStripeClasses));
+        }
+
+        if ($class === 'simple') {
+            $this->setSimpleStripe();
+        }
+
+        $this->state['stripe']['class'] = $class;
+
+        return $this;
+    }
+
+    private function setSimpleStripe()
+    {
+        unset($this->state['team']);
+    }
+
+    public function setCup(string $number, string $name)
+    {
+        $this->state['cup']['number'] = $number;
+        $this->state['cup']['name'] = $name;
+    }
+
+    /**
+     * @param string $color Csapat szín validáció
+     *
+     * Dob egy Exception-t ha nem orange / blue
+     */
+    private function testColor(string $color)
+    {
+        if (!in_array($color, $this->allowedColors)) {
+            throw new \InvalidArgumentException("Given colour " . $team_color . " not allowed. Allowed colours: " . implode(', ', $this->allowedColors));
+        }
+    }
+
+    public function setTeamName(string $team_color = self::TEAM_BLUE, $name)
+    {
+        $this->testColor($team_color);
+        $this->state['team'][$team_color]['name'] = $name;
+    }
+
+    public function addTeamBan(string $team_color = self::TEAM_BLUE, $operator)
+    {
+        $this->testColor($team_color);
+        if (!in_array($operator, $this->allowedOperators)) {
+            //FIXME: védő és támadó operátorok külön
+            throw new \InvalidArgumentException("Given operator not allowed:  " . $operator . " Allowed operators: " . implode(', ', $this->allowedOperators));
+        }
+    }
+
+    public function __get($name)
+    {
+        if ($this->__isset($name)) {
+            return $this->state[$name];
+        }
+
+        return null;
+    }
+
+    public function __isset($name)
+    {
+        return isset($this->state[$name]);
+    }
+
+    public function loadJson(string $json)
+    {
+        $state = json_decode($json);
+
+        if (!empty($state['stripe']["class"])) {
+            $this->setClass($state['stripe']["class"]);
+        }
+
+        if (!empty($state['cup']['name']) && !empty($state['cup']['number'])) {
+            $this->setCup($state['cup']['number'], $state['cup']['name']);
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/create.php b/create.php
index 40fdd35..58664dd 100644
--- a/create.php
+++ b/create.php
@@ -3,33 +3,12 @@
 
 define('IS_DEV', true);
 define('SITE_ROOT', __DIR__);
+define('OVERLAY_DIR', dirname(__DIR__) . '/esl-overlay/');
 
 $twig = \EOG\Utils\TwigFactory::getEnvironment(SITE_ROOT);
 
-$variables = [
-	'cup' => [
-		'number' => '#75',
-		'name' => '5on5 Open Cup',
-	],
-	'team' => [
-		'orange' =>
-		[
-			'name' => 'Dompa Esports Community',
-			'ban' => [
-				'mira',
-				'jackal'
-			]
-		],
-		'blue' => [
-			'name' => 'The Grizz Esports',
-			'ban' => [
-				'rook',
-				'blitz'
-			]
-		]
-	]
-];
+$s = new \EOG\Models\Stripe();
 
+$html_content = $twig->render('templates/overlay-base.twig', ['stripe' => $s ]);
 
-$html_content = $twig->render('templates/overlay-base.twig', $variables);
-file_put_contents('overlay/generated.html', $html_content);
\ No newline at end of file
+file_put_contents(OVERLAY_DIR . 'generated.html', $html_content);
\ No newline at end of file
diff --git a/templates/overlay-base.twig b/templates/overlay-base.twig
index fc44d75..68083f3 100644
--- a/templates/overlay-base.twig
+++ b/templates/overlay-base.twig
@@ -1,57 +1,62 @@
 <!DOCTYPE html>
 <html>
 <head>
-	<meta charset="UTF-8">
-	<link href="https://fonts.googleapis.com/css?family=Oswald&display=swap" rel="stylesheet">
-	<link rel="stylesheet" href="/assets/overlay.css">
-	<link rel="stylesheet" href="/assets/operators-color.css">
+    <meta charset="UTF-8">
+    <link href="https://fonts.googleapis.com/css?family=Oswald&display=swap" rel="stylesheet">
+    <link rel="stylesheet" href="/assets/overlay.css">
+    <link rel="stylesheet" href="/assets/operators-color.css">
 </head>
 <body>
 {% block stripe %}
-	<div id="stripe">
-		{% block info_left %}
-			<span class="info left">
+    <div id="stripe" class="{{ stripe.stripe.class }}">
+        {% block info_left %}
+            <span class="info left">
 				<img src="/assets/hun.png" class="flag hun">
 				<span class="text">
-					<em>{{ cup.number }}</em> {{ cup.name }}
+					<em>{{ stripe.cup.number }}</em> {{ stripe.cup.name }}
 				</span>
 			</span>
-		{% endblock %}
-		{% block team_blue %}
-			<span class="team blue">
-				<span class="name">{{ team.blue.name }}</span>
-			</span>
-			<span class="ban blue">
-				{% for op in team.blue.ban %}
-					<span class="operator {{ op }}">
+        {% endblock %}
+        {% block team_blue %}
+            {% if stripe.team.blue %}
+                <span class="team blue">
+					<span class="name">{{ stripe.team.blue.name }}</span>
+				</span>
+                <span class="ban blue">
+				{% for op in stripe.team.blue.ban %}
+                    <span class="operator {{ op }}">
 						<span class="prohibit">x</span>
 					</span>
-				{% endfor %}
+                {% endfor %}
 			</span>
-		{% endblock %}
-		{% block logo %}
-			<span class="logo"></span>
-		{% endblock %}
+            {% endif %}
+        {% endblock %}
+        {% block logo %}
+            <span class="logo"></span>
+        {% endblock %}
 
-		{% block team_orange %}
-			<span class="team orange">
-			<span class="name">{{ team.orange.name }}</span>
-		</span>
-			<span class="ban orange">
-				{% for op in team.orange.ban %}
-					<span class="operator {{ op }}">
-						<span class="prohibit">x</span>
-					</span>
-				{% endfor %}
+        {% block team_orange %}
+            {% if stripe.team.orange %}
+                <span class="team orange">
+					<span class="name">{{ stripe.team.orange.name }}</span>
+				</span>
+
+                <span class="ban orange">
+					{% for op in stripe.team.orange.ban %}
+                        <span class="operator {{ op }}">
+							<span class="prohibit">x</span>
+						</span>
+                    {% endfor %}
+				</span>
+            {% endif %}
+        {% endblock %}
+
+        {% block info_right %}
+            <span class="info right">
+				<img class="esl-logo" src="/assets/ESL_Logo.png"/>
 			</span>
-		{% endblock %}
-
-		{% block info_right %}
-			<span class="info right">
-			<img class="esl-logo" src="/assets/ESL_Logo.png"/>
-		</span>
-		{% endblock %}
-	</div>
+        {% endblock %}
+    </div>
 {% endblock %}
 </body>
 </html>

--
Gitblit v1.8.0