View source
<?php
function arrange_fields_menu() {
$items = array();
$items["arrange-fields/%"] = array(
"title" => "Arrange fields - Form",
"page callback" => "arrange_fields_display_form",
"page arguments" => array(
1,
),
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_CALLBACK,
);
$items["arrange-fields/webform/%"] = array(
"title" => "Arrange fields - Webform",
"page callback" => "arrange_fields_display_webform",
"page arguments" => array(
2,
),
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_CALLBACK,
);
$items["arrange-fields/other/%"] = array(
"title" => "Arrange fields - Other Forms",
"page callback" => "arrange_fields_display_otherform",
"page arguments" => array(
2,
),
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_CALLBACK,
);
$items["admin/content/types/arrange-fields"] = array(
"title" => "Arrange form fields",
"page callback" => "arrange_fields_display_main",
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_LOCAL_TASK,
"weight" => 5,
);
$items["admin/settings/arrange-fields"] = array(
"title" => "Arrange fields",
"description" => "Arrange fields and components on your forms.",
"page callback" => "arrange_fields_display_main",
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_NORMAL_ITEM,
);
$items["admin/settings/arrange-fields/forms"] = array(
"title" => "Forms",
"type" => MENU_DEFAULT_LOCAL_TASK,
"weight" => 1,
);
$items["admin/settings/arrange-fields/settings"] = array(
"title" => "Settings",
"page callback" => "drupal_get_form",
"page arguments" => array(
"arrange_fields_settings_form",
),
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_LOCAL_TASK,
"weight" => 2,
);
$items["admin/settings/arrange-fields/export"] = array(
"title" => "Export",
"page callback" => "drupal_get_form",
"page arguments" => array(
"arrange_fields_export_form",
),
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_LOCAL_TASK,
"weight" => 3,
);
$items["admin/settings/arrange-fields/import"] = array(
"title" => "Import",
"page callback" => "drupal_get_form",
"page arguments" => array(
"arrange_fields_import_form",
),
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_LOCAL_TASK,
"weight" => 4,
);
if (function_exists("content_types")) {
foreach (node_get_types() as $type) {
$type_name = $type->type;
$content_type = content_types($type_name);
$type_url_str = $content_type['url_str'];
$items["admin/content/node-type/{$type_url_str}/arrange-fields"] = array(
"title" => "Arrange fields",
"page callback" => "arrange_fields_display_form",
"page arguments" => array(
$type_name,
),
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_LOCAL_TASK,
"weight" => 3,
);
}
}
if ($GLOBALS["arrange_fields_webform_installed"]) {
$items["node/%webform_menu/edit/arrange-fields"] = array(
"title" => "Arrange fields",
"page callback" => "arrange_fields_display_webform",
"page arguments" => array(
1,
),
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_LOCAL_TASK,
"weight" => 3,
);
$items["node/%webform_menu/webform/arrange-fields"] = array(
"title" => "Arrange fields",
"page callback" => "arrange_fields_display_webform",
"page arguments" => array(
1,
),
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_LOCAL_TASK,
"weight" => 3,
);
}
$items["arrange-fields/popup-edit-field"] = array(
"title" => "Arrange fields - Form",
"page callback" => "arrange_fields_popup_edit_field",
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_CALLBACK,
);
$items["arrange-fields/popup-close-window"] = array(
"title" => "Arrange fields - Form",
"page callback" => "arrange_fields_popup_close_window",
"access arguments" => array(
"administer arrange fields",
),
"type" => MENU_CALLBACK,
);
return $items;
}
function arrange_fields_perm() {
return array(
"administer arrange fields",
);
}
function arrange_fields_settings_form() {
$form = array();
$form["arrange_fields_grid_width"] = array(
"#type" => "select",
"#title" => t("Grid width"),
"#options" => array(
1 => "1px",
5 => "5px",
10 => "10px (default)",
15 => "15px",
20 => "20px",
),
"#default_value" => variable_get("arrange_fields_grid_width", 10),
"#description" => t("This setting determines the spacing between elements on the grid (when arranging fields).\n For more free-form movement, set to 1px. More rigid, boxy movement, set to 20px.\n If you are unsure what to set, leave this at 10px."),
);
$form["arrange_fields_other_form_ids"] = array(
"#type" => "textarea",
"#title" => t("Additional form_id's"),
"#default_value" => variable_get("arrange_fields_other_form_ids", ""),
"#description" => t("Enter any additional form_id's you would like to be\n able to arrange, <strong>one per line</strong>. \n Be aware that\n this module (Arrange Fields) may not be able to\n arrange forms with complex structures. Also, form_ids that\n are longer than 100 characters are allowed, but may not work \n correctly if the first 100 characters are identical between two\n or more ids.\n <br>\n After you enter complete form_id's here and hit Save,\n you will be able to arrange them by clicking on them\n at the bottom of the ") . l("Arrange Fields admin settings page", "admin/settings/arrange-fields") . ".\n <br>\n " . t("Example:") . " <br>\n <strong>user_register</strong>\n <br>\n <strong>my_custom_form_id_1</strong>\n ",
);
return system_settings_form($form);
}
function arrange_fields_export_form() {
$form = array();
$res = db_query("SELECT * FROM {variable}\n WHERE name LIKE 'arrange_fields_position_data_%%' \n ORDER BY name ");
while ($cur = db_fetch_array($res)) {
$db_name = $cur["name"];
if (!($db_value = unserialize($cur["value"]))) {
continue;
}
if (trim($db_value) == "") {
continue;
}
$form_id = str_replace("arrange_fields_position_data_", "", $db_name);
if (strstr($form_id, "webform_client_form")) {
$nid = str_replace("webform_client_form_", "", $form_id);
if (!($node = node_load($nid))) {
continue;
}
$form_id .= " (Webform: {$node->title})";
}
$value = $db_name . "~~!af-name-sep!~~" . $db_value . "~~!af-val-sep!~~";
$form[$db_name] = array(
"#title" => $form_id,
"#type" => "textarea",
"#default_value" => $value,
);
}
return $form;
}
function arrange_fields_import_form() {
$form = array();
$form["import"] = array(
"#title" => "Import",
"#type" => "textarea",
"#rows" => 15,
"#description" => t("Use this box to import definitions from an Arrange Fields export.\n You may paste in more than one definition at a time."),
);
$form["submit"] = array(
"#type" => "submit",
"#value" => "Import",
);
return $form;
}
function arrange_fields_import_form_submit($form, $form_state) {
$import = trim($form_state["values"]["import"]);
$definitions = explode("~~!af-val-sep!~~", $import);
foreach ($definitions as $definition) {
$temp = explode("~~!af-name-sep!~~", $definition);
$db_name = trim($temp[0]);
$db_value = trim($temp[1]);
if ($db_name == "") {
continue;
}
variable_set($db_name, $db_value);
drupal_set_message($db_name . " " . t("definition was imported successfully."));
}
}
function arrange_fields_get_form_fields(&$arr, $previous_key = "") {
$rtn = array();
foreach ($arr as $name => &$element) {
if (is_array($element)) {
if ($name == "buttons" && $element["#type"] == "" && $element["submit"]["#type"] == "submit") {
$rtn[] = array(
"name" => $name,
"element" => &$element,
);
}
elseif (isset($element["#type"]) && $element["#type"] != "hidden" && $element["#type"] != "token" && $element["#type"] != "value") {
if (is_numeric($name) && $previous_key != "") {
$rtn[] = array(
"name" => $previous_key,
"element" => &$arr,
);
}
else {
$rtn[] = array(
"name" => $name,
"element" => &$element,
);
}
}
else {
$temp = arrange_fields_get_form_fields($element, $name);
$rtn = array_merge($rtn, $temp);
}
}
}
return $rtn;
}
function arrange_fields_add_draggable_wrappers(&$form, $form_type, $disable_buttons = FALSE) {
if ($form_type == "webform") {
$fields = array();
$fields[] = array(
"name" => "submit",
"element" => &$form["submit"],
);
$fields[] = array(
"name" => "next",
"element" => &$form["next"],
);
$fields[] = array(
"name" => "previous",
"element" => &$form["previous"],
);
foreach ($form["submitted"] as $name => &$element) {
if (is_array($element)) {
$fields[] = array(
"name" => $name,
"element" => &$element,
);
}
}
if (is_array($form["actions"])) {
foreach ($form["actions"] as $name => &$element) {
if (is_array($element)) {
$fields[] = array(
"name" => $name,
"element" => &$element,
);
}
}
}
if (isset($form["details"]["nid"]["#value"])) {
$webform_nid = $form["details"]["nid"]["#value"];
$webform_node = node_load($webform_nid);
}
if (is_array($form["captcha"])) {
$fields[] = array(
"name" => "captcha",
"element" => &$form["captcha"],
);
}
if (isset($form["mollom"]) && is_array($form["mollom"])) {
$fields[] = array(
"name" => "mollom",
"element" => &$form["mollom"],
);
}
}
else {
$fields = arrange_fields_get_form_fields($form);
}
foreach ($fields as $field_arr) {
$field_name = $field_arr["name"];
$element =& $field_arr["element"];
$field_name = preg_replace("/[^a-zA-Z0-9]/", "-", $field_name);
if ($element["#arrange_fields_added_wrappers"] == TRUE) {
continue;
}
if ($element["#type"] == "hidden" || $element["#type"] == "token" || $element["#type"] == "value") {
continue;
}
$field_type = $element["#type"];
$edit_link = "";
$edit_link = "<div class='arrange-fields-control-handle'>";
if ($GLOBALS["arrange_fields_editing_type"] == $form_type && $form_type != "" && substr($field_name, 0, 6) == "field_") {
$edit_link .= "<a href='javascript: arrangeFieldsPopupEditField(\"{$form_type}\", \"{$field_name}\");'>cck</a>";
}
if ($form_type == "webform" && is_array($webform_node->webform["components"])) {
$cid = FALSE;
foreach ($webform_node->webform["components"] as $tcid => $c_arr) {
if ($c_arr["form_key"] == $field_name) {
$cid = $tcid;
break;
}
}
if ($cid) {
$webform_field_id = $webform_nid . "_" . $cid;
$edit_link .= "<a href='javascript: arrangeFieldsPopupEditField(\"{$form_type}\", \"{$webform_field_id}\");'>wf</a>";
}
}
$edit_link .= "<span class='arrange-fields-handle-region'> </span>\n <a href='javascript: arrangeFieldsDialogConfigureField(\"{$field_name}\",\"{$field_type}\");' class='arrange-fields-config-link' \n title='Configure this field'> </a>";
$edit_link .= "</div>";
$css_class = "draggable-form-item";
$css_id = "edit-{$field_name}-draggable-wrapper";
if ($element["#type"] == "fieldset" && $field_name != "captcha") {
$css_class .= " draggable-form-item-fieldset";
$css_id = "edit-{$field_name}-fieldset-draggable-wrapper";
}
$element["#prefix"] .= "<div id='{$css_id}' class='{$css_class}'>{$edit_link}";
$element["#suffix"] .= "</div>";
if ($element["#type"] == "submit" || $element["#type"] == "button") {
if ($disable_buttons) {
$element["#attributes"]["disabled"] = "disabled";
$element["#attributes"]["class"] .= " disabled-button ";
}
}
if ($field_name == "buttons" && !isset($element["#type"]) && $disable_buttons) {
foreach ($element as &$e) {
if (is_array($e)) {
$e["#attributes"]["disabled"] = "disabled";
$e["#attributes"]["class"] .= " disabled-button ";
}
}
}
$element["#arrange_fields_added_wrappers"] = TRUE;
}
$GLOBALS["arrange_fields_added_wrappers_" . $form["form_id"]["#value"]] = TRUE;
}
function arrange_fields_popup_edit_field() {
$type_name = $_REQUEST["type_name"];
$field_name = $_REQUEST["field"];
if ($type_name != "webform") {
module_load_include('inc', 'content', 'includes/content.admin');
$GLOBALS["arrange_fields_editing_field"] = TRUE;
$rtn = drupal_get_form('content_field_edit_form', $type_name, $field_name);
}
else {
$temp = explode("_", $field_name);
$nid = $temp[0];
$cid = $temp[1];
$component = webform_menu_component_load($cid, $nid, "");
$node = node_load($nid);
$GLOBALS["arrange_fields_editing_field"] = TRUE;
$rtn = drupal_get_form('webform_component_edit_form', $node, $component, FALSE);
}
return $rtn;
}
function arrange_fields_popup_close_window() {
jquery_ui_add(array(
'ui.draggable',
'ui.dialog',
'ui.resizable',
));
drupal_add_js(drupal_get_path("module", "arrange_fields") . "/js/arrange_fields.js");
$rtn .= "<div style='text-align: center;'>\n <input type='button' value='" . t("Close and Save/Reload Main Window") . "'\n onClick='arrangeFieldsClosePopup()'>\n </div>";
return $rtn;
}
function arrange_fields_form_alter(&$form, &$form_state, $form_id) {
$form_type = $GLOBALS["arrange_fields_editing_type"];
if ($GLOBALS["arrange_fields_editing"] == $form_id) {
unset($form["#submit"]);
$form["#attributes"]["class"] = "arrange-fields-container";
if (!$GLOBALS["arrange_fields_added_wrappers_" . $form["form_id"]["#value"]]) {
arrange_fields_add_draggable_wrappers($form, $form_type, TRUE);
}
}
if ($position_data = variable_get("arrange_fields_position_data_{$form_id}", FALSE)) {
if (strpos($form_id, "webform_client_form") === 0) {
$form_type = "webform";
}
if ($form_type == "webform" && is_array($form["submission_info"]) && $form["submission_info"]["#type"] == "fieldset") {
return;
}
drupal_add_css(drupal_get_path("module", "arrange_fields") . "/css/arrange_fields.css");
drupal_add_js(drupal_get_path("module", "arrange_fields") . "/js/arrange_fields_node_edit.js");
$fid = $form["#id"];
$form["#attributes"]["class"] .= " arrange-fields-container ";
$form["#attributes"]["class"] .= " arrange-fields-container-{$fid} ";
if (!$GLOBALS["arrange_fields_added_wrappers_" . $form["form_id"]["#value"]]) {
arrange_fields_add_draggable_wrappers($form, $form_type);
}
$jsConfigArray = array();
$jsMarkupArray = array();
$css_markup = $markup_elements = "";
$lines = explode(";", $position_data);
foreach ($lines as $line) {
if (trim($line) == "") {
continue;
}
$temp = explode(",", $line);
$wrapper_id = trim($temp[0]);
$pos_top = trim($temp[1]);
$pos_left = trim($temp[2]);
$element_type = trim($temp[3]);
$width = trim($temp[4]);
$height = trim($temp[5]);
$wrapper_width = trim($temp[6]);
$wrapper_height = trim($temp[7]);
$label_display = trim($temp[8]);
$label_vertical_align = trim($temp[9]);
$text_label_display = $label_display;
if ($label_display == "inline-block") {
$text_label_display = "inline";
}
if ($wrapper_id == "~~maxBottom~~") {
$css_markup .= " .arrange-fields-container-{$fid} {\n height: {$pos_top};\n }";
continue;
}
if ($temp[6] == "~~markup_element~~") {
$markup_width = $temp[7];
$markup_height = $temp[8];
$safe_markup_body = trim($temp[9]);
$markup_body = arrange_fields_unconvert_unsafe_chars(trim($temp[9]));
$safe_wrapper_style = trim($temp[10]);
$wrapper_style = arrange_fields_unconvert_unsafe_chars(trim($temp[10]));
$z_index = trim($temp[11]);
$markup_elements .= "\n <div class='draggable-form-item arrange-fields-draggable-markup' \n id='{$wrapper_id}'>\n <div class='arrange-fields-control-handle arrange-fields-control-handle-markup'><span class='arrange-fields-handle-region'> </span>\n <a href='javascript: arrangeFieldsDialogEditMarkup(\"{$wrapper_id}\");' class='arrange-fields-config-markup-link' title='Configure this markup'> </a>\n </div>\n <div class='arrange-fields-markup-body form-item' \n id='{$wrapper_id}_body'>{$markup_body}</div>\n </div>";
$css_markup .= "\n #{$fid} #{$wrapper_id} {\n top: {$pos_top};\n left: {$pos_left};\n width: {$markup_width};\n height: {$markup_height};\n z-index: {$z_index};\n {$wrapper_style}\n }\n ";
$jsMarkupArray[$wrapper_id]["markupBody"] = $safe_markup_body;
$jsMarkupArray[$wrapper_id]["wrapperStyle"] = $safe_wrapper_style;
$jsMarkupArray[$wrapper_id]["zIndex"] = $z_index;
continue;
}
$jsConfigArray[$wrapper_id]["wrapperWidth"] = $wrapper_width;
$jsConfigArray[$wrapper_id]["wrapperHeight"] = $wrapper_height;
$jsConfigArray[$wrapper_id]["labelDisplay"] = $label_display;
$jsConfigArray[$wrapper_id]["labelVerticalAlign"] = $label_vertical_align;
$css_markup .= "\n \n #{$fid} #{$wrapper_id}{ \n top: {$pos_top};\n left: {$pos_left}; \n }\n ";
if ($width != "0px" && $element_type != "") {
$css_markup .= " \n #{$fid} #{$wrapper_id} {$element_type}.form-text, \n #{$fid} #{$wrapper_id} {$element_type}.form-textarea {\n width: {$width};\n ";
if ($element_type != "input") {
$css_markup .= "\n height: {$height}; \n ";
}
$css_markup .= " } ";
}
if ($wrapper_width != "") {
$css_markup .= " #{$fid} #{$wrapper_id} { width: {$wrapper_width}; } ";
}
if ($wrapper_height != "") {
$css_markup .= "\n #{$fid} #{$wrapper_id} { height: {$wrapper_height}; } \n #{$fid} #{$wrapper_id} fieldset { height: 100%; } \n ";
}
if ($label_display != "") {
$css_markup .= "\n #{$fid} #{$wrapper_id} .form-item label { \n vertical-align: {$label_vertical_align}; \n }\n #{$fid} #{$wrapper_id} .form-item > input, \n #{$fid} #{$wrapper_id} .form-item > label,\n #{$fid} #{$wrapper_id} .form-item > div,\n #{$fid} #{$wrapper_id} .form-item > div.form-radios > div,\n #{$fid} #{$wrapper_id} .form-item > div.form-checkboxes > div\n {\n display: {$label_display};\n }";
if ($element_type == "input") {
$css_markup .= "\n #{$fid} #{$wrapper_id} .form-item > label\n {\n display: {$text_label_display};\n }\n ";
}
$css_markup .= " \n #{$fid} #{$wrapper_id} .form-item div.ui-resizable-handle,\n #{$fid} #{$wrapper_id} .form-item div.description\n {\n display: block;\n } \n ";
}
}
drupal_add_js(array(
"arrangeFieldsDialogConfigObj" => $jsConfigArray,
), "setting");
drupal_add_js(array(
"arrangeFieldsDialogMarkupObj" => $jsMarkupArray,
), "setting");
drupal_add_js(array(
"arrangeFieldsGridWidth" => variable_get("arrange_fields_grid_width", 10),
), "setting");
if ($GLOBALS["arrange_fields_editing"] != $form_id) {
$css_markup .= "\n \n #{$fid} {\n border: 0;\n background: none;\n }\n \n #{$fid} .draggable-form-item {\n border: 0;\n background-color: transparent;\n }\n \n ";
}
$form["arrange_fields_css_markup_and_elements"] = array(
"#value" => "<style type='text/css'>{$css_markup}</style>{$markup_elements}",
"#after_build" => array(
"arrange_fields_add_form_css_js",
),
);
form_set_cache($form["#build_id"], $form, $form_state);
}
if (($form_id == "content_field_edit_form" || $form_id == "webform_component_edit_form") && $GLOBALS["arrange_fields_editing_field"] == TRUE) {
$form["#redirect"] = "arrange-fields/popup-close-window";
}
}
function arrange_fields_add_form_css_js($element) {
drupal_add_css(drupal_get_path("module", "arrange_fields") . "/css/arrange_fields.css");
drupal_add_js(drupal_get_path("module", "arrange_fields") . "/js/arrange_fields_node_edit.js");
return $element;
}
function arrange_fields_display_main() {
$rtn = "";
drupal_add_css(drupal_get_path("module", "arrange_fields") . "/css/arrange_fields.css");
$rtn .= t("Select a content type to arrange fields") . "...\n <ul>";
foreach (node_get_types() as $type) {
if ($GLOBALS["arrange_fields_webform_installed"] && $type->type == "webform") {
continue;
}
$rtn .= "<li>" . l($type->name, "arrange-fields/{$type->type}") . "</li>";
}
$rtn .= "</ul>";
if ($GLOBALS["arrange_fields_webform_installed"]) {
$rtn .= t("Select a webform to arrange fields") . "...\n <ul>";
$is_empty = TRUE;
$result = db_query("SELECT * FROM {node} WHERE type = 'webform'");
$nodes = array();
while ($node = db_fetch_object($result)) {
$nodes[] = $node;
$is_empty = FALSE;
}
if ($is_empty) {
$rtn .= "<li>" . t("No webforms have been created yet.") . "</li>";
}
else {
foreach ($nodes as $node_res) {
$rtn .= "<li>" . l($node_res->title, "arrange-fields/webform/{$node_res->nid}") . "</li>";
}
}
$rtn .= "</ul>";
}
$other_form_ids = trim(variable_get("arrange_fields_other_form_ids", ""));
if ($other_form_ids != "") {
$temp = explode("\n", $other_form_ids);
$rtn .= t("Additional form_id's you specified on the Settings tab...");
$rtn .= "<ul>";
foreach ($temp as $form_id) {
$rtn .= "<li>" . l($form_id, "arrange-fields/other/{$form_id}") . "</li>";
}
$rtn .= "</ul>";
$rtn .= "<div class='arrange-fields-other-form-caveat'>";
$rtn .= t("Some caveats: Arrange Fields may not work correctly on forms\n with complex structures. Also, remember that some forms may\n appear differently depending on if you are admin, an authorized user,\n or an anonymous user (like user_register).\n If you need to arrange a form which only appears for anonymous users,\n temporarily grant anonymous users the \"administer\n arrange fields\" permission so you can arrange the form how it\n needs to look. Just be sure to take this away when you are done as\n it introduces a major security risk.");
$rtn .= "</div>";
}
return $rtn;
}
function arrange_fields_init() {
if (function_exists("webform_menu")) {
$GLOBALS["arrange_fields_webform_installed"] = TRUE;
}
}
function arrange_fields_display_form($form_type) {
drupal_set_title("Arrange fields - {$form_type}");
$rtn = "";
$form_id = $form_type . "_node_form";
$position_data = variable_get("arrange_fields_position_data_{$form_id}", FALSE);
if ($position_data) {
drupal_add_js(array(
"arrangeFieldsNotNewForm" => TRUE,
), "setting");
}
arrange_fields_add_arrange_css_js();
$rtn .= drupal_get_form("arrange_fields_position_form", $form_id, $form_type);
$rtn .= "<div>" . t("Use this form to drag-and-drop fields into the order which\n you want them to appear on the node/edit page.") . "</div>\n <div>" . t("You may resize text fields by dragging the right side\n of the field.") . "</div>";
$rtn .= "<input type='button' value='add markup' onClick='arrangeFieldsDialogEditMarkup(\"new\");'>";
$GLOBALS["arrange_fields_editing"] = $form_id;
$GLOBALS["arrange_fields_editing_type"] = $form_type;
$node_form = new stdClass();
$node_form->type = $form_type;
$rtn .= drupal_get_form($form_id, $node_form, $my_form_state);
$rtn .= "<div>" . t("If you need more room, move a field close to the bottom. The\n container will resize, adding more room.") . "</div>";
$rtn .= arrange_fields_render_dialogs();
return $rtn;
}
function arrange_fields_unconvert_unsafe_chars($str) {
$str = str_replace("_~!co%~_", ",", $str);
$str = str_replace("_~!sc%~_", ";", $str);
$str = str_replace("_~!sq%~_", "'", $str);
$str = str_replace("_~!dq%~_", '"', $str);
$str = str_replace("_~!nl%~_", "\n", $str);
return $str;
}
function arrange_fields_render_dialogs() {
$rtn = "";
$rtn .= "<div id='arrange-fields-config-dialog' title='Configure'>\n <table>\n <tr>\n <td width='45%'>Wrapper width:</td><td><input type='input' name='af-dialog-width' size='6'></td>\n </tr>\n <tr> \n <td>Wrapper height:</td><td><input type='input' name='af-dialog-height' size='6'></td>\n </tr>\n </table>\n <div style='font-size: 0.8em; line-height: 1.0em;'>(remember to specify px, %, etc. Leave blank for default.)</div>\n <br>\n Label: \n <label><input type='radio' name='af-dialog-label-display' value='' checked> default (block)</label>\n <label><input type='radio' name='af-dialog-label-display' value='inline-block' > inline</label>\n </div>";
$rtn .= "<div id='arrange-fields-markup-dialog' title='Markup'>\n <div><b>Body:</b></div>\n <textarea name='af-markup-body' class='af-markup-body'></textarea>\n <div style='font-size: 0.8em; line-height: 1.0em;'>\n You may enter any valid HTML here.</div>\n \n <div style='padding-top: 10px;'><b>Wrapper style</b>='\n <input name='af-wrapper-style' class='af-wrapper-style'>\n '\n <div style='font-size: 0.8em; line-height: 1.0em;'>\n Enter style definitions. Ex: background-color: black;\n </div>\n </div>\n \n <div style='padding-top: 10px;'><b>Z-index</b>:\n <label><input type='radio' name='af-markup-z-index' value='201' checked> foreground (default)</label>\n <label><input type='radio' name='af-markup-z-index' value='75' > background</label>\n \n </div>\n\n \n <div class='af-delete-button'>\n <button type='button' onClick='arrangeFieldsDialogMarkupDelete();'>Delete</button>\n </div>\n </div>";
return $rtn;
}
function arrange_fields_display_webform($nid) {
if (is_object($nid)) {
$webform_node = $nid;
$nid = $webform_node->nid;
}
else {
$webform_node = node_load($nid);
}
$form_id = "webform_client_form_{$nid}";
$form_type = "webform";
drupal_set_title("Arrange fields - webform - {$webform_node->title}");
$rtn = "";
$position_data = variable_get("arrange_fields_position_data_{$form_id}", FALSE);
if ($position_data) {
drupal_add_js(array(
"arrangeFieldsNotNewForm" => TRUE,
), "setting");
}
arrange_fields_add_arrange_css_js();
$rtn .= drupal_get_form("arrange_fields_position_form", $form_id, $form_type);
$rtn .= "<div>" . t("Use this form to drag-and-drop fields into the order which\n you want them to appear on the webform entry page.") . "</div>\n <div>" . t("You may resize text fields by dragging the right side\n of the field.") . "</div>";
$rtn .= "<input type='button' value='add markup' onClick='arrangeFieldsDialogEditMarkup(\"new\");'>";
$GLOBALS["arrange_fields_editing"] = $form_id;
$GLOBALS["arrange_fields_editing_type"] = $form_type;
$rtn .= drupal_get_form($form_id, $webform_node, NULL, TRUE);
$rtn .= "<div>" . t("If you need more room, move a field close to the bottom, then save positions. The\n container will resize, adding more room.") . "</div>";
$rtn .= arrange_fields_render_dialogs();
return $rtn;
}
function arrange_fields_add_arrange_css_js() {
module_load_include('inc', 'node', 'node.pages');
jquery_ui_add(array(
'ui.draggable',
'ui.dialog',
'ui.resizable',
));
drupal_add_js(drupal_get_path("module", "arrange_fields") . "/js/arrange_fields_node_edit.js");
drupal_add_js(drupal_get_path("module", "arrange_fields") . "/js/arrange_fields.js");
drupal_add_js(drupal_get_path("module", "arrange_fields") . "/js/arrange_fields_dialog.js");
drupal_add_css(drupal_get_path("module", "arrange_fields") . "/css/arrange_fields.css");
}
function arrange_fields_display_otherform($form_id) {
$form_type = "otherform";
drupal_set_title("Arrange fields - Other Forms - {$form_id}");
$rtn = "";
$position_data = variable_get("arrange_fields_position_data_{$form_id}", FALSE);
if ($position_data) {
drupal_add_js(array(
"arrangeFieldsNotNewForm" => TRUE,
), "setting");
}
arrange_fields_add_arrange_css_js();
$rtn .= drupal_get_form("arrange_fields_position_form", $form_id, $form_type);
$rtn .= "<div>" . t("Use this form to drag-and-drop fields into the order which\n you want them to appear on the form entry page.") . "</div>\n <div>" . t("You may resize text fields by dragging the right side\n of the field.") . "</div>";
$rtn .= "<input type='button' value='add markup' onClick='arrangeFieldsDialogEditMarkup(\"new\");'>";
$GLOBALS["arrange_fields_editing"] = $form_id;
$GLOBALS["arrange_fields_editing_type"] = $form_type;
$rtn .= drupal_get_form($form_id);
$rtn .= "<div>" . t("If you need more room, move a field close to the bottom, then save positions. The\n container will resize, adding more room.") . "</div>";
$rtn .= arrange_fields_render_dialogs();
return $rtn;
}
function arrange_fields_position_form($form_state, $form_id, $form_type) {
$form = array();
$form["arrange_fields_form_id"] = array(
"#type" => "hidden",
"#value" => $form_id,
);
$form["arrange_fields_form_type"] = array(
"#type" => "hidden",
"#value" => $form_type,
);
$form["arrange_fields_position_data"] = array(
"#type" => "textfield",
"#maxlength" => 999999999999,
);
$form["save"] = array(
"#type" => "submit",
"#value" => "Save position data",
"#attributes" => array(
"onClick" => "return arrangeFieldsSavePositions()",
),
);
$form["reset"] = array(
"#type" => "button",
"#value" => "Reset position data",
"#attributes" => array(
"onClick" => "return arrangeFieldsConfirmReset()",
),
);
return $form;
}
function arrange_fields_position_form_validate($form, &$form_state) {
$form_id = $form_state["values"]["arrange_fields_form_id"];
if (stristr($form_state["values"]["op"], "reset")) {
variable_set("arrange_fields_position_data_{$form_id}", "");
drupal_set_message(t("Position data for this form has been reset. It will \n be displayed to the user without any modifications,\n in its original state."));
$path = isset($_GET['q']) ? $_GET['q'] : '<front>';
$link = url($path, array(
'absolute' => TRUE,
));
drupal_goto($link);
}
$form_state["submitted"] = TRUE;
}
function arrange_fields_position_form_submit($form, $form_state) {
$form_id = $form_state["values"]["arrange_fields_form_id"];
$form_type = $form_state["values"]["arrange_fields_form_type"];
$position_data = $form_state["values"]["arrange_fields_position_data"];
variable_set("arrange_fields_position_data_{$form_id}", $position_data);
$demo_link = l(t("See demo of most recent save (loads in new window)"), "node/add/" . str_replace("_", "-", $form_type), array(
"attributes" => array(
"target" => "_blank",
),
));
if ($form_type == "webform") {
$nid = str_replace("webform_client_form_", "", $form_id);
$demo_link = l(t("See demo of most recent save (loads in new window)"), "node/{$nid}", array(
"attributes" => array(
"target" => "_blank",
),
));
}
if ($form_type == "otherform") {
$demo_link = "";
}
drupal_set_message(t("Position data saved.") . " " . $demo_link);
}
function arrange_fields_theme_registry_alter(&$theme_registry) {
if (is_array($theme_registry['page'])) {
$first_path = array_shift($theme_registry['page']['theme paths']);
$template_path = drupal_get_path('module', 'arrange_fields');
array_unshift($theme_registry['page']['theme paths'], $first_path, $template_path);
}
}