'wpcf7', 'title' => 'Contact Form 7', ); // 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_WPCF7_EXTENSION') || $this->helper->load('extension')->is_plugin_active('contact-form-7/wp-contact-form-7.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('WPCF7_ContactForm')) { $form = WPCF7_ContactForm::get_instance($this->get('item')); if ($form) { $this->set('cached_form', $form); } } break; case 'dataset': global $wpdb; $this->set('cached_submission', false); $this->set('cached_entry', array()); if ($this->get('cached_form') && $this->get('dataset') && $this->get_storing_engine() !== false) { if ($this->get_storing_engine() == '1') { $vxcf_form = new vxcf_form(); $entry = $vxcf_form::get_data_object()->get_lead($this->get('dataset')); if ($entry) { $posted_data = array(); $lead = $vxcf_form::get_data_object()->attach_lead_detail($entry); foreach ($lead['detail'] as $field_key => $field_value) { if ($field_value) { if (0 === strpos($field_key, 'file-')) { if (is_serialized($field_value)) { $paths = $this->helper->load('convert')->unserialize(trim($field_value)); } else { $paths = array(); } if (is_array($paths)) { $urls = array_map( function ($uploaded_file) { $vxcf_form = new vxcf_form(); $upload = $vxcf_form::get_upload_dir(); return $upload['url'] . $uploaded_file; }, $paths ); } else { $urls = array(); } $posted_data[$field_key] = $urls; } else { if (is_serialized($field_value)) { $posted_data[$field_key] = $this->helper->load('convert')->unserialize(trim($field_value)); } else { $posted_data[$field_key] = $field_value; } } } else { $posted_data[$field_key] = ''; } } $cached_entry = array( 'posted_data' => $posted_data, 'uploaded_files' => array(), 'meta' => array( 'timestamp' => !empty($lead['created']) ? strtotime($lead['created']) : '', 'remote_ip' => !empty($lead['ip']) ? $lead['ip'] : '', 'remote_port' => '', 'user_agent' => '', 'url' => !empty($lead['url']) ? $lead['url'] : '', 'unit_tag' => '', 'container_post_id' => '', 'current_user_id' => !empty($lead['user_id']) ? $lead['user_id'] : '0', 'do_not_store' => '', ), ); $this->set('cached_entry', $cached_entry); } } elseif ($this->get_storing_engine() == '2') { $condition = array( 'form_id' => array( 'condition' => '=', 'value' => $this->get('dataset'), 'type' => '%d', ), ); $where = $this->helper->load('db')->prepare_where($condition); $cfdb = apply_filters('cfdb7_database', $wpdb); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $entry = $wpdb->get_row($wpdb->prepare('SELECT * FROM `' . $cfdb->prefix . 'db7_forms`' . $where['sql'] . '', $where['filter'])); if ($entry) { $form_value = $this->helper->load('convert')->unserialize($entry->form_value); $posted_data = array(); $upload_dir = wp_upload_dir(); $cfdb7_dir_url = $upload_dir['baseurl'] . '/cfdb7_uploads'; foreach ($form_value as $field_key => $field_value) { $field_value = str_replace( array('"', ''', '/', '\'), array('"', "'", '/', '\\'), $field_value ); if (strpos($field_key, 'cfdb7_file') !== false) { $posted_data[substr($field_key, 0, -10)] = empty($field_value) ? '' : $cfdb7_dir_url . '/' . $field_value; continue; } if (is_array($field_value)) { $posted_data[$field_key] = implode(', ', $field_value); continue; } $posted_data[$field_key] = $field_value; } $cached_entry = array( 'posted_data' => $posted_data, 'uploaded_files' => array(), 'meta' => array( 'timestamp' => strtotime($entry->form_date), 'remote_ip' => '', 'remote_port' => '', 'user_agent' => '', 'url' => '', 'unit_tag' => '', 'container_post_id' => '', 'current_user_id' => '0', 'do_not_store' => '', ), ); $this->set('cached_entry', $cached_entry); } } elseif ($this->get_storing_engine() == '3') { $condition = array( 'cf7_id' => array( 'condition' => '=', 'value' => $this->get('item'), 'type' => '%d', ), 'data_id' => array( 'condition' => '=', 'value' => $this->get('dataset'), 'type' => '%d', ), ); $where = $this->helper->load('db')->prepare_where($condition); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $entry = $wpdb->get_results($wpdb->prepare('SELECT * FROM `' . VSZ_CF7_DATA_ENTRY_TABLE_NAME . '`' . $where['sql'] . '', $where['filter'])); if (!empty($entry)) { $posted_data = array(); foreach ($entry as $k => $v) { if (false !== strpos($v->name, 'checkbox')) { if ($v->value) { $checkboxes = explode(PHP_EOL, stripslashes($v->value)); } else { $checkboxes = array(); } $posted_data[$v->name] = implode(', ', $checkboxes); } else { $posted_data[$v->name] = stripslashes($v->value); } } $cached_entry = array( 'posted_data' => $posted_data, 'uploaded_files' => array(), 'meta' => array( 'timestamp' => isset($posted_data['submit_time']) ? strtotime($posted_data['submit_time']) : '', 'remote_ip' => isset($posted_data['submit_ip']) ? $posted_data['submit_ip'] : '', 'remote_port' => '', 'user_agent' => '', 'url' => '', 'unit_tag' => '', 'container_post_id' => '', 'current_user_id' => '0', 'do_not_store' => '', ), ); $this->set('cached_entry', $cached_entry); } } else { $entry = new Model_E2pdf_Dataset(); if ($entry->load($this->get('dataset'), $this->get('item'), 'wpcf7')) { $this->set('cached_entry', $entry->get('entry')); } } if ($this->get('cached_entry')) { if (WPCF7_Submission::get_instance() == null) { // Digital Signature For Contact Form 7 PHP Warning Fix remove_filter('wpcf7_validate_signature', 'wpcf7_signature_validation_filter', 10, 2); remove_filter('wpcf7_validate_signature*', 'wpcf7_signature_validation_filter', 10, 2); $form = WPCF7_ContactForm::get_instance($this->get('item')); add_action('wpcf7_before_send_mail', array($this, 'action_wpcf7_before_send_mail_abort'), 98, 2); $submission = WPCF7_Submission::get_instance($form); remove_action('wpcf7_before_send_mail', array($this, 'action_wpcf7_before_send_mail_abort'), 98, 2); } else { $submission = WPCF7_Submission::get_instance(); } if (class_exists('ReflectionProperty')) { $reflection = new ReflectionProperty(get_class($submission), 'posted_data'); $reflection->setAccessible(true); $reflection->setValue($submission, isset($this->get('cached_entry')['posted_data']) ? $this->get('cached_entry')['posted_data'] : array()); $reflection = new ReflectionProperty(get_class($submission), 'uploaded_files'); $reflection->setAccessible(true); $reflection->setValue($submission, isset($this->get('cached_entry')['uploaded_files']) ? $this->get('cached_entry')['uploaded_files'] : array()); // Contact Form Warning fix on $submission->__destruct() if (defined('WPCF7_VERSION') && WPCF7_VERSION >= '5.8.6' && isset($this->get('cached_entry')['uploaded_files'])) { foreach ((array) $this->get('cached_entry')['uploaded_files'] as $file_path) { $paths = (array) $file_path; foreach ($paths as $path) { // phpcs:disable WordPress.PHP.NoSilencedErrors.Discouraged if (!@file_exists($path)) { @mkdir(dirname($path)); } // phpcs:enable } } } $reflection = new ReflectionProperty(get_class($submission), 'meta'); $reflection->setAccessible(true); $reflection->setValue($submission, isset($this->get('cached_entry')['meta']) ? $this->get('cached_entry')['meta'] : array()); $this->set('cached_submission', $submission); } } } break; default: break; } return true; } // get public function get($key) { if (isset($this->options->$key)) { $value = $this->options->$key; } else { switch ($key) { case 'args': case 'cached_entry': $value = array(); break; default: $value = false; break; } } return $value; } // load actions public function load_actions() { add_action('wpcf7_before_send_mail', array($this, 'action_wpcf7_before_send_mail'), 99, 2); add_action('wpcf7_mail_sent', array($this, 'action_wpcf7_mail_sent')); add_action('cfdb7_after_save_data', array($this, 'action_cfdb7_after_save_data')); add_action('vsz_cf7_after_insert_db', array($this, 'action_vsz_cf7_after_insert_db'), 10, 3); } // load filters public function load_filters() { add_filter('e2pdf_model_options_get_options_options', array($this, 'filter_e2pdf_model_options_get_options_options')); add_filter('vxcf_after_saving_addons', array($this, 'filter_vxcf_after_saving_addons'), 10, 4); } // items public function items() { $items = array(); if (class_exists('WPCF7_ContactForm')) { $forms = WPCF7_ContactForm::find(); if ($forms) { foreach ($forms as $key => $form) { $items[] = $this->item($form->id); } } } return $items; } // 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('WPCF7_ContactForm')) { $form = WPCF7_ContactForm::get_instance($item_id); } $item = new stdClass(); if ($form) { $item->id = (string) $form->id(); $item->url = $this->helper->get_url( array( 'page' => 'wpcf7', 'post' => $item_id, 'action' => 'edit', ) ); $item->name = $form->title(); } else { $item->id = ''; $item->url = ''; $item->name = ''; } return $item; } // datasets public function datasets($item_id = false, $name = false) { global $wpdb; $datasets = array(); if ($item_id) { if ($this->get_storing_engine() == '1') { $vxcf_form = new vxcf_form(); $entries = $vxcf_form::get_data_object()->get_entries('cf_' . $item_id, 'all'); if (!empty($entries['result'])) { $this->set('item', $item_id); foreach ($entries['result'] 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, ); } } } elseif ($this->get_storing_engine() == '2') { $condition = array( 'form_post_id' => array( 'condition' => '=', 'value' => $item_id, 'type' => '%s', ), ); $order_condition = array( 'orderby' => 'form_id', 'order' => 'desc', ); $where = $this->helper->load('db')->prepare_where($condition); $orderby = $this->helper->load('db')->prepare_orderby($order_condition); $cfdb = apply_filters('cfdb7_database', $wpdb); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $entries = $wpdb->get_results($wpdb->prepare('SELECT * FROM `' . $cfdb->prefix . 'db7_forms`' . $where['sql'] . $orderby . '', $where['filter'])); if ($entries) { $this->set('item', $item_id); foreach ($entries as $key => $entry) { $this->set('dataset', $entry->form_id); $entry_title = $this->render($name); if (!$entry_title) { $entry_title = $entry->form_id; } $datasets[] = array( 'key' => $entry->form_id, 'value' => $entry_title, ); } } } elseif ($this->get_storing_engine() == '3') { $condition = array( 'cf7_id' => array( 'condition' => '=', 'value' => $item_id, 'type' => '%s', ), ); $order_condition = array( 'orderby' => 'data_id', 'order' => 'desc', ); $where = $this->helper->load('db')->prepare_where($condition); $orderby = $this->helper->load('db')->prepare_orderby($order_condition); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $entries = $wpdb->get_results($wpdb->prepare('SELECT * FROM `' . VSZ_CF7_DATA_ENTRY_TABLE_NAME . '`' . $where['sql'] . ' GROUP BY data_id' . $orderby . '', $where['filter'])); if ($entries) { $this->set('item', $item_id); foreach ($entries as $key => $entry) { $this->set('dataset', $entry->data_id); $entry_title = $this->render($name); if (!$entry_title) { $entry_title = $entry->data_id; } $datasets[] = array( 'key' => $entry->data_id, 'value' => $entry_title, ); } } } else { $condition = array( 'extension' => array( 'condition' => '=', 'value' => 'wpcf7', 'type' => '%s', ), 'item' => array( 'condition' => '=', 'value' => $item_id, 'type' => '%s', ), ); $order_condition = array( 'orderby' => 'ID', 'order' => 'desc', ); $where = $this->helper->load('db')->prepare_where($condition); $orderby = $this->helper->load('db')->prepare_orderby($order_condition); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $entries = $wpdb->get_results($wpdb->prepare('SELECT * FROM `' . $wpdb->prefix . 'e2pdf_datasets`' . $where['sql'] . $orderby . '', $where['filter'])); 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) { global $wpdb; $dataset_id = (int) $dataset_id; if (!$dataset_id) { return; } $data = new stdClass(); if ($this->get_storing_engine() == '1') { $data->view = $this->helper->get_url( array( 'page' => 'vxcf_leads', 'tab' => 'entries', 'id' => $dataset_id, ) ); $data->delete = false; } elseif ($this->get_storing_engine() == '2') { $condition = array( 'form_id' => array( 'condition' => '=', 'value' => $dataset_id, 'type' => '%d', ), ); $where = $this->helper->load('db')->prepare_where($condition); $cfdb = apply_filters('cfdb7_database', $wpdb); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $entry = $wpdb->get_row($wpdb->prepare('SELECT * FROM `' . $cfdb->prefix . 'db7_forms`' . $where['sql'] . '', $where['filter'])); $data->view = $this->helper->get_url( array( 'page' => 'cfdb7-list.php', 'fid' => $entry->form_post_id, 'ufid' => $dataset_id, ) ); $data->delete = false; } elseif ($this->get_storing_engine() == '3') { $data->view = false; $data->delete = false; } else { $data->view = false; $data->delete = true; } return $data; } // template actions public function get_template_actions($template = false) { $template = (int) $template; if (!$template) { return; } $actions = new stdClass(); if ($this->get_storing_engine() == '0') { $actions->delete = true; } else { $actions->delete = false; } return $actions; } // 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; } // 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); } $value = $this->helper->load('field')->do_shortcodes($value, $this, $field); add_filter('wpcf7_mail_tag_replaced_file', array($this, 'filter_wpcf7_file_mail_tag'), 99, 4); add_filter('wpcf7_mail_tag_replaced_file*', array($this, 'filter_wpcf7_file_mail_tag'), 99, 4); /** * Ultimate Addons for Contact Form 7 Digital Signature * https://wordpress.org/plugins/ultimate-addons-for-contact-form-7/ */ add_filter('wpcf7_mail_tag_replaced_uacf7_signature', array($this, 'filter_wpcf7_file_mail_tag'), 99, 4); add_filter('wpcf7_mail_tag_replaced_uacf7_signature*', array($this, 'filter_wpcf7_file_mail_tag'), 99, 4); if ($this->get('cached_submission')) { $value = htmlentities($value, ENT_NOQUOTES); $value = $this->get('cached_submission')->get_contact_form()->filter_message($value); $value = html_entity_decode($value); } remove_filter('wpcf7_mail_tag_replaced_file', array($this, 'filter_wpcf7_file_mail_tag'), 99); remove_filter('wpcf7_mail_tag_replaced_file*', array($this, 'filter_wpcf7_file_mail_tag'), 99); remove_filter('wpcf7_mail_tag_replaced_uacf7_signature', array($this, 'filter_wpcf7_file_mail_tag'), 99); remove_filter('wpcf7_mail_tag_replaced_uacf7_signature*', array($this, 'filter_wpcf7_file_mail_tag'), 99); $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 ); } // convert shortcodes public function convert_shortcodes($value, $to = false, $html = false) { if ($value) { if ($to) { $value = str_replace('[', '[', $value); if (!$html) { $value = wp_specialchars_decode($value, ENT_QUOTES); } } else { $value = str_replace('[', '[', $value); } } return $value; } // strip shortcodes public function strip_shortcodes($value) { $value = preg_replace('~(?:\[/?)[^/\]]+/?\]~s', '', $value); return $value; } // verify public function verify() { if ($this->get('cached_entry')) { return true; } return false; } // visual mapper public function visual_mapper() { $html = ''; $source = ''; if ($this->get('item') && class_exists('WPCF7_ContactForm')) { $form = WPCF7_ContactForm::get_instance($this->get('item')); if ($form) { $source = $form->form_html(); if ($source) { $dom = new DOMDocument(); $html = $this->helper->load('convert')->load_html($source, $dom, true); } } 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 { $xml = $this->helper->load('xml'); $xpath = new DomXPath($dom); // remove by name $remove_by_name = array( '_wpcf7', '_wpcf7_version', '_wpcf7_locale', '_wpcf7_unit_tag', '_wpcf7_container_post', '_wpcf7_posted_data_hash', ); foreach ($remove_by_name as $key => $name) { $elements = $xpath->query('//*[@name="' . $name . '"]'); foreach ($elements as $element) { $element->parentNode->removeChild($element); } } // remove by class $remove_by_class = array( 'dscf7_signature_inner', 'as-signature-clear', ); foreach ($remove_by_class as $key => $class) { $elements = $xpath->query("//*[contains(@class, '{$class}')]"); foreach ($elements as $element) { $element->parentNode->removeChild($element); } } /* * Modify Digital Signature * https://wordpress.org/plugins/digital-signature-for-contact-form-7/ */ $signatures = $xpath->query("//*[contains(@class, 'wpcf7-signaturewpcf7-validates-as-signaturedscf7-signature')]"); foreach ($signatures as $element) { $xml->set_node_value($element, 'type', 'text'); $xml->set_node_value($element, 'value', __('Signature', 'e2pdf')); } /* * Digital Signature Addon for Contact Form 7 * https://wordpress.org/plugins/digital-signature-addon-for-contact-form-7/ * The plugin is not working due to incorrect JavaScript events */ $signatures = $xpath->query("//*[contains(@class, 'wpcf7-as_signature')]"); foreach ($signatures as $element) { $xml->set_node_value($element, 'type', 'text'); $xml->set_node_value($element, 'value', __('Signature', 'e2pdf')); } $acceptances = $xpath->query("//*[contains(@class, 'wpcf7-acceptance')]"); foreach ($acceptances as $acceptance) { $element = $xpath->query('.//input', $acceptance)->item(0); if ($element) { $xml->set_node_value($element, 'value', 'Consented'); } } /* * Drag and Drop Multiple File Upload – Contact Form 7 * https://wordpress.org/plugins/drag-and-drop-multiple-file-upload-contact-form-7/ */ $drag_and_drops = $xpath->query("//*[contains(@class, 'wpcf7-drag-n-drop-file')]"); foreach ($drag_and_drops as $element) { $xml->set_node_value($element, 'name', $xml->get_node_value($element, 'data-name')); } $inputs = $xpath->query('//input|//textarea|//select'); foreach ($inputs as $element) { if ($xml->get_node_value($element, 'type') == 'checkbox') { $xml->set_node_value($element, 'name', str_replace('[]', '', $xml->get_node_value($element, 'name'))); } $xml->set_node_value($element, 'name', '[' . $xml->get_node_value($element, 'name') . ']'); } // remove unecessary elements $submit_buttons = $xpath->query("//input[@type='submit']"); foreach ($submit_buttons as $element) { $element->parentNode->removeChild($element); } if (defined('LIBXML_HTML_NOIMPLIED') && defined('LIBXML_HTML_NODEFDTD')) { return str_replace(array('', ''), '', $dom->saveHTML()); } else { return $dom->saveHTML(); } } } return false; } // auto public function auto() { $response = array(); $elements = array(); if ($this->get('cached_form')) { $source = $this->get('cached_form')->prop('form'); foreach ((array) $this->get('cached_form')->scan_form_tags() as $key => $field) { $label = false; preg_match_all('/(((?!<\/label>).)*)\[' . str_replace('*', '\*', $field->type) . ' ' . $field->name . '(\s|\]).*?<\/label>/s', $source, $matches); if (!empty($matches[1][0])) { $label = trim($matches[1][0]); } else { preg_match_all('/(((?!<\/label>).)*)<\/label>(?:[\n\r\s]+)\[' . str_replace('*', '\*', $field->type) . ' ' . $field->name . '(\s|\])/', $source, $matches); if (!empty($matches[1][0])) { $label = trim($matches[1][0]); } } switch ($field->type) { case 'text': case 'text*': case 'email': case 'email*': case 'url': case 'tel': case 'number': case 'date': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $label ? $label : $field->name, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-input', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'value' => '[' . $field->name . ']', ), ) ); 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' => $label ? $label : $field->name, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-signature', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => '150', 'dimension' => '1', 'block_dimension' => '1', 'value' => '[' . $field->name . ']', ), ) ); break; case 'file': case 'mfile': case 'textarea': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $label ? $label : $field->name, 'text_auto_font_size' => $field->type == 'textarea' ? '1' : '0', ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-textarea', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => '150', 'value' => '[' . $field->name . ']', ), ) ); break; case 'select': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $label ? $label : $field->name, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-select', 'properties' => array( 'top' => '5', 'width' => '100%', 'height' => 'auto', 'options' => implode("\n", $field->values), 'value' => '[' . $field->name . ']', 'height' => 'auto', ), ) ); 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' => $label ? $label : $field->name, ), ) ); foreach ($field->values as $checkbox) { $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-checkbox', 'properties' => array( 'top' => '5', 'width' => 'auto', 'height' => 'auto', 'value' => '[' . $field->name . ']', 'option' => $checkbox, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'float' => true, 'properties' => array( 'left' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $checkbox, ), ) ); } 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' => $label ? $label : $field->name, ), ) ); foreach ($field->values as $radio) { $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-radio', 'properties' => array( 'top' => '5', 'width' => 'auto', 'height' => 'auto', 'value' => '[' . $field->name . ']', 'option' => $radio, 'group' => '[' . $field->name . ']', ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'float' => true, 'properties' => array( 'left' => '5', 'width' => '100%', 'height' => 'auto', 'value' => $radio, ), ) ); } break; case 'acceptance': $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-html', 'block' => true, 'properties' => array( 'top' => '20', 'left' => '20', 'right' => '20', 'width' => '100%', 'height' => 'auto', 'value' => $label ? $label : $field->name, ), ) ); $elements[] = $this->auto_field( $field, array( 'type' => 'e2pdf-checkbox', 'properties' => array( 'top' => '5', 'width' => 'auto', 'height' => 'auto', 'value' => '[' . $field->name . ']', 'option' => 'Consented', ), ) ); break; default: break; } } } $response['page'] = array( 'bottom' => '20', 'top' => '20', 'right' => '20', 'left' => '20', ); $response['elements'] = $elements; return $response; } // 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; } // styles public function styles($item_id = false) { $styles = array( plugins_url('css/extension/wpcf7.css?v=' . time(), $this->helper->get('plugin_file_path')), ); return $styles; } // delete item public function delete_item($template_id = false, $dataset_id = false) { global $wpdb; $template = new Model_E2pdf_Template(); if ($template_id && $dataset_id && $template->load($template_id)) { if ($template->get('extension') === 'wpcf7' && $template->get('item')) { $item_id = $template->get('item'); $where = array( 'ID' => $dataset_id, 'item' => $item_id, 'extension' => 'wpcf7', ); $wpdb->delete($wpdb->prefix . 'e2pdf_datasets', $where); if ($dataset_id) { $upload_dir = $this->helper->get('wpcf7_dir') . $dataset_id . '/'; if (is_dir($upload_dir)) { $this->helper->delete_dir($upload_dir); } } return true; } } return false; } // delete items public function delete_items($template_id = false) { global $wpdb; $template = new Model_E2pdf_Template(); if ($template_id && $template->load($template_id)) { if ($template->get('extension') === 'wpcf7' && $template->get('item')) { $where = array( 'item' => $template->get('item'), 'extension' => 'wpcf7', ); $condition = array( 'extension' => array( 'condition' => '=', 'value' => 'wpcf7', 'type' => '%s', ), 'item' => array( 'condition' => '=', 'value' => $template->get('item'), 'type' => '%s', ), ); $where = $this->helper->load('db')->prepare_where($condition); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare $datasets = $wpdb->get_results($wpdb->prepare('SELECT ID FROM `' . $wpdb->prefix . 'e2pdf_datasets`' . $where['sql'] . '', $where['filter'])); foreach ($datasets as $dataset) { $this->delete_item($template_id, $dataset->ID); } return true; } } return false; } // save item public function save_item() { if ($this->get_storing_engine() == '1') { if ($this->get('vxcf_entry_id')) { $this->set('dataset', $this->get('vxcf_entry_id')); } } elseif ($this->get_storing_engine() == '2') { if ($this->get('cfdb7_entry_id')) { $this->set('dataset', $this->get('cfdb7_entry_id')); } } elseif ($this->get_storing_engine() == '3') { if ($this->get('vsz_cf7_entry_id')) { $this->set('dataset', $this->get('vsz_cf7_entry_id')); } } else { $posted_data = $this->get('submission')->get_posted_data(); $uploaded_files = $this->get('submission')->uploaded_files(); $meta = array( 'timestamp' => $this->get('submission')->get_meta('timestamp'), 'remote_ip' => $this->get('submission')->get_meta('remote_ip'), 'remote_port' => $this->get('submission')->get_meta('remote_port'), 'user_agent' => $this->get('submission')->get_meta('user_agen'), 'url' => $this->get('submission')->get_meta('url'), 'unit_tag' => $this->get('submission')->get_meta('unit_tag'), 'container_post_id' => $this->get('submission')->get_meta('container_post_id'), 'current_user_id' => $this->get('submission')->get_meta('current_user_id'), 'do_not_store' => $this->get('submission')->get_meta('do_not_store'), ); $entry = new Model_E2pdf_Dataset(); $entry->set('extension', 'wpcf7'); $entry->set('item', $this->get('submission')->get_contact_form()->id()); $dataset = $entry->save(); if ($dataset) { if (!empty($uploaded_files)) { $upload_dir = $this->helper->get('wpcf7_dir') . $dataset . '/'; if ($this->helper->create_dir($upload_dir)) { global $wp_filesystem; if (!$wp_filesystem) { if (!function_exists('WP_Filesystem')) { require_once ABSPATH . '/wp-admin/includes/file.php'; // PHPCS:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } WP_Filesystem(); } foreach ($uploaded_files as $key => $field) { $uploaded_files[$key] = array_map( function ($uploaded_file) use ($dataset) { $upload_dir = $this->helper->get('wpcf7_dir') . $dataset . '/'; $dir = dirname($uploaded_file) . '/'; $new_dir = $upload_dir . basename($dir) . '/'; if (!is_dir($new_dir)) { if ($this->helper->create_dir($new_dir)) { copy_dir($dir, $new_dir); } } return $uploaded_file; }, $uploaded_files[$key] ); } } } $data = array( 'posted_data' => $posted_data, 'uploaded_files' => $uploaded_files, 'meta' => $meta, ); $entry->set('entry', $data); $entry->save(); $this->set('dataset', $dataset); } } } // Contact Form Entries – Contact Form 7, WPforms and more saving addons filter public function filter_vxcf_after_saving_addons($lead, $entry_id, $type, $form) { if ($this->get_storing_engine() == '1' && !empty($lead['__vx_entry']['form_id'])) { if (0 === strpos($lead['__vx_entry']['form_id'], 'cf_')) { $this->set('vxcf_entry_id', $entry_id); } } return $lead; } // Contact Form 7 Database Addon - CFDB7 after save data action public function action_cfdb7_after_save_data($entry_id) { if ($this->get_storing_engine() == '2' && $entry_id) { $this->set('cfdb7_entry_id', $entry_id); } } // Advanced Contact form 7 DB after insert db action public function action_vsz_cf7_after_insert_db($form, $cf7_id, $data_id) { if ($this->get_storing_engine() == '3' && $data_id) { $this->set('vsz_cf7_entry_id', $data_id); } } // before send mail abort action public function action_wpcf7_before_send_mail_abort($form, &$abort) { $abort = true; } // before send mail action public function action_wpcf7_before_send_mail($form, &$abort) { if ($abort) { return; } $submission = WPCF7_Submission::get_instance(); if (!$submission) { return; } $this->set('dataset', false); $this->set('submission', $submission); $properties = $submission->get_contact_form()->get_properties(); if (isset($properties['messages']['mail_sent_ok']) && $properties['messages']['mail_sent_ok']) { $properties['messages']['mail_sent_ok'] = $this->filter_success_message($properties['messages']['mail_sent_ok']); } if (isset($properties['mail']['active']) && $properties['mail']['active'] && isset($properties['mail']['body']) && $properties['mail']['body']) { $properties['mail']['body'] = $this->filter_mail_body($properties['mail']['body']); $properties['mail']['attachments'] = $this->filter_mail_body($properties['mail']['attachments']); } if (isset($properties['mail_2']['active']) && $properties['mail_2']['active'] && isset($properties['mail']['body']) && $properties['mail_2']['body']) { $properties['mail_2']['body'] = $this->filter_mail_body($properties['mail_2']['body'], 'mail_2'); $properties['mail_2']['attachments'] = $this->filter_mail_body($properties['mail_2']['attachments'], 'mail_2'); } if ($this->get('dataset')) { $submission->get_contact_form()->set_properties($properties); } } // mail sent action public function action_wpcf7_mail_sent($form) { $submission = WPCF7_Submission::get_instance(); if (!$submission) { return $form; } $success_message = $submission->get_response(); if (false !== strpos($success_message, '[')) { $shortcode_tags = array( 'e2pdf-download', 'e2pdf-save', 'e2pdf-view', 'e2pdf-adobesign', 'e2pdf-zapier', ); preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $success_message, $matches); $tagnames = array_intersect($shortcode_tags, $matches[1]); if (!empty($tagnames)) { preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $success_message, $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 { $success_message = str_replace($shortcode_value, do_shortcode_tag($shortcode), $success_message); } } $submission->set_response($success_message); } } $files = $this->helper->get('wpcf7_attachments'); if (is_array($files) && !empty($files)) { foreach ($files as $key => $file) { $this->helper->delete_dir(dirname($file) . '/'); } $this->helper->deset('wpcf7_attachments'); } } // filter success message public function filter_success_message($success_message) { if (false !== strpos($success_message, '[')) { $shortcode_tags = array( 'e2pdf-download', 'e2pdf-save', 'e2pdf-view', 'e2pdf-adobesign', 'e2pdf-zapier', ); preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $success_message, $matches); $tagnames = array_intersect($shortcode_tags, $matches[1]); if (!empty($tagnames)) { preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $success_message, $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') === 'wpcf7') { if (!$this->get('dataset')) { $this->save_item(); } $atts['dataset'] = $this->get('dataset'); $shortcode[3] .= ' dataset="' . $this->get('dataset') . '"'; } } if (!isset($atts['apply'])) { $shortcode[3] .= ' apply="true"'; } if (!isset($atts['iframe_download'])) { $shortcode[3] .= ' iframe_download="true"'; } $success_message = str_replace($shortcode_value, '[' . $shortcode[2] . $shortcode[3] . ']', $success_message); } } } } return $success_message; } // filter mail body public function filter_mail_body($success_message, $tpl = 'mail') { if (false !== strpos($success_message, '[')) { $shortcode_tags = array( 'e2pdf-download', 'e2pdf-save', 'e2pdf-adobesign', 'e2pdf-zapier', 'e2pdf-attachment', ); preg_match_all('@\[([^<>&/\[\]\x00-\x20=]++)@', $success_message, $matches); $tagnames = array_intersect($shortcode_tags, $matches[1]); if (!empty($tagnames)) { preg_match_all('/' . $this->helper->load('shortcode')->get_shortcode_regex($tagnames) . '/', $success_message, $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)) { if (!isset($atts['dataset']) && isset($atts['id'])) { $template = new Model_E2pdf_Template(); $template->load($atts['id']); if ($template->get('extension') === 'wpcf7') { if (!$this->get('dataset')) { $this->save_item(); } $atts['dataset'] = $this->get('dataset'); $shortcode[3] .= ' dataset="' . $this->get('dataset') . '"'; } } if (!isset($atts['apply'])) { $shortcode[3] .= ' apply="true"'; } $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('wpcf7_attachments', $file); } } else { $this->helper->add('wpcf7_attachments', $file); } $this->get('submission')->add_extra_attachments($file, $tpl); } $success_message = str_replace($shortcode_value, '', $success_message); } else { if (!isset($atts['dataset']) && isset($atts['id'])) { $template = new Model_E2pdf_Template(); $template->load($atts['id']); if ($template->get('extension') === 'wpcf7') { if (!$this->get('dataset')) { $this->save_item(); } $atts['dataset'] = $this->get('dataset'); $shortcode[3] .= ' dataset="' . $this->get('dataset') . '"'; } } if (!isset($atts['apply'])) { $shortcode[3] .= ' apply="true"'; } $success_message = str_replace($shortcode_value, do_shortcode_tag($shortcode), $success_message); } } } } return $success_message; } // filter mail tag public function filter_wpcf7_file_mail_tag($replaced, $submitted, $html, $mail_tag) { $submission = WPCF7_Submission::get_instance(); $uploaded_files = $submission->uploaded_files(); $name = $mail_tag->field_name(); if (!empty($uploaded_files[$name])) { $paths = (array) $uploaded_files[$name]; $urls = array_map( function ($uploaded_file) { $wp_upload_dir = wp_upload_dir(); $upload_dir = $this->helper->get('wpcf7_dir') . $this->get('dataset'); $uploaded_file = str_replace(wpcf7_upload_tmp_dir(), $upload_dir, $uploaded_file); return str_replace($wp_upload_dir['basedir'], $wp_upload_dir['baseurl'], $uploaded_file); }, $paths ); $replaced = wpcf7_flat_join( $urls, array( 'separator' => wp_get_list_item_separator(), ) ); } return $replaced; } // filter options public function filter_e2pdf_model_options_get_options_options($options = array()) { $engines = array( '0' => 'E2Pdf', ); /** * Contact Form Entries – Contact Form 7, WPforms and more * https://wordpress.org/plugins/contact-form-entries/ */ if (class_exists('vxcf_form')) { $engines['1'] = 'Contact Form Entries – Contact Form 7, WPforms and more'; } /** * Contact Form 7 Database Addon - CFDB7 * https://wordpress.org/plugins/contact-form-cfdb7/ */ if (function_exists('cfdb7_init')) { $engines['2'] = 'Contact Form 7 Database Addon - CFDB7'; } /** * Advanced Contact form 7 DB * https://wordpress.org/plugins/advanced-cf7-db/ */ if (class_exists('Advanced_Cf7_Db')) { $engines['3'] = 'Advanced Contact form 7 DB'; } $options['wpcf7_group'] = array( 'name' => 'Contact Form 7', 'action' => 'extension', 'group' => 'wpcf7_group', 'options' => array( array( 'name' => __('Storing Engine', 'e2pdf'), 'key' => 'e2pdf_wpcf7_storing_engine', 'value' => $this->get_storing_engine(), 'default_value' => '0', 'type' => 'select', 'options' => $engines, ), ), ); return $options; } /** * 0 - E2Pdf (default) * 1 - Contact Form Entries – Contact Form 7, WPforms and more * https://wordpress.org/plugins/contact-form-entries/ * 2 - Contact Form 7 Database Addon - CFDB7 * https://wordpress.org/plugins/contact-form-cfdb7/ * 3 - Advanced Contact form 7 DB * https://wordpress.org/plugins/advanced-cf7-db/) */ public function get_storing_engine() { if ($this->get('storing_engine') !== false) { $storing_engine = $this->get('storing_engine'); if ($storing_engine === '1') { if (class_exists('vxcf_form')) { return '1'; } else { return false; } } elseif ($storing_engine === '2') { if (function_exists('cfdb7_init')) { return '2'; } else { return false; } } elseif ($storing_engine === '3') { if (class_exists('Advanced_Cf7_Db')) { return '3'; } else { return false; } } else { return '0'; } } else { $storing_engine = get_option('e2pdf_wpcf7_storing_engine', '0'); if ($storing_engine === '1' && class_exists('vxcf_form')) { return '1'; } elseif ($storing_engine === '2' && function_exists('cfdb7_init')) { return '2'; } elseif ($storing_engine === '3' && class_exists('Advanced_Cf7_Db')) { return '3'; } else { return '0'; } } } }