コード例 #1
1
 /**
  * Move entries from parent form to child form
  *
  * @since 2.0.09
  */
 private static function move_entries_to_child_form($args)
 {
     global $wpdb;
     // get the ids of the entries saved in these fields
     $item_ids = FrmDb::get_col('frm_item_metas', array('field_id' => $args['children']), 'item_id', array('group_by' => 'item_id'));
     foreach ($item_ids as $old_id) {
         // Create a new entry in the child form
         $new_id = FrmEntry::create(array('form_id' => $args['form_id'], 'parent_item_id' => $old_id));
         // Move the parent item_metas to the child form
         $where = array('item_id' => $old_id, 'field_id' => $args['children']);
         FrmDb::get_where_clause_and_values($where);
         array_unshift($where['values'], $new_id);
         $c = $wpdb->query($wpdb->prepare('UPDATE ' . $wpdb->prefix . 'frm_item_metas SET item_id = %d ' . $where['where'], $where['values']));
         if ($c) {
             // update the section field meta with the new entry ID
             $u = FrmEntryMeta::update_entry_meta($old_id, $args['field_id'], null, $new_id);
             if (!$u) {
                 // add the row if it wasn't there to update
                 FrmEntryMeta::add_entry_meta($old_id, $args['field_id'], null, $new_id);
             }
         }
     }
 }
コード例 #2
0
 /**
  * @covers FrmEntry::create
  * @covers FrmEntry::is_duplicate
  */
 function test_is_duplicate()
 {
     $form = $this->factory->form->get_object_by_id($this->contact_form_key);
     $entry_data = $this->factory->field->generate_entry_array($form);
     $entry = FrmEntry::create($entry_data);
     $this->assertNotEmpty($entry);
     $this->assertTrue(is_numeric($entry));
     $entry = FrmEntry::create($entry_data);
     $this->assertEmpty($entry, 'Failed to detect duplicate entry');
 }
コード例 #3
0
 function create_object($args)
 {
     $default_values = array('form_id' => $args['form_id'], 'item_meta' => array());
     $args = array_merge($default_values, $args);
     return FrmEntry::create($args);
 }
コード例 #4
0
 public static function process_entry($errors = '', $ajax = false)
 {
     $form_id = FrmAppHelper::get_post_param('form_id', '', 'absint');
     if (FrmAppHelper::is_admin() || empty($_POST) || empty($form_id) || !isset($_POST['item_key'])) {
         return;
     }
     global $frm_vars;
     $form = FrmForm::getOne($form_id);
     if (!$form) {
         return;
     }
     $params = FrmForm::get_params($form);
     if (!isset($frm_vars['form_params'])) {
         $frm_vars['form_params'] = array();
     }
     $frm_vars['form_params'][$form->id] = $params;
     if (isset($frm_vars['created_entries'][$form_id])) {
         return;
     }
     if ($errors == '') {
         $errors = FrmEntryValidate::validate($_POST);
     }
     /**
      * Use this filter to add trigger actions and add errors after
      * all other errors have been processed
      * @since 2.0.6
      */
     $errors = apply_filters('frm_entries_before_create', $errors, $form);
     $frm_vars['created_entries'][$form_id] = array('errors' => $errors);
     if (empty($errors)) {
         $_POST['frm_skip_cookie'] = 1;
         if ($params['action'] == 'create') {
             if (apply_filters('frm_continue_to_create', true, $form_id) && !isset($frm_vars['created_entries'][$form_id]['entry_id'])) {
                 $frm_vars['created_entries'][$form_id]['entry_id'] = FrmEntry::create($_POST);
             }
         }
         do_action('frm_process_entry', $params, $errors, $form, array('ajax' => $ajax));
         unset($_POST['frm_skip_cookie']);
     }
 }
コード例 #5
0
 public static function create()
 {
     if (!current_user_can('frm_create_entries')) {
         return FrmEntriesController::display_list();
     }
     $params = FrmForm::get_admin_params();
     $form = $record = false;
     if ($params['form']) {
         $form = FrmForm::getOne($params['form']);
     }
     if (!$form) {
         return;
     }
     $errors = FrmEntryValidate::validate($_POST);
     if (count($errors) > 0) {
         self::get_new_vars($errors, $form);
         return;
     }
     if ((isset($_POST['frm_page_order_' . $form->id]) || FrmProFormsHelper::going_to_prev($form->id)) && !FrmProFormsHelper::saving_draft()) {
         self::get_new_vars('', $form);
         return;
     }
     $_SERVER['REQUEST_URI'] = str_replace('&frm_action=new', '', FrmAppHelper::get_server_value('REQUEST_URI'));
     global $frm_vars;
     if (!isset($frm_vars['created_entries'][$form->id]) || !$frm_vars['created_entries'][$form->id]) {
         $frm_vars['created_entries'][$form->id] = array();
     }
     if (!isset($frm_vars['created_entries'][$_POST['form_id']]['entry_id'])) {
         $record = $frm_vars['created_entries'][$form->id]['entry_id'] = FrmEntry::create($_POST);
     }
     if ($record) {
         if (FrmProFormsHelper::saving_draft()) {
             $message = __('Draft was Successfully Created', 'formidable');
         } else {
             $message = __('Entry was Successfully Created', 'formidable');
         }
         self::get_edit_vars($record, $errors, $message);
     } else {
         self::get_new_vars($errors, $form);
     }
 }
コード例 #6
0
 /**
  * Save the entry after checking if it should be created or updated
  */
 private static function save_or_edit_entry($values)
 {
     $editing = false;
     if (isset($values['id']) && $values['item_key']) {
         global $wpdb;
         //check for updating by entry ID
         $editing = FrmDb::get_var('frm_items', array('form_id' => $values['form_id'], 'id' => $values['id']));
     }
     if ($editing) {
         FrmEntry::update($values['id'], $values);
     } else {
         FrmEntry::create($values);
     }
 }
コード例 #7
0
 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;
 }
コード例 #8
0
ファイル: FrmProEntry.php プロジェクト: swc-dng/swcsandbox
 public static function save_sub_entries($values, $action = 'create')
 {
     $form_id = isset($values['form_id']) ? (int) $values['form_id'] : 0;
     if (!$form_id || !isset($values['item_meta'])) {
         return $values;
     }
     $form_fields = FrmProFormsHelper::has_field('form', $form_id, false);
     $section_fields = FrmProFormsHelper::has_field('divider', $form_id, false);
     if (!$form_fields && !$section_fields) {
         // only continue if there could be sub entries
         return $values;
     }
     $form_fields = array_merge($section_fields, $form_fields);
     $new_values = $values;
     unset($new_values['item_meta']);
     // allow for multiple embeded forms
     foreach ($form_fields as $field) {
         if (!isset($values['item_meta'][$field->id]) || !isset($field->field_options['form_select']) || !isset($values['item_meta'][$field->id]['form'])) {
             // don't continue if we don't know which form to insert the sub entries into
             unset($values['item_meta'][$field->id]);
             continue;
         }
         if ('divider' == $field->type && !FrmField::is_repeating_field($field)) {
             // only create sub entries for repeatable sections
             continue;
         }
         $field_values = $values['item_meta'][$field->id];
         $sub_form_id = $field->field_options['form_select'];
         unset($field_values['form']);
         if ($action != 'create' && isset($field_values['id'])) {
             $old_ids = FrmEntryMeta::get_entry_meta_by_field($values['id'], $field->id);
             $old_ids = array_filter((array) $old_ids, 'is_numeric');
             unset($field_values['id']);
         } else {
             $old_ids = array();
         }
         $sub_ids = array();
         foreach ($field_values as $k => $v) {
             $entry_values = $new_values;
             $entry_values['form_id'] = $sub_form_id;
             $entry_values['item_meta'] = (array) $v;
             $entry_values['parent_item_id'] = isset($values['id']) ? $values['id'] : 0;
             $entry_values['parent_form_id'] = $form_id;
             // include a nonce just to be sure the parent_form_id is legit
             $entry_values['parent_nonce'] = wp_create_nonce('parent');
             // set values for later user (file upload and tags fields)
             $_POST['item_meta']['key_pointer'] = $k;
             $_POST['item_meta']['parent_field'] = $field->id;
             if (!is_numeric($k) && in_array(str_replace('i', '', $k), $old_ids)) {
                 // update existing sub entries
                 $entry_values['id'] = str_replace('i', '', $k);
                 FrmEntry::update($entry_values['id'], $entry_values);
                 $sub_id = $entry_values['id'];
             } else {
                 // create new sub entries
                 $sub_id = FrmEntry::create($entry_values);
             }
             if ($sub_id) {
                 $sub_ids[] = $sub_id;
             }
             unset($k, $v, $entry_values, $sub_id);
         }
         $values['item_meta'][$field->id] = $sub_ids;
         // array of sub entry ids
         $old_ids = array_diff($old_ids, $sub_ids);
         if (!empty($old_ids)) {
             // delete entries that were removed from section
             foreach ($old_ids as $old_id) {
                 FrmEntry::destroy($old_id);
             }
         }
         unset($field);
     }
     return $values;
 }