Compare commits

..

20 Commits
0.0 ... master

Author SHA1 Message Date
R. Eric Wheeler c4049bc349 Merge branch '0.1' into 'master'
Merge 0.1 into master

See merge request !2
2017-05-06 18:39:52 -07:00
R. Eric Wheeler 6f0be81406 Final gallery crap 2017-05-06 18:25:42 -07:00
R. Eric Wheeler 92a9858d7b Removed references to dump 2017-05-05 22:58:26 -07:00
R. Eric Wheeler 40fc48f912 Updated .gitignore 2017-05-05 22:51:39 -07:00
R. Eric Wheeler 24a0e52f38 Lots, sorry I forgot 2017-05-05 22:49:54 -07:00
R. Eric Wheeler 574525c0a4 Finished Social logins..almost 2017-04-26 21:32:43 -07:00
R. Eric Wheeler 2d025468cb VichUploaderBundle 2017-04-25 15:45:32 -07:00
R. Eric Wheeler e60363f8c7 Moving to big computer 2017-04-24 12:21:22 -07:00
R. Eric Wheeler 5340ae77c5 Added assets git lfs 2017-04-24 09:08:38 -07:00
R. Eric Wheeler 37ccc1b048 Updated config to use google bucket folder gallery 2017-04-23 12:48:23 -07:00
R. Eric Wheeler b8d0d50fe6 Added mockups and email html 2017-04-23 12:40:06 -07:00
R. Eric Wheeler 828ba828b2 Image Entities 2017-04-23 12:03:54 -07:00
R. Eric Wheeler d84ab9412f Google Cloud setup 2017-04-22 20:58:42 -07:00
R. Eric Wheeler 10bf90bd93 OAuth integration 2017-04-22 12:43:30 -07:00
R. Eric Wheeler 7a98daf886 Finished Registration 2017-04-16 16:55:58 -07:00
R. Eric Wheeler bd716544b0 Docker updates 2017-04-09 18:08:01 -07:00
R. Eric Wheeler 4087c70ec8 Finish adding redis cache/session support 2017-03-29 15:18:01 -07:00
R. Eric Wheeler 640f33514c Moved to symfony 2017-03-29 09:24:59 -07:00
R. Eric Wheeler ba88261466 Merge branch 'master' of https://repos.bgemi.net/sikofitt/doughnut-wedding 2017-03-29 08:30:26 -07:00
R. Eric Wheeler bd9216f269 Update CHANGELOG.md 2017-02-06 22:53:47 -08:00
190 changed files with 97751 additions and 2134 deletions

30
.gitattributes vendored Normal file
View File

@ -0,0 +1,30 @@
*.tgz filter=lfs diff=lfs merge=lfs -text
mockups filter=lfs diff=lfs merge=lfs -text
mockups/DoughnutWedding_RSVP.jpg filter=lfs diff=lfs merge=lfs -text
mockups/Website[[:space:]]JPGs-20170423T193800Z-001.zip filter=lfs diff=lfs merge=lfs -text
mockups/DoughnutWedding_Contact.jpg filter=lfs diff=lfs merge=lfs -text
mockups/DoughnutWedding_Home.jpg filter=lfs diff=lfs merge=lfs -text
mockups/DoughnutWedding_Location.jpg filter=lfs diff=lfs merge=lfs -text
mockups/DoughnutWedding_OurStory.jpg filter=lfs diff=lfs merge=lfs -text
mockups/DoughnutWedding_Photos.jpg filter=lfs diff=lfs merge=lfs -text
mockups/home_images/home_our_story_1.jpg filter=lfs diff=lfs merge=lfs -text
mockups/home_images/home_our_story_2.jpg filter=lfs diff=lfs merge=lfs -text
mockups/home_images/home_photo.jpg filter=lfs diff=lfs merge=lfs -text
mockups/home_images/drive-download-20170424T134706Z-001.zip filter=lfs diff=lfs merge=lfs -text
mockups/home_images/home_doughnut_1.jpg filter=lfs diff=lfs merge=lfs -text
mockups/home_images/home_doughnut_2.jpg filter=lfs diff=lfs merge=lfs -text
mockups/home_images/home_location.jpg filter=lfs diff=lfs merge=lfs -text
build/images/home_doughnut_2.jpg filter=lfs diff=lfs merge=lfs -text
build/images/home_our_story_1.jpg filter=lfs diff=lfs merge=lfs -text
build/images/home_our_story_2.jpg filter=lfs diff=lfs merge=lfs -text
build/images/logo.png filter=lfs diff=lfs merge=lfs -text
build/images/yahoo.svg filter=lfs diff=lfs merge=lfs -text
build/images/amazon.svg filter=lfs diff=lfs merge=lfs -text
build/images/home_doughnut_1.jpg filter=lfs diff=lfs merge=lfs -text
build/images/home_location.jpg filter=lfs diff=lfs merge=lfs -text
build/images/home_photo.jpg filter=lfs diff=lfs merge=lfs -text
build/images/favicon.png filter=lfs diff=lfs merge=lfs -text
build/images/home_photo_1.jpg filter=lfs diff=lfs merge=lfs -text
build/images/home_photo_2.jpg filter=lfs diff=lfs merge=lfs -text
build/images/location.jpg filter=lfs diff=lfs merge=lfs -text
build/images/yahoo2.svg filter=lfs diff=lfs merge=lfs -text

39
.gitignore vendored
View File

@ -1,15 +1,30 @@
node_modules/
vendor/
/app/config/parameters.yml
/build/dist/
/phpunit.xml
/var/*
!/var/cache
/var/cache/*
!var/cache/.gitkeep
!/var/logs
/var/logs/*
!var/logs/.gitkeep
!/var/sessions
/var/sessions/*
!var/sessions/.gitkeep
!var/SymfonyRequirements.php
/vendor/
/web/bundles/
/web/js/
/web/css/
/web/images/
*~
lib/mysql/
/lib
.idea
node_modules/
composer.lock
.idea/
.php_cs.cache
app/logs/
build/dist/
cache/
html/css/
html/images/
html/js/
lib/
variables.less
cors.json
doughnutwedding-cred.json
mailer.yml

View File

@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
### Changed
- composer.json
- .gitignore
### Added
- .php_cs
- php-cs-fixer

View File

@ -16,7 +16,9 @@ module.exports = function (grunt) {
vendor: {
src: [
'./vendor/bower/jquery/dist/jquery.js',
'./vendor/bower/uikit/dist/js/uikit.js'
'./vendor/bower/uikit/dist/js/uikit.js',
'./vendor/bower/uikit/dist/js/uikit-icons.js',
'./vendor/bower/select2/dist/js/select2.full.min.js'
],
dest: 'build/dist/js/vendor.min.js'
}
@ -50,6 +52,13 @@ module.exports = function (grunt) {
src: ['*.css', '!*.min.css'],
dest: 'build/dist/css',
ext: '.min.css'
},
{
expand: true,
cwd: 'build/css',
src: ['*.css', '!*.min.css'],
dest: 'build/dist/css',
ext: '.min.css'
}]
}
},
@ -81,21 +90,33 @@ module.exports = function (grunt) {
expand: true,
cwd: 'build/dist/js',
src: ['*.min.js'],
dest: 'html/js',
dest: 'web/js',
filter: 'isFile'
},
{
expand: true,
cwd: 'build/dist/css',
src: ['*.min.css'],
dest: 'html/css',
dest: 'web/css',
filter: 'isFile'
},
{
expand: true,
cwd: './vendor/bower/uikit/dist/images',
src: ['**'],
dest: 'html/images'
dest: 'web/images'
},
{
expand:true,
cwd: './vendor/bower/select2/dist/css',
src: ['select2.min.css'],
dest: 'web/css'
},
{
expand: true,
cwd: 'build/images',
src: ['*'],
dest: 'web/images'
}
]
}
@ -118,9 +139,9 @@ module.exports = function (grunt) {
},
clean: [
'build/dist',
'html/js/*.js',
'html/css/*.css',
'html/images/*.svg'
'web/js/*.js',
'web/css/*.css',
'web/images/*'
]
});

7
app/.htaccess Normal file
View File

@ -0,0 +1,7 @@
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>

View File

@ -18,16 +18,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Sikofitt\App\Middleware;
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
use Symfony\Component\HttpFoundation\Request;
class AuthenticatorMiddleware
class AppCache extends HttpCache
{
public function __invoke(Request $request, \Kernel $app)
{
if ($app->session()->has('user')) {
return true;
}
}
}

76
app/AppKernel.php Normal file
View File

@ -0,0 +1,76 @@
<?php
/*
* doughnutwedding.com
* Copyright (C) 2017 http://doughnutwedding.com eric@doughnutwedding.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\HttpKernel\Kernel;
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new \Snc\RedisBundle\SncRedisBundle(),
new \HWI\Bundle\OAuthBundle\HWIOAuthBundle(),
new \FOS\UserBundle\FOSUserBundle(),
new Knp\Bundle\GaufretteBundle\KnpGaufretteBundle(),
new Vich\UploaderBundle\VichUploaderBundle(),
new JavierEguiluz\Bundle\EasyAdminBundle\EasyAdminBundle(),
new Sikofitt\DoughnutWeddingBundle\SikofittDoughnutWeddingBundle(),
new WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle(),
];
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}
return $bundles;
}
public function getRootDir()
{
return __DIR__;
}
public function getCacheDir()
{
return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
}
public function getLogDir()
{
return dirname(__DIR__).'/var/logs';
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
}
}

View File

@ -1,406 +0,0 @@
<?php
/*
* doughnutwedding.com
* Copyright (C) 2017 http://doughnutwedding.com eric@doughnutwedding.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
use Bramus\Monolog\Formatter\{
ColorSchemes\TrafficLight,
ColoredLineFormatter
};
use Composer\Autoload\ClassLoader;
use Dflydev\Provider\DoctrineOrm\DoctrineOrmServiceProvider;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Monolog\{
Handler\StreamHandler,
Logger
};
use Sikofitt\App\Entity\User;
use Sikofitt\App\Traits\EntityManagerTrait;
use Sikofitt\App\Traits\FlashTrait;
use Sikofitt\Security\MySqlUserProvider;
use Silex\Application;
use Silex\Application\{
FormTrait,
MonologTrait,
SecurityTrait,
SwiftmailerTrait,
TranslationTrait,
TwigTrait,
UrlGeneratorTrait
};
use Silex\Provider\{
AssetServiceProvider,
CsrfServiceProvider,
DoctrineServiceProvider,
ExceptionHandlerServiceProvider,
FormServiceProvider,
HttpFragmentServiceProvider,
HttpKernelServiceProvider,
MonologServiceProvider,
RoutingServiceProvider,
SecurityServiceProvider,
ServiceControllerServiceProvider,
SessionServiceProvider,
SwiftmailerServiceProvider,
TwigServiceProvider,
ValidatorServiceProvider,
VarDumperServiceProvider,
WebProfilerServiceProvider
};
use Symfony\Bridge\Twig\Extension\TranslationExtension;
use Symfony\Component\Debug\ErrorHandler;
use Symfony\Component\Debug\ExceptionHandler;
use Symfony\Component\Form\FormFactory;
use Symfony\Component\Translation\Translator;
/**
* Class Kernel.
*/
class Kernel extends Application
{
use EntityManagerTrait;
use FlashTrait;
use FormTrait;
use MonologTrait;
use SecurityTrait;
use SwiftmailerTrait;
use TranslationTrait;
use TwigTrait;
use UrlGeneratorTrait;
/**
* Kernel constructor.
*
* @param ClassLoader $loader
* @param bool $debug
* @param array $values
*/
public function __construct(ClassLoader $loader, bool $debug = false, array $values = [])
{
parent::__construct($values);
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
if (true === $debug) {
$this->setDebug();
}
$this->setUpProviders();
$this->setUpDatabase();
$this->setUpView();
$this->setUpLogger();
$this->setUpMailer();
}
public function setUpRoutes(\Kernel $app)
{
}
/**
* @param array $values
*
* @throws \InvalidArgumentException
*
* @return int
*/
public function mail(array $values)
{
if (false === isset($values['from']) || false === is_array($values['from'])) {
throw new \InvalidArgumentException('Array key "from" should be an array.');
} elseif (false === isset($values['to']) || false === is_array($values['to'])) {
throw new \InvalidArgumentException('Array key "to" should be an array.');
} elseif (false === isset($values['body']) || false === is_string($values['body'])) {
throw new \InvalidArgumentException('Array key "body" should be a string.');
} elseif (false === isset($values['subject']) || false === is_string($values['subject'])) {
throw new \InvalidArgumentException('Array key "subject" should be a string.');
}
$message = \Swift_Message::newInstance();
$message
->setSubject($values['subject'])
->setFrom($values['from'])
->setTo($values['to'])
->setBody($values['body']);
/**
* @var \Swift_Transport $mailer
*/
$mailer = $this['mailer'];
return $mailer->send($message);
}
/**
* Sets the application to debug.
*/
public function setDebug()
{
$this['debug'] = true;
ErrorHandler::register();
ExceptionHandler::register();
}
/**
* @return bool
*/
public function getDebug(): bool
{
return $this['debug'];
}
/**
* @return string
*/
public function getBaseDir(): string
{
return __DIR__.'/..';
}
/**
* @return string
*/
public function getAppDir(): string
{
return $this->getBaseDir().'/app';
}
/**
* @return string
*/
public function getConfigDir(): string
{
return $this->getAppDir().'/config';
}
/**
* @return string
*/
public function getLogDir(): string
{
return $this->getAppDir().'/logs';
}
/**
* @return string
*/
public function getCacheDir(): string
{
return $this->getBaseDir().'/cache';
}
/**
* @return FormFactory
*/
public function getFormFactory()
{
return $this['form.factory'];
}
/**
* Sets up the database environment.
*/
protected function setUpDatabase()
{
$this->register(new DoctrineServiceProvider(), [
'db.options' => [
'driver' => 'pdo_mysql',
'dbname' => 'doughnut',
'host' => 'mysql',
'user' => 'doughnut',
'password' => 'doughnut',
],
]);
//$j = new Doctrine\Common\Cache\FilesystemCache()
$this->register(new DoctrineOrmServiceProvider(), [
'orm.proxies_dir' => $this->getCacheDir().'/doctrine/proxies/Doughnut/Wedding',
'orm.proxies_namespace' => 'Doughnut\Wedding',
'orm.default_cache' => [
'driver' => 'filesystem',
'path' => $this->getCacheDir().'/doctrine/cache',
],
'orm.auto_generate_proxies' => true,
'orm.strategy' => 'naming',
'orm.em.options' => [
'connection' => 'default',
'mappings' => [
[
'type' => 'annotation',
'path' => $this->getBaseDir().'/src/Sikofitt/App/Entity',
'namespace' => 'Sikofitt\App\Entity',
'alias' => 'Sikofitt',
'auto_generate_proxies' => true,
'use_simple_annotation_reader' => false,
],
],
],
]);
}
/**
* Sets up the view for the application.
*/
protected function setUpView()
{
$this
->register(new HttpKernelServiceProvider())
->register(new RoutingServiceProvider())
->register(new AssetServiceProvider())
->register(new SessionServiceProvider())
->register(new HttpFragmentServiceProvider())
->register(new ServiceControllerServiceProvider())
->register(new ValidatorServiceProvider());
$this->register(new TwigServiceProvider(), [
'twig.path' => $this->getAppDir().'/views',
]);
if (true === $this['debug']) {
$this
->register(new VarDumperServiceProvider())
->register(new WebProfilerServiceProvider(),
[
'profiler.cache_dir' => $this->getCacheDir().'/profiler',
'profiler.mount_prefix' => '/_profiler',
])
->register(new ExceptionHandlerServiceProvider())
;
}
/*
* Closure supports \Twig_Environment and Silex\Application as a second
* parameter, but we never use Silex\Application so we leave it out.
*/
$this->extend('twig', function (\Twig_Environment $twig) {
$twig->addGlobal('session', $this['session']);
$twig->addExtension(new TranslationExtension(new Translator('en')));
return $twig;
});
}
/**
* Sets up the rest of the providers for the application.
*/
protected function setUpProviders()
{
/*$this['app.mysql_authenticator'] = function($app) {
return new Sikofitt\Security\MysqlAuthenticator($app['security.encoder_factory'], $app->getEntityManager());
};
$this['security.firewalls'] = array(
'login' => [
'pattern' => '^/login$',
'anonymous' => true,
],
'secured' => [
'pattern' => '^/rsvp$',
'guard' => [
'authenticators' => [
'app.mysql_authenticator',
],
'form' => [
'login_path' => '/login',
'check_path' => '/login',
]
],
'users' => $this['users'] = function() {
return new MySqlUserProvider($this['orm.em']);
},
],
// configure where your users come from. Hardcode them, or load them from somewhere
// http://silex.sensiolabs.org/doc/providers/security.html#defining-a-custom-user-provider
// 'anonymous' => true
);*/
$this['protected_pages'] = function () {
return [
'gallery',
'rsvp/update',
];
};
$this
->register(new CsrfServiceProvider())
->register(new FormServiceProvider())
//->register(new SecurityServiceProvider())
;
$this->extend('form.extensions', function ($extensions) {
return $extensions;
});
}
/**
* Sets up the logger for the application.
*/
protected function setUpLogger()
{
if (true === $this->getDebug()) {
$monologLevel = Logger::DEBUG;
} else {
$monologLevel = Logger::INFO;
}
$this->register(new MonologServiceProvider(), [
'monolog.logfile' => $this->getLogDir().'/'.$this->getEnvironment().'.log',
'monolog.level' => $monologLevel,
]);
$this->extend('monolog', function (Logger $monolog, Application $app) {
$streamHandler = new StreamHandler($app['monolog.logfile']);
$streamHandler->setFormatter(new ColoredLineFormatter(new TrafficLight()));
$monolog->pushHandler($streamHandler);
return $monolog;
});
}
/**
* Sets up the mailer for the application.
*/
protected function setUpMailer()
{
$this['swiftmailer.options'] = [
'host' => 'mx.bgemi.net',
'port' => '25',
'username' => null,
'password' => null,
'encryption' => null,
'auth_mode' => null,
];
$this->register(new SwiftmailerServiceProvider());
}
/**
* @return string
*/
protected function getEnvironment(): string
{
$appEnv = getenv('APP_ENV');
if (false === $appEnv) {
return 'development';
} else {
return $appEnv;
}
}
}

View File

@ -0,0 +1,5 @@
{% extends "base.html.twig" %}
{% block title %}Change password{% endblock title %}
{% block body %}
{% include "@FOSUser/ChangePassword/change_password_content.html.twig" %}
{% endblock body %}

View File

@ -0,0 +1,20 @@
{% trans_default_domain 'FOSUserBundle' %}
<h2 class="uk-heading-line"><span>Change your password</span></h2>
{{ form_start(form, { 'action': path('fos_user_change_password'), 'attr': { 'class': 'uk-form uk-form-horizontal fos_user_resetting_reset' } }) }}
{{ form_label(form.plainPassword.first, 'New password', {'label_attr':{'class':'uk-form-label uk-visible@m'}}) }}
<div class="uk-form-controls uk-form-controls-text uk-margin-small-bottom">
{{ form_errors(form.plainPassword.first) }}
{{ form_widget(form.plainPassword.first, {'attr':{'class':'uk-input uk-form-large','placeholder':'New password'}}) }}
</div>
{{ form_label(form.plainPassword.second, 'Repeat password', {'label_attr':{'class':'uk-form-label uk-visible@m'}}) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.plainPassword.second) }}
{{ form_widget(form.plainPassword.second, {'attr':{'class':'uk-input uk-form-large','placeholder':'Repeat password'}}) }}
</div>
<div class="uk-margin-medium-top uk-width-1-1 uk-text-right@m">
<input type="submit" class="uk-button uk-width-1-1@s uk-width-1-2@m uk-button-large uk-button-primary" value="{{ 'resetting.reset.submit'|trans }}" />
</div>
{{ form_end(form) }}

View File

@ -0,0 +1,5 @@
{% extends "base.html.twig" %}
{% block title %}Edit Profile{% endblock title %}
{% block body %}
{% include "@FOSUser/Profile/edit_content.html.twig" %}
{% endblock body %}

View File

@ -0,0 +1,31 @@
{% trans_default_domain 'FOSUserBundle' %}
{{ form_errors(form) }}
{{ form_start(form, { 'action': path('fos_user_profile_edit'), 'attr': { 'class': 'uk-form-horizontal fos_user_profile_edit' } }) }}
{{ form_label(form.email) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.email) }}
{{ form_widget(form.email) }}
</div>
{{ form_label(form.name) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.name) }}
{{ form_widget(form.name) }}
</div>
{{ form_label(form.rsvp) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.rsvp) }}
{{ form_widget(form.rsvp) }}
</div>
<div class="uk-margin-medium-top">
<button type="submit" class="uk-button uk-button-large uk-width-1-1@s uk-width-1-3@m uk-align-right uk-button-primary" value="{{ 'profile.edit.submit'|trans }}">{{ 'profile.edit.submit'|trans }}</button>
</div>
<div class="uk-form-controls">
<a href="{{ url('fos_user_profile_show') }}" title="Cancel" class="uk-width-1-1@s uk-width-1-3@m uk-button uk-button-large uk-button-danger uk-align-right">Cancel</a>
</div>
{{ form_rest(form) }}
{{ form_end(form) }}

View File

@ -0,0 +1,5 @@
{% extends "base.html.twig" %}
{% block title %}Profile{% endblock title %}
{% block body %}
{% include "@FOSUser/Profile/show_content.html.twig" %}
{% endblock body %}

View File

@ -0,0 +1,44 @@
{% trans_default_domain 'SikofittDoughnutweddingBundle' %}
<h2 class="uk-width-1-1 uk-margin-medium-bottom uk-margin-remove-top uk-text-center">User Information</h2>
<div class="uk-width-1-1 uk-text-center uk-child-width-1-2" uk-grid>
<div><p class="uk-padding-small uk-text-right">{{ 'profile.name'|trans }}</p></div>
<div><p class="uk-padding-small uk-text-left">{{ user.name }}</p></div>
<div><p class="uk-padding-small uk-text-right">{{ 'profile.email'|trans }}</p></div>
<div><p class="uk-padding-small uk-text-left">{{ user.email }}</p></div>
<div><p class="uk-padding-small uk-text-right">{{ 'profile.rsvp'|trans }}</p></div>
<div><p class="uk-padding-small uk-text-left">{% if user.rsvp is not null %}{{ user.rsvp.guests }}{% else %}0{% endif %}</p></div>
</div>
<div class="uk-width-1-1 uk-margin-medium uk-text-center">
You can change your password <a href="{{ path('fos_user_change_password') }}">here.</a>
</div>
<div class="uk-width-1-2@m uk-width-1-1@s uk-align-center uk-margin-small uk-first-column">
<a href="{{ url('fos_user_profile_edit') }}" title="Edit profile" class="uk-button-large uk-button uk-button-primary uk-width-1-1">Edit Information</a>
</div>
<div class="uk-width-1-6@m uk-visible@m uk-margin-large-bottom@s uk-position-bottom-right">
<ul class="uk-iconnav uk-iconnav-vertical">
<li>{% set serviceActiveClass ='' %}
{% if user.facebookid is not null %}{% set serviceActiveClass ='uk-icon-facebook' %}{% endif %}
<a class="{{ serviceActiveClass }} uk-align-left uk-text-center uk-login uk-login-facebook" href="{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}" uk-icon="icon: facebook; ratio:1.5"></a>
</li>{% set serviceActiveClass='' %}
<li>{% if user.googleid is not null %}{% set serviceActiveClass ='uk-icon-google' %}{% endif %}
<a class="{{ serviceActiveClass }} uk-align-left uk-text-center uk-login uk-login-google" href="{{ url("hwi_oauth_service_redirect", {service: "google"}) }}" uk-icon="icon: google; ratio:1.5"></a>
</li>{% set serviceActiveClass='' %}
<li>{% if user.twitterid is not null %}{% set serviceActiveClass ='uk-icon-twitter' %}{% endif %}
<a class="{{ serviceActiveClass }} uk-align-left uk-text-center uk-login uk-login-twitter" href="{{ url("hwi_oauth_service_redirect", {service: "twitter"}) }}" uk-icon="icon: twitter; ratio:1.5"></a>
</li>{% set serviceActiveClass='' %}
<li>{% if user.yahooid is not null %}{% set serviceActiveClass = 'uk-icon-yahoo' %}{% endif %}
<a class="{{ serviceActiveClass }} uk-align-left uk-text-center uk-login uk-login-yahoo" href="{{ url("hwi_oauth_service_redirect", {service: "yahoo"}) }}" uk-icon="icon: yahoo; ratio:1.5"></a>
</li>{% set serviceActiveClass='' %}
<li>{% if user.amazonid is not null %}{% set serviceActiveClass = 'uk-icon-amazon' %}{% endif %}
<a class="{{ serviceActiveClass }} uk-align-left uk-login uk-login-amazon" href="{{ url("hwi_oauth_service_redirect", {service: "amazon"}) }}" uk-icon="icon: amazon; ratio:1.5"></a>
</li>{% set serviceActiveClass='' %}
</ul>
</div>
<div class="uk-margin-medium uk-width-1-1 uk-text-center">{{ 'profile.member_since'|trans({'%date%':user.created|date('l F jS, Y (h:i a)')}) }}</div>

View File

@ -0,0 +1,11 @@
{% extends "base.html.twig" %}
{% trans_default_domain 'FOSUserBundle' %}
{% block body %}
<p class="uk-text-lead uk-text-center">{{ 'registration.confirmed'|trans({'%username%': user.firstname }) }}</p>
<p class="uk-text-large uk-text-center"><a href="{{ url('sikofitt_doughnutwedding_default_index') }}" title="Home page">Continue to the home page.</a></p>
{% if targetUrl %}
<p class="uk-text-center"><a href="{{ targetUrl }}">{{ 'registration.back'|trans }}</a></p>
{% endif %}
{% endblock body %}

View File

@ -0,0 +1,5 @@
{% extends "base.html.twig" %}
{% block title %}Register{% endblock title %}
{% block body %}
{% include "@FOSUser/Registration/register_content.html.twig" %}
{% endblock body %}

View File

@ -0,0 +1,78 @@
{% trans_default_domain 'FOSUserBundle' %}
{% set show_social = false %}
{{ form_errors(form) }}
{% set ownerCount = hwi_oauth_resource_owners()|length %}
<div class="uk-margin-medium-bottom uk-child-width-1-{{ ownerCount +1 }} uk-visible@m uk-grid-small uk-grid-divider" uk-grid>
<div class="uk-text-center">
Connect with :
</div>
{% for owner in hwi_oauth_resource_owners() %}
<div class="uk-text-center uk-registration-connect">
<a href="{{ hwi_oauth_login_url(owner) }}">{{ owner | trans({}, 'HWIOAuthBundle')|capitalize }}</a>
</div>
{% endfor %}
</div>
{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register uk-form'}}) }}
<fieldset class="uk-fieldset">
<legend class="uk-legend">
Register account
</legend>
<div class="uk-margin">
<div hidden>{{ form_label(form.email) }}</div>
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.email) }}
{{ form_widget(form.email, { 'attr': {'placeholder':'Email address', 'class':'uk-input uk-form-large uk-padding-small'} }) }}
</div>
</div>
<div class="uk-margin">
<div hidden>{{ form_label(form.name, 'Name', { 'label_attr':{'class':'uk-form-label'}}) }}</div>
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.name) }}
{{ form_widget(form.name, { 'attr': {'placeholder':'Name', 'class':'uk-input uk-form-large uk-padding-small'} }) }}
</div>
</div>
<div class="uk-margin">
<div hidden>{{ form_label(form.rsvp) }}</div>
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.rsvp) }}
{{ form_widget(form.rsvp) }}
</div>
</div>
<div class="uk-margin">
<div hidden>{{ form_label(form.comment, null, { 'label_attr':{'class':'uk-form-label'}}) }}</div>
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.comment) }}
{{ form_widget(form.comment) }}
</div>
</div>
<div class="uk-margin">
<div hidden>{{ form_label(form.plainPassword.first, 'Password', { 'label_attr':{'class':'uk-form-label'}}) }}</div>
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.plainPassword) }}
{{ form_widget(form.plainPassword.first, { 'attr': {'placeholder':'Password', 'class':'uk-input uk-form-large uk-padding-small'} }) }}
</div>
</div>
<div class="uk-margin">
<div hidden>{{ form_label(form.plainPassword.second, 'Repeat ', { 'label_attr':{'class':'uk-form-label'}}) }}</div>
<div class="uk-form-controls uk-form-controls-text">
{{ form_widget(form.plainPassword.second, { 'attr': {'placeholder':'Repeat Password', 'class':'uk-input uk-form-large uk-padding-small'} }) }}
</div>
</div>
<div class="uk-margin uk-grid" uk-grid>
<div class="uk-width-1-2">
<button type="submit" value="Register" class="uk-button uk-button-primary uk-button-large">Register</button>
</div>
<div class="uk-form-controls-text uk-text-muted uk-margin-small-top uk-width-1-2">
<div class="uk-text-large uk-visible@m">Already have an account? Login <a href="{{ path('fos_user_security_login') }}">here</a>.</div>
<div class="uk-hidden@m uk-padding-small uk-padding-remove-vertical">Already have an account? Login <a href="{{ path('fos_user_security_login') }}">here</a>.</div>
</div>
</div>
</fieldset>
{{ form_end(form) }}

View File

@ -0,0 +1,8 @@
{% extends "base.html.twig" %}
{% block title %}Check Email{% endblock title %}
{% trans_default_domain 'FOSUserBundle' %}
{% block body %}
<p class="uk-width-1-1 uk-text-center uk-text-lead">
{{ 'resetting.check_email'|trans({'%tokenLifetime%': tokenLifetime})|nl2br }}
</p>
{% endblock %}

View File

@ -0,0 +1,25 @@
{% trans_default_domain 'FOSUserBundle' %}
{% block subject %}
{%- autoescape false -%}
[Doughnut Wedding] Password reset requested
{%- endautoescape -%}
{% endblock %}
{% block body_text %}
{% autoescape false %}
Hi {{ user.name }},
Someone has requested to reset the password for your account.
If this was not you please ignore this message. No further action is required.
To reset your password please visit this link in your browser :
{{ confirmationUrl }}
Thank you,
Katrina and Eric ❤
{% endautoescape %}
{% endblock %}
{% block body_html %}
{% endblock %}

View File

@ -0,0 +1,5 @@
{% extends "base.html.twig" %}
{% block title %}Reset Password{% endblock title %}
{% block body %}
{% include "@FOSUser/Resetting/request_content.html.twig" %}
{% endblock body %}

View File

@ -0,0 +1,16 @@
{% trans_default_domain 'FOSUserBundle' %}
<h1 class="uk-h2 uk-text-center">Reset your password</h1>
<form action="{{ path('fos_user_resetting_send_email') }}" method="POST" class="uk-form uk-form-horizontal">
<label class="uk-form-label uk-visible@m required" for="username">Email address</label>
<div class="uk-form-controls uk-form-controls-text">
<div class="uk-inline uk-width-1-1">
<span class="uk-form-icon uk-form-icon-flip" uk-icon="icon: mail"></span>
<input type="text" id="username" name="username" required="required" class="uk-input uk-form-large uk-margin-small-bottom" placeholder="Email address">
</div>
</div>
<div class="uk-width-1-1 uk-text-right@m">
<input type="submit" value="{{ 'resetting.request.submit'|trans }}" class="uk-button uk-button-primary uk-button-large uk-width-1-1@s uk-width-1-3@m" />
</div>
</form>

View File

@ -0,0 +1,6 @@
{% extends "base.html.twig" %}
{% block title %}Reset Password{% endblock title %}
{% block body %}
{% include "@FOSUser/Resetting/reset_content.html.twig" %}
{% endblock body %}

View File

@ -0,0 +1,19 @@
{% trans_default_domain 'FOSUserBundle' %}
<h2 class="uk-heading-line"><span>Reset your password</span></h2>
{{ form_start(form, { 'action': path('fos_user_resetting_reset', {'token': token}), 'attr': { 'class': 'uk-form uk-form-horizontal fos_user_resetting_reset' } }) }}
{{ form_label(form.plainPassword.first, 'New password', {'label_attr':{'class':'uk-form-label uk-visible@m'}}) }}
<div class="uk-form-controls uk-form-controls-text uk-margin-small-bottom">
{{ form_errors(form.plainPassword.first) }}
{{ form_widget(form.plainPassword.first, {'attr':{'class':'uk-input uk-form-large','placeholder':'New password'}}) }}
</div>
{{ form_label(form.plainPassword.second, 'Repeat password', {'label_attr':{'class':'uk-form-label uk-visible@m'}}) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.plainPassword.second) }}
{{ form_widget(form.plainPassword.second, {'attr':{'class':'uk-input uk-form-large','placeholder':'Repeat password'}}) }}
</div>
<div class="uk-margin-medium-top uk-width-1-1 uk-text-right@m">
<input type="submit" class="uk-button uk-width-1-1@s uk-width-1-2@m uk-button-large uk-button-primary" value="{{ 'resetting.reset.submit'|trans }}" />
</div>
{{ form_end(form) }}

View File

@ -0,0 +1,5 @@
{% extends "base.html.twig" %}
{% block title %}Login{% endblock title %}
{% block body %}
{{ include('@FOSUser/Security/login_content.html.twig') }}
{% endblock body %}

View File

@ -0,0 +1,43 @@
{% trans_default_domain 'FOSUserBundle' %}
{% if error %}
<div class="uk-alert uk-width-1-1">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form action="{{ path("fos_user_security_check") }}" method="post" class="uk-login-form uk-form uk-form-stacked">
{% if csrf_token %}
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
{% endif %}
<div class="uk-width-1-1 uk-text-center">
<a href="{{ path('fos_user_registration_register') }}" class="uk-text-large" title="Create an account">Create an account</a>
</div>
<div class="uk-child-width-1-1@s uk-width-1-2@m uk-align-center uk-grid-collapse uk-grid uk-grid-stack" uk-grid>
<div>
<label class="uk-form-label uk-hidden" for="username">{{ 'security.login.username'|trans }}</label>
<div class="uk-inline uk-width-1-1 uk-form-controls uk-form-controls-text">
<span class="uk-form-icon" uk-icon="icon: user"></span>
<input type="text" placeholder="Username or Email" class="uk-input uk-form-large" id="username" name="_username" value="{{ last_username }}" required="required" />
</div>
</div>
<div>
<label class="uk-form-label uk-hidden" for="password">{{ 'security.login.password'|trans }}</label>
<div class="uk-inline uk-width-1-1 uk-form-controls uk-form-controls-text">
<span class="uk-form-icon" uk-icon="icon: lock"></span>
<input class="uk-input uk-form-large" placeholder="Password" type="password" id="password" name="_password" required="required" />
</div>
</div>
<div class="uk-child-width-1-2@m uk-child-width-1-1@s uk-padding-remove-horizontal uk-padding-small uk-grid-collapse" uk-grid>
<div>
<button type="submit" class="uk-button uk-button-large uk-button-primary uk-width-1-1@s uk-align-left@m" id="_submit" name="_submit" value="{{ 'security.login.submit'|trans }}">{{ 'security.login.submit'|trans }}</button>
</div>
<div class="uk-text-right uk-margin-small-top uk-form-controls">
<label for="remember_me">{{ 'security.login.remember_me'|trans }}</label>
<input type="checkbox" class="uk-checkbox uk-margin-medium-left" id="remember_me" name="_remember_me" value="on" />
</div>
</div>
<div class="uk-width-1-1 uk-text-center">
<p>Forgot your password? <a href="{{ path('fos_user_resetting_request') }}">Click here</a></p>
</div>
</div>
</form>

View File

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<div>
{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
{{ 'layout.logged_in_as'|trans({'%username%': app.user.username}, 'FOSUserBundle') }} |
<a href="{{ path('fos_user_security_logout') }}">
{{ 'layout.logout'|trans({}, 'FOSUserBundle') }}
</a>
{% else %}
<a href="{{ path('fos_user_security_login') }}">{{ 'layout.login'|trans({}, 'FOSUserBundle') }}</a>
{% endif %}
</div>
{% if app.request.hasPreviousSession %}
{% for type, messages in app.session.flashbag.all() %}
{% for message in messages %}
<div class="flash-{{ type }}">
{{ message }}
</div>
{% endfor %}
{% endfor %}
{% endif %}
<div>
{% block fos_user_content %}
{% endblock fos_user_content %}
</div>
</body>
</html>

View File

@ -0,0 +1,27 @@
{% extends 'base.html.twig' %}
{% block title %}Register with {{ service }}{% endblock title %}
{% block body %}
<h3>{{ 'header.connecting' | trans({}, 'HWIOAuthBundle')}}</h3>
<div class="uk-width-1-1">
<p>{{ 'connect.confirm.text' | trans({'%service%': service | trans({}, 'HWIOAuthBundle'), '%name%': userInformation.email}, 'HWIOAuthBundle') }}</p>
<p>
{{ form_start(form, {'action': path('hwi_oauth_connect_service', {'service': service, 'key': key}), 'attr': {'class': 'fos_user_registration_register'}}) }}
{{ form_widget(form) }}
<div class="uk-grid uk-child-width-1-2@m uk-child-width-1-1@s uk-grid-margin-medium" uk-grid>
<div>
<button type="submit" class="uk-width-1-1 uk-button uk-button-large uk-button-primary">{{ 'connect.confirm.submit' | trans({}, 'HWIOAuthBundle') }}</button>
</div>
<div>
<a href="{{ path('fos_user_profile_show') }}" class="uk-width-1-1 uk-button uk-button-large uk-button-danger">{{ 'connect.confirm.cancel' | trans({}, 'HWIOAuthBundle') }}</a>
</div>
</div>
{{ form_end(form) }}
</p>
<div class="span6">
{% if userInformation.profilePicture is defined and userInformation.profilePicture is not empty %}
<img src="{{ userInformation.profilePicture }}" />
{% endif %}
</div>
</div>
{% endblock body %}

View File

@ -0,0 +1,9 @@
{% extends 'base.html.twig' %}
{% block title %}Connected account with {{ userInformation.resourceOwner.name }}{% endblock title %}
{% block body %}
<p class="uk-text-center uk-text-lead">Connected account with {{ userInformation.resourceOwner.name }}</p>
<p class="uk-text-center">
<a href="{{ path('fos_user_profile_show') }}" title="Go to profile">Go to your profile</a>
</p>
{% endblock body %}

View File

@ -0,0 +1,17 @@
{% extends 'base.html.twig' %}
{% block title %}Connect with your social media accounts{% endblock title %}
{% block body %}
{% if error is defined and error %}
<div class="uk-alert uk-alert-danger" data-uk-alert>
<a href="#" class="uk-alert-close uk-close"></a>
<p>{{ error }}</p>
</div>
{% endif %}
<div class="uk-text-center uk-child-width-1-1@s uk-child-width-1-5@m" uk-grid>
{% for owner in hwi_oauth_resource_owners() %}
<div class="uk-text-center">
<a href="{{ hwi_oauth_login_url(owner) }}">{{ owner | trans({}, 'HWIOAuthBundle') }}</a>
</div>
{% endfor %}
</div>
{% endblock body %}

View File

@ -0,0 +1,82 @@
{% extends 'base.html.twig' %}
{% block title %}Register with {{ userInformation.resourceOwner.name|capitalize }}{% endblock title %}
{% block body %}
<div class="uk-width-1-1">
{% if userInformation.response.name is defined %}
{% set name = userInformation.response.name %}
{% elseif userInformation.response.data.username is defined %}
{% set name = userInformation.response.data.username %}
{% elseif userInformation.resourceOwner.name == 'yahoo' %}
{% set name = userInformation.nickname %}
{% else %}
{% set name = userInformation.email %}
{% endif %}
<div class="uk-card uk-card-default uk-margin-small-bottom uk-width-1-1">
<div class="uk-card-header">
<div class="uk-grid-small uk-flex-middle" uk-grid>
<div class="uk-width-auto">
{% if userInformation.profilePicture is not empty %}
<img class="" width="40" height="40" src="{{ userInformation.profilePicture }}">
{% endif %}
</div>
<div class="uk-width-expand">
<p class="uk-text-large uk-card-title uk-margin-remove-bottom">Register with {{ userInformation.resourceOwner.name|capitalize }} account?</p>
</div>
</div>
</div>
<div class="uk-card-footer">
<p class="uk-margin-remove-top">
{{ 'header.register' | trans({'%name%': name }, 'HWIOAuthBundle') }}?
</p>
</div>
</div>
{{ form_start(form, {'action': path('hwi_oauth_connect_registration', {'key': key}), 'attr': {'class': 'hwi_oauth_registration_register uk-form uk-form-horizontal'}}) }}
{{ form_label(form.name, 'Name', {'label_attr':{'class':'uk-form-label uk-visible@m'}}) }}
<div class="uk-form-controls uk-form-controls-text uk-margin-small-bottom">
{{ form_errors(form.name) }}
{{ form_widget(form.name, {'value': name,'attr':{'class':'uk-input uk-form-large', 'placeholder':'Your name'}}) }}
</div>
{{ form_label(form.email, 'Email address', {'label_attr':{'class':'uk-form-label uk-visible@m'}}) }}
<div class="uk-form-controls uk-form-controls-text uk-margin-small-bottom">
{{ form_errors(form.email) }}
{{ form_widget(form.email, {'attr':{'class':'uk-input uk-form-large', 'placeholder':'Email address'}}) }}
</div>
{{ form_label(form.plainPassword.first, 'Password', {'label_attr':{'class':'uk-form-label uk-visible@m'}}) }}
<div class="uk-form-controls uk-form-controls-text uk-margin-small-bottom">
{{ form_errors(form.plainPassword.first) }}
{{ form_widget(form.plainPassword.first, {'attr':{'class':'uk-input uk-form-large', 'placeholder':'Create password'}}) }}
</div>
{{ form_label(form.plainPassword.second, 'Repeat password', {'label_attr':{'class':'uk-form-label uk-visible@m'}}) }}
<div class="uk-form-controls uk-form-controls-text uk-margin-small-bottom">
{{ form_errors(form.plainPassword.second) }}
{{ form_widget(form.plainPassword.second, {'attr':{'class':'uk-input uk-form-large', 'placeholder':'Repeat password'}}) }}
</div>
{{ form_label(form.rsvp, 'Number of guests? (including yourself)', {'label_attr':{'class':'uk-form-label uk-visible@m'}}) }}
<div class="uk-form-controls uk-form-controls-text uk-margin-small-bottom">
{{ form_errors(form.rsvp) }}
{{ form_widget(form.rsvp, {'attr':{'placeholder':'Number of guests including yourself.'}}) }}
</div>
{{ form_label(form.comment) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.comment) }}
{{ form_widget(form.comment) }}
</div>
<div class="uk-child-width-1-2@m uk-child-width-1-1@s uk-grid uk-grid-divider uk-margin-medium-top" uk-grid>
<div>
<input type="submit" class="uk-width-1-1 uk-button-primary uk-button uk-button-large"
value="{{ 'connect.registration.submit'|trans({}, 'HWIOAuthBundle') }}"/>
</div>
<div>
<a href="{{ path('hwi_oauth_connect') }}"
class="uk-width-1-1 uk-button uk-button-large uk-button-danger">{{ 'connect.registration.cancel' | trans({}, 'HWIOAuthBundle') }}</a>
</div>
</div>
{{ form_end(form) }}
</div>
{% endblock body %}

View File

@ -0,0 +1,8 @@
{% extends 'base.html.twig' %}
{% block title %}Successfully Registered with {{ userInformation.resourceOwner.name }}.{% endblock title %}
{% block body %}
<p class="uk-text-lead uk-text-center">{{ 'header.registration_success' | trans({'%username%': app.user.username}, 'HWIOAuthBundle') }}</p>
<p class="uk-text-center">
<a href="{{ path('fos_user_profile_show') }}" title="Go to profile">Go to your profile</a>
</p>
{% endblock body %}

View File

@ -0,0 +1,21 @@
{% extends 'base.html.twig' %}
{% block title %}Error {{ status_code }} {{ status_text }}{% endblock title %}
{% block body %}
<p class="uk-margin-remove-top uk-text-center uk-404 uk-doughnut">
{{ status_code|replace({0:'<span class="uk-spin uk-background-cover uk-inline"></span>'})|raw }}
</p>
<div class="uk-width-1-1">
<hr class="uk-divider-icon" />
<p class="uk-text-center uk-text-lead">{{ status_text }}</p>
<p class="uk-text-center uk-text-large">
Sorry about that. I tried to get the page <span class="uk-text-bold">{{ app.request.requestUri }}</span> but it told me <span class="uk-text-bold">{{ status_text }}</span>.
</p>
<p class="uk-text-center uk-text-large">
I don't know what this means because it's not a 1 or a 0, but I sent an email with the error details to my owner and I'm sure they'll get right on it.
</p>
<p class="uk-text-center uk-text-large">The best I can do right now is redirect you to the <a href="{{ path('sikofitt_doughnutwedding_default_index') }}" title="Home page">home</a> page.</p>
</div>
{% endblock body %}

View File

@ -0,0 +1,16 @@
{% extends 'base.html.twig' %}
{% block title %}Error {{ status_code }} {{ status_text }}{% endblock title %}
{% block body %}
<p class="uk-margin-remove-top uk-text-center uk-404 uk-doughnut">
4<span class="uk-spin uk-background-cover uk-inline"></span>3
</p>
<div class="uk-width-1-1">
<hr class="uk-divider-icon" />
<p class="uk-text-center uk-text-lead">
So it turns out I can't give you access to this page. Sorry about that.
</p>
<p class="uk-text-center uk-text-large">The best I can do is redirect you to the <a href="{{ path('sikofitt_doughnutwedding_default_index') }}" title="Home page">home</a> page.</p>
</div>
{% endblock body %}

View File

@ -0,0 +1,14 @@
{% extends 'base.html.twig' %}
{% block title %}Error {{ status_code }} {{ status_text }}{% endblock title %}
{% block body %}
<p class="uk-margin-remove-top uk-text-center uk-404 uk-doughnut">
4<span class="uk-spin uk-background-cover uk-inline"></span>4
</p>
<div class="uk-width-1-1">
<hr class="uk-divider-icon" />
<p class="uk-text-center uk-text-lead">I wish the page <span class="uk-text-bold">'{{ app.request.requestUri }}'</span> existed, I really do. Unfortunately it does not.</p>
<p class="uk-text-center uk-text-large">The best I can do is redirect you to the <a href="{{ path('sikofitt_doughnutwedding_default_index') }}" title="Home page">home</a> page.</p>
</div>
{% endblock body %}

View File

@ -0,0 +1,31 @@
{% extends 'base.html.twig' %}
{% block title %}Error {{ status_code }} {{ status_text }}{% endblock title %}
{% block body %}
<h2 class="uk-text-center uk-text-lead uk-text-danger uk-margin-remove-top">
What did you do!! <small>Just kidding ..</small>
</h2>
<p class="uk-margin-remove-top uk-text-center uk-404 uk-doughnut">
5<span class="uk-spin uk-background-cover uk-inline"></span><span class="uk-spin uk-background-cover uk-inline"></span>
</p>
<p class="uk-margin-remove-top uk-text-center uk-404 uk-doughnut">
</p>
<hr class="uk-divider-icon" />
<blockquote cite="#">
<p class="uk-margin-small-bottom uk-text-center">
Nothing is more intolerable than to have to admit to yourself your own errors.
</p>
<footer class="uk-text-center">Ludwig van Beethoven</footer>
</blockquote>
<p class="uk-text-center uk-text-lead">
A message has been sent with the details of the error.<br />
We will fix it as soon as possible.
</p>
<p class="uk-text-center uk-text-large">
Sorry for any inconvenience caused.
</p>
<p class="uk-text-center">
<a href="{{ path('sikofitt_doughnutwedding_default_index') }}" class="uk-width-1-1@s uk-width-1-2@s uk-button uk-button-primary" title="Home page">Go to the home page</a>
</p>
{% endblock body %}

View File

@ -0,0 +1,9 @@
profile.yes: Yep!
profile.no: Nope!
profile.name: Name
profile.email: Email address
profile.family: Immediate Family Member
profile.family_side: Family Side
profile.family_side_data: You're here for %family_side%!
profile.rsvp: Current guests including yourself.
profile.member_since: You've been a user since %date%!

View File

@ -0,0 +1 @@
profile.name: Name

View File

@ -0,0 +1 @@
profile.name: Name

View File

@ -0,0 +1,125 @@
{% if form is defined %}
{% form_theme form with [_self, 'form_errors.html.twig'] %}
{% endif %}
{% set bucket = 'https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4' %}
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<title>{% block title %}{% endblock title %}{% if app.request.requestUri != '/' %} | {% endif %}&hearts; Doughnut Wedding</title>
<meta name="viewport" id="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=10.0,initial-scale=1.0">
<!-- Android -->
<meta name="theme-color" content="#f7a59d" />
<!-- Windows Phone -->
<meta name="msapplication-navbutton-color" content="#9dd3d5" />
<!-- iOS Safari -->
<meta name="apple-mobile-web-app-status-bar-style" content="#9dd3d5" />
<link rel="stylesheet" type="text/css" href="{{ asset('css/doughnutwedding.min.css') }}" />
<link href="https://fonts.googleapis.com/css?family=Raleway:200,300" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="{{ asset('css/select2.min.css') }}" />
<link rel="shortcut icon" type="image/png" href="{{ bucket }}/assets/favicon.png" />
<link rel="apple-touch-icon-precomposed" href="{{ bucket }}/assets/favicon.png" />
{% block stylesheets %}{% endblock %}
<script src="{{ asset('js/vendor.min.js') }}" type="text/javascript"></script>
<script src="{{ asset('js/doughnutwedding.min.js') }}" type="text/javascript"></script>
{% block javascripts %}{% endblock %}
</head>
<body>
{% if app.request.requestUri == path('sikofitt_doughnutwedding_default_index') %}
<div class="uk-preload">
<div class="our-story"></div>
<div class="photo-gallery"></div>
</div>
{% endif %}
{% block debug %}
{% endblock %}
<div class="uk-offcanvas-content">
<div class="uk-login-container uk-container uk-container-expand uk-visible@m uk-position-top-right">
<nav class="uk-navbar uk-navbar-container uk-navbar-transparent" uk-navbar>
<div class="uk-navbar-right uk-responsive-width">
<ul class="uk-navbar-nav">
{% if is_granted('IS_AUTHENTICATED_FULLY') %}
<li><a href="{{ path('fos_user_profile_show') }}">{{ app.user.name }}</a></li>
<div class="uk-navbar-item">|</div>
<li><a class="" href="{{ path('sikofitt_doughnutwedding_gallery_upload') }}" title="Upload a wedding photo">Upload a photo</a></li>
<div class="uk-navbar-item">|</div>
<li><a class="" href="{{ path('fos_user_security_logout') }}" title="Logout">Logout</a></li>
{% else %}
<li><a class="" href="{{ path('fos_user_security_login') }}" title="Login">Login</a></li>
{% endif %}
</ul>
</div>
</nav>
</div>
<div class="uk-container uk-container-expand uk-hidden@m">
<nav class="uk-navbar uk-margin-small-top">
<div class="uk-navbar-left uk-width-medium">
<a class="{% if app.request.requestUri == path('sikofitt_doughnutwedding_default_index') %}uk-animation-slide-left{% endif %}" href="{{ path('sikofitt_doughnutwedding_default_index') }}"><img src="{{ bucket }}/assets/logo.png" /></a>
</div>
<div class="uk-navbar-right">
<a uk-navbar-toggle-icon="" href="#offcanvas" uk-toggle="" class="uk-navbar-toggle uk-hidden@m uk-navbar-toggle-icon uk-icon"></a>
</div>
</nav>
</div>
<div class="uk-container-small uk-container uk-margin-medium-top uk-margin-medium-bottom">
<div class="uk-visible@m uk-responsive-width uk-width-3-4 uk-align-center">
<div class="uk-logo {% if app.request.requestUri == '/' %}uk-animation-scale-up{% endif %} uk-transform-origin-bottom-center">
{% if app.request.requestUri == '/' %}
<h2 class="uk-text-center">ERIC + KATRINA'S</h2>
{% endif %}
<a href="{{ path('sikofitt_doughnutwedding_default_index') }}"><img class="uk-logo" src="{{ bucket }}/assets/logo.png" /></a>
{% if app.request.requestUri == '/' %}
<h3 class="uk-margin-small-top uk-text-center">MAY 12TH, 2017</h3>
{% endif %}
</div>
</div>{% set currentUrl = app.request.requestUri %}
{% if currentUrl != path('sikofitt_doughnutwedding_default_index') %}
<div class="uk-navigation-container uk-container uk-container-expand uk-visible@m">
<nav class="uk-navbar uk-navbar-container uk-navbar-transparent" uk-navbar>
<div class="uk-navbar-center uk-width-expand uk-margin-medium-bottom">
<ul class="uk-navbar-nav uk-doughnut-main-nav uk-child-width-1-5 uk-width-1-1">
<li class="{% if currentUrl == path('sikofitt_doughnutwedding_default_ourstory') %}uk-active{% endif %}">
<a href="{{ path('sikofitt_doughnutwedding_default_ourstory') }}" title="Our Story">Our Story</a>
</li>
<li class="{% if currentUrl == path('fos_user_profile_edit') %}uk-active{% endif %}">
<a href="{{ path('fos_user_profile_edit') }}" title="RSVP">RSVP</a>
</li>
<li class="{% if currentUrl == path('sikofitt_doughnutwedding_gallery_index') %}uk-active{% endif %}">
<a href="{{ path('sikofitt_doughnutwedding_gallery_index') }}" title="Photos!">Photo Gallery</a>
</li>
<li class="{% if currentUrl == path('sikofitt_doughnutwedding_default_location') %}uk-active{% endif %}">
<a href="{{ path('sikofitt_doughnutwedding_default_location') }}" title="Location">Location</a>
</li>
<li class="{% if currentUrl == path('sikofitt_doughnutwedding_default_contact') %}uk-active{% endif %}">
<a href="{{ path('sikofitt_doughnutwedding_default_contact') }}" title="Get In Touch">Get In Touch</a>
</li>
</ul>
</div>
</nav>
</div>
{% endif %}
{% include 'flash_messages.html.twig' %}
{% block body %}{% endblock %}
{% include "social_login.html.twig" %}
{% block footer %}{% endblock %}
</div>
{% include 'off_canvas.html.twig' %}
</div>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-98404954-1', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>

View File

@ -0,0 +1,62 @@
{% extends 'base.html.twig' %}
{% block body %}
<div class="uk-home uk-child-width-1-3@s uk-grid-match uk-grid-small" uk-grid>
<div>
<div class="uk-animation-fade uk-background-cover uk-background-fade uk-our-story-home uk-height-large uk-card uk-card-default uk-card-body uk-flex uk-flex-center uk-flex-middle">
<a href="{{ path('sikofitt_doughnutwedding_default_ourstory') }}" class="uk-position-cover"></a>
<div class="uk-light uk-width-1-1 uk-overlay uk-margin-large-top uk-position-center">
<h3 class="uk-position-cover uk-text-center">
<a href="{{ path('sikofitt_doughnutwedding_default_ourstory') }}" class="uk-position-cover">our story</a>
</h3>
</div>
</div>
</div>
<div>
<div class="uk-background-cover uk-background-fade uk-doughnut-rsvp uk-margin-small-bottom uk-height-small uk-card uk-card-default uk-card-body uk-flex uk-flex-center uk-flex-middle">
<a href="{{ path('fos_user_profile_edit') }}" class="uk-position-cover"></a>
<div class="uk-light uk-width-1-1 uk-overlay uk-margin-small-top uk-position-center">
<h3 class="uk-position-cover uk-text-center"><a href="{{ path('fos_user_profile_edit') }}" class="uk-position-cover">RSVP</a></h3>
</div>
</div>
<div class="uk-height-medium uk-background-cover uk-background-fade uk-photo-home uk-card uk-card-default uk-card-body uk-flex uk-flex-center uk-flex-middle">
<a href="{{ path('sikofitt_doughnutwedding_gallery_index') }}" class="uk-position-cover"></a>
<div class="uk-light uk-width-1-1 uk-overlay uk-margin-small-top uk-position-center">
<h3 class="uk-position-cover uk-text-center"><a href="{{ path('sikofitt_doughnutwedding_gallery_index') }}" class="uk-position-cover">photo gallery</a></h3>
</div>
</div>
</div>
<div>
<div class="uk-height-medium uk-background-cover uk-margin-small-bottom uk-location-home uk-card uk-card-default uk-card-body uk-flex uk-flex-center uk-flex-middle">
<a href="{{ path('sikofitt_doughnutwedding_default_location') }}" class="uk-position-cover"></a>
<div class="uk-light uk-width-1-1 uk-overlay uk-position-center uk-margin-small-top">
<h3 class="uk-position-cover uk-text-center"><a href="{{ path('sikofitt_doughnutwedding_default_location') }}" class="uk-position-cover">location</a></h3>
</div>
</div>
<div class="uk-height-small uk-background-cover uk-background-fade uk-doughnut-get-in-touch-home uk-card uk-card-default uk-card-body uk-flex uk-flex-center uk-flex-middle">
<a href="{{ path('sikofitt_doughnutwedding_default_contact') }}" class="uk-position-cover"></a>
<div class="uk-light uk-width-1-1 uk-overlay uk-position-center uk-margin-small-top">
<h3 class="uk-position-cover uk-text-center"><a href="{{ path('sikofitt_doughnutwedding_default_contact') }}" class="uk-position-cover">get in touch</a></h3>
</div>
</div>
</div>
<div class="uk-width-1-2@m uk-width-1-1@s">
<p class="uk-text-lead uk-padding-remove-vertical">Want to attend but can't make it to Oregon?</p>
</div>
<div class="uk-width-1-2@m uk-width-1-1@s">
<p class="uk-text-meta">
Watch us tie the knot on Facebook or Instagram! We know many of you wont be here in person. so we'll be broadcasting the ceremony live. Join our wedding group on Facebook or follow us on Instagram and you'll be able to see the doughnut festivities as they happen!
</p>
</div>
<div class="uk-width-1-1 uk-grid-match uk-grid-small">
<div class="uk-text-center uk-width-1-2@m uk-width-1-1@s uk-margin-small-bottom"><a href="https://www.facebook.com/groups/doughnutwedding" class="uk-width-1-1 uk-button uk-button-primary" target="_blank" title="Join Facebook Group">Join Facebook Group</a></div>
<div class="uk-text-center uk-width-1-2@m uk-width-1-1@s uk-margin-small-bottom"><a href="https://instagram.com/doughnutwedding" class="uk-width-1-1 uk-button uk-button-primary" target="_blank" title="Follow on Instagram">Follow on Instagram</a></div>
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,71 @@
{% extends 'base.html.twig' %}
{% block title %}Get in touch{% endblock title %}
{% block body %}
<h2 class="uk-text-center">Get in touch</h2>
<p class="uk-margin-medium uk-text-center uk-text-lead">
We'd LOVE to hear from you!<br /> Send us your wishes, thoughts, advice, stories or questions.
</p>
{% if(form is defined) %}
{{ form_errors(form) }}
{{ form_start(form) }}
{{ form_label(form.name) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.name) }}
{{ form_widget(form.name) }}
</div>
{{ form_label(form.email) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.email) }}
{{ form_widget(form.email) }}
</div>
{{ form_label(form.subject) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.subject) }}
{{ form_widget(form.subject) }}
</div>
{{ form_label(form.comment) }}
<div class="uk-form-controls uk-form-controls-text">
{{ form_errors(form.comment) }}
{{ form_widget(form.comment) }}
</div>
<div class="" uk-grid>
<div class="uk-width-1-3@m uk-width-1-1@s">
{{ form_widget(form.submit) }}
</div>
<div class="uk-width-2-3@m uk-width-1-1@s">
<p class="uk-text-lead uk-text-center">
#doughnutwedding
</p>
<p class="uk-text-center">
Follow us on Instagram and Facebook for wedding updates!
</p>
</div>
</div>
{{ form_rest(form) }}
{{ form_end(form) }}
{% else %}
<div class="uk-width-1-1 uk-text-center">
<p class="uk-text-lead">
{{ message|first }}
</p>
{% if message|length > 1 %}
<p class="uk-text-center">{{ message|last }}</p>
{% endif %}
<p class="uk-text-lead uk-text-center">
#doughnutwedding
</p>
<p class="uk-text-center">
Follow us on Instagram and Facebook for wedding updates!
</p>
<p class="uk-text-center">
<a class="uk-button uk-button-primary uk-button-large" href="{{ path('sikofitt_doughnutwedding_default_index') }}" title="Home">
Go to the home page
</a>
</p>
</div>
{% endif %}
{% endblock %}

View File

@ -0,0 +1,15 @@
<li class="uk-margin-small-top uk-animation-fade">
<article class="uk-comment">
<header class="uk-comment-header uk-grid-medium uk-flex-middle" uk-grid>
<div class="uk-width-expand">
<h4 class="uk-comment-title uk-text-capitalize">{{ comment.user.name }} <small class="uk-text-meta" title="{{ comment.created|date('l F jS, Y') }} at {{ comment.created|date('g:ia') }}" uk-tooltip> | {{ comment.created|date('m/d/y') }} at {{ comment.created|date('g:ia') }}</small></h4>
</div>
</header>
<div class="uk-comment-body">
<p>{{ comment.comment }}</p>
</div>
</article>
</li>
<li class="uk-margin-small">
<p class="uk-heading-line uk-text-center"><span uk-icon="icon: heart;"></span></p>
</li>

View File

@ -0,0 +1,96 @@
{% extends 'base.html.twig' %}
{% block title %}Location{% endblock title %}
{% block stylesheets %}
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400" rel="stylesheet">
<link href="https://cdn.mapkit.io/v1/infobox.css" rel="stylesheet" >
<style>
#mapkit-9468 {
padding-bottom: 45%;
height: 0;
}
</style>
{% endblock %}
{% block javascripts %}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDvLrOMB0SW_fTNrIvZF3bS1xtpg6JRRHs&extension=.js"></script>
<script src="https://cdn.mapkit.io/v1/infobox.js"></script>
{% include 'map.html.twig' %}
{% endblock %}
{% block body %}
<div class="uk-grid-small uk-flex-center uk-grid-divider uk-child-width-1-1" uk-grid>
<h2 class="uk-margin-remove-top uk-text-center">Our Doughnut Wedding</h2>
<div>
<div class="uk-overflow-hidden uk-height-medium">
<img class="uk-transform-origin-top-right uk-animation-reverse uk-animation-kenburns" src="{{ bucket }}/assets/location.jpg" />
</div>
</div>
<div class="uk-margin-medium-bottom">
<h2 class="uk-text-center">Wedding</h2>
<p class="uk-text-large uk-text-center">
The ceremony will begin at 2pm at Voodoo Doughnut Too -- located where Sandy,
Davis and 15th meet. The shop is just across the street from Portland's famous
Sandy Hut. You can't miss the pink box building! There is limited parking at the venue,
but street parking is easy to find.
We'll be serving Voodoo Doughnuts and coffee immediately after the ceremony.
</p>
<h2 class="uk-text-center">Reception</h2>
<p class="uk-text-large uk-text-center">
A reception will be held at the Bar Bar patio from 4pm to 7pm. Street parking is available.
</p>
<div class="uk-width-1-1">
<h2 class="uk-text-center uk-heading-line"><span uk-icon="icon: heart;"></span></h2>
</div>
<div class="uk-child-width-1-1@s uk-child-width-1-2@m" uk-grid>
<div>
<p class="uk-h3 uk-text-center">Voodoo Doughnut Too</p>
<p class="uk-text-center">1501 NE Davis St.<br />Portland, Oregon
(<a href="https://goo.gl/maps/bk4FpLdpud92" target="_blank" title="Voodoo Too on Google Maps">Map</a>)
</p>
<p class="uk-text-center uk-align-center">
<a href="http://www.voodoodoughnut.com/doughnuts" target="_blank" title="Voodoo Doughnuts" class="uk-width-1-1@s uk-width-auto@m uk-button uk-button-primary">Check Out The Doughnuts!</a>
</p>
</div>
<div>
<p class="uk-h3 uk-text-center">Bar Bar</p>
<p class="uk-text-center">3939 N. Mississippi Ave.<br />Portland, Oregon
(<a href="https://goo.gl/maps/sBmLBeKr72q" target="_blank" title="Bar Bar on Google Maps">Map</a>)
</p>
<p class="uk-text-center uk-align-center">
<a href="http://www.mississippistudios.com/bar-bar/" target="_blank" title="Mississippi Studios - Bar Bar" class="uk-width-1-1@s uk-width-auto@m uk-button uk-button-primary">Check Out Bar Bar!</a>
</p>
</div>
</div>
</div>
<div>
<h2 class="uk-text-center">Directions</h2>
<h4 class="uk-text-center">From I-5 N</h4>
<p class="uk-text-center">
Use the right lane to take exit 300 for I-84 E/US-30 E toward Portland Airport/The Dalles
</p>
<p class="uk-text-center">
Keep right, follow signs for Central Eastside Industrial District
</p>
<p class="uk-text-center">
Continue on SE Water Ave. Take SE Stark St. and SE Sandy Blvd to NE Davis St
</p>
<h4 class="uk-text-center">From I-5 S</h4>
<p class="uk-text-center">
Continue on OR-99E N/SE Grand Ave. Drive to NE Davis St.
</p>
<p class="uk-text-center uk-text-large">
<a href="https://goo.gl/maps/bk4FpLdpud92" class="uk-width-1-1@s uk-width-1-3@m uk-button uk-button-primary" title="Google maps" target="_blank">Open in Google Maps</a>
</p>
</div>
<div class="">
<div id='mapkit-9468'></div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,39 @@
{% extends 'base.html.twig' %}
{% block body %}
<p class="uk-text-lead uk-text-center">
We are sorry, but we are in maintenance mode.
</p>
<p class="uk-text-center">
We are busy upgrading the system and will be back shortly.<br />
Thank you for your patience!
</p>
<p class="uk-margin-remove-top uk-text-center uk-404 uk-doughnut">
<span class="uk-spin uk-background-cover uk-inline"></span>
</p>
<progress id="progressbar" class="uk-progress uk-width-1-2@m uk-width-1-1@s uk-align-center" value="10" max="100"></progress>
{% endblock %}
{% block javascripts %}
<script>
jQuery(function () {
var animate = setInterval(function () {
var progress = jQuery('progress');
progress && (progress.val(progress.val() + 10) );
if (!progress || progress.val() >= progress.attr('max')) {
for(i=progress.attr('max');i>0;i--) {
progress.val(i);
}
}
}, 1000);
});
</script>
{% endblock %}

View File

@ -0,0 +1,168 @@
<script>
google.maps.event.addDomListener(window, 'load', init);
var map, markersArray = [];
function bindInfoWindow(marker, map, location) {
google.maps.event.addListener(marker, 'click', function() {
function close(location) {
location.ib.close();
location.infoWindowVisible = false;
location.ib = null;
}
if (location.infoWindowVisible === true) {
close(location);
} else {
markersArray.forEach(function(loc, index){
if (loc.ib && loc.ib !== null) {
close(loc);
}
});
var boxText = document.createElement('div');
boxText.style.cssText = 'background: #fff;';
boxText.classList.add('md-whiteframe-2dp');
function buildPieces(location, el, part, icon) {
if (location[part] === '') {
return '';
} else if (location.iw[part]) {
switch(el){
case 'photo':
if (location.photo){
return '<div class="iw-photo" style="background-image: url(' + location.photo + ');"></div>';
} else {
return '';
}
break;
case 'iw-toolbar':
return '<div class="iw-toolbar"><h3 class="md-subhead">' + location.title + '</h3></div>';
break;
case 'div':
switch(part){
case 'email':
return '<div class="iw-details"><i class="material-icons" style="color:#4285f4;"><img src="//cdn.mapkit.io/v1/icons/' + icon + '.svg"/></i><span><a href="mailto:' + location.email + '" target="_blank">' + location.email + '</a></span></div>';
break;
case 'web':
return '<div class="iw-details"><i class="material-icons" style="color:#4285f4;"><img src="//cdn.mapkit.io/v1/icons/' + icon + '.svg"/></i><span><a href="' + location.web + '" target="_blank">' + location.web_formatted + '</a></span></div>';
break;
case 'desc':
return '<label class="iw-desc" for="cb_details"><input type="checkbox" id="cb_details"/><h3 class="iw-x-details">Details</h3><i class="material-icons toggle-open-details"><img src="//cdn.mapkit.io/v1/icons/' + icon + '.svg"/></i><p class="iw-x-details">' + location.desc + '</p></label>';
break;
default:
return '<div class="iw-details"><i class="material-icons"><img src="//cdn.mapkit.io/v1/icons/' + icon + '.svg"/></i><span>' + location[part] + '</span></div>';
break;
}
break;
case 'open_hours':
var items = '';
if (location.open_hours.length > 0){
for (var i = 0; i < location.open_hours.length; ++i) {
if (i !== 0){
items += '<li><strong>' + location.open_hours[i].day + '</strong><strong>' + location.open_hours[i].hours +'</strong></li>';
}
var first = '<li><label for="cb_hours"><input type="checkbox" id="cb_hours"/><strong>' + location.open_hours[0].day + '</strong><strong>' + location.open_hours[0].hours +'</strong><i class="material-icons toggle-open-hours"><img src="//cdn.mapkit.io/v1/icons/keyboard_arrow_down.svg"/></i><ul>' + items + '</ul></label></li>';
}
return '<div class="iw-list"><i class="material-icons first-material-icons" style="color:#4285f4;"><img src="//cdn.mapkit.io/v1/icons/' + icon + '.svg"/></i><ul>' + first + '</ul></div>';
} else {
return '';
}
break;
}
} else {
return '';
}
}
boxText.innerHTML =
buildPieces(location, 'photo', 'photo', '') +
buildPieces(location, 'iw-toolbar', 'title', '') +
buildPieces(location, 'div', 'address', 'location_on') +
buildPieces(location, 'div', 'web', 'public') +
buildPieces(location, 'div', 'email', 'email') +
buildPieces(location, 'div', 'tel', 'phone') +
buildPieces(location, 'div', 'int_tel', 'phone') +
buildPieces(location, 'open_hours', 'open_hours', 'access_time') +
buildPieces(location, 'div', 'desc', 'keyboard_arrow_down');
var myOptions = {
alignBottom: true,
content: boxText,
disableAutoPan: true,
maxWidth: 0,
pixelOffset: new google.maps.Size(-140, -40),
zIndex: null,
boxStyle: {
opacity: 1,
width: '280px'
},
closeBoxMargin: '0px 0px 0px 0px',
infoBoxClearance: new google.maps.Size(1, 1),
isHidden: false,
pane: 'floatPane',
enableEventPropagation: false
};
location.ib = new InfoBox(myOptions);
location.ib.open(map, marker);
location.infoWindowVisible = true;
}
});
}
function init() {
var mapOptions = {
center: new google.maps.LatLng(45.52464731651513, -122.65028208095099),
zoom: 16,
gestureHandling: 'auto',
fullscreenControl: false,
zoomControl: true,
disableDoubleClickZoom: true,
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
},
scaleControl: true,
scrollwheel: true,
streetViewControl: true,
draggable : true,
clickableIcons: false,
mapTypeId: google.maps.MapTypeId.ROADMAP,
styles: [{"featureType":"administrative","stylers":[{"visibility":"off"}]},{"featureType":"poi","stylers":[{"visibility":"simplified"}]},{"featureType":"road","elementType":"labels","stylers":[{"visibility":"simplified"}]},{"featureType":"water","stylers":[{"visibility":"simplified"}]},{"featureType":"transit","stylers":[{"visibility":"simplified"}]},{"featureType":"landscape","stylers":[{"visibility":"simplified"}]},{"featureType":"road.highway","stylers":[{"visibility":"off"}]},{"featureType":"road.local","stylers":[{"visibility":"on"}]},{"featureType":"road.highway","elementType":"geometry","stylers":[{"visibility":"on"}]},{"featureType":"water","stylers":[{"color":"#84afa3"},{"lightness":52}]},{"stylers":[{"saturation":-17},{"gamma":0.36}]},{"featureType":"transit.line","elementType":"geometry","stylers":[{"color":"#3f518c"}]}]
}
var mapElement = document.getElementById('mapkit-9468');
var map = new google.maps.Map(mapElement, mapOptions);
var locations = [
{"title":"Voodoo Doughnut Too","address":"1501 NE Davis St, Portland, OR 97232, USA","desc":"","tel":"(503) 235-2666","int_tel":"+1 503-235-2666","email":"","web":"http://voodoodoughnuts.com","web_formatted":"voodoodoughnuts.com","open":"","time":"0742","lat":45.5244594,"lng":-122.65047520000002,"vicinity":"1501 Northeast Davis Street, Portland","open_hours":[{"day":"Monday","hours":"open24hours","$$hashKey":"object:1722"},{"day":"Tuesday","hours":"open24hours","$$hashKey":"object:1723"},{"day":"Wednesday","hours":"open24hours","$$hashKey":"object:1724"},{"day":"Thursday","hours":"open24hours","$$hashKey":"object:1725"},{"day":"Friday","hours":"open24hours","$$hashKey":"object:1726"},{"day":"Saturday","hours":"open24hours","$$hashKey":"object:1727"},{"day":"Sunday","hours":"open24hours","$$hashKey":"object:1728"}],"marker":{"fillColor":"#4CAF50","fillOpacity":1,"strokeWeight":0,"scale":1.5,"path":"M10.2,0C4.6,0,0,4.6,0,10.2c0,6.9,7.8,6.3,10.2,26.4c2.5-20.1,10.2-19.5,10.2-26.4C20.4,4.6,15.9,0,10.2,0z M10.2,13.9c-2.4,0-4.3-1.9-4.3-4.3s1.9-4.3,4.3-4.3s4.3,1.9,4.3,4.3C14.6,12,12.6,13.9,10.2,13.9z","anchor":{"x":10,"y":30},"origin":{"x":0,"y":0},"style":3},"iw":{"address":true,"desc":true,"email":true,"enable":true,"int_tel":true,"open":true,"open_hours":true,"photo":true,"tel":true,"title":true,"web":true}}
];
var layer = new google.maps.TrafficLayer();
layer.setMap(map);
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
icon: locations[i].marker,
position: new google.maps.LatLng(locations[i].lat, locations[i].lng),
map: map,
title: locations[i].title,
address: locations[i].address,
desc: locations[i].desc,
tel: locations[i].tel,
int_tel: locations[i].int_tel,
vicinity: locations[i].vicinity,
open: locations[i].open,
open_hours: locations[i].open_hours,
photo: locations[i].photo,
time: locations[i].time,
email: locations[i].email,
web: locations[i].web,
iw: locations[i].iw
});
markersArray.push(marker);
if (locations[i].iw.enable === true){
bindInfoWindow(marker, map, locations[i]);
}
}
}
</script>

View File

@ -0,0 +1,68 @@
<div id="offcanvas" uk-offcanvas="overlay: true; mode:reveal;">
<div class="uk-offcanvas-bar uk-offcanvas-bar-animation">
<button class="uk-offcanvas-close uk-align-right" type="button" uk-close></button>
<ul class="uk-nav uk-nav-primary">
<li class="uk-nav-header">Navigation</li>
<li class="uk-nav-divider"></li>
<li><a href="{{ path('sikofitt_doughnutwedding_default_index') }}"><span class="uk-margin-small-right" uk-icon="icon: home"></span> Home</a></li>
<li><a href="{{ path('sikofitt_doughnutwedding_default_ourstory') }}"><span class="uk-margin-small-right" uk-icon="icon: heart"></span> Our Story</a></li>
<li><a href="{{ path('fos_user_profile_edit') }}"><span class="uk-margin-small-right" uk-icon="icon: bolt"></span> RSVP</a></li>
<li><a href="{{ path('sikofitt_doughnutwedding_gallery_index') }}"><span class="uk-margin-small-right" uk-icon="icon: image"></span> Gallery</a></li>
{% if is_granted('IS_AUTHENTICATED_FULLY') %}
<li><a href="{{ path('sikofitt_doughnutwedding_gallery_upload') }}">
<span class="uk-margin-small-right" uk-icon="icon: cloud-upload"></span> Upload Photo</a>
</li>
{% endif %}
<li><a href="{{ path('sikofitt_doughnutwedding_default_location') }}"><span class="uk-margin-small-right" uk-icon="icon: location"></span> Location</a></li>
<li><a href="{{ path('sikofitt_doughnutwedding_default_contact') }}"><span class="uk-margin-small-right" uk-icon="icon: mail"></span> Get In Touch</a></li>
{% if not is_granted('IS_AUTHENTICATED_FULLY') %} {% set social_prefix = 'Login with' %} {% else %} {% set social_prefix = 'Link Account With' %} {% endif %}
{% if is_granted('IS_AUTHENTICATED_FULLY') %}
<li class="uk-nav-header">{{ app.user.name }}</li>
<li class="uk-nav-divider"></li>
<li><a href="{{ path('fos_user_profile_show') }}"><span class="uk-margin-small-right" uk-icon="icon: user"></span> Profile</a></li>
<li><a href="{{ path('fos_user_change_password') }}"><span class="uk-margin-small-right" uk-icon="icon: lock"></span> Change <span class="uk-display-inline-block uk-margin-medium-left">Password</span></a></li>
<li><a href="{{ path('fos_user_security_logout') }}"><span class="uk-margin-small-right" uk-icon="icon: sign-out"></span> Logout</a></li>
{% else %}
<li class="uk-nav-header">User</li>
<li class="uk-nav-divider"></li>
<li><a href="{{ path('fos_user_security_login') }}" title="Login"><span class="uk-margin-small-right" uk-icon="icon: sign-in"></span> Login</a></li>
<li><a href="{{ path('fos_user_registration_register') }}" title="Register"><span class="uk-margin-small-right" uk-icon="icon: star"></span> Register / RSVP</a></li>
{% endif %}
<li>
<div class="uk-position-fixed uk-position-bottom uk-padding-small">
<p class="uk-text-meta uk-text-center uk-margin-small-bottom">{{ social_prefix }}</p>
<ul class="uk-iconnav uk-text-center uk-child-width-1-5">
<li>
<a href="{{ path("hwi_oauth_service_redirect", {service: "facebook"}) }}">
<span class="uk-margin-small-right" uk-icon="icon: facebook"></span>
</a>
</li>
<li>
<a href="{{ path("hwi_oauth_service_redirect", {service: "google"}) }}">
<span class="uk-margin-small-right" uk-icon="icon: google"></span>
</a>
</li>
<li>
<a href="{{ path("hwi_oauth_service_redirect", {service: "twitter"}) }}">
<span class="uk-margin-small-right" uk-icon="icon: twitter"></span>
</a>
</li>
<li>
<a href="{{ path("hwi_oauth_service_redirect", {service: "yahoo"}) }}">
<span class="uk-margin-small-right" uk-icon="icon: yahoo"></span>
</a>
</li>
<li>
<a href="{{ path("hwi_oauth_service_redirect", {service: "amazon"}) }}">
<span class="uk-margin-small-right" uk-icon="icon: amazon"></span>
</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
</div>

View File

@ -0,0 +1,29 @@
{% extends 'base.html.twig' %}
{% block title %}Our Story{% endblock title %}
{% block body %}
<h2 class="uk-text-center uk-margin-remove-top" style="letter-spacing: .15rem">Our Story</h2>
<hr class="uk-margin-small-bottom" />
<div class="uk-overflow-hidden uk-margin-top-remove uk-margin-small-bottom">
<img class="uk-responsive-width" src="{{ bucket }}/assets/our-story-hero.jpg" />
</div>
<div class="uk-column-1-1@m uk-column-divider">
<hr class="uk-margin-small-bottom" />
<p>Eric and Katrina first met online in 2014. After texting back and forth for a week they finally met in
persion at a little coffee shop in Oakland on July 23, 2014. Eric was shy and Katrina was nervous, but somehow they found enough
to talk about to agree to a second date where they continued to bond over coffee, cigarettes, and zombie movies.</p>
<p>Ollie (Katrina's dog) loved Eric instantly, and Buddy and Mayu (Eric's cats) never murdered Katrina in her sleep, so they tolerated her.</p>
<h2 class="uk-heading-line uk-text-center uk-text-capitalize"><span>This was a good sign.</span></h2>
<p class="uk-column-span uk-text-lead uk-text-center"></p>
<p>In August 2016 they packed everything into a couple of crates and moved up north to Portland, Oregon. After six months of the both of them working from home,
they realized that they were still madly in love (despite seeing each other all day, every day.) So on February 6, 2017 Eric proposed to Katrina.</p>
<h2 class="uk-heading-line uk-text-center"><span><span uk-icon="icon: heart"></span></span></h2>
<p class="uk-column-span uk-text-lead uk-text-center uk-text-primary">
On May 12, 2017 they will both say "yes" and live happily ever after til death do they part.
</p>
</div>
<div class="uk-width-1-1">
<p class="uk-text-center">
<a href="{{ path('sikofitt_doughnutwedding_gallery_index') }}" class="uk-button uk-button-large uk-button-primary">Check out some photos!</a>
</p>
</div>
{% endblock %}

View File

@ -1,5 +1,5 @@
{% extends 'base.html.twig' %}
{% block body %}
{% dump(request.flash) %}
{% endblock %}

View File

@ -2,7 +2,7 @@
{% block body %}
{{ dump(app.session.get('user')) }}
{{ form_start(form) }}
<fieldset class="uk-fieldset uk-margin-large-bottom">
<legend class="uk-legend">RSVP!</legend>

View File

@ -0,0 +1,22 @@
{% if not is_granted('IS_AUTHENTICATED_FULLY') %}
<div class="uk-width-1-1 uk-padding-small uk-align-center">
<h4 class="uk-heading-line uk-text-center">
<span>
<a href="{{ url('fos_user_security_login') }}" title="Login">Login</a> <span class="uk-margin-small-left uk-margin-small-right" uk-icon="icon: social"></span> <a href="{{ url('fos_user_registration_register') }}" title="Register">Register</a>
</span>
</h4>
<ul class="uk-iconnav uk-grid uk-child-width-1-5" uk-grid>
<li>
<a class="uk-text-center uk-login uk-login-facebook" href="{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}" uk-icon="icon: facebook; ratio:1.5"></a>
</li>
<li><a class="uk-text-center uk-login uk-login-google" href="{{ url("hwi_oauth_service_redirect", {service: "google"}) }}" uk-icon="icon: google; ratio:1.5"></a></li>
<li><a class="uk-text-center uk-login uk-login-twitter" href="{{ url("hwi_oauth_service_redirect", {service: "twitter"}) }}" uk-icon="icon: twitter; ratio:1.5"></a></li>
<li><a class="uk-text-center uk-login uk-login-yahoo" href="{{ url("hwi_oauth_service_redirect", {service: "yahoo"}) }}" uk-icon="icon: yahoo; ratio:1.5"></a></li>
<li><a class="uk-text-center uk-login uk-login-amazon" href="{{ url("hwi_oauth_service_redirect", {service: "amazon"}) }}" uk-icon="icon: amazon; ratio:1.5"></a></li>
</ul>
</div>
{% endif %}

View File

@ -0,0 +1,22 @@
{% block body_text %}
{% autoescape false %}
Heyo!
{{ user.name }} has registered a new account with the email {{ user.email }} and is bringing {% if user.rsvp.guests != 0 %}{{ user.rsvp.guests - 1 }}{% else %}0{% endif %} guests with them.
{% if user.comment is not null %}
{{ user.name }} wants you to know -
{{ user.comment }}
{% endif %}
{% if resourceOwner is defined and resourceOwner is not null %}
{{ user.name }} connected with {{ resourceOwner|capitalize }}
{% endif %}
Love,
Your website ❤
{% endautoescape %}
{% endblock %}
{% block body_html %}{% endblock %}

29
app/autoload.php Normal file
View File

@ -0,0 +1,29 @@
<?php
/*
* doughnutwedding.com
* Copyright (C) 2017 http://doughnutwedding.com eric@doughnutwedding.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
use Composer\Autoload\ClassLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;
/** @var ClassLoader $loader */
$loader = require __DIR__.'/../vendor/autoload.php';
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
return $loader;

239
app/config/config.yml Normal file
View File

@ -0,0 +1,239 @@
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
- { resource: snc_redis.yml }
- { resource: easy_admin.yml }
# Put parameters here that don't need to change on each machine where the app is deployed
# http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
locale: en
google.credentials_file: '%kernel.root_dir%/config/google-storage-key.json'
google.client_id: '100826355104373784827'
google.application_name: 'doughnut-wedding'
katrina.email: katrina.a.johnson@gmail.com
eric.email: sikofitt@gmail.com
maintenance: false
framework:
cache:
app: cache.adapter.redis
system: cache.adapter.redis
default_redis_provider: "redis://redis"
#esi: ~
translator: { fallbacks: ['%locale%'] }
secret: '%secret%'
router:
resource: '%kernel.root_dir%/config/routing.yml'
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
default_locale: '%locale%'
trusted_hosts: ~
trusted_proxies: ~
session:
# http://symfony.com/doc/current/reference/configuration/framework.html#handler-id
handler_id: snc_redis.session.handler
#handler_id: session.handler.native_file
#save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
fragments: ~
http_method_override: true
assets: ~
php_errors:
log: true
# Twig Configuration
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
form_themes:
# other form themes
- 'VichUploaderBundle:Form:fields.html.twig'
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/../var/data/data.sqlite"
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
#path: '%database_path%'
orm:
query_cache_driver:
type: predis
host: ~
port: ~
instance_class: ~
class: ~
id: ~
namespace: doughnut_query_cache
cache_provider: 'predis'
metadata_cache_driver:
type: predis
host: ~
port: ~
instance_class: ~
class: ~
id: ~
namespace: doughnut_metadata_cache
cache_provider: 'predis'
result_cache_driver:
type: predis
host: ~
port: ~
instance_class: ~
class: ~
id: ~
namespace: doughnut_result_cache
cache_provider: 'predis'
second_level_cache:
region_cache_driver:
type: predis
host: ~
port: ~
instance_class: ~
class: ~
id: ~
namespace: doughnut_region_cache
cache_provider: 'predis'
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
doctrine_cache:
providers:
predis:
type: predis
namespace: doughnut_doctrine
# Swiftmailer Configuration
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
port: '%mailer_port%'
encryption: ssl
auth_mode: login
username: '%mailer_user%'
password: '%mailer_password%'
spool: { type: memory }
sender_address: 'noreply@doughnutwedding.com'
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
facebook:
type: facebook
client_id: '1821112348143190'
client_secret: '155bc602a7e30e4227625c29c8b124c6'
scope: 'email,public_profile'
google:
type: google
client_id: '1076229066413-3rf8q0qjurn4h190dagi98tp0a10obe6.apps.googleusercontent.com'
client_secret: 'zQN32g_7lUz4dZ7E9kgY6nHe'
scope: "email profile"
options:
access_type: offline
amazon:
type: amazon
client_id: 'amzn1.application-oa2-client.15f87b8a4f23465b9022ba0a3f55610d'
client_secret: '84d6f402c53386ae0f196062945f217dcc56e7b7122cffb76c95b6a5775d22e0'
twitter:
type: twitter
client_id: 'YmXGQN2Az0eTlkwJrnaO2wR9r'
client_secret: 'c73cBI7uj562BU4bBSHfNDcKHgM5aVo8sousjgUdDNBZFXxFHI'
yahoo:
type: yahoo
client_id: 'dj0yJmk9SndXWm05Tk5yME9MJmQ9WVdrOVRYTkVUVWRHTjJjbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD1lMw--'
client_secret: '4f837f738d6c4df38eaedc7babe4d8f405f8cc0f'
scope: 'sdps-r'
fosub:
# try 30 times to check if a username is available (foo, foo1, foo2 etc)
username_iterations: 30
# mapping between resource owners (see below) and properties
properties:
google: googleId
facebook: facebookId
amazon: amazonId
twitter: twitterId
yahoo: yahooId
# if you want to use 'connect' and do not use the FOSUB integration, configure these separately
connect:
confirmation: false
failed_auth_path: fos_user_security_login
fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: secured_area
user_class: Sikofitt\DoughnutWeddingBundle\Entity\User
from_email:
address: 'noreply@doughnutwedding.com'
sender_name: "[Doughnut Wedding] No Reply"
profile:
form:
type: Sikofitt\DoughnutWeddingBundle\Form\ProfileEditType
registration:
form:
type: Sikofitt\DoughnutWeddingBundle\Form\RegistrationType
change_password:
form:
type: Sikofitt\DoughnutWeddingBundle\Form\ChangePasswordFormType
knp_gaufrette:
stream_wrapper: ~
adapters:
assets:
google_cloud_storage:
service_id: 'doughnutwedding.google_cloud_storage.service'
bucket_name: 'zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4'
options:
acl: 'public'
directory: 'assets'
gallery:
google_cloud_storage:
service_id: 'doughnutwedding.google_cloud_storage.service'
bucket_name: 'zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4'
options:
acl: 'public'
directory: 'gallery'
filesystems:
cloud:
adapter: gallery
alias: google_cloud
assets:
adapter: assets
alias: cloud_assets
vich_uploader:
db_driver: orm
mappings:
gallery_image:
namer:
service: vich_uploader.namer_hash
options:
length: 32
algorithm: 'sha3-512'
delete_on_update: true
delete_on_remove: true
sikofitt_doughnut_wedding:
max_rsvps: ~
white_october_pagerfanta:
exceptions_strategy:
out_of_range_page: ~
not_valid_current_page: ~

56
app/config/config_dev.yml Normal file
View File

@ -0,0 +1,56 @@
imports:
- { resource: config.yml }
framework:
router:
resource: '%kernel.root_dir%/config/routing_dev.yml'
strict_requirements: true
profiler: { only_exceptions: false }
web_profiler:
toolbar: true
intercept_redirects: false
monolog:
handlers:
main:
type: stream
path: '%kernel.logs_dir%/%kernel.environment%.log'
level: debug
channels: ['!event']
formatter: colored_line_formatter
console:
type: console
channels: ['!event', '!doctrine']
redis_logger:
type: service
id: snc_redis.monolog.handler
level: debug
# uncomment to get logging in your browser
# you may have to allow bigger header sizes in your Web server configuration
#firephp:
# type: firephp
# level: info
#chromephp:
# type: chromephp
# level: info
vich_uploader:
storage: gaufrette
mappings:
gallery_image:
upload_destination: cloud
uri_prefix: /
#storage: file_system
#mappings:
# gallery_image:
# uri_prefix: /images/gallery
# upload_destination: '%kernel.root_dir%/../web/images/gallery'
swiftmailer:
transport: null
# disable_delivery: true
# transport: smtp
# delivery_addresses: ['info@doughnutwedding.com']
# sender_address: 'noreply@doughnutwedding.com'

View File

@ -0,0 +1,45 @@
imports:
- { resource: config.yml }
monolog:
handlers:
main:
type: fingers_crossed
action_level: notice
handler: redis
console:
type: console
redis:
type: service
id: snc_redis.monolog.handler
level: notice
mail:
type: fingers_crossed
# 500 errors are logged at the critical level
action_level: error
excluded_404s:
- ^/
# to also log 400 level errors (but not 404's):
# action_level: error
#excluded_404s:
# - ^/
handler: deduplicated
deduplicated:
type: deduplication
handler: swift
swift:
type: swift_mailer
from_email: 'action@doughnutwedding.com'
to_email: ['sikofitt@gmail.com','katrina.a.johnson@gmail.com']
# or list of recipients
# to_email: ['dev1@example.com', 'dev2@example.com', ...]
subject: 'An Error Occurred! %%message%%'
level: error
formatter: monolog.formatter.html
content_type: text/html
vich_uploader:
storage: gaufrette
mappings:
gallery_image:
upload_destination: cloud
uri_prefix: /

View File

@ -0,0 +1,16 @@
imports:
- { resource: config_dev.yml }
framework:
test: ~
session:
storage_id: session.storage.mock_file
profiler:
collect: false
web_profiler:
toolbar: false
intercept_redirects: false
swiftmailer:
disable_delivery: true

View File

@ -1,49 +0,0 @@
{
"report-only": false,
"report-uri": "/csp_violation_reporting_endpoint",
"base-uri": [],
"default-src": {
"self": true
},
"child-src": {
"allow": [
"https://www.youtube.com",
"https://www.youtube-nocookie.com"
],
"self": false
},
"connect-src": {
"self": true
},
"font-src": {
"self": true,
"data": true
},
"form-action": {
"allow": [
"http://localhost.doughnutwedding.com"
],
"self": true
},
"frame-ancestors": [],
"img-src": {
"self": true,
"data": true
},
"media-src": [],
"object-src": [],
"plugin-types": [],
"script-src": {
"allow": [
"https://www.google-analytics.com"
],
"self": true,
"unsafe-inline": true,
"unsafe-eval": true
},
"style-src": {
"self": true,
"unsafe-inline":true
},
"upgrade-insecure-requests": false
}

View File

@ -1,20 +0,0 @@
#connections:
# default:
# connection:
# driver: pdo_mysql
# dbname: doughnut
# password: doughnut
# user: doughnut
# host: mysql
# annotation_autoloaders:
# - 'class_exists'
# metadata_mapping:
# - type: 'Jgut\Slim\Doctrine\ManagerBuilder::METADATA_MAPPING_ANNOTATION'
# path: ['__DIR__ . /../src/Sikofitt/App/Entity']
dbs.options:
default:
driver: pdo_mysql
host: mysql
dbname: doughnut
user: doughnut
password: doughnut

80
app/config/easy_admin.yml Normal file
View File

@ -0,0 +1,80 @@
easy_admin:
site_name: Doughnut Wedding
design:
form_theme: 'horizontal'
entities:
ImageComments:
class: Sikofitt\DoughnutWeddingBundle\Entity\ImageComment
disabled_actions: ['new']
User:
class: Sikofitt\DoughnutWeddingBundle\Entity\User
list:
actions: ['show','edit','delete']
fields: ['name','username','email','enabled','lastLogin','rsvp']
edit:
fields:
- name
- username
- email
- { property: rsvp, type_options: { disabled: true } }
- comment
- images
- enabled
- lastLogin
- confirmationToken
- passwordRequestedAt
- roles
- created
- updated
- facebookId
- googleId
- amazonId
- instagramId
- twitterId
- yahooId
show:
fields:
- name
- username
- email
- rsvp
- comment
- images
- enabled
- lastLogin
- passwordRequestedAt
- roles
- created
- updated
- facebookId
- googleId
- amazonId
- instagramId
- twitterId
- yahooId
Rsvp:
class: Sikofitt\DoughnutWeddingBundle\Entity\Rsvp
Contact:
class: Sikofitt\DoughnutWeddingBundle\Entity\Contact
list:
actions: ['show','edit','delete']
fields: ['userid','email','name','comment','createdAt']
Images:
class: Sikofitt\DoughnutWeddingBundle\Entity\Image
image_base_path: 'https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/gallery/'
list:
actions: ['show','delete']
fields:
- { property: 'imageName', label: 'Image', type: 'image', base_path: 'https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/gallery/' }
- description
- category
- tags
- user
form:
fields:
- { property: 'imageFile', type: 'vich_image', base_path: 'https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/gallery/' }
- description
- { property: tags, type: 'collection'}
- category
- user

View File

@ -0,0 +1,12 @@
{
"type": "service_account",
"project_id": "doughnut-wedding",
"private_key_id": "097ae8333fdb2ba046efe522e25cffda1163547a",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCpiZ7fjrZIBxIJ\nprUQdKA7ODlF698aOkJNBPr2tgV2X1Xb2SYObs3p3/nhR+4SijXU4yrQSfOdUBPS\nlyM+vbT1uEniRMNUqQWcJyZN4sT0MmG85wGh3zCGa6FbakKGC6nhH1DuT6o7T1v7\nxqR/Byp7/6rAUxy0Yhm2CmlWmrt0Oe1wx42N4m1t9865SrNzUNloRp0a9jUQWpew\nssoG3pYlbzv+KHE4BSTGJEu2ErpA5kOp+loIOlmveyb8ac+tHUHqozkzMQ5+Esyf\nnNCpzurq6hL/9piVhkd1Hyr947Vb3kz6dpDoeBZqCzXK/1n3d/VJjYpBvCVqq5xr\n34U7Bfa9AgMBAAECggEAdIY2QAlil5bkeuWtxSWji5BVLQ21Rd2M/ErUAwWQM4/K\n/1P8qCbYOErNAF3j77I21Z9dKdPqMNF9Dlz6yICzA8AqZ+5DIskZJf5ygU2/eOe3\n7ZIIuS0huQH44U/jcSZLGIPhqCnxItqkqiQZo4VVWeybe5ykOgbDDS+SvweSl4qq\ngILLaMsEzDSJZhwLnmAeRnd1REq1afrQtIF/aNo5vZj0WvcLIEkwkAHqcZAUy/ox\n5huswc3SiUA4ruJkEKTtHwUDqlQhQVGGrHV0tuFHCYfxUMu1/Zp5G6e4jUeAq7t6\nKCx4tFi6U1ETiZ8w18mhO/uWkDAa0A9qquo7v+xagQKBgQDV/1Zrzv1P09XztFaV\nmhueNLJ570Fy2MNa/gHIjWJFjJlknpfCXn4q0jFBfiKs2iReRTEni33mPtzdcONF\njps/zeGch+6Exp7I+zTji2JMtXs8CiAJfR388QLzDETg6jwSL4hLWadizlJzsVA8\n4PliLv7P1kJMhMswKrUazaaetQKBgQDK0FLOVuYhLPWP2RHu0nr5MSLneXRG+dKx\nNc4Dk00ms1O6NPdhWwmHcDfocJMmi0usDvs9XjxwCQHB4KrITODRpSq3M9fI3I+W\n/QUNZfRqf0bQFzRuiKOh5BAZub3Zil3h7htkcqP4TuLvXqoHs5z2mS1wFUdcukLv\nAN7nOI/06QKBgGY9Ur25K98Kt0py23coJI/GX4rQGzXSiCsd9h4qJkxSKysediT/\n3kl5GN1QdSKeKgf8CMr64xCw8fa+K2cdBeFK7MJLU1KOTmh5VEBuZG1/uzvpHntK\nEpy5TQ5vyyyl3ENYAEb3s3gKWOw7R7l+Rsd46nbDx/Mk8qq1jMccf8GNAoGAXhe6\nYxpz1+5o2tzlcfxaqyO9wtBZPtiGhEqnEoeTYqIN9TS/lH5M9HX+qisYSeiUKfYl\nX3pJ5dx34T/fW+A26WyMXcSClyCkyXMHlgi4FXSJIN+zJpjj+aa6RYUj7DpChiAW\nu0pogjnvFQjBL6OH7exw5TAqFH4hsYqg33shZokCgYBvYMEUN+ZtNlVkgMd6lPoG\noVxq/JwJZ8d48yQ8XP3N/8qmPiuMtD9JJi6ZV4S/qvlMt63KkmtRAACQFQyJSfYj\n9U4H3sJ13vzW2tuZ87d58fACnzgElpwxifKz9X/h9+9rrD8UHvdmzSHISh2E3I3T\nsOO36Is9YoCwwjNsN9BacA==\n-----END PRIVATE KEY-----\n",
"client_email": "doughnut-wedding-images@doughnut-wedding.iam.gserviceaccount.com",
"client_id": "108682906131804711525",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/doughnut-wedding-images%40doughnut-wedding.iam.gserviceaccount.com"
}

View File

@ -0,0 +1,20 @@
# This file is a "template" of what your parameters.yml file should look like
# Set parameters here that may be different on each deployment target of the app, e.g. development, staging, production.
# http://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
parameters:
database_host: 127.0.0.1
database_port: ~
database_name: symfony
database_user: root
database_password: ~
# You should uncomment this if you want to use pdo_sqlite
#database_path: "%kernel.root_dir%/data.db3"
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: ~
mailer_password: ~
mailer_port: ~
# A secret key that's used to generate certain security-related tokens
secret: ThisTokenIsNotSoSecretChangeIt

65
app/config/routing.yml Normal file
View File

@ -0,0 +1,65 @@
hwi_oauth_redirect:
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
prefix: /connect
hwi_oauth_connect:
resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
prefix: /connect
hwi_oauth_login:
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
prefix: /connect
facebook_login:
path: /login/callback/facebook
google_login:
path: /login/callback/google
twitter_login:
path: /login/callback/twitter
amazon_login:
path: /login/callback/amazon
yahoo_login:
path: /login/callback/yahoo
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /user/profile
fos_user_register:
resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
prefix: /register
fos_user_resetting:
resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
prefix: /resetting
fos_user_change_password:
resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
prefix: /user/profile
easy_admin_bundle:
resource: "@EasyAdminBundle/Controller/"
type: annotation
prefix: /admin
sikofitt_doughnut_wedding:
resource: "@SikofittDoughnutWeddingBundle/Controller/"
type: annotation
prefix: /

View File

@ -0,0 +1,14 @@
_wdt:
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
prefix: /_wdt
_profiler:
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
prefix: /_profiler
_errors:
resource: '@TwigBundle/Resources/config/routing/errors.xml'
prefix: /_error
_main:
resource: routing.yml

57
app/config/security.yml Normal file
View File

@ -0,0 +1,57 @@
# To get started with security, check out the documentation:
# http://symfony.com/doc/current/security.html
security:
encoders:
FOS\UserBundle\Model\UserInterface:
algorithm: bcrypt
cost: 14
role_hierarchy:
ROLE_USER: ~
ROLE_ADMIN: [ROLE_USER]
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN]
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
access_denied_handler: doughnutwedding.security.access_denied_handler
pattern: ^/
form_login:
provider: fos_userbundle
login_path: /login
check_path: /login_check
logout:
path: /logout
target: /
anonymous: true
oauth:
resource_owners:
facebook: /login/callback/facebook
google: /login/callback/google
twitter: /login/callback/twitter
amazon: /login/callback/amazon
yahoo: /login/callback/yahoo
login_path: /login
use_forward: false
failure_path: /connect
oauth_user_provider:
service: hwi_oauth.user.provider.fosub_bridge
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login/callback, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user, role: ROLE_USER }
- { path: ^/gallery/upload, role: ROLE_USER }
- { path: ^/gallery, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, role: ROLE_ADMIN }
- { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }

64
app/config/services.yml Normal file
View File

@ -0,0 +1,64 @@
# Learn more about services, parameters and containers at
# http://symfony.com/doc/current/service_container.html
parameters:
services:
colored_line_formatter:
class: Bramus\Monolog\Formatter\ColoredLineFormatter
tags:
- { name: 'monolog.logger' }
doughnutwedding.form.registration:
class: Sikofitt\DoughnutWeddingBundle\Form\RegistrationType
arguments: ['@fos_user.user_manager']
tags:
- { name: form.type, alias: app_user_registration }
doughnutwedding.form.profile:
class: Sikofitt\DoughnutWeddingBundle\Form\ProfileEditType
arguments: ['@fos_user.user_manager']
tags:
- { name: form.type, alias: app_user_profile_edit }
doughnutwedding.event.redirect_user_logged_in_event:
class: Sikofitt\DoughnutWeddingBundle\EventListener\UserRedirectOnLoggedInListener
arguments: ['@security.token_storage', '@router']
tags:
- { name: kernel.event_listener, event: kernel.request }
doughnutwedding.event.redirect_from_hwi_connect_page:
class: Sikofitt\DoughnutWeddingBundle\EventListener\RedirectFromHwiConnectPageEvent
arguments: ['@router', '@service_container']
tags:
- { name: kernel.event_listener, event: kernel.request }
doughnutwedding.event.redirect_user_after_register_event:
class: Sikofitt\DoughnutWeddingBundle\EventListener\RedirectOnUserRegisterListener
arguments: ['@service_container']
tags:
- { name: kernel.event_listener, event: fos_user.registration.completed }
- { name: kernel.event_listener, event: security.interactive_login }
doughnutwedding.google_cloud_storage.service:
class: \Google_Service_Storage
factory: ['Sikofitt\DoughnutWeddingBundle\Factory\GoogleCloudStorageServiceFactory', createGoogleCloudService]
arguments: ['%google.credentials_file%', '%google.client_id%', '%google.application_name%']
doughnutwedding.event.check_maintenance_mode:
class: Sikofitt\DoughnutWeddingBundle\EventListener\CheckForMaintenanceModeListenerEvent
arguments: ['@service_container', '@security.token_storage']
tags:
- { name: kernel.event_listener, event: kernel.request }
doughnutwedding.event.check_email_on_reset_event:
class: Sikofitt\DoughnutWeddingBundle\EventListener\CheckThatEmailAndUserNameExistOnResetRequest
arguments: ['@router', '@templating.engine.twig']
tags:
- { name: kernel.event_listener, event: fos_user.resetting.send_email.initialize }
doughnutwedding.event.need_to_authenticate_listener_event:
class: Sikofitt\DoughnutWeddingBundle\EventListener\NeedToAuthenticateListenerEvent
tags:
- { name: kernel.event_listener, event: kernel.response }
doughnutwedding.security.access_denied_handler:
class: Sikofitt\DoughnutWeddingBundle\Security\AccessDeniedHandler
arguments: ['@router', '@monolog.logger']
doughnutwedding.uikit.template:
class: Sikofitt\DoughnutWeddingBundle\Pager\View\UIkitTemplate
pagerfanta.view.default:
class: Pagerfanta\View\DefaultView
arguments: ['@doughnutwedding.uikit.template']
public: false
tags: [{ name: pagerfanta.view, alias: default }]

63
app/config/snc_redis.yml Normal file
View File

@ -0,0 +1,63 @@
snc_redis:
clients:
default:
type: predis
alias: default
dsn: redis://redis
logging: '%kernel.debug%'
monolog:
type: predis
alias: monolog
dsn: redis://redis/5
logging: false
options:
connection_persistent: true
cache:
type: predis
alias: cache
dsn: redis://redis/3
options:
profile: 2.2
connection_timeout: 10
read_write_timeout: 30
profiler_storage:
type: predis
alias: profiler_storage
dsn: redis://redis/10
session:
type: predis
alias: session
dsn: redis://redis/4
logging: true
session:
client: session
prefix: 'doughnut:session:'
monolog:
client: monolog
key: monolog
formatter: colored_line_formatter
profiler_storage:
client: profiler_storage
ttl: 3600
doctrine:
metadata_cache:
client: cache
entity_manager: default
document_manager: default
namespace: 'doughnut:doctrine:metadata:'
result_cache:
client: cache
entity_manager: default
document_manager: default
namespace: 'doughnut:doctrine:result:'
query_cache:
client: cache
entity_manager: default
namespace: 'doughnut:doctrine:query:'
second_level_cache:
client: cache
entity_manager: default
namespace: 'doughnut:doctrine:second_level:'
swiftmailer:
client: default
key: swiftmailer

88166
app/logs/development.log Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +0,0 @@
{% if form is defined %}
{% form_theme form with [_self, 'form_errors.html.twig'] %}
{% endif %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="viewport" id="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=10.0,initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="{{ asset('css/doughnutwedding.min.css') }}" />
<script src="{{ asset('js/vendor.min.js') }}" type="text/javascript"></script>
<script src="{{ asset('js/doughnutwedding.min.js') }}" type="text/javascript"></script>
</head>
<body>
{% block debug %}{% endblock %}
<div class="uk-container-small uk-container uk-margin-large-top uk-margin-large-bottom">
{% include 'flash_messages.html.twig' %}
{% block body %}{% endblock %}
</div>
</body>
</html>

View File

@ -1,33 +0,0 @@
{% extends 'base.html.twig' %}
{% block body %}
{{ dump(app.session.get('user')) }}
{{ form_start(form) }}
<fieldset class="uk-fieldset uk-margin-small-bottom">
<legend class="uk-legend">Enter Token</legend>
</fieldset>
<div class="uk-grid-small" uk-grid>
<div class="uk-form-controls uk-form-controls-text uk-width-2-3@m">
{{ form_row(form.user_token) }}
</div>
<div class="uk-form-controls uk-width-1-3@m">
{{ form_row(form.submit) }}
</div>
</div>
<div class="uk-grid" uk-grid>
<div class="uk-width-1-1">
<p class="uk-text-center uk-text-lead">
You can also send a new auto login link to your email.
</p>
</div>
<div class="uk-form-controls uk-width-1-1 uk-text-center">
{{ form_row(form.email) }}
</div>
<div class="uk-form-controls uk-width-1-1 uk-text-center">
{{ form_row(form.update_token) }}
</div>
</div>
<div class="form-controls uk-form-blank">
{{ form_rest(form) }}
</div>
{{ form_end(form) }}
{% endblock %}

View File

@ -1,8 +0,0 @@
{% extends 'base.html.twig' %}
{% block body %}
{{ 'Hello World!' }}
{% for key, request in app.request_stack %}
{{ dump(key) }}
{% endfor %}
{% endblock %}

View File

@ -1,4 +0,0 @@
{% extends 'base.html.twig' %}
{% block body %}
{{ dump(app.session.get('user')) }}
{% endblock %}

View File

@ -1,10 +0,0 @@
{% extends 'base.html.twig' %}
{% block body %}
<h2 class="uk-text-center">You have been successfully logged out.</h2>
<p class="uk-text-center">
You can log in again by going to the <a href="{{ url('login') }}">login</a> page.
</p>
<p class="uk-text-center">
You can also login using a token by going to the <a href="{{ url('token_login') }}">token login</a> page.
</p>
{% endblock %}

View File

@ -1 +0,0 @@
console.php

28
bin/console Executable file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env php
<?php
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Debug\Debug;
// if you don't want to setup permissions the proper way, just uncomment the following PHP line
// read http://symfony.com/doc/current/setup.html#checking-symfony-application-configuration-and-setup
// for more information
//umask(0000);
set_time_limit(0);
/** @var Composer\Autoload\ClassLoader $loader */
$loader = require __DIR__.'/../app/autoload.php';
$input = new ArgvInput();
$env = $input->getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev');
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(['--no-debug', '']) && $env !== 'prod';
if ($debug) {
Debug::enable();
}
$kernel = new AppKernel($env, $debug);
$application = new Application($kernel);
$application->run($input);

View File

@ -1,54 +0,0 @@
#!/usr/bin/env php
<?php
/*
* doughnutwedding.com
* Copyright (C) 2017 http://doughnutwedding.com eric@doughnutwedding.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
use Knp\Provider\ConsoleServiceProvider;
use Sikofitt\App\Provider\DoctrineConsoleProvider;
use Symfony\Bridge\Twig\Command\DebugCommand;
use Symfony\Bridge\Twig\Command\LintCommand;
$loader = require __DIR__.'/../vendor/autoload.php';
$app = new \Kernel($loader, true);
$consoleConfig = [
'console.name' => 'Doughnut Wedding',
'console.version' => '0.0.2',
'console.project_directory' => __DIR__.'/..',
];
$app
->register(new ConsoleServiceProvider(), $consoleConfig)
->register(new DoctrineConsoleProvider());
$fixCommand = new \PhpCsFixer\Console\Command\FixCommand();
$fixCommand->setName('dev:fixer')->setDescription('PhpCSFixer - Fixes directories and files according to a set of rules.');
$twigLintCommand = new LintCommand();
$twigLintCommand->setTwigEnvironment($app['twig']);
$twigDebugCommand = new DebugCommand();
$twigDebugCommand->setTwigEnvironment($app['twig']);
$fixCommand->setHidden(true);
$app['console']->addCommands([
$twigDebugCommand,
$twigLintCommand,
new \Symfony\Component\Yaml\Command\LintCommand(),
$fixCommand,
]);
$app['console']->run();

146
bin/symfony_requirements Executable file
View File

@ -0,0 +1,146 @@
#!/usr/bin/env php
<?php
require_once dirname(__FILE__).'/../var/SymfonyRequirements.php';
$lineSize = 70;
$symfonyRequirements = new SymfonyRequirements();
$iniPath = $symfonyRequirements->getPhpIniConfigPath();
echo_title('Symfony Requirements Checker');
echo '> PHP is using the following php.ini file:'.PHP_EOL;
if ($iniPath) {
echo_style('green', ' '.$iniPath);
} else {
echo_style('yellow', ' WARNING: No configuration file (php.ini) used by PHP!');
}
echo PHP_EOL.PHP_EOL;
echo '> Checking Symfony requirements:'.PHP_EOL.' ';
$messages = array();
foreach ($symfonyRequirements->getRequirements() as $req) {
if ($helpText = get_error_message($req, $lineSize)) {
echo_style('red', 'E');
$messages['error'][] = $helpText;
} else {
echo_style('green', '.');
}
}
$checkPassed = empty($messages['error']);
foreach ($symfonyRequirements->getRecommendations() as $req) {
if ($helpText = get_error_message($req, $lineSize)) {
echo_style('yellow', 'W');
$messages['warning'][] = $helpText;
} else {
echo_style('green', '.');
}
}
if ($checkPassed) {
echo_block('success', 'OK', 'Your system is ready to run Symfony projects');
} else {
echo_block('error', 'ERROR', 'Your system is not ready to run Symfony projects');
echo_title('Fix the following mandatory requirements', 'red');
foreach ($messages['error'] as $helpText) {
echo ' * '.$helpText.PHP_EOL;
}
}
if (!empty($messages['warning'])) {
echo_title('Optional recommendations to improve your setup', 'yellow');
foreach ($messages['warning'] as $helpText) {
echo ' * '.$helpText.PHP_EOL;
}
}
echo PHP_EOL;
echo_style('title', 'Note');
echo ' The command console could use a different php.ini file'.PHP_EOL;
echo_style('title', '~~~~');
echo ' than the one used with your web server. To be on the'.PHP_EOL;
echo ' safe side, please check the requirements from your web'.PHP_EOL;
echo ' server using the ';
echo_style('yellow', 'web/config.php');
echo ' script.'.PHP_EOL;
echo PHP_EOL;
exit($checkPassed ? 0 : 1);
function get_error_message(Requirement $requirement, $lineSize)
{
if ($requirement->isFulfilled()) {
return;
}
$errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL;
$errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL;
return $errorMessage;
}
function echo_title($title, $style = null)
{
$style = $style ?: 'title';
echo PHP_EOL;
echo_style($style, $title.PHP_EOL);
echo_style($style, str_repeat('~', strlen($title)).PHP_EOL);
echo PHP_EOL;
}
function echo_style($style, $message)
{
// ANSI color codes
$styles = array(
'reset' => "\033[0m",
'red' => "\033[31m",
'green' => "\033[32m",
'yellow' => "\033[33m",
'error' => "\033[37;41m",
'success' => "\033[37;42m",
'title' => "\033[34m",
);
$supports = has_color_support();
echo($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : '');
}
function echo_block($style, $title, $message)
{
$message = ' '.trim($message).' ';
$width = strlen($message);
echo PHP_EOL.PHP_EOL;
echo_style($style, str_repeat(' ', $width));
echo PHP_EOL;
echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT));
echo PHP_EOL;
echo_style($style, $message);
echo PHP_EOL;
echo_style($style, str_repeat(' ', $width));
echo PHP_EOL;
}
function has_color_support()
{
static $support;
if (null === $support) {
if (DIRECTORY_SEPARATOR == '\\') {
$support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI');
} else {
$support = function_exists('posix_isatty') && @posix_isatty(STDOUT);
}
}
return $support;
}

View File

@ -21,6 +21,8 @@
],
"dependencies": {
"uikit": "3",
"jquery": "^3.1.1"
"jquery": "^3.1.1",
"parsleyjs": "^2.7.0",
"select2": "^4.0.3"
}
}

3
build/images/amazon.svg Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:69179a5a296141aa163960a2259cc54854264787a709182b7b694570abdab148
size 15326

3
build/images/favicon.png Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7226428a1b7a936b5bebfa5234fdeaf23cc6ba4c2c95c30bb882431d93c50b58
size 19799

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c2f77625370cea32c788260860dd0d80db78f5dd39407bea5db7a08d368b5c67
size 129385

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:20292a46d4178dbf439c79f443c7cf47625c0b424340dc3b20665d272d75df21
size 137445

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5ad55bf9040225d6a605294152c6f88d5476ef582936e8a4d016aa16e22ad1d2
size 305052

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:633d635d0526e5fd75ba380e827a524b417cfdf0e43e81b5f6ab5bdc6b7c1ed0
size 234658

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b2323c2bdbc898df952a1fb615e7bb62eb6ee4541f8ac2b01991925da7bf4abd
size 241003

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b439362aa5029f855ee1f72ff94552d8246ad46c303e04796465687656a7a86d
size 139466

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:482cb918c7bc3ea0998759a60abc237cd350651ddf5a09707fe52df2dae1afeb
size 129353

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e7ad0693c08599150ecae7ff1dabccb18792c1d10cc96a95129938b08a3cf4d6
size 271299

3
build/images/logo.png Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:941c7b35b4e2520992cf8ba150086115697a74eaed3b33da3864b3be54fbd53e
size 82555

3
build/images/yahoo.svg Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3e5eb09ee2c78ad22dc98a9c4180c9ffd629347a25f7dd495b964f4afc2e146c
size 5833

3
build/images/yahoo2.svg Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:806dc0af681d43dd94bf783335f3e6de6bdf769e4f882b513a106696c69cca82
size 763

View File

@ -1,3 +1,14 @@
jQuery.ready(function($) {
jQuery(document).ready(function($) {
if(null !== document.querySelector('select') && document.querySelector('select').length > 0) {
var selectPlaceholder = 'Choose an option.';
if(document.querySelector('select').hasAttribute('placeholder')) {
selectPlaceholder = document.querySelector('select').getAttribute('placeholder');
}
jQuery('select').prepend('<option/>').select2({
placeholder: selectPlaceholder,
minimumResultsForSearch: Infinity,
theme: 'default'
});
}
});

View File

@ -1,11 +1,195 @@
@import "../../vendor/bower/uikit/src/less/uikit.less";
@import "../../vendor/bower/uikit/src/less/components/variables.less";
@import url('https://fonts.googleapis.com/css?family=Sigmar+One');
//@global-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
//@global-font-size: 16px;
@global-font-family: 'Raleway', sans-serif;
@base-body-font-family: 'Raleway', sans-serif;
@base-heading-font-family: 'Raleway', sans-serif;
@base-heading-text-transform: uppercase;
@button-text-transform:capitalize;
@base-body-font-weight: 200;
@base-heading-font-weight: 300;
@form-background: #ffffff;
@global-link-color: #5fbabd;
@base-link-color: @global-link-color;
@base-link-hover-color: darken(@base-link-color, 20%);
@button-primary-background: #9dd3d5;
@button-primary-color: #333;
@text-primary-color: @button-primary-background;
@button-primary-hover-color: darken(@button-primary-color, 10%);
@button-primary-hover-background: darken(@button-primary-background, 10%);
@button-danger-background: #fa6581;
@button-danger-color: #333;
@button-danger-hover-color: darken(@button-danger-color, 10%);
@button-danger-hover-background: darken(@button-danger-background, 10%);
blockquote p {
}
blockquote footer:before {
content: "— ";
}
.uk-404 {
font-family: 'Sigmar One', cursive;
line-height:0;
&.uk-doughnut {
@media(min-width: @breakpoint-small-max) {
font-size: 10rem;
}
@media(max-width: @breakpoint-small) {
font-size: 5rem;
}
.uk-spin {
@media(min-width: @breakpoint-small-max) {
width: 128px;
height: 128px;
}
@media(max-width: @breakpoint-small) {
width: 64px;
height:64px;
}
background-image:url(https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/doughnut_404.png)
}
}
}
@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } }
@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } }
@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } }
.uk-spin {
position: relative;
top: 0%;
left: 0%;
margin:0px 12px;
-webkit-animation:spin 1.5s linear infinite;
-moz-animation:spin 1.5s linear infinite;
animation:spin 1.5s linear infinite;
}
.uk-login-container {
.uk-navbar {
.uk-navbar-nav {
li {
a {
font-weight:bold !important;
}
}
}
}
}
label.required:after {
content: "*";
text-align:right;
float:right;
color: @form-danger-color;
font-size: @global-large-font-size;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: bold
}
.uk-home {
.uk-overlay {
h3 {
a {
text-decoration:none;
border:0;
letter-spacing:.15rem;
text-transform: uppercase;
&:hover {
text-shadow: #000000;
}
}
}
}
.uk-background-fade {
transition-duration: .3s;
transition-timing-function: ease-in-out;
transition-property: background-image;
}
.uk-our-story-home {
height:465px !important;
background-image: url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_our_story_1.jpg');
&:hover {
background-image: url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_our_story_2.jpg')
}
}
// photo
// location
.uk-photo-home {
background-image: url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_photo_2.jpg');
&:hover {
background-image: url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_photo_1.jpg');
}
}
.uk-location-home {
margin-bottom:15px !important;
background-image: url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_location.jpg');
transition-duration: .3s;
transition-timing-function: ease-out;
transition-property: filter;
&:hover {
filter: hue-rotate(90deg);
background-blend-mode: darken;
}
}
.uk-doughnut-rsvp {
margin-bottom:15px !important;
background-image: url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_doughnut_1.jpg');
&:hover {
background-image: url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_doughnut_2.jpg');
}
}
.uk-doughnut-get-in-touch-home {
background-image: url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_doughnut_2.jpg');
&:hover {
background-image: url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_doughnut_1.jpg');
}
}
.uk-background-home {
}
}
.uk-icon.uk-icon-facebook {
color: #3b5998;
}
.uk-icon.uk-icon-google {
color: #d50f25;
}
.uk-icon.uk-icon-twitter {
color: #1da1f2;
}
.uk-icon.uk-icon-yahoo {
color: #7b0099;
/*color: #720e9e;*/
}
.uk-icon.uk-icon-amazon {
color: #ff9900;
}
.uk-preload {
background-repeat: no-repeat;
background-position-x: -9999px;
background-position-y: -9999px;
.our-story {
background-image:url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_our_story_2.jpg');
}
.photo-gallery {
background-image:url('https://storage.googleapis.com/zgluzzkwodfky2m0ytbhmjhmmzqzntq2ngy3ndjmntyxmzg4/assets/home_photo_1.jpg');
}
}
.uk-registration-connect a,
.uk-doughnut-main-nav li a {
font-weight:bold !important;
}
.uk-input,
.uk-select,
.uk-textarea {
@ -19,3 +203,9 @@
border:1px solid #99baca;
color: #666;
}
.uk-login-form #password {
border-top:0 !important;
}
.uk-login-form #password:focus {
border-top: 1px solid #99baca !important;
}

View File

@ -1,67 +1,106 @@
{
"name": "sikofitt/doughnutwedding",
"description": "doughnutwedding.com website",
"name": "symfony/framework-standard-edition",
"license": "MIT",
"type": "project",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
"psr-4": { "Sikofitt\\": "src/Sikofitt/" },
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
"autoload-dev": {
"psr-4": { "Tests\\": "tests/" },
"files": [ "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" ]
},
"require": {
"php": ">=7.0",
"bramus/monolog-colored-line-formatter": "~2.0",
"container-interop/container-interop": "^1.1",
"dflydev/doctrine-orm-service-provider": "^2.0",
"doctrine/annotations": "^1.3",
"doctrine/collections": "^1.4",
"doctrine/dbal": "^2.5",
"php": ">=7.1",
"bramus/monolog-colored-line-formatter": "^2.0",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.3",
"doctrine/orm": "^2.5",
"egulias/email-validator": "^2.1",
"excelwebzone/recaptcha-bundle": "^1.4",
"friendsofsymfony/user-bundle": "^2.0",
"google/apiclient": "^2.1",
"google/recaptcha": "^1.1",
"hwi/oauth-bundle": "^0.5.3",
"incenteev/composer-parameter-handler": "^2.0",
"ircmaxell/random-lib": "^1.2",
"ircmaxell/security-lib": "^1.1",
"knplabs/console-service-provider": "^2.0",
"monolog/monolog": "^1.22",
"j-ben87/parsley-bundle": "^1.4",
"javiereguiluz/easyadmin-bundle": "^1.16",
"knplabs/knp-gaufrette-bundle": "^0.4.0",
"lexik/translation-bundle": "^4.0",
"lightsaml/sp-bundle": "^1.1",
"moontoast/math": "^1.1",
"paragonie/cookie": "^3.1",
"paragonie/csp-builder": "^2.0",
"paragonie/sodium_compat": "^0.4.0",
"silex/silex": "^2.0",
"swiftmailer/swiftmailer": "^5.4",
"symfony/asset": "^3.2",
"symfony/config": "^3.2",
"symfony/console": "^3.2",
"symfony/form": "^3.2",
"symfony/http-foundation": "^3.2",
"symfony/monolog-bridge": "^3.2",
"paragonie/sodium_compat": "^0.6.0",
"predis/predis": "^1.1",
"psr/http-message": "^1.0",
"ramsey/uuid": "^3.6",
"ramsey/uuid-doctrine": "^1.2",
"ravenberg/uikit-bundle": "^1.0",
"sensio/distribution-bundle": "^5.0",
"sensio/framework-extra-bundle": "^3.0.2",
"snc/redis-bundle": "^2.0",
"symfony/monolog-bundle": "^3.0.2",
"symfony/polyfill-apcu": "^1.0",
"symfony/security": "^3.2",
"symfony/security-csrf": "^3.2",
"symfony/security-guard": "^3.2",
"symfony/security-http": "^3.2",
"symfony/twig-bridge": "^3.2",
"symfony/validator": "^3.2",
"symfony/yaml": "^3.2",
"symfony/swiftmailer-bundle": "^2.3.10",
"symfony/symfony": "3.2.*",
"tedivm/stash": "^0.14.1",
"tedivm/stash-bundle": "^0.6.2",
"twig/extensions": "^1.4",
"twig/twig": "^2.1"
"twig/twig": "^1.0||^2.0",
"vich/uploader-bundle": "^1.5",
"white-october/pagerfanta-bundle": "^1.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.0",
"doctrine/doctrine-fixtures-bundle": "^2.3",
"friendsofphp/php-cs-fixer": "^2.1",
"fzaninotto/faker": "^1.6",
"phpunit/phpunit": "^6.0",
"silex/providers": "^2.0",
"silex/web-profiler": "^2.0",
"sensio/generator-bundle": "^3.0",
"symfony/debug-bundle": "^3.2",
"symfony/phpunit-bridge": "^3.0",
"symfony/var-dumper": "^3.2"
},
"autoload": {
"psr-4": {
"Sikofitt\\":"src/Sikofitt"
},
"files": ["app/Kernel.php"]
},
"license": "GPL-3.0",
"authors": [
{
"name": "sikofitt",
"email": "sikofitt@gmail.com"
}
"scripts": {
"symfony-scripts": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
],
"minimum-stability": "stable",
"post-install-cmd": [
"@symfony-scripts"
],
"post-update-cmd": [
"@symfony-scripts"
]
},
"config": {
"platform": {
"php": "7.1.3"
},
"sort-packages": true
},
"extra": {
"symfony-app-dir": "app",
"symfony-bin-dir": "bin",
"symfony-var-dir": "var",
"symfony-web-dir": "web",
"symfony-tests-dir": "tests",
"symfony-assets-install": "relative",
"incenteev-parameters": {
"file": "app/config/parameters.yml"
},
"branch-alias": {
"dev-master": "3.2-dev"
}
}
}

View File

@ -7,16 +7,17 @@ server {
root /var/www/html;
location / {
index index.php index.html;
try_files $uri /index.php$is_args$args;
try_files $uri /app_dev.php$is_args$args;
}
location ~ \.php$ {
include fastcgi_params;
#location ~ \.php$ {
location ~ ^/(app_dev|config)\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
#fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}

View File

@ -7,11 +7,12 @@ services:
- "80:80"
volumes:
- ./:/var/www
- ./html:/var/www/html
- ./web:/var/www/html
- ./conf.d:/etc/nginx/conf.d
links:
- php
- mysql
- redis
restart: always
environment:
- "APP_ENV=development"
@ -19,7 +20,9 @@ services:
build: ./docker/php
volumes:
- ./:/var/www
- ./html:/var/www/html
- ./web:/var/www/html
links:
- redis
restart: always
environment:
- "APP_ENV=development"
@ -34,4 +37,8 @@ services:
- "3306:3306"
volumes:
- ./lib/mysql:/var/lib/mysql
redis:
build: ./docker/redis
ports:
- "6379:6379"

Some files were not shown because too many files have changed in this diff Show More