-
Notifications
You must be signed in to change notification settings - Fork 33
Comparing changes
Open a pull request
base repository: mtierltd/timetracker
base: master
head repository: mtierltd/timetracker
compare: issue-259-migrate-nextcloud-native-ui
- 12 commits
- 101 files changed
- 2 contributors
Commits on Jul 3, 2026
-
Modernize test tooling and add static analysis config
Replaces the abandoned christophwurst/nextcloud dev stub with nextcloud/ocp so PHPUnit and PHPStan can resolve OCP types without a live Nextcloud install. Modernizes tests/Unit/Controller/PageControllerTest.php to PHPUnit\Framework\TestCase / setUp(): void and fixes it to match PageController's actual constructor (IUserSession, not a raw user id string) — it was silently stale. tests/bootstrap.php now just loads Composer's autoloader; the old full-server bootstrap moves to tests/bootstrap.integration.php for the (still server-dependent) integration suite, which gets its own `make test-integration` target since `make test` previously installed deps with --no-dev and would have stripped PHPUnit itself. Adds a PHPStan config (level 3) with a baseline freezing the 237 pre-existing findings (missing Doctrine DBAL stub types, plus a runtime class_alias() static analysis can't see through — mirrored in tests/phpstan-bootstrap.php) so analysis starts green and only flags newly introduced issues. Verified: make test, composer run lint, composer run phpstan, and composer run test:unit all pass on PHP 8.2, 8.3, and 8.5. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for 31f77c5 - Browse repository at this point
Copy the full SHA 31f77c5View commit details -
Replace Travis with GitHub Actions CI
.travis.yml was pinned to PHP 5.6-7.1 and long dead. Adds three free GitHub Actions workflows (unlimited minutes on public repos), each a simplified adaptation of Nextcloud's reusable workflow templates (nextcloud/.github): - lint-php.yml: composer validate + php -l, matrix over PHP 8.2/8.3 - static-analysis.yml: PHPStan against the baseline added in the previous commit - phpunit.yml: the unit suite only (no live server/DB needed, so no external services to boot); the server-backed integration suite is intentionally deferred to the multi-database CI follow-up from the linked issue Closes #257 (steps 1 and 2 only; unit tests for mappers/report queries and multi-database CI remain as follow-up). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for 16f35b5 - Browse repository at this point
Copy the full SHA 16f35b5View commit details
Commits on Jul 12, 2026
-
Remove FontAwesome and dead KingTable code
Deletes unused js/src/kingtable.js and css/kingtable.css (~203 KB), plus the FontAwesome stylesheet and webfonts/ directory (~2.7 MB), replacing the 4 FontAwesome icon classes still in use with their native Nextcloud equivalents across 9 usage sites in templates and JS formatters. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for ea071f1 - Browse repository at this point
Copy the full SHA ea071f1View commit details -
Configuration menu - View commit details
-
Copy full SHA for f1b0581 - Browse repository at this point
Copy the full SHA f1b0581View commit details -
Configuration menu - View commit details
-
Copy full SHA for 11f1834 - Browse repository at this point
Copy the full SHA 11f1834View commit details -
Add Vue/Nextcloud-Vue SPA shell (Stage 1 of frontend migration)
Scaffolds the Single Page Application shell described in the frontend migration epic: Vue 3 + vue-router + @nextcloud/vue, mounted at a new /spa route with NcAppNavigation and placeholder routes for all 9 existing views. Existing jQuery pages and templates are untouched; the new shell is reachable via an additive "SPA Preview (WIP)" nav link for review before any view is actually migrated in a later stage. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for c506304 - Browse repository at this point
Copy the full SHA c506304View commit details -
Migrate all views to the Vue SPA (Stages 2-4 of frontend migration)
Completes the jQuery-to-Vue migration started in Stage 1: every view (timer, dashboard, goals, reports, timelines, timelines-admin, projects, clients, tags) is now a Vue component backed by the same unchanged AjaxController endpoints. All 9 controllers now render the single SPA shell, so the classic per-view PHP templates and their dedicated webpack bundles are gone. Also drops the now-unused legacy stack: jquery, jquery-migrate, jqueryui, select2, daterangepicker, tabulator-tables, moment, piklor.js, and chart.js v2 (replaced by chart.js v4 + vue-chartjs for the dashboard's time/cost breakdown charts), along with their CSS and font assets. Bumps the app version so Nextcloud's asset cache-busting URL changes and browsers pick up the new bundle instead of serving a stale cached copy under the old unchanged URL. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for b5d1063 - Browse repository at this point
Copy the full SHA b5d1063View commit details -
Fix cramped Manual Entry modal in Timer view
The date pickers were rendered inline within the modal's own scroll area, so opening either calendar pushed content down and required scrolling to see it. Set the modal to NcModal's "normal" size and let both pickers teleport their calendar to <body> (append-to-body) so it floats above the modal instead of being clipped by it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for 8adf115 - Browse repository at this point
Copy the full SHA 8adf115View commit details -
Restore date range presets on Timer, Dashboard, Reports and Timelines
The old daterangepicker library bundled preset shortcuts (Today, Last 7/30/90/365 days, This/Last Month, This/Last Year); replacing it with plain from/to NcDateTimePicker fields during the Vue migration dropped that shortcut entirely rather than reimplementing it. Adds a shared dateRangePresets.js helper and a "Quick range..." select on all four views that had a date range, restoring the jump-to-range behavior. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for fd18ca8 - Browse repository at this point
Copy the full SHA fd18ca8View commit details
Commits on Jul 13, 2026
-
Update PageControllerTest for the SPA template cutover
PageController::index() now renders the 'spa' template (Stage 4 of the frontend migration) instead of 'index'; the test still asserted the old template name and was failing in CI as a result. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for 706c2ac - Browse repository at this point
Copy the full SHA 706c2acView commit details
Commits on Jul 14, 2026
-
Restore inline start/end time editing on Timer entries
The legacy UI let you click an entry's duration to open an inline date-range picker and adjust its start/end time directly, posting to the same update-work-interval endpoint used for manual entries. This was dropped during the Vue migration along with the rest of that row's inline editors. Adds an "Edit time" modal (two NcDateTimePicker fields) triggered by clicking the Duration cell, reusing the same date-formatting helper as the manual entry form. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for 8ab7b07 - Browse repository at this point
Copy the full SHA 8ab7b07View commit details -
Restore more functionality dropped during the Vue migration
Follow-up audit against the legacy jQuery implementation found three more gaps beyond the manual-entry and date-preset fixes already made: - Timer: the per-row cost field posted to the backend on every keystroke instead of on blur, and lost the success/error visual feedback the old jQuery version had. Now uses a local draft value committed on blur, with NcTextField's native success/error state. - Timer: the per-row tag picker lost the "type a new tag name inline" behavior (select2's tags:true). Restored via NcSelect's taggable/push-tags, matching updateWorkInterval's existing support for creating a tag on the fly from a non-numeric value. (Checked Projects' "Allowed tags" picker for the same gap, but its backend path, TagMapper::allowedTags(), has no such tag-creation logic — so enabling taggable there would insert a broken/orphaned row rather than restore a working feature. Left as-is.) - Dashboard: the two charts silently dropped the client dimension, showing only project-level totals even though the backend groups by client+project. Chart labels are now "Client / Project" so nothing is collapsed together. Also added the "Ended" column to Reports' CSV export (present in the original, computed from time+totalDuration or '*' when grouped) and fixed the CSV's "When" column to use the same formatted value as the on-screen table instead of a raw unix timestamp. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configuration menu - View commit details
-
Copy full SHA for a841648 - Browse repository at this point
Copy the full SHA a841648View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff master...issue-259-migrate-nextcloud-native-ui