'gravity', 'title' => 'Gravity Forms', ); // info public function info($key = false) { if ($key && isset($this->info[$key])) { return $this->info[$key]; } else { return array( $this->info['key'] => $this->info['title'], ); } } // active public function active() { if (defined('E2PDF_GRAVITY_EXTENSION') || $this->helper->load('extension')->is_plugin_active('gravityforms/gravityforms.php')) { return true; } return false; } // set public function set($key, $value) { if (!isset($this->options)) { $this->options = new stdClass(); } $this->options->$key = $value; switch ($key) { case 'item': $this->set('cached_form', false); if ($this->get('item') && class_exists('GFFormsModel')) { $this->set('cached_form', GFFormsModel::get_form_meta($this->get('item'))); } break; case 'dataset': $this->set('cached_entry', array()); if ($this->get('dataset') && class_exists('GFFormsModel')) { $entry = GFFormsModel::get_entry($this->get('dataset')); if ($entry && !is_wp_error($entry) && isset($entry['form_id'])) { $this->set('cached_entry', $entry); } } break; default: break; } return true; } // get public function get($key) { if (isset($this->options->$key)) { $value = $this->options->$key; } else { switch ($key) { case 'args': $value = array(); break; default: $value = false; break; } } return $value; } // items public function items() { $items = array(); if (class_exists('GFFormsModel')) { $forms = GFFormsModel::get_forms(null, 'title'); if ($forms) { foreach ($forms as $key => $form) { $items[] = $this->item($form->id); } } } return $items; } // datasets public function datasets($item_id = false, $name = false) { $item_id = (int) $item_id; $datasets = array(); if (class_exists('GFAPI') && $item_id) { $paging = array( 'offset' => 0, 'page_size' => 9999999, ); $entries = GFAPI::get_entries($item_id, array(), array(), $paging); if ($entries) { $this->set('item', $item_id); foreach ($entries as $key => $entry) { $this->set('dataset', $entry['id']); $entry_title = $this->render($name); if (!$entry_title) { $entry_title = $entry['id']; } $datasets[] = array( 'key' => $entry['id'], 'value' => $entry_title, ); } } } return $datasets; } // dataset actions public function get_dataset_actions($dataset_id = false) { $dataset_id = (int) $dataset_id; if (!$dataset_id) { return false; } $entry = GFFormsModel::get_entry($dataset_id); $item = $entry && !is_wp_error($entry) && is_array($entry) && isset($entry['form_id']) ? $entry['form_id'] : '0'; $actions = new stdClass(); $actions->view = $this->helper->get_url( array( 'page' => 'gf_entries', 'view' => 'entry', 'id' => $item, 'lid' => $dataset_id, ) ); $actions->delete = false; return $actions; } // template actions public function get_template_actions($template = false) { $template = (int) $template; if (!$template) { return; } $actions = new stdClass(); $actions->delete = false; return $actions; } // item public function item($item_id = false) { $item_id = (int) $item_id; if (!$item_id && $this->get('item')) { $item_id = $this->get('item'); } $form = false; if (class_exists('GFFormsModel')) { $form = GFFormsModel::get_form_meta($item_id); } $item = new stdClass(); if ($form) { $item->id = (string) $item_id; $item->url = $this->helper->get_url( array( 'page' => 'gf_edit_forms', 'id' => $item_id, ) ); $item->name = $form['title']; } else { $item->id = ''; $item->url = ''; $item->name = ''; } return $item; } // render public function render($value, $field = array(), $convert_shortcodes = true, $raw = false) { $value = $this->render_shortcodes($value, $field); if (!$raw) { $value = $this->strip_shortcodes($value); $value = $this->convert_shortcodes($value, $convert_shortcodes, isset($field['type']) && $field['type'] == 'e2pdf-html' ? true : false); $value = $this->helper->load('field')->render_checkbox($value, $this, $field); } return $value; } // load actions public function load_actions() { add_action('gform_after_email', array($this, 'action_gform_after_email'), 30); add_action('gform_after_update_entry', array($this, 'action_gform_after_update_entry'), 0, 2); // hooks add_action('gform_entries_first_column_actions', array($this, 'hook_gravity_row_actions'), 10, 4); } // load filters public function load_filters() { add_filter('gform_confirmation', array($this, 'filter_gform_confirmation'), 30, 4); add_filter('gform_notification', array($this, 'filter_gform_notification'), 30, 3); add_filter('gform_twilio_message', array($this, 'filter_gform_twilio_message'), 30, 4); add_filter('gform_entry_post_save', array($this, 'filter_gform_entry_post_save'), 0, 2); add_filter('gform_entry_field_value', array($this, 'filter_gform_entry_field_value'), 10, 4); add_filter('gform_merge_tag_filter', array($this, 'filter_gform_merge_tag_filter'), 10, 5); add_filter('gform_entries_field_value', array($this, 'filter_gform_entries_field_value'), 10, 4); /* Hooks */ add_filter('gform_entry_detail_meta_boxes', array($this, 'hook_gravity_entry_view'), 10, 3); } // render shortcodes public function render_shortcodes($value, $field = array()) { $element_id = isset($field['element_id']) ? $field['element_id'] : false; if ($this->verify()) { if (false !== strpos($value, '[')) { $value = $this->helper->load('field')->pre_shortcodes($value, $this, $field); $value = $this->helper->load('field')->inner_shortcodes($value, $this, $field); $value = $this->helper->load('field')->wrapper_shortcodes($value, $this, $field); } $gv_request = false; if (false !== strpos($value, '[gravityview') && function_exists('gravityview') && gravityview()->request->is_admin()) { $gv_request = gravityview()->request; gravityview()->request = new GV\Frontend_Request(); } $value = $this->helper->load('field')->do_shortcodes($value, $this, $field); if ($gv_request !== false) { gravityview()->request = $gv_request; } if (class_exists('GFCommon') && $this->get('cached_form') && $this->get('cached_entry')) { add_filter('gp_template_paths', array($this, 'filter_gp_template_paths'), 30, 2); add_filter('gform_merge_tag_filter', array($this, 'filter_gform_merge_tag_filter_tags'), 30, 5); add_filter('gform_display_product_summary', '__return_false', 30); $value = GFCommon::replace_variables($value, $this->get('cached_form'), $this->get('cached_entry'), false, false, false, 'text'); remove_filter('gform_display_product_summary', '__return_false', 30); remove_filter('gform_merge_tag_filter', array($this, 'filter_gform_merge_tag_filter_tags'), 30, 5); remove_filter('gp_template_paths', array($this, 'filter_gp_template_paths'), 30, 2); } $value = $this->helper->load('field')->render( apply_filters('e2pdf_extension_render_shortcodes_pre_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false), $this, $field ); } return apply_filters( 'e2pdf_extension_render_shortcodes_value', $value, $element_id, $this->get('template_id'), $this->get('item'), $this->get('dataset'), false, false ); } // strip shortcodes public function strip_shortcodes($value) { $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value); $value = preg_replace('~a\:\d+\:{[^}]*}(*SKIP)(*FAIL)|{[^}]*}~', '', $value); return $value; } // strip math public function strip_math($value, &$replacements) { if ($value) { preg_match_all('/\{[^}]+\}/', $value, $matches); foreach ($matches[0] as $match) { $index = count($replacements) + 1; $replacements[] = $match; $value = str_replace($match, '%' . $index . '$s', $value); } } return $value; } // convert shortcodes public function convert_shortcodes($value, $to = false, $html = false) { if ($value) { if ($to) { $search = array('[', ']', '[', ']'); $replace = array('[', ']', '[', ']'); $value = str_replace($search, $replace, $value); if (!$html) { $value = wp_specialchars_decode($value, ENT_QUOTES); } } else { $search = array('[', ']', '[', ']'); $replace = array('[', ']', '[', ']'); $value = str_replace($search, $replace, $value); } } return $value; } // auto public function auto() { $item = $this->get('item'); $response = array(); $elements = array(); $merged_tags = array(); $form = false; if (class_exists('GFFormsModel')) { $form = GFFormsModel::get_form_meta($item); } if ($form) { if (class_exists('GFCommon')) { foreach ($form['fields'] as $field) { $merged_tags = $this->get_field_merge_tags($merged_tags, $field); } } foreach ($form['fields'] as $field) { if ($this->get('nested') && !in_array($field->id, $this->get('nested_fields'), false)) { continue; } if ($field->type == 'product' || $field->type == 'shipping' || $field->type == 'option') { if ($field->inputType == 'select') { $field->type = 'select'; } elseif ($field->inputType == 'radio') { $field->type = 'radio'; } elseif ($field->inputType == 'checkbox') { $field->type = 'checkbox'; } elseif ($field->inputType == 'price') { $field->type = 'text'; } } if ($field->type == 'survey') { if ($field->inputType == 'rating') { $field->type = 'radio'; foreach ($field->choices as $key => $choice) { $field->choices[$key]['value'] = $choice['text']; } } elseif ($field->inputType == 'select') { $field->type = 'select'; $field->enableChoiceValue = false; foreach ($field->choices as $key => $choice) { $field->choices[$key]['value'] = $choice['text']; } } elseif ($field->inputType == 'rank') { $field->type = 'textarea'; } else { $field->type = $field->inputType; } } switch ($field->type) { case 'repeater': $value = isset($field->label) ? $field->label : ''; $value .= isset($field->id) ? ':' . $field->id : ''; if ($value) { if (!empty($field->fields)) { foreach ($field->fields as $sub_field) { $sub_value = isset($sub_field->label) ? $sub_field->label : ''; $sub_value .= isset($field->id) ? ':' . $field->id : ''; if ($sub_value) { $sub_field->id = $sub_field->id; $elements = $this->auto_fields($elements, $sub_field, $merged_tags, $item); } } } } break; default: $elements = $this->auto_fields($elements, $field, $merged_tags, $item); break; } } } $response['page'] = array( 'bottom' => '20', 'top' => '20', 'left' => '20', 'right' => '20', ); $response['elements'] = $elements; return $response; } // auto fields public function auto_fields($elements, $field, $merged_tags, $item) { switch ($field->type) { case 'text': case 'number': case 'date': case 'time': case 'phone': case 'website': case 'email': case 'post_title': case 'post_excerpt': case 'post_tags': case 'post_custom_field': case 'quantity': case 'shipping': case 'total': $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . '],index[0]}'; } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, 'pass' => $field->enablePasswordInput ? '1' : '0', ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value, ), ) ); break; case 'list': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); if ($field->enableColumns) { $width = number_format(floor((100 / count($field->choices)) * 100) / 100, 2); foreach ($field->choices as $key => $choice) { $field_id = (int) $key + 1; $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . ':1_' . $field_id . '],index[0]}'; } } else { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . '1_' . $field_id . '}'; } } $float = true; if ($key == '0') { $float = false; } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'float' => $float, 'properties' => array( 'top' => '5', 'left' => '20', 'right' => '20', 'width' => $width . '%', 'height' => 'auto', 'value' => $choice['text'], ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value, ), ) ); } } else { $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . ':1],index[0]}'; } } else { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . '1}'; } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value, ), ) ); } break; case 'fileupload': case 'textarea': case 'post_content': $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . '],index[0]}'; } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-textarea', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value, ), ) ); break; case 'select': case 'multiselect': case 'post_category': case 'option': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); $options_tmp = array(); if (isset($field->choices) && is_array($field->choices)) { foreach ($field->choices as $opt_key => $option) { $options_tmp[] = isset($option['value']) ? $option['value'] : ''; } } $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':value,filter[' . $field->id . '],index[0]}'; } } else { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . '],index[0]}'; } } } else { if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-select', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'options' => implode("\n", $options_tmp), 'value' => $value, 'height' => $field->type == 'multiselect' ? '80' : 'auto', 'multiline' => $field->type == 'multiselect' ? '1' : '0', ), ) ); break; case 'checkbox': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); if (isset($field->choices) && is_array($field->choices)) { $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':value,filter[' . $field->id . '],index[0]}'; } } else { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . '],index[0]}'; } } } else { if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } } foreach ($field->choices as $opt_key => $option) { $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-checkbox', 'properties' => array( 'top' => '5', 'width' => 'auto', 'height' => 'auto', 'value' => $value, 'option' => isset($option['value']) ? $option['value'] : '', ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'float' => true, 'properties' => array( 'left' => '5', 'width' => '100%', 'height' => 'auto', 'value' => isset($option['text']) ? $option['text'] : '', ), ) ); } } break; case 'radio': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); if (isset($field->choices) && is_array($field->choices)) { $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':value,filter[' . $field->id . '],index[0]}'; } } else { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . '],index[0]}'; } } } else { if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } } $choices = array(); foreach ($field->choices as $opt_key => $option) { if (!$value && isset($field->inputs) && isset($field->inputs[$opt_key]['id'])) { $value = isset($merged_tags[$field->inputs[$opt_key]['id']]) ? $merged_tags[$field->inputs[$opt_key]['id']] : ''; if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } } if (isset($option['value'])) { $choices[] = $option['value']; } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-radio', 'properties' => array( 'top' => '5', 'width' => 'auto', 'height' => 'auto', 'value' => $value, 'option' => isset($option['value']) ? $option['value'] : '', 'group' => $value, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'float' => true, 'properties' => array( 'left' => '5', 'width' => '100%', 'height' => 'auto', 'value' => isset($option['text']) ? $option['text'] : '', ), ) ); } //other choice if ($field->enableOtherChoice) { $actions_radio = array(); $actions_input = array(); if (!empty($choices)) { $conditions = array(); $conditions[1] = array( 'condition' => '!=', 'if' => $value, 'value' => '', ); foreach ($choices as $choice) { $conditions[] = array( 'condition' => '!=', 'if' => $value, 'value' => $choice, ); } $actions_radio = array( '0' => array( 'order' => '0', 'action' => 'change', 'apply' => 'all', 'change' => 'gf_other_choice', 'property' => 'value', 'conditions' => $conditions, ), ); $actions_input = array( '0' => array( 'order' => '0', 'action' => 'change', 'apply' => 'all', 'change' => $value, 'property' => 'value', 'conditions' => $conditions, ), ); } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-radio', 'properties' => array( 'top' => '5', 'width' => 'auto', 'height' => 'auto', 'value' => $value, 'option' => 'gf_other_choice', 'group' => $value, ), 'actions' => $actions_radio, ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-input', 'float' => true, 'properties' => array( 'left' => '5', 'width' => '100%', 'height' => 'auto', 'value' => '', ), 'actions' => $actions_input, ) ); } } break; case 'name': foreach ($field['inputs'] as $key => $input) { if (isset($input->isHidden) && $input->isHidden) { unset($field['inputs'][$key]); } } $width = '100%'; if (count($field['inputs']) == '3') { $width = '33.3%'; } else { $width = 100 / count($field['inputs']) . '%'; } foreach ($field['inputs'] as $key => $sub_field) { $elements[] = $this->auto_field( $sub_field, array( 'type' => 'e2pdf-html', 'block' => true, 'float' => $key == '0' ? false : true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => $width, 'height' => 'auto', 'value' => isset($sub_field['label']) && $sub_field['label'] ? $sub_field['label'] : '', ), ) ); $value = isset($merged_tags[$sub_field['id']]) ? $merged_tags[$sub_field['id']] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $sub_field['id'] . '],index[0]}'; } } if (isset($sub_field['choices']) && is_array($sub_field['choices'])) { $options_tmp = array(); foreach ($sub_field['choices'] as $opt_key => $option) { $options_tmp[] = isset($option['value']) ? $option['value'] : ''; } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-select', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'options' => implode("\n", $options_tmp), 'value' => $value, 'height' => 'auto', 'multiline' => '0', ), ) ); } else { $elements[] = $this->auto_field( $sub_field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value, ), ) ); } } break; case 'address': $index = 0; foreach ($field['inputs'] as $key => $sub_field) { if (isset($sub_field['isHidden']) && $sub_field['isHidden']) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf } else { $value = isset($merged_tags[$sub_field['id']]) ? $merged_tags[$sub_field['id']] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $sub_field['id'] . '],index[0]}'; } } $elements[] = $this->auto_field( $sub_field, array( 'type' => 'e2pdf-html', 'block' => true, 'float' => $index == '0' ? false : true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => $key == '0' || $key == '1' ? '100%' : '50%', 'height' => 'auto', 'value' => isset($sub_field['label']) && $sub_field['label'] ? $sub_field['label'] : '', ), ) ); $elements[] = $this->auto_field( $sub_field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value, ), ) ); $index++; } } break; case 'consent': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); $value = isset($merged_tags[$field->id . '.1']) ? $merged_tags[$field->id . '.1'] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . '.1],index[0]}'; } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-checkbox', 'properties' => array( 'top' => '5', 'width' => 'auto', 'height' => 'auto', 'value' => $value, 'option' => '1', ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'float' => true, 'properties' => array( 'left' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $field->checkboxLabel, ), ) ); break; case 'post_image': $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . '],index[0]}'; } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-image', 'properties' => array( 'top' => '5', 'width' => '100', 'height' => '100', 'value' => $value, 'dimension' => '1', ), ) ); if ($field->displayTitle) { $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':title,filter[' . $field->id . '],index[0]}'; } } else { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':title}'; } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => __('Title', 'gravityforms'), ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value, 'dimension' => '1', ), ) ); } if ($field->displayCaption) { $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':caption,filter[' . $field->id . '],index[0]}'; } } else { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':caption}'; } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => __('Caption', 'gravityforms'), ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value, 'dimension' => '1', ), ) ); } if ($field->displayDescription) { $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':description,filter[' . $field->id . '],index[0]}'; } } else { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':description}'; } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => __('Description', 'gravityforms'), ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value && substr($value, -1) == '}' ? substr($value, 0, -1) . ':description}' : '', 'dimension' => '1', ), ) ); } break; case 'html': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->content, ), ) ); break; case 'product': if ($field->inputType != 'hiddenproduct') { $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); if ($field->inputType == 'singleproduct' || $field->inputType == 'calculation') { if ($field->disableQuantity) { $width = '50%'; } else { $width = '33.3%'; } foreach ($field['inputs'] as $key => $sub_field) { if ($field->disableQuantity && $key == '2') { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf } else { $value = isset($merged_tags[$sub_field['id']]) ? $merged_tags[$sub_field['id']] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $sub_field['id'] . '],index[0]}'; } } $elements[] = $this->auto_field( $sub_field, array( 'type' => 'e2pdf-html', 'block' => true, 'float' => $key == '0' ? false : true, 'properties' => array( 'top' => '5', 'left' => '20', 'right' => '20', 'width' => $width, 'height' => 'auto', 'value' => isset($sub_field['label']) && $sub_field['label'] ? $sub_field['label'] : '', ), ) ); $elements[] = $this->auto_field( $sub_field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $value, ), ) ); } } } } break; case 'signature': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field->id . '],index[0]}'; } } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-signature', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => '150', 'dimension' => '1', 'block_dimension' => '1', 'value' => $value, ), ) ); break; case 'form': if (isset($field->gpnfForm) && $field->gpnfForm) { $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($value) { $this->set('item', $field->gpnfForm); $this->set('nested', $value); $nested_fields = array(); if (isset($field->gpnfFields) && is_array($field->gpnfFields)) { $nested_fields = $field->gpnfFields; } $this->set('nested_fields', $nested_fields); $nested_form = $this->auto(); if (!empty($nested_form['elements'])) { $elements = array_merge($elements, $nested_form['elements']); } $this->set('item', $item); $this->set('nested', ''); } } break; case 'likert': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $field->label, ), ) ); if (isset($field->gsurveyLikertEnableMultipleRows) && $field->gsurveyLikertEnableMultipleRows) { foreach ($field['inputs'] as $key => $sub_field) { $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '5', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $sub_field['label'], ), ) ); if (isset($field->choices) && is_array($field->choices)) { $value = isset($merged_tags[$sub_field['id']]) ? $merged_tags[$sub_field['id']] : ''; if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } $choices = array(); foreach ($field->choices as $opt_key => $option) { if (!$value && isset($field->inputs) && isset($field->inputs[$opt_key]['id'])) { $value = isset($merged_tags[$field->inputs[$opt_key]['id']]) ? $merged_tags[$field->inputs[$opt_key]['id']] : ''; if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } } if (isset($option['value'])) { $choices[] = $option['value']; } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-radio', 'properties' => array( 'top' => '5', 'width' => 'auto', 'height' => 'auto', 'value' => $value, 'option' => isset($option['text']) ? $option['text'] : '', 'group' => $value, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'float' => true, 'properties' => array( 'left' => '5', 'width' => '100%', 'height' => 'auto', 'value' => isset($option['text']) ? $option['text'] : '', ), ) ); } } } } else { if (isset($field->choices) && is_array($field->choices)) { $value = isset($merged_tags[$field->id]) ? $merged_tags[$field->id] : ''; if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } $choices = array(); foreach ($field->choices as $opt_key => $option) { if (!$value && isset($field->inputs) && isset($field->inputs[$opt_key]['id'])) { $value = isset($merged_tags[$field->inputs[$opt_key]['id']]) ? $merged_tags[$field->inputs[$opt_key]['id']] : ''; if ($field->enableChoiceValue && $value) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } } if (isset($option['value'])) { $choices[] = $option['value']; } $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-radio', 'properties' => array( 'top' => '5', 'width' => 'auto', 'height' => 'auto', 'value' => $value, 'option' => isset($option['text']) ? $option['text'] : '', 'group' => $value, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'float' => true, 'properties' => array( 'left' => '5', 'width' => '100%', 'height' => 'auto', 'value' => isset($option['text']) ? $option['text'] : '', ), ) ); } } } break; case 'repeater': $value = isset($field->label) ? $field->label : ''; $value .= isset($field->id) ? ':' . $field->id : ''; if ($value) { if (!empty($field->fields)) { foreach ($field->fields as $sub_field) { $sub_value = isset($sub_field->label) ? $sub_field->label : ''; $sub_value .= isset($field->id) ? ':' . $field->id : ''; if ($sub_value) { $sub_field->id = $sub_field->id; $elements = $this->auto_fields($elements, $sub_field, $merged_tags, $item); } } } } break; default: break; } return $elements; } // auto field public function auto_field($field = false, $element = array()) { if (!$field) { return false; } if (!isset($element['block'])) { $element['block'] = false; } if (!isset($element['float'])) { $element['float'] = false; } return $element; } // verify public function verify() { if ($this->get('cached_form') && $this->get('cached_entry')) { if ($this->get('cached_entry')['form_id'] == $this->get('item')) { return true; } } return false; } // auto form public function auto_form($template, $data = array()) { if ($template->get('ID')) { $auto_form_label = isset($data['auto_form_label']) && $data['auto_form_label'] ? $data['auto_form_label'] : false; $auto_form_shortcode = isset($data['auto_form_shortcode']) ? true : false; if (class_exists('GFAPI')) { $confirmation_id = uniqid(); $form = array( 'title' => $template->get('title'), 'fields' => array( ), 'confirmations' => array(), ); $form['confirmations'][$confirmation_id] = array( 'id' => $confirmation_id, 'name' => __('Default Confirmation', 'gravityforms'), 'isDefault' => true, 'type' => 'message', /* translators: %d: E2Pdf Template ID */ 'message' => sprintf(__('Thanks for contacting us! We will get in touch with you shortly. [e2pdf-download id="%d"]', 'e2pdf'), $template->get('ID')), 'url' => '', 'pageId' => '', 'queryString' => '', ); $pages = $template->get('pages'); $checkboxes = array(); $radios = array(); $field_id = 1; foreach ($pages as $page_key => $page) { if (isset($page['elements']) && !empty($page['elements'])) { foreach ($page['elements'] as $element_key => $element) { $type = false; $labels = array(); $label = ''; if ($auto_form_shortcode) { $labels[] = $field_id; } if ($auto_form_label && $auto_form_label == 'value' && isset($element['value']) && $element['value']) { $labels[] = $element['value']; } elseif ($auto_form_label && $auto_form_label == 'name' && isset($element['name']) && $element['name']) { $labels[] = $element['name']; } if ($element['type'] == 'e2pdf-input' || $element['type'] == 'e2pdf-signature') { $type = 'text'; $label = !empty($labels) ? implode(' ', $labels) : 'Text'; } elseif ($element['type'] == 'e2pdf-textarea') { $type = 'textarea'; $label = !empty($labels) ? implode(' ', $labels) : 'Textarea'; } elseif ($element['type'] == 'e2pdf-select') { $type = 'select'; $label = !empty($labels) ? implode(' ', $labels) : 'Select'; $choices = array(); $field_options = array(); if (isset($element['properties']['options'])) { $field_options = explode("\n", $element['properties']['options']); foreach ($field_options as $option) { $choices[] = array( 'text' => $option, 'value' => $option, ); } } } elseif ($element['type'] == 'e2pdf-checkbox') { $field_key = array_search($element['name'], array_column($checkboxes, 'name'), false); if ($field_key !== false) { $checkbox = array_search($checkboxes[$field_key]['id'], array_column($form['fields'], 'id'), false); if ($checkbox !== false) { $form['fields'][$checkbox]['choices'][] = array( 'text' => $element['properties']['option'], 'value' => $element['properties']['option'], ); $num = count($form['fields'][$checkbox]['inputs']) + 1; $form['fields'][$checkbox]['inputs'][] = array( 'id' => $field_id . '.' . $num, 'label' => $element['properties']['option'], ); $pages[$page_key]['elements'][$element_key]['value'] = '{' . $form['fields'][$checkbox]['label'] . ':' . $form['fields'][$checkbox]['id'] . '}'; } } else { $label = !empty($labels) ? implode(' ', $labels) : 'Checkbox'; $type = 'checkbox'; $checkboxes[] = array( 'id' => $field_id, 'name' => $element['name'], ); $choices = array( array( 'text' => $element['properties']['option'], 'value' => $element['properties']['option'], ), ); $inputs = array( array( 'id' => $field_id . '.1', 'label' => $element['properties']['option'], ), ); } } elseif ($element['type'] == 'e2pdf-radio') { if (isset($element['properties']['group']) && $element['properties']['group']) { $element['name'] = $element['properties']['group']; } else { $element['name'] = $element['element_id']; } $field_key = array_search($element['name'], array_column($radios, 'name'), false); if ($field_key !== false) { $radio = array_search($radios[$field_key]['id'], array_column($form['fields'], 'id'), false); if ($radio !== false) { $form['fields'][$radio]['choices'][] = array( 'text' => $element['properties']['option'], 'value' => $element['properties']['option'], ); $pages[$page_key]['elements'][$element_key]['value'] = '{' . $form['fields'][$radio]['label'] . ':' . $form['fields'][$radio]['id'] . '}'; } } else { $label = !empty($labels) ? implode(' ', $labels) : 'Radio'; $type = 'radio'; $radios[] = array( 'id' => $field_id, 'name' => $element['name'], ); $choices = array( array( 'text' => $element['properties']['option'], 'value' => $element['properties']['option'], ), ); } } if ($type) { $field = array( 'id' => $field_id, 'type' => $type, 'label' => $label, ); if ($type == 'select' || $type == 'radio' || $type == 'checkbox') { $field['choices'] = $choices; } if ($type == 'checkbox') { $field['inputs'] = $inputs; } $form['fields'][] = $field; $pages[$page_key]['elements'][$element_key]['value'] = '{' . $label . ':' . $field_id . '}'; if (isset($element['properties']['esig'])) { unset($pages[$page_key]['elements'][$element_key]['properties']['esig']); } $field_id++; } } } } $item = GFAPI::add_form($form); if (!is_wp_error($item)) { $template->set('item', $item); $template->set('pages', $pages); } } } return $template; } // visual mapper public function visual_mapper() { $item = $this->get('item'); $html = ''; $source = ''; if ($item && function_exists('gravity_form')) { ob_start(); $form = false; if (class_exists('GFFormsModel')) { $form = GFFormsModel::get_form_meta($item); } if ($form) { add_filter('gform_pre_render', array($this, 'filter_gform_pre_render'), 30); $source = gravity_form($item, true, true, false, null, false, 0, false); remove_filter('gform_pre_render', array($this, 'filter_gform_pre_render'), 30); if ($source) { $dom = new DOMDocument(); if ($this->get('nested')) { $source = str_replace(array(''), array(''), $source); } else { $source = '
' . $source . '
'; } $html = $this->helper->load('convert')->load_html($source, $dom, true); } } if (ob_get_length() > 0) { while (@ob_end_clean()); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged } if (!$source) { return '
' . __("The form source is empty or doesn't exist", 'e2pdf') . '
'; } elseif (!$html) { return '
' . __('The form could not be parsed due the incorrect HTML', 'e2pdf') . '
'; } else { $merged_tags = array(); if (class_exists('GFCommon')) { foreach ($form['fields'] as $field) { $merged_tags = $this->get_field_merge_tags($merged_tags, $field); } } $xml = new Helper_E2pdf_Xml(); $xpath = new DomXPath($dom); // remove by class $remove_by_class = array( 'gf_progressbar_wrapper', 'gform_previous_button', 'gform_next_button', 'gform_button button', 'gform_save_link', 'gfield--type-captcha', ); if ($this->get('nested')) { $remove_by_class[] = 'gform_heading'; } foreach ($remove_by_class as $key => $class) { $elements = $xpath->query("//*[contains(@class, '{$class}')]"); foreach ($elements as $element) { $element->parentNode->removeChild($element); } } // display:none fix in case fields with conditional logic $gform_wrappers = array( 'gform_wrapper', ); foreach ($gform_wrappers as $key => $class) { $elements = $xpath->query("//*[contains(@class, '{$class}')]"); foreach ($elements as $element) { if ($element->hasAttribute('style')) { $element->removeAttribute('style'); } } } // remove by tag $remove_by_tag = array( 'script', ); foreach ($remove_by_tag as $key => $tag) { $elements = $xpath->query('//' . $tag); foreach ($elements as $element) { $element->parentNode->removeChild($element); } } // remove by name $remove_by_name = array( 'gform_field_values', 'gform_uploaded_files', 'MAX_FILE_SIZE', 'is_submit_' . $item, 'gform_submit', 'gform_unique_id', 'state_' . $item, 'gform_target_page_number_' . $item, 'gform_source_page_number_' . $item, ); foreach ($remove_by_name as $key => $name) { $elements = $xpath->query('//*[@name="' . $name . '"]'); foreach ($elements as $element) { $element->parentNode->removeChild($element); } } // replace nested forms $elements = $xpath->query("//*[contains(@class, 'gpnf-nested-entries-container')]"); foreach ($elements as $element) { $button = $xpath->query('./*[@data-nestedformid]', $element)->item(0); $field = $xpath->query("following-sibling::input[@type='hidden']", $element)->item(0); if ($button && $field) { $form_id = $xml->get_node_value($button, 'data-nestedformid'); if ($form_id) { $this->set('item', $form_id); } if ($field->attributes->getNamedItem('name')) { $field_id = preg_replace('/input_([^\[]+)(?:.*)/', '${1}', $xml->get_node_value($field, 'name')); if ($field_id) { $value = isset($merged_tags[$field_id]) ? $merged_tags[$field_id] : ''; if (isset($merged_tags[$field_id])) { $this->set('nested', $value); } } } $nested_form = $this->visual_mapper(); if ($nested_form) { $element->parentNode->replaceChild($dom->importNode($nested_form->documentElement, true), $element); } $this->set('item', $item); $this->set('nested', ''); } } // replace time fields $elements = $xpath->query("//*[contains(@class, 'gfield_time_hour')]"); foreach ($elements as $element) { $sub_elements = $xpath->query('.//*[self::input or self::select]', $element->parentNode); foreach ($sub_elements as $sub_element) { $xml->set_node_value($sub_element, 'class', $xml->get_node_value($sub_element, 'class') . ' e2pdf-no-vm'); } $xml->set_node_value($element, 'class', $xml->get_node_value($element->parentNode, 'class') . ' e2pdf-vm-rel-field', true); $input = $xpath->query('./input', $element)->item(0); $field = $dom->createElement('input'); $xml->set_node_value($field, 'type', 'text'); $xml->set_node_value($field, 'class', 'e2pdf-vm-abs-field'); $xml->set_node_value($field, 'name', $xml->get_node_value($input, 'name')); $element->parentNode->appendChild($field); } // replace multiupload field $elements = $xpath->query("//*[contains(@class, 'gform_drop_area')]"); foreach ($elements as $element) { $xml->set_node_value($element, 'class', $xml->get_node_value($element, 'class') . ' e2pdf-vm-rel-field'); $field_id = preg_replace('/(?:.*)_([\d]+)/', '${1}', $xml->get_node_value($element, 'id')); $field = $dom->createElement('input'); $xml->set_node_value($field, 'type', 'text'); $xml->set_node_value($field, 'class', 'e2pdf-vm-abs-field'); $xml->set_node_value($field, 'name', 'input_' . $field_id); $element->appendChild($field); } // hidden fields $elements = $xpath->query("//*[contains(@class, 'gfield--input-type-hidden')]"); foreach ($elements as $element) { $xml->set_node_value($element, 'class', str_replace('gform_hidden', '', $xml->get_node_value($element, 'class'))); $inputs = $xpath->query('.//input', $element); foreach ($inputs as $key => $sub_element) { $xml->set_node_value($sub_element, 'class', str_replace('gform_hidden', '', $xml->get_node_value($sub_element, 'class'))); } } // signature $elements = $xpath->query("//*[contains(@class, 'gfield_signature_container') and contains(@class, 'ginput_container')]"); foreach ($elements as $element) { $xml->set_node_value($element, 'class', $xml->get_node_value($element, 'class') . ' e2pdf-vm-rel-field'); $signature = $xpath->query('.//parent::*/input', $element); if ($signature->item(0)) { $field = $signature->item(0); $xml->set_node_value($field, 'type', 'text'); $xml->set_node_value($field, 'class', 'e2pdf-vm-abs-field'); $element->appendChild($field); } } // replace single product $elements = $xpath->query("//*[contains(@class, 'ginput_container_singleproduct') or contains(@class, 'ginput_container_product_calculation') or contains(@class, 'ginput_container_singleshipping') or contains(@class, 'ginput_container_total')]"); foreach ($elements as $element) { $spans = $xpath->query('.//span', $element); foreach ($spans as $key => $sub_element) { $sub_element->parentNode->removeChild($sub_element); } $inputs = $xpath->query('.//input', $element); foreach ($inputs as $key => $sub_element) { $xml->set_node_value($sub_element, 'type', 'text'); $xml->set_node_value($sub_element, 'class', ''); } } $fields = $this->get_form_fields(array(), $form['fields']); $elements = $xpath->query("//*[contains(@class, 'gsurvey-likert-choice')]"); foreach ($elements as $element) { $label = $xml->get_node_value($element, 'data-label'); $sub_element = $xpath->query('.//input', $element)->item(0); if ($label && $sub_element) { $xml->set_node_value($sub_element, 'value', $label); } } $elements = $xpath->query("//*[contains(@class, 'gsurvey-rating')]"); foreach ($elements as $element) { $inputs = $xpath->query('.//input', $element); foreach ($inputs as $key => $sub_element) { $label = $xpath->query('.//following-sibling::label[1]', $sub_element)->item(0); if ($label) { $title = $xml->get_node_value($label, 'title'); $xml->set_node_value($sub_element, 'value', $title); } } } $elements = $xpath->query("//*[contains(@class, 'gsurvey-survey-field')]//select"); foreach ($elements as $element) { $inputs = $xpath->query('.//option', $element); foreach ($inputs as $key => $sub_element) { $label = $sub_element->nodeValue; if ($label) { $xml->set_node_value($sub_element, 'value', $label); } } } $elements = $xpath->query("//*[contains(@class, 'ginput_container_rank')]//input"); foreach ($elements as $element) { $xml->set_node_value($element, 'type', 'text'); } // replace by types $replace_by_types = array( '//input', '//textarea', '//select', ); foreach ($replace_by_types as $replace_by_type) { $inputs = $xpath->query($replace_by_type); foreach ($inputs as $element) { if ($element->attributes->getNamedItem('name')) { $field_id = false; $field = false; $sub_field_id = preg_replace('/input_([^\[]+)(?:.*)/', '${1}', $xml->get_node_value($element, 'name')); if ($sub_field_id) { if (substr($sub_field_id, -6) == '_valid') { $field_id = preg_replace('/(?:.*)\_([\d]+)\_valid/', '${1}', $sub_field_id); } elseif (substr($sub_field_id, -5) == '_data') { $field_id = preg_replace('/(?:.*)\_([\d]+)\_data/', '${1}', $sub_field_id); } else { $field_id = preg_replace('/([\d]+)\.(?:.*)/', '${1}', $sub_field_id); } if (isset($fields[$field_id])) { $field = $fields[$field_id]; } } if ($field) { if ( $field->type == 'name' || $field->type == 'address' || ( $field->type == 'product' && $field->inputType && ($field->inputType == 'singleproduct' || $field->inputType == 'calculation') ) ) { $value = $merged_tags[$sub_field_id]; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $sub_field_id . '],index[0]}'; } } $xml->set_node_value($element, 'name', $value); } elseif ($field->type == 'consent') { $value = isset($merged_tags[$field_id . '.1']) ? $merged_tags[$field_id . '.1'] : ''; if ($this->get('nested')) { if (substr($value, -1) == '}') { $value = substr($value, 0, -1) . ':filter[' . $field_id . '.1],index[0]}'; } } $xml->set_node_value($element, 'name', $value); } elseif ($field->type == 'survey') { $value = isset($merged_tags[$sub_field_id]) ? $merged_tags[$sub_field_id] : ''; if (isset($field['inputType']) && $field['inputType'] != 'text' && $field['inputType'] != 'textarea' && $field['inputType'] != 'select' && $field['inputType'] != 'rank') { if (isset($field['enableChoiceValue'])) { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } $xml->set_node_value($element, 'name', $value); } else { if (isset($merged_tags[$field_id])) { $value = $merged_tags[$field_id]; if (substr($value, -1) == '}') { if (false !== strpos($xml->get_node_value($element->parentNode, 'class'), 'ginput_post_image_')) { if (false !== strpos($xml->get_node_value($element->parentNode, 'class'), 'ginput_post_image_title')) { if ($this->get('nested')) { $value = substr($value, 0, -1) . ':title,filter[' . $field_id . '],index[0]}'; } else { $value = substr($value, 0, -1) . ':title}'; } } elseif (false !== strpos($xml->get_node_value($element->parentNode, 'class'), 'ginput_post_image_caption')) { if ($this->get('nested')) { $value = substr($value, 0, -1) . ':caption,filter[' . $field_id . '],index[0]}'; } else { $value = substr($value, 0, -1) . ':caption}'; } } elseif (false !== strpos($xml->get_node_value($element->parentNode, 'class'), 'ginput_post_image_description')) { if ($this->get('nested')) { $value = substr($value, 0, -1) . ':description,filter[' . $field_id . '],index[0]}'; } else { $value = substr($value, 0, -1) . ':description}'; } } } elseif ($field->type == 'list') { if ($field->enableColumns) { $parent_class = $xml->get_node_value($element->parentNode, 'class'); $index = 1; $td = $xpath->query("./td[contains(@class, '{$parent_class}')]/preceding-sibling::td", $element->parentNode->parentNode); if ($td && isset($td->length)) { $index = (int) $td->length + 1; } if ($this->get('nested')) { $value = substr($value, 0, -1) . ':value,filter[' . $field_id . ':1_' . $index . '],index[0]}'; } else { $value = substr($value, 0, -1) . '1_' . $index . '}'; } } else { if ($this->get('nested')) { $value = substr($value, 0, -1) . ':filter[' . $field_id . ':1],index[0]}'; } else { $value = substr($value, 0, -1) . '1}'; } } } elseif ($field->enableChoiceValue && $value) { if ($this->get('nested')) { $value = substr($value, 0, -1) . ':value,filter[' . $field_id . '],index[0]}'; } else { $value = substr($value, 0, -1) . (substr_count($value, ':') >= 2 ? ',value' : ':value') . '}'; } } else { if ($this->get('nested')) { $value = substr($value, 0, -1) . ':filter[' . $field_id . '],index[0]}'; } } } $xml->set_node_value($element, 'name', $value); } } } } } } /* Replace other choice */ $elements = $xpath->query("//*[@value='gf_other_choice']/parent::*"); foreach ($elements as $element) { $radio = $xpath->query(".//input[@type='radio']", $element)->item(0); $input = $xpath->query(".//input[@type='text']", $element)->item(0); if ($radio && $input) { $xml->set_node_value($input, 'name', $xml->get_node_value($radio, 'name')); } } if ($this->get('nested')) { return $dom; } else { if (defined('LIBXML_HTML_NOIMPLIED') && defined('LIBXML_HTML_NODEFDTD')) { return str_replace(array('', ''), '', $dom->saveHTML()); } else { return $dom->saveHTML(); } } } } return false; } // auto map public function auto_map($name = false) { $item = $this->get('item'); $merged_tags = array(); $form = false; $sub_field_id = false; if ($name) { $sub_field_id = preg_replace('/\{(?:.*)\:(.*)\:\}/', '${1}', $name); } if ($sub_field_id) { if (class_exists('GFFormsModel')) { $form = GFFormsModel::get_form_meta($item); } if ($form) { if (class_exists('GFCommon')) { foreach ($form['fields'] as $field) { $merged_tags = $this->get_field_merge_tags($merged_tags, $field); } } if (isset($merged_tags[$sub_field_id])) { return $merged_tags[$sub_field_id]; } } } return false; } // load shortcodes public function load_shortcodes() { // phpcs:ignore Squiz.WhiteSpace.SuperfluousWhitespace.EndLine } // entry field value filter public function filter_gform_entry_field_value($display_value, $field, $lead, $form) { if (isset($field->defaultValue) && (false !== strpos($field->defaultValue, '[e2pdf-download') || false !== strpos($field->defaultValue, '[e2pdf-save'))) { $display_value = wp_specialchars_decode($display_value, ENT_QUOTES); } return $display_value; } // merge tag filter public function filter_gform_merge_tag_filter($value, $merge_tag, $modifier, $field, $raw_value) { if (isset($field->defaultValue) && (false !== strpos($field->defaultValue, '[e2pdf-download') || false !== strpos($field->defaultValue, '[e2pdf-save'))) { return $raw_value; } return $value; } // entries field value filter public function filter_gform_entries_field_value($value, $form_id, $field_id, $entry) { $field = GFAPI::get_field($form_id, $field_id); if (isset($field->defaultValue) && (false !== strpos($field->defaultValue, '[e2pdf-download') || false !== strpos($field->defaultValue, '[e2pdf-save'))) { $value = wp_specialchars_decode($value, ENT_QUOTES); } return $value; } // gp template path filter public function filter_gp_template_paths($file_paths, $gp_template) { $template_dir = $gp_template->get_theme_template_dir_name(); $e2pdf_file_paths = array( -100 => trailingslashit(get_stylesheet_directory()) . $template_dir . 'e2pdf/', -99 => trailingslashit(get_template_directory()) . $template_dir . 'e2pdf/', ); $file_paths = $file_paths + $e2pdf_file_paths; return $file_paths; } // gform confirmation filter public function filter_gform_confirmation($content, $form, $entry, $ajax) { return $this->filter_content($content, isset($entry['id']) ? $entry['id'] : 0, false, 'message'); } // twilio message filter public function filter_gform_twilio_message($notification, $feed, $entry, $form) { $content = isset($notification['body']) && $notification['body'] ? $notification['body'] : ''; if (false === strpos($content, '[')) { return $notification; } $shortcode_tags = array( 'e2pdf-download', 'e2pdf-view', ); preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches); $tagnames = array_intersect($shortcode_tags, $matches[1]); if (!empty($tagnames)) { preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes); foreach ($shortcodes[0] as $key => $shortcode_value) { $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key); $atts = shortcode_parse_atts($shortcode[3]); if (!isset($atts['dataset']) && isset($atts['id'])) { $template = new Model_E2pdf_Template(); $template->load($atts['id']); if ($template->get('extension') === 'gravity') { $entry_id = $entry && isset($entry['id']) ? $entry['id'] : false; if ($entry_id) { $atts['dataset'] = $entry_id; $shortcode[3] .= ' dataset="' . $entry_id . '"'; } } } if (!isset($atts['apply'])) { $shortcode[3] .= ' apply="true"'; } if (!isset($atts['filter'])) { $shortcode[3] .= ' filter="true"'; } if ($shortcode[2] === 'e2pdf-download' || ($shortcode[2] === 'e2pdf-view' && isset($atts['output']) && $atts['output'] == 'url')) { if (class_exists('GFCommon')) { $shortcode[3] = GFCommon::replace_variables($shortcode[3], $form, $entry, false, false, false, 'text'); } $notification['body'] = str_replace($shortcode_value, do_shortcode_tag($shortcode), $notification['body']); } } } return $notification; } // gfrom post save filter public function filter_gform_entry_post_save($entry, $form) { if (isset($form['fields'])) { foreach ($form['fields'] as $key => $field) { if (isset($field->defaultValue) && (false !== strpos($field->defaultValue, '[e2pdf-download') || false !== strpos($field->defaultValue, '[e2pdf-save'))) { $value = $this->filter_content($field->defaultValue, isset($entry['id']) ? $entry['id'] : 0, true); $entry[$field['id']] = $value; GFAPI::update_entry_field($entry['id'], $field['id'], $value); } } } return $entry; } // gform notification filter public function filter_gform_notification($notification, $form, $entry) { $content = isset($notification['message']) && $notification['message'] ? $notification['message'] : ''; if (false === strpos($content, '[')) { return $notification; } // conditional shortcode fix since 1.13.18 $shortcode_tags = array( 'gravityforms', ); preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches); $tagnames = array_intersect($shortcode_tags, $matches[1]); if (!empty($tagnames)) { preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes); foreach ($shortcodes[0] as $key => $shortcode_value) { $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key); $conditional_shortcode_tags = array( 'e2pdf-download', 'e2pdf-save', 'e2pdf-view', 'e2pdf-adobesign', 'e2pdf-attachment', 'e2pdf-zapier', ); preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $shortcode[5], $conditional_matches); $conditional_tagnames = array_intersect($conditional_shortcode_tags, $conditional_matches[1]); $atts = shortcode_parse_atts($shortcode[3]); if (isset($atts['action']) && $atts['action'] == 'conditional' && !empty($conditional_tagnames)) { $shortcode[5] = '1'; if (class_exists('GFCommon')) { $shortcode[3] = GFCommon::replace_variables($shortcode[3], $form, $entry, false, false, false, 'text'); } $value = do_shortcode_tag($shortcode); if ($value !== '1') { $content = str_replace($shortcode_value, '', $content); } } } } $shortcode_tags = array( 'e2pdf-download', 'e2pdf-save', 'e2pdf-view', 'e2pdf-adobesign', 'e2pdf-attachment', 'e2pdf-zapier', ); preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches); $tagnames = array_intersect($shortcode_tags, $matches[1]); if (!empty($tagnames)) { preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes); foreach ($shortcodes[0] as $key => $shortcode_value) { $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key); $atts = shortcode_parse_atts($shortcode[3]); if (!isset($atts['dataset']) && isset($atts['id'])) { $template = new Model_E2pdf_Template(); $template->load($atts['id']); if ($template->get('extension') === 'gravity') { $entry_id = $entry && isset($entry['id']) ? $entry['id'] : false; if ($entry_id) { $atts['dataset'] = $entry_id; $shortcode[3] .= ' dataset="' . $entry_id . '"'; } } } if (!isset($atts['apply'])) { $shortcode[3] .= ' apply="true"'; } if (!isset($atts['filter'])) { $shortcode[3] .= ' filter="true"'; } $file = false; if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { if (class_exists('GFCommon')) { add_filter('gform_merge_tag_filter', array($this, 'filter_gform_merge_tag_filter_attributes'), 30, 5); $shortcode[3] = GFCommon::replace_variables($shortcode[3], $form, $entry, false, false, false, 'text'); remove_filter('gform_merge_tag_filter', array($this, 'filter_gform_merge_tag_filter_attributes'), 30); } $file = do_shortcode_tag($shortcode); if ($file) { $tmp = false; if (substr($file, 0, 4) === 'tmp:') { $file = substr($file, 4); $tmp = true; } if ($shortcode[2] === 'e2pdf-save' || isset($atts['pdf'])) { if ($tmp) { $this->helper->add('gravity_attachments', $file); } } else { $this->helper->add('gravity_attachments', $file); } $notification['attachments'] = (is_array(rgget('attachments', $notification))) ? rgget('attachments', $notification) : array(); $notification['attachments'][] = $file; } $notification['message'] = str_replace($shortcode_value, '', $notification['message']); } else { $notification['message'] = str_replace($shortcode_value, '[' . $shortcode[2] . $shortcode[3] . ']', $notification['message']); } } } return $notification; } // filter content public function filter_content($content = '', $entry_id = 0, $do_shortcode = false, $type = '') { if (is_array($content) || false === strpos($content, '[')) { return $content; } $shortcode_tags = array( 'e2pdf-download', 'e2pdf-save', 'e2pdf-view', 'e2pdf-adobesign', 'e2pdf-zapier', ); preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches); $tagnames = array_intersect($shortcode_tags, $matches[1]); if (!empty($tagnames)) { preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $content, $shortcodes); foreach ($shortcodes[0] as $key => $shortcode_value) { $shortcode = $this->helper->load('shortcode')->get_shortcode($shortcodes, $key); $atts = shortcode_parse_atts($shortcode[3]); if ($this->helper->load('shortcode')->is_attachment($shortcode, $atts)) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf } else { if (!isset($atts['dataset']) && isset($atts['id'])) { $template = new Model_E2pdf_Template(); $template->load($atts['id']); if ($template->get('extension') === 'gravity') { if ($entry_id) { $atts['dataset'] = $entry_id; $shortcode[3] .= ' dataset="' . $entry_id . '"'; } } } if (!isset($atts['apply'])) { $shortcode[3] .= ' apply="true"'; } if (!isset($atts['filter'])) { $shortcode[3] .= ' filter="true"'; } if (!isset($atts['iframe_download']) && $type == 'message') { $shortcode[3] .= ' iframe_download="true"'; } if ($do_shortcode) { $content = str_replace($shortcode_value, do_shortcode_tag($shortcode), $content); } else { $content = str_replace($shortcode_value, '[' . $shortcode[2] . $shortcode[3] . ']', $content); } } } } return $content; } // gform pre render filter public function filter_gform_pre_render($form) { if (isset($form['fields'])) { foreach ($form['fields'] as $key => $field) { if ($field->pageNumber != '1') { $field->pageNumber = '1'; $form['fields'][$key] = $field; } } } return $form; } // merge tag attributes filter public function filter_gform_merge_tag_filter_attributes($value, $merge_tag, $modifier, $field, $raw_value) { if ($value) { return esc_attr($value); } return $value; } // merge tag args filter public function filter_gform_merge_tag_filter_tags($value, $merge_tag, $modifier, $field, $raw_value) { if ($field && $value) { if ($field->type == 'consent') { if (false !== strpos($modifier, 'filter') && is_callable('gw_all_fields_template')) { $modifiers = gw_all_fields_template()->parse_modifiers($modifier); if (isset($modifiers['filter']) && $modifiers['filter'] && !is_array($modifiers['filter'])) { $merge_tag = $modifiers['filter']; } } $mod = explode('.', $merge_tag); if (isset($mod[1]) && $mod[1] == '1') { $value = '1'; } } elseif ($field->type == 'list') { if (false !== strpos($modifier, 'filter') && is_callable('gw_all_fields_template')) { $modifiers = gw_all_fields_template()->parse_modifiers($modifier); if (isset($modifiers['filter']) && $modifiers['filter'] && !is_array($modifiers['filter'])) { if (false !== strpos($modifiers['filter'], ':')) { $mods = explode(':', $modifiers['filter']); $merge_tag = $mods[0]; $modifier = $mods[1]; } else { $merge_tag = $modifiers['filter']; } } if ($merge_tag != $field->id) { return false; } } if ($modifier && $modifier != 'text') { $list_id = false; $field_id = false; if (false !== strpos($modifier, '_')) { $mod = explode('_', $modifier); if (isset($mod[0]) && is_numeric($mod[0])) { $list_id = $mod[0] - 1; } if (isset($mod[1]) && is_numeric($mod[1])) { $field_id = $mod[1] - 1; } } elseif (is_numeric($modifier)) { $list_id = $modifier - 1; } if ($list_id !== false) { $value = ''; if (is_serialized($raw_value)) { $list = $this->helper->load('convert')->unserialize(trim($raw_value)); } else { $list = $raw_value; } if (is_array($list)) { if (isset($list[$list_id])) { if ($field_id !== false) { if (is_array($list[$list_id]) && isset(array_values($list[$list_id])[$field_id])) { $value = array_values($list[$list_id])[$field_id]; } } else { if (is_array($list[$list_id])) { $value = implode(',', $list[$list_id]); } else { $value = $list[$list_id]; } } } } } } } elseif ($field->type == 'name' || $field->type == 'address') { if (false !== strpos($modifier, 'filter') && is_callable('gw_all_fields_template')) { $modifiers = gw_all_fields_template()->parse_modifiers($modifier); if (isset($modifiers['filter']) && $modifiers['filter'] && !is_array($modifiers['filter'])) { if (is_array($raw_value) && isset($raw_value[$modifiers['filter']])) { return $raw_value[$modifiers['filter']]; } } } } elseif ($field->type == 'repeater') { if (false !== strpos($modifier, 'repeater')) { $modifiers = explode(',', $modifier); foreach ($modifiers as $filter) { if (preg_match('/^repeater(?:\.\d+)+$/', $filter)) { $value = ''; $path = explode('.', $filter); if (apply_filters('e2pdf_for_do_shortcode_data_process', false)) { array_shift($path); $lead = $this->helper->load('shortcode')->apply_path_attribute($raw_value, implode('.', $path)); if (!empty($lead)) { $value = serialize($lead); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize } } else { $merge_field_id = end($path); array_shift($path); array_pop($path); if (!empty($path)) { $lead = $this->helper->load('shortcode')->apply_path_attribute($raw_value, implode('.', $path)); if (!empty($lead)) { $filters = preg_replace('/repeater(?:\.\d+)+,?/', '', $modifier); $merge_tag = '{:' . $merge_field_id . ($filters ? ':' . $filters : '') . '}'; $value = GFCommon::replace_variables($merge_tag, $this->get('cached_form'), $lead, false, false, false, 'text'); } } } break; } } } elseif (apply_filters('e2pdf_for_do_shortcode_data_process', false)) { $value = serialize($raw_value); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize } } elseif (false !== strpos($modifier, 'json')) { $modifiers = explode(',', $modifier); foreach ($modifiers as $filter) { if ($filter == 'json') { $value = ''; if (!empty($raw_value)) { $json = @json_decode($raw_value, true); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged if (!empty($json)) { if (is_array($json)) { $value = serialize($json); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize } else { $value = $json; } } } break; } } } } return $value; } // delete attachments public function action_gform_after_email($is_success) { $files = $this->helper->get('gravity_attachments'); if (is_array($files) && !empty($files)) { foreach ($files as $key => $file) { $this->helper->delete_dir(dirname($file) . '/'); } $this->helper->deset('gravity_attachments'); } } // after update entry action public function action_gform_after_update_entry($form, $entry_id) { if (isset($form['fields'])) { foreach ($form['fields'] as $key => $field) { if (isset($field->defaultValue) && (false !== strpos($field->defaultValue, '[e2pdf-download') || false !== strpos($field->defaultValue, '[e2pdf-save'))) { $entry = GFFormsModel::get_entry($entry_id); if ($entry && !is_wp_error($entry) && is_array($entry)) { if (!rgar($entry, $field['id'])) { $value = $this->filter_content($field->defaultValue, $entry_id, true); $entry[$field['id']] = $value; GFAPI::update_entry_field($entry['id'], $field['id'], $value); } } } } } } // styles public function styles($item_id = false) { $styles = array(); if (class_exists('GFCommon') && class_exists('GFForms')) { $base_url = GFCommon::get_base_url(); $base_path = GFCommon::get_base_path(); $version = GFForms::$version; $min = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; if (file_exists($base_path . '/legacy/css/')) { $styles[] = $base_url . '/legacy/css/formreset' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/legacy/css/datepicker' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/legacy/css/formsmain' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/legacy/css/readyclass' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/legacy/css/browsers' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/legacy/css/rtl' . $min . '.css?ver=' . $version; if (version_compare($version, '2.9', '>=')) { $styles[] = $base_url . '/assets/css/dist/basic' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/assets/css/dist/gravity-forms-theme-reset' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/assets/css/dist/gravity-forms-theme-foundation' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/assets/css/dist/gravity-forms-theme-framework' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/assets/css/dist/gravity-forms-orbital-theme' . $min . '.css?ver=' . $version; } } else { $styles[] = $base_url . '/css/formreset' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/css/datepicker' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/css/formsmain' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/css/readyclass' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/css/browsers' . $min . '.css?ver=' . $version; $styles[] = $base_url . '/css/rtl' . $min . '.css?ver=' . $version; } $styles[] = plugins_url('css/extension/gravity.css?v=' . time(), $this->helper->get('plugin_file_path')); } return $styles; } public function hook_gravity_entry_view($metaboxes, $entry, $form) { if (!empty($form['id'])) { $hooks = $this->helper->load('hooks')->get('gravity', 'hook_gravity_entry_view', $form['id']); if (!empty($hooks)) { $metaboxes['e2pdf'] = array( 'title' => apply_filters('e2pdf_hook_section_title', __('E2Pdf Actions', 'e2pdf'), 'hook_gravity_entry_view'), 'callback' => array($this, 'hook_gravity_entry_view_callback'), 'context' => 'side', 'callback_args' => array( 'entry' => $entry, 'hooks' => $hooks, ), ); } } return $metaboxes; } // entry view callback hook public function hook_gravity_entry_view_callback($post, $metabox) { if (!empty($metabox['args']['entry']['id'])) { foreach ($metabox['args']['hooks'] as $hook) { if ($this->helper->load('hooks')->process_hook( $hook, [ 'dataset' => $metabox['args']['entry']['id'], ], 'hook_gravity_entry_view' ) ) { $action = apply_filters( 'e2pdf_hook_action_button', array( 'html' => '', 'url' => $this->helper->get_url( array( 'page' => 'e2pdf', 'action' => 'export', 'id' => $hook, 'dataset' => $metabox['args']['entry']['id'], ), 'admin.php?' ), 'title' => 'PDF #' . $hook, ), 'hook_gravity_entry_view', $hook, $metabox['args']['entry']['id'] ); if (!empty($action)) { echo sprintf( $action['html'], $action['url'], $action['title'] ); } } } } } // row actions hook public function hook_gravity_row_actions($form_id, $field_id, $value, $entry) { if (!empty($entry['form_id']) && !empty($entry['id'])) { $hooks = $this->helper->load('hooks')->get('gravity', 'hook_gravity_row_actions', $entry['form_id']); foreach ($hooks as $hook) { if ($this->helper->load('hooks')->process_hook( $hook, [ 'dataset' => $entry['id'], ], 'hook_gravity_row_actions' ) ) { $action = apply_filters( 'e2pdf_hook_action_button', array( 'html' => ' | %s', 'url' => $this->helper->get_url( array( 'page' => 'e2pdf', 'action' => 'export', 'id' => $hook, 'dataset' => $entry['id'], ), 'admin.php?' ), 'title' => 'PDF #' . $hook, ), 'hook_gravity_row_actions', $hook, $entry['id'] ); if (!empty($action)) { echo sprintf( $action['html'], $action['url'], $action['title'] ); } } } } } // get field merge tags public function get_field_merge_tags($merged_tags, $field, $repeater = null, $repeaters = array()) { $tags = GFCommon::get_field_merge_tags($field); foreach ($tags as $tag) { if (isset($tag['tag'])) { if ($field->type == 'list') { $field_id = preg_replace('/\{(?:.*)\:(.*)\:\}/', '${1}', $tag['tag']); } else { $field_id = preg_replace('/\{(?:.*)\:(.*)\}/', '${1}', $tag['tag']); } if ($field_id) { if ($this->get('nested')) { $merged_tags[$field_id] = $this->get('nested'); } elseif ($field->type == 'repeater') { $merged_tags[$field_id] = $tag['tag']; if (!empty($field->fields)) { foreach ($field->fields as $sub_field) { $sub_value = isset($sub_field->label) ? $sub_field->label : ''; if ($repeater) { $sub_value .= isset($repeater->id) ? ':' . $repeater->id : ''; } else { $sub_value .= isset($field->id) ? ':' . $field->id : ''; } if ($sub_value) { $merged_tags[$sub_field->id] = '{' . $sub_value . ':repeater' . (!empty($repeaters) ? '.0.' . implode('.0', $repeaters) : '') . '.0.' . $sub_field->id . '}'; } if (isset($sub_field->type) && $sub_field->type == 'repeater') { if (isset($sub_field->id)) { $repeaters[] = $sub_field->id; if ($repeater) { $merged_tags = $this->get_field_merge_tags($merged_tags, $sub_field, $repeater, $repeaters); } else { $merged_tags = $this->get_field_merge_tags($merged_tags, $sub_field, $field, $repeaters); } } } } } } else { $merged_tags[$field_id] = $tag['tag']; } } } } return $merged_tags; } // get form fields public function get_form_fields($form_fields, $fields) { foreach ($fields as $field) { $form_fields[$field->id] = $field; if (!empty($field->fields)) { $form_fields = $this->get_form_fields($form_fields, $field->fields); } } return $form_fields; } }