Index: webform/webform.module =================================================================== --- webform/webform.module (revision 36404) +++ webform/webform.module (working copy) @@ -568,6 +568,10 @@ 'webform_inline_radio' => array( 'render element' => 'element', ), + 'webform_progress_bar' => array( + 'variables' => array('webform' => NULL, 'progress_bar_page_break_label' => FALSE, 'progress_bar_percent' => FALSE, 'progress_bar_page_number' => FALSE, 'progress_bar_bar' => FALSE, 'page_number' => NULL, 'page_count' => NULL, 'page_label' => NULL), + 'template' => 'templates/webform-progress-bar', + ), 'webform_mail_message' => array( 'variables' => array('node' => NULL, 'submission' => NULL, 'email' => NULL), 'template' => 'templates/webform-mail', @@ -762,6 +766,14 @@ '#process' => array('webform_conditional_expand'), ); + $elements['webform_progress_bar'] = array( + '#input' => FALSE, + '#theme' => 'webform_progress_bar', + '#page_num' => 0, + '#page_count' => 0, + '#page_label' => '', + ); + return $elements; } @@ -2037,6 +2049,18 @@ } } + if ($page_count > 1) { + $form['progress_bar'] = array( + '#type' => 'webform_progress_bar', + '#webform' => $node->webform, + '#progress_bar_page_number' => TRUE, + '#page_number' => $page_num, + '#page_count' => $page_count, + '#page_label' => webform_page_label($node->webform, $page_num), + '#weight' => -100 + ); + } + // Recursively add components to the form. The unfiltered version of the // form (typically used in Form Builder), includes all components. foreach ($component_tree['children'] as $cid => $component) { @@ -2854,6 +2878,17 @@ } /** + * Prepare for theming of the webform progress bar. + */ +function template_preprocess_webform_progress_bar(&$vars) { + $settings = array ('progress_bar_page_number', 'progress_bar_page_number', 'progress_bar_bar', 'progress_bar_page_break_label'); + foreach ($settings as $key) { + $vars[$key] = isset ($vars['webform'][$key]) ? $vars['webform'][$key] : FALSE; + } + $vars['percent'] = $vars['page_number'] / $vars['page_count'] * 100; +} + +/** * Prepare to theme the contents of e-mails sent by webform. */ function template_preprocess_webform_mail_message(&$vars) { @@ -3904,3 +3939,26 @@ return $form_info; } + +/** + * Find the label of a page + * + * @param $webform + * The webform object + * @param $page_number + * The page number of the page in question + * @return string + * The label of the page + */ +function webform_page_label($webform, $page_number) { + $page_count = 1; + foreach($webform['components'] as $component) { + if ($component['type'] == 'pagebreak') { + $page_count++; + if ($page_count == $page_number) { + return $component['name']; + } + } + } + return ''; //The default for the first page +} Index: webform/css/webform.css =================================================================== --- webform/css/webform.css (revision 36404) +++ webform/css/webform.css (working copy) @@ -28,3 +28,13 @@ .webform-container-inline div.ajax-progress-bar div { display: inherit; } +.webform-progress-bar-inner { + height: 1em; + background-color: #000088; +} +.webform-progress-bar-outer { + border: 1px solid #000000; + width: 100%; + height: 1em; + margin:0.35em 5px 0; +} Index: webform/templates/webform-form.tpl.php =================================================================== --- webform/templates/webform-form.tpl.php (revision 36404) +++ webform/templates/webform-form.tpl.php (working copy) @@ -18,6 +18,9 @@ */ ?> + +
+ +
+ +
+ + + +
+ +
+ + + +
+ $page_number, '@end' => $page_count)); ?> +
+ + + +
+
 
+
+ + +
Index: webform/webform.install =================================================================== --- webform/webform.install (revision 36404) +++ webform/webform.install (working copy) @@ -109,6 +109,30 @@ 'not null' => TRUE, 'default' => -1, ), + 'progress_bar_page_number' => array( + 'description' => 'Should the the page number be shown as part of the progress bar?', + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + 'progress_bar_percent' => array( + 'description' => 'Should the percentage complete be shown as part of the progress bar?', + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + 'progress_bar_bar' => array( + 'description' => 'Should the bar be shown as part of the progress bar?', + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + 'progress_bar_pagebreak_label' => array( + 'description' => 'Should the pagebreak label be shown as part of the progress bar?', + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), ), 'primary key' => array('nid'), ); @@ -1330,3 +1354,36 @@ _webform_delete_file(NULL, array($fid)); } } + + +/** + * Add progress bar display on/off fields + */ +function webform_update_7406() { + // In case someone used a dev patch before, drop old columns + // We're not migrating any settings, you'll just have to reapply them + if (db_field_exists('webform', 'progressbar_page_number')) { + db_drop_field('webform', 'progressbar_page_number'); + } + if (db_field_exists('webform', 'progressbar_percent')) { + db_drop_field('webform', 'progressbar_percent'); + } + if (db_field_exists('webform', 'progressbar_bar')) { + db_drop_field('webform', 'progressbar_bar'); + } + if (db_field_exists('webform', 'progressbar_pagebreak_label')) { + db_drop_field('webform', 'progressbar_pagebreak_label'); + } + if (!db_field_exists('webform', 'progress_bar_page_number')) { + db_add_field('webform', 'progress_bar_page_number', array('type' => 'int', 'not null' => TRUE, 'default' => 0)); + } + if (!db_field_exists('webform', 'progress_bar_percent')) { + db_add_field('webform', 'progress_bar_percent', array('type' => 'int', 'not null' => TRUE, 'default' => 0)); + } + if (!db_field_exists('webform', 'progress_bar_bar')) { + db_add_field('webform', 'progress_bar_bar', array('type' => 'int', 'not null' => TRUE, 'default' => 0)); + } + if (!db_field_exists('webform', 'progress_bar_pagebreak_label')) { + db_add_field('webform', 'progress_bar_pagebreak_label', array('type' => 'int', 'not null' => TRUE, 'default' => 0)); + } +} Index: webform/includes/webform.admin.inc =================================================================== --- webform/includes/webform.admin.inc (revision 36404) +++ webform/includes/webform.admin.inc (working copy) @@ -162,6 +162,25 @@ '#description' => t('By default, the configuration form for each webform allows the administrator to choose which roles may submit the form. You may want to allow users to always submit the form if you are using a separate node access module to control access to webform nodes themselves.'), ); + $form['progress_bar'] = array( + '#type' => 'fieldset', + '#title' => t('Progress bar'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $form['progress_bar']['webform_progress_bar_style'] = array( + '#type' => 'checkboxes', + '#title' => t('Progress bar style'), + '#options' => array( + 'progress_bar_page_number' => t('Show page number as number of completed (i.e. Page 1 of 10)'), + 'progress_bar_percent' => t('Show percentage completed (i.e. 10%)'), + 'progress_bar_bar' => t('Show percentage completed bar.'), + 'progress_bar_pagebreak_label' => t('Show the page break label in each page.'), + ), + '#default_value' => variable_get('webform_progress_bar_style', array()), + '#description' => t('Choose how the progress bar should be displayed for multi-page forms.'), + ); + $form = system_settings_form($form); $form['#theme'] = 'webform_admin_settings'; array_unshift($form['#submit'], 'webform_admin_settings_submit'); Index: webform/includes/webform.pages.inc =================================================================== --- webform/includes/webform.pages.inc (revision 36404) +++ webform/includes/webform.pages.inc (working copy) @@ -13,6 +13,8 @@ $form['#attached']['library'][] = array('webform', 'admin'); $form['#node'] = $node; + //var_dump ($node->webform); + //def(); $form['#submit'] = array( 'webform_configure_form_submit', @@ -230,6 +232,37 @@ ); /* End Advanced Settings Form */ + /* Start Progress Bar Settings Form*/ + $progress_bar_defaults = variable_get('webform_progress_bar_style', array()); + $form['progress_bar'] = array( + '#type' => 'fieldset', + '#title' => t('Progress bar'), + '#description' => t('Choose how the progress bar should be displayed for multi-page forms.'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $form['progress_bar']['progress_bar_page_number'] = array( + '#type' => 'checkbox', + '#title' => t('Show page number as number of completed (i.e. Page 1 of 10)'), + '#default_value' => isset($node->webform['progress_bar_page_number']) ? $node->webform['progress_bar_page_number'] : $progress_bar_defaults['progress_bar_page_number'], + ); + $form['progress_bar']['progress_bar_percent'] = array( + '#type' => 'checkbox', + '#title' => t('Show percentage completed (i.e. 10%)'), + '#default_value' => isset($node->webform['progress_bar_percent']) ? $node->webform['progress_bar_percent'] : $progress_bar_defaults['progress_bar_percent'], + ); + $form['progress_bar']['progress_bar_bar'] = array( + '#type' => 'checkbox', + '#title' => t('Show percentage completed bar.'), + '#default_value' => isset($node->webform['progress_bar_bar']) ? $node->webform['progress_bar_bar'] : $progress_bar_defaults['progress_bar_bar'], + ); + $form['progress_bar']['progress_bar_pagebreak_label'] = array( + '#type' => 'checkbox', + '#title' => t('Show the page break label in each page.'), + '#default_value' => isset($node->webform['progress_bar_pagebreak_label']) ? $node->webform['progress_bar_pagebreak_label'] : $progress_bar_defaults['progress_bar_pagebreak_label'], + ); + /* End Progress Bar Settings Form*/ + $form['actions'] = array( '#type' => 'actions', '#weight' => 300, @@ -336,6 +369,12 @@ // Set submit button text. $node->webform['submit_text'] = $form_state['values']['submit_text']; + + //Set the progress bar preference + $node->webform['progress_bar_page_number'] = $form_state['values']['progress_bar_page_number']; + $node->webform['progress_bar_percent'] = $form_state['values']['progress_bar_percent']; + $node->webform['progress_bar_bar'] = $form_state['values']['progress_bar_bar']; + $node->webform['progress_bar_pagebreak_label'] = $form_state['values']['progress_bar_pagebreak_label']; } /**