Proyectos de Subversion Moodle

Rev

Rev 1225 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1225 Rev 1226
Línea 34... Línea 34...
34
    'input[type="checkbox"][data-togglegroup="report-select-all"][data-toggle="slave"]',
34
    'input[type="checkbox"][data-togglegroup="report-select-all"][data-toggle="slave"]',
35
  masterCheckbox:
35
  masterCheckbox:
36
    'input[type="checkbox"][data-togglegroup="report-select-all"][data-toggle="master"]',
36
    'input[type="checkbox"][data-togglegroup="report-select-all"][data-toggle="master"]',
37
  checkedRows:
37
  checkedRows:
38
    '[data-togglegroup="report-select-all"][data-toggle="slave"]:checked',
38
    '[data-togglegroup="report-select-all"][data-toggle="slave"]:checked',
-
 
39
  filtersForm: 'form#filters-form', // Seleccionamos el formulario de filtros
39
};
40
};
Línea 40... Línea 41...
40
 
41
 
-
 
42
/**
-
 
43
 * Función para resetear los filtros
-
 
44
 */
-
 
45
const resetFilters = () => {
-
 
46
  const filterForm = document.querySelector(Selectors.filtersForm); // Asegúrate de que el selector coincide con los filtros
-
 
47
  if (!filterForm) return;
-
 
48
 
-
 
49
  // Crear un objeto FormData que contendrá todos los valores del formulario
-
 
50
  const formData = new FormData(filterForm);
-
 
51
  
-
 
52
  // Iterar sobre cada elemento de input en el formulario
-
 
53
  filterForm.querySelectorAll("input, select").forEach((element) => {
-
 
54
    if (element.type === "checkbox" || element.type === "radio") {
-
 
55
      // Si es un checkbox o radio, desmarcarlo
-
 
56
      element.checked = false;
-
 
57
    } else {
-
 
58
      // Si es un input de texto o select, limpiar el valor
-
 
59
      element.value = "";
-
 
60
    }
-
 
61
 
-
 
62
    // Opcional: para asegurarse de que los valores del FormData también se reseteen
-
 
63
    formData.set(element.name, ""); 
-
 
64
  });
-
 
65
 
-
 
66
  // Si hay algún elemento select, deseleccionar la opción seleccionada
-
 
67
  filterForm.querySelectorAll("select").forEach((select) => {
-
 
68
    select.selectedIndex = -1; // Deseleccionar la opción seleccionada
-
 
69
  });
-
 
70
};
-
 
71
 
41
/**
72
/**
42
 * Initialise module
73
 * Initialize module
43
 */
74
 */
44
export const init = () => {
75
export const init = () => {
45
  const userBulkForm = document.querySelector(Selectors.bulkActionsForm);
76
  const userBulkForm = document.querySelector(Selectors.bulkActionsForm);
46
  const userReport = userBulkForm
77
  const userReport = userBulkForm
47
    ?.closest(Selectors.userReportWrapper)
78
    ?.closest(Selectors.userReportWrapper)
48
    ?.querySelector(reportSelectors.regions.report);
79
    ?.querySelector(reportSelectors.regions.report);
49
  if (!userBulkForm || !userReport) {
80
  if (!userBulkForm || !userReport) {
50
    return;
81
    return;
51
  }
82
  }
52
  const actionSelect = userBulkForm.querySelector("select");
-
 
53
  const inputs = userBulkForm.querySelectorAll("input, select"); // Capturar todos los inputs y selects
-
 
54
 
83
  const actionSelect = userBulkForm.querySelector("select");
Línea 55... Línea 84...
55
  CustomEvents.define(actionSelect, [CustomEvents.events.accessibleChange]);
84
  CustomEvents.define(actionSelect, [CustomEvents.events.accessibleChange]);
56
 
85
 
57
  jQuery(actionSelect).on(CustomEvents.events.accessibleChange, (event) => {
86
  jQuery(actionSelect).on(CustomEvents.events.accessibleChange, (event) => {
Línea 63... Línea 92...
63
        userBulkForm.submit();
92
        userBulkForm.submit();
64
      }
93
      }
65
    }
94
    }
66
  });
95
  });
Línea 67... Línea -...
67
 
-
 
68
  // Reset Filters function
-
 
69
  const resetFilters = () => {
96
 
70
    const filterForm = document.querySelector('form#filters-form'); // Asegúrate de que el selector coincide con los filtros
-
 
71
    if (!filterForm) return;
-
 
72
 
-
 
73
    filterForm.querySelectorAll("input, select").forEach((element) => {
-
 
74
      if (element.type === "checkbox" || element.type === "radio") {
-
 
75
        element.checked = false;
-
 
76
      } else {
-
 
77
        element.value = "";
-
 
78
      }
-
 
79
    });
-
 
80
  };
-
 
81
 
-
 
82
  const resetForm = () => {
-
 
83
    inputs.forEach((input) => {
97
  // Cada vez que los checkboxes en el informe cambien, actualizamos la lista de usuarios en los valores del formulario
84
      if (input.type === "checkbox" || input.type === "radio") {
-
 
85
        input.checked = false;
-
 
86
      } else {
-
 
87
        input.value = "";
-
 
88
      }
-
 
89
    });
-
 
90
  };
-
 
91
 
98
  // y habilitamos/deshabilitamos el select de acciones.
92
  const updateUserIds = () => {
99
  const updateUserIds = () => {
93
    const selectedUsers = [
100
    const selectedUsers = [
94
      ...userReport.querySelectorAll(Selectors.checkedRows),
101
      ...userReport.querySelectorAll(Selectors.checkedRows),
95
    ];
102
    ];
96
    const selectedUserIds = selectedUsers.map((check) => parseInt(check.value));
103
    const selectedUserIds = selectedUsers.map((check) => parseInt(check.value));
97
    userBulkForm.querySelector('[name="userids"]').value =
104
    userBulkForm.querySelector('[name="userids"]').value =
Línea -... Línea 105...
-
 
105
      selectedUserIds.join(",");
98
      selectedUserIds.join(",");
106
 
99
 
107
    // Deshabilitar el selector de acción si no se seleccionan usuarios, y resetear la selección actual.
100
    actionSelect.disabled = selectedUsers.length === 0;
108
    actionSelect.disabled = selectedUsers.length === 0;
101
    if (actionSelect.disabled) {
109
    if (actionSelect.disabled) {
Línea 102... Línea 110...
102
      actionSelect.value = "0";
110
      actionSelect.value = "0";
103
    }
111
    }
104
 
112
 
105
    const selectedUsersNames = selectedUsers.map(
-
 
-
 
113
    const selectedUsersNames = selectedUsers.map(
-
 
114
      (check) => document.querySelector(`label[for="${check.id}"]`).textContent
106
      (check) => document.querySelector(`label[for="${check.id}"]`).textContent
115
    );
107
    );
116
    // Agregar los ids y nombres de los usuarios a los atributos de datos del formulario para que estén disponibles desde
108
    
117
    // otros módulos JS que escuchen el evento de submit del formulario.
109
    userBulkForm.data = {
118
    userBulkForm.data = {
110
      userids: selectedUserIds,
119
      userids: selectedUserIds,
Línea 111... Línea 120...
111
      usernames: selectedUsersNames,
120
      usernames: selectedUsersNames,
Línea 112... Línea 121...
112
    };
121
    };
-
 
122
  };
113
  };
123
 
114
 
124
  updateUserIds();
115
  updateUserIds();
125
 
116
 
126
  document.addEventListener("change", (event) => {
117
  document.addEventListener("change", (event) => {
127
    // Cuando los checkboxes son marcados junto a usuarios individuales o el toggle maestro (Seleccionar todo/nada).
118
    if (
128
    if (
119
      (event.target.matches(Selectors.checkbox) ||
129
      (event.target.matches(Selectors.checkbox) ||
120
        event.target.matches(Selectors.masterCheckbox)) &&
130
        event.target.matches(Selectors.masterCheckbox)) &&
Línea 121... Línea 131...
121
      userReport.contains(event.target)
131
      userReport.contains(event.target)
-
 
132
    ) {
122
    ) {
133
      updateUserIds();
123
      updateUserIds();
134
    }
124
    }
135
  });
125
  });
-
 
126
 
-
 
127
  document.addEventListener(tableEvents.tableContentRefreshed, (event) => {
-
 
128
    if (userReport.contains(event.target)) {
-
 
129
      updateUserIds();
-
 
130
      resetFilters(); // Restablecer los filtros después de cada actualización
-
 
131
      resetForm(); // Resetear el formulario después de cada actualización de la tabla
-
 
132
    }
-
 
133
  });
-
 
134
 
-
 
135
  jQuery(actionSelect).on(CustomEvents.events.accessibleChange, (event) => {
-
 
136
    if (event.target.value && `${event.target.value}` !== "0") {
-
 
137
      const e = new Event("submit", { cancelable: true });
-
 
138
      userBulkForm.dispatchEvent(e);
136
 
139
      if (!e.defaultPrevented) {
137
  document.addEventListener(tableEvents.tableContentRefreshed, (event) => {
140
        FormChangeChecker.markFormSubmitted(userBulkForm);
138
    // Cuando el contenido del informe se actualiza (es decir, se cambia la página, se aplican filtros, etc.).