Compare commits

..

1979 Commits

Author SHA1 Message Date
1243a93020 Merge pull request 'Migrate Renovate config' (#578) from renovate/migrate-config into main
All checks were successful
Laravel / laravel-tests (push) Successful in 4m25s
renovate / renovate (push) Successful in 40s
Reviewed-on: #578
2026-02-03 11:01:18 +00:00
Renovate Bot
78747e1f64 Migrate config renovate.json
All checks were successful
Laravel / laravel-tests (pull_request) Successful in 4m30s
2026-02-03 10:50:20 +00:00
84f08b548e Update .gitea/workflows/laravel.yml
All checks were successful
Laravel / laravel-tests (push) Successful in 4m40s
renovate / renovate (push) Successful in 1m1s
2026-02-03 10:40:15 +00:00
462bce226d Merge pull request 'Update ghcr.io/renovatebot/renovate Docker tag to v43.2.3' (#577) from renovate/ghcr.io-renovatebot-renovate-43.x into main
Some checks failed
Laravel / laravel-tests (push) Has been cancelled
renovate / renovate (push) Has been cancelled
2026-02-03 10:39:57 +00:00
Renovate Bot
2c3ae4ee86 Update ghcr.io/renovatebot/renovate Docker tag to v43.2.3
Some checks failed
Laravel / laravel-tests (pull_request) Failing after 4m41s
2026-02-03 10:39:55 +00:00
f4d6277646 Update .gitea/workflows/laravel.yml
Some checks failed
Laravel / laravel-tests (push) Failing after 4m57s
renovate / renovate (push) Has been cancelled
2026-02-03 10:34:11 +00:00
5e47287593 Update .gitea/workflows/laravel.yml
Some checks failed
Laravel / laravel-tests (push) Failing after 4m44s
renovate / renovate (push) Successful in 42s
2026-02-03 09:31:13 +00:00
dd5eb6782d disable posts
Some checks failed
Laravel / laravel-tests (push) Failing after 5m5s
renovate / renovate (push) Successful in 45s
2026-02-03 19:20:29 +10:00
0312e1dbea Merge pull request 'Update ghcr.io/renovatebot/renovate Docker tag to v43' (#574) from renovate/ghcr.io-renovatebot-renovate-43.x into main
Some checks failed
Laravel / laravel-tests (push) Failing after 6m29s
renovate / renovate (push) Successful in 1m10s
Reviewed-on: #574
2026-02-03 08:54:32 +00:00
b29ea655ba Merge branch 'main' into renovate/ghcr.io-renovatebot-renovate-43.x 2026-02-03 08:54:21 +00:00
Renovate Bot
8d06374bef Update ghcr.io/renovatebot/renovate Docker tag to v43 2026-02-03 08:53:24 +00:00
5ca0afc385 updated rules
Some checks failed
Laravel / laravel-tests (push) Has been cancelled
renovate / renovate (push) Has been cancelled
2026-02-03 18:53:22 +10:00
cc5a0de05d php 8.4 2026-02-03 18:52:22 +10:00
fe84e20645 disconnect github 2026-02-03 18:52:02 +10:00
2ba8881f3b Add .gitea/workflows/laravel.yml
Some checks failed
Laravel / laravel-tests (push) Failing after 2m54s
renovate / renovate (push) Successful in 46s
2026-02-03 08:49:50 +00:00
ce5c97290f Update .gitea/workflows/renovate.yaml
Some checks are pending
renovate / renovate (push) Waiting to run
2026-02-03 08:41:28 +00:00
Renovate Bot
0c7407c11b Update ghcr.io/renovatebot/renovate Docker tag to v37.440.7
Some checks failed
renovate / renovate (push) Has been cancelled
2026-02-03 08:40:50 +00:00
fe5ab7b0bf Update .gitea/workflows/renovate.yaml
Some checks failed
renovate / renovate (push) Failing after 20s
2026-02-03 08:36:12 +00:00
954b83ebba Update renovate-config.json
Some checks failed
renovate / renovate (push) Has been cancelled
2026-02-03 08:36:00 +00:00
9bfe23df9c Update .gitea/workflows/renovate.yaml
Some checks failed
renovate / renovate (push) Failing after 16s
2026-02-03 08:34:58 +00:00
5f78a9e500 Update renovate-config.cjs
Some checks failed
renovate / renovate (push) Failing after 16s
2026-02-03 08:34:30 +00:00
d47672dbe3 Update .gitea/workflows/renovate.yaml
Some checks failed
renovate / renovate (push) Failing after 13s
2026-02-03 08:31:17 +00:00
c3b898d99e Update .gitea/workflows/renovate.yaml
Some checks failed
renovate / renovate (push) Failing after 14s
2026-02-03 08:29:27 +00:00
b13b22c359 Update .gitea/workflows/renovate.yaml
Some checks failed
renovate / renovate (push) Failing after 21s
2026-02-03 08:27:28 +00:00
fa505f56ee Update .gitea/workflows/renovate.yaml
Some checks failed
renovate / renovate (push) Failing after 19s
2026-02-03 08:25:51 +00:00
464c7d5aa1 Update .gitea/workflows/renovate.yaml
Some checks failed
renovate / renovate (push) Failing after 24s
2026-02-03 08:23:55 +00:00
260b794111 Add renovate-config.js
Some checks failed
renovate / renovate (push) Failing after 2m40s
2026-02-03 08:18:55 +00:00
e2567c1b97 Update .gitea/workflows/renovate.yaml
Some checks are pending
renovate / renovate (push) Has started running
2026-02-03 08:18:29 +00:00
7302a36067 Update .gitea/workflows/renovate.yaml
Some checks failed
renovate / renovate (push) Failing after 22s
2026-02-03 08:10:39 +00:00
ac7b02f320 dependency updates
Some checks failed
renovate / renovate (push) Failing after 22s
2026-02-03 18:07:39 +10:00
0fbeb192c1 Add .gitea/workflows/renovate.yaml
Some checks failed
renovate / renovate (push) Failing after 55s
2026-02-03 07:42:37 +00:00
5c3788eb6d Add renovate.json
Some checks failed
Laravel / laravel-tests (push) Failing after 3m39s
2026-02-03 07:39:32 +00:00
James Collins
f01051107e Merge pull request #572 from STEMMechanics/dependabot/composer/livewire/livewire-4.1.2
Bump livewire/livewire from 4.1.0 to 4.1.2
2026-02-03 15:19:46 +10:00
dependabot[bot]
cf029bc86e Bump livewire/livewire from 4.1.0 to 4.1.2
Bumps [livewire/livewire](https://github.com/livewire/livewire) from 4.1.0 to 4.1.2.
- [Release notes](https://github.com/livewire/livewire/releases)
- [Commits](https://github.com/livewire/livewire/compare/v4.1.0...v4.1.2)

---
updated-dependencies:
- dependency-name: livewire/livewire
  dependency-version: 4.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-03 05:08:46 +00:00
James Collins
17ab10c1c5 Merge pull request #571 from STEMMechanics/dependabot/npm_and_yarn/autoprefixer-10.4.24
Bump autoprefixer from 10.4.23 to 10.4.24
2026-02-02 10:47:23 +10:00
dependabot[bot]
dc5c387f7a Bump autoprefixer from 10.4.23 to 10.4.24
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.23 to 10.4.24.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.23...10.4.24)

---
updated-dependencies:
- dependency-name: autoprefixer
  dependency-version: 10.4.24
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-02 00:44:17 +00:00
James Collins
3b4d2b2784 Merge pull request #570 from STEMMechanics/dependabot/composer/psy/psysh-0.12.19
Bump psy/psysh from 0.12.18 to 0.12.19
2026-01-31 08:35:50 +10:00
dependabot[bot]
3b3dc276fc Bump psy/psysh from 0.12.18 to 0.12.19
Bumps [psy/psysh](https://github.com/bobthecow/psysh) from 0.12.18 to 0.12.19.
- [Release notes](https://github.com/bobthecow/psysh/releases)
- [Commits](https://github.com/bobthecow/psysh/compare/v0.12.18...v0.12.19)

---
updated-dependencies:
- dependency-name: psy/psysh
  dependency-version: 0.12.19
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-30 22:31:55 +00:00
James Collins
ee460ec076 Merge pull request #569 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-text-align-3.18.0
Bump @tiptap/extension-text-align from 3.17.1 to 3.18.0
2026-01-30 11:20:28 +10:00
James Collins
24e7c6a008 Merge pull request #568 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-image-3.18.0
Bump @tiptap/extension-image from 3.17.1 to 3.18.0
2026-01-30 11:20:16 +10:00
dependabot[bot]
1a6a1dab47 Bump @tiptap/extension-image from 3.17.1 to 3.18.0
Bumps [@tiptap/extension-image](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-image) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/develop/packages/extension-image/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v3.18.0/packages/extension-image)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-image"
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-30 00:52:33 +00:00
dependabot[bot]
c85031ab49 Bump @tiptap/extension-text-align from 3.17.1 to 3.18.0
Bumps [@tiptap/extension-text-align](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-text-align) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/develop/packages/extension-text-align/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v3.18.0/packages/extension-text-align)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-text-align"
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-30 00:52:32 +00:00
James Collins
24efcab8da Merge pull request #567 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-typography-3.18.0
Bump @tiptap/extension-typography from 3.17.1 to 3.18.0
2026-01-30 10:51:48 +10:00
James Collins
182e4e8de8 Merge pull request #565 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-subscript-3.18.0
Bump @tiptap/extension-subscript from 3.17.1 to 3.18.0
2026-01-30 10:51:36 +10:00
James Collins
6b62e45acf Merge pull request #566 from STEMMechanics/dependabot/npm_and_yarn/tiptap/starter-kit-3.18.0
Bump @tiptap/starter-kit from 3.17.1 to 3.18.0
2026-01-30 10:51:23 +10:00
dependabot[bot]
a37f744caa Bump @tiptap/extension-typography from 3.17.1 to 3.18.0
Bumps [@tiptap/extension-typography](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-typography) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/develop/packages/extension-typography/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v3.18.0/packages/extension-typography)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-typography"
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-30 00:43:34 +00:00
dependabot[bot]
8eca69335f Bump @tiptap/starter-kit from 3.17.1 to 3.18.0
Bumps [@tiptap/starter-kit](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/starter-kit) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/develop/packages/starter-kit/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v3.18.0/packages/starter-kit)

---
updated-dependencies:
- dependency-name: "@tiptap/starter-kit"
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-30 00:43:22 +00:00
dependabot[bot]
87e70704c1 Bump @tiptap/extension-subscript from 3.17.1 to 3.18.0
Bumps [@tiptap/extension-subscript](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-subscript) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/develop/packages/extension-subscript/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v3.18.0/packages/extension-subscript)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-subscript"
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-30 00:43:10 +00:00
James Collins
db1821bcef Merge pull request #564 from STEMMechanics/copilot/add-code-styling-setup
Add Laravel Pint configuration for Shift compatibility
2026-01-29 15:16:17 +10:00
copilot-swe-agent[bot]
62583c4869 Fix pint.json: remove incorrect braces rule setting
Co-authored-by: nomadjimbob <26953208+nomadjimbob@users.noreply.github.com>
2026-01-29 05:13:01 +00:00
copilot-swe-agent[bot]
066b7b1790 Add code style documentation to README
Co-authored-by: nomadjimbob <26953208+nomadjimbob@users.noreply.github.com>
2026-01-29 05:12:18 +00:00
copilot-swe-agent[bot]
d38422e16c Add Laravel Pint configuration and composer scripts
Co-authored-by: nomadjimbob <26953208+nomadjimbob@users.noreply.github.com>
2026-01-29 05:11:55 +00:00
copilot-swe-agent[bot]
ed22521e6f Initial plan 2026-01-29 05:10:08 +00:00
James Collins
3218f55a31 Merge pull request #562 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-underline-3.18.0
Bump @tiptap/extension-underline from 3.17.1 to 3.18.0
2026-01-29 14:00:50 +10:00
dependabot[bot]
be1fa8f432 Bump @tiptap/extension-underline from 3.17.1 to 3.18.0
Bumps [@tiptap/extension-underline](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-underline) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/develop/packages/extension-underline/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v3.18.0/packages/extension-underline)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-underline"
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 04:00:02 +00:00
James Collins
c0c572397a Merge pull request #561 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-link-3.18.0
Bump @tiptap/extension-link from 3.17.1 to 3.18.0
2026-01-29 13:59:10 +10:00
James Collins
049d4849aa Merge pull request #560 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-superscript-3.18.0
Bump @tiptap/extension-superscript from 3.17.1 to 3.18.0
2026-01-29 13:58:58 +10:00
James Collins
e89656367f Merge pull request #559 from STEMMechanics/dependabot/composer/phpunit/phpunit-12.5.8
Bump phpunit/phpunit from 10.5.62 to 12.5.8
2026-01-29 13:58:41 +10:00
dependabot[bot]
e910ef7e84 Bump phpunit/phpunit from 10.5.62 to 12.5.8
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.62 to 12.5.8.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/12.5.8/ChangeLog-12.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.62...12.5.8)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-version: 12.5.8
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 03:58:02 +00:00
dependabot[bot]
db0e927056 Bump @tiptap/extension-link from 3.17.1 to 3.18.0
Bumps [@tiptap/extension-link](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-link) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/develop/packages/extension-link/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v3.18.0/packages/extension-link)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-link"
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 03:57:20 +00:00
James Collins
cec55028d6 Merge pull request #557 from STEMMechanics/dependabot/composer/livewire/livewire-4.1.0 2026-01-29 13:57:08 +10:00
James Collins
0ae09c40ae Merge pull request #556 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-highlight-3.18.0
Bump @tiptap/extension-highlight from 3.17.1 to 3.18.0
2026-01-29 13:56:18 +10:00
James Collins
1cf2ec1ce7 Merge pull request #555 from STEMMechanics/dependabot/composer/laravel/framework-12.49.0
Bump laravel/framework from 12.48.1 to 12.49.0
2026-01-29 13:56:06 +10:00
dependabot[bot]
693df3a05b Bump @tiptap/extension-superscript from 3.17.1 to 3.18.0
Bumps [@tiptap/extension-superscript](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-superscript) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/develop/packages/extension-superscript/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v3.18.0/packages/extension-superscript)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-superscript"
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 00:43:35 +00:00
dependabot[bot]
c0d1913660 Bump livewire/livewire from 3.7.6 to 4.1.0
Bumps [livewire/livewire](https://github.com/livewire/livewire) from 3.7.6 to 4.1.0.
- [Release notes](https://github.com/livewire/livewire/releases)
- [Commits](https://github.com/livewire/livewire/compare/v3.7.6...v4.1.0)

---
updated-dependencies:
- dependency-name: livewire/livewire
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 00:43:20 +00:00
dependabot[bot]
8c387280a6 Bump @tiptap/extension-highlight from 3.17.1 to 3.18.0
Bumps [@tiptap/extension-highlight](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-highlight) from 3.17.1 to 3.18.0.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/develop/packages/extension-highlight/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v3.18.0/packages/extension-highlight)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-highlight"
  dependency-version: 3.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 00:43:11 +00:00
dependabot[bot]
a1ab7b6257 Bump laravel/framework from 12.48.1 to 12.49.0
Bumps [laravel/framework](https://github.com/laravel/framework) from 12.48.1 to 12.49.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/12.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/framework/compare/v12.48.1...v12.49.0)

---
updated-dependencies:
- dependency-name: laravel/framework
  dependency-version: 12.49.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 00:43:07 +00:00
James Collins
36d4f08aaf Merge pull request #554 from STEMMechanics/dependabot/composer/symfony/process-7.4.5
Bump symfony/process from 7.4.4 to 7.4.5
2026-01-29 07:50:12 +10:00
dependabot[bot]
f7de4f49d3 Bump symfony/process from 7.4.4 to 7.4.5
Bumps [symfony/process](https://github.com/symfony/process) from 7.4.4 to 7.4.5.
- [Release notes](https://github.com/symfony/process/releases)
- [Changelog](https://github.com/symfony/process/blob/8.1/CHANGELOG.md)
- [Commits](https://github.com/symfony/process/compare/v7.4.4...v7.4.5)

---
updated-dependencies:
- dependency-name: symfony/process
  dependency-version: 7.4.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 21:39:53 +00:00
James Collins
06018c405d Merge pull request #553 from STEMMechanics/dependabot/composer/phpunit/phpunit-10.5.62
Bump phpunit/phpunit from 10.5.61 to 10.5.62
2026-01-28 16:24:47 +10:00
dependabot[bot]
03c17200a0 Bump phpunit/phpunit from 10.5.61 to 10.5.62
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.61 to 10.5.62.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.62/ChangeLog-10.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.61...10.5.62)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-version: 10.5.62
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 04:44:31 +00:00
519c2a0fec update to php 8.4 2026-01-28 14:43:38 +10:00
James Collins
2b8788f716 Merge pull request #552 from STEMMechanics/dependabot/npm_and_yarn/axios-1.13.4
Bump axios from 1.13.3 to 1.13.4
2026-01-28 14:33:55 +10:00
dependabot[bot]
72be071536 Bump axios from 1.13.3 to 1.13.4
Bumps [axios](https://github.com/axios/axios) from 1.13.3 to 1.13.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.3...v1.13.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.13.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 00:43:12 +00:00
37b923fbda use important on hidden for placeholder 2026-01-27 20:30:01 +10:00
github-actions[bot]
292901a02e Dependency update 2026-01-26 20:19:20 +00:00
github-actions[bot]
12a6629a4b Dependency update 2026-01-19 20:17:13 +00:00
9d9a8ed9f5 exclude vendor in tests 2026-01-15 08:56:12 +10:00
1a03fed3bd added snyk test 2026-01-15 08:54:06 +10:00
43e66b2004 path traversal in chunk unlink fix 2026-01-15 08:33:38 +10:00
8babb4c836 added unlink safeguard 2026-01-15 08:28:41 +10:00
4eb3dfbb64 fix potential path traversal 2026-01-15 08:23:03 +10:00
33d390a612 fix open redirect 2026-01-15 08:01:05 +10:00
cad78c30ae added peer dependency 2026-01-15 07:57:10 +10:00
f8acdae237 fix path traversal risk 2026-01-15 07:56:32 +10:00
github-actions[bot]
63582dc306 Dependency update 2026-01-12 20:17:47 +00:00
github-actions[bot]
c96fb95f27 Dependency update 2026-01-05 20:18:40 +00:00
1160c8b077 holiday message 2026-01-01 09:11:28 +10:00
a4b3405f8a vite update 2026-01-01 09:06:16 +10:00
9d5396ca9a tiptap and vite update 2026-01-01 09:02:08 +10:00
de1483d409 tiptap update 2026-01-01 09:01:15 +10:00
James Collins
a37386565a Merge pull request #530 from STEMMechanics/dependabot/npm_and_yarn/laravel-vite-plugin-2.0.1
Bump laravel-vite-plugin from 1.3.0 to 2.0.1
2026-01-01 08:46:08 +10:00
dependabot[bot]
ff8b6549ce Bump laravel-vite-plugin from 1.3.0 to 2.0.1
Bumps [laravel-vite-plugin](https://github.com/laravel/vite-plugin) from 1.3.0 to 2.0.1.
- [Release notes](https://github.com/laravel/vite-plugin/releases)
- [Changelog](https://github.com/laravel/vite-plugin/blob/2.x/CHANGELOG.md)
- [Upgrade guide](https://github.com/laravel/vite-plugin/blob/2.x/UPGRADE.md)
- [Commits](https://github.com/laravel/vite-plugin/compare/v1.3.0...v2.0.1)

---
updated-dependencies:
- dependency-name: laravel-vite-plugin
  dependency-version: 2.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-31 22:18:17 +00:00
github-actions[bot]
d550bc60e2 Dependency update 2025-12-31 21:02:22 +00:00
James Collins
307573a3a8 Update workflow to commit changes directly
Replaced the Create PR step with a Commit and push step to directly commit changes to the main branch.
2026-01-01 07:01:35 +10:00
James Collins
d9fc6c95f3 Update PHP version in dependency update workflow 2026-01-01 06:58:23 +10:00
James Collins
a65f0eead6 Add workflow for automated dependency updates 2026-01-01 06:56:13 +10:00
ca025ca2e8 dependency updates 2025-12-23 10:39:55 +10:00
74aef68edc remove posts reference 2025-12-23 10:34:05 +10:00
c0e595f88a dependency updates 2025-11-27 10:15:26 +10:00
aab4bc0d46 dependency updates 2025-11-26 10:10:57 +10:00
f2708e1325 dependency updates 2025-11-19 10:32:18 +10:00
James Collins
2e2b70ab7c Merge pull request #533 from STEMMechanics/dependabot/npm_and_yarn/multi-74f7c1f85a
Bump esbuild and vite
2025-11-19 10:28:45 +10:00
dependabot[bot]
e42d54554a Bump esbuild and vite
Bumps [esbuild](https://github.com/evanw/esbuild) to 0.25.12 and updates ancestor dependency [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). These dependencies need to be updated together.


Updates `esbuild` from 0.21.5 to 0.25.12
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG-2024.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.21.5...v0.25.12)

Updates `vite` from 5.4.21 to 7.2.2
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.2.2/packages/vite)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.25.12
  dependency-type: indirect
- dependency-name: vite
  dependency-version: 7.2.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-19 00:25:53 +00:00
6cb24f1500 dependency updates 2025-11-19 10:24:23 +10:00
f7cc086f37 added jenkins link 2025-11-19 10:23:05 +10:00
8463da7842 opacity fixes 2025-11-17 09:26:48 +10:00
James Collins
322d547c92 Merge pull request #526 from STEMMechanics/laravel12
laravel 12 upgrade
2025-11-17 09:09:10 +10:00
30104ece71 laravel 12 upgrade 2025-11-17 09:08:07 +10:00
44f359ff9c fix timings 2025-11-16 23:15:49 +10:00
20f36d519a fix timings 2025-11-16 23:14:55 +10:00
e358e9fb5d fix timings 2025-11-16 23:13:28 +10:00
b882d92328 fix timings 2025-11-16 23:08:34 +10:00
3257aa9ee9 added bot checks 2025-11-16 23:04:50 +10:00
0bcd6f5e86 added bot checks 2025-11-16 23:00:21 +10:00
75d958856a rename controller 2025-11-16 22:59:07 +10:00
71eb00d010 unsubscribe fixes 2025-11-16 22:56:16 +10:00
eab3d062f5 unsubscribe fixes 2025-11-16 22:48:17 +10:00
1afa22e2f4 logging 2025-11-16 22:19:40 +10:00
b85d039c36 fix var name 2025-11-16 22:14:04 +10:00
c1a4fd13d5 fix var name 2025-11-16 22:04:01 +10:00
9a1ffe835c fix var name 2025-11-16 22:02:32 +10:00
c3b9482d35 obsolete directives 2025-11-16 22:00:14 +10:00
bc8f9149dc fix unsubscribe link 2025-11-16 21:57:41 +10:00
c60213257b force SSL 2025-11-16 21:41:14 +10:00
6a78ba2bb2 composer updates 2025-11-16 21:12:40 +10:00
a5f7ce8393 updated subscription elements 2025-11-16 21:10:34 +10:00
4e1505c5c2 updated subscription elements 2025-11-16 19:07:07 +10:00
e967bdde71 updated footer and added about page 2025-11-16 16:20:41 +10:00
74e9e39722 updated address 2025-11-16 16:02:34 +10:00
0df4033fca package updates 2025-11-16 15:41:11 +10:00
e02770cc85 added roave/security-advisories 2025-11-16 15:32:35 +10:00
3687af2656 remove blog posts 2025-11-16 15:31:29 +10:00
b168931266 upgraded packages 2025-11-10 16:46:10 +10:00
b669dd319e fixed bad left offset of backdrop in dropdown 2025-11-10 16:43:26 +10:00
e37b9a30a4 dependency updates 2025-08-28 20:17:42 +10:00
436d4b8acf update 2025-08-28 20:12:49 +10:00
a2eb1d5d1b search bar focus and select fix 2025-08-28 20:12:31 +10:00
be4fdb2f80 updated to handle local caching 2025-08-28 20:03:30 +10:00
538f324ff4 captcha cleanup and added 2fa logins 2024-09-28 11:51:28 +10:00
59ca73519d added instructions 2024-09-28 09:23:16 +10:00
6bc2b888a4 change timer 2024-09-28 09:18:43 +10:00
be8b2d48b3 update newsletter schedule 2024-09-27 22:38:11 +10:00
5f631a5c3d remove user data 2024-09-27 22:26:58 +10:00
fea3756eab fix bad checkbox variable 2024-09-27 22:26:25 +10:00
6d8db2cd80 fix bad variable name 2024-09-27 22:23:57 +10:00
9725f4944f fix bad variable name 2024-09-27 22:23:01 +10:00
9b1b92d0cf added email subscriptions 2024-09-27 22:17:39 +10:00
b10b6b712e added email subscriptions 2024-09-27 22:16:29 +10:00
db018e9120 fix invalid tag 2024-09-27 19:58:57 +10:00
1444bc9aa4 fallback if firstname is missing 2024-09-27 19:56:32 +10:00
9e7fc79fa1 add search option to navbar slide out 2024-09-27 18:08:25 +10:00
06460d9677 update home to shipping address 2024-09-27 18:04:12 +10:00
beed9f9c11 update home to shipping address 2024-09-27 17:59:27 +10:00
38b3d5d367 positioning updates 2024-09-27 17:30:00 +10:00
ad080b19a2 fix asset links 2024-09-27 14:47:59 +10:00
274d9759b6 fix small screen layouts 2024-09-27 14:26:46 +10:00
d992570ee8 fix number formatting 2024-09-27 14:22:18 +10:00
d72c08b4c9 fix selection 2024-09-27 14:22:03 +10:00
7baea36628 fix single decimal point pricing 2024-09-27 13:39:59 +10:00
b20c79b679 updated search and added past workshop page 2024-09-27 13:33:50 +10:00
5cbebd8840 remove 2024-09-27 11:26:24 +10:00
d36979cbbd updated 2024-09-27 11:25:49 +10:00
1c28cd7902 updated 2024-09-27 11:24:55 +10:00
df19e43112 update includes 2024-09-27 11:24:47 +10:00
5a65517d2b added past index route 2024-09-27 11:19:32 +10:00
49eb388041 updated mast to support tabs 2024-09-27 11:17:49 +10:00
659ae2e3ac bts update 2024-09-27 10:27:54 +10:00
8f8d12065d change workshop table to events 2024-05-07 15:00:32 +10:00
391b17c1e7 download and close buttons in gallery 2024-05-07 08:24:17 +10:00
742da4bf17 updated tokens and emails 2024-05-06 20:13:31 +10:00
39ea570f3a email still required to be unique 2024-05-06 10:46:38 +10:00
714a15e6d0 allow empty fields by admin 2024-05-06 10:45:49 +10:00
a5e4e93edb reject emails already in use 2024-05-06 10:45:38 +10:00
5f166deee9 remove unused variable 2024-05-04 18:08:45 +10:00
2468bff5fb no decimals for KB and bytes 2024-05-04 18:08:05 +10:00
277805044a keep gallery order 2024-05-04 17:25:20 +10:00
680be0535d keep gallery order 2024-05-04 17:21:07 +10:00
b438846c3c dependency updates 2024-05-04 14:44:52 +10:00
6a76dacdae fix overlapping pages on PDF thumbnail generation 2024-05-04 14:42:23 +10:00
3358cf8dea fix default name 2024-05-04 14:21:35 +10:00
7b6e17ba40 hide hidden field 2024-05-04 14:19:25 +10:00
3e891912b0 fix issues with scripts rendering 2024-05-04 14:18:17 +10:00
53d0c46aa0 updates 2024-05-04 13:49:44 +10:00
e4d5307dfe updates 2024-05-04 13:48:21 +10:00
28aebcfe58 set default publish to now 2024-05-04 13:42:22 +10:00
cdc5d1e8d3 allow multiple components on page 2024-05-04 13:39:55 +10:00
4c7dadfab0 dull border 2024-05-03 21:00:01 +10:00
4ac1322b8c post table responsive 2024-05-02 11:47:23 +10:00
822838fe29 locations table responsive 2024-05-02 11:42:58 +10:00
fb4c8c240b fix navbar z-index on search bar 2024-05-02 11:39:12 +10:00
30e308466b update title size based on length 2024-05-01 21:06:40 +10:00
e1dcc7452b support null file list 2024-05-01 21:01:49 +10:00
76690962c5 add workshop duplication 2024-05-01 20:57:20 +10:00
629ae22b78 add videos file list 2024-05-01 20:27:23 +10:00
1e1df33711 dont generate variants if it already exists 2024-05-01 18:49:50 +10:00
f835d4a21b support stopmotionstudiomobile extension 2024-05-01 18:40:30 +10:00
1219c9a02e added updating thumbnails 2024-05-01 18:39:33 +10:00
bbffddf9ae cleanup file type 2024-05-01 18:25:18 +10:00
74cc11e124 check element exists first 2024-05-01 18:14:49 +10:00
b020f5cbb6 remove file from form 2024-05-01 18:03:49 +10:00
09bd9a22c9 fix user creation validation 2024-05-01 17:43:34 +10:00
ebf97a8242 fix search data 2024-05-01 14:44:50 +10:00
6d51cc1395 CSS for ul 2024-05-01 12:09:58 +10:00
ededb36856 dependency updates 2024-05-01 07:11:19 +10:00
b7ee043bf3 reverse order in search 2024-04-30 21:44:42 +10:00
48131d3064 added shortcuts 2024-04-30 21:35:28 +10:00
d4f3e24c33 added shortcuts 2024-04-30 21:31:52 +10:00
0f253e1047 added cancelled status 2024-04-30 15:37:41 +10:00
4d2f6de3c8 added cancelled status 2024-04-30 15:36:19 +10:00
346c945937 delete temp files 2024-04-30 08:34:56 +10:00
4391abaabb progress uploads 2024-04-30 07:40:08 +10:00
50169e9905 responsive forms 2024-04-29 22:19:10 +10:00
7a6a3ec2d8 save workshop files in workshop updates 2024-04-29 22:14:13 +10:00
5d715b096f cleanup filelist display 2024-04-29 22:12:08 +10:00
c696a8bd2e refactor file uploading and add media picker errors 2024-04-29 22:00:34 +10:00
d3bf78d5a8 added empty button 2024-04-29 20:16:24 +10:00
cd08c9a5c8 correct spacing for narrow images 2024-04-28 18:44:06 +10:00
bd8f453aea bypass password for admin 2024-04-28 18:36:03 +10:00
c719da2933 string starts with fix 2024-04-28 18:28:53 +10:00
a5184be13d added filetype 2024-04-28 18:25:31 +10:00
47a2afff86 added filetype 2024-04-28 18:24:56 +10:00
b8db85abca added getFileTypeAttribute() 2024-04-28 18:23:36 +10:00
67df8f85ff generic thumbnail for password protected files 2024-04-28 18:15:02 +10:00
6bb45c38a9 generic thumbnail for password protected files 2024-04-28 18:12:12 +10:00
02dbacbdc0 incorrect filename 2024-04-28 18:04:09 +10:00
bea4f8db18 add cmd to regenerate thumbnails 2024-04-28 18:00:33 +10:00
3919a3ce1c expand on thumbnail variants 2024-04-28 17:55:09 +10:00
d1b94f9183 ensure there is a thumbnail variant before returning url 2024-04-28 17:32:01 +10:00
bb440497eb dependency updates 2024-04-28 17:27:00 +10:00
4b87c5e112 remove debug 2024-04-28 17:25:39 +10:00
a2def6abc0 added media status and retry loading thumbnails 2024-04-28 17:25:10 +10:00
a5be12aee3 media picker responsive 2024-04-28 17:06:09 +10:00
e2fed71896 add responsive table 2024-04-28 16:26:02 +10:00
befebc44cb fix image distortion 2024-04-27 21:51:32 +10:00
b4456d7771 menu floating on mobile 2024-04-27 21:51:23 +10:00
c3350823dc table cleanup 2024-04-25 20:31:09 +10:00
96ba9edf6a fix text wrapping in pagination 2024-04-25 19:57:10 +10:00
39609edc9e better file password implementation 2024-04-25 18:40:40 +10:00
c702253837 change button name 2024-04-25 17:54:07 +10:00
bad020924d support for passworded files 2024-04-25 17:48:47 +10:00
a57be26b75 incorrect email 2024-04-25 15:11:10 +10:00
1d63186fd5 bugfix 2024-04-25 14:50:06 +10:00
6e9d14728d remove time 2024-04-25 14:41:18 +10:00
7c9dab2cf0 fix 2024-04-25 14:40:23 +10:00
885a909e57 dont create user is some cases 2024-04-25 14:35:22 +10:00
a26b669daa record extra register details in log 2024-04-25 14:27:18 +10:00
3bd3b30609 record extra register details in log 2024-04-25 14:27:09 +10:00
1201a6f0e6 record extra details in honeypot 2024-04-25 14:21:34 +10:00
8a32fc41a8 record extra details in honeypot 2024-04-25 14:16:16 +10:00
6131b378b8 pass previous query values to paginate 2024-04-25 14:09:11 +10:00
2a80a1ad62 remove rules page 2024-04-24 23:30:09 +10:00
4e0e7f6b7b added missing pages 2024-04-24 23:25:47 +10:00
7bc62d5600 margin on small screens 2024-04-24 22:59:14 +10:00
6208676207 update selectors 2024-04-24 22:34:28 +10:00
70f9d736d1 add gap between buttons 2024-04-24 22:10:43 +10:00
09c49ab279 variable checking 2024-04-24 22:07:33 +10:00
6ac8fb4f89 variable checking 2024-04-24 22:05:57 +10:00
3a2735f00d further bot checking 2024-04-24 22:01:29 +10:00
7b89fad650 check value 2024-04-24 21:48:15 +10:00
9bc3e5e963 check $post 2024-04-24 21:48:09 +10:00
ea10ead824 added honeypot 2024-04-24 21:41:47 +10:00
4a4b42bed0 fix missing view 2024-04-24 21:01:02 +10:00
1053fbc797 fix missing view 2024-04-24 20:50:43 +10:00
988dbd4edc cleanup 2024-04-24 19:39:33 +10:00
4c9d1667b6 added 2024-04-24 18:07:17 +10:00
2b924fac4b removed from project 2024-04-24 18:06:38 +10:00
18e0a2afd2 don't include .idea 2024-04-24 18:04:43 +10:00
558a432960 dependency updates 2024-04-24 18:01:55 +10:00
f46dbd887b fix workshop order 2024-04-24 17:56:40 +10:00
50de666304 add responsive 2024-04-24 07:18:17 +10:00
d592f8bd19 bugfixes 2024-04-24 07:16:04 +10:00
d2b69061b5 added thumbnails and download link 2024-04-24 07:11:03 +10:00
b24fa48d85 only need lg images 2024-04-23 21:41:04 +10:00
28b2ffa4a3 only need lg images 2024-04-23 21:38:45 +10:00
4a45c0f505 add gzip and expires 2024-04-23 21:38:36 +10:00
f7e7ed9d7a use medium image size 2024-04-23 21:17:42 +10:00
232f737a10 fix up the sort order on the workshops page 2024-04-23 20:51:10 +10:00
feecd0d7f5 dont show private events on front page 2024-04-23 19:33:16 +10:00
2d872ae289 update display 2024-04-23 19:31:47 +10:00
d6b6cb49cf add private event support 2024-04-23 19:13:42 +10:00
735d39f52e fix responsive design 2024-04-23 19:02:39 +10:00
46faf195a7 add default age 2024-04-23 17:04:26 +10:00
caff5c8160 support price of 0 2024-04-23 16:54:44 +10:00
39d5b29ed3 add double click support to media picker 2024-04-23 16:47:08 +10:00
b4f3fa6d07 html entity support 2024-04-23 15:22:26 +10:00
eae8af936b support restarting upload 2024-04-23 15:01:17 +10:00
257e241aea add url features 2024-04-23 14:34:58 +10:00
2587ea624a incorrect variable name 2024-04-23 14:23:05 +10:00
8cd19f6b8a incorrect variable name 2024-04-23 14:21:18 +10:00
8dea8e5995 detect filenames that are postfixed with a copy number indicator 2024-04-23 14:18:34 +10:00
dedcf1a379 fix padding of datetime-local inputs on webkit 2024-04-23 14:07:23 +10:00
2e0df186c6 title was not amended 2024-04-23 14:07:08 +10:00
2e39b9cb2a show the file count on uploading 2024-04-23 13:28:49 +10:00
0e19f6da87 clean filename 2024-04-23 12:33:37 +10:00
34092291dd better percentage display 2024-04-23 12:33:28 +10:00
67f2967823 support chunk uploading 2024-04-23 12:18:16 +10:00
33f0d83cf7 fix path for unknown.webp 2024-04-23 11:28:17 +10:00
3a35c28f1d dependency updates 2024-04-23 11:19:59 +10:00
2a1db0b088 return unknown.webp file if the requested file does not exist 2024-04-23 11:14:54 +10:00
79fb978127 show correct thumbnail when uploading file 2024-04-23 11:14:35 +10:00
9e2cfd8abc dont allow escape key on progress window 2024-04-23 11:08:00 +10:00
88889ca329 use thumbnails 2024-04-23 10:28:29 +10:00
aed29200a7 fix incrementing and automatic titling 2024-04-23 10:21:14 +10:00
d6b03826c1 added filenameToTitle 2024-04-23 10:20:55 +10:00
0a99b1789b auto select added files 2024-04-23 10:16:15 +10:00
80bc35bf4c show new name 2024-04-23 10:16:05 +10:00
f0ae8cd7ad update the value on load 2024-04-23 09:37:06 +10:00
6dbc9f0281 bugfix with file lists 2024-04-23 09:28:42 +10:00
88b1dcdfae bugfix with array types 2024-04-23 09:20:36 +10:00
ff811d961f hide files title if no files and not editing 2024-04-23 09:10:25 +10:00
633e0557f6 dont parse array 2024-04-23 08:39:46 +10:00
bdf8846278 handle arrays 2024-04-23 08:38:16 +10:00
f0d3e739f8 remove invalid method 2024-04-23 08:14:58 +10:00
00afc7a1d3 support collections 2024-04-23 08:12:56 +10:00
71f048fb00 keep files in order! 2024-04-23 07:59:57 +10:00
fd72954165 order by title 2024-04-23 07:54:02 +10:00
da90616aa0 use correct logo 2024-04-23 07:53:56 +10:00
566092a567 use correct logo 2024-04-23 07:51:16 +10:00
ef5e35229c update media entry 2024-04-23 07:48:35 +10:00
005b29ff5a use new thumbnails 2024-04-23 02:54:16 +10:00
2203731ed8 fix trailing / 2024-04-23 02:45:59 +10:00
f59265cc00 update background image url 2024-04-23 02:23:50 +10:00
0eab9ba2ce expand space 2024-04-23 02:20:24 +10:00
e2f18a87b8 only italic on update of file 2024-04-23 02:18:05 +10:00
27941b2017 only show rename info on update of file 2024-04-23 02:17:19 +10:00
b60e368cb9 json support for store 2024-04-23 01:53:06 +10:00
a1d966327f update mail logo 2024-04-23 01:39:45 +10:00
07ab627af4 fix non defined variable in create 2024-04-22 20:44:22 +10:00
b84f78b00b no decimal places 2024-04-22 20:34:01 +10:00
d6a84e2496 change env to config 2024-04-22 20:32:36 +10:00
3ea9cbda9e removal dark mode 2024-04-22 19:59:03 +10:00
363d8cfcdb update configuration 2024-04-22 19:53:10 +10:00
32f7770e75 refactor assets 2024-04-22 18:53:40 +10:00
53df7d2fbe refactor assets 2024-04-22 18:42:19 +10:00
550bdd8249 make timestamps nullable 2024-04-22 18:26:33 +10:00
55462d0437 remove extra seed 2024-04-22 18:26:25 +10:00
5b7da699bd updated to laravel 11 2024-04-22 18:16:33 +10:00
5fbca80a3c disable Intervention\Image\ImageServiceProvider::class 2024-04-04 20:59:59 +10:00
4fa1410790 dependency updates 2024-04-04 20:33:31 +10:00
411fc5f37f dependency updates 2024-04-04 20:22:09 +10:00
f7c20719f7 dependency updates 2024-04-04 20:18:43 +10:00
e5a7aeede8 Merge pull request #431 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/parser-6.19.1 2024-01-26 19:48:06 +10:00
dependabot[bot]
cfbf3a4033 Bump @typescript-eslint/parser from 6.19.0 to 6.19.1
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 6.19.0 to 6.19.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.19.1/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-26 09:47:25 +00:00
89cda7c415 Merge pull request #436 from STEMMechanics/dependabot/composer/doctrine/dbal-3.8.0 2024-01-26 19:47:21 +10:00
e211436675 Merge pull request #435 from STEMMechanics/dependabot/npm_and_yarn/dotenv-16.4.1 2024-01-26 19:47:09 +10:00
d1be96a1df Merge pull request #434 from STEMMechanics/dependabot/composer/laravel/sail-1.27.2 2024-01-26 19:46:59 +10:00
dependabot[bot]
7e87312d99 Bump laravel/sail from 1.27.1 to 1.27.2
Bumps [laravel/sail](https://github.com/laravel/sail) from 1.27.1 to 1.27.2.
- [Release notes](https://github.com/laravel/sail/releases)
- [Changelog](https://github.com/laravel/sail/blob/1.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/sail/compare/v1.27.1...v1.27.2)

---
updated-dependencies:
- dependency-name: laravel/sail
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-26 09:45:36 +00:00
dependabot[bot]
73c277acfb Bump dotenv from 16.3.1 to 16.4.1
Bumps [dotenv](https://github.com/motdotla/dotenv) from 16.3.1 to 16.4.1.
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/motdotla/dotenv/compare/v16.3.1...v16.4.1)

---
updated-dependencies:
- dependency-name: dotenv
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-26 09:45:31 +00:00
0728233206 Merge pull request #430 from STEMMechanics/dependabot/npm_and_yarn/vitejs/plugin-vue-5.0.3 2024-01-26 19:45:07 +10:00
b127ce0514 Merge pull request #429 from STEMMechanics/dependabot/npm_and_yarn/knip-4.2.1 2024-01-26 19:44:57 +10:00
5924222296 Merge pull request #428 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-6.19.1 2024-01-26 19:44:45 +10:00
6d2c601b5d Merge pull request #427 from STEMMechanics/dependabot/composer/laravel/pint-1.13.10 2024-01-26 19:43:32 +10:00
f2fb993596 Merge pull request #426 from STEMMechanics/dependabot/composer/phpunit/phpunit-10.5.9 2024-01-26 19:43:08 +10:00
c40232099f Merge pull request #425 from STEMMechanics/dependabot/composer/intervention/image-3.3.1 2024-01-26 19:42:48 +10:00
dependabot[bot]
17d33a9ad2 Bump doctrine/dbal from 3.7.2 to 3.8.0
Bumps [doctrine/dbal](https://github.com/doctrine/dbal) from 3.7.2 to 3.8.0.
- [Release notes](https://github.com/doctrine/dbal/releases)
- [Commits](https://github.com/doctrine/dbal/compare/3.7.2...3.8.0)

---
updated-dependencies:
- dependency-name: doctrine/dbal
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-26 00:25:53 +00:00
dependabot[bot]
e380bafbb0 Bump @vitejs/plugin-vue from 4.6.2 to 5.0.3
Bumps [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/HEAD/packages/plugin-vue) from 4.6.2 to 5.0.3.
- [Release notes](https://github.com/vitejs/vite-plugin-vue/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-vue/blob/main/packages/plugin-vue/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-vue/commits/plugin-vue@5.0.3/packages/plugin-vue)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-vue"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-23 00:33:50 +00:00
dependabot[bot]
4c63e68625 Bump knip from 4.2.0 to 4.2.1
Bumps [knip](https://github.com/webpro/knip/tree/HEAD/packages/knip) from 4.2.0 to 4.2.1.
- [Release notes](https://github.com/webpro/knip/releases)
- [Commits](https://github.com/webpro/knip/commits/4.2.1/packages/knip)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-23 00:33:39 +00:00
dependabot[bot]
8b5d150fe2 Bump @typescript-eslint/eslint-plugin from 6.19.0 to 6.19.1
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.19.0 to 6.19.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.19.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-23 00:33:30 +00:00
dependabot[bot]
10808f3622 Bump laravel/pint from 1.13.9 to 1.13.10
Bumps [laravel/pint](https://github.com/laravel/pint) from 1.13.9 to 1.13.10.
- [Release notes](https://github.com/laravel/pint/releases)
- [Changelog](https://github.com/laravel/pint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/laravel/pint/compare/v1.13.9...v1.13.10)

---
updated-dependencies:
- dependency-name: laravel/pint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-23 00:27:26 +00:00
dependabot[bot]
37ba8f0f29 Bump phpunit/phpunit from 10.5.8 to 10.5.9
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.8 to 10.5.9.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.9/ChangeLog-10.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.8...10.5.9)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-23 00:27:18 +00:00
dependabot[bot]
51fb0150d9 Bump intervention/image from 3.3.0 to 3.3.1
Bumps [intervention/image](https://github.com/Intervention/image) from 3.3.0 to 3.3.1.
- [Commits](https://github.com/Intervention/image/compare/3.3.0...3.3.1)

---
updated-dependencies:
- dependency-name: intervention/image
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-23 00:27:11 +00:00
James Collins
03dd12cea1 Merge pull request #423 from STEMMechanics/dependabot/npm_and_yarn/vitest-1.2.1
Bump vitest from 0.34.6 to 1.2.1
2024-01-22 12:08:26 +10:00
dependabot[bot]
56ae719a2e Bump vitest from 0.34.6 to 1.2.1
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 0.34.6 to 1.2.1.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v1.2.1/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 02:07:55 +00:00
James Collins
68b7e50b9e Merge pull request #422 from STEMMechanics/dependabot/npm_and_yarn/eslint-plugin-jsdoc-48.0.2
Bump eslint-plugin-jsdoc from 46.10.1 to 48.0.2
2024-01-22 12:07:27 +10:00
James Collins
386e2009c4 Merge pull request #421 from STEMMechanics/dependabot/npm_and_yarn/knip-4.2.0
Bump knip from 2.43.0 to 4.2.0
2024-01-22 12:07:15 +10:00
James Collins
3da55bca81 Merge pull request #420 from STEMMechanics/dependabot/npm_and_yarn/vite-5.0.12
Bump vite from 4.5.1 to 5.0.12
2024-01-22 12:06:58 +10:00
dependabot[bot]
5d8f1457d4 Bump vite from 4.5.1 to 5.0.12
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.1 to 5.0.12.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.0.12/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.12/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 01:42:15 +00:00
James Collins
39d9ebc549 Merge pull request #419 from STEMMechanics/dependabot/composer/intervention/image-3.3.0
Bump intervention/image from 2.7.2 to 3.3.0
2024-01-22 11:41:32 +10:00
James Collins
b2f3664909 Merge pull request #418 from STEMMechanics/dependabot/composer/phpunit/phpunit-10.5.8
Bump phpunit/phpunit from 10.5.7 to 10.5.8
2024-01-22 11:41:15 +10:00
James Collins
06c2f0e3d0 Merge pull request #417 from STEMMechanics/dependabot/npm_and_yarn/vite-4.5.2
Bump vite from 4.5.1 to 4.5.2
2024-01-22 11:40:54 +10:00
dependabot[bot]
2d2392c8ae Bump intervention/image from 2.7.2 to 3.3.0
Bumps [intervention/image](https://github.com/Intervention/image) from 2.7.2 to 3.3.0.
- [Commits](https://github.com/Intervention/image/compare/2.7.2...3.3.0)

---
updated-dependencies:
- dependency-name: intervention/image
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 01:22:46 +00:00
dependabot[bot]
5e7061bc61 Bump vite from 4.5.1 to 4.5.2
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.1 to 4.5.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.5.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.5.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 01:20:29 +00:00
James Collins
8451a2bd4b Merge pull request #415 from STEMMechanics/dependabot/npm_and_yarn/prettier-3.2.4
Bump prettier from 3.0.3 to 3.2.4
2024-01-22 11:11:23 +10:00
James Collins
dd135f10ec Merge pull request #413 from STEMMechanics/dependabot/composer/square/square-34.0.1.20240118
Bump square/square from 32.0.0.20231018 to 34.0.1.20240118
2024-01-22 11:11:00 +10:00
dependabot[bot]
247eb03cea Bump eslint-plugin-jsdoc from 46.10.1 to 48.0.2
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 46.10.1 to 48.0.2.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v46.10.1...v48.0.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 01:10:49 +00:00
dependabot[bot]
19c16cfbf1 Bump square/square from 32.0.0.20231018 to 34.0.1.20240118
Bumps [square/square](https://github.com/square/square-php-sdk) from 32.0.0.20231018 to 34.0.1.20240118.
- [Release notes](https://github.com/square/square-php-sdk/releases)
- [Changelog](https://github.com/square/square-php-sdk/blob/master/CHANGELOG.md)
- [Commits](https://github.com/square/square-php-sdk/compare/32.0.0.20231018...34.0.1.20240118)

---
updated-dependencies:
- dependency-name: square/square
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 01:10:22 +00:00
dependabot[bot]
456687edc5 Bump knip from 2.43.0 to 4.2.0
Bumps [knip](https://github.com/webpro/knip/tree/HEAD/packages/knip) from 2.43.0 to 4.2.0.
- [Release notes](https://github.com/webpro/knip/releases)
- [Commits](https://github.com/webpro/knip/commits/4.2.0/packages/knip)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 01:10:18 +00:00
James Collins
aab63bb627 Merge pull request #397 from STEMMechanics/dependabot/npm_and_yarn/unocss-0.58.3
Bump unocss from 0.57.7 to 0.58.3
2024-01-22 11:06:09 +10:00
dependabot[bot]
efb3cac129 Bump unocss from 0.57.7 to 0.58.3
Bumps [unocss](https://github.com/unocss/unocss) from 0.57.7 to 0.58.3.
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/compare/v0.57.7...v0.58.3)

---
updated-dependencies:
- dependency-name: unocss
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 01:03:28 +00:00
James Collins
36314339fb Merge pull request #361 from STEMMechanics/dependabot/composer/guzzlehttp/guzzle-7.8.1
Bump guzzlehttp/guzzle from 7.8.0 to 7.8.1
2024-01-22 10:49:10 +10:00
dependabot[bot]
c6247e445f Bump phpunit/phpunit from 10.5.7 to 10.5.8
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.5.7 to 10.5.8.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.5.8/ChangeLog-10.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.5.7...10.5.8)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 00:44:40 +00:00
b028856eb5 php 8.2 now required 2024-01-19 10:04:51 +10:00
1925b2ef0c dependency updates 2024-01-19 09:53:52 +10:00
dependabot[bot]
0d1bd4522e Bump prettier from 3.0.3 to 3.2.4
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.3 to 3.2.4.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.3...3.2.4)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-18 00:55:39 +00:00
f2e84b63fa dependency updates 2024-01-15 09:02:21 +10:00
ac6257ed6d vs settings change 2024-01-15 09:02:16 +10:00
2486dec824 added rel="nofollow" to download links 2024-01-15 09:01:36 +10:00
04e6c0d0fc fix bad param 2024-01-06 15:57:46 +10:00
b948c42fe2 check if file_security is missing 2024-01-06 15:57:39 +10:00
5d7be1a482 dependency updates 2024-01-06 15:57:22 +10:00
4e81d06a6e dep updates 2023-12-25 19:23:46 +10:00
dependabot[bot]
0f2400ff2b Bump guzzlehttp/guzzle from 7.8.0 to 7.8.1
Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 7.8.0 to 7.8.1.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/7.8/CHANGELOG.md)
- [Commits](https://github.com/guzzle/guzzle/compare/7.8.0...7.8.1)

---
updated-dependencies:
- dependency-name: guzzlehttp/guzzle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-04 00:54:13 +00:00
7ed2332a3e dependency updates 2023-12-01 10:52:49 +10:00
James Collins
c432b32d08 Merge pull request #319 from STEMMechanics/dependabot/composer/laravel/framework-10.30.1
Bump laravel/framework from 10.30.0 to 10.30.1
2023-11-02 10:39:26 +10:00
James Collins
8cf628153c Merge pull request #318 from STEMMechanics/dependabot/npm_and_yarn/knip-2.38.6
Bump knip from 2.38.4 to 2.38.6
2023-11-02 10:38:24 +10:00
dependabot[bot]
ab0bd9e7d9 Bump laravel/framework from 10.30.0 to 10.30.1
Bumps [laravel/framework](https://github.com/laravel/framework) from 10.30.0 to 10.30.1.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/10.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/framework/compare/v10.30.0...v10.30.1)

---
updated-dependencies:
- dependency-name: laravel/framework
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-02 00:26:04 +00:00
dependabot[bot]
51cd70f2ec Bump knip from 2.38.4 to 2.38.6
Bumps [knip](https://github.com/webpro/knip) from 2.38.4 to 2.38.6.
- [Release notes](https://github.com/webpro/knip/releases)
- [Changelog](https://github.com/webpro/knip/blob/main/docs/release-notes-v2.md)
- [Commits](https://github.com/webpro/knip/compare/2.38.4...2.38.6)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-02 00:15:36 +00:00
235d4e3784 Merge pull request #317 from STEMMechanics/dependabot/composer/laravel/framework-10.30.0 2023-11-01 10:52:42 +10:00
dependabot[bot]
dd0bbad18f Bump laravel/framework from 10.29.0 to 10.30.0
Bumps [laravel/framework](https://github.com/laravel/framework) from 10.29.0 to 10.30.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/10.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/framework/compare/v10.29.0...v10.30.0)

---
updated-dependencies:
- dependency-name: laravel/framework
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-01 00:51:33 +00:00
f32059c3e7 Merge pull request #316 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/parser-6.9.1 2023-10-31 11:24:17 +10:00
dependabot[bot]
92578ef738 Bump @typescript-eslint/parser from 6.9.0 to 6.9.1
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 6.9.0 to 6.9.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.9.1/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-31 01:21:23 +00:00
367205f955 Merge pull request #315 from STEMMechanics/dependabot/npm_and_yarn/eslint-8.52.0 2023-10-31 11:20:58 +10:00
1fdf36669f Merge pull request #314 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-6.9.1 2023-10-31 11:20:43 +10:00
dependabot[bot]
dfa06b148f Bump eslint from 8.51.0 to 8.52.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.51.0 to 8.52.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.51.0...v8.52.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-31 01:08:07 +00:00
dependabot[bot]
139b437118 Bump @typescript-eslint/eslint-plugin from 6.9.0 to 6.9.1
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.9.0 to 6.9.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.9.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-31 01:07:54 +00:00
4dca636359 Merge pull request #312 from STEMMechanics/dependabot/npm_and_yarn/vue-3.3.7 2023-10-30 15:59:16 +10:00
4f1d2a179b Merge pull request #311 from STEMMechanics/dependabot/npm_and_yarn/knip-2.38.4 2023-10-30 15:59:02 +10:00
dependabot[bot]
ede28f375a Bump knip from 2.35.0 to 2.38.4
Bumps [knip](https://github.com/webpro/knip) from 2.35.0 to 2.38.4.
- [Release notes](https://github.com/webpro/knip/releases)
- [Changelog](https://github.com/webpro/knip/blob/main/docs/release-notes-v2.md)
- [Commits](https://github.com/webpro/knip/compare/2.35.0...2.38.4)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 01:38:00 +00:00
dependabot[bot]
06dfb8d7f6 Bump vue from 3.3.4 to 3.3.7
Bumps [vue](https://github.com/vuejs/core) from 3.3.4 to 3.3.7.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.3.4...v3.3.7)

---
updated-dependencies:
- dependency-name: vue
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 01:37:46 +00:00
2d4090922f Merge pull request #313 from STEMMechanics/dependabot/npm_and_yarn/vite-plugin-compression2-0.11.0 2023-10-30 11:37:04 +10:00
3d58a09c21 Merge pull request #310 from STEMMechanics/dependabot/npm_and_yarn/sass-1.69.5 2023-10-30 11:36:40 +10:00
05da5f016c Merge pull request #309 from STEMMechanics/dependabot/npm_and_yarn/eslint-plugin-vue-9.18.1 2023-10-30 11:36:27 +10:00
dependabot[bot]
256eead944 Bump vite-plugin-compression2 from 0.10.6 to 0.11.0
Bumps [vite-plugin-compression2](https://github.com/nonzzz/vite-plugin-compression) from 0.10.6 to 0.11.0.
- [Release notes](https://github.com/nonzzz/vite-plugin-compression/releases)
- [Changelog](https://github.com/nonzzz/vite-plugin-compression/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nonzzz/vite-plugin-compression/compare/v0.10.6...v0.11.0)

---
updated-dependencies:
- dependency-name: vite-plugin-compression2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 00:26:20 +00:00
dependabot[bot]
dcb8ffaa0d Bump sass from 1.69.4 to 1.69.5
Bumps [sass](https://github.com/sass/dart-sass) from 1.69.4 to 1.69.5.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.69.4...1.69.5)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 00:24:57 +00:00
dependabot[bot]
def671dd47 Bump eslint-plugin-vue from 9.17.0 to 9.18.1
Bumps [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) from 9.17.0 to 9.18.1.
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v9.17.0...v9.18.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-vue
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 00:24:30 +00:00
717f360952 Merge pull request #302 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/parser-6.9.0 2023-10-29 11:59:09 +10:00
dependabot[bot]
1c0b91f52c Bump @typescript-eslint/parser from 6.8.0 to 6.9.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 6.8.0 to 6.9.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.9.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-28 07:52:11 +00:00
c733d39d30 Merge pull request #301 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-6.9.0 2023-10-28 17:51:41 +10:00
87bdea3bba Merge pull request #308 from STEMMechanics/dependabot/composer/phpunit/phpunit-10.4.2 2023-10-28 17:51:28 +10:00
efe80694f9 Merge pull request #307 from STEMMechanics/dependabot/composer/laravel/pint-1.13.5 2023-10-28 17:51:19 +10:00
be7e6ee400 Merge pull request #306 from STEMMechanics/dependabot/npm_and_yarn/unocss-0.57.1 2023-10-28 17:51:09 +10:00
319a7b27c5 Merge pull request #304 from STEMMechanics/dependabot/composer/laravel/sail-1.26.0 2023-10-28 17:51:00 +10:00
dbe20ac724 Merge pull request #303 from STEMMechanics/dependabot/composer/laravel/framework-10.29.0 2023-10-28 17:50:51 +10:00
dependabot[bot]
dc6ed3f43a Bump @typescript-eslint/eslint-plugin from 6.8.0 to 6.9.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.8.0 to 6.9.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.9.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-28 07:50:16 +00:00
ecddb5c6d3 Merge pull request #299 from STEMMechanics/dependabot/npm_and_yarn/ls-lint/ls-lint-2.2.2 2023-10-28 17:49:35 +10:00
34e5a37e24 Merge pull request #297 from STEMMechanics/dependabot/composer/square/square-32.0.0.20231018 2023-10-28 17:49:23 +10:00
eaca6bcc72 Merge pull request #283 from STEMMechanics/dependabot/npm_and_yarn/vitejs/plugin-vue-4.4.0 2023-10-28 17:49:04 +10:00
dependabot[bot]
bad588d4b2 Bump phpunit/phpunit from 10.4.1 to 10.4.2
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.4.1 to 10.4.2.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.4.2/ChangeLog-10.4.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.4.1...10.4.2)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-27 01:15:59 +00:00
dependabot[bot]
d5daf20351 Bump laravel/pint from 1.13.3 to 1.13.5
Bumps [laravel/pint](https://github.com/laravel/pint) from 1.13.3 to 1.13.5.
- [Release notes](https://github.com/laravel/pint/releases)
- [Changelog](https://github.com/laravel/pint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/laravel/pint/compare/v1.13.3...v1.13.5)

---
updated-dependencies:
- dependency-name: laravel/pint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-27 01:15:53 +00:00
dependabot[bot]
f512ab96fc Bump unocss from 0.55.7 to 0.57.1
Bumps [unocss](https://github.com/unocss/unocss) from 0.55.7 to 0.57.1.
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/compare/v0.55.7...v0.57.1)

---
updated-dependencies:
- dependency-name: unocss
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-25 01:10:26 +00:00
dependabot[bot]
0cfa9a5483 Bump laravel/sail from 1.25.0 to 1.26.0
Bumps [laravel/sail](https://github.com/laravel/sail) from 1.25.0 to 1.26.0.
- [Release notes](https://github.com/laravel/sail/releases)
- [Changelog](https://github.com/laravel/sail/blob/1.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/sail/compare/v1.25.0...v1.26.0)

---
updated-dependencies:
- dependency-name: laravel/sail
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-25 00:17:49 +00:00
dependabot[bot]
979f934f22 Bump laravel/framework from 10.28.0 to 10.29.0
Bumps [laravel/framework](https://github.com/laravel/framework) from 10.28.0 to 10.29.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/10.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/framework/compare/v10.28.0...v10.29.0)

---
updated-dependencies:
- dependency-name: laravel/framework
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-25 00:17:39 +00:00
dependabot[bot]
1fa5820550 Bump @ls-lint/ls-lint from 2.2.1 to 2.2.2
Bumps [@ls-lint/ls-lint](https://github.com/loeffel-io/ls-lint) from 2.2.1 to 2.2.2.
- [Release notes](https://github.com/loeffel-io/ls-lint/releases)
- [Commits](https://github.com/loeffel-io/ls-lint/compare/v2.2.1...v2.2.2)

---
updated-dependencies:
- dependency-name: "@ls-lint/ls-lint"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 01:09:34 +00:00
8233afa825 codesniffer fixes 2023-10-20 11:10:33 +10:00
ba6f67798d obsolete 2023-10-20 09:47:29 +10:00
daabbaa3e4 ignore codesniffer 2023-10-20 09:22:30 +10:00
caa68b24d6 dependency updates 2023-10-20 09:21:09 +10:00
114db744b4 better error handling 2023-10-19 19:20:17 +10:00
8c910ed5f3 show error 2023-10-19 19:02:37 +10:00
1ef4332df6 cleanup 2023-10-19 18:55:57 +10:00
6e98269a0b dependency updates 2023-10-19 18:55:57 +10:00
dependabot[bot]
c918b91438 Bump square/square from 30.0.0.20230816 to 32.0.0.20231018
Bumps [square/square](https://github.com/square/square-php-sdk) from 30.0.0.20230816 to 32.0.0.20231018.
- [Release notes](https://github.com/square/square-php-sdk/releases)
- [Changelog](https://github.com/square/square-php-sdk/blob/master/CHANGELOG.md)
- [Commits](https://github.com/square/square-php-sdk/compare/30.0.0.20230816...32.0.0.20231018)

---
updated-dependencies:
- dependency-name: square/square
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-18 00:19:35 +00:00
2a1e634b34 added YT Link 2023-10-04 08:20:19 +10:00
dependabot[bot]
d45165d759 Bump @vitejs/plugin-vue from 4.3.4 to 4.4.0
Bumps [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/HEAD/packages/plugin-vue) from 4.3.4 to 4.4.0.
- [Release notes](https://github.com/vitejs/vite-plugin-vue/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-vue/blob/main/packages/plugin-vue/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-vue/commits/plugin-vue@4.4.0/packages/plugin-vue)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-vue"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-03 00:51:18 +00:00
a0a885e004 fix media dialog title 2023-09-29 17:05:28 +10:00
52f7070311 bad comma 2023-09-29 17:03:11 +10:00
e0650da5e9 fix new getURLPath 2023-09-29 16:57:55 +10:00
bf5cf3bce4 fix public validation 2023-09-29 16:45:42 +10:00
07d1dc4955 home button 2023-09-29 16:23:26 +10:00
11db41b900 accept media or string 2023-09-29 16:02:57 +10:00
3bca959d49 set field to user friendly url 2023-09-29 16:00:56 +10:00
3fee673314 remove console.log 2023-09-29 15:59:23 +10:00
3121d12f3a sort media list in reverse 2023-09-29 15:55:35 +10:00
b8731c3f37 clear unneeded initalize 2023-09-29 13:20:26 +10:00
b445a42896 reload 2023-09-29 13:19:06 +10:00
dbab224a9d fix pageloading 2023-09-29 13:17:18 +10:00
03f9659243 reload 2023-09-29 13:15:45 +10:00
0fb56133ff reload 2023-09-29 13:12:44 +10:00
afa7ca629c reload 2023-09-29 13:10:30 +10:00
9a9c382d7f fix reload 2023-09-29 13:08:39 +10:00
518b8d67bc reload page 2023-09-29 13:04:54 +10:00
ff0f8194e0 remove debug 2023-09-29 13:01:44 +10:00
f84f982c29 add retry button 2023-09-29 13:00:30 +10:00
420d81866c back button detection 2023-09-29 12:53:24 +10:00
1cd78ce93a back button fix 2023-09-29 12:47:47 +10:00
7cae8af89a catch back button 2023-09-29 12:45:33 +10:00
5088cea413 reset mounted 2023-09-29 12:36:39 +10:00
d670d52083 catch bad selectors 2023-09-29 12:33:23 +10:00
004aa116fb allow security_data in the correct contexts 2023-09-29 12:22:48 +10:00
32a08e1e10 better handling of storage exists 2023-09-29 12:16:43 +10:00
30d39c5326 cleanup 2023-09-29 12:16:25 +10:00
8affea3360 ignore empty mime_types 2023-09-29 12:00:01 +10:00
3b6b4dc388 support null $medium 2023-09-29 11:58:11 +10:00
9a9e75d96d remove empty mime_type ignore 2023-09-29 11:57:54 +10:00
ad6e4f0a23 fix case where new media has no security type 2023-09-29 11:52:17 +10:00
f66bc6d8aa updated lock icons and small views 2023-09-29 11:47:28 +10:00
845bb4763b fix thumb always overriding 2023-09-29 11:31:26 +10:00
e476b203c7 add download query 2023-09-29 11:22:29 +10:00
dd163630cb dependency updates 2023-09-29 11:14:43 +10:00
5d8a5ede7d add security icons 2023-09-29 11:10:08 +10:00
35ccb03c2b cleanup of styling 2023-09-29 11:10:01 +10:00
f6df068787 fix bad local storage url 2023-09-29 11:01:37 +10:00
b60a3601cb urlencode variables 2023-09-29 11:01:28 +10:00
8676844930 fix security policy notification styling 2023-09-29 07:40:14 +10:00
7e80e19eec fix change password dialog 2023-09-29 07:34:29 +10:00
e21c7ce1d0 add defaults for missing filter data 2023-09-29 07:28:21 +10:00
42f2baca5e media security_type updates 2023-09-29 07:19:33 +10:00
d9c0c8f1d8 fix sqlite error with renameColumn 2023-09-28 20:23:38 +10:00
b98e184d32 dependency updates 2023-09-28 10:09:48 +10:00
f764466199 ensure duplicate media items are not readded 2023-09-28 10:06:53 +10:00
6adfd9f3fa complete secure files 2023-09-28 09:59:40 +10:00
dbf9db1c92 create generic variants and thumbnail for secure documents 2023-09-27 17:08:45 +10:00
6cb7a8cb43 update secure media backend 2023-09-25 19:36:44 +10:00
2913960bcb update dependencies 2023-09-25 15:33:37 +10:00
8d0382a279 added 2023-09-25 15:33:29 +10:00
aa5ef50ed0 push params 2023-09-14 21:56:42 +10:00
d87b869633 added url support 2023-09-14 21:53:00 +10:00
99782bdf67 added helper function 2023-09-14 21:52:52 +10:00
6fa459e88e fix margin 2023-09-14 21:34:43 +10:00
954f2beea7 dependency updates 2023-09-14 21:32:55 +10:00
f216413a23 pagination on bottom 2023-09-14 21:30:35 +10:00
63572a2740 fix query comparison 2023-09-14 08:35:01 +10:00
aeb7595166 no default date if filter params exist 2023-09-14 08:32:03 +10:00
f507d198a7 fix query operators 2023-09-14 08:24:34 +10:00
9b5166c570 remove unused componets 2023-09-13 20:10:46 +10:00
2271aae557 use rawurlencode 2023-09-13 20:08:53 +10:00
8ed07e539f use new urlencode function 2023-09-13 20:04:43 +10:00
b029574fa5 add URLEncode function 2023-09-13 20:04:37 +10:00
e9d903ce79 autoload urlencode 2023-09-13 20:04:30 +10:00
1c9100e5de page not found error 2023-09-13 19:55:47 +10:00
1a59ac955d encode url 2023-09-13 19:23:31 +10:00
4d8e58f920 added scratch icon 2023-09-13 19:13:22 +10:00
James Collins
55ce8e0d9e Merge pull request #246 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-6.7.0
Bump @typescript-eslint/eslint-plugin from 6.6.0 to 6.7.0
2023-09-12 11:09:15 +10:00
dependabot[bot]
0d1a3f8dbf Bump @typescript-eslint/eslint-plugin from 6.6.0 to 6.7.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.6.0 to 6.7.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.7.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-12 01:08:20 +00:00
James Collins
9687a3c7a8 Merge pull request #247 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/parser-6.7.0
Bump @typescript-eslint/parser from 6.6.0 to 6.7.0
2023-09-12 11:07:38 +10:00
dependabot[bot]
471534021e Bump @typescript-eslint/parser from 6.6.0 to 6.7.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 6.6.0 to 6.7.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.7.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-12 00:53:48 +00:00
8c75abf16a add index to controller 2023-09-11 21:04:12 +10:00
472abaf30b use new routes 2023-09-11 21:04:02 +10:00
35426e1189 use new routes 2023-09-11 21:03:52 +10:00
6507d57424 change job to jobs and add index 2023-09-11 21:03:45 +10:00
4252878019 support the | (or) operator 2023-09-11 21:03:12 +10:00
James Collins
8451cc1547 Merge pull request #245 from STEMMechanics/dependabot/npm_and_yarn/eslint-plugin-jsdoc-46.6.0
Bump eslint-plugin-jsdoc from 46.5.1 to 46.6.0
2023-09-11 11:24:52 +10:00
dependabot[bot]
70ecefb007 Bump eslint-plugin-jsdoc from 46.5.1 to 46.6.0
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 46.5.1 to 46.6.0.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v46.5.1...v46.6.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 01:15:29 +00:00
4e7be1a18c remove stale jobs 2023-09-10 21:16:00 +10:00
d1cc468dfa added clean temp files schedule 2023-09-10 21:06:00 +10:00
484512f2c7 fix spacing 2023-09-10 20:43:28 +10:00
83b4df3462 fix icon text 2023-09-10 20:34:39 +10:00
8ea46b4ea8 update message 2023-09-10 20:34:34 +10:00
a68faa11b0 increase max chunks count 2023-09-10 20:26:51 +10:00
541cd93c99 cleanup 2023-09-10 20:26:00 +10:00
c5a7982945 update file icons 2023-09-10 20:25:54 +10:00
5cee36453e Transferring to CDN, not Uploading 2023-09-10 20:13:12 +10:00
47ea87b614 improve upload progress indicator 2023-09-10 20:11:22 +10:00
4ad0df2c39 dependency updates 2023-09-10 20:11:11 +10:00
f2ff8398eb dont rotate non images/video 2023-09-10 20:06:48 +10:00
3f915d6964 fixes to uploading in chunks 2023-09-10 19:59:26 +10:00
3e6a9da0d1 media job now uses progress_max 2023-09-10 18:33:54 +10:00
James Collins
ca5f4ffd84 Merge pull request #244 from STEMMechanics/dependabot/npm_and_yarn/knip-2.22.0
Bump knip from 2.21.2 to 2.22.0
2023-09-08 11:19:41 +10:00
James Collins
b66f9f79d2 Merge pull request #243 from STEMMechanics/dependabot/composer/league/flysystem-aws-s3-v3-3.16.0
Bump league/flysystem-aws-s3-v3 from 3.15.0 to 3.16.0
2023-09-08 11:17:58 +10:00
dependabot[bot]
dc0bfe6d7a Bump knip from 2.21.2 to 2.22.0
Bumps [knip](https://github.com/webpro/knip) from 2.21.2 to 2.22.0.
- [Release notes](https://github.com/webpro/knip/releases)
- [Changelog](https://github.com/webpro/knip/blob/main/docs/release-notes-v2.md)
- [Commits](https://github.com/webpro/knip/compare/2.21.2...2.22.0)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-08 01:01:38 +00:00
dependabot[bot]
5de463bd02 Bump league/flysystem-aws-s3-v3 from 3.15.0 to 3.16.0
Bumps [league/flysystem-aws-s3-v3](https://github.com/thephpleague/flysystem-aws-s3-v3) from 3.15.0 to 3.16.0.
- [Commits](https://github.com/thephpleague/flysystem-aws-s3-v3/compare/3.15.0...3.16.0)

---
updated-dependencies:
- dependency-name: league/flysystem-aws-s3-v3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-08 00:59:15 +00:00
James Collins
f3d858d785 Merge pull request #242 from STEMMechanics/dependabot/composer/laravel/pint-1.13.1
Bump laravel/pint from 1.13.0 to 1.13.1
2023-09-07 17:52:51 +10:00
dependabot[bot]
0e537a6b46 Bump laravel/pint from 1.13.0 to 1.13.1
Bumps [laravel/pint](https://github.com/laravel/pint) from 1.13.0 to 1.13.1.
- [Release notes](https://github.com/laravel/pint/releases)
- [Changelog](https://github.com/laravel/pint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/laravel/pint/compare/v1.13.0...v1.13.1)

---
updated-dependencies:
- dependency-name: laravel/pint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-07 00:21:35 +00:00
8d78b15751 block access to the .git directory 2023-09-06 12:25:03 +10:00
James Collins
e1fc2fa271 Merge pull request #239 from STEMMechanics/dependabot/npm_and_yarn/knip-2.21.2
Bump knip from 2.21.1 to 2.21.2
2023-09-06 11:08:00 +10:00
James Collins
27466ad3a6 Merge pull request #241 from STEMMechanics/dependabot/npm_and_yarn/tiptap/starter-kit-2.1.8
Bump @tiptap/starter-kit from 2.1.7 to 2.1.8
2023-09-06 11:06:48 +10:00
dependabot[bot]
f0d63b4120 Bump @tiptap/starter-kit from 2.1.7 to 2.1.8
Bumps [@tiptap/starter-kit](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/starter-kit) from 2.1.7 to 2.1.8.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/v2.1.8/packages/starter-kit/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v2.1.8/packages/starter-kit)

---
updated-dependencies:
- dependency-name: "@tiptap/starter-kit"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 01:00:47 +00:00
dependabot[bot]
163dd98b7b Bump knip from 2.21.1 to 2.21.2
Bumps [knip](https://github.com/webpro/knip) from 2.21.1 to 2.21.2.
- [Release notes](https://github.com/webpro/knip/releases)
- [Changelog](https://github.com/webpro/knip/blob/main/docs/release-notes-v2.md)
- [Commits](https://github.com/webpro/knip/compare/2.21.1...2.21.2)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 00:58:27 +00:00
8610a1678d dependency updates 2023-09-06 10:57:21 +10:00
James Collins
d20c7832da Merge pull request #234 from STEMMechanics/dependabot/composer/laravel/sail-1.24.1
Bump laravel/sail from 1.24.0 to 1.24.1
2023-09-06 10:45:38 +10:00
James Collins
fcba4015ed Merge pull request #233 from STEMMechanics/dependabot/composer/laravel/pint-1.13.0
Bump laravel/pint from 1.12.0 to 1.13.0
2023-09-06 10:45:25 +10:00
James Collins
bb34a3c33a Merge pull request #232 from STEMMechanics/dependabot/composer/phpunit/phpunit-10.3.3
Bump phpunit/phpunit from 10.3.2 to 10.3.3
2023-09-06 10:45:13 +10:00
James Collins
dbded3ba14 Merge pull request #231 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/parser-6.6.0
Bump @typescript-eslint/parser from 6.5.0 to 6.6.0
2023-09-06 10:44:59 +10:00
dependabot[bot]
3a654e0480 Bump laravel/sail from 1.24.0 to 1.24.1
Bumps [laravel/sail](https://github.com/laravel/sail) from 1.24.0 to 1.24.1.
- [Release notes](https://github.com/laravel/sail/releases)
- [Changelog](https://github.com/laravel/sail/blob/1.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/sail/compare/v1.24.0...v1.24.1)

---
updated-dependencies:
- dependency-name: laravel/sail
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 00:44:55 +00:00
James Collins
4b358fba4f Merge pull request #230 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-superscript-2.1.8
Bump @tiptap/extension-superscript from 2.1.7 to 2.1.8
2023-09-06 10:44:44 +10:00
dependabot[bot]
5aaeab686d Bump @typescript-eslint/parser from 6.5.0 to 6.6.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 6.5.0 to 6.6.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.6.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 00:43:06 +00:00
James Collins
5ff0a4e86f Merge pull request #229 from STEMMechanics/dependabot/npm_and_yarn/tiptap/extension-highlight-2.1.8
Bump @tiptap/extension-highlight from 2.1.7 to 2.1.8
2023-09-06 10:42:52 +10:00
James Collins
0c866ed009 Merge pull request #228 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-6.6.0
Bump @typescript-eslint/eslint-plugin from 6.5.0 to 6.6.0
2023-09-06 10:42:24 +10:00
James Collins
f09bf02c10 Merge pull request #227 from STEMMechanics/dependabot/composer/laravel/sanctum-3.3.0
Bump laravel/sanctum from 3.2.6 to 3.3.0
2023-09-06 10:42:07 +10:00
James Collins
ee2c30f938 Merge pull request #220 from STEMMechanics/dependabot/npm_and_yarn/prettier-3.0.3
Bump prettier from 3.0.2 to 3.0.3
2023-09-06 10:41:41 +10:00
dependabot[bot]
82f28bc712 Bump laravel/pint from 1.12.0 to 1.13.0
Bumps [laravel/pint](https://github.com/laravel/pint) from 1.12.0 to 1.13.0.
- [Release notes](https://github.com/laravel/pint/releases)
- [Changelog](https://github.com/laravel/pint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/laravel/pint/compare/v1.12.0...v1.13.0)

---
updated-dependencies:
- dependency-name: laravel/pint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 00:28:51 +00:00
dependabot[bot]
8020baf9d1 Bump phpunit/phpunit from 10.3.2 to 10.3.3
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.3.2 to 10.3.3.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.3.3/ChangeLog-10.3.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.3.2...10.3.3)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 00:28:46 +00:00
dependabot[bot]
b1cac44432 Bump @tiptap/extension-superscript from 2.1.7 to 2.1.8
Bumps [@tiptap/extension-superscript](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-superscript) from 2.1.7 to 2.1.8.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/v2.1.8/packages/extension-superscript/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v2.1.8/packages/extension-superscript)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-superscript"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-05 00:37:11 +00:00
dependabot[bot]
ab46b6118d Bump @tiptap/extension-highlight from 2.1.7 to 2.1.8
Bumps [@tiptap/extension-highlight](https://github.com/ueberdosis/tiptap/tree/HEAD/packages/extension-highlight) from 2.1.7 to 2.1.8.
- [Release notes](https://github.com/ueberdosis/tiptap/releases)
- [Changelog](https://github.com/ueberdosis/tiptap/blob/v2.1.8/packages/extension-highlight/CHANGELOG.md)
- [Commits](https://github.com/ueberdosis/tiptap/commits/v2.1.8/packages/extension-highlight)

---
updated-dependencies:
- dependency-name: "@tiptap/extension-highlight"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-05 00:36:45 +00:00
dependabot[bot]
52a1bfe804 Bump @typescript-eslint/eslint-plugin from 6.5.0 to 6.6.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.5.0 to 6.6.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.6.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-05 00:36:20 +00:00
dependabot[bot]
c7c5b5298c Bump laravel/sanctum from 3.2.6 to 3.3.0
Bumps [laravel/sanctum](https://github.com/laravel/sanctum) from 3.2.6 to 3.3.0.
- [Release notes](https://github.com/laravel/sanctum/releases)
- [Changelog](https://github.com/laravel/sanctum/blob/3.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/sanctum/compare/v3.2.6...v3.3.0)

---
updated-dependencies:
- dependency-name: laravel/sanctum
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-05 00:17:28 +00:00
James Collins
4c07917542 Merge pull request #225 from STEMMechanics/dependabot/npm_and_yarn/unocss-0.55.6
Bump unocss from 0.55.4 to 0.55.6
2023-09-04 11:11:03 +10:00
dependabot[bot]
fe06a2dd55 Bump unocss from 0.55.4 to 0.55.6
Bumps [unocss](https://github.com/unocss/unocss) from 0.55.4 to 0.55.6.
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/compare/v0.55.4...v0.55.6)

---
updated-dependencies:
- dependency-name: unocss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-04 01:03:15 +00:00
143f002ead allow blank 2023-09-02 21:09:36 +10:00
83c0ae5841 bug fixes 2023-09-02 21:01:19 +10:00
0c05386804 bug fixes 2023-09-02 20:44:56 +10:00
9a70d4de0d bugfix 2023-09-02 19:59:26 +10:00
8950b5f50b titlecase to fix CDN 2023-09-02 19:56:06 +10:00
59e077fd6a bug fixes 2023-09-02 19:55:55 +10:00
c9fc5b2157 bugfix 2023-09-02 19:40:38 +10:00
e128bcfaf9 bugfix 2023-09-02 19:36:55 +10:00
7cf6b0bba6 bug fixes 2023-09-02 19:30:45 +10:00
c36d4783e7 dependency updates 2023-09-02 19:02:19 +10:00
29acd76051 fixes 2023-09-02 18:58:13 +10:00
eacf33b642 updates 2023-09-01 16:51:46 +10:00
46666db231 prevent truncation of urls 2023-09-01 13:00:07 +10:00
3dfa753f33 fix path truncates 2023-09-01 12:58:20 +10:00
41ae64a8c9 new media job support 2023-09-01 12:22:25 +10:00
fcf5400f71 added 2023-09-01 08:43:57 +10:00
2257736ad9 bug fixes 2023-08-31 23:21:20 +10:00
147b55ae78 updates 2023-08-30 15:20:24 +10:00
5b6c951dc0 use new mediaJob 2023-08-30 14:22:27 +10:00
0840d65011 added respondServerError 2023-08-30 12:00:44 +10:00
6394234960 more rules 2023-08-30 11:08:24 +10:00
e1dde655cb rename class 2023-08-30 10:55:36 +10:00
e01d59cbd8 use mediajob 2023-08-30 10:54:44 +10:00
22d1e195ed change id to job_id 2023-08-30 10:54:44 +10:00
c776e7b102 media job model 2023-08-30 10:52:26 +10:00
dependabot[bot]
3cd95a5a6b Bump prettier from 3.0.2 to 3.0.3
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-30 00:35:52 +00:00
aba7845a4b changes 2023-08-30 08:19:23 +10:00
f23c4c42b5 added location_url rule 2023-08-30 06:54:27 +10:00
05149dc723 update full description 2023-08-29 18:14:48 +10:00
a615c9d1d8 added full status 2023-08-29 18:11:29 +10:00
eed9ac8ff4 bugfix 2023-08-29 15:51:55 +10:00
258e7fe307 bugfix 2023-08-29 15:47:58 +10:00
a49a86a597 debug 2023-08-29 15:43:21 +10:00
b01c5d57c7 debug 2023-08-29 15:38:37 +10:00
4b0c113941 bug fix 2023-08-29 15:32:18 +10:00
277a0ae2e3 debug 2023-08-29 15:29:43 +10:00
a61aafdc6a debug 2023-08-29 15:25:31 +10:00
3a2899f913 debug 2023-08-29 15:22:27 +10:00
05b172cd47 bug fix 2023-08-29 15:07:40 +10:00
351259909c fix rule validation 2023-08-29 15:02:33 +10:00
0af44ffe02 bug fix 2023-08-29 14:56:02 +10:00
06799a90b0 bug fixes 2023-08-29 14:54:40 +10:00
c7fc9a1480 support chunk uploading 2023-08-29 14:51:30 +10:00
d5b8a89776 support file upload chunking 2023-08-29 14:34:59 +10:00
eada83aaf8 added chunking rules 2023-08-29 14:34:51 +10:00
9a63a9de80 additional helpers 2023-08-29 14:34:42 +10:00
b4859fd97f cleanup 2023-08-29 11:56:05 +10:00
794a18cfa0 updates to media handling on frontend 2023-08-29 11:31:57 +10:00
581b732b05 layout fixes 2023-08-29 08:44:56 +10:00
0119875d22 cache persistant 2023-08-29 08:03:06 +10:00
0f34c7dfb9 use new caching 2023-08-28 23:16:12 +10:00
04be7fdb3c implement callback/caching 2023-08-28 23:16:04 +10:00
123d45d172 removed debug log 2023-08-28 23:02:04 +10:00
James Collins
864ae189af Merge pull request #213 from STEMMechanics/dependabot/npm_and_yarn/vitest-0.34.3
Bump vitest from 0.33.0 to 0.34.3
2023-08-28 22:19:43 +10:00
dependabot[bot]
13b2620d2e Bump vitest from 0.33.0 to 0.34.3
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 0.33.0 to 0.34.3.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v0.34.3/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-28 12:19:18 +00:00
James Collins
75c4ad73ed Merge pull request #198 from STEMMechanics/dependabot/npm_and_yarn/prettier-3.0.2
Bump prettier from 3.0.0 to 3.0.2
2023-08-28 22:18:45 +10:00
James Collins
2c2f5621df Merge pull request #212 from STEMMechanics/dependabot/npm_and_yarn/unocss-0.55.3
Bump unocss from 0.54.3 to 0.55.3
2023-08-28 22:18:31 +10:00
James Collins
855accab4f Merge pull request #199 from STEMMechanics/dependabot/composer/square/square-30.0.0.20230816
Bump square/square from 29.0.0.20230720 to 30.0.0.20230816
2023-08-28 22:17:38 +10:00
dependabot[bot]
afaa702a02 Bump prettier from 3.0.0 to 3.0.2
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.0 to 3.0.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.0...3.0.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-28 12:17:32 +00:00
James Collins
15637d398e Merge pull request #197 from STEMMechanics/dependabot/npm_and_yarn/laravel-vite-plugin-0.8.0
Bump laravel-vite-plugin from 0.7.8 to 0.8.0
2023-08-28 22:17:07 +10:00
James Collins
f346625bb1 Merge pull request #188 from STEMMechanics/dependabot/npm_and_yarn/eslint-config-prettier-9.0.0
Bump eslint-config-prettier from 8.9.0 to 9.0.0
2023-08-28 22:16:36 +10:00
9764fef01c dependency updates 2023-08-28 22:13:56 +10:00
338d6c6f9d bug fix 2023-08-28 15:40:12 +10:00
9da6f39e6e bug fix 2023-08-28 15:37:45 +10:00
5759794f71 dont process video if not changed 2023-08-28 15:31:31 +10:00
ee9d96a5bf fix increment 2023-08-28 15:31:20 +10:00
9197a86670 fix progress bar 2023-08-28 15:21:10 +10:00
64e45b1892 fixes 2023-08-28 15:11:18 +10:00
6890a0939d fix rotate error 2023-08-28 14:29:47 +10:00
61c78534d8 loading status and fixes 2023-08-28 14:21:09 +10:00
5a611f96a8 added x-small 2023-08-28 14:21:00 +10:00
3e7f34d5c4 fix video uploads 2023-08-28 14:00:07 +10:00
dependabot[bot]
78d16bec5f Bump unocss from 0.54.3 to 0.55.3
Bumps [unocss](https://github.com/unocss/unocss) from 0.54.3 to 0.55.3.
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/compare/v0.54.3...v0.55.3)

---
updated-dependencies:
- dependency-name: unocss
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-28 01:13:24 +00:00
33f658e088 provide progress 2023-08-28 07:39:41 +10:00
0b46c34abe Probe video format 2023-08-27 07:08:31 +10:00
f1ad20cb0b Change hiding workshops from 14 to 8 days old 2023-08-27 06:50:30 +10:00
511da54909 dont force refresh alll files 2023-08-25 20:08:09 +10:00
104407646c fix missing filter 2023-08-25 19:48:36 +10:00
622229cfc9 fixes 2023-08-25 11:30:57 +10:00
f50e6ad209 dependency updates 2023-08-24 22:17:44 +10:00
d7529cef80 updated to media management 2023-08-24 22:14:43 +10:00
dependabot[bot]
f7432158e1 Bump square/square from 29.0.0.20230720 to 30.0.0.20230816
Bumps [square/square](https://github.com/square/square-php-sdk) from 29.0.0.20230720 to 30.0.0.20230816.
- [Release notes](https://github.com/square/square-php-sdk/releases)
- [Changelog](https://github.com/square/square-php-sdk/blob/master/CHANGELOG.md)
- [Commits](https://github.com/square/square-php-sdk/compare/29.0.0.20230720...30.0.0.20230816)

---
updated-dependencies:
- dependency-name: square/square
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-16 00:34:01 +00:00
dependabot[bot]
2df6597771 Bump laravel-vite-plugin from 0.7.8 to 0.8.0
Bumps [laravel-vite-plugin](https://github.com/laravel/vite-plugin) from 0.7.8 to 0.8.0.
- [Release notes](https://github.com/laravel/vite-plugin/releases)
- [Changelog](https://github.com/laravel/vite-plugin/blob/main/CHANGELOG.md)
- [Commits](https://github.com/laravel/vite-plugin/compare/v0.7.8...v0.8.0)

---
updated-dependencies:
- dependency-name: laravel-vite-plugin
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-14 00:44:20 +00:00
60a15c2227 cleanup slug formatting 2023-08-14 10:06:08 +10:00
a369db9ca1 move css out of app.blade.php 2023-08-14 10:02:01 +10:00
dependabot[bot]
ac35d61ae2 Bump eslint-config-prettier from 8.9.0 to 9.0.0
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 8.9.0 to 9.0.0.
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v8.9.0...v9.0.0)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-13 10:22:44 +00:00
489668a2ff dependency updates 2023-08-13 20:21:52 +10:00
c9087d5df4 cleanup 2023-08-13 19:39:56 +10:00
ac06b3700c cleanup 2023-08-13 19:37:47 +10:00
31578f5ed3 cleanup 2023-08-13 18:58:52 +10:00
9b178ade4b use generateVariants in model 2023-08-13 07:58:19 +10:00
92522b5494 added generateVariants 2023-08-13 07:57:20 +10:00
ccebb4eb73 dont distort thumbnail 2023-08-13 07:39:36 +10:00
16873e7477 move generateThumbnail to model 2023-08-13 07:36:34 +10:00
79318e2f28 cleanup 2023-08-13 07:09:55 +10:00
f44a4f5d9d resize pagination 2023-08-13 07:05:29 +10:00
b28925079b add margin to pagination bottom 2023-08-13 07:05:22 +10:00
cbf6803812 Merge pull request #174 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/parser-6.2.1 2023-08-01 12:27:01 +10:00
dependabot[bot]
a0e804aa62 Bump @typescript-eslint/parser from 6.2.0 to 6.2.1
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.2.1/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 02:26:18 +00:00
d1b87bd64b Merge pull request #175 from STEMMechanics/dependabot/npm_and_yarn/knip-2.17.2 2023-08-01 12:25:57 +10:00
5b783035a3 Merge pull request #173 from STEMMechanics/dependabot/npm_and_yarn/unocss-0.54.1 2023-08-01 12:25:38 +10:00
a06363da75 Merge pull request #172 from STEMMechanics/dependabot/npm_and_yarn/sass-1.64.2 2023-08-01 12:25:11 +10:00
a68c691f75 Merge pull request #171 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-6.2.1 2023-08-01 12:24:53 +10:00
dependabot[bot]
8a61d258fb Bump knip from 2.17.1 to 2.17.2
Bumps [knip](https://github.com/webpro/knip) from 2.17.1 to 2.17.2.
- [Release notes](https://github.com/webpro/knip/releases)
- [Changelog](https://github.com/webpro/knip/blob/main/docs/release-notes-v2.md)
- [Commits](https://github.com/webpro/knip/compare/2.17.1...2.17.2)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 00:27:18 +00:00
dependabot[bot]
fd3f220752 Bump unocss from 0.54.0 to 0.54.1
Bumps [unocss](https://github.com/unocss/unocss) from 0.54.0 to 0.54.1.
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/compare/v0.54.0...v0.54.1)

---
updated-dependencies:
- dependency-name: unocss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 00:25:37 +00:00
dependabot[bot]
0a0b2927ae Bump sass from 1.64.1 to 1.64.2
Bumps [sass](https://github.com/sass/dart-sass) from 1.64.1 to 1.64.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.64.1...1.64.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 00:25:03 +00:00
dependabot[bot]
4c19773818 Bump @typescript-eslint/eslint-plugin from 6.2.0 to 6.2.1
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.2.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 00:24:46 +00:00
James Collins
071af03577 Merge pull request #170 from STEMMechanics/dependabot/npm_and_yarn/eslint-plugin-vue-9.16.1
Bump eslint-plugin-vue from 9.16.0 to 9.16.1
2023-07-31 11:06:23 +10:00
James Collins
58da0b54b3 Merge pull request #169 from STEMMechanics/dependabot/npm_and_yarn/unocss-0.54.0
Bump unocss from 0.53.6 to 0.54.0
2023-07-31 11:06:10 +10:00
dependabot[bot]
528ea4bcfb Bump eslint-plugin-vue from 9.16.0 to 9.16.1
Bumps [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) from 9.16.0 to 9.16.1.
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v9.16.0...v9.16.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-vue
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-31 01:05:16 +00:00
dependabot[bot]
ca124d34cd Bump unocss from 0.53.6 to 0.54.0
Bumps [unocss](https://github.com/unocss/unocss) from 0.53.6 to 0.54.0.
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/compare/v0.53.6...v0.54.0)

---
updated-dependencies:
- dependency-name: unocss
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-31 01:04:51 +00:00
70b53ce21a clean up attributes 2023-07-31 10:05:13 +10:00
6dc226ab0b do not send email on unit testing 2023-07-31 10:05:04 +10:00
d6524942f7 fix permissions vs permissions() 2023-07-31 09:33:23 +10:00
3ca5e81e34 dependency updates 2023-07-30 07:20:19 +10:00
561b5ad1b9 install clockwork for dev 2023-07-30 07:15:01 +10:00
229bb9a5e0 fix arrays 2023-07-30 07:15:01 +10:00
280d3e9043 Update HasAttachments.php 2023-07-30 07:03:16 +10:00
a2384f4b35 caching 2023-07-29 23:04:14 +10:00
d65bf5bcd5 mobile fix 2023-07-28 15:37:04 +10:00
e763a9140c fix search bar on mobile 2023-07-28 14:59:22 +10:00
3a06a375ef fix on mobiles 2023-07-28 14:56:20 +10:00
bdf3f38190 improve table on mobile 2023-07-28 14:06:34 +10:00
5b2f6e44b1 fix label padding 2023-07-28 14:06:27 +10:00
250401fd62 show image loader/errors 2023-07-28 13:46:40 +10:00
c1fb03add1 Merge pull request #168 from STEMMechanics/dependabot/npm_and_yarn/eslint-plugin-jsdoc-46.4.5 2023-07-28 10:25:08 +10:00
dependabot[bot]
56bf7efcef Bump eslint-plugin-jsdoc from 46.4.4 to 46.4.5
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 46.4.4 to 46.4.5.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v46.4.4...v46.4.5)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-28 00:24:19 +00:00
cc0508683e Merge pull request #167 from STEMMechanics/dependabot/npm_and_yarn/eslint-config-prettier-8.9.0 2023-07-28 10:23:36 +10:00
dependabot[bot]
b232b65860 Bump eslint-config-prettier from 8.8.0 to 8.9.0
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 8.8.0 to 8.9.0.
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v8.8.0...v8.9.0)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-28 00:19:25 +00:00
406d1d31c0 fix typedefs 2023-07-28 09:42:03 +10:00
f8fe5c92aa cleanup 2023-07-28 09:29:05 +10:00
69623bd248 add variant support for thumbnails 2023-07-28 09:28:54 +10:00
6d4995074b attachments do not have users 2023-07-28 08:40:39 +10:00
ac94068864 cleanuip 2023-07-28 08:38:41 +10:00
31ed355d64 cleanup 2023-07-28 08:17:33 +10:00
8a54fb272a remove old code 2023-07-27 22:23:05 +10:00
6ecf807081 update method name 2023-07-27 22:22:46 +10:00
728472b897 expose 2023-07-27 22:21:01 +10:00
30a8c8a03a wait until mounted 2023-07-27 22:13:47 +10:00
00e7490037 test 2023-07-27 22:12:04 +10:00
1d152d730a fix form progress 2023-07-27 22:04:17 +10:00
a010d91da2 show error 2023-07-27 21:59:17 +10:00
3717248764 fixed flatten 2023-07-27 21:55:35 +10:00
27753e903b added exception handling 2023-07-27 20:58:38 +10:00
b621f71b54 remove mail logging 2023-07-27 20:43:16 +10:00
d4b3300b88 update config 2023-07-27 19:48:04 +10:00
242fb9dda0 added email logging 2023-07-27 19:47:09 +10:00
4f505cd155 fix BelongsTo association 2023-07-27 19:44:09 +10:00
dca70a0f53 fix bad mimetype requests 2023-07-27 19:37:45 +10:00
b9a8c826ec pass in accepts to show relevant files 2023-07-27 16:06:13 +10:00
363deb3ca7 fix showing error on empty 2023-07-27 15:50:55 +10:00
f77b5f7556 fix accepts 2023-07-27 15:50:46 +10:00
d60efe38e2 add uploads to selection list 2023-07-27 15:37:32 +10:00
f779342e02 fix z-index and add delete button 2023-07-27 15:29:35 +10:00
204e62b3bb fix z-index 2023-07-27 15:29:28 +10:00
5adc24f997 dont shrink 2023-07-27 15:09:58 +10:00
ab25b0f64a update selection details on change 2023-07-27 15:07:24 +10:00
dd8e59cd4f thumbnail support 2023-07-27 14:36:46 +10:00
0c4c36eb74 dependency updates 2023-07-27 06:28:43 +10:00
James Collins
3481f10033 Merge pull request #166 from STEMMechanics/dependabot/composer/laravel/framework-10.16.0
Bump laravel/framework from 10.15.0 to 10.16.0
2023-07-26 11:03:38 +10:00
James Collins
fdf61fef3d Merge pull request #165 from STEMMechanics/dependabot/npm_and_yarn/knip-2.17.0
Bump knip from 2.16.1 to 2.17.0
2023-07-26 11:03:22 +10:00
James Collins
30c3c5d33f Merge pull request #164 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/parser-6.2.0
Bump @typescript-eslint/parser from 6.1.0 to 6.2.0
2023-07-26 11:03:09 +10:00
dependabot[bot]
6cd7df79d9 Bump @typescript-eslint/parser from 6.1.0 to 6.2.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.2.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-26 01:02:30 +00:00
James Collins
b5b0b5d7bd Merge pull request #162 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-6.2.0
Bump @typescript-eslint/eslint-plugin from 6.1.0 to 6.2.0
2023-07-26 11:01:53 +10:00
James Collins
d0266c7d0c Merge pull request #161 from STEMMechanics/dependabot/npm_and_yarn/vite-4.4.7
Bump vite from 4.4.6 to 4.4.7
2023-07-26 11:01:38 +10:00
dependabot[bot]
283fd30c19 Bump vite from 4.4.6 to 4.4.7
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.4.6 to 4.4.7.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.4.7/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-26 01:00:23 +00:00
James Collins
5d13135bd0 Merge pull request #160 from STEMMechanics/dependabot/npm_and_yarn/unocss-0.53.6
Bump unocss from 0.53.5 to 0.53.6
2023-07-26 10:59:46 +10:00
dependabot[bot]
6c2961eef6 Bump laravel/framework from 10.15.0 to 10.16.0
Bumps [laravel/framework](https://github.com/laravel/framework) from 10.15.0 to 10.16.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/10.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/framework/compare/v10.15.0...v10.16.0)

---
updated-dependencies:
- dependency-name: laravel/framework
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-26 00:39:12 +00:00
dependabot[bot]
f9c006403e Bump knip from 2.16.1 to 2.17.0
Bumps [knip](https://github.com/webpro/knip) from 2.16.1 to 2.17.0.
- [Release notes](https://github.com/webpro/knip/releases)
- [Changelog](https://github.com/webpro/knip/blob/main/docs/release-notes-v2.md)
- [Commits](https://github.com/webpro/knip/compare/2.16.1...2.17.0)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-26 00:11:54 +00:00
dependabot[bot]
1f65f0fe30 Bump @typescript-eslint/eslint-plugin from 6.1.0 to 6.2.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.2.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-25 00:42:34 +00:00
dependabot[bot]
a49a287855 Bump unocss from 0.53.5 to 0.53.6
Bumps [unocss](https://github.com/unocss/unocss) from 0.53.5 to 0.53.6.
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/compare/v0.53.5...v0.53.6)

---
updated-dependencies:
- dependency-name: unocss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-25 00:41:48 +00:00
bf7f830f9e fix formatted date 2023-07-24 20:25:27 +10:00
ffce564a47 fix info box icon shrinkage 2023-07-24 20:25:27 +10:00
2cdcd9a424 fix button types not displayed correctly 2023-07-24 20:25:27 +10:00
ffbc733571 fix undefined method 2023-07-24 15:02:13 +10:00
3ea7188253 updated logo 2023-07-24 13:05:57 +10:00
97c6a4c4ef cleanup 2023-07-24 12:51:34 +10:00
f3fe112427 fix params 2023-07-24 12:39:29 +10:00
189e4ef230 set null value to empty string 2023-07-24 12:36:34 +10:00
d35b895ff4 incorrect table name 2023-07-24 12:35:12 +10:00
c47c511674 fix bad call to gallery() 2023-07-24 12:32:55 +10:00
20be21c87d allow nullable useragent 2023-07-24 12:31:16 +10:00
1d57dc519f fix margin 2023-07-24 12:13:12 +10:00
644b42afe9 enable form on error 2023-07-24 12:12:15 +10:00
9ad11f24c2 update event controller to save attachments 2023-07-24 11:58:10 +10:00
1e2564f753 open links in new window 2023-07-24 11:52:58 +10:00
f1ab544aae fix attachments editor not shown 2023-07-24 11:50:04 +10:00
James Collins
aa85d24952 Merge pull request #159 from STEMMechanics/dependabot/npm_and_yarn/pinia-plugin-persistedstate-3.2.0
Bump pinia-plugin-persistedstate from 3.1.0 to 3.2.0
2023-07-24 11:48:41 +10:00
dependabot[bot]
b0f8817aae Bump pinia-plugin-persistedstate from 3.1.0 to 3.2.0
Bumps [pinia-plugin-persistedstate](https://github.com/prazdevs/pinia-plugin-persistedstate) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/prazdevs/pinia-plugin-persistedstate/releases)
- [Commits](https://github.com/prazdevs/pinia-plugin-persistedstate/compare/v3.1.0...v3.2.0)

---
updated-dependencies:
- dependency-name: pinia-plugin-persistedstate
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-24 01:48:25 +00:00
James Collins
b9e3e9f5f2 Merge pull request #158 from STEMMechanics/dependabot/npm_and_yarn/knip-2.16.1
Bump knip from 2.16.0 to 2.16.1
2023-07-24 11:48:21 +10:00
dependabot[bot]
ea05f5992d Bump knip from 2.16.0 to 2.16.1
Bumps [knip](https://github.com/webpro/knip) from 2.16.0 to 2.16.1.
- [Release notes](https://github.com/webpro/knip/releases)
- [Changelog](https://github.com/webpro/knip/blob/main/docs/release-notes-v2.md)
- [Commits](https://github.com/webpro/knip/compare/2.16.0...2.16.1)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-24 01:48:14 +00:00
James Collins
9c138d6bee Merge pull request #157 from STEMMechanics/dependabot/npm_and_yarn/sass-1.64.1
Bump sass from 1.64.0 to 1.64.1
2023-07-24 11:47:44 +10:00
James Collins
7325880a70 Merge pull request #156 from STEMMechanics/dependabot/npm_and_yarn/postcss-8.4.27
Bump postcss from 8.4.26 to 8.4.27
2023-07-24 11:47:30 +10:00
James Collins
320631e91d Merge pull request #155 from STEMMechanics/dependabot/npm_and_yarn/vite-4.4.6
Bump vite from 4.4.5 to 4.4.6
2023-07-24 11:47:09 +10:00
James Collins
0997864cd6 Merge pull request #154 from STEMMechanics/dependabot/composer/doctrine/dbal-3.6.5
Bump doctrine/dbal from 3.6.4 to 3.6.5
2023-07-24 11:46:50 +10:00
James Collins
9e0451d541 Merge pull request #149 from STEMMechanics/dependabot/composer/square/square-29.0.0.20230720
Bump square/square from 28.0.1.20230608 to 29.0.0.20230720
2023-07-24 11:46:35 +10:00
dependabot[bot]
84245c5584 Bump sass from 1.64.0 to 1.64.1
Bumps [sass](https://github.com/sass/dart-sass) from 1.64.0 to 1.64.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.64.0...1.64.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-24 00:56:49 +00:00
dependabot[bot]
d72c0ea9f5 Bump postcss from 8.4.26 to 8.4.27
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.26 to 8.4.27.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.26...8.4.27)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-24 00:56:24 +00:00
dependabot[bot]
bf9500f960 Bump vite from 4.4.5 to 4.4.6
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.4.5 to 4.4.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.4.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-24 00:56:11 +00:00
dependabot[bot]
f18cda6c00 Bump doctrine/dbal from 3.6.4 to 3.6.5
Bumps [doctrine/dbal](https://github.com/doctrine/dbal) from 3.6.4 to 3.6.5.
- [Release notes](https://github.com/doctrine/dbal/releases)
- [Commits](https://github.com/doctrine/dbal/compare/3.6.4...3.6.5)

---
updated-dependencies:
- dependency-name: doctrine/dbal
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-24 00:48:53 +00:00
0ab20a75ac duplicates should be draft, fix hour column 2023-07-21 11:34:48 +10:00
133a6ed4ea added duplication support 2023-07-21 11:30:16 +10:00
bc424b7a00 update event to new attachments API 2023-07-21 11:25:35 +10:00
be3c6d89ee Fix #150 2023-07-21 11:18:08 +10:00
d814ed1972 use transparent background instead of white 2023-07-21 11:10:07 +10:00
8322229001 dependency updates 2023-07-21 10:54:45 +10:00
da2a76d6cf only show current events if date is empty 2023-07-21 10:52:16 +10:00
dependabot[bot]
abf7a2783c Bump square/square from 28.0.1.20230608 to 29.0.0.20230720
Bumps [square/square](https://github.com/square/square-php-sdk) from 28.0.1.20230608 to 29.0.0.20230720.
- [Release notes](https://github.com/square/square-php-sdk/releases)
- [Changelog](https://github.com/square/square-php-sdk/blob/master/CHANGELOG.md)
- [Commits](https://github.com/square/square-php-sdk/compare/28.0.1.20230608...29.0.0.20230720)

---
updated-dependencies:
- dependency-name: square/square
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-20 00:36:30 +00:00
6690c69efe fix sqlite error 2023-07-19 17:04:40 +10:00
67044b7cf9 use variant thumb 2023-07-19 15:53:58 +10:00
048d3af39b dont show duplicates 2023-07-19 15:35:10 +10:00
816989d472 display initial items in editor 2023-07-19 15:31:16 +10:00
8f6310b463 added delete item button 2023-07-19 15:19:35 +10:00
3cebdd838b fix typecasting 2023-07-19 15:05:56 +10:00
9996404e29 missing trait 2023-07-19 15:00:07 +10:00
1598efac35 updated attachments 2023-07-19 14:56:56 +10:00
bfacb86f35 allow uploads 2023-07-19 12:48:17 +10:00
James Collins
e5e5c7e19c Merge pull request #145 from STEMMechanics/dependabot/composer/mockery/mockery-1.6.3
Bump mockery/mockery from 1.6.2 to 1.6.3
2023-07-19 12:12:55 +10:00
dependabot[bot]
9ede1d7eea Bump mockery/mockery from 1.6.2 to 1.6.3
Bumps [mockery/mockery](https://github.com/mockery/mockery) from 1.6.2 to 1.6.3.
- [Release notes](https://github.com/mockery/mockery/releases)
- [Changelog](https://github.com/mockery/mockery/blob/1.6.x/CHANGELOG.md)
- [Commits](https://github.com/mockery/mockery/compare/1.6.2...1.6.3)

---
updated-dependencies:
- dependency-name: mockery/mockery
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-19 00:19:04 +00:00
ff8cf83f1b fix test 2023-07-18 19:36:17 +10:00
326c8e7b81 migrate configuration 2023-07-18 19:34:03 +10:00
daeecfbd4f allow image upload 2023-07-18 19:16:59 +10:00
15c330c784 dependency updates 2023-07-18 18:44:27 +10:00
7ba80ccc58 fixes 2023-07-18 18:41:17 +10:00
ef4efe723f gallery support 2023-07-18 18:37:49 +10:00
64ef8e9acd removed gallery item 2023-07-18 18:36:12 +10:00
d88b6f6e95 changed attachment to addendum 2023-07-18 18:36:12 +10:00
440d66322c add drop column 2023-07-18 18:36:12 +10:00
James Collins
469a646ae3 changed layout for consistency 2023-07-15 21:56:56 +10:00
9cb9ebbe4f fix robots seo to not follow/index authenticated pages 2023-07-14 14:12:27 +10:00
James Collins
d004855dd8 Merge pull request #132 from STEMMechanics/dependabot/npm_and_yarn/postcss-8.4.26
Bump postcss from 8.4.25 to 8.4.26
2023-07-14 11:16:10 +10:00
dependabot[bot]
911645c9f5 Bump postcss from 8.4.25 to 8.4.26
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.25 to 8.4.26.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.25...8.4.26)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-14 01:13:15 +00:00
James Collins
6a16e78d80 Merge pull request #133 from STEMMechanics/dependabot/npm_and_yarn/knip-2.15.5
Bump knip from 2.15.2 to 2.15.5
2023-07-14 11:12:32 +10:00
937c5024cb add support to convert HEIC files 2023-07-14 11:09:46 +10:00
dependabot[bot]
7e12ba1a00 Bump knip from 2.15.2 to 2.15.5
Bumps [knip](https://github.com/webpro/knip) from 2.15.2 to 2.15.5.
- [Release notes](https://github.com/webpro/knip/releases)
- [Changelog](https://github.com/webpro/knip/blob/main/docs/release-notes-v2.md)
- [Commits](https://github.com/webpro/knip/compare/2.15.2...2.15.5)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-14 00:16:15 +00:00
89d57bb915 better handling of selection list 2023-07-14 08:57:02 +10:00
a111387a3f fix date in banner not using UTC 2023-07-13 20:10:06 +10:00
234fcb13af fix lists in html 2023-07-13 13:11:15 +10:00
377fdad6e0 allow uploading of images 2023-07-13 13:00:12 +10:00
68020b0201 fix small block 2023-07-13 11:46:43 +10:00
f0628c5c05 fix small block 2023-07-13 11:28:00 +10:00
66d2a2c48c fix display small 2023-07-13 11:25:52 +10:00
6f1229418e added small option 2023-07-13 11:19:56 +10:00
a430fee568 fix page padding 2023-07-13 08:28:08 +10:00
53b7ce651e updated minecraft information 2023-07-13 07:34:17 +10:00
1028064abe fix link underline 2023-07-12 22:54:22 +10:00
ab285870e3 package fixes 2023-07-12 22:41:12 +10:00
1a02d46151 add support for multiple selections 2023-07-12 22:30:44 +10:00
1bb70bbe66 fix bubble menu 2023-07-12 22:30:37 +10:00
c158155194 fix setValidationResult 2023-07-12 22:30:12 +10:00
7bfd4c1198 added mimeMatches 2023-07-12 22:29:51 +10:00
ea959d1a10 fix alignment on small screens 2023-07-12 22:29:43 +10:00
9fc5d81877 fix toolbar on mobile 2023-07-12 13:43:24 +10:00
719aac6727 fix shorthand time parsing 2023-07-12 13:29:19 +10:00
c8398920c5 bubble updates 2023-07-12 12:52:48 +10:00
James Collins
55bd914b8f Merge pull request #126 from STEMMechanics/dependabot/npm_and_yarn/vite-4.4.3
Bump vite from 4.4.2 to 4.4.3
2023-07-12 11:29:42 +10:00
dependabot[bot]
2b06a52705 Bump vite from 4.4.2 to 4.4.3
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.4.2 to 4.4.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.4.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-12 01:27:06 +00:00
James Collins
2c9c997d5a Merge pull request #119 from STEMMechanics/dependabot/npm_and_yarn/vite-plugin-compression2-0.10.2
Bump vite-plugin-compression2 from 0.9.3 to 0.10.2
2023-07-12 11:26:29 +10:00
James Collins
17f305d9cb Merge pull request #128 from STEMMechanics/dependabot/composer/laravel/sail-1.23.1
Bump laravel/sail from 1.23.0 to 1.23.1
2023-07-12 11:26:13 +10:00
James Collins
44d071696f Merge pull request #127 from STEMMechanics/dependabot/npm_and_yarn/knip-2.15.2
Bump knip from 2.15.1 to 2.15.2
2023-07-12 11:25:55 +10:00
dependabot[bot]
fa8f44135c Bump vite-plugin-compression2 from 0.9.3 to 0.10.2
Bumps [vite-plugin-compression2](https://github.com/nonzzz/vite-compression-plugin) from 0.9.3 to 0.10.2.
- [Release notes](https://github.com/nonzzz/vite-compression-plugin/releases)
- [Changelog](https://github.com/nonzzz/vite-plugin-compression/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nonzzz/vite-compression-plugin/compare/v0.9.3...v0.10.2)

---
updated-dependencies:
- dependency-name: vite-plugin-compression2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-12 01:25:52 +00:00
dependabot[bot]
b38e79ef8f Bump laravel/sail from 1.23.0 to 1.23.1
Bumps [laravel/sail](https://github.com/laravel/sail) from 1.23.0 to 1.23.1.
- [Release notes](https://github.com/laravel/sail/releases)
- [Changelog](https://github.com/laravel/sail/blob/1.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/sail/compare/v1.23.0...v1.23.1)

---
updated-dependencies:
- dependency-name: laravel/sail
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-12 01:25:41 +00:00
James Collins
e2e39fbdf5 Merge pull request #123 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-6.0.0
Bump @typescript-eslint/eslint-plugin from 5.61.0 to 6.0.0
2023-07-12 11:25:35 +10:00
James Collins
a8262932cc Merge pull request #117 from STEMMechanics/dependabot/npm_and_yarn/vitest-0.33.0
Bump vitest from 0.32.4 to 0.33.0
2023-07-12 11:24:55 +10:00
James Collins
6d3e9b3c1d Merge pull request #129 from STEMMechanics/dependabot/composer/laravel/framework-10.15.0
Bump laravel/framework from 10.14.1 to 10.15.0
2023-07-12 11:24:41 +10:00
James Collins
b91619801d Merge pull request #130 from STEMMechanics/dependabot/composer/laravel/pint-1.10.4
Bump laravel/pint from 1.10.3 to 1.10.4
2023-07-12 11:24:26 +10:00
dependabot[bot]
f1e32096f3 Bump laravel/pint from 1.10.3 to 1.10.4
Bumps [laravel/pint](https://github.com/laravel/pint) from 1.10.3 to 1.10.4.
- [Release notes](https://github.com/laravel/pint/releases)
- [Changelog](https://github.com/laravel/pint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/laravel/pint/compare/v1.10.3...v1.10.4)

---
updated-dependencies:
- dependency-name: laravel/pint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-12 00:48:53 +00:00
dependabot[bot]
f5a327e72c Bump laravel/framework from 10.14.1 to 10.15.0
Bumps [laravel/framework](https://github.com/laravel/framework) from 10.14.1 to 10.15.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/10.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/framework/compare/v10.14.1...v10.15.0)

---
updated-dependencies:
- dependency-name: laravel/framework
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-12 00:48:49 +00:00
4fe05e39f7 updates 2023-07-12 10:21:45 +10:00
dependabot[bot]
c3779bf371 Bump knip from 2.15.1 to 2.15.2
Bumps [knip](https://github.com/webpro/knip) from 2.15.1 to 2.15.2.
- [Release notes](https://github.com/webpro/knip/releases)
- [Changelog](https://github.com/webpro/knip/blob/main/docs/release-notes-v2.md)
- [Commits](https://github.com/webpro/knip/compare/2.15.1...2.15.2)

---
updated-dependencies:
- dependency-name: knip
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-12 00:20:21 +00:00
54aa7e249e fix allowUploads permission 2023-07-12 09:11:04 +10:00
1744d192b5 fix error on url 2023-07-11 21:55:01 +10:00
3f7426c550 fix class 2023-07-11 21:52:29 +10:00
c4e017c7b7 fix content parsing 2023-07-11 21:50:49 +10:00
e723831548 added bubble menu 2023-07-11 21:50:33 +10:00
56b5dcd7d8 fix ignore allowUpload in file drop 2023-07-11 19:34:07 +10:00
dependabot[bot]
913d229630 Bump @typescript-eslint/eslint-plugin from 5.61.0 to 6.0.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.61.0 to 6.0.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.0.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-11 09:32:05 +00:00
3dfb11d692 dependency updates 2023-07-11 19:31:09 +10:00
759ab14899 fix calculation 2023-07-11 19:29:08 +10:00
329ff7c478 fix incorrect key 2023-07-11 19:28:59 +10:00
a6022f7251 final media dialog 2023-07-11 19:22:18 +10:00
d345be889e work 2023-07-11 16:37:04 +10:00
2dbe9955d9 added info api 2023-07-11 10:36:57 +10:00
dependabot[bot]
8fcd33e0a1 Bump vitest from 0.32.4 to 0.33.0
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 0.32.4 to 0.33.0.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v0.33.0/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-10 06:05:41 +00:00
14aa5e3b28 additons 2023-07-10 16:05:00 +10:00
2cb9aac070 dependency updates 2023-07-10 08:38:08 +10:00
1c6a5c9d04 editor expansion 2023-07-07 22:54:34 +10:00
936aabf412 dependency updates 2023-07-07 18:37:06 +10:00
fa7478a5b5 remove bad dependency 2023-07-07 18:36:36 +10:00
8992554ba6 started toolbar 2023-07-07 16:40:23 +10:00
c8895137fa show loading icon 2023-07-07 11:31:43 +10:00
f8bc75f1f9 fix styling 2023-07-07 11:27:23 +10:00
43faa0f020 styling editor 2023-07-07 11:22:04 +10:00
8e76a18590 add loader option 2023-07-07 11:14:17 +10:00
9c1df26b4b remove obsolete css 2023-07-07 11:14:07 +10:00
6d89a499b1 pagination bar margin bottom 2023-07-07 09:54:32 +10:00
03430c272f reduce posts to 18 2023-07-07 09:52:04 +10:00
baf15296ce add toast loaders 2023-07-07 09:44:12 +10:00
56f74964ed removed mdpreview and added SMHTML 2023-07-07 07:21:14 +10:00
afad2df8f5 cleanup 2023-07-07 07:12:32 +10:00
d17ff1f2e7 dependency updates 2023-07-07 07:12:25 +10:00
4d9be34b4e changed to TipTap 2023-07-06 13:53:24 +10:00
James Collins
5213b28c2e Merge pull request #116 from STEMMechanics/dependabot/npm_and_yarn/prettier-3.0.0
Bump prettier from 2.8.8 to 3.0.0
2023-07-06 10:34:05 +10:00
dependabot[bot]
e0df5a53dc Bump prettier from 2.8.8 to 3.0.0
Bumps [prettier](https://github.com/prettier/prettier) from 2.8.8 to 3.0.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.8...3.0.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-06 00:30:28 +00:00
James Collins
f13022ee1d update dependencies 2023-07-06 00:08:39 +00:00
James Collins
c063badb38 install tiptap dep 2023-07-06 00:06:35 +00:00
James Collins
693cf4cd2a remove md-editor 2023-07-06 00:05:15 +00:00
cc70b1a67f update dependencies 2023-07-04 09:28:41 +10:00
08d3366fe1 remove display name 2023-07-04 09:25:53 +10:00
080b2fcfc4 fixed bad link 2023-07-02 10:17:25 +10:00
5b1d02e3c1 reload value when late change 2023-07-01 19:36:55 +10:00
b322a405c7 fix form 2023-07-01 19:32:22 +10:00
0ed05b103b added 2023-07-01 19:32:15 +10:00
5431da3930 fix offset 2023-06-23 19:09:41 +10:00
2a6e5b7992 fix md-editor css crossover 2023-06-23 19:07:56 +10:00
85af95a8a0 dont wrap action column 2023-06-23 18:55:00 +10:00
e0b04a57ae fix starts at column not showing correct relative date 2023-06-23 18:53:57 +10:00
0533cd24fe fix relative dates in the future 2023-06-23 18:53:44 +10:00
9598031dd1 replace copy icon 2023-06-23 18:32:51 +10:00
9f808717d2 fix page padding 2023-06-23 18:30:32 +10:00
b4aa71b81b fix margin pagination 2023-06-23 12:07:55 +10:00
James Collins
321a8f0946 Merge pull request #98 from STEMMechanics/dependabot/npm_and_yarn/sass-1.63.6
Bump sass from 1.63.1 to 1.63.6
2023-06-23 11:32:38 +10:00
James Collins
93124cdad0 Merge pull request #99 from STEMMechanics/dependabot/npm_and_yarn/unocss-0.53.3
Bump unocss from 0.53.1 to 0.53.3
2023-06-23 11:32:17 +10:00
dependabot[bot]
26eae9b1cf Bump unocss from 0.53.1 to 0.53.3
Bumps [unocss](https://github.com/unocss/unocss) from 0.53.1 to 0.53.3.
- [Release notes](https://github.com/unocss/unocss/releases)
- [Commits](https://github.com/unocss/unocss/compare/v0.53.1...v0.53.3)

---
updated-dependencies:
- dependency-name: unocss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-23 01:09:48 +00:00
f803bc0a59 fix editor passing changes 2023-06-23 10:50:12 +10:00
be5925f40d margin below pagination 2023-06-23 10:20:50 +10:00
b25b697e7b disable payments 2023-06-23 10:12:13 +10:00
66e2a68cde added open_at for events 2023-06-23 09:54:52 +10:00
673f6051c1 disable cart icon 2023-06-23 09:48:09 +10:00
0478ab9eb2 fix incorrect select image control 2023-06-23 09:43:09 +10:00
b7fde520be add type=button to button elements 2023-06-23 08:44:44 +10:00
6f031f78e8 remove component 2023-06-23 08:40:45 +10:00
2f850ce152 remove last SMButton 2023-06-23 08:40:18 +10:00
dependabot[bot]
a6240a3ca9 Bump sass from 1.63.1 to 1.63.6
Bumps [sass](https://github.com/sass/dart-sass) from 1.63.1 to 1.63.6.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.63.1...1.63.6)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-22 21:57:27 +00:00
8906936e51 updates 2023-06-23 07:56:45 +10:00
fd6867740e fix preload 2023-06-22 21:46:13 +10:00
183231206b add loader 2023-06-22 17:42:04 +10:00
d4e832b526 show loader 2023-06-22 17:28:16 +10:00
667ff5cf94 rewrite 2023-06-22 17:16:22 +10:00
6d2db21a62 added api error callback with toast display 2023-06-12 13:13:38 +10:00
df398faddb fix permission check 2023-06-12 11:45:41 +10:00
e07e2d2e2c check item exists in object 2023-06-12 11:45:33 +10:00
ca29189f9e fix formatting 2023-06-12 11:45:20 +10:00
James Collins
15a1a3f666 Merge pull request #82 from STEMMechanics/dependabot/npm_and_yarn/eslint-plugin-jsdoc-46.2.6
Bump eslint-plugin-jsdoc from 46.2.4 to 46.2.6
2023-06-08 11:21:11 +10:00
James Collins
8c4c09bc90 Merge pull request #81 from STEMMechanics/dependabot/npm_and_yarn/sass-1.63.1
Bump sass from 1.62.1 to 1.63.1
2023-06-08 11:20:58 +10:00
James Collins
5a926d2d41 Merge pull request #79 from STEMMechanics/dependabot/composer/laravel/pint-1.10.1
Bump laravel/pint from 1.10.0 to 1.10.1
2023-06-08 11:20:42 +10:00
James Collins
5127d8b283 Merge pull request #77 from STEMMechanics/dependabot/npm_and_yarn/vitest-0.32.0
Bump vitest from 0.31.4 to 0.32.0
2023-06-08 11:20:28 +10:00
dependabot[bot]
c043a43fc5 Bump eslint-plugin-jsdoc from 46.2.4 to 46.2.6
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 46.2.4 to 46.2.6.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v46.2.4...v46.2.6)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-08 01:18:52 +00:00
dependabot[bot]
013930d7c3 Bump sass from 1.62.1 to 1.63.1
Bumps [sass](https://github.com/sass/dart-sass) from 1.62.1 to 1.63.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.62.1...1.63.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-08 01:18:20 +00:00
James Collins
6b0d66be25 Merge pull request #80 from STEMMechanics/dependabot/composer/mockery/mockery-1.6.2
Bump mockery/mockery from 1.6.1 to 1.6.2
2023-06-08 11:11:58 +10:00
dependabot[bot]
3b492d2005 Bump mockery/mockery from 1.6.1 to 1.6.2
Bumps [mockery/mockery](https://github.com/mockery/mockery) from 1.6.1 to 1.6.2.
- [Release notes](https://github.com/mockery/mockery/releases)
- [Changelog](https://github.com/mockery/mockery/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mockery/mockery/compare/1.6.1...1.6.2)

---
updated-dependencies:
- dependency-name: mockery/mockery
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-08 01:08:18 +00:00
dependabot[bot]
29f4bfd3cc Bump laravel/pint from 1.10.0 to 1.10.1
Bumps [laravel/pint](https://github.com/laravel/pint) from 1.10.0 to 1.10.1.
- [Release notes](https://github.com/laravel/pint/releases)
- [Changelog](https://github.com/laravel/pint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/laravel/pint/compare/v1.10.0...v1.10.1)

---
updated-dependencies:
- dependency-name: laravel/pint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-07 01:10:20 +00:00
dependabot[bot]
86e42c36cb Bump vitest from 0.31.4 to 0.32.0
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 0.31.4 to 0.32.0.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v0.32.0/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-07 01:08:47 +00:00
James Collins
c1d81c65d2 Merge pull request #74 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.59.9
Bump @typescript-eslint/eslint-plugin from 5.59.8 to 5.59.9
2023-06-06 11:08:00 +10:00
dependabot[bot]
fd864b03d9 Bump @typescript-eslint/eslint-plugin from 5.59.8 to 5.59.9
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.59.8 to 5.59.9.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.59.9/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-06 01:07:42 +00:00
James Collins
97eb51a434 Merge pull request #73 from STEMMechanics/dependabot/composer/mockery/mockery-1.6.1
Bump mockery/mockery from 1.6.0 to 1.6.1
2023-06-06 11:07:29 +10:00
James Collins
76f9b96369 Merge pull request #72 from STEMMechanics/dependabot/composer/laravel/framework-10.13.2
Bump laravel/framework from 10.13.1 to 10.13.2
2023-06-06 11:07:16 +10:00
James Collins
13e5cf2133 Merge pull request #75 from STEMMechanics/dependabot/npm_and_yarn/vite-plugin-compression2-0.9.2
Bump vite-plugin-compression2 from 0.9.1 to 0.9.2
2023-06-06 11:07:00 +10:00
James Collins
1c92f6449e Merge pull request #76 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/parser-5.59.9
Bump @typescript-eslint/parser from 5.59.8 to 5.59.9
2023-06-06 11:06:46 +10:00
dependabot[bot]
3ed6cc8d5c Bump @typescript-eslint/parser from 5.59.8 to 5.59.9
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.59.8 to 5.59.9.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.59.9/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-06 01:06:17 +00:00
dependabot[bot]
5b79e415e0 Bump vite-plugin-compression2 from 0.9.1 to 0.9.2
Bumps [vite-plugin-compression2](https://github.com/nonzzz/vite-compression-plugin) from 0.9.1 to 0.9.2.
- [Release notes](https://github.com/nonzzz/vite-compression-plugin/releases)
- [Changelog](https://github.com/nonzzz/vite-plugin-compression/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nonzzz/vite-compression-plugin/compare/v0.9.1...v0.9.2)

---
updated-dependencies:
- dependency-name: vite-plugin-compression2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-06 01:06:02 +00:00
dependabot[bot]
98036c7266 Bump mockery/mockery from 1.6.0 to 1.6.1
Bumps [mockery/mockery](https://github.com/mockery/mockery) from 1.6.0 to 1.6.1.
- [Release notes](https://github.com/mockery/mockery/releases)
- [Changelog](https://github.com/mockery/mockery/blob/1.6.1/CHANGELOG.md)
- [Commits](https://github.com/mockery/mockery/compare/1.6.0...1.6.1)

---
updated-dependencies:
- dependency-name: mockery/mockery
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-06 01:05:46 +00:00
dependabot[bot]
8c8c59d8bd Bump laravel/framework from 10.13.1 to 10.13.2
Bumps [laravel/framework](https://github.com/laravel/framework) from 10.13.1 to 10.13.2.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/10.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/framework/compare/v10.13.1...v10.13.2)

---
updated-dependencies:
- dependency-name: laravel/framework
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-06 01:05:36 +00:00
fdbadbac7f added convertFileNameToTitle 2023-06-06 10:47:21 +10:00
9d788f919a show draft banner correctly 2023-06-05 20:15:45 +10:00
fac00bc4f6 support tbc, tbd 2023-06-05 19:55:47 +10:00
6e511fc4a9 support TBC/TBD 2023-06-05 19:53:11 +10:00
2f6214c48d convert dates from utc before parsing 2023-06-05 19:46:50 +10:00
b2f791fc5f remove debug 2023-06-05 19:09:51 +10:00
39140611ca fix combined filters and empty values 2023-06-05 19:09:36 +10:00
567ee3062b cleanup 2023-06-05 18:55:30 +10:00
584e0903c8 log exception and continue 2023-06-05 18:55:20 +10:00
8990006d4c remove s3 disk 2023-06-05 18:55:08 +10:00
7feb78ba70 dependency updates 2023-06-05 18:25:09 +10:00
d67ca133eb fix incorrect JsonResponse 2023-06-05 15:48:47 +10:00
f95557aa3a updated 2023-06-05 15:28:30 +10:00
f539ab7294 dependency updates 2023-06-05 15:05:45 +10:00
James Collins
79284e2271 Merge pull request #71 from STEMMechanics/dependabot/npm_and_yarn/vue-loader-17.2.2
Bump vue-loader from 17.1.1 to 17.2.2
2023-06-05 12:11:34 +10:00
James Collins
e303b565fc Merge pull request #62 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/parser-5.59.8
Bump @typescript-eslint/parser from 5.59.7 to 5.59.8
2023-06-05 12:11:16 +10:00
dependabot[bot]
985e8a5cd6 Bump vue-loader from 17.1.1 to 17.2.2
Bumps [vue-loader](https://github.com/vuejs/vue-loader) from 17.1.1 to 17.2.2.
- [Release notes](https://github.com/vuejs/vue-loader/releases)
- [Changelog](https://github.com/vuejs/vue-loader/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-loader/compare/v17.1.1...v17.2.2)

---
updated-dependencies:
- dependency-name: vue-loader
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-05 02:09:12 +00:00
dependabot[bot]
541e1c4c2c Bump @typescript-eslint/parser from 5.59.7 to 5.59.8
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.59.7 to 5.59.8.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.59.8/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-05 02:04:46 +00:00
James Collins
10c1d500f3 Merge pull request #67 from STEMMechanics/dependabot/composer/laravel/framework-10.13.1
Bump laravel/framework from 10.12.0 to 10.13.1
2023-06-05 12:00:19 +10:00
James Collins
678f16788c Merge pull request #68 from STEMMechanics/dependabot/composer/phpunit/phpunit-10.2.0
Bump phpunit/phpunit from 10.1.3 to 10.2.0
2023-06-05 12:00:02 +10:00
James Collins
8871a1b7ae Merge pull request #69 from STEMMechanics/dependabot/npm_and_yarn/eslint-plugin-jsdoc-46.2.4
Bump eslint-plugin-jsdoc from 45.0.0 to 46.2.4
2023-06-05 11:59:40 +10:00
James Collins
05c2f28f25 Merge pull request #70 from STEMMechanics/dependabot/composer/doctrine/dbal-3.6.3
Bump doctrine/dbal from 3.6.2 to 3.6.3
2023-06-05 11:59:26 +10:00
James Collins
30179fe353 Merge pull request #61 from STEMMechanics/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.59.8
Bump @typescript-eslint/eslint-plugin from 5.59.7 to 5.59.8
2023-06-05 11:58:46 +10:00
James Collins
6846dd760d Merge pull request #59 from STEMMechanics/dependabot/npm_and_yarn/vue-router-4.2.2
Bump vue-router from 4.2.1 to 4.2.2
2023-06-05 11:58:33 +10:00
dependabot[bot]
408f285cf3 Bump doctrine/dbal from 3.6.2 to 3.6.3
Bumps [doctrine/dbal](https://github.com/doctrine/dbal) from 3.6.2 to 3.6.3.
- [Release notes](https://github.com/doctrine/dbal/releases)
- [Commits](https://github.com/doctrine/dbal/compare/3.6.2...3.6.3)

---
updated-dependencies:
- dependency-name: doctrine/dbal
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-05 01:40:07 +00:00
dependabot[bot]
fa76fc0f78 Bump eslint-plugin-jsdoc from 45.0.0 to 46.2.4
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 45.0.0 to 46.2.4.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v45.0.0...v46.2.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-05 01:40:02 +00:00
dependabot[bot]
ade9cd6b05 Bump phpunit/phpunit from 10.1.3 to 10.2.0
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 10.1.3 to 10.2.0.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.2.0/ChangeLog-10.2.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/10.1.3...10.2.0)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-05 01:40:01 +00:00
dependabot[bot]
933d18b784 Bump laravel/framework from 10.12.0 to 10.13.1
Bumps [laravel/framework](https://github.com/laravel/framework) from 10.12.0 to 10.13.1.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/10.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/framework/compare/v10.12.0...v10.13.1)

---
updated-dependencies:
- dependency-name: laravel/framework
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-05 01:39:55 +00:00
48bae3b181 remove debug 2023-06-03 18:40:22 +10:00
78f6ed1ef6 allow : in filter values 2023-06-03 18:38:12 +10:00
6d503939a5 temp filter fix 2023-06-03 08:39:12 +10:00
3677f1c45b fix upcoming events filter 2023-06-02 20:44:42 +10:00
dependabot[bot]
a23ce4e0e6 Bump @typescript-eslint/eslint-plugin from 5.59.7 to 5.59.8
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.59.7 to 5.59.8.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.59.8/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-30 01:07:19 +00:00
dependabot[bot]
e7c43fa53a Bump vue-router from 4.2.1 to 4.2.2
Bumps [vue-router](https://github.com/vuejs/router) from 4.2.1 to 4.2.2.
- [Release notes](https://github.com/vuejs/router/releases)
- [Commits](https://github.com/vuejs/router/compare/v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: vue-router
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-30 01:05:49 +00:00
James Collins
0de6735855 Merge pull request #58 from STEMMechanics/dependabot/npm_and_yarn/postcss-8.4.24
Bump postcss from 8.4.23 to 8.4.24
2023-05-29 12:20:49 +10:00
James Collins
aa274b1df4 Merge pull request #57 from STEMMechanics/dependabot/npm_and_yarn/eslint-plugin-jsdoc-45.0.0
Bump eslint-plugin-jsdoc from 44.2.7 to 45.0.0
2023-05-29 12:20:34 +10:00
dependabot[bot]
51261a4a5c Bump postcss from 8.4.23 to 8.4.24
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.23 to 8.4.24.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.23...8.4.24)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-29 01:44:28 +00:00
dependabot[bot]
9e92561502 Bump eslint-plugin-jsdoc from 44.2.7 to 45.0.0
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 44.2.7 to 45.0.0.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v44.2.7...v45.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-29 01:43:37 +00:00
2b28ebc014 dependency updates 2023-05-27 12:41:37 +10:00
196d9c358c Merge pull request #56 from STEMMechanics:dependabot/composer/spatie/laravel-ignition-2.1.3
Bump spatie/laravel-ignition from 2.1.2 to 2.1.3
2023-05-27 12:38:44 +10:00
dependabot[bot]
38d58d92b4 Bump spatie/laravel-ignition from 2.1.2 to 2.1.3
Bumps [spatie/laravel-ignition](https://github.com/spatie/laravel-ignition) from 2.1.2 to 2.1.3.
- [Release notes](https://github.com/spatie/laravel-ignition/releases)
- [Changelog](https://github.com/spatie/laravel-ignition/blob/main/CHANGELOG.md)
- [Commits](https://github.com/spatie/laravel-ignition/compare/2.1.2...2.1.3)

---
updated-dependencies:
- dependency-name: spatie/laravel-ignition
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-26 01:14:39 +00:00
e136c910b5 support analytics dashboard 2023-05-25 21:54:59 +10:00
d0c4f7eea2 allow updating ended_at 2023-05-25 21:54:46 +10:00
bf9b0f3973 update session ended_at on new requests 2023-05-25 21:54:37 +10:00
4534b46e97 added AA key for uppercase AM/PM 2023-05-25 21:27:36 +10:00
68affe4e4c update table field names 2023-05-25 20:04:53 +10:00
aa2671f167 reset server error on reload 2023-05-25 20:04:38 +10:00
2178b61602 updated analytics structure 2023-05-25 19:35:20 +10:00
6a6b8ed9b2 added rename macro to Request 2023-05-25 19:35:05 +10:00
784e8cf787 added unmangle request params 2023-05-25 19:34:40 +10:00
89a8b6926a update getVariantsAttribute return type 2023-05-25 12:21:23 +10:00
9c926d15c1 updated dependencies 2023-05-25 12:19:19 +10:00
James Collins
1b1144c628 Merge pull request #55 from STEMMechanics/dependabot/npm_and_yarn/vue-dompurify-html-4.1.4
Bump vue-dompurify-html from 3.1.2 to 4.1.4
2023-05-25 12:16:29 +10:00
James Collins
e9b1802af3 Merge pull request #54 from STEMMechanics/dependabot/npm_and_yarn/vuepic/vue-datepicker-5.1.2
Bump @vuepic/vue-datepicker from 3.6.8 to 5.1.2
2023-05-25 12:16:16 +10:00
James Collins
fe7c1d93ae Merge pull request #53 from STEMMechanics/dependabot/npm_and_yarn/vitest-0.31.1
Bump vitest from 0.28.5 to 0.31.1
2023-05-25 12:09:09 +10:00
James Collins
8d1be827a7 Merge pull request #52 from STEMMechanics/dependabot/npm_and_yarn/typescript-5.0.4
Bump typescript from 4.9.5 to 5.0.4
2023-05-25 12:08:43 +10:00
dependabot[bot]
cd4fe13117 Bump vue-dompurify-html from 3.1.2 to 4.1.4
Bumps [vue-dompurify-html](https://github.com/LeSuisse/vue-dompurify-html/tree/HEAD/packages/vue-dompurify-html) from 3.1.2 to 4.1.4.
- [Release notes](https://github.com/LeSuisse/vue-dompurify-html/releases)
- [Commits](https://github.com/LeSuisse/vue-dompurify-html/commits/v4.1.4/packages/vue-dompurify-html)

---
updated-dependencies:
- dependency-name: vue-dompurify-html
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-25 01:08:06 +00:00
dependabot[bot]
34e169adba Bump @vuepic/vue-datepicker from 3.6.8 to 5.1.2
Bumps [@vuepic/vue-datepicker](https://github.com/Vuepic/vue-datepicker) from 3.6.8 to 5.1.2.
- [Release notes](https://github.com/Vuepic/vue-datepicker/releases)
- [Commits](https://github.com/Vuepic/vue-datepicker/compare/v3.6.8...v5.1.2)

---
updated-dependencies:
- dependency-name: "@vuepic/vue-datepicker"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-25 01:07:58 +00:00
dependabot[bot]
d064756cc6 Bump vitest from 0.28.5 to 0.31.1
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 0.28.5 to 0.31.1.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v0.31.1/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-25 01:07:35 +00:00
dependabot[bot]
bf7e1658f4 Bump typescript from 4.9.5 to 5.0.4
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.9.5 to 5.0.4.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.9.5...v5.0.4)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-25 01:07:21 +00:00
8de3c5dcba added .phpunit.result.cache 2023-05-25 08:20:19 +10:00
e8827cbd50 fix hinting and tests for L10 and PHP8 2023-05-25 08:18:51 +10:00
f839003f5e dependency updates 2023-05-25 07:54:35 +10:00
b68d97455b remove gunk 2023-05-25 07:54:35 +10:00
James Collins
e9dcb8b3f0 Merge pull request #51 from STEMMechanics/shift-91888
PHPUnit 10 Shift
2023-05-25 07:53:54 +10:00
Shift
5e838ad61e Define test classes as final 2023-05-24 21:53:18 +00:00
Shift
a365977702 Ignore PHPUnit cache folder 2023-05-24 21:53:17 +00:00
8b2542ebef removed obsolete recaptcha 2023-05-25 07:49:09 +10:00
James Collins
69c5018367 Merge pull request #49 from STEMMechanics/shift-91885
Laravel 10.x Shift
2023-05-25 07:47:14 +10:00
James Collins
4f536ae5a9 Merge branch 'main' into shift-91885 2023-05-25 07:46:59 +10:00
James Collins
95395d1da7 Merge pull request #50 from STEMMechanics/shift-91887
Laravel Consolidate Namespaces Shift
2023-05-25 07:38:32 +10:00
Shift
c6c639afc2 Apply code style 2023-05-24 21:36:42 +00:00
41147b26f2 dependency updates 2023-05-25 07:35:33 +10:00
Shift
fbf437ac99 Shift cleanup 2023-05-24 21:33:19 +00:00
Shift
5faf49688d Remove redundant typing from DocBlocks 2023-05-24 21:33:17 +00:00
Shift
4d7d0ed74d Add type hints from DocBlocks 2023-05-24 21:33:16 +00:00
Shift
979b9f704c Add type hints for Laravel 10 2023-05-24 21:33:15 +00:00
Shift
4124cf39db Set return type of base TestCase methods
From the [PHPUnit 8 release notes][1], the `TestCase` methods below now declare a `void` return type:

- `setUpBeforeClass()`
- `setUp()`
- `assertPreConditions()`
- `assertPostConditions()`
- `tearDown()`
- `tearDownAfterClass()`
- `onNotSuccessfulTest()`

[1]: https://phpunit.de/announcements/phpunit-8.html
2023-05-24 21:33:13 +00:00
Shift
c83e21d588 Rename password_resets table 2023-05-24 21:33:13 +00:00
Shift
c88630e9af Adopt anonymous migrations 2023-05-24 21:33:12 +00:00
Shift
40b265e145 Bump Laravel dependencies 2023-05-24 21:33:11 +00:00
Shift
3ad2b2fb8e Default config files
In an effort to make upgrading the constantly changing config files
easier, Shift defaulted them and merged your true customizations -
where ENV variables may not be used.
2023-05-24 21:33:11 +00:00
Shift
8b671065e9 Shift config files 2023-05-24 21:33:11 +00:00
Shift
028e1a191e Shift core files 2023-05-24 21:33:08 +00:00
Shift
a133f82997 Remove explicit call to register policies 2023-05-24 21:33:00 +00:00
Shift
c4f3eb9a4e Remove default lang files 2023-05-24 21:32:59 +00:00
Shift
8a52c4529f Use Faker methods
Accessing Faker properties was deprecated in Faker 1.14.
2023-05-24 21:32:59 +00:00
Shift
d0493f3dd0 Convert string references to ::class
PHP 5.5.9 adds the new static `class` property which provides the fully qualified class name. This is preferred over using strings for class names since the `class` property references are checked by PHP.
2023-05-24 21:32:58 +00:00
Shift
b845552c37 Apply code style 2023-05-24 21:32:56 +00:00
4e97209494 fixes to support analytics 2023-05-25 07:18:28 +10:00
aa0b010bed ignore certain spellings 2023-05-25 07:18:28 +10:00
cb79ea64cf filter changes to support collections 2023-05-25 07:18:28 +10:00
James Collins
38409d0d63 Merge pull request #48 from STEMMechanics/dependabot/npm_and_yarn/eslint-plugin-jsdoc-44.2.5
Bump eslint-plugin-jsdoc from 39.9.1 to 44.2.5
2023-05-25 07:17:35 +10:00
James Collins
32dfb4eef3 Merge pull request #47 from STEMMechanics/dependabot/composer/guzzlehttp/guzzle-7.7.0
Bump guzzlehttp/guzzle from 7.6.1 to 7.7.0
2023-05-25 07:17:19 +10:00
James Collins
a6de64a089 Merge pull request #41 from STEMMechanics/dependabot/composer/phpunit/phpunit-10.1.3
Bump phpunit/phpunit from 9.6.7 to 10.1.3
2023-05-25 07:17:01 +10:00
James Collins
b226814676 Merge pull request #34 from STEMMechanics/dependabot/npm_and_yarn/vite-plugin-compression2-0.9.1
Bump vite-plugin-compression2 from 0.8.4 to 0.9.1
2023-05-25 07:16:45 +10:00
James Collins
805de3291b Merge pull request #30 from STEMMechanics/dependabot/npm_and_yarn/vue-final-modal-4.4.2
Bump vue-final-modal from 3.4.11 to 4.4.2
2023-05-25 07:16:13 +10:00
James Collins
b0ab63e30e Merge pull request #27 from STEMMechanics/dependabot/npm_and_yarn/prettier-2.8.8
Bump prettier from 2.8.2 to 2.8.8
2023-05-25 07:15:50 +10:00
James Collins
13bfc52b77 Merge pull request #23 from STEMMechanics/dependabot/npm_and_yarn/tinymce/tinymce-vue-5.1.0
Bump @tinymce/tinymce-vue from 4.0.7 to 5.1.0
2023-05-25 07:15:22 +10:00
dependabot[bot]
bbce78cab4 Bump phpunit/phpunit from 9.6.7 to 10.1.3
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.6.7 to 10.1.3.
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/10.1.3/ChangeLog-10.1.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.6.7...10.1.3)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-24 21:13:12 +00:00
James Collins
1e084d5131 Merge pull request #22 from STEMMechanics/dependabot/composer/nunomaduro/collision-7.1.0
Bump nunomaduro/collision from 6.4.0 to 7.1.0
2023-05-25 07:12:27 +10:00
dependabot[bot]
af699161da Bump eslint-plugin-jsdoc from 39.9.1 to 44.2.5
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 39.9.1 to 44.2.5.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v39.9.1...v44.2.5)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-24 01:11:37 +00:00
2e1c2cd0b2 added autocomplete 2023-05-22 17:31:50 +10:00
cd7366b8ff remove debug 2023-05-22 16:45:22 +10:00
ec74f6594c prettier 2023-05-22 16:29:27 +10:00
5d2e9affc0 support editing/deleting multiple items 2023-05-22 16:17:44 +10:00
06b7ce4db0 added 2023-05-22 16:17:26 +10:00
dependabot[bot]
4bf695f559 Bump guzzlehttp/guzzle from 7.6.1 to 7.7.0
Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 7.6.1 to 7.7.0.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/7.7/CHANGELOG.md)
- [Commits](https://github.com/guzzle/guzzle/compare/7.6.1...7.7.0)

---
updated-dependencies:
- dependency-name: guzzlehttp/guzzle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-22 01:46:03 +00:00
59daa1ff08 fix disabling css 2023-05-21 17:51:27 +10:00
04044673e2 added gap 2023-05-21 17:51:19 +10:00
3b837dc6b0 fix checkboxes not always checking 2023-05-21 09:27:51 +10:00
2f029e2523 dont reduce size of checkbox labels when active 2023-05-21 09:02:42 +10:00
66d477795f better handle 503 errors 2023-05-21 08:50:14 +10:00
78f23db801 updated maintenance page 2023-05-21 07:50:29 +10:00
e62a21c469 loop images 2023-05-20 22:02:49 +10:00
9756622148 fix click propagation 2023-05-20 21:57:39 +10:00
065cb1b746 added prev/next arrows 2023-05-20 21:49:43 +10:00
54a7ad86dc dependencies update 2023-05-20 20:56:44 +10:00
0e7c86ac2b fix properties on email inputs 2023-05-20 20:46:37 +10:00
e023964cb2 added media sorting to editor 2023-05-20 20:13:35 +10:00
16f4eb65ef empty sort now reverts to default instead of 503 2023-05-20 19:24:28 +10:00
11eb12324e when saving object, show original query list 2023-05-20 18:34:06 +10:00
7a0d3fc8a0 fix delete option 2023-05-20 17:57:52 +10:00
3ed2aadc34 media controller should not directly delete files 2023-05-20 17:56:48 +10:00
b2004e3483 fix not uploading multiple files 2023-05-20 17:49:04 +10:00
55f363a64f reduce gap around images 2023-05-20 16:55:55 +10:00
7a6ed9f7f4 reduce banner height 2023-05-20 16:55:47 +10:00
8fa8c85077 fix status check 2023-05-20 16:42:15 +10:00
245ffc9d45 include tinymce themes 2023-05-20 16:42:05 +10:00
6a9a2f0a9e firefox fix 2023-05-19 14:17:18 +10:00
9dbefe5a8a add page loading icon 2023-05-19 14:00:15 +10:00
cce2a79ee4 fix table name 2023-05-19 13:41:38 +10:00
8e94ab2d7d rel=prefetch 2023-05-19 13:37:32 +10:00
6e0337cdeb prefetching and performance improvements 2023-05-19 13:21:02 +10:00
1c3b8f065e remove older code 2023-05-19 13:20:53 +10:00
c43d5574b4 removed elements page 2023-05-19 12:50:49 +10:00
0e5c654b02 fix potential sql injections 2023-05-18 09:33:57 +10:00
14d6d59581 dependency updates 2023-05-16 15:29:51 +10:00
3796961293 added copy shortlink option to dropdown 2023-05-16 11:19:34 +10:00
c471a97a23 add event users 2023-05-11 16:49:12 +10:00
fc853bd5f1 add private option to attachments 2023-05-11 13:37:40 +10:00
d0ea0ae4d3 support empty values with prefixes 2023-05-11 09:14:37 +10:00
8a6d1281bb remove debug 2023-05-11 09:06:17 +10:00
8797d51ef4 default filter on status is OK 2023-05-11 09:04:58 +10:00
2c8ac1f155 Revert media status to OK 2023-05-11 09:04:39 +10:00
42706de9df added defaultFilters option 2023-05-11 09:04:23 +10:00
3ce99b8751 improve error handling on upload failures 2023-05-11 08:40:30 +10:00
44c4f16c5c fix test styling 2023-05-11 08:40:10 +10:00
cdccde528e added --loading variables 2023-05-11 08:12:32 +10:00
f32655c156 fix firefox missing :has selector 2023-05-10 20:31:53 +10:00
d7255f004d use const form 2023-05-10 20:21:16 +10:00
56a1aaa19c duplicate form object 2023-05-10 20:20:59 +10:00
86491bfb2e use seperate form id 2023-05-10 20:20:50 +10:00
8dc43ccfce support form-id and check form exists 2023-05-10 20:20:34 +10:00
7ff49700fd support form-id 2023-05-10 20:20:27 +10:00
e14c7aafb3 added status page link 2023-05-10 12:42:21 +10:00
0f727168be dependency updates 2023-05-09 14:39:30 +10:00
0de47b3104 added location url option 2023-05-09 10:58:51 +10:00
6b3eb97568 dont validate empty url strings 2023-05-09 10:58:43 +10:00
bd4ba41b0b fix small screens and make full height 2023-05-09 10:30:41 +10:00
fb2f2d9739 removed forgot-username 2023-05-09 10:22:10 +10:00
a468ae01ff fix rules 2023-05-09 10:07:59 +10:00
6d534bd1c3 revert put requirements 2023-05-08 21:59:42 +10:00
31820317de check if password exists on login 2023-05-08 21:53:37 +10:00
e2efa1f1bd updated rules 2023-05-08 21:51:52 +10:00
86a0936cd4 only allow ghost users by admins 2023-05-08 21:46:07 +10:00
645b623a40 ignore id on fallback 2023-05-08 21:45:27 +10:00
96bd56a828 obsolete 2023-05-08 21:45:11 +10:00
870f1c5194 fix phone requirement 2023-05-08 20:28:26 +10:00
5d1adf7af8 support creating ghost users 2023-05-08 20:25:01 +10:00
a1170a1347 added RequiredIf option 2023-05-08 20:24:54 +10:00
9b5aab6e6e modelValue should support boolean 2023-05-08 20:08:23 +10:00
a25776fbbb fix grammer 2023-05-08 19:40:46 +10:00
54b5929aa4 forced 0 margin top 2023-05-08 19:40:41 +10:00
729fc3fd39 added shortlinks on frontend 2023-05-08 19:28:07 +10:00
b4cf05ad44 fixed error code 2023-05-08 19:28:01 +10:00
4da8b32b1a added Length 2023-05-08 19:26:02 +10:00
c35342df59 fix active watch 2023-05-08 19:18:27 +10:00
7d8d407d07 fix button dropdown colours in dark mode 2023-05-08 19:16:46 +10:00
1ceb109a28 fix append item height 2023-05-08 19:11:40 +10:00
a8181ff2b7 fix static active 2023-05-08 19:09:53 +10:00
e42c4c3023 fix row column + buttonrow 2023-05-08 17:29:22 +10:00
ff040eec58 added title and description upload support 2023-05-08 17:27:01 +10:00
5d663d21b3 check lastDialog exists before resolving 2023-05-08 17:26:52 +10:00
b73c2d3726 emit value if non set on init 2023-05-08 16:53:17 +10:00
ee96acbe4f use modelValue to automatic selection changes 2023-05-08 16:39:42 +10:00
fd22b79d42 dynamic disabling 2023-05-08 16:39:27 +10:00
99f56b9ef8 cleanup hovering 2023-05-08 16:09:52 +10:00
9a686c1112 added tab-color-hover 2023-05-08 16:09:44 +10:00
ffcf823a7f reduced top margin 2023-05-08 15:16:50 +10:00
a85c4bf115 added no-help property 2023-05-08 15:16:25 +10:00
29d7167c24 fix borders 2023-05-08 15:11:09 +10:00
3c6a570394 fix label padding on small controls 2023-05-08 14:43:46 +10:00
419fa322a3 use default alignment of toolbar 2023-05-08 14:41:34 +10:00
71a2e1b6dd update media button to medium size 2023-05-08 14:41:25 +10:00
a352c21198 fix typing 2023-05-08 12:36:11 +10:00
4accb60a24 use new format 2023-05-08 12:34:33 +10:00
88b92a9572 remove footer top margin 2023-05-08 12:32:20 +10:00
e39fa78981 cleanup 2023-05-08 12:25:59 +10:00
4205113b00 block width 100% 2023-05-08 12:25:45 +10:00
ad47efefaf cleanup 2023-05-08 12:21:03 +10:00
890399dd74 set default first/last name 2023-05-08 12:20:57 +10:00
2698ede55e added fallback 2023-05-08 12:11:20 +10:00
c9f0ea2512 remove macros 2023-05-08 12:11:14 +10:00
228f9c7c6b remove obsolete fields 2023-05-08 12:11:09 +10:00
63e05e924a fix footer on small displays 2023-05-08 11:16:56 +10:00
a66cde3934 show form errors 2023-05-08 11:14:53 +10:00
0b8a2904ec cleaned up 2023-05-08 11:14:44 +10:00
5fffa97ea7 lightened danger lighter 2023-05-08 11:14:36 +10:00
1d14d86d8e added 2023-05-08 11:14:21 +10:00
217ab89667 fix padding 2023-05-08 10:43:48 +10:00
ac2dd23ad7 remove usernames 2023-05-08 10:40:48 +10:00
7a4f72378d control-help div always shown 2023-05-08 10:40:33 +10:00
8190839823 added new rules 2023-05-08 10:40:04 +10:00
4e9d97268f remove any query items 2023-05-06 22:38:32 +10:00
985f7c94da force ssl and remove obsolete stuff 2023-05-06 22:38:24 +10:00
3d28e73369 added used counter 2023-05-06 18:29:03 +10:00
4076b138b9 wrong schema 2023-05-06 18:23:24 +10:00
dependabot[bot]
99d4c709bd Bump nunomaduro/collision from 6.4.0 to 7.1.0
Bumps [nunomaduro/collision](https://github.com/nunomaduro/collision) from 6.4.0 to 7.1.0.
- [Release notes](https://github.com/nunomaduro/collision/releases)
- [Changelog](https://github.com/nunomaduro/collision/blob/v7.x/CHANGELOG.md)
- [Commits](https://github.com/nunomaduro/collision/compare/v6.4.0...v7.1.0)

---
updated-dependencies:
- dependency-name: nunomaduro/collision
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-06 08:21:01 +00:00
93951cfbc8 shortlink support 2023-05-06 18:20:17 +10:00
4ac86c434e added phpdotenv 2023-05-06 18:17:07 +10:00
171cfa7aab added table 2023-05-06 18:16:53 +10:00
a494dbe662 remove recapcha statement 2023-05-06 15:30:33 +10:00
c9d02fb11c dont parse data 2023-05-05 21:35:02 +10:00
3ba65385c5 override padding 2023-05-04 19:02:09 +10:00
58a2da1996 updated homepage 2023-05-04 18:58:53 +10:00
845d6ba12b use correct timezone 2023-05-04 18:46:58 +10:00
f0b55b7b2e added total to UserCollection 2023-05-04 16:49:32 +10:00
e6dd75c2a8 dont show 4th card on single column 2023-05-04 06:52:03 +10:00
7b7154085e dependency updates 2023-05-04 06:48:06 +10:00
1c119e80e9 fix style colouring 2023-05-04 06:46:15 +10:00
3d86f859c6 darkmode support and new variables 2023-05-03 21:49:55 +10:00
0bfad00df7 fix saving attachments 2023-05-03 20:46:14 +10:00
64efa723b3 fix incorrect index 2023-05-03 20:46:07 +10:00
0072b28965 updated front page layout 2023-05-03 20:23:35 +10:00
21fa5d24af added 3rd accent 2023-05-03 20:23:19 +10:00
16ec3c515e added align-items-stretch 2023-05-03 20:23:13 +10:00
6868144e25 fix identifying sessions 2023-05-03 07:35:55 +10:00
0e5af96900 added use 2023-05-02 21:42:25 +10:00
ded5caf271 restructure api request 2023-05-02 21:31:30 +10:00
e8e1e91d1c update the media value url 2023-05-02 21:05:07 +10:00
6a16d545ec remove debug 2023-05-02 20:51:05 +10:00
976b6fbb78 update image gallery 2023-05-02 20:49:36 +10:00
efc5571fb3 hide container when no toasts are present 2023-05-02 20:28:43 +10:00
6ad4b3a6c4 embed variant types into Media model 2023-05-02 19:16:39 +10:00
cc0fe080cf analytics backend update 2023-05-01 19:04:08 +10:00
dependabot[bot]
1de89fba5f Bump vite-plugin-compression2 from 0.8.4 to 0.9.1
Bumps [vite-plugin-compression2](https://github.com/nonzzz/vite-compression-plugin) from 0.8.4 to 0.9.1.
- [Release notes](https://github.com/nonzzz/vite-compression-plugin/releases)
- [Changelog](https://github.com/nonzzz/vite-compression-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nonzzz/vite-compression-plugin/compare/v0.8.4...v0.9.1)

---
updated-dependencies:
- dependency-name: vite-plugin-compression2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-01 01:25:02 +00:00
0c668c9c62 fix styling on smaller screens 2023-04-28 08:57:17 +10:00
6a3c3a3566 fix small screen layout 2023-04-27 16:51:52 +10:00
e17f79e0b1 improve small screen layout 2023-04-27 16:51:46 +10:00
f0461fb65f update to buttonrow 2023-04-27 16:51:38 +10:00
aa38927522 upgrade to large 2023-04-27 15:57:01 +10:00
881d06deea reduce margin for edit button 2023-04-27 15:45:32 +10:00
683869214b added view opton 2023-04-27 15:43:36 +10:00
3322a6e005 added margin between buttons 2023-04-27 15:33:17 +10:00
65a48454ba missing button-block class 2023-04-27 15:33:11 +10:00
0de8e17593 declare time before usage 2023-04-27 14:42:21 +10:00
17beb4152b fix helper text 2023-04-27 14:42:13 +10:00
b09097294f fix const 2023-04-27 14:09:33 +10:00
c6e1b0248d performance improvements 2023-04-27 14:05:34 +10:00
0a956e1fc5 show large images 2023-04-27 13:35:02 +10:00
e2dee426bf fix test expectation 2023-04-27 13:33:29 +10:00
37a738c094 fix toTitleCase 2023-04-27 13:31:02 +10:00
bef4c3440b performance improvements 2023-04-27 13:24:40 +10:00
b36ad8042f use webp image 2023-04-27 08:34:50 +10:00
6ec38853ff store images locally by default 2023-04-27 07:25:13 +10:00
69144a665f updated config 2023-04-27 06:55:33 +10:00
382a1d0ef8 move cdn 2023-04-27 05:47:23 +10:00
41c751a76d just use medium size 2023-04-26 21:45:34 +10:00
01e46042fb change to webp 2023-04-26 21:42:01 +10:00
f1a28b6efe change to webp 2023-04-26 21:41:43 +10:00
7fddeeeaae dont force webp as original is not 2023-04-26 21:16:33 +10:00
bacf35bb4b use webp 2023-04-26 21:15:27 +10:00
4a83c7e171 explicitly use webp 2023-04-26 20:58:39 +10:00
3cbce25394 performance improvements 2023-04-26 20:34:04 +10:00
dependabot[bot]
c2b58cc82d Bump vue-final-modal from 3.4.11 to 4.4.2
Bumps [vue-final-modal](https://github.com/vue-final/vue-final-modal/tree/HEAD/packages/vue-final-modal) from 3.4.11 to 4.4.2.
- [Release notes](https://github.com/vue-final/vue-final-modal/releases)
- [Changelog](https://github.com/vue-final/vue-final-modal/blob/master/packages/vue-final-modal/CHANGELOG.md)
- [Commits](https://github.com/vue-final/vue-final-modal/commits/v4.4.2/packages/vue-final-modal)

---
updated-dependencies:
- dependency-name: vue-final-modal
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-26 10:26:28 +00:00
ac326d2d74 disable recaptcha 2023-04-26 20:25:38 +10:00
50aaf8b343 added analytics box 2023-04-26 20:08:25 +10:00
f667ac6430 fix margins 2023-04-26 20:01:50 +10:00
e2e599ed35 bugfixes 2023-04-26 20:00:19 +10:00
897e422e15 dont replace some statuses after end 2023-04-26 19:55:24 +10:00
0031be6882 add progress text 2023-04-26 19:55:10 +10:00
45880ed7a8 remove debug 2023-04-26 18:52:39 +10:00
b7e964174a add upload progress 2023-04-26 18:52:23 +10:00
77b8f60cb1 fix styling 2023-04-26 18:52:16 +10:00
4cbde00ef3 added disabled to other types 2023-04-26 18:32:15 +10:00
196472181e added disabled class 2023-04-26 18:32:05 +10:00
2fa7a0c7a5 update fields when file changes 2023-04-26 18:19:11 +10:00
38e982e70b fix styling 2023-04-26 18:08:35 +10:00
8a9b57547a fix double search 2023-04-26 18:01:20 +10:00
6dd3d6255d fix small styling 2023-04-26 18:01:13 +10:00
656de567d7 fix css for disabled input 2023-04-26 17:54:16 +10:00
24e80d7851 fix hero loading in edit 2023-04-26 17:47:22 +10:00
bc642b48da move edit button higher 2023-04-26 17:45:41 +10:00
cc07998a8a bugfix temp file creation 2023-04-26 17:33:34 +10:00
178309bb1e updated autoload 2023-04-26 17:33:23 +10:00
40c19f47c7 added temp helper 2023-04-26 17:33:16 +10:00
7f82b24b0c fix css priority 2023-04-26 16:02:35 +10:00
f31a8da0e1 added edit button 2023-04-26 13:22:20 +10:00
8ed158ab3c input select shows current value 2023-04-26 12:30:47 +10:00
08af379a57 bug fixes 2023-04-26 12:29:34 +10:00
79dbdd3e5a fix margin 2023-04-26 12:29:28 +10:00
f7e8d5bdf7 remove obsolete options 2023-04-26 12:29:23 +10:00
52eba56e34 remove obsolete variable 2023-04-26 12:13:39 +10:00
4c42276deb bug fixes 2023-04-26 12:00:26 +10:00
b4eb772662 whitespacing 2023-04-26 12:00:11 +10:00
825730c3f9 reduce margins on medium size 2023-04-26 12:00:04 +10:00
b7a2253b01 add userHasPermission helper 2023-04-26 11:59:53 +10:00
ce1174d41b remove download options 2023-04-26 11:32:02 +10:00
f2da168a03 updated 2023-04-26 11:29:22 +10:00
fec4b29261 updated 2023-04-26 11:29:18 +10:00
01b8dadd5f rounded corners 2023-04-26 11:29:06 +10:00
3ee97468f9 change posts to articles 2023-04-26 10:57:27 +10:00
c6d318bbc3 use large instead of scaled image 2023-04-26 09:38:31 +10:00
4ebb07a79a fix missing calc 2023-04-26 09:35:34 +10:00
2580d0874f bug fixes 2023-04-25 19:34:01 +10:00
2168e693d8 support dark-mode 2023-04-25 19:24:20 +10:00
bc2a25346b dont display if no items 2023-04-25 11:57:39 +10:00
03e969e08c fix icon spacing 2023-04-25 11:55:18 +10:00
37e3872782 fix margins on small devices 2023-04-25 11:44:29 +10:00
71442e4160 remove debug code 2023-04-25 11:39:40 +10:00
c2b69a769a use new range input 2023-04-24 21:56:31 +10:00
c0bc0e03c0 added range type 2023-04-24 21:56:25 +10:00
f49bef1112 added rules 2023-04-24 21:30:37 +10:00
191b2978ec update css 2023-04-24 21:23:25 +10:00
2771cdd053 remove debug 2023-04-24 20:53:33 +10:00
2d576645d8 update community images and links 2023-04-24 19:21:09 +10:00
be9884b468 set dialog width 2023-04-24 18:31:04 +10:00
df280ce7a6 change discord button name 2023-04-24 18:29:50 +10:00
c1182b3b90 fix classes 2023-04-24 15:38:58 +10:00
425a3561ac change SMFooter to SMPageFooter 2023-04-24 15:37:11 +10:00
12be354cc9 remove sm- prefix 2023-04-24 15:25:36 +10:00
7e2917d447 obsolete 2023-04-24 15:25:31 +10:00
cb0de6a2d5 obsolete 2023-04-24 15:21:48 +10:00
95318d1b36 update SMFormFooter to SMButtonRow 2023-04-24 15:21:05 +10:00
b92456c178 update all SMHeaders 2023-04-24 14:59:59 +10:00
bcb25b5d5e grammar 2023-04-24 14:42:31 +10:00
6a79204204 update position 2023-04-24 14:41:48 +10:00
d3776a8d3f bugfix SMHeader scroll 2023-04-24 14:40:48 +10:00
325c6a0448 update to new SMHeader 2023-04-24 14:14:49 +10:00
7c089eed80 remove old smheading 2023-04-24 14:14:43 +10:00
8b40a46c1b added component 2023-04-24 14:11:33 +10:00
ef4061b96c updates rules page 2023-04-24 13:40:59 +10:00
dependabot[bot]
506849b450 Bump prettier from 2.8.2 to 2.8.8
Bumps [prettier](https://github.com/prettier/prettier) from 2.8.2 to 2.8.8.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.2...2.8.8)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-24 02:25:08 +00:00
dependabot[bot]
e73ce8c943 Bump @tinymce/tinymce-vue from 4.0.7 to 5.1.0
Bumps [@tinymce/tinymce-vue](https://github.com/tinymce/tinymce-vue) from 4.0.7 to 5.1.0.
- [Release notes](https://github.com/tinymce/tinymce-vue/releases)
- [Changelog](https://github.com/tinymce/tinymce-vue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tinymce/tinymce-vue/compare/4.0.7...5.1.0)

---
updated-dependencies:
- dependency-name: "@tinymce/tinymce-vue"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-24 02:24:28 +00:00
bb4543bc65 dependency update 2023-04-24 12:24:09 +10:00
James Collins
f8d5850a89 Create dependabot.yml 2023-04-24 12:24:03 +10:00
cce994d35c added minecraft curve 2023-04-24 12:18:06 +10:00
02cfb53147 Added SMSocialIcons component 2023-04-24 12:16:48 +10:00
0755df03cf use exact active class 2023-04-24 10:35:28 +10:00
51f0ad7497 only add variant if created 2023-04-24 09:53:47 +10:00
b4a49d20c8 fix styling 2023-04-24 08:40:41 +10:00
44ccaf10d4 test for NaN price 2023-04-24 08:22:29 +10:00
967c14b93a bug fixes 2023-04-23 20:44:11 +10:00
0e42fc657b missing handleinput on select 2023-04-23 20:37:02 +10:00
2d7a91e368 fix params.id 2023-04-23 20:35:31 +10:00
072ab038fe fix missimg media icon and select styling 2023-04-23 20:34:52 +10:00
6723c27d5e ignore missing media 2023-04-23 20:28:17 +10:00
f5fc700886 typos 2023-04-23 20:25:15 +10:00
96a5ba0ceb media create 2023-04-23 20:21:08 +10:00
dfe5e72526 fix event create 2023-04-23 20:20:07 +10:00
d1cbebee84 sort oldest to newest 2023-04-23 20:02:23 +10:00
eac313feb8 footer spacing 2023-04-23 20:00:23 +10:00
a71ed56cf2 align text center 2023-04-23 19:57:08 +10:00
e3bc72e8d2 bugfix 2023-04-23 19:55:39 +10:00
0fadfed7f6 bug fixes 2023-04-23 19:53:10 +10:00
031db78590 bug fixes 2023-04-23 19:25:52 +10:00
6fd32fb84b support small 2023-04-23 16:42:58 +10:00
98e6464be6 support media input 2023-04-23 16:19:15 +10:00
52ce2afad2 added media type 2023-04-23 16:19:05 +10:00
28f89c9469 cleanup 2023-04-23 16:18:57 +10:00
6f7de8da66 reduce margin 2023-04-23 15:42:10 +10:00
50caf2753d added checkbox 2023-04-23 15:42:05 +10:00
30c0caa04d FormControl value is know unknown 2023-04-23 15:41:53 +10:00
e53d8c14a9 added Booleanish 2023-04-23 15:41:41 +10:00
eca89358db show status 2023-04-23 14:35:45 +10:00
1e58c71e67 fix search fields 2023-04-23 14:32:20 +10:00
43beaefc07 reverse sort 2023-04-23 14:32:00 +10:00
f74faadace fix date range filter 2023-04-23 14:30:05 +10:00
77aa622610 bug fixes 2023-04-23 13:56:27 +10:00
95aadd45ee bug fixes 2023-04-23 12:18:14 +10:00
89880016ea loading icon 2023-04-22 22:34:35 +10:00
beb91553ef min height 2023-04-22 22:31:05 +10:00
b2037c9575 css updates 2023-04-22 22:25:42 +10:00
ce4cec5589 fix 2023-04-22 21:25:04 +10:00
e8a597ec6b disable dark mode temp 2023-04-22 21:21:25 +10:00
a663e2bd56 updates 2023-04-22 21:18:07 +10:00
84bfd3cda2 updates 2023-04-21 15:46:12 +10:00
3dfe96fa89 updated css 2023-04-21 11:49:37 +10:00
93cbcef93f updated 2023-04-21 11:37:20 +10:00
5c758536a4 renamed 2023-04-21 11:37:13 +10:00
bc5a9aa9f1 remove image 2023-04-21 11:37:05 +10:00
b8ed77f6d5 add option to replace existing files 2023-04-21 10:07:17 +10:00
6c25cd029f added support to ignore existing files 2023-04-21 10:05:40 +10:00
68d59eda69 fix migration rename column issues 2023-04-21 09:58:05 +10:00
2534d4c159 dependency update 2023-04-21 08:55:32 +10:00
54252e768c dependency updates 2023-04-21 07:12:41 +10:00
7a2f263061 updates 2023-04-21 07:11:00 +10:00
5ae6e02ce8 updates 2023-04-19 22:31:47 +10:00
fb9944ef14 lots of changes 2023-04-19 16:26:13 +10:00
190493179f cleanup 2023-04-19 14:52:32 +10:00
4b1bc23622 added loading support 2023-04-19 14:49:15 +10:00
2ad5b04a48 added large option 2023-04-19 14:49:03 +10:00
afbbbcb4d1 remove debug 2023-04-19 14:28:23 +10:00
820c3aec9d remove debug permission 2023-04-19 14:27:31 +10:00
eafbcd8389 cleanup 2023-04-19 14:26:37 +10:00
f0459b3f6e cleanup 2023-04-19 14:26:27 +10:00
ff93265890 show banners and dates 2023-04-19 13:40:38 +10:00
320e282dc8 added banner colors 2023-04-19 13:40:29 +10:00
d23c911c78 fix ul margin 2023-04-19 13:13:51 +10:00
51df812a6c add display_name support 2023-04-19 09:40:35 +10:00
a96aba57f7 add php test debugging 2023-04-19 09:40:20 +10:00
36c71da4bb lots o updates 2023-04-18 21:47:44 +10:00
b53fca9648 removed dataset 2023-04-18 17:04:24 +10:00
9fafb8bd2a removed 2023-04-18 17:03:33 +10:00
41c7ba35a0 table width 100% 2023-04-18 16:59:57 +10:00
4cc5702da7 updated text 2023-04-18 15:47:17 +10:00
65f626f15e added cod 2023-04-18 15:47:09 +10:00
2abf6f67af added cod 2023-04-18 15:47:04 +10:00
72cde997ab added italic, updated small 2023-04-18 15:46:54 +10:00
8b27cb4690 removed small, added li 2023-04-18 15:46:47 +10:00
fb0cec0850 fix error not applying to border 2023-04-18 15:29:25 +10:00
a9a0bfdad0 fix small div 2023-04-18 15:26:47 +10:00
00a752173d added new formcard 2023-04-18 15:24:41 +10:00
24caa9a4f4 added space-between 2023-04-18 15:24:28 +10:00
a1075e000a fix styling 2023-04-18 15:11:52 +10:00
c416902280 cleanup 2023-04-18 15:04:06 +10:00
a29d707183 toolbar should be 100% 2023-04-18 15:04:00 +10:00
69d08a85ac input should be 100% 2023-04-18 15:03:51 +10:00
475ea08517 changes! 2023-04-18 13:52:36 +10:00
b4c97c20d6 inner container items 2023-04-18 13:52:28 +10:00
f7da2c8185 override default container center 2023-04-18 13:52:19 +10:00
a1a630fc02 align container center default 2023-04-18 13:52:10 +10:00
22ef117493 missing important 2023-04-18 13:51:58 +10:00
04b80d5ff8 updated darkmode 2023-04-18 13:35:06 +10:00
b764979c3b added accent-2 dark 2023-04-18 13:34:57 +10:00
a78c0491ef added accent-2 2023-04-18 13:32:25 +10:00
6082beb964 updated 2023-04-18 13:32:16 +10:00
9d9a5fd9d2 added narrow option 2023-04-18 13:01:56 +10:00
4332f389a1 change to use body page instead of data-set 2023-04-18 13:01:45 +10:00
a26b60e726 added accent colors 2023-04-18 12:48:40 +10:00
465d76cd08 added click to hide 2023-04-18 12:48:28 +10:00
e0300148cf cleanup 2023-04-18 12:08:02 +10:00
4442c6c625 cleanup styling 2023-04-18 12:07:58 +10:00
289eb86d97 cleanup 2023-04-18 12:07:51 +10:00
59724777e9 update header sizes 2023-04-18 12:07:46 +10:00
99e0b297b2 added change emitter 2023-04-18 11:29:38 +10:00
7036747042 use center option 2023-04-18 10:44:02 +10:00
b9cd3e3f9f added transitions 2023-04-18 10:43:54 +10:00
c8e90b6887 default is start, added center option 2023-04-18 10:43:25 +10:00
56973b62f6 added extra items 2023-04-18 10:43:15 +10:00
990a13e777 fixes 2023-04-18 10:21:55 +10:00
cd37623746 cleanup 2023-04-18 10:21:45 +10:00
193620e4e4 reduce font weight 2023-04-18 09:55:34 +10:00
78d85e2440 added clear option 2023-04-18 09:55:25 +10:00
9fa9689db9 fix padding on icon only buttons 2023-04-18 09:55:16 +10:00
81fc33183c changed dropdown to chevron 2023-04-18 09:20:21 +10:00
2600011736 fix dropdown clicks and overflow 2023-04-18 09:11:25 +10:00
e5c297eb7c hide easydatatable 2023-04-18 09:11:15 +10:00
a3766aca6c apply margin-top to all h3 2023-04-18 08:29:20 +10:00
857689dc22 remove obsolete loader 2023-04-18 08:29:08 +10:00
2ed5917e96 css disabled 2023-04-18 08:29:00 +10:00
84380bf333 #app as flex 2023-04-18 08:28:53 +10:00
e7d517f264 use new table 2023-04-17 22:57:40 +10:00
40a9cc424e cleanup 2023-04-17 22:57:35 +10:00
b725bc2b5b change search button to icon 2023-04-17 22:57:28 +10:00
50306c319e added 2023-04-17 22:57:18 +10:00
c1e86c6897 added back links 2023-04-17 22:57:07 +10:00
eb02142afc bug fixes 2023-04-17 22:56:49 +10:00
5f0526eef7 cleanup 2023-04-17 19:56:39 +10:00
cbdc55df8f fix scrollbar padding 2023-04-17 19:56:33 +10:00
e0022b15c5 remove obsolete code 2023-04-17 19:56:25 +10:00
983edc53d1 update workshop route name 2023-04-17 19:38:41 +10:00
2af1dcd24e update router namespace 2023-04-17 19:38:28 +10:00
2814a5f044 fix responsive 2023-04-17 19:34:42 +10:00
802fd87850 change button to primary type 2023-04-17 19:34:34 +10:00
50a6a39632 dark mode always on home page 2023-04-17 19:28:49 +10:00
49d0d3b35a updated page 2023-04-17 16:11:57 +10:00
8017f017f2 bug fixes 2023-04-17 16:11:51 +10:00
864798be7c updated h3 2023-04-17 16:11:45 +10:00
e20ef40e02 remove input group 2023-04-17 16:01:04 +10:00
955f9021f7 updated the new input group slots 2023-04-17 15:58:37 +10:00
e006090be2 removed 2023-04-17 15:58:27 +10:00
1c6bc56e08 added prepend and append slots 2023-04-17 15:58:21 +10:00
aa2da29b4c remove input group 2023-04-17 15:19:39 +10:00
9e47d28660 bug fix 2023-04-17 15:19:33 +10:00
a5383c87c7 cleanup 2023-04-17 15:07:53 +10:00
152a637e31 update button font color 2023-04-17 15:07:45 +10:00
5d947000ca fix validator and font weight on smaller 2023-04-17 15:07:35 +10:00
bf4f378108 added cta button 2023-04-17 14:58:08 +10:00
7f03228efa added sizes to button 2023-04-17 14:57:59 +10:00
7e6fd1859e added offset option 2023-04-17 14:30:41 +10:00
979c77c1b9 bring back model function and cleanup 2023-04-17 14:26:42 +10:00
15c9603902 support new conductor features 2023-04-17 14:11:42 +10:00
20dd8bcb3a apply includes if no fields are set 2023-04-17 14:11:33 +10:00
bec4b03a17 return a blank string when name attribute 2023-04-17 13:54:37 +10:00
2686a162e7 cleanup and fields support includes fields 2023-04-17 13:54:17 +10:00
7d9c982cf5 bug fixes and updates 2023-04-17 07:16:31 +10:00
d1c09ce74e added 2023-04-13 07:39:30 +10:00
fe5f429039 dependency udates 2023-04-12 18:53:28 +10:00
8937571214 fix background colors 2023-04-12 14:08:33 +10:00
f9591951cb fix footer sheme 2023-04-12 14:08:19 +10:00
956d2a25f2 fix navbar variables 2023-04-12 14:08:10 +10:00
365bec10a6 added support for scheme 2023-04-12 13:45:14 +10:00
c69c11b0fe added base-darker 2023-04-12 13:45:08 +10:00
40b8414f8a update css 2023-04-12 13:39:08 +10:00
06cb735b68 update component 2023-04-12 13:39:03 +10:00
985f32e06e update page 2023-04-12 13:38:57 +10:00
36469b20b3 use variables 2023-04-12 13:38:28 +10:00
2173e4c6b8 update footer 2023-04-12 13:38:19 +10:00
d7a35e651e remove breadcrumb and bg reference 2023-04-12 13:38:08 +10:00
4238c977f3 added dark/light logo 2023-04-12 10:07:39 +10:00
74e9a3204f added dark/light d-none 2023-04-12 10:06:54 +10:00
7bf94ced84 added css variables 2023-04-12 09:53:41 +10:00
1b3a40c22a support css scheme 2023-04-12 09:53:28 +10:00
28bef07e37 update color 2023-04-12 09:53:05 +10:00
3b7cb57e7a fix hover and spacing css 2023-04-12 08:56:42 +10:00
3f069e6d22 removed depreciated progressbar 2023-04-12 08:49:29 +10:00
12e7269591 removed depreciated carousel 2023-04-12 08:49:20 +10:00
0127cf0a6b added fontaine 2023-04-12 08:44:54 +10:00
fd1522a2ca fix event test to specifically set status 2023-04-11 17:10:53 +10:00
c79ec065d3 update structure 2023-04-11 14:09:10 +10:00
19fe484049 fix factory 2023-04-11 14:09:03 +10:00
db3d831bc0 remove whitespace 2023-04-11 14:08:53 +10:00
d27e707044 add permission default value 2023-04-11 14:08:41 +10:00
c142440068 cleanup 2023-04-11 13:19:48 +10:00
df6456f5d2 fix error changing defaults after rename 2023-04-11 13:15:24 +10:00
1578a2b8d1 fix bad table name in drop 2023-04-11 13:14:57 +10:00
4a43c152d5 remove unused constraints 2023-04-11 13:14:50 +10:00
0d1ee37272 remove page transitions 2023-04-10 21:23:15 +10:00
5c0b97cd1e h1 align left 2023-04-10 21:23:08 +10:00
511e8d6074 update post view 2023-04-10 21:18:31 +10:00
826e4a7de2 remove breadcrumbs 2023-04-10 21:18:24 +10:00
1ac66b4ece update default background color 2023-04-10 21:18:16 +10:00
8f58de9f4e remove carousel 2023-04-10 20:52:13 +10:00
611d997df9 remove padding 2023-04-10 20:52:07 +10:00
3f66e3f1f1 remove page loader 2023-04-10 20:51:59 +10:00
6154fa5dcc added new element 2023-04-10 20:46:31 +10:00
dd0914cd89 started removal of rounded borders 2023-04-10 20:46:25 +10:00
b8000d9a64 white hamburger 2023-04-10 19:51:13 +10:00
d94bd66c54 white stem 2023-04-10 19:51:05 +10:00
2ebd2018db updated navbar design 2023-04-10 19:25:54 +10:00
04b41e16e1 added components 2023-04-10 18:03:02 +10:00
7ad73f3c84 bug fixes and support new media 2023-04-10 14:49:53 +10:00
359698d54f added apiAttachmentResource 2023-04-10 14:49:27 +10:00
26ea658f9c updated types 2023-04-10 14:49:13 +10:00
a13be0530f added media variants helper 2023-04-10 14:49:07 +10:00
b018b11c57 fix docs 2023-04-10 14:48:55 +10:00
aac023351a remove logging 2023-04-10 14:48:42 +10:00
fd2fbea03f S3 jobs 2023-04-10 14:47:53 +10:00
f3bbdec77c rewrote to support S3 2023-04-10 14:47:38 +10:00
b54ace0272 added respondAccepted 2023-04-10 14:47:09 +10:00
55bc78d9cb return fulfilled hero and user 2023-04-10 14:47:00 +10:00
fabe027d54 changed default permission from null to '' 2023-04-10 14:46:48 +10:00
b4f4450573 return fulfilled hero 2023-04-10 14:46:21 +10:00
990cc66600 support null models 2023-04-10 14:45:58 +10:00
aa76147144 added public/private aws and CF 2023-04-10 14:45:46 +10:00
ee46af08ca update media table 2023-04-10 14:44:23 +10:00
c33de944ef dependencies update 2023-04-10 14:44:08 +10:00
79e5103b08 updated config 2023-04-06 21:20:54 +10:00
4797b213ee added clamav config 2023-04-06 21:18:54 +10:00
c232042af5 use static function in Media modalk 2023-04-06 21:17:38 +10:00
252448f4a9 added uniqueFileName rule 2023-04-06 21:14:57 +10:00
ec4febe5e9 added additional rows for media table 2023-04-06 21:12:12 +10:00
35ca0d90f7 added the route macro apiAttachmentResource 2023-04-06 17:28:07 +10:00
eae3d4689b add the storage macro public 2023-04-06 17:27:29 +10:00
67c9d4084c added sunspikes/clamav-validator 2023-04-06 17:26:10 +10:00
fb52428219 update dependencies 2023-04-06 17:25:31 +10:00
23e620e168 reduce to XLarge 2023-04-06 08:52:43 +10:00
324054b3db fix button text justification 2023-04-06 08:36:40 +10:00
d9dcbeef7b preview uses thumb size 2023-04-05 19:20:04 +10:00
9b31d52d7e renamed header to Files 2023-04-05 19:18:47 +10:00
260d2d28ad support relational links 2023-04-05 15:56:58 +10:00
dd74bdda6a explicit ask for small images 2023-04-05 15:53:21 +10:00
7486390da5 show file to large error 2023-04-05 14:53:35 +10:00
eb32c99764 added event attachments support 2023-04-01 07:24:09 +10:00
8305f16dae added function docs 2023-04-01 07:24:09 +10:00
a74ace3bbd updated api.put to use params 2023-04-01 07:24:09 +10:00
96c8774e31 added attachments array to Event type 2023-04-01 07:24:09 +10:00
45895bddae added update event attachments route 2023-04-01 07:24:09 +10:00
e29e443078 alignment fixws 2023-03-31 13:51:05 +10:00
f213aeb93a added download option 2023-03-29 20:42:36 +10:00
b68b0f1583 added file types 2023-03-29 19:57:03 +10:00
52fc4c5c34 dont optimize non-images 2023-03-29 19:53:27 +10:00
d7f81c2f03 actually delete events 2023-03-29 19:17:08 +10:00
9b6e9aeb1c bug fixes 2023-03-29 19:06:40 +10:00
ea3bb13661 debug 2023-03-29 18:56:49 +10:00
ec12679426 debug 2023-03-29 18:52:57 +10:00
25a6d60e73 add debug 2023-03-29 18:50:24 +10:00
24c3a1ef30 prevent user select 2023-03-29 18:29:01 +10:00
fbaef5392f test foreach exists 2023-03-29 16:43:15 +10:00
f52cd448e2 remove debug 2023-03-29 16:43:09 +10:00
7f3eada0c1 debug 2023-03-29 16:02:57 +10:00
181cd2fce1 debug 2023-03-29 15:56:51 +10:00
a5f600e73b remove debug 2023-03-29 15:56:42 +10:00
c96b3d8349 updated returnAsResource parameters 2023-03-29 15:46:06 +10:00
06c9d48126 rules are not merged correctly 2023-03-29 15:21:52 +10:00
0d29fbce45 added attachments support 2023-03-29 15:01:43 +10:00
dc7fd81fc5 fix attachment model path 2023-03-29 14:58:41 +10:00
f7503d1f20 belongs to media 2023-03-29 14:58:31 +10:00
56673fceaa attachments support 2023-03-29 14:58:14 +10:00
3dccc56d16 reload component when attachments change outside 2023-03-29 14:57:59 +10:00
75566e27fa remove debugging 2023-03-29 14:57:46 +10:00
a8627ca89e launch attachments in new window 2023-03-29 14:57:39 +10:00
f49b6fef0f post supports attachments 2023-03-29 14:57:30 +10:00
8b83b0c212 added support for new responseAsResource format 2023-03-29 14:57:18 +10:00
57292ab8de responseAsResource suppports group name override 2023-03-29 14:56:45 +10:00
a26b522356 includes attachments data 2023-03-29 14:56:28 +10:00
e1468e82e4 added collection processing 2023-03-29 14:56:03 +10:00
76102637dd update dates of test 2023-03-29 11:59:20 +10:00
a55fac1bfa bugfix drop zone 2023-03-29 11:56:28 +10:00
052a256422 touch support 2023-03-29 09:44:40 +10:00
3bfcb0c0d4 bug fixes 2023-03-29 09:25:21 +10:00
e18292e352 fix when to purify so not conflict with components 2023-03-29 09:25:09 +10:00
d71a1f5940 moved gallery button to media group 2023-03-29 07:51:59 +10:00
d63f180030 added styling of component 2023-03-29 07:51:07 +10:00
aebdb0b599 improvements to the gallery 2023-03-28 22:40:25 +10:00
3a562005e5 urlMatches now supports an array 2023-03-28 22:40:02 +10:00
320516fd8d bug fixes 2023-03-28 20:45:53 +10:00
971074777d remove debug 2023-03-28 20:26:05 +10:00
22c3b5800d updated image library selector 2023-03-28 20:25:48 +10:00
b0a1197e22 fix scope to apply after filters 2023-03-28 20:25:21 +10:00
79704e2f2b encode url params 2023-03-28 19:53:01 +10:00
9f9faf5554 updated imageLibrary 2023-03-28 16:59:36 +10:00
a927334e06 added urlMatches 2023-03-28 16:59:36 +10:00
74c4c5d2bc fixed large tox height 2023-03-28 16:59:36 +10:00
2bd8acc00f updated packages 2023-03-28 16:59:36 +10:00
22ea843f60 default sorting to starts_at desc 2023-03-28 16:59:36 +10:00
c7fb636ab5 type is link not url 2023-03-27 19:15:23 +10:00
59761e8eac updated component 2023-03-24 21:28:34 +10:00
4f8efa9c90 start of image gallery 2023-03-24 16:55:29 +10:00
132ece89c1 remove obsolete DialogWrapper 2023-03-24 14:36:05 +10:00
d0d5cc6841 update tests to support new promise validation 2023-03-24 12:02:45 +10:00
498fd89239 updated env for npm test 2023-03-24 11:58:53 +10:00
0f99d3e83b updated autoload paths 2023-03-24 11:54:57 +10:00
d0fa4d649b added faker provider path 2023-03-24 11:52:58 +10:00
7d1d74e48a added faker autoload to prod 2023-03-24 11:50:12 +10:00
65e81eaae7 upgraded webpack 2023-03-24 11:46:33 +10:00
85cfdfd24f replaced vue3-promise-dialog for internal component 2023-03-24 11:45:12 +10:00
ad5b47f2a5 updated tests for new SMDate object 2023-03-24 09:31:27 +10:00
238189fd9a call CustomInternetProvider directly 2023-03-24 09:24:56 +10:00
5691a051a6 updated test to run vue tests 2023-03-24 09:24:41 +10:00
d11ac9240c added custom provider for min username length for faker 2023-03-24 09:00:16 +10:00
7c9f901a7a show load errors and run api calls simultaneously 2023-03-24 09:00:16 +10:00
55fffef5cb added getApiResultData helper 2023-03-24 09:00:16 +10:00
eb1c475fd9 added configurable timeout option 2023-03-24 09:00:16 +10:00
7cfeea9641 removed automatic deployment 2023-03-24 09:00:16 +10:00
59a7f02893 Change SMDialog to SMFormCard 2023-03-23 18:14:30 +10:00
ab4ef89c87 fix formatted sort 2023-03-23 18:05:59 +10:00
3d8b85dcf4 added duplicate option 2023-03-14 18:44:34 +10:00
4b9867bd16 fix incorrect parsing of some dates 2023-03-14 18:44:29 +10:00
b45dd84f0f support duplication 2023-03-14 11:44:49 +10:00
b21468f265 added event duplication 2023-03-14 07:57:30 +10:00
19c5bd5c25 use new xxlarge size 2023-03-13 22:33:24 +10:00
64fd34ff1c added helper 2023-03-13 22:33:18 +10:00
c0e7adcc42 improve imageLoad methiod 2023-03-13 22:33:13 +10:00
0f48f21dde support xxlarge size 2023-03-13 22:33:00 +10:00
5f960cca71 fix disposition filename extension 2023-03-13 22:10:15 +10:00
630418cf02 request thumbnail instead of custom size 2023-03-13 22:09:57 +10:00
dd5ac3a2b4 use better image sizes 2023-03-13 21:42:44 +10:00
0385672364 added content-disposition headers 2023-03-13 21:42:32 +10:00
c2a0f04cc0 updated sizes 2023-03-13 21:27:53 +10:00
9be9f4329b add descriptors 2023-03-13 21:24:58 +10:00
667972f05e added image size helper methods 2023-03-13 21:23:11 +10:00
0bbb1f0eba automagic image optimization 2023-03-13 21:15:54 +10:00
a7219861f4 fix progress option to not throw error if http status is any value below 300 2023-03-13 21:15:28 +10:00
09376e8f98 change const form to let form 2023-03-13 20:01:30 +10:00
ac45a6b5ef remove commented line 2023-03-13 20:01:19 +10:00
James Collins
ea732301fd Merge pull request #18 from STEMMechanics/useScopes
Use scopes
2023-03-13 19:49:41 +10:00
d21d1b6993 fix registration_type case check 2023-03-13 19:48:39 +10:00
655c003969 typo 2023-03-13 19:48:10 +10:00
23288e15e0 support value = null 2023-03-13 19:48:01 +10:00
cf3c35ffa3 cleanup before deamalgmation 2023-03-13 19:18:16 +10:00
85c37ba748 fix input fields not being used as an array 2023-03-13 19:02:14 +10:00
154dffeee4 use API path in .env 2023-03-13 19:02:00 +10:00
2cea90c2c8 added tests, bug fixes and cleanup 2023-03-13 16:03:32 +10:00
44b123307a fix class name 2023-03-13 13:14:45 +10:00
7ecec70520 Added registration type of message 2023-03-13 13:13:40 +10:00
7605a826d6 added test 2023-03-13 13:06:59 +10:00
3126991e8f added testing env 2023-03-13 13:06:52 +10:00
7b58303cde added test 2023-03-13 12:31:20 +10:00
58d302fc38 using postRules instead of putRules on PUT request 2023-03-13 12:23:25 +10:00
af4b9b95e7 combine UserRequest to BaseRequest 2023-03-13 12:19:39 +10:00
dc56edf486 added tests 2023-03-13 12:13:02 +10:00
14dd2bb336 allow same username on update 2023-03-13 12:12:55 +10:00
7a1499a0b3 fix missing response 2023-03-13 12:12:32 +10:00
be8ccbd41a remove obsolete uses 2023-03-13 12:12:24 +10:00
970618f561 fix givePermission relationship 2023-03-13 11:25:25 +10:00
8a3d9eec03 rename arrayOnlyItems to arrayLimitKeys 2023-03-13 11:25:13 +10:00
46de5cc0c9 fix transform to show all fields for admin users 2023-03-13 11:24:51 +10:00
0c2ac5d0a5 added give and revoke helper methods 2023-03-13 10:38:50 +10:00
c18b740f46 cleanup 2023-03-12 15:39:43 +10:00
615abcc8e3 added new conductors 2023-03-12 13:51:23 +10:00
3d13fc6864 use new filter option 2023-03-12 13:51:12 +10:00
8244230268 added array helper functions 2023-03-12 13:51:01 +10:00
3f48f11838 support quotes and embed quotes in filter 2023-03-12 13:50:51 +10:00
e16ba2d096 remove filters 2023-03-12 13:50:35 +10:00
874339348c added docs and cleanup 2023-03-11 22:53:16 +10:00
d1833d7b8d added raw "filter" support as well as <> between 2023-03-11 21:38:36 +10:00
b658e96425 fix errors in spliting 2023-03-10 19:27:49 +10:00
0ab92d95ea cleanup comparitors 2023-03-10 17:59:53 +10:00
a9b480994a support not equals 2023-03-10 15:35:15 +10:00
3bd5c064c3 converted from filters to conductors 2023-03-10 13:46:30 +10:00
6bee6b1ba7 added controllers 2023-03-10 13:46:16 +10:00
e11211fcc7 remove unnecessary guarded 2023-03-10 13:46:06 +10:00
d5a703026a fix attachment event endpoints 2023-03-10 12:40:29 +10:00
44481fe107 added guarded properties 2023-03-10 12:39:39 +10:00
57092e1b26 catch promise 2023-03-07 13:03:51 +10:00
b62a3b9d63 updated java/bedrock 2023-03-07 09:26:40 +10:00
7fd65ede5f update merging strign 2023-03-05 20:23:21 +10:00
d3e7938231 improved meta processing and support seo tags 2023-03-05 20:23:05 +10:00
2afb59d4a2 added 2023-03-05 20:22:21 +10:00
d54f2159d9 dont run on PR 2023-03-05 19:17:26 +10:00
e032fb666f use correct components 2023-03-05 16:58:46 +10:00
dca56831af return empty body correctly 2023-03-05 16:58:34 +10:00
937b70e1fd remove console.log 2023-03-05 16:58:25 +10:00
3b0c7d8388 directly set _messsage to empty on creation 2023-03-05 16:39:47 +10:00
d5093110f7 upodate to strongly recommended 2023-03-05 16:24:07 +10:00
25ddcef978 fix button link 2023-03-02 15:45:54 +10:00
5c613df087 fix processing results 2023-03-02 15:10:58 +10:00
0aa44e70de added progress support 2023-03-02 14:08:29 +10:00
2b69d9985e cleanup 2023-03-01 20:14:00 +10:00
86f44c8bab dont attempt to decode body on DELETE method 2023-03-01 20:13:53 +10:00
fa66ee14ee dynamic height 2023-03-01 20:13:40 +10:00
40ed36e0e2 wrap text 2023-03-01 20:13:25 +10:00
b7c8a9ece5 ensure control prop is string 2023-03-01 20:13:15 +10:00
29dfb852c8 dont hide overflow 2023-03-01 20:12:47 +10:00
9de83c3436 default publish_at to now on new items 2023-03-01 19:39:56 +10:00
9a0768a2d5 fix label not rolling back when no value is set 2023-03-01 19:39:42 +10:00
07aa82e7d9 add ages 2023-03-01 19:32:25 +10:00
bc79951700 swap price and ages 2023-03-01 19:32:21 +10:00
155a83cfdd improve ages strings 2023-03-01 18:16:07 +10:00
1ffa7cdbcf added event ages 2023-03-01 17:59:30 +10:00
0f2e1478a8 fix content saving 2023-03-01 17:38:31 +10:00
3efe31c91f event status can now include 'soon' 2023-03-01 17:21:37 +10:00
22ebefc46a show toast on apiErrors 2023-03-01 17:20:58 +10:00
1f8646438d create unique defaultFormControlValidation objects 2023-03-01 17:20:01 +10:00
9ac7769dbc dont show invalid icon on select 2023-03-01 17:09:23 +10:00
5f3cc1a3c6 fix incorrect endpoint 2023-03-01 15:39:15 +10:00
7b882d6705 compression options 2023-03-01 14:17:38 +10:00
33aa01fc78 remove options 2023-03-01 14:11:27 +10:00
542bf9c189 set compression options 2023-03-01 14:09:37 +10:00
d39d599570 use compression 2023-03-01 14:05:56 +10:00
082e2fe2bd updated 2023-03-01 13:36:27 +10:00
9600d1e7d1 updated css 2023-03-01 13:36:18 +10:00
6ab68df4a0 set dynamic titles 2023-03-01 09:46:37 +10:00
9ae8fa4055 fix page errors 2023-03-01 09:44:55 +10:00
52d40cb8a1 updated error pages 2023-03-01 09:38:37 +10:00
30e51dddd7 fix styling 2023-03-01 08:43:21 +10:00
ffbe78fdc1 improve slider design on mobile 2023-03-01 07:54:37 +10:00
adae8888f8 prefix page-error class 2023-03-01 07:43:52 +10:00
a3641828fc cleanup 2023-03-01 07:42:14 +10:00
b91d079787 move scss from app to component 2023-03-01 07:42:06 +10:00
9e2bb48f13 add inital loading indicators 2023-02-28 20:33:43 +10:00
22495294fc margin right on carousel item to prevent overlap of arrow 2023-02-28 19:50:16 +10:00
c83cfff556 added new fail validation callback 2023-02-28 19:42:25 +10:00
35c3108db7 add price line to panel 2023-02-28 19:38:07 +10:00
6155a8768f fix redirect after save 2023-02-28 19:37:58 +10:00
9d16889216 lighten help text 2023-02-28 19:17:47 +10:00
9fd46b9fd9 added event pricing 2023-02-28 19:16:10 +10:00
041dd4b314 update control object with media change 2023-02-28 18:35:26 +10:00
13b2c448b5 fix redirect 2023-02-28 18:35:14 +10:00
a41e209123 only show loading icon if there is an image to load 2023-02-28 18:29:28 +10:00
c24c1f54be support FormData for body 2023-02-28 15:42:16 +10:00
96076af037 remove progress code 2023-02-28 15:42:10 +10:00
1c9bce3b33 add console.log 2023-02-28 15:37:34 +10:00
ef048f77bb fix push on submit 2023-02-28 15:34:59 +10:00
361ead1351 fix upload bug 2023-02-28 15:33:33 +10:00
f031c51ce4 fix 404 on posts create 2023-02-28 15:11:10 +10:00
ce7ba83fff cleanup 2023-02-28 13:41:52 +10:00
eb692de59a fix media-list name 2023-02-28 13:41:44 +10:00
fe66dedecf remove console log 2023-02-28 13:33:53 +10:00
79eea9ea25 panel should show start time 2023-02-28 12:50:46 +10:00
83c25f20bb improve rules text 2023-02-28 12:39:40 +10:00
95c5ed6a32 fix strpos looking at the wrong variable 2023-02-28 12:17:58 +10:00
3f0ebca4da cleanup 2023-02-28 11:45:04 +10:00
03ec852648 relative now works for future dates 2023-02-28 11:34:42 +10:00
6ccc33f762 cleanup 2023-02-28 11:30:35 +10:00
d1bc5c2fe5 load media on mount 2023-02-28 11:25:03 +10:00
ee0d5c363c remove whitespace 2023-02-28 11:24:53 +10:00
86d5706aac change button to use SMButton 2023-02-28 10:16:19 +10:00
2ca199d98f cleanup 2023-02-28 10:16:08 +10:00
562d7a603e disable import ordering as breaks tinymce 2023-02-28 09:56:01 +10:00
c078189f44 fix import order 2023-02-28 09:55:47 +10:00
d060b1f56c improve logic 2023-02-28 09:45:35 +10:00
d91d51a60a added support for ISO 8601 formats 2023-02-28 09:44:31 +10:00
4677400b4f fixed template and logic 2023-02-28 08:56:34 +10:00
f7bac335db added LogsDiscordResponse type 2023-02-28 08:56:24 +10:00
ad3e6e59f2 fix logic 2023-02-28 08:51:37 +10:00
cc38a45fd0 move and refactor scss 2023-02-28 08:49:54 +10:00
7320094a87 improve logic handling 2023-02-28 08:48:09 +10:00
f05691d911 expand user type 2023-02-28 08:47:59 +10:00
3f9e40dbc8 fix the margin bottom for container > input-group 2023-02-28 08:42:55 +10:00
d399427d7f updated text 2023-02-28 08:37:24 +10:00
bf53784135 fix class prefixes 2023-02-28 08:30:24 +10:00
988d48996a fix padding on social links 2023-02-28 08:27:13 +10:00
037873778d add descriptive text 2023-02-28 08:27:04 +10:00
835e8be4dc fix fullscreen layout on mobiles 2023-02-28 08:21:09 +10:00
e384229d7c fix footer link alignment 2023-02-28 08:14:58 +10:00
efcb61781a fix template 2023-02-28 08:08:20 +10:00
a20551db7a fix template 2023-02-28 08:07:16 +10:00
26a3191226 fix typo 2023-02-27 23:55:30 +10:00
James Collins
f6a390595a Moved date checks to computed 2023-02-27 23:45:11 +10:00
e0ac364dff style changes 2023-02-27 23:24:21 +10:00
1b6c5a57e4 add prefix to class 2023-02-27 23:22:20 +10:00
62a3180e53 move date/month to computed 2023-02-27 23:18:58 +10:00
91a4a2c2a4 revert 2023-02-27 23:18:49 +10:00
c40f448aa3 now 2023-02-27 23:05:13 +10:00
7bc89f4463 fixed? 2023-02-27 23:03:24 +10:00
30b487e48c remove formatting 2023-02-27 23:01:06 +10:00
db7ee08937 fix terms 2023-02-27 22:58:42 +10:00
d810340425 fix datetime? 2023-02-27 22:56:42 +10:00
48192240c4 ignore banner 2023-02-27 22:53:59 +10:00
5c6b0085c8 hide courses 2023-02-27 22:52:10 +10:00
c6b088fdf9 fix promise loading 2023-02-27 22:51:36 +10:00
b1769a3326 remove bad import 2023-02-27 22:51:28 +10:00
61f9efe32d override a:visited color 2023-02-27 22:49:04 +10:00
f940278f4d fix post view 2023-02-27 22:45:08 +10:00
James Collins
0665286657 Merge pull request #17 from STEMMechanics/dependency-refactor
Dependency refactor
2023-02-27 22:30:56 +10:00
eb0064e477 cleanup 2023-02-27 22:29:34 +10:00
955c06f5aa cleanup 2023-02-27 19:40:03 +10:00
1ee2a1189d cleanup 2023-02-27 16:08:41 +10:00
c8e49ba49c cleanup 2023-02-27 14:52:01 +10:00
aeb7939c6e cleanup 2023-02-27 09:39:56 +10:00
910330c7dd added types 2023-02-27 09:39:40 +10:00
1315d6368c sort imports on save 2023-02-27 08:45:30 +10:00
c9e2350155 support params in url surrounded by curly braces 2023-02-27 08:43:44 +10:00
35f5b382fa ignore tempCodeRunnerFiles 2023-02-27 08:43:07 +10:00
a530b98fe2 addn stackable addKeyUpListener 2023-02-27 08:27:20 +10:00
26b93442b1 center paragraph 2023-02-26 22:07:43 +10:00
1142033d57 reduce p font-size to 90% 2023-02-26 20:04:16 +10:00
808304303a cleanup 2023-02-26 20:02:01 +10:00
2b298b7c76 fix box shadow clipping 2023-02-26 20:01:52 +10:00
3231063bc2 default attachments to empty array 2023-02-26 19:25:10 +10:00
212c5410e1 support control object 2023-02-26 19:14:12 +10:00
34a90bf218 removed .prevent from button 2023-02-26 19:14:03 +10:00
56f786cd2b cleanup types and added isValid function to controls 2023-02-26 19:13:37 +10:00
cff787f541 added toasts 2023-02-26 17:48:43 +10:00
55ec88e11f improved progress bar design 2023-02-26 13:53:46 +10:00
b718212702 replace progressbar with inhouse 2023-02-26 13:21:01 +10:00
c1dbde2fb7 add clamp method 2023-02-26 13:20:49 +10:00
2eac3f8b0b remove obsolete component 2023-02-26 11:35:50 +10:00
05cc7767bf pop progress on redirect 2023-02-26 11:35:41 +10:00
7c897a7e12 tinymce copy now npm run prepare 2023-02-26 11:34:31 +10:00
06655e2378 removed font-awesome 2023-02-26 11:30:53 +10:00
aad927fb96 added rollup-plugin-analyzer 2023-02-26 11:30:41 +10:00
533fdab150 fix SMDate() to SMDate("now") 2023-02-24 22:18:32 +10:00
93eb6da68d bugfixes with isBefore and isAfter 2023-02-24 22:18:07 +10:00
cc89d45690 begun adding attachment support 2023-02-24 22:05:21 +10:00
f993913438 added 2023-02-24 22:05:11 +10:00
158da60922 cleanup 2023-02-24 22:05:05 +10:00
bb0be1dadf fix z-index so loading cover covers all 2023-02-24 22:04:57 +10:00
c3379f2796 improved 2023-02-24 22:04:40 +10:00
531e1f53fd added file icon functions 2023-02-24 22:04:10 +10:00
62f09f738f added ion-icon visibility 2023-02-24 22:01:56 +10:00
79d5218b16 added file type icons 2023-02-24 22:01:47 +10:00
a068516aa0 cleanup display 2023-02-24 16:04:53 +10:00
9f92bc710c update media type 2023-02-24 16:04:46 +10:00
716cc0eb58 cleanup types 2023-02-24 16:04:37 +10:00
c3bb2179b1 remove unused label 2023-02-24 15:05:57 +10:00
a82e8df06d package updates 2023-02-24 14:41:41 +10:00
40dce90aa0 allow download of any files in uploads or img dirs 2023-02-24 14:41:25 +10:00
37e59bb8a5 updated types 2023-02-24 14:23:18 +10:00
982c124d3b add attachments support 2023-02-24 14:23:12 +10:00
6ebb915c68 add attachments structure 2023-02-24 12:53:26 +10:00
4ee8fd2400 only request images from media endpoint 2023-02-24 12:22:48 +10:00
19b40d50c1 use pixel sizing for indicators 2023-02-24 10:15:25 +10:00
6b14a4bb24 update colours 2023-02-24 10:14:11 +10:00
25790d1c45 add loader bar 2023-02-24 10:11:32 +10:00
4261a35ca7 added soon option 2023-02-23 14:20:57 +10:00
66e2783d97 remove cached content 2023-02-23 10:00:21 +10:00
55bf78497f cleanup of Editor 2023-02-23 09:56:55 +10:00
ac35ce6c47 more completions 2023-02-22 20:23:41 +10:00
3b443aafc5 use new uuid helper library 2023-02-22 20:23:35 +10:00
a2ab077325 seperate uuid helpers 2023-02-22 20:23:23 +10:00
4adb0c953b sm-form-columns no longer required 2023-02-22 20:23:11 +10:00
72a78ba27b clean up meta 2023-02-22 20:22:56 +10:00
e4cdd25922 added sortProperties method 2023-02-22 20:22:49 +10:00
24e2637408 support file uploading 2023-02-22 20:22:38 +10:00
b538eb1929 fix sm prefixes 2023-02-22 20:22:29 +10:00
4e40e8b1db fix mediacollection type 2023-02-22 20:21:52 +10:00
e6aef415f5 give login route a name 2023-02-22 20:21:43 +10:00
0f8f18943b fix response errors 2023-02-22 20:21:34 +10:00
f0accc2e33 update tinymce-copy to include emoticons 2023-02-22 20:21:26 +10:00
14ea157b7a added prism support 2023-02-22 07:20:15 +10:00
686b0a167d add case insentive and force download support 2023-02-22 07:19:59 +10:00
bde47e1251 updated toolbar options 2023-02-21 16:13:58 +10:00
9aaa2e5926 improve the design of the dropdown button 2023-02-21 15:18:47 +10:00
ad74d7bdeb remove fontawesome 2023-02-21 15:06:18 +10:00
ab42eeb370 fix icon and to 2023-02-21 15:04:35 +10:00
a25fc2e7e8 Fix Snyk errors 2023-02-21 14:53:51 +10:00
ca40db79f7 fix Snyk issues 2023-02-21 14:51:49 +10:00
fad2f82b6b add snyk ignore for eTag 2023-02-21 14:39:57 +10:00
1b68387865 fix no posts found while loading 2023-02-21 14:35:57 +10:00
b2ef15d45c rename loadingicon file 2023-02-21 14:21:36 +10:00
998e69085e updated types 2023-02-21 14:19:46 +10:00
77d2786937 Update loading icon 2023-02-21 14:10:11 +10:00
b7814ac2a4 Update loader 2023-02-21 14:09:16 +10:00
516410a649 update loaders 2023-02-21 14:09:13 +10:00
3018048140 use new types 2023-02-21 13:48:27 +10:00
8e4044dffb improve layout 2023-02-21 13:10:57 +10:00
4123845783 added delayed router loader 2023-02-21 12:59:13 +10:00
fd9dcc182f lighten label color 2023-02-21 12:42:03 +10:00
a3a6fbcaa4 place form footer in column 2023-02-21 12:41:01 +10:00
d9e4ccfca8 set active if value exists 2023-02-21 12:40:52 +10:00
ca288a088a improve dashboard box color 2023-02-21 12:36:39 +10:00
a63e73d692 fix api response 2023-02-21 10:43:22 +10:00
5eda87b1ef improve dropdown button design 2023-02-21 10:43:13 +10:00
2ee1bd3658 validation now async 2023-02-21 09:06:28 +10:00
cd689ea1a8 fix DebounceCallback typehinting 2023-02-21 09:06:06 +10:00
3ca5db394a added signal 2023-02-21 09:05:53 +10:00
5ee6d7ba78 fix template to use smpage 2023-02-21 09:05:43 +10:00
d15a44e7d7 move background to page-outer 2023-02-21 09:05:30 +10:00
4bb557e055 fix spacing 2023-02-21 09:05:14 +10:00
f57466b243 added npm run tinymce-copy script 2023-02-21 08:10:57 +10:00
bdceb6d774 disable emoticons plugin 2023-02-20 21:23:12 +10:00
fadf6a3d21 ignore tinymce public 2023-02-20 21:22:26 +10:00
3cd03499c9 cleanup tinymce 2023-02-20 21:22:16 +10:00
9406088f1f swapped trix with tinymce 2023-02-20 20:58:47 +10:00
a8f650d530 added api types 2023-02-20 19:45:29 +10:00
caffbb6c45 updated 2023-02-20 19:45:22 +10:00
4a6a65c5d2 improved matching 2023-02-20 19:11:40 +10:00
b50acd3b74 support date "now" 2023-02-20 18:46:52 +10:00
83f6bce923 cleanup 2023-02-20 18:42:40 +10:00
7c4f377e2b update value when control value changes 2023-02-20 18:42:26 +10:00
8851a7149f merge select type 2023-02-20 18:35:55 +10:00
ced5089caf added datetime type 2023-02-20 18:28:14 +10:00
ce53c94ea3 update to new components 2023-02-20 17:07:01 +10:00
5cfcbacb80 updated layout and use new dropdown button 2023-02-20 17:01:20 +10:00
5acf5e5297 add dropdown button 2023-02-20 16:50:02 +10:00
9337ee292c added multicolumn support 2023-02-20 16:23:46 +10:00
3de48f002c css didnt target ionicon 2023-02-20 16:23:25 +10:00
dad736b0d9 cleanup 2023-02-20 16:17:37 +10:00
7b2e88d089 update SMPanel to be more flexible 2023-02-20 16:12:30 +10:00
0db1bd50fd added 2023-02-20 15:48:28 +10:00
0fcc9b0d7e remove narrow dialog 2023-02-20 13:38:17 +10:00
0349225ede handle when response is not json 2023-02-20 13:37:36 +10:00
5ee55b298f apply style to page-outer 2023-02-20 12:22:48 +10:00
9877f3883a Password invalidation fix 2023-02-20 12:21:22 +10:00
7cfc24cf39 Fix required validation not returning array 2023-02-20 12:21:10 +10:00
9025581db8 fix css classes 2023-02-20 12:16:44 +10:00
731e33a986 improve <640px layout 2023-02-20 12:14:23 +10:00
336e7a7d41 remove narrow option of dialog 2023-02-20 12:12:00 +10:00
3906ef119b better test if image is loaded 2023-02-20 12:08:05 +10:00
4de4642c23 add page background 2023-02-20 11:59:15 +10:00
56eee105d5 fix loading icon 2023-02-20 11:53:23 +10:00
d7e530b2dd fix css layout 2023-02-20 11:53:18 +10:00
54855e2651 update common functions 2023-02-20 11:45:11 +10:00
7de134683d splitup common.js 2023-02-20 11:39:44 +10:00
1d0030e34f rename DFileLink 2023-02-20 10:24:25 +10:00
ccc30a8b7a updates 2023-02-20 10:20:12 +10:00
9961aba160 removed 2023-02-20 10:19:51 +10:00
5414c0b232 added media parser 2023-02-20 10:19:41 +10:00
584e146af0 dependency updates 2023-02-20 10:19:17 +10:00
e035128c30 rule updates 2023-02-20 10:19:04 +10:00
03f5c8d90f further refactoring 2023-02-17 15:38:53 +10:00
ff75f142b3 added filesize 2023-02-17 15:38:46 +10:00
094779a4fd shortcuts support ApiOptions or string 2023-02-17 15:31:09 +10:00
cfa84faab4 updated to new dependencies 2023-02-17 14:44:11 +10:00
c18d7c56c1 added put shortcut 2023-02-17 14:40:34 +10:00
127fea1dfd improve type safety on ApiResponse.data 2023-02-17 14:19:48 +10:00
ebe1069a7f added Url validation 2023-02-17 14:12:05 +10:00
9f42f92c2e support function type for date/time before/after options 2023-02-17 13:50:41 +10:00
c2542472e7 fix date/time options before and after to be optional 2023-02-17 12:39:49 +10:00
2fe0a8c3f0 added datetime validation 2023-02-17 12:38:15 +10:00
e97427c7d7 added form/control support 2023-02-17 12:37:21 +10:00
d1e586bb39 improve datetime regex and added parseAusDateTime 2023-02-17 12:37:12 +10:00
9e2c7c2565 initial dropdown support 2023-02-15 15:18:10 +10:00
29deea73d4 added number, date and time validation 2023-02-15 13:22:59 +10:00
b1e30a603c added aus format validation and other funcs 2023-02-15 13:22:49 +10:00
afc3c94b04 drop axios/date-fns/fontawesome 2023-02-14 15:01:06 +10:00
ac4d3d8ad0 added sm prefix to classes and recaptcha ack 2023-02-11 17:50:36 +10:00
2b939f417c top margin now handled by SMPage 2023-02-11 17:45:28 +10:00
57236d814d ignore dccache 2023-02-11 13:39:19 +10:00
839eaa6db9 add www subdomain if missing 2023-02-06 14:25:42 +10:00
78ccd558aa added drustcraft notice 2023-02-06 12:43:10 +10:00
a5a9db9669 fix scale data 2023-02-06 10:09:18 +10:00
0b70a52177 fix GDImage raw data 2023-02-06 10:06:37 +10:00
f9105577ce clean up 2023-02-06 09:49:21 +10:00
a7e06bef91 added 2023-02-06 09:49:13 +10:00
0bed3aa096 added messages get function 2023-02-06 09:49:10 +10:00
305c018d39 support keras 2023-02-05 14:21:12 +10:00
9404df9a1d update path 2023-02-05 13:31:49 +10:00
a2894791e2 added keras support 2023-02-05 13:30:06 +10:00
c671fb9bf6 remove ffmpeg 2023-02-05 13:01:01 +10:00
5f22142a6d probe correct file 2023-02-05 12:54:30 +10:00
cc1a389eba use FFMpeg 2023-02-05 12:51:03 +10:00
e6174a4456 update phpunit 2023-02-05 12:50:57 +10:00
145b5559ef use ffmpeg 2023-02-05 12:41:50 +10:00
09751208a1 cleanup 2023-02-05 12:32:46 +10:00
22ff92e3a7 added more outputs 2023-02-05 12:27:40 +10:00
8f7f1a35d5 added half scale 2023-02-05 12:23:27 +10:00
1452d6f340 provide double scale 2023-02-05 12:20:59 +10:00
6080c12a7a set default oem 2023-02-05 12:14:41 +10:00
d16231d338 added additional options 2023-02-05 12:08:45 +10:00
14e2e2da3e fix varible override 2023-02-05 12:00:40 +10:00
0fba7849b4 ocr on greyscale filter 2023-02-05 11:57:10 +10:00
6cf5cd1697 remove not required param 2023-02-05 11:39:31 +10:00
be39577466 added OCR support 2023-02-05 11:35:21 +10:00
fe56acd818 added ffmpeg and tesseract dependencies 2023-02-05 11:35:12 +10:00
e84dfcacd1 better styling between 1024 and 768 2023-02-03 20:53:25 +10:00
e639801e37 margin not padding 2023-02-03 20:24:41 +10:00
636ff8c4a9 cleanup 2023-02-03 20:21:11 +10:00
5da4cca80f fix options 2023-02-03 20:20:52 +10:00
c5cc91b075 added get options 2023-02-03 20:14:01 +10:00
e40a2bad16 log file not plural 2023-02-03 20:13:50 +10:00
4367fa4440 dependency updates 2023-02-03 19:31:29 +10:00
a2332451b0 remove obsolete file 2023-02-03 19:28:49 +10:00
f6377a6f3a remove margin top from h1 2023-02-03 19:28:16 +10:00
ba3846b374 ignore for linting 2023-02-03 19:26:08 +10:00
42651ec256 plural 2023-02-03 11:28:24 +10:00
d248204bf9 add plurals 2023-02-03 11:26:28 +10:00
8b84f1c02c code block should be block 2023-02-03 11:24:53 +10:00
3904fe784e dont show tabs/button if error 2023-02-03 11:24:47 +10:00
e5a68fd805 use correct variables 2023-02-03 11:21:34 +10:00
32d39cdc1c add split logs 2023-02-03 11:17:19 +10:00
9188461b1f length 2023-02-03 11:07:15 +10:00
44f6ef4a0b direct log file 2023-02-03 11:04:31 +10:00
b0ae6b0a3d cleanup 2023-02-03 10:41:31 +10:00
James Collins
b6268b3fab Merge pull request #16 from STEMMechanics/feature/discord-bot-logs
Feature/discord bot logs
2023-02-03 10:28:14 +10:00
ba436e5dcc include log controller 2023-02-03 10:25:43 +10:00
dd01a075d8 discord log view 2023-02-03 10:25:35 +10:00
89ebab5134 remove plural 2023-02-03 10:25:27 +10:00
a135c7e8fd style code block 2023-02-03 10:25:16 +10:00
1f8b83fc8c fix permissions and split lines 2023-02-03 10:25:08 +10:00
c378d683db update dependencies 2023-02-03 09:54:11 +10:00
0d1a0cf130 add discord log module 2023-02-03 09:39:47 +10:00
4ec4b5b10b add log controller 2023-02-03 09:39:37 +10:00
d60383211c rename components to match 2023-02-03 09:39:26 +10:00
900909aa5b finally fix multidates? 2023-02-02 17:42:58 +10:00
e33e8ad6f6 fixed array push 2023-02-02 17:34:53 +10:00
7369eb469e fix formatting 2023-02-02 17:31:40 +10:00
c3ebec38d7 bad variable 2023-02-02 17:29:06 +10:00
7f1d0b127d fix multidate display 2023-02-02 17:26:52 +10:00
cb8dc3cfa5 1 heart 2023-01-30 20:23:25 +10:00
ac68b4856a update actions/checkout to v3 2023-01-30 20:22:42 +10:00
26348d9e19 use latest shivammathur/setup-php 2023-01-30 20:21:58 +10:00
d8805a791e fake vite 2023-01-30 20:20:22 +10:00
8fdc7f8600 uncomment db lines 2023-01-30 20:17:57 +10:00
5681990112 require test completion before deploy 2023-01-30 20:07:54 +10:00
ab36df319b fix composer test 2023-01-30 20:06:07 +10:00
f48704804a fix composer test? 2023-01-30 20:04:15 +10:00
05e9315ef2 2 hearts 2023-01-30 19:52:58 +10:00
James Collins
a885d15341 Create laravel.yml 2023-01-30 19:51:09 +10:00
ad69e5c0e2 package updates 2023-01-30 19:46:13 +10:00
824ab331b4 sort from oldest to newest 2023-01-27 20:11:13 +10:00
1f21e22dce fix timestamp formatting 2023-01-27 10:55:26 +10:00
473 changed files with 19021 additions and 25644 deletions

View File

@@ -38,11 +38,24 @@ MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
AWS_PUBLIC_ACCESS_KEY_ID=
AWS_PUBLIC_SECRET_ACCESS_KEY=
AWS_PUBLIC_DEFAULT_REGION="us-west-002"
AWS_PUBLIC_BUCKET=
AWS_PUBLIC_USE_PATH_STYLE_ENDPOINT=false
AWS_PUBLIC_ENDPOINT=
AWS_PUBLIC_URL=
AWS_PRIVATE_ACCESS_KEY_ID=
AWS_PRIVATE_SECRET_ACCESS_KEY=
AWS_PRIVATE_DEFAULT_REGION="us-west-002"
AWS_PRIVATE_BUCKET=
AWS_PRIVATE_USE_PATH_STYLE_ENDPOINT=false
AWS_PRIVATE_ENDPOINT=
AWS_PRIVATE_URL=
CLOUDFLARE_ZONE_ID=
CLOUDFLARE_API_KEY=
PUSHER_APP_ID=
PUSHER_APP_KEY=

59
.env.testing Normal file
View File

@@ -0,0 +1,59 @@
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
APP_DEBUG=true
APP_URL=http://127.0.0.1
APP_URL_API="${APP_URL}/api/"
LOG_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=sqlite
DB_DATABASE=:memory:
BROADCAST_DRIVER=log
CACHE_DRIVER=array
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=log
MAIL_HOST=null
MAIL_PORT=null
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
CONTACT_ADDRESS="hello@stemmechanics.com.au"
CONTACT_SUBJECT="Contact from website"
STORAGE_LOCAL_URL="${APP_URL}/api/media/%ID%/download"
STORAGE_PUBLIC_URL="${APP_URL}/uploads/%NAME%"

View File

@@ -1,21 +0,0 @@
module.exports = {
env: {
node: true,
},
extends: [
"eslint:recommended",
"plugin:vue/vue3-recommended",
"prettier",
"plugin:jsdoc/recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {
"vue/multi-word-component-names": "off",
indent: ["error", 4],
},
plugins: ["jsdoc", "@typescript-eslint"],
parser: "vue-eslint-parser",
parserOptions: {
parser: "@typescript-eslint/parser",
},
};

View File

@@ -0,0 +1,57 @@
name: Laravel
on:
push:
branches: ["main"]
pull_request:
jobs:
laravel-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: "8.4"
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install PHP Dependencies
run: composer install -q --no-interaction --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Create Database
run: |
mkdir -p database
touch database/database.sqlite
- name: Install Node.js
uses: actions/setup-node@v2
with:
node-version: "20"
- name: Install Node dependencies
run: npm ci
- name: Build frontend
run: npm run build
- name: Run migrations
env:
DB_CONNECTION: sqlite
DB_DATABASE: database/database.sqlite
run: php artisan migrate --force
- name: Run PHPUnit
env:
DB_CONNECTION: sqlite
DB_DATABASE: database/database.sqlite
run: vendor/bin/phpunit

View File

@@ -0,0 +1,24 @@
name: renovate
on:
workflow_dispatch:
schedule:
- cron: "@daily"
push:
branches:
- main
jobs:
renovate:
runs-on: ubuntu-latest
container: ghcr.io/renovatebot/renovate:43.2.3
steps:
- uses: actions/checkout@v4
- run: renovate
working-directory: ${{ gitea.workspace }}
env:
RENOVATE_CONFIG_FILE: "renovate-config.json"
LOG_LEVEL: "info"
RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }}

28
.gitignore vendored
View File

@@ -15,7 +15,7 @@ app/storage/
# Laravel 5 & Lumen specific
public/storage
public/hot
public/hot*
# Laravel 5 & Lumen specific with changed public path
public_html/storage
@@ -26,7 +26,7 @@ storage/*.key
Homestead.yaml
Homestead.json
/.vagrant
.phpunit.result.cache
/.phpunit.cache
### macOS ###
# General
@@ -237,4 +237,26 @@ dist/
### This Project ###
/public/uploads
/public/build
*.key
*.key
### TinyMCE ###
/public/tinymce
!/public/tinymce/skins/ui/stemmech/
### Synk ###
.dccache
### TempCodeRunner ###
tempCodeRunnerFile.*
### PHPUnit ###
.phpunit.result.cache
.gitignore
### Codesniffer ###
phpcs.phar
phpcbf.phar
### PHPStorm ###
.idea/

View File

@@ -1,4 +0,0 @@
{
"bracketSameLine": true,
"tabWidth": 4
}

18
.vscode/settings.json vendored
View File

@@ -1,18 +0,0 @@
{
"editor.formatOnType": true,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[php]": {
// "editor.defaultFormatter": "bmewburn.vscode-intelephense-client"
"editor.defaultFormatter": "wongjn.php-sniffer"
}
}

View File

@@ -1,7 +1,7 @@
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
<p align="center">
<a href="https://travis-ci.org/laravel/framework"><img src="https://travis-ci.org/laravel/framework.svg" alt="Build Status"></a>
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
@@ -27,27 +27,45 @@ Laravel has the most extensive and thorough [documentation](https://laravel.com/
You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch.
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
## Laravel Sponsors
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell).
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
### Premium Partners
- **[Vehikl](https://vehikl.com/)**
- **[Tighten Co.](https://tighten.co)**
- **[WebReinvent](https://webreinvent.com/)**
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
- **[64 Robots](https://64robots.com)**
- **[Cubet Techno Labs](https://cubettech.com)**
- **[Cyber-Duck](https://cyber-duck.co.uk)**
- **[Many](https://www.many.co.uk)**
- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)**
- **[DevSquad](https://devsquad.com)**
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
- **[Cyber-Duck](https://cyber-duck.co.uk)**
- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
- **[Jump24](https://jump24.co.uk)**
- **[Redberry](https://redberry.international/laravel/)**
- **[Active Logic](https://activelogic.com)**
- **[byte5](https://byte5.de)**
- **[OP.GG](https://op.gg)**
- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)**
- **[Lendio](https://lendio.com)**
## Code Style
This project uses [Laravel Pint](https://laravel.com/docs/pint) for code styling. Pint is an opinionated PHP code style fixer for minimalists, built on top of PHP-CS-Fixer.
To automatically fix code style issues, run:
```bash
composer pint
```
To check for code style issues without fixing them:
```bash
composer pint-test
```
The code style configuration can be found in `pint.json`.
## Contributing

7
api.http Normal file
View File

@@ -0,0 +1,7 @@
### Get media items
GET http://127.0.0.1:8001/media
Accept: application/json
### Get media item
GET http://127.0.0.1:8001/media/SC-After-Dark.png
Accept: application/json

View File

@@ -1,32 +0,0 @@
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule The schedule.
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
}

View File

@@ -1,50 +0,0 @@
<?php
namespace App\Enum;
use ReflectionClass;
class Enum
{
/**
* Caches reflections of enum subclasses.
*
* @var array<class-string<static>, ReflectionClass<static>>
*/
public static $reflectionCache = [];
/**
* Returns a reflection of the enum subclass.
*
* @return ReflectionClass<static>
*/
public static function getReflection(): ReflectionClass
{
$class = static::class;
return static::$reflectionCache[$class] ??= new ReflectionClass($class);
}
/**
* Returns the constants in the enum subclass
*
* @return array<static>
*/
public static function getConstants(): array
{
return static::getReflection()->getConstants();
}
/**
* Returns the constants values in the enum subclass
*
* @return array<static>
*/
public static function getConstantValues(): array
{
return array_values(static::getReflection()->getConstants());
}
}

View File

@@ -1,165 +0,0 @@
<?php
namespace App\Enum;
class HttpResponseCodes extends Enum
{
public const HTTP_CONTINUE = 100;
public const HTTP_SWITCHING_PROTOCOLS = 101;
public const HTTP_PROCESSING = 102;
public const HTTP_OK = 200;
public const HTTP_CREATED = 201;
public const HTTP_ACCEPTED = 202;
public const HTTP_NON_AUTHORITATIVE_INFORMATION = 203;
public const HTTP_NO_CONTENT = 204;
public const HTTP_RESET_CONTENT = 205;
public const HTTP_PARTIAL_CONTENT = 206;
public const HTTP_MULTI_STATUS = 207;
public const HTTP_ALREADY_REPORTED = 208;
public const HTTP_IM_USED = 226;
public const HTTP_MULTIPLE_CHOICES = 300;
public const HTTP_MOVED_PERMANENTLY = 301;
public const HTTP_FOUND = 302;
public const HTTP_SEE_OTHER = 303;
public const HTTP_NOT_MODIFIED = 304;
public const HTTP_USE_PROXY = 305;
public const HTTP_RESERVED = 306;
public const HTTP_TEMPORARY_REDIRECT = 307;
public const HTTP_PERMANENTLY_REDIRECT = 308;
public const HTTP_BAD_REQUEST = 400;
public const HTTP_UNAUTHORIZED = 401;
public const HTTP_PAYMENT_REQUIRED = 402;
public const HTTP_FORBIDDEN = 403;
public const HTTP_NOT_FOUND = 404;
public const HTTP_METHOD_NOT_ALLOWED = 405;
public const HTTP_NOT_ACCEPTABLE = 406;
public const HTTP_PROXY_AUTHENTICATION_REQUIRED = 407;
public const HTTP_REQUEST_TIMEOUT = 408;
public const HTTP_CONFLICT = 409;
public const HTTP_GONE = 410;
public const HTTP_LENGTH_REQUIRED = 411;
public const HTTP_PRECONDITION_FAILED = 412;
public const HTTP_REQUEST_ENTITY_TOO_LARGE = 413;
public const HTTP_REQUEST_URI_TOO_LONG = 414;
public const HTTP_UNSUPPORTED_MEDIA_TYPE = 415;
public const HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
public const HTTP_EXPECTATION_FAILED = 417;
public const HTTP_I_AM_A_TEAPOT = 418;
public const HTTP_MISDIRECTED_REQUEST = 421;
public const HTTP_UNPROCESSABLE_ENTITY = 422;
public const HTTP_LOCKED = 423;
public const HTTP_FAILED_DEPENDENCY = 424;
public const HTTP_RESERVED_FOR_WEBDAV_ADVANCED_COLLECTIONS_EXPIRED_PROPOSAL = 425;
public const HTTP_UPGRADE_REQUIRED = 426;
public const HTTP_PRECONDITION_REQUIRED = 428;
public const HTTP_TOO_MANY_REQUESTS = 429;
public const HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
public const HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451;
public const HTTP_INTERNAL_SERVER_ERROR = 500;
public const HTTP_NOT_IMPLEMENTED = 501;
public const HTTP_BAD_GATEWAY = 502;
public const HTTP_SERVICE_UNAVAILABLE = 503;
public const HTTP_GATEWAY_TIMEOUT = 504;
public const HTTP_VERSION_NOT_SUPPORTED = 505;
public const HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL = 506;
public const HTTP_INSUFFICIENT_STORAGE = 507;
public const HTTP_LOOP_DETECTED = 508;
public const HTTP_NOT_EXTENDED = 510;
public const HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511;
/**
* HTTP Response Messages
* @var string[]
*/
public static $statusTexts = [
100 => 'Continue.',
101 => 'Switching Protocols.',
102 => 'Processing.',
// RFC2518
200 => 'OK.',
201 => 'Created.',
202 => 'Accepted.',
203 => 'Non-Authoritative Information.',
204 => 'No Content.',
205 => 'Reset Content.',
206 => 'Partial Content.',
207 => 'Multi-Status.',
// RFC4918
208 => 'Already Reported.',
// RFC5842
226 => 'IM Used.',
// RFC3229
300 => 'Multiple Choices.',
301 => 'Moved Permanently.',
302 => 'Found.',
303 => 'See Other.',
304 => 'Not Modified.',
305 => 'Use Proxy.',
307 => 'Temporary Redirect.',
308 => 'Permanent Redirect.',
// RFC7238
400 => 'Bad Request.',
401 => 'Unauthorized.',
402 => 'Payment Required.',
403 => 'Forbidden.',
404 => 'Not Found.',
405 => 'Method Not Allowed.',
406 => 'Not Acceptable.',
407 => 'Proxy Authentication Required.',
408 => 'Request Timeout.',
409 => 'Conflict.',
410 => 'Gone.',
411 => 'Length Required.',
412 => 'Precondition Failed.',
413 => 'Payload Too Large.',
414 => 'URI Too Long.',
415 => 'Unsupported Media Type.',
416 => 'Range Not Satisfiable.',
417 => 'Expectation Failed.',
418 => 'I\'m a teapot.',
// RFC2324
421 => 'Misdirected Request.',
// RFC7540
422 => 'Unprocessable Entity.',
// RFC4918
423 => 'Locked.',
// RFC4918
424 => 'Failed Dependency.',
// RFC4918
425 => 'Reserved for WebDAV advanced collections expired proposal.',
// RFC2817
426 => 'Upgrade Required.',
// RFC2817
428 => 'Precondition Required.',
// RFC6585
429 => 'Too Many Requests.',
// RFC6585
431 => 'Request Header Fields Too Large.',
// RFC6585
451 => 'Unavailable For Legal Reasons.',
// RFC7725
500 => 'Internal Server Error.',
501 => 'Not Implemented.',
502 => 'Bad Gateway.',
503 => 'Service Unavailable.',
504 => 'Gateway Timeout.',
505 => 'HTTP Version Not Supported.',
506 => 'Variant Also Negotiates.',
// RFC2295
507 => 'Insufficient Storage.',
// RFC4918
508 => 'Loop Detected.',
// RFC5842
510 => 'Not Extended.',
// RFC2774
511 => 'Network Authentication Required.',
// RFC6585
];
}

View File

@@ -0,0 +1,37 @@
<?php
namespace App\Exceptions;
use Exception;
class FileInvalidException extends Exception
{
/**
* The error code of the exception.
*
* @var int
*/
protected $code;
/**
* The error message of the exception.
*
* @var string
*/
protected $message;
/**
* Create a new exception instance.
*
* @param string $message
* @param int $code
* @return void
*/
public function __construct(string $message, int $code = 0)
{
$this->message = $message;
$this->code = $code;
parent::__construct($message, $code);
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace App\Exceptions;
use Exception;
class FileTooLargeException extends Exception
{
/**
* The error code of the exception.
*
* @var int
*/
protected $code;
/**
* The error message of the exception.
*
* @var string
*/
protected $message;
/**
* Create a new exception instance.
*
* @param string $message
* @param int $code
* @return void
*/
public function __construct(string $message, int $code = 0)
{
$this->message = $message;
$this->code = $code;
parent::__construct($message, $code);
}
}

View File

@@ -1,85 +0,0 @@
<?php
namespace App\Exceptions;
use App\Enum\HttpResponseCodes;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Throwable;
use PDOException;
use Symfony\Component\HttpKernel\Exception\HttpException;
class Handler extends ExceptionHandler
{
/**
* A list of exception types with their corresponding custom log levels.
*
* @var array<class-string<\Throwable>, \Psr\Log\LogLevel::*>
*/
protected $levels = [
//
];
/**
* A list of the exception types that are not reported.
*
* @var array<int, class-string<\Throwable>>
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed to the session on validation exceptions.
*
* @var array<int, string>
*/
protected $dontFlash = [
'current_password',
'password',
'password_confirmation',
];
/**
* Register the exception handling callbacks for the application.
*
* @return void
*/
public function register()
{
// $this->renderable(function (HttpException $e, $request) {
// if ($request->is('api/*')) {
// $message = $e->getMessage();
// if ($message === '') {
// $message = HttpResponseCodes::$statusTexts[$e->getStatusCode()];
// }
// return response()->json([
// 'message' => $message
// ], $e->getStatusCode());
// }
// });
$this->renderable(function (NotFoundHttpException $e, $request) {
if ($request->is('api/*') === true) {
return response()->json([
'message' => 'Resource not found'
], 404);
}
});
$this->renderable(function (PDOException $e, $request) {
if ($request->is('api/*') === true) {
return response()->json([
'message' => 'The server is currently unavailable'
], 503);
}
});
$this->reportable(function (Throwable $e) {
//
});
}
}

View File

@@ -1,29 +0,0 @@
<?php
namespace App\Filters;
use Illuminate\Support\Collection;
class AuditFilter
{
// public static function filter(Collection $collection): array
// {
// $collection->transform(function ($item, $key) {
// $row = $item->toArray();
// unset($row['user_type']);
// unset($row['auditable_type']);
// if (array_key_exists('password', $row['old_values'])) {
// $row['old_values']['password'] = '###';
// }
// if (array_key_exists('password', $row['new_values'])) {
// $row['new_values']['password'] = '###';
// }
// return $row;
// });
// return $collection->toArray();
// }
}

View File

@@ -1,65 +0,0 @@
<?php
namespace App\Filters;
use App\Models\Event;
use Carbon\Carbon;
use Illuminate\Contracts\Database\Eloquent\Builder;
class EventFilter extends FilterAbstract
{
/**
* Class name of Model
* @var string
*/
protected $class = '\App\Models\Event';
/**
* Default column sorting (prefix with - for descending)
*
* @var string|array
*/
protected $defaultSort = '-start_at';
/**
* Filter columns for q param
*
* @var string|array
*/
protected $q = [
'_' => ['title','content'],
'location' => ['location','address'],
];
/**
* Determine if the user can view the media model
*
* @param Event $event The event instance.
* @param mixed $user The current logged in user.
* @return boolean
*/
protected function viewable(Event $event, mixed $user)
{
return (strcasecmp($event->status, 'draft') !== 0 && $event->publish_at <= now())
|| $user?->hasPermission('admin/events') === true;
}
/**
* Determine the prebuild query to limit results
*
* @param EloquentBuilder $builder The builder instance.
* @param mixed $user The current logged in user.
* @return EloquentBuilder|null
*/
protected function prebuild(Builder $builder, mixed $user)
{
if (
$user?->hasPermission('admin/events') !== true
) {
return $builder
->where('status', '!=', 'draft')
->where('publish_at', '<=', now());
}
}
}

View File

@@ -1,596 +0,0 @@
<?php
namespace App\Filters;
use Doctrine\DBAL\Exception;
use Doctrine\DBAL\Schema\SchemaException;
use ReflectionClass;
use RuntimeException;
use InvalidArgumentException;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Schema;
abstract class FilterAbstract
{
/**
* The model class to filter
*
* @var mixed
*/
protected $class;
/**
* The filter request
*
* @var \Illuminate\Http\Request
*/
protected $request;
/**
* The models table
*
* @var string
*/
protected $table = '';
/**
* Array of columns that can be filtered by the api
*
* @var array
*/
protected $filterable = null;
/**
* Default column sorting (prefix with - for descending)
*
* @var string|array
*/
protected $defaultSort = 'id';
/**
* Default collection result limit
*
* @var integer
*/
protected $defaultLimit = 50;
/**
* Found records from query
* @var integer
*/
protected $foundTotal = 0;
/**
* Maximum collection result limit
*
* @var integer
*/
protected $maxLimit = 100;
/**
* Only return these attributes in the results
* (minus any excludes)
*
* @var array
*/
protected $only = [];
/**
* Exclude these attributes from the results
*
* @var array
*/
protected $exclude = [];
/**
* Filter columns for q param
*
* @var string|array
*/
protected $q = [];
/**
* Filter constructor.
*
* @param \Illuminate\Http\Request $request Request object.
*/
public function __construct(Request $request)
{
$this->request = $request;
}
/**
* Only include the specified attributes in the results.
*
* @param string|array $only Only return these attributes.
* @return void
*/
public function only(mixed $only)
{
if (is_array($only) === true) {
$this->only = $only;
} else {
$this->only = [$only];
}
}
/**
* Exclude the specified attributes in the results.
*
* @param string|array $exclude Attributes to exclude.
* @return void
*/
public function exclude(mixed $exclude)
{
if (is_array($exclude) === true) {
$this->exclude = $exclude;
} else {
$this->exclude = [$exclude];
}
}
/**
* Check if the model is viewable by the user
*
* @param mixed $model Model instance.
* @param mixed $user Current user.
* @return boolean
*/
// protected function viewable(mixed $model, mixed $user)
// {
// return true;
// }
/**
* Prepend action to the builder to limit the results
*
* @param Builder $builder Builder instance.
* @param mixed $user Current user.
* @return Builder|null
*/
// protected function prebuild(Builder $builder, mixed $user)
// {
// return $builder;
// }
/**
* Return an array of attributes visible in the results
*
* @param array $attributes Attributes currently visible.
* @param User|null $user Current logged in user or null.
* @return mixed
*/
protected function seeAttributes(array $attributes, mixed $user)
{
return $attributes;
}
/**
* Apply all the requested filters if available.
*
* @param Model $model Model object to filter. If null create query.
* @return Builder|Model
*/
public function filter(Model $model = null)
{
$this->foundTotal = 0;
$builder = $this->class::query();
/* Get the related model */
$classModel = $model;
if ($model === null) {
$classModel = $builder->getModel();
}
/* Get table name */
if ($this->table === '') {
if ($model === null) {
$this->table = $classModel->getTable();
} else {
$this->table = $model->getTable();
}
}
/* Run query prebuilder or viewable */
if ($model === null) {
if (method_exists($this, 'prebuild') === true) {
$prebuilder = $this->prebuild($builder, $this->request->user());
if ($prebuilder instanceof Builder) {
$builder = $prebuilder;
}
}
} else {
if (method_exists($this, 'viewable') === true) {
if ($this->viewable($model, $this->request->user()) === false) {
return null;
}
}
}
/* Get attributes from table or use 'only' */
$attributes = [];
if (is_array($this->only) === true && count($this->only) > 0) {
$attributes = $this->only;
} else {
$attributes = Schema::getColumnListing($this->table);
}
/* Run attribute modifiers*/
$modifiedAttribs = $this->seeAttributes($attributes, $this->request->user());
if (is_array($modifiedAttribs) === true) {
$attributes = $modifiedAttribs;
}
foreach ($attributes as $key => $column) {
$method = 'see' . Str::studly($column) . 'Attribute';
if (
method_exists($this, $method) === true &&
$this->$method($this->request->user()) === false
) {
unset($attributes[$key]);
}
}
if (is_array($this->exclude) === true && count($this->exclude) > 0) {
$attributes = array_diff($attributes, $this->exclude);
}
/* Setup attributes and appends */
// $attributesAppends = array_merge($attributes, $classModel->getAppends());
/* Apply ?fields= request to attributes */
if ($this->request->has('fields') === true) {
$attributes = array_intersect($attributes, explode(',', $this->request->fields));
}
/* Hide remaining attributes in model (if present) and return */
if ($model !== null) {
// TODO: Also show $this->request->fields that are appends
$model->makeHidden(array_diff(Schema::getColumnListing($this->table), $attributes));
return $model;
}
/* Are there attributes left? */
if (count($attributes) === 0) {
$this->foundTotal = 0;
return new Collection();
}
/* apply select! */
$builder->select($attributes);
/* Setup filterables if not present */
if ($this->filterable === null) {
$this->filterable = $attributes;
}
/* Filter values */
$filterRequest = array_filter($this->request->only(array_intersect($attributes, $this->filterable)));
$this->builderArrayFilter($builder, $filterRequest);
if (is_array($this->q) === true && count($this->q) > 0) {
$qQueries = [];
foreach ($this->q as $key => $value) {
if (is_array($value) === true) {
$qKey = $key === '_' ? '' : $key;
foreach ($value as $subvalue) {
$qQueries[$key][$subvalue] = $this->request->get("q" . $qKey);
}
} elseif ($this->request->has("q") === true) {
$qQueries['_'][$value] = $this->request->get("q");
}
}
foreach ($qQueries as $key => $value) {
$builder->where(function ($query) use ($value) {
$this->builderArrayFilter($query, $value, 'or');
});
}
}//end if
/* Apply sorting */
$sortList = $this->defaultSort;
if ($this->request->has('sort') === true) {
$sortList = explode(',', $this->request->sort);
}
/* Transform sort list to array */
if (is_array($sortList) === false) {
if (strlen($sortList) > 0) {
$sortList = [$sortList];
} else {
$sortList = [];
}
}
/* Remove non-viewable attributes from sort list */
if (count($sortList) > 0) {
$sortList = array_filter($sortList, function ($item) use ($attributes) {
$parsedItem = $item;
if (substr($parsedItem, 0, 1) === '-') {
$parsedItem = substr($parsedItem, 1);
}
return in_array($parsedItem, $attributes);
});
}
/* Do we have any sort element left? */
if (count($sortList) > 0) {
foreach ($sortList as $sortAttribute) {
$prefix = substr($sortAttribute, 0, 1);
$direction = 'asc';
if (in_array($prefix, ['-', '+']) === true) {
$sortAttribute = substr($sortAttribute, 1);
if ($prefix === '-') {
$direction = 'desc';
}
}
$builder->orderBy($sortAttribute, $direction);
}//end foreach
}//end if
/* save found count */
$this->foundTotal = $builder->count();
/* Apply result limit */
$limit = $this->defaultLimit;
if ($this->request->has('limit') === true) {
$limit = intval($this->request->limit);
}
if ($limit < 1) {
$limit = 1;
}
if ($limit > $this->maxLimit && $this->maxLimit !== 0) {
$limit = $this->maxLimit;
}
$builder->limit($limit);
/* Apply page offset */
if ($this->request->has('page') === true) {
$page = intval($this->request->page);
if ($page < 1) {
$page = 1;
}
$builder->offset((intval($this->request->page) - 1) * $limit);
}
/* run spot run */
$collection = $builder->get();
return $collection;
}
/**
* Filter content based on the filterRequest
* @param mixed $builder Builder object
* @param array $filterRequest Filter key/value
* @param string $defaultBoolean Default where boolean
* @return void
*/
protected function builderArrayFilter(mixed $builder, array $filterRequest, string $defaultBoolean = 'and')
{
foreach ($filterRequest as $filterAttribute => $filterValue) {
$tags = [];
$boolean = $defaultBoolean;
$matches = preg_split('/(?<!\\\\)"/', $filterValue, -1, PREG_SPLIT_OFFSET_CAPTURE);
foreach ($matches as $idx => $match_info) {
if (($idx % 2) === true) {
if (substr($filterValue, ($match_info[1] - 2), 1) === ',') {
$tags[] = ['operator' => '', 'tag' => stripslashes(trim($match_info[0]))];
} else {
$tags[(count($tags) - 1)]['tag'] .= stripslashes(trim($match_info[0]));
}
} else {
$innerTags = [$match_info[0]];
if (strpos($match_info[0], ',') !== false) {
$innerTags = preg_split('/(?<!\\\\),/', $match_info[0]);
}
foreach ($innerTags as $tag) {
$tag = stripslashes(trim($tag));
if (strlen($tag) > 0) {
$operator = '=';
$single = substr($tag, 0, 1);
$double = substr($tag . ' ', 0, 2); // add empty space incase len $tag < 2
// check for operators at start
if (in_array($double, ['!=', '<>', '><', '>=', '<=', '=>', '=<']) === true) {
if ($double === '<>' || $double === '><') {
$double = '!=';
} elseif ($double === '=>') {
$double = '>=';
} elseif ($double === '=<') {
$double == '>=';
}
$operator = $double;
$tag = substr($tag, 2);
} else {
if (in_array($single, ['=', '!', '>', '<', '~', '%']) === true) {
if ($single === '=') {
$single = '=='; // a single '=' is actually a double '=='
}
$operator = $single;
$tag = substr($tag, 1);
}
}//end if
$tags[] = ['operator' => $operator, 'tag' => $tag];
}//end if
}//end foreach
}//end if
}//end foreach
if (count($tags) > 1) {
$boolean = 'or';
}
foreach ($tags as $tag_data) {
$operator = $tag_data['operator'];
$value = $tag_data['tag'];
$table = $this->table;
$column = $filterAttribute;
if (($dotPos = strpos($filterAttribute, '.')) !== false) {
$table = substr($filterAttribute, 0, $dotPos);
$column = substr($filterAttribute, ($dotPos + 1));
}
$columnType = DB::getSchemaBuilder()->getColumnType($table, $column);
if (
in_array($columnType, ['tinyint', 'smallint', 'mediumint', 'int', 'integer', 'bigint',
'decimal', 'float', 'double', 'real', 'double precision'
]) === true
) {
if (in_array($operator, ['=', '>', '<', '>=', '<=', '%', '!']) === false) {
continue;
}
$columnType = 'numeric';
} elseif (in_array($columnType, ['date', 'time', 'datetime', 'timestamp', 'year']) === true) {
if (in_array($operator, ['=', '>', '<', '>=', '<=', '!']) === false) {
continue;
}
$columnType = 'datetime';
} elseif (
in_array($columnType, ['string', 'char', 'varchar', 'timeblob', 'blob', 'mediumblob',
'longblob', 'tinytext', 'text', 'mediumtext', 'longtext', 'enum'
]) === true
) {
if (in_array($operator, ['=', '==', '!', '!=', '~']) === false) {
continue;
}
$columnType = 'text';
if ($value === "''" || $value === '""') {
$value = '';
} elseif (strcasecmp($value, 'null') !== 0) {
if ($operator === '!') {
$operator = 'NOT LIKE';
$value = '%' . $value . '%';
} elseif ($operator === '=') {
$operator = 'LIKE';
$value = '%' . $value . '%';
} elseif ($operator === '~') {
$operator = 'SOUNDS LIKE';
} elseif ($operator === '==') {
$operator = '=';
}
}
} elseif ($columnType === 'boolean') {
if (in_array($operator, ['=', '!']) === false) {
continue;
}
if (strtolower($value) === 'true') {
$value = 1;
} elseif (strtolower($value) === 'false') {
$value = 0;
}
}//end if
$betweenSeperator = strpos($value, '<>');
if (
$operator === '=' && $betweenSeperator !== false && in_array($columnType, ['numeric',
'datetime'
]) === true
) {
$value = explode('<>', $value);
$operator = '<>';
}
if ($operator !== '') {
$this->builderWhere($builder, $table, $column, $operator, $value, $boolean);
}
}//end foreach
}//end foreach
}
/**
* Insert a where statement into the builder, taking the filter map into consideration
*
* @param Builder $builder Builder instance.
* @param string $table Table name.
* @param string $column Column name.
* @param string $operator Where operator.
* @param mixed $value Value to test.
* @param string $boolean Use Or comparison.
* @return void
* @throws RuntimeException Error applying statement.
* @throws InvalidArgumentException Error applying statement.
*/
protected function builderWhere(
Builder &$builder,
string $table,
string $column,
string $operator,
mixed $value,
string $boolean
) {
if (
(is_string($value) === true && $operator !== '<>') || (is_array($value) === true && count($value) === 2 &&
$operator === '<>')
) {
if ($table !== '' && $table !== $this->table) {
$builder->whereHas($table, function ($query) use ($column, $operator, $value, $boolean) {
if ($operator !== '<>') {
if (strcasecmp($value, 'null') === 0) {
if ($operator === '!') {
$query->whereNotNull($column, $boolean);
} else {
$query->whereNull($column, $boolean);
}
} else {
$query->where($column, $operator, $value, $boolean);
}
} else {
$query->whereBetween($column, $value, $boolean);
}
});
} else {
if ($operator !== '<>') {
if (strcasecmp($value, 'null') === 0) {
if ($operator === '!') {
$builder->whereNotNull($column, $boolean);
} else {
$builder->whereNull($column, $boolean);
}
} else {
$builder->where($column, $operator, $value, $boolean);
}
} else {
$builder->whereBetween($column, $value, $boolean);
}
}//end if
}//end if
}
/**
* Return the found total of items
* @return integer
*/
public function foundTotal()
{
return $this->foundTotal;
}
}

View File

@@ -1,58 +0,0 @@
<?php
namespace App\Filters;
use App\Models\Media;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
class MediaFilter extends FilterAbstract
{
/**
* Class name of Model
* @var string
*/
protected $class = '\App\Models\Media';
/**
* Determine if the user can view the media model
*
* @param Media $media The media instance.
* @param mixed $user The current logged in user.
* @return boolean
*/
protected function viewable(Media $media, mixed $user)
{
if (empty($media->permission) === false) {
return ($user?->hasPermission('admin/media') || $user?->hasPermission($media->permission));
}
return true;
}
/**
* Determine the prebuild query to limit results
*
* @param EloquentBuilder $builder The builder instance.
* @param mixed $user The current logged in user.
* @return EloquentBuilder|null
*/
protected function prebuild(Builder $builder, mixed $user)
{
if ($user === null) {
return $builder->whereNull('permission');
}
}
/**
* Show the permission attribute in the results
*
* @param User|null $user Current logged in user or null.
* @return boolean
*/
protected function seePermissionAttribute(mixed $user)
{
return ($user?->hasPermission('admin/media'));
}
}

View File

@@ -1,54 +0,0 @@
<?php
namespace App\Filters;
use App\Models\Post;
use Carbon\Carbon;
use Illuminate\Contracts\Database\Eloquent\Builder;
class PostFilter extends FilterAbstract
{
/**
* Class name of Model
* @var string
*/
protected $class = '\App\Models\Post';
/**
* Default column sorting (prefix with - for descending)
*
* @var string|array
*/
protected $defaultSort = '-publish_at';
/**
* Determine if the user can view the media model
*
* @param Post $post The post instance.
* @param mixed $user The current logged in user.
* @return boolean
*/
protected function viewable(Post $post, mixed $user)
{
if ($user?->hasPermission('admin/posts') !== true) {
return ($post->publish_at <= now());
}
return true;
}
/**
* Determine the prebuild query to limit results
*
* @param EloquentBuilder $builder The builder instance.
* @param mixed $user The current logged in user.
* @return EloquentBuilder|null
*/
protected function prebuild(Builder $builder, mixed $user)
{
if ($user?->hasPermission('admin/posts') !== true) {
return $builder->where('publish_at', '<=', Carbon::now());
}
}
}

View File

@@ -1,30 +0,0 @@
<?php
namespace App\Filters;
use App\Models\Subscriber;
class SubscriptionFilter extends FilterAbstract
{
/**
* The model class to filter
*
* @var mixed
*/
protected $class = '\App\Models\Subscription';
/**
* Return an array of attributes visible in the results
*
* @param array $attributes Attributes currently visible.
* @param User|null $user Current logged in user or null.
* @return mixed
*/
protected function seeAttributes(array $attributes, mixed $user)
{
if ($user?->hasPermission('admin/users') !== true) {
return ['id', 'email', 'confirmed_at'];
}
}
}

View File

@@ -1,30 +0,0 @@
<?php
namespace App\Filters;
use App\Models\User;
class UserFilter extends FilterAbstract
{
/**
* The model class to filter
*
* @var mixed
*/
protected $class = '\App\Models\User';
/**
* Return an array of attributes visible in the results
*
* @param array $attributes Attributes currently visible.
* @param User|null $user Current logged in user or null.
* @return mixed
*/
protected function seeAttributes(array $attributes, mixed $user)
{
if ($user?->hasPermission('admin/users') !== true) {
return ['id', 'username'];
}
}
}

181
app/Helpers.php Normal file
View File

@@ -0,0 +1,181 @@
<?php
namespace App;
use DateTime;
use Illuminate\Support\Facades\Log;
class Helpers
{
/**
* Get the maximum upload size in bytes.
*/
public static function getMaxUploadSize(): int
{
return min(
self::stringToBytes(ini_get('post_max_size')),
self::stringToBytes(ini_get('upload_max_filesize'))
);
}
public static function stringToBytes(string $val): int
{
if (empty($val)) {
$val = 0;
}
$val = trim($val);
$last = strtolower($val[strlen($val) - 1]);
$val = floatval($val);
switch ($last) {
case 'g':
$val *= (1024 * 1024 * 1024); //1073741824
break;
case 'm':
$val *= (1024 * 1024); //1048576
break;
case 'k':
$val *= 1024;
break;
}
return $val;
}
public static function bytesToString(int|float|string $bytes): string
{
if (!is_numeric($bytes)) {
return '0 bytes';
}
$units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
for ($i = 0; $bytes > 1024; $i++) {
$bytes /= 1024;
}
return round($bytes, 2) . ' ' . $units[$i];
}
public static function arrayToString(array $array, string $separator = ','): string
{
return implode($separator, array_map(function ($item) use ($separator) {
if (str_contains($item, $separator)) {
return '"' . str_replace('"', '\\"', $item) . '"';
} else {
return $item;
}
}, $array));
}
public static function stringToArray(string $string, string $separator = ','): array
{
return array_map(function ($item) {
// Remove quotes and unescape any escaped quotes within the string
return str_replace('\\"', '"', trim($item, '"'));
}, explode($separator, $string));
}
public static function timestampNoSeconds(string $timestamp): string
{
if(empty($timestamp)) {
return '';
}
$datetime = new DateTime($timestamp);
return $datetime->format('Y-m-d\TH:i');
}
public static function isUnderAge(mixed $ages): bool
{
if(!is_string($ages)) {
return true;
}
preg_match('/\d+/', $ages, $matches);
if (empty($matches)) {
return true;
}
$firstNumber = $matches[0];
return ($firstNumber <= 8);
}
public static function createTimeDurationStr(string $startStr, string $endStr): array
{
try {
$start = new DateTime($startStr);
$end = new DateTime($endStr);
if ($start->format('Y-m-d') === $end->format('Y-m-d')) {
return [
$start->format('l j M Y'),
$start->format('g:i a') . ' - ' . $end->format('g:i a')
];
} else {
return [
$start->format('D j/m/Y') . ' - ' . $end->format('D j/m/Y')
];
}
} catch(\Exception $e) {
return ['Error parsing date'];
}
}
public static function matchesMimeType(string $mimeType, string|array $patterns): bool
{
if (is_string($patterns)) {
$patterns = [$patterns];
}
foreach ($patterns as $pattern) {
$pattern = str_replace('\*', '.*', preg_quote($pattern, '/'));
$regex = '/^' . $pattern . '$/';
if (preg_match($regex, $mimeType) === 1) {
return true;
}
}
return false;
}
public static function findMatchingMimeTypeKey(string $mimeType, array $patterns): string|bool
{
$match = '';
foreach ($patterns as $key => $value) {
$keys = explode(',', $key);
foreach($keys as $key) {
$pattern = str_replace('\*', '.*', preg_quote($key, '/'));
$regex = '/^' . $pattern . '$/';
if (preg_match($regex, $mimeType) === 1) {
if($match !== $mimeType) {
$match = $key;
}
}
}
}
if($match !== '') {
return $match;
}
return false;
}
public static function cleanFileName(string $name): string
{
$name = strtolower($name);
$name = mb_ereg_replace('/^\.+/', '', $name);
$name = mb_ereg_replace("([\s_])", '-', $name);
$name = mb_ereg_replace("([^\w\s\d\-_.])", '', $name);
$name = mb_ereg_replace("([\.]{2,})", '', $name);
$name = mb_ereg_replace("([\-]{2,})", '-', $name);
return $name;
}
public static function filenameToTitle(string $filename): string
{
$title = pathinfo($filename, PATHINFO_FILENAME);
$title = str_replace(['-', '_', '.'], ' ', $title);
$title = ucwords($title);
return $title;
}
}

View File

@@ -0,0 +1,240 @@
<?php
namespace App\Http\Controllers;
use App\Helpers;
use App\Jobs\SendEmail;
use App\Mail\UserEmailUpdateRequest;
use App\Models\User;
use App\Providers\QRCodeProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use RobThree\Auth\Algorithm;
use RobThree\Auth\TwoFactorAuth;
class AccountController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Display the specified resource.
*/
public function show(User $user)
{
return view('account', compact('user'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request)
{
$user = auth()->user();
$validator = Validator::make($request->all(), [
'firstname' => 'required',
'surname' => 'required',
'email' => ['required', 'email', 'unique:users,email,' . $user->id],
'phone' => 'required',
'shipping_address' => 'required_with:shipping_city,shipping_postcode,shipping_country,shipping_state',
'shipping_city' => 'required_with:shipping_address,shipping_postcode,shipping_country,shipping_state',
'shipping_postcode' => 'required_with:shipping_address,shipping_city,shipping_country,shipping_state',
'shipping_country' => 'required_with:shipping_address,shipping_city,shipping_postcode,shipping_state',
'shipping_state' => 'required_with:shipping_address,shipping_city,shipping_postcode,shipping_country',
'billing_address' => 'required_with:billing_city,billing_postcode,billing_country,billing_state',
'billing_city' => 'required_with:billing_address,billing_postcode,billing_country,billing_state',
'billing_postcode' => 'required_with:billing_address,billing_city,billing_country,billing_state',
'billing_country' => 'required_with:billing_address,billing_city,billing_postcode,billing_state',
'billing_state' => 'required_with:billing_address,billing_city,billing_postcode,billing_country',
], [
'firstname.required' => __('validation.custom_messages.firstname_required'),
'surname.required' => __('validation.custom_messages.surname_required'),
'email.required' => __('validation.custom_messages.email_required'),
'email.email' => __('validation.custom_messages.email_invalid'),
'phone.required' => __('validation.custom_messages.phone_required'),
'shipping_address.required' => __('validation.custom_messages.shipping_address_required'),
'shipping_city.required' => __('validation.custom_messages.shipping_city_required'),
'shipping_postcode.required' => __('validation.custom_messages.shipping_postcode_required'),
'shipping_country.required' => __('validation.custom_messages.shipping_country_required'),
'shipping_state.required' => __('validation.custom_messages.shipping_state_required'),
'billing_address.required' => __('validation.custom_messages.billing_address_required'),
'billing_city.required' => __('validation.custom_messages.billing_city_required'),
'billing_postcode.required' => __('validation.custom_messages.billing_postcode_required'),
'billing_country.required' => __('validation.custom_messages.billing_country_required'),
'billing_state.required' => __('validation.custom_messages.billing_state_required'),
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$userData = $request->all();
$newEmail = $userData['email'];
unset($userData['email']);
if (strtolower($user->email) !== strtolower($newEmail)) {
$user->tokens()->where('type', 'email-update')->delete();
$token = $user->tokens()->create([
'type' => 'email-update',
'data' => [
'email' => $newEmail,
],
'expires_at' => now()->addMinutes(30),
]);
dispatch(new SendEmail($user->email, new UserEmailUpdateRequest($token->id, $user->email, $newEmail)))->onQueue('mail');
}
$userData['subscribed'] = ($request->get('subscribed', false) === 'on');
$user->update($userData);
$user->save();
session()->flash('message', 'Your account details have been saved');
session()->flash('message-title', 'Details updated');
session()->flash('message-type', 'success');
return redirect()->back();
}
/**
* Remove the specified resource from storage.
*/
public function destroy()
{
/** @var User $user */
$user = auth()->user();
auth()->logout();
$user->delete();
session()->flash('message', 'Your account has been deleted');
session()->flash('message-title', 'Account Deleted');
session()->flash('message-type', 'success');
return redirect()->route('index');
}
public static function getTFAInstance()
{
$tfa = new TwoFactorAuth(new QRCodeProvider(), 'STEMMechanics', 6, 30, Algorithm::Sha512);
$tfa->ensureCorrectTime();
return $tfa;
}
public function show_tfa()
{
$user = auth()->user();
if ($user->tfa_secret === null) {
$tfa = self::getTFAInstance();
$secret = $tfa->createSecret();
return response()->json([
'secret' => $secret,
]);
} else {
abort(404);
}
}
public function show_tfa_image(Request $request)
{
$user = auth()->user();
if ($user->tfa_secret === null && $request->has('secret')) {
$tfa = self::getTFAInstance();
$qrCodeProvider = new QRCodeProvider();
$qrCode = $qrCodeProvider->getQRCodeImage(
$tfa->getQRText($user->email, $request->get('secret')),
200
);
return response()->stream(function () use ($qrCode) {
echo $qrCode;
}, 200, ['Content-Type' => $qrCodeProvider->getMimeType()]);
} else {
abort(404);
}
}
public function post_tfa(Request $request)
{
$user = auth()->user();
if ($user->tfa_secret === null && $request->has('secret') && $request->has('code')) {
$secret = $request->get('secret');
$code = $request->get('code');
$tfa = self::getTFAInstance();
if ($tfa->verifyCode($secret, $code, 4)) {
$user->tfa_secret = $secret;
$user->save();
$codes = $user->generateBackupCodes();
return response()->json([
'success' => true,
'codes' => $codes
]);
} else {
return response()->json([
'success' => false,
]);
}
} else {
abort(403);
}
}
public function destroy_tfa(Request $request)
{
$user = auth()->user();
if ($user->tfa_secret !== null) {
$user->tfa_secret = null;
$user->save();
$user->backupCodes()->delete();
return response()->json([
'success' => true,
]);
} else {
abort(403);
}
}
public function post_tfa_reset_backup_codes(Request $request)
{
$user = auth()->user();
if ($user->tfa_secret !== null) {
$codes = $user->generateBackupCodes();
return response()->json([
'success' => true,
'codes' => $codes
]);
} else {
abort(403);
}
}
}

View File

@@ -1,172 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Enum\HttpResponseCodes;
use App\Http\Controllers\Controller;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
class ApiController extends Controller
{
/**
* Resource name
* @var string
*/
protected $resourceName = '';
/**
* Return generic json response with the given data.
*
* @param array $data Response data.
* @param integer $respondCode Response status code.
* @param array $headers Response headers.
* @return \Illuminate\Http\JsonResponse
*/
public function respondJson(array $data, int $respondCode = HttpResponseCodes::HTTP_OK, array $headers = [])
{
return response()->json($data, $respondCode, $headers);
}
/**
* Return forbidden message
*
* @param string $message Response message.
* @return \Illuminate\Http\JsonResponse
*/
public function respondForbidden(string $message = 'You do not have permission to access the resource.')
{
return response()->json(['message' => $message], HttpResponseCodes::HTTP_FORBIDDEN);
}
/**
* Return forbidden message
*
* @param string $message Response message.
* @return \Illuminate\Http\JsonResponse
*/
public function respondNotFound(string $message = 'The resource was not found.')
{
return response()->json(['message' => $message], HttpResponseCodes::HTTP_NOT_FOUND);
}
/**
* Return too large message
*
* @param string $message Response message.
* @return \Illuminate\Http\JsonResponse
*/
public function respondTooLarge(string $message = 'The request entity is too large.')
{
return response()->json(['message' => $message], HttpResponseCodes::HTTP_REQUEST_ENTITY_TOO_LARGE);
}
/**
* Return no content
* @return \Illuminate\Http\JsonResponse
*/
public function respondNoContent()
{
return response()->json([], HttpResponseCodes::HTTP_NO_CONTENT);
}
/**
* Return created
* @return \Illuminate\Http\JsonResponse
*/
public function respondCreated()
{
return response()->json([], HttpResponseCodes::HTTP_CREATED);
}
/**
* Return single error message
*
* @param string $message Error message.
* @param integer $responseCode Resource code.
* @return \Illuminate\Http\JsonResponse
*/
public function respondError(string $message, int $responseCode = HttpResponseCodes::HTTP_UNPROCESSABLE_ENTITY)
{
return response()->json([
'message' => $message
], $responseCode);
}
/**
* Return formatted errors
*
* @param array $errors Error messages.
* @param integer $responseCode Resource code.
* @return \Illuminate\Http\JsonResponse
*/
public function respondWithErrors(array $errors, int $responseCode = HttpResponseCodes::HTTP_UNPROCESSABLE_ENTITY)
{
$keys = array_keys($errors);
$error = $errors[$keys[0]];
if (count($keys) > 1) {
$additional_errors = (count($keys) - 1);
$error .= sprintf(' (and %d more %s', $additional_errors, Str::plural('error', $additional_errors));
}
return response()->json([
'message' => $error,
'errors' => $errors
], $responseCode);
}
/**
* Return resource data
*
* @param array|Model|Collection $data Resource data.
* @param array|null $appendData Data to append to response.
* @param integer $respondCode Resource code.
* @return \Illuminate\Http\JsonResponse
*/
protected function respondAsResource(
mixed $data,
mixed $appendData = null,
int $respondCode = HttpResponseCodes::HTTP_OK
) {
if ($data === null || ($data instanceof Collection && $data->count() === 0)) {
return $this->respondNotFound();
}
$resourceName = $this->resourceName;
if ($this->resourceName === '') {
$resourceName = get_class($this);
$resourceName = substr($resourceName, (strrpos($resourceName, '\\') + 1));
$resourceName = substr($resourceName, 0, strpos($resourceName, 'Controller'));
$resourceName = strtolower($resourceName);
}
$is_multiple = true;
$dataArray = [];
if ($data instanceof Collection) {
$dataArray = $data->toArray();
} elseif (is_array($data) === true) {
$dataArray = $data;
} elseif ($data instanceof Model) {
$is_multiple = false;
$dataArray = $data->toArray();
}
$resource = [];
if ($is_multiple === true) {
$resource = [Str::plural($resourceName) => $dataArray];
} else {
$resource = [Str::singular($resourceName) => $dataArray];
}
if ($appendData !== null) {
$resource += $appendData;
}
return response()->json($resource, $respondCode);
}
}

View File

@@ -1,101 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Enum\HttpResponseCodes;
use App\Http\Requests\AuthLoginRequest;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\JsonResponse;
class AuthController extends ApiController
{
/**
* Resource name
* @var string
*/
protected $resourceName = 'user';
/**
* ApplicationController constructor.
*/
public function __construct()
{
// $this->middleware('auth:sanctum')
// ->only(['me']);
}
/**
* Current User details
*
* @param Request $request Current request data.
* @return JsonResponse
*/
public function me(Request $request)
{
$user = $request->user()->makeVisible(['permissions']);
return $this->respondAsResource($user);
}
/**
* Login user with supplied creditials
*
* @param App\Http\Controllers\Api\AuthLoginRequest $request Created request data.
* @return JsonResponse|void
*/
public function login(AuthLoginRequest $request)
{
$user = User::where('username', '=', $request->input('username'))->first();
if ($user !== null && Hash::check($request->input('password'), $user->password) === true) {
if ($user->email_verified_at === null) {
return $this->respondWithErrors([
'username' => 'Email address has not been verified.'
]);
}
if ($user->disabled === true) {
return $this->respondWithErrors([
'username' => 'Account has been disabled.'
]);
}
$token = $user->createToken('user_token')->plainTextToken;
$user->logins()->create([
'token' => $token,
'login' => now(),
'ip_address' => $request->ip(),
'user_agent' => $request->userAgent()
]);
return $this->respondAsResource(
$user->makeVisible(['permissions']),
['token' => $token]
);
}//end if
return $this->respondWithErrors([
'username' => 'Invalid username or password',
'password' => 'Invalid username or password',
]);
}
/**
* Logout current user
*
* @param Request $request Current request data.
* @return JsonResponse
*/
public function logout(Request $request)
{
$user = $request->user();
$user->logins()->where('token', $user->currentAccessToken())->update(['logout' => now()]);
$user->currentAccessToken()->delete();
return $this->respondNoContent();
}
}

View File

@@ -1,30 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Requests\ContactSendRequest;
use App\Jobs\SendEmailJob;
use App\Mail\Contact;
class ContactController extends ApiController
{
/**
* Send the request to the site admin by email
*
* @param \App\Http\Requests\User\ContactSendRequest $request Request data.
* @return \Illuminate\Http\Response
*/
public function send(ContactSendRequest $request)
{
dispatch((new SendEmailJob(
config('contact.contact_address'),
new Contact(
$request->input('name'),
$request->input('email'),
$request->input('content')
)
)))->onQueue('mail');
return $this->respondCreated();
}
}

View File

@@ -1,88 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Enum\HttpResponseCodes;
use App\Filters\EventFilter;
use App\Http\Requests\EventRequest;
use App\Models\Event;
use Illuminate\Http\Request;
class EventController extends ApiController
{
/**
* ApplicationController constructor.
*/
public function __construct()
{
$this->middleware('auth:sanctum')
->only(['store','update','destroy']);
}
/**
* Display a listing of the resource.
*
* @param EventFilter $filter The event filter.
* @return \Illuminate\Http\Response
*/
public function index(EventFilter $filter)
{
return $this->respondAsResource(
$filter->filter(),
['total' => $filter->foundTotal()]
);
}
/**
* Store a newly created resource in storage.
*
* @param EventRequest $request The event store request.
* @return \Illuminate\Http\Response
*/
public function store(EventRequest $request)
{
$event = Event::create($request->all());
return $this->respondAsResource(
(new EventFilter($request))->filter($event),
null,
HttpResponseCodes::HTTP_CREATED
);
}
/**
* Display the specified resource.
*
* @param EventFilter $filter The event filter.
* @param \App\Models\Event $event The specified event.
* @return \Illuminate\Http\Response
*/
public function show(EventFilter $filter, Event $event)
{
return $this->respondAsResource($filter->filter($event));
}
/**
* Update the specified resource in storage.
*
* @param EventRequest $request The event update request.
* @param \App\Models\Event $event The specified event.
* @return \Illuminate\Http\Response
*/
public function update(EventRequest $request, Event $event)
{
$event->update($request->all());
return $this->respondAsResource((new EventFilter($request))->filter($event));
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Event $event The specified event.
* @return \Illuminate\Http\Response
*/
public function destroy(Event $event)
{
$event->delete();
return $this->respondNoContent();
}
}

View File

@@ -1,247 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Enum\HttpResponseCodes;
use App\Filters\MediaFilter;
use App\Http\Requests\MediaStoreRequest;
use App\Http\Requests\MediaUpdateRequest;
use App\Models\Media;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Storage;
use Laravel\Sanctum\PersonalAccessToken;
class MediaController extends ApiController
{
/**
* ApplicationController constructor.
*/
public function __construct()
{
$this->middleware('auth:sanctum')
->only(['store','update','destroy']);
}
/**
* Display a listing of the resource.
*
* @param \App\Filters\MediaFilter $filter Created filter object.
* @return \Illuminate\Http\Response
*/
public function index(MediaFilter $filter)
{
return $this->respondAsResource(
$filter->filter(),
['total' => $filter->foundTotal()]
);
}
/**
* Display the specified resource.
*
* @param MediaFilter $filter The request filter.
* @param Media $medium The request media.
* @return \Illuminate\Http\Response
*/
public function show(MediaFilter $filter, Media $medium)
{
return $this->respondAsResource($filter->filter($medium));
}
/**
* Store a new media resource
*
* @param MediaStoreRequest $request The uploaded media.
* @return \Illuminate\Http\Response
*/
public function store(MediaStoreRequest $request)
{
$file = $request->file('file');
if ($file === null) {
return $this->respondError(['file' => 'An error occurred uploading the file to the server.']);
}
if ($file->isValid() !== true) {
switch ($file->getError()) {
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
return $this->respondTooLarge();
case UPLOAD_ERR_PARTIAL:
return $this->respondError(['file' => 'The file upload was interrupted.']);
default:
return $this->respondError(['file' => 'An error occurred uploading the file to the server.']);
}
}
if ($file->getSize() > Media::maxUploadSize()) {
return $this->respondTooLarge();
}
$title = $file->getClientOriginalName();
$mime = $file->getMimeType();
$fileInfo = Media::store($file, empty($request->input('permission')));
if ($fileInfo === null) {
return $this->respondError(
['file' => 'The file could not be stored on the server'],
HttpResponseCodes::HTTP_INTERNAL_SERVER_ERROR
);
}
$request->merge([
'title' => $title,
'mime' => $mime,
'name' => $fileInfo['name'],
'size' => filesize($fileInfo['path'])
]);
$media = $request->user()->media()->create($request->all());
return $this->respondAsResource((new MediaFilter($request))->filter($media));
}
/**
* Update the media resource in storage.
*
* @param MediaUpdateRequest $request The update request.
* @param \App\Models\Media $medium The specified media.
* @return \Illuminate\Http\Response
*/
public function update(MediaUpdateRequest $request, Media $medium)
{
if ((new MediaFilter($request))->filter($medium) === null) {
return $this->respondNotFound();
}
$file = $request->file('file');
if ($file !== null) {
if ($file->getSize() > Media::maxUploadSize()) {
return $this->respondTooLarge();
}
$oldPath = $medium->path();
$fileInfo = Media::store($file, empty($request->input('permission')));
if ($fileInfo === null) {
return $this->respondError(
['file' => 'The file could not be stored on the server'],
HttpResponseCodes::HTTP_INTERNAL_SERVER_ERROR
);
}
if (file_exists($oldPath) === true) {
unlink($oldPath);
}
$request->merge([
'title' => $file->getClientOriginalName(),
'mime' => $file->getMimeType(),
'name' => $fileInfo['name'],
'size' => filesize($fileInfo['path'])
]);
}//end if
$medium->update($request->all());
return $this->respondWithTransformer($file);
}
/**
* Remove the specified resource from storage.
*
* @param Request $request Request instance.
* @param \App\Models\Media $medium Specified media file.
* @return \Illuminate\Http\Response
*/
public function destroy(Request $request, Media $medium)
{
if ((new MediaFilter($request))->filter($medium) !== null) {
if (file_exists($medium->path()) === true) {
unlink($medium->path());
}
$medium->delete();
return $this->respondNoContent();
}
return $this->respondNotFound();
}
/**
* Display the specified resource.
*
* @param Request $request Request instance.
* @param \App\Models\Media $medium Specified media.
* @return \Illuminate\Http\Response
*/
public function download(Request $request, Media $medium)
{
$respondJson = in_array('application/json', explode(',', $request->header('Accept', 'application/json')));
$headers = [];
$path = $medium->path();
/* File exists */
if (file_exists($path) === false) {
if ($respondJson === false) {
return redirect('/not-found');
} else {
return $this->respondNotFound();
}
}
$updated_at = Carbon::parse(filemtime($path));
$headerPragma = 'no-cache';
$headerCacheControl = 'max-age=0, must-revalidate';
$headerExpires = $updated_at->toRfc2822String();
if (empty($medium->permission) === true) {
if ($request->user() === null && $request->has('token') === true) {
$accessToken = PersonalAccessToken::findToken(urldecode($request->input('token')));
if (
$accessToken !== null && (config('sanctum.expiration') === null ||
$accessToken->created_at->lte(now()->subMinutes(config('sanctum.expiration'))) === false)
) {
$user = $accessToken->tokenable;
}
}
if ($request->user() === null || $user->hasPermission($medium->permission) === false) {
if ($respondJson === false) {
return redirect('/login?redirect=' . $request->path());
} else {
return $this->respondForbidden();
}
}
} else {
$headerPragma = 'public';
$headerExpires = $updated_at->addMonth()->toRfc2822String();
}//end if
$headerEtag = md5($updated_at->format('U'));
$headerLastModified = $updated_at->toRfc2822String();
$headers = [
'Cache-Control' => $headerCacheControl,
'Content-Disposition' => sprintf('inline; filename="%s"', basename($path)),
'Etag' => $headerEtag,
'Expires' => $headerExpires,
'Last-Modified' => $headerLastModified,
'Pragma' => $headerPragma,
];
$server = request()->server;
$requestModifiedSince = $server->has('HTTP_IF_MODIFIED_SINCE') &&
$server->get('HTTP_IF_MODIFIED_SINCE') === $headerLastModified;
$requestNoneMatch = $server->has('HTTP_IF_NONE_MATCH') &&
$server->get('HTTP_IF_NONE_MATCH') === $headerEtag;
if ($requestModifiedSince === true || $requestNoneMatch === true) {
return response()->make('', 304, $headers);
}
return response()->file($path, $headers);
}
}

View File

@@ -1,93 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Enum\HttpResponseCodes;
use App\Filters\PostFilter;
use App\Http\Requests\PostStoreRequest;
use App\Http\Requests\PostUpdateRequest;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends ApiController
{
/**
* ApplicationController constructor.
*/
public function __construct()
{
$this->middleware('auth:sanctum')
->only([
'store',
'update',
'delete'
]);
}
/**
* Display a listing of the resource.
*
* @param \App\Filters\PostFilter $filter Post filter request.
* @return \Illuminate\Http\Response
*/
public function index(PostFilter $filter)
{
return $this->respondAsResource(
$filter->filter(),
['total' => $filter->foundTotal()]
);
}
/**
* Display the specified resource.
*
* @param PostFilter $filter The filter request.
* @param \App\Models\Post $post The post model.
* @return \Illuminate\Http\Response
*/
public function show(PostFilter $filter, Post $post)
{
return $this->respondAsResource($filter->filter($post));
}
/**
* Store a newly created resource in storage.
*
* @param PostStoreRequest $request The post store request.
* @return \Illuminate\Http\Response
*/
public function store(PostStoreRequest $request)
{
$post = Post::create($request->all());
return $this->respondAsResource(
(new PostFilter($request))->filter($post),
null,
HttpResponseCodes::HTTP_CREATED
);
}
/**
* Update the specified resource in storage.
*
* @param PostUpdateRequest $request The post update request.
* @param \App\Models\Post $post The specified post.
* @return \Illuminate\Http\Response
*/
public function update(PostUpdateRequest $request, Post $post)
{
$post->update($request->all());
return $this->respondAsResource((new PostFilter($request))->filter($post));
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Post $post The specified post.
* @return \Illuminate\Http\Response
*/
public function destroy(Post $post)
{
$post->delete();
return $this->respondNoContent();
}
}

View File

@@ -1,132 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Models\Subscription;
use App\Filters\SubscriptionFilter;
use App\Http\Requests\SubscriptionRequest;
use App\Jobs\SendEmailJob;
use App\Mail\SubscriptionConfirm;
use App\Mail\SubscriptionUnsubscribed;
class SubscriptionController extends ApiController
{
/**
* ApplicationController constructor.
*/
public function __construct()
{
$this->middleware('auth:sanctum')
->except(['store', 'destroyByEmail']);
}
/**
* Display a listing of subscribers.
*
* @param \App\Filters\SubscriptionFilter $filter Filter object.
* @return \Illuminate\Http\Response
*/
public function index(SubscriptionFilter $filter)
{
$collection = $filter->filter();
return $this->respondAsResource(
$collection,
['total' => $filter->foundTotal()]
);
}
/**
* Store a subscriber email in the database.
*
* @param SubscriptionRequest $request The subscriber update request.
* @return \Illuminate\Http\Response
*/
public function store(SubscriptionRequest $request)
{
if (Subscription::where('email', $request->email)->first() !== null) {
return $this->respondWithErrors(['email' => 'This email address has already subscribed']);
}
Subscription::create($request->all());
dispatch((new SendEmailJob($request->email, new SubscriptionConfirm($request->email))))->onQueue('mail');
return $this->respondCreated();
}
/**
* Display the specified user.
*
* @param SubscriptionFilter $filter The subscription filter.
* @param Subscription $subscription The subscription model.
* @return \Illuminate\Http\Response
*/
public function show(SubscriptionFilter $filter, Subscription $subscription)
{
return $this->respondAsResource($filter->filter($subscription));
}
/**
* Update the specified resource in storage.
*
* @param SubscriptionRequest $request The subscription update request.
* @param Subscription $subscription The specified subscription.
* @return \Illuminate\Http\Response
*/
public function update(SubscriptionRequest $request, Subscription $subscription)
{
// $input = [];
// $updatable = ['username', 'first_name', 'last_name', 'email', 'phone', 'password'];
// if ($request->user()->hasPermission('admin/user') === true) {
// $updatable = array_merge($updatable, ['email_verified_at']);
// } elseif ($request->user()->is($user) !== true) {
// return $this->respondForbidden();
// }
// $input = $request->only($updatable);
// if (array_key_exists('password', $input) === true) {
// $input['password'] = Hash::make($request->input('password'));
// }
// $user->update($input);
// return $this->respondAsResource((new UserFilter($request))->filter($user));
}
/**
* Remove the user from the database.
*
* @param Subscription $subscription The specified subscription.
* @return \Illuminate\Http\Response
*/
public function destroy(Subscription $subscription)
{
// if ($user->hasPermission('admin/user') === false) {
// return $this->respondForbidden();
// }
$email = $subscription->email;
$subscription->delete();
return $this->respondNoContent();
}
/**
* Remove the user from the database.
*
* @param SubscriptionRequest $request The specified subscription.
* @return \Illuminate\Http\Response
*/
public function destroyByEmail(SubscriptionRequest $request)
{
$subscription = Subscription::where('email', $request->email)->first();
if ($subscription !== null) {
$subscription->delete();
dispatch((new SendEmailJob($request->email, new SubscriptionUnsubscribed($request->email))))->onQueue('mail');
}
return $this->respondNoContent();
}
}

View File

@@ -1,337 +0,0 @@
<?php
namespace App\Http\Controllers\Api;
use App\Enum\HttpResponseCodes;
use App\Filters\UserFilter;
use App\Http\Requests\UserUpdateRequest;
use App\Http\Requests\UserStoreRequest;
use App\Http\Requests\UserForgotPasswordRequest;
use App\Http\Requests\UserForgotUsernameRequest;
use App\Http\Requests\UserRegisterRequest;
use App\Http\Requests\UserResendVerifyEmailRequest;
use App\Http\Requests\UserResetPasswordRequest;
use App\Http\Requests\UserVerifyEmailRequest;
use App\Jobs\SendEmailJob;
use App\Mail\ChangedEmail;
use App\Mail\ChangedPassword;
use App\Mail\ChangeEmailVerify;
use App\Mail\ForgotUsername;
use App\Mail\ForgotPassword;
use App\Mail\EmailVerify;
use App\Models\User;
use App\Models\UserCode;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class UserController extends ApiController
{
/**
* ApplicationController constructor.
*/
public function __construct()
{
$this->middleware('auth:sanctum')
->except([
'index',
'show',
'register',
'exists',
'forgotPassword',
'forgotUsername',
'resetPassword',
'verifyEmail',
'resendVerifyEmailCode'
]);
}
/**
* Display a listing of the resource.
*
* @param \App\Filters\UserFilter $filter Filter object.
* @return \Illuminate\Http\Response
*/
public function index(UserFilter $filter)
{
$collection = $filter->filter();
return $this->respondAsResource(
$collection,
['total' => $filter->foundTotal()]
);
}
/**
* Store a newly created user in the database.
*
* @param UserStoreRequest $request The user update request.
* @return \Illuminate\Http\Response
*/
public function store(UserStoreRequest $request)
{
if ($request->user()->hasPermission('admin/user') !== true) {
return $this->respondForbidden();
}
$user = User::create($request->all());
return $this->respondAsResource((new UserFilter($request))->filter($user), [], HttpResponseCodes::HTTP_CREATED);
}
/**
* Display the specified user.
*
* @param UserFilter $filter The user filter.
* @param User $user The user model.
* @return \Illuminate\Http\Response
*/
public function show(UserFilter $filter, User $user)
{
return $this->respondAsResource($filter->filter($user));
}
/**
* Update the specified resource in storage.
*
* @param UserUpdateRequest $request The user update request.
* @param User $user The specified user.
* @return \Illuminate\Http\Response
*/
public function update(UserUpdateRequest $request, User $user)
{
$input = [];
$updatable = ['username', 'first_name', 'last_name', 'email', 'phone', 'password'];
if ($request->user()->hasPermission('admin/user') === true) {
$updatable = array_merge($updatable, ['email_verified_at']);
} elseif ($request->user()->is($user) !== true) {
return $this->respondForbidden();
}
$input = $request->only($updatable);
if (array_key_exists('password', $input) === true) {
$input['password'] = Hash::make($request->input('password'));
}
$user->update($input);
return $this->respondAsResource((new UserFilter($request))->filter($user));
}
/**
* Remove the user from the database.
*
* @param User $user The specified user.
* @return \Illuminate\Http\Response
*/
public function destroy(User $user)
{
if ($user->hasPermission('admin/user') === false) {
return $this->respondForbidden();
}
$user->delete();
return $this->respondNoContent();
}
/**
* Register a new user
*
* @param UserRegisterRequest $request The register user request.
* @return \Illuminate\Http\Response
*/
public function register(UserRegisterRequest $request)
{
try {
$user = User::create([
'first_name' => $request->input('first_name'),
'last_name' => $request->input('last_name'),
'username' => $request->input('username'),
'email' => $request->input('email'),
'phone' => $request->input('phone'),
'password' => Hash::make($request->input('password'))
]);
$code = $user->codes()->create([
'action' => 'verify-email',
]);
dispatch((new SendEmailJob($user->email, new EmailVerify($user, $code->code))))->onQueue('mail');
return response()->json([
'message' => 'Check your email for a welcome code.'
]);
} catch (\Exception $e) {
return response()->json([
'message' => 'A server error occurred. Please try again later' . $e
], 500);
}//end try
}
/**
* Sends an email with all the usernames registered at that address
*
* @param UserForgotUsernameRequest $request The forgot username request.
* @return \Illuminate\Http\Response
*/
public function forgotUsername(UserForgotUsernameRequest $request)
{
$users = User::where('email', $request->input('email'))->whereNotNull('email_verified_at')->get();
if ($users->count() > 0) {
dispatch((new SendEmailJob(
$users->first()->email,
new ForgotUsername($users->pluck('username')->toArray())
)))->onQueue('mail');
return $this->respondNoContent();
}
return $this->respondJson(['message' => 'Username send to the email address if registered']);
}
/**
* Generates a new reset password code
*
* @param UserForgotPasswordRequest $request The reset password request.
* @return \Illuminate\Http\Response
*/
public function forgotPassword(UserForgotPasswordRequest $request)
{
$user = User::where('username', $request->input('username'))->first();
if ($user !== null) {
$user->codes()->where('action', 'reset-password')->delete();
$code = $user->codes()->create([
'action' => 'reset-password'
]);
dispatch((new SendEmailJob($user->email, new ForgotPassword($user, $code->code))))->onQueue('mail');
return $this->respondNoContent();
}
return $this->respondNotFound();
}
/**
* Resets a user password
*
* @param UserResetPasswordRequest $request The reset password request.
* @return \Illuminate\Http\Response
*/
public function resetPassword(UserResetPasswordRequest $request)
{
UserCode::clearExpired();
$code = UserCode::where('code', $request->input('code'))->where('action', 'reset-password')->first();
if ($code !== null) {
$user = $code->user()->first();
$code->delete();
$user->codes()->where('action', 'verify-email')->delete();
$user->password = Hash::make($request->input('password'));
if ($user->email_verified_at === null) {
$user->email_verified_at = now();
}
$user->save();
dispatch((new SendEmailJob($user->email, new ChangedPassword($user))))->onQueue('mail');
return $this->respondNoContent();
}
return $this->respondError([
'code' => 'The code was not found or has expired'
]);
}
/**
* Verify an email code
*
* @param UserVerifyEmailRequest $request The verify email request.
* @return \Illuminate\Http\Response
*/
public function verifyEmail(UserVerifyEmailRequest $request)
{
UserCode::clearExpired();
$code = UserCode::where('code', $request->input('code'))->where('action', 'verify-email')->first();
if ($code !== null) {
$user = $code->user()->first();
$new_email = $code->data;
if ($new_email === null) {
if ($user->email_verified_at === null) {
$user->email_verified_at = now();
}
} else {
dispatch((new SendEmailJob($user->email, new ChangedEmail($user, $user->email, $new_email))))
->onQueue('mail');
$user->email = $new_email;
$user->email_verified_at = now();
}
$code->delete();
$user->save();
return $this->respondNoContent();
}//end if
return $this->respondWithErrors([
'code' => 'The code was not found or has expired'
]);
}
/**
* Resend a new verify email
*
* @param UserResendVerifyEmailRequest $request The resend verify email request.
* @return \Illuminate\Http\Response
*/
public function resendVerifyEmail(UserResendVerifyEmailRequest $request)
{
UserCode::clearExpired();
$user = User::where('username', $request->input('username'))->first();
if ($user !== null) {
$code = $user->codes()->where('action', 'verify-email')->first();
$code->regenerate();
$code->save();
if ($code->data === null) {
dispatch((new SendEmailJob($user->email, new EmailVerify($user, $code->code))))->onQueue('mail');
} else {
dispatch((new SendEmailJob($user->email, new ChangeEmailVerify($user, $code->code, $code->data))))
->onQueue('mail');
}
}
return response()->json(['message' => 'Verify email sent if user registered and required']);
}
/**
* Resend verification email
*
* @param UserResendVerifyEmailRequest $request The resend user request.
* @return \Illuminate\Http\Response
*/
public function resendVerifyEmailCode(UserResendVerifyEmailRequest $request)
{
$user = User::where('username', $request->input('username'))->first();
if ($user !== null) {
$user->codes()->where('action', 'verify-email')->delete();
if ($user->email_verified_at === null) {
$code = $user->codes()->create([
'action' => 'verify-email'
]);
dispatch((new SendEmailJob($user->email, new EmailVerify($user, $code->code))))->onQueue('mail');
}
return $this->respondNoContent();
}
return $this->respondNotFound();
}
}

View File

@@ -0,0 +1,319 @@
<?php
namespace App\Http\Controllers;
use App\Jobs\SendEmail;
use App\Mail\UserEmailUpdateConfirm;
use App\Mail\UserLogin;
use App\Mail\UserLoginBackupCode;
use App\Mail\UserRegister;
use App\Mail\UserWelcome;
use App\Models\Token;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\View\View;
class AuthController extends Controller
{
/**
* Show the login form or if token present, process the login
*
* @param Request $request
* @return View|RedirectResponse
*/
public function showLogin(Request $request): View|RedirectResponse
{
if (auth()->check()) {
return redirect()->action([HomeController::class, 'index']);
}
$token = $request->query('token');
if ($token) {
return $this->LoginByToken($token);
}
return view('auth.login');
}
/**
* Process the login form
*
* @param Request $request
* @return View|RedirectResponse
*/
public function postLogin(Request $request): View|RedirectResponse
{
$request->validate([
'email' => 'required|email',
'captcha' => 'required_captcha',
], [
'email.required' => __('validation.custom_messages.email_required'),
'email.email' => __('validation.custom_messages.email_invalid'),
]);
$forceEmailLogin = false;
if($request->has('code')) {
$user = User::where('email', $request->email)->whereNotNull('email_verified_at')->first();
if($user) {
$tfa = AccountController::getTFAInstance();
if ($request->code && $tfa->verifyCode($user->tfa_secret, $request->code, 4)) {
$data = ['url' => session()->pull('url.intended', null)];
return $this->loginByUser($user, $data);
}
}
return view('auth.login-2fa', ['email' => $request->email])->withErrors([
'code' => 'The 2FA code is not valid',
]);
}
if($request->has('backup_code')) {
$user = User::where('email', $request->email)->whereNotNull('email_verified_at')->first();
if($user) {
if($user->verifyBackupCode($request->backup_code)) {
$data = ['url' => session()->pull('url.intended', null)];
dispatch(new SendEmail($user->email, new UserLoginBackupCode($user->email)))->onQueue('mail');
return $this->loginByUser($user, $data);
}
}
return view('auth.login-2fa', ['email' => $request->email, 'method' => 'backup'])->withErrors([
'backup_code' => 'The backup code is not valid',
]);
}
if($request->has('method')) {
if($request->get('method') === 'email') {
$forceEmailLogin = true;
} else {
abort(404);
}
}
$user = User::where('email', $request->email)->whereNotNull('email_verified_at')->first();
if ($user) {
if (!$forceEmailLogin && $user->tfa_secret !== null) {
return view('auth.login-2fa', ['user' => $user]);
}
$token = $user->tokens()->create([
'type' => 'login',
'data' => ['url' => session()->pull('url.intended', null)],
]);
dispatch(new SendEmail($user->email, new UserLogin($token->id, $user->getName(), $user->email)))->onQueue('mail');
return view('auth.login-link');
}
session()->flash('status', 'not-found');
return view('auth.login');
}
/**
* Process the login by token
*
* @param string $tokenStr
* @return View|RedirectResponse
*/
public function loginByToken(string $tokenStr): View|RedirectResponse
{
$token = Token::where('id', $tokenStr)
->where('type', 'login')
->where('expires_at', '>', now())
->first();
if ($token) {
$user = $token->user;
if($user) {
$token->delete();
return $this->loginByUser($user, $token->data);
}
}
session()->flash('message', 'That token has expired or is invalid');
session()->flash('message-title', 'Log in failed');
session()->flash('message-type', 'danger');
return view('auth.login');
}
/**
* Process the login by user
*
* @param User $user
* @param array $data
* @return RedirectResponse
*/
public function loginByUser(User $user, array $data = [])
{
$url = null;
if($data && isset($data->url) && $data->url) {
$url = $data->url;
}
Auth::login($user);
session()->flash('message', 'You have been logged in');
session()->flash('message-title', 'Logged in');
session()->flash('message-type', 'success');
if($url) {
return redirect($url);
}
return redirect()->action([HomeController::class, 'index']);
}
/**
* Process the user logout
*
* @return RedirectResponse
*/
public function logout(): RedirectResponse
{
auth()->logout();
session()->flash('message', 'You have been logged out');
session()->flash('message-title', 'Logged out');
session()->flash('message-type', 'warning');
return redirect()->route('index');
}
/**
* Show the registration form or if token present, process the registration
*
* @param Request $request
* @return View|RedirectResponse
*/
public function showRegister(Request $request): View|RedirectResponse
{
if (auth()->check()) {
return redirect()->route('index');
}
$tokenStr = $request->query('token');
if ($tokenStr) {
$token = Token::where('id', $tokenStr)
->where('type', 'register')
->where('expires_at', '>', now())
->first();
if ($token) {
$user = $token->user;
if ($user) {
$user->email_verified_at = now();
$user->save();
$user->tokens()->where('type', 'register')->delete();
dispatch(new SendEmail($user->email, new UserWelcome($user->email)))->onQueue('mail');
$this->loginByUser($user);
return redirect()->route('index');
}
}
session()->flash('message', 'That token has expired or is invalid');
session()->flash('message-title', 'Registration failed');
session()->flash('message-type', 'danger');
}
return view('auth.register');
}
/**
* Process the registration form
*
* @param Request $request
* @return View|RedirectResponse
*/
public function postRegister(Request $request): View|RedirectResponse
{
$request->validate([
'email' => 'required|email',
'captcha' => 'required_captcha',
], [
'email.required' => __('validation.custom_messages.email_required'),
'email.email' => __('validation.custom_messages.email_invalid')
]);
$key = $request->get('name', '');
$passHoneypot = ($key === 'AC9E94587F163AD93174FBF3DFDF9645B886960F2F8DD6D60F81CDB6DCDA3BC33');
$user = User::where('email', $request->email)->first();
if($user) {
if($user->email_verified_at !== null) {
return redirect()->back()->withInput()->withErrors([
'email' => __('validation.custom_messages.email_exists'),
]);
}
} else if($passHoneypot) {
$user = User::create([
'email' => $request->email,
]);
}
if($passHoneypot) {
Log::channel('honeypot')->info('Valid key used for registration using email: ' . $request->email . ', ip address: ' . $request->ip() . ', user agent: ' . $request->userAgent());
$user->tokens()->where('type', 'register')->delete();
$token = $user->tokens()->create([
'type' => 'register',
'data' => ['url' => session()->pull('url.intended', null)],
]);
dispatch(new SendEmail($user->email, new UserRegister($token->id, $user->email)))->onQueue('mail');
} else {
Log::channel('honeypot')->info('Invalid key used for registration using email: ' . $request->email . ', ip address: ' . $request->ip() . ', user agent: ' . $request->userAgent() . ', key: ' . $key);
}
return view('auth.register-link');
}
/**
* Confirm the user email update.
*
* @param Request $request
* @return RedirectResponse
*/
public function updateEmail(Request $request): RedirectResponse
{
$tokenStr = $request->query('token');
$token = Token::where('id', $tokenStr)
->where('type', 'email-update')
->where('expires_at', '>', now())
->first();
if($token && $token->user) {
if($token->data && isset($token->data['email'])) {
$user = $token->user;
$user->email = $token->data['email'];
$user->email_verified_at = now();
$user->save();
$user->tokens()->where('type', 'email-update')->delete();
session()->flash('message', 'Your email has been updated');
session()->flash('message-title', 'Email updated');
session()->flash('message-type', 'success');
dispatch(new SendEmail($user->email, new UserEmailUpdateConfirm($user->email)))->onQueue('mail');
return redirect()->route('index');
}
}
session()->flash('message', 'That token has expired or is invalid');
session()->flash('message-title', 'Email update failed');
session()->flash('message-type', 'danger');
return redirect()->route('index');
}
}

View File

@@ -2,14 +2,7 @@
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
abstract class Controller
{
use AuthorizesRequests;
use DispatchesJobs;
use ValidatesRequests;
//
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use App\Models\Workshop;
class HomeController extends Controller
{
public function index()
{
// $posts = Post::query()->orderBy('created_at', 'desc')->limit(4)->get();
$workshops = Workshop::query()->where('starts_at', '>', now())->where('status', '!=', 'private')->orderBy('starts_at', 'asc')->limit(4)->get();
return view('home', [
// 'posts' => $posts,
'workshops' => $workshops,
]);
}
}

View File

@@ -0,0 +1,102 @@
<?php
namespace App\Http\Controllers;
use App\Models\Location;
use App\Models\Post;
use Illuminate\Http\Request;
class LocationController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$query = Location::query();
if($request->has('search')) {
$query->where('name', 'like', '%' . $request->search . '%');
$query->orWhere('address', 'like', '%' . $request->search . '%');
}
$locations = $query->orderBy('name')->paginate(12)->onEachSide(1);
return view('admin.location.index', [
'locations' => $locations
]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('admin.location.edit');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'address_url' => 'nullable|url',
], [
// 'firstname.required' => __('validation.custom_messages.firstname_required'),
// 'surname.required' => __('validation.custom_messages.surname_required'),
]);
Location::create(array_merge(
$request->all(),
));
session()->flash('message', 'Location has been created');
session()->flash('message-title', 'Location created');
session()->flash('message-type', 'success');
return redirect()->route('admin.location.index');
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Location $location)
{
return view('admin.location.edit', ['location' => $location]);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Location $location)
{
$request->validate([
'name' => 'required',
'address_url' => 'url',
], [
// 'firstname.required' => __('validation.custom_messages.firstname_required'),
// 'surname.required' => __('validation.custom_messages.surname_required'),
]);
$location->update($request->all());
session()->flash('message', 'Location has been updated');
session()->flash('message-title', 'Location updated');
session()->flash('message-type', 'success');
return redirect()->route('admin.location.index');
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Location $location)
{
$location->delete();
session()->flash('message', 'Location has been deleted');
session()->flash('message-title', 'Location deleted');
session()->flash('message-type', 'danger');
return redirect()->route('admin.location.index');
}
}

View File

@@ -0,0 +1,549 @@
<?php
namespace App\Http\Controllers;
use App\Exceptions\FileInvalidException;
use App\Exceptions\FileTooLargeException;
use App\Helpers;
use App\Models\Media;
use Illuminate\Http\Request;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
class MediaController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
if(!$request->wantsJson()) {
abort(404);
}
$media = $this->getMedia($request);
return response()->json($media);
}
public function admin_index(Request $request)
{
$media = $this->getMedia($request);
return view('admin.media.index', [
'media' => $media,
]);
}
public function getMedia(Request $request)
{
$query = Media::query();
$perPage = $request->input('per_page', 25);
if(!empty($request->get('search'))) {
$query->where(function($query) use ($request) {
$query->where('title', 'like', '%' . $request->search . '%');
$query->orWhere('name', 'like', '%' . $request->search . '%');
});
}
if($request->has('mime_type')) {
$mime_types = explode(',', $request->mime_type);
$query->where(function ($query) use ($mime_types) {
foreach ($mime_types as $mime_type) {
$mime_type = str_replace('*', '%', $mime_type);
$query->orWhere('mime_type', 'like', $mime_type);
}
});
}
$media = $query->orderBy('created_at', 'desc');
if($request->wantsJson() && !(empty($request->input('selected'))) && empty($request->get('search')) && !$request->has('page')) {
$selected = $request->input('selected')[0];
$selectedMedia = $media->get();
$selectedMediaIndex = $selectedMedia->search(function ($item) use ($selected) {
return $item->name == $selected;
});
if ($selectedMediaIndex !== false) {
$page = intdiv($selectedMediaIndex, $perPage) + 1;
$request->merge(['page' => $page]);
}
}
$media = $media->paginate($perPage)->onEachSide(1);
// Transform the 'password' field of each item in the collection
$media->getCollection()->transform(function ($item) {
$item->password = $item->password ? 'yes' : null;
return $item;
});
return $media;
}
/**
* Display the specified resource.
*/
public function show(Request $request, Media $media)
{
if(!$request->wantsJson()) {
abort(404);
}
return response()->json($media);
}
/**
* Show the form for creating a new resource.
*/
public function admin_create()
{
return view('admin.media.edit');
}
/**
* Store a newly created resource in storage.
*/
public function admin_store(Request $request)
{
$file = null;
$cleanupPath = null;
// Check if the endpoint received a file...
if($request->hasFile('file')) {
try {
$file = $this->upload($request);
if(is_array($file) && !empty($file['chunk'])) {
return response()->json([
'message' => 'Chunk stored',
'upload_token' => $file['token'] ?? null,
]);
} else if(!$file) {
return response()->json([
'message' => 'An error occurred processing the file.',
'errors' => [
'file' => 'An error occurred processing the file.'
]
], 422);
}
if(!$request->has('title')) {
return response()->json([
'message' => 'The file ' . $file->getClientOriginalName() . ' has been uploaded',
'file' => [
'name' => $file->getClientOriginalName(),
'size' => $file->getSize(),
'mime_type' => $file->getMimeType()
]
]);
}
} catch(\Exception $e) {
return response()->json([
'message' => $e->getMessage(),
'errors' => [
'file' => $e->getMessage()
]
], 422);
}
// else check if it received a file name of a previous upload...
} else if($request->has('upload_token') || $request->has('file')) {
$uploadToken = $request->input('upload_token', $request->input('file'));
$chunkUploads = session()->get('chunk_uploads', []);
if(!is_string($uploadToken) || !isset($chunkUploads[$uploadToken])) {
return response()->json([
'message' => 'Could not find the referenced file on the server.',
'errors' => [
'file' => 'Could not find the referenced file on the server.'
]
], 422);
}
$tempFileName = $chunkUploads[$uploadToken];
if(!file_exists($tempFileName)) {
return response()->json([
'message' => 'Could not find the referenced file on the server.',
'errors' => [
'file' => 'Could not find the referenced file on the server ('.$tempFileName.').'
]
], 422);
}
$fileMime = mime_content_type($tempFileName);
if($fileMime === false) {
$fileMime = 'application/octet-stream';
}
$fileName = $request->input('filename', 'upload');
$fileName = Helpers::cleanFileName($fileName);
if ($fileName === '') {
$fileName = 'upload';
}
$file = new UploadedFile($tempFileName, $fileName, $fileMime, null, true);
$cleanupPath = $tempFileName;
unset($chunkUploads[$uploadToken]);
session()->put('chunk_uploads', $chunkUploads);
}
// Check there is an actual file
if(!$file) {
return response()->json([
'message' => 'A file is required.',
'errors' => [
'file' => 'A file is required.'
]
], 422);
}
if(!$request->has('title')) {
return response()->json([
'message' => 'A title is required',
'errors' => [
'title' => 'A title is required'
]
], 422);
}
$fileName = $file->getClientOriginalName();
$name = pathinfo($fileName, PATHINFO_FILENAME);
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
$name = Helpers::cleanFileName($name);
if(Media::find($name . '.' . $extension) !== null) {
$increment = 1;
$name = preg_replace('/-\d+$/', '', $name);
while(Media::find($name . '-' . $increment . '.' . $extension) !== null) {
$increment++;
}
$fileName = $name . '-' . $increment . '.' . $extension;
}
$hash = hash_file('sha256', $file->path());
$storage = Storage::disk('media');
$exists = $storage->exists($hash);
if(!$exists) {
if($file->storeAs('/', $hash, 'media') === false) {
if($request->wantsJson()) {
return response()->json([
'message' => 'A server error occurred uploading the file.',
], 500);
} else {
session()->flash('message', 'A server error occurred uploading the file.');
session()->flash('message-title', 'Upload failed');
session()->flash('message-type', 'danger');
return redirect()->back();
}
}
}
$media = Media::Create([
'title' => $request->get('title', Helpers::filenameToTitle($fileName)),
'user_id' => auth()->id(),
'name' => $fileName,
'size' => $file->getSize(),
'mime_type' => $file->getMimeType(),
'hash' => $hash
]);
if(!$exists) {
$media->generateVariants(false);
} else {
// find media with the same hash that also has variants and copy them
$mediaWithVariants = Media::where('hash', $hash)->where('variants', '!=', '')->orderBy('created_at')->first();
if($mediaWithVariants) {
$media->variants = $mediaWithVariants->variants;
$media->save();
}
}
if(is_string($cleanupPath)) {
$realPath = realpath($cleanupPath);
$tempDir = realpath(sys_get_temp_dir());
if($realPath !== false && $tempDir !== false && str_starts_with($realPath, $tempDir . DIRECTORY_SEPARATOR)) {
@unlink($realPath);
}
}
if($request->wantsJson()) {
return response()->json([
'message' => 'File has been uploaded',
'name' => $media->name,
'size' => $media->size,
'mime_type' => $media->mime_type
]);
} else {
session()->flash('message', 'Media has been uploaded');
session()->flash('message-title', 'Media uploaded');
session()->flash('message-type', 'success');
return redirect()->route('admin.media.index');
}
}
/**
* Show the form for editing the specified resource.
*/
public function admin_edit(Media $media)
{
return view('admin.media.edit', ['medium' => $media]);
}
/**
* Update the specified resource in storage.
*/
public function admin_update(Request $request, Media $media)
{
$max_size = Helpers::getMaxUploadSize();
$validator = Validator::make($request->all(), [
'title' => 'required',
// 'file' => 'nullable|file|max:' . (max(round($max_size / 1024),0)),
], [
'title.required' => __('validation.custom_messages.title_required'),
// 'file.required' => __('validation.custom_messages.file_required'),
// 'file.file' => __('validation.custom_messages.file_file'),
// 'file.max' => __('validation.custom_messages.file_max', ['max' => Helpers::bytesToString($max_size)])
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$mediaData = $request->all();
// $file = null;
// if($request->has('file')) {
// $file = $request->file('file');
//
// $name = $file->getClientOriginalName();
// $name = Helpers::cleanFileName($name);
// if ($name !== $media->name) {
// if (Media::find($name) !== null) {
// $increment = 2;
// while (Media::find($name . '-' . $increment) !== null) {
// $increment++;
// }
//
// $name = $name . '-' . $increment;
// }
// }
//
// $hash = hash_file('sha256', $file->path());
//
// $storage = Storage::disk('media');
// if (!$storage->exists($hash)) {
// if ($file->storeAs('/', $hash, 'media') === false) {
// session()->flash('message', 'A server error occurred uploading the file.');
// session()->flash('message-title', 'Upload failed');
// session()->flash('message-type', 'danger');
// return redirect()->back();
// }
// }
//
// $mediaData['name'] = $name;
// $mediaData['size'] = $file->getSize();
// $mediaData['mime_type'] = $file->getMimeType();
// $mediaData['hash'] = $hash;
// }
if($request->get('password_clear') === 'on') {
$mediaData['password'] = null;
} else {
$password = $request->get('password');
if($password !== null && $password !== '') {
$mediaData['password'] = password_hash($request->get('password'), PASSWORD_DEFAULT);
} else {
unset($mediaData['password']);
}
}
$media->update($mediaData);
// if($file) {
// $media->generateVariants(false);
// unlink($file);
// }
session()->flash('message', 'Media has been updated');
session()->flash('message-title', 'Media updated');
session()->flash('message-type', 'success');
return redirect()->route('admin.media.index');
}
/**
* Remove the specified resource from storage.
*/
public function admin_destroy(Request $request, Media $media)
{
$media->delete();
session()->flash('message', 'Media has been deleted');
session()->flash('message-title', 'Media deleted');
session()->flash('message-type', 'danger');
if($request->wantsJson()) {
return response()->json([
'success' => true,
'redirect' => route('admin.media.index'),
]);
}
return redirect()->route('admin.media.index');
}
/**
* @throws FileInvalidException
* @throws FileTooLargeException
*/
private function upload(Request $request)
{
$max_size = Helpers::getMaxUploadSize();
$file = $request->file('file');
if(!$file->isValid()) {
throw new FileInvalidException('The file is invalid');
}
$fileName = $request->input('filename', $file->getClientOriginalName());
$fileName = Helpers::cleanFileName($fileName);
if ($fileName === '') {
$extension = strtolower($file->getClientOriginalExtension());
$fileName = 'upload' . ($extension !== '' ? '.' . $extension : '');
}
if(($request->has('filestart') || $request->has('fileappend')) && $request->has('filesize')) {
$fileSize = $request->get('filesize');
if($fileSize > $max_size) {
throw new FileTooLargeException('The file is larger than the maximum size allowed of ' . Helpers::bytesToString($max_size));
}
$chunkUploads = session()->get('chunk_uploads', []);
$uploadToken = $request->input('upload_token');
if($request->has('filestart')) {
$uploadToken = bin2hex(random_bytes(16));
$tempFilePath = tempnam(sys_get_temp_dir(), 'chunk-' . Auth::id() . '-');
if($tempFilePath === false) {
throw new FileInvalidException('Unable to create a temporary upload file.');
}
$chunkUploads[$uploadToken] = $tempFilePath;
session()->put('chunk_uploads', $chunkUploads);
} else {
if(!is_string($uploadToken) || !isset($chunkUploads[$uploadToken])) {
throw new FileInvalidException('Invalid upload token.');
}
$tempFilePath = $chunkUploads[$uploadToken];
}
$filemode = 'a';
if($request->has('filestart')) {
$filemode = 'w';
}
// Append the chunk to the temporary file
$fp = fopen($tempFilePath, $filemode);
if ($fp) {
fwrite($fp, file_get_contents($file->getRealPath()));
fclose($fp);
}
// Check if the upload is complete
if (filesize($tempFilePath) >= $fileSize) {
$fileMime = mime_content_type($tempFilePath);
if($fileMime === false) {
$fileMime = 'application/octet-stream';
}
if(is_string($uploadToken) && isset($chunkUploads[$uploadToken])) {
unset($chunkUploads[$uploadToken]);
session()->put('chunk_uploads', $chunkUploads);
}
return new UploadedFile($tempFilePath, $fileName, $fileMime, null, true);
} else {
return [
'chunk' => true,
'token' => $uploadToken,
];
}
}
return $file;
}
public function download(Request $request, Media $media)
{
$file = $media->path();
if($file === null) {
abort(404, 'File not found');
}
if($media->password !== null && !Auth::user()?->isAdmin()) {
if(!$request->has('password')) {
return view('media-password');
} else {
$password = $request->get('password');
if($password === '' || $password === null) {
return view('media-password', [
'error' => 'Password is required',
]);
}
if(!password_verify(base64_decode($password), $media->password)) {
return view('media-password', [
'error' => 'Password is incorrect',
]);
}
}
}
$variant = '';
$download = false;
$variants = array_keys($media->getVariantTypes());
$query = $request->getQueryString();
if($query !== '') {
$queryList = explode('&', $query);
foreach($queryList as $queryItem) {
$parts = explode('=', $queryItem);
if($variant === '' && in_array($parts[0], $variants) && ($parts[1] === '' || filter_var($parts[1], FILTER_VALIDATE_BOOLEAN))) {
$variant = $parts[0];
}
if($parts[0] === 'download' && ($parts[1] === '' || filter_var($parts[1], FILTER_VALIDATE_BOOLEAN))) {
$download = true;
}
}
}
$mime_type = $media->mime_type;
$name = $media->name;
if($variant !== '') {
$variantFile = $media->getClosestVariant($variant);
$file = $variantFile['file'];
$mime_type = $variantFile['mime_type'];
$name = $variantFile['name'];
}
$headers = [
'Content-Type' => $mime_type,
'Content-Disposition' => ($download ? 'attachment; ' : '') . 'filename="' . $name . '"',
];
return response()->file($file, $headers);
}
}

View File

@@ -0,0 +1,147 @@
<?php
namespace App\Http\Controllers;
use App\Helpers;
use App\Models\Media;
use App\Models\Post;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class PostController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$query = Post::query();
$query->where('status', 'published');
if($request->has('search')) {
$query->where('title', 'like', '%' . $request->search . '%');
$query->orWhere('content', 'like', '%' . $request->search . '%');
}
$posts = $query->orderBy('created_at', 'desc')->paginate(12)->onEachSide(1);
return view('post.index', [
'posts' => $posts
]);
}
/**
* Display a listing of the resource.
*/
public function admin_index(Request $request)
{
$query = Post::query();
if($request->has('search')) {
$query->where('title', 'like', '%' . $request->search . '%');
$query->orWhere('content', 'like', '%' . $request->search . '%');
}
$posts = $query->orderBy('created_at', 'desc')->paginate(12)->onEachSide(1);
return view('admin.post.index', [
'posts' => $posts
]);
}
/**
* Show the form for creating a new resource.
*/
public function admin_create()
{
return view('admin.post.edit');
}
/**
* Store a newly created resource in storage.
*/
public function admin_store(Request $request)
{
$request->validate([
'title' => 'required',
'content' => 'required',
'hero_media_name' => 'required|exists:media,name',
], [
'title.required' => __('validation.custom_messages.title_required'),
'content.required' => __('validation.custom_messages.content_required'),
'hero_media_name.required' => __('validation.custom_messages.hero_media_name_required'),
]);
$postData = $request->all();
$postData['user_id'] = auth()->user()->id;
$post = Post::create($postData);
$post->updateFiles($request->input('files'));
$post->updateFiles($request->input('gallery'), 'gallery');
$post->updateFiles($request->input('videos'), 'videos');
session()->flash('message', 'Post has been created');
session()->flash('message-title', 'Post created');
session()->flash('message-type', 'success');
return redirect()->route('admin.post.index');
}
/**
* Display the specified resource.
*/
public function show(Post $post)
{
return view('post.show', ['post' => $post]);
}
/**
* Show the form for editing the specified resource.
*/
public function admin_edit(Post $post)
{
return view('admin.post.edit', ['post' => $post]);
}
/**
* Update the specified resource in storage.
*/
public function admin_update(Request $request, Post $post)
{
$request->validate([
'title' => 'required',
'content' => 'required',
'hero_media_name' => 'required|exists:media,name',
], [
'title.required' => __('validation.custom_messages.title_required'),
'content.required' => __('validation.custom_messages.content_required'),
'hero_media_name.required' => __('validation.custom_messages.hero_media_name_required'),
]);
$postData = $request->all();
$post->update($postData);
$post->updateFiles($request->input('files'));
$post->updateFiles($request->input('gallery'), 'gallery');
$post->updateFiles($request->input('videos'), 'videos');
session()->flash('message', 'Post has been updated');
session()->flash('message-title', 'Post updated');
session()->flash('message-type', 'success');
return redirect()->route('admin.post.index');
}
/**
* Remove the specified resource from storage.
*/
public function admin_destroy(Post $post)
{
$post->delete();
session()->flash('message', 'Post has been deleted');
session()->flash('message-title', 'Post deleted');
session()->flash('message-type', 'danger');
return redirect()->route('admin.post.index');
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use App\Models\Workshop;
use Carbon\Carbon;
use Illuminate\Http\Request;
class SearchController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$search = $request->get('q', '');
$search_words = explode(' ', $search); // Split the search query into words[1]
$workshopQuery = Workshop::query()->where('status', '!=', 'draft');
$workshopQuery->where(function ($query) use ($search_words) {
foreach ($search_words as $word) {
$query->orWhere(function ($subQuery) use ($word) {
$subQuery->where('title', 'like', '%' . $word . '%')
->orWhere('content', 'like', '%' . $word . '%')
->orWhereHas('location', function ($locationQuery) use ($word) {
$locationQuery->where('name', 'like', '%' . $word . '%');
});
});
}
});
$workshops = $workshopQuery->orderBy('starts_at', 'desc')
->paginate(6, ['*'], 'workshop');
// $postQuery = Post::query()->where('status', 'published');
// $postQuery->where(function ($query) use ($search_words) {
// foreach ($search_words as $word) {
// $query->where(function ($subQuery) use ($word) {
// $subQuery->where('title', 'like', '%' . $word . '%')
// ->orWhere('content', 'like', '%' . $word . '%');
// });
// }
// });
//
// $posts = $postQuery->orderBy('created_at', 'desc')
// ->paginate(6, ['*'], 'post')
// ->onEachSide(1);
return view('search', [
'workshops' => $workshops,
// 'posts' => $posts,
'search' => $search,
]);
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace App\Http\Controllers;
use App\Models\EmailSubscriptions;
use App\Models\SentEmail;
use Illuminate\Http\Request;
class SubscribeController extends Controller
{
/**
* Display a listing of the resource.
*/
public function destroy($email)
{
$emailModel = SentEmail::where('id', $email)->first();
if (!$emailModel) {
// Email not found, redirect to home page with a message
return redirect()->route('index')->with([
'message' => 'The unsubscribe link is invalid or has expired.',
'message-title' => 'Invalid Unsubscribe Link',
'message-type' => 'warning'
]);
}
// Existing unsubscribe logic
$subscriptions = EmailSubscriptions::where('email', $emailModel->recipient)->get();
if ($subscriptions->isEmpty()) {
session()->flash('message', 'You are already unsubscribed.');
session()->flash('message-title', 'Already Unsubscribed');
session()->flash('message-type', 'info');
} else {
EmailSubscriptions::where('email', $emailModel->recipient)->delete();
session()->flash('message', 'You have been successfully unsubscribed.');
session()->flash('message-title', 'Unsubscribed');
session()->flash('message-type', 'success');
}
return redirect()->route('index');
}
}

View File

@@ -0,0 +1,65 @@
<?php
namespace App\Http\Controllers;
use App\Models\Ticket;
use Illuminate\Http\Request;
class TicketController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(Ticket $ticket)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Ticket $ticket)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Ticket $ticket)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Ticket $ticket)
{
//
}
}

View File

@@ -0,0 +1,167 @@
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$query = User::query();
if($request->has('search')) {
$query->where('firstname', 'like', '%' . $request->search . '%');
$query->orWhere('surname', 'like', '%' . $request->search . '%');
$query->orWhere('phone', 'like', '%' . $request->search . '%');
$query->orWhere('email', 'like', '%' . $request->search . '%');
}
$users = $query->orderBy('created_at', 'desc')->paginate(12)->onEachSide(1);
return view('admin.user.index', [
'users' => $users
]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('admin.user.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate([
'firstname' => '',
'surname' => '',
'email' => 'email|unique:users',
'phone' => '',
'shipping_address' => 'required_with:shipping_city,shipping_postcode,shipping_country,shipping_state',
'shipping_city' => 'required_with:shipping_address,shipping_postcode,shipping_country,shipping_state',
'shipping_postcode' => 'required_with:shipping_address,shipping_city,shipping_country,shipping_state',
'shipping_country' => 'required_with:shipping_address,shipping_city,shipping_postcode,shipping_state',
'shipping_state' => 'required_with:shipping_address,shipping_city,shipping_postcode,shipping_country',
'billing_address' => 'required_with:billing_city,billing_postcode,billing_country,billing_state',
'billing_city' => 'required_with:billing_address,billing_postcode,billing_country,billing_state',
'billing_postcode' => 'required_with:billing_address,billing_city,billing_country,billing_state',
'billing_country' => 'required_with:billing_address,billing_city,billing_postcode,billing_state',
'billing_state' => 'required_with:billing_address,billing_city,billing_postcode,billing_country',
], [
'firstname.required' => __('validation.custom_messages.firstname_required'),
'surname.required' => __('validation.custom_messages.surname_required'),
'email.required' => __('validation.custom_messages.email_required'),
'email.email' => __('validation.custom_messages.email_invalid'),
'phone.required' => __('validation.custom_messages.phone_required'),
'shipping_address.required' => __('validation.custom_messages.shipping_address_required'),
'shipping_city.required' => __('validation.custom_messages.shipping_city_required'),
'shipping_postcode.required' => __('validation.custom_messages.shipping_postcode_required'),
'shipping_country.required' => __('validation.custom_messages.shipping_country_required'),
'shipping_state.required' => __('validation.custom_messages.shipping_state_required'),
'billing_address.required' => __('validation.custom_messages.billing_address_required'),
'billing_city.required' => __('validation.custom_messages.billing_city_required'),
'billing_postcode.required' => __('validation.custom_messages.billing_postcode_required'),
'billing_country.required' => __('validation.custom_messages.billing_country_required'),
'billing_state.required' => __('validation.custom_messages.billing_state_required'),
]);
User::create($request->all());
session()->flash('message', 'User has been created');
session()->flash('message-title', 'User created');
session()->flash('message-type', 'success');
return redirect()->route('admin.user.index');
}
/**
* Show the form for editing the specified resource.
*/
public function edit(User $user)
{
return view('admin.user.edit', compact('user'));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, User $user)
{
$request->validate([
'firstname' => '',
'surname' => '',
'email' => ['email', Rule::unique('users')->ignore($user->id)],
'phone' => '',
'shipping_address' => 'required_with:shipping_city,shipping_postcode,shipping_country,shipping_state',
'shipping_city' => 'required_with:shipping_address,shipping_postcode,shipping_country,shipping_state',
'shipping_postcode' => 'required_with:shipping_address,shipping_city,shipping_country,shipping_state',
'shipping_country' => 'required_with:shipping_address,shipping_city,shipping_postcode,shipping_state',
'shipping_state' => 'required_with:shipping_address,shipping_city,shipping_postcode,shipping_country',
'billing_address' => 'required_with:billing_city,billing_postcode,billing_country,billing_state',
'billing_city' => 'required_with:billing_address,billing_postcode,billing_country,billing_state',
'billing_postcode' => 'required_with:billing_address,billing_city,billing_country,billing_state',
'billing_country' => 'required_with:billing_address,billing_city,billing_postcode,billing_state',
'billing_state' => 'required_with:billing_address,billing_city,billing_postcode,billing_country',
], [
'firstname.required' => __('validation.custom_messages.firstname_required'),
'surname.required' => __('validation.custom_messages.surname_required'),
'email.required' => __('validation.custom_messages.email_required'),
'email.email' => __('validation.custom_messages.email_invalid'),
'phone.required' => __('validation.custom_messages.phone_required'),
'shipping_address.required' => __('validation.custom_messages.shipping_address_required'),
'shipping_city.required' => __('validation.custom_messages.shipping_city_required'),
'shipping_postcode.required' => __('validation.custom_messages.shipping_postcode_required'),
'shipping_country.required' => __('validation.custom_messages.shipping_country_required'),
'shipping_state.required' => __('validation.custom_messages.shipping_state_required'),
'billing_address.required' => __('validation.custom_messages.billing_address_required'),
'billing_city.required' => __('validation.custom_messages.billing_city_required'),
'billing_postcode.required' => __('validation.custom_messages.billing_postcode_required'),
'billing_country.required' => __('validation.custom_messages.billing_country_required'),
'billing_state.required' => __('validation.custom_messages.billing_state_required'),
]);
$user->update($request->all());
session()->flash('message', 'User details have been updated');
session()->flash('message-title', 'Details updated');
session()->flash('message-type', 'success');
return redirect()->back();
}
/**
* Remove the specified resource from storage.
*/
public function destroy(User $user)
{
if($user->id !== '1') {
$user->delete();
session()->flash('message', 'User has been deleted');
session()->flash('message-title', 'User deleted');
session()->flash('message-type', 'success');
} else {
session()->flash('message', 'You cannot delete the main admin user');
session()->flash('message-title', 'User not deleted');
session()->flash('message-type', 'error');
}
return redirect()->route('admin.user.index');
}
}

View File

@@ -0,0 +1,209 @@
<?php
namespace App\Http\Controllers;
use App\Models\Workshop;
use Carbon\Carbon;
use Illuminate\Http\Request;
class WorkshopController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$query = Workshop::query();
$query = $query->where('starts_at', '>=', Carbon::now()->subDays(8))
->orderBy('starts_at', 'asc');
$workshops = $query->paginate(12);
return view('workshop.index', [
'workshops' => $workshops
]);
}
/**
* Display a listing of the resource.
*/
public function past_index()
{
$query = Workshop::query();
$query = $query->where('starts_at', '<', Carbon::now())
->orderBy('starts_at', 'desc');
$workshops = $query->paginate(12);
return view('workshop.index', [
'workshops' => $workshops
]);
}
/**
* Display a listing of the resource.
*/
public function admin_index(Request $request)
{
$query = Workshop::query();
if($request->has('search')) {
$query->where('title', 'like', '%' . $request->search . '%');
$query->orWhere('content', 'like', '%' . $request->search . '%');
}
$workshops = $query->orderBy('starts_at', 'desc')->paginate(12)->onEachSide(1);
return view('admin.workshop.index', [
'workshops' => $workshops
]);
}
/**
* Show the form for creating a new resource.
*/
public function admin_create()
{
return view('admin.workshop.edit');
}
/**
* Store a newly created resource in storage.
*/
public function admin_store(Request $request)
{
$request->validate([
'title' => 'required',
'content' => 'required',
'starts_at' => 'required',
'ends_at' => 'required|after:starts_at',
'publish_at' => 'required',
'closes_at' => 'required',
'status' => 'required',
'hero_media_name' => 'required|exists:media,name',
'registration_data' => 'required_unless:registration,none',
], [
'title.required' => __('validation.custom_messages.title_required'),
'content.required' => __('validation.custom_messages.content_required'),
'starts_at.required' => __('validation.custom_messages.starts_at_required'),
'ends_at.required' => __('validation.custom_messages.ends_at_required'),
'ends_at.after' => __('validation.custom_messages.ends_at_after'),
'publish_at.required' => __('validation.custom_messages.publish_at_required'),
'closes_at.required' => __('validation.custom_messages.closes_at_required'),
'status.required' => __('validation.custom_messages.status_required'),
'hero_media_name.required' => __('validation.custom_messages.hero_media_name_required'),
'hero_media_name.exists' => __('validation.custom_messages.hero_media_name_exists'),
'registration_data.required_unless' => __('validation.custom_messages.registration_data_required_unless'),
]);
$workshopData = $request->all();
$workshopData['user_id'] = auth()->user()->id;
if($workshopData['status'] === 'open' && Carbon::parse($workshopData['starts_at'])->lt(Carbon::now())) {
$workshopData['status'] = 'closed';
}
$workshop = Workshop::create($workshopData);
$workshop->updateFiles($request->input('files'));
session()->flash('message', 'Workshop has been created');
session()->flash('message-title', 'Workshop created');
session()->flash('message-type', 'success');
return redirect()->route('admin.workshop.index');
}
/**
* Display the specified resource.
*/
public function show(Workshop $workshop)
{
if(!auth()->user()?->admin && $workshop->status == 'draft') {
abort(404);
}
return view('workshop.show', ['workshop' => $workshop]);
}
/**
* Show the form for editing the specified resource.
*/
public function admin_edit(Workshop $workshop)
{
return view('admin.workshop.edit', ['workshop' => $workshop]);
}
/**
* Update the specified resource in storage.
*/
public function admin_update(Request $request, Workshop $workshop)
{
$request->validate([
'title' => 'required',
'content' => 'required',
'starts_at' => 'required',
'ends_at' => 'required|after:starts_at',
'publish_at' => 'required',
'closes_at' => 'required',
'status' => 'required',
'hero_media_name' => 'required|exists:media,name',
'registration_data' => 'required_unless:registration,none',
], [
'title.required' => __('validation.custom_messages.title_required'),
'content.required' => __('validation.custom_messages.content_required'),
'starts_at.required' => __('validation.custom_messages.starts_at_required'),
'ends_at.required' => __('validation.custom_messages.ends_at_required'),
'ends_at.after' => __('validation.custom_messages.ends_at_after'),
'publish_at.required' => __('validation.custom_messages.publish_at_required'),
'closes_at.required' => __('validation.custom_messages.closes_at_required'),
'status.required' => __('validation.custom_messages.status_required'),
'hero_media_name.required' => __('validation.custom_messages.hero_media_name_required'),
'hero_media_name.exists' => __('validation.custom_messages.hero_media_name_exists'),
'registration_data.required_unless' => __('validation.custom_messages.registration_data_required_unless'),
]);
$workshopData = $request->all();
if($workshopData['status'] === 'open' && Carbon::parse($workshopData['starts_at'])->lt(Carbon::now())) {
$workshopData['status'] = 'closed';
}
$workshop->update($workshopData);
$workshop->updateFiles($request->input('files'));
session()->flash('message', 'Workshop has been updated');
session()->flash('message-title', 'Workshop updated');
session()->flash('message-type', 'success');
return redirect()->route('admin.workshop.index');
}
/**
* Remove the specified resource from storage.
*/
public function admin_destroy(Workshop $workshop)
{
$workshop->delete();
session()->flash('message', 'Workshop has been deleted');
session()->flash('message-title', 'Workshop deleted');
session()->flash('message-type', 'danger');
return redirect()->route('admin.workshop.index');
}
/**
* Duplicate the specified resource.
*/
public function admin_duplicate(Workshop $workshop)
{
$newWorkshop = $workshop->replicate();
$newWorkshop->title = $newWorkshop->title . ' (copy)';
$newWorkshop->status = 'draft';
$newWorkshop->save();
foreach($workshop->files as $file) {
$newWorkshop->files()->attach($file->name);
}
session()->flash('message', 'Workshop has been duplicated');
session()->flash('message-title', 'Workshop duplicated');
session()->flash('message-type', 'success');
return redirect()->route('admin.workshop.edit', $newWorkshop);
}
}

View File

@@ -1,71 +0,0 @@
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array<int, class-string|string>
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
// \App\Http\Middleware\TrimStrings::class,
// \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array<string, array<int, class-string|string>>
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
// \App\Http\Middleware\ForceJsonResponse::class,
'useSanctumGuard',
\App\Http\Middleware\LogRequest::class,
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array<string, class-string|string>
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'useSanctumGuard' => \App\Http\Middleware\UseSanctumGuard::class
];
}

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Http\Middleware;
use App\Models\User;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
/* @var User $user */
$user = Auth::user();
if ($user) {
if($user->admin == 1) {
return $next($request);
}
abort(403, 'Forbidden');
}
session()->put('url.intended', url()->current());
return redirect()->route('login');
}
}

View File

@@ -1,21 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param mixed $request Request.
* @return string|null
*/
protected function redirectTo(mixed $request)
{
if ($request->expectsJson() === false) {
return route('login');
}
}
}

View File

@@ -1,17 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array<int, string>
*/
protected $except = [
//
];
}

View File

@@ -1,22 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ForceJsonResponse
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
$request->headers->set('Accept', 'application/json');
return $next($request);
}
}

View File

@@ -1,37 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use App\Models\Analytics;
class LogRequest
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
// Make it an after middleware
$response = $next($request);
try {
Analytics::create([
'type' => 'pageview',
'attribute' => $request->path(),
'useragent' => $request->userAgent(),
'ip' => $request->ip(),
]);
return $response;
} catch (\Error $e) {
report($e);
return $response;
}
}
}

View File

@@ -1,17 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
class PreventRequestsDuringMaintenance extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array<int, string>
*/
protected $except = [
//
];
}

View File

@@ -1,32 +0,0 @@
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param Request $request Request.
* @param Closure(Request): (Response|RedirectResponse) $next Next.
* @param string|null ...$guards Guards.
* @return Response|RedirectResponse
*/
public function handle(Request $request, Closure $next, ...$guards)
{
$guards = empty($guards) === true ? [null] : $guards;
foreach ($guards as $guard) {
if (Auth::guard($guard)->check() === true) {
return redirect(RouteServiceProvider::HOME);
}
}
return $next($request);
}
}

View File

@@ -1,19 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array<int, string>
*/
protected $except = [
'current_password',
'password',
'password_confirmation',
];
}

View File

@@ -1,20 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustHosts as Middleware;
class TrustHosts extends Middleware
{
/**
* Get the host patterns that should be trusted.
*
* @return array<int, string|null>
*/
public function hosts()
{
return [
$this->allSubdomainsOfApplicationUrl(),
];
}
}

View File

@@ -1,25 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array<int, string>|string|null
*/
protected $proxies;
/**
* The headers that should be used to detect proxies.
*
* @var integer
*/
// @codingStandardsIgnoreStart
protected $headers = (Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_AWS_ELB);
// @codingStandardsIgnoreEnd
}

View File

@@ -1,23 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class UseSanctumGuard
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
Auth::shouldUse('sanctum');
return $next($request);
}
}

View File

@@ -1,22 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Routing\Middleware\ValidateSignature as Middleware;
class ValidateSignature extends Middleware
{
/**
* The names of the query string parameters that should be ignored.
*
* @var array<int, string>
*/
protected $except = [
// 'fbclid',
// 'utm_campaign',
// 'utm_content',
// 'utm_medium',
// 'utm_source',
// 'utm_term',
];
}

View File

@@ -1,17 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array<int, string>
*/
protected $except = [
//
];
}

View File

@@ -1,21 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class AuthLoginRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'username' => 'required|string|min:6|max:255',
'password' => 'required|string|min:6',
];
}
}

View File

@@ -1,97 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class BaseRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function authorize()
{
if (method_exists($this, 'postAuthorize') === true && request()->isMethod('post') === true) {
return $this->postAuthorize();
} elseif (method_exists($this, 'putAuthorize') === true && request()->isMethod('put') === true) {
return $this->putAuthorize();
}
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
$rules = [];
if (method_exists($this, 'baseRules') === true) {
$rules = $this->baseRules();
}
if (method_exists($this, 'postRules') === true && request()->isMethod('post') === true) {
$rules = $this->mergeRules($rules, $this->postRules());
} elseif (method_exists($this, 'putRules') === true && request()->isMethod('put') === true) {
$rules = $this->mergeRules($rules, $this->postRules());
} elseif (method_exists($this, 'destroyRules') === true && request()->isMethod('delete') === true) {
$rules = $this->mergeRules($rules, $this->destroyRules());
}
return $rules;
}
/**
* Merge two collections of rules.
*
* @param array $collection1 The first collection of rules.
* @param array $collection2 The second collection of rules to merge.
* @return array
*/
private function mergeRules(array $collection1, array $collection2)
{
$rules = [];
foreach ($collection1 as $key => $ruleset) {
if (array_key_exists($key, $collection2) === true) {
if (is_string($collection1[$key]) === true && is_string($collection2[$key]) === true) {
$rules[$key] = $collection1[$key] . '|' . $collection2[$key];
} else {
$key_ruleset = [];
if (is_array($collection1[$key]) === true) {
$key_ruleset = $collection1[$key];
} elseif (is_string($collection1[$key]) === true) {
$key_ruleset = explode('|', $collection1[$key]);
}
if (is_array($collection2[$key]) === true) {
$key_ruleset = array_merge($key_ruleset, $collection2[$key]);
} elseif (is_string($collection1[$key]) === true) {
$key_ruleset = array_merge($key_ruleset, explode('|', $collection1[$key]));
}
if (count($key_ruleset) > 0) {
$rules[$key] = $key_ruleset;
}
}//end if
} else {
$rules[$key] = $ruleset;
}//end if
}//end foreach
foreach ($collection2 as $key => $ruleset) {
if (array_key_exists($key, $rules) === false) {
$rules[$key] = $collection2[$key];
}
}
return $rules;
}
}

View File

@@ -1,24 +0,0 @@
<?php
namespace App\Http\Requests;
use App\Rules\Recaptcha;
use Illuminate\Foundation\Http\FormRequest;
class ContactSendRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'name' => 'required|max:255',
'email' => 'required|email|max:255',
'content' => 'required|max:2000',
'captcha_token' => [new Recaptcha()],
];
}
}

View File

@@ -1,78 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class EventRequest extends BaseRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function postAuthorize()
{
return $this->user()?->hasPermission('admin/events');
}
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function putAuthorize()
{
return $this->user()?->hasPermission('admin/events');
}
/**
* Apply the base rules to this request
*
* @return array<string, mixed>
*/
public function baseRules()
{
return [
'title' => 'min:6',
'location' => [
Rule::in(['online', 'physical']),
],
'address' => 'string|nullable',
'start_at' => 'date',
'end_at' => 'date|after:start_date',
'publish_at' => 'date|nullable',
'status' => [
Rule::in(['draft', 'open', 'closed', 'cancelled']),
],
'registration_type' => [
Rule::in(['none', 'email', 'link']),
],
'registration_data' => [
Rule::when(strcasecmp('email', $this->attributes->get('registration_type')) == 0, 'required|email'),
Rule::when(strcasecmp('link', $this->attributes->get('registration_type')) == 0, 'required|url')
],
'hero' => 'uuid|exists:media,id',
];
}
/**
* Apply the additional POST base rules to this request
*
* @return array<string, mixed>
*/
protected function postRules()
{
return [
'title' => 'required',
'location' => 'required',
'address' => 'required_if:location,physical',
'start_at' => 'required',
'end_at' => 'required',
'status' => 'required',
'registration_type' => 'required',
'hero' => 'required',
];
}
}

View File

@@ -1,20 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MediaStoreRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
//
];
}
}

View File

@@ -1,20 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MediaUpdateRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
//
];
}
}

View File

@@ -1,23 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class PostStoreRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'slug' => 'string|min:6|unique:posts',
'title' => 'string|min:6|max:255',
'publish_at' => 'date',
'user_id' => 'uuid|exists:users,id',
];
}
}

View File

@@ -1,28 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class PostUpdateRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'slug' => [
'string',
'min:6',
Rule::unique('posts')->ignoreModel($this->post),
],
'title' => 'string|min:6|max:255',
'publish_at' => 'date',
'user_id' => 'uuid|exists:users,id',
];
}
}

View File

@@ -1,34 +0,0 @@
<?php
namespace App\Http\Requests;
use App\Rules\Recaptcha;
class SubscriptionRequest extends BaseRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function postRules()
{
return [
'email' => 'required|email',
'captcha_token' => [new Recaptcha()],
];
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function destroyRules()
{
return [
'email' => 'required|email',
'captcha_token' => [new Recaptcha()],
];
}
}

View File

@@ -1,22 +0,0 @@
<?php
namespace App\Http\Requests;
use App\Rules\Recaptcha;
use Illuminate\Foundation\Http\FormRequest;
class UserForgotPasswordRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'username' => 'required|exists:users,username',
'captcha_token' => [new Recaptcha()],
];
}
}

View File

@@ -1,22 +0,0 @@
<?php
namespace App\Http\Requests;
use App\Rules\Recaptcha;
use Illuminate\Foundation\Http\FormRequest;
class UserForgotUsernameRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'email' => 'required|email|max:255',
'captcha_token' => [new Recaptcha()],
];
}
}

View File

@@ -1,24 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRegisterRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'email' => 'required|string|email|max:255',
'username' => 'required|string|min:4|max:255|unique:users',
'password' => 'required|string|min:8',
];
}
}

View File

@@ -1,22 +0,0 @@
<?php
namespace App\Http\Requests;
use App\Rules\Recaptcha;
use Illuminate\Foundation\Http\FormRequest;
class UserResendVerifyEmailRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'username' => 'required|exists:users,username',
'captcha_token' => [new Recaptcha()],
];
}
}

View File

@@ -1,23 +0,0 @@
<?php
namespace App\Http\Requests;
use App\Rules\Recaptcha;
use Illuminate\Foundation\Http\FormRequest;
class UserResetPasswordRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'code' => 'required|digits:6',
'password' => 'required|string|min:8',
'captcha_token' => [new Recaptcha()],
];
}
}

View File

@@ -1,25 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserStoreRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'username' => 'required|string|max:255|min:4|unique:users',
'first_name' => 'required|string|max:255|min:2',
'last_name' => 'required|string|max:255|min:2',
'email' => 'required|string|email|max:255',
'phone' => ['string', 'regex:/^(\+|00)?[0-9][0-9 \-\(\)\.]{7,32}$/'],
'email_verified_at' => 'date'
];
}
}

View File

@@ -1,25 +0,0 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserUpdateRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'username' => 'string|max:255|min:6|unique:users',
'first_name' => 'string|max:255|min:2',
'last_name' => 'string|max:255|min:2',
'email' => 'string|email|max:255',
'phone' => ['nullable','regex:/^(\+|00)?[0-9][0-9 \-\(\)\.]{7,32}$/'],
'password' => 'string|min:8'
];
}
}

View File

@@ -1,22 +0,0 @@
<?php
namespace App\Http\Requests;
use App\Rules\Recaptcha;
use Illuminate\Foundation\Http\FormRequest;
class UserVerifyEmailRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'code' => 'required|digits:6',
'captcha_token' => [new Recaptcha()],
];
}
}

View File

@@ -0,0 +1,207 @@
<?php
namespace App\Jobs\Media;
use App\Models\Media;
use App\Helpers;
use FFMpeg\Coordinate\TimeCode;
use FFMpeg\FFMpeg;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\Middleware\WithoutOverlapping;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
class GenerateVariants implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Media ID
*
* @var String
*/
public $media_name;
/**
* Overwrite existing
*
* @var bool
*/
public $overwrite;
/**
* Create a new job instance.
*
* @param Media $media The media to process
*/
public function __construct(Media $media, bool $overwrite = true)
{
$this->media_name = $media->name;
$this->overwrite = $overwrite;
}
/**
* Get the middleware the job should pass through.
*
* @return array<int, object>
*/
public function middleware(): array
{
return [new WithoutOverlapping($this->media_name)];
}
/**
* Execute the job.
*/
public function handle(): void
{
$media = Media::find($this->media_name);
if ($media === null) {
return;
}
if(Storage::disk('media')->exists($media->hash) === false) {
return;
}
$variantData = $media->getVariantTypes($matchingMimeType);
if(count($variantData) === 0) {
return;
}
$temp = $media->getAsTempFile();
if($temp === null) {
return;
}
$tempDir = pathinfo($temp, PATHINFO_DIRNAME);
$media->deleteAllVariants();
/* Images */
if($matchingMimeType === 'image/*') {
$manager = new ImageManager(new Driver());
$image = $manager->read($temp);
$isPortrait = $image->height() > $image->width();
foreach ($variantData as $variantName => $size) {
$image = $manager->read($temp);
if($isPortrait === true) {
$width = $size['height'];
$height = $size['width'];
} else {
$width = $size['width'];
$height = $size['height'];
}
if($variantName !== 'scaled' && ($image->height() < $height || $image->width() < $width)) {
continue;
}
$image->scaleDown($width, $height);
$variantFile = $tempDir . '/' . $media->hash . '-' . $variantName . '.webp';
$image->save($variantFile, quality: 75);
$media->addVariant($variantName, 'image/webp', 'webp', $variantFile);
unset($variantFile);
}//end foreach
} else if($matchingMimeType === 'text/plain') {
/* Text */
$width = $variantData['thumbnail']['width'];
$height = $variantData['thumbnail']['height'];
$manager = new ImageManager(new Driver());
$image = $manager->create($width, $height)->fill('fff');
// Read the first few lines of the text file
$numLines = 5;
$text = file_get_contents($temp);
$lines = explode("\n", $text);
$previewText = implode("\n", array_slice($lines, 0, $numLines));
// Center the text on the image
$fontSize = 8;
$textColor = '#000000'; // Black text color
// Calculate the position to start drawing the text
$x = 10; // Left padding
$y = 10; // Top padding
// Draw the text on the canvas with text wrapping
$lines = explode("\n", wordwrap($previewText, 30, "\n", true));
foreach ($lines as $line) {
$image->text($line, $x, $y, function ($font) use ($fontSize, $textColor) {
$font->file(1);
$font->size($fontSize);
$font->color($textColor);
});
// Move to the next line
$y += ($fontSize + 4); // Add some vertical spacing between lines (adjust as needed)
}
$variantFile = $tempDir . '/' . $media->hash . '-thumbnail.webp';
$image->save($variantFile, quality: 75);
$media->addVariant('thumbnail', 'image/webp', 'webp', $variantFile);
unset($variantFile);
} else if($matchingMimeType === 'application/pdf') {
/* PDF */
$width = $variantData['thumbnail']['width'];
$height = $variantData['thumbnail']['height'];
$manager = new ImageManager(new Driver());
$imagick = new \Imagick();
$imagick->readImage($temp . '[0]'); // Read the first page of the PDF
$imagick->setImageFormat('png');
$image = $manager->read($imagick);
$image->scaleDown($width, $height);
$variantFile = $tempDir . '/' . $media->hash . '-thumbnail.webp';
$image->save($variantFile, quality: 75);
$media->addVariant('thumbnail', 'image/webp', 'webp', $variantFile);
unset($variantFile);
} else if($matchingMimeType === 'video/*') {
/* Video */
$tempImage = $tempDir . '/' . $media->hash . '-temp-frame.jpg';
$variantFile = $tempDir . '/' . $media->hash . '-thumbnail.webp';
try {
$ffmpeg = FFMpeg::create();
$video = $ffmpeg->open($temp);
$frame = $video->frame(TimeCode::fromSeconds(5));
$frame->save($tempImage);
$width = $variantData['thumbnail']['width'];
$height = $variantData['thumbnail']['height'];
$manager = new ImageManager(new Driver());
$image = $manager->read($tempImage);
$image->scaleDown($width, $height);
$image->save($variantFile, quality: 75);
$media->addVariant('thumbnail', 'image/webp', 'webp', $variantFile);
unset($variantFile);
} catch (\Exception $e) {
Log::error($e);
}
if(file_exists($tempImage)) {
unlink($tempImage);
}
}
$media->status = 'ready';
$media->save();
}
}

View File

@@ -2,20 +2,19 @@
namespace App\Jobs;
use App\Models\SentEmail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
class SendEmailJob implements ShouldQueue
class SendEmail implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
use SerializesModels;
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Mail to receipt
@@ -31,7 +30,6 @@ class SendEmailJob implements ShouldQueue
*/
public $mailable;
/**
* Create a new job instance.
*
@@ -50,8 +48,20 @@ class SendEmailJob implements ShouldQueue
*
* @return void
*/
public function handle()
public function handle(): void
{
// Record sent email
$sentEmail = SentEmail::create([
'recipient' => $this->to,
'mailable_class' => get_class($this->mailable)
]);
// Add unsubscribe link if mailable supports it
if (method_exists($this->mailable, 'withUnsubscribeLink')) {
$unsubscribeLink = route('unsubscribe', ['email' => $sentEmail->id]);
$this->mailable->withUnsubscribeLink($unsubscribeLink);
}
Mail::to($this->to)->send($this->mailable);
}
}

View File

@@ -0,0 +1,104 @@
<?php
namespace App\Livewire;
use App\Jobs\SendEmail;
use Carbon\Carbon;
use Livewire\Component;
use App\Models\EmailSubscriptions;
use App\Mail\UserWelcome;
class EmailSubscribe extends Component
{
public string $email = '';
public bool $success = false;
public string $message = '';
public string $trap = '';
public int $renderedAt; // unix timestamp
protected $rules = [
'email' => 'required|email|max:255',
];
public function mount()
{
$this->renderedAt = now()->timestamp;
}
public function subscribe(): void
{
$this->validate();
// 1. Honeypot - if this hidden field is filled, treat as success but do nothing
if (! empty($this->trap)) {
$this->reset(['email', 'trap']);
$this->success = true;
$this->message = 'Thanks, you have been subscribed to our newsletter.';
return;
}
// 2. Block submits in first 10 seconds after render
if (now()->timestamp - $this->renderedAt < 4) {
$this->success = false;
$this->message = 'That was a bit quick. Please wait a few seconds and try again.';
return;
}
// 3. Enforce 30 seconds between attempts per session
$lastAttempt = session('subscribe_last_attempt'); // int timestamp or null
if (! is_int($lastAttempt)) {
$lastAttempt = null;
}
$now = time();
if ($lastAttempt && ($now - $lastAttempt) < 20) {
$this->success = false;
$this->message = 'Please wait a little before trying again.';
return;
}
session(['subscribe_last_attempt' => $now]);
// 4. Limit to 5 attempts per session (your existing logic)
$attempts = session('subscribe_attempts', 0);
if ($attempts >= 5) {
$this->success = false;
$this->message = 'Too many attempts. Please try again in a little while.';
return;
}
session(['subscribe_attempts' => $attempts + 1]);
// Look up existing subscription by email
$subscription = EmailSubscriptions::where('email', $this->email)->first();
// If already confirmed, do not create a new record or resend confirmation
if ($subscription && $subscription->confirmed) {
// Optionally you could set a different flag or message here
$this->success = false;
$this->message = 'That email is already subscribed to our newsletter.';
} else {
// If no subscription exists, create a new unconfirmed one
if (!$subscription) {
$subscription = EmailSubscriptions::create([
'email' => $this->email,
'confirmed' => Carbon::now()
]);
$subscription->save();
}
dispatch(new SendEmail($subscription->email, new UserWelcome($subscription->email)))->onQueue('mail');
$this->success = true;
$this->message = 'Thanks, you have been subscribed to our newsletter.';
}
$this->reset(['email', 'trap']);
}
public function render()
{
return view('livewire.email-subscribe');
}
}

View File

@@ -1,79 +0,0 @@
<?php
namespace App\Mail;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class ChangeEmailVerify extends Mailable
{
use Queueable;
use SerializesModels;
/**
* The user instance.
*
* @var \App\Models\User
*/
public $user;
/**
* The registration code.
*
* @var integer
*/
public $code;
/**
* The new email address.
*
* @var string
*/
public $new_email;
/**
* Create a new message instance.
*
* @param User $user The user the email applies to.
* @param integer $code The action code.
* @param string $new_email The new email address.
* @return void
*/
public function __construct(User $user, int $code, string $new_email)
{
$this->user = $user;
$this->code = $code;
$this->new_email = $new_email;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: '👋🏻 Lets change your email!',
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'emails.user.change_email_verify',
text: 'emails.user.change_email_verify_plain',
);
}
}

View File

@@ -1,79 +0,0 @@
<?php
namespace App\Mail;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class ChangedEmail extends Mailable
{
use Queueable;
use SerializesModels;
/**
* The user instance.
*
* @var \App\Models\User
*/
public $user;
/**
* The old email.
*
* @var string
*/
public $old_email;
/**
* The new email.
*
* @var string
*/
public $new_email;
/**
* Create a new message instance.
*
* @param User $user The user the email applies to.
* @param string $old_email The previous email address.
* @param string $new_email The new email address.
* @return void
*/
public function __construct(User $user, string $old_email, string $new_email)
{
$this->user = $user;
$this->old_email = $old_email;
$this->new_email = $new_email;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: '👍 Your email has been changed!',
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'emails.user.changed_email',
text: 'emails.user.changed_email_plain',
);
}
}

View File

@@ -1,61 +0,0 @@
<?php
namespace App\Mail;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class ChangedPassword extends Mailable
{
use Queueable;
use SerializesModels;
/**
* The user instance.
*
* @var \App\Models\User
*/
public $user;
/**
* Create a new message instance.
*
* @param User $user The user the email applies to.
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: '👍 Your password has been changed!',
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'emails.user.changed_password',
text: 'emails.user.changed_password_plain',
);
}
}

View File

@@ -1,78 +0,0 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class Contact extends Mailable
{
use Queueable;
use SerializesModels;
/**
* The contact name.
*
* @var string
*/
public $name;
/**
* The contact email.
*
* @var string
*/
public $email;
/**
* The contact content.
*
* @var string
*/
public $content;
/**
* Create a new message instance.
*
* @param string $name The contact name.
* @param string $email The contact email.
* @param string $content The contact content.
* @return void
*/
public function __construct(string $name, string $email, string $content)
{
$this->name = $name;
$this->email = $email;
$this->content = $content;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: config('contact.contact_subject'),
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'emails.user.contact',
text: 'emails.user.contact_plain',
);
}
}

View File

@@ -1,70 +0,0 @@
<?php
namespace App\Mail;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class EmailVerify extends Mailable
{
use Queueable;
use SerializesModels;
/**
* The user instance.
*
* @var \App\Models\User
*/
public $user;
/**
* The registration code.
*
* @var integer
*/
public $code;
/**
* Create a new message instance.
*
* @param User $user The user the email applies to.
* @param integer $code The action code.
* @return void
*/
public function __construct(User $user, int $code)
{
$this->user = $user;
$this->code = $code;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: '👋🏻 Welcome to STEMMechanics!',
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'emails.user.email_verify',
text: 'emails.user.email_verify_plain',
);
}
}

View File

@@ -1,70 +0,0 @@
<?php
namespace App\Mail;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class ForgotPassword extends Mailable
{
use Queueable;
use SerializesModels;
/**
* The user
*
* @var \App\Models\User
*/
public $user;
/**
* The reset code
*
* @var integer
*/
public $code;
/**
* Create a new message instance.
*
* @param User $user The user the email applies to.
* @param integer $code The action code.
* @return void
*/
public function __construct(User $user, int $code)
{
$this->user = $user;
$this->code = $code;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: '🤦 Forgot your password?',
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'emails.user.forgot_password',
text: 'emails.user.forgot_password_plain',
);
}
}

View File

@@ -1,60 +0,0 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class ForgotUsername extends Mailable
{
use Queueable;
use SerializesModels;
/**
* The list of usernames
*
* @var string[]
*/
public $usernames;
/**
* Create a new message instance.
*
* @param array $usernames The usernames.
* @return void
*/
public function __construct(array $usernames)
{
$this->usernames = $usernames;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: '🤦 Forgot your username?',
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'emails.user.forgot_username',
text: 'emails.user.forgot_username_plain',
);
}
}

View File

@@ -1,61 +0,0 @@
<?php
namespace App\Mail;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class SubscriptionConfirm extends Mailable
{
use Queueable;
use SerializesModels;
/**
* The email address.
*
* @var string
*/
public $email;
/**
* Create a new message instance.
*
* @param string $email The email address.
* @return void
*/
public function __construct(string $email)
{
$this->email = $email;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: '🗞️ You\'re on the mailing list!',
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'emails.user.subscription_confirm',
text: 'emails.user.subscription_confirm_plain',
);
}
}

View File

@@ -1,61 +0,0 @@
<?php
namespace App\Mail;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class SubscriptionUnsubscribed extends Mailable
{
use Queueable;
use SerializesModels;
/**
* The email address.
*
* @var string
*/
public $email;
/**
* Create a new message instance.
*
* @param string $email The email address.
* @return void
*/
public function __construct(string $email)
{
$this->email = $email;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: 'You have been unsubscribed',
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'emails.user.subscription_unsubscribed',
text: 'emails.user.subscription_unsubscribed_plain',
);
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace App\Mail;
use App\Models\Workshop;
use App\Traits\HasUnsubscribeLink;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Carbon;
class UpcomingWorkshops extends Mailable
{
use Queueable, SerializesModels, HasUnsubscribeLink;
public $subject;
public $email;
public $workshops;
public function __construct($email, $subject = 'Upcoming Workshops 🌟')
{
$this->subject = $subject;
$this->email = $email;
$this->workshops = $this->getUpcomingWorkshops();
}
private function getUpcomingWorkshops()
{
$startDate = Carbon::now()->addDays(3);
$endDate = Carbon::now()->addDays(42);
return Workshop::select('workshops.*', 'locations.name as location_name')
->join('locations', 'workshops.location_id', '=', 'locations.id')
->whereIn('workshops.status', ['open','scheduled'])
->whereBetween('workshops.starts_at', [$startDate, $endDate])
->where('locations.name', 'not like', '%private%')
->orderBy('locations.name')
->orderBy('workshops.starts_at')
->get();
}
public function build()
{
// Bail if there are no upcoming workshops
if ($this->workshops->isEmpty()) {
return false;
}
return $this
->subject($this->subject)
->markdown('emails.upcoming-workshops')
->with([
'email' => $this->email,
'workshops' => $this->workshops,
'unsubscribeLink' => $this->unsubscribeLink
]);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class UserEmailUpdateConfirm extends Mailable
{
use Queueable, SerializesModels;
public $email;
public function __construct($email)
{
$this->email = $email;
}
public function build()
{
return $this
->subject('Your STEMMechanics account has been updated 👍')
->markdown('emails.email-update-confirm')
->with([
'email' => $this->email,
]);
}
}

View File

@@ -0,0 +1,36 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class UserEmailUpdateRequest extends Mailable
{
use Queueable, SerializesModels;
public $token;
public $email;
public $newEmail;
public function __construct($token, $email, $newEmail)
{
$this->token = $token;
$this->email = $email;
$this->newEmail = $newEmail;
}
public function build()
{
return $this
->subject('Almost There! Confirm Your New Email Address 👍')
->markdown('emails.email-update-request')
->with([
'update_url' => route('update.email', ['token' => $this->token]),
'email' => $this->email,
'newEmail' => $this->newEmail,
]);
}
}

36
app/Mail/UserLogin.php Normal file
View File

@@ -0,0 +1,36 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class UserLogin extends Mailable
{
use Queueable, SerializesModels;
public $token;
public $username;
public $email;
public function __construct($token, $username, $email)
{
$this->token = $token;
$this->username = $username;
$this->email = $email;
}
public function build()
{
return $this
->subject('Here\'s your login link 🤫')
->markdown('emails.login')
->with([
'login_url' => route('login', ['token' => $this->token]),
'username' => $this->username,
'email' => $this->email,
]);
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Mail;
use App\Models\Ticket;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Spatie\LaravelPdf\Facades\Pdf;
class UserLoginBackupCode extends Mailable
{
use Queueable, SerializesModels;
public $email;
public function __construct($email)
{
$this->email = $email;
}
public function build()
{
return $this
->subject('Hey, did you recently log in?')
->markdown('emails.login-backup-code')
->with([
'email' => $this->email,
]);
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Mail;
use App\Models\Ticket;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Spatie\LaravelPdf\Facades\Pdf;
class UserLoginTFADisabled extends Mailable
{
use Queueable, SerializesModels;
public $email;
public function __construct($email)
{
$this->email = $email;
}
public function build()
{
return $this
->subject('Two-factor authentication disabled on your account')
->markdown('emails.login-tfa-disabled')
->with([
'email' => $this->email,
]);
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Mail;
use App\Models\Ticket;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Spatie\LaravelPdf\Facades\Pdf;
class UserLoginTFAEnabled extends Mailable
{
use Queueable, SerializesModels;
public $email;
public function __construct($email)
{
$this->email = $email;
}
public function build()
{
return $this
->subject('Two-factor authentication enabled on your account')
->markdown('emails.login-tfa-enabled')
->with([
'email' => $this->email,
]);
}
}

33
app/Mail/UserRegister.php Normal file
View File

@@ -0,0 +1,33 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class UserRegister extends Mailable
{
use Queueable, SerializesModels;
public $token;
public $email;
public function __construct($token, $email)
{
$this->token = $token;
$this->email = $email;
}
public function build()
{
return $this
->subject('Almost There! Just One More Step to Join Us 🚀')
->markdown('emails.register')
->with([
'register_url' => route('register', ['token' => $this->token]),
'email' => $this->email,
]);
}
}

31
app/Mail/UserWelcome.php Normal file
View File

@@ -0,0 +1,31 @@
<?php
namespace App\Mail;
use App\Traits\HasUnsubscribeLink;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class UserWelcome extends Mailable
{
use Queueable, SerializesModels, HasUnsubscribeLink;
public $email;
public function __construct($email)
{
$this->email = $email;
}
public function build()
{
return $this
->subject('Welcome to STEMMechanics 🌟')
->markdown('emails.welcome')
->with([
'email' => $this->email,
'unsubscribeLink' => $this->unsubscribeLink
]);
}
}

View File

@@ -1,18 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Analytics extends Model
{
use HasFactory;
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
}

View File

@@ -2,21 +2,18 @@
namespace App\Models;
use App\Traits\Uuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Subscription extends Model
class EmailSubscriptions extends Model
{
use HasFactory;
use Uuids;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
* @var array
*/
protected $fillable = [
'email',
'confirmed'
];
}

View File

@@ -1,32 +0,0 @@
<?php
namespace App\Models;
use App\Traits\Uuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
use HasFactory;
use Uuids;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'title',
'location',
'address',
'start_at',
'end_at',
'publish_at',
'status',
'registration_type',
'registration_data',
'hero',
'content'
];
}

14
app/Models/Location.php Normal file
View File

@@ -0,0 +1,14 @@
<?php
namespace App\Models;
use App\Traits\UUID;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Location extends Model
{
use HasFactory, UUID;
protected $fillable = ['name', 'address', 'address_url', 'url'];
}

Some files were not shown because too many files have changed in this diff Show More