You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 3d04e44
Browse filesBrowse the repository at this point in the historyBrowse files
WPCredits Program Manager 1.117.4: a mentored student is Current though the email join found no report record
Follows #226 (fixes#222) with the release cut from the source repository: the one
predicate WPCPM_Roster_Index::is_waiting() read by the roster's groups() and the
Administrators Dashboard's count; the Mentors column counts an assigned mentor whose
name the reports join never brought; the mentor cell says the report record has not
reached this page rather than that it was never created; the group notes name both
signals; design specs 7.5 and the Administrators table row; the Administrators
Dashboard suite pins the has_mentor case; version, changelog, translation template.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: Education/WordPress Education Dashboard/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ Two components live here, and they are built to work together:
12
12
13
13
| Folder | What it is | Version |
14
14
| --- | --- | --- |
15
-
|[`wpcredits-program-manager/`](wpcredits-program-manager/)| The plugin. All of the program logic: roles, access levels, the Airtable sync, the Report Cards, the call calendar, the feedback surveys, email. | 1.117.3|
15
+
|[`wpcredits-program-manager/`](wpcredits-program-manager/)| The plugin. All of the program logic: roles, access levels, the Airtable sync, the Report Cards, the call calendar, the feedback surveys, email. | 1.117.4|
16
16
|[`wpcredits-theme/`](wpcredits-theme/)| The block theme. The landing page, the branded login, and the skin that turns the plugin's markup into the dashboard people actually use. Frames every page with the [official wordpress.org header and footer](../WordPress.org%20Global%20Header%20and%20Footer). | 1.24.7 |
17
17
18
18
The theme is the front end for the plugin and does not add program data or behaviour of its own.
ck( 'one row per institution with somebody in progress', array_column( $programs['rows'], 'record' ), array( $A ) );
855
859
ck( 'with the count, the breakdown by label, the waiting and the distinct mentors', array( $programs['rows'][0]['in_progress'], $programs['rows'][0]['by_status'], $programs['rows'][0]['waiting'], $programs['rows'][0]['mentors'] ), array( 3, array( 'WordPress Credits Program 150h' => 1, 'Developer Track' => 1, 'WordPress Credits Program 50h' => 1 ), 1, 1 ) );
856
860
ck( 'the earliest and latest end among those in progress', array( $programs['rows'][0]['earliest'], $programs['rows'][0]['latest'] ), array( '2026-11-30', '2026-12-15' ) );
861
+
862
+
// A mentor on the Students row whose report record the email join never found (WPCredits#222):
863
+
// the roster files her under Current, so this count must not call her waiting - and the
864
+
// Mentors column must not read 0 beside her either. The index carries no mentor ID, so a
865
+
// nameless assigned mentor counts as one mentor of her own.
ck( 'a mentored student the join missed is in progress and not waiting', array( $with_222['rows'][0]['in_progress'], $with_222['rows'][0]['waiting'] ), array( 4, 1 ) );
869
+
ck( 'and counts as a mentor though the join never brought a name', $with_222['rows'][0]['mentors'], 2 );
870
+
array_pop( $GLOBALS['rosters'][ $A ]['rows'] );
857
871
ck( 'the agreement state and the latest report state ride along', array( $programs['rows'][0]['agreement'], $programs['rows'][0]['report'] ), array( 'accepted', 'draft' ) );
858
872
ck( 'an institution with nobody in progress is counted, not listed', $programs['quiet'], 1 );
859
873
// The oldest non-zero read, not the newest: "how old are these numbers" is honestly answered
echo"\n=== is_waiting(): either signal is a mentor (WPCredits#222) ===\n";
455
+
456
+
ck( 'the predicate is the index\'s, so groups() and the Administrators count read one rule', method_exists( 'WPCPM_Roster_Index', 'is_waiting' ), true );
457
+
ck( 'neither a mentor nor a report record is waiting', WPCPM_Roster_Index::is_waiting( array( 'has_mentor' => false, 'reports' => array() ) ), true );
458
+
ck( 'a mentor on the Students row is not, though the join found no report', WPCPM_Roster_Index::is_waiting( array( 'has_mentor' => true, 'reports' => array() ) ), false );
459
+
ck( 'a joined report record is not, though the Students row names no mentor', WPCPM_Roster_Index::is_waiting( array( 'has_mentor' => false, 'reports' => array( 'recR000000000001' ) ) ), false );
460
+
ck( 'a row from before the key existed falls back to the report alone', WPCPM_Roster_Index::is_waiting( array( 'reports' => array() ) ), true );
Copy file name to clipboardExpand all lines: Education/WordPress Education Dashboard/wpcredits-program-manager/docs/specs/2026-09-02-institutions-module-design.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -738,8 +738,8 @@ Layout, for a settled institution: identity header from the pipeline index, fall
738
738
739
739
| Group | Rows | Note |
740
740
| --- | --- | --- |
741
-
| Current | status in `tracked_statuses()['active']` and `reports` non-empty | the account-bearing students|
742
-
| Waiting for a mentor | status in `['active']`and `reports`empty | imported and legacy rows alike, with `has_mentor` so "a mentor is assigned but no report record exists" reads differently from "no mentor yet" |
741
+
| Current | status in `tracked_statuses()['active']` and a mentor signal: `has_mentor` (the link on the Students row) or `reports` non-empty |since 1.117.4 (WPCredits#222): the reports list is joined by email alone, so a student whose two rows carry different addresses arrived with a mentor and an empty list and was called waiting while her own card named her mentor|
742
+
| Waiting for a mentor | status in `['active']`with neither `has_mentor` nor a `reports`row, `WPCPM_Roster_Index::is_waiting()`, the one predicate the Administrators Dashboard's count reads too | imported and legacy rows alike; the mentor cell still tells "a mentor is assigned, the report record has not reached this page yet" apart from "no mentor yet" |
743
743
| Finished | status in `['past']`| collapsed |
744
744
| Did not start |`Not moving forward`, `Fail`, empty | counted, collapsed, named honestly: the applicants who never began, which is the question institutions ask first |
Copy file name to clipboardExpand all lines: Education/WordPress Education Dashboard/wpcredits-program-manager/docs/specs/2026-09-04-administrator-dashboard-design.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -78,7 +78,7 @@ From `WPCPM_Institution_Request::open()`: institution, the note, opened date, ag
78
78
Two parts from one calculation, `WPCPM_Administrators_Dashboard::programs()`, which walks every institution in the pipeline index with a roster and, for each roster row, reads only `status`, `start`, `end` and `mentor`:
79
79
80
80
-**Totals strip, one tile per track** (`WPCPM_Program::track()`: `150h`, `50h`, `dev`): students in progress, signed up this semester, finished this semester. "This semester" is `WPCPM_Cohort::current()`; the numbers come from `WPCPM_Cohort::participation()` per institution, summed, so the strip and the semester report count the same thing the same way.
81
-
-**One row per institution with at least one student in progress**, sorted by institution name: institution (a link to its dashboard through the switcher), students in progress with a breakdown by status label, mentors assigned (distinct mentor record IDs across the in-progress rows) and rows waiting for a mentor, earliest and latest end date among in-progress rows, agreement summary state (`WPCPM_Institution_Agreement::summary()`), latest semester report state (`draft`, `approved`, or none). Institutions with nobody in progress are counted in one closing line ("12 more institutions with no student in progress") and not listed.
81
+
-**One row per institution with at least one student in progress**, sorted by institution name: institution (a link to its dashboard through the switcher), students in progress with a breakdown by status label, mentors assigned (distinct mentor names across the in-progress rows, plus one for each row whose mentor link the reports join never named, since the index carries no mentor ID) and rows waiting for a mentor (`WPCPM_Roster_Index::is_waiting()`, the roster's own rule: neither a mentor link nor a joined report record, since 1.117.4), earliest and latest end date among in-progress rows, agreement summary state (`WPCPM_Institution_Agreement::summary()`), latest semester report state (`draft`, `approved`, or none). Institutions with nobody in progress are counted in one closing line ("12 more institutions with no student in progress") and not listed.
82
82
83
83
The calculation reads options only, never Airtable, and prints the roster read time it found, the way the roster strip does, so a manager knows how old the numbers are.
Copy file name to clipboardExpand all lines: Education/WordPress Education Dashboard/wpcredits-program-manager/includes/modules/class-wpcpm-administrators-cards.php
+9-2Lines changed: 9 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -992,15 +992,22 @@ public static function programs() {
992
992
++$tracks[ $track ]['in_progress'];
993
993
}
994
994
995
-
// The roster's rule (`WPCPM_Roster_Index::groups()`), so the two counts agree.
Copy file name to clipboardExpand all lines: Education/WordPress Education Dashboard/wpcredits-program-manager/includes/modules/class-wpcpm-institution-roster-view.php
0 commit comments