PDF Testing

This commit is contained in:
R. Eric Wheeler 2016-07-17 11:05:32 -07:00
parent ef3c231c1e
commit 125e8eb34f
18 changed files with 479 additions and 393 deletions

View File

@ -13,6 +13,7 @@ use Sikofitt\Config\ConfigTrait;
use Sikofitt\Json\JsonFileTrait; use Sikofitt\Json\JsonFileTrait;
use Sikofitt\Json\JsonTrait; use Sikofitt\Json\JsonTrait;
use Silex\Application; use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
require __DIR__ . '/../vendor/autoload.php'; require __DIR__ . '/../vendor/autoload.php';

View File

@ -1,7 +1,7 @@
# This file is auto-generated during the composer install # This file is auto-generated during the composer install
app: app:
debug: false debug: true
environment: prod environment: dev
title: 'R. Eric Wheeler | Resume' title: 'R. Eric Wheeler | Resume'
email: eric@rewiv.com email: eric@rewiv.com
phone: 510-646-2135 phone: 510-646-2135

View File

View File

@ -12,25 +12,32 @@
{% block apple_meta %} {% block apple_meta %}
{# <link rel="apple-touch-icon-precomposed" href="images/apple-touch-icon.png"> #} {# <link rel="apple-touch-icon-precomposed" href="images/apple-touch-icon.png"> #}
{% endblock %} {% endblock %}
<link rel="stylesheet" href="{{ asset('css/resume.min.css') }}">
<link rel="stylesheet" href="{{ baseUrl ~ asset('css/resume.min.css') }}">
{% block stylesheets %}{% endblock %} {% block stylesheets %}{% endblock %}
{% block inline_styles %}{% endblock %} {% block inline_styles %}{% endblock %}
<script src="{{ asset('js/vendor/jquery.min.js') }}"></script> <script src="{{ baseUrl ~ asset('js/vendor/jquery.min.js') }}"></script>
<script src="{{ asset('js/vendor/uikit.min.js') }}"></script> <script src="{{ baseUrl ~ asset('js/vendor/uikit.min.js') }}"></script>
<script src="{{ asset('js/vendor/sticky.min.js') }}"></script> <script src="{{ baseUrl ~ asset('js/vendor/sticky.min.js') }}"></script>
<script src="{{ asset('js/vendor/notify.min.js') }}"></script> <script src="{{ baseUrl ~ asset('js/vendor/notify.min.js') }}"></script>
<script src="{{ asset('js/vendor/es6-shim.min.js') }}"></script> <script src="{{ baseUrl ~ asset('js/vendor/es6-shim.min.js') }}"></script>
{% block javascripts_head %}{% endblock %} {% block javascripts_head %}{% endblock %}
{% block inline_js_head %}{% endblock %} {% block inline_js_head %}{% endblock %}
</head> </head>
<body> <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 %} {% block body %}
{% endblock %} {% endblock %}
</div> </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 javascripts_foot %}{% endblock %}
{% block inline_js_foot %}{% endblock %} {% block inline_js_foot %}{% endblock %}
</body> </body>

View File

View File

@ -1,272 +1,161 @@
{% extends 'base.html.twig' %} {% extends 'base.html.twig' %}
{% block title %} {% block title %}
{{ app.config.app.title | default('Resume') }} {{ app.config.app.title | default('Resume') }}
{% endblock %} {% endblock %}
{% block body %} {% 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#sidebar.uk-active {
<div class="uk-width-1-1"> margin-top: 35px;
<h1 class="uk-heading-large"> transition: margin-top 2s;
{% if basics.name is not empty %} }
{{ basics.name }} </style>
{% else %} <div class="uk-grid" data-uk-grid-margin xmlns="http://www.w3.org/1999/html">
{{ app.config.app.title|default('Resume') }} <div class="uk-width-1-1">
{% endif %} <h1 class="uk-heading-large">
{% if basics.label is not empty %} {% if basics.name is not empty %}
<small class="uk-h2 uk-align-right uk-text-bottom">{{ basics.label }}</small> {{ basics.name|title }}
{% endif %} {% else %}
</h1> {{ app.config.app.title|default('Resume') }}
<hr/> {% endif %}
{% if basics.summary is not empty %} {% if basics.label is not empty %}
<p class="uk-text-lead">{{ basics.summary }}</p> <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 %} {% endif %}
</div> </li>
</div>
<div class="uk-grid" data-uk-grid-margin> {% if basics.website is not empty %}
<div class="uk-width-medium-3-4"> <li class="uk-list-space">
<h1>Experience</h1> <a href="{{ basics.website }}" target="_blank" title="Home page">{{ basics.website }}</a>
<div class="uk-panel uk-panel-header"> </li>
{% endif %}
<div class="resume-positions"> {% if basics.location|length > 0 and basics.location is not empty %}
{% for position in work %} <li class="uk-list-space">
<h3 class="company uk-panel-title uk-animation-slide-left"> <address>
{{ position.company }} {% set location = basics.location %}
<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 %}
&nbsp;{{ location.region }},
{% endif %}
{% if location.countryCode is not empty %}
&nbsp;{{ 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 location.address is not empty %}
{{ location.address }}<br/>
{% endif %} {% endif %}
{% if location.city is not empty %}
{{ location.city }},
</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>
{% endif %} {% endif %}
{% if basics.phone is not empty %} {% if location.region is not empty %}
<li>{{ basics.phone }}</li> &nbsp;{{ location.region }},
{% endif %} {% endif %}
{% if basics.location|length > 0 and basics.location is not empty %} {% if location.countryCode is not empty %}
<li> &nbsp;{{ location.countryCode }}
<address> {% endif %}<br/>
{% for location in basics.location %}
{% if location.address is not empty %} </address>
{{ location.address }}<br/> </li>
{% endif %} {% endif %}
{% if location.city is not empty %} <li class="uk-list-space">
{{ location.city }} {% for profile in basics.profiles %}
{% if location.postalCode is not empty %} {{ render_profile(profile)|raw }}
&nbsp;{{ location.postalCode }} {% endfor %}
{% endif %}
{% if location.countryCode is not empty %} </li>
&nbsp;{{ location.countryCode }}
{% endif %}<br/> </ul>
{% endif %}
{% endfor %} </div>
</address>
</li>
{% endif %}
<li>
</li>
</ul>
</div>
</div> </div>
<div id="spinner-modal" class="uk-modal">
<div class="uk-modal-dialog uk-animation-scale-up uk-animation-bottom-center"> </div>
<p class="uk-text-center uk-h2 uk-margin uk-text-primary">Sending message ... {% include 'contact.html.twig' %}
<i class="uk-margin-left uk-icon uk-icon-spinner uk-icon-spin"></i>
</p>
</div> {% 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 %}
&nbsp;{{ location.postalCode }}
{% endif %}
{% if location.countryCode is not empty %}
&nbsp;{{ location.countryCode }}
{% endif %}<br/>
{% endif %}
{% endfor %}
</address>
</li>
{% endif %}
<li>
</li>
</ul>
</div> </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 %} {% endblock %}
{% block javascripts_foot %} {% block javascripts_foot %}
<script src='https://www.google.com/recaptcha/api.js'></script> <script src='https://www.google.com/recaptcha/api.js'></script>
{% endblock %} {% endblock %}

View File

View File

View File

@ -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>

View File

@ -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 %}

View File

View File

@ -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>

View File

@ -36,5 +36,6 @@ $application->add(new SchemaValidationCommand());
$application->add($twigDebugCommand); $application->add($twigDebugCommand);
$application->add($twigLintCommand); $application->add($twigLintCommand);
$application->add(new \Symfony\CS\Console\Command\FixCommand()); $application->add(new \Symfony\CS\Console\Command\FixCommand());
$application->add(new Sikofitt\Command\CreatePdfCommand());
$application->run($input); $application->run($input);

View File

@ -1,133 +1,169 @@
{ {
"basics": { "basics": {
"name": "R. Eric Wheeler", "name": "R. Eric WHeeler",
"label": "Developer / Systems", "label": "Developer / Systems",
"picture": "http://rewiv.com/storage/me.png", "picture": "http://rewiv.com/storage/me.png",
"email": "eric@ericwheeler.net", "email": "eric@ericwheeler.net",
"phone": "", "phone": "510-646-2135",
"website": "https://code.reric.me", "website": "http://rewiv.com",
"summary": "My name is Eric Wheeler. I enjoy programming, working on computer hardware/electronics, music and gardening.", "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": { "location": {
"address": "", "address": "",
"postalCode": "CA 94578", "postalCode": "94578",
"city": "San Leandro", "city": "San Leandro",
"countryCode": "US", "countryCode": "US",
"region": "California" "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"
}
]
}, },
"work": [ "profiles": [
{ {
"company": "Stanford University", "network": "Twitter",
"position": "Developer / Systems Administrator", "username": "sikofitt",
"website": "https://ee.stanford.edu", "url": "https://twitter.com/sikofitt"
"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": [ "network": "Github",
"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>.", "username": "sikofitt",
"Converted Electrical Engineering's static web site to Drupal 7.", "url": "https://github.com/sikofitt"
"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." {
] "network": "Gitlab",
}, "username": "sikofitt",
{ "url": "https://repos.bgemi.net/u/sikofitt"
"company": "Searchathlon INC.", },
"position": "Web Developer / Linux System Administration", {
"website": "http://searchathlon.com", "network": "linkedin",
"startDate": "2005-01-01", "username": "reric",
"endDate": "2006-01-01", "url": "https://www.linkedin.com/in/reric"
"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."
}
] ]
} },
"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."
}
]
}

View File

@ -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)
{
}
}

View File

@ -19,6 +19,8 @@ use Symfony\Component\Form\Form;
use Symfony\Component\Form\FormFactory; use Symfony\Component\Form\FormFactory;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Knp\Snappy\Pdf;
use Symfony\Component\HttpFoundation\Response;
/** /**
* Class ResumeControllerProvider * Class ResumeControllerProvider
@ -45,11 +47,39 @@ class ResumeControllerProvider implements ControllerProviderInterface
$contactForm = $app['form.factory']->create(ContactType::class); $contactForm = $app['form.factory']->create(ContactType::class);
$controllers = $app['controllers_factory']; $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) { $controllers->get('/', function (Request $request) use ($app, $contactForm) {
return $app['twig']->render('index.html.twig', [ return $app['twig']->render('index.html.twig', [
'renderPdf' => false,
'baseUrl' => $request->getSchemeAndHttpHost(),
'fullData' => $this->resumeData, 'fullData' => $this->resumeData,
'basics' => $this->getResumeBasics(), 'basics' => $this->getResumeBasics(),
'work' => $this->getResumeWork(), 'work' => $this->getResumeWork(),

View File

@ -1,7 +1,7 @@
jq = jQuery.noConflict(); jq = jQuery.noConflict();
jq(document).ready(function (jq) { jq(document).ready(function (jq) {
jq('form#recaptcha').on('submit', function (event) { jq('form#phone-recaptcha').on('submit', function (event) {
event.stopImmediatePropagation(); event.stopImmediatePropagation();
event.stopPropagation(); event.stopPropagation();
jq.post(jq(this).attr('action'), jq(this).serialize(), function (response) { 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.attr('href', 'tel:' + data.message.phone);
phone.text(data.message.phone); phone.text(data.message.phone);
divRoot.append(h1); divRoot.append(h1);
jq('#recaptcha-wrapper').replaceWith(divRoot); jq('#phone-recaptcha-wrapper').replaceWith(divRoot);
} }
}); });