diff --git a/webform_conditional.info b/webform_conditional.info index b697976..458531a 100755 --- a/webform_conditional.info +++ b/webform_conditional.info @@ -1,10 +1,6 @@ +; $Id: $ name = Webform Conditional description = Allows Webform components to be hidden dependent on the value of other components -dependencies[]=webform -core = 6.x +core = 7.x package = Webform -; Information added by drupal.org packaging script on 2010-11-12 -version = "6.x-1.x-dev" -core = "6.x" -project = "webform_conditional" -datestamp = "1289565002" +dependencies[]=webform \ No newline at end of file diff --git a/webform_conditional.install b/webform_conditional.install index 8b828d1..a1a55f3 100644 --- a/webform_conditional.install +++ b/webform_conditional.install @@ -36,7 +36,14 @@ function webform_conditional_update_6000() { $row['extra']['webform_conditional_operator '] = "="; $extra = serialize($row['extra']); //can't use update_sql here becauce of serialized data??? is that right? - $success = db_query("UPDATE {webform_component} SET extra = '%s' WHERE nid = %d AND cid = '%s'", $extra, $row['nid'], $row['cid']); + // Update the SQL database + $and = db_and()->condition('nid', $row['nid'])->condition('cid', $row['cid']); + $success = db_update('webform_component') + ->fields(array( + 'extra' => $extra + )) + ->condition($and) + ->execute(); $affected = db_affected_rows(); if (!$success || $affected != 1) { watchdog("wfc_conditional", "Webform_conditional could not update. Could not update webform_component table.", NULL, WATCHDOG_ERROR); @@ -60,7 +67,7 @@ function webform_conditional_update_6000() { $error_msg .= ""; } $error_msg .= ""; - drupal_set_message($error_msg, "warning"); + drupal_set_message(check_plain($error_msg), "warning"); } } return array(); diff --git a/webform_conditional.js b/webform_conditional.js index bed4add..c7ffa2f 100755 --- a/webform_conditional.js +++ b/webform_conditional.js @@ -1,9 +1,11 @@ /** * JavaScript functions for front-end display of webform conditional components */ -Drupal.behaviors.webform_conditional = function() { - - $.each(Drupal.settings.webform_conditional.fields, function(dependentField, dependentInfo) { +(function ($) { // JavaScript should be compatible with other libraries than jQuery + +Drupal.behaviors.webform_conditional = { + attach: function() { + $.each(Drupal.settings.webform_conditional.fields, function(dependentField, dependentInfo) { var formItemWrapper = Drupal.behaviors.webform_conditional.getWrapper(dependentInfo); if(formItemWrapper.length > 0){ @@ -12,8 +14,8 @@ Drupal.behaviors.webform_conditional = function() { Drupal.behaviors.webform_conditional.addOnChange (dependentField, dependentInfo); } }); - //after all added - trigger initial - $.each(Drupal.settings.webform_conditional.fields, function(dependentField, dependentInfo) { + //after all added - trigger initial + $.each(Drupal.settings.webform_conditional.fields, function(dependentField, dependentInfo) { var formItemWrapper = Drupal.behaviors.webform_conditional.getWrapper(dependentInfo); if(formItemWrapper.length > 0){ var field_name = Drupal.behaviors.webform_conditional.escapeId(dependentInfo['monitor_field_key']); @@ -24,99 +26,117 @@ Drupal.behaviors.webform_conditional = function() { components.triggerHandler('change'); } } - }); - return; + }); + return; + } }; //create quasi static var to save perfomance Drupal.behaviors.webform_conditional.wrappers = new Object(); -Drupal.behaviors.webform_conditional.getWrapper = function(dependentInfo){ - if(Drupal.behaviors.webform_conditional.wrappers[dependentInfo['css_id']]){ - return Drupal.behaviors.webform_conditional.wrappers[dependentInfo['css_id']]; +Drupal.behaviors.webform_conditional.getWrapper = { + attach: function(dependentInfo){ + if(Drupal.behaviors.webform_conditional.wrappers[dependentInfo['css_id']]){ + return Drupal.behaviors.webform_conditional.wrappers[dependentInfo['css_id']]; + } + return Drupal.behaviors.webform_conditional.wrappers[dependentInfo['css_id']] = $("#" + dependentInfo['css_id']); } - return Drupal.behaviors.webform_conditional.wrappers[dependentInfo['css_id']] = $("#" + dependentInfo['css_id']); }; -Drupal.behaviors.webform_conditional.addOnChange = function(dependentField, dependentInfo) { - var monitor_field_name = Drupal.behaviors.webform_conditional.escapeId(dependentInfo['monitor_field_key']); - var changeFunction = function() { +Drupal.behaviors.webform_conditional.addOnChange = { + attach: function(dependentField, dependentInfo) { + var monitor_field_name = Drupal.behaviors.webform_conditional.escapeId(dependentInfo['monitor_field_key']); + var changeFunction = function() { Drupal.behaviors.webform_conditional.setVisibility(dependentField,dependentInfo); - }; - var components = Drupal.behaviors.webform_conditional.getComponentsByName(monitor_field_name); - if(components.attr('type')=='radio' || components.attr('type')=='checkbox'){ + }; + var components = Drupal.behaviors.webform_conditional.getComponentsByName(monitor_field_name); + if(components.attr('type')=='radio' || components.attr('type')=='checkbox'){ components.click(changeFunction); - }else{ + }else{ components.change(changeFunction); + } } - }; -Drupal.behaviors.webform_conditional.setVisibility = function(dependentField,dependentInfo,monitorField,monitorInfo){ - monitor_field_name = Drupal.behaviors.webform_conditional.escapeId(dependentInfo['monitor_field_key']); - var currentValues = Drupal.behaviors.webform_conditional.getFieldValue(monitor_field_name); - var monitor_visible = true; - if(monitorField !== undefined){ +Drupal.behaviors.webform_conditional.setVisibility = { + attach: function(dependentField,dependentInfo,monitorField,monitorInfo){ + monitor_field_name = Drupal.behaviors.webform_conditional.escapeId(dependentInfo['monitor_field_key']); + var currentValues = Drupal.behaviors.webform_conditional.getFieldValue(monitor_field_name); + var monitor_visible = true; + if(monitorField !== undefined){ monitor_visible = Drupal.behaviors.webform_conditional.getWrapper(monitorInfo).data('wfc_visible'); - } - if(((dependentInfo['operator'] == "=" && !Drupal.behaviors.webform_conditional.Matches(currentValues,dependentInfo['monitor_field_value'])) + } + if(((dependentInfo['operator'] == "=" && !Drupal.behaviors.webform_conditional.Matches(currentValues,dependentInfo['monitor_field_value'])) || (dependentInfo['operator'] == "!=" && Drupal.behaviors.webform_conditional.Matches(currentValues,dependentInfo['monitor_field_value']))) || !monitor_visible){ // show the hidden div // have to set wfc_visible so that you check the visibility of this immediately - Drupal.behaviors.webform_conditional.getWrapper(dependentInfo).hide().data('wfc_visible',false); - }else { + Drupal.behaviors.webform_conditional.getWrapper(dependentInfo).hide().data('wfc_visible',false); + }else { // otherwise, hide it Drupal.behaviors.webform_conditional.getWrapper(dependentInfo).show().data('wfc_visible',true); // and clear data (using different selector: want the // textarea to be selected, not the parent div) + } + Drupal.behaviors.webform_conditional.TriggerDependents(dependentField,dependentInfo); } - Drupal.behaviors.webform_conditional.TriggerDependents(dependentField,dependentInfo); }; Drupal.behaviors.webform_conditional.components = new Object(); -Drupal.behaviors.webform_conditional.getComponentsByName = function (field_name){ - //check to save jquery calls - if(Drupal.behaviors.webform_conditional.components[field_name]){ +Drupal.behaviors.webform_conditional.getComponentsByName = { + attach: function (field_name){ + //check to save jquery calls + if(Drupal.behaviors.webform_conditional.components[field_name]){ return Drupal.behaviors.webform_conditional.components[field_name]; - } - field_name = "[" + field_name + "]"; - var nid = Drupal.settings.webform_conditional.nid; - if(nid instanceof Array){ + } + field_name = "[" + field_name + "]"; + var nid = Drupal.settings.webform_conditional.nid; + if(nid instanceof Array){ nid = Drupal.settings.webform_conditional.nid[0]; + } + return Drupal.behaviors.webform_conditional.components[field_name] = $("#webform-client-form-" + nid + " *[name*='"+field_name+"']"); } - return Drupal.behaviors.webform_conditional.components[field_name] = $("#webform-client-form-" + nid + " *[name*='"+field_name+"']"); }; -Drupal.behaviors.webform_conditional.TriggerDependents = function(monitorField,monitorInfo){ - $.each(Drupal.settings.webform_conditional.fields, function(dependentField, dependentInfo) { +Drupal.behaviors.webform_conditional.TriggerDependents = { + attach: function(monitorField,monitorInfo){ + $.each(Drupal.settings.webform_conditional.fields, function(dependentField, dependentInfo) { if(dependentInfo['monitor_field_key'] == monitorField){ - Drupal.behaviors.webform_conditional.setVisibility(dependentField, dependentInfo,monitorField,monitorInfo); + Drupal.behaviors.webform_conditional.setVisibility(dependentField, dependentInfo,monitorField,monitorInfo); }; - }); + }); + } }; -Drupal.behaviors.webform_conditional.getFieldValue = function(field_name){ - field_name = "[" + field_name + "]"; - var selected = []; - var vals = []; - if($('form input[name*="'+field_name+'"]:checked').length >= 1){ +Drupal.behaviors.webform_conditional.getFieldValue = { + attach: function(field_name){ + field_name = "[" + field_name + "]"; + var selected = []; + var vals = []; + if($('form input[name*="'+field_name+'"]:checked').length >= 1){ selected = $('form input[name*="'+field_name+'"]:checked'); - }else if($('form select[name*="'+field_name+'"] option:selected').length >= 1){ + }else if($('form select[name*="'+field_name+'"] option:selected').length >= 1){ selected = $('form select[name*="'+field_name+'"] option:selected'); - } - if(selected.length == 0){ + } + if(selected.length == 0){ return vals; - } - selected.each(function(i){ + } + selected.each(function(i){ vals[i] = $(this).val(); }); - return vals; + return vals; + } }; -Drupal.behaviors.webform_conditional.Matches = function(currentValues,triggerValues){ - var found = false; - $.each(triggerValues, function(index, value) { +Drupal.behaviors.webform_conditional.Matches = { + attach: function(currentValues,triggerValues){ + var found = false; + $.each(triggerValues, function(index, value) { if(jQuery.inArray(value,currentValues)> -1){ found = true; return false; } }); - return found; + return found; + } }; //Drupal.behaviors.webform_conditional.escapeId -Drupal.behaviors.webform_conditional.escapeId = function(myid) { +Drupal.behaviors.webform_conditional.escapeId = { + attach: function(myid) { return myid.replace(/(:|\.)/g,'\\$1'); + } }; + +})(jQuery); \ No newline at end of file diff --git a/webform_conditional.module b/webform_conditional.module index 3f853f1..c93a9fa 100755 --- a/webform_conditional.module +++ b/webform_conditional.module @@ -8,7 +8,7 @@ * @author Ted Bowman */ /** - * Implementation of hook_form_FORM_ID_alter(). + * Implements hook_form_FORM_ID_alter(). * @param array $form * @param arrray $form_state */ @@ -66,7 +66,7 @@ function webform_condtional_component_edit_submit($form, &$form_state) { } } /* - * Implementation of hook_form_alter(). + * Implements hook_form_alter(). * Edit Webform * Add Javascript to describe dependent fields * Add validation of hidden conditional fields @@ -322,7 +322,7 @@ function _webform_conditional_get_submitted_array($children, $submitted) { return $submitted_data; } /* - * Implementation of hook_webform_submission_presave(). + * Implements hook_webform_submission_presave(). * * Check to see if components should have been hidden * If so clear submitted values @@ -577,7 +577,7 @@ function &_webform_conditional_get_field(&$fields, $cid) { return NULL; } /** - * Implementation of hook_webform_submission_render_alter(). + * Implements hook_webform_submission_render_alter(). * Remove elements that would not have been show according to the Hidden Conditional Rules * *** This will look at the current rules for this Webform. If the rules were changed after this submission they will not hide the field that were hidden at the time of submission * @param array $submission Webform submission to be rendered