c975l / user-files-bundle
Simply add a layer over FOSUserBundle for navigating files
Installs: 98
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=5.5.9
- c975l/email-bundle: ^1
- c975l/toolbar-bundle: ^1
- friendsofsymfony/user-bundle: ^2
- sensio/framework-extra-bundle: ^3
- symfony/assetic-bundle: ^2
- symfony/framework-bundle: ^3
README
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.
Bundle installation
Step 1: Download the Bundle
Use Composer to install the library
composer require c975l/user-files-bundle
Step 2: Enable the Bundles
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(), ]; } }
Step 3: Configure the Bundles
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
Step 4: Create MySql table
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.
Step 5: Enable the Routes
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: /
Overriding Templates
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.
Routes
The Routes are those used by FOSUserBundle + userfiles_dashboard
, userfiles_signout
and userfiles_delete_account
.
Using HwiOauth (Social network sign in)
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.
Overriding Entity
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
Overridding Forms
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
Overriding Controller
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.