Skip to content
Merged

3.8.x #325

Show file tree
Hide file tree
Changes from all commits
Commits
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
39 changes: 38 additions & 1 deletion cypress/e2e/admin.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ context('Admin: Generate Screenshots', () => {
});

it('New Skill modals', () => {
cy.viewport(1350, 1800);
cy.viewport(1200, 2000);
// new skill modal
cy.visit('/administrator/projects/movies/subjects/Action/');
cy.get('[data-cy="newSkillButton"]').click();
Expand Down Expand Up @@ -362,6 +362,19 @@ context('Admin: Generate Screenshots', () => {
cy.snap('page-video-config', '#mainContent2')
})

it('Slides Settings page', () => {
cy.visit('/administrator/projects/movies/subjects/Action/skills/WonderWoman/config-slides')
cy.get('[data-cy="saveSlidesSettingsBtn"]').should('be.disabled')
cy.snap('component-slides-config-empty', '#mainContent2')

cy.visit('/administrator/projects/movies/subjects/Action/skills/Avatar/config-slides')
cy.get('[data-cy="nextSlideBtn"]').should('be.enabled')
cy.get('[data-cy="nextSlideBtn"]').click()
cy.get('#movies-AvatarContainer').contains('This is a first slide')
cy.snap('component-slides-config-with-slides', '#mainContent2')

})

it('Gen Expiration Settings page', () => {
cy.visit('/administrator/projects/movies/subjects/Action/skills/TheMatrix/config-expiration')
cy.snap('page-expiration-config', '[data-cy="nav"]')
Expand Down Expand Up @@ -665,6 +678,30 @@ context('Admin: Generate Screenshots', () => {
cy.get('[data-cy="adminGroupQuizzesTable"] [data-cy="skillsBTableTotalRows"]').should('have.text', '3')
cy.snap('page-admin-groups-quizzes')

cy.visit('/administrator/adminGroups/FancyGroup/group-global-badges')
cy.get('[data-cy="adminGroupGlobalBadgesTable"] [data-cy="skillsBTableTotalRows"]').should('have.text', '1')
cy.snap('page-admin-groups-global-badges')
})

it('page - global badges', () => {
cy.visit('/administrator/globalBadges/MoviesandShowsExpertBadge')
cy.get('[data-cy="noContent"]').contains('No Skills Added Yet');
cy.selectSkill('[data-cy="skillsSelector"]', 'FindingNemo', 'nemo', 'movies');
cy.selectSkill('[data-cy="skillsSelector"]', 'UnbreakableKimmySchmidt', 'kimmy', 'shows');
cy.snap('page-global-badge-skills')

cy.visit('/administrator/globalBadges/MoviesandShowsExpertBadge/levels')
cy.get('[data-cy="simpleLevelsTable"] [data-cy="skillsBTableTotalRows"]').should('have.text', '2')
cy.snap('page-global-badge-levels')

cy.visit('/administrator/globalBadges/MoviesandShowsExpertBadge/access')
cy.get('[data-cy="existingUserInput"]').type('bob1');
cy.wait(500);
cy.get('#existingUserInput_0').contains('bob1').click();
cy.get('[data-cy="addUserBtn"]').click();

cy.get('[data-cy="[email protected]"]')
cy.snap('page-global-badge-access')
})

it('Notifications', () => {
Expand Down
9 changes: 9 additions & 0 deletions cypress/support/commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,13 @@ Cypress.Commands.add('selectItem', (selector, item, openPicker = true, autoCompl
cy.get(itemToSelect).click();
}
cy.get('[data-pc-section="overlay"] [data-pc-section="optionlabel"]').contains(item).click();
})

Cypress.Commands.add('selectSkill', (selector, skillId, searchString = '', projId='proj1') => {
cy.get(selector).blur({force: true})
cy.get(selector).click()
if (searchString) {
cy.get(selector).type(`{selectall}${searchString}`)
}
cy.get(`[data-cy="skillsSelectionItem-${projId}-${skillId}"]`).click()
})
1 change: 1 addition & 0 deletions docs/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ sidebar = sidebar.concat([{
'/dashboard/user-guide/quizzes-and-surveys',
'/dashboard/user-guide/admin-groups',
'/dashboard/user-guide/badges',
'/dashboard/user-guide/global-badges',
'/dashboard/user-guide/learning-path',
'/dashboard/user-guide/progress-and-ranking',
'/dashboard/user-guide/icons',
Expand Down
24 changes: 24 additions & 0 deletions docs/dashboard/install-guide/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,30 @@ skills.websocket.relayHost=
skills.websocket.relayPort=
```

### Matomo Integration

SkillTree can be configured to integrate with <external-url label="Matomo" url="https://matomo.org/" />, a free and open-source web analytics platform that serves as an alternative to Google Analytics.
This integration enables tracking of user activity and provides valuable insights into user behavior.

To enable Matomo integration, configure the following properties:

```properties
skills.config.ui.matomoUrl: <Matomo Host such as https://my-matomo-server.com>
skills.config.ui.matomoSiteId: <Matomo Site ID>
```

### UI Logging for Debugging

SkillTree can be configured to log predefined UI events for debugging purposes.
These logs are accessible through your browser's developer tools console.

To enable UI logging, configure the following property:

```properties
# Supported log levels: TRACE, DEBUG, INFO, WARN, ERROR
skills.config.ui.logLevel=TRACE
```

### JVM Heap
These are System Properties.
```properties
Expand Down
2 changes: 2 additions & 0 deletions docs/dashboard/user-guide/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ Consider the following items when designing your training profile:
1. [Surveys](/dashboard/user-guide/quizzes-and-surveys.html): A Survey is a data collection technique utilizing one or more questions.
- Associating a Survey to an existing skill will require completion of that Survey in order to earn the skill and its points.
- When associated to a skill, the survey is a method to gather feedback about that skill or collect some pieces of important data related to the skill.
1. [Slides](/dashboard/user-guide/skills.html#slide-deck): A seamless integration of PDF-based slide decks directly into skills, allowing you to enhance training materials with professionally designed presentations created in tools like PowerPoint and exported as PDFs.
1. [Video/Audio](/dashboard/user-guide/skills.html#audio-video): SkillTree allows embedding videos or audios clips into skill descriptions, with optional configuration settings to achieve the skill upon full playback.
1. [Levels](/dashboard/user-guide/levels.html): Levels are users' achievement path - the overall goal of the training profile is to encourage users to achieve the highest level.
- Levels are tracked for the entire project as well as for each subject which provides users many ways to progress forward, as well as frequent positive reinforcement opportunities.
- The Skills dashboard supports two ways to manage levels: Percentage Based (default) and Point based. If you are not sure which to go with stick with the default.
Expand Down
10 changes: 7 additions & 3 deletions docs/dashboard/user-guide/admin-groups.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Admin Groups

Admin Groups streamline the ability to manage a list of administrators for one or more projects and/or quizzes.
Once an Admin Group is created you can easily add and remove members to and from the group. A group can then be assigned to one or more projects and/or quizzes
which then allows the members of the group to have administrative privileges to the assigned projects and/or quizzes.
Admin Groups streamline the ability to manage a list of administrators for one or more projects, quizzes and global badges
Once an Admin Group is created you can easily add and remove members to and from the group. A group can then be assigned to one or more projects, quizzes, or global badges
which then allows the members of the group to have administrative privileges to the assigned projects, quizzes and global badges.

To create an admin group please navigate to the ``Admin Groups`` page and then click the ``Admin Group +`` button.

Expand All @@ -15,3 +15,7 @@ To assign a group to a project please navigate to ``Adming Groups -> Projects``
To assign a group to a quiz please navigate to ``Adming Groups -> Quizzes`` then select one of the existing quizzes from the dropdown.

![page-admin-groups-quizzes.png](../../screenshots/admin/page-admin-groups-quizzes.png)

To assign a group to a global badge please navigate to ``Adming Groups -> Global Badges`` then select one of the existing global badges from the dropdown.

![page-admin-groups-global-badges.png](../../screenshots/admin/page-admin-groups-global-badges.png)
29 changes: 1 addition & 28 deletions docs/dashboard/user-guide/badges.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,31 +59,4 @@ Multiple skills can be easily added to an existing badge via the following steps
- Navigate to the `Subject` administrative page page `Project -> Subject`
- Use checkmark to select multiple skills OR click `Select All` to select all the skills defined under this subject.
- Use the `Action` button on the top-right above the skills' table to select `Add To Badge` action
- Follow `Add To Badge` workflow to choose which badge selected skills are added to

<conditional visibilityFlag="showDocsForRootRole">

## Global Badges

Global Badges are a special kind of badge that is made up of a collection of skills and/or levels that span across project boundaries.

Global Badges consist of:
- *Project's Levels*: Project levels that a user must achieve in order to earn the badge
- *List of Skills*: Skills from any project

When all of the configured skills and levels are accomplished, that badge is achieved.
Global Badges are specifically used to reward users for achieving skills that involve multiple projects,
and can only be created by Dashboard users that have the [Supervisor](/dashboard/user-guide/users.html#user-roles) role.

Creating Global Badges is simple (<requires-role role="Supervisor" />):

1. Navigate to ``Home -> Badges`` and click ``Badge +``
- You can (and should) assign an [Icon](/dashboard/user-guide/icons.html) to your badge.
1. Once a badge is created you can assign existing skills and/or project levels to that badge.
- To assign skills, ``Home -> Badge -> Manage -> Skills``
- To assign project levels, ``Home -> Badge -> Manage -> Levels``
- When initially created, a badge is in a Disabled state. This is to allow dependencies to be fully added to the badge before it can be achieved by users.
1. After assigning skills and or project levels, locate the badge in the ``Badges`` view and click the ``Go Live`` link on the bottom right of the Badge overview.
- When the badge is published, any users with existing achievements that meet the badge requirements will be awarded the badge at that time.

</conditional>
- Follow `Add To Badge` workflow to choose which badge selected skills are added to
50 changes: 50 additions & 0 deletions docs/dashboard/user-guide/global-badges.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Global Badges

Global Badges recognize and reward users for achieving skills and levels across multiple projects. These badges help track and celebrate comprehensive skill development that spans different project boundaries. Global Badges can include skills and levels from any project you have Admin access to.

## Overview

Global Badges are awarded when users meet specific criteria that can include:
- Skills from multiple projects
- Project level achievements
- Any combination of the above

## Components of Global Badges

### Project Levels
Earn badges by reaching specific levels across different projects. These levels demonstrate consistent growth and achievement within individual projects.

![Global Badge Levels](../../screenshots/admin/page-global-badge-levels.png)

### Skills
Showcase expertise by completing specific skills from any project you have access to. These can be combined to create comprehensive achievement paths.

![Global Badge Skills](../../screenshots/admin/page-global-badge-skills.png)

## Access

The Access page supports adding or removing Global Badges Administrators. To add and remove Administrators
please navigate to ``Home -> Global Badges -> Manage -> Access`` page.

![Global BadgeAccess](../../screenshots/admin/page-global-badge-access.png)

## Creating Global Badges

### Step 1: Create a New Badge
1. Navigate to `Home -> Global Badges`
2. Click the `Badge +` button
3. **Recommended**: Add a descriptive [Icon](/dashboard/user-guide/icons.html) for better visual recognition

### Step 2: Configure Badge Requirements
After creation, set up the badge criteria:
- **Adding Skills**: `Home -> Global Badges -> Manage -> Skills`
- **Setting Level Requirements**: `Home -> Global Badges -> Manage -> Levels`

> **Note**: New badges start in a Disabled state, allowing you to fully configure all requirements before they become available to users.

### Step 3: Publish the Badge
1. Go to the `Global Badges` view
2. Locate your badge
3. Click the `Go Live` button in the bottom-right corner of the Badge overview

> **Important**: When published, the system automatically awards the badge to all users who already meet the requirements.
2 changes: 2 additions & 0 deletions docs/dashboard/user-guide/icons.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
The skills platform offers customization of icons for the following items:

- [Subjects](/dashboard/user-guide/subjects.html)
- [Skills](/dashboard/user-guide/skills.html)
- [Badges](/dashboard/user-guide/badges.html)
- [Global Badges](/dashboard/user-guide/global-badges.html)

When creating or editing these items you can click on the default icon to bring up the icon selector:

Expand Down
18 changes: 15 additions & 3 deletions docs/dashboard/user-guide/projects.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,21 @@ The ``Project User: Invite`` and ``Project User: Revoke`` user interface control
:::

#### Invite Users
Users are invited to join a project that has been configured as ``Private Invite Only`` via email. Invite recipients are added via the ``Email Addresses`` input field and can be added one at a time or by using a comma or semicolon separated list
or by entering one email address per line in the ``Email Addresses`` input field (email addresses in the form of ``<[email protected]> Firstname Lastname`` are also supported). Once email addresses have been entered into the ``Email Addresses`` input field,
they must be added as recipients using the ``Add Recipients`` button. These steps may be performed several times before the ``Send Invites`` button is pressed at which point all accumulated email addresses will be sent an email with a unique, one-time use invite to join the project.

Users can be invited to join a project configured as ``Private Invite Only`` via email. To invite users:

1. Enter email addresses in the ``Email Addresses`` field using any of these formats:
- One at a time
- Comma or semicolon separated list
- One per line
- With display names (e.g., ``<[email protected]> Firstname Lastname``) is also supported
2. Click ``Add Recipients`` to add them to the recipient list
3. Repeat to add more recipients if needed
4. Optionally, add CC recipients in the ``CC Email Addresses`` field
5. Click ``Send Invites`` to deliver one-time use invitations to all recipients

Each recipient will receive a unique, one-time use invitation to join the project.


![Project Access](./screenshots/Component-Private-Project-Invite.png)

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading