checkAuth("admin");
$request = array_merge($_GET, $_POST);
$form_id = General::loadField("form_id", "curr_form_id");
$view_id = Views::getCurrentView($request, $form_id);
$root_url = Core::getRootUrl();
if (empty($view_id) || !Views::checkViewExists($view_id, true)) {
General::redirect("edit/?page=views&form_id=$form_id&message=no_views");
}
$view_info = Views::getView($view_id);
$success = true;
$message = "";
if ($view_info["may_copy_submissions"] == "yes" && isset($_GET["copy_submission"]) && is_numeric($_GET["copy_submission"])) {
list($success, $message, $new_submission_id) = Submissions::copySubmission($form_id, $_GET["copy_submission"]);
if ($success) {
$request["submission_id"] = $new_submission_id;
}
}
$submission_id = isset($request["submission_id"]) ? $request["submission_id"] : "";
if (empty($submission_id)) {
General::redirect("submissions.php");
}
Sessions::set("last_submission_id", $submission_id);
Sessions::set("last_submission_id_{$form_id}", $submission_id);
Sessions::set("last_link_page_{$form_id}", "edit");
// get a list of all editable fields in the View. This is used for security purposes for the update function and to
// determine whether the page contains any editable fields
$editable_field_ids = ViewFields::getEditableViewFields($view_id);
$failed_validation = false;
$core_update_success = true;
$changed_fields = array();
if (isset($_POST) && !empty($_POST)) {
list($success, $message, $changed_fields, $failed_validation, $core_update_success) = Submissions::updateSubmissionWithConflictDetection($form_id, $submission_id, $view_id, $editable_field_ids, $request);
}
$form_info = Forms::getForm($form_id);
$has_tabs = false;
foreach ($view_info["tabs"] as $tab_info) {
if (!empty($tab_info["tab_label"])) {
$has_tabs = true;
break;
}
}
$tab_number = $has_tabs ? General::loadField("tab", "view_{$view_id}_current_tab", 1) : "";
$grouped_fields = ViewFields::getGroupedViewFields($view_id, $tab_number, $form_id, $submission_id);
if ($failed_validation && !$core_update_success) {
$grouped_fields = FieldValidation::mergeFormSubmission($grouped_fields, $_POST);
}
$reconcile_changed_fields = array();
if (empty($changed_fields)) {
Sessions::clear("conflicted_user_values");
Submissions::trackCurrentEditSubmissionFields($grouped_fields, $submission_id, $view_id, $tab_number);
} else {
$reconcile_changed_fields = Submissions::getChangedFieldsToReconcile($grouped_fields, $changed_fields);
}
$page_field_ids = array();
$page_field_type_ids = array();
$page_has_required_fields = false;
foreach ($grouped_fields as $group) {
foreach ($group["fields"] as $field_info) {
$page_field_ids[] = $field_info["field_id"];
if (!in_array($field_info["field_type_id"], $page_field_type_ids)) {
$page_field_type_ids[] = $field_info["field_type_id"];
}
if ($field_info["is_required"]) {
$page_has_required_fields = true;
}
}
}
$page_field_types = FieldTypes::get(true, $page_field_type_ids);
// construct the tab list
$view_tabs = ViewTabs::getViewTabs($view_id, true);
$tabs = array();
$same_page = General::getCleanPhpSelf();
foreach ($view_tabs as $key => $value) {
$tabs[$key] = array(
"tab_label" => $value["tab_label"],
"tab_link" => "{$same_page}?tab=$key&form_id=$form_id&submission_id={$submission_id}"
);
}
// get a list of editable fields on this tab
$editable_tab_fields = array_intersect($page_field_ids, $editable_field_ids);
// if we're just coming here from the search results page, get a fresh list of every submission ID in this
// search result set. This is used to build the internal "<< previous next >>" nav on this details page.
// They need to exactly correspond to the ordering of the search results or they don't make sense
$search = Sessions::exists("current_search") ? Sessions::get("current_search") : array();
if (Sessions::exists("new_search") && Sessions::get("new_search") == "yes") {
$searchable_columns = ViewFields::getViewSearchableFields("", $view_info["fields"]);
// extract the original search settings and get the list of IDs
$submission_ids = Submissions::getSearchSubmissionIds($form_id, $view_id, $search["order"], $search["search_fields"], $searchable_columns);
Sessions::set("form_{$form_id}_view_{$view_id}_submissions", $submission_ids);
Sessions::set("new_search", "no");
}
list($prev_link_html, $search_results_link_html, $next_link_html) = Submissions::getPrevNextLinks($form_id, $view_id, $submission_id, "submissions.php");
// construct the page label
$submission_placeholders = General::getSubmissionPlaceholders($form_id, $submission_id, "edit_submission");
$edit_submission_page_label = General::evalSmartyString($form_info["edit_submission_page_label"], $submission_placeholders);
$validation_js = FieldValidation::generateSubmissionJsValidation($grouped_fields);
// get all the shared resources
$settings = Settings::get("", "core");
$shared_resources_list = $settings["edit_submission_onload_resources"];
$shared_resources_array = explode("|", $shared_resources_list);
$shared_resources = "";
foreach ($shared_resources_array as $resource) {
$shared_resources .= General::evalSmartyString($resource, array("g_root_url" => $root_url)) . "\n";
}
// compile the header information
$page_vars = array(
"page" => "admin_edit_submission",
"page_url" => Pages::getPageUrl("admin_edit_submission"),
"g_success" => $success,
"g_message" => $message,
"head_title" => $edit_submission_page_label,
"form_info" => $form_info,
"form_id" => $form_id,
"view_id" => $view_id,
"submission_id" => $submission_id,
"tabs" => $tabs,
"settings" => $settings,
"tab_number" => $tab_number,
"grouped_fields" => $grouped_fields,
"changed_fields" => $reconcile_changed_fields,
"field_types" => $page_field_types,
"previous_link_html" => $prev_link_html,
"page_has_required_fields" => $page_has_required_fields,
"search_results_link_html" => $search_results_link_html,
"next_link_html" => $next_link_html,
"tab_has_editable_fields" => count($editable_tab_fields) > 0,
"view_info" => $view_info,
"edit_submission_page_label" => $edit_submission_page_label,
"page_field_ids" => $page_field_ids,
"page_field_ids_str" => implode(",", $page_field_ids),
"js_messages" => array(
"confirm_delete_submission", "notify_no_email_template_selected", "confirm_delete_submission_file",
"phrase_please_confirm", "word_no", "word_yes", "word_close", "phrase_validation_error"
)
);
$page_vars["head_string"] =<<< END
$shared_resources
END;
$page_vars["head_js"] =<<< END
$validation_js
END;
Themes::displayPage("admin/forms/edit_submission.tpl", $page_vars);