Check changelog
This commit is contained in:
parent
a8de1cbdf1
commit
21b043cfa3
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$header = <<<EOF
|
||||||
|
This file is part of Resume.PHP.
|
||||||
|
|
||||||
|
(copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
|
||||||
|
For the full copyright and license information, please view the LICENSE
|
||||||
|
file that was distributed with this source code.
|
||||||
|
EOF;
|
||||||
|
|
||||||
|
Symfony\CS\Fixer\Contrib\HeaderCommentFixer::setHeader($header);
|
||||||
|
|
||||||
|
$finder = Symfony\CS\Finder\DefaultFinder::create()
|
||||||
|
->exclude('vendor')
|
||||||
|
->exclude('tests')
|
||||||
|
->exclude('var')
|
||||||
|
->exclude('node_modules')
|
||||||
|
->ignoreDotFiles(true)
|
||||||
|
->ignoreVCS(true)
|
||||||
|
->name('*.php')
|
||||||
|
->in(__DIR__)
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
return Symfony\CS\Config\Config::create()
|
||||||
|
->level(Symfony\CS\FixerInterface::PSR2_LEVEL)
|
||||||
|
->fixers(
|
||||||
|
[
|
||||||
|
'header_comment',
|
||||||
|
'ordered_use',
|
||||||
|
'php_unit_construct',
|
||||||
|
'php_unit_strict',
|
||||||
|
'strict',
|
||||||
|
'strict_param',
|
||||||
|
'symfony',
|
||||||
|
'newline_after_open_tag',
|
||||||
|
'phpdoc_order',
|
||||||
|
'short_array_syntax',
|
||||||
|
'short_echo_tag',
|
||||||
|
|
||||||
|
|
||||||
|
]
|
||||||
|
)
|
||||||
|
->finder($finder)
|
||||||
|
;
|
134
app/App.php
134
app/App.php
|
@ -1,6 +1,17 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
use Sikofitt\Config\ConfigTrait;
|
use Sikofitt\Config\ConfigTrait;
|
||||||
|
use Sikofitt\Json\JsonFileTrait;
|
||||||
|
use Sikofitt\Json\JsonTrait;
|
||||||
use Silex\Application;
|
use Silex\Application;
|
||||||
|
|
||||||
require '../vendor/autoload.php';
|
require '../vendor/autoload.php';
|
||||||
|
@ -8,16 +19,17 @@ require '../vendor/autoload.php';
|
||||||
/**
|
/**
|
||||||
* Class App
|
* Class App
|
||||||
*/
|
*/
|
||||||
class App extends Application {
|
class App extends Application
|
||||||
|
{
|
||||||
|
|
||||||
use ConfigTrait;
|
use ConfigTrait;
|
||||||
use Application\TwigTrait;
|
use JsonTrait;
|
||||||
use Application\MonologTrait;
|
use JsonFileTrait;
|
||||||
use Application\SwiftmailerTrait;
|
use Application\TwigTrait;
|
||||||
use Application\TranslationTrait;
|
use Application\MonologTrait;
|
||||||
use Application\UrlGeneratorTrait;
|
use Application\SwiftmailerTrait;
|
||||||
|
use Application\TranslationTrait;
|
||||||
public $conf;
|
use Application\UrlGeneratorTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the application directory.
|
* Returns the application directory.
|
||||||
|
@ -25,9 +37,10 @@ class App extends Application {
|
||||||
* @return string
|
* @return string
|
||||||
* The main application directory.
|
* The main application directory.
|
||||||
*/
|
*/
|
||||||
public function getAppDirectory() {
|
public function getAppDirectory()
|
||||||
$r = new ReflectionClass($this);
|
{
|
||||||
return dirname($r->getFileName());
|
$r = new ReflectionClass($this);
|
||||||
|
return dirname($r->getFileName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,38 +49,48 @@ class App extends Application {
|
||||||
* @return string
|
* @return string
|
||||||
* The root directory of the application.
|
* The root directory of the application.
|
||||||
*/
|
*/
|
||||||
public function getRootDirectory() {
|
public function getRootDirectory()
|
||||||
return dirname($this->getAppDirectory());
|
{
|
||||||
|
return dirname($this->getAppDirectory());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getConfDirectory() {
|
public function getConfDirectory()
|
||||||
return $this->getAppDirectory() . '/config';
|
{
|
||||||
|
return $this->getAppDirectory() . '/config';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getDataDirectory() {
|
public function getDataDirectory()
|
||||||
return $this->getRootDirectory() . '/data';
|
{
|
||||||
|
return $this->getRootDirectory() . '/data';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getResumeJson() {
|
public function getResumeJson()
|
||||||
return $this->getDataDirectory() . '/resume.json';
|
{
|
||||||
|
return $this->getDataDirectory() . '/resume.json';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getResumeSchema() {
|
public function getResumeSchema()
|
||||||
return $this->getDataDirectory() . '/resume.schema.json';
|
{
|
||||||
|
return $this->getDataDirectory() . '/resume.schema.json';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLogDirectory()
|
||||||
|
{
|
||||||
|
return $this->getDataDirectory() . '/logs';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers media icons
|
* Registers media icons
|
||||||
*
|
*
|
||||||
|
@ -77,15 +100,64 @@ class App extends Application {
|
||||||
{
|
{
|
||||||
$this->config(sprintf('app.icons.%s', $icon->getName()), ['icon' => $icon->getIcon(), 'url' => $icon->getDefaultUrl()]);
|
$this->config(sprintf('app.icons.%s', $icon->getName()), ['icon' => $icon->getIcon(), 'url' => $icon->getDefaultUrl()]);
|
||||||
}
|
}
|
||||||
|
public function setDebug()
|
||||||
|
{
|
||||||
|
$this['debug'] = null !== $this->config('app.debug') ? $this->config('app.debug') : true;
|
||||||
|
$this['env'] = getenv('PHP_ENV');
|
||||||
|
if (!$this['env']) {
|
||||||
|
$this['env'] = null !== $this->config('app.environment') ? $this->config('app.environment') : 'dev';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public function registerExtenders()
|
||||||
|
{
|
||||||
|
if (!$this['debug']) {
|
||||||
|
$this->error(function (\Exception $e, \Symfony\Component\HttpFoundation\Request $request, $code) {
|
||||||
|
switch ($code) {
|
||||||
|
case 405:
|
||||||
|
|
||||||
public function boot() {
|
|
||||||
// register default icons
|
preg_match('/\(Allow\:(.+)\)/', $e->getMessage(), $matches);
|
||||||
$this->registerIcon(new \Sikofitt\Image\Profile\TwitterProfileIcon());
|
if(isset($matches[1])) {
|
||||||
$this->registerIcon(new \Sikofitt\Image\Profile\FacebookProfileIcon());
|
$matches = trim($matches[1]);
|
||||||
$this->registerIcon(new \Sikofitt\Image\Profile\GithubProfileIcon());
|
} elseif(isset($matches[0])) {
|
||||||
$this->registerIcon(new \Sikofitt\Image\Profile\GitlabProfileIcon());
|
$matches = trim($matches[0]);
|
||||||
$this->registerIcon(new \Sikofitt\Image\Profile\LinkedinProfileIcon());
|
} else {
|
||||||
return parent::boot();
|
$matches = 'Available methods are unknown.';
|
||||||
|
}
|
||||||
|
$message = json_encode(['status' => 'error', 'message' => 'Method not allowed', 'allowedMethods' => $matches, 'requestedMethod' => $request->getMethod(), 'code' => $code]);
|
||||||
|
//$message = 'Sorry bout that.<br />' . $e->getMessage();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$message = $this['twig']->render('error500.html.twig');
|
||||||
|
}
|
||||||
|
return new \Symfony\Component\HttpFoundation\Response($message, $code);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$this->extend('twig', function (\Twig_Environment $twig) {
|
||||||
|
if ($this['debug']) {
|
||||||
|
$twig->enableDebug();
|
||||||
|
}
|
||||||
|
$twig->addExtension(new Twig_Extensions_Extension_Date());
|
||||||
|
$twig->addExtension(new Sikofitt\Twig\Date());
|
||||||
|
$twig->addExtension(new Sikofitt\Twig\RenderProfile());
|
||||||
|
$twig->addGlobal('config', $this->config('all'));
|
||||||
|
return $twig;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
public function boot()
|
||||||
|
{
|
||||||
|
$this->registerExtenders();
|
||||||
|
// register default icons
|
||||||
|
$this->registerDefaultIcons();
|
||||||
|
return parent::boot();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerDefaultIcons()
|
||||||
|
{
|
||||||
|
$this->registerIcon(new \Sikofitt\Image\Profile\TwitterProfileIcon());
|
||||||
|
$this->registerIcon(new \Sikofitt\Image\Profile\FacebookProfileIcon());
|
||||||
|
$this->registerIcon(new \Sikofitt\Image\Profile\GithubProfileIcon());
|
||||||
|
$this->registerIcon(new \Sikofitt\Image\Profile\GitlabProfileIcon());
|
||||||
|
$this->registerIcon(new \Sikofitt\Image\Profile\LinkedinProfileIcon());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
app:
|
app:
|
||||||
debug: true
|
debug: false
|
||||||
environment: dev
|
environment: prod
|
||||||
title: R. Eric Wheeler | Resume
|
title: R. Eric Wheeler | Resume
|
||||||
|
email: eric@rewiv.com
|
||||||
|
phone: 510-646-2135
|
||||||
|
schema: https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json
|
||||||
twig:
|
twig:
|
||||||
paths:
|
paths:
|
||||||
- views
|
- views
|
||||||
|
|
|
@ -1,5 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'app' => 'neat',
|
'app' => 'neat',
|
||||||
];
|
];
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
$app->register(new \Sikofitt\Config\ConfigServiceProvider(), [
|
||||||
|
'config.path' => $app->getConfDirectory(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$app->setDebug();
|
||||||
|
|
||||||
|
if (null === $app->config('app.schema')) {
|
||||||
|
$app->config('app.schema', 'https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json');
|
||||||
|
}
|
||||||
|
|
||||||
|
$app->register(new \Silex\Provider\TwigServiceProvider(), [
|
||||||
|
'twig.path' => [
|
||||||
|
$app->getRootDirectory() . '/app/views',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
$app->register(new \Sikofitt\Json\JsonServiceProvider());
|
||||||
|
|
||||||
|
|
||||||
|
$app->register(new \Silex\Provider\AssetServiceProvider());
|
||||||
|
$app->register(new \Silex\Provider\MonologServiceProvider());
|
||||||
|
$app->register(new \Silex\Provider\SessionServiceProvider());
|
||||||
|
$app->register(new \Silex\Provider\HttpKernelServiceProvider());
|
||||||
|
$app->register(new \Silex\Provider\FormServiceProvider());
|
||||||
|
|
||||||
|
|
||||||
|
$app->register(new \Silex\Provider\MonologServiceProvider(),
|
||||||
|
[
|
||||||
|
'monolog.logfile' => sprintf('%s/%s.log', $app->getLogDirectory(), $app['env']),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$app->register(new \Silex\Provider\RoutingServiceProvider());
|
||||||
|
$app->register(new \Silex\Provider\ServiceControllerServiceProvider());
|
||||||
|
$app->register(new \Silex\Provider\HttpFragmentServiceProvider());
|
||||||
|
if ($app['debug'] || 0 === strcasecmp($app['env'], 'dev')) {
|
||||||
|
$app->register(new \Silex\Provider\WebProfilerServiceProvider(), [
|
||||||
|
'profiler.cache_dir' => $app->getDataDirectory() . '/cache/profiler',
|
||||||
|
]);
|
||||||
|
$app->register(new \WhoopsSilex\WhoopsServiceProvider());
|
||||||
|
$app->register(new \Silex\Provider\VarDumperServiceProvider());
|
||||||
|
}
|
|
@ -5,7 +5,6 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
|
||||||
|
|
||||||
<div class="uk-grid" data-uk-grid-margin>
|
<div class="uk-grid" data-uk-grid-margin>
|
||||||
<div class="uk-width-1-1">
|
<div class="uk-width-1-1">
|
||||||
<h1 class="uk-heading-large">
|
<h1 class="uk-heading-large">
|
||||||
|
@ -62,7 +61,7 @@
|
||||||
<dl class="uk-description-list-horizontal uk-animation-slide-right">
|
<dl class="uk-description-list-horizontal uk-animation-slide-right">
|
||||||
<dt>Highlights</dt>
|
<dt>Highlights</dt>
|
||||||
{% for highlight in position.highlights %}
|
{% for highlight in position.highlights %}
|
||||||
<dd class="uk-margin-small-top uk-margin-small-bottom">{{ highlight|raw }}</dd>
|
<dd class="uk-margin-small-top uk-margin-small-bottom">{{ highlight|raw }} {# raw is deprecated in 2.0 #}</dd>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</dl>
|
</dl>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -73,6 +72,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="uk-width-medium-1-4">
|
<div class="uk-width-medium-1-4">
|
||||||
|
|
||||||
<div class="uk-panel uk-panel-header uk-panel-box" data-uk-sticky="{top:35}">
|
<div class="uk-panel uk-panel-header uk-panel-box" data-uk-sticky="{top:35}">
|
||||||
|
@ -86,12 +86,10 @@
|
||||||
|
|
||||||
<ul class="uk-list uk-list-line">
|
<ul class="uk-list uk-list-line">
|
||||||
|
|
||||||
{% if basics.email is not empty %}
|
{% if app.config.app.email is not empty %}
|
||||||
<li class="uk-list-space"><a href="#" class="hidden-email">[Click to view email]</a></li>
|
|
||||||
|
<li class="uk-list-space"><a href="#captcha" class="hidden-email" data-uk-modal>[Hidden information]</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if basics.phone is not empty %}
|
|
||||||
<li class="uk-list-space">{{ basics.phone }}</li>
|
|
||||||
{% endif %}
|
|
||||||
{% if basics.website is not empty %}
|
{% if basics.website is not empty %}
|
||||||
<li class="uk-list-space"><a href="{{ basics.website }}" target="_blank"
|
<li class="uk-list-space"><a href="{{ basics.website }}" target="_blank"
|
||||||
title="Home page">{{ basics.website }}</a></li>
|
title="Home page">{{ basics.website }}</a></li>
|
||||||
|
@ -143,7 +141,31 @@
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<div id="captcha" class="uk-modal">
|
||||||
|
<div class="uk-modal-dialog uk-modal-dialog-blank">
|
||||||
|
<button class="uk-modal-close uk-close" type="button"></button>
|
||||||
|
|
||||||
|
<div class="uk-grid uk-flex-center uk-grid-match uk-grid-divider uk-flex-middle uk-height-viewport uk-cover-background" data-uk-grid-match>
|
||||||
|
|
||||||
|
<div id="recaptcha-wrapper">
|
||||||
|
<h1>Verify</h1>
|
||||||
|
<div>
|
||||||
|
<p> Verify that you are a human please.</p>
|
||||||
|
<form class="uk-form" id="recaptcha" method="post" action="/api/v1/captcha" onsubmit="return false;">
|
||||||
|
<div class="uk-form-row">
|
||||||
|
<div class="g-recaptcha" data-sitekey="6LcvmSQTAAAAAMmf9w6mhCbpdLvknuD9SGVHT0q-"></div>
|
||||||
|
</div>
|
||||||
|
<div class="uk-form-row">
|
||||||
|
<input type="submit" class="uk-button" id="submit" name="submit" value="Verify" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="offcanvas" class="uk-offcanvas">
|
<div id="offcanvas" class="uk-offcanvas">
|
||||||
<div class="uk-offcanvas-bar">
|
<div class="uk-offcanvas-bar">
|
||||||
|
@ -179,5 +201,36 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
{% block javascripts_foot %}
|
||||||
|
<script src='https://www.google.com/recaptcha/api.js'></script>
|
||||||
|
{% endblock %}
|
||||||
|
{% block inline_js_foot %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(document).ready(function($) {
|
||||||
|
jQuery('form#recaptcha').on('submit', function(event) {
|
||||||
|
event.stopImmediatePropagation();
|
||||||
|
event.stopPropagation();
|
||||||
|
jQuery.post(jQuery(this).attr('action'), jQuery(this).serialize(), function(response) {
|
||||||
|
|
||||||
|
data = JSON.parse(response);
|
||||||
|
if(false === data.valid) {
|
||||||
|
data.message.every(function (d) {
|
||||||
|
UIkit.notify('<i class="uk-icon-medium uk-icon-frown-o uk-icon-justify"></i> ' + d, {pos:'bottom-center', status: 'danger'});
|
||||||
|
})
|
||||||
|
} else if(true === data.valid) {
|
||||||
|
var divRoot = jQuery('<div />');
|
||||||
|
var h1 = jQuery('<h1 />');
|
||||||
|
h1.append(data.message.email);
|
||||||
|
var h2 = jQuery('<h2 />');
|
||||||
|
h2.append(data.message.phone);
|
||||||
|
divRoot.append(h1).append(h2);
|
||||||
|
jQuery('#recaptcha-wrapper').replaceWith(divRoot);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -18,6 +18,7 @@
|
||||||
<script src="js/vendor/jquery.min.js"></script>
|
<script src="js/vendor/jquery.min.js"></script>
|
||||||
<script src="js/vendor/uikit.min.js"></script>
|
<script src="js/vendor/uikit.min.js"></script>
|
||||||
<script src="js/vendor/sticky.min.js"></script>
|
<script src="js/vendor/sticky.min.js"></script>
|
||||||
|
<script src="{{ asset('js/vendor/notify.min.js') }}"></script>
|
||||||
{% block javascripts_head %}{% endblock %}
|
{% block javascripts_head %}{% endblock %}
|
||||||
{% block inline_js_head %}{% endblock %}
|
{% block inline_js_head %}{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -31,7 +31,8 @@
|
||||||
"**/scrollspy.min.js",
|
"**/scrollspy.min.js",
|
||||||
"**/parallax.min.js",
|
"**/parallax.min.js",
|
||||||
"**/offcanvas.min.js",
|
"**/offcanvas.min.js",
|
||||||
"**/sticky.min.js"
|
"**/sticky.min.js",
|
||||||
|
"**/notify.min.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"jquery": {
|
"jquery": {
|
||||||
|
|
|
@ -49,11 +49,13 @@
|
||||||
"symfony/var-dumper": "^3.1",
|
"symfony/var-dumper": "^3.1",
|
||||||
"symfony/console": "^3.1",
|
"symfony/console": "^3.1",
|
||||||
"texthtml/whoops-silex": "^1.0",
|
"texthtml/whoops-silex": "^1.0",
|
||||||
"symfony/debug-bundle": "^3.1"
|
"symfony/debug-bundle": "^3.1",
|
||||||
|
"friendsofphp/php-cs-fixer": "^1.11"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Sikofitt\\": "src/Sikofitt"
|
"Sikofitt\\": "src/Sikofitt"
|
||||||
}
|
},
|
||||||
|
"classmap": ["app/App.php"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"hash": "2e202af761710c5e2279e9f5b83a5192",
|
"hash": "84ec84a01cd2f9b1398d356bc5e7dc63",
|
||||||
"content-hash": "3c41da3f56c72d6c1bc86d0a1889d6d9",
|
"content-hash": "d91f02739d0cdaa4d0346a6c0f765fc3",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "google/recaptcha",
|
"name": "google/recaptcha",
|
||||||
|
@ -719,23 +719,23 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "swiftmailer/swiftmailer",
|
"name": "swiftmailer/swiftmailer",
|
||||||
"version": "v5.4.2",
|
"version": "v5.4.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/swiftmailer/swiftmailer.git",
|
"url": "https://github.com/swiftmailer/swiftmailer.git",
|
||||||
"reference": "d8db871a54619458a805229a057ea2af33c753e8"
|
"reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/d8db871a54619458a805229a057ea2af33c753e8",
|
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
|
||||||
"reference": "d8db871a54619458a805229a057ea2af33c753e8",
|
"reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.3"
|
"php": ">=5.3.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"mockery/mockery": "~0.9.1,<0.9.4"
|
"mockery/mockery": "~0.9.1"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
|
@ -768,7 +768,7 @@
|
||||||
"mail",
|
"mail",
|
||||||
"mailer"
|
"mailer"
|
||||||
],
|
],
|
||||||
"time": "2016-05-01 08:45:47"
|
"time": "2016-07-08 11:51:25"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/asset",
|
"name": "symfony/asset",
|
||||||
|
@ -2506,6 +2506,116 @@
|
||||||
],
|
],
|
||||||
"time": "2016-04-07 06:16:25"
|
"time": "2016-04-07 06:16:25"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "friendsofphp/php-cs-fixer",
|
||||||
|
"version": "v1.11.5",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
|
||||||
|
"reference": "d3d08b76753092a232a4d8c3b94095ac06898719"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/d3d08b76753092a232a4d8c3b94095ac06898719",
|
||||||
|
"reference": "d3d08b76753092a232a4d8c3b94095ac06898719",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-tokenizer": "*",
|
||||||
|
"php": ">=5.3.6",
|
||||||
|
"sebastian/diff": "~1.1",
|
||||||
|
"symfony/console": "~2.3|~3.0",
|
||||||
|
"symfony/event-dispatcher": "~2.1|~3.0",
|
||||||
|
"symfony/filesystem": "~2.1|~3.0",
|
||||||
|
"symfony/finder": "~2.1|~3.0",
|
||||||
|
"symfony/process": "~2.3|~3.0",
|
||||||
|
"symfony/stopwatch": "~2.5|~3.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"hhvm": "<3.9"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^4.5|^5",
|
||||||
|
"satooshi/php-coveralls": "^0.7.1"
|
||||||
|
},
|
||||||
|
"bin": [
|
||||||
|
"php-cs-fixer"
|
||||||
|
],
|
||||||
|
"type": "application",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\CS\\": "Symfony/CS/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Dariusz Rumiński",
|
||||||
|
"email": "dariusz.ruminski@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A tool to automatically fix PHP code style",
|
||||||
|
"time": "2016-07-06 22:49:35"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sebastian/diff",
|
||||||
|
"version": "1.4.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/sebastianbergmann/diff.git",
|
||||||
|
"reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
|
||||||
|
"reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.3"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "~4.8"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.4-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"classmap": [
|
||||||
|
"src/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"BSD-3-Clause"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Kore Nordmann",
|
||||||
|
"email": "mail@kore-nordmann.de"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Sebastian Bergmann",
|
||||||
|
"email": "sebastian@phpunit.de"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Diff implementation",
|
||||||
|
"homepage": "https://github.com/sebastianbergmann/diff",
|
||||||
|
"keywords": [
|
||||||
|
"diff"
|
||||||
|
],
|
||||||
|
"time": "2015-12-08 07:14:41"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/console",
|
"name": "symfony/console",
|
||||||
"version": "v3.1.2",
|
"version": "v3.1.2",
|
||||||
|
@ -2627,6 +2737,104 @@
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2016-02-13 09:24:02"
|
"time": "2016-02-13 09:24:02"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/filesystem",
|
||||||
|
"version": "v3.1.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/filesystem.git",
|
||||||
|
"reference": "322da5f0910d8aa0b25fa65ffccaba68dbddb890"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/filesystem/zipball/322da5f0910d8aa0b25fa65ffccaba68dbddb890",
|
||||||
|
"reference": "322da5f0910d8aa0b25fa65ffccaba68dbddb890",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.5.9"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.1-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Component\\Filesystem\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony Filesystem Component",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"time": "2016-06-29 05:41:56"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/finder",
|
||||||
|
"version": "v3.1.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/finder.git",
|
||||||
|
"reference": "8201978de88a9fa0923e18601bb17f1df9c721e7"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/finder/zipball/8201978de88a9fa0923e18601bb17f1df9c721e7",
|
||||||
|
"reference": "8201978de88a9fa0923e18601bb17f1df9c721e7",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.5.9"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.1-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Component\\Finder\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony Finder Component",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"time": "2016-06-29 05:41:56"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/phpunit-bridge",
|
"name": "symfony/phpunit-bridge",
|
||||||
"version": "v3.1.2",
|
"version": "v3.1.2",
|
||||||
|
|
11
dump.php
11
dump.php
|
@ -1,5 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
require_once 'vendor/autoload.php';
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,5 +17,3 @@ $decoder = new Webmozart\Json\JsonDecoder();
|
||||||
$json = $decoder->decodeFile('data/resume.json');
|
$json = $decoder->decodeFile('data/resume.json');
|
||||||
|
|
||||||
dump($json);
|
dump($json);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by PhpStorm.
|
* Created by PhpStorm.
|
||||||
* User: eric
|
* User: eric
|
||||||
|
@ -8,7 +18,6 @@
|
||||||
|
|
||||||
namespace Sikofitt\Command;
|
namespace Sikofitt\Command;
|
||||||
|
|
||||||
|
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
@ -29,11 +38,11 @@ class SchemaValidationCommand extends Command
|
||||||
* Configures the command.
|
* Configures the command.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function configure ()
|
public function configure()
|
||||||
{
|
{
|
||||||
$this->setName ('resume:schema:validate')
|
$this->setName('resume:schema:validate')
|
||||||
->setDescription ('Validates resume.json schema')
|
->setDescription('Validates resume.json schema')
|
||||||
->setProcessTitle ('Validating Schema');
|
->setProcessTitle('Validating Schema');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,13 +51,11 @@ class SchemaValidationCommand extends Command
|
||||||
* @param InputInterface $input
|
* @param InputInterface $input
|
||||||
* @param OutputInterface $output
|
* @param OutputInterface $output
|
||||||
*/
|
*/
|
||||||
public function interact (InputInterface $input, OutputInterface $output)
|
public function interact(InputInterface $input, OutputInterface $output)
|
||||||
{
|
{
|
||||||
|
|
||||||
$io = new SymfonyStyle($input, $output);
|
$io = new SymfonyStyle($input, $output);
|
||||||
$this->file = $io->ask('Path to file? ');
|
$this->file = $io->ask('Path to file? ');
|
||||||
$this->schema = $io->ask('Path to schema? ');
|
$this->schema = $io->ask('Path to schema? ');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -59,7 +66,7 @@ class SchemaValidationCommand extends Command
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function execute (InputInterface $input, OutputInterface $output)
|
public function execute(InputInterface $input, OutputInterface $output)
|
||||||
{
|
{
|
||||||
$validator = new JsonValidator();
|
$validator = new JsonValidator();
|
||||||
$decoder = new JsonDecoder();
|
$decoder = new JsonDecoder();
|
||||||
|
@ -68,20 +75,16 @@ class SchemaValidationCommand extends Command
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$decoded = $decoder->decodeFile($dataDir . $this->file);
|
$decoded = $decoder->decodeFile($dataDir . $this->file);
|
||||||
$errors = $validator->validate ($decoded, $dataDir . $this->schema);
|
$errors = $validator->validate($decoded, $dataDir . $this->schema);
|
||||||
} catch(\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$class = new \ReflectionClass($e);
|
$class = new \ReflectionClass($e);
|
||||||
$io->block([$class->getName(), $e->getMessage()], 'Exception', 'error');
|
$io->block([$class->getName(), $e->getMessage()], 'Exception', 'error');
|
||||||
exit(255);
|
exit(255);
|
||||||
}
|
}
|
||||||
if(isset($errors) && !empty($errors)) {
|
if (isset($errors) && !empty($errors)) {
|
||||||
$io->block($errors, 'Error', 'error');
|
$io->block($errors, 'Error', 'error');
|
||||||
} else {
|
} else {
|
||||||
$io->block([$this->file, 'There were no errors reported.'], 'Valid Schema', 'fg=black;bg=green');
|
$io->block([$this->file, 'There were no errors reported.'], 'Valid Schema', 'fg=black;bg=green');
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,14 +1,20 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
*
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Sikofitt\Config;
|
namespace Sikofitt\Config;
|
||||||
|
|
||||||
|
use Noodlehaus\Config;
|
||||||
use Pimple\Container;
|
use Pimple\Container;
|
||||||
use Pimple\ServiceProviderInterface;
|
use Pimple\ServiceProviderInterface;
|
||||||
use Silex\Application;
|
use Silex\Application;
|
||||||
use Noodlehaus\Config;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ConfigServiceProvider
|
* Class ConfigServiceProvider
|
||||||
|
@ -19,9 +25,9 @@ class ConfigServiceProvider implements ServiceProviderInterface
|
||||||
/**
|
/**
|
||||||
* @param Container $app
|
* @param Container $app
|
||||||
*/
|
*/
|
||||||
public function register (Container $app)
|
public function register(Container $app)
|
||||||
{
|
{
|
||||||
$app['config'] = function($app) {
|
$app['config'] = function ($app) {
|
||||||
$config = Config::load($app['config.path']);
|
$config = Config::load($app['config.path']);
|
||||||
return $config;
|
return $config;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -12,15 +22,15 @@ trait ConfigTrait
|
||||||
* @param null $value
|
* @param null $value
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function config($name, $value = null) {
|
public function config($name, $value = null)
|
||||||
if(strcasecmp($name, 'all') === 0) {
|
{
|
||||||
|
if (strcasecmp($name, 'all') === 0) {
|
||||||
return $this['config']->all();
|
return $this['config']->all();
|
||||||
}
|
}
|
||||||
if(null === $value) {
|
if (null === $value) {
|
||||||
return $this['config']->get ($name);
|
return $this['config']->get($name);
|
||||||
} else {
|
} else {
|
||||||
$this['config']->set($name, $value);
|
$this['config']->set($name, $value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of test.
|
||||||
|
*
|
||||||
|
* @file ApiControllerProvider.php
|
||||||
|
*
|
||||||
|
* R. Eric Wheeler <reric@ee.stanford.edu>
|
||||||
|
*
|
||||||
|
* 7/8/16 / 10:11 AM
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sikofitt\Controller;
|
||||||
|
|
||||||
|
use ReCaptcha\ReCaptcha;
|
||||||
|
use Silex\Application;
|
||||||
|
use Silex\Api\ControllerProviderInterface;
|
||||||
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
|
class ApiControllerProvider implements ControllerProviderInterface {
|
||||||
|
|
||||||
|
public function connect(Application $app) {
|
||||||
|
$controllers = $app['controllers_factory'];
|
||||||
|
|
||||||
|
$controllers->get('/v1/schema', function() {
|
||||||
|
return new \Symfony\Component\HttpFoundation\Response('Success!');
|
||||||
|
});
|
||||||
|
|
||||||
|
$controllers->post('/v1/captcha', function(Request $request) use ($app) {
|
||||||
|
$captcha = new ReCaptcha('6LcvmSQTAAAAAITkvYJjgLar1LqGGLz-ic0ZMiXo');
|
||||||
|
|
||||||
|
$valid = $captcha->verify(
|
||||||
|
$request->request->get('g-recaptcha-response'),
|
||||||
|
$request->server->get('REMOTE_ADDR')
|
||||||
|
);
|
||||||
|
if($valid->isSuccess()) {
|
||||||
|
$return = [
|
||||||
|
'valid' => true,
|
||||||
|
'message' => [
|
||||||
|
'email' => null !== $app->config('app.email') ? $app->config('app.email') : 'No email has been set in the configuration. Please let the owner know.',
|
||||||
|
'phone' => null !== $app->config('app.phone') ? $app->config('app.phone') : 'No phone has been set in the configuration. Please let the owner know.',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$errorCodes = [
|
||||||
|
'missing-input-secret' => 'The secret parameter is missing.',
|
||||||
|
'invalid-input-secret' => 'The secret parameter is invalid or malformed.',
|
||||||
|
'missing-input-response' =>'The response parameter is missing.',
|
||||||
|
'invalid-input-response' => 'The response parameter is invalid or malformed.'
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach($valid->getErrorCodes() as $code)
|
||||||
|
{
|
||||||
|
if(array_key_exists($code, $errorCodes)) {
|
||||||
|
$errors[] = $errorCodes[$code];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!isset($errors)) {
|
||||||
|
$errors[] = 'An unknown error occurred.';
|
||||||
|
}
|
||||||
|
$return = [
|
||||||
|
'valid' => false,
|
||||||
|
'message' => $errors,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return new JsonResponse(json_encode($return));
|
||||||
|
});
|
||||||
|
|
||||||
|
return $controllers;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,145 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sikofitt\Controller;
|
||||||
|
|
||||||
|
use ReCaptcha\ReCaptcha;
|
||||||
|
use Silex\Api\ControllerProviderInterface;
|
||||||
|
use Silex\Application;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ResumeControllerProvider
|
||||||
|
* @package Sikofitt\Controller
|
||||||
|
*/
|
||||||
|
class ResumeControllerProvider implements ControllerProviderInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var object
|
||||||
|
*/
|
||||||
|
private $resumeData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Application $app
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function connect(Application $app)
|
||||||
|
{
|
||||||
|
$this->resumeData = $app->decodeFile(
|
||||||
|
$app->getDataDirectory() . '/resume.json',
|
||||||
|
$app->getDataDirectory() . '/schema/schema.v1.json'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$controllers = $app['controllers_factory'];
|
||||||
|
|
||||||
|
$controllers->get('/', function (Request $request) use ($app) {
|
||||||
|
|
||||||
|
return $app['twig']->render('resume.html.twig', [
|
||||||
|
|
||||||
|
'fullData' => $this->resumeData,
|
||||||
|
'basics' => $this->getResumeBasics(),
|
||||||
|
'work' => $this->getResumeWork(),
|
||||||
|
'volunteer' => $this->getResumeVolunteer(),
|
||||||
|
'education' => $this->getResumeEducation(),
|
||||||
|
'awards' => $this->getResumeAwards(),
|
||||||
|
'publications' => $this->getResumePublications(),
|
||||||
|
'skills' => $this->getResumeSkills(),
|
||||||
|
'languages' => $this->getResumeLanguages(),
|
||||||
|
'interests' => $this->getResumeInterests(),
|
||||||
|
'references' => $this->getResumeReferences(),
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return $controllers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumeBasics()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->basics) && count($this->resumeData->basics) > 0) ? $this->resumeData->basics : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumeWork()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->work) && count($this->resumeData->work) > 0) ? $this->resumeData->work : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumeVolunteer()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->volunteer) && count($this->resumeData->volunteer) > 0) ? $this->resumeData->volunteer : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumeEducation()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->education) && count($this->resumeData->education) > 0) ? $this->resumeData->education : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumeAwards()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->awards) && count($this->resumeData->awards) > 0) ? $this->resumeData->awards : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumePublications()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->publications) && count($this->resumeData->publications) > 0) ? $this->resumeData->publications : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumeSkills()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->skills) && count($this->resumeData->skills) > 0) ? $this->resumeData->skills : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumeLanguages()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->languages) && count($this->resumeData->languages) > 0) ? $this->resumeData->languages : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumeInterests()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->interests) && count($this->resumeData->interests) > 0) ? $this->resumeData->interests : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function getResumeReferences()
|
||||||
|
{
|
||||||
|
return (isset($this->resumeData->references) && count($this->resumeData->references) > 0) ? $this->resumeData->references : null;
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file is part of test.
|
* This file is part of test.
|
||||||
*
|
*
|
||||||
|
@ -20,21 +30,24 @@ namespace Sikofitt\Image\Profile;
|
||||||
*/
|
*/
|
||||||
class GithubProfileIcon implements ProfileIconInterface
|
class GithubProfileIcon implements ProfileIconInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function getName() {
|
public function getName()
|
||||||
return 'github';
|
{
|
||||||
|
return 'github';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDefaultUrl() {
|
public function getDefaultUrl()
|
||||||
return 'https://github.com';
|
{
|
||||||
}
|
return 'https://github.com';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function getIcon() {
|
public function getIcon()
|
||||||
|
{
|
||||||
return 'data:image/png;base64,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';
|
return 'data:image/png;base64,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';
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file is part of test.
|
* This file is part of test.
|
||||||
*
|
*
|
||||||
|
@ -18,23 +28,27 @@ namespace Sikofitt\Image\Profile;
|
||||||
* Class GitlabProfileIcon
|
* Class GitlabProfileIcon
|
||||||
* @package Sikofitt\Image\Profile
|
* @package Sikofitt\Image\Profile
|
||||||
*/
|
*/
|
||||||
class GitlabProfileIcon implements ProfileIconInterface {
|
class GitlabProfileIcon implements ProfileIconInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return 'gitlab';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDefaultUrl()
|
||||||
|
{
|
||||||
|
return 'https://gitlab.com';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function getName() {
|
public function getIcon()
|
||||||
return 'gitlab';
|
{
|
||||||
}
|
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAXCAYAAAD+4+QTAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AcHECQRchk3rwAAA3VJREFUSMe1lU1oXFUYhp/vnJtJMplJ2iQttElMbCY3uYlaKAqCddEm00K1iFakZFIQoVBciNalRURdueim4MqFYCJ0Uze6sGqhCxcuXCia1JtuatJpuhAUxJ9m7ve5mJnM3PyQZOELF845l/e87/dzzhGasDw5JiLuGvBW39fz8+wCvxUj/jHGzLjS/81Csfmfqw/uHB8jEIeanTSz99gler5aQI1TClPlYjS8qcjgjVtUzIoG7QZHl6fGszsVuHdioj58FUCV5zYVAUB4H8CgB7O+nYocuP4z5WL0MDBc458EWDoepUXKU9F+NZ6oTT3w4m7Spcrr1phOAgzcWEiLqHGsmWQiF3ey+a2nRlkuRi1197VI/N2p8ZkN6TJ4JiVi1luejI5sJ5Lv8JiSNxhax39ns5o8vyEF8Mp2In3X5wGeBVpTIjB0dyoauHNshABg6enohCq56r8GEji6o4IYb5vV914TcaY8PnhzcSkAOHg+uSQ/AQ/WcY3DS0Fkplvv71vgQJSApQwKDrNxXuImnzmbDbtNOKyHUE2Q5g+D7F5LzLYWyXapagVS3ApohFkbZwFcAiNAnhyOAkmzHzPo3KeyzmUKmRyyLnXwEEo7DoNkLjzrBF6Aqmu68fSizVuKx2WyW4u0tltaoAulvypQW7vogFMpVgFHG9pMbO0w2aTYZLssEdcUSRtGiJA0dzKPORwvi/Brys0j1cKtcfO2IWEG5PaZNNXLGMVwqfTdF88Z56fj751LhkS41mgZhBCtO2rNmaxv7yCDBRlrnLNRoK1x7sTxnTiG/XT8havGFJific+I4wJSa+Q9eAZraTOko8dStcpkazEosB9lTyMCcbzhS/GTvhT/Ve3nGiqfFAjO3Sb5NDyI8oMZvQjwI8rfOK2gK794h1S7rntAtb3THHkSJvAoINxD7EhQWlzZ9KoPzt0mmQvx03FZHH3iuAy1+rRi4nE+Q/1cW7bTBMEYQVAQ4Yp3hEFpcWV1doQt3xNfiuvDB74UvynCaYTfKSAi0NJWbYDsXlME4VGghX+957yfiV9LjD8BWmYWtxZZW5yOSWZDfCn+3DkKkudbRqGjy8wMct3qrB8ky6LAIZmOP7Kr4wQNk7uDzoXVy3I2/EDfDVeXi5GuXgpNr4aX+T9gX4YTf1wYvV/5MFx71Fc/LmzL+w9fiFeX9RDTWwAAAABJRU5ErkJggg==';
|
||||||
|
|
||||||
public function getDefaultUrl() {
|
|
||||||
return 'https://gitlab.com';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function getIcon() {
|
|
||||||
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAXCAYAAAD+4+QTAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AcHECQRchk3rwAAA3VJREFUSMe1lU1oXFUYhp/vnJtJMplJ2iQttElMbCY3uYlaKAqCddEm00K1iFakZFIQoVBciNalRURdueim4MqFYCJ0Uze6sGqhCxcuXCia1JtuatJpuhAUxJ9m7ve5mJnM3PyQZOELF845l/e87/dzzhGasDw5JiLuGvBW39fz8+wCvxUj/jHGzLjS/81Csfmfqw/uHB8jEIeanTSz99gler5aQI1TClPlYjS8qcjgjVtUzIoG7QZHl6fGszsVuHdioj58FUCV5zYVAUB4H8CgB7O+nYocuP4z5WL0MDBc458EWDoepUXKU9F+NZ6oTT3w4m7Spcrr1phOAgzcWEiLqHGsmWQiF3ey+a2nRlkuRi1197VI/N2p8ZkN6TJ4JiVi1luejI5sJ5Lv8JiSNxhax39ns5o8vyEF8Mp2In3X5wGeBVpTIjB0dyoauHNshABg6enohCq56r8GEji6o4IYb5vV914TcaY8PnhzcSkAOHg+uSQ/AQ/WcY3DS0Fkplvv71vgQJSApQwKDrNxXuImnzmbDbtNOKyHUE2Q5g+D7F5LzLYWyXapagVS3ApohFkbZwFcAiNAnhyOAkmzHzPo3KeyzmUKmRyyLnXwEEo7DoNkLjzrBF6Aqmu68fSizVuKx2WyW4u0tltaoAulvypQW7vogFMpVgFHG9pMbO0w2aTYZLssEdcUSRtGiJA0dzKPORwvi/Brys0j1cKtcfO2IWEG5PaZNNXLGMVwqfTdF88Z56fj751LhkS41mgZhBCtO2rNmaxv7yCDBRlrnLNRoK1x7sTxnTiG/XT8havGFJific+I4wJSa+Q9eAZraTOko8dStcpkazEosB9lTyMCcbzhS/GTvhT/Ve3nGiqfFAjO3Sb5NDyI8oMZvQjwI8rfOK2gK794h1S7rntAtb3THHkSJvAoINxD7EhQWlzZ9KoPzt0mmQvx03FZHH3iuAy1+rRi4nE+Q/1cW7bTBMEYQVAQ4Yp3hEFpcWV1doQt3xNfiuvDB74UvynCaYTfKSAi0NJWbYDsXlME4VGghX+957yfiV9LjD8BWmYWtxZZW5yOSWZDfCn+3DkKkudbRqGjy8wMct3qrB8ky6LAIZmOP7Kr4wQNk7uDzoXVy3I2/EDfDVeXi5GuXgpNr4aX+T9gX4YTf1wYvV/5MFx71Fc/LmzL+w9fiFeX9RDTWwAAAABJRU5ErkJggg==';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file is part of test.
|
* This file is part of test.
|
||||||
*
|
*
|
||||||
|
@ -14,18 +24,21 @@
|
||||||
|
|
||||||
namespace Sikofitt\Image\Profile;
|
namespace Sikofitt\Image\Profile;
|
||||||
|
|
||||||
|
class LinkedinProfileIcon implements ProfileIconInterface
|
||||||
|
{
|
||||||
|
|
||||||
class LinkedinProfileIcon implements ProfileIconInterface {
|
public function getName()
|
||||||
|
{
|
||||||
|
return 'linkedin';
|
||||||
|
}
|
||||||
|
|
||||||
public function getName() {
|
public function getDefaultUrl()
|
||||||
return 'linkedin';
|
{
|
||||||
}
|
return 'https://linkedin.com/in';
|
||||||
|
}
|
||||||
|
|
||||||
public function getDefaultUrl() {
|
public function getIcon()
|
||||||
return 'https://linkedin.com/in';
|
{
|
||||||
}
|
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AcHETMTmFa4IgAAA/1JREFUSMeVlk2IXEUQx3/V783sfOxKdjeKQqImCJpsBC9qwFxC1KCiEW8eRQVBPXjxInjwJoin6CXEsyhCcvIDRUQkGoOgyaJgPlAS2GQlX7tmZ3fm1d9D93tvZnZzsKHpnqrurqp//aveGMDk7qdnWlt37DSzhrDcwABE2qQ9lcJKSTUEmNWX5N5bPXfy1NKJzy/n3YeempnZ/9Lh0J58BrNQPmxYekbUTxpChLSOGwnJC0kg0Znbc5SJzouhfefOXaE9+SwQJDAJSbgcKPfxkuSYiLokQ4BUyd2jToC1ugead2yfy2WhJQIux0wUDjf6BQImmxm2DrYUXxVe0lpcJVVnMQMLrSCgSFcHLu6e6XDmzb2ceH0PU60GnmDzBJynvWtYJiTDUwTCRmaQQC7cRWaBL154kE2tnO3TbQ49d38M3eN0OUpwyoUE7l7rvIa3hE4SuZJXAJu7TbrNrErmbKdBMwusDKLP46ySJ2iSWIqEibkECxGFUHrmLv5cXOLI/CVIhj87ucC1Xj95Fc946akLIZyx3+6RKOXeRe4SRRK2mhmvHPmNg8em6Lvz+6VlQrB0yWI2VFOgKEQhyIKRGeDGEN8RQiZyIgMp163Tba71Bgi4rTvBwtIqjWBs3dTGESt9Z+F6j9luk913zXD71ASnF5f5Y3GZxX/XIhuSITNDDnmkewz16kqff95+rML85/NX2XfoR7ZNT3L8tUcAOH7+Gu9/f44PDswx22lUZ6/3Brzz7WkO//QXWQgJ8uh9ZJcMFRGNQnVie33HCyi8ruwdt3b5+PkHRgwA3NLKee+J+9iyqUNRCC8EHiMJoqzu2vJwqxguQICpiRyAT04u8O53Zzj295WRO2/tu4cbawPKd2UiL2vEyhYxZqZwj14NjY9+ucCrn/7KRCPwYbvJVy8/zL2buwDs3TbL2sBp5QFLfSyUPcCHGUBNBAGyUfnBH86SZYYLLi71uLi0WummW3nVu8quk8eqjbVSVeXQcBfyUdmFKyup+ERJnHLkmYGr7p+q2LUBUkPRjOeqKOoedbM8uupPRF2MG0RSGhjqq1U3cK+rWuMepjxj8X5VJ+tPloaE3NfJqoreAGJSq6ogLGP04U45Hs06ztUQymwD1yxFb2UkYjCUGHdBSNh7lJXeFhKZGYWXDRFwp3BVRewePS7cMTOQYfbkG4+HXfu+jL1GDG70a4eCkU3k8YHeoAojpGovYyhWByMoZJ1GbPVm6NQ3+3Pce0pemSC0GmMsgUCAVmMELw2dCc28+pNhUFE+5bMXWDw7773lo/HbQDU1NH1Mt16fSDByRnhv+agWz87HiOcenWHL3C6CtW5aMP9nGODqcX7+FPNfX/4PZFb8sTBvluQAAAAASUVORK5CYII=';
|
||||||
|
}
|
||||||
public function getIcon() {
|
|
||||||
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AcHETMTmFa4IgAAA/1JREFUSMeVlk2IXEUQx3/V783sfOxKdjeKQqImCJpsBC9qwFxC1KCiEW8eRQVBPXjxInjwJoin6CXEsyhCcvIDRUQkGoOgyaJgPlAS2GQlX7tmZ3fm1d9D93tvZnZzsKHpnqrurqp//aveGMDk7qdnWlt37DSzhrDcwABE2qQ9lcJKSTUEmNWX5N5bPXfy1NKJzy/n3YeempnZ/9Lh0J58BrNQPmxYekbUTxpChLSOGwnJC0kg0Znbc5SJzouhfefOXaE9+SwQJDAJSbgcKPfxkuSYiLokQ4BUyd2jToC1ugead2yfy2WhJQIux0wUDjf6BQImmxm2DrYUXxVe0lpcJVVnMQMLrSCgSFcHLu6e6XDmzb2ceH0PU60GnmDzBJynvWtYJiTDUwTCRmaQQC7cRWaBL154kE2tnO3TbQ49d38M3eN0OUpwyoUE7l7rvIa3hE4SuZJXAJu7TbrNrErmbKdBMwusDKLP46ySJ2iSWIqEibkECxGFUHrmLv5cXOLI/CVIhj87ucC1Xj95Fc946akLIZyx3+6RKOXeRe4SRRK2mhmvHPmNg8em6Lvz+6VlQrB0yWI2VFOgKEQhyIKRGeDGEN8RQiZyIgMp163Tba71Bgi4rTvBwtIqjWBs3dTGESt9Z+F6j9luk913zXD71ASnF5f5Y3GZxX/XIhuSITNDDnmkewz16kqff95+rML85/NX2XfoR7ZNT3L8tUcAOH7+Gu9/f44PDswx22lUZ6/3Brzz7WkO//QXWQgJ8uh9ZJcMFRGNQnVie33HCyi8ruwdt3b5+PkHRgwA3NLKee+J+9iyqUNRCC8EHiMJoqzu2vJwqxguQICpiRyAT04u8O53Zzj295WRO2/tu4cbawPKd2UiL2vEyhYxZqZwj14NjY9+ucCrn/7KRCPwYbvJVy8/zL2buwDs3TbL2sBp5QFLfSyUPcCHGUBNBAGyUfnBH86SZYYLLi71uLi0WummW3nVu8quk8eqjbVSVeXQcBfyUdmFKyup+ERJnHLkmYGr7p+q2LUBUkPRjOeqKOoedbM8uupPRF2MG0RSGhjqq1U3cK+rWuMepjxj8X5VJ+tPloaE3NfJqoreAGJSq6ogLGP04U45Hs06ztUQymwD1yxFb2UkYjCUGHdBSNh7lJXeFhKZGYWXDRFwp3BVRewePS7cMTOQYfbkG4+HXfu+jL1GDG70a4eCkU3k8YHeoAojpGovYyhWByMoZJ1GbPVm6NQ3+3Pce0pemSC0GmMsgUCAVmMELw2dCc28+pNhUFE+5bMXWDw7773lo/HbQDU1NH1Mt16fSDByRnhv+agWz87HiOcenWHL3C6CtW5aMP9nGODqcX7+FPNfX/4PZFb8sTBvluQAAAAASUVORK5CYII=';
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file is part of resume.
|
* This file is part of resume.
|
||||||
*
|
*
|
||||||
|
@ -18,9 +28,10 @@ namespace Sikofitt\Image\Profile;
|
||||||
* Interface ProfileIconInterface
|
* Interface ProfileIconInterface
|
||||||
* @package Sikofitt\Image\Profile
|
* @package Sikofitt\Image\Profile
|
||||||
*/
|
*/
|
||||||
interface ProfileIconInterface {
|
interface ProfileIconInterface
|
||||||
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
* The name of the network.
|
* The name of the network.
|
||||||
*/
|
*/
|
||||||
|
@ -38,5 +49,4 @@ interface ProfileIconInterface {
|
||||||
* Can be a url, a relative path, or base64 encoded uri.
|
* Can be a url, a relative path, or base64 encoded uri.
|
||||||
*/
|
*/
|
||||||
public function getIcon();
|
public function getIcon();
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file is part of resume.
|
* This file is part of resume.
|
||||||
*
|
*
|
||||||
|
@ -14,19 +24,20 @@
|
||||||
|
|
||||||
namespace Sikofitt\Image\Profile;
|
namespace Sikofitt\Image\Profile;
|
||||||
|
|
||||||
|
class TwitterProfileIcon implements ProfileIconInterface
|
||||||
|
{
|
||||||
|
|
||||||
class TwitterProfileIcon implements ProfileIconInterface {
|
public function getName()
|
||||||
|
{
|
||||||
public function getName()
|
return 'twitter';
|
||||||
{
|
}
|
||||||
return 'twitter';
|
public function getDefaultUrl()
|
||||||
}
|
{
|
||||||
public function getDefaultUrl() {
|
return 'https://twitter.com';
|
||||||
return 'https://twitter.com';
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public function getIcon() {
|
|
||||||
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AcHEBgWn47b8wAAAedJREFUSMfllj1LHEEYgJ/du/hxCYOkCXIOwSJdhIQUAZGYwtJGsVA4mFb8ARYGo5WQgCmSOsVgJfgLrAImZfQHWCg3mNjYDJxwp5e1mdNhsnu74bSJb7PszDvvs+/nLPwvEoULUluMEl0PdXSktn1A7JYToAUk/nmp7Q1EahsDkVGinQOIjBKJ1LYGLAH9busPsGWU+Cy1HQLmgH2jxH7UoQFDwAnwEEj1xvNgGfiQ8g2Jg0XOw6dGiXrsGawBFeAUmPDg1+IALx0gyQh/yQE2gA2pbSX2FJ655xNgT2q7npGb6ax8Bh6tAJtGiXMfsh0orkltL6S281LbqtT2gRf7PGkDL4wSB9eJd2EpAYfAaMqh38AZ0ABGgGoO5CcwDrSMEvg5mQEOMmI9DDwHXhcAADT94ikHhmZvqf++GyVanZfYC5e+qyb3w2WBj1519CJf88bKJPCtB8CeUeLNX54EstujF7VwIQ0y3wNgyyhRDydFlDGbFoFV4DEwUBBwCrwCfoWTIuoyBCNgp2BZN4Axo8RR2mbZGS4Dgw5akdrOAV8KemCASeA4S6HTjAPAJrAAPCpovAm8Bz4ZJS5zm8YL0VvgHTDVpVfqLsGr/9yZ4bUrtR0Pxg5A2yjxw78h7+SnICzP+yVXFk+tI1UN56QAAAAASUVORK5CYII=';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public function getIcon()
|
||||||
|
{
|
||||||
|
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AcHEBgWn47b8wAAAedJREFUSMfllj1LHEEYgJ/du/hxCYOkCXIOwSJdhIQUAZGYwtJGsVA4mFb8ARYGo5WQgCmSOsVgJfgLrAImZfQHWCg3mNjYDJxwp5e1mdNhsnu74bSJb7PszDvvs+/nLPwvEoULUluMEl0PdXSktn1A7JYToAUk/nmp7Q1EahsDkVGinQOIjBKJ1LYGLAH9busPsGWU+Cy1HQLmgH2jxH7UoQFDwAnwEEj1xvNgGfiQ8g2Jg0XOw6dGiXrsGawBFeAUmPDg1+IALx0gyQh/yQE2gA2pbSX2FJ655xNgT2q7npGb6ax8Bh6tAJtGiXMfsh0orkltL6S281LbqtT2gRf7PGkDL4wSB9eJd2EpAYfAaMqh38AZ0ABGgGoO5CcwDrSMEvg5mQEOMmI9DDwHXhcAADT94ikHhmZvqf++GyVanZfYC5e+qyb3w2WBj1519CJf88bKJPCtB8CeUeLNX54EstujF7VwIQ0y3wNgyyhRDydFlDGbFoFV4DEwUBBwCrwCfoWTIuoyBCNgp2BZN4Axo8RR2mbZGS4Dgw5akdrOAV8KemCASeA4S6HTjAPAJrAAPCpovAm8Bz4ZJS5zm8YL0VvgHTDVpVfqLsGr/9yZ4bUrtR0Pxg5A2yjxw78h7+SnICzP+yVXFk+tI1UN56QAAAAASUVORK5CYII=';
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file is part of test.
|
||||||
|
*
|
||||||
|
* @file JsonFileTrait.php
|
||||||
|
*
|
||||||
|
* R. Eric Wheeler <reric@ee.stanford.edu>
|
||||||
|
*
|
||||||
|
* 7/8/16 / 8:12 AM
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sikofitt\Json;
|
||||||
|
|
||||||
|
trait JsonFileTrait
|
||||||
|
{
|
||||||
|
|
||||||
|
public function encodeFile($array, $file, $schema = null)
|
||||||
|
{
|
||||||
|
return $this['json.encode']->encodeFile($array, $file, $schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function decodeFile($file, $schema = null)
|
||||||
|
{
|
||||||
|
return $this['json.decode']->decodeFile($file, $file, $schema);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sikofitt\Json;
|
||||||
|
|
||||||
|
use Pimple\Container;
|
||||||
|
use Pimple\ServiceProviderInterface;
|
||||||
|
use Webmozart\Json\JsonDecoder;
|
||||||
|
use Webmozart\Json\JsonEncoder;
|
||||||
|
use Webmozart\Json\JsonValidator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class JsonServiceProvider
|
||||||
|
* @package Sikofitt\Json
|
||||||
|
*/
|
||||||
|
class JsonServiceProvider implements ServiceProviderInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Container $app
|
||||||
|
*/
|
||||||
|
public function register(Container $app)
|
||||||
|
{
|
||||||
|
$app['json.encode'] = function ($app) {
|
||||||
|
return new JsonEncoder();
|
||||||
|
};
|
||||||
|
$app['json.decode'] = function ($app) {
|
||||||
|
return new JsonDecoder();
|
||||||
|
};
|
||||||
|
$app['json.validate'] = function ($app) {
|
||||||
|
return new JsonValidator();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sikofitt\Json;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class JsonTrait
|
||||||
|
* @package Sikofitt\Json
|
||||||
|
*/
|
||||||
|
trait JsonTrait
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $array
|
||||||
|
* @param null $schema
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function encode($array, $schema = null)
|
||||||
|
{
|
||||||
|
return $this['json.encode']->encode($array, $schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $json
|
||||||
|
* @param null $schema
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function decode($json, $schema = null)
|
||||||
|
{
|
||||||
|
return $this['json.decode']->decode($json, $schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $json
|
||||||
|
* @param $schema
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function validate($json, $schema)
|
||||||
|
{
|
||||||
|
return $this['json.validate']->validate($json, $schema);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by PhpStorm.
|
* Created by PhpStorm.
|
||||||
* User: eric
|
* User: eric
|
||||||
|
@ -8,17 +18,16 @@
|
||||||
|
|
||||||
namespace Sikofitt\Json;
|
namespace Sikofitt\Json;
|
||||||
|
|
||||||
|
use App;
|
||||||
|
|
||||||
use Webmozart\Json\JsonDecoder;
|
|
||||||
use Webmozart\Json\JsonEncoder;
|
|
||||||
use Webmozart\Json\DecodingFailedException;
|
use Webmozart\Json\DecodingFailedException;
|
||||||
use Webmozart\Json\EncodingFailedException;
|
use Webmozart\Json\EncodingFailedException;
|
||||||
use Webmozart\Json\JsonValidator;
|
|
||||||
use Webmozart\Json\ValidationFailedException;
|
|
||||||
use Webmozart\Json\FileNotFoundException;
|
use Webmozart\Json\FileNotFoundException;
|
||||||
use Webmozart\Json\IOException;
|
use Webmozart\Json\IOException;
|
||||||
use App;
|
use Webmozart\Json\JsonDecoder;
|
||||||
|
use Webmozart\Json\JsonEncoder;
|
||||||
|
use Webmozart\Json\JsonValidator;
|
||||||
|
use Webmozart\Json\ValidationFailedException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ResumeBuilder
|
* Class ResumeBuilder
|
||||||
* @package Sikofitt\Json
|
* @package Sikofitt\Json
|
||||||
|
@ -27,35 +36,31 @@ class ResumeBuilder
|
||||||
{
|
{
|
||||||
private $app;
|
private $app;
|
||||||
|
|
||||||
public function __construct (App $app)
|
public function __construct(App $app)
|
||||||
{
|
{
|
||||||
$this->app = $app;
|
$this->app = $app;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function toJson ($resumeArray, array $options = array ())
|
public function toJson($resumeArray, array $options = [])
|
||||||
{
|
{
|
||||||
$encoder = new JsonEncoder();
|
$encoder = new JsonEncoder();
|
||||||
$validator = new JsonValidator();
|
$validator = new JsonValidator();
|
||||||
if(!isset($options['file'])) {
|
if (!isset($options['file'])) {
|
||||||
throw new \InvalidArgumentException('file is a required argument.');
|
throw new \InvalidArgumentException('file is a required argument.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$errors = $validator->validate((object)$resumeArray, $options['app']->getResumeSchema());
|
$errors = $validator->validate((object)$resumeArray, $options['app']->getResumeSchema());
|
||||||
dump($errors);
|
dump($errors);
|
||||||
try {
|
try {
|
||||||
// $encoder->encodeFile ($resumeArray, 'test.json');
|
// $encoder->encodeFile ($resumeArray, 'test.json');
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$r = new \ReflectionClass($e);
|
$r = new \ReflectionClass($e);
|
||||||
$exceptionClass = $r->getName();
|
$exceptionClass = $r->getName();
|
||||||
return new $exceptionClass($e->getMessage());
|
return new $exceptionClass($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function fromJson ($resumeJson, array $options = array ())
|
public function fromJson($resumeJson, array $options = [])
|
||||||
{
|
{
|
||||||
$decoder = new JsonDecoder();
|
$decoder = new JsonDecoder();
|
||||||
$resumeObject = $decoder->decodeFile($this->app->getResumeJson(), $this->app->getResumeSchema());
|
$resumeObject = $decoder->decodeFile($this->app->getResumeJson(), $this->app->getResumeSchema());
|
||||||
|
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by PhpStorm.
|
* Created by PhpStorm.
|
||||||
* User: eric
|
* User: eric
|
||||||
|
@ -8,7 +18,6 @@
|
||||||
|
|
||||||
namespace Sikofitt\Resume;
|
namespace Sikofitt\Resume;
|
||||||
|
|
||||||
|
|
||||||
use Webmozart\Json\Conversion\JsonConverter;
|
use Webmozart\Json\Conversion\JsonConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,7 +32,7 @@ class ResumeParser implements JsonConverter
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function fromJson ($jsonData, array $options = array ())
|
public function fromJson($jsonData, array $options = [])
|
||||||
{
|
{
|
||||||
// TODO: Implement fromJson() method.
|
// TODO: Implement fromJson() method.
|
||||||
}
|
}
|
||||||
|
@ -34,10 +43,8 @@ class ResumeParser implements JsonConverter
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function toJson ($data, array $options = array ())
|
public function toJson($data, array $options = [])
|
||||||
{
|
{
|
||||||
// TODO: Implement toJson() method.
|
// TODO: Implement toJson() method.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file is part of resume.
|
* This file is part of resume.
|
||||||
*
|
*
|
||||||
|
@ -14,12 +24,13 @@
|
||||||
|
|
||||||
namespace Sikofitt\Twig;
|
namespace Sikofitt\Twig;
|
||||||
|
|
||||||
|
class Date extends \Twig_Extension
|
||||||
|
{
|
||||||
|
|
||||||
class Date extends \Twig_Extension {
|
public function getName()
|
||||||
|
{
|
||||||
public function getName() {
|
return 'date_diff';
|
||||||
return 'date_diff';
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
|
@ -27,7 +38,7 @@ class Date extends \Twig_Extension {
|
||||||
*/
|
*/
|
||||||
public function getFilters()
|
public function getFilters()
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
new \Twig_SimpleFilter('date_diff', [$this, 'dateDiff']),
|
new \Twig_SimpleFilter('date_diff', [$this, 'dateDiff']),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -42,9 +53,8 @@ class Date extends \Twig_Extension {
|
||||||
*/
|
*/
|
||||||
public function dateDiff($startDate, $endDate = 'now')
|
public function dateDiff($startDate, $endDate = 'now')
|
||||||
{
|
{
|
||||||
$dt = new \DateTimeImmutable($startDate);
|
$dt = new \DateTimeImmutable($startDate);
|
||||||
$dateDifference = $dt->diff(new \DateTime($endDate));
|
$dateDifference = $dt->diff(new \DateTime($endDate));
|
||||||
return $dateDifference->format('%y years');
|
return $dateDifference->format('%y years');
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Resume.PHP.
|
||||||
|
*
|
||||||
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file is part of test.
|
* This file is part of test.
|
||||||
*
|
*
|
||||||
|
@ -14,41 +24,42 @@
|
||||||
|
|
||||||
namespace Sikofitt\Twig;
|
namespace Sikofitt\Twig;
|
||||||
|
|
||||||
|
class RenderProfile extends \Twig_Extension
|
||||||
|
{
|
||||||
|
|
||||||
class RenderProfile extends \Twig_Extension {
|
public function getName()
|
||||||
|
{
|
||||||
|
return 'render_profile';
|
||||||
|
}
|
||||||
|
|
||||||
public function getName() {
|
public function getFunctions()
|
||||||
return 'render_profile';
|
{
|
||||||
}
|
return [
|
||||||
|
|
||||||
public function getFunctions() {
|
|
||||||
return [
|
|
||||||
new \Twig_SimpleFunction('render_profile', [$this, 'renderProfile'], ['needs_context' => true]),
|
new \Twig_SimpleFunction('render_profile', [$this, 'renderProfile'], ['needs_context' => true]),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function renderProfile($context, $iconData)
|
public function renderProfile($context, $iconData)
|
||||||
{
|
{
|
||||||
$imageData = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAIAAABLixI0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AcHEQYsjAFXqQAAAEVpVFh0Q29tbWVudAAAAAAAQ1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODApLCBxdWFsaXR5ID0gOTAKqozFDgAAAiVJREFUOMutlT/oOWEcx+8OX5fLDVwx2ZQFSQYzmZgMzCaDzaCUMpmQkowM2G+gFFnUGXRKSQwGIYtyisif+w2n+973ucef4fde7u75fD6v5/l8Ps/zHMLDxHFcp9OJxWJOp1Ov1ysUChzHLRZLNBrt9Xrn8xkahciH6vW6VqtFXouiqOFw+JmVz+eR79Rqtd6xSqUS8rUwDGNZFs7a7/c4jku9lUplOByuVqvtdpum6Xg8jqKo1MHn88FZHo8HmPnn50co8+PxeLVwjuNA1mq1giaSTCaDwaDX653P58+Av6pUKiJLKQxNJhMUReWumUxGeGFZ1mw2yydbLpe/FRQeh8NBDhJFkmQgEEAQJJ1OAyaDwfD7ISyv2+0CdZV2YL1e8zw/Go3UajXQSkjtj8fjK1YkEnmWQ6kETEajUcp65qjRaAqFApRls9kQBBkMBrfbDTBtt9tGowHmKMhqtUJzJAhCpVJBZ9LpdKfTCbLvGYaRe2ez2d1uV6vV5CahLAzDwM9jIpEAAjabDXRnCSqXy5fLBc46HA4kSUq9c7kcz/PQdQElAlnX69XhcHx5vP1+P6SP0i0DnPD3rD+xgPnxeJhMpm9AKIra7faXCYtaLBYURUHjRWEYJnbw5R0t6HK5hEIhKYggiGazOZ1O+/1+u90ej8ef73up3G63yEqlUu+dP7Du97vL5RL+F/wnIR89ZrMZhmHFYvE/sHiep2lavFff6B8xFGrMmf/uPQAAAABJRU5ErkJggg==';
|
$imageData = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAIAAABLixI0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AcHEQYsjAFXqQAAAEVpVFh0Q29tbWVudAAAAAAAQ1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODApLCBxdWFsaXR5ID0gOTAKqozFDgAAAiVJREFUOMutlT/oOWEcx+8OX5fLDVwx2ZQFSQYzmZgMzCaDzaCUMpmQkowM2G+gFFnUGXRKSQwGIYtyisif+w2n+973ucef4fde7u75fD6v5/l8Ps/zHMLDxHFcp9OJxWJOp1Ov1ysUChzHLRZLNBrt9Xrn8xkahciH6vW6VqtFXouiqOFw+JmVz+eR79Rqtd6xSqUS8rUwDGNZFs7a7/c4jku9lUplOByuVqvtdpum6Xg8jqKo1MHn88FZHo8HmPnn50co8+PxeLVwjuNA1mq1giaSTCaDwaDX653P58+Av6pUKiJLKQxNJhMUReWumUxGeGFZ1mw2yydbLpe/FRQeh8NBDhJFkmQgEEAQJJ1OAyaDwfD7ISyv2+0CdZV2YL1e8zw/Go3UajXQSkjtj8fjK1YkEnmWQ6kETEajUcp65qjRaAqFApRls9kQBBkMBrfbDTBtt9tGowHmKMhqtUJzJAhCpVJBZ9LpdKfTCbLvGYaRe2ez2d1uV6vV5CahLAzDwM9jIpEAAjabDXRnCSqXy5fLBc46HA4kSUq9c7kcz/PQdQElAlnX69XhcHx5vP1+P6SP0i0DnPD3rD+xgPnxeJhMpm9AKIra7faXCYtaLBYURUHjRWEYJnbw5R0t6HK5hEIhKYggiGazOZ1O+/1+u90ej8ef73up3G63yEqlUu+dP7Du97vL5RL+F/wnIR89ZrMZhmHFYvE/sHiep2lavFff6B8xFGrMmf/uPQAAAABJRU5ErkJggg==';
|
||||||
//network": "Twitter" +"username": "sikofitt" +"url": ""
|
//network": "Twitter" +"username": "sikofitt" +"url": ""
|
||||||
$icons = $context['app']->config('app.icons');
|
$icons = $context['app']->config('app.icons');
|
||||||
|
|
||||||
$network = strtolower($iconData->network);
|
$network = strtolower($iconData->network);
|
||||||
$haveNetwork = isset($icons[$network]);
|
$haveNetwork = isset($icons[$network]);
|
||||||
if($haveNetwork) {
|
if ($haveNetwork) {
|
||||||
$imageData = $icons[strtolower($iconData->network)];
|
$imageData = $icons[strtolower($iconData->network)];
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
if (!isset($iconData->url) || empty($iconData->url)) {
|
||||||
|
$iconData->url = $icons[strtolower($iconData->network)]['url'] . '/' . $iconData->username;
|
||||||
|
}
|
||||||
|
$imageUrl = sprintf('<img src="%s" alt="%s" />', $imageData['icon'], $iconData->network);
|
||||||
|
if (isset($iconData->url) && !empty($iconData->url)) {
|
||||||
|
return sprintf('<a class="profile-link" href="%s" title="%s" target="_blank">%s</a>', $iconData->url, $iconData->network, $imageUrl);
|
||||||
|
} else {
|
||||||
|
return $imageUrl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(!isset($iconData->url) || empty($iconData->url))
|
|
||||||
{
|
|
||||||
$iconData->url = $icons[strtolower($iconData->network)]['url'] . '/' . $iconData->username;
|
|
||||||
}
|
|
||||||
$imageUrl = sprintf('<img src="%s" alt="%s" />', $imageData['icon'], $iconData->network);
|
|
||||||
if(isset($iconData->url) && !empty($iconData->url)) {
|
|
||||||
return sprintf('<a class="profile-link" href="%s" title="%s" target="_blank">%s</a>', $iconData->url, $iconData->network,$imageUrl);
|
|
||||||
} else {
|
|
||||||
return $imageUrl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
@import 'uikit.less';
|
@import 'uikit.less';
|
||||||
|
@import 'components/notify.less';
|
||||||
@import 'https://fonts.googleapis.com/css?family=Lato:300|Eczar';
|
@import 'https://fonts.googleapis.com/css?family=Lato:300|Eczar';
|
||||||
|
|
||||||
@base-body-font-family : 'Lato';
|
@base-body-font-family : 'Lato';
|
||||||
|
|
108
web/index.php
108
web/index.php
|
@ -1,106 +1,20 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
use Sikofitt\Json\ResumeBuilder;
|
* This file is part of Resume.PHP.
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
*
|
||||||
use Silex\Provider\TwigServiceProvider;
|
* (copyleft) R. Eric Wheeler <sikofitt@gmail.com>
|
||||||
use WhoopsSilex\WhoopsServiceProvider;
|
*
|
||||||
use Symfony\Component\HttpKernel\DataCollector\DumpDataCollector;
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
require_once __DIR__ . '/../vendor/autoload.php';
|
require_once __DIR__ . '/../vendor/autoload.php';
|
||||||
require_once __DIR__ . '/../app/App.php';
|
|
||||||
|
|
||||||
define('APP_ROOT', __DIR__ . '/../');
|
|
||||||
define('SCHEMA_URL', 'https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json');
|
|
||||||
$app = new App();
|
$app = new App();
|
||||||
$app['debug'] = true;
|
|
||||||
$app->register(new Sikofitt\Config\ConfigServiceProvider(), [
|
|
||||||
'config.path' => $app->getConfDirectory(),
|
|
||||||
]);
|
|
||||||
$app->register(new TwigServiceProvider(), [
|
|
||||||
'twig.path' => [
|
|
||||||
APP_ROOT . 'app/views',
|
|
||||||
APP_ROOT . 'vendor/symfony/web-profiler-bundle/Resources/views/Profiler'
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$app->register(new WhoopsServiceProvider());
|
require_once $app->getAppDirectory() . '/providers.php';
|
||||||
$app->register(new \Silex\Provider\AssetServiceProvider());
|
|
||||||
$app->register(new \Silex\Provider\MonologServiceProvider());
|
|
||||||
|
|
||||||
$app->register(new \Silex\Provider\HttpKernelServiceProvider());
|
|
||||||
$app->register(new \Silex\Provider\AssetServiceProvider());
|
|
||||||
$app->register(new \Silex\Provider\FormServiceProvider());
|
|
||||||
$app->register(new \Silex\Provider\HttpFragmentServiceProvider());
|
|
||||||
$app->register(new \Silex\Provider\ServiceControllerServiceProvider());
|
|
||||||
$app->register(new \Silex\Provider\RoutingServiceProvider());
|
|
||||||
$app->register(new \Silex\Provider\VarDumperServiceProvider(), array(
|
|
||||||
'var_dumper.dump_destination' => new \Symfony\Component\VarDumper\Cloner\VarCloner(),
|
|
||||||
));
|
|
||||||
|
|
||||||
$app->register(new \Silex\Provider\MonologServiceProvider(), array(
|
|
||||||
'monolog.logfile' => $app->getDataDirectory() . '/logs/' . (null !== $app->config('app.environment') ? $app->config('app.environment') . '.log' : 'dev.log'),
|
|
||||||
));
|
|
||||||
|
|
||||||
$app->register(new \Silex\Provider\SessionServiceProvider());
|
|
||||||
$app->register(new \Silex\Provider\WebProfilerServiceProvider(), array(
|
|
||||||
'profiler.cache_dir' => $app->getDataDirectory() . '/cache/profiler',
|
|
||||||
));
|
|
||||||
$app->extend('twig', function (\Twig_Environment $twig, $app) {
|
|
||||||
$twig->enableDebug();
|
|
||||||
$twig->addExtension(new Twig_Extensions_Extension_Date());
|
|
||||||
$twig->addExtension(new Sikofitt\Twig\Date());
|
|
||||||
$twig->addExtension(new Sikofitt\Twig\RenderProfile());
|
|
||||||
$twig->addGlobal('config', $app['config']->all());
|
|
||||||
return $twig;
|
|
||||||
});
|
|
||||||
$app->error(function (\Exception $e, $code) use ($app) {
|
|
||||||
switch ($code) {
|
|
||||||
case 404:
|
|
||||||
$message = $app['twig']->render('error404.html.twig');
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$message = $app['twig']->render('error500.html.twig');
|
|
||||||
}
|
|
||||||
return new Response($message, $code);
|
|
||||||
});
|
|
||||||
|
|
||||||
$app['json.decoder'] = function ($app) {
|
|
||||||
return new Webmozart\Json\JsonDecoder();
|
|
||||||
};
|
|
||||||
$app['json.encoder'] = function ($app) {
|
|
||||||
return new Webmozart\Json\JsonEncoder();
|
|
||||||
};
|
|
||||||
$app['json.validator'] = function ($app) {
|
|
||||||
return new Webmozart\Json\JsonValidator();
|
|
||||||
};
|
|
||||||
|
|
||||||
$app->get('/', function () use ($app) {
|
|
||||||
$resumeData = $app['json.decoder']->decodeFile($app->getDataDirectory() . '/resume.json', $app->getDataDirectory() . '/resume.schema.json');
|
|
||||||
$basics = (isset($resumeData->basics) && count($resumeData->basics) > 0) ? $resumeData->basics : null;
|
|
||||||
$work = (isset($resumeData->work) && count($resumeData->work) > 0) ? $resumeData->work : null;
|
|
||||||
$volunteer = (isset($resumeData->volunteer) && count($resumeData->volunteer) > 0) ? $resumeData->volunteer : null;
|
|
||||||
$education = (isset($resumeData->education) && count($resumeData->education) > 0) ? $resumeData->education : null;
|
|
||||||
$awards = (isset($resumeData->awards) && count($resumeData->awards) > 0) ? $resumeData->awards : null;
|
|
||||||
$publications = (isset($resumeData->publications) && count($resumeData->publications) > 0) ? $resumeData->publications : null;
|
|
||||||
$skills = (isset($resumeData->skills) && count($resumeData->skills) > 0) ? $resumeData->skills : null;
|
|
||||||
$languages = (isset($resumeData->languages) && count($resumeData->languages) > 0) ? $resumeData->languages : null;
|
|
||||||
$interests = (isset($resumeData->interests) && count($resumeData->interests) > 0) ? $resumeData->interests : null;
|
|
||||||
$references = (isset($resumeData->references) && count($resumeData->references) > 0) ? $resumeData->references : null;
|
|
||||||
|
|
||||||
|
|
||||||
return $app['twig']->render('resume.html.twig', [
|
|
||||||
'basics' => $basics,
|
|
||||||
'work' => $work,
|
|
||||||
'volunteer' => $volunteer,
|
|
||||||
'education' => $education,
|
|
||||||
'awards' => $awards,
|
|
||||||
'publications' => $publications,
|
|
||||||
'skills' => $skills,
|
|
||||||
'languages' => $languages,
|
|
||||||
'interests' => $interests,
|
|
||||||
'references' => $references,
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
$app->mount('/', new \Sikofitt\Controller\ResumeControllerProvider());
|
||||||
|
$app->mount('/api', new \Sikofitt\Controller\ApiControllerProvider());
|
||||||
$app->run();
|
$app->run();
|
||||||
|
|
Loading…
Reference in New Issue