public static function import_xml_entries($entries, $imported)
 {
     global $frm_duplicate_ids, $wpdb;
     $saved_entries = array();
     $track_child_ids = array();
     // Import all child entries first
     self::put_child_entries_first($entries);
     foreach ($entries as $item) {
         $entry = array('id' => (int) $item->id, 'item_key' => (string) $item->item_key, 'name' => (string) $item->name, 'description' => FrmAppHelper::maybe_json_decode((string) $item->description), 'ip' => (string) $item->ip, 'form_id' => isset($imported['forms'][(int) $item->form_id]) ? $imported['forms'][(int) $item->form_id] : (int) $item->form_id, 'post_id' => isset($imported['posts'][(int) $item->post_id]) ? $imported['posts'][(int) $item->post_id] : (int) $item->post_id, 'user_id' => FrmAppHelper::get_user_id_param((string) $item->user_id), 'parent_item_id' => (int) $item->parent_item_id, 'is_draft' => (int) $item->is_draft, 'updated_by' => FrmAppHelper::get_user_id_param((string) $item->updated_by), 'created_at' => (string) $item->created_at, 'updated_at' => (string) $item->updated_at);
         $metas = array();
         foreach ($item->item_meta as $meta) {
             $field_id = (int) $meta->field_id;
             if (is_array($frm_duplicate_ids) && isset($frm_duplicate_ids[$field_id])) {
                 $field_id = $frm_duplicate_ids[$field_id];
             }
             $field = FrmField::getOne($field_id);
             if (!$field) {
                 continue;
             }
             $metas[$field_id] = FrmAppHelper::maybe_json_decode((string) $meta->meta_value);
             $metas[$field_id] = apply_filters('frm_import_val', $metas[$field_id], $field);
             self::convert_field_values($field, $field_id, $metas, $saved_entries);
             if ($field->type == 'user_id' && $metas[$field_id] && is_numeric($metas[$field_id])) {
                 $entry['frm_user_id'] = $metas[$field_id];
             }
             unset($field, $meta);
         }
         unset($item);
         $entry['item_meta'] = $metas;
         unset($metas);
         // edit entry if the key and created time match
         $editing = FrmDb::get_var('frm_items', array('item_key' => $entry['item_key'], 'created_at' => date('Y-m-d H:i:s', strtotime($entry['created_at']))));
         if ($editing) {
             FrmEntry::update_entry_from_xml($entry['id'], $entry);
             $imported['updated']['items']++;
             $saved_entries[$entry['id']] = $entry['id'];
         } else {
             if ($e = FrmEntry::create_entry_from_xml($entry)) {
                 $saved_entries[$entry['id']] = $e;
                 $imported['imported']['items']++;
             }
         }
         self::track_imported_child_entries($saved_entries[$entry['id']], $entry['parent_item_id'], $track_child_ids);
         unset($entry);
     }
     self::update_parent_item_ids($track_child_ids, $saved_entries);
     unset($entries);
     return $imported;
 }
 private static function populate_postmeta(&$post, $meta, $imported)
 {
     global $frm_duplicate_ids;
     $m = array('key' => (string) $meta->meta_key, 'value' => (string) $meta->meta_value);
     //switch old form and field ids to new ones
     if ($m['key'] == 'frm_form_id' && isset($imported['forms'][(int) $m['value']])) {
         $m['value'] = $imported['forms'][(int) $m['value']];
     } else {
         $m['value'] = FrmAppHelper::maybe_json_decode($m['value']);
         if (!empty($frm_duplicate_ids)) {
             if ($m['key'] == 'frm_dyncontent') {
                 $m['value'] = FrmFieldsHelper::switch_field_ids($m['value']);
             } else {
                 if ($m['key'] == 'frm_options') {
                     foreach (array('date_field_id', 'edate_field_id') as $setting_name) {
                         if (isset($m['value'][$setting_name]) && is_numeric($m['value'][$setting_name]) && isset($frm_duplicate_ids[$m['value'][$setting_name]])) {
                             $m['value'][$setting_name] = $frm_duplicate_ids[$m['value'][$setting_name]];
                         }
                     }
                     $check_dup_array = array();
                     if (isset($m['value']['order_by']) && !empty($m['value']['order_by'])) {
                         if (is_numeric($m['value']['order_by']) && isset($frm_duplicate_ids[$m['value']['order_by']])) {
                             $m['value']['order_by'] = $frm_duplicate_ids[$m['value']['order_by']];
                         } else {
                             if (is_array($m['value']['order_by'])) {
                                 $check_dup_array[] = 'order_by';
                             }
                         }
                     }
                     if (isset($m['value']['where']) && !empty($m['value']['where'])) {
                         $check_dup_array[] = 'where';
                     }
                     foreach ($check_dup_array as $check_k) {
                         foreach ((array) $m['value'][$check_k] as $mk => $mv) {
                             if (isset($frm_duplicate_ids[$mv])) {
                                 $m['value'][$check_k][$mk] = $frm_duplicate_ids[$mv];
                             }
                             unset($mk, $mv);
                         }
                     }
                 }
             }
         }
     }
     if (!is_array($m['value'])) {
         $m['value'] = FrmAppHelper::maybe_json_decode($m['value']);
     }
     $post['postmeta'][(string) $meta->meta_key] = $m['value'];
 }
 public function prepare_action($action)
 {
     $action->post_content = (array) FrmAppHelper::maybe_json_decode($action->post_content);
     $action->post_excerpt = sanitize_title($action->post_excerpt);
     $default_values = $this->get_global_defaults();
     // fill default values
     $action->post_content += $default_values;
     foreach ($default_values as $k => $vals) {
         if (is_array($vals) && !empty($vals)) {
             if ('event' == $k && !$this->action_options['force_event'] && !empty($action->post_content[$k])) {
                 continue;
             }
             $action->post_content[$k] = wp_parse_args($action->post_content[$k], $vals);
         }
     }
     if (!is_array($action->post_content['event'])) {
         $action->post_content['event'] = explode(',', $action->post_content['event']);
     }
     return $action;
 }
Exemple #4
0
 public function get_all($orderby = 'title', $order = 'ASC', $limit = 99)
 {
     $post_atts = array('post_type' => FrmStylesController::$post_type, 'post_status' => 'publish', 'numberposts' => $limit, 'orderby' => $orderby, 'order' => $order);
     $temp_styles = FrmAppHelper::check_cache(serialize($post_atts), 'frm_styles', $post_atts, 'get_posts');
     if (empty($temp_styles)) {
         global $wpdb;
         // make sure there wasn't a conflict with the query
         $query = $wpdb->prepare('SELECT * FROM ' . $wpdb->posts . ' WHERE post_type=%s AND post_status=%s ORDER BY post_title ASC LIMIT 99', FrmStylesController::$post_type, 'publish');
         $temp_styles = FrmAppHelper::check_cache('frm_backup_style_check', 'frm_styles', $query, 'get_results');
         if (empty($temp_styles)) {
             // create a new style if there are none
             $new = $this->get_new();
             $new->post_title = $new->post_name = __('Formidable Style', 'formidable');
             $new->menu_order = 1;
             $new = $this->save((array) $new);
             $this->update('default');
             $post_atts['include'] = $new;
             $temp_styles = get_posts($post_atts);
         }
     }
     $default_values = $this->get_defaults();
     $default_style = false;
     $styles = array();
     foreach ($temp_styles as $style) {
         $this->id = $style->ID;
         if ($style->menu_order) {
             if ($default_style) {
                 // only return one default
                 $style->menu_order = 0;
             } else {
                 // check for a default style
                 $default_style = $style->ID;
             }
         }
         $style->post_content = FrmAppHelper::maybe_json_decode($style->post_content);
         // fill default values
         $style->post_content = $this->override_defaults($style->post_content);
         $style->post_content = wp_parse_args($style->post_content, $default_values);
         $styles[$style->ID] = $style;
     }
     if (!$default_style) {
         $default_style = reset($styles);
         $styles[$default_style->ID]->menu_order = 1;
     }
     return $styles;
 }
Exemple #5
0
 public static function import_xml_forms($forms, $imported)
 {
     $frm_form = new FrmForm();
     $frm_field = new FrmField();
     foreach ($forms as $item) {
         $form = array('id' => (int) $item->id, 'form_key' => (string) $item->form_key, 'name' => (string) $item->name, 'description' => (string) $item->description, 'options' => (string) $item->options, 'logged_in' => (int) $item->logged_in, 'is_template' => (int) $item->is_template, 'default_template' => (int) $item->default_template, 'editable' => (int) $item->editable, 'status' => (string) $item->status, 'created_at' => date('Y-m-d H:i:s', strtotime((string) $item->created_at)));
         $form['options'] = FrmAppHelper::maybe_json_decode($form['options']);
         // if template, allow to edit if form keys match, otherwise, creation date must also match
         $edit_query = array('form_key' => $form['form_key'], 'is_template' => $form['is_template']);
         if (!$form['is_template']) {
             $edit_query['created_at'] = $form['created_at'];
         }
         $edit_query = apply_filters('frm_match_xml_form', $edit_query, $form);
         $this_form = $frm_form->getAll($edit_query, '', 1);
         unset($edit_query);
         if (!empty($this_form)) {
             $form_id = $this_form->id;
             $frm_form->update($form_id, $form);
             $imported['updated']['forms']++;
             $form_fields = $frm_field->getAll(array('fi.form_id' => $form_id), 'field_order');
             $old_fields = array();
             foreach ($form_fields as $f) {
                 $old_fields[$f->id] = $f;
                 $old_fields[$f->field_key] = $f->id;
                 unset($f);
             }
             $form_fields = $old_fields;
             unset($old_fields);
         } else {
             //form does not exist, so create it
             if ($form_id = $frm_form->create($form)) {
                 $imported['imported']['forms']++;
             }
         }
         foreach ($item->field as $field) {
             $f = array('id' => (int) $field->id, 'field_key' => (string) $field->field_key, 'name' => (string) $field->name, 'description' => (string) $field->description, 'type' => (string) $field->type, 'default_value' => FrmAppHelper::maybe_json_decode((string) $field->default_value), 'field_order' => (int) $field->field_order, 'form_id' => (int) $form_id, 'required' => (int) $field->required, 'options' => FrmAppHelper::maybe_json_decode((string) $field->options), 'field_options' => FrmAppHelper::maybe_json_decode((string) $field->field_options));
             if (is_array($f['default_value']) && in_array($f['type'], array('text', 'email', 'url', 'textarea', 'number', 'phone', 'date', 'time', 'image', 'hidden', 'password', 'tag'))) {
                 if (count($f['default_value']) === 1) {
                     $f['default_value'] = '[' . reset($f['default_value']) . ']';
                 } else {
                     $f['default_value'] = reset($f['default_value']);
                 }
             }
             $f = apply_filters('frm_duplicated_field', $f);
             if ($this_form) {
                 // check for field to edit by field id
                 if (isset($form_fields[$f['id']])) {
                     $frm_field->update($f['id'], $f);
                     $imported['updated']['fields']++;
                     unset($form_fields[$f['id']]);
                     //unset old field key
                     if (isset($form_fields[$f['field_key']])) {
                         unset($form_fields[$f['field_key']]);
                     }
                 } else {
                     if (isset($form_fields[$f['field_key']])) {
                         // check for field to edit by field key
                         unset($f['id']);
                         $frm_field->update($form_fields[$f['field_key']], $f);
                         $imported['updated']['fields']++;
                         unset($form_fields[$form_fields[$f['field_key']]]);
                         //unset old field id
                         unset($form_fields[$f['field_key']]);
                         //unset old field key
                     } else {
                         if ($frm_field->create($f)) {
                             // if no matching field id or key in this form, create the field
                             $imported['imported']['fields']++;
                         }
                     }
                 }
             } else {
                 if ($frm_field->create($f)) {
                     $imported['imported']['fields']++;
                 }
             }
             unset($field);
         }
         // Delete any fields attached to this form that were not included in the template
         if (isset($form_fields) && !empty($form_fields)) {
             foreach ($form_fields as $field) {
                 if (is_object($field)) {
                     $frm_field->destroy($field->id);
                 }
                 unset($field);
             }
             unset($form_fields);
         }
         // Update field ids/keys to new ones
         do_action('frm_after_duplicate_form', $form_id, $form);
         $imported['forms'][(int) $item->id] = $form_id;
         unset($form);
         unset($item);
     }
     unset($frm_form);
     unset($frm_field);
     return $imported;
 }
 public static function import_xml_entries($entries, $imported)
 {
     global $frm_duplicate_ids, $wpdb, $frm_field;
     $frm_entry = new FrmEntry();
     $saved_entries = array();
     foreach ($entries as $item) {
         $entry = array('id' => (int) $item->id, 'item_key' => (string) $item->item_key, 'name' => (string) $item->name, 'description' => FrmAppHelper::maybe_json_decode((string) $item->description), 'ip' => (string) $item->ip, 'form_id' => isset($imported['forms'][(int) $item->form_id]) ? $imported['forms'][(int) $item->form_id] : (int) $item->form_id, 'post_id' => isset($imported['posts'][(int) $item->post_id]) ? $imported['posts'][(int) $item->post_id] : (int) $item->post_id, 'user_id' => FrmProAppHelper::get_user_id_param((string) $item->user_id), 'parent_item_id' => (int) $item->parent_item_id, 'is_draft' => (int) $item->is_draft, 'updated_by' => FrmProAppHelper::get_user_id_param((string) $item->updated_by), 'created_at' => (string) $item->created_at, 'updated_at' => (string) $item->updated_at);
         $metas = array();
         foreach ($item->item_meta as $meta) {
             $field_id = (int) $meta->field_id;
             if (is_array($frm_duplicate_ids) && isset($frm_duplicate_ids[$field_id])) {
                 $field_id = $frm_duplicate_ids[$field_id];
             }
             $field = $frm_field->getOne($field_id);
             if (!$field) {
                 continue;
             }
             $metas[$field_id] = FrmAppHelper::maybe_json_decode((string) $meta->meta_value);
             $metas[$field_id] = apply_filters('frm_import_val', $metas[$field_id], $field);
             switch ($field->type) {
                 case 'user_id':
                     $metas[$field_id] = FrmProAppHelper::get_user_id_param($metas[$field_id]);
                     if ($metas[$field_id] && is_numeric($metas[$field_id])) {
                         $entry['frm_user_id'] = $metas[$field_id];
                     }
                     break;
                 case 'file':
                     $metas[$field_id] = self::get_file_id($metas[$field_id]);
                     break;
                 case 'date':
                     $metas[$field_id] = self::get_date($metas[$field_id]);
                     break;
                 case 'data':
                     $metas[$field_id] = self::get_dfe_id($metas[$field_id], $field, $saved_entries, $metas);
                     break;
                 case 'select':
                 case 'checkbox':
                     $metas[$field_id] = self::get_multi_opts($metas[$field_id], $field);
                     break;
             }
             unset($field);
             unset($meta);
         }
         unset($item);
         $entry['item_meta'] = $metas;
         unset($metas);
         // edit entry if the key and created time match
         $editing = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}frm_items WHERE item_key=%s AND created_at=%s", $entry['item_key'], date('Y-m-d H:i:s', strtotime($entry['created_at']))));
         if ($editing) {
             $frm_entry->update($entry['id'], $entry);
             $imported['updated']['items']++;
             $saved_entries[$entry['id']] = $entry['id'];
         } else {
             if ($e = $frm_entry->create($entry)) {
                 $saved_entries[$entry['id']] = $e;
                 $imported['imported']['items']++;
             }
         }
         unset($entry);
     }
     unset($entries);
     return $imported;
 }