Beispiel #1
0
    public static function edit_page()
    {
        ?>
        <style>
            .campaignmonitor_col_heading{padding-bottom:2px; border-bottom: 1px solid #ccc; font-weight: bold;}
            .campaignmonitor_field_cell {padding: 6px 17px 0 0; margin-right:15px;}
            .left_header{float:left; width:200px;}
            .margin_vertical_10{margin: 10px 0;}
            #campaignmonitor_resubscribe_warning{padding-left: 5px; padding-bottom:4px; font-size: 10px;}
            .gfield_required{color:red;}
            .feeds_validation_error{ background-color:#FFDFDF;}
            .feeds_validation_error td{ margin-top:4px; margin-bottom:6px; padding-top:6px; padding-bottom:6px; border-top:1px dotted #C89797; border-bottom:1px dotted #C89797}
        </style>
        <script type="text/javascript">
            var form = Array();
        </script>
        <div class="wrap">
            <img alt="<?php 
        _e("Campaign Monitor", "gravityformsmailchimp");
        ?>
" style="margin: 15px 7px 0pt 0pt; float: left;" src="<?php 
        echo self::get_base_url();
        ?>
/images/campaignmonitor_wordpress_icon_32.png"/>
            <h2><?php 
        _e("Campaign Monitor Feed", "gravityformsmailchimp");
        ?>
</h2>

        <?php 
        //ensures valid credentials were entered in the settings page
        if (!self::is_valid_key()) {
            ?>
            <tr><td colspan="2"><?php 
            echo sprintf(__("We are unable to login to Campaign Monitor with the provided API key. Please make sure you have entered a valid API key in the %sSettings Page%s", "gravityformscampaignmonitor"), "<a href='?page=gf_settings&addon=Email+Marketing'>", "</a>");
            ?>
</td></tr>
            <?php 
            return;
        }
        //getting setting id (0 when creating a new one)
        $id = !empty($_POST["campaignmonitor_setting_id"]) ? $_POST["campaignmonitor_setting_id"] : absint($_GET["id"]);
        $config = empty($id) ? array("is_active" => true) : GFCampaignMonitorData::get_feed($id);
        if (!isset($config["meta"])) {
            $config["meta"] = array();
        }
        //updating meta information
        if (rgpost("gf_campaignmonitor_submit")) {
            list($client_id, $client_name) = explode("|:|", stripslashes($_POST["gf_campaignmonitor_client"]));
            $config["meta"]["client_id"] = $client_id;
            $config["meta"]["client_name"] = $client_name;
            list($list_id, $list_name) = explode("|:|", stripslashes($_POST["gf_campaignmonitor_list"]));
            $config["meta"]["contact_list_id"] = $list_id;
            $config["meta"]["contact_list_name"] = $list_name;
            $config["form_id"] = absint($_POST["gf_campaignmonitor_form"]);
            $merge_vars = self::get_custom_fields($list_id);
            $field_map = array();
            foreach ($merge_vars as $var) {
                $field_name = "campaignmonitor_map_field_" . self::get_field_key($var);
                $mapped_field = stripslashes($_POST[$field_name]);
                if (!empty($mapped_field)) {
                    $field_map[self::get_field_key($var)] = $mapped_field;
                }
            }
            $config["meta"]["field_map"] = $field_map;
            $config["meta"]["resubscribe"] = rgpost("campaignmonitor_resubscribe") ? true : false;
            $config["meta"]["optin_enabled"] = rgpost("campaignmonitor_optin_enable") ? true : false;
            if ($config["meta"]["optin_enabled"]) {
                $config["meta"]["optin_field_id"] = rgpost("campaignmonitor_optin_field_id");
                $config["meta"]["optin_operator"] = rgpost("campaignmonitor_optin_operator");
                $config["meta"]["optin_value"] = rgpost("campaignmonitor_optin_value");
            }
            $is_valid = !empty($field_map["email"]);
            if ($is_valid) {
                $id = GFCampaignMonitorData::update_feed($id, $config["form_id"], $config["is_active"], $config["meta"]);
                ?>
                <div class="updated fade" style="padding:6px"><?php 
                echo sprintf(__("Feed Updated. %sback to list%s", "gravityformscampaignmonitor"), "<a href='?page=gf_campaignmonitor'>", "</a>");
                ?>
</div>
                <input type="hidden" name="campaignmonitor_setting_id" value="<?php 
                echo $id;
                ?>
"/>
                <?php 
            } else {
                ?>
                <div class="error" style="padding:6px"><?php 
                echo __("Feed could not be updated. Please enter all required information below.", "gravityformscampaignmonitor");
                ?>
</div>
                <?php 
            }
        }
        if (empty($merge_vars)) {
            //getting merge vars from selected list (if one was selected)
            $merge_vars = empty($config["meta"]["contact_list_id"]) ? array() : self::get_custom_fields($config["meta"]["contact_list_id"]);
        }
        ?>
        <form method="post" action="">
            <input type="hidden" name="campaignmonitor_setting_id" value="<?php 
        echo $id;
        ?>
"/>
            <div class="margin_vertical_10">

                <?php 
        self::include_api();
        $api = new CS_REST_General(self::get_api_key());
        //getting all clients
        $response = $api->get_clients();
        if (!$response->was_successful()) {
            _e("Could not get client list from Campaign Monitor.", "gravityformscampaignmonitor");
        } else {
            $clients = $response->response;
            $client_id = self::get_client_id();
            if (empty($client_id)) {
                $client_id = $config["meta"]["client_id"];
                ?>
                        <label for="gf_campaignmonitor_client" class="left_header"><?php 
                _e("Client", "gravityformscampaignmonitor");
                ?>
 <?php 
                gform_tooltip("campaignmonitor_client");
                ?>
</label>
                        <select id="gf_campaignmonitor_client" name="gf_campaignmonitor_client" onchange="SelectClient(jQuery(this).val());">
                            <option value=""><?php 
                _e("Select a Client", "gravityformscampaignmonitor");
                ?>
</option>
                        <?php 
                foreach ($clients as $client) {
                    $selected = $client->ClientID == $client_id ? "selected='selected'" : "";
                    ?>
                            <option value="<?php 
                    echo esc_attr($client->ClientID) . "|:|" . esc_attr($client->Name);
                    ?>
" <?php 
                    echo $selected;
                    ?>
><?php 
                    echo esc_html($client->Name);
                    ?>
</option>
                            <?php 
                }
                ?>
                        </select>
                        &nbsp;&nbsp;
                        <img src="<?php 
                echo self::get_base_url();
                ?>
/images/loading.gif" id="campaignmonitor_wait_client" style="display: none;"/>
                    <?php 
            } else {
                $client_name = "";
                foreach ($clients as $client) {
                    if ($client->ClientID == $client_id) {
                        $client_name = $client->Name;
                    }
                }
                if (empty($client_name)) {
                    echo sprintf(__("Your API Client ID is invalid. You can change it in the %ssettings page%s", "gravityformscampaignmonitor"), "<a href='?page=gf_settings&addon=Campaign+Monitor'>", "</a>");
                    $client_id = 0;
                } else {
                    ?>
                            <input type="hidden" id="gf_campaignmonitor_client" name="gf_campaignmonitor_client" value="<?php 
                    echo $client_id . "|:|" . $client_name;
                    ?>
" />
                            <?php 
                }
            }
        }
        ?>
            </div>

            <div id="gf_campaignmonitor_list_container" class="margin_vertical_10" <?php 
        echo empty($client_id) ? "style='display:none;'" : "";
        ?>
>
                <label for="gf_campaignmonitor_list" class="left_header"><?php 
        _e("Contact list", "gravityformscampaignmonitor");
        ?>
 <?php 
        gform_tooltip("campaignmonitor_contact_list");
        ?>
</label>

                <select id="gf_campaignmonitor_list" name="gf_campaignmonitor_list" onchange="SelectList(jQuery(this).val());">
                    <?php 
        if (!empty($client_id)) {
            $lists = self::get_lists($client_id, $config["meta"]["contact_list_id"]);
            echo $lists;
        }
        ?>
                </select>
            </div>

            <div id="campaignmonitor_form_container" valign="top" class="margin_vertical_10" <?php 
        echo empty($client_id) || empty($config["meta"]["contact_list_id"]) ? "style='display:none;'" : "";
        ?>
>
                <label for="gf_campaignmonitor_form" class="left_header"><?php 
        _e("Gravity Form", "gravityformscampaignmonitor");
        ?>
 <?php 
        gform_tooltip("campaignmonitor_gravity_form");
        ?>
</label>

                <select id="gf_campaignmonitor_form" name="gf_campaignmonitor_form" onchange="SelectForm(jQuery('#gf_campaignmonitor_list').val(), jQuery(this).val());">
                <option value=""><?php 
        _e("Select a Form", "gravityformscampaignmonitor");
        ?>
</option>
                <?php 
        $forms = RGFormsModel::get_forms();
        foreach ($forms as $form) {
            $selected = absint($form->id) == $config["form_id"] ? "selected='selected'" : "";
            ?>
                    <option value="<?php 
            echo absint($form->id);
            ?>
"  <?php 
            echo $selected;
            ?>
><?php 
            echo esc_html($form->title);
            ?>
</option>
                    <?php 
        }
        ?>
                </select>
                &nbsp;&nbsp;
                <img src="<?php 
        echo self::get_base_url();
        ?>
/images/loading.gif" id="campaignmonitor_wait_form" style="display: none;"/>
            </div>

            <div id="campaignmonitor_field_group" valign="top" <?php 
        echo empty($client_id) || empty($config["meta"]["contact_list_id"]) || empty($config["form_id"]) ? "style='display:none;'" : "";
        ?>
>

                <div id="campaignmonitor_field_container" valign="top" class="margin_vertical_10" >
                    <label for="campaignmonitor_fields" class="left_header"><?php 
        _e("Map Fields", "gravityformscampaignmonitor");
        ?>
 <?php 
        gform_tooltip("campaignmonitor_map_fields");
        ?>
</label>

                    <div id="campaignmonitor_field_list">
                    <?php 
        if (!empty($config["form_id"])) {
            //getting list of all Campaign Monitor merge variables for the selected contact list
            if (empty($merge_vars)) {
                $merge_vars = $api->listMergeVars($list_id);
            }
            //getting field map UI
            echo self::get_field_mapping($config, $config["form_id"], $merge_vars);
            //getting list of selection fields to be used by the optin
            $form_meta = RGFormsModel::get_form_meta($config["form_id"]);
            $selection_fields = GFCommon::get_selection_fields($form_meta, rgar($config["meta"], "optin_field_id"));
        }
        ?>
                    </div>
                </div>

                <div id="campaignmonitor_optin_container" valign="top" class="margin_vertical_10">
                    <label for="campaignmonitor_optin" class="left_header"><?php 
        _e("Opt-In Condition", "gravityformscampaignmonitor");
        ?>
 <?php 
        gform_tooltip("campaignmonitor_optin_condition");
        ?>
</label>
                    <div id="campaignmonitor_optin">
                        <table>
                            <tr>
                                <td>
                                    <input type="checkbox" id="campaignmonitor_optin_enable" name="campaignmonitor_optin_enable" value="1" onclick="if(this.checked){jQuery('#campaignmonitor_optin_condition_field_container').show('slow');} else{jQuery('#campaignmonitor_optin_condition_field_container').hide('slow');}" <?php 
        echo rgar($config["meta"], "optin_enabled") ? "checked='checked'" : "";
        ?>
/>
                                    <label for="campaignmonitor_optin_enable"><?php 
        _e("Enable", "gravityformscampaignmonitor");
        ?>
</label>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <div id="campaignmonitor_optin_condition_field_container" <?php 
        echo !rgar($config["meta"], "optin_enabled") ? "style='display:none'" : "";
        ?>
>
                                        <div id="campaignmonitor_optin_condition_fields" <?php 
        echo empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                            <?php 
        _e("Export to Campaign Monitor if ", "gravityformscampaignmonitor");
        ?>

                                            <select id="campaignmonitor_optin_field_id" name="campaignmonitor_optin_field_id" class='optin_select' onchange='jQuery("#campaignmonitor_optin_value").html(GetFieldValues(jQuery(this).val(), "", 20));'><?php 
        echo $selection_fields;
        ?>
</select>
                                            <select id="campaignmonitor_optin_operator" name="campaignmonitor_optin_operator" />
                                                <option value="is" <?php 
        echo rgar($config["meta"], "optin_operator") == "is" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is", "gravityformscampaignmonitor");
        ?>
</option>
                                                <option value="isnot" <?php 
        echo rgar($config["meta"], "optin_operator") == "isnot" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is not", "gravityformscampaignmonitor");
        ?>
</option>
                                            </select>
                                            <select id="campaignmonitor_optin_value" name="campaignmonitor_optin_value" class='optin_select'>
                                            </select>

                                        </div>
                                        <div id="campaignmonitor_optin_condition_message" <?php 
        echo !empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                            <?php 
        _e("To create an Opt-In condition, your form must have a drop down, checkbox or multiple choice field.", "gravityform");
        ?>
                                        </div>
                                    </div>
                                </td>
                            </tr>
                        </table>
                    </div>

                    <script type="text/javascript">
                        <?php 
        if (!empty($config["form_id"])) {
            ?>
                            //creating Javascript form object
                            form = <?php 
            echo GFCommon::json_encode($form_meta);
            ?>
;

                            //initializing drop downs
                            jQuery(document).ready(function(){
                                var selectedField = "<?php 
            echo str_replace('"', '\\"', rgar($config["meta"], "optin_field_id"));
            ?>
";
                                var selectedValue = "<?php 
            echo str_replace('"', '\\"', rgar($config["meta"], "optin_value"));
            ?>
";
                                SetOptin(selectedField, selectedValue);
                            });
                        <?php 
        }
        ?>
                    </script>
                </div>

                <div id="campaignmonitor_options_container" valign="top" class="margin_vertical_10">
                    <label for="campaignmonitor_options" class="left_header"><?php 
        _e("Options", "gravityformscampaignmonitor");
        ?>
</label>
                    <div id="campaignmonitor_options">
                        <table>
                            <tr><td><input type="checkbox" name="campaignmonitor_resubscribe" id="campaignmonitor_resubscribe" value="1" <?php 
        echo rgar($config["meta"], "resubscribe") ? "checked='checked'" : "";
        ?>
 onclick="var element = jQuery('#campaignmonitor_resubscribe_warning'); if(this.checked){element.show('slow');} else{element.hide('slow');}"/> <?php 
        _e("Resubscribe", "gravityformscampaignmonitor");
        ?>
  <?php 
        gform_tooltip("campaignmonitor_resubscribe");
        ?>
 <br/><span id='campaignmonitor_resubscribe_warning' <?php 
        echo !rgar($config["meta"], "resubscribe") ? "style='display:none'" : "";
        ?>
>(<?php 
        _e("This option will re-subscribe users that have been unsubscribed. Use with caution and only when appropriate.", "gravityformscampaignmonitor");
        ?>
)</span></td></tr>
                        </table>
                    </div>
                </div>

                <div id="campaignmonitor_submit_container" class="margin_vertical_10">
                    <input type="submit" name="gf_campaignmonitor_submit" value="<?php 
        echo empty($id) ? __("Save", "gravityformscampaignmonitor") : __("Update", "gravityformscampaignmonitor");
        ?>
" class="button-primary"/>
                    <input type="button" value="<?php 
        _e("Cancel", "gravityformscampaignmonitor");
        ?>
" class="button" onclick="javascript:document.location='admin.php?page=gf_campaignmonitor'" />
                </div>
            </div>
        </form>
        </div>
        <script type="text/javascript">

            function SelectClient(clientId){
                jQuery("#gf_campaignmonitor_list_container").slideUp();
                SelectList();

                if(!clientId)
                    return;

                jQuery("#campaignmonitor_wait_client").show();

                var mysack = new sack("<?php 
        bloginfo('wpurl');
        ?>
/wp-admin/admin-ajax.php" );
                mysack.execute = 1;
                mysack.method = 'POST';
                mysack.setVar( "action", "gf_select_campaignmonitor_client" );
                mysack.setVar( "gf_select_campaignmonitor_client", "<?php 
        echo wp_create_nonce("gf_select_campaignmonitor_client");
        ?>
" );
                mysack.setVar( "client_id", clientId);
                mysack.encVar( "cookie", document.cookie, false );
                mysack.onError = function() {jQuery("#campaignmonitor_wait_client").hide(); alert('<?php 
        _e("Ajax error while selecting a client", "gravityformscampaignmonitor");
        ?>
' )};
                mysack.runAJAX();

                return true;
            }

            function EndSelectClient(lists){
                if(lists){

                    jQuery("#gf_campaignmonitor_list").html(lists);
                    jQuery("#gf_campaignmonitor_list_container").slideDown();

                }
                else{
                    jQuery("#gf_campaignmonitor_list_container").slideUp();
                    jQuery("#campaignmonitor_list").html("");
                }
                jQuery("#campaignmonitor_wait_client").hide();
            }


            function SelectList(listId){

                EndSelectForm("");

                if(listId){
                    jQuery("#campaignmonitor_form_container").slideDown();
                    jQuery("#gf_campaignmonitor_form").val("");
                }
                else{
                    jQuery("#campaignmonitor_form_container").slideUp();
                }

            }

            function SelectForm(listId, formId){
                if(!formId){
                    jQuery("#campaignmonitor_field_group").slideUp();
                    return;
                }

                jQuery("#campaignmonitor_wait_form").show();
                jQuery("#campaignmonitor_field_group").slideUp();

                var mysack = new sack("<?php 
        bloginfo('wpurl');
        ?>
/wp-admin/admin-ajax.php" );
                mysack.execute = 1;
                mysack.method = 'POST';
                mysack.setVar( "action", "gf_select_campaignmonitor_form" );
                mysack.setVar( "gf_select_campaignmonitor_form", "<?php 
        echo wp_create_nonce("gf_select_campaignmonitor_form");
        ?>
" );
                mysack.setVar( "list_id", listId);
                mysack.setVar( "form_id", formId);
                mysack.encVar( "cookie", document.cookie, false );
                mysack.onError = function() {jQuery("#campaignmonitor_wait_form").hide(); alert('<?php 
        _e("Ajax error while selecting a form", "gravityformscampaignmonitor");
        ?>
' )};
                mysack.runAJAX();

                return true;
            }

            function SetOptin(selectedField, selectedValue){

                //load form fields
                jQuery("#campaignmonitor_optin_field_id").html(GetSelectableFields(selectedField, 20));

                var optinConditionField = jQuery("#campaignmonitor_optin_field_id").val();

                if(optinConditionField){
                    jQuery("#campaignmonitor_optin_condition_message").hide();
                    jQuery("#campaignmonitor_optin_condition_fields").show();

                    jQuery("#campaignmonitor_optin_value").html(GetFieldValues(optinConditionField, selectedValue, 20));

                }
                else{
                    jQuery("#campaignmonitor_optin_condition_message").show();
                    jQuery("#campaignmonitor_optin_condition_fields").hide();
                }

            }

            function EndSelectForm(fieldList, form_meta){

                //setting global form object
                form = form_meta;

                if(fieldList){

                    SetOptin("","");

                    jQuery("#campaignmonitor_field_list").html(fieldList);
                    jQuery("#campaignmonitor_field_group").slideDown();

                }
                else{
                    jQuery("#campaignmonitor_field_group").slideUp();
                    jQuery("#campaignmonitor_field_list").html("");
                }
                jQuery("#campaignmonitor_wait_form").hide();
            }

            function GetFieldValues(fieldId, selectedValue, labelMaxCharacters){
                if(!fieldId)
                    return "";

                var str = "";
                var field = GetFieldById(fieldId);
                if(!field || !field.choices)
                    return "";

                var isAnySelected = false;

                for(var i=0; i<field.choices.length; i++){
                    var fieldValue = field.choices[i].value ? field.choices[i].value : field.choices[i].text;
                    var isSelected = fieldValue == selectedValue;
                    var selected = isSelected ? "selected='selected'" : "";
                    if(isSelected)
                        isAnySelected = true;

                    str += "<option value='" + fieldValue.replace(/'/g, "&#039;") + "' " + selected + ">" + TruncateMiddle(field.choices[i].text, labelMaxCharacters) + "</option>";
                }

                if(!isAnySelected && selectedValue){
                    str += "<option value='" + selectedValue.replace("'", "&#039;") + "' selected='selected'>" + TruncateMiddle(selectedValue, labelMaxCharacters) + "</option>";
                }

                return str;
            }

            function GetFieldById(fieldId){
                for(var i=0; i<form.fields.length; i++){
                    if(form.fields[i].id == fieldId)
                        return form.fields[i];
                }
                return null;
            }

            function TruncateMiddle(text, maxCharacters){
                if(text.length <= maxCharacters)
                    return text;
                var middle = parseInt(maxCharacters / 2);
                return text.substr(0, middle) + "..." + text.substr(text.length - middle, middle);
            }

            function GetSelectableFields(selectedFieldId, labelMaxCharacters){
                var str = "";
                var inputType;
                for(var i=0; i<form.fields.length; i++){
                    fieldLabel = form.fields[i].adminLabel ? form.fields[i].adminLabel : form.fields[i].label;
                    inputType = form.fields[i].inputType ? form.fields[i].inputType : form.fields[i].type;
                    if(inputType == "checkbox" || inputType == "radio" || inputType == "select"){
                        var selected = form.fields[i].id == selectedFieldId ? "selected='selected'" : "";
                        str += "<option value='" + form.fields[i].id + "' " + selected + ">" + TruncateMiddle(fieldLabel, labelMaxCharacters) + "</option>";
                    }
                }
                return str;
            }

        </script>

        <?php 
    }
Beispiel #2
0
    private static function edit_page()
    {
        ?>

        <style type="text/css">
            #user_registration_submit_container{clear:both;}
            .user_registration_col_heading{padding-bottom:2px; border-bottom: 1px solid #ccc; font-weight:bold; width:120px;}
            .user_registration_field_cell {padding: 6px 17px 0 0; margin-right:15px;}

            .user_registration_validation_error{ background-color:#ffebe8; margin: 4px 0 6px; padding: 6px; border: 1px dotted #cc0000; }

            .left_header { float:left; width: 260px;}
            .column_right { margin-left: 260px; }
            .margin_vertical_10{margin: 10px 0; padding-left:5px;}
            .margin_vertical_30{margin: 30px 0; padding-left:5px;}
            .width-1{width:300px;}

            .error { }
                .error li { list-style: disc; margin-left: 20px; }
            .error_message { margin-top: 30px; background-color: #ffebe8; border: 1px solid #cc0000; padding: 10px; width: 600px;
                border-radius: 3px; }
            .spinner { position: relative; top: 4px; left: 5px; }

            .hide-label { display: none; }
            .enabled-by-default { color: #999; }

            div.custom_metaname { position: relative; }
            span.reset { background:url("images/xit.gif") no-repeat scroll 0 -10px transparent; cursor:pointer; display:block;
                position:absolute; text-indent:-9999px; width:10px; height: 10px; right: 16px; top: 7px; }
            .hover span.reset { background-position: 0 0; }

            option.label { font-style: italic; color: #999; }
            .metaname, .metavalue { float: left; }
            .metavalue { margin-left: 30px; }
            .metaname .width-1 { margin-right: 10px; width: 220px; }
            .add_field_choice, .delete_field_choice { margin: 3px 0 4px 3px; }
            .custom_usermeta .margin_vertical_10 { overflow: hidden; margin-bottom: 0; }
            .custom_usermeta option.custom { font-weight: bold; }
            .custom_metaname { float: left; }
            .notice { font-size: 12px; font-style: italic; color: #aaa; }
            .system-option, .password-field option:last-child { font-style: italic; }
            .checkbox-label { font-size: 12px; }
            .disabled label { color: #999; }

            #field_group { overflow: hidden; } /* fixed issue with jumpy aniatmion in jQuery */

            form.update { }
                form.update #option_username { display: none; }
                form.update #option_user_activation { display: none; }
                form.update label.email span { display: none; }

            #gfur_user_activation_type_container { display: inline; }

        </style>

        <div class="wrap">

            <div style="background: url(<?php 
        echo self::get_base_url();
        ?>
/images/user-registration-icon-32.png) no-repeat;" id="icon-edit" class="icon32 icon32-posts-post"><br></div>
            <h2>
                <?php 
        _e("User Registration Settings", "gravityformsuserregistration");
        ?>
            </h2>

        <?php 
        //getting setting id (0 when creating a new one)
        $id = RGForms::post("user_registration_setting_id");
        $id = !empty($id) ? $id : absint(RGForms::get("id"));
        $config = empty($id) ? array("meta" => array(), "is_active" => true) : GFUserData::get_feed($id);
        $is_validation_error = false;
        $error_messages = array();
        $is_update_feed = rgars($config, 'meta/feed_type') == 'update';
        // if this is an existing feed and no feed type is specified, default to "create"
        if ($id && !rgars($config, 'meta/feed_type')) {
            $config['meta']['feed_type'] = 'create';
        }
        // handle submission
        $is_submit = RGForms::post("gf_user_registration_submit");
        if (!empty($is_submit) && check_admin_referer('user_registration_edit_submit', 'user_registration_edit_submit')) {
            $form_id = RGForms::post("gf_user_registration_form");
            $config["form_id"] = absint($form_id);
            // feed action; set to create if blank for old feeds
            $config["meta"]["feed_type"] = rgpost("feed_type") ? rgpost("feed_type") : 'create';
            $is_update_feed = rgars($config, 'meta/feed_type') == 'update';
            // standard meta
            $config["meta"]["username"] = $is_update_feed ? '' : rgpost("gf_user_registration_username");
            $config["meta"]["firstname"] = rgpost("gf_user_registration_firstname");
            $config["meta"]["lastname"] = rgpost("gf_user_registration_lastname");
            $config["meta"]["displayname"] = rgpost("gf_user_registration_displayname");
            $config["meta"]["email"] = rgpost("gf_user_registration_email");
            $config["meta"]["password"] = rgpost("gf_user_registration_password");
            $config["meta"]["role"] = rgpost("gf_user_registration_role");
            // user meta
            $json = stripslashes(RGForms::post("gf_user_meta"));
            $config["meta"]["user_meta"] = GFCommon::json_decode($json);
            //clean user meta (workaround to avoid values being marked as array)
            if (is_array($config["meta"]["user_meta"])) {
                foreach ($config["meta"]["user_meta"] as &$meta) {
                    if (is_array($meta["meta_value"])) {
                        $meta["meta_value"] = $meta["meta_value"][0];
                    }
                }
            }
            // registration condition
            $config['meta']['reg_condition_enabled'] = RGForms::post('gf_user_registration_enabled');
            $config['meta']['reg_condition_field_id'] = RGForms::post('gf_user_registration_field_id');
            $config['meta']['reg_condition_operator'] = RGForms::post('gf_user_registration_operator');
            $config['meta']['reg_condition_value'] = RGForms::post('gf_user_registration_value');
            // additional meta options
            $config['meta']['notification'] = RGForms::post('gf_user_registration_notification');
            $config['meta']['set_post_author'] = RGForms::post('gf_user_registration_set_post_author');
            $config['meta']['user_activation'] = $is_update_feed ? false : RGForms::post('gf_user_registration_user_activation');
            $config['meta']['user_activation_type'] = $is_update_feed || !$config['meta']['user_activation'] ? false : rgpost('gf_user_registration_user_activation_type');
            // use to save custom config options (used by BuddyPress)
            $config = apply_filters("gform_user_registration_save_config", $config);
            // deprecated in favor of new method for generating error messages, preserved for users who may be using this
            $is_validation_error = apply_filters("gform_user_registration_config_validation", false, $config);
            if (!$config["meta"]["email"] && !$is_update_feed) {
                $error_messages[] = __('You must map the "Email Address" setting to a field.', 'gravityformsuserregistration');
            }
            if (!$config["meta"]["username"] && !$is_update_feed) {
                $error_messages[] = __('You must map the "Username" setting to a field.', 'gravityformsuserregistration');
            }
            $error_messages = apply_filters('gform_user_confirm_validation_error', $error_messages, $config);
            // validate and create/update feed
            if (empty($error_messages)) {
                $id = GFUserData::update_feed($id, $config["form_id"], $config["is_active"], $config["meta"]);
                ?>

                <div class="updated fade">
                    <p><?php 
                echo sprintf(__("Feed Updated. %sback to list%s", "gravityformsuserregistration"), "<a href='?page=gf_user_registration'>", "</a>");
                ?>
</p>
                </div>

                <?php 
            } else {
                $is_validation_error = true;
            }
        }
        $form = isset($config["form_id"]) && $config["form_id"] ? RGFormsModel::get_form_meta($config["form_id"]) : array();
        $form_fields = $email_fields = $selection_fields = $password_fields = array();
        $set_author_style = 'display:none';
        if (!empty($form)) {
            $set_author_style = GFCommon::has_post_field($form['fields']) ? 'display:block' : 'display:none';
            $form_fields = self::get_form_fields($form, $is_update_feed);
            $email_fields = self::get_fields_by_type($form, 'email');
            $selection_fields = GFCommon::get_selection_fields($form, $config['meta']['reg_condition_field_id']);
            // add custom option to password fields
            $password_default = $is_update_feed ? array(array('', __('Preserve current password', 'gravityformsuserregistration'))) : array(array('', __('Auto Generate Password', 'gravityformsuserregistration')));
            $password_fields = self::get_fields_by_type($form, 'password');
            // ? self::get_fields_by_type($form, 'password') : array();
            $password_fields = array_merge($password_fields, $password_default);
        }
        if (!empty($error_messages)) {
            ?>
            <div class="error">
                <p><?php 
            _e('Oops! There were some issues with your feed.', 'gravityformsuserregistration');
            ?>
</p>
                <ul><li><?php 
            echo implode('</li><li>', $error_messages);
            ?>
</li></ul>
            </div>
        <?php 
        }
        ?>

        <form method="post" action="" id="gf_user_form" class="<?php 
        echo rgars($config, 'meta/feed_type');
        ?>
">

            <input type="hidden" name="user_registration_setting_id" value="<?php 
        echo $id;
        ?>
" />
            <input type="hidden" name="gf_user_meta" id="gf_user_meta" value="" />
            <?php 
        wp_nonce_field('user_registration_edit_submit', 'user_registration_edit_submit');
        ?>

            <div id="feed_settings">

                <h3>Feed Settings</h3>

                <div class="margin_vertical_10">
                    <label class="left_header" for="gf_user_registration_action"><?php 
        _e("Action", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_feed_type");
        ?>
</label>
                    <select id="feed_type" name="feed_type" onchange="setFeedType(this);">
                        <option value=""><?php 
        _e('Select an Action', 'gravityformsuserregistration');
        ?>
</option>
                        <?php 
        $action = rgars($config, 'meta/feed_type');
        foreach (array('create' => 'Create User', 'update' => 'Update User') as $value => $label) {
            $selected = $action == $value ? 'selected="selected"' : '';
            echo "<option value=\"{$value}\" {$selected}>{$label}</option>";
        }
        ?>
                    </select>
                </div> <!-- feed_type -->

                <div id="form_select" class="margin_vertical_10" <?php 
        echo !rgar($config, 'form_id') ? "style='display:none;'" : "";
        ?>
>

                    <label for="gf_user_registration_form" class="left_header"><?php 
        _e("Gravity Form", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_gravity_form");
        ?>
</label>

                    <select id="gf_user_registration_form" name="gf_user_registration_form" onchange="SelectForm(jQuery(this).val(), '<?php 
        echo $id;
        ?>
');">
                        <?php 
        $available_forms = GFUserData::get_available_forms(rgars($config, 'meta/feed_type'), $id);
        echo self::create_form_select_options($available_forms, $config);
        ?>
                    </select>

                </div> <!-- / select form -->

            </div> <!-- / feed_settings -->

            <div id="field_group" valign="top" <?php 
        echo empty($config["form_id"]) ? "style='display:none;'" : "";
        ?>
>

                <div id="standard_fields">

                    <h3>User Settings</h3>

                    <div id="option_username" class="margin_vertical_10 <?php 
        echo $is_validation_error && empty($config['meta']['username']) ? 'user_registration_validation_error' : '';
        ?>
">
                        <label class="left_header" for="gf_user_registration_username"><?php 
        _e("Username", "gravityformsuserregistration");
        ?>
 <span class="description">(<?php 
        _e("required", "gravityformsuserregistration");
        ?>
)</span> <?php 
        gform_tooltip("user_registration_username");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_username", $form_fields, rgar($config['meta'], 'username'), "width-1 standard-meta");
        ?>
                    </div>

                    <div class="margin_vertical_10">
                        <label class="left_header" for="gf_user_registration_firstname"><?php 
        _e("First Name", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_firstname");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_firstname", $form_fields, rgar($config['meta'], 'firstname'), "width-1 standard-meta");
        ?>
                    </div>

                    <div class="margin_vertical_10">
                        <label class="left_header" for="gf_user_registration_lastname"><?php 
        _e("Last Name", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_lastname");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_lastname", $form_fields, rgar($config['meta'], 'lastname'), "width-1 standard-meta");
        ?>
                    </div>

                    <div class="margin_vertical_10">
                        <label class="left_header" for="gf_user_registration_displayname">
                            <?php 
        _e("Display Name", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_displayname");
        ?>
                        </label>
                        <?php 
        $display_names = array('username' => '{username}', 'firstname' => '{first name}', 'lastname' => '{last name}', 'firstlast' => '{first name} {last name}', 'lastfirst' => '{last name} {first name}');
        ?>
                        <select id="gf_user_registration_displayname" name="gf_user_registration_displayname" class="width-1">
                            <?php 
        foreach ($display_names as $key => $value) {
            $selected = rgar($config['meta'], 'displayname') == $key ? 'selected="selected"' : '';
            ?>

                                <option value="<?php 
            echo $key;
            ?>
" <?php 
            echo $selected;
            ?>
><?php 
            echo $value;
            ?>
</option>

                            <?php 
        }
        ?>
                        </select>
                    </div>

                    <div class="margin_vertical_10 <?php 
        echo $is_validation_error && empty($config['meta']['email']) ? 'user_registration_validation_error' : '';
        ?>
">
                        <label class="left_header email" for="gf_user_registration_email"><?php 
        _e("Email Address", "gravityformsuserregistration");
        ?>
 <span class="description">(<?php 
        _e("required", "gravityformsuserregistration");
        ?>
)</span> <?php 
        gform_tooltip("user_registration_email");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_email", $email_fields, rgar($config['meta'], 'email'), "width-1 email-field");
        ?>
                    </div>

                    <div class="margin_vertical_10">
                        <label class="left_header" for="gf_user_registration_password"><?php 
        _e("Password", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_password");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_password", $password_fields, rgar($config['meta'], 'password'), "width-1 password-field", false);
        ?>
                    </div>

                    <?php 
        $disabled = is_multisite() && rgars($config['meta'], 'multisite_options/create_site') ? 'disabled="disabled"' : '';
        ?>
                    <div class="margin_vertical_10 <?php 
        echo $disabled ? 'disabled' : '';
        ?>
">
                        <label class="left_header" for="gf_user_registration_role"><?php 
        _e("Role", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_role");
        ?>
</label>
                        <select id="gf_user_registration_role" name="gf_user_registration_role" class="width-1" <?php 
        echo $disabled;
        ?>
>
                            <?php 
        if (is_multisite() && rgars($config, 'meta/multisite_options/create_site')) {
            ?>
                                <option value="" selected="selected" class="empty-option"></option>
                            <?php 
        }
        ?>
                            <?php 
        self::display_role_dropdown_options(rgars($config, 'meta/role'), false, self::is_update_feed($config));
        ?>
                        </select>
                    </div>

                </div> <!-- / standard fields -->

                <div id="user_meta_fields">

                    <h3>User Meta</h3>

                    <div id="custom_usermeta" class="custom_usermeta"></div>

                </div> <!-- / user meta fields -->

                <?php 
        do_action("gform_user_registration_add_option_section", $config, $form, $is_validation_error);
        // buddypress, networkmode
        ?>

                <div id="additional_options">

                    <h3>Additional Options</h3>

                    <div id="gf_user_registration_send_email" class="margin_vertical_10" style="<?php 
        echo $is_update_feed ? 'display:none;' : '';
        ?>
">
                        <label class="left_header"><?php 
        _e("Send Email?", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_notification");
        ?>
</label>
                        <input type="checkbox" id="gf_user_registration_notification" name="gf_user_registration_notification" value="1" <?php 
        echo rgar($config['meta'], 'notification') == 1 || !isset($config["meta"]["notification"]) ? "checked='checked'" : "";
        ?>
 />
                        <label for="gf_user_registration_notification" class="checkbox-label"><?php 
        _e("Send this password to the new user by email.", "gravityformsuserregistration");
        ?>
</label>
                    </div> <!-- / send email? -->

                    <div id="gf_user_registration_set_post_author_container" class="margin_vertical_10" style="<?php 
        echo $set_author_style;
        ?>
">
                        <label class="left_header"><?php 
        _e("Set As Post Author", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_set_post_author");
        ?>
</label>
                        <input type="checkbox" id="gf_user_registration_set_post_author" name="gf_user_registration_set_post_author" value="1" <?php 
        echo rgar($config['meta'], 'set_post_author') == 1 || !isset($config["meta"]["set_post_author"]) ? "checked='checked'" : "";
        ?>
 />
                        <label for="gf_user_registration_set_post_author" class="checkbox-label"><?php 
        _e("Enable", "gravityformsuserregistration");
        ?>
</label>
                    </div> <!-- / set post author -->

                    <div id="option_user_activation" class="margin_vertical_10">

                        <?php 
        $user_activation_enabled = rgar($config['meta'], 'user_activation') == true;
        ?>

                        <label class="left_header" for="gf_user_registration_user_activation">
                            <?php 
        _e('User Activation', 'gravityformsuserregistration');
        ?>
                            <?php 
        gform_tooltip('user_registration_user_activation');
        ?>
                        </label>
                        <input type="checkbox" id="gf_user_registration_user_activation" name="gf_user_registration_user_activation" value="1" <?php 
        echo rgar($config['meta'], 'user_activation') ? "checked='checked'" : "";
        ?>
 onclick="ToggleUserActivation();" />
                        <label for="gf_user_registration_user_activation" class="checkbox-label">
                            <span class="unselected" style="<?php 
        echo !$user_activation_enabled ? '' : 'display:none;';
        ?>
"><?php 
        _e('Enable user activation.', 'gravityformsuserregistration');
        ?>
</span>
                            <span class="selected" style="<?php 
        echo $user_activation_enabled ? '' : 'display:none;';
        ?>
"><?php 
        _e('Enable user activation', 'gravityformsuserregistration');
        ?>
</span>
                        </label>

                        <div id="gfur_user_activation_type_container" style="<?php 
        echo rgar($config['meta'], 'user_activation') ? '' : 'display:none;';
        ?>
">

                            <select id="gf_user_registration_user_activation_type" name="gf_user_registration_user_activation_type">
                                <?php 
        $user_activation_options = array('email' => 'by email', 'manual' => 'manually');
        ?>
                                <?php 
        foreach ($user_activation_options as $value => $label) {
            ?>
                                    <option value="<?php 
            echo $value;
            ?>
" <?php 
            selected(rgar($config['meta'], 'user_activation_type'), $value);
            ?>
 ><?php 
            echo $label;
            ?>
</option>
                                <?php 
        }
        ?>
                            </select>

                            <?php 
        gform_tooltip('user_registration_user_activation_type');
        ?>

                        </div>

                    </div> <!-- / user activation -->

                    <div id="gf_user_registration_section" valign="top" class="margin_vertical_10">
                        <label for="gf_user_registration_optin" class="left_header"><?php 
        _e("Registration Condition", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_condition");
        ?>
</label>

                        <div id="gf_user_registration_option" class="column_right">
                            <input type="checkbox" id="gf_user_registration_enabled" name="gf_user_registration_enabled" value="1" onclick="if(this.checked){jQuery('#gf_user_registration_container').fadeIn('fast');} else{jQuery('#gf_user_registration_container').fadeOut('fast');}" <?php 
        echo rgar($config['meta'], 'reg_condition_enabled') ? "checked='checked'" : "";
        ?>
/>
                            <label for="gf_user_registration_enabled" class="checkbox-label"><?php 
        _e("Enable", "gravityformsuserregistration");
        ?>
</label>

                            <div id="gf_user_registration_container" style="padding-top:5px; <?php 
        echo !$config["meta"]["reg_condition_enabled"] ? "display:none" : "";
        ?>
">

                                <div id="gf_user_registration_condition_fields" style="display:none">
                                    <?php 
        _e("Register the user if ", "gravityformsuserregistration");
        ?>

                                    <select id="gf_user_registration_field_id" name="gf_user_registration_field_id" class='optin_select' onchange='jQuery("#gf_user_registration_value_container").html(GetFieldValues(jQuery(this).val(), "", 20));'></select>
                                    <select id="gf_user_registration_operator" name="gf_user_registration_operator">
                                        <option value="is" <?php 
        echo rgar($config['meta'], 'reg_condition_operator') == 'is' ? 'selected="selected"' : '';
        ?>
><?php 
        _e("is", "gravityformsuserregistration");
        ?>
</option>
                                        <option value="isnot" <?php 
        echo rgar($config['meta'], 'reg_condition_operator') == "isnot" ? 'selected="selected"' : '';
        ?>
><?php 
        _e("is not", "gravityformsuserregistration");
        ?>
</option>
                                        <option value=">" <?php 
        echo rgar($config['meta'], 'reg_condition_operator') == ">" ? "selected='selected'" : "";
        ?>
><?php 
        _e("greater than", "gravityformsuserregistration");
        ?>
</option>
                                        <option value="<" <?php 
        echo rgar($config['meta'], 'reg_condition_operator') == "<" ? "selected='selected'" : "";
        ?>
><?php 
        _e("less than", "gravityformsuserregistration");
        ?>
</option>
                                        <option value="contains" <?php 
        echo rgar($config['meta'], 'reg_condition_operator') == "contains" ? "selected='selected'" : "";
        ?>
><?php 
        _e("contains", "gravityformsuserregistration");
        ?>
</option>
                                        <option value="starts_with" <?php 
        echo rgar($config['meta'], 'reg_condition_operator') == "starts_with" ? "selected='selected'" : "";
        ?>
><?php 
        _e("starts with", "gravityformsuserregistration");
        ?>
</option>
                                        <option value="ends_with" <?php 
        echo rgar($config['meta'], 'reg_condition_operator') == "ends_with" ? "selected='selected'" : "";
        ?>
><?php 
        _e("ends with", "gravityformsuserregistration");
        ?>
</option>
                                    </select>
                                    <div id="gf_user_registration_value_container" name="gf_user_registration_value_container" style="display:inline;"></div>
                                </div>

                                <div id="gf_user_registration_condition_message" style="display:none">
                                    <?php 
        _e("To create a registration condition, your form must have a field supported by conditional logic.", "gravityformsuserregistration");
        ?>
                                </div>

                            </div>
                        </div>

                    </div> <!-- / registration conditional -->

                    <?php 
        do_action("gform_user_registration_add_option_group", $config, $form, $is_validation_error);
        ?>

                    <div id="user_registration_submit_container" class="margin_vertical_30">
                        <input type="submit" name="gf_user_registration_submit" value="<?php 
        echo empty($id) ? __("Save", "gravityformsuserregistration") : __("Update", "gravityformsuserregistration");
        ?>
" class="button-primary"/>
                        <input type="button" value="<?php 
        _e("Cancel", "gravityformsuserregistration");
        ?>
" class="button" onclick="javascript:document.location='admin.php?page=gf_user_registration'" />
                    </div> <!-- / form actions -->

                </div> <!-- / additional options -->

            </div> <!-- / field group -->

        </form>

        </div> <!-- / wrap -->

        <script type="text/javascript">

            <?php 
        $user_meta = rgar($config['meta'], 'user_meta');
        $meta_keys = self::get_user_meta_keys(array('user_url', 'aim', 'yim', 'jabber', 'description'));
        ?>

            var GFUser = {
                form: <?php 
        echo !empty($form) ? GFCommon::json_encode($form) : 'new Array()';
        ?>
,
                form_fields: <?php 
        echo !empty($form_fields) ? GFCommon::json_encode($form_fields) : "new Array()";
        ?>
,
                form_id: <?php 
        echo rgar($config, 'form_id') ? rgar($config, 'form_id') : "''";
        ?>
,
                user_meta: <?php 
        echo !empty($user_meta) ? GFCommon::json_encode($user_meta) : "[new MetaOption()]";
        ?>
,
                bp_gform_options: <?php 
        echo !empty($form) ? GFCommon::json_encode(self::get_bp_gform_fields($form)) : "''";
        ?>
,
                meta_names: [
                    { 'name': 'Standard User Meta', 'value': '_optgroup' },
                    { 'name': 'Website', 'value': 'user_url' },
                    { 'name': 'AIM', 'value': 'aim' },
                    { 'name': 'Yahoo', 'value': 'yim' },
                    { 'name': 'Jabber / Google Talk', 'value': 'jabber' },
                    { 'name': 'Biographical Information', 'value': 'description' }
                    <?php 
        if (!empty($meta_keys)) {
            ?>
                    ,
                    { 'name': 'Other User Meta', 'value': '_optgroup' }
                        <?php 
            foreach ($meta_keys as $meta_key) {
                ?>
                        ,
                        { 'name': '<?php 
                echo self::escape_single_quote($meta_key);
                ?>
', 'value': '<?php 
                echo self::escape_single_quote($meta_key);
                ?>
' }
                        <?php 
            }
            ?>
                    <?php 
        }
        ?>
                ],

            }

            function setFeedType(elem) {

                var elem = jQuery(elem);
                var feedType = elem.val();

                // hide all feed options (except feed type)
                hideAllOptions();

                if(!feedType)
                    return false;

                jQuery('form#gf_user_form').removeClass('create update').addClass(feedType);

                var spinner = new ajaxSpinner('select#feed_type');

                jQuery.post(ajaxurl,
                    {
                        feed_type: feedType,
                        feed_id: '<?php 
        echo $id;
        ?>
', // only applies to existing feeds
                        action: 'gf_user_get_available_forms'
                    },
                    function(response) {

                        spinner.destroy();

                        if(!response) {
                            hideAllOptions();
                            displayMessage('<?php 
        _e('There was an error getting the available forms', 'gravityformsuserregistration');
        ?>
', '#feed_settings');
                        } else {
                            jQuery('select#gf_user_registration_form').html(response);
                            jQuery('#form_select').slideDown();
                        }

                    }
                );

            }

            function SelectForm(formId, configId){

                hideAllOptions('#form_select');

                if(!formId)
                    return;

                var spinner = new ajaxSpinner('#form_select select');

                jQuery.post(ajaxurl,
                    {
                        form_id: formId,
                        feed_type: jQuery('select#feed_type').val(),
                        action: 'gf_user_select_form',
                        gf_user_select_form: '<?php 
        echo wp_create_nonce("gf_user_select_form");
        ?>
'
                    }, function(response) {

                        spinner.destroy();

                        if(!response)
                            return;

                        var formData = jQuery.parseJSON(response);
                        EndSelectForm(formData['form'], formData['form_fields'], formData['field_options'], formData['password_options'], formData['email_options'], formData['options_meta'], formData['bp_gform_options']);
                    }
                );

            }

            function EndSelectForm(form_meta, form_fields, field_options, password_options, email_options, options_meta, bp_gform_options){

                var isUpdateFeed = jQuery('select#feed_type').val() == 'update';

                if(email_options == '<option value=""></option>' && jQuery('select#feed_type').val() == 'create') {
                    displayMessage('<?php 
        _e('This form does not have any <strong>Email</strong> fields. Please add an Email field and try again.', 'gravityformsuserregistration');
        ?>
', '#feed_settings');
                    jQuery("#user_registration_wait").hide();
                    return;
                } else {
                    jQuery("#invalid_form_message").hide();
                }

                // set global form object & reset user meta
                GFUser.form = form_meta;
                GFUser.form_fields = form_fields;
                GFUser.bp_gform_options = bp_gform_options;
                GFUser.user_meta = [new MetaOption()];

                // update dropdowns with selected form's fields
                jQuery.each(jQuery("select.standard-meta"), function(){
                    jQuery(this).html(field_options);
                });

                // create feed gets auto pass option, do not add to update feed
                jQuery.each(jQuery("select.password-field"), function(){
                    var autoPass = isUpdateFeed ? '<option id="preservepass" class="system-option" value=""><?php 
        _e('Preserve current password', 'gravityformsuserregistration');
        ?>
</option>' : '<option id="generatepass" class="system-option"><?php 
        _e('Auto Generate Password', 'gravityformsuserregistration');
        ?>
</option>';
                    jQuery(this).html(password_options + autoPass);
                });

                jQuery.each(jQuery("select.email-field"), function(){
                    jQuery(this).html(email_options);
                });

                var preserveRoleElements = jQuery( '#gf_user_registration_role, #gf_user_registration_multisite_root_role' );

                // update feed gets "Preserve current role" option for Role select, remove for create feed
                if( isUpdateFeed ) {
                    // make sure an "preserve" option does not already exist
                    if( jQuery( 'option.perserve_role' ).length <=  0 ) {
                        var preserveRoleOption = jQuery( '<option class="preserve_role system-option" value="gfur_preserve_role"><?php 
        _e('&mdash; Preserve current role &mdash;', 'gravityformsuserregistration');
        ?>
</option>' );
                        preserveRoleOption.appendTo( preserveRoleElements ).prop( 'selected', true );
                    }
                    jQuery('#gf_user_registration_send_email').hide();
                } else {
                    jQuery( 'option.preserve_role' ).remove();
                    jQuery('#gf_user_registration_send_email').show();
                }

                CreateCustomMetaOptions();

                // handle set post author option
                if(options_meta['set_post_author']) {
                    jQuery("#gf_user_registration_set_post_author_container").show();
                } else {
                    jQuery("#gf_user_registration_set_post_author_container").hide();
                }

                // handle registration option
                jQuery("#gf_user_registration_enabled").attr('checked', false);
                SetRegistrationCondition("","");

                // Form Selected Event
                jQuery(document).trigger('gform_user_registration_form_selected', [GFUser.form]);

                jQuery("#field_group").slideDown();

            }

            function hideAllOptions(exclude) {

                var exclude = typeof exclude == 'undefined' ? '' : exclude;

                // hide all feed options (except feed type)
                jQuery('#error_message').not(exclude).fadeOut('fast');
                jQuery('#form_select, #field_group').not(exclude).slideUp();
            }

            function displayMessage(message, afterElem) {

                var messageElem = jQuery('#error_message');

                if(messageElem.length <= 0)
                    messageElem = jQuery('<div id="error_message" class="error_message" style="display:none;"></div>');

                messageElem.html(message).insertAfter(afterElem).fadeIn('fast');

            }

            function CreateCustomMetaOptions(){

                var form = GFUser.form;
                var user_meta = GFUser.user_meta;
                var meta_names = GFUser.meta_names;
                var images_url = '<?php 
        echo GFCommon::get_base_url() . "/images";
        ?>
';
                var str = '';

                for(var i=0; i<user_meta.length; i++){

                    var show_select = (user_meta[i].custom == true) ? "display:none;" : "";
                    var show_input = (user_meta[i].custom == false) ? "display:none;" : "";

                    str += '<div class="margin_vertical_10">';
                    str += '<div class="metaname"><select type="text" name="gf_user_meta_name_' + i + '" id="gf_user_meta_name_' + i + '" class="meta-name-select width-1" style="' + show_select + '">';
                    str += getMetaNameOptions(meta_names, user_meta[i].meta_name) + '</select>'
                    str += '<div class="custom_metaname" style="' + show_input + '">' + getMetaNameInput(i, user_meta[i]) + '</div></div>';
                    str += '<div class="metavalue"><select type="text" name="gf_user_meta_value_' + i + '" id="gf_user_meta_value_' + i + '" class="meta-value-select width-1">';
                    str += getMetaValueOptions(form, user_meta[i].meta_value) + '</select></div>';

                    str += "<img src='" + images_url + "/add.png' class='add_field_choice' title='<?php 
        _e("add another rule", "gravityformsuserregistration");
        ?>
' alt='<?php 
        _e("add another rule", "gravityformsuserregistration");
        ?>
' style='cursor:pointer;' onclick=\"InsertRule(" + (i+1) + ", 'user_meta');\" />";
                    if(user_meta.length > 1 )
                        str += "<img src='" + images_url + "/remove.png' title='<?php 
        _e("remove this rule", "gravityformsuserregistration");
        ?>
' alt='<?php 
        _e("remove this rule", "gravityformsuserregistration");
        ?>
' class='delete_field_choice' style='cursor:pointer;' onclick=\"DeleteRule(" + (i) + ", 'user_meta');\" /></li>";

                    str += '</div>';
                }

                jQuery("#custom_usermeta").html(str);
            }

            function getMetaNameOptions(meta_names, selected, custom_option) {

                var optGroupOpen = false;
                var str = '<option value="" class="label">Select Meta Option</option>';

                for(i = 0; i < meta_names.length; i++) {

                    if(meta_names[i].value == '_optgroup') {

                        if(optGroupOpen)
                            str += '</optgroup>';

                        str += '<optgroup label="' + meta_names[i].name + '">';
                        optGroupOpen = true;

                    } else if(meta_names[i].value == selected) {
                        str += '<option value="' + meta_names[i].value + '" selected="selected">' + meta_names[i].name + '</option>';
                    } else {
                        str += '<option value="' + meta_names[i].value + '">' + meta_names[i].name + '</option>';
                    }
                }

                // close last option group if exists
                if(optGroupOpen)
                    str += '</optgroup>';

                if(custom_option != false) {
                    str += '<option value="gf_custom" class="custom">Add Custom</option>';
                }

                return str;
            }

            function getMetaValueOptions(form, meta_value) {

                var form_fields = GFUser.form_fields;

                var str = '<option value=""></option>';
                for(i = 0; i < form_fields.length; i++) {
                    if(form_fields[i][0] == meta_value) {
                        str += '<option value="' + form_fields[i][0] + '" selected="selected">' + form_fields[i][1] + '</option>';
                    } else {
                        str += '<option value="' + form_fields[i][0] + '">' + form_fields[i][1] + '</option>';
                    }
                }

                return str;
            }

            function getMetaNameInput(index, user_meta) {

                var meta_name = (user_meta.meta_name != "") ? user_meta.meta_name : "<?php 
        _e("Enter Meta Name", "gravityformsuserregistration");
        ?>
";

                str = '<input type="text" name="gf_user_custom_meta_name_' + index + '" id="gf_user_custom_meta_name_' + index + '" class="width-1" value="' + meta_name + '" />';
                str += '<span class="reset">Reset</span>';

                return str;
            }

            function InsertRule(ruleIndex, meta_group){

                if(meta_group == 'user_meta') {
                    GFUser[meta_group].splice(ruleIndex, 0, new MetaOption());
                    CreateCustomMetaOptions();
                } else {
                    // Insert Rule Action (used by BuddyPress)
                    jQuery(document).trigger('gform_user_registration_insert_rule', [ruleIndex, meta_group]);
                }

            }

            function DeleteRule(ruleIndex, meta_group){

                if(meta_group == 'user_meta') {
                    GFUser[meta_group].splice(ruleIndex, 1);
                    CreateCustomMetaOptions();
                } else {
                    // Delete Rule Action (used by BuddyPress)
                    jQuery(document).trigger('gform_user_registration_delete_rule', [ruleIndex, meta_group]);
                }

            }

            function MetaOption() {
                this.meta_name = "";
                this.meta_value = "";
                this.custom = false;
            }

            function IndexOf(ary, item){
                for(var i=0; i<ary.length; i++)
                    if(ary[i] == item)
                        return i;

                return -1;
            }

            function saveUserMeta() {

                var user_meta = GFUser.user_meta;

                for(var i=0; i<user_meta.length; i++){
                    user_meta[i].custom = (jQuery("#gf_user_meta_name_" + i).css('display') == 'none') ? true : false;
                    user_meta[i].meta_name = (user_meta[i].custom == true) ? jQuery("#gf_user_custom_meta_name_" + i).val() : jQuery("#gf_user_meta_name_" + i).val();
                    user_meta[i].meta_value = jQuery("#gf_user_meta_value_" + i).val();
                }

                GFUser.user_meta = user_meta;

                // save meta to hidden field for php
                var json = jQuery.toJSON(user_meta);
                jQuery("#gf_user_meta").val(json);

            }

            function ajaxSpinner(elem) {

                this.elem = elem;
                this.image = '<img src="<?php 
        echo self::get_base_url();
        ?>
/images/loading.gif" class="spinner" />';

                this.init = function() {
                    this.spinner = jQuery(this.image);
                    jQuery(this.elem).after(this.spinner);
                    return this;
                }

                this.destroy = function() {
                    jQuery(this.spinner).remove();
                }

                return this.init();
            }

            // initialize
            jQuery(document).ready(function(){

                <?php 
        if (!empty($form)) {
            ?>
                    CreateCustomMetaOptions();
                <?php 
        }
        ?>

                // after GFUser is init, trigger actions
                jQuery(document).trigger('gform_gfuser_object_init');

                // disable 'Select a form' option
                //jQuery(this).find('option:first').attr('disabled', 'disabled');

                // custom meta input
                jQuery("select.meta-name-select").live('change', function(){
                     if(jQuery(this).val() == 'gf_custom') {
                         jQuery(this).fadeOut(function(){
                             jQuery(this).val("");
                             jQuery(this).next('div.custom_metaname').fadeIn();
                             jQuery(this).next('div.custom_metaname').find('input').cleardefault().focus();
                         });
                     }
                });

                // custom meta input reset button
                jQuery("span.reset").live('click', function(){
                    jQuery(this).parent('div.custom_metaname').fadeOut(function(){
                        jQuery(this).siblings('select').fadeIn();
                    })
                });

                // add hover class for custom meta input reset
                jQuery("div.custom_metaname").live('mouseover mouseout', function(event) {
                    if (event.type == 'mouseover') {
                        jQuery(this).addClass('hover');
                    } else {
                        jQuery(this).removeClass('hover');
                    }
                });

                // save entered information
                jQuery(".metaname input, .metaname select, .metavalue select").live('change', function(){ saveUserMeta(); });
                jQuery("#gf_user_form").submit(function(){ saveUserMeta(); })

                // clear default values
                jQuery.fn.cleardefault = function() {
                    return this.focus(function() {
                        if( this.value == this.defaultValue ) {
                            this.value = "";
                        }
                    }).blur(function() {
                    if( !this.value.length ) {
                        this.value = this.defaultValue;
                    }
                });

            }

            });


            // Registration Conditional Functions

            <?php 
        if (!empty($config["form_id"])) {
            ?>

                // initializing registration condition drop downs
                jQuery(document).ready(function(){
                    var selectedField = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["reg_condition_field_id"]);
            ?>
";
                    var selectedValue = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["reg_condition_value"]);
            ?>
";
                    SetRegistrationCondition(selectedField, selectedValue);
                });

                <?php 
        }
        ?>

            function SetRegistrationCondition(selectedField, selectedValue){

                // load form fields
                jQuery("#gf_user_registration_field_id").html(GetSelectableFields(selectedField, 20));
                var optinConditionField = jQuery("#gf_user_registration_field_id").val();
                var checked = jQuery("#gf_user_registration_enabled").attr('checked');

                if(optinConditionField){
                    jQuery("#gf_user_registration_condition_message").hide();
                    jQuery("#gf_user_registration_condition_fields").show();
                    jQuery("#gf_user_registration_value_container").html(GetFieldValues(optinConditionField, selectedValue, 20));
                    jQuery("#gf_user_registration_value").val(selectedValue);
                }
                else{
                    jQuery("#gf_user_registration_condition_message").show();
                    jQuery("#gf_user_registration_condition_fields").hide();
                }

                if(!checked) jQuery("#gf_user_registration_container").hide();

            }

            function GetFieldValues(fieldId, selectedValue, labelMaxCharacters){
                if(!fieldId)
                    return "";

                var str = "";
                var field = GetFieldById(fieldId);
                if(!field)
                    return "";

                var isAnySelected = false;

                if(field["type"] == "post_category" && field["displayAllCategories"]){
					str += '<?php 
        $dd = wp_dropdown_categories(array("class" => "optin_select", "orderby" => "name", "id" => "gf_user_registration_value", "name" => "gf_user_registration_value", "hierarchical" => true, "hide_empty" => 0, "echo" => false));
        echo str_replace("\n", "", str_replace("'", "\\'", $dd));
        ?>
';
				}
				else if(field.choices){
					str += '<select id="gf_user_registration_value" name="gf_user_registration_value" class="optin_select">'

	                for(var i=0; i<field.choices.length; i++){
	                    var fieldValue = ( field.choices[i].value ? field.choices[i].value : field.choices[i].text ).toString();
	                    var isSelected = fieldValue == selectedValue;
	                    var selected = isSelected ? "selected='selected'" : "";
	                    if(isSelected)
	                        isAnySelected = true;

	                    str += "<option value='" + fieldValue.replace("'", "&#039;") + "' " + selected + ">" + TruncateMiddle(field.choices[i].text, labelMaxCharacters) + "</option>";
	                }

	                if(!isAnySelected && selectedValue){
	                    str += "<option value='" + selectedValue.replace("'", "&#039;") + "' selected='selected'>" + TruncateMiddle(selectedValue, labelMaxCharacters) + "</option>";
	                }
	                str += "</select>";
				}
				else
				{
					selectedValue = selectedValue ? selectedValue.replace(/'/g, "&#039;") : "";
					//create a text field for fields that don't have choices (i.e text, textarea, number, email, etc...)
					str += "<input type='text' placeholder='<?php 
        _e("Enter value", "gravityforms");
        ?>
' id='gf_user_registration_value' name='gf_user_registration_value' value='" + selectedValue.replace(/'/g, "&#039;") + "'>";
				}

                return str;
            }

            function GetFieldById(fieldId){
                var form = GFUser.form;
                for(var i=0; i<form.fields.length; i++){
                    if(form.fields[i].id == fieldId)
                        return form.fields[i];
                }
                return null;
            }

            function TruncateMiddle(text, maxCharacters){
                if(text.length <= maxCharacters)
                    return text;
                var middle = parseInt(maxCharacters / 2);
                return text.substr(0, middle) + "..." + text.substr(text.length - middle, middle);
            }

            function GetSelectableFields(selectedFieldId, labelMaxCharacters){
                var form = GFUser.form;
                var str = "";
                var inputType;
                for(var i=0; i<form.fields.length; i++){
                    fieldLabel = form.fields[i].adminLabel ? form.fields[i].adminLabel : form.fields[i].label;
                    inputType = form.fields[i].inputType ? form.fields[i].inputType : form.fields[i].type;
                    if (IsConditionalLogicField(form.fields[i])) {
                        var selected = form.fields[i].id == selectedFieldId ? "selected='selected'" : "";
                        str += "<option value='" + form.fields[i].id + "' " + selected + ">" + TruncateMiddle(fieldLabel, labelMaxCharacters) + "</option>";
                    }
                }
                return str;
            }

            function IsConditionalLogicField(field){
			    inputType = field.inputType ? field.inputType : field.type;
			    var supported_fields = ["checkbox", "radio", "select", "text", "website", "textarea", "email", "hidden", "number", "phone", "multiselect", "post_title",
			                            "post_tags", "post_custom_field", "post_content", "post_excerpt"];

			    var index = jQuery.inArray(inputType, supported_fields);

			    return index >= 0;
			}

            function ToggleUserActivation() {

                var setting = jQuery('#option_user_activation');
                var isUserActivationEnabled = setting.find('#gf_user_registration_user_activation').is(":checked");
                var userActivationTypeContainer = setting.find('#gfur_user_activation_type_container');
                var userActivationLabel = setting.find('label[for="gf_user_registration_user_activation"]');

                if( isUserActivationEnabled ) {
                    userActivationTypeContainer.show();
                    userActivationLabel.find('span.selected').show();
                    userActivationLabel.find('span.unselected').hide();
                } else {
                    userActivationTypeContainer.hide();
                    userActivationLabel.find('span.unselected').show();
                    userActivationLabel.find('span.selected').hide();
                }

            }

        </script>

        <?php 
    }
Beispiel #3
0
 public static function select_mailchimp_form()
 {
     check_ajax_referer("gf_select_mailchimp_form", "gf_select_mailchimp_form");
     $form_id = intval(rgpost("form_id"));
     list($list_id, $list_name) = explode("|:|", rgpost("list_id"));
     $setting_id = intval(rgpost("setting_id"));
     $api = self::get_api();
     if (!$api) {
         die("EndSelectForm();");
     }
     //getting list of all MailChimp merge variables for the selected contact list
     self::log("Retrieving Merge_Vars for list {$list_id}", "debug");
     $merge_vars = $api->listMergeVars($list_id);
     self::log("Merge_Vars retrieved: " . print_r($merge_vars, true), "debug");
     //getting configuration
     $config = GFMailChimpData::get_feed($setting_id);
     //getting field map UI
     $str = self::get_field_mapping($config, $form_id, $merge_vars);
     //getting list of selection fields to be used by the optin
     $form_meta = RGFormsModel::get_form_meta($form_id);
     $selection_fields = GFCommon::get_selection_fields($form_meta, rgars($config, "meta/optin_field_id"));
     $group_condition = array();
     $group_names = array();
     $grouping = self::get_groupings($config, $list_id, $selection_fields, $group_condition, $group_names);
     //fields meta
     $form = RGFormsModel::get_form_meta($form_id);
     die("EndSelectForm('" . str_replace("'", "\\'", $str) . "', " . GFCommon::json_encode($form) . ", '" . str_replace("'", "\\'", $grouping) . "', " . json_encode($group_names) . " );");
 }
    private static function edit_page()
    {
        ?>
        <style>
            .constantcontact_col_heading{padding-bottom:2px; border-bottom: 1px solid #ccc; font-weight:bold;}
            .constantcontact_field_cell {padding: 6px 17px 0 0; margin-right:15px;}
            .gfield_required{color:red;}

            .feeds_validation_error{ background-color:#FFDFDF;}
            .feeds_validation_error td{ margin-top:4px; margin-bottom:6px; padding-top:6px; padding-bottom:6px; border-top:1px dotted #C89797; border-bottom:1px dotted #C89797}

            .left_header{float:left; width:200px;}
            .margin_vertical_10{margin: 10px 0;}
        </style>
        <script type="text/javascript">
            var form = Array();
        </script>
        <div class="wrap">
            <?php 
        self::ctct_logo();
        ?>
            <h2><?php 
        _e("Constant Contact Feed", "gravity-forms-constant-contact");
        ?>
</h2>
		<div class="clear"></div>
        <?php 
        //ensures valid credentials were entered in the settings page
        if (!get_option('gravity_forms_cc_valid_api')) {
            ?>
            <div class="error" id="message"><p><?php 
            echo sprintf(__("We are unable to login to Constant Contact with the provided credentials. Please make sure they are valid in the %sSettings Page%s.", "gravity-forms-constant-contact"), "<a href='?page=gf_settings&addon=Constant+Contact'>", "</a>");
            ?>
</p></div>
            <?php 
            return;
        }
        $api = self::get_api();
        //getting setting id (0 when creating a new one)
        $id = !empty($_POST["constantcontact_setting_id"]) ? $_POST["constantcontact_setting_id"] : absint($_GET["id"]);
        $config = empty($id) ? array('is_active' => true) : GFConstantContactData::get_feed($id);
        //getting merge vars from selected list (if one was selected)
        $merge_vars = empty($config['meta']['contact_list_id']) ? array() : $api->listMergeVars($config['meta']['contact_list_id']);
        //updating meta information
        if (isset($_POST['gf_constantcontact_submit'])) {
            list($list_id, $list_name) = self::get_constantcontact_list_details($_POST["gf_constantcontact_list"]);
            $config["meta"]["contact_list_id"] = $list_id;
            $config["meta"]["contact_list_name"] = $list_name;
            $config["form_id"] = absint($_POST["gf_constantcontact_form"]);
            $is_valid = true;
            $merge_vars = $api->listMergeVars($config["meta"]["contact_list_id"]);
            $field_map = array();
            foreach ($merge_vars as $var) {
                $field_name = "constantcontact_map_field_" . $var["tag"];
                $mapped_field = stripslashes($_POST[$field_name]);
                if (!empty($mapped_field)) {
                    $field_map[$var["tag"]] = $mapped_field;
                } else {
                    unset($field_map[$var["tag"]]);
                    if ($var["req"] == "Y") {
                        $is_valid = false;
                    }
                }
            }
            $config["meta"]["field_map"] = $field_map;
            $config["meta"]["optin_enabled"] = !empty($_POST["constantcontact_optin_enable"]) ? true : false;
            $config["meta"]["optin_field_id"] = !empty($config["meta"]["optin_enabled"]) ? $_POST["constantcontact_optin_field_id"] : "";
            $config["meta"]["optin_operator"] = !empty($config["meta"]["optin_enabled"]) ? $_POST["constantcontact_optin_operator"] : "";
            $config["meta"]["optin_value"] = $config["meta"]["optin_enabled"] ? $_POST["constantcontact_optin_value"] : "";
            if ($is_valid) {
                $id = GFConstantContactData::update_feed($id, $config["form_id"], $config["is_active"], $config["meta"]);
                ?>
                <div class="updated fade" style="padding:6px"><?php 
                echo sprintf(__("Feed Updated. %sback to list%s", "gravity-forms-constant-contact"), "<a href='?page=gf_constantcontact'>", "</a>");
                ?>
</div>
                <input type="hidden" name="constantcontact_setting_id" value="<?php 
                echo $id;
                ?>
"/>
                <?php 
            } else {
                ?>
                <div class="error" style="padding:6px"><?php 
                echo __("Feed could not be updated. Please enter all required information below.", "gravity-forms-constant-contact");
                ?>
</div>
                <?php 
            }
        }
        ?>
        <form method="POST" action="<?php 
        echo remove_query_arg('refresh');
        ?>
">
            <input type="hidden" name="constantcontact_setting_id" value="<?php 
        echo $id;
        ?>
"/>
            <div class="margin_vertical_10">
                <label for="gf_constantcontact_list" class="left_header"><?php 
        _e("Constant Contact list", "gravity-forms-constant-contact");
        ?>
 <?php 
        gform_tooltip("constantcontact_contact_list");
        ?>
</label>
                <?php 
        //getting all contact lists
        $lists = $api->CC_List()->getLists();
        if (empty($lists)) {
            echo __("Could not load Constant Contact contact lists. <br/>Error: ", "gravity-forms-constant-contact") . $api->errorMessage;
        } else {
            ?>
                    <select id="gf_constantcontact_list" name="gf_constantcontact_list" onchange="SelectList(jQuery(this).val());">
                        <option value="" ><?php 
            _e("Select a Constant Contact List", "gravity-forms-constant-contact");
            ?>
</option>
                    <?php 
            $curr_contact_list_id = isset($config["meta"]["contact_list_id"]) ? $config["meta"]["contact_list_id"] : '';
            foreach ($lists as $list) {
                echo '<option value="' . esc_attr(self::get_cc_list_short_id($list['id'])) . '" ' . selected($list['id'], $curr_contact_list_id, false) . '>' . esc_html($list['title']) . '</option>';
            }
            ?>
                  </select>
                <?php 
        }
        ?>
            </div>
            <div id="constantcontact_form_container" valign="top" class="margin_vertical_10" <?php 
        echo empty($config["meta"]["contact_list_id"]) ? "style='display:none;'" : "";
        ?>
>
                <label for="gf_constantcontact_form" class="left_header"><?php 
        _e("Gravity Form", "gravity-forms-constant-contact");
        ?>
 <?php 
        gform_tooltip("constantcontact_gravity_form");
        ?>
</label>

                <select id="gf_constantcontact_form" name="gf_constantcontact_form" onchange="SelectForm(jQuery('#gf_constantcontact_list').val(), jQuery(this).val());">
                <option value=""><?php 
        _e("Select a form", "gravity-forms-constant-contact");
        ?>
 </option>
                <?php 
        $curr_form_id = isset($config['form_id']) ? $config['form_id'] : '';
        $forms = RGFormsModel::get_forms();
        foreach ($forms as $form) {
            echo '<option value="' . absint($form->id) . '" ' . selected(absint($form->id), $curr_form_id, false) . '>' . esc_html($form->title) . '</option>';
        }
        ?>
                </select>
                &nbsp;&nbsp;
                <span class="spinner" id="constantcontact_wait" style="display:none; float:none; position:absolute; margin-top: .33em;"></span>
            </div>
            <div id="constantcontact_field_group" valign="top" <?php 
        echo empty($config["meta"]["contact_list_id"]) || empty($config["form_id"]) ? "style='display:none;'" : "";
        ?>
>
                <div id="constantcontact_field_container" valign="top" class="margin_vertical_10" >
                    <label for="constantcontact_fields" class="left_header"><?php 
        _e("Map Fields", "gravity-forms-constant-contact");
        ?>
 <?php 
        gform_tooltip("constantcontact_map_fields");
        ?>
</label>

                    <div id="constantcontact_field_list">
                    <?php 
        $selection_fields = '';
        if (!empty($config["form_id"])) {
            //getting list of all ConstantContact merge variables for the selected contact list
            if (empty($merge_vars)) {
                $merge_vars = $api->listMergeVars($list_id);
            }
            //getting field map UI
            echo self::get_field_mapping($config, $config["form_id"], $merge_vars);
            //getting list of selection fields to be used by the optin
            $form_meta = RGFormsModel::get_form_meta($config["form_id"]);
            $selection_fields = GFCommon::get_selection_fields($form_meta, @$config["meta"]["optin_field_id"]);
        }
        ?>
                    </div>
                </div>

                <div id="constantcontact_optin_container" valign="top" class="margin_vertical_10">
                    <label for="constantcontact_optin" class="left_header"><?php 
        _e("Opt-In Condition", "gravity-forms-constant-contact");
        ?>
 <?php 
        gform_tooltip("constantcontact_optin_condition");
        ?>
</label>
                    <div id="constantcontact_optin">
                        <table>
                            <tr>
                                <td>
                                    <input type="checkbox" id="constantcontact_optin_enable" name="constantcontact_optin_enable" value="1" onclick="if(this.checked){jQuery('#constantcontact_optin_condition_field_container').show('slow');} else{jQuery('#constantcontact_optin_condition_field_container').hide('slow');}" <?php 
        echo @$config["meta"]["optin_enabled"] ? "checked='checked'" : "";
        ?>
/>
                                    <label for="constantcontact_optin_enable"><?php 
        _e("Enable", "gravity-forms-constant-contact");
        ?>
</label>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <div id="constantcontact_optin_condition_field_container" <?php 
        echo empty($config["meta"]["optin_enabled"]) ? "style='display:none'" : "";
        ?>
>
                                        <div id="constantcontact_optin_condition_fields" <?php 
        echo empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                            <?php 
        _e("Export to Constant Contact if ", "gravity-forms-constant-contact");
        ?>

                                            <select id="constantcontact_optin_field_id" name="constantcontact_optin_field_id" class='optin_select' onchange='jQuery("#constantcontact_optin_value").html(GetFieldValues(jQuery(this).val(), "", 20));'><?php 
        echo $selection_fields;
        ?>
</select>
                                            <select id="constantcontact_optin_operator" name="constantcontact_optin_operator" >
                                                <option value="is" <?php 
        echo @$config["meta"]["optin_operator"] == "is" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is", "gravity-forms-constant-contact");
        ?>
</option>
                                                <option value="isnot" <?php 
        echo @$config["meta"]["optin_operator"] == "isnot" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is not", "gravity-forms-constant-contact");
        ?>
</option>
                                            </select>
                                            <select id="constantcontact_optin_value" name="constantcontact_optin_value" class='optin_select'>
                                            </select>

                                        </div>
                                        <div id="constantcontact_optin_condition_message" <?php 
        echo !empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                            <?php 
        _e("To create an Opt-In condition, your form must have a drop down, checkbox or multiple choice field.", "gravityform");
        ?>
                                        </div>
                                    </div>
                                </td>
                            </tr>
                        </table>
                    </div>

                    <script type="text/javascript">
                        <?php 
        if (!empty($config["form_id"])) {
            ?>
                            //creating Javascript form object
                            form = <?php 
            echo GFCommon::json_encode($form_meta);
            ?>
 ;

                            //initializing drop downs
                            jQuery(document).ready(function(){
                                var selectedField = "<?php 
            echo str_replace('"', '\\"', @$config["meta"]["optin_field_id"]);
            ?>
";
                                var selectedValue = "<?php 
            echo str_replace('"', '\\"', @$config["meta"]["optin_value"]);
            ?>
";
                                SetOptin(selectedField, selectedValue);
                            });
                        <?php 
        }
        ?>
                    </script>
                </div>


                <div id="constantcontact_submit_container" class="margin_vertical_10">
                    <input type="submit" name="gf_constantcontact_submit" value="<?php 
        echo empty($id) ? __("Save Feed", "gravity-forms-constant-contact") : __("Update Feed", "gravity-forms-constant-contact");
        ?>
" class="button-primary"/>
                </div>
            </div>
        </form>
        </div>
        <script type="text/javascript">

            function SelectList(listId){
                if(listId){
                    jQuery("#constantcontact_form_container").slideDown();
                    jQuery("#gf_constantcontact_form").val("");
                }
                else{
                    jQuery("#constantcontact_form_container").slideUp();
                    EndSelectForm("");
                }
            }

            function SelectForm(listId, formId){
                if(!formId){
                    jQuery("#constantcontact_field_group").slideUp();
                    return;
                }

                jQuery("#constantcontact_wait").css('display', 'inline-block');
                jQuery("#constantcontact_field_group").slideUp();

                var mysack = new sack("<?php 
        bloginfo('wpurl');
        ?>
/wp-admin/admin-ajax.php" );
                mysack.execute = 1;
                mysack.method = 'POST';
                mysack.setVar( "action", "gf_select_constantcontact_form" );
                mysack.setVar( "gf_select_constantcontact_form", "<?php 
        echo wp_create_nonce("gf_select_constantcontact_form");
        ?>
" );
                mysack.setVar( "list_id", listId);
                mysack.setVar( "form_id", formId);
                mysack.encVar( "cookie", document.cookie, false );
                mysack.onError = function() {jQuery("#constantcontact_wait").hide(); alert('<?php 
        _e("Ajax error while selecting a form", "gravity-forms-constant-contact");
        ?>
' )};
                mysack.runAJAX();

                return true;
            }

            function SetOptin(selectedField, selectedValue){

                //load form fields
                jQuery("#constantcontact_optin_field_id").html(GetSelectableFields(selectedField, 20));
                var optinConditionField = jQuery("#constantcontact_optin_field_id").val();

                if(optinConditionField){
                    jQuery("#constantcontact_optin_condition_message").hide();
                    jQuery("#constantcontact_optin_condition_fields").show();
                    jQuery("#constantcontact_optin_value").html(GetFieldValues(optinConditionField, selectedValue, 20));
                }
                else{
                    jQuery("#constantcontact_optin_condition_message").show();
                    jQuery("#constantcontact_optin_condition_fields").hide();
                }
            }

            function EndSelectForm(fieldList, form_meta){
                //setting global form object
                form = form_meta;

                if(fieldList){

                    SetOptin("","");

                    jQuery("#constantcontact_field_list").html(fieldList);
                    jQuery("#constantcontact_field_group").slideDown();

                }
                else{
                    jQuery("#constantcontact_field_group").slideUp();
                    jQuery("#constantcontact_field_list").html("");
                }
                jQuery("#constantcontact_wait").hide();
            }

            function GetFieldValues(fieldId, selectedValue, labelMaxCharacters){
                if(!fieldId)
                    return "";

                var str = "";
                var field = GetFieldById(fieldId);
                if(!field || !field.choices)
                    return "";

                var isAnySelected = false;

                for(var i=0; i<field.choices.length; i++){
                    var fieldValue = field.choices[i].value ? field.choices[i].value : field.choices[i].text;
                    var isSelected = fieldValue == selectedValue;
                    var selected = isSelected ? "selected='selected'" : "";
                    if(isSelected)
                        isAnySelected = true;

                    str += "<option value='" + fieldValue.replace("'", "&#039;") + "' " + selected + ">" + TruncateMiddle(field.choices[i].text, labelMaxCharacters) + "</option>";
                }

                if(!isAnySelected && selectedValue){
                    str += "<option value='" + selectedValue.replace("'", "&#039;") + "' selected='selected'>" + TruncateMiddle(selectedValue, labelMaxCharacters) + "</option>";
                }

                return str;
            }

            function GetFieldById(fieldId){
                for(var i=0; i<form.fields.length; i++){
                    if(form.fields[i].id == fieldId)
                        return form.fields[i];
                }
                return null;
            }

            function TruncateMiddle(text, maxCharacters){
                if(text.length <= maxCharacters)
                    return text;
                var middle = parseInt(maxCharacters / 2);
                return text.substr(0, middle) + "..." + text.substr(text.length - middle, middle);
            }

            function GetSelectableFields(selectedFieldId, labelMaxCharacters){
                var str = "";
                var inputType;
                for(var i=0; i<form.fields.length; i++){
                    fieldLabel = form.fields[i].adminLabel ? form.fields[i].adminLabel : form.fields[i].label;
                    inputType = form.fields[i].inputType ? form.fields[i].inputType : form.fields[i].type;
                    if(inputType == "checkbox" || inputType == "radio" || inputType == "select"){
                        var selected = form.fields[i].id == selectedFieldId ? "selected='selected'" : "";
                        str += "<option value='" + form.fields[i].id + "' " + selected + ">" + TruncateMiddle(fieldLabel, labelMaxCharacters) + "</option>";
                    }
                }
                return str;
            }

        </script>

        <?php 
    }
    private static function edit_page()
    {
        if (!function_exists('gform_tooltip')) {
            require_once GFCommon::get_base_path() . "/tooltips.php";
        }
        ?>
		<style type="text/css">
			label span.howto { cursor: default; }
			.salesforce_col_heading{padding-bottom:2px; border-bottom: 1px solid #ccc; font-weight:bold; width:50%;}
			#salesforce_field_list table { width: 60%; min-width: 500px; border-collapse: collapse; margin-top: 1em; }
			.salesforce_field_cell { padding: 6px 17px 0 0; margin-right:15px; min-width: 150px;}
			.gfield_required{color:red;}

			.feeds_validation_error{ background-color:#FFDFDF;}
			.feeds_validation_error td{ margin-top:4px; margin-bottom:6px; padding-top:6px; padding-bottom:6px; border-top:1px dotted #C89797; border-bottom:1px dotted #C89797}

			.left_header{float:left; width:200px; padding-right: 20px;}
			#salesforce_field_list .left_header { margin-top: 1em; }
			.margin_vertical_10{margin: 20px 0;}
			#gf_salesforce_list { margin-left:220px; padding-top: 1px }
			#salesforce_doubleoptin_warning{padding-left: 5px; padding-bottom:4px; font-size: 10px;}
		</style>
		<script type="text/javascript">
			var form = Array();
		</script>
		<div class="wrap">
			<img alt="<?php 
        _e("Salesforce Feeds", "gravity-forms-salesforce");
        ?>
" src="<?php 
        echo self::get_base_url();
        ?>
/assets/images/salesforce-256x256.png" style="float:left; margin:15px 7px 10px 0;" width="84"/>
			<h2><?php 
        _e("Salesforce Feeds", "gravity-forms-salesforce");
        ?>
</h2>
			<ul class="subsubsub">
				<li><a href="<?php 
        echo self::link_to_settings();
        ?>
">Salesforce Settings</a> |</li>
				<li><a href="<?php 
        echo admin_url('admin.php?page=gf_salesforce');
        ?>
">Salesforce Feeds</a></li>
			</ul>
		<div class="clear"></div>
		<?php 
        //getting Salesforce API
        $api = self::get_api();
        //ensures valid credentials were entered in the settings page
        if (!self::api_is_valid($api)) {
            ?>
			<div class="error" id="message" style="margin-top:20px;"><?php 
            echo wpautop(sprintf(__("We are unable to login to Salesforce with the provided username and API key. Please make sure they are valid in the %sSettings Page%s", "gravity-forms-salesforce"), "<a href='" . self::link_to_settings() . "'>", "</a>"));
            ?>
</div>
			<?php 
            return;
        }
        //getting setting id (0 when creating a new one)
        $id = !empty($_POST["salesforce_setting_id"]) ? absint($_POST["salesforce_setting_id"]) : absint($_GET["id"]);
        $config = empty($id) ? array("meta" => array(), "is_active" => true) : GFSalesforceData::get_feed($id);
        //getting merge vars
        $merge_vars = array();
        //updating meta information
        if (isset($_POST["gf_salesforce_submit"])) {
            $objectType = $list_names = array();
            $list = stripslashes($_POST["gf_salesforce_list"]);
            $config["meta"]["contact_object_name"] = $list;
            $config["form_id"] = absint($_POST["gf_salesforce_form"]);
            $is_valid = true;
            $merge_vars = (array) self::getFieldsForObject($_POST['gf_salesforce_list']);
            $field_map = array();
            foreach ($merge_vars as $var) {
                $field_name = "salesforce_map_field_" . $var['tag'];
                $mapped_field = isset($_POST[$field_name]) ? stripslashes($_POST[$field_name]) : '';
                if (!empty($mapped_field)) {
                    $field_map[$var['tag']] = $mapped_field;
                } else {
                    unset($field_map[$var['tag']]);
                    if (!empty($var["req"])) {
                        $is_valid = false;
                    }
                }
                unset($_POST["{$field_name}"]);
            }
            $config["meta"]["field_map"] = $field_map;
            $config["meta"]["optin_enabled"] = !empty($_POST["salesforce_optin_enable"]) ? true : false;
            $config["meta"]["optin_field_id"] = $config["meta"]["optin_enabled"] ? isset($_POST["salesforce_optin_field_id"]) ? $_POST["salesforce_optin_field_id"] : '' : "";
            $config["meta"]["optin_operator"] = $config["meta"]["optin_enabled"] ? isset($_POST["salesforce_optin_operator"]) ? $_POST["salesforce_optin_operator"] : '' : "";
            $config["meta"]["optin_value"] = $config["meta"]["optin_enabled"] ? $_POST["salesforce_optin_value"] : "";
            $config['meta']['manual_export'] = !empty($_POST['salesforce_manual_export']) ? true : false;
            // since 2.6.0
            $config["meta"]["primary_field"] = !empty($_POST['salesforce_primary_field']) ? $_POST['salesforce_primary_field'] : '';
            // since 2.5.2
            if ($is_valid) {
                $id = GFSalesforceData::update_feed($id, $config["form_id"], $config["is_active"], $config["meta"]);
                ?>
				<div id="message" class="updated fade" style="margin-top:10px;"><p><?php 
                echo sprintf(__("Feed Updated. %sback to list%s", "gravity-forms-salesforce"), "<a href='?page=gf_salesforce'>", "</a>");
                ?>
</p>
					<input type="hidden" name="salesforce_setting_id" value="<?php 
                echo $id;
                ?>
"/>
				</div>
				<?php 
            } else {
                ?>
				<div class="error" style="padding:6px"><?php 
                echo __("Feed could not be updated. Please enter all required information below.", "gravity-forms-salesforce");
                ?>
</div>
				<?php 
            }
        }
        ?>
		<form method="post" action="<?php 
        echo remove_query_arg('refresh');
        ?>
">
			<input type="hidden" name="salesforce_setting_id" value="<?php 
        echo $id;
        ?>
"/>
			<div class="margin_vertical_10">
				<h2><?php 
        _e('1. Select the Object to create when a form is submitted.', "gravity-forms-salesforce");
        ?>
</h2>
				<label for="gf_salesforce_list" class="left_header"><?php 
        _e("Salesforce Object", "gravity-forms-salesforce");
        ?>
 <?php 
        gform_tooltip("salesforce_contact_list");
        ?>
 <span class="howto"><?php 
        _e(sprintf("%sRefresh objects & fields%s", '<a href="' . add_query_arg('refresh', 'lists') . '">', '</a>'), "gravity-forms-salesforce");
        ?>
</span></label>

<?php 
        //getting all contact lists
        $lists = self::getObjectTypes();
        if (!$lists) {
            echo __("Could not load Salesforce contact lists.", "gravity-forms-salesforce");
            echo isset($api->errorMessage) ? ' <br/>' . $api->errorMessage : '';
        } else {
            ?>
					<select id="gf_salesforce_list" name="gf_salesforce_list" onchange="SelectList(jQuery(this).val()); SelectForm(jQuery(this).val(), jQuery('#gf_salesforce_form').val());">
						<option value=""><?php 
            _e("Select a Salesforce Object", "gravity-forms-salesforce");
            ?>
</option>
					<?php 
            foreach ($lists as $name => $label) {
                ?>
						<option value="<?php 
                echo esc_html($name);
                ?>
" <?php 
                selected(isset($config["meta"]["contact_object_name"]) && $name === $config["meta"]["contact_object_name"]);
                ?>
><?php 
                echo esc_html($label);
                ?>
</option>
						<?php 
            }
            ?>
				  </select>

				  <script type="text/javascript">
					if(jQuery('#lists_loading').length && jQuery('#gf_salesforce_list').length) {
						jQuery('#lists_loading').fadeOut(function() { jQuery('#gf_salesforce_list').fadeIn(); });
					 } else if(jQuery('#gf_salesforce_list').length) {
						jQuery('#gf_salesforce_list').show();
					 }
				 </script>
				<?php 
        }
        ?>
				<div class="clear"></div>
			</div>
			<?php 
        flush();
        ?>
			<div id="salesforce_form_container" class="margin_vertical_10" <?php 
        echo empty($config["meta"]["contact_object_name"]) ? "style='display:none;'" : "";
        ?>
>
				<h2><?php 
        _e('2. Select the form to tap into.', "gravity-forms-salesforce");
        ?>
</h2>
				<?php 
        $forms = RGFormsModel::get_forms();
        if (isset($config["form_id"])) {
            foreach ($forms as $form) {
                if ($form->id == $config["form_id"]) {
                    echo '<h3 style="margin:0; padding:0 0 1em 1.75em; font-weight:normal;">' . sprintf(__('(Currently linked with %s)', "gravity-forms-salesforce"), $form->title) . '</h3>';
                }
            }
        }
        ?>
				<label for="gf_salesforce_form" class="left_header"><?php 
        _e("Gravity Form", "gravity-forms-salesforce");
        ?>
 <?php 
        gform_tooltip("salesforce_gravity_form");
        ?>
</label>

				<select id="gf_salesforce_form" name="gf_salesforce_form" onchange="SelectForm(jQuery('#gf_salesforce_list').val(), jQuery(this).val());">
				<option value=""><?php 
        _e("Select a form", "gravity-forms-salesforce");
        ?>
 </option>
				<?php 
        foreach ($forms as $form) {
            if (isset($config["form_id"]) && absint($form->id) == $config["form_id"]) {
                $selected = "selected='selected'";
            } else {
                $selected = "";
            }
            ?>
					<option value="<?php 
            echo absint($form->id);
            ?>
"  <?php 
            echo $selected;
            ?>
><?php 
            echo esc_html($form->title);
            ?>
</option>
					<?php 
        }
        ?>
				</select><span class="spinner salesforce_wait" style="display: none; position: absolute;"></span>
			</div>
			<div class="clear"></div>
			<div id="salesforce_field_group" <?php 
        echo empty($config["meta"]["contact_object_name"]) || empty($config["form_id"]) ? "style='display:none;'" : "";
        ?>
>
				<div id="salesforce_field_container" class="margin_vertical_10" >
					<h2><?php 
        _e('3. Map form fields to Salesforce fields.', "gravity-forms-salesforce");
        ?>
</h2>
					<h3 class="description"><?php 
        _e('About field mapping:', "gravity-forms-salesforce");
        ?>
</h3>
					<label for="salesforce_fields" class="left_header"><?php 
        _e("Standard Fields", "gravity-forms-salesforce");
        ?>
 <?php 
        gform_tooltip("salesforce_map_fields");
        ?>
</label>
					<div id="salesforce_field_list">
					<?php 
        if (!empty($config["form_id"])) {
            //getting list of all Salesforce merge variables for the selected contact list
            if (empty($merge_vars)) {
                $merge_vars = self::getFieldsForObject($config['meta']['contact_object_name']);
            }
            //getting field map UI
            echo self::get_field_mapping($config, $config["form_id"], $merge_vars);
            //getting list of selection fields to be used by the optin
            $form_meta = RGFormsModel::get_form_meta($config["form_id"]);
            $selection_fields = GFCommon::get_selection_fields($form_meta, $config["meta"]["optin_field_id"]);
        }
        ?>
					</div>
					<div class="clear"></div>
				</div>

				<?php 
        /** Manual Export - Bypass automatic export (since 2.6.0) */
        ?>
				<div id="salesforce_manual_export_container" class="margin_vertical_10">
					<table class="form-table">
						<tr valign="top">
							<th scope="row"><?php 
        esc_html_e('Disable Automatic Export', "gravity-forms-salesforce");
        ?>
 <?php 
        gform_tooltip("salesforce_manual_export");
        ?>
</th>
							<td>
								<fieldset>
									<legend class="screen-reader-text"><span><?php 
        _e('Disable Automatic Export', "gravity-forms-salesforce");
        ?>
</span></legend>
									<label for="salesforce_manual_export">
										<input name="salesforce_manual_export" type="checkbox" id="salesforce_manual_export" value="1" <?php 
        echo !empty($config['meta']['manual_export']) ? 'checked="checked"' : '';
        ?>
>
										<?php 
        esc_html_e('Entries will be sent to Salesforce when updated in the admin', "gravity-forms-salesforce");
        ?>
									</label>
								</fieldset>
							</td>
						</tr>
					</table>
				</div>

				<div id="salesforce_optin_container" class="margin_vertical_10">
					<label for="salesforce_optin" class="left_header"><?php 
        _e("Opt-In Condition", "gravity-forms-salesforce");
        ?>
 <?php 
        gform_tooltip("salesforce_optin_condition");
        ?>
</label>
					<div id="salesforce_optin">
						<table>
							<tr>
								<td>
									<input type="checkbox" id="salesforce_optin_enable" name="salesforce_optin_enable" value="1" onclick="if(this.checked){jQuery('#salesforce_optin_condition_field_container').show('slow');} else{jQuery('#salesforce_optin_condition_field_container').hide('slow');}" <?php 
        echo !empty($config["meta"]["optin_enabled"]) ? "checked='checked'" : "";
        ?>
/>
									<label for="salesforce_optin_enable"><?php 
        _e("Enable", "gravity-forms-salesforce");
        ?>
</label>
								</td>
							</tr>
							<tr>
								<td>
									<div id="salesforce_optin_condition_field_container" <?php 
        echo empty($config["meta"]["optin_enabled"]) ? "style='display:none'" : "";
        ?>
>
										<div id="salesforce_optin_condition_fields" <?php 
        echo empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
											<?php 
        _e("Export to Salesforce if ", "gravity-forms-salesforce");
        ?>

											<select id="salesforce_optin_field_id" name="salesforce_optin_field_id" class='optin_select' onchange='jQuery("#salesforce_optin_value").html(GetFieldValues(jQuery(this).val(), "", 20));'><?php 
        echo $selection_fields;
        ?>
</select>
											<select id="salesforce_optin_operator" name="salesforce_optin_operator" />
												<option value="is" <?php 
        echo isset($config["meta"]["optin_operator"]) && $config["meta"]["optin_operator"] == "is" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is", "gravity-forms-salesforce");
        ?>
</option>
												<option value="isnot" <?php 
        echo isset($config["meta"]["optin_operator"]) && $config["meta"]["optin_operator"] == "isnot" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is not", "gravity-forms-salesforce");
        ?>
</option>
											</select>
											<select id="salesforce_optin_value" name="salesforce_optin_value" class='optin_select'>
											</select>

										</div>
										<div id="salesforce_optin_condition_message" <?php 
        echo !empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
											<?php 
        _e("To create an Opt-In condition, your form must have a drop down, checkbox or multiple choice field.", "gravityform");
        ?>
										</div>
									</div>
								</td>
							</tr>
						</table>
					</div>

					<script type="text/javascript">
						<?php 
        if (!empty($config["form_id"])) {
            ?>
							//creating Javascript form object
							form = <?php 
            echo GFCommon::json_encode($form_meta);
            ?>
 ;

							//initializing drop downs
							jQuery(document).ready(function(){
								var selectedField = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["optin_field_id"]);
            ?>
";
								var selectedValue = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["optin_value"]);
            ?>
";
								SetOptin(selectedField, selectedValue);
							});
						<?php 
        }
        ?>
					</script>
				</div>

				<?php 
        /** define the field to be used as primary key when exporting entry to salesforce, thus avoiding duplicate entries (since 2.5.2) */
        ?>
				<?php 
        if (!empty($config['meta']['contact_object_name'])) {
            $current_primary_field = !empty($config['meta']['primary_field']) ? $config['meta']['primary_field'] : '';
            ?>
					<div id="salesforce_optin_container" class="margin_vertical_10">
						<h2><?php 
            _e('4. Choose a "Primary Key" field.', "gravity-forms-salesforce");
            ?>
</h2>
						<h3 class="description"><?php 
            _e('What field should be used to update existing objects?', "gravity-forms-salesforce");
            ?>
</h3>
						<label for="salesforce_primary_field" class="left_header"><?php 
            esc_html_e('Update Field', 'gravity-forms-salesforce');
            ?>
</label>
						<table>
							<tr valign="top">
								<td scope="row"></td>
								<td>
									<select id="salesforce_primary_field" name="salesforce_primary_field">
										<?php 
            echo self::render_options_as_fields($config['meta']['contact_object_name'], $current_primary_field);
            ?>
									</select>
									<span class="howto"><?php 
            esc_html_e('If you want to update a pre-existing object, define what should be used as an unique identifier ("Primary Key"). For example, this may be an email address, Lead ID, or address.', 'gravity-forms-salesforce');
            ?>
</span>
								</td>
							</tr>
						</table>
					</div>
				<?php 
        }
        ?>

				<div class="button-controls submit">
					<input type="submit" name="gf_salesforce_submit" value="<?php 
        echo empty($id) ? __("Save Feed", "gravity-forms-salesforce") : __("Update Feed", "gravity-forms-salesforce");
        ?>
" class="button button-primary button-hero"/>
				</div>
			</div>
		</form>
		</div>

<script type="text/javascript">
	jQuery(document).ready(function($) {
			$('#gf_salesforce_list').live('load change', function() {
				$('#lists_loading').hide();
			});
			$("#gf_salesforce_list input").bind('click change', function() {

				if($("#gf_salesforce_list input:checked").length > 0) {
					SelectList(1);
				} else {
					SelectList(false);
					jQuery("#gf_salesforce_form").val("");
				}
			});

	<?php 
        if (isset($_REQUEST['id'])) {
            ?>
		$('#salesforce_field_list').live('load', function() {
			$('.salesforce_field_cell select').each(function() {
				var $select = $(this);
				var label = $.trim($('label[for='+$(this).prop('name')+']').text());

				label = label.replace(' *', '');

				if($select.val() === '') {
					$('option', $select).each(function() {

						if($(this).text() === label) {
							$(this).prop('selected', true);
						}
					});
				}
			});
		});
	<?php 
        }
        ?>
	});
		</script>
		<script type="text/javascript">

			function SelectList(listId){
				if(listId){
					jQuery("#salesforce_form_container").slideDown();
				}
				else{
					jQuery("#salesforce_form_container").slideUp();
					EndSelectForm("");
				}
			}

			function SelectForm(listId, formId){

				if(!formId){
					jQuery("#salesforce_field_group").slideUp();
					return;
				}

				jQuery(".salesforce_wait").css({
					'display': 'inline-block',
				});
				jQuery("#salesforce_field_group").slideUp();

				var mysack = new sack("<?php 
        bloginfo('wpurl');
        ?>
/wp-admin/admin-ajax.php" );
				mysack.execute = 1;
				mysack.method = 'POST';
				mysack.setVar( "action", "gf_select_salesforce_form" );
				mysack.setVar( "gf_select_salesforce_form", "<?php 
        echo wp_create_nonce("gf_select_salesforce_form");
        ?>
" );
				mysack.setVar( "objectType", listId);
				mysack.setVar( "form_id", formId);
				mysack.encVar( "cookie", document.cookie, false );
				mysack.onError = function() {jQuery(".salesforce_wait").hide(); alert('<?php 
        echo esc_js(__("Ajax error while selecting a form", "gravity-forms-salesforce"));
        ?>
' )};
				mysack.runAJAX();
				return true;
			}

			function SetOptin(selectedField, selectedValue){

				//load form fields
				jQuery("#salesforce_optin_field_id").html(GetSelectableFields(selectedField, 20));
				var optinConditionField = jQuery("#salesforce_optin_field_id").val();

				if(optinConditionField){
					jQuery("#salesforce_optin_condition_message").hide();
					jQuery("#salesforce_optin_condition_fields").show();
					jQuery("#salesforce_optin_value").html(GetFieldValues(optinConditionField, selectedValue, 20));
				}
				else{
					jQuery("#salesforce_optin_condition_message").show();
					jQuery("#salesforce_optin_condition_fields").hide();
				}
			}

			function EndSelectForm(fieldList, form_meta){
				//setting global form object
				form = form_meta;

				if(fieldList){

					SetOptin("","");

					jQuery("#salesforce_field_list").html(fieldList);
					jQuery("#salesforce_field_group").slideDown();
					jQuery('#salesforce_field_list').trigger('load');
				}
				else{
					jQuery("#salesforce_field_group").slideUp();
					jQuery("#salesforce_field_list").html("");
				}
				jQuery(".salesforce_wait").hide();
			}

			function GetFieldValues(fieldId, selectedValue, labelMaxCharacters){
				if(!fieldId)
					return "";

				var str = "";
				var field = GetFieldById(fieldId);
				if(!field || !field.choices)
					return "";

				var isAnySelected = false;

				for(var i=0; i<field.choices.length; i++){
					var fieldValue = field.choices[i].value ? field.choices[i].value : field.choices[i].text;
					var isSelected = fieldValue == selectedValue;
					var selected = isSelected ? "selected='selected'" : "";
					if(isSelected)
						isAnySelected = true;

					str += "<option value='" + fieldValue.replace("'", "&#039;") + "' " + selected + ">" + TruncateMiddle(field.choices[i].text, labelMaxCharacters) + "</option>";
				}

				if(!isAnySelected && selectedValue){
					str += "<option value='" + selectedValue.replace("'", "&#039;") + "' selected='selected'>" + TruncateMiddle(selectedValue, labelMaxCharacters) + "</option>";
				}

				return str;
			}

			function GetFieldById(fieldId){
				for(var i=0; i<form.fields.length; i++){
					if(form.fields[i].id == fieldId)
						return form.fields[i];
				}
				return null;
			}

			function TruncateMiddle(text, maxCharacters){
				if(text.length <= maxCharacters)
					return text;
				var middle = parseInt(maxCharacters / 2);
				return text.substr(0, middle) + "..." + text.substr(text.length - middle, middle);
			}

			function GetSelectableFields(selectedFieldId, labelMaxCharacters){
				var str = "";
				var inputType;
				for(var i=0; i<form.fields.length; i++){
					fieldLabel = form.fields[i].adminLabel ? form.fields[i].adminLabel : form.fields[i].label;
					inputType = form.fields[i].inputType ? form.fields[i].inputType : form.fields[i].type;
					if(inputType == "checkbox" || inputType == "radio" || inputType == "select"){
						var selected = form.fields[i].id == selectedFieldId ? "selected='selected'" : "";
						str += "<option value='" + form.fields[i].id + "' " + selected + ">" + TruncateMiddle(fieldLabel, labelMaxCharacters) + "</option>";
					}
				}
				return str;
			}

		</script>

		<?php 
    }
Beispiel #6
0
 private static function get_routing_fields($form, $selected_field_id)
 {
     return GFCommon::get_selection_fields($form, $selected_field_id);
 }
Beispiel #7
0
    private static function edit_page()
    {
        ?>

        <style type="text/css">
            #user_registration_submit_container{clear:both;}
            .user_registration_col_heading{padding-bottom:2px; border-bottom: 1px solid #ccc; font-weight:bold; width:120px;}
            .user_registration_field_cell {padding: 6px 17px 0 0; margin-right:15px;}

            .user_registration_validation_error{ background-color:#FFDFDF; margin-top:4px; margin-bottom:6px; padding-top:6px; padding-bottom:6px; border:1px dotted #C89797;}
            .user_registration_validation_error span {color: red;}
            .left_header { float:left; width: 260px;}
            .column_right { margin-left: 260px; }
            .margin_vertical_10{margin: 10px 0; padding-left:5px;}
            .margin_vertical_30{margin: 30px 0; padding-left:5px;}
            .width-1{width:300px;}
            .gf_user_registration_invalid_form{margin-top:30px; background-color:#FFEBE8;border:1px solid #CC0000; padding:10px; width:600px;}

            .hide-label { display: none; }
            .enabled-by-default { color: #999; }

            div.custom_metaname { position: relative; }
            span.reset { background:url("images/xit.gif") no-repeat scroll 0 -10px transparent; cursor:pointer; display:block;
                position:absolute; text-indent:-9999px; width:10px; height: 10px; right: 16px; top: 7px; }
            .hover span.reset { background-position: 0 0; }

            option.label { font-style: italic; color: #999; }
            .metaname, .metavalue { float: left; }
            .metavalue { margin-left: 30px; }
            .metaname .width-1 { margin-right: 10px; width: 220px; }
            .add_field_choice, .delete_field_choice { margin: 3px 0 4px 3px; }
            .custom_usermeta .margin_vertical_10 { overflow: hidden; margin-bottom: 0; }
            .custom_usermeta option.custom { font-weight: bold; }
            .custom_metaname { float: left; }
            .notice { font-size: 12px; font-style: italic; color: #aaa; }
            .system-option, .password-field option:last-child { font-style: italic; }
            .checkbox-label { font-size: 12px; }

            .disabled label { color: #999; }

        </style>

        <div class="wrap">
            <img alt="<?php 
        _e("User Registration", "gravityformsuserregistration");
        ?>
" style="margin: 15px 7px 0pt 0pt; float: left;" src="<?php 
        echo self::get_base_url();
        ?>
/images/user-registration-icon-32.png"/>
            <h2><?php 
        _e("User Registration Settings", "gravityformsuserregistration");
        ?>
</h2>

        <?php 
        //getting setting id (0 when creating a new one)
        $id = RGForms::post("user_registration_setting_id");
        $id = !empty($id) ? $id : absint(RGForms::get("id"));
        $config = empty($id) ? array("meta" => array(), "is_active" => true) : GFUserData::get_feed($id);
        $is_validation_error = false;
        // handle submission
        $is_submit = RGForms::post("gf_user_registration_submit");
        if (!empty($is_submit) && check_admin_referer('user_registration_edit_submit', 'user_registration_edit_submit')) {
            $form_id = RGForms::post("gf_user_registration_form");
            $config["form_id"] = absint($form_id);
            // standard meta
            $config["meta"]["username"] = RGForms::post("gf_user_registration_username");
            $config["meta"]["firstname"] = RGForms::post("gf_user_registration_firstname");
            $config["meta"]["lastname"] = RGForms::post("gf_user_registration_lastname");
            $config["meta"]["displayname"] = RGForms::post("gf_user_registration_displayname");
            $config["meta"]["email"] = RGForms::post("gf_user_registration_email");
            $config["meta"]["password"] = RGForms::post("gf_user_registration_password");
            $config["meta"]["role"] = RGForms::post("gf_user_registration_role");
            // user meta
            $json = stripslashes(RGForms::post("gf_user_meta"));
            $config["meta"]["user_meta"] = GFCommon::json_decode($json);
            //clean user meta (workaround to avoid values being marked as array)
            if (is_array($config["meta"]["user_meta"])) {
                foreach ($config["meta"]["user_meta"] as &$meta) {
                    if (is_array($meta["meta_value"])) {
                        $meta["meta_value"] = $meta["meta_value"][0];
                    }
                }
            }
            // registration condition
            $config['meta']['reg_condition_enabled'] = RGForms::post('gf_user_registration_enabled');
            $config['meta']['reg_condition_field_id'] = RGForms::post('gf_user_registration_field_id');
            $config['meta']['reg_condition_operator'] = RGForms::post('gf_user_registration_operator');
            $config['meta']['reg_condition_value'] = RGForms::post('gf_user_registration_value');
            // additional meta options
            $config['meta']['notification'] = RGForms::post('gf_user_registration_notification');
            $config['meta']['set_post_author'] = RGForms::post('gf_user_registration_set_post_author');
            // use to save custom config options (used by BuddyPress)
            $config = apply_filters("gform_user_registration_save_config", $config);
            $is_validation_error = apply_filters("gform_user_registration_config_validation", false, $config);
            // validate and create/update feed
            if ($config["meta"]["email"] && $config["meta"]["username"] && !$is_validation_error) {
                $id = GFUserData::update_feed($id, $config["form_id"], $config["is_active"], $config["meta"]);
                ?>

                <div class="updated fade" style="padding:6px"><?php 
                echo sprintf(__("Feed Updated. %sback to list%s", "gravityformsuserregistration"), "<a href='?page=gf_user_registration'>", "</a>");
                ?>
</div>

                <?php 
            } else {
                $is_validation_error = true;
            }
        }
        $form = isset($config["form_id"]) && $config["form_id"] ? RGFormsModel::get_form_meta($config["form_id"]) : array();
        $form_fields = $email_fields = $selection_fields = $password_fields = array();
        if (!empty($form)) {
            $set_author_style = GFCommon::has_post_field($form['fields']) ? 'display:block' : 'display:none';
            $form_fields = self::get_form_fields($form);
            $email_fields = self::get_fields_by_type($form, 'email');
            $selection_fields = GFCommon::get_selection_fields($form, $config['meta']['reg_condition_field_id']);
            // add custom option to password fields
            $password_default = array(array('', __('Auto Generate Password', 'gravityformsuserregistration')));
            $password_fields = self::get_fields_by_type($form, 'password');
            $password_fields = array_merge($password_fields, $password_default);
        }
        ?>

        <form method="post" action="" id="gf_user_form">

            <input type="hidden" name="user_registration_setting_id" value="<?php 
        echo $id;
        ?>
" />
            <input type="hidden" name="gf_user_meta" id="gf_user_meta" value="" />
            <?php 
        wp_nonce_field('user_registration_edit_submit', 'user_registration_edit_submit');
        ?>

            <div class="margin_vertical_10<?php 
        echo $is_validation_error ? " user_registration_validation_error" : "";
        ?>
">
                <?php 
        if ($is_validation_error) {
            ?>
                    <span><?php 
            _e('Your Registration Feed could not be saved. Please update the errors below and re-save your feed.', 'gravityformsuserregistration');
            ?>
</span>
                    <?php 
        }
        ?>
            </div> <!-- / validation message -->

            <div id="user_registration_form_container" valign="top" class="margin_vertical_10">
                <label for="gf_user_registration_form" class="left_header"><?php 
        _e("Gravity Form", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_gravity_form");
        ?>
</label>

                <select id="gf_user_registration_form" name="gf_user_registration_form" onchange="SelectForm(jQuery(this).val(), '<?php 
        echo rgar($config, 'id');
        ?>
');">
                    <option value=""><?php 
        _e("Select a form", "gravityformsuserregistration");
        ?>
 </option>
                    <?php 
        $active_form = $config["form_id"];
        $available_forms = GFUserData::get_available_forms($active_form);
        foreach ($available_forms as $current_form) {
            $selected = absint($current_form->id) == $config["form_id"] ? 'selected="selected"' : '';
            ?>

                            <option value="<?php 
            echo absint($current_form->id);
            ?>
" <?php 
            echo $selected;
            ?>
><?php 
            echo esc_html($current_form->title);
            ?>
</option>

                        <?php 
        }
        ?>
                </select>
                &nbsp;&nbsp;
                <img src="<?php 
        echo self::get_base_url();
        ?>
/images/loading.gif" id="user_registration_wait" style="display: none;"/>

                <div id="gf_user_registration_invalid_product_form" class="gf_user_registration_invalid_form"  style="display:none;">
                    <?php 
        _e("The form selected does not have any Email fields. Please add an Email field to the form and try again.", "gravityformsuserregistration");
        ?>
                </div>

            </div> <!-- / select form -->

            <div id="user_registration_field_group" valign="top" <?php 
        echo empty($config["form_id"]) ? "style='display:none;'" : "";
        ?>
>

                <div id="standard_fields">

                    <h3>User Settings</h3>

                    <div class="margin_vertical_10 <?php 
        echo $is_validation_error && empty($config['meta']['username']) ? 'user_registration_validation_error' : '';
        ?>
">
                        <label class="left_header" for="gf_user_registration_username"><?php 
        _e("Username", "gravityformsuserregistration");
        ?>
 <span class="description">(<?php 
        _e("required", "gravityformsuserregistration");
        ?>
)</span> <?php 
        gform_tooltip("user_registration_username");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_username", $form_fields, rgar($config['meta'], 'username'), "width-1 standard-meta");
        ?>
                    </div>

                    <div class="margin_vertical_10">
                        <label class="left_header" for="gf_user_registration_firstname"><?php 
        _e("First Name", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_firstname");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_firstname", $form_fields, rgar($config['meta'], 'firstname'), "width-1 standard-meta");
        ?>
                    </div>

                    <div class="margin_vertical_10">
                        <label class="left_header" for="gf_user_registration_lastname"><?php 
        _e("Last Name", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_lastname");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_lastname", $form_fields, rgar($config['meta'], 'lastname'), "width-1 standard-meta");
        ?>
                    </div>

                    <div class="margin_vertical_10">
                        <label class="left_header" for="gf_user_registration_displayname">
                            <?php 
        _e("Display Name", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_displayname");
        ?>
                        </label>
                        <?php 
        $display_names = array('username' => '{username}', 'firstname' => '{first name}', 'lastname' => '{last name}', 'firstlast' => '{first name} {last name}', 'lastfirst' => '{last name} {first name}');
        ?>
                        <select id="gf_user_registration_displayname" name="gf_user_registration_displayname" class="width-1 standard-meta">
                            <?php 
        foreach ($display_names as $key => $value) {
            $selected = rgar($config['meta'], 'displayname') == $key ? 'selected="selected"' : '';
            ?>

                                <option value="<?php 
            echo $key;
            ?>
" <?php 
            echo $selected;
            ?>
><?php 
            echo $value;
            ?>
</option>

                            <?php 
        }
        ?>
                        </select>
                    </div>

                    <div class="margin_vertical_10 <?php 
        echo $is_validation_error && empty($config['meta']['email']) ? 'user_registration_validation_error' : '';
        ?>
">
                        <label class="left_header" for="gf_user_registration_email"><?php 
        _e("Email Address", "gravityformsuserregistration");
        ?>
 <span class="description">(<?php 
        _e("required", "gravityformsuserregistration");
        ?>
)</span> <?php 
        gform_tooltip("user_registration_email");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_email", $email_fields, rgar($config['meta'], 'email'), "width-1 email-field");
        ?>
                    </div>

                    <div class="margin_vertical_10">
                        <label class="left_header" for="gf_user_registration_password"><?php 
        _e("Password", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_password");
        ?>
</label>
                        <?php 
        echo self::get_field_drop_down("gf_user_registration_password", $password_fields, rgar($config['meta'], 'password'), "width-1 password-field", false);
        ?>
                    </div>

                    <?php 
        $disabled = is_multisite() && rgars($config['meta'], 'multisite_options/create_site') ? 'disabled="disabled"' : '';
        ?>
                    <div class="margin_vertical_10 <?php 
        echo $disabled ? 'disabled' : '';
        ?>
">
                        <label class="left_header" for="gf_user_registration_role"><?php 
        _e("Role", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_role");
        ?>
</label>
                        <select id="gf_user_registration_role" name="gf_user_registration_role" class="width-1" <?php 
        echo $disabled;
        ?>
>
                            <?php 
        if (is_multisite() && rgars($config['meta'], 'multisite_options/create_site')) {
            ?>
                                <option value="" selected="selected" class="empty-option"></option>
                            <?php 
        }
        ?>
                            <?php 
        self::display_role_dropdown_options(rgars($config, 'meta/role'));
        ?>
                        </select>
                    </div>

                </div> <!-- / standard fields -->

                <div id="user_meta_fields">

                    <h3>User Meta</h3>

                    <div id="custom_usermeta" class="custom_usermeta"></div>

                </div> <!-- / user meta fields -->

                <?php 
        do_action("gform_user_registration_add_option_section", $config, $form, $is_validation_error);
        // buddypress, networkmode
        ?>

                <div id="additional_options">

                    <h3>Additional Options</h3>

                    <div class="margin_vertical_10">
                        <label class="left_header"><?php 
        _e("Send Email?", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_notification");
        ?>
</label>

                        <input type="checkbox" id="gf_user_registration_notification" name="gf_user_registration_notification" value="1" <?php 
        echo rgar($config['meta'], 'notification') == 1 || !isset($config["meta"]["notification"]) ? "checked='checked'" : "";
        ?>
/>
                        <label for="gf_user_registration_notification" class="checkbox-label"><?php 
        _e("Send this password to the new user by email.", "gravityformsuserregistration");
        ?>
</label>
                    </div> <!-- / send email? -->

                    <div id="gf_user_registration_set_post_author_container" class="margin_vertical_10" style="<?php 
        echo $set_author_style;
        ?>
">
                        <label class="left_header"><?php 
        _e("Set As Post Author", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_set_post_author");
        ?>
</label>

                        <input type="checkbox" id="gf_user_registration_set_post_author" name="gf_user_registration_set_post_author" value="1" <?php 
        echo rgar($config['meta'], 'set_post_author') == 1 || !isset($config["meta"]["set_post_author"]) ? "checked='checked'" : "";
        ?>
/>
                        <label for="gf_user_registration_set_post_author" class="checkbox-label"><?php 
        _e("Enable", "gravityformsuserregistration");
        ?>
</label>
                    </div> <!-- / set post author -->

                    <div id="gf_user_registration_section" valign="top" class="margin_vertical_10">
                        <label for="gf_user_registration_optin" class="left_header"><?php 
        _e("Registration Condition", "gravityformsuserregistration");
        ?>
 <?php 
        gform_tooltip("user_registration_condition");
        ?>
</label>

                        <div id="gf_user_registration_option" class="column_right">
                            <input type="checkbox" id="gf_user_registration_enabled" name="gf_user_registration_enabled" value="1" onclick="if(this.checked){jQuery('#gf_user_registration_container').fadeIn('fast');} else{jQuery('#gf_user_registration_container').fadeOut('fast');}" <?php 
        echo rgar($config['meta'], 'reg_condition_enabled') ? "checked='checked'" : "";
        ?>
/>
                            <label for="gf_user_registration_enabled" class="checkbox-label"><?php 
        _e("Enable", "gravityformsuserregistration");
        ?>
</label>

                            <div id="gf_user_registration_container" style="padding-top:5px; <?php 
        echo !$config["meta"]["reg_condition_enabled"] ? "display:none" : "";
        ?>
">

                                <div id="gf_user_registration_condition_fields" <?php 
        echo empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                    <?php 
        _e("Register the user if ", "gravityformsuserregistration");
        ?>

                                    <select id="gf_user_registration_field_id" name="gf_user_registration_field_id" class='optin_select' onchange='jQuery("#gf_user_registration_value").html(GetFieldValues(jQuery(this).val(), "", 20));'>
                                        <?php 
        echo $selection_fields;
        ?>
                                    </select>
                                    <select id="gf_user_registration_operator" name="gf_user_registration_operator">
                                        <option value="is" <?php 
        echo rgar($config['meta'], 'reg_condition_operator') == 'is' ? 'selected="selected"' : '';
        ?>
><?php 
        _e("is", "gravityformsuserregistration");
        ?>
</option>
                                        <option value="isnot" <?php 
        echo rgar($config['meta'], 'reg_condition_operator') == "isnot" ? 'selected="selected"' : '';
        ?>
><?php 
        _e("is not", "gravityformsuserregistration");
        ?>
</option>
                                    </select>
                                    <select id="gf_user_registration_value" name="gf_user_registration_value" class='optin_select'></select>

                                </div>

                                <div id="gf_user_registration_condition_message" <?php 
        echo !empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                    <?php 
        _e("To create a registration condition, your form must have a drop down, checkbox or multiple choice field", "gravityformsuserregistration");
        ?>
                                </div>

                            </div>
                        </div>

                    </div> <!-- / registration conditional -->

                    <?php 
        do_action("gform_user_registration_add_option_group", $config, $form, $is_validation_error);
        ?>

                    <div id="user_registration_submit_container" class="margin_vertical_30">
                        <input type="submit" name="gf_user_registration_submit" value="<?php 
        echo empty($id) ? __("Save", "gravityformsuserregistration") : __("Update", "gravityformsuserregistration");
        ?>
" class="button-primary"/>
                        <input type="button" value="<?php 
        _e("Cancel", "gravityformsuserregistration");
        ?>
" class="button" onclick="javascript:document.location='admin.php?page=gf_user_registration'" />
                    </div> <!-- / form actions -->

                </div> <!-- / additional options -->

            </div> <!-- / field group -->

        </form>

        </div> <!-- / wrap -->

        <script type="text/javascript">

            <?php 
        $user_meta = rgar($config['meta'], 'user_meta');
        ?>

            var GFUser = {
                form: <?php 
        echo !empty($form) ? GFCommon::json_encode($form) : 'new Array()';
        ?>
,
                form_fields: <?php 
        echo !empty($form_fields) ? GFCommon::json_encode($form_fields) : "new Array()";
        ?>
,
                form_id: <?php 
        echo rgar($config, 'form_id') ? rgar($config, 'form_id') : "''";
        ?>
,
                user_meta: <?php 
        echo !empty($user_meta) ? GFCommon::json_encode($user_meta) : "[new MetaOption()]";
        ?>
,
                bp_gform_options: <?php 
        echo !empty($form) ? GFCommon::json_encode(self::get_bp_gform_fields($form)) : "''";
        ?>
,
                meta_names: [
                    { 'name': 'Website', 'value': 'user_url' },
                    { 'name': 'AIM', 'value': 'aim' },
                    { 'name': 'Yahoo', 'value': 'yim' },
                    { 'name': 'Jabber / Google Talk', 'value': 'jabber' },
                    { 'name': 'Biographical Information', 'value': 'description' }
                ]
            }

            function SelectForm(formId, configId){

                if(!formId){
                    jQuery("#user_registration_field_group").slideUp();
                    return;
                }

                jQuery("#user_registration_wait").show();
                jQuery("#user_registration_field_group").slideUp();

                var mysack = new sack("<?php 
        bloginfo('wpurl');
        ?>
/wp-admin/admin-ajax.php" );
                mysack.execute = 1;
                mysack.method = 'POST';
                mysack.setVar( "action", "gf_select_user_registration_form" );
                mysack.setVar( "gf_select_user_registration_form", "<?php 
        echo wp_create_nonce("gf_select_user_registration_form");
        ?>
" );
                mysack.setVar( "form_id", formId);
                mysack.setVar( "config_id", configId);
                mysack.encVar( "cookie", document.cookie, false );
                mysack.onError = function() {jQuery("#user_registration_wait").hide(); alert('<?php 
        echo esc_js(__("Ajax error while selecting a form", "gravityformsuserregistration"));
        ?>
' )};
                mysack.runAJAX();

                return true;
            }

            function EndSelectForm(form_meta, form_fields, field_options, password_options, email_options, options_meta, bp_gform_options){

                if(email_options == '<option value=""></option>') {
                    jQuery(".gf_user_registration_invalid_form").show();
                    jQuery("#user_registration_wait").hide();
                    return;
                } else {
                    jQuery(".gf_user_registration_invalid_form").hide();
                }

                // set global form object & reset user meta
                GFUser.form = form_meta;
                GFUser.form_fields = form_fields;
                GFUser.bp_gform_options = bp_gform_options;
                GFUser.user_meta = [new MetaOption()];

                // update dropdowns with selected form's fields
                jQuery.each(jQuery("select.standard-meta"), function(){
                    jQuery(this).html(field_options);
                });

                jQuery.each(jQuery("select.password-field"), function(){
                    jQuery(this).html(password_options + '<option class="system-option">Auto Generate Password</option>');
                });

                jQuery.each(jQuery("select.email-field"), function(){
                    jQuery(this).html(email_options);
                });

                CreateCustomMetaOptions();

                // handle set post author option
                if(options_meta['set_post_author']) {
                    jQuery("#gf_user_registration_set_post_author_container").show();
                } else {
                    jQuery("#gf_user_registration_set_post_author_container").hide();
                }

                // handle registration option
                jQuery("#gf_user_registration_enabled").attr('checked', false);
                SetRegistrationCondition("","");

                // Form Selected Event
                jQuery(document).trigger('gform_user_registration_form_selected', [GFUser.form]);

                jQuery("#user_registration_field_group").slideDown();
                jQuery("#user_registration_wait").hide();

            }

            function CreateCustomMetaOptions(){

                var form = GFUser.form;
                var user_meta = GFUser.user_meta;
                var meta_names = GFUser.meta_names;
                var images_url = '<?php 
        echo GFCommon::get_base_url() . "/images";
        ?>
';
                var str = '';

                for(var i=0; i<user_meta.length; i++){

                    var show_select = (user_meta[i].custom == true) ? "display:none;" : "";
                    var show_input = (user_meta[i].custom == false) ? "display:none;" : "";

                    str += '<div class="margin_vertical_10">';
                    str += '<div class="metaname"><select type="text" name="gf_user_meta_name_' + i + '" id="gf_user_meta_name_' + i + '" class="meta-name-select width-1" style="' + show_select + '">';
                    str += getMetaNameOptions(meta_names, user_meta[i].meta_name) + '</select>'
                    str += '<div class="custom_metaname" style="' + show_input + '">' + getMetaNameInput(i, user_meta[i]) + '</div></div>';
                    str += '<div class="metavalue"><select type="text" name="gf_user_meta_value_' + i + '" id="gf_user_meta_value_' + i + '" class="meta-value-select width-1">';
                    str += getMetaValueOptions(form, user_meta[i].meta_value) + '</select></div>';

                    str += "<img src='" + images_url + "/add.png' class='add_field_choice' title='<?php 
        _e("add another rule", "gravityformsuserregistration");
        ?>
' alt='<?php 
        _e("add another rule", "gravityformsuserregistration");
        ?>
' style='cursor:pointer;' onclick=\"InsertRule(" + (i+1) + ", 'user_meta');\" />";
                    if(user_meta.length > 1 )
                        str += "<img src='" + images_url + "/remove.png' title='<?php 
        _e("remove this rule", "gravityformsuserregistration");
        ?>
' alt='<?php 
        _e("remove this rule", "gravityformsuserregistration");
        ?>
' class='delete_field_choice' style='cursor:pointer;' onclick=\"DeleteRule(" + (i) + ", 'user_meta');\" /></li>";

                    str += '</div>';
                }

                jQuery("#custom_usermeta").html(str);
            }

            function getMetaNameOptions(meta_names, selected, custom_option) {

                var str = '<option value="" class="label">Select Meta Option</option>';
                for(i = 0; i < meta_names.length; i++) {
                    if(meta_names[i].value == selected) {
                        str += '<option value="' + meta_names[i].value + '" selected="selected">' + meta_names[i].name + '</option>';
                    } else {
                        str += '<option value="' + meta_names[i].value + '">' + meta_names[i].name + '</option>';
                    }
                }

                if(custom_option != false) {
                    str += '<option value="gf_custom" class="custom">Add Custom</option>';
                }

                return str;
            }

            function getMetaValueOptions(form, meta_value) {

                var form_fields = GFUser.form_fields;

                var str = '<option value=""></option>';
                for(i = 0; i < form_fields.length; i++) {
                    if(form_fields[i][0] == meta_value) {
                        str += '<option value="' + form_fields[i][0] + '" selected="selected">' + form_fields[i][1] + '</option>';
                    } else {
                        str += '<option value="' + form_fields[i][0] + '">' + form_fields[i][1] + '</option>';
                    }
                }

                return str;
            }

            function getMetaNameInput(index, user_meta) {

                var meta_name = (user_meta.meta_name != "") ? user_meta.meta_name : "<?php 
        _e("Enter Meta Name", "gravityformsuserregistration");
        ?>
";

                str = '<input type="text" name="gf_user_custom_meta_name_' + index + '" id="gf_user_custom_meta_name_' + index + '" class="width-1" value="' + meta_name + '" />';
                str += '<span class="reset">Reset</span>';

                return str;
            }

            function InsertRule(ruleIndex, meta_group){

                if(meta_group == 'user_meta') {
                    GFUser[meta_group].splice(ruleIndex, 0, new MetaOption());
                    CreateCustomMetaOptions();
                } else {
                    // Insert Rule Action (used by BuddyPress)
                    jQuery(document).trigger('gform_user_registration_insert_rule', [ruleIndex, meta_group]);
                }

            }

            function DeleteRule(ruleIndex, meta_group){

                if(meta_group == 'user_meta') {
                    GFUser[meta_group].splice(ruleIndex, 1);
                    CreateCustomMetaOptions();
                } else {
                    // Delete Rule Action (used by BuddyPress)
                    jQuery(document).trigger('gform_user_registration_delete_rule', [ruleIndex, meta_group]);
                }

            }

            function MetaOption() {
                this.meta_name = "";
                this.meta_value = "";
                this.custom = false;
            }

            function IndexOf(ary, item){
                for(var i=0; i<ary.length; i++)
                    if(ary[i] == item)
                        return i;

                return -1;
            }

            function saveUserMeta() {

                var user_meta = GFUser.user_meta;

                for(var i=0; i<user_meta.length; i++){
                    user_meta[i].custom = (jQuery("#gf_user_meta_name_" + i).css('display') == 'none') ? true : false;
                    user_meta[i].meta_name = (user_meta[i].custom == true) ? jQuery("#gf_user_custom_meta_name_" + i).val() : jQuery("#gf_user_meta_name_" + i).val();
                    user_meta[i].meta_value = jQuery("#gf_user_meta_value_" + i).val();
                }

                GFUser.user_meta = user_meta;

                // save meta to hidden field for php
                var json = jQuery.toJSON(user_meta);
                jQuery("#gf_user_meta").val(json);

            }

            // initialize
            jQuery(document).ready(function(){

                <?php 
        if (!empty($form)) {
            ?>
                    CreateCustomMetaOptions();
                <?php 
        }
        ?>

                // after GFUser is init, trigger actions
                jQuery(document).trigger('gform_gfuser_object_init');

                // disable 'Select a form' option
                jQuery(this).find('option:first').attr('disabled', 'disabled');

                // custom meta input
                jQuery("select.meta-name-select").live('change', function(){
                     if(jQuery(this).val() == 'gf_custom') {
                         jQuery(this).fadeOut(function(){
                             jQuery(this).val("");
                             jQuery(this).next('div.custom_metaname').fadeIn();
                             jQuery(this).next('div.custom_metaname').find('input').cleardefault().focus();
                         });
                     }
                });

                // custom meta input reset button
                jQuery("span.reset").live('click', function(){
                    jQuery(this).parent('div.custom_metaname').fadeOut(function(){
                        jQuery(this).siblings('select').fadeIn();
                    })
                });

                // add hover class for custom meta input reset
                jQuery("div.custom_metaname").live('mouseover mouseout', function(event) {
                    if (event.type == 'mouseover') {
                        jQuery(this).addClass('hover');
                    } else {
                        jQuery(this).removeClass('hover');
                    }
                });

                // save entered information
                jQuery(".metaname input, .metaname select, .metavalue select").live('change', function(){ saveUserMeta(); });
                jQuery("#gf_user_form").submit(function(){ saveUserMeta(); })

                // clear default values
                jQuery.fn.cleardefault = function() {
                    return this.focus(function() {
                        if( this.value == this.defaultValue ) {
                            this.value = "";
                        }
                    }).blur(function() {
                    if( !this.value.length ) {
                        this.value = this.defaultValue;
                    }
                });

            }

            });

        </script>

        <script type="text/javascript">

            // Registration Conditional Functions

            <?php 
        if (!empty($config["form_id"])) {
            ?>

                // initializing registration condition drop downs
                jQuery(document).ready(function(){

                    //form = [] <?php 
            //echo GFCommon::json_encode($form_meta)
            ?>
;

                    var selectedField = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["reg_condition_field_id"]);
            ?>
";
                    var selectedValue = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["reg_condition_value"]);
            ?>
";
                    SetRegistrationCondition(selectedField, selectedValue);
                });

                <?php 
        }
        ?>

            function SetRegistrationCondition(selectedField, selectedValue){

                // load form fields
                jQuery("#gf_user_registration_field_id").html(GetSelectableFields(selectedField, 20));
                var optinConditionField = jQuery("#gf_user_registration_field_id").val();
                var checked = jQuery("#gf_user_registration_enabled").attr('checked');

                if(optinConditionField){
                    jQuery("#gf_user_registration_condition_message").hide();
                    jQuery("#gf_user_registration_condition_fields").show();
                    jQuery("#gf_user_registration_value").html(GetFieldValues(optinConditionField, selectedValue, 20));
                }
                else{
                    jQuery("#gf_user_registration_condition_message").show();
                    jQuery("#gf_user_registration_condition_fields").hide();
                }

                if(!checked) jQuery("#gf_user_registration_container").hide();

            }

            function GetFieldValues(fieldId, selectedValue, labelMaxCharacters){
                if(!fieldId)
                    return "";

                var str = "";
                var field = GetFieldById(fieldId);
                if(!field || !field.choices)
                    return "";

                var isAnySelected = false;

                for(var i=0; i<field.choices.length; i++){
                    var fieldValue = field.choices[i].value ? field.choices[i].value : field.choices[i].text;
                    var isSelected = fieldValue == selectedValue;
                    var selected = isSelected ? "selected='selected'" : "";
                    if(isSelected)
                        isAnySelected = true;

                    str += "<option value='" + fieldValue.replace("'", "&#039;") + "' " + selected + ">" + TruncateMiddle(field.choices[i].text, labelMaxCharacters) + "</option>";
                }

                if(!isAnySelected && selectedValue){
                    str += "<option value='" + selectedValue.replace("'", "&#039;") + "' selected='selected'>" + TruncateMiddle(selectedValue, labelMaxCharacters) + "</option>";
                }

                return str;
            }

            function GetFieldById(fieldId){
                var form = GFUser.form;
                for(var i=0; i<form.fields.length; i++){
                    if(form.fields[i].id == fieldId)
                        return form.fields[i];
                }
                return null;
            }

            function TruncateMiddle(text, maxCharacters){
                if(text.length <= maxCharacters)
                    return text;
                var middle = parseInt(maxCharacters / 2);
                return text.substr(0, middle) + "..." + text.substr(text.length - middle, middle);
            }

            function GetSelectableFields(selectedFieldId, labelMaxCharacters){
                var form = GFUser.form;
                var str = "";
                var inputType;
                for(var i=0; i<form.fields.length; i++){
                    fieldLabel = form.fields[i].adminLabel ? form.fields[i].adminLabel : form.fields[i].label;
                    inputType = form.fields[i].inputType ? form.fields[i].inputType : form.fields[i].type;
                    if(inputType == "checkbox" || inputType == "radio" || inputType == "select"){
                        var selected = form.fields[i].id == selectedFieldId ? "selected='selected'" : "";
                        str += "<option value='" + form.fields[i].id + "' " + selected + ">" + TruncateMiddle(fieldLabel, labelMaxCharacters) + "</option>";
                    }
                }
                return str;
            }

        </script>

        <?php 
    }
    private static function edit_page()
    {
        ?>
        <style type="text/css">
            label span.howto { cursor: default; }
            .exacttarget_col_heading{padding-bottom:2px; border-bottom: 1px solid #ccc; font-weight:bold;}
            .exacttarget_field_cell {padding: 6px 17px 0 0; margin-right:15px;}
            .gfield_required{color:red;}

            .feeds_validation_error{ background-color:#FFDFDF;}
            .feeds_validation_error td{ margin-top:4px; margin-bottom:6px; padding-top:6px; padding-bottom:6px; border-top:1px dotted #C89797; border-bottom:1px dotted #C89797}

            .left_header{float:left; width:200px; padding-right: 20px;}
            .margin_vertical_10{margin: 20px 0;}
            #gf_exacttarget_list_list { margin-left:220px; padding-top: 1px }
            #exacttarget_doubleoptin_warning{padding-left: 5px; padding-bottom:4px; font-size: 10px;}
        </style>
        <script type="text/javascript">
            var form = Array();
        </script>
        <div class="wrap">
            <img alt="<?php 
        _e("ExactTarget", "gravity-forms-exacttarget");
        ?>
" style="margin: .75em 7px 0pt 0pt; float: left;" src="<?php 
        echo self::get_base_url();
        ?>
/images/exacttarget_wordpress_icon_32.png"/>
            <h2><?php 
        _e("ExactTarget Feed", "gravity-forms-exacttarget");
        ?>
</h2>

        <?php 
        //getting ExactTarget API
        $api = self::get_api();
        //ensures valid credentials were entered in the settings page
        if (!empty($api->lastError)) {
            ?>
            <div class="error" id="message" style="margin-top:20px;"><?php 
            echo wpautop(sprintf(__("We are unable to login to ExactTarget with the provided username and API key. Please make sure they are valid in the %sSettings Page%s", "gravity-forms-exacttarget"), "<a href='?page=gf_settings&addon=ExactTarget'>", "</a>"));
            ?>
</div>
            <?php 
            return;
        }
        //getting setting id (0 when creating a new one)
        $id = !empty($_POST["exacttarget_setting_id"]) ? $_POST["exacttarget_setting_id"] : absint($_GET["id"]);
        $config = empty($id) ? array("meta" => array(), "is_active" => true) : GFExactTargetData::get_feed($id);
        //getting merge vars
        $merge_vars = array();
        //updating meta information
        if (isset($_POST["gf_exacttarget_submit"])) {
            $list_ids = $list_names = array();
            foreach ($_POST["gf_exacttarget_list"] as $list) {
                list($list_id, $list_name) = explode("|:|", stripslashes($list));
                $list_ids[] = $list_id;
                $list_names[] = $list_name;
            }
            #           print_r(array('id' => $list_ids, 'name' => $list_names));
            $config["meta"]["contact_list_id"] = empty($list_ids) ? 0 : implode(',', $list_ids);
            $config["meta"]["contact_list_name"] = implode(',', $list_names);
            $config["form_id"] = absint($_POST["gf_exacttarget_form"]);
            $is_valid = true;
            $merge_vars = $api->Attributes($config["meta"]["contact_list_id"]);
            $field_map = array();
            foreach ($merge_vars as $key => $var) {
                $field_name = "exacttarget_map_field_" . $key;
                $mapped_field = isset($_POST[$field_name]) ? stripslashes($_POST[$field_name]) : '';
                if (!empty($mapped_field)) {
                    $field_map[$key] = $mapped_field;
                } else {
                    unset($field_map[$key]);
                    if ($var["required"] == "True") {
                        $is_valid = false;
                    }
                }
                unset($_POST["{$field_name}"]);
            }
            // Go through the items that were not in the field map;
            // the Custom Fields
            foreach ($_POST as $k => $v) {
                if (preg_match('/exacttarget\\_map\\_field\\_/', $k)) {
                    $tag = str_replace('exacttarget_map_field_', '', $k);
                    $field_map[$tag] = stripslashes($_POST[$k]);
                }
            }
            $config["meta"]["field_map"] = $field_map;
            #$config["meta"]["double_optin"] = !empty($_POST["exacttarget_double_optin"]) ? true : false;
            #$config["meta"]["welcome_email"] = !empty($_POST["exacttarget_welcome_email"]) ? true : false;
            $config["meta"]["optin_enabled"] = !empty($_POST["exacttarget_optin_enable"]) ? true : false;
            $config["meta"]["optin_field_id"] = $config["meta"]["optin_enabled"] ? isset($_POST["exacttarget_optin_field_id"]) ? $_POST["exacttarget_optin_field_id"] : '' : "";
            $config["meta"]["optin_operator"] = $config["meta"]["optin_enabled"] ? isset($_POST["exacttarget_optin_operator"]) ? $_POST["exacttarget_optin_operator"] : '' : "";
            $config["meta"]["optin_value"] = $config["meta"]["optin_enabled"] ? $_POST["exacttarget_optin_value"] : "";
            if ($is_valid) {
                $id = GFExactTargetData::update_feed($id, $config["form_id"], $config["is_active"], $config["meta"]);
                ?>
                <div id="message" class="updated fade" style="margin-top:10px;"><p><?php 
                echo sprintf(__("Feed Updated. %sback to list%s", "gravity-forms-exacttarget"), "<a href='?page=gf_exacttarget'>", "</a>");
                ?>
</p>
                    <input type="hidden" name="exacttarget_setting_id" value="<?php 
                echo $id;
                ?>
"/>
                </div>
                <?php 
            } else {
                ?>
                <div class="error" style="padding:6px"><?php 
                echo __("Feed could not be updated. Please enter all required information below.", "gravity-forms-exacttarget");
                ?>
</div>
                <?php 
            }
        }
        if (!function_exists('gform_tooltip')) {
            require_once GFCommon::get_base_path() . "/tooltips.php";
        }
        ?>
        <form method="post" action="<?php 
        echo remove_query_arg('refresh');
        ?>
">
            <input type="hidden" name="exacttarget_setting_id" value="<?php 
        echo $id;
        ?>
"/>
            <div class="margin_vertical_10">
                <h2><?php 
        _e('1. Select the lists to merge with.', "gravity-forms-exacttarget");
        ?>
</h2>
                <label for="gf_exacttarget_list" class="left_header"><?php 
        _e("ExactTarget List", "gravity-forms-exacttarget");
        ?>
 <?php 
        gform_tooltip("exacttarget_contact_list");
        ?>
 <span class="howto"><?php 
        _e(sprintf("%sRefresh lists%s", '<a href="' . add_query_arg('refresh', 'lists') . '">', '</a>'), "gravity-forms-exacttarget");
        ?>
</span></label>

                <?php 
        $trans = get_transient('extr_lists');
        if (!isset($_POST["gf_exacttarget_submit"]) && (!$trans || $trans && isset($_REQUEST['refresh']) && $_REQUEST['refresh'] === 'lists')) {
            ?>
                    <p class="lists_loading hide-if-no-js" style='padding:5px;'><img src="<?php 
            echo GFExactTarget::get_base_url();
            ?>
/images/loading.gif" id="exacttarget_wait" style="padding-right:5px;" width="16" height="16" /> <?php 
            _e('Lists are being loaded', 'gravity-forms-exacttarget');
            ?>
</p>
               <?php 
        }
        //getting all contact lists
        $lists = $api->Lists();
        if (!$lists) {
            echo __("Could not load ExactTarget contact lists. <br/>Error: ", "gravity-forms-exacttarget");
            echo isset($api->errorMessage) ? $api->errorMessage : '';
        } else {
            if (isset($config["meta"]["contact_list_id"])) {
                $contact_lists = explode(',', $config["meta"]["contact_list_id"]);
            } else {
                $contact_lists = array();
            }
            ?>
                 <?php 
            if (!get_transient('extr_lists_all')) {
                echo sprintf('%sYour list size is large; only list ID\'s are shown. %sRetrieve List Names%s%s', '<p>', '<a href="' . add_query_arg(array('retrieveListNames' => true, '_wpnonce' => wp_create_nonce('retrieveListNames')), admin_url('admin.php?page=gf_settings&addon=ExactTarget')) . '" class="button-secondary button">', '</a>', '</p>');
            }
            ?>
                 <ul id="gf_exacttarget_list_list" class="hide-if-js">
                    <?php 
            foreach ($lists as $key => $list) {
                $selected = in_array($key, $contact_lists) ? "checked='checked'" : "";
                ?>
                        <li><label style="display:block;" for="gf_exacttarget_list_<?php 
                echo esc_html($key);
                ?>
"><input type="checkbox" name="gf_exacttarget_list[]" id="gf_exacttarget_list_<?php 
                echo esc_html($key);
                ?>
" value="<?php 
                echo esc_html($key) . "|:|" . esc_html($list['list_name']);
                ?>
" <?php 
                echo $selected;
                ?>
 /> <?php 
                echo esc_html($list['list_name']);
                ?>
</label></li>
                        <?php 
            }
            ?>
                  </ul>
                  <script type="text/javascript">
                    if(jQuery('.lists_loading').length && jQuery('#gf_exacttarget_list_list').length) {
                        jQuery('.lists_loading').fadeOut(function() { jQuery('#gf_exacttarget_list_list').fadeIn(); });
                     } else if(jQuery('#gf_exacttarget_list_list').length) {
                        jQuery('#gf_exacttarget_list_list').show();
                     }
                 </script>
                <?php 
        }
        ?>
                <div class="clear"></div>
            </div>
            <?php 
        flush();
        ?>
            <div id="exacttarget_form_container" valign="top" class="margin_vertical_10" <?php 
        echo empty($config["meta"]["contact_list_id"]) ? "style='display:none;'" : "";
        ?>
>
                <h2><?php 
        _e('2. Select the form to tap into.', "gravity-forms-exacttarget");
        ?>
</h2>
                <label for="gf_exacttarget_form" class="left_header"><?php 
        _e("Gravity Form", "gravity-forms-exacttarget");
        ?>
 <?php 
        gform_tooltip("exacttarget_gravity_form");
        ?>
</label>

                <select id="gf_exacttarget_form" name="gf_exacttarget_form" onchange="SelectForm(jQuery('#gf_exacttarget_list_list input').serialize(), jQuery(this).val());">
                <option value=""><?php 
        _e("Select a form", "gravity-forms-exacttarget");
        ?>
 </option>
                <?php 
        $forms = RGFormsModel::get_forms();
        foreach ($forms as $form) {
            $selected = absint($form->id) == $config["form_id"] ? "selected='selected'" : "";
            ?>
                    <option value="<?php 
            echo absint($form->id);
            ?>
"  <?php 
            echo $selected;
            ?>
><?php 
            echo esc_html($form->title);
            ?>
</option>
                    <?php 
        }
        ?>
                </select>
                &nbsp;&nbsp;
                <img src="<?php 
        echo GFExactTarget::get_base_url();
        ?>
/images/loading.gif" id="exacttarget_wait" style="display: none;"/>
            </div>
            <div class="clear"></div>
            <div id="exacttarget_field_group" valign="top" <?php 
        echo empty($config["meta"]["contact_list_id"]) || empty($config["form_id"]) ? "style='display:none;'" : "";
        ?>
>
                <div id="exacttarget_field_container" valign="top" class="margin_vertical_10" >
                    <h2><?php 
        _e('3. Map form fields to ExactTarget attributes.', "gravity-forms-exacttarget");
        ?>
</h2>
                    <p class="description" style="margin-bottom:1em;"><?php 
        _e(sprintf('If you don&rsquo;t see an attribute listed, you need to create it in ExactTarget first under %sSubscribers > Profile Management%s.%sOnly mapped fields will be added to ExactTarget.', '<em style="font-style:normal;">', '</em>', '<br />'), "gravity-forms-exacttarget");
        ?>
</p>
                    <label for="exacttarget_fields" class="left_header"><?php 
        _e("Map Fields", "gravity-forms-exacttarget");
        ?>
 <?php 
        gform_tooltip("exacttarget_map_fields");
        ?>
 <span class="howto"><?php 
        _e(sprintf("%sRefresh fields%s", '<a href="' . add_query_arg('refresh', 'attributes') . '">', '</a>'), "gravity-forms-exacttarget");
        ?>
</span></label>

                    <div id="exacttarget_field_list">
                    <?php 
        if (!empty($config["form_id"])) {
            //getting list of all ExactTarget merge variables for the selected contact list
            if (empty($merge_vars)) {
                $merge_vars = $api->Attributes();
            }
            //getting field map UI
            echo self::get_field_mapping($config, $config["form_id"], $merge_vars);
            //getting list of selection fields to be used by the optin
            $form_meta = RGFormsModel::get_form_meta($config["form_id"]);
            $selection_fields = GFCommon::get_selection_fields($form_meta, $config["meta"]["optin_field_id"]);
        }
        ?>
                    </div>
                    <div class="clear"></div>
                </div>

                <div id="exacttarget_optin_container" valign="top" class="margin_vertical_10">
                    <label for="exacttarget_optin" class="left_header"><?php 
        _e("Opt-In Condition", "gravity-forms-exacttarget");
        ?>
 <?php 
        gform_tooltip("exacttarget_optin_condition");
        ?>
</label>
                    <div id="exacttarget_optin">
                        <table>
                            <tr>
                                <td>
                                    <input type="checkbox" id="exacttarget_optin_enable" name="exacttarget_optin_enable" value="1" onclick="if(this.checked){jQuery('#exacttarget_optin_condition_field_container').show('slow');} else{jQuery('#exacttarget_optin_condition_field_container').hide('slow');}" <?php 
        echo !empty($config["meta"]["optin_enabled"]) ? "checked='checked'" : "";
        ?>
/>
                                    <label for="exacttarget_optin_enable"><?php 
        _e("Enable", "gravity-forms-exacttarget");
        ?>
</label>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <div id="exacttarget_optin_condition_field_container" <?php 
        echo empty($config["meta"]["optin_enabled"]) ? "style='display:none'" : "";
        ?>
>
                                        <div id="exacttarget_optin_condition_fields" <?php 
        echo empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                            <?php 
        _e("Export to ExactTarget if ", "gravity-forms-exacttarget");
        ?>

                                            <select id="exacttarget_optin_field_id" name="exacttarget_optin_field_id" class='optin_select' onchange='jQuery("#exacttarget_optin_value").html(GetFieldValues(jQuery(this).val(), "", 20));'><?php 
        echo $selection_fields;
        ?>
</select>
                                            <select id="exacttarget_optin_operator" name="exacttarget_optin_operator" />
                                                <option value="is" <?php 
        echo isset($config["meta"]["optin_operator"]) && $config["meta"]["optin_operator"] == "is" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is", "gravity-forms-exacttarget");
        ?>
</option>
                                                <option value="isnot" <?php 
        echo isset($config["meta"]["optin_operator"]) && $config["meta"]["optin_operator"] == "isnot" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is not", "gravity-forms-exacttarget");
        ?>
</option>
                                            </select>
                                            <select id="exacttarget_optin_value" name="exacttarget_optin_value" class='optin_select'>
                                            </select>

                                        </div>
                                        <div id="exacttarget_optin_condition_message" <?php 
        echo !empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                            <?php 
        _e("To create an Opt-In condition, your form must have a drop down, checkbox or multiple choice field.", "gravityform");
        ?>
                                        </div>
                                    </div>
                                </td>
                            </tr>
                        </table>
                    </div>

                    <script type="text/javascript">
                        <?php 
        if (!empty($config["form_id"])) {
            ?>
                            //creating Javascript form object
                            form = <?php 
            echo GFCommon::json_encode($form_meta);
            ?>
 ;

                            //initializing drop downs
                            jQuery(document).ready(function(){
                                var selectedField = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["optin_field_id"]);
            ?>
";
                                var selectedValue = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["optin_value"]);
            ?>
";
                                SetOptin(selectedField, selectedValue);
                            });
                        <?php 
        }
        ?>
                    </script>
                </div>

                <div id="exacttarget_submit_container" class="margin_vertical_10">
                    <input type="submit" name="gf_exacttarget_submit" value="<?php 
        echo empty($id) ? __("Save Feed", "gravity-forms-exacttarget") : __("Update Feed", "gravity-forms-exacttarget");
        ?>
" class="button-primary"/>
                </div>
            </div>
        </form>
        </div>

        <script type="text/javascript">
        jQuery(document).ready(function($) {
            $('#gf_exacttarget_list_list').live('load change', function() {
                $('.lists_loading').hide();
            });
            $("#gf_exacttarget_list_list input").bind('click change', function() {
                if($("#gf_exacttarget_list_list input:checked").length > 0) {
                    SelectList(1);
                } else {
                    SelectList(false);
                    jQuery("#gf_exacttarget_form").val("");
                }
            });

            <?php 
        if (isset($_REQUEST['id'])) {
            ?>
            $('#exacttarget_field_list').live('load', function() {
                $('.exacttarget_field_cell select').each(function() {
                    var $select = $(this);
                    if($().prop) {
                        var label = $.trim($('label[for='+$(this).prop('name')+']').text());
                    } else {
                        var label = $.trim($('label[for='+$(this).attr('name')+']').text());
                    }
                    label = label.replace(' *', '');

                    if($select.val() === '') {
                        $('option', $select).each(function() {
                            if($(this).text() === label) {
                                if($().prop) {
                                    $('option:contains('+label+')', $select).prop('selected', true);
                                } else {
                                    $('option:contains('+label+')', $select).prop('selected', true);
                                }
                            }
                        });
                    }
                });
            });
            <?php 
        }
        ?>
        });
        </script>
        <script type="text/javascript">

            function SelectList(listId){
                if(listId){
                    jQuery("#exacttarget_form_container").slideDown();
                   // jQuery("#gf_exacttarget_form").val("");
                }
                else{
                    jQuery("#exacttarget_form_container").slideUp();
                    EndSelectForm("");
                }
            }

            function SelectForm(listId, formId){
                if(!formId){
                    jQuery("#exacttarget_field_group").slideUp();
                    return;
                }

                jQuery("#exacttarget_wait").show();
                jQuery("#exacttarget_field_group").slideUp();

                var mysack = new sack("<?php 
        bloginfo('wpurl');
        ?>
/wp-admin/admin-ajax.php" );
                mysack.execute = 1;
                mysack.method = 'POST';
                mysack.setVar( "action", "gf_select_exacttarget_form" );
                mysack.setVar( "gf_select_exacttarget_form", "<?php 
        echo wp_create_nonce("gf_select_exacttarget_form");
        ?>
" );
                mysack.setVar( "list_ids", listId);
                mysack.setVar( "form_id", formId);
                mysack.encVar( "cookie", document.cookie, false );
                mysack.onError = function() {jQuery("#exacttarget_wait").hide(); alert('<?php 
        _e("Ajax error while selecting a form", "gravity-forms-exacttarget");
        ?>
' )};
                mysack.runAJAX();
                return true;
            }

            function SetOptin(selectedField, selectedValue){

                //load form fields
                jQuery("#exacttarget_optin_field_id").html(GetSelectableFields(selectedField, 20));
                var optinConditionField = jQuery("#exacttarget_optin_field_id").val();

                if(optinConditionField){
                    jQuery("#exacttarget_optin_condition_message").hide();
                    jQuery("#exacttarget_optin_condition_fields").show();
                    jQuery("#exacttarget_optin_value").html(GetFieldValues(optinConditionField, selectedValue, 20));
                }
                else{
                    jQuery("#exacttarget_optin_condition_message").show();
                    jQuery("#exacttarget_optin_condition_fields").hide();
                }
            }

            function EndSelectForm(fieldList, form_meta){
                //setting global form object
                form = form_meta;

                if(fieldList){

                    SetOptin("","");

                    jQuery("#exacttarget_field_list").html(fieldList);
                    jQuery("#exacttarget_field_group").slideDown();
                    jQuery('#exacttarget_field_list').trigger('load');
                }
                else{
                    jQuery("#exacttarget_field_group").slideUp();
                    jQuery("#exacttarget_field_list").html("");
                }
                jQuery("#exacttarget_wait").hide();
            }

            function GetFieldValues(fieldId, selectedValue, labelMaxCharacters){
                if(!fieldId)
                    return "";

                var str = "";
                var field = GetFieldById(fieldId);
                if(!field || !field.choices)
                    return "";

                var isAnySelected = false;

                for(var i=0; i<field.choices.length; i++){
                    var fieldValue = field.choices[i].value ? field.choices[i].value : field.choices[i].text;
                    var isSelected = fieldValue == selectedValue;
                    var selected = isSelected ? "selected='selected'" : "";
                    if(isSelected)
                        isAnySelected = true;

                    str += "<option value='" + fieldValue.replace("'", "&#039;") + "' " + selected + ">" + TruncateMiddle(field.choices[i].text, labelMaxCharacters) + "</option>";
                }

                if(!isAnySelected && selectedValue){
                    str += "<option value='" + selectedValue.replace("'", "&#039;") + "' selected='selected'>" + TruncateMiddle(selectedValue, labelMaxCharacters) + "</option>";
                }

                return str;
            }

            function GetFieldById(fieldId){
                for(var i=0; i<form.fields.length; i++){
                    if(form.fields[i].id == fieldId)
                        return form.fields[i];
                }
                return null;
            }

            function TruncateMiddle(text, maxCharacters){
                if(text.length <= maxCharacters)
                    return text;
                var middle = parseInt(maxCharacters / 2);
                return text.substr(0, middle) + "..." + text.substr(text.length - middle, middle);
            }

            function GetSelectableFields(selectedFieldId, labelMaxCharacters){
                var str = "";
                var inputType;
                for(var i=0; i<form.fields.length; i++){
                    fieldLabel = form.fields[i].adminLabel ? form.fields[i].adminLabel : form.fields[i].label;
                    inputType = form.fields[i].inputType ? form.fields[i].inputType : form.fields[i].type;
                    if(inputType == "checkbox" || inputType == "radio" || inputType == "select"){
                        var selected = form.fields[i].id == selectedFieldId ? "selected='selected'" : "";
                        str += "<option value='" + form.fields[i].id + "' " + selected + ">" + TruncateMiddle(fieldLabel, labelMaxCharacters) + "</option>";
                    }
                }
                return str;
            }

        </script>

        <?php 
    }
    private static function edit_page()
    {
        if (isset($_REQUEST['cache'])) {
            delete_site_transient('gf_marketo_default_fields');
            delete_site_transient('gf_marketo_custom_fields');
        }
        ?>
        <style type="text/css">
            label span.howto { cursor: default; }
            .marketo_col_heading, .marketo_tag_optin_condition_fields { padding-bottom: .5em; border-bottom: 1px solid #ccc; }
            .marketo_col_heading { font-weight:bold; width:50%; }
            .marketo_tag_optin_condition_fields { margin-bottom: .5em; }
            #marketo_field_list table, #marketo_tag_optin table { width: 500px; border-collapse: collapse; margin-top: 1em; }
            .marketo_field_cell {padding: 6px 17px 0 0; margin-right:15px; vertical-align: text-top; font-weight: normal;}
            ul.marketo_checkboxes { max-height: 120px; overflow-y: auto;}
            ul.marketo_map_field_groupId_checkboxes { max-height: 300px; }
            .gfield_required{color:red;}
            .feeds_validation_error{ background-color:#FFDFDF;}
            .feeds_validation_error td{ margin-top:4px; margin-bottom:6px; padding-top:6px; padding-bottom:6px; border-top:1px dotted #C89797; border-bottom:1px dotted #C89797}

            .left_header{float:left; width:200px; padding-right: 20px;}
            #marketo_field_list .left_header { margin-top: 1em; }
            .margin_vertical_10{margin: 20px 0;}
            #gf_marketo_list { margin-left:220px; padding-top: 1px }
            #marketo_doubleoptin_warning{padding-left: 5px; padding-bottom:4px; font-size: 10px;}
        </style>
        <script>
            var form = Array();
        </script>
        <div class="wrap">
            <img alt="<?php 
        _e("Marketo Feeds", "gravity-forms-marketo");
        ?>
" src="<?php 
        echo self::get_base_url();
        ?>
/images/marketo-logo.jpg" style="display:block; margin:15px 7px 0 0;" width="161" height="70"/>
            <h2><?php 
        _e("Marketo Feeds", "gravity-forms-marketo");
        ?>
</h2>
            <ul class="subsubsub">
                <li><a href="<?php 
        echo admin_url('admin.php?page=gf_settings&addon=Marketo');
        ?>
"><?php 
        _e('Marketo Settings', 'gravity-forms-marketo');
        ?>
</a> |</li>
                <li><a href="<?php 
        echo admin_url('admin.php?page=gf_marketo');
        ?>
"><?php 
        _e('Marketo Feeds', 'gravity-forms-marketo');
        ?>
</a></li>
            </ul>
        <div class="clear"></div>
        <?php 
        //getting Marketo API
        $api = self::get_api();
        //ensures valid credentials were entered in the settings page
        if ($api === false || is_string($api)) {
            ?>
            <div class="error" id="message" style="margin-top:20px;"><?php 
            echo wpautop(sprintf(__("We are unable to login to Marketo with the provided username and API key. Please make sure they are valid in the %sSettings Page%s", "gravity-forms-marketo"), "<a href='?page=gf_settings&addon=Marketo'>", "</a>"));
            ?>
</div>
            <?php 
            return;
        }
        //getting setting id (0 when creating a new one)
        $id = !empty($_POST["marketo_setting_id"]) ? $_POST["marketo_setting_id"] : absint($_GET["id"]);
        $config = empty($id) ? array("meta" => array(), "is_active" => true) : GFMarketoData::get_feed($id);
        //getting merge vars
        $merge_vars = array();
        //updating meta information
        if (isset($_POST["gf_marketo_submit"])) {
            $objectType = $list_names = array();
            list($list_id, $list_name) = explode("|:|", stripslashes($_POST["gf_marketo_list"]));
            $config["meta"]["contact_list_id"] = $list_id;
            $config["meta"]["contact_list_name"] = $list_name;
            $config["form_id"] = absint($_POST["gf_marketo_form"]);
            $is_valid = true;
            $merge_vars = self::get_fields();
            $field_map = array();
            foreach ($merge_vars as $key => $var) {
                $field_name = "marketo_map_field_" . $var['tag'];
                if (isset($_POST[$field_name])) {
                    if (is_array($_POST[$field_name])) {
                        foreach ($_POST[$field_name] as $k => $v) {
                            $_POST[$field_name][$k] = stripslashes($v);
                        }
                        $mapped_field = $_POST[$field_name];
                    } else {
                        $mapped_field = stripslashes($_POST[$field_name]);
                    }
                }
                if (!empty($mapped_field)) {
                    $field_map[$var['tag']] = $mapped_field;
                } else {
                    unset($field_map[$var['tag']]);
                    if (!empty($var['req'])) {
                        $is_valid = false;
                    }
                }
                unset($_POST["{$field_name}"]);
            }
            $field_map['CustomFields'] = array();
            if (isset($_POST['marketo_custom_field'])) {
                foreach ((array) $_POST['marketo_custom_field'] as $key => $value) {
                    if (!empty($key)) {
                        $field_map['CustomFields'][esc_attr($key)] = stripslashes($value);
                    }
                }
            }
            $config["meta"]["field_map"] = $field_map;
            $config["meta"]["optin_enabled"] = !empty($_POST["marketo_optin_enable"]) ? true : false;
            $config["meta"]["optin_field_id"] = $config["meta"]["optin_enabled"] ? isset($_POST["marketo_optin_field_id"]) ? @$_POST["marketo_optin_field_id"] : '' : "";
            $config["meta"]["optin_operator"] = $config["meta"]["optin_enabled"] ? isset($_POST["marketo_optin_operator"]) ? @$_POST["marketo_optin_operator"] : '' : "";
            $config["meta"]["optin_value"] = $config["meta"]["optin_enabled"] ? @$_POST["marketo_optin_value"] : "";
            $config["meta"]["tag_optin_enabled"] = !empty($_POST["marketo_tag_optin_enable"]) ? true : false;
            $config["meta"]["tag_optin_field_id"] = !empty($config["meta"]["tag_optin_enabled"]) ? isset($_POST["marketo_tag_optin_field_id"]) ? @$_POST["marketo_tag_optin_field_id"] : '' : "";
            $config["meta"]["tag_optin_operator"] = !empty($config["meta"]["tag_optin_enabled"]) ? isset($_POST["marketo_tag_optin_operator"]) ? @$_POST["marketo_tag_optin_operator"] : '' : "";
            $config["meta"]["tag_optin_tags"] = !empty($config["meta"]["tag_optin_enabled"]) ? @$_POST["tag_optin_tags"] : "";
            $config["meta"]["tag_optin_value"] = !empty($config["meta"]["tag_optin_enabled"]) ? @$_POST["marketo_tag_optin_value"] : "";
            if ($is_valid) {
                $id = GFMarketoData::update_feed($id, $config["form_id"], $config["is_active"], $config["meta"]);
                ?>
                <div id="message" class="updated fade" style="margin-top:10px;"><p><?php 
                echo sprintf(__("Feed Updated. %sback to list%s", "gravity-forms-marketo"), "<a href='?page=gf_marketo'>", "</a>");
                ?>
</p>
                    <input type="hidden" name="marketo_setting_id" value="<?php 
                echo $id;
                ?>
"/>
                </div>
                <?php 
            } else {
                ?>
                <div class="error" style="padding:6px"><?php 
                echo __("Feed could not be updated. Please enter all required information below.", "gravity-forms-marketo");
                ?>
</div>
                <?php 
            }
        }
        self::setup_tooltips();
        ?>
        <form method="post" action="<?php 
        echo remove_query_arg('refresh');
        ?>
">
            <input type="hidden" name="marketo_setting_id" value="<?php 
        echo $id;
        ?>
"/>

            <div class="margin_vertical_10">
                <label for="gf_marketo_list" class="left_header"><?php 
        _e("Marketo Campaign", "gravity-forms-marketo");
        ?>
 <?php 
        gform_tooltip("marketo_contact_list");
        ?>
</label>
                <?php 
        //getting all contact lists
        $campaigns = $api->getCampaignsForSource();
        if (empty($campaigns)) {
            if (is_array($campaigns)) {
                echo '<img src="' . plugins_url('images/campaigntrigger.png', __FILE__) . '" alt="Campaign is Requested Trigger" width="562" height="138" />';
                echo _e('<span class="howto" style="max-width:500px; margin-left:230px"><strong>No lists were loaded.</strong> Campaigns are only available to the API if they are active campaigns and have a "Campaign is Requested" trigger configured where the Source is "Web Service&nbsp;API".</span>', 'gravity-forms-marketo');
            } else {
                echo __("Could not load Marketo contact lists.", "gravity-forms-marketo");
            }
            ?>
<script>
                    jQuery(document).ready(function() {
                        jQuery("#marketo_field_group, #marketo_form_container").slideUp();
                    });
                    </script><?php 
        } else {
            ?>
                    <select id="gf_marketo_list" name="gf_marketo_list" onchange="SelectList(jQuery(this).val());">
                        <option value=""><?php 
            _e("Select a Marketo Campaign", "gravity-forms-marketo");
            ?>
</option>
                    <?php 
            $curr_contact_list_id = isset($config["meta"]["contact_list_id"]) ? $config["meta"]["contact_list_id"] : '';
            foreach ($campaigns as $campaignname => $campaignid) {
                ?>
                        <option value="<?php 
                echo esc_html($campaignid) . "|:|" . esc_html($campaignname);
                ?>
" <?php 
                selected($campaignid, $curr_contact_list_id, true);
                ?>
><?php 
                echo esc_html($campaignname);
                ?>
</option>
                        <?php 
            }
            ?>
                  </select>
                <?php 
        }
        ?>
            </div>

            <div id="marketo_form_container" valign="top" class="margin_vertical_10" <?php 
        echo empty($config["meta"]["contact_list_id"]) ? "style='display:none;'" : "";
        ?>
>

                <h2><?php 
        _e('1. Select the form to tap into.', "gravity-forms-marketo");
        ?>
</h2>
                <?php 
        $forms = RGFormsModel::get_forms();
        if (isset($config["form_id"])) {
            foreach ($forms as $form) {
                if ($form->id == $config["form_id"]) {
                    echo '<h3 style="margin:0; padding:0 0 1em 1.75em; font-weight:normal;">' . sprintf(__('(Currently linked with %s)', "gravity-forms-marketo"), $form->title) . '</h3>';
                }
            }
        }
        ?>
                <label for="gf_marketo_form" class="left_header"><?php 
        _e("Gravity Form", "gravity-forms-marketo");
        ?>
 <?php 
        gform_tooltip("marketo_gravity_form");
        ?>
</label>

                <select id="gf_marketo_form" name="gf_marketo_form" onchange="SelectForm(jQuery('#gf_marketo_list').val(), jQuery(this).val());">
                <option value=""><?php 
        _e("Select a form", "gravity-forms-marketo");
        ?>
 </option>
                <?php 
        $curr_form_id = isset($config["form_id"]) ? $config["form_id"] : '';
        foreach ($forms as $form) {
            ?>
                    <option value="<?php 
            echo absint($form->id);
            ?>
"  <?php 
            selected(absint($form->id), $curr_form_id, true);
            ?>
><?php 
            echo esc_html($form->title);
            ?>
</option>
                    <?php 
        }
        ?>
                </select>
                &nbsp;&nbsp;
                <img src="<?php 
        echo GFMarketo::get_base_url();
        ?>
/images/loading.gif" id="marketo_wait" style="display: none;"/>
            </div>

            <div class="clear"></div>
            <div id="marketo_field_group" valign="top" <?php 
        echo empty($config["form_id"]) ? "style='display:none;'" : "";
        ?>
>
                <div id="marketo_field_container" valign="top" class="margin_vertical_10" >
                    <h2><?php 
        _e('2. Map form fields to Marketo fields.', "gravity-forms-marketo");
        ?>
</h2>
                    <h3 class="description"><?php 
        _e('About field mapping:', "gravity-forms-marketo");
        ?>
</h2>
                    <label for="marketo_fields" class="left_header"><?php 
        _e("Standard Fields", "gravity-forms-marketo");
        ?>
 <?php 
        gform_tooltip("marketo_map_fields");
        ?>
</label>
                    <div id="marketo_field_list">
                    <?php 
        if (!empty($config["form_id"])) {
            //getting list of all Marketo merge variables for the selected contact list
            if (empty($merge_vars)) {
                $merge_vars = self::get_fields($config['meta']['contact_list_name']);
            }
            //getting field map UI
            echo self::get_field_mapping($config, $config["form_id"], $merge_vars);
            //getting list of selection fields to be used by the optin
            $form_meta = RGFormsModel::get_form_meta($config["form_id"]);
            $selection_fields = GFCommon::get_selection_fields($form_meta, $config["meta"]["optin_field_id"]);
            $tag_selection_fields = true;
        } else {
            $selection_fields = $tag_selection_fields = false;
        }
        ?>
                    </div>
                    <div class="clear"></div>
                </div>


                <div id="marketo_optin_container" valign="top" class="margin_vertical_10">
                    <label for="marketo_optin" class="left_header"><?php 
        _e("Opt-In Condition", "gravity-forms-marketo");
        ?>
 <?php 
        gform_tooltip("marketo_optin_condition");
        ?>
</label>
                    <div id="marketo_optin">
                        <table>
                            <tr>
                                <td>
                                    <input type="checkbox" id="marketo_optin_enable" name="marketo_optin_enable" value="1" onclick="if(this.checked){jQuery('#marketo_optin_condition_field_container').show('slow'); SetOptinCondition();} else{jQuery('#marketo_optin_condition_field_container').hide('slow');}" <?php 
        echo !empty($config["meta"]["optin_enabled"]) ? "checked='checked'" : "";
        ?>
/>
                                    <label for="marketo_optin_enable"><?php 
        _e("Enable", "gravity-forms-marketo");
        ?>
</label>
                                </td>
                            </tr>
                            <tr class="gfield_list_row" data-fieldid="optin">
                                <td>
                                    <div id="marketo_optin_condition_field_container" <?php 
        echo empty($config["meta"]["optin_enabled"]) ? "style='display:none'" : "";
        ?>
>
                                        <div class="marketo_optin_condition_fields" <?php 
        echo empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                            <?php 
        _e("Export to Marketo if ", "gravity-forms-marketo");
        ?>

                                            <select id="marketo_optin_field_id" name="marketo_optin_field_id" class='optin_select' onchange='SetOptinCondition();'><?php 
        echo $selection_fields;
        ?>
</select>
                                            <select id="marketo_optin_operator" name="marketo_optin_operator" />
                                                <option value="is" <?php 
        echo isset($config["meta"]["optin_operator"]) && $config["meta"]["optin_operator"] == "is" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is", "gravity-forms-marketo");
        ?>
</option>
                                                <option value="isnot" <?php 
        echo isset($config["meta"]["optin_operator"]) && $config["meta"]["optin_operator"] == "isnot" ? "selected='selected'" : "";
        ?>
><?php 
        _e("is not", "gravity-forms-marketo");
        ?>
</option>
                                            </select>
                                            <select id="marketo_optin_value" name="marketo_optin_value" class='optin_select optin_value'>
                                            </select>

                                        </div>
                                        <div class="marketo_optin_condition_message" <?php 
        echo !empty($selection_fields) ? "style='display:none'" : "";
        ?>
>
                                            <?php 
        _e("To create an Opt-In condition, your form must have a drop down, checkbox or multiple choice field.", "gravityform");
        ?>
                                        </div>
                                    </div>
                                </td>
                            </tr>
                        </table>
                    </div>

                    <script>
                        function marketoUpdateCFName( inputObj ) {
                            jQuery('td select', jQuery( inputObj ).parents('tr')).attr('name', 'marketo_custom_field['+ jQuery( inputObj ).val()+']').attr('id', 'marketo_custom_field_'+ jQuery( inputObj ).val().replace(/\W/, '-') );
                        }

                        <?php 
        if (!empty($config["form_id"])) {
            ?>
                            //creating Javascript form object
                            form = <?php 
            echo GFCommon::json_encode($form_meta);
            ?>
 ;

                            function SetOptinCondition() {
                                var selectedField = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["optin_field_id"]);
            ?>
";
                                var selectedValue = "<?php 
            echo str_replace('"', '\\"', $config["meta"]["optin_value"]);
            ?>
";
                                jQuery("#marketo_optin_value").html(GetFieldValues(jQuery('#marketo_optin_field_id').val(), "", 50));
                            }
                            //initializing drop downs
                            jQuery(document).ready(function(){

                                SetOptinCondition();

                            });
                        <?php 
        } else {
            ?>
                        function SetOptinCondition() {
                            SetOptin('','', 'optin');
                        }
                        <?php 
        }
        ?>
                    </script>
                </div>

                <div id="marketo_submit_container" class="margin_vertical_10">
                    <input type="submit" name="gf_marketo_submit" value="<?php 
        echo empty($id) ? __("Save Feed", "gravity-forms-marketo") : __("Update Feed", "gravity-forms-marketo");
        ?>
" class="button-primary"/>
                </div>
            </div>
        </form>
        </div>

        <script>
    jQuery(document).ready(function($) {

    <?php 
        if (isset($_REQUEST['id'])) {
            ?>
        $('#marketo_field_list').live('load', function() {
            $('.marketo_field_cell select').each(function() {
                var $select = $(this);
                if($().prop) {
                    var label = $.trim($('label[for='+$(this).prop('name')+']').text());
                } else {
                    var label = $.trim($('label[for='+$(this).attr('name')+']').text());
                }
                label = label.replace(' *', '');

                if($select.val() === '') {
                    $('option', $select).each(function() {

                        if($(this).text() === label) {
                            if($().prop) {
                                $(this).prop('selected', true);
                            } else {
                                $(this).attr('selected', true);
                            }
                        }
                    });
                }
            });
        });
    <?php 
        }
        ?>
    });
        </script>
        <script>


            jQuery(document).ready(function($) {
                <?php 
        if (empty($config["form_id"])) {
            ?>
                SelectForm($('#gf_marketo_form').val());
                <?php 
        }
        ?>
            });

            function SelectList(listId){
                if(listId){
                    jQuery("#marketo_form_container").slideDown();
                    jQuery("#gf_marketo_form").val("");
                }
                else{
                    jQuery("#marketo_form_container").slideUp();
                    EndSelectForm("");
                }
            }

            function SelectForm(listId, formId){

                // If no form is selected, just hide everything.
                if(!formId){
                    jQuery("#marketo_field_group").slideUp();
                    return;
                }

                jQuery("#marketo_wait").show();
                jQuery("#marketo_field_group").slideUp();

                var mysack = new sack("<?php 
        bloginfo('wpurl');
        ?>
/wp-admin/admin-ajax.php" );
                mysack.execute = 1;
                mysack.method = 'POST';
                mysack.setVar( "action", "gf_select_marketo_form" );
                mysack.setVar( "gf_select_marketo_form", "<?php 
        echo wp_create_nonce("gf_select_marketo_form");
        ?>
" );
                mysack.setVar( "list_id", listId);
                mysack.setVar( "form_id", formId);
                mysack.encVar( "cookie", document.cookie, false );
                mysack.onError = function() {jQuery("#marketo_wait").hide(); alert('<?php 
        _e("Ajax error while selecting a form", "gravity-forms-marketo");
        ?>
' )};
                mysack.runAJAX();
                return true;
            }

            function SetOptin(selectedField, selectedValue, tag){

                //load form fields
                jQuery(".optin_select[id*=field_id]").each(function() {

                    var optinConditionField = jQuery(this).val();
                    var $table = jQuery(this).parents('tr.gfield_list_row');
                    var fieldID = $table.data('fieldid');
                    var values = '';
                    jQuery(this).addClass('processed');

                    // If the conditional is set up
                    if(optinConditionField){
                        jQuery(".marketo_optin_condition_message", $table).hide();
                        jQuery(".marketo_optin_condition_fields", $table).show();

                        if(tag == fieldID) {
                            // Gather the form fields that qualify for conditional
                            jQuery(this).html(GetSelectableFields(selectedField, 50));
                            values = GetFieldValues(optinConditionField, selectedValue, 50);
                            jQuery(".optin_value", $table).html(values);
                        }
                    } else{
                        jQuery(this).html(GetSelectableFields(selectedField, 50));
                        jQuery(".marketo_optin_condition_message", $table).show();
                        jQuery(".marketo_optin_condition_fields", $table).hide();
                    }

                });
            }

            function EndSelectForm(fieldList, form_meta){
                //setting global form object
                form = form_meta;

                if(fieldList){

                    SetOptin("","", false);

                    jQuery("#marketo_field_list").html(fieldList);
                    jQuery("#marketo_field_group").slideDown();
                }
                else{
                    jQuery("#marketo_field_group").slideUp();
                    jQuery("#marketo_field_list").html("");
                }
                jQuery('#marketo_field_list').trigger('load');
                jQuery("#marketo_wait").hide();
            }

            function GetFieldValues(fieldId, selectedValue, labelMaxCharacters){
                if(!fieldId)
                    return "";

                var str = "";
                var field = GetFieldById(fieldId);
                if(!field || !field.choices)
                    return "";

                var isAnySelected = false;

                for(var i=0; i<field.choices.length; i++){
                    var fieldValue = field.choices[i].value ? field.choices[i].value : field.choices[i].text;
                    var isSelected = fieldValue == selectedValue;
                    var selected = isSelected ? "selected='selected'" : "";
                    if(isSelected)
                        isAnySelected = true;

                    str += "<option value='" + fieldValue.replace("'", "&#039;") + "' " + selected + ">" + TruncateMiddle(field.choices[i].text, labelMaxCharacters) + "</option>";
                }

                if(!isAnySelected && selectedValue){
                    str += "<option value='" + selectedValue.replace("'", "&#039;") + "' selected='selected'>" + TruncateMiddle(selectedValue, labelMaxCharacters) + "</option>";
                }

                return str;
            }

            function GetFieldById(fieldId){
                for(var i=0; i<form.fields.length; i++){
                    if(form.fields[i].id == fieldId)
                        return form.fields[i];
                }
                return null;
            }

            function TruncateMiddle(text, maxCharacters){
                if(text.length <= maxCharacters)
                    return text;
                var middle = parseInt(maxCharacters / 2);
                return text.substr(0, middle) + "..." + text.substr(text.length - middle, middle);
            }

            function GetSelectableFields(selectedFieldId, labelMaxCharacters){
                var str = "";
                var inputType;
                for(var i=0; i<form.fields.length; i++){
                    fieldLabel = form.fields[i].adminLabel ? form.fields[i].adminLabel : form.fields[i].label;
                    inputType = form.fields[i].inputType ? form.fields[i].inputType : form.fields[i].type;
                    if(inputType == "checkbox" || inputType == "radio" || inputType == "select"){
                        var selected = form.fields[i].id == selectedFieldId ? "selected='selected'" : "";
                        str += "<option value='" + form.fields[i].id + "' " + selected + ">" + TruncateMiddle(fieldLabel, labelMaxCharacters) + "</option>";
                    }
                }
                return str;
            }

        </script>

        <?php 
    }