Jump to content

FrontendUser: login, logout and register users / members


pwFoo

Recommended Posts

In documentation I used $redirectDestination, which isn't optional ;)

I'll add it to the wiki page.

Thank you a lot. I think it would be enough to mention this in your documentation. I was really confused about the endless loop redirects.

And is there any ability to send mails? Because I have the problem that any redirect is looses the data from posting the form. It would be helpful to send the admin an email that a new user is registered.

Just write a small extension (a PW hook) to send an email? Could be done inside the template file or a small PW module.

Link to comment
Share on other sites

Hint about redirect loops is added to the wiki documentation.

@Florian Grüttner

FrontendUser is build with flexibility and PW core features in mind. So you can add an hook to send an email after successfully registered a new user.

Use addHookAfter FrontendUser save() method. User registration was successful if you return value is "true" (exactly "true" checked with "==="). You can use WireMail to send an email with the form data.

wire('fu')->form
Edited by pwFoo
Link to comment
Share on other sites

  • 3 weeks later...

Hi,

I'm trying to override the "Send email validation code" value of the UserRegistration submit button, I need it to be translatable.

Since I don't want to hack the module (line 157 of  FrontendUserRegisterEmailValidation.module) by putting a _('Send email validation code'), I tried to set the custom value with a

$fu->addHookBefore('render',function($event){
        $form = wire('fu')->form;
        if (!wire('session')->get('registerStep')) {
            $form->fhSubmitBtn->value = __('My custom text',$langfile);
        }
    });

but to no avail -- it seems that the module's hook function ( hookRegisterFormBeforeRender ), which also will hook into before render, always trumps "my" value.

What am I missing?

thx

Tom

  • Like 1
Link to comment
Share on other sites

ok, found it (with the support of @inspeCTor) :-)

$fu->form->addHookBefore('render',function($event){
        if (!wire('session')->get('registerStep')) {
            $event->object->fhSubmitBtn->value = __('Send validation code',$langfile);
        }
    });
Link to comment
Share on other sites

Hi again,

I think we found a bug regarding the emailValidation E-mail: The email contains some markup residue which is pulled from the _main.php file (for example some google analytics script code), even if sent as text email. If the vars for the render() func contain

$vars['prependFile'] = null;
$vars['appendFile'] = null;
$vars['allowCache'] = false;

this is gone.

Is there a way to insert this via hook, or only in FrontendUserRegisterEmailValidation.module, line 97ff…?

// Set email template variables
            $vars = array(
                'username'  => wire('session')->get('registerUsername'),
                'email'     => wire('session')->get('registerEmail'),
                'token'     => wire('session')->get('registerToken'),
                'url'       => wire('page')->httpUrl . '?registerToken=' . wire('session')->get('registerToken'),
                'content'   => $this->content,  // config variable  // ToDo: Tests with php 5.3
                // no markup from page template:
                'prependFile' => null,
                'appendFile' => null
                // ---- //
            );
            
            // Load the plain / html email templates
            $emailContentHtml = wire('page')->render(wire('fu')->getFile('validationEmail.php', 'templates'), $vars);
                       
            // Send verification email with the generated token
            $mail = wireMail();
            $mail->to($form->fhValue('email'))->subject($subject);
            if ((int)$this->emailType == 1) {
                $mail->bodyHTML($emailContentHtml);
            }
            else {
                $emailContentPlain = preg_replace('/^\h+|\h+$/m', '', strip_tags($emailContentHtml));
                $mail->body($emailContentPlain);
            }
            $mail->send();
  • Like 1
Link to comment
Share on other sites

@Christophe

Thank you, didn't know about that special char, and my google skills need some improvement, it seems :)

@pwFoo

Cool, thanks. Perhaps this could be triggered via a settings option? I guess 'our' problem is caused because we have all the 'surrounding' markup in the _main.php, other structural designs may not be bothered by this. On the other hand, in your demo mail template the complete 'surrounding' markup is contained, so no need for inheritance from the page/main template. hm. on the other hand, what if you need to access some vars or funcs from _init.php or _func.php … guess what i'm trying to say: as so often with processwire: it depends ;)

cheers

Tom

Link to comment
Share on other sites

  • 2 weeks later...
Link to comment
Share on other sites

  • 2 weeks later...

Hi pwFoo,

sorry for the late reply; it seems to work as intended in our install, thank you :-)

(one minor thing, tho, the FrontendUserRegisterEmailValidation module is not updatable from the backend, it still claims to be 6 months old, even with the fresh 13.11.15 version on the server…)

cheers,

Tom

Link to comment
Share on other sites

  • 4 weeks later...

I am just getting started on this - building a forum site where users can register an account, have a profile page and then expand from there...

Could someone give a summary of this thread. How far along is this module?

FrontendUser is listed as alpha/not stable, but does the basic process work? Is it good enough to get started?

Is a stable version 1.0 coming any day now or is this an abandoned experiment?

Would I be better off trying to develop something very rudimentary from scratch?

Link to comment
Share on other sites

Hi, the module is listed as unstable because I don't use it with a production site at the moment and there isn't that much feedback about production usage yet, but I think some members here are using it. Reported issues should be fixed.

The module IS designed as a starting point and easy to extend by writing plugins (based on PW hooks) without hacking the module itself. ;)

*UPDATE*

You plan to build a PW based forum?

https://processwire.com/talk/topic/11201-hermodbb-basic-bbforumcomments-module

  • Like 1
Link to comment
Share on other sites

Thank you for your quick response pwFoo. And Beluga.

I have forum websites based on heavily customized Wordpress Multisite now, but it is a structural mess - http://geowebforum.com etc.

In Wordpress Multisite each new site is completely independent/disconnected from the others. Buddypress works around that by adding a second users database table. I tried a different approach to minimize the number of plugins and keep everyhing as standard as possible, but Wordpress still makes it hard to manage as one platform.

I don't want a classic old skool forum/BB, like this support forum. It should be more like a social network; users have their own profile pages where they can post content in their own channel/newsfeed and then can comment on eachothers content.

Whatever the features are going to be, I need a solid, straightforward users/members management system to get started. I'll try your module and will report back here.

Thanks again!

Link to comment
Share on other sites

EsoTalk and Flarum look like old-fashioned bulletin boards to me. I want something much more content focused; member profile pages as content channels and then collect some platform activity on a general homepage.

I like the straightforward way PW handles content. If PW can handle users/members  in a similar straightforward way, that would be a great starting point. I don't want to use yet another php script that only does one thing.

Link to comment
Share on other sites

I tested FrontendUser module with PW 3.0 dev and it seems to works fine, but minimal changes to FormHelper are needed because of namespace compatibility...

The FrontendUserRegisterEmailValidation plugin send an empty mail body and a update is needed to make it work with PW 3.0!

Maybe I'll optimize my modules for the PW3.0dev usage soon.

FormHelper PW 3.0 dev compatibility:

https://processwire.com/talk/topic/7860-module-formhelper/?p=108577

Link to comment
Share on other sites

  • 4 weeks later...

Hi,

I have have added an extra field for registration as per your instructions in Code snippets, however the field data is missing after registration is completed.

I have updated the relevant template in admin so that "firstname" is now a user field, and this is working fine.

My code is all working ok but the "firstname" field remains empty upon registration. I can only manually update it through admin.
 

ProcessWire 2.7.1

FrontendUser 0.8.9

My code is posted below.

$fu = $modules->get('FrontendUser');
$FirstName = $modules->get('InputfieldText');
$FirstName->label = $this->_('First Name');
$FirstName->attr('id+name', 'firstname');
//$FirstName->required = 1;
$FirstName->fhSanitizer = 'text';

// Call hook after field is processed by PW form api
$FirstName->addHookAfter('processInput', function($event) {
   $field = $event->object;

   // Value will be sanitized as text with "$sanitizer->text()"
   $mySanitizedCustomInput = wire('fu')->form->fhValue($field->name);

   // Do ...

   // Example: Add value to user during registration
   wire('fu')->userObj->myField = $mySanitizedCustomInput;

   // Need to set an field error?
   // $field->error('Custom field has an error...');
});

// Define the field before you call FU and add it as additional field...
$fu->register(array('username', 'email', 'password', $FirstName));

//$fu->register();
$fu->process("/member-area/login/");
echo $fu->render();

Link to comment
Share on other sites

Hello everyone,

there is an option in the frontend of the site to create a new user and then to login for downloading the content.

I have the following problem:

In the PW-backend I can create a new user with access restrictions. When this user has admin rights, he can login in the PW-backend, and when he is loginned in the PW-backend I can see in the frontend the files to download and can logout. But when this user is not logined in the PW-backend he can’t login directly from the frontend. I can’t also create a new user from the frontend. When I'm trying to login or to create a new user in the frontend, I'm redirected to the homepage.

What can cause this problem? I took the code from the same project I made earlier.

<?php // process register / form submit ?>
		<?php $downloads = $pages->get(1062)->url; ?>
		<?php $erfolg = $pages->get(1224)->url; ?>
		<?php echo $erfolg; ?>
		<?php $my_downloads = $pages->find("template=download-detail, include=all"); ?>
		<?php $logout = $pages->get(1363)->url; ?>


		<div class="register">
			<div class="col col-xs-10 col-xs-offset-1 col-sm-10 col-sm-offset-1 download">

				<?php if($user->isLoggedin()): ?>
					<div class="col col-xs-12 col-sm-10">
						<?php echo "<h3 class='primary headline3 download-text'>Sie sind eingeloggt als '".$user->name."'.</h3>"; ?>
					</div><!-- col -->
				<?php else: ?>
                <div class="col col-xs-12 col-sm-6">
					<div class="col col-xs-12 col-sm-10">
						<h3 class="primary headline3 register-text">Registrierung</h3>
					<!-- col -->
					<?php $fu_r = $modules->get('FrontendUser'); ?>
					<?php $fu_r->register(); ?>
					<?php $fu_r->process($erfolg); ?>

					<?php echo $fu_r->render(); ?>
                    </div>
                    </div>
                <div class="col col-xs-12 col-sm-6">
                    <div class="col col-xs-12 col-sm-10">
                    <h3 class="primary headline3 register-text">Login</h3>
						<?php $fu_l = $modules->get('FrontendUser'); ?>
						<?php $fu_l->login(); ?>
						<?php $fu_l->login(array('username', 'password')); ?>
						<?php //// Additional LoginPersist and ProcessForgotPassword module integration (built-in) ?>
						<?php //$fu->login(array('username', 'password', 'persist', 'forgot')); ?>
						<?php //// process login / form submit ?>
						<?php  ?>
						<?php $fu_l->process($downloads); ?>
						<?php //// output form ?>
						<?php echo $fu_l->render();?>

				</div>
                    </div>
				<?php endif; ?>
			</div><!-- col -->

			<?php if($user->isLoggedin()): ?>
			<div class="download-list">
				<div class="col col-xs-10 col-xs-offset-1 col-sm-10 col-sm-offset-1">
					<div class="col col-xs-12 col-sm-5 col-sm-offset-0 main-text">
							<?php $user_pages = $user->download_selector; ?>
							<?php if($user_pages[0]): ?>
								<p class="secondary copy">Ihre verfügbaren Downloads:</p>
							<?php else: ?>
								<p class="secondary copy">Für Sie sind derzeit keine Downloads verfügbar.</p>
							<?php endif; ?>
								<ul class="download-text">
									<?php foreach($user_pages as $user_page): ?>
										<li><a class="secondary copy" download="download" target="_blank" href="<?php echo $user_page->download_file->url; ?>" title="<?php echo $user_page->title; ?>"><?php echo $user_page->title; ?></a></li>
							<?php endforeach; ?>
								</ul>
							<?php if($user->isLoggedin()): ?>
								<div class="col col-xs-12">
									<a class="primary headline3 cta icon-open icon-close download-text" href="<?php echo $logout; ?>">Logout</a>
								</div><!-- col -->
							<?php endif; ?>

					</div>
					<!-- col -->
				</div>
			</div><!-- download list -->
			<?php endif; ?>

Maybe its a simple task but I am not sure where to look for the problem.

Thanks for your help - I really appreciate all that kind support here in the forum!

Cheers,

Florian

Link to comment
Share on other sites

  • 4 weeks later...

Hello, 

i have some problems with the Forgot password function ? 

I have both calls for login and register on one page 

post-957-0-21493200-1454575427_thumb.png

now i if try to restore the password i see the url   two times the reset field 

post-957-0-60857100-1454575549_thumb.png

so if i use one of them i get the mail but on click on the link

eg 

 

nothinh happens ? I see also this two fields and jump also to

 http://domain.de/registrieren/?forgot=1

how to not render the register for the page if user try to reset password  ? 

Tnx

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...