THIS BUNDLE HAS BEEN SET READ-ONLY AND REPLACED BY c975L/UserBundle
UserFilesBundle does the following:
- Uses FOSUserBundle to store users in database,
- Provides supplementary files (templates, Controllers, etc.) to manage those users,
- Adds fields as firstname, lastname, avatar, etc.
- Displays a "challenge" for registration
- Allows the possibility to disable registration (for registering only one or more users)
UserFiles Bundle dedicated web page.
Use Composer to install the library
composer require c975l/user-files-bundle
Then, enable the bundle by adding it to the list of registered bundles in the app/AppKernel.php
file of your project:
<?php
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
// ...
new FOS\UserBundle\FOSUserBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new c975L\EmailBundle\c975LEmailBundle(),
new c975L\UserFilesBundle\c975LUserFilesBundle(),
];
}
}
Then, in the app/config.yml
file of your project, define the following:
#Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
auth_mode: login
port: 587
#Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
#FosUserBundle
fos_user:
db_driver: orm
firewall_name: main
user_class: c975L\UserFilesBundle\Entity\User
use_listener: true
use_flash_notifications: true
use_username_form_type: false
model_manager_name: null
from_email:
address: "%mailer_user%"
sender_name: "%mailer_user%"
profile:
form:
type: c975L\UserFilesBundle\Form\ProfileType
name: c975l_user_files_profile
change_password:
form:
type: FOS\UserBundle\Form\Type\ChangePasswordFormType
name: fos_user_change_password_form
registration:
confirmation:
enabled: true
template: FOSUserBundle:Registration:email.txt.twig
form:
type: c975L\UserFilesBundle\Form\RegistrationType
name: c975l_user_files_registration
resetting:
token_ttl: 86400
email:
template: FOSUserBundle:Resetting:email.txt.twig
form:
type: FOS\UserBundle\Form\Type\ResettingFormType
name: fos_user_resetting_form
service:
mailer: fos_user.mailer.default
email_canonicalizer: fos_user.util.canonicalizer.default
username_canonicalizer: fos_user.util.canonicalizer.default
token_generator: fos_user.util.token_generator.default
user_manager: fos_user.user_manager.default
#EmailBundle
c975_l_email:
#Email address used to send emails
sentFrom: 'contact@example.com'
#UserFilesBundle
c975_l_user_files:
#Name of site to be displayed
site: 'Example.com'
#Indicate the Route to be used after Logout
logoutRoute: 'home'
#If registration is allowed or not
registration: false #true(default)
#(Optional) If you want to display the gravatar linked to the email user's account
gravatar: true #null(default)
#(Optional) If you want to save the email sent to user when deleting his/her account in the database linked to c975L/EmailBundle
databaseEmail: true #false(default)
#(Optional) If you want to archive the user in `user_archives` table (you need to create this table, see below)
archiveUser: true #false(default)
Then add the correct values in the app/parameters.yml
parameters:
database_driver: pdo_mysql
database_host: localhost
database_port: 80
database_name: database_name
database_user: databse_user
database_password: database_password
mailer_transport: smtp
mailer_host: mail.example.com
mailer_user: contact@example.com
mailer_password: email_password
And finally in app/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_MODERATOR: ROLE_USER
ROLE_ADMIN: [ROLE_MODERATOR, ROLE_USER]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_MODERATOR, ROLE_USER]
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
login_path: fos_user_security_login
check_path: fos_user_security_check
default_target_path: userfiles_dashboard
remember_me:
secret: '%secret%'
lifetime: 31536000
path: /
secure: true
anonymous: true
Use /Resources/sql/user.sql
to create the table user
if not already existing. The DROP TABLE
is commented to avoid dropping by mistake.
You can also create the table user_archives
+ stored procedure to archive the user when deleting account, for this copy/paste the code from file /Resources/sql/user.sql
, then set config value archiveUser
to true.
Then, enable the routes by adding them to the app/config/routing.yml
file of your project:
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
c975_l_user_files:
resource: "@c975LUserFilesBundle/Controller/"
type: annotation
#Multilingual website use: prefix: /{_locale}
prefix: /
It is strongly recommended to use the Override Templates from Third-Party Bundles feature to integrate fully with your site.
For this, simply, create the following structure app/Resources/c975LUserFilesBundle/views/
in your app and then duplicate the file layout.html.twig
in it, to override the existing Bundle files, then apply your needed changes.
You also have to override:
app/Resources/c975LUserFilesBundle/views/emails/layout.html.twig
to set data related to your emails.app/Resources/c975LUserFilesBundle/views/fragments/registerAcceptanceInfo.html.twig
to display links (Terms of use, Privacy policy, etc.) displayed in the register form.app/Resources/c975LUserFilesBundle/views/fragments/deleteAccountInfo.html.twig
that will list the implications, by deleting account, for user, displayed in the delete account page.app/Resources/c975LUserFilesBundle/views/fragments/dashboardActions.html.twig
to add your own actions (or whatever) in the dashboard i.e.
You can add a navbar menu via {% include('@c975LUserFiles/fragments/navbarMenu.html.twig') %}
. You can override it, if needed, or simply override /fragments/navbarMenuActions.html.twig
to add actions above it.
The Routes are those used by FOSUserBundle + userfiles_dashboard
, userfiles_signout
and userfiles_delete_account
.
You can display links on the login page to sign in with social network/s. This bundle doesn't implement this functionality, it only displays button/s on the login page. You have to configure HWIOAuthBundle by your own.
If you use it, simply indicate in app/config/routing.yml
c975_l_user_files:
#Indicates the networks you want to appear on the login page
hwiOauth: ['facebook', 'google', 'live'] #Default null
You also have to upload images on your website named web/images/signin-[network].png
(width="200" height="50"), where network
is the name defined in the config.yml file.
To add more fields (address, etc.) to the Entity User
, you need to override it, but you MUST extend FOS\UserBundle\Model\User
, NOT extend c975L/UserFilesBundle/Entity/User
. It gives the following code:
Create the file src/UserFilesBundle/UserFilesBundle.php
:
<?php
namespace UserFilesBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class UserFilesBundle extends Bundle
{
public function getParent()
{
return 'c975LUserFilesBundle';
}
}
Copy/paste the file Entity/User.php
in src/UserFilesBundle/Entity/
<?php
//Change the namespace
namespace UserFilesBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Component\HttpFoundation\Request;
use c975L\UserFilesBundle\Validator\Constraints as UserFilesBundleAssert;
use c975L\UserFilesBundle\Validator\Constraints\Challenge;
//...
/**
* @ORM\Entity
*/
class User extends BaseUser
{
//Keep all the fields and functions and add your own
}
In app/config/config.yml
change the user_class
fos_user:
user_class: UserFilesBundle\Entity\User
To override Form, create the file src/UserFilesBundle/UserFilesBundle.php
as explained above and duplicate the Form in src/UserFilesBundle/Form/[FormName]Type.php
, (i.e. for Profile Form)
<?php
//Change the namespace
namespace UserFilesBundle\Form;
//...
use c975L\UserFilesBundle\Form\ProfileType as BaseProfileType;
class ProfileType extends BaseProfileType
{
//Do your stuff...
}
In app/config/services.yml
add a service (i.e. for Profile Form):
services:
app.user_files.profile:
class: UserFilesBundle\Form\ProfileType
arguments: ['@security.token_storage']
tags:
- { name: form.type }
In app/config/config.yml
change the type
linked to the form (i.e. for Profile Form)
fos_user:
profile:
form:
type: UserFilesBundle\Form\ProfileType
To override Controller, create the file src/UserFilesBundle/UserFilesBundle.php
as explained above and duplicate the Controller in src/UserFilesBundle/Controller/UserController.php
<?php
//Change the namespace
namespace UserFilesBundle\Controller;
//...
use c975L\UserFilesBundle\Controller\UserController as BaseController;
class UserController extends BaseController
{
//DELETE USER
/**
* @Route("/delete",
* name="userfiles_delete_account")
* @Method({"GET", "HEAD", "POST"})
*/
public function deleteAccountAction(Request $request)
{
parent::deleteAccountAction($request);
//Do your stuff...
}
}
The two functions signoutUserFunction()
and deleteAccountUserFunction()
are here to easily allow adding functions for sign out and delete user. Simply Override them in the Controller as described above.