diff -up ./interface_sortable_demos.module ../5.7/sites/all/modules/interface_sortable/interface_sortable_demos.module --- ./interface_sortable_demos.module 2007-05-09 23:43:34.000000000 +0200 +++ ../5.7/sites/all/modules/interface_sortable/interface_sortable_demos.module 2008-02-14 12:23:40.068346301 +0100 @@ -26,6 +26,15 @@ function interface_sortable_demos_menu($ 'type' => MENU_NORMAL_ITEM ); $items[] = array( + 'path' => 'demos/interface/dual_sortable_form_element', + 'title' => t('Dual Interface Sortable Form Element Demo'), + 'description' => t('Demonstrates two sortable form elements.'), + 'callback' => 'drupal_get_form', + 'callback arguments' => 'interface_sortable_demos_dual_sortable_form_element', + 'access' => user_access('access content'), + 'type' => MENU_NORMAL_ITEM + ); + $items[] = array( 'path' => 'demos/interface/sortable_form_element_with_options', 'title' => t('Interface Sortable Form Element Demo With Options'), 'description' => t('Demonstrates a sortable form element with options.'), @@ -100,6 +109,72 @@ function interface_sortable_demos_sortab drupal_set_message('submitted: ['. implode(',', $sorted) .']'); } +function interface_sortable_demos_dual_sortable_form_element() { + _interface_sortable_demos_css(); + + $items = array( + 18 => 'eighteen', + 17 => 'seventeen', + 16 => 'sixteen', + 'cat' => 'meow', + 15 => 'fifteen', + 14 => 'fourteen', + 13 => 'thirteen', + 12 => 'twelve' + ); + + $options = array(); + $options['accept'] = 'sortable-item'; + $options['helperclass'] = 'sortable-helper'; + $options['activeclass'] = 'sortable-active'; + $options['hoverclass'] = 'sortable-hover'; + $options['fx'] = 300; + $options['axis'] = 'vertically'; + $options['opacity'] = 0.6; + $options['#onchange'] = << 'fieldset', + '#collapsible' => FALSE, + '#title' => t('Even numbers') + ); + $form['odd'] = array( + '#type' => 'fieldset', + '#collapsible' => FALSE, + '#title' => t('Odd numbers') + ); + $form['even']['sortee1'] = array( + '#type' => 'sortable', + '#items' => $items, + '#options' => $options, + '#inner_id' => 'sortee', + ); + $form['odd']['sortee2'] = array( + '#type' => 'sortable', + '#items' => array(), + '#options' => $options, + '#inner_id' => 'sortee', + ); + + $form['submit'] = array('#type' => 'submit', '#value' => t('Submit')); + + return $form; +} + +function interface_sortable_demos_dual_sortable_form_element_submit($form_id, $edit) { + $sorted1 = interface_get_sort($edit['sortee1'], 'sortee'); + $sorted2 = interface_get_sort($edit['sortee2'], 'sortee'); + drupal_set_message('Even: ['. implode(',', $sorted1) .']'); + drupal_set_message('Odd: ['. implode(',', $sorted2) .']'); +} + function interface_sortable_demos_sortable_form_element_with_options() { _interface_sortable_demos_css(); diff -up ./interface_sortable.module ../5.7/sites/all/modules/interface_sortable/interface_sortable.module --- ./interface_sortable.module 2007-05-09 23:43:34.000000000 +0200 +++ ../5.7/sites/all/modules/interface_sortable/interface_sortable.module 2008-02-14 11:28:34.379965894 +0100 @@ -64,13 +64,14 @@ function interface_sortable_process($ele } $outerid = $element['#parents'][0]; + $innerid = array_key_exists('#inner_id', $element) ? $element['#inner_id'] : $outerid; $sortables['#prefix'] = "<$outertag id='$outerid-wrapper' class='$outer_class'>\n"; $sortables['#suffix'] = "\n"; // if there's a #value, eval it and resort if ($element['#value']) { - $keyorder = interface_get_sort($element['#value']); + $keyorder = interface_get_sort($element['#value'], $innerid); $items = $element['#items']; foreach ($keyorder as $key) { $newitems[$key] = $items[$key]; @@ -83,11 +84,18 @@ function interface_sortable_process($ele $sortables[$k] = array( '#type' => 'markup', '#value' => $v, - '#prefix' => "<$innertag id='{$outerid}_{$k}' class='$inner_class'>", + '#prefix' => "<$innertag id='{$innerid}_{$k}' class='$inner_class'>", '#suffix' => "\n" ); $order[] = $k; } + if (empty($element['#items'])) { + $order = array(); + $sortables = array( + '#type' => 'markup', + '#value' => $sortables['#prefix'] . $sortables['#suffix'] + ); + } // If the user hasn't sent in an onchange handler, create a default // one that sets the sortable element's value every time the order @@ -142,15 +150,16 @@ function theme_interface_sortable_hidden * @param string $sort * @return array */ -function interface_get_sort($sort) { +function interface_get_sort($sort, $subst = '') { $return = array(); parse_str($sort, $result); $prefixes = array_keys($result); if (!empty($prefixes)) { $prefix = $prefixes[0]; + if (empty($subst)) $subst = $prefix; foreach ($result[$prefix] as $val) { - if (strpos($val, $prefix .'_') === 0) { - $val = substr($val, strlen($prefix) + 1); + if (strpos($val, $subst .'_') === 0) { + $val = substr($val, strlen($subst) + 1); } $return[] = $val; }