public static function duplicate($old_form_id, $form_id, $copy_keys = false, $blog_id = false) { global $frm_duplicate_ids; $fields = self::getAll(array('fi.form_id' => $old_form_id), 'field_order', '', $blog_id); foreach ((array) $fields as $field) { $new_key = $copy_keys ? $field->field_key : ''; if ($copy_keys && substr($field->field_key, -1) == 2) { $new_key = rtrim($new_key, 2); } $values = array(); FrmFieldsHelper::fill_field($values, $field, $form_id, $new_key); // If this is a repeating section, create new form if (self::is_repeating_field($field)) { // create the repeatable form $new_repeat_form_id = apply_filters('frm_create_repeat_form', 0, array('parent_form_id' => $form_id, 'field_name' => $field->name)); // Save old form_select $old_repeat_form_id = $field->field_options['form_select']; // Update form_select for repeating field $values['field_options']['form_select'] = $new_repeat_form_id; } // If this is a field inside of a repeating section, associate it with the correct form if ($field->form_id != $old_form_id && isset($old_repeat_form_id) && isset($new_repeat_form_id) && $field->form_id == $old_repeat_form_id) { $values['form_id'] = $new_repeat_form_id; } $values = apply_filters('frm_duplicated_field', $values); $new_id = self::create($values); $frm_duplicate_ids[$field->id] = $new_id; $frm_duplicate_ids[$field->field_key] = $new_id; unset($field); } }
public static function duplicate() { check_ajax_referer('frm_ajax', 'nonce'); global $wpdb; $field_id = FrmAppHelper::get_post_param('field_id', 0, 'absint'); $form_id = FrmAppHelper::get_post_param('form_id', 0, 'absint'); $copy_field = FrmField::getOne($field_id); if (!$copy_field) { wp_die(); } do_action('frm_duplicate_field', $copy_field, $form_id); do_action('frm_duplicate_field_' . $copy_field->type, $copy_field, $form_id); $values = array('id' => $form_id); FrmFieldsHelper::fill_field($values, $copy_field, $form_id); $field_count = FrmDb::get_count($wpdb->prefix . 'frm_fields fi LEFT JOIN ' . $wpdb->prefix . 'frm_forms fr ON (fi.form_id = fr.id)', array('or' => 1, 'fr.id' => $form_id, 'fr.parent_form_id' => $form_id)); $values['field_order'] = $field_count + 1; if (!($field_id = FrmField::create($values))) { wp_die(); } self::include_single_field($field_id, $values); wp_die(); }
public static function duplicate_section($section_field, $form_id) { check_ajax_referer('frm_ajax', 'nonce'); global $wpdb; if (isset($_POST['children'])) { $children = array_filter((array) $_POST['children'], 'is_numeric'); $fields = FrmField::getAll(array('fi.id' => $children), 'field_order'); } else { $fields = array(); } array_unshift($fields, $section_field); $field_count = FrmDb::get_count($wpdb->prefix . 'frm_fields fi LEFT JOIN ' . $wpdb->prefix . 'frm_forms fr ON (fi.form_id = fr.id)', array('or' => 1, 'fr.id' => $form_id, 'fr.parent_form_id' => $form_id)); $ended = false; if (isset($section_field->field_options['repeat']) && $section_field->field_options['repeat']) { // create the repeatable form $new_form_id = FrmProField::create_repeat_form(0, array('parent_form_id' => $form_id, 'field_name' => $section_field->name)); } else { $new_form_id = $form_id; } foreach ($fields as $field) { // keep the current form id or give it the id of the newly created form $this_form_id = $field->form_id == $form_id ? $form_id : $new_form_id; $values = array(); FrmFieldsHelper::fill_field($values, $field, $this_form_id); if (FrmField::is_repeating_field($field)) { $values['field_options']['form_select'] = $new_form_id; } $field_count++; $values['field_order'] = $field_count; $field_id = FrmField::create($values); if (!$field_id) { continue; } if ('end_divider' == $field->type) { $ended = true; } $values['id'] = $this_form_id; FrmFieldsController::include_single_field($field_id, $values); } if (!$ended) { //make sure the section is ended self::create_multiple_fields((array) $section_field, $form_id); } // Prevent the function in the free version from completing wp_die(); }