PDF Testing
This commit is contained in:
parent
ef3c231c1e
commit
125e8eb34f
|
@ -13,6 +13,7 @@ use Sikofitt\Config\ConfigTrait;
|
|||
use Sikofitt\Json\JsonFileTrait;
|
||||
use Sikofitt\Json\JsonTrait;
|
||||
use Silex\Application;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# This file is auto-generated during the composer install
|
||||
app:
|
||||
debug: false
|
||||
environment: prod
|
||||
debug: true
|
||||
environment: dev
|
||||
title: 'R. Eric Wheeler | Resume'
|
||||
email: eric@rewiv.com
|
||||
phone: 510-646-2135
|
||||
|
|
|
@ -12,25 +12,32 @@
|
|||
{% block apple_meta %}
|
||||
{# <link rel="apple-touch-icon-precomposed" href="images/apple-touch-icon.png"> #}
|
||||
{% endblock %}
|
||||
<link rel="stylesheet" href="{{ asset('css/resume.min.css') }}">
|
||||
|
||||
<link rel="stylesheet" href="{{ baseUrl ~ asset('css/resume.min.css') }}">
|
||||
{% block stylesheets %}{% endblock %}
|
||||
{% block inline_styles %}{% endblock %}
|
||||
<script src="{{ asset('js/vendor/jquery.min.js') }}"></script>
|
||||
<script src="{{ asset('js/vendor/uikit.min.js') }}"></script>
|
||||
<script src="{{ asset('js/vendor/sticky.min.js') }}"></script>
|
||||
<script src="{{ asset('js/vendor/notify.min.js') }}"></script>
|
||||
<script src="{{ asset('js/vendor/es6-shim.min.js') }}"></script>
|
||||
<script src="{{ baseUrl ~ asset('js/vendor/jquery.min.js') }}"></script>
|
||||
<script src="{{ baseUrl ~ asset('js/vendor/uikit.min.js') }}"></script>
|
||||
<script src="{{ baseUrl ~ asset('js/vendor/sticky.min.js') }}"></script>
|
||||
<script src="{{ baseUrl ~ asset('js/vendor/notify.min.js') }}"></script>
|
||||
<script src="{{ baseUrl ~ asset('js/vendor/es6-shim.min.js') }}"></script>
|
||||
{% block javascripts_head %}{% endblock %}
|
||||
{% block inline_js_head %}{% endblock %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="uk-container uk-container-center uk-margin-large-top uk-margin-large-bottom">
|
||||
<div id="main" class="uk-container uk-container-center uk-margin-large-top uk-margin-large-bottom">
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
<script src="{{ asset('js/resume.min.js') }}"></script>
|
||||
<footer id="footer" style="
|
||||
margin-top: 100px;
|
||||
height: 150px;
|
||||
background-color: #000;
|
||||
">
|
||||
</footer>
|
||||
<script src="{{ baseUrl ~ asset('js/resume.min.js') }}"></script>
|
||||
{% block javascripts_foot %}{% endblock %}
|
||||
{% block inline_js_foot %}{% endblock %}
|
||||
</body>
|
||||
|
|
|
@ -1,272 +1,161 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}
|
||||
{{ app.config.app.title | default('Resume') }}
|
||||
{{ app.config.app.title | default('Resume') }}
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
|
||||
<style type="text/css">
|
||||
.uk-sticky-active-sidebar {
|
||||
margin-top: 35px;
|
||||
}
|
||||
|
||||
<div class="uk-grid" data-uk-grid-margin xmlns="http://www.w3.org/1999/html">
|
||||
<div class="uk-width-1-1">
|
||||
<h1 class="uk-heading-large">
|
||||
{% if basics.name is not empty %}
|
||||
{{ basics.name }}
|
||||
{% else %}
|
||||
{{ app.config.app.title|default('Resume') }}
|
||||
{% endif %}
|
||||
{% if basics.label is not empty %}
|
||||
<small class="uk-h2 uk-align-right uk-text-bottom">{{ basics.label }}</small>
|
||||
{% endif %}
|
||||
</h1>
|
||||
<hr/>
|
||||
{% if basics.summary is not empty %}
|
||||
<p class="uk-text-lead">{{ basics.summary }}</p>
|
||||
div#sidebar.uk-active {
|
||||
margin-top: 35px;
|
||||
transition: margin-top 2s;
|
||||
}
|
||||
</style>
|
||||
<div class="uk-grid" data-uk-grid-margin xmlns="http://www.w3.org/1999/html">
|
||||
<div class="uk-width-1-1">
|
||||
<h1 class="uk-heading-large">
|
||||
{% if basics.name is not empty %}
|
||||
{{ basics.name|title }}
|
||||
{% else %}
|
||||
{{ app.config.app.title|default('Resume') }}
|
||||
{% endif %}
|
||||
{% if basics.label is not empty %}
|
||||
<small class="uk-h2 uk-align-right uk-text-bottom">{{ basics.label }}</small>
|
||||
{% endif %}
|
||||
</h1>
|
||||
<hr/>
|
||||
{% if basics.summary is not empty %}
|
||||
<p class="uk-text-lead">{{ basics.summary|raw }}</p>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="uk-grid" data-uk-grid-margin>
|
||||
<div id="uk-sticky-start" class="uk-width-medium-3-4">
|
||||
{% include 'skills.html.twig' %}
|
||||
{% include 'work.html.twig' %}
|
||||
{% include 'references.html.twig' %}
|
||||
</div>
|
||||
<div class="uk-width-medium-1-4">
|
||||
<div id="sidebar" class="uk-panel uk-panel-header uk-panel-box"
|
||||
data-uk-sticky="{top:35, animation: 'uk-animation-slide-top', getWidthFrom:'#sidebar'}">
|
||||
<div class="uk-panel-image">
|
||||
<img
|
||||
class="uk-align-right uk-thumbnail uk-border-circle uk-thumbnail-mini uk-animation-scale-up uk-img-preserve"
|
||||
src="{{ basics.picture }}"/>
|
||||
</div>
|
||||
<h3 class="uk-panel-title">Contact</h3>
|
||||
|
||||
<ul class="uk-list uk-list-line">
|
||||
|
||||
{% if app.config.app.phone is not empty %}
|
||||
<li class="uk-list-space"><a href="#phone-modal" class="hidden-phone" data-uk-modal>Phone</a></li>
|
||||
{% endif %}
|
||||
|
||||
<li class="uk-list-space">
|
||||
{% if basics.email is not empty %}
|
||||
<a href="#contact-form-wrapper" data-uk-modal>{{ basics.email }}</a>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<div class="uk-grid" data-uk-grid-margin>
|
||||
<div class="uk-width-medium-3-4">
|
||||
<h1>Experience</h1>
|
||||
<div class="uk-panel uk-panel-header">
|
||||
|
||||
<div class="resume-positions">
|
||||
{% for position in work %}
|
||||
<h3 class="company uk-panel-title uk-animation-slide-left">
|
||||
{{ position.company }}
|
||||
<small class="uk-align-right">
|
||||
{{ position.startDate|date('M, Y') }} -
|
||||
{% if position.endDate is not defined %}
|
||||
Current
|
||||
{% else %}
|
||||
{{ position.endDate|date('M, Y') }}
|
||||
{% endif %}
|
||||
|
||||
(~
|
||||
{% if position.endDate is not defined %}
|
||||
{{ position.startDate|date_diff }}
|
||||
{% else %}
|
||||
{{ position.startDate|date_diff(position.endDate) }}
|
||||
{% endif %}
|
||||
)
|
||||
</small>
|
||||
</h3>
|
||||
<h5>{{ position.position }}</h5>
|
||||
<p class="summary uk-text-primary uk-text-large">
|
||||
{{ position.summary|raw }}
|
||||
</p>
|
||||
{% if position.highlights is defined and position.highlights is not empty %}
|
||||
<dl class="uk-description-list-horizontal uk-animation-slide-right">
|
||||
<dt>Highlights</dt>
|
||||
{% for highlight in position.highlights %}
|
||||
<dd class="uk-margin-small-top uk-margin-small-bottom">{{ highlight|raw }} {# raw is deprecated in 2.0 #}</dd>
|
||||
{% endfor %}
|
||||
</dl>
|
||||
{% endif %}
|
||||
<hr class="uk-hr-light"/>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<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-image">
|
||||
<img class="uk-align-right uk-thumbnail uk-border-circle uk-thumbnail-mini uk-animation-scale-up uk-img-preserve" src="{{ basics.picture }}"/>
|
||||
</div>
|
||||
<h3 class="uk-panel-title">Contact</h3>
|
||||
|
||||
<ul class="uk-list uk-list-line">
|
||||
|
||||
{% if app.config.app.phone is not empty %}
|
||||
|
||||
<li class="uk-list-space"><a href="#captcha" class="hidden-phone" data-uk-modal>Phone</a></li>
|
||||
{% endif %}
|
||||
|
||||
<li class="uk-list-space">
|
||||
{% if basics.email is not empty %}
|
||||
<a href="#contact-form-wrapper" data-uk-modal>{{ basics.email }}</a>
|
||||
{% endif %}
|
||||
|
||||
</li>
|
||||
|
||||
{% if basics.website is not empty %}
|
||||
<li class="uk-list-space"><a href="{{ basics.website }}" target="_blank"
|
||||
title="Home page">{{ basics.website }}</a></li>
|
||||
{% endif %}
|
||||
{% if basics.location|length > 0 and basics.location is not empty %}
|
||||
<li class="uk-list-space">
|
||||
<address>
|
||||
{% set location = basics.location %}
|
||||
|
||||
{% if location.address is not empty %}
|
||||
{{ location.address }}<br/>
|
||||
{% endif %}
|
||||
{% if location.city is not empty %}
|
||||
{{ location.city }},
|
||||
{% endif %}
|
||||
{% if location.region is not empty %}
|
||||
{{ location.region }},
|
||||
{% endif %}
|
||||
{% if location.countryCode is not empty %}
|
||||
{{ location.countryCode }}
|
||||
{% endif %}<br/>
|
||||
|
||||
</address>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="uk-list-space">
|
||||
{% for profile in basics.profiles %}
|
||||
{{ render_profile(profile)|raw }}
|
||||
{% endfor %}
|
||||
|
||||
</li>
|
||||
<li class="uk-list-divider"></li>
|
||||
</ul>
|
||||
{% if skills is defined and skills is not empty %}
|
||||
|
||||
<h3 class="uk-panel-title">Skills</h3>
|
||||
|
||||
<dl class="uk-description-list-line">
|
||||
{% for skill in skills %}
|
||||
<dt class="uk-text-bold">{{ skill.name }}</dt>
|
||||
<dd>{{ skill.keywords|join(', ')|raw }}</dd>
|
||||
{% endfor %}
|
||||
</dl>
|
||||
{% if basics.website is not empty %}
|
||||
<li class="uk-list-space">
|
||||
<a href="{{ basics.website }}" target="_blank" title="Home page">{{ basics.website }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if basics.location|length > 0 and basics.location is not empty %}
|
||||
<li class="uk-list-space">
|
||||
<address>
|
||||
{% set location = basics.location %}
|
||||
|
||||
{% if location.address is not empty %}
|
||||
{{ location.address }}<br/>
|
||||
{% endif %}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="contact-form-wrapper" 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-divider uk-flex-middle uk-height-viewport uk-cover-background">
|
||||
|
||||
<div class="uk-width-small-1-1 uk-width-large-1-2" id="contact-form">
|
||||
<div class="uk-container uk-container-center">
|
||||
{{ form_start(contact_form) }}
|
||||
|
||||
<fieldset data-uk-margin>
|
||||
<legend>Contact {% if basics.email is not empty %}
|
||||
<small class="uk-align-right">{{ basics.email }}</small>{% endif %}</legend>
|
||||
<div class="uk-form-row">
|
||||
{{ form_label(contact_form.name) }}
|
||||
<div class="uk-form-controls">
|
||||
{{ form_widget(contact_form.name) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-form-row">
|
||||
{{ form_label(contact_form.email) }}
|
||||
<div class="uk-form-controls">
|
||||
{{ form_widget(contact_form.email) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-form-row">
|
||||
{{ form_label(contact_form.message|raw) }}
|
||||
<div class="uk-form-controls">
|
||||
{{ form_widget(contact_form.message) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-form-row">
|
||||
{{ form_label(contact_form.submit) }}
|
||||
<div class="uk-form-controls">
|
||||
{{ form_widget(contact_form.submit) }}
|
||||
</div>
|
||||
</div>
|
||||
{{ form_rest(contact_form) }}
|
||||
</fieldset>
|
||||
{{ form_end(contact_form) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- phone -->
|
||||
<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">
|
||||
|
||||
<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="{{ path('api_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 id="offcanvas" class="uk-offcanvas">
|
||||
<div class="uk-offcanvas-bar">
|
||||
<ul class="uk-list uk-list-line">
|
||||
{% if basics.email is not empty %}
|
||||
<li>{{ basics.email }}</li>
|
||||
{% if location.city is not empty %}
|
||||
{{ location.city }},
|
||||
{% endif %}
|
||||
{% if basics.phone is not empty %}
|
||||
<li>{{ basics.phone }}</li>
|
||||
{% if location.region is not empty %}
|
||||
{{ location.region }},
|
||||
{% endif %}
|
||||
{% if basics.location|length > 0 and basics.location is not empty %}
|
||||
<li>
|
||||
<address>
|
||||
{% for location in basics.location %}
|
||||
{% if location.address is not empty %}
|
||||
{{ location.address }}<br/>
|
||||
{% endif %}
|
||||
{% if location.city is not empty %}
|
||||
{{ location.city }}
|
||||
{% if location.postalCode is not empty %}
|
||||
{{ location.postalCode }}
|
||||
{% endif %}
|
||||
{% if location.countryCode is not empty %}
|
||||
{{ location.countryCode }}
|
||||
{% endif %}<br/>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</address>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
{% if location.countryCode is not empty %}
|
||||
{{ location.countryCode }}
|
||||
{% endif %}<br/>
|
||||
|
||||
</address>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="uk-list-space">
|
||||
{% for profile in basics.profiles %}
|
||||
{{ render_profile(profile)|raw }}
|
||||
{% endfor %}
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="spinner-modal" class="uk-modal">
|
||||
<div class="uk-modal-dialog uk-animation-scale-up uk-animation-bottom-center">
|
||||
<p class="uk-text-center uk-h2 uk-margin uk-text-primary">Sending message ...
|
||||
<i class="uk-margin-left uk-icon uk-icon-spinner uk-icon-spin"></i>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% include 'contact.html.twig' %}
|
||||
|
||||
|
||||
{% include 'phone.html.twig' %}
|
||||
|
||||
<div id="offcanvas" class="uk-offcanvas">
|
||||
<div class="uk-offcanvas-bar">
|
||||
<ul class="uk-list uk-list-line">
|
||||
{% if basics.email is not empty %}
|
||||
<li>{{ basics.email }}</li>
|
||||
{% endif %}
|
||||
{% if basics.phone is not empty %}
|
||||
<li>{{ basics.phone }}</li>
|
||||
{% endif %}
|
||||
{% if basics.location|length > 0 and basics.location is not empty %}
|
||||
<li>
|
||||
<address>
|
||||
{% for location in basics.location %}
|
||||
{% if location.address is not empty %}
|
||||
{{ location.address }}<br/>
|
||||
{% endif %}
|
||||
{% if location.city is not empty %}
|
||||
{{ location.city }}
|
||||
{% if location.postalCode is not empty %}
|
||||
{{ location.postalCode }}
|
||||
{% endif %}
|
||||
{% if location.countryCode is not empty %}
|
||||
{{ location.countryCode }}
|
||||
{% endif %}<br/>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</address>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="spinner-modal" class="uk-modal">
|
||||
<div class="uk-modal-dialog uk-animation-scale-up uk-animation-bottom-center">
|
||||
<p class="uk-text-center uk-h2 uk-margin uk-text-primary">Sending message ...
|
||||
<i class="uk-margin-left uk-icon uk-icon-spinner uk-icon-spin"></i>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts_foot %}
|
||||
<script src='https://www.google.com/recaptcha/api.js'></script>
|
||||
<script src='https://www.google.com/recaptcha/api.js'></script>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
{% if references is defined and references is not empty %}
|
||||
<h1 id="references">References</h1>
|
||||
<div class="uk-panel uk-panel-header">
|
||||
{% for reference in references %}
|
||||
<blockquote class="uk">
|
||||
<p>{{ reference.reference|raw }}</p>
|
||||
<small>{{ reference.name }}</small>
|
||||
</blockquote>
|
||||
{% endfor %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
|
@ -0,0 +1,13 @@
|
|||
{% if skills is defined and skills is not empty %}
|
||||
|
||||
<h1 id="skills">Skills</h1>
|
||||
<dl class="uk-description-list-line">
|
||||
{% for skill in skills %}
|
||||
<dt class="uk-text-bold uk-margin-small">{{ skill.name }}</dt>
|
||||
|
||||
<dd class="uk-margin-small">{{ skill.keywords|join(', ') }}</dd>
|
||||
|
||||
{% endfor %}
|
||||
</dl>
|
||||
|
||||
{% endif %}
|
|
@ -0,0 +1,41 @@
|
|||
<h1 id="experience">Experience</h1>
|
||||
<div class="uk-panel uk-panel-header">
|
||||
|
||||
<div class="resume-positions">
|
||||
{% for position in work %}
|
||||
<h3 class="company uk-panel-title uk-animation-slide-left">
|
||||
{{ position.company }}
|
||||
<small class="uk-align-right">
|
||||
{{ position.startDate|date('M, Y') }} -
|
||||
{% if position.endDate is not defined %}
|
||||
Current
|
||||
{% else %}
|
||||
{{ position.endDate|date('M, Y') }}
|
||||
{% endif %}
|
||||
|
||||
(~
|
||||
{% if position.endDate is not defined %}
|
||||
{{ position.startDate|date_diff }}
|
||||
{% else %}
|
||||
{{ position.startDate|date_diff(position.endDate) }}
|
||||
{% endif %}
|
||||
)
|
||||
</small>
|
||||
</h3>
|
||||
<h5>{{ position.position }}</h5>
|
||||
<p class="summary uk-text-primary uk-text-large">
|
||||
{{ position.summary|raw }}
|
||||
</p>
|
||||
{% if position.highlights is defined and position.highlights is not empty %}
|
||||
<dl class="uk-description-list-horizontal uk-animation-slide-right">
|
||||
<dt>Highlights</dt>
|
||||
{% for highlight in position.highlights %}
|
||||
<dd class="uk-margin-small-top uk-margin-bottom">{{ highlight|raw }} {# raw is deprecated in 2.0 #}</dd>
|
||||
{% endfor %}
|
||||
</dl>
|
||||
{% endif %}
|
||||
<hr class="uk-hr-light"/>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -36,5 +36,6 @@ $application->add(new SchemaValidationCommand());
|
|||
$application->add($twigDebugCommand);
|
||||
$application->add($twigLintCommand);
|
||||
$application->add(new \Symfony\CS\Console\Command\FixCommand());
|
||||
$application->add(new Sikofitt\Command\CreatePdfCommand());
|
||||
$application->run($input);
|
||||
|
||||
|
|
296
data/resume.json
296
data/resume.json
|
@ -1,133 +1,169 @@
|
|||
{
|
||||
"basics": {
|
||||
"name": "R. Eric Wheeler",
|
||||
"label": "Developer / Systems",
|
||||
"picture": "http://rewiv.com/storage/me.png",
|
||||
"email": "eric@ericwheeler.net",
|
||||
"phone": "",
|
||||
"website": "https://code.reric.me",
|
||||
"summary": "My name is Eric Wheeler. I enjoy programming, working on computer hardware/electronics, music and gardening.",
|
||||
"location": {
|
||||
"address": "",
|
||||
"postalCode": "CA 94578",
|
||||
"city": "San Leandro",
|
||||
"countryCode": "US",
|
||||
"region": "California"
|
||||
},
|
||||
"profiles": [
|
||||
{
|
||||
"network": "Twitter",
|
||||
"username": "sikofitt",
|
||||
"url": "https://twitter.com/sikofitt"
|
||||
},
|
||||
{
|
||||
"network": "Github",
|
||||
"username": "sikofitt",
|
||||
"url": ""
|
||||
},
|
||||
{
|
||||
"network": "Gitlab",
|
||||
"username": "sikofitt",
|
||||
"url": "https://repos.bgemi.net/u/sikofitt"
|
||||
},
|
||||
{
|
||||
"network": "linkedin",
|
||||
"username": "reric",
|
||||
"url": "https://www.linkedin.com/in/reric"
|
||||
}
|
||||
]
|
||||
"basics": {
|
||||
"name": "R. Eric WHeeler",
|
||||
"label": "Developer / Systems",
|
||||
"picture": "http://rewiv.com/storage/me.png",
|
||||
"email": "eric@ericwheeler.net",
|
||||
"phone": "510-646-2135",
|
||||
"website": "http://rewiv.com",
|
||||
"summary": "My name is Eric Wheeler.<br /> I enjoy programming, working on computer hardware/electronics, music and gardening. My computer experience dates back to the Apple II/e. I enjoy learning in general, although my focus is mainly on new technologies. I have excellent problem solving skills, I adapt well to new things, and learn very quickly.",
|
||||
"location": {
|
||||
"address": "",
|
||||
"postalCode": "94578",
|
||||
"city": "San Leandro",
|
||||
"countryCode": "US",
|
||||
"region": "California"
|
||||
},
|
||||
"work": [
|
||||
{
|
||||
"company": "Stanford University",
|
||||
"position": "Developer / Systems Administrator",
|
||||
"website": "https://ee.stanford.edu",
|
||||
"startDate": "2007-05-27",
|
||||
"summary": "I have done many different things during my employment at Stanford University.<br />A few of things things have been : Desktop Support, Computer cluster administration for the NSF and NNIN using Scyld Clusterware, General programing/debugging and frontend as well as backend web development using a number of different technologies.",
|
||||
"highlights": [
|
||||
"Repaired and Maintained a 64 node research computing cluster for the <a href=\"//nnin.org\" title=\"National Nanotechnology Infrastructure Network\">NNIN</a> funded by the <a href=\"//nsf.gov\" title=\"National Science Foundation\">NSF</a>.",
|
||||
"Converted Electrical Engineering's static web site to Drupal 7.",
|
||||
"Created many Drupal 7 modules for the EE website including a custom events, lecture and committe minutes content type, a CDN module for uploading and recieving images/videos/documents, an Orglist module for displaying Faculty, Students, and Staff from a custom API.",
|
||||
"Created a custom Drupal 7 site for the SystemX organization with integrated login for affiliates as well as Stanford staff."
|
||||
]
|
||||
},
|
||||
{
|
||||
"company": "Searchathlon INC.",
|
||||
"position": "Web Developer / Linux System Administration",
|
||||
"website": "http://searchathlon.com",
|
||||
"startDate": "2005-01-01",
|
||||
"endDate": "2006-01-01",
|
||||
"summary": "",
|
||||
"highlights": []
|
||||
}
|
||||
],
|
||||
"volunteer": [],
|
||||
"education": [],
|
||||
"awards": [],
|
||||
"publications": [],
|
||||
"skills": [
|
||||
{
|
||||
"name": "Web Development / Design",
|
||||
"level": "",
|
||||
"keywords": [
|
||||
"HTML5",
|
||||
"CSS3",
|
||||
"Javascript",
|
||||
"jQuery",
|
||||
"NPM",
|
||||
"Bower",
|
||||
"Grunt",
|
||||
"Let's Encrypt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PHP",
|
||||
"level": "",
|
||||
"keywords": [
|
||||
"PHP5",
|
||||
"PHP7",
|
||||
"<b>Drupal 7</b>",
|
||||
"Symfony 2",
|
||||
"Symfony 3",
|
||||
"OOP",
|
||||
"Silex",
|
||||
"Slim",
|
||||
"Doctrine",
|
||||
"Composer"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PHP",
|
||||
"level": "",
|
||||
"keywords": [
|
||||
"PHP5",
|
||||
"PHP7",
|
||||
"Symfony 2",
|
||||
"Symfony 3",
|
||||
"OOP",
|
||||
"Silex",
|
||||
"Slim",
|
||||
"Doctrine",
|
||||
"Composer"
|
||||
]
|
||||
}
|
||||
|
||||
],
|
||||
"languages": [],
|
||||
"interests": [
|
||||
{
|
||||
"name": "Computers",
|
||||
"keywords": [
|
||||
"Hardware",
|
||||
"Programming",
|
||||
"Design"
|
||||
]
|
||||
}
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"name": "Erlich Bachman",
|
||||
"reference": "It is my pleasure to recommend Richard, his performance working as a consultant for Main St. Company proved that he will be a valuable addition to any company."
|
||||
}
|
||||
"profiles": [
|
||||
{
|
||||
"network": "Twitter",
|
||||
"username": "sikofitt",
|
||||
"url": "https://twitter.com/sikofitt"
|
||||
},
|
||||
{
|
||||
"network": "Github",
|
||||
"username": "sikofitt",
|
||||
"url": "https://github.com/sikofitt"
|
||||
},
|
||||
{
|
||||
"network": "Gitlab",
|
||||
"username": "sikofitt",
|
||||
"url": "https://repos.bgemi.net/u/sikofitt"
|
||||
},
|
||||
{
|
||||
"network": "linkedin",
|
||||
"username": "reric",
|
||||
"url": "https://www.linkedin.com/in/reric"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"work": [
|
||||
{
|
||||
"company": "Stanford University",
|
||||
"position": "Developer / System Administrator",
|
||||
"website": "https://ee.stanford.edu",
|
||||
"startDate": "2007-05-27",
|
||||
"summary": "I have done many different things during my employment at Stanford University.<br />A few of things things have been : Desktop Support, Computer cluster administration for the NSF and NNIN using Scyld Clusterware, General programing/debugging and frontend as well as backend web development using a number of different technologies.",
|
||||
"highlights": [
|
||||
"Repaired and Maintained a 64 node research computing cluster for the <a href=\\\"//nnin.org\\\" title=\\\"National Nanotechnology Infrastructure Network\\\">NNIN</a> funded by the <a href=\\\"//nsf.gov\\\" title=\\\"National Science Foundation\\\">NSF</a>.",
|
||||
"Converted Electrical Engineering's static web site to Drupal 7.",
|
||||
"Created many Drupal 7 modules for the EE website including a custom events, lecture and committe minutes content type, a CDN module for uploading and recieving images/videos/documents, an Orglist module for displaying Faculty, Students, and Staff from a custom API.",
|
||||
"Created a custom Drupal 7 site for the SystemX organization with integrated login for affiliates as well as Stanford staff."
|
||||
]
|
||||
},
|
||||
{
|
||||
"company": "Searchathlon",
|
||||
"position": "Web Developer / Linux System Administrator",
|
||||
"startDate": "2005-01-01",
|
||||
"endDate": "2007-01-01",
|
||||
"summary": "Searchathlon was a search startup for media. My main duties were administrating a Linux server running Fedora core 3 and web maintenance/development using Apache. Other duties included managing Apache and IIS web servers on a Windows 2000 setup.",
|
||||
"highlights": [
|
||||
"Created a working Apache/ Microsoft ASP (Active Server Pages) setup on Fedora Core Linux version 3 using a CGI (Common Gateway Interface) setup."
|
||||
]
|
||||
}
|
||||
],
|
||||
"volunteer": [],
|
||||
"education": [],
|
||||
"awards": [],
|
||||
"publications": [],
|
||||
"skills": [
|
||||
{
|
||||
"name": "Web Development / Design (Back end)",
|
||||
"level": "",
|
||||
"keywords": [
|
||||
"NPM",
|
||||
"Bower",
|
||||
"GruntJS",
|
||||
"Let's Encrypt",
|
||||
"MySQL",
|
||||
"PostgresSQL",
|
||||
"JSON",
|
||||
"XML",
|
||||
"Apache 2.2/2.4",
|
||||
"Nginx",
|
||||
"Pound web proxy",
|
||||
"Deployment (Heroku, Dokku)",
|
||||
"Virtualization (Virtualbox / VMWare, Vagrant)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Web Development / Design (Front end)",
|
||||
"level": "",
|
||||
"keywords": [
|
||||
"HTML 4/5",
|
||||
"CSS 2/3",
|
||||
"Javascript",
|
||||
"jQuery"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PHP",
|
||||
"level": "",
|
||||
"keywords": [
|
||||
"PHP 5.3-5.6 / 7",
|
||||
"Composer",
|
||||
"Symfony 2 / 3",
|
||||
"Silex 1 / 2",
|
||||
"Slim 2 / 3",
|
||||
"Doctrine"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "General Programing",
|
||||
"level": "",
|
||||
"keywords": [
|
||||
"OOP",
|
||||
"Turbo Pascal / Free Pascal",
|
||||
"Python",
|
||||
"C++",
|
||||
"C",
|
||||
"Perl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "System Administration",
|
||||
"level": "",
|
||||
"keywords": [
|
||||
"Linux (Gentoo, Centos/Red Hat/Debian/Ubuntu)",
|
||||
"Mac OS/X",
|
||||
"Solaris 10/11",
|
||||
"Windows XP / 7 / 8 / 8.1 / 10 / 2000 / 2003",
|
||||
"Bash",
|
||||
"ZSH",
|
||||
"Penguin Computing Scyld ClusterWare HPC (High Performance Computing)",
|
||||
"Source Code Building (auto-tools, auto-make, auto-conf)",
|
||||
"MS-DOS 5-7 / FreeDOS",
|
||||
"FTP",
|
||||
"SFTP/SSH",
|
||||
"Log debugging",
|
||||
"Network debugging"
|
||||
]
|
||||
}
|
||||
],
|
||||
"languages": [
|
||||
{
|
||||
"language": "English",
|
||||
"fluency": "Native"
|
||||
}
|
||||
],
|
||||
"interests": [
|
||||
{
|
||||
"name": "Computers",
|
||||
"keywords": [
|
||||
"Hardware",
|
||||
"Programming",
|
||||
"Design"
|
||||
]
|
||||
}
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"name": "Craig Stadler",
|
||||
"reference": "It is my pleasure to recommend Richard, his performance working as a consultant for Main St. Company proved that he will be a valuable addition to any company."
|
||||
},
|
||||
{
|
||||
"name": "John Doe",
|
||||
"reference": "Richard is awesome and cool."
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: eric
|
||||
* Date: 7/16/16
|
||||
* Time: 3:05 PM
|
||||
*/
|
||||
|
||||
namespace Sikofitt\Command;
|
||||
|
||||
|
||||
use Knp\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style;
|
||||
use Knp\Snappy\Pdf;
|
||||
|
||||
|
||||
/**
|
||||
* Class CreatePdfCommand
|
||||
*
|
||||
* @package Sikofitt\Command
|
||||
*/
|
||||
class CreatePdfCommand extends Command
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function configure ()
|
||||
{
|
||||
$this->setName('resume:pdf:create')
|
||||
->setDescription('Create a pdf of your website.')
|
||||
->setProcessTitle('PDF Creation');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param InputInterface $input
|
||||
* @param OutputInterface $output
|
||||
*/
|
||||
public function interact (InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$index = $this->getSilexApplication()->renderView('index.html.twig', ['renderPdf' => true]);
|
||||
$pdf = new Pdf($this->getSilexApplication()->getRootDirectory() . '/vendor/bin/wkhtmltopdf-amd64');
|
||||
$pdf->generateFromHtml($index, $this->getSilexApplication()->getRootDirectory() . '/resume.pdf', ['keep-relative-links' => false, 'resolve-relative-links' => false, 'load-error-handling' => false, 'disable-javascript' => true, 'disable-external-links' => true, 'disable-internal-links' => true]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param InputInterface $input
|
||||
* @param OutputInterface $output
|
||||
*/
|
||||
public function execute (InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -19,6 +19,8 @@ use Symfony\Component\Form\Form;
|
|||
use Symfony\Component\Form\FormFactory;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Knp\Snappy\Pdf;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* Class ResumeControllerProvider
|
||||
|
@ -45,11 +47,39 @@ class ResumeControllerProvider implements ControllerProviderInterface
|
|||
|
||||
$contactForm = $app['form.factory']->create(ContactType::class);
|
||||
$controllers = $app['controllers_factory'];
|
||||
$controllers->get('/pdf', function (Request $request) use ($app) {
|
||||
$pdf = new Pdf($app->getRootDirectory() . '/vendor/bin/wkhtmltopdf-amd64');
|
||||
$content = $app->render('index.html.twig', [
|
||||
'renderPdf' => true,
|
||||
'baseUrl' => $request->getSchemeAndHttpHost(),
|
||||
'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(),
|
||||
]);
|
||||
|
||||
$renderedPdf = $pdf->getOutputFromHtml($content->getContent());
|
||||
|
||||
$response = new Response();
|
||||
$response->setContent($renderedPdf);
|
||||
$response->setStatusCode(200);
|
||||
$response->headers->set('Content-Type', 'application/pdf');
|
||||
$response->headers->set('Content-Disposition', 'attachment; filename="resume.pdf');
|
||||
return $response;
|
||||
});
|
||||
$controllers->get('/', function (Request $request) use ($app, $contactForm) {
|
||||
|
||||
|
||||
return $app['twig']->render('index.html.twig', [
|
||||
|
||||
'renderPdf' => false,
|
||||
'baseUrl' => $request->getSchemeAndHttpHost(),
|
||||
'fullData' => $this->resumeData,
|
||||
'basics' => $this->getResumeBasics(),
|
||||
'work' => $this->getResumeWork(),
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
jq = jQuery.noConflict();
|
||||
|
||||
jq(document).ready(function (jq) {
|
||||
jq('form#recaptcha').on('submit', function (event) {
|
||||
jq('form#phone-recaptcha').on('submit', function (event) {
|
||||
event.stopImmediatePropagation();
|
||||
event.stopPropagation();
|
||||
jq.post(jq(this).attr('action'), jq(this).serialize(), function (response) {
|
||||
|
@ -28,7 +28,7 @@ jq(document).ready(function (jq) {
|
|||
phone.attr('href', 'tel:' + data.message.phone);
|
||||
phone.text(data.message.phone);
|
||||
divRoot.append(h1);
|
||||
jq('#recaptcha-wrapper').replaceWith(divRoot);
|
||||
jq('#phone-recaptcha-wrapper').replaceWith(divRoot);
|
||||
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue