diff --git a/app/App.php b/app/App.php
index 1641655..1b64e50 100644
--- a/app/App.php
+++ b/app/App.php
@@ -69,10 +69,23 @@ class App extends Application {
}
/**
- * @return \Noodlehaus\Config
+ * Registers media icons
+ *
+ * @param \Sikofitt\Image\Profile\ProfileIconInterface $icon
*/
- public function conf2() {
- return Noodlehaus\Config::load($this->getConfDirectory());
+ public function registerIcon(\Sikofitt\Image\Profile\ProfileIconInterface $icon)
+ {
+ $this->config(sprintf('app.icons.%s', $icon->getName()), ['icon' => $icon->getIcon(), 'url' => $icon->getDefaultUrl()]);
+ }
+
+ public function boot() {
+ // register default icons
+ $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());
+ return parent::boot();
}
}
diff --git a/app/views/resume.html.twig b/app/views/resume.html.twig
index 57852cf..f4a8671 100644
--- a/app/views/resume.html.twig
+++ b/app/views/resume.html.twig
@@ -4,64 +4,162 @@
{{ app.config.app.title | default('Resume') }}
{% endblock %}
{% block body %}
- {{ dump(basics) }}
+
+
-
-
- {% if basics.email is not empty %}
- - {{ basics.email }}
- {% endif %}
- {% if basics.phone is not empty %}
- - {{ basics.phone }}
- {% endif %}
- {% if basics.location|length > 0 and basics.location is not empty %}
-
- {% for location in basics.location %}
- {% if location.address is not empty %}
- {{ location.address }}
- {% 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 %}
- {% endif %}
-
- {% endfor %}
- {% endif %}
-
-
-
{% endblock %}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 457fedb..f39529b 100644
--- a/composer.json
+++ b/composer.json
@@ -38,7 +38,8 @@
"symfony/monolog-bridge": "^3.1",
"google/recaptcha": "^1.1",
"hassankhan/config": "^0.10.0",
- "silex/web-profiler": "^2.0"
+ "silex/web-profiler": "^2.0",
+ "twig/extensions": "^1.3"
},
"require-dev": {
"symfony/debug": "~2.8|^3.0",
diff --git a/composer.lock b/composer.lock
index d851f76..23478f8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "b95f44a2d8bcbac673a62298f16f4ad9",
- "content-hash": "d0a7cfefe30599f33ddbe16cd3cce33d",
+ "hash": "d47e1d8d6470d4d29deb55649ecc969b",
+ "content-hash": "3c41da3f56c72d6c1bc86d0a1889d6d9",
"packages": [
{
"name": "google/recaptcha",
@@ -2187,6 +2187,58 @@
"homepage": "https://symfony.com",
"time": "2016-06-29 05:41:56"
},
+ {
+ "name": "twig/extensions",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/Twig-extensions.git",
+ "reference": "449e3c8a9ffad7c2479c7864557275a32b037499"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/449e3c8a9ffad7c2479c7864557275a32b037499",
+ "reference": "449e3c8a9ffad7c2479c7864557275a32b037499",
+ "shasum": ""
+ },
+ "require": {
+ "twig/twig": "~1.20|~2.0"
+ },
+ "require-dev": {
+ "symfony/translation": "~2.3"
+ },
+ "suggest": {
+ "symfony/translation": "Allow the time_diff output to be translated"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Twig_Extensions_": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Common additional features for Twig that do not directly belong in core",
+ "homepage": "http://twig.sensiolabs.org/doc/extensions/index.html",
+ "keywords": [
+ "i18n",
+ "text"
+ ],
+ "time": "2015-08-22 16:38:35"
+ },
{
"name": "twig/twig",
"version": "v1.24.1",
diff --git a/data/resume.json b/data/resume.json
index 1707ef6..23d7f63 100644
--- a/data/resume.json
+++ b/data/resume.json
@@ -6,7 +6,7 @@
"email": "eric@ericwheeler.net",
"phone": "",
"website": "https://code.reric.me",
- "summary": "",
+ "summary": "My name is Eric Wheeler. I enjoy programming, working on computer hardware/electronics, music and gardening.",
"location": {
"address": "",
"postalCode": "CA 94578",
@@ -18,7 +18,7 @@
{
"network": "Twitter",
"username": "sikofitt",
- "url": ""
+ "url": "https://twitter.com/sikofitt"
},
{
"network": "Github",
@@ -26,7 +26,7 @@
"url": ""
},
{
- "network": "Private Git",
+ "network": "Gitlab",
"username": "sikofitt",
"url": "https://repos.bgemi.net/u/sikofitt"
},
@@ -43,12 +43,12 @@
"position": "Developer / Systems Administrator",
"website": "https://ee.stanford.edu",
"startDate": "2007-05-27",
- "endDate": "2016-07-02",
- "summary": "",
+ "summary": "I have done many different things during my employment at Stanford University.
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": [
- "Build an algorithm for artist to detect if their music was violating copy right infringement laws",
- "Successfully won Techcrunch Disrupt",
- "Optimized an algorithm that holds the current world record for Weisman Scores"
+ "Upgraded and Maintained a 64 node research computing cluster for the NNIN funded by the
NSF.",
+ "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."
]
},
{
@@ -80,6 +80,22 @@
"Let's Encrypt"
]
},
+ {
+ "name": "PHP",
+ "level": "",
+ "keywords": [
+ "PHP5",
+ "PHP7",
+ "
Drupal 7",
+ "Symfony 2",
+ "Symfony 3",
+ "OOP",
+ "Silex",
+ "Slim",
+ "Doctrine",
+ "Composer"
+ ]
+ },
{
"name": "PHP",
"level": "",
@@ -95,6 +111,7 @@
"Composer"
]
}
+
],
"languages": [],
"interests": [
diff --git a/src/Sikofitt/Image/Profile/FacebookProfileIcon.php b/src/Sikofitt/Image/Profile/FacebookProfileIcon.php
new file mode 100644
index 0000000..a0b0231
--- /dev/null
+++ b/src/Sikofitt/Image/Profile/FacebookProfileIcon.php
@@ -0,0 +1,31 @@
+
+ *
+ * 7/7/16 / 7:39 AM
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sikofitt\Image\Profile;
+
+
+class FacebookProfileIcon implements ProfileIconInterface {
+
+ public function getName() {
+ return 'facebook';
+ }
+
+ public function getDefaultUrl() {
+ return 'https://facebook.com';
+ }
+
+ public function getIcon() {
+ return 'data:image/x-icon;base64,AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlFZBSp5eROejYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+bXUT//////////////////////5tdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+eX0TklFZBSgAAAAAAAAAAAAAAAAAAAACZWkLmo2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP//////////////////////m11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+aW0PnAAAAAAAAAAAAAAAAAAAAAJtdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/m11E//////////////////////+bXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP8AAAAAAAAAAAAAAAAAAAAAm11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+bXUT//////////////////////5tdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/m11E/wAAAAAAAAAAAAAAAAAAAACbXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP//////////////////////m11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+bXUT/AAAAAAAAAAAAAAAAAAAAAJtdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/m11E//////////////////////+bXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP8AAAAAAAAAAAAAAAAAAAAAm11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+bXUT//////////////////////5tdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/m11E/wAAAAAAAAAAAAAAAAAAAACbXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP//////////////////////m11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+bXUT/AAAAAAAAAAAAAAAAAAAAAJtdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/m11E//////////////////////+bXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP8AAAAAAAAAAAAAAAAAAAAAm11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+bXUT//////////////////////5tdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/m11E/wAAAAAAAAAAAAAAAAAAAACbXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/oGFG/51eRf+bXUT/m11E/5VZQv//////////////////////lVlC/5tdRP+bXUT/nV5F/6BgRv+jYkj/o2JI/6NiSP+bXUT/AAAAAAAAAAAAAAAAAAAAAJtdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+dXkX/kFdA/4tTPf+LUz3/iVE8//////////////////////+JUTz/i1M9/4tTPf+PVj7/ml1E/6JhRv+jYkj/o2JI/5tdRP8AAAAAAAAAAAAAAAAAAAAAm11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP////////////////////////////////////////////////////////////////+ib1r/oGBG/6NiSP+jYkj/m11E/wAAAAAAAAAAAAAAAAAAAACbXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/m11E/////////////////////////////////////////////////////////////////7qWiP+eX0X/o2JI/6NiSP+bXUT/AAAAAAAAAAAAAAAAAAAAAJtdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+dXkX/////////////////////////////////////////////////////////////////18G5/55fRf+jYkj/o2JI/5tdRP8AAAAAAAAAAAAAAAAAAAAAm11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6BhRv/////////////////////////////////////////////////////////////////z6+j/oGFG/6NiSP+jYkj/m11E/wAAAAAAAAAAAAAAAAAAAACbXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP//////////////////////m11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+bXUT/AAAAAAAAAAAAAAAAAAAAAJtdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/m11E//////////////////////+YW0P/omFG/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP8AAAAAAAAAAAAAAAAAAAAAm11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+bXUT//////////////////////5dgS/+YW0P/m11E/5tdRP+dXkX/oGFG/6NiSP+jYkj/m11E/wAAAAAAAAAAAAAAAAAAAACbXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/51eRf/7+fj/////////////////x66k/49bRf+LUz3/i1M9/5BXQP+dXkX/o2JI/6NiSP+bXUT/AAAAAAAAAAAAAAAAAAAAAJtdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/n2BF/+3i3v///////////////////////////////////////////5tdRP+jYkj/o2JI/5tdRP8AAAAAAAAAAAAAAAAAAAAAm11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+iYUb/zrCk////////////////////////////////////////////m11E/6NiSP+jYkj/m11E/wAAAAAAAAAAAAAAAAAAAACbXUT/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+malH/7eLd//////////////////////////////////////+fX0X/o2JI/6NiSP+bXUT/AAAAAAAAAAAAAAAAAAAAAJtdRP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+maFD/0LGk//Dm4v/7+fj/+/j3//Pr6P/p29X/3ce+/6JhRv+jYkj/o2JI/5tdRP8AAAAAAAAAAAAAAAAAAAAAm11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/m11E/wAAAAAAAAAAAAAAAAAAAACXW0P/oGBG/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6BgRv+XW0P/AAAAAAAAAAAAAAAAAAAAAIxTPOaXW0P/m11E/5tdRP+bXUT/m11E/5tdRP+bXUT/m11E/5tdRP+bXUT/m11E/5tdRP+bXUT/m11E/5tdRP+bXUT/m11E/5tdRP+bXUT/m11E/5tdRP+bXUT/m11E/5tdRP+bXUT/l1tD/4xTPOYAAAAAAAAAAAAAAAAAAAAAgUw0SYdPOuaKUz3/i1M9/4tTPf+LUz3/i1M9/4tTPf+LUz3/i1M9/4tTPf+LUz3/i1M9/4tTPf+LUz3/i1M9/4tTPf+LUz3/i1M9/4tTPf+LUz3/i1M9/4tTPf+LUz3/i1M9/4pTPf+HTzrmgUw0SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////4AAAB8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAAD4AAAB///////////KAAAABAAAAAgAAAAAQAgAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGBFw6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI////////////o2JI/6NiSP+jYkj/o2JI/6JgR8QAAAAAAAAAAKNiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP///////////6NiSP+jYkj/o2JI/6NiSP+jYkj/AAAAAAAAAACjYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj///////////+jYkj/o2JI/6NiSP+jYkj/o2JI/wAAAAAAAAAAo2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI////////////o2JI/6NiSP+jYkj/o2JI/6NiSP8AAAAAAAAAAKNiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP///////////6NiSP+jYkj/o2JI/6NiSP+jYkj/AAAAAAAAAACjYkj/o2JI/6NiSP+jYkj/o2JI/4JOOv+CTjr///////////+CTjr/gk46/5JYQP+jYkj/o2JI/wAAAAAAAAAAo2JI/6NiSP+jYkj/o2JI/6NiSP/////////////////////////////////HrqT/o2JI/6NiSP8AAAAAAAAAAKNiSP+jYkj/o2JI/6NiSP+jYkj/////////////////////////////////8efj/6NiSP+jYkj/AAAAAAAAAACjYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj///////////+aXUT/o2JI/6NiSP+jYkj/o2JI/wAAAAAAAAAAo2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI//n29f//////pH5v/4JOOv+CTjr/o2JI/6NiSP8AAAAAAAAAAKNiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP/eyL///////////////////////6NiSP+jYkj/AAAAAAAAAACjYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/qm1W/+LOxv/8+/r/9/Hv/+vd2P+jYkj/o2JI/wAAAAAAAAAAm11E/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/6NiSP+jYkj/o2JI/5tdRP8AAAAAAAAAAIBNNsOCTjr/gk46/4JOOv+CTjr/gk46/4JOOv+CTjr/gk46/4JOOv+CTjr/gk46/4JOOv+ATTbDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAD//wAA';
+ }
+}
\ No newline at end of file
diff --git a/src/Sikofitt/Image/Profile/GithubProfileIcon.php b/src/Sikofitt/Image/Profile/GithubProfileIcon.php
new file mode 100644
index 0000000..35269f5
--- /dev/null
+++ b/src/Sikofitt/Image/Profile/GithubProfileIcon.php
@@ -0,0 +1,40 @@
+
+ *
+ * 7/7/16 / 9:18 AM
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sikofitt\Image\Profile;
+
+/**
+ * Class GithubProfileIcon
+ * @package Sikofitt\Image\Profile
+ */
+class GithubProfileIcon implements ProfileIconInterface
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function getName() {
+ return 'github';
+ }
+
+ public function getDefaultUrl() {
+ return 'https://github.com';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getIcon() {
+ return 'data:image/png;base64,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';
+ }
+}
\ No newline at end of file
diff --git a/src/Sikofitt/Image/Profile/GitlabProfileIcon.php b/src/Sikofitt/Image/Profile/GitlabProfileIcon.php
new file mode 100644
index 0000000..11cad28
--- /dev/null
+++ b/src/Sikofitt/Image/Profile/GitlabProfileIcon.php
@@ -0,0 +1,40 @@
+
+ *
+ * 7/7/16 / 9:36 AM
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sikofitt\Image\Profile;
+
+/**
+ * Class GitlabProfileIcon
+ * @package Sikofitt\Image\Profile
+ */
+class GitlabProfileIcon implements ProfileIconInterface {
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName() {
+ return 'gitlab';
+ }
+
+ 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==';
+ }
+}
\ No newline at end of file
diff --git a/src/Sikofitt/Image/Profile/LinkedinProfileIcon.php b/src/Sikofitt/Image/Profile/LinkedinProfileIcon.php
new file mode 100644
index 0000000..31cd0c6
--- /dev/null
+++ b/src/Sikofitt/Image/Profile/LinkedinProfileIcon.php
@@ -0,0 +1,31 @@
+
+ *
+ * 7/7/16 / 10:51 AM
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sikofitt\Image\Profile;
+
+
+class LinkedinProfileIcon implements ProfileIconInterface {
+
+ public function getName() {
+ return 'linkedin';
+ }
+
+ public function getDefaultUrl() {
+ return 'https://linkedin.com/in';
+ }
+
+ 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=';
+ }
+}
\ No newline at end of file
diff --git a/src/Sikofitt/Image/Profile/ProfileIconInterface.php b/src/Sikofitt/Image/Profile/ProfileIconInterface.php
new file mode 100644
index 0000000..1489c36
--- /dev/null
+++ b/src/Sikofitt/Image/Profile/ProfileIconInterface.php
@@ -0,0 +1,42 @@
+
+ *
+ * 7/7/16 / 7:16 AM
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sikofitt\Image\Profile;
+
+/**
+ * Interface ProfileIconInterface
+ * @package Sikofitt\Image\Profile
+ */
+interface ProfileIconInterface {
+
+ /**
+ * @return string
+ * The name of the network.
+ */
+ public function getName();
+
+ /**
+ * @return string
+ * The default url prefix if no url was given.
+ * (e.g. https://twitter.com for twitter, https://facebook.com for facebook.)
+ */
+ public function getDefaultUrl();
+ /**
+ * @return string
+ * The social icon.
+ * Can be a url, a relative path, or base64 encoded uri.
+ */
+ public function getIcon();
+
+}
\ No newline at end of file
diff --git a/src/Sikofitt/Image/Profile/TwitterProfileIcon.php b/src/Sikofitt/Image/Profile/TwitterProfileIcon.php
new file mode 100644
index 0000000..7392aa6
--- /dev/null
+++ b/src/Sikofitt/Image/Profile/TwitterProfileIcon.php
@@ -0,0 +1,32 @@
+
+ *
+ * 7/7/16 / 7:20 AM
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sikofitt\Image\Profile;
+
+
+class TwitterProfileIcon implements ProfileIconInterface {
+
+ public function getName()
+ {
+ return 'twitter';
+ }
+ public function getDefaultUrl() {
+ 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=';
+ }
+
+}
\ No newline at end of file
diff --git a/src/Sikofitt/Twig/Date.php b/src/Sikofitt/Twig/Date.php
new file mode 100644
index 0000000..bb38309
--- /dev/null
+++ b/src/Sikofitt/Twig/Date.php
@@ -0,0 +1,50 @@
+
+ *
+ * 7/7/16 / 6:57 AM
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sikofitt\Twig;
+
+
+class Date extends \Twig_Extension {
+
+ public function getName() {
+ return 'date_diff';
+ }
+
+ /**
+ * @return array
+ * Array of Twig simple filters.
+ */
+ public function getFilters()
+ {
+ return [
+ new \Twig_SimpleFilter('date_diff', [$this, 'dateDiff']),
+ ];
+ }
+
+ /**
+ * Calculates the difference in time.
+ *
+ * @param $startDate
+ * @param string $endDate
+ *
+ * @return \DateTimeInterface
+ */
+ public function dateDiff($startDate, $endDate = 'now')
+ {
+ $dt = new \DateTimeImmutable($startDate);
+ $dateDifference = $dt->diff(new \DateTime($endDate));
+ return $dateDifference->format('%y years');
+
+ }
+}
\ No newline at end of file
diff --git a/src/Sikofitt/Twig/RenderProfile.php b/src/Sikofitt/Twig/RenderProfile.php
new file mode 100644
index 0000000..6eb7b66
--- /dev/null
+++ b/src/Sikofitt/Twig/RenderProfile.php
@@ -0,0 +1,54 @@
+
+ *
+ * 7/7/16 / 9:39 AM
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sikofitt\Twig;
+
+
+class RenderProfile extends \Twig_Extension {
+
+ public function getName() {
+ return 'render_profile';
+ }
+
+ public function getFunctions() {
+ return [
+ new \Twig_SimpleFunction('render_profile', [$this, 'renderProfile'], ['needs_context' => true]),
+ ];
+ }
+
+ 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==';
+ //network": "Twitter" +"username": "sikofitt" +"url": ""
+ $icons = $context['app']->config('app.icons');
+
+ $network = strtolower($iconData->network);
+ $haveNetwork = isset($icons[$network]);
+ if($haveNetwork) {
+ $imageData = $icons[strtolower($iconData->network)];
+ } else {
+ return;
+ }
+ if(!isset($iconData->url) || empty($iconData->url))
+ {
+ $iconData->url = $icons[strtolower($iconData->network)]['url'] . '/' . $iconData->username;
+ }
+ $imageUrl = sprintf('
', $imageData['icon'], $iconData->network);
+ if(isset($iconData->url) && !empty($iconData->url)) {
+ return sprintf('
%s', $iconData->url, $iconData->network,$imageUrl);
+ } else {
+ return $imageUrl;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Sikofitt/less/resume.less b/src/Sikofitt/less/resume.less
index ef0a943..e202587 100644
--- a/src/Sikofitt/less/resume.less
+++ b/src/Sikofitt/less/resume.less
@@ -2,7 +2,49 @@
@import 'https://fonts.googleapis.com/css?family=Lato:300|Eczar';
@base-body-font-family : 'Lato';
-@base-body-font-size : 26px;
+@base-body-font-size : 16px;
@base-heading-font-family : 'Eczar';
@base-body-line-height : 1.2em;
-@thumbnail-mini-width : 100px;
\ No newline at end of file
+@thumbnail-mini-width : 100px;
+@panel-box-background : #fff;
+
+
+.uk-panel.uk-panel-box {
+ border: 1px solid @base-hr-border;
+ border-radius:2px;
+}
+hr.uk-hr-light {
+ border-top-color:#fafafa;
+}
+
+a.profile-link {
+ filter: grayscale(100%);
+ -webkit-transition: filter 500ms;
+ -moz-transition: filter 500ms;
+ -ms-transition: filter 500ms;
+ -o-transition: filter 500ms;
+ transition: filter 500ms;
+ &:hover {
+ filter: grayscale(0%);
+ }
+}
+
+.uk-panel-image {
+ position: absolute;
+ top: 10px;
+ right: 16px;
+ > img {
+ width:34px;
+ padding: 2px;
+ }
+
+}
+
+.uk-text-lead {
+ font-size: 24px;
+ line-height: 38px;
+ font-weight: normal;
+ margin-bottom: 16px;
+ border-bottom: 1px solid #ccc;
+ padding-bottom: 12px;
+}
\ No newline at end of file
diff --git a/web/index.php b/web/index.php
index 631ee64..001497d 100644
--- a/web/index.php
+++ b/web/index.php
@@ -1,37 +1,40 @@
register(new Sikofitt\Config\ConfigServiceProvider(), [
- 'config.path' => $app->getConfDirectory(),
+ '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 TwigServiceProvider(), [
+ 'twig.path' => [
+ APP_ROOT . 'app/views',
+ APP_ROOT . 'vendor/symfony/web-profiler-bundle/Resources/views/Profiler'
+ ],
]);
-$app->register (new WhoopsServiceProvider());
-$app->register (new \Silex\Provider\AssetServiceProvider());
-$app->register (new \Silex\Provider\MonologServiceProvider());
+$app->register(new WhoopsServiceProvider());
+$app->register(new \Silex\Provider\AssetServiceProvider());
+$app->register(new \Silex\Provider\MonologServiceProvider());
-$app->register (new \Silex\Provider\HttpKernelServiceProvider());
+$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(
+$app->register(new \Silex\Provider\VarDumperServiceProvider(), array(
'var_dumper.dump_destination' => new \Symfony\Component\VarDumper\Cloner\VarCloner(),
));
@@ -41,35 +44,39 @@ $app->register(new \Silex\Provider\MonologServiceProvider(), array(
$app->register(new \Silex\Provider\SessionServiceProvider());
$app->register(new \Silex\Provider\WebProfilerServiceProvider(), array(
- 'profiler.cache_dir' => $app->getDataDirectory() .'/cache/profiler',
+ 'profiler.cache_dir' => $app->getDataDirectory() . '/cache/profiler',
));
-$app->extend('twig', function(\Twig_Environment $twig, $app) {
-$twig->enableDebug();
-return $twig;
+$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->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();
+ return new Webmozart\Json\JsonDecoder();
};
$app['json.encoder'] = function ($app) {
- return new Webmozart\Json\JsonEncoder();
+ return new Webmozart\Json\JsonEncoder();
};
$app['json.validator'] = function ($app) {
- return new Webmozart\Json\JsonValidator();
+ return new Webmozart\Json\JsonValidator();
};
-
-$app->get ('/', function () use ($app) {
- $resumeData = $app['json.decoder']->decodeFile($app->getDataDirectory() .'/resume.json', $app->getDataDirectory() . '/resume.schema.json');
+$app->registerIcon(new \Sikofitt\Image\Profile\TwitterProfileIcon());
+$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;
@@ -80,7 +87,7 @@ $app->get ('/', function () use ($app) {
$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,
@@ -96,4 +103,4 @@ $app->get ('/', function () use ($app) {
]);
});
-$app->run ();
+$app->run();