├── languages ├── gravityformsuserregistration-ar.mo ├── gravityformsuserregistration-ca.mo ├── gravityformsuserregistration-fi.mo ├── gravityformsuserregistration-ja.mo ├── gravityformsuserregistration-da_DK.mo ├── gravityformsuserregistration-de_DE.mo ├── gravityformsuserregistration-en_AU.mo ├── gravityformsuserregistration-en_GB.mo ├── gravityformsuserregistration-es_ES.mo ├── gravityformsuserregistration-fr_CA.mo ├── gravityformsuserregistration-fr_FR.mo ├── gravityformsuserregistration-he_IL.mo ├── gravityformsuserregistration-hi_IN.mo ├── gravityformsuserregistration-hu_HU.mo ├── gravityformsuserregistration-it_IT.mo ├── gravityformsuserregistration-nb_NO.mo ├── gravityformsuserregistration-nl_BE.mo ├── gravityformsuserregistration-nl_NL.mo ├── gravityformsuserregistration-pt_BR.mo ├── gravityformsuserregistration-pt_PT.mo ├── gravityformsuserregistration-ru_RU.mo ├── gravityformsuserregistration-sv_SE.mo ├── gravityformsuserregistration-tr_TR.mo ├── gravityformsuserregistration-zh_CN.mo ├── gravityformsuserregistration-zh_HK.mo ├── gravityformsuserregistration-zh_TW.mo ├── gravityformsuserregistration-de_DE_formal.mo └── gravityformsuserregistration.pot ├── composer.json ├── css ├── feed_settings.min.css ├── feed_settings.css ├── widget_editor.min.css └── widget_editor.css ├── images ├── menu-icon.svg └── pending-menu-icon.svg ├── includes ├── deprecated.php ├── class-gf-user-registration-dynamic-hook.php ├── class-gf-page-choice-walker.php ├── class-gf-field-username.php ├── class-gf-pending-activations-list.php ├── activate.php ├── signups.php ├── class-gf-login-widget.php └── class-gf-pending-activations.php ├── js ├── feed_settings.min.js ├── widget_editor.min.js ├── feed_settings.js └── widget_editor.js ├── userregistration.php └── change_log.txt /languages/gravityformsuserregistration-ar.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-ar.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-ca.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-ca.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-fi.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-fi.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-ja.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-ja.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-da_DK.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-da_DK.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-de_DE.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-de_DE.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-en_AU.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-en_AU.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-en_GB.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-en_GB.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-es_ES.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-es_ES.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-fr_CA.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-fr_CA.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-fr_FR.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-fr_FR.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-he_IL.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-he_IL.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-hi_IN.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-hi_IN.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-hu_HU.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-hu_HU.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-it_IT.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-it_IT.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-nb_NO.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-nb_NO.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-nl_BE.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-nl_BE.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-nl_NL.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-nl_NL.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-pt_BR.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-pt_BR.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-pt_PT.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-pt_PT.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-ru_RU.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-ru_RU.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-sv_SE.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-sv_SE.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-tr_TR.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-tr_TR.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-zh_CN.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-zh_CN.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-zh_HK.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-zh_HK.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-zh_TW.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-zh_TW.mo -------------------------------------------------------------------------------- /languages/gravityformsuserregistration-de_DE_formal.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-premium/gravityformsuserregistration/HEAD/languages/gravityformsuserregistration-de_DE_formal.mo -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wp-premium/gravityformsuserregistration", 3 | "type": "wordpress-plugin", 4 | "autoload": { 5 | "classmap": [ 6 | "." 7 | ] 8 | } 9 | } -------------------------------------------------------------------------------- /css/feed_settings.min.css: -------------------------------------------------------------------------------- 1 | #sendEmailValueSpan select{width:auto}#userActivationValueSpan select{width:auto}#gaddon-setting-checkbox-choice-sendemailenable,#gaddon-setting-checkbox-choice-useractivationenable{margin-right:0} -------------------------------------------------------------------------------- /css/feed_settings.css: -------------------------------------------------------------------------------- 1 | 2 | #sendEmailValueSpan select { 3 | width: auto; 4 | } 5 | 6 | #userActivationValueSpan select { 7 | width: auto; 8 | } 9 | 10 | #gaddon-setting-checkbox-choice-sendemailenable, 11 | #gaddon-setting-checkbox-choice-useractivationenable { 12 | margin-right: 0; 13 | } -------------------------------------------------------------------------------- /images/menu-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /css/widget_editor.min.css: -------------------------------------------------------------------------------- 1 | .gf_login_widget_editor{margin-left:-13px;margin-right:-13px}.gf_login_widget_editor .tabs{border-bottom:1px solid #e5e5e5;margin:0;padding:.2em 0 0}.gf_login_widget_editor .tabs a{background:#fafafa;border:1px solid #e5e5e5;color:#444;display:inline-block;line-height:2.538461538em;margin-bottom:-1px;padding:0 8px;text-decoration:none}.gf_login_widget_editor .tabs a:first-child{margin-left:13px}.gf_login_widget_editor .tabs a.active{background:#fff;border-bottom-color:#fff}.gf_login_widget_editor .tab-content{display:none;padding:1em 1.4em}.gf_login_widget_links{padding:.25em 0}.gf_login_widget_links tr td{padding:.25em 0}body.wp-customizer .gf_login_widget_editor{margin-left:-8px;margin-right:-8px}body.wp-customizer .gf_login_widget_editor .tabs a:first-child{margin-left:8px} -------------------------------------------------------------------------------- /includes/deprecated.php: -------------------------------------------------------------------------------- 1 | get_feeds' ); 7 | 8 | return gf_user_registration()->get_feeds( $form_id ); 9 | } 10 | 11 | public static function get_feeds_by_form( $form_id, $is_active = false ) { 12 | 13 | _deprecated_function( __FUNCTION__, '3.0', 'gf_user_registration()->get_feeds' ); 14 | 15 | return gf_user_registration()->get_feeds( $form_id ); 16 | } 17 | 18 | public static function get_user_by_entry_id( $entry_id ) { 19 | 20 | _deprecated_function( __FUNCTION__, '3.0', 'gf_user_registration()->get_user_by_entry_id' ); 21 | 22 | return gf_user_registration()->get_user_by_entry_id( $entry_id ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /js/feed_settings.min.js: -------------------------------------------------------------------------------- 1 | !function(s){s(document).ready(function(){!function(){var n=this;n.init=function(){n.$password=s("#password"),n.$sendEmail=s("#sendemailenable"),n.$sendEmailLocked=s("#sendEmailLocked"),s(".gfur-cs-checkbox").on("change",function(){var a=s(this).attr("name"),e=s("#{0}ValueSpan, #{1}ValueSpan".format(a,a.replace("Enable",""))),i=s('label[for="{0}"]'.format(s(this).attr("id")));s(this).siblings("input[type=hidden]").val(s(this).prop("checked")?1:0),s(this).is(":checked")?(i.find("span").html(s(this).attr("data-enabledLabel")),e.show()):(i.find("span").html(s(this).attr("data-label")),e.hide())}),n.$password.change(function(){n.toggleSendEmail()}),"email_link"!==n.$password.val()&&"generatepass"!==n.$password.val()||n.toggleSendEmail()},n.toggleSendEmail=function(){var a="email_link"===n.$password.val(),e=n.$sendEmail.is(":checked")&&!n.$sendEmail.is(":disabled"),i=a;n.$sendEmail.data("was-checked",e).prop("disabled",a).prop("checked",i).change(),a?n.$sendEmailLocked.show():n.$sendEmailLocked.hide()},this.init()}()})}(jQuery); -------------------------------------------------------------------------------- /css/widget_editor.css: -------------------------------------------------------------------------------- 1 | .gf_login_widget_editor { 2 | margin-left: -13px; 3 | margin-right: -13px; 4 | } 5 | 6 | .gf_login_widget_editor .tabs { 7 | border-bottom: 1px solid #e5e5e5; 8 | margin: 0; 9 | padding: .2em 0 0; 10 | } 11 | 12 | .gf_login_widget_editor .tabs a { 13 | background: #fafafa; 14 | border: 1px solid #e5e5e5; 15 | color: #444; 16 | display: inline-block; 17 | line-height: 2.538461538em; 18 | margin-bottom: -1px; 19 | padding: 0 8px; 20 | text-decoration: none; 21 | } 22 | 23 | .gf_login_widget_editor .tabs a:first-child { 24 | margin-left: 13px; 25 | } 26 | 27 | .gf_login_widget_editor .tabs a.active { 28 | background: #fff; 29 | border-bottom-color: #fff; 30 | } 31 | 32 | .gf_login_widget_editor .tab-content { 33 | display: none; 34 | padding: 1em 1.4em; 35 | } 36 | 37 | .gf_login_widget_links { 38 | padding: .25em 0; 39 | } 40 | 41 | .gf_login_widget_links tr td { 42 | padding: .25em 0; 43 | } 44 | 45 | /* Customizer styles */ 46 | body.wp-customizer .gf_login_widget_editor { 47 | margin-left: -8px; 48 | margin-right: -8px; 49 | } 50 | 51 | body.wp-customizer .gf_login_widget_editor .tabs a:first-child { 52 | margin-left: 8px; 53 | } -------------------------------------------------------------------------------- /images/pending-menu-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /includes/class-gf-user-registration-dynamic-hook.php: -------------------------------------------------------------------------------- 1 | values = $values; 36 | 37 | if ( $class ) { 38 | $this->class = $class; 39 | } 40 | } 41 | 42 | /** 43 | * Runs the hook callback function. 44 | * 45 | * @since 3.9.4 46 | * 47 | * @param string $callback The name of the method. 48 | * @param array $filter_args The args passed by the filter. 49 | * 50 | * @return mixed 51 | */ 52 | public function __call( $callback, $filter_args ) { 53 | 54 | $args = array( $filter_args, $this->values ); 55 | 56 | if ( $this->class ) { 57 | if ( is_callable( array( $this->class, $callback ) ) ) { 58 | return call_user_func_array( array( $this->class, $callback ), $args ); 59 | } 60 | } 61 | if ( is_callable( $callback ) ) { 62 | return call_user_func_array( $callback, $args ); 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /js/widget_editor.min.js: -------------------------------------------------------------------------------- 1 | !function(d){d(document).ready(function(){function c(t){var a=[],e=t.prev();d("tr:not([data-repeater])",t).each(function(){d("input",this).each(function(){var t=d(this).attr("data-name").split(/[[\]]{1,2}/);void 0===a[t[3]]&&(a[t[3]]={}),a[t[3]][t[4]]=d(this).val()})}),e.val(JSON.stringify(a)).trigger("change")}d(document).on("click",".gf_login_widget_editor .tabs a",function(t){t.preventDefault();var a=d(this).parent().parent(),e=d(this).parent(),n=d(this).attr("data-tab");e.find("a").removeClass("active"),d(this).addClass("active"),a.find('.tab-content:not( [data-tab="'+n+'"] )').hide(),a.find('.tab-content[data-tab="'+n+'"]').show(),a.find('input[data-type="active_view"]').val(n)}),d(document).on("click",".gf_login_widget_add_link",function(t){t.preventDefault();var a=d(this).prev(),e=d("tr[data-repeater]",a);d("tr.new",a).removeClass("new");var n=0;d("tr:not([data-repeater])",a).each(function(){var t=d("td:first-child input",this).attr("data-name").match(/\[(\d*)\]/gim)[1];t=parseInt(t.replace("[","").replace("]","")),n'+e.html()+""),r=d("input.link-text",i),o=d("input.link-url",i);r.attr("data-name",r.attr("data-name")+"["+n+"][text]"),o.attr("data-name",o.attr("data-name")+"["+n+"][url]"),i.insertBefore(e),c(a)}),d(document).on("click",'.gf_login_widget_links a[data-action="delete-link"]',function(t){t.preventDefault();var a=d(this).closest("tr"),e=d(this).closest("table");a.remove(),0===d("tr:not([data-repeater])",e).length&&e.next().click(),c(e)}),d(document).on("change",".gf_login_widget_links input",function(){c(d(this).closest("table"))}),d(document).on("change",".gf_login_widget_registrationpage",function(){"custom"===d(this).val()?d(this).next("table").show():d(this).next("table").hide()})})}(jQuery); -------------------------------------------------------------------------------- /js/feed_settings.js: -------------------------------------------------------------------------------- 1 | ( function( $ ) { 2 | 3 | var GFURFeedSettings = function() { 4 | 5 | var self = this; 6 | 7 | self.init = function() { 8 | 9 | self.$password = $( '#password' ); 10 | self.$sendEmail = $( '#sendemailenable' ); 11 | self.$sendEmailLocked = $( '#sendEmailLocked' ); 12 | 13 | $( '.gfur-cs-checkbox' ).on( 'change', function() { 14 | 15 | var name = $( this ).attr( 'name' ), 16 | $select = $( '#{0}ValueSpan, #{1}ValueSpan'.format( name, name.replace( 'Enable', '' ) ) ), 17 | $label = $( 'label[for="{0}"]'.format( $( this ).attr( 'id' ) ) ); 18 | 19 | // Set hidden input value for Checkbox. 20 | $( this ).siblings( 'input[type=hidden]' ).val( $( this ).prop( 'checked' ) ? 1 : 0 ); 21 | 22 | if( $( this ).is( ':checked' ) ) { 23 | $label.find( 'span' ).html( $( this ).attr( 'data-enabledLabel' ) ); 24 | $select.show(); 25 | } else { 26 | $label.find( 'span' ).html( $( this ).attr( 'data-label' ) ); 27 | $select.hide(); 28 | } 29 | 30 | } ); 31 | 32 | self.$password.change( function() { 33 | self.toggleSendEmail(); 34 | } ); 35 | 36 | if( self.$password.val() === 'email_link' || /* deprecated */ self.$password.val() === 'generatepass' ) { 37 | self.toggleSendEmail(); 38 | } 39 | 40 | }; 41 | 42 | self.toggleSendEmail = function() { 43 | 44 | var isEmailLink = self.$password.val() === 'email_link', 45 | wasChecked = self.$sendEmail.is( ':checked' ) && ! self.$sendEmail.is( ':disabled' ), 46 | isChecked = isEmailLink; 47 | 48 | self.$sendEmail 49 | .data( 'was-checked', wasChecked ) 50 | .prop( 'disabled', isEmailLink ) 51 | .prop( 'checked', isChecked ) 52 | .change(); 53 | 54 | if( isEmailLink ) { 55 | self.$sendEmailLocked.show(); 56 | } else { 57 | self.$sendEmailLocked.hide(); 58 | } 59 | 60 | }; 61 | 62 | this.init(); 63 | 64 | }; 65 | 66 | $( document ).ready( function() { 67 | 68 | GFURFeedSettings(); 69 | 70 | } ); 71 | 72 | } )( jQuery ); -------------------------------------------------------------------------------- /includes/class-gf-page-choice-walker.php: -------------------------------------------------------------------------------- 1 | post_title ) { 46 | $page->post_title = sprintf( __( '#%d (no title)' ), $page->ID ); 47 | } 48 | 49 | if ( empty( $output ) ){ 50 | $output = array(); 51 | } 52 | $output[] = array( 53 | 'label' => $indent . $page->post_title, 54 | 'value' => $page->ID 55 | ); 56 | 57 | } 58 | 59 | /** 60 | * @see Walker::end_el() 61 | * @since 2.1.0 62 | * 63 | * @param string $output Passed by reference. Used to append additional content. 64 | * @param object $page Page data object. Not used. 65 | * @param int $depth Depth of page. Not Used. 66 | * @param array $args 67 | */ 68 | public function end_el( &$output, $page, $depth = 0, $args = array() ) { } 69 | 70 | } -------------------------------------------------------------------------------- /userregistration.php: -------------------------------------------------------------------------------- 1 | get_login_html() 81 | * 82 | * @param array $args Login form arguments. 83 | * 84 | * @return string The login form HTML 85 | */ 86 | function gf_user_registration_login_form( $args = array() ) { 87 | return gf_user_registration()->get_login_html( $args ); 88 | } 89 | -------------------------------------------------------------------------------- /includes/class-gf-field-username.php: -------------------------------------------------------------------------------- 1 | type ) { 24 | return $field_groups; 25 | } 26 | } 27 | } 28 | 29 | $new_button = $this->get_form_editor_button(); 30 | if ( ! empty( $new_button ) ) { 31 | foreach ( $field_groups as &$group ) { 32 | if ( $group['name'] == $new_button['group'] ) { 33 | 34 | // Prepare username button. 35 | $username_button = array( 36 | 'value' => $new_button['text'], 37 | 'class' => 'button', 38 | 'data-type' => $this->type, 39 | 'onclick' => "StartAddField('{$this->type}');", 40 | 'onkeypress' => "StartAddField('{$this->type}');", 41 | 'text' => $this->get_form_editor_field_title(), 42 | 'data-icon' => empty( $new_button['icon'] ) ? $this->get_form_editor_field_icon() : $new_button['icon'], 43 | 'data-description' => empty( $new_button['description'] ) ? $this->get_form_editor_field_description() : $new_button['description'], 44 | ); 45 | 46 | // Get index of email button. 47 | foreach ( $group['fields'] as $i => $field ) { 48 | if ( 'email' === $field['data-type'] ) { 49 | $email_button = $field; 50 | $email_index = $i; 51 | } 52 | } 53 | 54 | // Insert username button after email button. 55 | array_splice( $group['fields'], $email_index+1, 0, array( $username_button ) ); 56 | 57 | // Remove email button. 58 | unset( $group['fields'][ $email_index ] ); 59 | 60 | // Insert email button after password button. 61 | array_splice( $group['fields'], $email_index+2, 0, array( $email_button ) ); 62 | 63 | break; 64 | } 65 | } 66 | } 67 | 68 | return $field_groups; 69 | } 70 | 71 | /** 72 | * Return the field title. 73 | * 74 | * @access public 75 | * @return string 76 | */ 77 | public function get_form_editor_field_title() { 78 | return esc_attr__( 'Username', 'gravityformsuserregistration' ); 79 | } 80 | 81 | /** 82 | * Returns the field's form editor description. 83 | * 84 | * @since 4.5 85 | * 86 | * @return string 87 | */ 88 | public function get_form_editor_field_description() { 89 | return esc_attr__( 'Allows users to choose their own username when registering a new account.', 'gravityformsuserregistration' ); 90 | } 91 | 92 | /** 93 | * Returns the field's form editor icon. 94 | * 95 | * This could be an icon url or a dashicons class. 96 | * 97 | * @since 4.5 98 | * 99 | * @return string 100 | */ 101 | public function get_form_editor_field_icon() { 102 | return gf_user_registration()->get_base_url() . '/images/menu-icon.svg'; 103 | } 104 | 105 | /** 106 | * Return the button for the form editor. 107 | * 108 | * @sicne unknown 109 | * @since 4.5 Added icon and description to button array. 110 | * 111 | * @access public 112 | * @return array 113 | */ 114 | public function get_form_editor_button() { 115 | return array( 116 | 'group' => 'advanced_fields', 117 | 'text' => $this->get_form_editor_field_title(), 118 | 'icon' => $this->get_form_editor_field_icon(), 119 | 'description' => $this->get_form_editor_field_description(), 120 | ); 121 | } 122 | 123 | /** 124 | * Include the script to set the default label for new fields. 125 | * 126 | * @return string 127 | */ 128 | public function get_form_editor_inline_script_on_page_render() { 129 | return sprintf( "function SetDefaultValues_%s(field) {field.label = '%s';}", $this->type, $this->get_form_editor_field_title() ) . PHP_EOL; 130 | } 131 | 132 | } 133 | 134 | GF_Fields::register( new GF_Field_Username() ); -------------------------------------------------------------------------------- /js/widget_editor.js: -------------------------------------------------------------------------------- 1 | ( function( $ ) { 2 | 3 | $( document ).ready( function() { 4 | 5 | // Toggle editor tabs. 6 | $( document ).on( 'click', '.gf_login_widget_editor .tabs a', function( e ) { 7 | 8 | e.preventDefault(); 9 | 10 | // Get target tab. 11 | var widgetForm = $( this ).parent().parent(), 12 | tabsNav = $( this ).parent(), 13 | targetTab = $( this ).attr( 'data-tab' ); 14 | 15 | // Switch active tab class. 16 | tabsNav.find( 'a' ).removeClass( 'active' ); 17 | $( this ).addClass( 'active' ); 18 | 19 | // Switch active tab. 20 | widgetForm.find( '.tab-content:not( [data-tab="' + targetTab + '"] )' ).hide(); 21 | widgetForm.find( '.tab-content[data-tab="' + targetTab + '"]' ).show(); 22 | 23 | // Update active view setting. 24 | widgetForm.find( 'input[data-type="active_view"]' ).val( targetTab ); 25 | 26 | } ); 27 | 28 | // Add logged in link 29 | $( document ).on( 'click', '.gf_login_widget_add_link', function( e ) { 30 | 31 | e.preventDefault(); 32 | 33 | var tableElement = $( this ).prev(), 34 | repeatTemplate = $( 'tr[data-repeater]', tableElement ); 35 | 36 | /* Remove the new class from the current new row. */ 37 | $( 'tr.new', tableElement ).removeClass( 'new' ); 38 | 39 | /* Get the index for the new item. */ 40 | var index = 0; 41 | $( 'tr:not([data-repeater])', tableElement ).each( function() { 42 | 43 | var inputName = $( 'td:first-child input', this ).attr( 'data-name' ), 44 | regex = /\[(\d*)\]/gmi, 45 | inputIndex = inputName.match( regex )[1]; 46 | 47 | inputIndex = parseInt( inputIndex.replace( '[', '' ).replace( ']', '' ) ); 48 | 49 | if ( inputIndex > index ) { 50 | index = inputIndex; 51 | } 52 | 53 | } ); 54 | index++; 55 | 56 | /* Get the HTML for the new row. */ 57 | var newRow = $( '' + repeatTemplate.html() + '' ); 58 | 59 | /* Add the index to each input field. */ 60 | var linkText = $( 'input.link-text', newRow ), 61 | linkURL = $( 'input.link-url', newRow ); 62 | 63 | linkText.attr( 'data-name', linkText.attr( 'data-name' ) + '[' + index + '][text]' ); 64 | linkURL.attr( 'data-name', linkURL.attr( 'data-name' ) + '[' + index + '][url]' ); 65 | 66 | /* Insert the new row before the repeater row. */ 67 | newRow.insertBefore( repeatTemplate ); 68 | 69 | update_widget_links( tableElement ); 70 | 71 | } ); 72 | 73 | // Delete logged in link 74 | $( document ).on( 'click', '.gf_login_widget_links a[data-action="delete-link"]', function( e ) { 75 | 76 | e.preventDefault(); 77 | 78 | var linkRow = $( this ).closest( 'tr' ), 79 | tableElement = $( this ).closest( 'table' ); 80 | 81 | linkRow.remove(); 82 | 83 | if ( $( 'tr:not([data-repeater])', tableElement ).length === 0 ) { 84 | tableElement.next().click(); 85 | } 86 | 87 | update_widget_links( tableElement ); 88 | 89 | } ); 90 | 91 | // Update logged in links when input changes 92 | $( document ).on( 'change', '.gf_login_widget_links input', function() { 93 | 94 | update_widget_links( $( this ).closest( 'table' ) ); 95 | 96 | } ); 97 | 98 | // Toggle custom Registration links inputs 99 | $( document ).on( 'change', '.gf_login_widget_registrationpage', function() { 100 | 101 | if ( $( this ).val() === 'custom' ) { 102 | $( this ).next( 'table' ).show(); 103 | } else { 104 | $( this ).next( 'table' ).hide(); 105 | } 106 | 107 | } ); 108 | 109 | // Push logged in links to hidden input element 110 | function update_widget_links( table ) { 111 | 112 | var links = [], 113 | jsonContainer = table.prev(); 114 | 115 | $( 'tr:not([data-repeater])', table ).each( function() { 116 | 117 | $( 'input', this ).each( function() { 118 | 119 | var name = $( this ).attr( 'data-name' ), 120 | explodedName = name.split( /[[\]]{1,2}/ ); 121 | 122 | if ( links[ explodedName[3] ] === undefined ) { 123 | links[ explodedName[3] ] = {}; 124 | } 125 | 126 | links[ explodedName[3] ][ explodedName[4] ] = $( this ).val(); 127 | 128 | } ); 129 | 130 | } ); 131 | 132 | jsonContainer.val( JSON.stringify( links ) ).trigger( 'change' ); 133 | 134 | } 135 | 136 | } ); 137 | 138 | } )( jQuery ); -------------------------------------------------------------------------------- /includes/class-gf-pending-activations-list.php: -------------------------------------------------------------------------------- 1 | items = array(); 15 | $this->_column_headers = array( 16 | array( 17 | 'cb' => '', 18 | 'user_login' => __( 'Username', 'gravityformsuserregistration' ), 19 | 'email' => __( 'Email', 'gravityformsuserregistration' ), 20 | 'date' => __( 'Sign Up Date', 'gravityformsuserregistation' ), 21 | ), 22 | array(), 23 | array(), 24 | 'user_login', 25 | ); 26 | 27 | parent::__construct(); 28 | 29 | } 30 | 31 | function prepare_items() { 32 | 33 | $forms = array(); 34 | $per_page = 10; 35 | $page = rgget( 'paged' ) ? rgget( 'paged' ) : 1; 36 | $pending_activations = GF_Pending_Activations::get_pending_activations( rgget( 'id' ), array( 37 | 'per_page' => $per_page, 38 | 'page' => $page 39 | ) ); 40 | $total_pending = GF_Pending_Activations::get_pending_activations( rgget( 'id' ), array( 41 | 'per_page' => $per_page, 42 | 'page' => $page, 43 | 'get_total' => true 44 | ) ); 45 | 46 | foreach ( $pending_activations as $pending_activation ) { 47 | 48 | $signup_meta = unserialize( $pending_activation->meta ); 49 | 50 | $lead = RGFormsModel::get_lead( rgar( $signup_meta, 'lead_id' ) ); 51 | 52 | $form_id = $lead['form_id']; 53 | $form = rgar( $forms, $form_id ) ? rgar( $forms, $form_id ) : RGFormsModel::get_form_meta( $form_id ); 54 | $forms[ $form_id ] = $form; 55 | 56 | $item = array(); 57 | $item['form'] = $form['title']; 58 | $item['user_login'] = rgar( $signup_meta, 'user_login' ); 59 | $item['email'] = rgar( $signup_meta, 'email' ); 60 | $item['date'] = $lead['date_created']; 61 | 62 | // non-columns 63 | $item['lead_id'] = $lead['id']; 64 | $item['form_id'] = $form_id; 65 | $item['activation_key'] = $pending_activation->activation_key; 66 | 67 | array_push( $this->items, $item ); 68 | 69 | } 70 | 71 | $this->set_pagination_args( array( 72 | 'total_items' => $total_pending, 73 | 'per_page' => $per_page 74 | ) ); 75 | 76 | } 77 | 78 | function column_default( $item, $column_name ) { 79 | 80 | $value = rgar( $item, $column_name ); 81 | 82 | if( $column_name == 'user_login' ) { 83 | $value .= ' 84 |
85 | 86 | ' . __( 'Activate', 'gravityformsuserregistration') . ' | 87 | 88 | 89 | ' . __( 'View Entry', 'gravityformsuserregistration' ) . ' | 90 | 91 | 92 | ' . __( 'Delete', 'gravityformsuserregistration' ) . ' 93 | 94 |
'; 95 | } 96 | 97 | return $value; 98 | } 99 | 100 | function column_cb( $item ) { 101 | return ''; 102 | } 103 | 104 | function column_date( $item ) { 105 | return GFCommon::format_date( rgar( $item, 'date' ), false ); 106 | } 107 | 108 | function get_bulk_actions() { 109 | 110 | $actions = array( 111 | 'activate' => __( 'Activate', 'gravityformsuserregistration' ), 112 | 'delete' => __( 'Delete', 'gravityformsuserregistration' ) 113 | ); 114 | 115 | return $actions; 116 | } 117 | 118 | function get_columns() { 119 | return array(); 120 | } 121 | } -------------------------------------------------------------------------------- /includes/activate.php: -------------------------------------------------------------------------------- 1 | get_base_path() . '/includes/signups.php' ); 11 | 12 | GFUserSignups::prep_signups_functionality(); 13 | 14 | do_action( 'activate_header' ); 15 | 16 | function do_activate_header() { 17 | do_action( 'activate_wp_head' ); 18 | } 19 | 20 | add_action( 'wp_head', 'do_activate_header' ); 21 | 22 | function wpmu_activate_stylesheet() { 23 | ?> 24 | 50 | get_activation_var(); 56 | 57 | get_header(); ?> 58 | 59 |
60 | 61 | 62 |

63 |
64 |

65 | 66 |
67 |

68 |

69 | 70 |

71 |
72 | 73 | get_error_code() || 'blog_taken' == $result->get_error_code() ) { 79 | $signup = $result->get_error_data(); 80 | ?> 81 |

82 | '; 84 | if ( $signup->domain . $signup->path == '' ) { 85 | printf( __( 'Your account has been activated. You may now log in to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.' ), network_site_url( 'wp-login.php', 'login' ), $signup->user_login, $signup->user_email, network_site_url( 'wp-login.php?action=lostpassword', 'login' ) ); 86 | } else { 87 | printf( __( 'Your site at %2$s is active. You may now log in to your site using your chosen username of “%3$s”. Please check your email inbox at %4$s for your login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can reset your password.' ), 'http://' . $signup->domain, $signup->domain, $signup->user_login, $signup->user_email, network_site_url( 'wp-login.php?action=lostpassword' ) ); 88 | } 89 | echo '

'; 90 | } else { 91 | ?> 92 |

93 | ' . $result->get_error_message() . '

'; 95 | } 96 | } else { 97 | extract( $result ); 98 | $url = is_multisite() ? get_blogaddress_by_id( (int) $blog_id ) : home_url( '', 'http' ); 99 | $user = new WP_User( (int) $user_id ); 100 | ?> 101 |

102 | 103 |
104 |

user_login ?>

105 | 106 |

107 | 108 | user_activation_key ) ) { 112 | esc_html_e( 'Check your email for the set password link.', 'gravityformsuserregistration' ); 113 | } else { 114 | printf( '%s', esc_url( gf_user_registration()->get_set_password_url( $user ) ), esc_html__( 'Set your password.', 'gravityformsuserregistration' ) ); 115 | } 116 | ?> 117 |

118 |
119 | 120 | 121 |

View your site or Log in' ), $url, $url . 'wp-login.php' ); ?>

122 | 123 |

Log in or go back to the homepage.' ), network_site_url( 'wp-login.php', 'login' ), network_home_url() ); ?>

124 | 128 |
129 | 133 | -------------------------------------------------------------------------------- /includes/signups.php: -------------------------------------------------------------------------------- 1 | get_results( "SHOW TABLES LIKE '{$wpdb->signups}'" ); 11 | 12 | // Upgrade verions prior to 3.7 13 | if ( $table_exists ) { 14 | 15 | $column_exists = $wpdb->query( "SHOW COLUMNS FROM {$wpdb->signups} LIKE 'signup_id'" ); 16 | 17 | if ( empty( $column_exists ) ) { 18 | 19 | // New primary key for signups. 20 | $wpdb->query( "ALTER TABLE $wpdb->signups ADD signup_id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST" ); 21 | $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain" ); 22 | 23 | } 24 | 25 | } 26 | 27 | self::install_signups(); 28 | 29 | } 30 | 31 | private static function install_signups() { 32 | global $wpdb; 33 | 34 | // Signups is not there and we need it so let's create it 35 | require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); 36 | 37 | // Use WP's core CREATE TABLE query 38 | $create_queries = wp_get_db_schema( 'ms_global' ); 39 | if ( ! is_array( $create_queries ) ) { 40 | $create_queries = explode( ';', $create_queries ); 41 | $create_queries = array_filter( $create_queries ); 42 | } 43 | 44 | // Filter out all the queries except wp_signups 45 | foreach ( $create_queries as $key => $query ) { 46 | if ( preg_match( "|CREATE TABLE ([^ ]*)|", $query, $matches ) ) { 47 | if ( trim( $matches[1], '`' ) !== $wpdb->signups ) { 48 | unset( $create_queries[ $key ] ); 49 | } 50 | } 51 | } 52 | 53 | // Run WordPress's database upgrader 54 | if ( ! empty( $create_queries ) ) { 55 | $result = dbDelta( $create_queries ); 56 | } 57 | 58 | } 59 | 60 | /** 61 | * Add signups property to $wpdb object. Used by several MS functions. 62 | */ 63 | private static function add_signups_to_wpdb() { 64 | global $wpdb; 65 | $wpdb->signups = $wpdb->base_prefix . 'signups'; 66 | } 67 | 68 | public static function prep_signups_functionality() { 69 | 70 | if ( ! is_multisite() ) { 71 | 72 | // require MS functions 73 | require_once( ABSPATH . 'wp-includes/ms-functions.php' ); 74 | 75 | // add $wpdb->signups property (accessed in various MS functions) 76 | self::add_signups_to_wpdb(); 77 | 78 | // remove filter which checks for Network setting (not active on non-ms install) 79 | remove_filter( 'option_users_can_register', 'users_can_register_signup_filter' ); 80 | 81 | } 82 | 83 | // signup: update the signup URL to GF's custom activation page 84 | add_filter( 'wpmu_signup_user_notification_email', array( 'GFUserSignups', 'modify_signup_user_notification_message' ), 10, 4 ); 85 | add_filter( 'wpmu_signup_blog_notification_email', array( 'GFUserSignups', 'modify_signup_blog_notification_message' ), 10, 7 ); 86 | 87 | // disable activation email for manual activation feeds 88 | add_filter( 'wpmu_signup_user_notification', array( 'GFUserSignups', 'maybe_suppress_signup_user_notification' ), 10, 3 ); 89 | add_filter( 'wpmu_signup_blog_notification', array( 'GFUserSignups', 'maybe_suppress_signup_blog_notification' ), 10, 6 ); 90 | 91 | add_filter( 'wpmu_signup_user_notification', array( __class__, 'add_site_name_filter' ) ); 92 | add_filter( 'wpmu_signup_user_notification_subject', array( __class__, 'remove_site_name_filter' ) ); 93 | 94 | // signup: BP cancels default MS signup notification and replaces with its own; hook up to BP's custom notification hook 95 | if ( gf_user_registration()->is_bp_active() ) { 96 | add_filter( 'bp_core_activation_signup_user_notification_message', array( 'GFUserSignups', 'modify_signup_user_notification_message' ), 10, 4 ); 97 | add_filter( 'bp_core_activation_signup_blog_notification_message', array( 'GFUserSignups', 'modify_signup_blog_notification_message' ), 10, 7 ); 98 | } 99 | 100 | } 101 | 102 | public static function maybe_suppress_signup_user_notification( $user, $user_email, $key ) { 103 | return self::is_manual_activation( $key ) ? false : $user; 104 | } 105 | 106 | public static function maybe_suppress_signup_blog_notification( $domain, $path, $title, $user, $user_email, $key ) { 107 | return self::is_manual_activation( $key ) ? false : $user; 108 | } 109 | 110 | public static function is_manual_activation( $key ) { 111 | $signup = GFSignup::get( $key ); 112 | 113 | return ! is_wp_error( $signup ) && $signup->get_activation_type() == 'manual'; 114 | } 115 | 116 | public static function modify_signup_user_notification_message( $message, $user, $user_email, $key ) { 117 | 118 | // don't send activation email for manual activations 119 | if ( self::is_manual_activation( $key ) ) { 120 | return false; 121 | } 122 | 123 | $url = gf_user_registration()->get_activation_url( $key ); 124 | 125 | // BP replaces URL before passing the message, get the BP activation URL and replace 126 | if ( gf_user_registration()->is_bp_active() ) { 127 | $activate_url = esc_url_raw( sprintf( '%s?key=%s', bp_get_activation_page(), $key ) ); 128 | $message = str_replace( $activate_url, '%s', $message ); 129 | } 130 | 131 | return sprintf( $message, esc_url_raw( $url ) ); 132 | } 133 | 134 | public static function modify_signup_blog_notification_message( $message, $domain, $path, $title, $user, $user_email, $key ) { 135 | 136 | // don't send activation email for manual activations 137 | if ( self::is_manual_activation( $key ) ) { 138 | return false; 139 | } 140 | 141 | $url = gf_user_registration()->get_activation_url( $key ); 142 | 143 | // BP replaces URL before passing the message, get the BP activation URL and replace 144 | if ( gf_user_registration()->is_bp_active() ) { 145 | $activate_url = esc_url( bp_get_activation_page() . "?key=$key" ); 146 | $message = str_replace( $activate_url, '%s', $message ); 147 | } 148 | 149 | return sprintf( $message, esc_url_raw( $url ), esc_url( "http://{$domain}{$path}" ), $key ); 150 | } 151 | 152 | public static function add_site_name_filter( $return ) { 153 | add_filter( 'site_option_site_name', array( __class__, 'modify_site_name' ) ); 154 | 155 | return $return; 156 | } 157 | 158 | public static function remove_site_name_filter( $return ) { 159 | remove_filter( 'site_option_site_name', array( __class__, 'modify_site_name' ) ); 160 | 161 | return $return; 162 | } 163 | 164 | public static function modify_site_name( $site_name ) { 165 | 166 | if ( ! $site_name ) { 167 | $site_name = get_site_option( 'blogname' ); 168 | } 169 | 170 | return $site_name; 171 | } 172 | 173 | public static function add_signup_meta( $lead_id, $activation_key ) { 174 | gform_update_meta( $lead_id, 'activation_key', $activation_key ); 175 | } 176 | 177 | public static function get_lead_activation_key( $lead_id ) { 178 | return gform_get_meta( $lead_id, 'activation_key' ); 179 | } 180 | 181 | /** 182 | * Activate a signup. 183 | * 184 | */ 185 | public static function activate_signup( $key ) { 186 | global $wpdb, $current_site; 187 | 188 | $blog_id = is_object( $current_site ) ? $current_site->id : false; 189 | $signup = GFSignup::get( $key ); 190 | 191 | if ( is_wp_error( $signup ) ) { 192 | return $signup; 193 | } 194 | 195 | $user_id = username_exists( $signup->user_login ); 196 | if ( $user_id ) { 197 | //username already exists, go ahead and mark signup activated and return error message 198 | $signup->set_as_activated(); 199 | 200 | return new WP_Error( 'user_already_exists', __( 'That username is already activated.' ), $signup ); 201 | } 202 | 203 | if ( gf_user_registration()->activation_email_exists( $signup->user_email ) ) { 204 | // Email address already exists, return error message. 205 | return new WP_Error( 'email_already_exists', __( 'Sorry, that email address is already used!' ), $signup ); 206 | } 207 | 208 | // unbind site creation from gform_user_registered hook, run it manually below 209 | if ( is_multisite() ) { 210 | remove_action( 'gform_user_registered', array( 'GFUser', 'create_new_multisite' ) ); 211 | } 212 | 213 | gf_user_registration()->log( "Activating signup for username: {$signup->user_login} - entry: {$signup->lead['id']}" ); 214 | 215 | $user_data = gf_user_registration()->create_user( $signup->lead, $signup->form, $signup->config, '', $signup->meta['password_hash'] ); 216 | $user_id = rgar( $user_data, 'user_id' ); 217 | 218 | if ( ! $user_id ) { 219 | return new WP_Error( 'create_user', __( 'Could not create user' ), $signup ); 220 | } 221 | 222 | $signup->set_as_activated(); 223 | 224 | // Send notifications 225 | GFAPI::send_notifications( $signup->form, $signup->lead, 'gfur_user_activated' ); 226 | 227 | do_action( 'gform_activate_user', $user_id, $user_data, $signup->meta ); 228 | 229 | if ( is_multisite() ) { 230 | $ms_options = rgars( $signup->config, 'meta/multisite_options' ); 231 | if ( rgar( $ms_options, 'create_site' ) ) { 232 | $blog_id = gf_user_registration()->create_new_multisite( $user_id, $signup->config, $signup->lead, $user_data['password'] ); 233 | } 234 | } 235 | 236 | return array( 'user_id' => $user_id, 'password' => $user_data['password'], 'password_hash' => $user_data['password_hash'], 'blog_id' => $blog_id ); 237 | } 238 | 239 | public static function delete_signup( $key ) { 240 | $signup = GFSignup::get( $key ); 241 | 242 | if ( is_wp_error( $signup ) ) { 243 | return $signup; 244 | } 245 | 246 | do_action( 'gform_userregistration_delete_signup', $signup ); 247 | 248 | $result = $signup->delete(); 249 | 250 | if ( $result ) { 251 | GFAPI::send_notifications( $signup->form, $signup->lead, 'gfur_user_activation_deleted' ); 252 | } 253 | 254 | return $result; 255 | } 256 | 257 | } 258 | 259 | /** 260 | * Create a signup object from a signup key. 261 | */ 262 | class GFSignup { 263 | 264 | public $meta; 265 | public $lead; 266 | public $form; 267 | public $config; 268 | 269 | private $error; 270 | 271 | function __construct( $signup ) { 272 | 273 | foreach ( $signup as $key => $value ) { 274 | $this->$key = $value; 275 | } 276 | 277 | $this->meta = unserialize( $signup->meta ); 278 | $this->lead = GFFormsModel::get_lead( $this->meta['lead_id'] ); 279 | $this->form = GFFormsModel::get_form_meta( $this->lead['form_id'] ); 280 | $this->config = gf_user_registration()->get_filtered_single_submission_feed( $this->lead, $this->form ); 281 | 282 | } 283 | 284 | public static function get( $key ) { 285 | global $wpdb; 286 | 287 | $signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE activation_key = %s", $key ) ); 288 | 289 | if ( empty( $signup ) ) { 290 | return new WP_Error( 'invalid_key', __( 'Invalid activation key.' ) ); 291 | } 292 | 293 | if ( $signup->active ) { 294 | return new WP_Error( 'already_active', __( 'The user is already active.' ), $signup ); 295 | } 296 | 297 | return new GFSignup( $signup ); 298 | } 299 | 300 | function get_activation_type() { 301 | return rgars( $this->config, 'meta/userActivationValue' ); 302 | } 303 | 304 | function set_as_activated() { 305 | global $wpdb; 306 | 307 | // Remove password for security. 308 | $this->meta['password'] = ''; 309 | 310 | $now = current_time( 'mysql', true ); 311 | $result = $wpdb->update( $wpdb->signups, array( 312 | 'active' => 1, 313 | 'activated' => $now, 314 | 'meta' => serialize( $this->meta ), 315 | ), array( 'activation_key' => $this->activation_key ) ); 316 | 317 | return $result; 318 | } 319 | 320 | function delete() { 321 | global $wpdb; 322 | 323 | return $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->signups WHERE activation_key = %s", $this->activation_key ) ); 324 | } 325 | 326 | } 327 | -------------------------------------------------------------------------------- /includes/class-gf-login-widget.php: -------------------------------------------------------------------------------- 1 | load_text_domain(); 32 | 33 | // Initialize widget. 34 | WP_Widget::__construct( 35 | 'gform_login_widget', 36 | esc_html__( 'Login', 'gravityformsuserregistration' ), 37 | array( 38 | 'classname' => 'gform_login_widget', 39 | 'description' => esc_html__( 'Gravity Forms Login Widget', 'gravityformsuserregistration' ), 40 | ), 41 | array( 42 | 'width' => 200, 43 | 'height' => 250, 44 | 'id_base' => 'gform_login_widget', 45 | ) 46 | ); 47 | 48 | } 49 | 50 | /** 51 | * Displays login form. 52 | * 53 | * @see WP_Widget::widget() 54 | * 55 | * @access public 56 | * @param array $args Widget arguments. 57 | * @param array $instance Saved values from database. 58 | */ 59 | public function widget( $args, $instance ) { 60 | 61 | extract( $args ); 62 | 63 | // Open widget. 64 | $widget = $before_widget; 65 | 66 | // Get the widget title. 67 | $title = is_user_logged_in() ? $instance['logged_in_title'] : $instance['title']; 68 | $title = GFCommon::replace_variables( $title, array(), array() ); 69 | $title = apply_filters( 'widget_title', $title ); 70 | 71 | // Display the widget title. 72 | $widget .= $title ? $before_title . $title . $after_title : null; 73 | 74 | // Get the tab index. 75 | $tabindex = is_numeric( $instance['tabindex'] ) ? $instance['tabindex'] : 1; 76 | 77 | // Create form. 78 | $form = gf_user_registration()->login_form_object(); 79 | 80 | if ( empty( $instance['disable_scripts'] ) && ! is_admin() ) { 81 | RGForms::print_form_scripts( $form, false ); 82 | } 83 | 84 | $form_markup = gf_user_registration()->get_login_html( array( 85 | 'display_title' => false, 86 | 'display_description' => false, 87 | 'logged_in_avatar' => '1' === $instance['logged_in_avatar'] ? true : false, 88 | 'logged_in_links' => $instance['logged_in_links'], 89 | 'logged_in_message' => $instance['logged_in_message'], 90 | 'logged_out_links' => $instance['logged_out_links'], 91 | 'login_redirect' => $instance['login_redirect_url'], 92 | 'logout_redirect' => $instance['logout_redirect_url'], 93 | 'tabindex' => $tabindex, 94 | ) ); 95 | 96 | // Display form. 97 | $widget .= $form_markup; 98 | $widget .= $after_widget; 99 | 100 | echo $widget; 101 | 102 | } 103 | 104 | /** 105 | * Sanitize widget form values as they are saved. 106 | * 107 | * @see WP_Widget::update() 108 | * 109 | * @access public 110 | * @param mixed $new_instance Values just sent to be saved. 111 | * @param mixed $old_instance Previously saved values from database. 112 | * 113 | * @return array Updated safe values to be saved. 114 | */ 115 | public function update( $new_instance, $old_instance ) { 116 | 117 | // Prepare instance. 118 | $instance = $old_instance; 119 | $instance['active_view'] = rgar( $new_instance, 'active_view' ); 120 | $instance['title'] = strip_tags( $new_instance['title'] ); 121 | $instance['tabindex'] = rgar( $new_instance, 'tabindex' ); 122 | $instance['login_redirect_url'] = rgar( $new_instance, 'login_redirect_url' ); 123 | $instance['logged_in_title'] = rgar( $new_instance, 'logged_in_title' ); 124 | $instance['logged_in_avatar'] = rgar( $new_instance, 'logged_in_avatar' ); 125 | $instance['logged_in_message'] = rgar( $new_instance, 'logged_in_message' ); 126 | $instance['logged_in_links'] = json_decode( rgar( $new_instance, 'logged_in_links' ), true ); 127 | $instance['logged_out_links'] = json_decode( rgar( $new_instance, 'logged_out_links' ), true ); 128 | $instance['logout_redirect_url'] = rgar( $new_instance, 'logout_redirect_url' ); 129 | 130 | // Remove empty logged in links. 131 | foreach ( $instance['logged_in_links'] as $i => $link ) { 132 | if ( rgblank( $link['text'] ) && rgblank( $link['url'] ) ) { 133 | unset( $instance['logged_in_links'][ $i ] ); 134 | } 135 | } 136 | $instance['logged_in_links'] = array_values( $instance['logged_in_links'] ); 137 | 138 | // Remove empty logged out links. 139 | foreach ( $instance['logged_out_links'] as $i => $link ) { 140 | if ( rgblank( $link['text'] ) && rgblank( $link['url'] ) ) { 141 | unset( $instance['logged_out_links'][ $i ] ); 142 | } 143 | } 144 | $instance['logged_out_links'] = array_values( $instance['logged_out_links'] ); 145 | 146 | // Loop through instance properties and sanitize. 147 | foreach ( $instance as $key => &$value ) { 148 | 149 | // Loop through array items and sanitize individually. 150 | if ( is_array( $value ) ) { 151 | 152 | foreach ( $value as &$child_item ) { 153 | 154 | // If child item is array, map sanitization to array. 155 | $child_item = is_array( $child_item ) ? array_map( 'sanitize_text_field', $child_item ) : sanitize_text_field( $child_item ); 156 | 157 | } 158 | 159 | } else { 160 | 161 | $value = sanitize_text_field( $value ); 162 | 163 | } 164 | 165 | } 166 | 167 | return $instance; 168 | 169 | } 170 | 171 | /** 172 | * Back-end widget form. 173 | * 174 | * @see WP_Widget::form() 175 | * 176 | * @access public 177 | * @param array $instance Previously saved values from database. 178 | */ 179 | public function form( $instance ) { 180 | 181 | // Add defaults to widget instance. 182 | $instance = wp_parse_args( 183 | (array) $instance, 184 | array( 185 | 'active_view' => 'logged-out', 186 | 'title' => __( 'Login', 'gravityformsuserregistration' ), 187 | 'tabindex' => '1', 188 | 'login_redirect_url' => '', 189 | 'logged_in_title' => 'Welcome {user:display_name}', 190 | 'logged_in_avatar' => '1', 191 | 'logged_in_message' => '', 192 | 'logout_redirect_url' => '', 193 | 'logged_in_links' => array( 194 | array( 195 | 'text' => esc_html__( 'Logout', 'gravityformsuserregistration' ), 196 | 'url' => '{logout_url}', 197 | ), 198 | ), 199 | 'logged_out_links' => array( 200 | array( 201 | 'text' => esc_html__( 'Register', 'gravityformsuserregistration' ), 202 | 'url' => '{register_url}', 203 | ), 204 | array( 205 | 'text' => esc_html__( 'Forgot Password?', 'gravityformsuserregistration' ), 206 | 'url' => '{password_url}', 207 | ), 208 | ), 209 | ) 210 | ); 211 | 212 | // Ensure there is at least one logged in links row. 213 | if ( empty( $instance['logged_in_links'] ) ) { 214 | $instance['logged_in_links'] = array( array( 'text' => null, 'url' => null ) ); 215 | } 216 | 217 | // Ensure there is at least one logged out links row. 218 | if ( empty( $instance['logged_out_links'] ) ) { 219 | $instance['logged_out_links'] = array( array( 'text' => null, 'url' => null ) ); 220 | } 221 | 222 | ?> 223 | 224 |

225 | 226 | 227 |

228 | 229 |
230 | 231 | 235 | 236 | 237 |
> 238 | 239 | 240 |

241 |
242 | 243 |

244 | 245 | 246 |
247 | ' /> 248 | 249 | $link ) { 252 | ?> 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 |

273 | 274 |
275 |

276 | 277 |
278 | 279 |
> 280 | 281 | 282 |

283 |
284 | 285 |

286 | 287 | 288 |

289 |
290 | 291 |

292 | 293 | 294 |
295 | ' /> 296 | 297 | $link ) { 300 | ?> 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 |

321 |
322 | 323 |

324 | 325 | 326 |

327 | value="1" /> 328 |
329 |

330 | 331 |
332 | 333 |
334 | 335 | init(); 23 | } else { 24 | add_action( 'init', array( $this, 'init' ) ); 25 | } 26 | 27 | } 28 | 29 | public function init() { 30 | 31 | add_action( 'gform_form_settings_menu', array( $this, 'add_form_settings_menu' ), 10, 2 ); 32 | add_action( 'admin_menu', array( $this, 'register_submenu_page_under_users' ) ); 33 | 34 | if ( gf_user_registration()->is_gravityforms_supported( '2.0' ) ) { 35 | add_filter( 'gform_entry_detail_meta_boxes', array( $this, 'register_meta_box' ), 10, 2 ); 36 | } else { 37 | add_action( 'gform_entry_detail_sidebar_middle', array( $this, 'entry_pending_activation_meta_box' ), 10, 2 ); 38 | } 39 | 40 | $view = rgget( 'view' ); 41 | $subview = rgget( 'subview' ); 42 | 43 | if ( rgget( 'page' ) == 'gf_edit_forms' && $view == 'settings' && $subview == $this->_slug ) { 44 | require_once( GFCommon::get_base_path() . '/tooltips.php' ); 45 | add_action( 'gform_form_settings_page_' . $this->_slug, array( $this, 'form_settings_page' ) ); 46 | } 47 | 48 | add_action( 'gform_userregistration_cron', array( $this, 'cron_remove_passwords' ) ); 49 | 50 | } 51 | 52 | /** 53 | * Remove encrypted passwords after a short period. 54 | * 55 | * @return void 56 | */ 57 | public function cron_remove_passwords() { 58 | global $wpdb; 59 | 60 | if ( ! is_multisite() ) { 61 | require_once gf_user_registration()->get_base_path() . '/includes/signups.php'; 62 | GFUserSignups::prep_signups_functionality(); 63 | } 64 | 65 | $sql = "SELECT signup_id, meta FROM {$wpdb->signups} 66 | WHERE registered < SUBDATE( CURDATE(), INTERVAL 7 DAY ) 67 | AND meta LIKE '%s:8:\"password\";%' 68 | AND meta NOT LIKE '%s:8:\"password\";s:0:\"\";%' 69 | LIMIT 1000"; 70 | 71 | $results = $wpdb->get_results( $sql ); 72 | 73 | foreach ( $results as $signup ) { 74 | 75 | $signup->meta = maybe_unserialize( $signup->meta ); 76 | if ( ! is_array( $signup->meta ) ) { 77 | $signup->meta = array(); 78 | } 79 | 80 | $signup->meta['password'] = ''; 81 | 82 | $wpdb->update( $wpdb->signups, array( 83 | 'meta' => serialize( $signup->meta ), 84 | ), array( 'signup_id' => $signup->signup_id ) ); 85 | 86 | } 87 | 88 | } 89 | 90 | public function add_form_settings_menu( $tabs, $form_id ) { 91 | if ( gf_user_registration()->has_feed_type( 'create', array( 'id' => $form_id ) ) ) { 92 | $tabs[] = array( 93 | 'name' => $this->_slug, 94 | 'label' => __( $this->_title, 'gravityformsuserregistration' ), 95 | 'icon' => file_get_contents( gf_user_registration()->get_base_path() . '/images/pending-menu-icon.svg' ), 96 | 'capabilities' => 'gravityforms_user_registration', 97 | ); 98 | } 99 | 100 | return $tabs; 101 | } 102 | 103 | public function form_settings_page() { 104 | 105 | $form = $this->get_current_form(); 106 | $form_id = $form['id']; 107 | $form = gf_apply_filters( 'gform_admin_pre_render', $form_id, $form ); 108 | 109 | GFFormSettings::page_header( __( $this->_title, 'gravityformsuserregistration' ) ); 110 | 111 | if ( rgpost( 'is_submit' ) ) { 112 | self::handle_submission(); 113 | GFCommon::display_admin_message(); 114 | } 115 | 116 | // Prepare panel class. 117 | $panel_class = gf_user_registration()->is_gravityforms_supported( '2.5-dev-1' ) ? 'gform-settings-panel' : 'gform_panel gform_panel_form_settings'; 118 | ?> 119 | 120 |
121 | 122 | get_page_content(); ?> 123 | 124 |
125 | 126 | is_gravityforms_supported( '2.5-dev-1' ) ) { 142 | return self::get_legacy_page_content(); 143 | } 144 | 145 | require_once( gf_user_registration()->get_base_path() . '/includes/class-gf-pending-activations-list.php' ); 146 | 147 | $form = rgget( 'id' ) ? GFAPI::get_form( rgget( 'id' ) ) : false; 148 | $is_global = ! $form; 149 | 150 | ?> 151 | 152 | 156 | 157 |

%s

', __( 'Pending Activations', 'gravityformsuserregistration' ) ); 159 | ?> 160 | 161 |
162 |
163 | 164 | prepare_items(); 167 | $table->display(); 168 | ?> 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 |
177 |
178 | 179 | 188 | 189 | get_base_path() . '/includes/class-gf-pending-activations-list.php' ); 200 | 201 | $form = rgget( 'id' ) ? GFAPI::get_form( rgget( 'id' ) ) : false; 202 | $is_global = ! $form; 203 | 204 | ?> 205 | 206 | 210 | 211 |
212 | 213 | %2$s', $is_global ? 'h2' : 'h3', __( 'Pending Activations', 'gravityformsuserregistration' ) ); 216 | 217 | if ( rgpost( 'is_submit' ) ) { 218 | self::handle_submission(); 219 | GFCommon::display_admin_message(); 220 | } 221 | 222 | ?> 223 | 224 |
225 | 226 | prepare_items(); 229 | $table->display(); 230 | ?> 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 |
239 | 240 |
241 | 242 | 251 | 252 | 'DESC', 264 | 'order_by' => 'registered', 265 | 'page' => 1, 266 | 'per_page' => 10, 267 | 'get_total' => false, 268 | 'lead_id' => false 269 | ) ) ); 270 | 271 | if ( ! is_multisite() ) { 272 | require_once( gf_user_registration()->get_base_path() . '/includes/signups.php' ); 273 | GFUserSignups::prep_signups_functionality(); 274 | } 275 | 276 | $where = array(); 277 | 278 | if ( $form_id ) { 279 | $where[] = $wpdb->prepare( 'l.form_id = %d', $form_id ); 280 | } 281 | 282 | if ( $lead_id ) { 283 | $where[] = $wpdb->prepare( "l.id = %d", $lead_id ); 284 | } 285 | 286 | $where[] = "s.active = 0"; 287 | $where = 'WHERE ' . implode( ' AND ', $where ); 288 | 289 | $order = "ORDER BY {$order_by} {$order}"; 290 | $offset = ( $page * $per_page ) - $per_page; 291 | $limit_offset = $get_total ? '' : "LIMIT $per_page OFFSET $offset"; 292 | $method = $get_total ? 'get_var' : 'get_results'; 293 | 294 | if ( $form_id ) { 295 | $entry_table = self::get_entry_table_name(); 296 | $entry_meta_table = self::get_entry_meta_table_name(); 297 | 298 | $entry_id_column = version_compare( self::get_gravityforms_db_version(), '2.3-dev-1', '<' ) ? 'lead_id' : 'entry_id'; 299 | 300 | $charset_db = empty( $wpdb->charset ) ? 'utf8mb4' : $wpdb->charset; 301 | 302 | $collate = ! empty( $wpdb->collate ) ? " COLLATE {$wpdb->collate}" : ''; 303 | 304 | $select = $get_total ? 'SELECT count(s.activation_key)' : 'SELECT s.*'; 305 | $sql = " 306 | $select FROM {$entry_meta_table} lm 307 | INNER JOIN {$wpdb->signups} s ON CONVERT(s.activation_key USING {$charset_db}) = CONVERT(lm.meta_value USING {$charset_db}) {$collate} AND lm.meta_key = 'activation_key' 308 | INNER JOIN {$entry_table} l ON l.id = lm.{$entry_id_column} 309 | $where 310 | $order 311 | $limit_offset"; 312 | 313 | $results = $wpdb->$method( $sql ); 314 | 315 | } else { 316 | 317 | $select = $get_total ? 'SELECT count(s.activation_key)' : 'SELECT s.*'; 318 | $results = $wpdb->$method( " 319 | $select FROM $wpdb->signups s 320 | $where 321 | $order 322 | $limit_offset" 323 | ); 324 | 325 | } 326 | 327 | return $results; 328 | } 329 | 330 | public static function handle_submission() { 331 | 332 | if ( ! wp_verify_nonce( rgpost( 'action_nonce' ), 'action' ) && ! check_admin_referer( 'action_nonce', 'action_nonce' ) ) { 333 | die( 'You have failed...' ); 334 | } 335 | 336 | require_once( gf_user_registration()->get_base_path() . '/includes/signups.php' ); 337 | GFUserSignups::prep_signups_functionality(); 338 | 339 | $action = rgpost('single_action'); 340 | $action = !$action ? rgpost('action') != -1 ? rgpost('action') : rgpost('action2') : $action; 341 | 342 | $items = rgpost('item') ? array(rgpost('item')) : rgpost('items'); 343 | $item_count = count( $items ); 344 | $messages = $errors = array(); 345 | 346 | foreach ( $items as $key ) { 347 | 348 | switch ( $action ) { 349 | case 'delete': 350 | $success = GFUserSignups::delete_signup( $key ); 351 | if ( $success ) { 352 | gf_user_registration()->add_message_once( _n( 'Item deleted.', 'Items deleted.', count( $items ), 'gravityformsuserregistration' ) ); 353 | } else { 354 | gf_user_registration()->add_error_message_once( _n( 'There was an issue deleting this item.', 'There was an issue deleting one or more selected items.', count( $items ), 'gravityformsuserregistration' ) ); 355 | } 356 | break; 357 | 358 | case 'activate': 359 | 360 | $userdata = GFUserSignups::activate_signup( $key ); 361 | 362 | if ( is_wp_error( $userdata ) ) { 363 | $error = _n( 'There was an issue activating this item', 'There was an issue activating one or more selected items', count( $items ), 'gravityformsuserregistration' ); 364 | $error .= ": " . $userdata->get_error_message(); 365 | gf_user_registration()->add_error_message_once( $error ); 366 | } else { 367 | $message = _n( 'User activated.', 'Users activated.', count( $items ), 'gravityformsuserregistration' ); 368 | gf_user_registration()->add_message_once( $message ); 369 | } 370 | 371 | break; 372 | } 373 | 374 | } 375 | 376 | } 377 | 378 | public function register_submenu_page_under_users() { 379 | add_submenu_page( 380 | 'users.php', 381 | __( 'Pending Activations', 'gravityformsuserregistration' ), 382 | __( 'Pending Activations', 'gravityformsuserregistration' ), 383 | 'gravityforms_user_registration', 384 | 'gf-pending-activations', 385 | array( $this, 'pending_activations_page' ) 386 | ); 387 | } 388 | 389 | public function pending_activations_page() { 390 | self::get_page_content(); 391 | } 392 | 393 | public function entry_pending_activation_meta_box( $form, $entry ) { 394 | 395 | if ( ! $this->is_entry_pending_activation( $entry ) ) { 396 | return; 397 | } 398 | 399 | ?> 400 | 401 |
402 | 403 |

404 | 405 |

406 | 407 |
408 |
409 | add_pending_activation_meta_box( array( 'entry' => $entry ) ) ?> 410 |
411 |
412 |
413 | 414 | 415 | 416 | $entry['id'], 'get_total' => true ) ) > 0; 422 | } 423 | 424 | /** 425 | * Include the activate user button in the sidebar of the entry detail page. 426 | * 427 | * @param array $meta_boxes The properties for the meta boxes. 428 | * @param array $entry The entry currently being viewed/edited. 429 | * 430 | * @return array 431 | */ 432 | public function register_meta_box( $meta_boxes, $entry ) { 433 | if ( $this->is_entry_pending_activation( $entry ) ) { 434 | $meta_boxes['gf_user_pending_activation'] = array( 435 | 'title' => esc_html__( 'User Registration', 'gravityformsuserregistration' ), 436 | 'callback' => array( $this, 'add_pending_activation_meta_box' ), 437 | 'context' => 'side', 438 | ); 439 | } 440 | 441 | return $meta_boxes; 442 | } 443 | 444 | /** 445 | * The callback used to echo the content to the gf_user_registration meta box. 446 | * 447 | * @param array $args An array containing the form and entry objects. 448 | */ 449 | public function add_pending_activation_meta_box( $args ) { 450 | require_once( gf_user_registration()->get_base_path() . '/includes/signups.php' ); 451 | 452 | $entry_id = rgar( $args['entry'], 'id' ); 453 | $activation_key = GFUserSignups::get_lead_activation_key( $entry_id ); 454 | 455 | ?> 456 | 457 |
458 | 459 | 460 | 461 | %s %s', esc_html__( 'Pending Activation', 'gravityformsuserregistration' ), esc_html__( 'This entry created a user who is pending activation. Click the "Activate User" button to activate the user.', 'gravityformsuserregistration' ) ) ); ?> 462 |
463 | 464 | 517 | 518 | get_gravityforms_db_version(); 552 | } 553 | } 554 | 555 | /** 556 | * Returns an instance of the GF_Pending_Activations class 557 | * 558 | * @see GF_Pending_Activations::get_instance() 559 | * @return GF_Pending_Activations 560 | */ 561 | function gf_pending_activations() { 562 | return GF_Pending_Activations::get_instance(); 563 | } 564 | -------------------------------------------------------------------------------- /languages/gravityformsuserregistration.pot: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2020 Gravity Forms 2 | # This file is distributed under the GPL-2.0+. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: Gravity Forms User Registration Add-On 4.6\n" 6 | "Report-Msgid-Bugs-To: https://gravityforms.com/support\n" 7 | "Last-Translator: Gravity Forms \n" 8 | "Language-Team: Gravity Forms \n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "POT-Creation-Date: 2020-09-30T14:46:51+00:00\n" 13 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 | "X-Generator: WP-CLI 2.4.0\n" 15 | "X-Domain: gravityformsuserregistration\n" 16 | 17 | #. Plugin Name of the plugin 18 | msgid "Gravity Forms User Registration Add-On" 19 | msgstr "" 20 | 21 | #. Plugin URI of the plugin 22 | #. Author URI of the plugin 23 | msgid "https://gravityforms.com" 24 | msgstr "" 25 | 26 | #. Description of the plugin 27 | msgid "Allows WordPress users to be automatically created upon submitting a Gravity Form." 28 | msgstr "" 29 | 30 | #. Author of the plugin 31 | msgid "Gravity Forms" 32 | msgstr "" 33 | 34 | #: class-gf-user-registration.php:89 35 | msgid "Process the feed only when a payment is received." 36 | msgstr "" 37 | 38 | #: class-gf-user-registration.php:488 39 | msgid "Passwords may not contain the character \"\\\"" 40 | msgstr "" 41 | 42 | #: class-gf-user-registration.php:580 43 | msgid "The email address can not be empty" 44 | msgstr "" 45 | 46 | #: class-gf-user-registration.php:591 47 | #: class-gf-user-registration.php:593 48 | msgid "This email address is already registered" 49 | msgstr "" 50 | 51 | #: class-gf-user-registration.php:605 52 | msgid "The username can not be empty" 53 | msgstr "" 54 | 55 | #: class-gf-user-registration.php:611 56 | msgid "This username is invalid because it uses illegal characters. Please enter a valid username." 57 | msgstr "" 58 | 59 | #: class-gf-user-registration.php:617 60 | msgid "The username can only contain alphanumeric characters (A-Z, 0-9), underscores and dashes" 61 | msgstr "" 62 | 63 | #: class-gf-user-registration.php:623 64 | msgid "This username is already registered" 65 | msgstr "" 66 | 67 | #: class-gf-user-registration.php:1026 68 | msgid "Use the password you set at registration to login." 69 | msgstr "" 70 | 71 | #: class-gf-user-registration.php:1028 72 | msgid "Forgot your password? Visit the following address to reset your password:" 73 | msgstr "" 74 | 75 | #: class-gf-user-registration.php:1085 76 | msgid "Oops! You need to be logged in to use this form." 77 | msgstr "" 78 | 79 | #: class-gf-user-registration.php:1805 80 | msgid "Select BuddyPress Field" 81 | msgstr "" 82 | 83 | #: class-gf-user-registration.php:1983 84 | #: includes/class-gf-login-widget.php:201 85 | msgid "Register" 86 | msgstr "" 87 | 88 | #: class-gf-user-registration.php:1985 89 | msgid "Forgot Password" 90 | msgstr "" 91 | 92 | #: class-gf-user-registration.php:2087 93 | msgid "You are currently logged in as %s%s%s. %sLog out?%s" 94 | msgstr "" 95 | 96 | #: class-gf-user-registration.php:2092 97 | #: includes/class-gf-login-widget.php:195 98 | msgid "Logout" 99 | msgstr "" 100 | 101 | #: class-gf-user-registration.php:2256 102 | msgid "Login Form" 103 | msgstr "" 104 | 105 | #: class-gf-user-registration.php:2260 106 | #: includes/class-gf-login-widget.php:36 107 | #: includes/class-gf-login-widget.php:186 108 | msgid "Login" 109 | msgstr "" 110 | 111 | #: class-gf-user-registration.php:2269 112 | #: class-gf-user-registration.php:2666 113 | #: class-gf-user-registration.php:2674 114 | #: includes/class-gf-field-username.php:78 115 | #: includes/class-gf-pending-activations-list.php:18 116 | msgid "Username" 117 | msgstr "" 118 | 119 | #: class-gf-user-registration.php:2277 120 | #: class-gf-user-registration.php:2734 121 | #: class-gf-user-registration.php:2742 122 | msgid "Password" 123 | msgstr "" 124 | 125 | #: class-gf-user-registration.php:2286 126 | #: class-gf-user-registration.php:2293 127 | msgid "Remember Me" 128 | msgstr "" 129 | 130 | #: class-gf-user-registration.php:2409 131 | #: class-gf-user-registration.php:2414 132 | msgid "Access denied." 133 | msgstr "" 134 | 135 | #: class-gf-user-registration.php:2534 136 | msgid "Global Settings" 137 | msgstr "" 138 | 139 | #: class-gf-user-registration.php:2539 140 | #: class-gf-user-registration.php:2547 141 | msgid "Custom Registration Page" 142 | msgstr "" 143 | 144 | #: class-gf-user-registration.php:2543 145 | msgid "Enable Custom Registration Page" 146 | msgstr "" 147 | 148 | #: class-gf-user-registration.php:2547 149 | msgid "When users attempt to access the default WordPress registration page, they will be redirected to this custom page instead." 150 | msgstr "" 151 | 152 | #: class-gf-user-registration.php:2552 153 | msgid "Registration Page" 154 | msgstr "" 155 | 156 | #: class-gf-user-registration.php:2554 157 | msgid "Select a Page" 158 | msgstr "" 159 | 160 | #: class-gf-user-registration.php:2579 161 | msgid "Pages" 162 | msgstr "" 163 | 164 | #: class-gf-user-registration.php:2596 165 | msgid "Other" 166 | msgstr "" 167 | 168 | #: class-gf-user-registration.php:2599 169 | msgid "Custom URL" 170 | msgstr "" 171 | 172 | #: class-gf-user-registration.php:2628 173 | msgid "Feed Settings" 174 | msgstr "" 175 | 176 | #: class-gf-user-registration.php:2633 177 | #: class-gf-user-registration.php:2637 178 | #: class-gf-user-registration.php:3579 179 | msgid "Name" 180 | msgstr "" 181 | 182 | #: class-gf-user-registration.php:2637 183 | msgid "Enter a feed name to uniquely identify this setup." 184 | msgstr "" 185 | 186 | #: class-gf-user-registration.php:2641 187 | #: class-gf-user-registration.php:2646 188 | #: class-gf-user-registration.php:3580 189 | msgid "Action" 190 | msgstr "" 191 | 192 | #: class-gf-user-registration.php:2647 193 | msgid "Select the type of feed you would like to create. \"Create\" feeds will create a new user. \"Update\" feeds will update users." 194 | msgstr "" 195 | 196 | #: class-gf-user-registration.php:2648 197 | msgid "A form can have multiple \"Create\" feeds or a single \"Update\" feed. A form cannot have both a \"Create\" feed and an \"Update\" feed." 198 | msgstr "" 199 | 200 | #: class-gf-user-registration.php:2657 201 | msgid "User Settings" 202 | msgstr "" 203 | 204 | #: class-gf-user-registration.php:2674 205 | msgid "Select the form field that should be used for the user's username." 206 | msgstr "" 207 | 208 | #: class-gf-user-registration.php:2682 209 | #: class-gf-user-registration.php:2688 210 | msgid "First Name" 211 | msgstr "" 212 | 213 | #: class-gf-user-registration.php:2688 214 | msgid "Select the form field that should be used for the user's first name." 215 | msgstr "" 216 | 217 | #: class-gf-user-registration.php:2692 218 | #: class-gf-user-registration.php:2698 219 | msgid "Last Name" 220 | msgstr "" 221 | 222 | #: class-gf-user-registration.php:2698 223 | msgid "Select the form field that should be used for the user's last name." 224 | msgstr "" 225 | 226 | #: class-gf-user-registration.php:2702 227 | #: class-gf-user-registration.php:2708 228 | msgid "Nickname" 229 | msgstr "" 230 | 231 | #: class-gf-user-registration.php:2708 232 | msgid "Select the form field that should be used for the user's nickname." 233 | msgstr "" 234 | 235 | #: class-gf-user-registration.php:2712 236 | #: class-gf-user-registration.php:2716 237 | msgid "Display Name" 238 | msgstr "" 239 | 240 | #: class-gf-user-registration.php:2716 241 | msgid "Select how the user's name should be displayed publicly." 242 | msgstr "" 243 | 244 | #: class-gf-user-registration.php:2720 245 | #: class-gf-user-registration.php:2730 246 | msgid "Email Address" 247 | msgstr "" 248 | 249 | #: class-gf-user-registration.php:2729 250 | msgid "You must have at least one Email Address field." 251 | msgstr "" 252 | 253 | #: class-gf-user-registration.php:2730 254 | msgid "Select the form field that should be used for the user's email address." 255 | msgstr "" 256 | 257 | #: class-gf-user-registration.php:2742 258 | msgid "Select the form field that should be used for the user's password or select \"Set Password via Email Link\" to have a URL emailed to the the user where they can set their password." 259 | msgstr "" 260 | 261 | #: class-gf-user-registration.php:2746 262 | #: class-gf-user-registration.php:2751 263 | msgid "Role" 264 | msgstr "" 265 | 266 | #: class-gf-user-registration.php:2751 267 | msgid "Select the role the user should be assigned." 268 | msgstr "" 269 | 270 | #: class-gf-user-registration.php:2762 271 | msgid "User Meta" 272 | msgstr "" 273 | 274 | #: class-gf-user-registration.php:2782 275 | msgid "BuddyPress Profile" 276 | msgstr "" 277 | 278 | #: class-gf-user-registration.php:2805 279 | msgid "Network Options" 280 | msgstr "" 281 | 282 | #: class-gf-user-registration.php:2818 283 | msgid "Create new site when a user registers." 284 | msgstr "" 285 | 286 | #: class-gf-user-registration.php:2826 287 | #: class-gf-user-registration.php:2829 288 | msgid "Site Address" 289 | msgstr "" 290 | 291 | #: class-gf-user-registration.php:2829 292 | msgid "Select the form field that should be used for the site address." 293 | msgstr "" 294 | 295 | #: class-gf-user-registration.php:2838 296 | #: class-gf-user-registration.php:2841 297 | msgid "Site Title" 298 | msgstr "" 299 | 300 | #: class-gf-user-registration.php:2841 301 | msgid "Select the form field that should be used for the site title." 302 | msgstr "" 303 | 304 | #: class-gf-user-registration.php:2851 305 | #: class-gf-user-registration.php:2855 306 | msgid "Site Role" 307 | msgstr "" 308 | 309 | #: class-gf-user-registration.php:2855 310 | msgid "Select role the user should be assigned on the newly created site." 311 | msgstr "" 312 | 313 | #: class-gf-user-registration.php:2864 314 | #: class-gf-user-registration.php:2868 315 | msgid "Current Site Role" 316 | msgstr "" 317 | 318 | #: class-gf-user-registration.php:2868 319 | msgid "Select role the user should be assigned on the site they registered from. This option overrides the \"Role\" option under User Settings." 320 | msgstr "" 321 | 322 | #: class-gf-user-registration.php:2877 323 | #: class-gf-user-registration.php:2887 324 | #: class-gf-user-registration.php:2903 325 | #: class-gf-user-registration.php:2934 326 | msgid "Send Email?" 327 | msgstr "" 328 | 329 | #: class-gf-user-registration.php:2881 330 | msgid "Send the new site details to the user by email." 331 | msgstr "" 332 | 333 | #: class-gf-user-registration.php:2887 334 | msgid "Specify whether to send the new site details to the user by email. %sEnabled by default.%s" 335 | msgstr "" 336 | 337 | #: class-gf-user-registration.php:2894 338 | msgid "Additional Options" 339 | msgstr "" 340 | 341 | #: class-gf-user-registration.php:2906 342 | msgid "Send the new user an email about their account." 343 | msgstr "" 344 | 345 | #: class-gf-user-registration.php:2907 346 | msgid "Send the new user an email about their account:" 347 | msgstr "" 348 | 349 | #: class-gf-user-registration.php:2914 350 | #: class-gf-user-registration.php:2951 351 | msgid "by email from WordPress" 352 | msgstr "" 353 | 354 | #: class-gf-user-registration.php:2918 355 | msgid "by form notification" 356 | msgstr "" 357 | 358 | #: class-gf-user-registration.php:2924 359 | msgid "Send Email Options" 360 | msgstr "" 361 | 362 | #: class-gf-user-registration.php:2926 363 | msgid "" 364 | "%3$s\n" 365 | "\t\t\t\t\t\t\t\t\t%1$sBy email from WordPress:%2$s%3$s WordPress will send the user an email with their login and a login URL. If the %1$sPassword%2$s setting is configured to \"Set Password via Email Link\", WordPress will include a link where the user can set their password.%3$s%3$s\n" 366 | "\t\t\t\t\t\t\t\t\t%1$sBy form notification:%2$s%3$s Configure a form notification for the desired User Registration event. If the %1$sPassword%2$s setting is configured to \"Set Password via Email Link\", you must include the %4$s{set_password_url}%5$s merge tag in your notification to provide a URL where the user can set their password." 367 | msgstr "" 368 | 369 | #: class-gf-user-registration.php:2934 370 | msgid "Specify whether an email (or notification) should be sent to the new user about their account. %sEnabled by default.%s" 371 | msgstr "" 372 | 373 | #: class-gf-user-registration.php:2942 374 | #: class-gf-user-registration.php:2969 375 | msgid "User Activation" 376 | msgstr "" 377 | 378 | #: class-gf-user-registration.php:2945 379 | msgid "Enable user activation." 380 | msgstr "" 381 | 382 | #: class-gf-user-registration.php:2946 383 | msgid "Enable user activation:" 384 | msgstr "" 385 | 386 | #: class-gf-user-registration.php:2955 387 | msgid "manually or by form notification" 388 | msgstr "" 389 | 390 | #: class-gf-user-registration.php:2960 391 | msgid "User Activation Type" 392 | msgstr "" 393 | 394 | #: class-gf-user-registration.php:2962 395 | msgid "" 396 | "%3$s\n" 397 | "\t\t\t\t\t\t\t\t%1$sBy Email:%2$s%3$sWordPress will send the user an email with an activation link.%3$s%3$s\n" 398 | "\t\t\t\t\t\t\t\t%1$sManually:%2$s%3$sActivate each user manually from the Pending Activations page or send a form notification for the User Activation event with an activation link (via the %4$s{activation_url}%5$s merge tag)." 399 | msgstr "" 400 | 401 | #: class-gf-user-registration.php:2969 402 | msgid "Send users an email with an activation link. Users are only registered once they have activated their accounts." 403 | msgstr "" 404 | 405 | #: class-gf-user-registration.php:2977 406 | #: class-gf-user-registration.php:2982 407 | msgid "Update Condition" 408 | msgstr "" 409 | 410 | #: class-gf-user-registration.php:2977 411 | #: class-gf-user-registration.php:2983 412 | msgid "Registration Condition" 413 | msgstr "" 414 | 415 | #: class-gf-user-registration.php:2979 416 | msgid "Enable" 417 | msgstr "" 418 | 419 | #: class-gf-user-registration.php:2980 420 | msgid "Update user if" 421 | msgstr "" 422 | 423 | #: class-gf-user-registration.php:2980 424 | msgid "Register user if" 425 | msgstr "" 426 | 427 | #: class-gf-user-registration.php:2982 428 | msgid "When the update condition is enabled, form submissions will only update the user when the condition is met. The user data will always be populated into the form." 429 | msgstr "" 430 | 431 | #: class-gf-user-registration.php:2983 432 | msgid "When the registration condition is enabled, form submissions will only register the user when the condition is met." 433 | msgstr "" 434 | 435 | #: class-gf-user-registration.php:2993 436 | #: class-gf-user-registration.php:3003 437 | msgid "Set Post Author" 438 | msgstr "" 439 | 440 | #: class-gf-user-registration.php:2997 441 | msgid "Set user as post author." 442 | msgstr "" 443 | 444 | #: class-gf-user-registration.php:3003 445 | msgid "When a form submission creates a post and registers a user, set the new user as the post author. %sEnabled by default.%s" 446 | msgstr "" 447 | 448 | #: class-gf-user-registration.php:3185 449 | msgid "Set as %s" 450 | msgstr "" 451 | 452 | #: class-gf-user-registration.php:3195 453 | msgid "Deactivate site" 454 | msgstr "" 455 | 456 | #: class-gf-user-registration.php:3199 457 | msgid "Delete site" 458 | msgstr "" 459 | 460 | #: class-gf-user-registration.php:3221 461 | msgid "Standard User Meta" 462 | msgstr "" 463 | 464 | #: class-gf-user-registration.php:3224 465 | msgid "Website" 466 | msgstr "" 467 | 468 | #: class-gf-user-registration.php:3228 469 | msgid "AIM" 470 | msgstr "" 471 | 472 | #: class-gf-user-registration.php:3232 473 | msgid "Yahoo" 474 | msgstr "" 475 | 476 | #: class-gf-user-registration.php:3236 477 | msgid "Jabber / Google Talk" 478 | msgstr "" 479 | 480 | #: class-gf-user-registration.php:3240 481 | msgid "Biographical Information" 482 | msgstr "" 483 | 484 | #: class-gf-user-registration.php:3293 485 | msgid "Other User Meta" 486 | msgstr "" 487 | 488 | #: class-gf-user-registration.php:3300 489 | msgid "Add Custom Meta" 490 | msgstr "" 491 | 492 | #: class-gf-user-registration.php:3305 493 | msgid "Select Meta Key" 494 | msgstr "" 495 | 496 | #: class-gf-user-registration.php:3387 497 | msgid "— Preserve current email —" 498 | msgstr "" 499 | 500 | #: class-gf-user-registration.php:3403 501 | msgid "— Preserve current password —" 502 | msgstr "" 503 | 504 | #: class-gf-user-registration.php:3408 505 | msgid "Set Password via Email Link" 506 | msgstr "" 507 | 508 | #: class-gf-user-registration.php:3419 509 | msgid "Create User" 510 | msgstr "" 511 | 512 | #: class-gf-user-registration.php:3424 513 | msgid "Update User" 514 | msgstr "" 515 | 516 | #: class-gf-user-registration.php:3521 517 | msgid "— Preserve current display name —" 518 | msgstr "" 519 | 520 | #: class-gf-user-registration.php:3544 521 | msgid "Select a Role" 522 | msgstr "" 523 | 524 | #: class-gf-user-registration.php:3561 525 | msgid "— Preserve current role —" 526 | msgstr "" 527 | 528 | #: class-gf-user-registration.php:3568 529 | msgid "— No role for this site —" 530 | msgstr "" 531 | 532 | #: class-gf-user-registration.php:3712 533 | msgid "User Registration Options" 534 | msgstr "" 535 | 536 | #: class-gf-user-registration.php:3721 537 | msgid "Delay User Registration" 538 | msgstr "" 539 | 540 | #: class-gf-user-registration.php:3734 541 | msgid "Update User on Cancel" 542 | msgstr "" 543 | 544 | #: class-gf-user-registration.php:3737 545 | msgid "Update user when subscription is cancelled." 546 | msgstr "" 547 | 548 | #: class-gf-user-registration.php:3748 549 | msgid "Update Site on Cancel" 550 | msgstr "" 551 | 552 | #: class-gf-user-registration.php:3751 553 | msgid "Update site when subscription is cancelled." 554 | msgstr "" 555 | 556 | #: class-gf-user-registration.php:4320 557 | msgid "Site is created" 558 | msgstr "" 559 | 560 | #: class-gf-user-registration.php:4321 561 | msgid "User is pending activation" 562 | msgstr "" 563 | 564 | #: class-gf-user-registration.php:4322 565 | msgid "User is activated" 566 | msgstr "" 567 | 568 | #: class-gf-user-registration.php:4323 569 | msgid "User is registered" 570 | msgstr "" 571 | 572 | #: class-gf-user-registration.php:4324 573 | msgid "User is updated" 574 | msgstr "" 575 | 576 | #: class-gf-user-registration.php:4325 577 | msgid "User pending activation deleted" 578 | msgstr "" 579 | 580 | #: class-gf-user-registration.php:4369 581 | msgid "User Activation URL" 582 | msgstr "" 583 | 584 | #: class-gf-user-registration.php:4372 585 | msgid "Set Password URL" 586 | msgstr "" 587 | 588 | #: includes/activate.php:110 589 | msgid "Set at registration." 590 | msgstr "" 591 | 592 | #: includes/activate.php:112 593 | msgid "Check your email for the set password link." 594 | msgstr "" 595 | 596 | #: includes/activate.php:114 597 | msgid "Set your password." 598 | msgstr "" 599 | 600 | #: includes/class-gf-field-username.php:89 601 | msgid "Allows users to choose their own username when registering a new account." 602 | msgstr "" 603 | 604 | #: includes/class-gf-login-widget.php:39 605 | msgid "Gravity Forms Login Widget" 606 | msgstr "" 607 | 608 | #: includes/class-gf-login-widget.php:205 609 | msgid "Forgot Password?" 610 | msgstr "" 611 | 612 | #: includes/class-gf-login-widget.php:225 613 | #: includes/class-gf-login-widget.php:283 614 | msgid "Title" 615 | msgstr "" 616 | 617 | #: includes/class-gf-login-widget.php:241 618 | msgid "Login Redirect URL" 619 | msgstr "" 620 | 621 | #: includes/class-gf-login-widget.php:242 622 | msgid "Current Page" 623 | msgstr "" 624 | 625 | #: includes/class-gf-login-widget.php:246 626 | #: includes/class-gf-login-widget.php:294 627 | msgid "Links" 628 | msgstr "" 629 | 630 | #: includes/class-gf-login-widget.php:254 631 | #: includes/class-gf-login-widget.php:262 632 | #: includes/class-gf-login-widget.php:302 633 | #: includes/class-gf-login-widget.php:310 634 | msgid "Link Text" 635 | msgstr "" 636 | 637 | #: includes/class-gf-login-widget.php:256 638 | #: includes/class-gf-login-widget.php:264 639 | #: includes/class-gf-login-widget.php:304 640 | #: includes/class-gf-login-widget.php:312 641 | msgid "Link URL" 642 | msgstr "" 643 | 644 | #: includes/class-gf-login-widget.php:269 645 | #: includes/class-gf-login-widget.php:317 646 | msgid "Add Link" 647 | msgstr "" 648 | 649 | #: includes/class-gf-login-widget.php:273 650 | msgid "Tab Index Start" 651 | msgstr "" 652 | 653 | #: includes/class-gf-login-widget.php:289 654 | msgid "Welcome Message" 655 | msgstr "" 656 | 657 | #: includes/class-gf-login-widget.php:321 658 | msgid "Logout Redirect URL" 659 | msgstr "" 660 | 661 | #: includes/class-gf-login-widget.php:328 662 | msgid "Show user avatar" 663 | msgstr "" 664 | 665 | #: includes/class-gf-pending-activations-list.php:19 666 | msgid "Email" 667 | msgstr "" 668 | 669 | #: includes/class-gf-pending-activations-list.php:86 670 | msgid "Activate this sign up" 671 | msgstr "" 672 | 673 | #: includes/class-gf-pending-activations-list.php:86 674 | msgid "Activate this sign up? " 675 | msgstr "" 676 | 677 | #: includes/class-gf-pending-activations-list.php:86 678 | msgid "\\'Cancel\\' to stop, \\'OK\\' to activate." 679 | msgstr "" 680 | 681 | #: includes/class-gf-pending-activations-list.php:86 682 | #: includes/class-gf-pending-activations-list.php:111 683 | msgid "Activate" 684 | msgstr "" 685 | 686 | #: includes/class-gf-pending-activations-list.php:89 687 | msgid "View the entry associated with this sign up" 688 | msgstr "" 689 | 690 | #: includes/class-gf-pending-activations-list.php:89 691 | msgid "View Entry" 692 | msgstr "" 693 | 694 | #: includes/class-gf-pending-activations-list.php:92 695 | msgid "Delete this sign up?" 696 | msgstr "" 697 | 698 | #: includes/class-gf-pending-activations-list.php:92 699 | msgid "Delete this sign up? " 700 | msgstr "" 701 | 702 | #: includes/class-gf-pending-activations-list.php:92 703 | msgid "\\'Cancel\\' to stop, \\'OK\\' to delete." 704 | msgstr "" 705 | 706 | #: includes/class-gf-pending-activations-list.php:92 707 | #: includes/class-gf-pending-activations-list.php:112 708 | msgid "Delete" 709 | msgstr "" 710 | 711 | #: includes/class-gf-pending-activations.php:158 712 | #: includes/class-gf-pending-activations.php:215 713 | #: includes/class-gf-pending-activations.php:381 714 | #: includes/class-gf-pending-activations.php:382 715 | msgid "Pending Activations" 716 | msgstr "" 717 | 718 | #: includes/class-gf-pending-activations.php:352 719 | msgid "Item deleted." 720 | msgid_plural "Items deleted." 721 | msgstr[0] "" 722 | msgstr[1] "" 723 | 724 | #: includes/class-gf-pending-activations.php:354 725 | msgid "There was an issue deleting this item." 726 | msgid_plural "There was an issue deleting one or more selected items." 727 | msgstr[0] "" 728 | msgstr[1] "" 729 | 730 | #: includes/class-gf-pending-activations.php:363 731 | msgid "There was an issue activating this item" 732 | msgid_plural "There was an issue activating one or more selected items" 733 | msgstr[0] "" 734 | msgstr[1] "" 735 | 736 | #: includes/class-gf-pending-activations.php:367 737 | msgid "User activated." 738 | msgid_plural "Users activated." 739 | msgstr[0] "" 740 | msgstr[1] "" 741 | 742 | #: includes/class-gf-pending-activations.php:435 743 | msgid "User Registration" 744 | msgstr "" 745 | 746 | #: includes/class-gf-pending-activations.php:461 747 | msgid "Pending Activation" 748 | msgstr "" 749 | 750 | #: includes/class-gf-pending-activations.php:461 751 | msgid "This entry created a user who is pending activation. Click the \"Activate User\" button to activate the user." 752 | msgstr "" 753 | 754 | #: includes/class-gf-pending-activations.php:468 755 | msgid "Are you sure you want to activate this user?" 756 | msgstr "" 757 | 758 | #: includes/class-gf-pending-activations.php:488 759 | msgid "User Activated Successfully!" 760 | msgstr "" 761 | -------------------------------------------------------------------------------- /change_log.txt: -------------------------------------------------------------------------------- 1 | ### 4.6 | 2020-09-30 2 | - Added translations for Japanese. 3 | - Added support for Gravity Forms 2.5. 4 | - Updated the activation page query string to use the "gfur_activation" parameter instead of "page" to fix an issue with WordPress 5.5 where a 404 not found error occurs. Existing activation links will automatically redirect to the new page. 5 | - Fixed an issue where the password can fail validation on login if the user object is cached when the user is created and feed processing is delayed by the user activation feature or a payment add-on such as PayPal Standard. 6 | - Fixed an issue where the set password URL included in the notification sent on the user is activated event becomes invalid when the user is activated via the front-end activation page. 7 | - Fixed a validation error which occurs when using the update type feed and the submitted email address uses a different case to the users current email. 8 | - Fixed an issue that prevents the dropdown to select notification type in the "Send Email?" setting of a create user feed from displaying in certain situations. 9 | - Fixed an issue during user update for passwords containing quotes which results in a password validation error on login. 10 | - Fixed an issue during user creation for passwords containing quotes which results in a password validation error on login. 11 | - Fixed an issue where feed processing aborts early when the activation feature is enabled and the [gform_user_registration_validation](https://docs.gravityforms.com/gform_user_registration_validation/) and [gform_user_registration_check_email_pre_signup_activation](https://docs.gravityforms.com/gform_user_registration_check_email_pre_signup_activation/) filters are being used to allow multiple accounts to use the same email address. 12 | 13 | 14 | ### 4.5 | 2020-05-14 15 | - Added security enhancements. 16 | - Added translations for Hebrew, Hindi, and Turkish. 17 | - Added *[gform_user_registration_pending_activation_expiration](https://docs.gravityforms.com/gform_user_registration_pending_activation_expiration/)* filter that allows the expiration period for the pending activation users to be overridden. 18 | - Added support for sending notifications when the pending activation is deleted. 19 | - Updated the settings on the feed configuration page. See [Creating a Feed for the User Registration Add-On](https://docs.gravityforms.com/creating-feed-user-registration-add/) for the available settings. 20 | - Updated the new user emails to be sent by [wp_new_user_notification()](https://developer.wordpress.org/reference/functions/wp_new_user_notification/) instead of gf_new_user_notification(). 21 | - Updated the default activation page template. 22 | - Updated Javascript files, stylesheets to use minified versions. 23 | - Fixed an issue introduced in v4.4.6 where WordPress does not send the new user email for new feeds. 24 | - Fixed a database error on multisite installations related to the WordPress signups table. 25 | - Fixed a notice with PHP 7.4 when creating a new feed. 26 | - Fixed a PHP notice being displayed when a custom meta value is not a string. 27 | - Fixed a PHP compatibility warning in PHP 7.1+ when getting the set password URL due to using $this within a plain function. 28 | 29 | 30 | ### 4.4 | 2019-09-25 31 | - Added support for Stripe Checkout to display the "User Registration Options" section in the feed. 32 | - Fixed an issue where a site cannot be updated when the subscription is canceled on a multisite install. 33 | - Fixed a PHP warning which occurs when an invalid form ID is used with the gravityform shortcode. 34 | 35 | 36 | ### 4.3 | 2019-08-07 37 | - Added security enhancements. 38 | 39 | 40 | ### 4.2 | 2019-07-10 41 | - Added security enhancements. 42 | 43 | 44 | ### 4.1 | 2019-05-15 45 | - Added *[gform_userregistration_associate_entry_with_user](https://docs.gravityforms.com/gform_userregistration_associate_entry_with_user/)* filter to add change if newly created user should be set as entry creator. 46 | - Updated minimum Gravity Forms version to 2.2.6. 47 | - Updated feed settings to display Set Post Author setting when form has Advanced Post Creation feeds. 48 | - Updated Login widget to set logout redirect to current page when logout redirect URL setting is left empty. 49 | - Fixed entry not being associated to newly created user when submitter is not logged in. 50 | - Fixed an issue with pending activation for duplicate emails. 51 | - Fixed PHP notice after Gravity Form 2.4.7 adding tab capabilities check. 52 | - Fixed an issue preventing the personal data retention policy from deleting entries. 53 | - Fixed an issue that the consent field didn't reflect user metadata correctly. 54 | - Fixed an issue populating checkbox fields from BuddyPress checkboxes types fields when processing the update type feed on form display. 55 | - Fixed issues processing multi-select fields when mapped to BuddyPress multi select box fields during submission for both feed types and on form display for the update type feed. 56 | - Fixed a PHP 7.3 warning when the update type feed is populating the form and it contains a file upload field. 57 | 58 | 59 | ### 4.0 | 2018-12-19 60 | - Added support for data retention in Gravity Forms 2.4. 61 | - Fixed an issue with login widget when using special characters in password. 62 | - Fixed an issue where the username, email, and password fields may not be validated on multi-page forms if the feed conditional logic is not met when the page containing those fields is submitted. 63 | - Fixed a deprecated function notice with PHP 7.2 when processing update type feeds on form display. 64 | - Fixed BuddyPress overriding the role after the user is created. 65 | - Fixed text domains for string translations. 66 | - Fixed the user_nicename being saved to the _usermeta table instead of the _users table. 67 | - Fixed an issue with the login form submission when the password contains the less than character. 68 | - Fixed a fatal error which occurred if the GFFormDisplay class is not available when getting the login form HTML. 69 | - Fixed an issue introduced in 3.9 which prevents the Pending Activations from being listed when the database tables are utf8 encoded instead of the newer utf8mb4. 70 | 71 | 72 | ### 3.9 | 2018-01-29 73 | - Added support for Gravity Forms 2.3. 74 | - Added GPL to the plugin header. 75 | - Added the "Preserve current email" choice to the email address mapping drop down on the update type feed. 76 | - Updated URIs in plugin header to use https. 77 | - Updated username validation message to match WordPress' equivalent validation message. 78 | - Updated strings in pending activations so they could be translated. 79 | - Fixed an issue which can prevent pending activations from being listed due to collation mismatch after installing the add-on after upgrading MySQL from 5.5 to 5.6. 80 | - Fixed a PHP warning related to the login form/widget logged in/out links. 81 | 82 | 83 | ### 3.8 | 2017-10-26 84 | - Added *gform_userregistration_login_form* filter to allow modifying the login form object. 85 | - Added *gf_login_form* class to login form wrapper. 86 | - Added validation error message to login form when an invalid email address is used. 87 | - Updated user meta shortcode to retrieve multiple user meta items when output is set to CSV or list. 88 | - Fixed multi-input field not being populated, in some situations, when processing update type feeds on form display. 89 | - Fixed issue where $user_id returned by *gform_user_registration_update_user_id* filter was not respected when updating a user. 90 | - Fixed a fatal error which could occur with PHP 7.1 when using a login widget without logged in and/or logged out links. 91 | - Fixed a fatal error which can occur when getting the BuddyPress fields. 92 | - Fixed a notice which could occur with PHP 7.1 during update type feed processing on form display when populating Checkbox fields. 93 | - Fixed an issue populating Multi Select fields created with Gravity Forms 2.2+ when processing update type feeds on form display. 94 | 95 | 96 | ### 3.7 | 2017-02-20 97 | - Added security enhancements. Credit: Fletcher Horton - Horton's Art LLC. 98 | - Fixed a PHP warning when populating a form field using the value from a BuddyPress datebox type field. 99 | - Renamed the function hooked to the *gform_merge_tags* filter to prevent conflicts with other add-ons and custom code snippets. 100 | - Updated gf_user_registration_login_form() to allow for login form arguments to be passed directly through a parameter. 101 | 102 | 103 | ### 3.6 | 2017-01-05 104 | - Added logging of BuddyPress field processing. 105 | - Fixed an issue where the number field value may not use the format configured on the field. 106 | - Fixed fatal error on main settings page when running PHP 7.1. 107 | - Fixed strings for translations. 108 | - Fixed an issue with the markup for the login widgets logged in message. 109 | 110 | 111 | ### 3.5 | 2016-11-04 112 | - Added support for the {set_password_url} merge tag. 113 | - Updated 'User activation' notification event label to 'User is pending activation'. 114 | - Updated Pending Activations table to be responsive. 115 | - Updated to use a meta box to include the activate user button on the entry detail with Gravity Forms 2.0+. 116 | - Fixed a timing issue with the inclusion of the GF_Field_Username class which in some situations caused the username field to be initialized in the form object using the basic GF_Field object resulting in the field input being missing when the form was rendered. 117 | - Fixed feed not being passed through the *gform_addon_pre_process_feeds* filters in some situations. 118 | - Fixed a PHP notice which could occur when an update type feed populates checkbox type fields with values stored in ACF checkboxes. 119 | - Fixed an issue with the Login button which prevented it being translated. 120 | - Fixed an issue with the custom registration page redirect. 121 | - Fixed an issue with the default logged in message for the login shortcode. 122 | 123 | 124 | ### 3.4 | 2016-08-31 125 | - Added additional logging statements. 126 | - Added the *gform_user_registration_user_meta_options* filter to allow the options for the "Other User Meta" group in the User Meta setting on the settings page to be set before running the query against the usermeta table for existing meta keys. If the return value is not empty then the query for existing meta keys will not run. 127 | - Updated German (de_DE) translation to fix an issue in Pending Activations page when Deutsch language is selected in WP settings due to incorrect usage of double quotes in the translation file. 128 | - Fixed issue when trying to hide title, description or logged in avatar with the login shortcode. 129 | - Fixed issue when including the deprecated.php file on some installations. 130 | - Fixed a typo in the capability for the pending activations page under the Users menu. 131 | - Fixed fatal error which could occur if the BP_XProfile_Field class already exists. 132 | - Fixed fatal error which could occur if the BP_XProfile_Group class already exists. 133 | - Fixed an issue with the activation url if the WordPress Address and Site Address URLs differ. 134 | - Fixed notice generated during validation when form did not have a password field 135 | - Fixed issue with password validation. 136 | - Fixed GF_Field array access/object notation notices with Gravity Forms 2.0. 137 | 138 | 139 | ### 3.3 | 2016-04-19 140 | - Added support for redirect_to query parameter for login/logout form. 141 | - Added German translation. Credit: Dominik Horn - netzstrategen. 142 | - Updated wp_new_user_notification() to be gf_new_user_notification() to avoid issues where users are attempting to override the same function. Users wishing to override this function can do so by defining their own version in a theme or plugin. 143 | - Updated login widget interface. 144 | - Updated login widget editor to restore previously active tab after save. 145 | - Updated some strings on the feed settings page. 146 | - Updated 'Add Link' string in Login widget to be translatable. 147 | - Updated Chinese (China) translation. Credit: Edi Michael. 148 | - Updated Spanish (es_ES) translation. 149 | - Updated login widget to not use boolval(). 150 | - Fixed an issue with the PayPal integration with Gravity Forms 2.0. 151 | - Fixed an issue where a PHP notice would appear when enqueuing scripts when not logged in. 152 | - Fixed issue with login redirect URL not populating properly. 153 | - Fixed an issue populating the Checkbox field when processing the update feed on form render. 154 | - Fixed fatal error when using "user" shortcode in list output mode and meta value is not an array. 155 | - Fixed textdomain for some strings. 156 | 157 | 158 | ### 3.2 | 2016-03-08 159 | - Added Chinese (China, Hong Kong, and Taiwan) translations. Credit: Jason Hoi. 160 | - Added feed settings option to send user email when site is created. 161 | - Added *gform_user_registration_login_args* filter to modify all login form arguments. 162 | - Added *gform_user_registration_login_form_title* filter to modify login form title. 163 | - Added *gform_user_registration_login_form_description* filter to modify login form description. 164 | - Added *gform_user_registration_login_redirect_url* filter to modify redirect url after success login. 165 | - Added "Nickname" option to User Settings feed settings. 166 | - Added notification events: Site is created, User activation, User is activated, User is registered, User is updated. 167 | - Added "Preserve existing Display Name" option to update user feeds. 168 | - Added support for feed duplication. 169 | - Added support for using a custom link as the custom registration page. 170 | - Added user login via widget. 171 | - Added "user" action to Gravity Forms shortcode to retrieve user object and meta data (e.g. [gravityform action="user" key="display_name"]). 172 | - Added "Username" field to Advanced Fields. 173 | - Added additional logging statements. 174 | - Added support for the {activation_url} merge tag. 175 | - Fixed a fatal error which could occur on the pending activations page when attempting to display the activation error message. 176 | - Fixed an issue pre-populating the List field when processing the update feed on form render. 177 | - Fixed an issue where the post author was not set when the entry was marked as not spam. 178 | - Fixed an issue which could prevent user activation for users created by the pre-framework version if conditional logic is configured on the feeds. 179 | - Fixed an issue with BuddyPress overriding the activation emails which prevented the add-on handling user creation when the activation link was used. 180 | - Fixed an issue with the entry id stored in the user meta being overridden when an update feed is processed. 181 | - Fixed an issue with the post author not being set. 182 | - Updated feed action feed settings field to use visual radio buttons. 183 | - Updated feed settings for PayPal Standard to only display once the transaction type is selected and to only display the update user and site settings when the subscription type is selected. 184 | - Updated user role feed settings field to be a required field. 185 | - Updated wp_new_user_notification() to support logging the result from wp_mail(). 186 | 187 | 188 | ### 3.1 | 2016-01-27 189 | - Updated processing of post category field value to use object notation. 190 | - Updated logging around processing of user meta. 191 | - Fixed an issue with the multi select field value when saving it to the user meta. 192 | - Fixed a fatal error which could occur with PHP versions older than 5.3 when including the deprecated functions file. 193 | - Fixed an issue with the capabilities. 194 | - Fixed an issue with the choices for display name setting not being translatable. 195 | 196 | 197 | ### 3.0 | 2016-01-20 198 | - Added integration with Add-On Framework. 199 | - Added new filter *gform_userregistration_feed_settings_fields* for modifying UR feed settings. 200 | - Added *gform_user_registration_check_email_pre_signup_activation* filter for allowing the user to disable the check for an email being already used by a registered user. 201 | *add_filter( 'gform_user_registration_check_email_pre_signup_activation', '__return_false' );* 202 | - Added *gform_userregistration_delete_signup* hook to allow custom actions to be performed when pending activations are deleted. 203 | add_action( 'gform_userregistration_delete_signup', function( $signup ) { 204 | // do something 205 | } ); 206 | [Usage example here](https://gist.github.com/spivurno/15592a66497096338864) 207 | - Updated Spanish (es_ES) translation. 208 | - Updated update feed so that email isn't required. 209 | - Updated maybe_prepopulate_form() and handle_existing_images_submission() so the *gform_user_registration_update_user_id* filter can be used to override which user is used to populate the form. 210 | - Fixed an issue which could prevent the user email being sent when manually adding a user via Users > Add New. 211 | - Fixed a fatal error which could occur when processing BuddyPress data if the mapped field was a not a form field. 212 | - Fixed a fatal error which could occur when processing uploads if the mapped field was a not a form field. 213 | - Fixed issue where activation notification was not sent for for new users and new sites in WP 4.4 214 | - Fixed an issue with passwords containing quotes. 215 | - Fixed issue where password wasn't getting sent via email. 216 | - Fixed an issue with the pending activations page including blank rows for signups which do not have an associated GF entry. 217 | - Fixed an issue with username and email validation not taking pending activations into account. 218 | - Fixed issue where BuddyPress functions were triggered when BuddyPress was not active. 219 | 220 | 221 | ### 2.0.2 | 2014-12-08 222 | - Fixed issue where date fields were not mapped correctly in newer versions of BuddyPress. 223 | 224 | 225 | ### 2.0.1 226 | - Fixed typo in a translation string in userregistration.php. 227 | - Updated POT file. 228 | 229 | 230 | ### 2.0 | 2014-11-05 231 | - Added support for updating file upload fields mapped to BuddyPress image fields (available via BP add-on). 232 | - Added additional logging statements. 233 | - Updated pending activation so that it doesn't rely on the password being in the entry. 234 | - Updated POT file. 235 | - Updated plugin updated method so that it takes advantage of proxy manager to get around the blacklisted IP issue. 236 | - Fixed issue where pending activations were not sorted correctly. 237 | - Fixed update feeds in Gravity Forms 1.9. 238 | - Fixed issue where BuddyPress field visibility was ignored. 239 | - Fixed warning message on plugin's page. 240 | - Fixed notice when 'create_site' feed meta was not set. 241 | - Fixed issue where "Simple" type Name fields did not map to user meta correctly. 242 | - Fixed issue where data pulled from BuddyPress was not always correctly matched since the HTML entities were already encoded. 243 | - Fixed issue whith PayPal integration where users were not getting created when payment was manually being marked as Approved on the entry detail page. 244 | - Fixed notice thrown when updating BuddyPress Last Activity meta; updated to use new version. 245 | - Fixed issue where the upgrade class wasn't included which caused ManageWP to not work with add-on. 246 | - Fixed notices thrown in the downgrade_paypal_user function. 247 | 248 | 249 | ### 1.9 | 2014-05-29 250 | - Added *gform_user_registration_new_site_meta* filter for filtering the meta used to create a new site 251 | add_filter( 'gform_user_registration_new_site_meta', 'add_blog_template', 10, 6 ); 252 | function add_blog_template( $site_meta, $form, $entry, $feed, $user_id, $is_update_feed ) { 253 | $signup_meta['blog_template'] = 1; 254 | return $signup_meta; 255 | } 256 | - Added "Preserve current role" option for "Current Site Role" setting. 257 | - Added *gform_user_registration_signup_meta* filter for filtering the signup meta 258 | add_filter( 'gform_user_registration_signup_meta', 'add_blog_template', 10, 4 ); 259 | function add_blog_template( $signup_meta, $form, $entry, $feed ) { 260 | $signup_meta['blog_template'] = 1; 261 | return $signup_meta; 262 | } 263 | - Added current user object to wpmu_validate_blog_signup() call to allow registering sites with the same name as the current user. 264 | - Fixed the functions used by the mwp_premium_update_notification and mwp_premium_perform_update hooks so that the new_version element in the array returns the add-on's version instead of Gravity Forms. 265 | - Fixed issue where signups table on single site installs failed to update correctly when promoting site to multisite. 266 | - Fixed issue where activation emails were sent even though manual activation was enabled. 267 | - Fixed strict notice for Non-static method GFUserSignups::install_signups(). 268 | 269 | 270 | ### 1.8 | 2014-03-31 271 | - Added more debug statements for logging. 272 | - Added logging support and some initial debug statements. 273 | - Updated two strings in activate.php to match their equivalents in wp-activate.php (as of WP 1.8.1). 274 | - Updated signup activation to check if email address is already in use and return a message indicating such. 275 | - Updated all places where RGUserUpgrade class was manually included to use new GFUser::include_upgrade_library() method. 276 | - Fixed notice with missing variable $set_post_author. 277 | - Fixed issue on single site installs where activation email title and from name defaulted to "WordPress". 278 | - Fixed issue on Update form where pre-population didn't always work when a value was set to zero. 279 | - Fixed issue where RGUserUpgrade class was called but not included. 280 | - Fixed issue where single column list fields were not updating correctly on Update feeds. 281 | - Fixed issue where deprecated functions were used in activation process. 282 | - Fixed issue in Update feed on multi-site where email address said to already be used. 283 | 284 | 285 | ### 1.7 | 2013-09-05 286 | - Fixed issue with invalid site domain and path when creating a new site. 287 | - Fixed issue with email activation link displaying errors when mapping BBPress fields. 288 | - Fixed issue where $base global variable in wp-config.php may not have the trailing slash, causing the site url created to be bad. 289 | - Fixed bug where PayPal integration caused user to be registered regardless of being set to manual/email activation. 290 | 291 | 292 | ### 1.6 | 2013-06-19 293 | - Updated automatic upgrade so that it caches remote requests for 12 hours (even on plugin's page). 294 | - Updated multisite username and email validation to only apply if the correct page is being validated. 295 | - Updated to allow mapping to POST fields for Update User feed. 296 | - Fixed issue with form action on activate.php when invalid activation key provided. 297 | - Fixed issue with display name not being set correctly on an create feed. 298 | - Fixed issue were BP on single site installs was overwriting standard user meta fields (ie first name, last name, nicename). 299 | - Fixed issue where email validation allowed update feeds to use already used email addresses. 300 | - Added better support for file uploads on forms with update feeds. 301 | - Fixed issue where multisite validation on Update feeds generated error when using existing email. 302 | 303 | 304 | ### 1.5 | 2013-04-01 305 | - Added support for custom registration page for multi-site installs. 306 | - Fixed link location for drop down on Pending Activations page which takes user to view All pending or form-specific pending. 307 | - Fixed issue where All pending activations was returning no records. 308 | - Fixed issue where usernames with spaces were not displaying in pending activation table. 309 | - Added "back to list" link on successful activation on Pending Activations page. 310 | - Updated Pending Activations table to only show form column when viewing All Pending Activations. 311 | - Updated UI to remove tabs. 312 | - Fixed issue where update_user() function was not correctly saving the user's email. 313 | - Fixed errors when populating an update fields with values containing single quotes. 314 | - Added support for specifying user activation type (manual, by email). 315 | - Updated roles drop down on feed page to order by a custom sort (subscriber first). 316 | - Fixed issue when updating user's website meta on an update feed. 317 | - Fixed issue with mapping category fields to BuddyPress. 318 | - Fixed error on update feed form when Buddy Press is uninstalled. 319 | - Fixed issue with checkboxes not being saved correctly when unchecked from an update feed. 320 | - Fixed issue with date fields not being formatted correctly when populating fields in an update feed. 321 | - Fixed issue with plugin-upgrade.php where failed remote response generated several notices. 322 | - Added support for saving processed config in entry meta and retrieving this from get_active_config() function. 323 | - Fixed issue where multiple file upload fields were not be populated correctly (powered by update feed). 324 | - BP functions bound to gform_user_registered were not being bound in the admin as the gform_user_registered hook was not previously fired in the admin (now fires when manually activating a pending activation). 325 | - Fixed issue where "wp_" prefix was being used instead of "$wpdb->prefix" Busted! 326 | - refactored form population for update feeds. 327 | - added support for list fields for update feeds. 328 | - fixed issue with date field population for update feeds. 329 | - Fixed issue with hardcoded table prefix. 330 | - Fixed issue with AJAX call when admin is configured to force SSL. 331 | - Fixed issue where Gravity Forms was being required and failing to find plugin. 332 | - Fixed issue where values being populated back into form for update feeds were not escaping single quotes which caused errors. 333 | - Fixed issue where unescaped single quotes were causing issues on feed editor. 334 | - Fixed issue where custom meta fields with 0 as a value weren't saving to the database. 335 | - Fixed notices when form inputs array doesn't exist which caused AJAX spinner to remain and no form fields were displayed. 336 | - fixed compatability issue with BP 1.6 where BP profile function is no longer available. 337 | - added "gform_disable_registration" hook to allow add-ons to prevent User Registration from registering/updating a user. 338 | - fixed issue where using wp_get_current_user() function was failing to update users when wait for payment option was checked. 339 | - fixed issue where "Pending Activations" link displayed in feed actions for Update feeds. 340 | - fixed issue where "Send Email?" option was displaying for Update feeds. 341 | - fixed issue where "Preserve current role" option was not preserving user's role for new feeds. 342 | - fixed issue were active status was not taken into account when retrieving update feed. 343 | - Fixed issue where new feed options were not displaying immediately. 344 | - Added support for displaying all user meta keys in feed meta key drop downs. 345 | - Fixed UI to read "Action" instead of "Feed Type". 346 | - Added pending activation link to entry detail page. 347 | - Added support for multiple feeds per form. 348 | - Added support for user activation on a per feed basis. 349 | - Added support for "update" feed types. 350 | - Added new conditional logic options (greater than, less than, contains starts with, ends with) and support for other conditional fields. 351 | - Fixed notices. 352 | 353 | 354 | ### 1.4 | 2012-03-27 355 | - Fixed typo. 356 | - Fixed issue where users were not visible in the BP member directory. 357 | - Added support for displaying user registration notice in activity feed. 358 | 359 | 360 | ### 1.3 | 2012-02-09 361 | - Fixed issue when Authorize.net and PayPal feeds were configured on the same form. The PayPal feed was being used sometimes even though the PayPal condition wasn't met. 362 | - Fixed issue where inactive feeds were still being processed. 363 | - Added several additional parameters to the "gform_username" hook. 364 | - Fixed issue where translation files were only being loaded for admin. 365 | - Fixed several notices with BuddyPress integration. 366 | - Updated function for adding user properties to prevent removal of password. 367 | - Added [gform_site_created](https://docs.gravityforms.com/gform_site_created) hook which triggers after a site has been created. 368 | - Updated functionality to add website user property correctly. 369 | - Updated PayPal integration to support multiple PayPal feeds with the same form. 370 | - Fixed notices on the PayPal Transaction Settings for the User Registration section. 371 | - Fixed issue where RG_CURRENT_PAGE constant was not available when GF is deactivated. 372 | - Added option to feed to allow user to specify the display name of the created user. 373 | - Updated code in various places to be cleaner and more efficient. 374 | - Added option to select role of new user on new site. 375 | - Added option to select role of new user on existing site. 376 | - Updated the "Custom Registration Page" functionality to also override BP Register page. 377 | - Fixed several PHP notices. 378 | - Fixed issue where validation was being processed regardless of a registration condition. 379 | - Fixed issue where $entry object was not being passed when checking if registration condition was met. 380 | - Fixed issue where GF was calling "gform_post_submission" hook prior to add-on tying function to it. 381 | 382 | 383 | ### 1.2.11 | 2011-11-01 384 | - Fixed issue where password was not included on New Site Creation email. 385 | 386 | 387 | ### 1.2.10 388 | - Updated registration_met() function to retrieve submitted value from the lead (rather than $_POST) to be compatible with PayPal Add-On. 389 | 390 | 391 | ### 1.2.9 | 2011-10-03 392 | - Fixed issue where empty array values for checkboxes and multiselect fields were being displayed as part of the BP profile data. 393 | 394 | 395 | ### 1.2.8 396 | - Fixed issue where erroneous fields with empty inputs array were not displaying in feed fields drop down. 397 | 398 | 399 | ### 1.2.7 400 | - Updated custom_registration_page() function to no longer user parse_url() php function. 401 | 402 | 403 | ### 1.2.6.3 404 | - Users are not created if entry is marked as spam. 405 | - Marking an entry as not spam will create the user. 406 | 407 | 408 | ### 1.2.6.2 409 | - Updated how the BuddyPress profile data table name is retrieved. 410 | - Updated custom_registration_page() function to parse more complex URLs. 411 | 412 | 413 | ### 1.2.6.1 | 2011-07-20 414 | - Updated "Custom Registration Page" functionality; when activated, accessing WP's default registration page will redirect user to specified page. 415 | 416 | 417 | ### 1.2.6 | 2011-07-16 418 | - Updated all localization strings to ensure same domain. 419 | - Recreated localization POT file. 420 | - Updated validation to validate regardless if the registration condition is met. 421 | 422 | 423 | ### 1.2.5 424 | - Added cleanup routine to make sure user meta values are not stored as arrays. 425 | 426 | 427 | ### 1.2.4 428 | - Added new filter "gform_username" to dynamically assign a username. 429 | add_filter('gform_username', 'auto_username'); 430 | function auto_username($username){ 431 | $username = rgpost('input_2_3') . rgpost('input_2_6'); 432 | return $username; 433 | } 434 | 435 | 436 | ### 1.2.3 437 | - Escaped javascript localization strings. 438 | 439 | 440 | ### 1.2.2 441 | - Add new option/functionality to override WP's default registration page with a custom page. 442 | - Require BP file in get_buddypress_fields() for users who have BP active but not setup. 443 | 444 | 445 | ### 1.2.1 | 2011-04-29 446 | - Updated 'Email Address' field dropdown to also pull custom fields that are set to the Email input type. 447 | - Updated is_root_site() function to more reliably determine if the current blog is the root site's blog. 448 | - Fixed several notices on User Registration multisite options. 449 | 450 | 451 | ### 1.2 | 2011-04-27 452 | - Fixed issue with localization. 453 | - Updated UI to support longer translation verbiage. 454 | 455 | 456 | ### 1.1 457 | - Fixed issue where all User Registration options were displaying for PayPal Feeds even when no User Registration Feed existed for the selected form. 458 | - Fixed issue where User Registration options were not available on a PayPal Feed until after saving the PayPal Feed was saved. 459 | - Feed password field now defaults to a form password field (if available). 460 | 461 | 462 | ### 1.0 | 2011-03-23 463 | - Updated version to 1.0. 464 | 465 | 466 | ### 1.0.beta5.3 467 | - Updated reference to *gforms_paypal_save_config* to use the renamed hook: *gform_paypal_save_config*. 468 | - Localized add-on. 469 | - Added gravityformsuserregistration.pot file. 470 | 471 | 472 | ### 1.0.beta5.2 473 | - Added hook to allow User Registration validation messages to be updated. 474 | Example: 475 | add_filter("gform_user_registration_validation_message", "update_validation_msgs", 10, 2); 476 | 477 | function update_validation_msgs($message, $form){ 478 | 479 | if($message == 'This username is already registered') 480 | $message = 'We\'re sorry, this username is already registered. Try submitting with a different username.'; 481 | 482 | return $message; 483 | } 484 | 485 | 486 | 487 | ### 1.0.beta5.1 488 | - Updated gf_create_user() code to abort user registration if username already exists; beneficial to prevent existing user data being overwritten if username validation is overriden. 489 | 490 | 491 | ### 1.0.beta5 492 | - Added support for all BP field types. 493 | - Rewrote function to better retrieve values from the $_POST and $entry object. 494 | 495 | 496 | ### 1.0.beta4 497 | - Fixed validation issue for multi-page forms where the site address MU registration field was being validated regardless of current page. 498 | - Fixed "Cancel" button on Edit page to return the user to the List page. 499 | - Update multisite registration validation to check if site name (domain) already exists. 500 | 501 | 502 | ### 1.0.beta3.2 503 | - Fixed IE issue where selecting a form on the PayPal add-on was generating an error when no User Registration feeds existed. 504 | 505 | 506 | ### 1.0.beta3 507 | - Added support for creating MultiSite with user registration. 508 | - Fixed issue where MultiSite was failing to return validation error for spaces in domain name. 509 | - Disabled MultiSite options on User Registration feed view for child sites. 510 | 511 | 512 | ### 1.0.beta1 513 | - Updated database name to be consistent with other Gravity Form Add-Ons. 514 | - Updated permission required to view User Registration menu. 515 | --------------------------------------------------------------------------------