Skip to content

Commit

Permalink
Merge branch 'release/1.2.2'
Browse files Browse the repository at this point in the history
* release/1.2.2:
  feat(changelog): updating changelog
  feat(chore): added moodle ci workflow for github
  fix(lib): fix for moodle versions pre 4.0
  fix(multiple): multiple fixes, improvements and optimization for moodle 4.1
  • Loading branch information
Daniel Nolte committed Dec 2, 2022
2 parents 1e2069b + d308ad3 commit 79e44e2
Show file tree
Hide file tree
Showing 19 changed files with 348 additions and 117 deletions.
110 changes: 110 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Moodle Plugin CI

on: [push, pull_request]

jobs:
test:
runs-on: ubuntu-22.04

services:
postgres:
image: postgres:12
env:
POSTGRES_USER: 'postgres'
POSTGRES_HOST_AUTH_METHOD: 'trust'
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
mariadb:
image: mariadb:10
env:
MYSQL_USER: 'root'
MYSQL_ALLOW_EMPTY_PASSWORD: "true"
MYSQL_CHARACTER_SET_SERVER: "utf8mb4"
MYSQL_COLLATION_SERVER: "utf8mb4_unicode_ci"

ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 3

strategy:
fail-fast: false
matrix:
php: ['7.3', '7.4', '8.0']
moodle-branch: ['MOODLE_311_STABLE']
database: [pgsql, mariadb]

steps:
- name: Check out repository code
uses: actions/checkout@v3
with:
path: plugin

- name: Setup PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: ${{ matrix.extensions }}
ini-values: max_input_vars=5000
# none to use phpdbg fallback. Specify pcov (Moodle 3.10 and up) or xdebug to use them instead.
coverage: none

- name: Initialise moodle-plugin-ci
run: |
composer create-project -n --no-dev --prefer-dist moodlehq/moodle-plugin-ci ci ^3
echo $(cd ci/bin; pwd) >> $GITHUB_PATH
echo $(cd ci/vendor/bin; pwd) >> $GITHUB_PATH
sudo locale-gen en_AU.UTF-8
echo "NVM_DIR=$HOME/.nvm" >> $GITHUB_ENV
- name: Install moodle-plugin-ci
run: |
moodle-plugin-ci install --plugin ./plugin --db-host=127.0.0.1
env:
DB: ${{ matrix.database }}
MOODLE_BRANCH: ${{ matrix.moodle-branch }}

- name: PHP Lint
if: ${{ always() }}
run: moodle-plugin-ci phplint

- name: PHP Copy/Paste Detector
continue-on-error: true # This step will show errors but will not fail
if: ${{ always() }}
run: moodle-plugin-ci phpcpd

- name: PHP Mess Detector
continue-on-error: true # This step will show errors but will not fail
if: ${{ always() }}
run: moodle-plugin-ci phpmd

- name: Moodle Code Checker
if: ${{ always() }}
run: moodle-plugin-ci codechecker --max-warnings 0

- name: Moodle PHPDoc Checker
if: ${{ always() }}
run: moodle-plugin-ci phpdoc

- name: Validating
if: ${{ always() }}
run: moodle-plugin-ci validate

- name: Check upgrade savepoints
if: ${{ always() }}
run: moodle-plugin-ci savepoints

- name: Mustache Lint
if: ${{ always() }}
run: moodle-plugin-ci mustache

- name: Grunt
if: ${{ always() }}
run: moodle-plugin-ci grunt --max-lint-warnings 0

- name: PHPUnit tests
if: ${{ always() }}
run: moodle-plugin-ci phpunit --fail-on-warning

- name: Behat features
if: ${{ always() }}
run: moodle-plugin-ci behat --profile chrome
31 changes: 31 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
## Changelog ##
- [1.2.2]:
- Hotfix to make recent changes for icon and layout compatible with Moodle pre 4.0.

- [1.2.1]:
- [Bugfix]: Added some margin between current submission and return button on groupview.
- [Bugfix]: Reduced height of the phase information area on view page if no phase hints are given.
- [Bugfix]: Default time values for phases now at noon (Phase 1: +7 days noon, Phase 2: +14 days noon, Phase 3: +21 days noon, Phase 4: +28 days noon).
- [Bugfix]: If a group was deleted now showing "Deleted group" on groupview for the former submissions.
- [Improvement]: On groupview now showing if group is in active phase or if phase is already closed.
- [Improvement]: Phase deadlines are now validated when creating or editing a discourse.
- [Improvement]: Added hint to show teachers if the group mode "Visible groups" is activated so that participants can see all groups and submissions (and not just their own as usual).
- [Security]: Added sesskey check for manual switching of phases.
- [Layout]: Heading and intro are not displayed on Moodle 4.1 and above to comply with the new page layout.
- [Icon]: Activity icon now has the purpose COLLABORATION in Moodle 4.1 and above.

- [1.2.0]:
- [Bugfix]: Deleting expired contexts via Moodle privacy mechanism now deletes all groups and groupings of a DisCourse (the grouping wich id is stored for the instance in the table mod_discourse and its groups).
- [Bugfix]: Deleting the whole plugin now removes all groupings connected with DisCourses (and all groups in this groupings).
- [Bugfix]: Renaming a DisCourse (in the edit settings, not via the quick edit option in the course) now renames groups and groupings connected with the DisCourse to its new name.
- [Bugfix]: Manual renaming of groups wont break the display of the shortened group names anymore.
- [Bugfix]: For DisCourse groups messaging is now enabled by default.
- [Bugfix]: If an invalid groupingid is stored for a DisCourse or the grouping stored for a DisCourse is deleted, other course groups are not displayed in the DisCourse anymore.
- [Feature]: Added possibility to backup and restore DisCourses via Moodle backup api.
- [Note]: If you restore a DisCourse within its original course Moodle does not create new groupings and groups. So no grouping is assigned with the new DisCourse and no participants or submissions are recreated.
- [Note]: Incompatible with 3rd party plugin block_sharing_cart (https://moodle.org/plugins/block_sharing_cart). If you try to copy a DisCourse with the Sharing-Cart it may create an incomplete and unusable DisCourse.
- [Feature]: DisCourses can now be included in the course reset.
- [Versions]: Tested for Moodle 3.9, 3.10, 3.11 and 4.0
- [Note]: Still uses old icon in Moodle 4.0
- [Known issue]: Minor display issues with some themes in Moodle 4.0 if sidebars are open and display is too small
- [Known issue]: After duplicating an activity in Moodle 4.0 Moodle returns the wrong activity allowed groups (for the original activity). In this case no groups but an error message is shown and the activity cant be used correctly. Teachers may just wait a few minutes, rename an activity in the course or contact the moodle administrator to clear the moodle cache to fix this issue.
19 changes: 1 addition & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,21 +59,4 @@ Students can additionally hand in a submission for the group if the phase of the
No dependencies.

## Incompatibilities ##
- Incompatible with 3rd party plugin block_sharing_cart (https://moodle.org/plugins/block_sharing_cart). If you try to copy a DisCourse with the Sharing-Cart it may create an incomplete and unusable DisCourse.

## Changelog ##
- [1.2.0]:
- [Bugfix]: Deleting expired contexts via Moodle privacy mechanism now deletes all groups and groupings of a DisCourse (the grouping wich id is stored for the instance in the table mod_discourse and its groups).
- [Bugfix]: Deleting the whole plugin now removes all groupings connected with DisCourses (and all groups in this groupings).
- [Bugfix]: Renaming a DisCourse (in the edit settings, not via the quick edit option in the course) now renames groups and groupings connected with the DisCourse to its new name.
- [Bugfix]: Manual renaming of groups wont break the display of the shortened group names anymore.
- [Bugfix]: For DisCourse groups messaging is now enabled by default.
- [Bugfix]: If an invalid groupingid is stored for a DisCourse or the grouping stored for a DisCourse is deleted, other course groups are not displayed in the DisCourse anymore.
- [Feature]: Added possibility to backup and restore DisCourses via Moodle backup api.
- [Note]: If you restore a DisCourse within its original course Moodle does not create new groupings and groups. So no grouping is assigned with the new DisCourse and no participants or submissions are recreated.
- [Note]: Incompatible with 3rd party plugin block_sharing_cart (https://moodle.org/plugins/block_sharing_cart). If you try to copy a DisCourse with the Sharing-Cart it may create an incomplete and unusable DisCourse.
- [Feature]: DisCourses can now be included in the course reset.
- [Versions]: Tested for Moodle 3.9, 3.10, 3.11 and 4.0
- [Note]: Still uses old icon in Moodle 4.0
- [Known issue]: Minor display issues with some themes in Moodle 4.0 if sidebars are open and display is too small
- [Known issue]: After duplicating an activity in Moodle 4.0 Moodle returns the wrong activity allowed groups (for the original activity). In this case no groups but an error message is shown and the activity cant be used correctly. Teachers may just wait a few minutes, rename an activity in the course or contact the moodle administrator to clear the moodle cache to fix this issue.
- Incompatible with 3rd party plugin block_sharing_cart (https://moodle.org/plugins/block_sharing_cart). If you try to copy a DisCourse with the Sharing-Cart it may create an incomplete and unusable DisCourse.
7 changes: 6 additions & 1 deletion classes/output/discourse_groupview.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ class discourse_groupview implements renderable, templatable {
protected $cmid;
/** @var string */
protected $phasehint;
/** @var string */
protected $phaseactive;
/** @var array */
protected $group;
/** @var string */
Expand All @@ -53,14 +55,16 @@ class discourse_groupview implements renderable, templatable {
* Construct this renderable.
* @param int $cmid The course module id
* @param string $phasehint The hint for the phase of the group
* @param string $phaseactive If the group phase is active or closed
* @param array $group The group that should be viewed
* @param string $form The form for submitting text
* @param bool $caneditsubmission Boolean if user can edit the submission
* @param bool $canviewgroupparticipants Boolean if user can see group participants
*/
public function __construct($cmid, $phasehint, $group, $form, $caneditsubmission, $canviewgroupparticipants) {
public function __construct($cmid, $phasehint, $phaseactive, $group, $form, $caneditsubmission, $canviewgroupparticipants) {
$this->cmid = $cmid;
$this->phasehint = $phasehint;
$this->phaseactive = $phaseactive;
$this->group = $group;
$this->form = $form;
$this->caneditsubmission = $caneditsubmission;
Expand All @@ -77,6 +81,7 @@ public function export_for_template(renderer_base $output) {
$data = new stdClass();
$data->cmid = $this->cmid;
$data->phasehint = $this->phasehint;
$data->phaseactive = $this->phaseactive;
$data->group = $this->group;

if ($data->group->submission) {
Expand Down
12 changes: 11 additions & 1 deletion classes/output/discourse_view.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ class discourse_view implements renderable, templatable {
protected $shouldswitchphase;
/** @var int */
protected $userid;
/** @var int */
protected $sesskey;
/** @var bool */
protected $phasehints;
/**
* Construct this renderable.
* @param int $cmid The course module id
Expand Down Expand Up @@ -114,11 +118,13 @@ class discourse_view implements renderable, templatable {
* @param bool $canviewgroupparticipants If user can view all groups
* @param int $shouldswitchphase If user should switch phase manually
* @param int $userid ID of current user
* @param int $sesskey Session key for changing phases
* @param bool $phasehints If any phase hints are set.
*/
public function __construct($cmid, $groups, $autoswitch, $activephaseone, $activephasetwo, $activephasethree, $activephasefour,
$hintphaseone, $hintphasetwo, $hintphasethree, $hintphasefour, $hintphaseoneshortened, $hintphasetwoshortened, $hintphasethreeshortened,
$hintphasefourshortened, $deadlinephaseone, $deadlinephasetwo, $deadlinephasethree, $deadlinephasefour, $caneditphase, $canswitchphase,
$canviewallgroups, $canviewgroupparticipants, $shouldswitchphase, $userid) {
$canviewallgroups, $canviewgroupparticipants, $shouldswitchphase, $userid, $sesskey, $phasehints) {

$this->cmid = $cmid;
$this->groups = $groups;
Expand All @@ -145,6 +151,8 @@ public function __construct($cmid, $groups, $autoswitch, $activephaseone, $activ
$this->canviewgroupparticipants = $canviewgroupparticipants;
$this->shouldswitchphase = $shouldswitchphase;
$this->userid = $userid;
$this->sesskey = $sesskey;
$this->phasehints = $phasehints;
}

/**
Expand Down Expand Up @@ -180,6 +188,8 @@ public function export_for_template(renderer_base $output) {
$data->canviewgroupparticipants = $this->canviewgroupparticipants;
$data->shouldswitchphase = $this->shouldswitchphase;
$data->userid = $this->userid;
$data->sesskey = $this->sesskey;
$data->phasehints = $this->phasehints;
return $data;
}
}
2 changes: 1 addition & 1 deletion classes/privacy/provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ public static function export_user_data(approved_contextlist $contextlist) {

list($contextsql, $contextparams) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);

// Discourse participants data.
// DisCourse participants data.
$sql;
$sql = "SELECT
cm.id AS cmid,
Expand Down
2 changes: 1 addition & 1 deletion classes/task/switchphases.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public function execute() {

if ($rs->valid()) {

mtrace('Discourses found where phases should be switched.');
mtrace('DisCourses found where phases should be switched.');

$count = 0;

Expand Down
16 changes: 13 additions & 3 deletions groupview.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,10 @@
}

echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('modulename', 'mod_discourse').': ' . format_string($moduleinstance->name), 3);

if ($CFG->branch < 41) {
echo $OUTPUT->heading(get_string('modulename', 'mod_discourse').': ' . format_string($moduleinstance->name), 3);
}

// Instantiate form.
$mform = new submit_form();
Expand Down Expand Up @@ -166,7 +169,6 @@
case 1:
$phasehint = $moduleinstance->hintphaseone;
break;

case 2:
$phasehint = $moduleinstance->hintphasetwo;
break;
Expand All @@ -178,7 +180,15 @@
break;
}

$page = new discourse_groupview($cm->id, $phasehint, $group, $form, $caneditsubmission, $canviewgroupparticipants);
if ($group->phase == $moduleinstance->activephase) {
$phaseactive = get_string('phaseactive', 'mod_discourse');
} else if ($group->phase < $moduleinstance->activephase) {
$phaseactive = get_string('phaseclosed', 'mod_discourse');
} else {
$phaseactive = false;
}

$page = new discourse_groupview($cm->id, $phasehint, $phaseactive, $group, $form, $caneditsubmission, $canviewgroupparticipants);

// Render page and display the form.
echo $OUTPUT->render($page);
Expand Down
2 changes: 1 addition & 1 deletion index.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
format_string($discourse->name, true));
}

if ($course->format == 'weeks' or $course->format == 'topics') {
if ($course->format == 'weeks' || $course->format == 'topics') {
$table->data[] = array($discourse->section, $link);
} else {
$table->data[] = array($link);
Expand Down
17 changes: 11 additions & 6 deletions lang/de/discourse.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
$string['hintphasetwo'] = 'Hinweis zur 1. Gruppenphase';
$string['hintphasethree'] = 'Hinweis zur 2. Gruppenphase';
$string['hintphasefour'] = 'Hinweis zur Gemeinschaftsphase';
$string['errinvalidphasedeadline'] = 'Die Phasen-Deadlines sind ungültig.';

$string['modulenameplural'] = 'DisKurse';
$string['nonewmodules'] = 'Keine neuen DisKurse';
Expand Down Expand Up @@ -98,6 +99,7 @@
$string['noautoswitch'] = 'Der automatische Phasenwechsel ist deaktiviert. Die Phasen müssen deshalb manuell gewechselt werden.';
$string['shouldswitchphaseto'] = 'Der automatische Phasenwechsel ist deaktiviert. Die nächste Phase sollte aktiviert werden.';
$string['phaseswitched'] = 'Phase gewechselt.';
$string['groupmodevisiblegroups'] = 'Der Gruppenmodus "Sichtbare Gruppen" ist aktiviert. Dadurch können alle Teilnehmenden alle Gruppen und deren Einreichungen ansehen.';

$string['view'] = 'Übersicht';

Expand All @@ -115,20 +117,23 @@
$string['submissioncontent'] = 'Inhalt der Einreichung';
$string['errfilloutfield'] = 'Bitte Feld ausfüllen';
$string['backtooverview'] = 'Zurück zur Übersicht';
$string['deletedgroup'] = 'Gelöschte Gruppe';
$string['phaseactive'] = 'Phase aktiv';
$string['phaseclosed'] = 'Phase abgeschlossen';

$string['discourse:addinstance'] = 'Neuen DisKurs hinzufügen';
$string['discourse:potentialparticipant'] = 'DisKurs als Teilnehmer beitreten';
$string['discourse:editsubmission'] = 'Gruppentext einreichen oder bearbeiten';
$string['discourse:editphase'] = 'Phaseninformationen bearbeiten';
$string['discourse:switchphase'] = 'Diskurs-Phase umschalten';
$string['discourse:switchphase'] = 'DisKurs-Phase umschalten';
$string['discourse:viewallgroups'] = 'Alle Gruppen sehen';
$string['discourse:viewgroupparticipants'] = 'Alle Gruppenteilnehmer einsehen';

$string['groupinvalid'] = 'Gruppe nicht vorhanden';
$string['useridinvalid'] = 'Benutzer-ID ungültig';
$string['nogroupmember'] = 'Nicht möglich da kein Gruppenmitglied';
$string['submissionfaileddoubled'] = 'Einreichung fehlgeschlagen. Ein weiteres Gruppenmitglied hat bereits kürzlich eine Einreichung abgegeben.';
$string['groupingmaybedeleted'] = 'Die zum Diskurs gehörende Gruppierung wurde gelöscht oder ist ungültig.';
$string['groupingmaybedeleted'] = 'Die zum DisKurs gehörende Gruppierung wurde gelöscht oder ist ungültig.';
$string['alreadyparticipants'] = 'Bereits Teilnehmer vorhanden. Gruppen- und Teilnehmererstellung abgebrochen.';
$string['alreadygrouping'] = 'Es ist bereits eine Gruppierung vorhanden. Gruppen- und Teilnehmererstellung abgebrochen.';

Expand All @@ -139,11 +144,11 @@
$string['privacy:metadata:discourse_participants:userid'] = 'Benutzer-ID der oder des Teilnehmenden';
$string['privacy:metadata:discourse_participants:discourse'] = 'ID des DisKurses der oder des Teilnehmenden';
$string['privacy:metadata:discourse_participants:groupids'] = 'IDs der DisKurs-Gruppen der oder des Teilnehmenden';
$string['privacy:metadata:discourse_submissions:discourse'] = 'ID des DisKurses in dem die Einreichung abgegeben wurde';
$string['privacy:metadata:discourse_submissions:groupid'] = 'ID der Gruppe von der die Einreichung abgegeben wurde';
$string['privacy:metadata:discourse_submissions:discourse'] = 'ID des DisKurses, in dem die Einreichung abgegeben wurde';
$string['privacy:metadata:discourse_submissions:groupid'] = 'ID der Gruppe, von der die Einreichung abgegeben wurde';
$string['privacy:metadata:discourse_submissions:submission'] = 'Inhalt der Einreichung';
$string['privacy:metadata:discourse_submissions:currentversion'] = 'Aktuelle Version der Einreichung';
$string['privacy:metadata:discourse_submissions:format'] = 'Format der Einreichung';
$string['privacy:metadata:discourse_submissions:timecreated'] = 'Zeitpunkt an dem die Einreichung abgegeben wurde';
$string['privacy:metadata:discourse_submissions:timecreated'] = 'Zeitpunkt, an dem die Einreichung abgegeben wurde';
$string['privacy:metadata:discourse_submissions:timemodified'] = 'Zeitpunkt der letzten Überarbeitung der Einreichung';
$string['privacy:metadata:core_group'] = 'Das DisKurs Plugin erstellt und nutzt Gruppen und Gruppierungen';
$string['privacy:metadata:core_group'] = 'Das DisKurs-Plugin erstellt und nutzt Gruppen und Gruppierungen';
Loading

0 comments on commit 79e44e2

Please sign in to comment.