" . __("Please select the forms to be exported", "gravityforms") . ""; return; } $forms = RGFormsModel::get_forms_by_id($selected_forms); //removing the inputs for checkboxes (choices will be used during the import) foreach($forms as &$form){ foreach($form["fields"] as &$field){ $inputType = RGFormsModel::get_input_type($field); if(isset($field["pageNumber"])) unset($field["pageNumber"]); if($inputType == "checkbox") unset($field["inputs"]); if($inputType != "address") unset($field["addressType"]); if($inputType != "date"){ unset($field["calendarIconType"]); unset($field["dateType"]); } if($inputType != "creditcard") unset($field["creditCards"]); if($field["type"] == rgar($field, "inputType")) unset($field["inputType"]); if(in_array($inputType, array("checkbox", "radio", "select")) && !rgar($field,"enableChoiceValue")){ foreach($field["choices"] as &$choice) unset($choice["value"]); } } } require_once("xml.php"); $options = array( "version" => GFCommon::$version, "forms/form/id" => array("is_hidden" => true), "forms/form/nextFieldId" => array("is_hidden" => true), "forms/form/notification/routing" => array("array_tag" => "routing_item"), "forms/form/useCurrentUserAsAuthor" => array("is_attribute" => true), "forms/form/postAuthor" => array("is_attribute" => true), "forms/form/postCategory" => array("is_attribute" => true), "forms/form/postStatus" => array("is_attribute" => true), "forms/form/postAuthor" => array("is_attribute" => true), "forms/form/postFormat" => array("is_attribute" => true), "forms/form/labelPlacement" => array("is_attribute" => true), "forms/form/confirmation/type" => array("is_attribute" => true), "forms/form/lastPageButton/type" => array("is_attribute" => true), "forms/form/pagination/type" => array("is_attribute" => true), "forms/form/pagination/style" => array("is_attribute" => true), "forms/form/button/type" => array("is_attribute" => true), "forms/form/button/conditionalLogic/actionType" => array("is_attribute" => true), "forms/form/button/conditionalLogic/logicType" => array("is_attribute" => true), "forms/form/button/conditionalLogic/rules/rule/fieldId" => array("is_attribute" => true), "forms/form/button/conditionalLogic/rules/rule/operator" => array("is_attribute" => true), "forms/form/button/conditionalLogic/rules/rule/value" => array("allow_empty" => true), "forms/form/fields/field/id" => array("is_attribute" => true), "forms/form/fields/field/type" => array("is_attribute" => true), "forms/form/fields/field/inputType" => array("is_attribute" => true), "forms/form/fields/field/displayOnly" => array("is_attribute" => true), "forms/form/fields/field/size" => array("is_attribute" => true), "forms/form/fields/field/isRequired" => array("is_attribute" => true), "forms/form/fields/field/noDuplicates" => array("is_attribute" => true), "forms/form/fields/field/inputs/input/id" => array("is_attribute" => true), "forms/form/fields/field/inputs/input/name" => array("is_attribute" => true), "forms/form/fields/field/formId" => array("is_hidden" => true), "forms/form/fields/field/descriptionPlacement" => array("is_hidden" => true), "forms/form/fields/field/allowsPrepopulate" => array("is_attribute" => true), "forms/form/fields/field/adminOnly" => array("is_attribute" => true), "forms/form/fields/field/enableChoiceValue" => array("is_attribute" => true), "forms/form/fields/field/enableEnhancedUI" => array("is_attribute" => true), "forms/form/fields/field/conditionalLogic/actionType" => array("is_attribute" => true), "forms/form/fields/field/conditionalLogic/logicType" => array("is_attribute" => true), "forms/form/fields/field/conditionalLogic/rules/rule/fieldId" => array("is_attribute" => true), "forms/form/fields/field/conditionalLogic/rules/rule/operator" => array("is_attribute" => true), "forms/form/fields/field/conditionalLogic/rules/rule/value" => array("allow_empty" => true), "forms/form/fields/field/previousButton/type" => array("is_attribute" => true), "forms/form/fields/field/nextButton/type" => array("is_attribute" => true), "forms/form/fields/field/nextButton/conditionalLogic/actionType" => array("is_attribute" => true), "forms/form/fields/field/nextButton/conditionalLogic/logicType" => array("is_attribute" => true), "forms/form/fields/field/nextButton/conditionalLogic/rules/rule/fieldId" => array("is_attribute" => true), "forms/form/fields/field/nextButton/conditionalLogic/rules/rule/operator" => array("is_attribute" => true), "forms/form/fields/field/nextButton/conditionalLogic/rules/rule/value" => array("allow_empty" => true), "forms/form/fields/field/choices/choice/isSelected" => array("is_attribute" => true), "forms/form/fields/field/choices/choice/text" => array("allow_empty" => true), "forms/form/fields/field/choices/choice/value" => array("allow_empty" => true), "forms/form/fields/field/rangeMin" => array("is_attribute" => true), "forms/form/fields/field/rangeMax" => array("is_attribute" => true), "forms/form/fields/field/numberFormat" => array("is_attribute" => true), "forms/form/fields/field/calendarIconType" => array("is_attribute" => true), "forms/form/fields/field/dateFormat" => array("is_attribute" => true), "forms/form/fields/field/dateType" => array("is_attribute" => true), "forms/form/fields/field/nameFormat" => array("is_attribute" => true), "forms/form/fields/field/phoneFormat" => array("is_attribute" => true), "forms/form/fields/field/addressType" => array("is_attribute" => true), "forms/form/fields/field/hideCountry" => array("is_attribute" => true), "forms/form/fields/field/hideAddress2" => array("is_attribute" => true), "forms/form/fields/field/disableQuantity" => array("is_attribute" => true), "forms/form/fields/field/productField" => array("is_attribute" => true), "forms/form/fields/field/enablePrice" => array("is_attribute" => true), "forms/form/fields/field/displayTitle" => array("is_attribute" => true), "forms/form/fields/field/displayCaption" => array("is_attribute" => true), "forms/form/fields/field/displayDescription" => array("is_attribute" => true), "forms/form/fields/field/displayAllCategories" => array("is_attribute" => true), "forms/form/fields/field/postCustomFieldName" => array("is_attribute" => true) ); $serializer = new RGXML($options); $xml = $serializer->serialize("forms", $forms); if ( !seems_utf8( $xml ) ) $value = utf8_encode( $xml ); $filename = "gravityforms-export-" . date("Y-m-d") . ".xml"; header('Content-Description: File Transfer'); header("Content-Disposition: attachment; filename=$filename"); header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true); echo $xml; die(); } } public static function export_page(){ if(!GFCommon::ensure_wp_version()) return; echo GFCommon::get_remote_message(); $view = RGForms::get("view"); switch($view){ case "import_form" : self::import_form_page(); break; case "export_form" : self::export_form_page(); break; default: self::export_lead_page(); break; } } public static function export_links(){ $view = RGForms::get("view"); ?>

array("unserialize_as_array" => true), "form"=> array("unserialize_as_array" => true), "field"=> array("unserialize_as_array" => true), "rule"=> array("unserialize_as_array" => true), "choice"=> array("unserialize_as_array" => true), "input"=> array("unserialize_as_array" => true), "routing_item"=> array("unserialize_as_array" => true), "creditCard"=> array("unserialize_as_array" => true), "routin"=> array("unserialize_as_array" => true) //routin is for backwards compatibility ); $xml = new RGXML($options); $forms = $xml->unserialize($xmlstr); if(!$forms) return 0; //Error. could not unserialize XML file else if(version_compare($forms["version"], self::$min_import_version, "<")) return -1; //Error. XML version is not compatible with current Gravity Forms version //cleaning up generated object self::cleanup($forms); foreach($forms as $key => $form){ $title = $form["title"]; $count = 2; while(!RGFormsModel::is_unique_title($title)){ $title = $form["title"] . "($count)"; $count++; } //inserting form $form_id = RGFormsModel::insert_form($title); //updating form meta $form["title"] = $title; $form["id"] = $form_id; RGFormsModel::update_form_meta($form_id, $form); } return sizeof($forms); } public static function import_form_page(){ if(isset($_POST["import_forms"])){ check_admin_referer("gf_import_forms", "gf_import_forms_nonce"); if(!empty($_FILES["gf_import_file"]["tmp_name"])){ $count = self::import_file($_FILES["gf_import_file"]["tmp_name"]); if($count == 0 ){ ?>
1 ? __("forms", "gravityforms") : __("form", "gravityforms"); ?>



" name="import_forms" class="button-primary" />



" name="export_forms" class="button-primary" />

0){ $sql = "SELECT d.field_number as field_id, ifnull(l.value, d.value) as value FROM {$wpdb->prefix}rg_lead_detail d LEFT OUTER JOIN {$wpdb->prefix}rg_lead_detail_long l ON d.id = l.lead_detail_id WHERE d.form_id={$form["id"]} AND cast(d.field_number as decimal) IN ({$field_ids}) LIMIT {$offset}, {$page_size}"; $results = $wpdb->get_results($sql, ARRAY_A); foreach($results as $result){ $list = unserialize($result["value"]); $current_row_count = isset($row_counts[$result["field_id"]]) ? intval($row_counts[$result["field_id"]]) : 0; if(is_array($list) && count($list) > $current_row_count ){ $row_counts[$result["field_id"]] = count($list); } } $offset += $page_size; $entry_count -= $page_size; } return $row_counts; } public static function start_export($form){ $form_id = $form["id"]; $fields = $_POST["export_field"]; $start_date = $_POST["export_date_start"]; $end_date = $_POST["export_date_end"]; //adding default fields array_push($form["fields"],array("id" => "created_by" , "label" => __("Created By (User Id)", "gravityforms"))); array_push($form["fields"],array("id" => "id" , "label" => __("Entry Id", "gravityforms"))); array_push($form["fields"],array("id" => "date_created" , "label" => __("Entry Date", "gravityforms"))); array_push($form["fields"],array("id" => "source_url" , "label" => __("Source Url", "gravityforms"))); array_push($form["fields"],array("id" => "transaction_id" , "label" => __("Transaction Id", "gravityforms"))); array_push($form["fields"],array("id" => "payment_amount" , "label" => __("Payment Amount", "gravityforms"))); array_push($form["fields"],array("id" => "payment_date" , "label" => __("Payment Date", "gravityforms"))); array_push($form["fields"],array("id" => "payment_status" , "label" => __("Payment Status", "gravityforms"))); array_push($form["fields"],array("id" => "post_id" , "label" => __("Post Id", "gravityforms"))); array_push($form["fields"],array("id" => "user_agent" , "label" => __("User Agent", "gravityforms"))); array_push($form["fields"],array("id" => "ip" , "label" => __("User IP", "gravityforms"))); $entry_count = RGFormsModel::get_lead_count($form_id, "", null, null, $start_date, $end_date); $page_size = 200; $offset = 0; //Adding BOM marker for UTF-8 $lines = chr(239) . chr(187) . chr(191); // set the separater $separator = apply_filters('gform_export_separator_' . $form_id, apply_filters('gform_export_separator', ',', $form_id), $form_id); $field_rows = self::get_field_row_count($form, $fields, $entry_count); //writing header foreach($fields as $field_id){ $field = RGFormsModel::get_field($form, $field_id); $value = str_replace('"', '""', GFCommon::get_label($field, $field_id)) ; $subrow_count = isset($field_rows[$field_id]) ? intval($field_rows[$field_id]) : 0; if($subrow_count == 0){ $lines .= '"' . $value . '"' . $separator; } else{ for($i = 1; $i <= $subrow_count; $i++){ $lines .= '"' . $value . " " . $i . '"' . $separator; } } } $lines = substr($lines, 0, strlen($lines)-1) . "\n"; //paging through results for memory issues while($entry_count > 0){ $leads = RGFormsModel::get_leads($form_id,"date_created", "DESC", "", $offset, $page_size, null, null, false, $start_date, $end_date); foreach($leads as $lead){ foreach($fields as $field_id){ switch($field_id){ case "date_created" : $lead_gmt_time = mysql2date("G", $lead["date_created"]); $lead_local_time = GFCommon::get_local_timestamp($lead_gmt_time); $value = date_i18n("Y-m-d H:i:s", $lead_local_time); break; default : $long_text = ""; if(strlen($lead[$field_id]) >= (GFORMS_MAX_FIELD_LENGTH-10)){ $long_text = RGFormsModel::get_field_value_long($lead, $field_id, $form); } $value = !empty($long_text) ? $long_text : $lead[$field_id]; break; } if(isset($field_rows[$field_id])){ $list = empty($value) ? array() : unserialize($value); foreach($list as $row){ $row_values = array_values($row); $row_str = implode("|", $row_values); $lines .= '"' . str_replace('"', '""', $row_str) . '"' . $separator; } //filling missing subrow columns (if any) $missing_count = intval($field_rows[$field_id]) - count($list); for($i=0; $i<$missing_count; $i++) $lines .= '""' . $separator; } else{ $value = maybe_unserialize($value); if(is_array($value)) $value = implode("|", $value); $lines .= '"' . str_replace('"', '""', $value) . '"' . $separator; } } $lines = substr($lines, 0, strlen($lines)-1); $lines.= "\n"; } $offset += $page_size; $entry_count -= $page_size; if ( !seems_utf8( $lines ) ) $lines = utf8_encode( $lines ); echo $lines; $lines = ""; } } private function cleanup(&$forms){ unset($forms["version"]); //adding checkboxes "inputs" property based on "choices". (they were removed from the export //to provide a cleaner xml format foreach($forms as &$form){ if(!is_array($form["fields"])) continue; foreach($form["fields"] as &$field){ $input_type = RGFormsModel::get_input_type($field); if(in_array($input_type, array("checkbox", "radio", "select", "multiselect"))){ //creating inputs array for checkboxes if($input_type == "checkbox" && !isset($field["inputs"])) $field["inputs"] = array(); for($i=1, $count = sizeof($field["choices"]); $i<=$count; $i++){ if(!RGForms::get("enableChoiceValue", $field)) $field["choices"][$i-1]["value"] = $field["choices"][$i-1]["text"]; if($input_type == "checkbox") $field["inputs"][] = array("id" => $field["id"] . "." . $i, "label" => $field["choices"][$i-1]["text"]); } } } } } } ?>