Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mtierltd/timetracker
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: master
Choose a base ref
...
head repository: mtierltd/timetracker
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: issue-259-migrate-nextcloud-native-ui
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 12 commits
  • 101 files changed
  • 2 contributors

Commits on Jul 3, 2026

  1. 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>
    Martin-1997 and claude committed Jul 3, 2026
    Configuration menu
    Copy the full SHA
    31f77c5 View commit details
    Browse the repository at this point in the history
  2. 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>
    Martin-1997 and claude committed Jul 3, 2026
    Configuration menu
    Copy the full SHA
    16f35b5 View commit details
    Browse the repository at this point in the history

Commits on Jul 12, 2026

  1. 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>
    Martin-1997 and claude committed Jul 12, 2026
    Configuration menu
    Copy the full SHA
    ea071f1 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    f1b0581 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    11f1834 View commit details
    Browse the repository at this point in the history
  4. 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>
    Martin-1997 and claude committed Jul 12, 2026
    Configuration menu
    Copy the full SHA
    c506304 View commit details
    Browse the repository at this point in the history
  5. 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>
    Martin-1997 and claude committed Jul 12, 2026
    Configuration menu
    Copy the full SHA
    b5d1063 View commit details
    Browse the repository at this point in the history
  6. 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>
    Martin-1997 and claude committed Jul 12, 2026
    Configuration menu
    Copy the full SHA
    8adf115 View commit details
    Browse the repository at this point in the history
  7. 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>
    Martin-1997 and claude committed Jul 12, 2026
    Configuration menu
    Copy the full SHA
    fd18ca8 View commit details
    Browse the repository at this point in the history

Commits on Jul 13, 2026

  1. 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>
    Martin-1997 and claude committed Jul 13, 2026
    Configuration menu
    Copy the full SHA
    706c2ac View commit details
    Browse the repository at this point in the history

Commits on Jul 14, 2026

  1. 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>
    Martin-1997 and claude committed Jul 14, 2026
    Configuration menu
    Copy the full SHA
    8ab7b07 View commit details
    Browse the repository at this point in the history
  2. 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>
    Martin-1997 and claude committed Jul 14, 2026
    Configuration menu
    Copy the full SHA
    a841648 View commit details
    Browse the repository at this point in the history
Loading