forked from zer.ooo/web
Merge pull request #8 from EaterOfCode/master
Update release to new version with new fancy featuresmaster
commit
6498a21b56
@ -1,15 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
$basedir = realpath(__DIR__ . '/../');
|
||||
# All calls are now relative to the root directory
|
||||
chdir($basedir);
|
||||
|
||||
include $basedir . '/vendor/autoload.php';
|
||||
|
||||
$core = new \Eater\Glim\Core();
|
||||
$core->startTimer(["total"]);
|
||||
$core->boot($basedir);
|
||||
echo $core->get('user')->createInvite();
|
||||
$core->endTimer(["total"]);
|
||||
|
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
cd "$(realpath "$(dirname "$0")/..")";
|
||||
|
||||
composer install;
|
||||
mkdir storage;
|
||||
touch storage/db.sqlite;
|
||||
./vendor/bin/propel sql:build
|
||||
./vendor/bin/propel sql:insert;
|
||||
|
||||
echo "Done setting up web environment"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"mappings": "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",
|
||||
"mappings": "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",
|
||||
"sources": ["main.scss","navigation.sass","forms.sass"],
|
||||
"names": [],
|
||||
"file": "main.css"
|
||||
|
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace Eater\Glim\Handler\Panel;
|
||||
|
||||
|
||||
use Aura\Session\Segment;
|
||||
use Eater\Glim\Handler\Session;
|
||||
|
||||
class Invites extends Session
|
||||
{
|
||||
protected $shouldHaveUser = true;
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$user = $this->getUser();
|
||||
|
||||
$invites = $user->getInvites();
|
||||
|
||||
/** @var Segment $segment */
|
||||
$segment = $this->get('session')->getSegment('main');
|
||||
|
||||
return $this->render('panel/invites.html.twig', [
|
||||
'invites' => $invites,
|
||||
'error' => $segment->getFlash('error'),
|
||||
'used_invites' => $user->getUsedInvites(),
|
||||
'max_invites' => $user->getMaxInvites()
|
||||
]);
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace Eater\Glim\Handler\Panel\Invites;
|
||||
|
||||
|
||||
use Eater\Glim\Handler\Session;
|
||||
use Eater\Glim\Service\User;
|
||||
use Aura\Session\Segment;
|
||||
|
||||
class Create extends Session
|
||||
{
|
||||
public function handle()
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = $this->get('user');
|
||||
|
||||
$userModel = $this->getUser();
|
||||
|
||||
if ($userModel->getUsedInvites() < $userModel->getMaxInvites() || $userModel->getMaxInvites() === -1) {
|
||||
$user->createInvite($userModel);
|
||||
} else {
|
||||
/** @var Segment $segment */
|
||||
$segment = $this->get('session')->getSegment('main');
|
||||
$segment->setFlash('error', 'You dont have any invites anymore');
|
||||
}
|
||||
|
||||
return $this->redirect('/panel/invites');
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace Eater\Glim\Service;
|
||||
|
||||
use Stash\Pool;
|
||||
|
||||
class GitHub extends Main
|
||||
{
|
||||
public function getContributors() {
|
||||
|
||||
/** @var Pool $pool */
|
||||
$pool = $this->get('stash');
|
||||
|
||||
$contributors = $pool->getItem('github/contributors');
|
||||
|
||||
if ($contributors->isMiss()) {
|
||||
$contributorsData = [];
|
||||
|
||||
try {
|
||||
$contributorsJson = @$this->fetch('/repos/' . $this->get('github-repo') . '/contributors');
|
||||
$contributorsNewData = json_decode($contributorsJson, true);
|
||||
if ($contributorsNewData !== null) {
|
||||
$contributorsData = $contributorsNewData;
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
|
||||
$info = $this->getRepoInfo();
|
||||
|
||||
if ($info !== false) {
|
||||
|
||||
$ownerId = $info['owner']['id'];
|
||||
|
||||
$contributorsNewData = [];
|
||||
|
||||
foreach ($contributorsData as $contributor) {
|
||||
if ($contributor['id'] !== $ownerId) {
|
||||
$contributorsNewData[] = $contributor;
|
||||
}
|
||||
}
|
||||
|
||||
$contributorsData = $contributorsNewData;
|
||||
}
|
||||
|
||||
$contributors->expiresAfter(3600);
|
||||
$contributors->set($contributorsData);
|
||||
$contributors->save();
|
||||
}
|
||||
|
||||
return $contributors->get();
|
||||
}
|
||||
|
||||
public function getRepoInfo() {
|
||||
/** @var Pool $pool */
|
||||
$pool = $this->get('stash');
|
||||
|
||||
$info = $pool->getItem('github/info');
|
||||
|
||||
if ($info->isMiss()) {
|
||||
$infoData = false;
|
||||
|
||||
try {
|
||||
$infoJson = @$this->fetch('/repos/' . $this->get('github-repo'));
|
||||
$infoNewData = json_decode($infoJson, true);
|
||||
if ($infoNewData !== null) {
|
||||
$infoData = $infoNewData;
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
|
||||
$info->expiresAfter(3600);
|
||||
$info->set($infoData);
|
||||
$info->save();
|
||||
}
|
||||
|
||||
return $info->get();
|
||||
}
|
||||
|
||||
private function fetch($path)
|
||||
{
|
||||
$options = array('http' => array('user_agent'=> $_SERVER['HTTP_USER_AGENT']));
|
||||
$context = stream_context_create($options);
|
||||
return file_get_contents('https://api.github.com' . $path, false, $context);
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace Eater\Glim\Service;
|
||||
use Stash\Pool;
|
||||
use Stash\Driver\FileSystem;
|
||||
|
||||
class Stash
|
||||
{
|
||||
static public function init() {
|
||||
$driver = new FileSystem();
|
||||
$pool = new Pool($driver);
|
||||
|
||||
return $pool;
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
{% extends "base_bootstrap.html.twig" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<h2 id="certificates">Invites <small>You used {{ used_invites }} from your {{ max_invites == -1 ? 'infinite' : max_invites }} invites</small></h2>
|
||||
</div>
|
||||
{% if error %}
|
||||
<div class="row">
|
||||
<div class="alert alert-warning" role="alert">
|
||||
{{ error }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="row">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Invite</th>
|
||||
<th>
|
||||
{% if max_invites > used_invites or max_invites == -1 %}
|
||||
<form action="/panel/invites/create" method="post">
|
||||
<button class="btn btn-default pull-right" type="submit">Create new invite</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for invite in invites %}
|
||||
<tr>
|
||||
<td>
|
||||
<kbd>{{ invite.getInvite() }}</kbd>
|
||||
</td>
|
||||
<td>
|
||||
<button class="btn btn-default">Copy</button>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="2">You don't have any invites :(</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
Loading…
Reference in New Issue