Compare commits
base: Unsupervised/unsupervised-scheduler:62392fdeceacac596b8a25ba07e3274a61542c0f
Unsupervised/unsupervised-scheduler:v1.6.0
Unsupervised/unsupervised-scheduler:v1.5.6
Unsupervised/unsupervised-scheduler:v1.5.5
Unsupervised/unsupervised-scheduler:v1.5.4
Unsupervised/unsupervised-scheduler:v1.5.3
Unsupervised/unsupervised-scheduler:v1.5.2
Unsupervised/unsupervised-scheduler:v1.5.1
Unsupervised/unsupervised-scheduler:v1.5.0
Unsupervised/unsupervised-scheduler:v1.4.1
Unsupervised/unsupervised-scheduler:v1.4.0
Unsupervised/unsupervised-scheduler:v1.3.0
Unsupervised/unsupervised-scheduler:v1.2.4
Unsupervised/unsupervised-scheduler:v1.2.3
Unsupervised/unsupervised-scheduler:v1.2.2
Unsupervised/unsupervised-scheduler:v1.2.1
Unsupervised/unsupervised-scheduler:v1.2.0
Unsupervised/unsupervised-scheduler:v1.1.1
Unsupervised/unsupervised-scheduler:v1.1.0
Unsupervised/unsupervised-scheduler:v1.0.0
..
compare: Unsupervised/unsupervised-scheduler:ae1a62883e074eaa7a457fa2f6233f038915aa46
Unsupervised/unsupervised-scheduler:v1.6.0
Unsupervised/unsupervised-scheduler:v1.5.6
Unsupervised/unsupervised-scheduler:v1.5.5
Unsupervised/unsupervised-scheduler:v1.5.4
Unsupervised/unsupervised-scheduler:v1.5.3
Unsupervised/unsupervised-scheduler:v1.5.2
Unsupervised/unsupervised-scheduler:v1.5.1
Unsupervised/unsupervised-scheduler:v1.5.0
Unsupervised/unsupervised-scheduler:v1.4.1
Unsupervised/unsupervised-scheduler:v1.4.0
Unsupervised/unsupervised-scheduler:v1.3.0
Unsupervised/unsupervised-scheduler:v1.2.4
Unsupervised/unsupervised-scheduler:v1.2.3
Unsupervised/unsupervised-scheduler:v1.2.2
Unsupervised/unsupervised-scheduler:v1.2.1
Unsupervised/unsupervised-scheduler:v1.2.0
Unsupervised/unsupervised-scheduler:v1.1.1
Unsupervised/unsupervised-scheduler:v1.1.0
Unsupervised/unsupervised-scheduler:v1.0.0
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ae1a62883e
|
Fix the CI failures in the uninstaller work
CI / Coding Standards (pull_request) Successful in 28s
CI / No Debug Code (pull_request) Successful in 3s
CI / Tests (PHP 8.1) (pull_request) Successful in 38s
CI / Tests (PHP 8.3) (pull_request) Successful in 40s
CI / Tests (PHP 8.2) (pull_request) Successful in 49s
CI / Static Analysis (pull_request) Successful in 1m0s
CI / Tests (PHP 8.5) (pull_request) Successful in 57s
CI / Build Plugin Zip (pull_request) Skipped
Both were mine, and both were in code the earlier commit could not run. The four test failures shared one cause: UninstallerTest stubbed get_option with an arrow function, which captures by value, so every read answered from a snapshot of the options taken at setUp — before the test set any and before the run wrote any. Every assertion that depended on reading back what had just been written therefore saw an empty store. The file's other stubs already use by-reference closures; this one now does too. The phpcs error is WordPress.DB.PreparedSQL.NotPrepared on the table drop. The sniff cannot follow $sql across the null guard that PHPStan requires (prepare() is nullable), and unlike the repositories — which call through a typed $this->db property the sniff does not track at all — the uninstaller calls the global $wpdb, so the sniff sees it. Silenced explicitly, with the reason. composer test (996 tests, 2871 assertions), composer lint and composer cs all pass locally on PHP 8.4. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
1847159e31
|
Fix five findings from a security assessment of the plugin
The assessment looked for three things: whether students can reach each other's bookings, whether payment settings can be dodged, and whether the plugin opens a way into the rest of the install. The student-isolation and payment paths held up. These are what did not. - The front-end login form told WordPress not to work out whether the site was secure, so on HTTPS every student's session cookie was issued without the Secure flag. wp_signon() only derives it from is_ssl() when the second argument is left at its default; an explicit false reads like "no preference" and is not. - The update check took whatever download URL the release API returned and handed it to core, which unpacks it over the installed plugin. The package must now be https on git.unsupervised.ca exactly, compared on the parsed host so a lookalike name cannot pass. - Uninstalling dropped 2 of 14 tables and left the Stripe secret and webhook signing key in wp_options. Removal is now a choice made in advance on Access -> Plugin removal: records are kept unless the owner opts in (with a typed confirmation), while credentials and the borrowed core registration settings go every time. - Open registration switches on the site-wide users_can_register and makes Student the default role, arming any other signup form on the site to mint students who could book and be billed immediately. The pending state is now decided once, on user_register, rather than by whichever form created the account. - Cancel and withdraw answered "not yours" differently from "does not exist", which let a signed-in student enumerate the studio's bookings. Both now give the same 404. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
|
|
74df3f5ba8
|
Merge pull request 'Bump version to 1.5.6' (#196) from release/bump-1.5.6 into main
CI / Coding Standards (push) Successful in 25s
CI / No Debug Code (push) Successful in 7s
CI / Tests (PHP 8.5) (push) Successful in 36s
CI / Tests (PHP 8.1) (push) Successful in 44s
CI / Static Analysis (push) Successful in 46s
CI / Tests (PHP 8.2) (push) Successful in 45s
CI / Tests (PHP 8.3) (push) Successful in 49s
CI / Build Plugin Zip (push) Successful in 22s
Reviewed-on: #196 |