Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
b866c03
add iso date and timezone name
dartcafe Dec 21, 2025
f61e29c
change cloning and permission checks
dartcafe Dec 29, 2025
8f76a3d
add timezone name to poll configuration
dartcafe Jan 4, 2026
98a4941
apply timezone to poll and chose
dartcafe Jan 10, 2026
536963b
remove timezone from infoline
dartcafe Jan 11, 2026
4ba03ba
Add timezone info to PollInformation popover
dartcafe Jan 11, 2026
c392fe7
add dates with flexible timezones
dartcafe Jan 18, 2026
561f991
build(deps): Bump dessant/lock-threads from 5 to 6
dependabot[bot] Dec 19, 2025
1a9454a
build(deps): Bump vue from 3.5.25 to 3.5.26
dependabot[bot] Dec 19, 2025
0fb38cc
build(deps-dev): Bump baseline-browser-mapping from 2.9.10 to 2.9.11
dependabot[bot] Dec 22, 2025
318560b
fix(l10n): Update translations from Transifex
nextcloud-bot Dec 23, 2025
f177b97
build(deps): Bump qs from 6.14.0 to 6.14.1
dependabot[bot] Jan 1, 2026
f1336b8
build(deps-dev): Bump vite from 7.3.0 to 7.3.1
dependabot[bot] Jan 8, 2026
85c5e01
build(deps-dev): Bump baseline-browser-mapping from 2.9.11 to 2.9.12
dependabot[bot] Jan 8, 2026
6b0c2d0
fix(l10n): Update translations from Transifex
nextcloud-bot Jan 10, 2026
2379b1f
build(deps): Bump @nextcloud/vue from 9.3.1 to 9.3.2
dependabot[bot] Jan 9, 2026
fe296fc
build(deps-dev): Bump baseline-browser-mapping from 2.9.12 to 2.9.13
dependabot[bot] Jan 9, 2026
6943d2f
fix(l10n): Update translations from Transifex
nextcloud-bot Jan 11, 2026
fe20316
build(deps-dev): Bump baseline-browser-mapping from 2.9.13 to 2.9.14
dependabot[bot] Jan 12, 2026
c2f1429
build(deps): Bump @nextcloud/vue from 9.3.2 to 9.3.3
dependabot[bot] Jan 12, 2026
34418f2
build(deps-dev): Bump @types/lodash from 4.17.21 to 4.17.23
dependabot[bot] Jan 12, 2026
b0f641b
fix(l10n): Update translations from Transifex
nextcloud-bot Jan 14, 2026
c14820c
fix(l10n): Update translations from Transifex
nextcloud-bot Jan 16, 2026
d6bd827
fix(l10n): Update translations from Transifex
nextcloud-bot Jan 17, 2026
6e522c0
build(deps-dev): Bump eslint-plugin-prettier from 5.5.4 to 5.5.5
dependabot[bot] Jan 15, 2026
3e78792
build(deps): Bump actions/setup-node from 6.1.0 to 6.2.0
dependabot[bot] Jan 16, 2026
915f494
build(deps-dev): Bump prettier from 3.7.4 to 3.8.0
dependabot[bot] Jan 17, 2026
971f639
build(deps-dev): Bump vite-plugin-node-polyfills from 0.24.0 to 0.25.0
dependabot[bot] Jan 17, 2026
ed7f7cd
bring back missing user menu items in table view
dartcafe Jan 18, 2026
8663bad
support Nextcloud 33
dartcafe Jan 18, 2026
aa01ff8
changelog
dartcafe Jan 18, 2026
52743f6
8.6.3
dartcafe Jan 18, 2026
06327a0
fixes
dartcafe Jan 18, 2026
5dbc7a3
suppress UnusedClass
dartcafe Jan 18, 2026
b96a986
changelog
dartcafe Jan 18, 2026
d75923b
Merge branch 'main' into enh/new-date-handling
dartcafe Jan 18, 2026
fe8596d
changing dialog
dartcafe Feb 3, 2026
530b7b6
some progress
dartcafe Feb 21, 2026
0891d13
remove logging
dartcafe Feb 22, 2026
ef0558b
some tidy
dartcafe Feb 22, 2026
b1e85e8
fix attribute in factory
dartcafe Feb 22, 2026
6df1c98
fix tests
dartcafe Feb 22, 2026
0cd1bc9
change sorting from timestamp to order for date polls
dartcafe Feb 22, 2026
3824078
Avoid migration
dartcafe Feb 22, 2026
4cf2162
Merge branch 'main' into enh/new-date-handling
dartcafe Feb 23, 2026
cea1d2e
8.7.0-beta.1
dartcafe Feb 23, 2026
9d0d463
restructure code
dartcafe Mar 1, 2026
80f5c95
fix voteMapperTest
dartcafe Mar 1, 2026
47a0c54
remove test values
dartcafe Mar 1, 2026
9541013
do not overwrite magic setters, as they will be ignored as not update…
dartcafe Mar 2, 2026
12a8caf
fix VoteMapperTest
dartcafe Mar 2, 2026
9bc8a5f
psalm is always right
dartcafe Mar 2, 2026
a6c6f71
Add migration
dartcafe Mar 2, 2026
509a9a7
Update version, drop NC31, drop PHP8.1
dartcafe Mar 2, 2026
8ae0874
9.0.0-beta.2
dartcafe Mar 2, 2026
d2c053a
cs fix
dartcafe Mar 3, 2026
b663333
allow PHP 8.1 again and update ocp
dartcafe Mar 3, 2026
0ed8a80
revert partially
dartcafe Mar 3, 2026
8f8cd4d
Revert "revert partially"
dartcafe Mar 3, 2026
e48f9fa
Revert "allow PHP 8.1 again and update ocp"
dartcafe Mar 3, 2026
a34e371
properly update to ocp:dev-stable32 and support PHP 8.1
dartcafe Mar 3, 2026
6495c2a
fix export
dartcafe Mar 4, 2026
1aff39e
fix timezone mismatch
dartcafe Mar 4, 2026
d375bef
fixes, refactor and extensions
dartcafe Mar 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions .github/ISSUE_TEMPLATE/BUG_REPORT.yml
Original file line number Diff line number Diff line change
Expand Up @@ -172,20 +172,17 @@ body:
description: |
Which Nextcloud Server version are you running.
options:
- 'Nextcloud 27'
- 'Nextcloud 28'
- 'Nextcloud 29'
- 'Nextcloud 30'
- 'Nextcloud 31'
- 'Nextcloud 32'
- 'Nextcloud 31 (Hub 10)'
- 'Nextcloud 32 (Hub 25 Autumn)'
- 'Nextcloud 33 (Hub 26 Winter)'
- "Other/Don't know"
validations:
required: true
- type: input
id: server-nc-version-other
attributes:
label: Other Nextcloud version
placeholder: i.e. Nextcloud 21.1.1
placeholder: i.e. Nextcloud 29 or Hub 8

- type: dropdown
id: server-php
Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,18 @@
# Changelog
All notable changes to this project will be documented in this file.

## [unreleased] - tbd
### Added
- Timezone support for polls and options
- Set default timezone for any poll
- Choose timezone to display, if the poll's original timezone differs from the user's one
- Choose timezone, when adding options in case of different timezones between poll and user

### Changed
- Use ISO formatted timestamps and durations
- Drop support for Nexcloud Hub 10
- Drop support for PHP 8.1

## [8.6.3] - 2026-01-18
### Fixed
- Fixed missing user menu items, when table view is active
Expand Down
4 changes: 2 additions & 2 deletions appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<name>Polls</name>
<summary>A polls app, similar to Doodle/DuD-Poll with the possibility to restrict access.</summary>
<description>A polls app, similar to Doodle/DuD-Poll with the possibility to restrict access (members, certain groups/users, hidden and public).</description>
<version>8.6.3</version>
<version>9.0.0-beta.2</version>
<licence>agpl</licence>
<author>Vinzenz Rosenkranz</author>
<author>René Gieling</author>
Expand All @@ -25,7 +25,7 @@
<donation>https://buymeacoffee.com/dartcafe</donation>
<dependencies>
<php min-version="8.1"/>
<nextcloud min-version="31" max-version="33"/>
<nextcloud min-version="32" max-version="33"/>
</dependencies>
<background-jobs>
<job>OCA\Polls\Cron\NotificationCron</job>
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
"doctrine/dbal": "3.8.6",
"league/factory-muffin": "^3.0",
"league/factory-muffin-faker": "^2.0",
"nextcloud/ocp": "dev-stable30"
"nextcloud/ocp": "dev-stable32"
},
"scripts": {
"lint": "find . -name \\*.php -not -path './vendor*/*' -print0 | xargs -0 -n1 php -l",
Expand All @@ -67,4 +67,4 @@
"league/commonmark": "^2.1",
"rlanvin/php-rrule": "^2.3"
}
}
}
44 changes: 24 additions & 20 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lib/Command/Db/CleanMigrations.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

use Doctrine\DBAL\Schema\Schema;
use OCA\Polls\Command\Command;
use OCA\Polls\Db\V5\TableManager;
use OCA\Polls\Db\V6\TableManager;
use OCP\IDBConnection;

/**
Expand Down
2 changes: 1 addition & 1 deletion lib/Command/Db/CreateIndices.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

use Doctrine\DBAL\Schema\Schema;
use OCA\Polls\Command\Command;
use OCA\Polls\Db\V5\IndexManager;
use OCA\Polls\Db\V6\IndexManager;
use OCP\IDBConnection;

/**
Expand Down
2 changes: 1 addition & 1 deletion lib/Command/Db/FixDB.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

use Doctrine\DBAL\Schema\Schema;
use OCA\Polls\Command\Command;
use OCA\Polls\Db\V5\TableManager;
use OCA\Polls\Db\V6\TableManager;
use OCP\IDBConnection;

/**
Expand Down
2 changes: 1 addition & 1 deletion lib/Command/Db/Purge.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
namespace OCA\Polls\Command\Db;

use OCA\Polls\Command\Command;
use OCA\Polls\Db\V5\TableManager;
use OCA\Polls\Db\V6\TableManager;
use OCP\IDBConnection;

/**
Expand Down
4 changes: 2 additions & 2 deletions lib/Command/Db/Rebuild.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
namespace OCA\Polls\Command\Db;

use Doctrine\DBAL\Schema\Schema;
use OCA\Polls\Db\V5\TableManager;
use OCA\Polls\Db\V5\IndexManager;
use OCA\Polls\Db\V6\TableManager;
use OCA\Polls\Db\V6\IndexManager;
use OCA\Polls\Command\Command;
use OCP\IDBConnection;

Expand Down
2 changes: 1 addition & 1 deletion lib/Command/Db/RemoveFKConstraints.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

use Doctrine\DBAL\Schema\Schema;
use OCA\Polls\Command\Command;
use OCA\Polls\Db\V5\IndexManager;
use OCA\Polls\Db\V6\IndexManager;
use OCP\IDBConnection;

/**
Expand Down
2 changes: 1 addition & 1 deletion lib/Command/Db/RemoveOptionalIndices.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

use Doctrine\DBAL\Schema\Schema;
use OCA\Polls\Command\Command;
use OCA\Polls\Db\V5\IndexManager;
use OCA\Polls\Db\V6\IndexManager;
use OCP\IDBConnection;

/**
Expand Down
2 changes: 1 addition & 1 deletion lib/Command/Db/RemoveUniqueIndices.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

use Doctrine\DBAL\Schema\Schema;
use OCA\Polls\Command\Command;
use OCA\Polls\Db\V5\IndexManager;
use OCA\Polls\Db\V6\IndexManager;
use OCP\IDBConnection;

/**
Expand Down
6 changes: 3 additions & 3 deletions lib/Command/Db/ResetWatch.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@

use Doctrine\DBAL\Schema\Schema;
use OCA\Polls\Command\Command;
use OCA\Polls\Db\V5\IndexManager;
use OCA\Polls\Db\V5\TableManager;
use OCA\Polls\Db\V6\IndexManager;
use OCA\Polls\Db\V6\TableManager;
use OCA\Polls\Db\Watch;
use OCA\Polls\Migration\V5\TableSchema;
use OCA\Polls\Migration\V6\TableSchema;
use OCP\IDBConnection;

/**
Expand Down
20 changes: 15 additions & 5 deletions lib/Controller/OptionApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

namespace OCA\Polls\Controller;

use OCA\Polls\Model\DateInterval;
use OCA\Polls\Model\DateTimeImmutable;
use OCA\Polls\Model\Sequence;
use OCA\Polls\Model\SimpleOption;
use OCA\Polls\Service\OptionService;
Expand All @@ -22,6 +24,8 @@

/**
* @psalm-api
* @psalm-import-type SimpleOptionsArray from SimpleOption
* @psalm-import-type SequenceArray from Sequence
*/
class OptionApiController extends BaseApiV2Controller {
public function __construct(
Expand All @@ -47,10 +51,11 @@ public function list(int $pollId): DataResponse {

/**
* Add a new option
*
* @param int $pollId poll id
* @param array $option Options text for text poll
* @param array $sequence Sequence of the option
* @param bool $voteYes Vote yes
* @param SimpleOptionsArray $option The array containing the option data
* @param bool $voteYes Vote yes for this option and for all generated sequence
* @param SequenceArray $sequence Sequence of the option
*/
#[CORS]
#[NoAdminRequired]
Expand Down Expand Up @@ -99,8 +104,13 @@ public function addBulk(int $pollId, string $text = ''): DataResponse {
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'PUT', url: '/api/v1.0/option/{optionId}', requirements: ['apiVersion' => '(v2)'])]
public function update(int $optionId, int $timestamp = 0, string $text = '', int $duration = 0): DataResponse {
return $this->response(fn () => ['option' => $this->optionService->update($optionId, $timestamp, $text, $duration)]);
public function update(int $optionId, int $timestamp = 0, string $text = '', int $duration = 0, ?string $isoTimestamo = null, ?string $isoDuration = null): DataResponse {
return $this->response(fn () => ['option' => $this->optionService->update(
$optionId,
$text,
new DateTimeImmutable($isoTimestamo ?? $timestamp),
new DateInterval($isoDuration ?? $duration),
)]);
}

/**
Expand Down
21 changes: 15 additions & 6 deletions lib/Controller/OptionController.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

namespace OCA\Polls\Controller;

use OCA\Polls\Model\DateInterval;
use OCA\Polls\Model\DateTimeImmutable;
use OCA\Polls\Model\Sequence;
use OCA\Polls\Model\SimpleOption;
use OCA\Polls\Service\CalendarService;
Expand All @@ -21,6 +23,8 @@

/**
* @psalm-api
* @psalm-import-type SimpleOptionsArray from SimpleOption
* @psalm-import-type SequenceArray from Sequence
*/
class OptionController extends BaseController {
public function __construct(
Expand Down Expand Up @@ -48,9 +52,9 @@ public function list(int $pollId): JSONResponse {
/**
* Add a new option
* @param int $pollId poll id
* @param array $option Options text for text poll
* @param array $sequence sequence of new options
* @param SimpleOptionsArray $option Options text for text poll
* @param bool $voteYes vote yes
* @param SequenceArray $sequence sequence of new options
* @return JSONResponse
*/
#[NoAdminRequired]
Expand Down Expand Up @@ -88,14 +92,19 @@ public function addBulk(int $pollId, string $text = ''): JSONResponse {
/**
* Update option
* @param int $optionId option id
* @param int $timestamp timestamp for datepoll
* @param string $isoTimestamp ISO 8601 timestamp for date poll
* @param string $text Option text for text poll
* @param int duration duration of option
* @param string $isoDuration ISO 8601 duration for date poll
*/
#[NoAdminRequired]
#[FrontpageRoute(verb: 'PUT', url: '/option/{optionId}')]
public function update(int $optionId, int $timestamp, string $text, int $duration): JSONResponse {
return $this->response(fn () => ['option' => $this->optionService->update($optionId, $timestamp, $text, $duration)]);
public function update(int $optionId, string $isoTimestamp, string $text, string $isoDuration): JSONResponse {
return $this->response(fn () => ['option' => $this->optionService->update(
$optionId,
$text,
new DateTimeImmutable($isoTimestamp),
new DateInterval($isoDuration),
)]);
}

/**
Expand Down
Loading