Файловый менеджер - Редактировать - /home/goldin10/public_html/getoutyourbox.com/wp-content/plugins/cf-mailchimp-1.4.0/includes/functions.php
Error occurred
Назад
<?php /** * MailChimp Form Processor Functions * * @package Caldera_Forms_MailChimp * @author David Cramer <david@digilab.co.za> * @license GPL-2.0+ * @link * @copyright 2014 David Cramer <david@digilab.co.za> */ /** * Filteres the meta data for a captured entry when viewing it. * * @since 1.0.0 * @param mixed $meta meta data for the entry * @param array $config config array of the processor * @param array $form array of the complete form config structure * * @return mixed filtered meta data for the entry */ function cf_mailchimp_get_entry_meta($meta, $config, $form){ $meta['meta_key'] = $config['lists'][$config['list_id']]; return $meta; } /** * Registers the MailChimp Processor * * @since 1.0.0 * @param array $processors array of current regestered processors * * @return array array of regestered processors */ function cf_mailchimp_reg_proc($processors){ $processors['mailchimp'] = array( "name" => __('MailChimp', 'cf-mailchimp'), "description" => __("Integrates a form with MailChimp", 'cf-mailchimp'), "icon" => CF_MAILCHIMP_URL . "icon.png", "author" => "Caldera Labs", "author_url" => "https://calderaforms.com", "pre_processor" => 'cf_mailchimp_pre_process', "template" => CF_MAILCHIMP_PATH . "includes/config.php", "meta_template" => CF_MAILCHIMP_PATH . "includes/meta_template.php", "magic_tags" => array( // automatic magic tag generator "list_name", "list_id", "email" => array( // makes {mailchimp:mailid} // compatibility types - no array = text "email" ), "euid", // compatibility text "leid" // compatibility text ) ); return $processors; } /** * Outputs a select box with available lists to connect a form to (in config template ) * * @since 1.0.0 * @param string $apikey mailchimp api key * */ function cf_mailchimp_getlists($apikey = null){ if( ! current_user_can( Caldera_Forms::get_manage_cap( 'admin' ) ) ){ status_header( 403 ); exit; } if( empty( $_POST[ 'nonce' ] ) || ! wp_verify_nonce( $_POST[ 'nonce' ], 'cf_mailchimp_getlists' ) ){ status_header( 400 ); exit; } $fid = sanitize_text_field( $_POST['fid'] ); $api_key = sanitize_text_field( $_POST['config']['processors'][ $fid ]['config']['apikey'] ); if(empty($api_key)){ echo "<div id=\"list_vars_". $fid ."\"><div class=\"has-error description\" style=\"text-align:right;\">" . __('No API Key Provided', 'cf-mailchimp') . "</div></div>"; exit; } // check key if(false === strpos($api_key, '-')){ echo "<div id=\"list_vars_". $fid ."\"><div class=\"has-error description\" style=\"text-align:right; color:#ffaaaa;\">" . __( 'Invalid API Key', 'cf-mailchimp') . "</div></div>"; exit; } $mc = new \DrewM\MailChimp\MailChimp( $api_key ); $lists = $mc->get( 'lists', array( 'count' => 99 ) ); $lists_field = ''; if(!empty($lists)){ if(empty($lists['error'])){ echo "<div class=\"caldera-config-group\">\r\n"; echo "<label for=\"list_selector_". $fid ."\">" . esc_html__('List', 'cf-mailchimp') . "</label>\r\n"; echo "<div class=\"caldera-config-field\">\r\n"; echo "<select id=\"list_selector_". $fid ."\" data-load-element=\"#load_status_". $fid ."\" class=\"mc_list_selector block-input field-config required ajax-trigger\" data-callback=\"rebuild_field_binding\" data-apikey=\"".$api_key."\" data-fid=\"". $fid ."\" data-event=\"change\" data-target=\"#list_vars_" . $fid . "\" data-action=\"cf_mailchimp_getlist_vars\" name=\"config[processors][". $fid ."][config][list_id]\" data-nonce=\"" . wp_create_nonce( 'cf_mailchimp_getlist_vars' ) . "\" data-before=\"before\" >\r\n"; echo "<option value=\"\"></option>\r\n"; foreach($lists['lists'] as $list){ echo "<option value=\"". $list['id'] . "\">" . $list['name'] .'</option>'; $lists_field .= "<input type=\"hidden\" name=\"config[processors][". $fid ."][config][lists][".$list['id']."]\" value=\"".$list['name']."\">\r\n"; } echo "</select>\r\n"; echo "</div>\r\n"; echo "</div>\r\n"; echo $lists_field; echo "<div id=\"list_vars_". $fid ."\"></div>"; }else{ echo "<div id=\"list_vars_". $fid ."\"><div class=\"has-error description\" style=\"text-align:right; color:#ff0000;\">".strtok($lists['error'], ':')."</div></div>"; } }else{ echo "<div id=\"list_vars_". $fid ."\"><div class=\"has-error description\" style=\"text-align:right; color:#ff0000;\">" . __( 'No Lists Found or Invalid API Key'. 'cf-mailchimp' ) . "</div></div>"; } exit; } /** * Get segments of a list * * @since 1.3.0 * * @param \DrewM\MailChimp\MailChimp $api API client * @param string $list_id List ID * * @return array */ function cf_mailchimp_get_segments( \DrewM\MailChimp\MailChimp $api, $list_id ){ $segments = get_transient( __FUNCTION__ . $list_id ); if( empty( $segments ) ){ $segments = $api->get( "/lists/$list_id/segments", array( 'count' => 99 ) ); if( ! empty( $segments ) && ! empty( $segments[ 'segments' ] ) ){ $segments = array_combine( wp_list_pluck( $segments[ 'segments' ], 'id' ), wp_list_pluck( $segments[ 'segments' ], 'name' ) ); set_transient( __FUNCTION__ . $list_id, $segments, DAY_IN_SECONDS ); } } if( empty( $segments ) ){ $segments = array(); } return $segments; } /** * Create the segment selector during AJAX request * * @since 1.3.0 * * @param array $segments * @param string $fid * * @return string */ function cf_mailchimp_segments_field( $segments, $fid ){ $seg_field = ''; $field = "<div class=\"caldera-config-group\" id=\"list_segments_". $fid . "_wrap\">\r\n"; $field .= "<label for=\"list_segments_". $fid ."\">" . esc_html__('Segment', 'cf-mailchimp') . "</label>\r\n"; $field .= ' <div class="caldera-config-field">'; $field .= "<select id=\"list_segments_". $fid ."\" data-load-element=\"#load_status_". $fid ."\" class=\"mc_segment_selector block-input field-config ajax-trigger\" data-callback=\"rebuild_field_binding\" data-fid=\"". $fid ."\" data-event=\"change\" name=\"config[processors][". $fid ."][config][segment_id]\">\r\n"; $field .= "<option value=\"\"></option>\r\n"; foreach($segments as $id => $name ){ $field .= "<option value=\"". $id . "\">" . $name .'</option>'; $seg_field .= "<input type=\"hidden\" name=\"config[processors][". $fid ."][config][segments][".$id."]\" value=\"".$name."\">\r\n"; } $field .= "</select>\r\n"; $field .= "</div>\r\n"; $field .= $seg_field; $field .= "</div>\r\n"; return $field; } /** * Outputs a list of variables for binding to form fields in the config template * * @since 1.0.0 * */ function cf_mailchimp_getlist_vars(){ if( ! current_user_can( Caldera_Forms::get_manage_cap( 'admin' ) ) ){ status_header( 403 ); exit; } if( empty( $_POST[ 'nonce' ] ) || ! wp_verify_nonce( $_POST[ 'nonce' ], 'cf_mailchimp_getlist_vars' ) ){ status_header( 400 ); exit; } // check all is well if(empty($_POST['apikey'])){ exit; } if(empty($_POST['config']['processors'][$_POST['fid']]['config']['list_id'])){ exit; } // sanatize this $fid = sanitize_text_field( $_POST['fid'] ); $api_key = sanitize_text_field( $_POST['apikey'] ); $list_id = sanitize_text_field( $_POST['config']['processors'][ $fid ]['config']['list_id'] ); $vars_field = ''; $MailChimp = new \DrewM\MailChimp\MailChimp( $api_key ); $list = $MailChimp->get("lists/$list_id/merge-fields", array( 'count' => 99999 ) ); $segments = cf_mailchimp_get_segments( $MailChimp, $list_id ); if( ! empty( $segments ) ){ $vars_field .= cf_mailchimp_segments_field( $segments, $fid ); } if( empty( $list[ 'merge_fields' ] ) ){ wp_send_json_error(); } $merge_fields = array_merge( array( array( 'merge_id' => 1, 'tag' => 'EMAIL', 'name' => __( 'Email', 'cf-mailchimp' ), 'type' => 'email', 'required' => true, 'default_value' => '', 'public' => true, 'display_order' => 2, 'options' => array( 'size' => 25, ), ) ), $list[ 'merge_fields' ] ); foreach ( $merge_fields as $var ) { if ( ! ( in_array( $var[ 'type' ], array( 'email', 'text', 'checkbox', 'dropdown', 'radio', 'date_picker', 'phone', 'phone_better', 'url', 'number' ) ) ) ) { $var[ 'type' ] = 'text'; } if( 'phone' === $var[ 'type' ] ){ $var[ 'type' ] = 'phone,phone_better'; }elseif( 'website' === $var[ 'type' ] ){ $var[ 'type' ] = 'url,text'; }elseif( 'number' === $var[ 'type' ] ){ $var[ 'type' ] = 'number,text'; } $id_attr = $var[ 'merge_id' ] . '-' . $list_id; $vars_field .= "<div class=\"caldera-config-group\">\r\n"; $vars_field .= sprintf( '<label for="%s">%s</label>', esc_attr( $id_attr ), $var[ 'name' ] ) . "\r\n"; $vars_field .= "<div class=\"caldera-config-field\">\r\n"; $vars_field .= "<select id=\"" . esc_attr( $id_attr ) . "\" class=\"block-input caldera-field-bind " . ( ! empty( $var[ 'req' ] ) ? 'required' : null ) . "\" id=\"fp_" . $fid . "_" . $var[ 'tag' ] . "\" name=\"config[processors][" . $fid . "][config][vars][" . $var[ 'tag' ] . "][field]\" data-type=\"" . $var[ 'type' ] . "\">\r\n"; $vars_field .= "</select>\r\n"; $vars_field .= "</div>\r\n"; if ( ! empty( $var[ 'options' ][ 'choices'] ) ) { $vars_field .= "<p class=\"description help-block\">" . __( 'Required Options:', 'cf-mailchimp' ) . implode( ', ', $var[ 'options' ][ 'choices' ] ) . "</p>"; $vars_field .= "<input type=\"hidden\" name=\"config[processors][" . $fid . "][config][vars][" . $var[ 'tag' ] . "][options]\" value=\"Options: " . implode( ', ', $var[ 'options' ][ 'choices' ] ) . "\">\r\n"; } $vars_field .= "</div>\r\n"; $vars_field .= "<input type=\"hidden\" name=\"config[processors][" . $fid . "][config][vars][" . $var[ 'tag' ] . "][name]\" value=\"" . $var[ 'name' ] . "\">\r\n"; $vars_field .= "<input type=\"hidden\" name=\"config[processors][" . $fid . "][config][vars][" . $var[ 'tag' ] . "][type]\" value=\"" . $var[ 'type' ] . "\">\r\n"; if ( ! empty( $var[ 'req' ] ) ) { $vars_field .= "<input type=\"hidden\" name=\"config[processors][" . $fid . "][config][vars][" . $var[ 'tag' ] . "][req]\" value=\"" . $var[ 'req' ] . "\">\r\n"; } } echo $vars_field; exit; } /** * Processes form and push to mailchimp * * @since 1.0.0 * @param array $config Config array of the processor * @param array $form array of the complete form config structure * * @return array array of the transaction result */ function cf_mailchimp_pre_process($config, $form){ if(empty($config['apikey']) || empty($config['list_id']) ){ return; } $list_id = $config[ 'list_id' ]; $email = Caldera_Forms::get_field_data($config['vars']['EMAIL']['field'], $form); $opts = array(); unset($config['vars']['EMAIL']); foreach($config['vars'] as $tag=>$merge){ if(!empty($merge['field'])){ $opts['merge_vars'][$tag] = Caldera_Forms::get_field_data($merge['field'], $form); } } if ( ! empty( $opts[ 'merge_vars' ] ) ) { foreach ( $opts[ 'merge_vars' ] as $tag => $value ) { if ( empty( $value ) ) { unset( $opts[ 'merge_vars' ][ $tag ] ); } } }else{ $opts[ 'merge_vars' ] = array(); } $request_data = array( 'email_address' => $email, 'status' => 'subscribed', 'status_if_new' => $config[ 'status' ], 'ip_signup' => caldera_forms_get_ip(), 'merge_fields' => $opts[ 'merge_vars' ] ); if( 'unsubscribed' == $config[ 'status' ] ){ $request_data[ 'status' ] = 'unsubscribed'; } if( ! empty( $config[ 'groups' ] ) ){ $groups = array(); foreach ( $config[ 'groups' ] as $group ){ $groups[ $group ] = true; } $request_data[ 'interests' ] = $groups; } /** * Change the body of the request to add member to list * * @since 1.3.0 * * @param array $request_data Body of request * @param array $config Processor config * @param array $form Form config */ $request_data = apply_filters( 'cf_mailchimp_request_data', $request_data, $config, $form ); if ( empty( $request_data[ 'merge_fields' ] ) ){ unset( $request_data[ 'merge_fields' ] ); } $MailChimp = new \DrewM\MailChimp\MailChimp($config['apikey'] ); // get list name - list_id $hash = md5( strtolower( $email ) ); $result = $MailChimp->put( "lists/$list_id/members/$hash", $request_data ); if(isset($result['errors'])){ return array( 'type' => 'error', 'note' => $result['detail'] ); } if( ! empty( $config[ 'segment_id' ] ) ){ $updated = cf_mailchimp_add_to_segment( $MailChimp, $list_id, $config[ 'segment_id' ], $email); Caldera_Forms::set_submission_meta( 'mailchimp_segment', $updated, $form, $config['processor_id']); } Caldera_Forms::set_submission_meta('mailchimp', $result, $form, $config['processor_id']); } /** * Add email to segment * * @since 1.3.0 * * @param \DrewM\MailChimp\MailChimp $api API client * @param string $list_id List ID * @param int $segment_id Segment ID * @param string $email Email adddress * * @return array */ function cf_mailchimp_add_to_segment( \DrewM\MailChimp\MailChimp $api, $list_id, $segment_id, $email ){ $r = $api->post( "/lists/$list_id/segments/$segment_id/members", array( 'email_address' => $email ) ); $meta = array(); if( isset( $r[ 'id' ] ) ){ foreach ( array( 'email_address', 'unique_email_id', 'id', ) as $field ){ if( ! empty( $r[ $field ] ) ){ $meta[ $field ] = $r[ $field ]; } } } return $meta; } function cf_mailchimp_get_groups_ajax(){ if( ! current_user_can( Caldera_Forms::get_manage_cap( 'admin' ) ) ){ status_header( 403 ); exit; } if( empty( $_GET[ 'nonce' ] ) || ! wp_verify_nonce( $_GET[ 'nonce' ], 'cf_mailchimp_get_groups' ) ){ status_header( 400 ); exit; } if(empty($_GET['apikey'])){ status_header( 412 ); exit; } if(empty($_GET['list'])){ status_header( 412 ); exit; } if(empty($_GET['fid'])){ status_header( 412 ); exit; } $fid = sanitize_text_field( $_GET['fid'] ); $api_key = sanitize_text_field( $_GET['apikey'] ); $list_id = sanitize_text_field( $_GET['list'] ); $groups = cf_mailchimp_get_groups( $api_key, $list_id ); if( ! empty( $groups ) ){ wp_send_json_success( array( 'groups' => $groups, '_id' => $fid )); exit; }else{ wp_send_json_error(); } } /** * Get all groups (interest categories of a list) * * @since 1.4.0 * * @param string $api_key API key * @param string $list_id List ID * @param bool $bypass_cache Optional. Whether to bypass caching of this data. Default is false. * * @return array */ function cf_mailchimp_get_groups( $api_key, $list_id, $bypass_cache = false ){ $transient_key = __FUNCTION__ . md5( CF_MAILCHIMP_VER . $list_id . CF_MAILCHIMP_VER ); if ( true != $bypass_cache ) { $cached = get_transient( $transient_key ); if ( is_array( $cached ) && ! empty( $cached ) ) { return $cached; } } $mc = new \DrewM\MailChimp\MailChimp( $api_key ); $top_level_groups = $mc->get( "/lists/$list_id/interest-categories", array( 'count' => 99 ) ); $groups = array(); if( empty( $top_level_groups[ 'categories'] )){ return $groups; } foreach ( $top_level_groups[ 'categories'] as $i => $group ){ $group_id = $group[ 'id' ]; $groups[ $group[ 'type' ] . '-' . $group_id ] = $group[ 'title' ]; $interests = $mc->get( "/lists/$list_id/interest-categories/$group_id/interests", array( 'count' => 99 ) ); if( ! empty( $interests[ 'interests' ] ) ){ foreach( $interests[ 'interests' ] as $interest ){ $groups [ $interest[ 'id'] ] = $interest[ 'name' ]; } } } if( true != $bypass_cache && ! empty( $groups ) ){ set_transient( $transient_key, $groups, DAY_IN_SECONDS ); } return $groups; } /** * Template for groups field * * @since 1.4.0 * * @param bool $check Optional. If true, all items are checked. Default is false * * @return string */ function cf_mailchimp_groups_ui_tmpl( $check = false ){ ob_start(); ?> <div class="" id="cf-mailchimp-list_groups_{{_id}}_cf-mailchimp-wrap"> <h3> <?php esc_html_e('Interest Groups', 'cf-mailchimp'); ?> </h3> {{#if groups}} {{#each groups}} <fieldset> {{#mc_group_parent @key this }} <legend>{{@this}}</legend> {{else}} <div class="caldera-config-group"> <label for="cf-mailchimp-list_groups_{{../../_id}}_{{@key}}"> {{this}} </label> <input type="checkbox" value="{{@key}}" id="cf-mailchimp-list_group_{{../../_id}}_{{@key}}" name="config[processors][{{../../_id}}][config][groups][]" data-group-id="{{this}}" class="cf-mc-group-{{../../_id}}" <?php if( $check ) : echo 'checked'; endif; ?> > </div> {{/mc_group_parent}} </fieldset> {{/each}} {{else}} <?php esc_html_e( 'No Groups Found', 'cf-mailchimp' ); ?> {{/if}} </div> <?php return ob_get_clean(); } /** * Extra editor JS * * @since 1.4.0 */ add_action( 'caldera_forms_edit_end', function(){ ?> <script> /** * Special handlebars helper for Caldera Forms MailChimp groups UI * * @since 1.4.0 */ Handlebars.registerHelper('mc_group_parent', function(a, b, opts) { if( 'string' != typeof a ){ return opts.inverse(this); } var type, _type, options = [ 'dropdown', 'checkboxes', 'radio' ]; options.forEach( function(p){ _type = a.substring( 0,p.length ); if( -1 != options.indexOf( _type ) ){ type = _type; } }); if( type ) { return opts.fn(this); } else { return opts.inverse(this); } }); /** * On processor entry refresh group UI if needed * * @since 1.4.0 */ jQuery(document).ready(function($){ $( '.processor_type_mailchimp a' ).on( 'click', function (e) { var $btn = $( e.currentTarget.hash + '-get-groups' ); //if already init or doesn't have API key, stop if( true != $btn.data( 'mc-group-init' ) && $btn.data( 'apikey' ) ){ cfMailChimpUpdateGroups(e, $btn); } }); }); </script> <script type="text/html" id="cf-mailchimp-groups-tmpl"> <?php echo cf_mailchimp_groups_ui_tmpl(); ?> </script> <?php });
| ver. 1.4 |
Github
|
.
| PHP 7.2.34 | Генерация страницы: 0.06 |
proxy
|
phpinfo
|
Настройка