PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /home/trave494/islandpc.ca/wp-content/plugins/complianz-terms-conditions/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : /home/trave494/islandpc.ca/wp-content/plugins/complianz-terms-conditions/class-wizard.php |
<?php /*100% match*/ defined( 'ABSPATH' ) or die( "you do not have acces to this page!" ); if ( ! class_exists( "cmplz_tc_wizard" ) ) { class cmplz_tc_wizard { private static $_this; public $position; public $total_steps = false; public $last_section; public $page_url; public $percentage_complete = false; function __construct() { if ( isset( self::$_this ) ) { wp_die( sprintf( '%s is a singleton class and you cannot create a second instance.', get_class( $this ) ) ); } self::$_this = $this; add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); //callback from settings add_action( 'cmplz_tc_terms-conditions_last_step', array( $this, 'wizard_last_step_callback' ), 10, 1 ); //link action to custom hook add_action( 'cmplz_tc_terms-conditions_wizard', array( $this, 'wizard_after_step' ), 10, 1 ); //process custom hooks add_action( 'admin_init', array( $this, 'process_custom_hooks' ) ); add_action( 'complianz_tc_before_save_terms-conditions_option', array( $this, 'before_save_wizard_option' ), 10, 4 ); add_action( 'complianz_tc_after_save_terms-conditions_option', array( $this, 'after_save_wizard_option' ), 10, 4 ); add_action( 'cmplz_tc_after_saved_all_fields', array( $this, 'after_saved_all_fields' ), 10, 1 ); add_action( 'cmplz_tc_last_step', array( $this, 'last_step_callback' ) ); } static function this() { return self::$_this; } public function process_custom_hooks() { do_action( "cmplz_wizard_terms-conditions" ); } /** * Initialize a page in the wizard * @param $page */ public function initialize( $page ) { $this->last_section = $this->last_section( $page, $this->step() ); $this->page_url = cmplz_tc_settings_page(); //if a post id was passed, we copy the contents of that page to the wizard settings. if ( isset( $_GET['post_id'] ) ) { $post_id = intval( $_GET['post_id'] ); //get all fields for this page $fields = COMPLIANZ_TC::$config->fields( $page ); foreach ( $fields as $fieldname => $field ) { $fieldvalue = get_post_meta( $post_id, $fieldname, true ); if ( $fieldvalue ) { if ( ! COMPLIANZ_TC::$field->is_multiple_field( $fieldname ) ) { COMPLIANZ_TC::$field->save_field( $fieldname, $fieldvalue ); } else { $field[ $fieldname ] = $fieldvalue; COMPLIANZ_TC::$field->save_multiple( $field ); } } } } } /** * Some actions after the last step has been completed */ public function last_step_callback() { if ( ! $this->all_required_fields_completed( 'terms-conditions' ) ) { echo '<div class="cmplz-wizard-intro">'; _e( "Not all required fields are completed yet. Please check the steps to complete all required questions", 'complianz-terms-conditions' ); echo '</div>'; } else { echo '<div class="cmplz-wizard-intro">' . __( "You're done! Here are some tips & tricks to use this document to your full advantage.", 'complianz-terms-conditions' ) . '</div>'; echo cmplz_tc_get_template('wizard/last-step.php'); } } /** * Process completion of setup * * */ public function wizard_after_step() { if ( ! cmplz_tc_user_can_manage() ) { return; } //clear document cache COMPLIANZ_TC::$document->clear_shortcode_transients(); //when clicking to the last page, or clicking finish, run the finish sequence. if ( isset( $_POST['cmplz-finish'] ) || ( isset( $_POST["step"] ) && $_POST['step'] == 3 && isset( $_POST['cmplz-next'] ) ) ) { $this->set_wizard_completed_once(); } } /** * Do stuff before a page from the wizard is saved. * * */ public function before_save_wizard_option( $fieldname, $fieldvalue, $prev_value, $type ) { update_option( 'cmplz_tc_documents_update_date', time() ); //only run when changes have been made if ( $fieldvalue === $prev_value ) { return; } } /** * Handle some custom options after saving the wizard options * * After all fields have been saved * @param $posted_fields */ public function after_saved_all_fields($posted_fields){ } /** * Handle some custom options after saving the wizard options * @param string $fieldname * @param mixed $fieldvalue * @param mixed $prev_value * @param string $type */ public function after_save_wizard_option( $fieldname, $fieldvalue, $prev_value, $type ) { //only run when changes have been made if ( $fieldvalue === $prev_value ) { return; } //if languages have been changed, we update the withdrawal form, if those should be generated. if ( $fieldname === 'language_communication' || $fieldname === 'address_company' || $fieldname === 'multilanguage_communication' ) { $languages = cmplz_tc_get_value('multilanguage_communication'); if ( !empty($languages) ) { $languages = array_filter($languages); update_option( 'cmplz_generate_pdf_languages', $languages ); } } if ( $fieldname === 'language_communication' ) { $languages = array(cmplz_tc_sanitize_language( get_locale() )); $languages = array_filter($languages); update_option( 'cmplz_generate_pdf_languages', $languages ); } } /** * Get the next step with fields in it * @param string $page * @param int $step * * @return int */ public function get_next_not_empty_step( $page, $step ) { if ( ! COMPLIANZ_TC::$field->step_has_fields( $page, $step ) ) { if ( $step >= $this->total_steps( $page ) ) { return $step; } $step ++; $step = $this->get_next_not_empty_step( $page, $step ); } return $step; } /** * Get the next section which is not empty * @param string $page * @param int $step * @param int $section * * @return int|bool */ public function get_next_not_empty_section( $page, $step, $section ) { if ( ! COMPLIANZ_TC::$field->step_has_fields( $page, $step, $section ) ) { //some keys are missing, so we need to count the actual number of keys. if ( isset( COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'] ) ) { $n = array_keys( COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'] ); //<---- Grab all the keys of your actual array and put in another array $count = array_search( $section, $n ); //<--- Returns the position of the offset from this array using search //this is the actual list up to section key. $new_arr = array_slice( COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'], 0, $count + 1, true );//<--- Slice it with the 0 index as start and position+1 as the length parameter. $section_count = count( $new_arr ) + 1; } else { $section_count = $section + 1; } $section ++; if ( $section_count > $this->total_sections( $page, $step ) ) { return false; } $section = $this->get_next_not_empty_section( $page, $step, $section ); } return $section; } /** * Get previous step which is not empty * * @param string $page * @param int $step * * @return int */ public function get_previous_not_empty_step( $page, $step ) { if ( ! COMPLIANZ_TC::$field->step_has_fields( $page, $step ) ) { if ( $step <= 1 ) { return $step; } $step --; $step = $this->get_previous_not_empty_step( $page, $step ); } return $step; } /** * Get previous section which is not empty * @param string $page * @param int $step * @param int $section * * @return false|int */ public function get_previous_not_empty_section( $page, $step, $section ) { if ( ! COMPLIANZ_TC::$field->step_has_fields( $page, $step, $section ) ) { $section --; if ( $section < 1 ) { return false; } $section = $this->get_previous_not_empty_section( $page, $step, $section ); } return $section; } /** * Lock the wizard for further use while it's being edited by the current user. * * * */ public function lock_wizard() { $user_id = get_current_user_id(); set_transient( 'cmplz_wizard_locked_by_user', $user_id, apply_filters( "cmplz_wizard_lock_time", 2 * MINUTE_IN_SECONDS ) ); } /** * Check if the wizard is locked by another user * * * */ public function wizard_is_locked() { $user_id = get_current_user_id(); $lock_user_id = $this->get_lock_user(); if ( $lock_user_id && $lock_user_id != $user_id ) { return true; } return false; } /** * Get user which is locking the wizard * @return false|int */ public function get_lock_user() { return get_transient( 'cmplz_wizard_locked_by_user' ); } /** * Render wizard * @param string $page * @param string $wizard_title */ public function wizard( $page, $wizard_title = '' ) { if (!cmplz_tc_user_can_manage()) { return; } if ($this->wizard_is_locked()) { $user_id = $this->get_lock_user(); $user = get_user_by("id", $user_id); $lock_time = apply_filters("cmplz_wizard_lock_time", 2 * MINUTE_IN_SECONDS) / 60; cmplz_tc_notice(sprintf(__("The wizard is currently being edited by %s", 'complianz-terms-conditions'), $user->user_nicename) . '<br>' . sprintf(__("If this user stops editing, the lock will expire after %s minutes.", 'complianz-terms-conditions'), $lock_time), 'warning'); return; } //lock the wizard for other users. $this->lock_wizard(); $this->initialize($page); $section = $this->section(); $step = $this->step(); if ($this->section_is_empty($page, $step, $section) || (isset($_POST['cmplz-next']) && !COMPLIANZ_TC::$field->has_errors()) ) { if (COMPLIANZ_TC::$config->has_sections($page, $step) && ($section < $this->last_section) ) { $section = $section + 1; } else { $step++; $section = $this->first_section($page, $step); } $step = $this->get_next_not_empty_step($page, $step); $section = $this->get_next_not_empty_section($page, $step, $section); //if the last section is also empty, it will return false, so we need to skip the step too. if (!$section) { $step = $this->get_next_not_empty_step($page, $step + 1); $section = 1; } } if (isset($_POST['cmplz-previous'])) { if (COMPLIANZ_TC::$config->has_sections($page, $step) && $section > $this->first_section($page, $step) ) { $section--; } else { $step--; $section = $this->last_section($page, $step); } $step = $this->get_previous_not_empty_step($page, $step); $section = $this->get_previous_not_empty_section($page, $step, $section); } $menu = $this->wizard_menu( $page, $wizard_title, $step, $section ); $content = $this->wizard_content($page, $step, $section ); $args = array( 'page' => 'terms-conditions', 'content' => $menu.$content, ); echo cmplz_tc_get_template('admin_wrap.php', $args ); } /** * Render Wizard menu * @param string $page * @param string $wizard_title * @param int $active_step * @param int $active_section * * @return false|string */ public function wizard_menu( $page, $wizard_title, $active_step, $active_section ) { $args_menu['steps'] = ""; for ($i = 1; $i <= $this->total_steps($page); $i++) { $args['title'] = $i . '. ' . COMPLIANZ_TC::$config->steps[$page][$i]['title']; $args['active'] = ($i == $active_step) ? 'active' : ''; $args['completed'] = $this->required_fields_completed($page, $i, false) ? 'complete' : 'incomplete'; $args['url'] = add_query_arg(array('step' => $i), $this->page_url); if ($this->post_id()) { $args['url'] = add_query_arg(array('post_id' => $this->post_id()), $args['url']); } $args['sections'] = ($args['active'] == 'active') ? $this->wizard_sections($page, $active_step, $active_section) : ''; $args_menu['steps'] .= cmplz_tc_get_template( 'wizard/step.php' , $args); } $args_menu['percentage-complete'] = $this->wizard_percentage_complete(false); $args_menu['title'] = !empty( $wizard_title ) ? '<div class="cmplz-wizard-subtitle"><h2>' . $wizard_title . '</h2></div>': '' ; return cmplz_tc_get_template( 'wizard/menu.php', $args_menu ); } /** * @param string $page * @param int $step * @param int $active_section * * @return string */ public function wizard_sections( $page, $step, $active_section ) { $sections = ""; if ( COMPLIANZ_TC::$config->has_sections( $page, $step )) { for ($i = $this->first_section( $page, $step ); $i <= $this->last_section( $page, $step ); $i ++) { $icon = cmplz_tc_icon('circle', 'disabled', '', 11); if ( $this->section_is_empty( $page, $step, $i ) ) continue; if ( $i < $this->get_next_not_empty_section( $page, $step, $i ) ) continue; $active = ( $i == $active_section ) ? 'active' : ''; if ( $active == 'active' ) { $icon = cmplz_tc_icon('chevron-right', 'default', '', 11); } else if ($this->required_fields_completed( $page, $step, $i )) { $icon = cmplz_tc_icon('check', 'success', '', 11); } $completed = ( $this->required_fields_completed( $page, $step, $i ) ) ? "cmplz-done" : "cmplz-to-do"; $url = add_query_arg( array('step' => $step, 'section' => $i), $this->page_url ); if ( $this->post_id() ) { $url = add_query_arg( array( 'post_id' => $this->post_id() ), $url ); } $title = COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'][ $i ]['title']; $regions = $this->get_section_regions( $page, $step, $i ); $title .= $regions ? ' - ' . implode( ' | ', $regions ) : ''; $args = array( 'active' => $active, 'completed' => $completed, 'icon' => $icon, 'url' => $url, 'title' => $title, ); $sections .= cmplz_tc_get_template( 'wizard/section.php', $args ); } } return $sections; } /** * Render wizard content * @param string $page * @param int $step * @param int $section * * @return false|string */ public function wizard_content( $page, $step, $section ) { $args['title'] = ''; if (isset(COMPLIANZ_TC::$config->steps[$page][$step]['sections'][$section]['title'])) { $args['title'] = COMPLIANZ_TC::$config->steps[$page][$step]['sections'][$section]['title']; $regions = $this->get_section_regions($page, $step, $section); $args['title'] .= $regions ? ' - ' . implode(' | ', $regions) : ''; } else { $args['title'] .= COMPLIANZ_TC::$config->steps[$page][$step]['title']; } $args['flags'] = ''; $args['save_notice'] = ''; $args['save_as_notice'] = ''; $args['learn_notice'] = ''; $args['cookie_or_finish_button'] = ''; $args['previous_button'] = ''; $args['next_button'] = ''; $args['save_button'] = ''; if ( isset( $_POST['cmplz-save'] ) ) { $args['save_notice'] = cmplz_tc_notice( __( "Changes saved", 'complianz-terms-conditions' ), 'success', true , false); } $args['intro'] = $this->get_intro( $page, $step, $section ); $args['page_url'] = $this->page_url; $args['page'] = $page; $args['post_id'] = $this->post_id() ? '<input type="hidden" value="' . $this->post_id() . '" name="post_id">' : ''; ob_start(); COMPLIANZ_TC::$field->get_fields( $page, $step, $section ); $args['fields'] = ob_get_clean(); $args['step'] = $step; $args['section'] = $section; if ( $step > 1 || $section > 1 ) { $args['previous_button'] = '<input class="button button-link cmplz-previous" type="submit" name="cmplz-previous" value="'. __( "Previous", 'complianz-terms-conditions' ) . '">'; } if ( $step < $this->total_steps( $page ) ) { $args['next_button'] = '<input class="button button-primary cmplz-next" type="submit" name="cmplz-next" value="'. __( "Next", 'complianz-terms-conditions' ) . '">'; } $other_plugins = ""; if ( $step > 0 && $step < $this->total_steps( $page )) { $args['save_button'] = '<input class="button button-secondary cmplz-save" type="submit" name="cmplz-save" value="'. __( "Save", 'complianz-terms-conditions' ) . '">'; } else if ($step === $this->total_steps( $page )) { $other_plugins = cmplz_tc_get_template('wizard/other-plugins.php'); $page_id = COMPLIANZ_TC::$document->get_shortcode_page_id('terms-conditions'); $link = get_permalink($page_id); if ( !$link ) { $link = add_query_arg(array( 'step' => 3), cmplz_tc_settings_page()); $args['save_button'] = '<a class="button button-primary cmplz-save" href="'.$link.'" type="button" name="cmplz-save">'. sprintf(__( "Create %s", 'complianz-terms-conditions' ) , __("Terms & Conditions", "complianz-terms-conditions")). '</a>'; } else { $args['save_button'] = '<a class="button button-primary cmplz-save" target="_blank" href="'.$link.'" type="button" name="cmplz-save">'. sprintf(__( "Open %s", 'complianz-terms-conditions' ) , __("Terms & Conditions", "complianz-terms-conditions")). '</a>'; } } return cmplz_tc_get_template( 'wizard/content.php', $args ).$other_plugins; } /** * If a section does not contain any fields to be filled, just drop it from the menu. * @return bool * * */ public function section_is_empty( $page, $step, $section ) { $section_compare = $this->get_next_not_empty_section( $page, $step, $section ); if ( $section != $section_compare ) { return true; } return false; } /** * Enqueue assets * @param $hook */ public function enqueue_assets( $hook ) { $minified = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min'; if ( strpos( $hook, 'terms-conditions' ) === false ) { return; } wp_register_style( 'cmplz-tc-terms-conditions', cmplz_tc_url . "assets/css/wizard$minified.css", false, cmplz_tc_version ); wp_enqueue_style( 'cmplz-tc-terms-conditions' ); } /** * Foreach required field, check if it's been answered * if section is false, check all fields of the step. * @param string $page * @param int $step * @param int $section * * @return bool */ public function required_fields_completed( $page, $step, $section ) { //get all required fields for this section, and check if they're filled in $fields = COMPLIANZ_TC::$config->fields( $page, $step, $section ); //get $fields = cmplz_tc_array_filter_multidimensional( $fields, 'required', true ); foreach ( $fields as $fieldname => $args ) { //if a condition exists, only check for this field if the condition applies. if ( isset( $args['condition'] ) || isset( $args['callback_condition'] ) && ! COMPLIANZ_TC::$field->condition_applies( $args ) ) { continue; } $value = COMPLIANZ_TC::$field->get_value( $fieldname ); if ( empty( $value ) ) { return false; } } return true; } public function all_required_fields_completed_wizard(){ return $this->all_required_fields_completed('terms-conditions'); } /** * Check if all required fields are filled * @return bool * * */ public function all_required_fields_completed( $page ) { for ( $step = 1; $step <= $this->total_steps( $page ); $step ++ ) { if ( COMPLIANZ_TC::$config->has_sections( $page, $step ) ) { for ( $section = $this->first_section( $page, $step ); $section <= $this->last_section( $page, $step ); $section ++ ) { if ( ! $this->required_fields_completed( $page, $step, $section ) ) { return false; } } } else { if ( ! $this->required_fields_completed( $page, $step, false ) ) { return false; } } } return true; } /** * * Get the current selected post id for documents * @return int * * */ public function post_id() { $post_id = false; if ( isset( $_GET['post_id'] ) || isset( $_POST['post_id'] ) ) { $post_id = ( isset( $_GET['post_id'] ) ) ? intval( $_GET['post_id'] ) : intval( $_POST['post_id'] ); } return $post_id; } /** * Get a notice style header with an intro above a step or section * * @param string $page * @param int $step * @param int $section * * @return string */ public function get_intro( $page, $step, $section ) { //only show when in action $intro = ''; if ( COMPLIANZ_TC::$config->has_sections( $page, $step ) ) { if ( isset( COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'][ $section ]['intro'] ) ) { $intro .= COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'][ $section ]['intro']; } } else { if ( isset( COMPLIANZ_TC::$config->steps[ $page ][ $step ]['intro'] ) ) { $intro .= COMPLIANZ_TC::$config->steps[ $page ][ $step ]['intro']; } } if ( strlen( $intro ) > 0 ) { $intro = '<div class="cmplz-wizard-intro">' . $intro . '</div>'; } return $intro; } /** * Retrieves the region to which this step applies * * @param $page * @param $step * @param $section * * @return array|bool */ public function get_section_regions( $page, $step, $section ) { //only show when in action $regions = false; if ( COMPLIANZ_TC::$config->has_sections( $page, $step ) ) { if ( isset( COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'][ $section ]['region'] ) ) { $regions = COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'][ $section ]['region']; } } else { if ( isset( COMPLIANZ_TC::$config->steps[ $page ][ $step ]['region'] ) ) { $regions = COMPLIANZ_TC::$config->steps[ $page ][ $step ]['region']; } } if ( $regions ) { if ( ! is_array( $regions ) ) { $regions = array( $regions ); } foreach ( $regions as $index => $region ) { if ( ! cmplz_has_region( $region ) ) { unset( $regions[ $index ] ); } } if ( count( $regions ) == 0 ) { $regions = false; } } if ( $regions ) { $regions = array_map( 'strtoupper', $regions ); } return $regions; } public function get_type( $post_id = false ) { $page = false; if ( $post_id ) { $region = COMPLIANZ_TC::$document->get_region( $post_id ); $post_type = get_post_type( $post_id ); $page = str_replace( 'cmplz-', '', $post_type ) . '-' . $region; } if ( isset( $_GET['page'] ) ) { $page = str_replace( 'cmplz-', '', sanitize_title( $_GET['page'] ) ); } return $page; } public function wizard_completed_once() { return get_option( 'cmplz_wizard_completed_once' ); } public function set_wizard_completed_once() { update_option( 'cmplz_wizard_completed_once', true ); } public function step( $page = false ) { $step = 1; if ( ! $page ) { $page = 'terms-conditions'; } $total_steps = $this->total_steps( $page ); if ( isset( $_GET["step"] ) ) { $step = intval( $_GET['step'] ); } if ( isset( $_POST["step"] ) ) { $step = intval( $_POST['step'] ); } if ( $step > $total_steps ) { $step = $total_steps; } if ( $step <= 1 ) { $step = 1; } return $step; } public function section() { $section = 1; if ( isset( $_GET["section"] ) ) { $section = intval( $_GET['section'] ); } if ( isset( $_POST["section"] ) ) { $section = intval( $_POST['section'] ); } if ( $section > $this->last_section ) { $section = $this->last_section; } if ( $section <= 1 ) { $section = 1; } return $section; } /** * Get total number of steps for a page * * @param $page * * @return int */ public function total_steps( $page ) { return count( COMPLIANZ_TC::$config->steps[ $page ] ); } public function total_sections( $page, $step ) { if ( ! isset( COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'] ) ) { return 0; } return count( COMPLIANZ_TC::$config->steps[ $page ][ $step ]['sections'] ); } public function last_section( $page, $step ) { if ( ! isset( COMPLIANZ_TC::$config->steps[ $page ][ $step ]["sections"] ) ) { return 1; } $array = COMPLIANZ_TC::$config->steps[ $page ][ $step ]["sections"]; return max( array_keys( $array ) ); } public function first_section( $page, $step ) { if ( ! isset( COMPLIANZ_TC::$config->steps[ $page ][ $step ]["sections"] ) ) { return 1; } $arr = COMPLIANZ_TC::$config->steps[ $page ][ $step ]["sections"]; $first_key = key( $arr ); return $first_key; } public function remaining_time( $page, $step, $section = false ) { //get remaining steps including this one $time = 0; $total_steps = $this->total_steps( $page ); for ( $i = $total_steps; $i >= $step; $i -- ) { $sub = 0; //if we're on a step with sections, we should add the sections that still need to be done. if ( ( $step == $i ) && COMPLIANZ_TC::$config->has_sections( $page, $step ) ) { for ( $s = $this->last_section( $page, $i ); $s >= $section; $s -- ) { $subsub = 0; $section_fields = COMPLIANZ_TC::$config->fields( $page, $step, $s ); foreach ( $section_fields as $section_fieldname => $section_field ) { if ( isset( $section_field['time'] ) ) { $sub += $section_field['time']; $subsub += $section_field['time']; $time += $section_field['time']; } } } } else { $fields = COMPLIANZ_TC::$config->fields( $page, $i, false ); foreach ( $fields as $fieldname => $field ) { if ( isset( $field['time'] ) ) { $sub += $field['time']; $time += $field['time']; } } } } return round( $time + 0.45 ); } /** * * Check which percentage of the wizard is completed * @param bool $count_warnings * * @return int * */ public function wizard_percentage_complete( $count_warnings = true ) { //store to make sure it only runs once. if ( $this->percentage_complete !== false ) { return $this->percentage_complete; } $total_fields = 0; $completed_fields = 0; $total_steps = $this->total_steps( 'terms-conditions' ); for ( $i = 1; $i <= $total_steps; $i ++ ) { $fields = COMPLIANZ_TC::$config->fields( 'terms-conditions', $i, false ); foreach ( $fields as $fieldname => $field ) { //is field required $required = isset( $field['required'] ) ? $field['required'] : false; if ( ( isset( $field['condition'] ) || isset( $field['callback_condition'] ) ) && ! COMPLIANZ_TC::$field->condition_applies( $field ) ) { $required = false; } if ( $required ) { $value = cmplz_tc_get_value( $fieldname, false, false ); $total_fields ++; if ( ! empty( $value ) ) { $completed_fields ++; } } } } $pages = COMPLIANZ_TC::$document->get_required_pages(); foreach ( $pages as $region => $region_pages ) { foreach ( $region_pages as $type => $page ) { if ( COMPLIANZ_TC::$document->page_exists($type) ) { $completed_fields ++; } $total_fields ++; } } $percentage = round( 100 * ( $completed_fields / $total_fields ) + 0.45 ); $this->percentage_complete = $percentage; return $percentage; } } } //class closure