Profile:Edit Version 1.2.1

Profile:Edit allows you to use a dedicated channel for member profiles. By doing so, you now have all the flexibility of the Channel module: custom fields, statuses, relationships, categories, etc. With profile:edit you can create front-end forms where users can manage a rich, custom member profile, using the power of SafeCracker (the free module for easily building stand-alone entry forms).

Requirements

  • ExpressionEngine 2.7+
  • PHP 5.1.6+
  • Have Channel_form (SafeCracker) installed, and know how to use it

Installation

  • Upload the /system/expressionengine/third\_party/profile/ folder to /system/expressionengine/third\_party/
  • Make sure Extensions are enabled on your system
  • Install the Profile module and extension
  • Configure your member registration preferences under Members > Preferences
  • Go to Addons > Modules > Profile:Edit's settings

Upgrading

  • Upload the /system/expressionengine/third_party/profile_edit/ folder to /system/expressionengine/third_party/ Overwriting existing files.
  • Go to EE settings » addons » and click "Run Module Updates"

Special Instructions for updating from versions before 1.1.4

If you have been running Profile:Edit versions under 1.1.4 and are updating to 1.1.4 or later, please note, you must ALSO do the following:

  1. Add this template: reset_password
  2. Add this template: reset_confirmed
  3. Update the forgot_password template. Change the forgot_password_return parameter to direct to the rest_password template created in 1. above

Sample templates for items 1,2, and 3 are included in the "updated_templates" folder included in the docs folder

Automatic Installation & Setup

  • Click "Example Template Installation", select the templates and channel and click "Install".

The new channel is called "Member profiles" and a new templates group called "profiles"

Manual Installation

  • Designate a an existing channel as your profile channel
  • Go to ExpressionEngine settings > Members > Member Groups.
  • Select each member group in turn and set their Channel Assignment > Can post and edit entries in: YOUR PROFILE CHANNEL to "Yes"
  • Use example code below to create templates

Using with existing EE members

When using Profile:Edit with existing EE websites that already have members you may want to create entries for all existing members. When an existing member attempts to use the profile:edit tag for any reason, an entry will be generated if it doesn't exist. If one previously existed, but was deleted, a new one will be created automatically.

Creating a profile for a member in the EE backend.

Create a new channel entry in the member profile channel. In the "options" tab, set your member as the author of the entry. It will then be a profile available to that member.

Settings

Profile:Edit Settings Screenshot

Profile:Edit Settings Screenshot

Profile channel

After you've created a channel for use as member profiles, select it here to associate it with Profile:Edit.

Allow multiple profiles?

Let's say you're building an e-commerce site with CartThrob, and you want to provide the ability for the user to store multiple shipping addresses. You want this setting. Once turned on, this will enable the {exp:profile:profiles} and {exp:profile:set_active_profile_link} tags. Using those, you can list your users multiple profiles and allow them to select which one is currently active.

Use email address as username?

This will allow you to use email addresses as username. You simply use the email form input, and completely forgo the username input. The username field will automatically be filled with whatever you set as the email.

Automatically log in after email activation?

If you use the "Self-activation via email" registration preference, this setting will automatically log in the user once they click their activation link.

Add profile tags as global variables?

When set to yes, this will enable global profile variables for the current user in your templates.

Automatically generate entry title from Screen Name?

With this setting you may omit a title field in your register/edit forms and have it auto-generated from the screen_name.

Automatically generate entry url title from Username?

With this setting you may omit a url_title field in your register/edit forms and have it auto-generated from the username.

Require current password for non-superadmins in the edit form?

When turned off, you may omit the current_password field in your edit forms.

Require password confirm in both the edit & register form?

Set to yes to require a password_confirm field in your register/edit forms.

Require email confirm in the register form?

Set to yes to require an email_confirm field in your register/edit forms.

Member Preferences

These settings are a shortcut to relevant native EE member settings.

Tags

View Profile

{exp:profile:view}

View the profile of the current logged in user, or the specified member_id.

This tag is equivalent to a channel entries tag, and inherits all the tags and parameters of it. For more on the {exp:channel:entries} tag and its parameters and tags, refer to the ExpressionEngine User Guide.

NOTE: You must set "Cache Dynamic Channel Queries?" to No under Admin > Channel Administration > Global Preferences in the current version (v1.0.8) of Profile:Edit. If you have it set to yes, the profile:view tag will have unpredictable results. This will be fixed in the forthcoming version of Profile:Edit.

Parameters

All {exp:channel:entries} tag parameters, see ExpressionEngine User Guide, except dynamic (which is automatically set to "no"), channel (which automatically uses your Profile channel) and limit (which is automatically set to "1"), plus...

  • member_id optional, specify the member_id whose profile you wish to view; defaults to current user's member_id

Variables

All {exp:channel:entries} tag variables, see ExpressionEngine User Guide

Examples
{exp:profile:view}
    <h3>{screen_name}</h3>

    {your_custom_field}

    {your_custom_field_tag_pair}
        {some_sub_tag}
    {/your_custom_field_tag_pair}

    <div class="date">Posted on {entry_date format="%M %d, %Y - %h:%i %A"}</div>
{/exp:profile:view}

{exp:profile:view member_id="{segment_3}" disable="custom_fields"}
    <h3>{title}</h3>
    <div class="date">Posted on {entry_date format="%M %d, %Y - %h:%i %A"}</div>
{/exp:profile:view}

Edit Profile

{exp:profile:edit}

Edit the profile of the current logged in user.

This tag is descendant of the Channel_form (SafeCracker) entry_form tag, and inherits all of its parameters and tags. Please refer to the Channel_form (SafeCracker) User Guide.

Edit Profile loads up the current logged in user's associated entry in your Profile channel. If the user does not currently have an entry in the Profile channel, it will create a new one. You DO NOT have to specify an entry_id, Edit Profile will know which entry to edit.

Within Edit Profile, you can also edit member email, username, screen name, and password. You may choose to omit title and url_title fields. If you do so, these are automatically filled out with the screen name and username respectively.

Parameters

All {exp:channel:form} tag parameters, see Channel_form User Guide

  • return

This is the URL you'd like the site redirected to when the operation is complete. If left blank, the page will not redirect.

return="profile"

If you are using the Allow multiple profiles? setting, and you want your user to add a new profile instead of editing the existing profile, you can add this parameter:

  • new="yes"

For example, you can create a link such as <a href="{path=profile/edit/new}">Add a new profile</a>, and in your profile/edit template:

{exp:profile:edit {if segment_3 == 'new'} new="yes" {/if} return="profile/edit"}

Variables

All {exp:channel:form} tag variables, see Channel_form User Guide

Form Inputs

All {exp:channel:form} tag form inputs, see Channel_form User Guide, plus...

  • username required
<input type="text" name="username" value="{username}" />
  • screen_name optional
<input type="text" name="screen_name" value="{screen_name}" />
  • email required (if Use email as username is set to no)
<input type="text" name="email" value="{email}" />
  • password
  • password_confirm required if changing
  • current_password required if changing and not superadmin
<label>New Password</label>
<input type="password" name="password" value="" />
<label>Confirm New Password</label>
<input type="password" name="password_confirm" value="" />
{!-- superadmins don't have to submit existing password --}
{if logged_in_group_id != 1}
    <label>Your Existing Password (You must submit the current password to update this page)</label>
    <input type="password" name="current_password" value="" />
{/if}
  • url
  • location
  • occupation
  • interests
  • aol_im
  • yahoo_im
  • msn_im
  • icq
  • bio
  • signature
  • your_native_custom_member_field

Example

<html>
<head>
    <link href="{path=css/_ee_saef_css}" type="text/css" rel="stylesheet" media="screen" />
</head>
<body>

{exp:profile:edit return="profile"}
    <fieldset>
        <label>Username</label>
        <input type="text" name="username" value="{username}" />
        <label>Screen Name</label>
        <input type="text" name="screen_name" value="{screen_name}" />
        <label>Email</label>
        <input type="text" name="email" value="{email}" />
    </fieldset>
    <fieldset>
        <p>Leave blank if you do not wish to change it</p>
        <label>New Password</label>
        <input type="password" name="password" value="" />
        <label>Confirm New Password</label>
        <input type="password" name="password_confirm" value="" />
    {!-- superadmins don't have to submit existing password --}
    {if logged_in_group_id != 1}
        <label>Your Existing Password (You must submit the current password to update this page)</label>
        <input type="password" name="current_password" value="" />
    {/if}
    </fieldset>
    <fieldset>
        {custom_fields}
        <p>
            <label for="{field_name}">{if required}* {/if}{field_label}</label>

            {field_instructions}

            {formatting_buttons}

            {if textarea}
                <textarea id="{field_name}" name="{field_name}" dir="{text_direction}" rows="{rows}">{field_data}</textarea>
            {/if}

            {if text}
                <input type="text" dir="{text_direction}" id="{field_name}" name="{field_name}" value="{field_data}" maxlength="{maxlength}" size="50" />
            {/if}

            {if select}
                <select id="{field_name}" name="{field_name}">
                {options}<option value="{option_value}"{selected}>{option_name}</option>{/options}
                </select>
            {/if}

            {if date}
                <input type="text" id="{field_name}" name="{field_name}" value="{field_data}" size="50" />
            {/if}

            {if checkbox}
                {options}<label class="checkbox">{option_value} <input type="checkbox" id="{field_name}" name="{field_name}[]" value="{option_value}"{checked} /></label>{/options}
            {/if}

            {if radio}
                {options}<label class="checkbox">{option_value}<label class="checkbox"> <input type="radio" id="{field_name}" name="{field_name}" value="{option_value}"{checked} /></label>{/options}
            {/if}

            {if file}
                {display_field}
            {/if}

            {if relationship}
                <select id="{field_name}" name="{field_name}">
                {options}<option value="{option_value}"{selected}>{option_name}</option>{/options}
                </select>
            {/if}

            {if multiselect}
                <select id="{field_name}" name="{field_name}[]" multiple="multiple">
                {options}<option value="{option_value}"{selected}>{option_name}</option>{/options}
                </select>
            {/if}
        </p>
        {/custom_fields}
    </fieldset>
    <fieldset>
        <input type="submit" value="Save" />
    </fieldset>
{/exp:profile:edit}
</body>
</html>

Register

{exp:profile:register}

Register a new member while simultaneously creating an entry in the Profile channel.

This tag is shortcut to a Channel_form (SafeCracker) entry_form tag, and inherits all of its parameters and tags. Please refer to the Channel_form User Guide.

This will register a new user and create a new Profile entry for that user. It's a combination of a Channel_form (SafeCracker) publish form and a registration form.

Within Register Profile, you must also input email, email_confirm, username, screen name (optional), password, and password_confirm. You may choose to omit title and url_title fields. If you do so, these are automatically filled out with the screen name and username respectively.

If you are logged in as a superadmin or an admin who has new member registration privileges, you can use this form to manually register new members.

Parameters

All {exp:channel:form} tag parameters, see Channel_form User Guide

NOTE because Profile:Edit has many of the same capabilities as Channel_form (SafeCracker), you can specify a return URL with any of the following constants: ENTRY_ID, URL_TITLE, or MEMBER_ID and those constants will be replaced with the appropriate variables:

return="template_group/template/ENTRY_ID
return="template_group/template/URL_TITLE
return="template_group/template/MEMBER_ID
  • group_id="1"

If you are a logged in admin, you can set the new member's member group with this parameter. You may also use the {exp:profile:member_group_select} tag to output a list of selectable groups. If you use this parameter for newly registering members, any ID that you assign must be an "unlocked" member group in EE's member settings panel.

If you have Email Activation set for registration, you can use this parameter to set the return path after the new member clicks their activation link.

  • activation_return

    {exp:profile:register activation_return="site/profile_activated"}

  • dynamic_screen_name

This parameter will dynamically generate a screen name based on the content of other data fields. It works similarly to Channel_form dynamic_title parameter.

{exp:profile:register dynamic_screen_name="[member_first_name] [member_last_name]" activation_return="site/profile_activated"}

Variables

All {exp:channel:form} tag variables, see Channel_form User Guide, plus...

  • {username}
  • {screen_name}
  • {email}
  • {email_confirm}
  • {if captcha}
  • {captcha}

Form Inputs

All {exp:channel:form} tag form inputs, see Channel_form User Guide, plus...

  • username required
<input type="text" name="username" value="" />
  • screen_name optional
<input type="text" name="screen_name" value="" />
  • email required
  • email_confirm required
<input type="text" name="email" value="" /> <input type="text" name="email_confirm" value="" />
  • password required
  • password_confirm required
<label>Password</label>
<input type="password" name="password" value="" />
<label>Confirm Password</label>
<input type="password" name="password_confirm" value="" />
  • url
  • location
  • occupation
  • interests
  • aol_im
  • yahoo_im
  • msn_im
  • icq
  • bio
  • signature
  • your_native_custom_member_field

Example

<html>
<head>
    <link href="{path=css/_ee_saef_css}" type="text/css" rel="stylesheet" media="screen" />
</head>
<body>
{exp:profile:register id="register" return="profile/edit"}
    <fieldset>
        <label>Username</label>
        <input type="text" name="username" value="{username}" />
        <label>Screen Name</label>
        <input type="text" name="screen_name" value="{screen_name}" />
    </fieldset>
    <fieldset>
        <label>Password</label>
        <input type="password" name="password" value="" />
        <label>Confirm Password</label>
        <input type="password" name="password_confirm" value="" />
    </fieldset>
    <fieldset>
        <label>Email</label>
        <input type="text" name="email" value="{email}" />
        <label>Confirm Email</label>
        <input type="text" name="email_confirm" value="{email_confirm}" />
    </fieldset>
    <fieldset>
        {custom_fields}
        <p>
            <label for="{field_name}">{if required}* {/if}{field_label}</label>

            {field_instructions}

            {formatting_buttons}

            {if textarea}
                <textarea id="{field_name}" name="{field_name}" dir="{text_direction}" rows="{rows}">{field_data}My bio.</textarea>
            {/if}

            {if text}
                <input type="text" dir="{text_direction}" id="{field_name}" name="{field_name}" value="{field_data}" maxlength="{maxlength}" size="50" />
            {/if}

            {if select}
                <select id="{field_name}" name="{field_name}">
                {options}<option value="{option_value}"{selected}>{option_name}</option>{/options}
                </select>
            {/if}

            {if date}
                <input type="text" id="{field_name}" name="{field_name}" value="{field_data}" size="50" />
            {/if}

            {if checkbox}
                {options}<label class="checkbox">{option_value} <input type="checkbox" id="{field_name}" name="{field_name}[]" value="{option_value}"{checked} /></label>{/options}
            {/if}

            {if radio}
                {options}<label class="checkbox">{option_value}<label class="checkbox"> <input type="radio" id="{field_name}" name="{field_name}" value="{option_value}"{checked} /></label>{/options}
            {/if}

            {if file}
                {display_field}
            {/if}

            {if relationship}
                <select id="{field_name}" name="{field_name}">
                {options}<option value="{option_value}"{selected}>{option_name}</option>{/options}
                </select>
            {/if}

            {if multiselect}
                <select id="{field_name}" name="{field_name}[]" multiple="multiple">
                {options}<option value="{option_value}"{selected}>{option_name}</option>{/options}
                </select>
            {/if}
        </p>
        {/custom_fields}
    </fieldset>
    {if captcha}
    <fieldset>
    <p>Please enter the word you see in the image below:</p>
    <p>{captcha}<br />
    <input type="text" name="captcha" value="" /></p>
    </fieldset>
    {/if}
    <fieldset>
        <input type="submit" value="Register" />
    </fieldset>
{/exp:profile:register}
</body>
</html>

Login

{exp:profile:login}

Variables

  • {if auto_login}

Form Inputs

  • username required
<input type="text" name="username" value="" />
  • password required
<input type="password" name="password" value="" />
  • auto_login
{if auto_login}
    <label>Remember Me? <input type="checkbox" name="auto_login" value="1" checked="checked"></label>
{/if}

Example

{exp:profile:login return="profile/edit"}
    <fieldset>
        <label>Username</label>
        <input type="text" name="username" value="{username}">
        <label>Password</label>
        <input type="password" name="password" value="">
        {if auto_login}
        <label>Remember Me? <input type="checkbox" name="auto_login" value="1" checked="checked"></label>
        {/if}
        <input type="submit" value="Login">
    </fieldset>
{/exp:profile:login}
{exp:profile:logout_link}

Logout Link is a single tag that creates a link for your user to logout.

<a href="{exp:profile:logout_link return="profile/register"}">Logout</a>

Parameters

  • return, the url you wish to redirect to after the action is performed.

Forgot Password

{exp:profile:forgot_password}

Parameters

  • return This is the initial URL the member will be directed to after submitting the forgot_password_form. This template should contain a message similar to: A link to reset your password has been sent to the email address you provided.

  • forgot_password_return When the user clicks the link in their email to reset their password, this is the URL they will be directed to. This template should include the rest_password tag.

Form Inputs

  • email required
<input type="text" name="email" value="" />

Example

{exp:profile:forgot_password return="profile/wait_for_email" forgot_password_return="profile/reset_password"}
    <fieldset>
        <label>Email</label>
        <input type="text" name="email" value="{email}">
        <input type="submit" value="Submit">
    </fieldset>
{/exp:profile:forgot_password}

Reset Password

This form allows the member to change their password AFTER having successfully clicked the link sent to their email via the forgot_password tag

Parameters

  • return This is the URL the member will be directed to after submitting this form. This template should contain a message similar to: Your Password has been reset.
{exp:profile:reset_password return="profile/reset_confirmed"}
    <fieldset>
        <label>Password</label>
        <input type="password" name="password" value="">
        <label>Password Confirm</label>
        <input type="password" name="password_confirm" value="">
        <input type="submit" value="Submit">
    </fieldset>
{/exp:profile:reset_password}

Profiles

{exp:profile:profiles}

This tag is only applicable if you are using the Allow multiple profiles? setting.

The Profiles tag allows you to list all the profiles associated with the currently logged in user account. This tag is equivalent to a channel entries tag, and inherits all the tags and parameters of it. For more on the {exp:channel:entries} tag and its parameters and tags, refer to the ExpressionEngine User Guide.

This tag is mostly useful when pairing with CartThrob, to select one of multiple shipping addresses.

Parameters

All {exp:channel:entries} tag parameters, see ExpressionEngine User Guide, except dynamic (which is automatically set to "no"), channel (which automatically uses your Profile channel) and entry_id.

Variables

All {exp:channel:entries} tag variables, see ExpressionEngine User Guide.

Examples

Choose a shipping address:

{exp:profile:profiles}
{!--if they only have one or no address, go straight to checkout--}
{if total_results < 2}{redirect="cart/checkout"}{/if}
{if count == 1}
<ul>
{/if}

    <li><a href="{exp:profile:set_active_profile_link return="cart/checkout" entry_id="{entry_id}"}">{title}</a></li>

{if count == total_results}
</ul>
{/if}
{/exp:profile:profiles}
{exp:profile:set_active_profile_link}

This tag is only applicable if you are using the Allow multiple profiles? setting.

Set Active Profile Link allows you to choose which of your multiple profiles is the currently active one. The chosen active profile will be shown in the view and edit tags, as well as the member data loaded into CartThrob.

Parameters

  • return, the url you wish to redirect to after the action is performed.

  • entry_id, the entry_id of the profile you wish to set as the active profile.

Examples

<a href="{exp:profile:set_active_profile_link return="cart/checkout" entry_id="123"}">Set As Active</a>

Is Active Profile

{exp:profile:is_active_profile}

This tag is only applicable if you are using the Allow multiple profiles? setting.

This tag is to be use in conditionals and tells whether or not the specified entry_id is the currently active profile.

Parameters

  • entry_id, the entry_id of the profile to check.

Examples

{if {exp:profile:is_active_profile entry_id="123"}}
    Active Profile: 123
{/if}

Member Group Select

{exp:profile:member_group_select}

This tag is used to create a Member Group dropdown in the profile:register form. This is useful for allowing new members to choose from "unlocked" groups, or for allowing admins to choose from existing member groups when creating a new member.

To use this tag, you must either:

  1. if you are logged in and creating a member, you must either be a SuperAdmin or your administrative group must be allowed to assign member groups in the Profile:Edit settings,

OR

  1. you must be logged out / newly registering member. Only member groups that are "unlocked" in ExpressionEngine's member group settings will be selectable. If no member groups are unlocked, the default member group for new members will be shown.

Parameters

  • id, the id attribute of the <select> element
  • class, the class attribute of the <select> element
  • onchange, the onchange attribute of the <select> element
  • extra, any extra attributes of <select> element
  • member_groups, a pipe separated list of member group IDs, ie. 1|2|3 (if you are showing this to newly registering members, only unlocked member groups will be displayed)
  • add_blank, set a label to add a blank option to the <select> element

Examples

{if logged_in}
    {exp:profile:register}
    ...

        {exp:profile:member_group_select member_groups="5|6|7"}

    ...
    {/exp:profile:register}
{/if}

You may also use it as a tag pair.

{exp:profile:member_group_select}
    <option value="{option_value}"{if selected} selected="selected"{/if}>{option_name}</option>
{/exp:profile:member_group_select}

Your custom field

You can also specify any of your custom fields as a tag to get data for a specific member id from their primary profile.

Parameters

  • member_id, the member_id of the profile to check.

Examples

{exp:profile:some_wacky_field member_id="{author_id}"}

Errors

When a Profile:Edit form encounters errors, it will display them using the ExpressionEngine User Message Template. If you specify error_handling="inline", instead of being shown the standard user message screen, your form will be rendered again, only this time your errors will be available as template tags.

When using inline error handling with edit or register, please refer to the Channel_form User Guide on how Channel_form deals with inline errors.

When using login or forgot_password, you have the following variables, tag pairs and conditionals:

Conditionals

  • {if field_errors_exist}

This is true if you have errors that are associated with a specific field.

  • {if global_errors_exist}

This is true if you have errors that are not associated with a specific field.

  • {if errors_exist}

This is true if you have any global or field errors.

  • {if error:your_field_name}

This is true if you have an error associated with this particular field.

Variables

  • {error:your_field_name}*

An error message associated with a particular field, like {error:username}.

Tag Pairs

  • {field_errors}{/field_errors}
  • {global_errors}{/global_errors}
  • {errors}{/errors}

These tag pairs contain the following tags:

  • {error}
  • {field}
  • {if global_error}
  • {if field_error}
  • {error:count}
  • {error:total_results}
  • {if first_error}
  • {if last_error}

Global Variables

When you have the "Add profile tags as global variables?" setting set to yes, Profile:Edit will add global variables for the current user's profile to your templates. It is the rough equivalent of using an {exp:profile:view} tag. These global variables use a profile: prefix. As global variables, these tags are parsed early, and are available in all your snippets and embeds.

{profile:title}

{profile:url_title}

{profile:your_custom_field}

{profile:your_custom_tag_pair_field}
    {column_a} {column_b}
{/profile:your_custom_tag_pair_field}

{exp:third_party_addon entry_id="{profile:entry_id}"}

Ajax

All Profile:Edit forms return a JSON response automatically when an AJAX request is detected, whether you are using the jQuery Form plugin, or rolling your own AJAX form submission.

When using edit or register, you will recieve the Channel_form JSON response:

A successful response

{
    "success": 1,
    "errors": [],
    "field_errors": [],
    "entry_id": "323",
    "url_title": "some_url_title",
    "channel_id": "3"
}

A failed response

{
    "success": 0,
    "errors": ["You are not authorized to post in this channel"],
    "field_errors": {
        "email": "You must submit an email address",
        "username": "You must submit a username"
    },
    "entry_id": "323",
    "url_title": "some_url_title",
    "channel_id": "3"
}

When using login or forgot_password, you will recieve a simpler response in this format:

A successful response

{
    "success": true,
    "errors": {}
}

A failed response

{
    "success": false,
    "errors": {
        "0": "You must submit your username and password"
    }
}

Extension Hooks

profile_edit_start

$this->EE->extensions->call('profile_edit_start', $member_id, $is_admin);

profile_edit_end

$this->EE->extensions->call('profile_edit_end', $member_id, $member_data, $entry_data, $success, $is_admin);

profile_register_start

$this->EE->extensions->call('profile_register_start', $is_admin);

profile_register_end

$this->EE->extensions->call('profile_register_start', $member_id, $member_data, $entry_data, $success, $is_admin);

profile_login_start

$this->EE->extensions->call('profile_login_start');

profile_login_end

$this->EE->extensions->call('profile_login_end');

Using with CartThrob eCommerce

Profile:Edit tightly integrates with CartThrob eCommerce. Setting it up is simple.

Setup

  1. Make sure you have Profile:Edit configured
  2. Go to CartThrob Settings » Members. It will automatically recognize that Profile:Edit has been installed and display profile channel fields in the dropdown menus.
  3. From each drop-down, select each profile channel field that relates to a CartThrob customer member data field.

Once those profile fields are mapped, logged in customer's data will be automatically read from saved profile data and available as customer info, and any modified data that a customer submits will be used to automatically edit their profile. Once configured, you do not need to add any Profile:Edit tags to any CartThrob form, simply use CartThrob's customer_info tag to display saved customer data.

(Added in CartThrob 2.0507) If you need to go beyond CartThrob's standard customer info tags, you can also push data into Profile:Edit using the CartThrob's custom_data system. Anywhere in CartThrob's forms, you can save custom_data, for instance:

{exp:cartthrob:save_customer_info_form return=""}
    <input type="text" value="male" name="custom_data[gender]" /> 
    <input type="submit" name="Submit" /> 
{/exp:cartthrob:save_customer_info_form}

The example form makes it possible to submit gender data via an input field. If you have a matching field in your Member Profiles channel with the short_name of "gender" the custom data will be saved to that field. So, in the example the gender: "male" will be saved to a field called "gender" in the Member Profiles channel entry.

Administrators

What is an Admin? An admin is a member of a user group that has the following privileges found in EE’s member group settings:

  1. use/edit the Profiles channel,
  2. to edit other user’s entries,
  3. to change author on entries,
  4. and to allow member registrations.

If you give a member group the above permissions, they should be successfully able to edit user profiles using Profile:Edit

Troubleshooting

Error message: You are not authorized to perform this action

  • Go to EE settings > members > member groups. Click on a member group. Make sure its "channel assignment" includes your member channel. Repeat for additional member groups.
  • Go to EE settings > members > preferences. Make sure you have "allow new user registrations" set to "yes"

When site is configured to use "email address as username" then user changes email address, and can not log in using new email address

  • Go to EE settings > admin > security and privacy > security and sessions > allow members to change username
  • set this setting to "yes"

Change Log

V1.2.1

  • FIXED: PHP error in the utilities tab caused by not having any custom member fields set.
  • FIXED: Changed calls from the channel_form library's removed encrypt_input and decrypt_input to the encrypt library's encode and decode methods.
  • REMOVED: A deprecated function in the Form_builder library.
  • UPDATED: Added a class check before loading the channel_form_lib

V1.2.0

  • ADDED: P:E now registers as a CartThrob add-on.
  • ADDED: setting for "can_admin_members" so that non-super admins can also edit entries by ID and member data even if they aren't set in EE's backend with member editing priveleges
  • FIXED: issue where non-super admins with channel editing privileges could not edit a member's entry by its entry id.

V1.1.9

  • FIXED: issue where a PHP error would output if comments were not set up on the system, and email address was being changed.
  • FIXED: changed a few references from safecracker to channel form

V1.1.8

  • CHANGED: Assigning group_id via self-activation via email is now possible.

V1.1.7

  • UPDATED: Made it so that this version can run in EITHER EE 2.6 or EE 2.7 with channel form or safecracker
  • UPDATED: REmoved some deprecated calls in the Control Panel.
  • FIXED: issue with creating profiles for existing members when used under secure_forms
  • FIXED: some issues with "white screen of death" during member creation

V1.1.6

  • FIXED: Removed a check for the safecracker module during installation. Safecracker is now channel_form, which is now a library for the channel module

V1.1.5

  • UPDATED: Works with EE 2.7 and REQUIRES this version due to the change in SafeCracker (Now Channel_form)

V1.1.4

  • UPDATED: Is now compatible with EE's updated Forgot Password methodology (Please see readme.txt included with docs for more on updating to take advantage of this update/fix)

V1.1.1

  • Major EE 2.6x Update with variety of fixes
  • FIXED: Issue where new registrations were creating two profiles

v1.0.7

  • ADDED: global profile template variables
  • ADDED: configure whether to require password_confirm, current_password, and email_confirm
  • ADDED: dynamic_screen_name parameter
  • FIXED: bug where native custom member profile fields were not getting saved
  • FIXED: bug where template installer threw file_exists errors
  • FIXED: bug where you could not edit profiles without it throwing current password errors
  • FIXED: bug in module installation causing php errors
  • FIXED: bug where custom fields format was automatically set to NULL

v1.0.6

  • ADDED: ability for admins to register new members with the register tag
  • ADDED: "Back to Member Settings" button to edit entry screen in CP
  • ADDED: member_group_select tag for admin registrations
  • FIXED: bug where channel:entries caching could show wrong member info with profile:view tag
  • FIXED: bug where profile creation didn't check to see if the provided member_id actually exists
  • FIXED: bug where edit/view tags did not verify member_id parameter
  • FIXED: bug where active record calls in profile_model could cause SQL errors
  • FIXED: bug where deleting member resulted in PHP error
  • CHANGED: register and edit to accept either email or username when using "Email as Username" setting

v1.0.5

  • ADDED: profile link to native member page
  • ADDED: ability to edit/register native member fields
  • ADDED: setting to log in automatically after email activation
  • ADDED: relevant native member prefs to settings screen
  • ADDED: forgot_password_return param to set the return url path after user clicks reset password link in email
  • ADDED: activation_return param to profile:register to set the return url path after user clicks activation link in email
  • FIXED: bug where forgot_password did not function properly if member module was uninstalled
  • ADDED: import utilities (create profile entries for all users, associate existing entries with members, migrate native member fields to profile entries)
  • ADDED: ability for admins to register members from the front-end using profile:register
  • CHANGED: error message when user omits the current_password form input in profile:edit
  • ADDED: profile entry gets created when admin registers a new member in the CP
  • FIXED: bug where module uninstall did not delete extensions

v1.0.4

  • FIXED: bug where Form_builder library caused PHP error due to conflict with CartThrob

v1.0.3

  • FIXED: bug where registration would fail when using self-activation or manual activation

v1.0.2

  • ADDED: NSM Addon Updater compatibility
  • ADDED: requires config encryption_key before you can setup
  • FIXED: bug where if member whose ID is 1 already had a profile, register form would throw an error
  • FIXED: missing lang keys
  • FIXED: changed from using member id 1 by default, it now uses oldest superadmin
  • FIXED: added error message if register form is submitted and member registrations are turned off

v1.0.1

  • initial release