public static function refresh_unit_completion($unit_id)
 {
     $modules = Unit_Module::get_modules($unit_id, 0, true);
     $input_modules = Unit_Module::get_input_module_types();
     if (!empty($modules)) {
         // Traverse modules
         foreach ($modules as $module_id) {
             $module_type = Unit_Module::get_module_type($module_id);
             $module_is_input = in_array($module_type, $input_modules);
             // Only for input modules
             if ($module_is_input) {
                 $module_meta = Unit_Module::get_module_meta($module_id);
                 self::refresh_module_completion($unit_id, $module_id, $module_type, $module_meta);
             }
         }
     }
 }
 private static function _create_input_module_meta($unit_id)
 {
     $modules = Unit_Module::get_modules($unit_id);
     foreach ($modules as $mod) {
         $module_id = $mod->ID;
         $module_type = get_post_meta($module_id, 'module_type', true);
         $module_type = !empty($module_type) ? is_array($module_type) ? $module_type[0] : $module_type : false;
         if ($module_type) {
             $input_module_types = Unit_Module::get_input_module_types();
             if (in_array($module_type, $input_module_types)) {
                 $mandatory_answer = get_post_meta($module_id, 'mandatory_answer', true);
                 $gradable_answer = get_post_meta($module_id, 'gradable_answer', true);
                 $minimum_grade_required = get_post_meta($module_id, 'minimum_grade_required', true);
                 $limit_attempts = get_post_meta($module_id, 'limit_attempts', true);
                 $limit_attempts_value = get_post_meta($module_id, 'limit_attempts_value', true);
                 $module_meta = array('mandatory_answer' => !empty($mandatory_answer) ? is_array($mandatory_answer) ? $mandatory_answer[0] : $mandatory_answer : array(), 'gradable_answer' => !empty($gradable_answer) ? is_array($gradable_answer) ? $gradable_answer[0] : $gradable_answer : array(), 'minimum_grade_required' => !empty($minimum_grade_required) ? is_array($minimum_grade_required) ? $minimum_grade_required[0] : $minimum_grade_required : false, 'limit_attempts' => !empty($limit_attempts) ? is_array($limit_attempts) ? $limit_attempts[0] : $limit_attempts : false, 'limit_attempts_value' => !empty($limit_attempts_value) ? is_array($limit_attempts_value) ? $limit_attempts_value[0] : $limit_attempts_value : false);
                 self::update_input_module_meta($unit_id, $module_id, $module_meta);
             }
         }
     }
 }