diff --git a/cypress/e2e/admin.cy.js b/cypress/e2e/admin.cy.js
index 5f791ecc..690639b5 100644
--- a/cypress/e2e/admin.cy.js
+++ b/cypress/e2e/admin.cy.js
@@ -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();
@@ -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"]')
diff --git a/docs/dashboard/install-guide/config.md b/docs/dashboard/install-guide/config.md
index 9b049202..d1fa46ed 100644
--- a/docs/dashboard/install-guide/config.md
+++ b/docs/dashboard/install-guide/config.md
@@ -333,6 +333,30 @@ skills.websocket.relayHost=
skills.websocket.relayPort=
```
+### Matomo Integration
+
+SkillTree can be configured to integrate with , 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:
+skills.config.ui.matomoSiteId:
+```
+
+### 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
diff --git a/docs/dashboard/user-guide/README.md b/docs/dashboard/user-guide/README.md
index a7e6b24a..fcf97dbe 100644
--- a/docs/dashboard/user-guide/README.md
+++ b/docs/dashboard/user-guide/README.md
@@ -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.
diff --git a/docs/dashboard/user-guide/icons.md b/docs/dashboard/user-guide/icons.md
index bf82e349..11a85462 100644
--- a/docs/dashboard/user-guide/icons.md
+++ b/docs/dashboard/user-guide/icons.md
@@ -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:
diff --git a/docs/dashboard/user-guide/projects.md b/docs/dashboard/user-guide/projects.md
index e8c49a40..dd4200e1 100644
--- a/docs/dashboard/user-guide/projects.md
+++ b/docs/dashboard/user-guide/projects.md
@@ -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 `` 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., `` 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.
+

diff --git a/docs/dashboard/user-guide/screenshots/Component-Private-Project-Invite.png b/docs/dashboard/user-guide/screenshots/Component-Private-Project-Invite.png
index eb20b31d..26650db6 100644
Binary files a/docs/dashboard/user-guide/screenshots/Component-Private-Project-Invite.png and b/docs/dashboard/user-guide/screenshots/Component-Private-Project-Invite.png differ
diff --git a/docs/dashboard/user-guide/skills.md b/docs/dashboard/user-guide/skills.md
index 6e2b03e6..b13a6c98 100644
--- a/docs/dashboard/user-guide/skills.md
+++ b/docs/dashboard/user-guide/skills.md
@@ -10,19 +10,20 @@ To create a skill, navigate to ``Project -> Subject`` then click on ``Skill +``,

-| Property | Explanation |
-|:---------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Skill Name | Display name of the skill |
-| Skill ID | Skill ID that will be used to report skill events |
-| [Initial Visibility](/dashboard/user-guide/skills.html#skill-creation-lifecycle) | If the skill is initially visible or hidden. Hidden skills will not be visible to trainees effectively keeping the skill in a draft mode until it is ready to be exposed. |
-| Point Increment | Number of points added for each skill event; used in conjunction with the 'Occurrences to Completion' property |
-| Occurrences to Completion | Number of successful occurrences to fully accomplish this skill; used in conjunction with the 'Point Increment' property |
-| [Time Window](/dashboard/user-guide/skills.html#time-window) | Used in conjunction with the 'Max Occurrences Within Window' property; once this Max Occurrences is reached, points will not be incremented until outside of the configured [Time Window](/dashboard/user-guide/skills.html#time-window). When 'Time Window' is disabled skill events are applied immediately."
-| Max Occurrences Within Window | Used in conjunction with the [Time Window](/dashboard/user-guide/skills.html#time-window) property; Once this Max Occurrences is reached, points will not be incremented until outside of the configured [Time Window](/dashboard/user-guide/skills.html#time-window). |
-| [Self Reporting](/dashboard/user-guide/self-reporting.html) | (Optional) When checked Self Reporting is enabled for this skill. The type of ``Approval Queue``, ``Honor System`` or ``Quiz/Survey`` can then be selected. When choosing Approval Queue, you may also choose to require users to submit a justification when self-reporting this skill by selecting the 'Justification Required' check box. When selecting ``Quiz/Survey`` you will also be prompted to pick an existing Quiz or a Survey. Please visit [Self Reporting](/dashboard/user-guide/self-reporting.html) to learn more. |
-| Version | *(Optional)* Utilize [Skills Versioning](/dashboard/user-guide/skills.html#skills-versioning) to support running multiple versions of client software |
-| [Description](/dashboard/user-guide/rich-text-editor.html) | *(Optional)* Description of how to perform this skill. |
-| Help URL/Path | *(Optional)* URL pointing to a help article providing further information about this skill or capability. Please note that this property works in conjunction with the [Root Help Url](/dashboard/user-guide/projects.html#setting-root-help-url) project setting. You can also author external links into the description itself if more than one external resource needs to be linked to. |
+| Property | Explanation |
+|:---------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Skill [Icon](/dashboard/user-guide/icons.html) | Icon associated with the skill to be presented on the training pages |
+| Skill Name | Display name of the skill |
+| Skill ID | Skill ID that will be used to report skill events |
+| [Initial Visibility](/dashboard/user-guide/skills.html#skill-creation-lifecycle) | If the skill is initially visible or hidden. Hidden skills will not be visible to trainees effectively keeping the skill in a draft mode until it is ready to be exposed. |
+| Point Increment | Number of points added for each skill event; used in conjunction with the 'Occurrences to Completion' property |
+| Occurrences to Completion | Number of successful occurrences to fully accomplish this skill; used in conjunction with the 'Point Increment' property |
+| [Time Window](/dashboard/user-guide/skills.html#time-window) | Used in conjunction with the 'Max Occurrences Within Window' property; once this Max Occurrences is reached, points will not be incremented until outside of the configured [Time Window](/dashboard/user-guide/skills.html#time-window). When 'Time Window' is disabled skill events are applied immediately."
+| Max Occurrences Within Window | Used in conjunction with the [Time Window](/dashboard/user-guide/skills.html#time-window) property; Once this Max Occurrences is reached, points will not be incremented until outside of the configured [Time Window](/dashboard/user-guide/skills.html#time-window). |
+| [Self Reporting](/dashboard/user-guide/self-reporting.html) | (Optional) When checked Self Reporting is enabled for this skill. The type of ``Approval Queue``, ``Honor System`` or ``Quiz/Survey`` can then be selected. When choosing Approval Queue, you may also choose to require users to submit a justification when self-reporting this skill by selecting the 'Justification Required' check box. When selecting ``Quiz/Survey`` you will also be prompted to pick an existing Quiz or a Survey. Please visit [Self Reporting](/dashboard/user-guide/self-reporting.html) to learn more. |
+| Version | *(Optional)* Utilize [Skills Versioning](/dashboard/user-guide/skills.html#skills-versioning) to support running multiple versions of client software |
+| [Description](/dashboard/user-guide/rich-text-editor.html) | *(Optional)* Description of how to perform this skill. |
+| Help URL/Path | *(Optional)* URL pointing to a help article providing further information about this skill or capability. Please note that this property works in conjunction with the [Root Help Url](/dashboard/user-guide/projects.html#setting-root-help-url) project setting. You can also author external links into the description itself if more than one external resource needs to be linked to. |
::: tip
To calculate the total points that completion of a particular skill will give a user:
@@ -80,6 +81,45 @@ You can also disable the Time Window property of a Skill, which will force each
- "Repetition is the mother of learning" - use the ``Occurrences to Completion`` property in conjunction with the [Time Window](/dashboard/user-guide/skills.html#time-window) property to balance between requiring repetition of an action and spacing out that repetition (for example, prevent users from spamming an action in one sitting to max out a Skill by setting a Time Window of 1-8 hours)
- Help Url - configure the [Root Help Url](/dashboard/user-guide/projects.html#setting-root-help-url) for the project and then enter a path relative to that root. It will then be an easy change if the location of help articles changes. You can also author external links into the description itself if more than one external resource needs to be linked to.
+``
+
+## Slide Deck
+
+SkillTree enables 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.
+
+You have two methods to add slide decks:
+
+- **SkillTree Hosted:** Upload PDF files directly using the file upload form (Browse button) or via drag-and-drop
+- **Externally Hosted:** Provide a URL to a PDF hosted on an external web server (e.g., https://example.com/slides.pdf)
+
+To set up a slide deck, navigate to `Project -> Subject -> Skill -> Slides` and upload your PDF file.
+
+
+
+To upload slides from your computer, click the Browse button or drag and drop a file into the upload area. For externally
+hosted slides, click "Switch to External Link" and enter the file's URL. Don't forget to click "Save and Preview" to
+save your changes.
+
+A preview will appear in the Preview section once configured.
+
+
+
+The built-in slide viewer offers:
+- Intuitive navigation between slides
+- PDF download capability
+- Full-screen presentation mode
+- Slide resizing (drag the bottom-right corner)
+
+::: tip
+Resize slides by dragging the handle in the bottom-right corner. Click "Save Changes" to apply the new dimensions.
+Trainees can also adjust slide sizes to their preference. These custom settings are automatically saved in the browser's local storage and will override the default dimensions.
+:::
+
+In **full-screen mode**, users can:
+- Navigate using `left`/`right` arrow keys
+- Access navigation controls by hovering near the bottom
+- Exit using the `Escape` key or the exit button in the navigation controls
## Audio/Video
@@ -106,11 +146,6 @@ listened to the entire audio/video clip (>96%). This is done using
the [Self Reporting](/dashboard/user-guide/self-reporting.html) mechanism, which can be easily selected by editing the
skill and choosing the `Audio/Video` Self Reporting type.
-::: tip
-Note that self-reporting via audio/video playback completes the skill. When the `Audio/Video` type is selected,
-`Occurrences to Completion` is set to `1` and cannot be changed.
-:::
-
Additionally, if a transcript is configured for the audio/video, users can also earn the skill by reading the transcript
and self-certifying to receive credit.
diff --git a/docs/overview/README.md b/docs/overview/README.md
index 49cc420e..b8016878 100644
--- a/docs/overview/README.md
+++ b/docs/overview/README.md
@@ -81,6 +81,8 @@ For example:
- **Skills Catalog** - skills can be exported to the Catalog which makes those skills available for re-use in other projects
- **Knowledge Checks** - requires successful passage of a quiz in order to earn the skill and its points
- **Surveys** - method to get feedback about that skill or collect some pieces of important data related to the skill
+- **Slides** - 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.
+- **Video/Audio** - SkillTree allows embedding videos or audios clips into skill descriptions and quiz questions, with optional configuration settings to achieve the skill upon full playback.
- **Learning Path** - lay out a learning path for users to complete skills in a specified order
- **Metrics** - corporate visibility of expertise and knowledge gaps
diff --git a/docs/release-notes/skills-service.md b/docs/release-notes/skills-service.md
index ad6c66d5..c43ac4b5 100644
--- a/docs/release-notes/skills-service.md
+++ b/docs/release-notes/skills-service.md
@@ -8,6 +8,32 @@ To obtain deployable artifacts please visit [Distributions](/dashboard/install-g
+## 3.8.0
+
+- Implemented ability to upload and manage [PDF slide decks](/dashboard/user-guide/skills.html#slide-deck) per skill, which are presented [during training](/training-participation/take-training.html#slides) for that specific skill.
+- Implemented the ability to create [Global Badges](/dashboard/user-guide/global-badges.html) that can include skills and levels from any project for which you have Admin access
+- Added support for customizing [icons](/dashboard/user-guide/icons.html) for individual skills, similar to subjects and badges.
+- Added ability to [require videos](/dashboard/user-guide/skills.html#achieving-skills-through-audio-video-playback) to be played multiple times for completion
+- Implemented Matomo Analytics support to the SkillTree dashboard
+- Added [CC field](/dashboard/user-guide/projects.html#invite-users) for project invites
+- Added Last Updated column to Skills Table
+- Updated locked history chart appearance and wording
+- Improved Dashboard loading performance by optimizing JS resource chunking and loading
+- Upgraded Spring Boot
+- Bug Fixes
+
+## 3.7.3
+
+- Bug Fixes
+
+## 3.7.2
+
+- Bug Fixes
+
+## 3.7.3
+
+- Bug Fixes
+
## 3.7.0
- [Training-wide Search](/training-participation/take-training.html#training-wide-search) - Training-wide search functionality that enables users to quickly find and navigate to any skill, subject, or badge by name
diff --git a/docs/screenshots/admin/component-slides-config-empty.png b/docs/screenshots/admin/component-slides-config-empty.png
new file mode 100644
index 00000000..a9678207
Binary files /dev/null and b/docs/screenshots/admin/component-slides-config-empty.png differ
diff --git a/docs/screenshots/admin/component-slides-config-with-slides.png b/docs/screenshots/admin/component-slides-config-with-slides.png
new file mode 100644
index 00000000..9d5d9a0b
Binary files /dev/null and b/docs/screenshots/admin/component-slides-config-with-slides.png differ
diff --git a/docs/screenshots/admin/modal-skills-new_skill.png b/docs/screenshots/admin/modal-skills-new_skill.png
index a58dc336..e2b69ad4 100644
Binary files a/docs/screenshots/admin/modal-skills-new_skill.png and b/docs/screenshots/admin/modal-skills-new_skill.png differ
diff --git a/docs/training-participation/take-training.md b/docs/training-participation/take-training.md
index bc0c3fdf..7ae1b063 100644
--- a/docs/training-participation/take-training.md
+++ b/docs/training-participation/take-training.md
@@ -171,6 +171,7 @@ Additional optional elements may appear in the skill details, depending on the s
- **Self-Reporting**: Instructions for self-reporting progress and achieving consecutive completions (see [Self Reporting](/training-participation/take-training.html#self-reporting) for more details)
- **Skill Tags**: Categories assigned by the training creator
- **Prerequisites**: A list of required skills and a visual diagram of their relationships
+- **Slides**: Optional presentations to further enhance training materials
- **Enhanced Media**: Optional video or audio content to enrich the learning experience
- **Expiration**: A clear deadline indicating when the skill will expire (if applicable)
@@ -229,6 +230,25 @@ Click the **Complete Survey** button to get started. Be sure to review the skill
Please visit [Quizzes and Surveys](#quizzes-and-surveys) section for further details on how to take a survey.
+### Slides
+
+Some skills may include additional presentation materials in the form of slides, which appear above the skill's description.
+
+The built-in slide viewer offers:
+- **Intuitive navigation between slides** - Use the previous and next buttons at the bottom of the slide viewer
+- **PDF download capability** - Access the download button at the bottom right of the slide viewer
+- **Full-screen presentation mode** - Click the full-screen button at the top right of the slide viewer
+- **Slide resizing** - Drag the bottom-right corner handle that appears on hover
+
+::: tip
+Resize the slides by dragging the bottom-right corner. Your preferred size will be saved in your browser's local storage.
+:::
+
+In **full-screen mode**:
+- Navigate using `left`/`right` arrow keys
+- Access navigation controls by hovering near the bottom
+- Exit using the `Escape` key or the exit button in the navigation controls
+
### Audio/Video
To earn points for this audio/video-based skill, you must watch or listen to the entire clip. The video/audio player is located above the skill's description.