Personmanagement

Granting resources to a Subadministrator

As soon as a person is given the role of a "Subadministrator", the administrator can grant him/her with manageable resources . This defines the persons and courses that the Subadministrator will be able to see and manage in the Admin Panel.

img

Persons

The manageable resources organisation unit and jobdescription can be understood as being filters for the person table. This means that the Subadministrator can only manage those persons which would pass the set filter (for organisation unit and jobdescription). It is important to understand that both filters work within an "AND" logic.

Within his manageable resources, the subadministrator can see and manage persons with equal or higher role, so that he can create course assignments, generate reports etc; however, he can only create persons with the lower ranked role "learner".

Courses

The subadministrator can only assign those courses that have the topic  which is granted to him as a manageable resource

SubadministratorRessources

As soon as a person is given the role of a "Subadministrator", the administrator can grant him/her with manageable resources . This defines the persons and courses that the Subadministrator will be able to see and manage in the Admin Panel.

img

Persons

The manageable resources organisation unit and jobdescription can be understood as being filters for the person table. This means that the Subadministrator can only manage those persons which would pass the set filter (for organisation unit and jobdescription). It is important to understand that both filters work within an "AND" logic.

Within his manageable resources, the subadministrator can see and manage persons with equal or higher role, so that he can create course assignments, generate reports etc; however, he can only create persons with the lower ranked role "learner".

Courses

The subadministrator can only assign those courses that have the topic  which is granted to him as a manageable resource

Create a new person

Administrators (and subadministrators within their manageable resources) can create new persons manually. In the Administration panel > Persons, click on the New person button.

The minimal information needed for the succesful creation of a person entry are:

Additionally, you can upload a profile picture (jpg, png), set an employee ID, the language in which the person will see the learning platform, the person role and frequency of notifications receival (social mails only) and a date of birth which would appear on certificates obtained by this person.

img

Deputy

Subadministrators can define their deputies, who can thereby assume their role as long as they are defined as such. This prevents complicated ressource allocation plans when a substitution is needed and allows for ex. editing the course planner of another subadmin.

Under the More menu, an Administrator or Subadministrator kann reach the area Deputy roles.

"My deputies " tab:

When a deputy is no longer needed, he can be removed from this section also.

img

As soon as you are defined as a deputy, after you log into your Admin Panel > More > Deputy roles  by simply clicking on the person's name you can enter the deputy role

img

The successful role switch can be confirmed by these 3 elements:

  1. In the header you can now see the message "Logged in as Deputy"
  2. The button "Leave admin panel" has changed to "Leave deputy role"
  3. Immediately after entering the deputy role, you are redirected to the Persons overview page, where all persons defined by the manageable resources of the subadministrator can be seen and managed

img

Detailed person view

Once you select a person from the Person administration panel, you can have a quick overview over the most important data in the Overview panel, including number of assigned courses, number of published posts, last login data and a quick glance over the status of the person, like in the following example:

img

In the Personal information panel you can view and edit personal data of the person, from name to organisational unit or jobdescription, with a few special options:

Email notification setting affects the frequency of the social notifications only. Course assignments and Welcome and Reminder emails from the course planer will not be affected by this setting.

img

The Certificates panel shows a listing of all certificates obtained or imported for this particular person.

Under Assigned courses, you can either display a listing of all courses under the All panel, or you can access a filtered view of the courses by status in the panels Being processed, Not started, Completed, Failed, Expired or Unpaid (which applies only for chargeable courses).

Under the Actions dropdown in these course panels you can chose from several options:

img

The detailed person view panel for courses allows you to delete course assignments for the person, to assign new courses for him/her, but also to generate the available reports for the courses taken by this person:

img

Access rights by role

Access to Admin Panel Learner Subadministrator without manageable resources Subadministrator with manageable resources Administrator/System administrator
Access to the Admin Panel (generally) NOT GRANTED ALLOWED ALLOWED ALLOWED
Access to the Admin Panel, including Group section NOT GRANTED NOT GRANTED NOT GRANTED ALLOWED
Access to person import NOT GRANTED NOT GRANTED NOT GRANTED ALLOWED
Access to course import NOT GRANTED NOT GRANTED NOT GRANTED ALLOWED
Managing courses NOT GRANTED NOT GRANTED Within manageable resources ALLOWED
Creating course plans (adding Persons, Courses, Rules) NOT GRANTED NOT GRANTED Within manageable resources ALLOWED
Deleting course plans NOT GRANTED NOT GRANTED Within manageable resources ALLOWED
Managing persons (create, archive, delete) NOT GRANTED NOT GRANTED Within manageable resources ALLOWED
Managing property groups (topics, organisation units, job descriptions) NOT GRANTED NOT GRANTED NOT GRANTED ALLOWED
Managing keywords NOT GRANTED ALLOWED ALLOWED ALLOWED

Person status (activated, archived, deactivated)

Persons within Swiss Learning Hub can have 3 statuses: activated, deactivated, archived.

Activated

Deactivated

Archived

How to change the status of a person

There are 2 main ways of doing this:

  1. Either in the Person Administration, list view: when clicking on the Function button you will have the options to Archive / Activate / Deactivate one or more persons. Chosing any of the options will allow you to select the person(s) you want to apply the change for and then apply the bulk action.

  2. Or in the Person detail view, to change the status of a single person

Deleting a person

Deleting persons also deletes all person data and learning progress information. If you need to keep the data, but would like to avoid seeing the person in all processes in the Admin panel, you can opt for archiving the person.

Deleting a person works from 2 views:

  1. In the Admin panel > Persons, click the Functions button, select Delete, select the desired person and click on button Delete. Once you confirm by clicking OK in the pop-up, the person will be removed from the system.
    img
  2. Or you can select the person from the Person listing, in its detail page click on the Functions button and select Delete person. Again, with the confirmatory click on OK, the person will be removed from the system
    img

Persons export

From the Person administration you can export persons into a CSV file. In the Administration panel > Persons > click on the Functions button and select the option Export

img

Select the persons you wish to export and then click on the Export button. In the following pop-up you can select the language & coding preferences (MS-ANSI or UTF-8) for your file. 

img

Once you select your preferences from the dropdowns, click on Continue and select Download in the following dialog, saving the file to your preferred location.

img

Of course you can make use of the extended search to filter the persons you export, which is our recommended procedure. Take a look at an example below:

Persons import

From the Person administration you can import persons into the system with a CSV file. In the Administration panel > Persons > click on the Functions button and select the option Import

Please note that the import of CSV files is handled very restrictively. The CSV file must exactly match the specification, see specification-csv-for-person-import. 

img 

Besides selecting the correct csv file for the upload, you can now decide on 2 issues:

img

When you select the appropriate radiobuttons and via "Select" chose the correct csv file, you can click on Continue.

Depending on the size of your file, the import can take a while, which you can see in the progress bar displayed during upload.

img

However, once the import is done, you will be shown a confirmation pop-up summarizing the import information that is saved in the database (name, source of error, ...)

img

Archived persons:  Counts the persons whose status has been changed to "archived".
- Deactivated persons: Counts the persons whose status has been changed to "deactivated".
- Activated persons: Counts the persons whose status has been changed to "activated".
- Error: Counts the produced errors through the import.
- New persons: Counts the persons who have been newly created in the system by the import.
- Job description: Counts the job descriptions which have been newly created in the system by the import.
Job descriptions will be created even if the import failed or has been canceled.
- Organisational units: Counts the organisational units which have been newly created in the system by the import.
Organisational units will be created even if the import failed or has been canceled.
- Updated persons: Counts the imported values. It is not checked whether the imported values existed in the system before, which means that the existing values might be overwritten by identical values. The decisive factor is the total number of values, not only the "changed" values.

Specification CSV for Person Import

";" must be used for field separation.

Description Config Expected
Header - The easiest way to get a correct csv template is by first exporting a person. The csv file generated by this export can then be adjusted and used as an import csv.The header of a csv file must look as follows: img It is crucial that you do not change the column order. If you move a column to a different place, if you delete it or add a new column to the table, you cannot import any data anymore. Only data below the header (the 4 rows shown above) will be considered for the import. Should there be data above these rows, they will be ignored.
date - The date is editable and currently of no importance.
language - This is a mandatory field and must receive a value from the 6 available options: "de", "fr", "en", "it", "es", "zh". The entered language defines the language the system uses to double-check or import the properties (organisational units / activities).
encoding "ansi" - Defines the encoding (allows the unambiguous assignment of characters – must not be changed)
person-id - System ID of the user. Is automatically assigned by the system and must not be changed. Is used to identify a person when the related data is updated.
status - enabled
archived
disabled
name - Mandatory field
prename - Mandatory field
username Optional identification Mandatory field
password - New person:
  • if a password is set here, the user can login with that
  • if no password is set here (recommended way) the user can set himself a new password with the password forgotten flow during login
Updating existing persons:
  • The password of an existing user remains untouched in the database, if the respective field is left empty on the import list.
  • Passwords are updated by entering a new password into the import list. The old password will be replaced by the new one.
email Optional identification Mandatory field. The system checks whether or not the entry is an e-mail address.
personal-id Optional identification - There is no defined minimal length
- The maximal length is 255 characters
- Not to be mistaken for "person-id"
- Must not be unique
role - Following values are valid for this mandatory field:
- learner
- default-subadministrator
- administrator
Roles of a lower level cannot import or change roles of higher levels.
language - Mandatory field. Existing languages: de, en, fr, it, es, zh
orgunit, jobdescription** - - Organisation units / activities are not required (caution: for empty units / activities can not be searched).
- If an organisation unit / activity is on the list, but not yet in the system, it will be newly created.
- If a new organisation unit / activity is on the list and the system contains a different one, the existing organisation unit / activity will be removed and the new one added to the system. That is, the organisation unit / activity will be exchanged by the import.
- If you wish to add a second organisation unit / activity to the system, the old organisation unit / activity must also be displayed on the list. To enter multiple organisation units / activities use the character " | " to separate them from each other.
- If you wish to enter a path of an organisation unit / activity in the system, use the character " / " .
is_deletable - Defines whether the new person will be created with the setting "Can be deleted yes/no". There are the following settings for this mandatory field:
0 = No (person can not be deleted)
1 = Yes (person can be deleted)
change_password - Defines whether the new person will be created with the setting "Change password yes/no". There are the following settings for this mandatory field:
0 = No (person must not change her password at the next log-in)
1 = Yes (person must change her password at the next log-in)
empty = no changes
The field "Change_password" is empty in the export.

System configuration:

The Systemadmin configures both standard password generation and identification options under:

Default php in the "person_import" parameter.

 Information about translations of organisation units/jobdescriptions (** in table)

*   An organisation unit / activity consists of an identifier for which there may be translations.
*   If required, translations must be entered in the system in the properties administration.
*   If there are no translations, the name of the identifier is used.
*   Organisation units are displayed with path and translation in the selected export language. Translation changes can thus be properly updated with the import.  
    This is only done in the selected export language.  
  

Edit existing person

The Person ID clearly identifies a person. If the ID is already included in the system, the existing person data is overwritten by the new data from the list. If the ID is not yet in the system or if the field is empty, a person can be identified with three more fields.
Identification options are checked according to the following priorities:

1.  "person\_id" (defintion see "Specification CSV Content") 
2.  "personal\_id" (defintion see "Specification CSV Content") 
3.  "email" (defintion see "Specification CSV Content") 
4.  "username" (defintion see "Specification CSV Content")   
  

Process of error handling:


Error messages

if (error\_msg === 'orgunits\_not\_accepted') {
                    validatorData.headline = auxiliary.gt('Dateiüberprüfung fehlgeschlagen');
                    validatorData.text = auxiliary.gt('Organisationseinheiten nicht akzeptiert!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'too\_many\_header\_lines') {
                    validatorData.headline = auxiliary.gt('Dateiüberprüfung fehlgeschlagen');
                    validatorData.text = auxiliary.gt('Falsche Anzahl Zeilen im Tabellen-Header!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'header\_fields\_invalide') {
                    validatorData.headline = auxiliary.gt('Dateiüberprüfung fehlgeschlagen');
                    validatorData.text = auxiliary.gt('Ungültige Felder im Tabellen-Header!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'no\_person\_header\_found') {
                    validatorData.headline = auxiliary.gt('Dateiüberprüfung fehlgeschlagen');
                    validatorData.text = auxiliary.gt('Bitte überprüfen Sie den Tabellen-Header!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'no\_valide\_person\_found') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Keine gültigen Personen gefunden!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'wrong\_person\_status') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Fehlerhafter Personenstatus!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'wrong\_person\_username') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Fehlerhafter Benutzername!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'wrong\_person\_role') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Fehlerhafte Benutzerrolle');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'wrong\_person\_personal\_id') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Fehlerhafte Personalnummer');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'wrong\_person\_language') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Fehlerhafte Benutzersprache');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'wrong\_person\_is\_deletable') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Nicht erlaubte Einträge in "Ist löschbar"!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'duplicate\_person\_id') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Doppelte Personen-ID!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'empty\_username') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Benutzername ist leer!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'duplicate\_username') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Doppelter Benutzername!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'duplicate\_personal\_id') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Doppelte Personalnummer!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'jobdescriptions\_not\_accepted') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Nicht erlaubte Einträge in "Tätigkeiten"!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'orgunits\_not\_accepted') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Nicht erlaubte Einträge in "Organisationseinheiten"!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }
                if (error\_msg === 'role\_not\_accepted') {
                    validatorData.headline = auxiliary.gt('Fehler');
                    validatorData.text = auxiliary.gt('Nicht erlaubte Einträge in "Benutzerrollen"!');
                    validatorResult.push(validatorData);
                    validatorData = \[\];
                }