/** * Saves form meta. Note the special requirements for the meta string. * * @param $id * @param string $form_json A valid JSON string. The JSON is manipulated before decoding and is designed to work together with jQuery.toJSON() rather than json_encode. Avoid using json_encode as it will convert unicode characters into their respective entities with slashes. These slashes get stripped so unicode characters won't survive intact. * * @return array */ public static function save_form_info($id, $form_json) { global $wpdb; $form_json = stripslashes($form_json); $form_json = nl2br($form_json); GFCommon::log_debug('GFFormDetail::save_form_info(): Form meta json: ' . $form_json); $form_meta = json_decode($form_json, true); $form_meta = GFFormsModel::convert_field_objects($form_meta); GFCommon::log_debug('GFFormDetail::save_form_info(): Form meta => ' . print_r($form_meta, true)); if (!$form_meta) { return array('status' => 'invalid_json', 'meta' => null); } $form_table_name = $wpdb->prefix . 'rg_form'; //Making sure title is not duplicate $forms = RGFormsModel::get_forms(); foreach ($forms as $form) { if (strtolower($form->title) == strtolower($form_meta['title']) && rgar($form_meta, 'id') != $form->id) { return array('status' => 'duplicate_title', 'meta' => $form_meta); } } if ($id > 0) { $form_meta = GFFormsModel::trim_form_meta_values($form_meta); RGFormsModel::update_form_meta($id, $form_meta); //updating form title $wpdb->query($wpdb->prepare("UPDATE {$form_table_name} SET title=%s WHERE id=%d", $form_meta['title'], $form_meta['id'])); $form_meta = RGFormsModel::get_form_meta($id); do_action('gform_after_save_form', $form_meta, false); return array('status' => $id, 'meta' => $form_meta); } else { //inserting form $id = RGFormsModel::insert_form($form_meta['title']); //updating object's id property $form_meta['id'] = $id; //creating default notification if (apply_filters('gform_default_notification', true)) { $default_notification = array('id' => uniqid(), 'to' => '{admin_email}', 'name' => __('Admin Notification', 'gravityforms'), 'event' => 'form_submission', 'toType' => 'email', 'subject' => __('New submission from', 'gravityforms') . ' {form_title}', 'message' => '{all_fields}'); $notifications = array($default_notification['id'] => $default_notification); //updating notifications form meta RGFormsModel::save_form_notifications($id, $notifications); } // add default confirmation when saving a new form $confirmation_id = uniqid(); $confirmations = array(); $confirmations[$confirmation_id] = array('id' => $confirmation_id, 'name' => __('Default Confirmation', 'gravityforms'), 'isDefault' => true, 'type' => 'message', 'message' => __('Thanks for contacting us! We will get in touch with you shortly.', 'gravityforms'), 'url' => '', 'pageId' => '', 'queryString' => ''); GFFormsModel::save_form_confirmations($id, $confirmations); //updating form meta RGFormsModel::update_form_meta($id, $form_meta); $form_meta = RGFormsModel::get_form_meta($id); do_action('gform_after_save_form', $form_meta, true); return array('status' => $id * -1, 'meta' => $form_meta); } }
public static function handle_confirmation_edit_submission($confirmation, $form) { if (empty($_POST) || !check_admin_referer('gform_confirmation_edit', 'gform_confirmation_edit')) { return $confirmation; } $is_new_confirmation = !$confirmation; if ($is_new_confirmation) { $confirmation['id'] = uniqid(); } $confirmation['name'] = rgpost('form_confirmation_name'); $confirmation['type'] = rgpost('form_confirmation'); $confirmation['message'] = rgpost('form_confirmation_message'); $confirmation['disableAutoformat'] = rgpost('form_disable_autoformatting'); $confirmation['pageId'] = rgpost('form_confirmation_page'); $confirmation['url'] = rgpost('form_confirmation_url'); $confirmation['queryString'] = '' != rgpost('form_redirect_querystring') ? rgpost('form_redirect_querystring') : rgpost('form_page_querystring'); $confirmation['isDefault'] = rgpost('is_default'); // if is default confirmation, override any submitted conditional logic with empty array $confirmation['conditionalLogic'] = $confirmation['isDefault'] ? array() : json_decode(rgpost('conditional_logic'), ARRAY_A); $failed_validation = false; if (!$confirmation['name']) { $failed_validation = true; GFCommon::add_error_message(__('You must specify a Confirmation Name.', 'gravityforms')); } switch ($confirmation['type']) { case 'page': if (empty($confirmation['pageId'])) { $failed_validation = true; GFCommon::add_error_message(__('You must select a Confirmation Page.', 'gravityforms')); } break; case 'redirect': if (empty($confirmation['url'])) { $failed_validation = true; GFCommon::add_error_message(__('You must specify a Redirect URL.', 'gravityforms')); } break; } if ($failed_validation) { return $confirmation; } // allow user to filter confirmation before save $confirmation = apply_filters("gform_pre_confirmation_save_{$form['id']}", apply_filters('gform_pre_confirmation_save', $confirmation, $form), $form); // trim values $confirmation = GFFormsModel::trim_conditional_logic_values_from_element($confirmation, $form); // add current confirmation to confirmations array $form['confirmations'][$confirmation['id']] = $confirmation; // save updated confirmations array $result = GFFormsModel::save_form_confirmations($form['id'], $form['confirmations']); if ($result !== false) { GFCommon::add_message(sprintf(__('Confirmation saved successfully. %sBack to confirmations.%s', 'gravityforms'), '<a href="' . remove_query_arg(array('cid', 'duplicatedcid')) . '">', '</a>')); } else { GFCommon::add_error_message(__('There was an issue saving this confirmation.', 'gravityforms')); } return $confirmation; }
public static function deactivate_save($form) { $form_id = $form['id']; foreach ($form['notifications'] as $notification_id => $notification) { if (rgar($notification, 'isDefault') && rgar($notification, 'event') == 'form_save_email_requested') { unset($form['notifications'][$notification_id]); GFFormsModel::save_form_notifications($form_id, $form['notifications']); break; } } $changed = false; foreach ($form['confirmations'] as $confirmation_id => $confirmation) { $event = rgar($confirmation, 'event'); if (rgar($confirmation, 'isDefault') && ($event == 'form_saved' || $event == 'form_save_email_sent')) { unset($form['confirmations'][$confirmation_id]); $changed = true; } } if ($changed) { GFFormsModel::save_form_confirmations($form_id, $form['confirmations']); } return $form; }
/** * Saves form meta. Note the special requirements for the meta string. * * @param $id * @param string $form_json A valid JSON string. The JSON is manipulated before decoding and is designed to work together with jQuery.toJSON() rather than json_encode. Avoid using json_encode as it will convert unicode characters into their respective entities with slashes. These slashes get stripped so unicode characters won't survive intact. * * @return array */ public static function save_form_info($id, $form_json) { global $wpdb; $form_json = stripslashes($form_json); $form_json = nl2br($form_json); GFCommon::log_debug("form meta json:" . $form_json); $form_meta = json_decode($form_json, true); GFCommon::log_debug("form meta:"); GFCommon::log_debug(print_r($form_json, true)); if (!$form_meta) { return array("status" => "invalid_json", "meta" => null); } $form_table_name = $wpdb->prefix . "rg_form"; //Making sure title is not duplicate $forms = RGFormsModel::get_forms(); foreach ($forms as $form) { if (strtolower($form->title) == strtolower($form_meta["title"]) && rgar($form_meta, "id") != $form->id) { return array("status" => "duplicate_title", "meta" => $form_meta); } } if ($id > 0) { $form_meta = GFFormsModel::trim_form_meta_values($form_meta); RGFormsModel::update_form_meta($id, $form_meta); //updating form title $wpdb->query($wpdb->prepare("UPDATE {$form_table_name} SET title=%s WHERE id=%d", $form_meta["title"], $form_meta["id"])); $form_meta = RGFormsModel::get_form_meta($id); do_action('gform_after_save_form', $form_meta, false); return array("status" => $id, "meta" => $form_meta); } else { //inserting form $id = RGFormsModel::insert_form($form_meta["title"]); //updating object's id property $form_meta["id"] = $id; //creating default notification if (apply_filters('gform_default_notification', true)) { $default_notification = array("id" => uniqid(), "to" => "{admin_email}", "name" => __("Admin Notification", "gravityforms"), "event" => "form_submission", "toType" => "email", "subject" => __("New submission from", "gravityforms") . " {form_title}", "message" => "{all_fields}"); $notifications = array($default_notification["id"] => $default_notification); //updating notifications form meta RGFormsModel::save_form_notifications($id, $notifications); } // add default confirmation when saving a new form $confirmation_id = uniqid(); $confirmations = array(); $confirmations[$confirmation_id] = array('id' => $confirmation_id, 'name' => __('Default Confirmation', 'gravityforms'), 'isDefault' => true, 'type' => 'message', 'message' => __("Thanks for contacting us! We will get in touch with you shortly.", "gravityforms"), 'url' => '', 'pageId' => '', 'queryString' => ''); GFFormsModel::save_form_confirmations($id, $confirmations); //updating form meta RGFormsModel::update_form_meta($id, $form_meta); $form_meta = RGFormsModel::get_form_meta($id); do_action('gform_after_save_form', $form_meta, true); return array("status" => $id * -1, "meta" => $form_meta); } }